Lær Linux-systemrevisjon med Auditd Tool på CentOS/RHEL


Systemrevisjon refererer ganske enkelt til en dybdeanalyse av et spesifikt målrettet system: en revisjon består av en undersøkelse av de ulike delene som omfatter dette systemet, med kritisk vurdering (og testing om nødvendig) på forskjellige interesseområder.

Et av de kritiske undersystemene på RHEL/CentOS Linux-revisjonssystemet kjent som auditd. Den implementerer en måte å spore sikkerhetsrelevant informasjon på et system: den bruker forhåndskonfigurerte regler for å samle inn enorme mengder informasjon om hendelser som skjer på systemet, og registrerer dem i en loggfil, og oppretter dermed en revisjonsprøve.

Den kan registrere informasjon som dato og klokkeslett, type og resultat av en hendelse; brukere som forårsaket hendelsen, eventuelle endringer gjort i filer/databaser; bruk av systemautentiseringsmekanismer, som PAM, LDAP, SSH og andre.

Auditd registrerer også eventuelle endringer som er gjort i revisjonskonfigurasjonsfilene eller forsøk på å få tilgang til revisjonsloggfiler, og alle forsøk på å importere eller eksportere informasjon til eller fra systemet pluss mye annen sikkerhetsrelatert informasjon.

  1. Det krever ingen eksterne programmer eller prosesser for å kjøre på et system, noe som gjør det selvhjulpen.
  2. Den er svært konfigurerbar og lar deg derfor se alle systemoperasjoner du ønsker.
  3. Det hjelper med å oppdage eller analysere potensielle kompromitteringer av et system.
  4. Det er i stand til å fungere som et uavhengig deteksjonssystem.
  5. Den kan fungere med inntrengningsdeteksjonssystemer for å aktivere inntrengningsdeteksjon.
  6. Det er et viktig verktøy for revisjon av kriminaltekniske undersøkelser.

Revisjonssystemet har to kjernekomponenter, nemlig:

  • brukerplassapplikasjoner og verktøy/verktøy, og
  • systemanropsbehandling på kjernesiden – dette aksepterer systemanrop fra brukerromsapplikasjoner og sender dem gjennom tre typer filtre, nemlig: bruker, oppgave, avslutt eller ekskluder.

Den viktigste delen er brukerromsrevisjonsdaemonen (auditd) som samler informasjon basert på forhåndskonfigurerte regler, fra kjernen og genererer oppføringer i en loggfil: standardloggen er /var/log/audit/audit.log.

I tillegg er audispd (audit dispatcher daemon) en hendelsesmultiplekser som samhandler med auditd og sender hendelser til andre programmer som ønsker å utføre sanntidshendelsesbehandling.

Det finnes en rekke brukerromsverktøy for å administrere og hente informasjon fra revisjonssystemet:

  • auditctl – et verktøy for å kontrollere kjernens revisjonssystem.
  • ausearch – et verktøy for å søke i revisjonsloggfiler for spesifikke hendelser.
  • aureport – et verktøy for å lage rapporter om registrerte hendelser.

Hvordan installere og konfigurere revisjonsverktøy i RHEL/CentOS/Fedora

Sørg først for å bekrefte at revisjonsverktøyet er installert på systemet ditt ved å bruke grep-verktøyet som følger:

# rpm -qa | grep audit

Hvis du ikke har installert pakkene ovenfor, kjør denne kommandoen som root-bruker for å installere dem.

# yum install audit

Deretter, sjekk om auditd er aktivert og kjører, utfør systemctl-kommandoene nedenfor på terminalen.

--------------- On CentOS/RHEL 7 --------------- 
# systemctl is-enabled auditd
# systemctl status auditd
# systemctl start auditd   [Start]
# systemctl enable auditd  [Enable]

--------------- On CentOS/RHEL 6 --------------- 
# service auditd status
# service auditd start     [Start]
# chkconfig auditd on      [Enable]

Nå skal vi se hvordan du konfigurerer auditd ved å bruke hovedkonfigurasjonsfilen /etc/audit/auditd.conf. Parametrene her lar deg kontrollere hvordan tjenesten kjører, for eksempel å definere plasseringen av loggfilen, maksimalt antall loggfiler, loggformat, hvordan du skal håndtere fulle disker, loggrotasjon og mange flere alternativer.

# vi /etc/audit/auditd.conf

Fra eksempelutgangen nedenfor er parametrene selvforklarende.

Forstå revisjonsregler

Som vi nevnte tidligere, bruker auditd regler for å samle spesifikk informasjon fra kjernen. Disse reglene er i utgangspunktet auditctl-alternativer (se man-side) som du kan forhåndskonfigurere regler i filen /etc/audit/rules.d/audit.rules (på CentOS 6, bruk filen /etc/audit/audit.rules) , slik at de lastes ved oppstart.

Det er tre typer revisjonsregler du kan definere:

  • Kontrollregler – disse gjør det mulig å endre revisjonssystemets oppførsel og noen av dets konfigurasjoner.
  • Filsystemregler (også referert til som filovervåking) – muliggjør revisjon av tilgang til en bestemt fil eller katalog.
  • Systemanropsregler – tillater logging av systemanrop utført av et hvilket som helst program.

Åpne nå hovedkonfigurasjonsfilen for redigering:

# vi /etc/audit/rules.d/audit.rules

Merk at den første delen av denne filen må inneholde kontrollregler. Legg deretter til revisjonsreglene dine (filovervåking og systemanropsregler) i den midtre delen, og til slutt inneholder den siste delen uforanderlighetsinnstillinger som også er kontrollregler.

-D		#removes all previous rules
-b  3074	#define buffer size
-f 4		#panic on failure 
-r 120		#create at most 120 audit messages per second

Du kan definere filovervåking ved å bruke denne syntaksen:

-w /path/to/file/or/directory -p permissions -k key_name

Hvor alternativet:

  • w – brukes til å spesifisere en fil eller katalog som skal overvåkes.
  • p – tillatelser som skal logges, r – for lesetilgang, w – for skrivetilgang, x – for utføringstilgang og en – for endring av fil- eller direktørattributt.
  • -k – lar deg angi en valgfri streng for å identifisere hvilken regel (eller et sett med regler) som opprettet en spesifikk loggoppføring.

Disse reglene tillater revisjon for å se hendelser som gjør endringer i disse kritiske systemfilene.

-w /etc/passwd -p wa -k passwd_changes
-w /etc/group -p wa -k group_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/sudoers -p wa -k sudoers_changes

Du kan angi en systemanropsregel ved å bruke skjemaet nedenfor:

-a action,filter -S system_call -F field=value -k key_name

hvor:

  • handling – har to mulige verdier: alltid eller aldri.
  • filter – spesifiserer et filter som samsvarer med kjerneregelen (oppgave, exit, bruker og ekskludering) som brukes på hendelsen.
  • systemanrop – navn på systemanrop.
  • felt – spesifiserer tilleggsalternativer som arkitektur, PID, GID osv. for å endre regel.

Her er noen regler du kan definere.

-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
-a always,exit -S sethostname -S setdomainname -k system_locale

Til slutt legger du til uforanderlighetsinnstillingene på slutten av filen, for eksempel:

-e 1	#enable auditing
-e 2	#make the configuration immutable -- reboot is required to change audit rules

Hvordan sette revisjonsregler ved hjelp av auditctl-verktøyet

Alternativt kan du sende alternativene til auditd mens den kjører, ved å bruke auditctl som i de følgende eksemplene. Disse kommandoene kan overstyre regler i konfigurasjonsfilen.

For å liste opp alle gjeldende revisjonsregler, send -l-flagget:

# auditctl -l

Prøv deretter å legge til noen regler:

# auditctl -w /etc/passwd -p wa -k passwd_changes
# auditctl -w /etc/group -p wa -k group_changes
# auditctl -w /etc/sudoers -p wa -k sudoers_changes
# auditctl -l

Alle revisjonsmeldinger er registrert i filen /var/log/audit/audit.log som standard. For å forstå loggoppføringsformatet laster vi inn en regel og sjekker loggoppføringen som er generert etter en hendelse som samsvarer med regelen.

Forutsatt at vi har en hemmelig sikkerhetskopikatalog, vil denne revisjonsregelen logge alle forsøk på å få tilgang til eller endre denne katalogen:

# auditctl -w /backups/secret_files/ -p rwa -k secret_backup

Nå, bruk en annen systemkonto, prøv å flytte inn i katalogen ovenfor og kjør ls-kommandoen:

$ cd /backups/secret_files/
$ ls

Loggoppføringen vil se slik ut.

Hendelsen ovenfor består av tre typer revisjonsjournaler. Den første er type=SYSCALL:

type=SYSCALL msg=audit(1505784331.849:444): arch=c000003e syscall=257 success=yes exit=3 a0=ffffffffffffff9c a1=8ad5c0 a2=90800 a3=0 items=1 ppid=2191 pid=2680 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts1 ses=3 comm="ls" exe="/usr/bin/ls" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="secret_backup"

Den andre er type=CWD.

type=CWD msg=audit(1505784331.849:444):  cwd="/backups/secret_files"

Og den siste er type=PATH:

type=PATH msg=audit(1505784331.849:444): item=0 name="." inode=261635 dev=08:01 mode=040755 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:default_t:s0 objtype=NORMAL

Du kan finne en fullstendig liste over alle hendelsesfeltene (som msg, arch, ses osv..) og deres betydning i Revisjonssystemreferansen.

Det er alt for nå. I den neste artikkelen vil vi se på hvordan du bruker ausearch til å søke etter revisjonsloggfiler: vi vil forklare hvordan du søker etter spesifikk informasjon fra revisjonsloggene. Hvis du har spørsmål, vennligst kontakt oss via kommentarfeltet nedenfor.