Capitolo: Gibson Cap 5 — Securing Hosts and Data Concetti: DLP (Data Loss Prevention), pattern matching, integrazione SIEM
Obiettivo#
Simulare un agente DLP che monitora una cartella e rileva file con dati sensibili (SSN, carte di credito, codici fiscali). Integrare gli alert con Wazuh.
Security angle: i DLP enterprise (Symantec, Forcepoint, Purview) usano lo stesso principio base — pattern matching su contenuto. Costruirne uno minimale insegna come funzionano senza la complessita' dell'installazione enterprise.
DLP enterprise noti (contesto)#
| Prodotto | Vendor | Note |
|---|---|---|
| Symantec DLP | Broadcom | Market leader enterprise |
| Forcepoint DLP | Forcepoint | Focus insider threat |
| Microsoft Purview | Microsoft | Integrato in M365, free trial |
| McAfee/Trellix DLP | Trellix | Endpoint + network |
| Digital Guardian | Fortra | Data-centric approach |
| Nightfall AI | Nightfall | Cloud-native, API-first |
| Google Cloud DLP API | Free tier, REST, ottimo per trial |
Prerequisiti#
- Ubuntu Server su UTM (Mustache)
- Python 3.8+
- Wazuh agent installato e connesso al Wazuh manager
pip install inotify
sudo apt install -y python3-pip
pip install inotifyStep 1 — Crea la cartella monitorata#
mkdir -p ~/dlp-watchStep 2 — Script DLP#
Crea ~/dlp_monitor.py. L'obiettivo: monitora ~/dlp-watch/, quando viene creato/modificato un file scansiona il contenuto con regex. Se trova pattern sensibili, logga in syslog.
Pattern da rilevare:
patterns = {
'SSN': r'\b\d{3}-\d{2}-\d{4}\b',
'credit_card': r'\b\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}\b',
'codice_fiscale': r'\b[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]\b'
}Prova a scrivere lo script da solo prima di cercare esempi. Hint: inotify.InotifyTree, syslog.syslog().
Step 3 — Testa il rilevamento#
Crea un file di test nella cartella monitorata:
echo "SSN: 123-45-6789" > ~/dlp-watch/test-data.txt
echo "Card: 4111 1111 1111 1111" >> ~/dlp-watch/test-data.txtVerifica che lo script loggi l'alert in /var/log/syslog.
Step 4 — Integrazione Wazuh#
Wazuh raccoglie i log di sistema incluso syslog. Aggiungi una regola custom in Wazuh per intercettare i log del tuo DLP:
Nel file local_rules.xml di Wazuh:
<rule id="100200" level="10">
<match>DLP_ALERT</match>
<description>DLP: dato sensibile rilevato</description>
</rule>Step 5 — Verifica nella dashboard Wazuh#
Apri la dashboard Wazuh e cerca gli alert con rule id 100200. Verifica che il trigger dal file di test sia visibile.
Domande di riflessione#
- Un DLP gateway (network) vs un DLP endpoint: quale intercetta prima? Quale vede il contenuto cifrato?
- Falsi positivi: il regex del codice fiscale potrebbe matchare stringhe casuali. Come ridurresti i falsi positivi in produzione?
- Come aggirerebbero il tuo DLP gli attaccanti? (Cifratura del file? Exfiltration via DNS? Steganografia?)
Note e osservazioni#
Errori incontrati e fix#
Problema 1 — Nessun editor dentro il container Docker Il container Wazuh manager non ha nano ne vim. Workaround: copia fuori, modifica sull'host, ricopia dentro.
docker cp single-node-wazuh.manager-1:/var/ossec/etc/rules/local_rules.xml ./local_rules.xml
# modifica local_rules.xml con vim
docker cp ./local_rules.xml single-node-wazuh.manager-1:/var/ossec/etc/rules/local_rules.xmlProblema 2 — Permission denied dopo docker cp
Il docker cp copia il file con ownership root. Wazuh gira come utente wazuh e non riesce a leggerlo.
docker exec single-node-wazuh.manager-1 chown wazuh:wazuh /var/ossec/etc/rules/local_rules.xml
docker exec single-node-wazuh.manager-1 chmod 660 /var/ossec/etc/rules/local_rules.xmlProblema 3 — Invalid decoder name 'syslog'
La regola originale aveva <decoded_as>syslog</decoded_as> che non e' un decoder valido in Wazuh. Rimossa — basta <match>DLP_ALERT</match> senza specificare il decoder.
Regola finale funzionante:
<group name="custom_rules_example,">
<rule id="100200" level="10">
<match>DLP_ALERT</match>
<description>DLP: dato sensibile rilevato</description>
</rule>
</group>Risultato#
La rule 100200 si attiva correttamente. Wazuh intercetta il log da journald (non direttamente da syslog) e auto-rileva dlp-monitor.py come predecoder.program_name.
full_log nell'evento: DLP_ALERT: SSN rilevato in test-data.txt SSN: 123-45-6789


Collegato a#
- cap-05-securing-hosts-and-data — sezione DLP, Data States


