auditd vastaa kysymyksiin, jotka nousevat esiin vasta jälkeenpäin: kuka muutti tätä tiedostoa, milloin tämä käyttäjä luotiin, mistä tämä prosessi käynnistettiin. Mikään muu työkalu ei niihin vastaa — sovelluslokeissa noita tietoja ei ole, ja komentohistoriaa muokkaa se, joka sen jätti.

Vaikeus on siinä, ettei paketin asentaminen yksin anna mitään. Oletussääntöjä ei käytännössä ole, lokia kirjoitetaan mutta se on sisällöltään tyhjä, ja se huomataan pahimmalla mahdollisella hetkellä: kun tiedot tarvitaan eikä niitä ole.

Asennus

sudo apt install auditd audispd-plugins
sudo systemctl status auditd

Yksi erikoisuus: joissakin versioissa auditd ei käynnisty uudelleen komennolla systemctl restart — palvelua ohjaa oma komentonsa. Säännöt ladataan uudelleen näin:

sudo augenrules --load
sudo auditctl -l

Toinen komento näyttää, mikä on todella ladattu. Siihen pitää luottaa, ei tiedostojen sisältöön.

Sääntökokoelma

Säännöt laitetaan hakemistoon /etc/audit/rules.d/ omana tiedostonaan. Alla vähimmäiskokoelma, joka maksaa itsensä takaisin: se vastaa useimpiin tapahtuman aikaisiin kysymyksiin eikä täytä levyä.

sudo tee /etc/audit/rules.d/50-baseline.rules <<'EOF'
## Käyttäjät ja oikeudet
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/sudoers -p wa -k privileges
-w /etc/sudoers.d/ -p wa -k privileges

## SSH-pääsy
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /root/.ssh/ -p wa -k ssh_keys

## Ajastetut tehtävät
-w /etc/crontab -p wa -k cron
-w /etc/cron.d/ -p wa -k cron
-w /var/spool/cron/ -p wa -k cron

## Ytimen moduulit
-w /sbin/insmod -p x -k modules
-w /sbin/modprobe -p x -k modules
-a always,exit -F arch=b64 -S init_module -S delete_module -k modules

## sudon ja su:n käyttö
-w /usr/bin/sudo -p x -k privileged
-w /bin/su -p x -k privileged
EOF
sudo augenrules --load

Syntaksi on lyhyt: -w on valvottava polku, -p wa tarkoittaa reagointia kirjoitukseen ja määritemuutokseen, -p x suoritukseen, ja -k on avain, jolla myöhemmin haetaan. Juuri avaimet ovat suurin mukavuus: ilman niitä lokista hakemisesta tulee gigatavun tekstin selaamista.

Mitä kokoelmassa ei ole ja miksi

Oppaat ehdottavat usein kaikkien execve-kutsujen tallentamista — siis jokaisen ohjelman jokaista käynnistystä. Houkutus on ymmärrettävä: täydellinen kuva kaikista toimista. Käytännössä se tuottaa tuotantopalvelimella satoja megatavuja vuorokaudessa, syö huomattavan osan suorittimesta ja johtaa siihen, että lokia joudutaan karsimaan ennen kuin sitä tarvitaan. Jos tuo tarkkuustaso on välttämätön, kytke se päälle kohdennetusti — yhdelle käyttäjälle tai tutkinnan ajaksi.

Sama koskee sivuston hakemiston valvontaa: sinne kirjoitetaan keskeytyksettä, ja sääntö muuttaa lokin merkityksettömien tapahtumien virraksi.

Lukeminen

Haku avaimella, numerotunnukset niminä:

sudo ausearch -k identity -i
sudo ausearch -k privileges -i -ts today

Valitsin -i on välttämätön luettavuuden takia: ilman sitä näet numeroita käyttäjänimien ja järjestelmäkutsujen sijaan. -ts rajaa ajanjakson (today, recent tai tietty päivämäärä).

Yhteenveto ajanjaksolta:

sudo aureport --summary -i
sudo aureport --auth -i --failed

Tapahtumamerkinnässä kolme kenttää on kiinnostavia: auid — istunnon aloittaneen käyttäjän tunnus, uid — henkilöllisyys, jolla toimi tehtiin, ja exe — ohjelma, joka sen teki. Ero auid:n ja uid:n välillä on vastaus kysymykseen ”kuka oikeastaan tuli rootiksi”: uid=0 tietyn henkilön auid-arvolla osoittaa vastuullisen yksiselitteisesti, esiintyipä hän istunnon aikana kenenä tahansa.

Levy

Kokoasetukset ovat tiedostossa /etc/audit/auditd.conf:

max_log_file = 50
num_logs = 5
max_log_file_action = ROTATE
space_left = 500
space_left_action = SYSLOG

Katso erikseen asetusta disk_full_action. Joissakin kokoonpanoissa oletusarvona on järjestelmän pysäyttäminen levyn täyttyessä — käyttäytyminen, joka on perusteltu auditointivaatimusten koneilla ja täysin väärässä paikassa verkkopalvelimella. Tuo arvo on tarkistettava ennen kuin levy täyttyy.

Muuttumattomien sääntöjen tila

Rivi -e 2 sääntötiedoston lopussa kieltää sääntöjen muuttamisen uudelleenkäynnistykseen asti — myös siltä, joka on saanut rootin. Se nostaa lokin arvoa merkittävästi: hyökkääjä ei voi kytkeä valvontaa pois käynnistämättä konetta uudelleen, ja uudelleenkäynnistys on itsessään havaittava.

Kääntöpuoli on ilmeinen: et voi myöskään itse muuttaa sääntöjäsi ilman uudelleenkäynnistystä. Se kannattaa ottaa käyttöön, kun kokoelma on vakiintunut ja olet elänyt sen kanssa kuukauden.

Miksi tämä tavallisella palvelimella

auditd ei estä mitään. Sen arvo näkyy täsmälleen kerran — kun tapahtumaketju pitää rekonstruoida ja tiedot joko ovat tai eivät ole. Niitä ei voi kerätä takautuvasti, ja siksi sääntökokoelma luodaan etukäteen ja jätetään sitten rauhaan.

Käytännön merkki siitä, että kokoelma on oikea: sääntölista ei ole tyhjä, loki ei kasva hallitsemattomasti, ja tapahtumat avaimilla identity ja privileges ilmestyvät harvoin ja selittyvät kaikki. Miltä se näyttää yhdellä sivulla, näkyy alla olevassa esittelyssä.