~/tips/fortigate_feed.ip

In questi giorni ho deciso di implementare delle nuove policy di sicurezza sui firewall che ho in gestione. L’idea di fondo consiste nel creare degli oggetti partendo da dei feed pubblici, utilizzarli in specifiche regole per intercettare eventuale traffico in uscita (ma ovviamente si possono usare anche per il traffico in ingresso) ed infine loggare l’attività per identificare quale dispositivo ha generato quel particolare traffico per una successiva indagine.

Configurazione

Nello specifico io uso Fortigate. Per poter realizzare questi oggetti partendo dai feed pubblici bisogna espandere il menu in “Security Fabric” > “External Connectors” e cliccare sul pulsante “+ Create New”

Img. 1 – Nuovo connettore esterno

Successivamente cliccare sull’icona “IP Address” della sezione “Threat Feeds” e compilare i parametri richiesti.

Img. 2 – Creazione dell’oggetto feed

Nel mio caso ho creato tanti oggetti quanti feed sotto riportati

Nota importante: i feed devono essere tassativamente in ASCII, un IP per riga. Diversamente il firewall non è in grado di interpretare correttamente l’entry letta.

Terminata questa attività sarà sufficiente creare le regole di firewalling opportune, un esempio su tutte potrebbe essere questa:

Img. 3 – La policy

In questa regola di esempio, tutto il traffico proveniente dalla zona LAN verso la zona WAN, dalle sorgenti IP definite verso le destinazioni raccolte dai feed, verranno bloccate a monte e loggate.

Logging

Come avevo scritto nei precedenti articoli (parte 1, 2 e 3) tutti i log dei firewall vengono inviati ad uno stack ELK per la loro catalogazione, aggregazione ed analisi. Nel mio ambiente di produzione ho creato una vista ad hoc dove vado a filtrare tutti i log dei firewall (1) che hanno come corrispondenza la regola chiamata “SECURITY_FEED” (2)

Img. 4 – Il filtro

il risultato, eseguendo un test, si presenta così

Img. 5 – Risultato della ricerca

I campi scelti per essere rappresentati sono:

  • observer.name: che indica il nome del firewall che ha generato il log
  • rule.name: il nome della regola, nel nostro caso “SECURITY_FEED” ma avendone un certo numero questo campo mi indica anche quale regola è stata usata
  • source.ip: l’ip sorgente che ha generato il traffico
  • destination.ip: l’ip destinazione verso il quale si sarebbe voluto accedere
  • network.protocol: il protocollo usato
  • event.action: l’azione del firewall, ovviamente in “deny” vista come è stata costruita la regola
  • destination.geo.country_name: la geolocalizzazione dell’IP se presente

Prossimi passi

Sto scrivendo una routine in Python per collezionare in maniera schedulata, tutti i feed pubblici ed inserirli in un unico DB così da avere un unico punto di raccolta di tutti gli IP segnalati.

La routine dovrebbe:

  • ciclare su tutti i feed ed eseguire una request verso ciascuno
  • per ogni ip restituito, controllare se non è già presente nella lista (onde evitare doppioni) ed inserirlo in un DB in SQLite3 contenente le tuple: IP, data di scansione e nome del feed interrogato
  • se l’IP è già presente allora aggiornare unicamente la data di polling e il nome del feed se diverso da quello precedentemente registrato
  • l’output dovrebbe essere un file di testo

Il “desiderato” dovrebbe essere una pagina web dove l’utente ha modo di visionare l’ultima data di raccolta e, ovviamente, il link dove puntare per scaricare/leggere il file prodotto.

Altra funzionalità potrebbe essere quella di eseguire un parsing specifico in base alla sorgente dati: ad esempio, a questo link, sono presenti i feed di Censys sui C2 Cobalt Strike individuati in formato CSV. La routine potrebbe pertanto leggere i file raw ed estrapolarne unicamente gli IP.

Per il momento è tutto.

EOF

1 commento su “~/tips/fortigate_feed.ip”

Rispondi