Skip to main content
  1. Lab-blue/

[DONE] Lab - DLP con Python e Wazuh

·3 mins
Alessio Barnini
Author
Alessio Barnini
Table of Contents

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)
#

ProdottoVendorNote
Symantec DLPBroadcomMarket leader enterprise
Forcepoint DLPForcepointFocus insider threat
Microsoft PurviewMicrosoftIntegrato in M365, free trial
McAfee/Trellix DLPTrellixEndpoint + network
Digital GuardianFortraData-centric approach
Nightfall AINightfallCloud-native, API-first
Google Cloud DLP APIGoogleFree 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 inotify

Step 1 — Crea la cartella monitorata
#

mkdir -p ~/dlp-watch

Step 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.txt

Verifica 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
#

  1. Un DLP gateway (network) vs un DLP endpoint: quale intercetta prima? Quale vede il contenuto cifrato?
  2. Falsi positivi: il regex del codice fiscale potrebbe matchare stringhe casuali. Come ridurresti i falsi positivi in produzione?
  3. 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.xml

Problema 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.xml

Problema 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

dlp-wazuh-alerts-rule-100200.webp

dlp-wazuh-event-detail-ssn.webp


Collegato a
#

  • cap-05-securing-hosts-and-data — sezione DLP, Data States

Related