Cover
Inizia ora gratuitamente LSS - Lecture VIIIb - Linux Auditing.pdf
Summary
# auditd voor gedetailleerde logging
Auditd is een gedetailleerd en fraudebestendig logmechanisme voor het identificeren van specifieke acties op een Linux-systeem, essentieel voor forensische analyse na een beveiligingsincident [3](#page=3).
### 1.1 Implementatie en componenten
De implementatie van auditd omvat de `auditd` daemon zelf, een `systemd` service genaamd `auditd.service`, en gebruikershulpprogramma's zoals `auditctl`. De logbestanden worden opgeslagen in `/var/log/audit/audit.log` en de configuratie wordt beheerd via `/etc/audit/auditd.conf` [4](#page=4).
#### 1.1.1 Systeemdienst en configuratie
De `auditd.service` is een `systemd` unit die verantwoordelijk is voor het beheer van de auditd daemon. De configuratie in `/etc/audit/auditd.conf` regelt diverse aspecten, waaronder de locatie van het logbestand, logrotatie, monitoring van schijfruimte, foutafhandeling en remote logging [5](#page=5) [6](#page=6).
> **Tip:** Op Debian-systemen is auditd niet standaard geïnstalleerd, terwijl het op RHEL-gebaseerde systemen wel standaard geïnstalleerd en actief is [4](#page=4).
### 1.2 Auditregels
Auditregels bepalen welke systeemactiviteiten worden gelogd. Deze regels kunnen worden weergegeven met `auditctl -l` [7](#page=7).
#### 1.2.1 Het aanmaken van auditregels
Regels worden aangemaakt met het `auditctl` commando. Een voorbeeld is het monitoren van schrijf- en attribuutwijzigingen voor het bestand `/etc/passwd` [8](#page=8).
De syntaxis van `auditctl` omvat verschillende opties:
* `-a always,exit`: Voegt een regel toe die systeemoproepen bij afsluiting monitort [8](#page=8).
* `-F`: Specificeert filters.
* `path=/etc/passwd`: Monitort een specifiek bestand [8](#page=8).
* `arch=b64`: Beperkt de regel tot 64-bit systeemoproepen [8](#page=8).
* `perm=wa`: Filtert op schrijf- (`w`) en attribuutwijzigingen (`a`) [8](#page=8).
* `-k `: Een sleutel (key) om gebeurtenissen in het auditlog te taggen en te filteren. Deze sleutels zijn niet vooraf gedefinieerd en moeten zelf worden bedacht [8](#page=8).
* `-S`: Filtert op het type systeemoproep (alle systeemoproepen indien niet gespecificeerd) [8](#page=8).
Meer voorbeelden zijn te vinden in de `man` pagina van `auditctl` en in `/usr/share/audit/sample-rules/` [9](#page=9).
> **Tip:** Zorg ervoor dat de key-namen descriptief zijn om het later zoeken te vergemakkelijken [8](#page=8).
#### 1.2.2 Persistentie van auditregels
Om auditregels persistent te maken, moeten ze worden opgeslagen in `.rules` bestanden in de map `/etc/audit/rules.d/`. De `augenrules` binary genereert automatisch een `/etc/audit/audit.rules` bestand wanneer de `auditd` service opnieuw wordt geladen, gebaseerd op de regels in deze map [14](#page=14).
> **Tip:** Het `augenrules` script is te vinden in `/usr/lib/systemd/system/auditd.service` [14](#page=14).
### 1.3 Audit gebeurtenissen en analyse
De gegenereerde audit gebeurtenissen worden opgeslagen in het `/var/log/audit/audit.log` bestand. Om deze gebeurtenissen te parsen en te doorzoeken, kan het hulpprogramma `ausearch` worden gebruikt [10](#page=10).
#### 1.3.1 Zoeken naar audit gebeurtenissen
Met `ausearch` kan gezocht worden op de zelf gedefinieerde sleutels (keys), bijvoorbeeld:
* `ausearch -k passwd_monitoring` [10](#page=10).
* De optie `-i` kan worden gebruikt voor interpretatie, zoals het omzetten van epoch-tijden naar timestamps en UID's naar gebruikersnamen: `ausearch -k passwd_monitoring -i` [10](#page=10).
`ausearch` leest de informatie uit `/var/log/audit/audit.conf` (waarschijnlijk bedoeld als `/var/log/audit/audit.log` of configuratie die ernaar verwijst). Audit logbestanden bevatten informatie zoals de epoch tijd (seconden sinds 1 januari 1970) en de audit gebeurtenis-ID [12](#page=12).
> **Voorbeeld:** Het toevoegen van een nieuwe gebruiker met `adduser john` kan meerdere audit gebeurtenissen genereren voor `/etc/passwd`, zoals het aanmaken van een nieuw bestand, het verwijderen van het oude bestand en het updaten van de directory-invoer [13](#page=13).
### 1.4 Meer dan alleen auditregels
Er worden meer gebeurtenissen gelogd dan expliciet in de `audit.rules` bestanden zijn gedefinieerd. Voorbeelden hiervan zijn [16](#page=16):
* SELinux/AppArmor denials [16](#page=16).
* Gebruikerslogins [16](#page=16).
* Kernelberichten [16](#page=16).
Het `aureport` commando kan reeds enkele van deze gebeurtenissen samenvatten [16](#page=16).
#### 1.4.1 SELinux integratie
SELinux in permissieve modus (die geen acties blokkeert maar deze wel logt) genereert logs die via auditd worden verwerkt [17](#page=17).
* SELnx permissieve logs kunnen worden gezocht met:
* `grep permissive /var/log/audit/audit.log` [17](#page=17).
* `aureport --avc` [17](#page=17).
* `ausearch -m avc` [17](#page=17).
* Hulpprogramma's zoals `audit2why` en `audit2allow` kunnen helpen bij het analyseren van SELinux-gerelateerde audit logs om problemen te diagnosticeren of nieuwe regels te genereren [17](#page=17).
### 1.5 Aanvullende hulpprogramma's
Naast `auditctl` en `ausearch` zijn er andere hulpprogramma's die informatie uit de audit logs halen.
#### 1.5.1 aulast
Het `aulast (--bad)` commando toont een lijst van de laatst ingelogde gebruikers of mislukte logins, vergelijkbaar met `last` en `lastb`, maar haalt de informatie uit `/var/log/audit/audit.log` in plaats van `/var/log/wtmp` of `/var/log/btmp` [18](#page=18).
#### 1.5.2 aulastlog
`aulastlog` toont de laatste login voor alle gebruikers op de lokale machine. Dit is vergelijkbaar met `lastlog`, maar gebruikt `/var/log/audit/audit.log` als bron in plaats van `/var/log/lastlog` [19](#page=19).
> **Tip:** Deze tools zijn nuttig voor het snel verkrijgen van inzichten in gebruikersactiviteit die via auditd worden gelogd [18](#page=18) [19](#page=19).
---
# Auditregels en hun configuratie
Dit gedeelte beschrijft hoe auditregels gecreëerd, geladen, opgeslagen en persistent gemaakt kunnen worden, met de nadruk op het monitoren van specifieke systeemanalyse.
### 2.1 Auditregels creëren en laden
Auditregels worden gecreëerd en geladen met behulp van de `auditctl` tool. Deze regels specificeren welke systeemactiviteiten gemonitord moeten worden [7](#page=7).
#### 2.1.1 Lijsten van actieve auditregels
Om een lijst te bekijken van alle momenteel geladen auditregels, kan het commando `auditctl -l` worden gebruikt [7](#page=7).
#### 2.1.2 Een nieuwe auditregel aanmaken
Het aanmaken van een nieuwe auditregel gebeurt met specifieke parameters aan het `auditctl` commando. Een voorbeeld hiervan is het monitoren van schrijf- en attributiewijzigingen op het `/etc/passwd` bestand [8](#page=8).
Het commando om dit te realiseren is:
`auditctl -a always,exit -F path=/etc/passwd -F arch=b64 -F perm=wa -k passwd_monitoring` [8](#page=8).
Hierbij betekenen de parameters:
* `-a always,exit`: Voegt een regel toe die systeemcalls bij het afsluiten monitort [8](#page=8).
* `-F`: Wordt gebruikt om filters te specificeren [8](#page=8).
* `path=/etc/passwd`: Specificeert het bestand dat gemonitord moet worden [8](#page=8).
* `arch=b64`: Zorgt ervoor dat de regel alleen van toepassing is op 64-bit systeemcalls [8](#page=8).
* `perm=wa`: Filtert op schrijfacties (`w`) en attributiewijzigingen (`a`) [8](#page=8).
* `-k passwd_monitoring`: Dit is een door de gebruiker te definiëren sleutel (key) voor het taggen en filteren van gebeurtenissen in het auditlogboek. Er zijn geen vooraf gedefinieerde sleutels [8](#page=8).
* `-S`: Hiermee kan gefilterd worden op het type systeemcall. Indien niet gespecificeerd, worden alle systeemcalls gemonitord [8](#page=8).
> **Tip:** Meer gedetailleerde voorbeelden zijn te vinden in de man-pagina van `auditctl` en in de directory `/usr/share/audit/sample-rules/` [9](#page=9).
### 2.2 Auditgebeurtenissen en logging
Wanneer auditregels worden geactiveerd, worden de bijbehorende gebeurtenissen gelogd in het bestand `/var/log/audit/audit.log` [10](#page=10).
#### 2.2.1 Auditlogboeken doorzoeken met `ausearch`
Om de gelogde auditgebeurtenissen te parsen en te doorzoeken, wordt de tool `ausearch` gebruikt. Dit maakt het mogelijk om te zoeken naar gebeurtenissen die overeenkomen met de gedefinieerde auditregels [10](#page=10).
Je kunt zoeken op de door jou gespecificeerde sleutels, bijvoorbeeld:
`ausearch -k passwd_monitoring` [10](#page=10).
Voor een meer interpreteerbare output, waarbij onder andere epoch-tijden naar timestamps en UID's naar gebruikersnamen worden omgezet, kan de `-i` optie worden gebruikt:
`ausearch -k passwd_monitoring -i` [10](#page=10).
#### 2.2.2 Voorbeelden van `ausearch` output
Wanneer een regel wordt aangemaakt, wordt dit eerst gelogd. De output van `ausearch` toont onder andere de epoch-tijd (seconden sinds 1 januari 1970), de audit event ID en andere relevante details van de gebeurtenis [11](#page=11) [12](#page=12).
**Voorbeeld: Het aanmaken van een gebruiker**
Het toevoegen van een nieuwe gebruiker, bijvoorbeeld via `adduser john`, kan meerdere auditgebeurtenissen genereren die betrekking hebben op het `/etc/passwd` bestand. Dit kan het aanmaken van een nieuw bestand, het verwijderen van het oude bestand, en het bijwerken van de directory-invoer omvatten. Het doorzoeken met `ausearch -k passwd_monitoring` na het aanmaken van de gebruiker zal deze gebeurtenissen tonen [13](#page=13).
### 2.3 Auditregels persistent maken
Om ervoor te zorgen dat auditregels ook na een herstart van het systeem actief blijven, moeten ze persistent gemaakt worden [14](#page=14).
#### 2.3.1 Opslaglocatie voor persistente regels
Persistente auditregels moeten worden opgeslagen in een bestand met de extensie `.rules` in de directory `/etc/audit/rules.d/` [14](#page=14).
#### 2.3.2 Automatische generatie van `audit.rules`
Wanneer de `auditd` service opnieuw wordt geladen, wordt er automatisch een bestand `/etc/audit/audit.rules` gegenereerd door het `augenrules` binary. Dit bestand wordt samengesteld op basis van de regels die zich in de `.rules` bestanden binnen `/etc/audit/rules.d/` bevinden [14](#page=14).
> **Tip:** Raadpleeg `man augenrules` voor meer informatie over dit proces en bekijk de service definitie in `/usr/lib/systemd/system/auditd.service` [14](#page=14).
---
# Geavanceerde auditd functionaliteit en rapportage
Deze sectie behandelt auditd-functionaliteiten die verder gaan dan de expliciet gedefinieerde auditregels, met een focus op het monitoren van SELinux-afwijzingen en kernelberichten, en introduceert hulpmiddelen voor analyse en interpretatie [16](#page=16).
### 3.1 Monitoren van gebeurtenissen buiten expliciete auditregels
Auditd registreert meer dan alleen de gebeurtenissen die expliciet in het `audit.rules` bestand zijn gedefinieerd. Dit omvat onder andere [16](#page=16):
* SELinux/AppArmor denials [16](#page=16).
* Gebruikersaanmeldingen [16](#page=16).
* Kernelberichten [16](#page=16).
* Andere systeemgebeurtenissen [16](#page=16).
Het hulpprogramma `aureport` kan al aanwijzingen geven over deze niet-gedefinieerde gebeurtenissen [16](#page=16).
### 3.2 Analyse van SELinux-gebeurtenissen
SELinux (Security-Enhanced Linux) speelt een cruciale rol in de beveiliging van Linux-systemen door middel van Mandatory Access Control (MAC). Wanneer SELinux in de "permissive mode" draait, worden beleidsafwijzingen gelogd door `auditd` in plaats van direct te worden geblokkeerd. Dit is nuttig voor het testen en ontwikkelen van SELinux-beleid [17](#page=17).
* **SELinux Permissive Mode:** Dit fungeert als een "what if"-scenario waarbij acties die normaal gesproken geblokkeerd zouden worden, worden gelogd door `auditd` [17](#page=17).
* **AVC (Access Vector Cache):** Dit is gerelateerd aan de logging van SELinux-beleidsafwijzingen [17](#page=17).
**Tools voor SELinux-analyse:**
* **Grep op `audit.log`:** Men kan direct zoeken naar SELinux-gerelateerde berichten in het auditlogbestand:
```bash
grep permissive /var/log/audit/audit.log
```
* **`aureport --avc`:** Dit commando genereert een rapportage specifiek voor SELinux Access Vector Cache (AVC) gebeurtenissen [17](#page=17).
* **`ausearch -m avc`:** Dit commando zoekt naar auditberichten met het type "AVC" [17](#page=17).
* **`audit2why`:** Dit hulpprogramma analyseert de auditlogregels en geeft een leesbare uitleg van SELinux-afwijzingen [17](#page=17).
```bash
cat /var/log/audit/audit.log | audit2why
```
* **`audit2allow`:** Dit hulpprogramma wordt gebruikt om SELinux-beleidsregels te genereren op basis van auditlogmeldingen. Het helpt bij het ontwikkelen van SELinux-beleid door configuratiefouten te identificeren en oplossingen voor te stellen [17](#page=17).
```bash
cat /var/log/audit/audit.log | audit2allow
```
> **Tip:** Het combineren van `audit2why` en `audit2allow` is een krachtige methode voor het debuggen en verfijnen van SELinux-beleid. `audit2why` geeft inzicht in het probleem, terwijl `audit2allow` concrete beleidsvoorstellen kan genereren.
### 3.3 Hulpprogramma's voor gebruikersaanmeldingen en laatste logins
Naast SELinux biedt `auditd` ook functionaliteiten voor het monitoren van gebruikersactiviteit, waaronder aanmeldingspogingen.
* **`aulast (--bad)`:** Dit commando toont een lijst van de laatst geregistreerde gebruikersaanmeldingen of mislukte aanmeldingspogingen. Het is vergelijkbaar met de commando's `last` en `lastb`, maar haalt de informatie uit `/var/log/audit/audit.log` in plaats van de traditionele logbestanden zoals `/var/log/wtmp` of `/var/log/btmp` [18](#page=18).
* **`aulastlog`:** Dit commando geeft de laatste aanmelding voor alle gebruikers op de lokale machine weer. Het is vergelijkbaar met het commando `lastlog`, maar haalt de informatie uit `/var/log/audit/audit.log` in plaats van het bestand `/var/log/lastlog` [19](#page=19).
> **Voorbeeld:** Om snel te zien welke gebruikers recentelijk succesvol zijn ingelogd op het systeem, kunt u `aulast` gebruiken. Als u specifieke mislukte aanmeldingspogingen wilt onderzoeken, kunt u `aulast --bad` raadplegen. `aulastlog` biedt een overzicht van de laatste login per gebruiker, wat nuttig kan zijn voor het controleren van gebruikersactiviteit [18](#page=18) [19](#page=19).
---
# Sysmon voor Linux: systeemmonitoring
Dit onderwerp introduceert Sysmon voor Linux, een krachtige systeemmonitor die gedetailleerde inzichten biedt in systeemactiviteiten zoals procescreaties en netwerkverbindingen [21](#page=21).
### 4.1 Introductie en Oorsprong
Sysmon voor Linux is een port van 'Sysmon for Windows' en biedt vergelijkbare functionaliteit voor het monitoren van systeemgebeurtenissen. Het is gebaseerd op Microsoft Sysinternals en maakt gebruik van Extended Berkeley Packet Filter (eBPF) om aangepaste programma-executie in de kernel mogelijk te maken. De configuratie van Sysmon voor Linux is identiek aan die voor Windows en maakt gebruik van XML-bestanden [21](#page=21).
### 4.2 Installatie
De installatie van Sysmon voor Linux omvat het toevoegen van de Microsoft-repository en vervolgens het installeren van het pakket via `apt` of `dnf`. Na de installatie wordt het commando `sysmon -i` gebruikt om Sysmon te initialiseren. Dit proces creëert een configuratiebestand en een systemd-service [22](#page=22).
### 4.3 Configuratie
De configuratie van Sysmon voor Linux gebeurt via een XML-bestand, dat standaard te vinden is op `/opt/sysmon/config.xml`. Dit XML-schemavolgt de structuur die definieert welke gebeurtenissen gelogd moeten worden. Gedetailleerde informatie over de configuratie-opties is beschikbaar via het commando `sysmon -? config` [23](#page=23) [24](#page=24).
> **Tip:** Zorg ervoor dat u de `config.xml` aanpast om alleen de gebeurtenissen te loggen die relevant zijn voor uw monitoringdoeleinden, om logoverload te voorkomen.
### 4.4 Gebeurtenislogs
De door Sysmon voor Linux gegenereerde gebeurtenissen worden opgeslagen in de systeemlogbestanden. Op Debian-gebaseerde systemen is dit doorgaans `/var/log/syslog`, terwijl op RHEL-gebaseerde systemen dit `/var/log/messages` is. De logbestanden zijn in XML-formaat, wat het parsen en analyseren vergemakkelijkt [25](#page=25).
### 4.5 Loganalyse
Voor het parsen van de Sysmon-logbestanden kan de gebruikerslevel tool `sysmonLogView` worden gebruikt. Een veelgebruikte methode om live gebeurtenissen te bekijken is door de output van het logbestand te combineren met `tail -f` en `sysmonLogView`, bijvoorbeeld: `sudo tail -f /var/log/syslog | sudo /opt/sysmon/sysmonLogView` [26](#page=26).
> **Voorbeeld:** Het volgen van de logbestanden in realtime kan helpen bij het direct identificeren van verdachte activiteiten, zoals ongeautoriseerde procescreaties of netwerkverbindingen.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| auditd | Een daemon die zorgt voor gedetailleerde en fraudebestendige logging van systeemactiviteiten, voornamelijk via systeemoproepen, om te registreren wat, wie, wanneer en vanwaar er acties zijn uitgevoerd op een Linux-systeem. |
| Systeemoproep (System Call) | Een interface waarmee een computerprogramma een dienst kan aanvragen van de kernel van het besturingssysteem waarop het draait; auditd richt zich voornamelijk op het loggen van deze systeemoproepen. |
| Forensische analyse | Een methode om bewijsmateriaal te verzamelen en te onderzoeken na een beveiligingsincident om de oorzaak, de omvang en de daders van het incident te achterhalen. |
| auditctl | Een command-line tool die wordt gebruikt om auditregels te manipuleren, zoals het laden, weergeven of verwijderen van regels die specifieke systeemgebeurtenissen monitoren. |
| auditd.conf | Het configuratiebestand voor de auditd daemon, waarin instellingen zoals de locatie van logbestanden, logrotatie, schijfruimtebewaking en foutafhandeling worden gedefinieerd. |
| Auditregels | Instructies die worden ingesteld om specifieke systeemgebeurtenissen te monitoren; ze bepalen welke systeemoproepen, bestanden of processen aandacht verdienen en gelogd moeten worden. |
| ausearch | Een command-line tool die wordt gebruikt om logbestanden gegenereerd door auditd te doorzoeken en te filteren op specifieke criteria, zoals sleutelwoorden of tijdstempels. |
| Persistente regels | Auditregels die na een herstart van het systeem behouden blijven; deze worden doorgaans opgeslagen in speciale `.rules` bestanden in de configuratiemap van auditd. |
| SELinux | Security-Enhanced Linux, een beveiligingsmechanisme voor Linux dat een discretionair toegangscontrolebeleid afdwingt; SELinux-afwijzingen kunnen via auditd worden gelogd. |
| Sysmon | Een systeemmonitor, oorspronkelijk voor Windows en nu ook beschikbaar voor Linux, die gedetailleerde informatie genereert over procescreaties, netwerkverbindingen en andere systeemgebeurtenissen. |
| eBPF (extended Berkeley Packet Filter) | Een technologie die het mogelijk maakt om veilige, efficiënte en programmeerbare code binnen de Linux-kernel uit te voeren, gebruikt door Sysmon voor Linux om diepgaande systeemmonitoring te realiseren. |
| XML (Extensible Markup Language) | Een markup-taal die wordt gebruikt voor het definiëren van regels en configuraties voor Sysmon voor Linux, waardoor een gestructureerde manier ontstaat om te specificeren welke gebeurtenissen gelogd moeten worden. |