
Strumento di Audit e Bypass per Firewall di Nuova Generazione
v0.2
Fireaway è uno strumento per audit, bypass ed esfiltrazione di dati contro le regole di ispezione del livello 7/AppID su firewall di nuova generazione, così come altri meccanismi di difesa con deep packet inspection, come la prevenzione della perdita di dati (DLP) e proxy consapevoli delle applicazioni. Queste tattiche si basano sul principio di dover consentire le connessioni per stabilirsi attraverso il NGFW per vedere i dati di livello 7 da filtrare, oltre a falsificare applicazioni per nascondere canali di comunicazione all'interno dei log del firewall come traffico normale dell'utente, come la navigazione su Internet. Nel caso di bypass di strumenti di prevenzione della perdita di dati, Fireaway invia dati in piccoli "blocchi", che non corrispondono ai trigger delle espressioni regolari e ad altre regole DLP, oltre a incorporare dati in header HTTP falsificati di applicazioni legittime che la maggior parte delle tecnologie di prevenzione della perdita di dati non sono progettate per ispezionare. Lo strumento ha anche avuto successo nel sconfiggere i motori di rilevamento delle anomalie e euristici attraverso la sua capacità di falsificare le intestazioni delle applicazioni e nascondere dati al loro interno.
Avvio del server FireAway: Tipicamente il server FireAway viene avviato sul lato di uscita del firewall (come un server su Internet) e ascolta su una porta ritenuta chiusa per vedere se qualche regola basata sull'applicazione consente il traffico su questa porta, o per ricevere blocchi di dati grezzi per vedere se DLP o proxy applicativi possono identificarli:
python fa_server.py <porta su cui ascoltare> <numero modalità>
Il server può essere avviato in quattro modalità:
Modalità test (modalità 0) - Riceve dati inviati in modo sequenziale o dati di test generati casualmente. I dati vengono scritti come ricevuti e non è richiesto alcun riassemblaggio.
Ricezione sequenziale di blocchi (modalità 1) - I dati vengono inviati a uno o più server in dimensioni di blocco definite dal client in modo sequenziale. Fa_server registrerà il timestamp di ricezione del blocco nell'output e utilizzerà il tempo di ricezione come chiave di ordinamento durante il riassemblaggio. Ci sarà anche una "chiave di riassemblaggio" generata dal server da utilizzare con fa_assembler.py. Questa è una chiave di 4 caratteri generata casualmente utilizzata come delimitatore tra i blocchi, con l'idea che questi caratteri non esistano nei blocchi di dati trasmessi.
Ricezione casuale di blocchi (modalità 2) - I dati vengono inviati a uno o più server in ordine casuale. Questa modalità dipende dalla trasmissione di un messaggio di "chiave di sequenza" dal client a un server casuale nel pool. All'avvio di ciascun server, il server richiederà di inserire un "identificatore della chiave di sequenza". Questo dovrebbe essere un pattern non presente nel file trasmesso in modo che il server possa identificare correttamente i dati ricevuti attraverso una connessione come chiave di sequenza. ASSICURARSI CHE LO STESSO IDENTIFICATORE DELLA CHIAVE DI SEQUENZA SIA USATO SU TUTTI I SERVER! Il client selezionerà casualmente un server a cui inviare la chiave di sequenza, quindi è importante che tutti i server possano localizzare la chiave di sequenza nei dati ricevuti. La chiave di sequenza sarà registrata dal server ricevente in un file chiamato 'SequenceKey.txt'.
Ricezione di blocchi di applicazioni falsificate (modalità 3) - I dati codificati in Base64 vengono inviati a uno o più server all'interno di header HTTP che falsificano applicazioni legittime. Questa modalità genererà anche una "chiave di riassemblaggio" da utilizzare con lo script fa_assembler.
Tutti i dati ricevuti dai server sulla porta specificata verranno salvati nel file ReceivedData.txt nella directory da cui è stato avviato il server. Se il server rileva dimensioni differenti nella quantità di dati ricevuti (indicando che il filtraggio del firewall è intervenuto), questo output verrà mostrato sulla console del server:
Got the same or lower amount of data on two consecutive runs. If sending test data, maximum data leak size may have been reached.
Avvio del client FireAway / Spoofer di applicazioni: Il client FireAway ha tre modalità:
Modalità test (modalità 0) - Invia dati casuali in dimensioni di blocco crescenti per vedere quanti dati possono essere inviati prima che i controlli di livello 7 intervenano e fermino il flusso di traffico.
Modalità di esfiltrazione sequenziale (modalità 1) - Apre un file e lo invia in blocchi di una dimensione specificata. I dati verranno trasmessi in modo sequenziale.
Modalità di esfiltrazione casuale (modalità 2) - Apre un file e lo invia in blocchi di una dimensione specificata, ma in ordine casuale. Quando si utilizza questa modalità, il client chiederà l'identificatore della chiave di sequenza. Questo è il valore specificato sui server remoti, e il client etichetterà la chiave di sequenza generata con l'identificatore, che viene trasmesso a un server casuale se viene fornito un elenco o all'IP del server specificato, prima che il file venga trasmesso.
Per avviare il client base:
python fa_client.py <IP del server FireAway o percorso del file con elenco server> <Porta del server Fireaway> <Modalità client>
L'elenco dei server dovrebbe essere un semplice file di testo contenente un elenco di indirizzi IP, uno per riga. Se si utilizza un solo server, è possibile specificare un singolo IP.
Il client di falsificazione delle applicazioni ha tre modalità:
Modalità test (modalità 0) - Invia dati di test casuali all'interno di header HTTP in blocchi sempre più grandi per determinare quanti dati possono essere inviati prima che i controlli di livello 7 intervenano e fermino il flusso di traffico.
Modalità di esfiltrazione codificata in Base64 (modalità 1) - Codifica in Base64 un file di input e trasmette parti del file codificato all'interno di header HTTP generati casualmente per bypassare DLP e mascherare la trasmissione come un'applicazione legittima.
Per avviare il client di falsificazione delle applicazioni:
python fa_spoof.py <IP del server FireAway o percorso del file con elenco server> <Porta del server Fireaway> <Modalità client>
La falsificazione delle applicazioni inserirà casualmente header HTTP all'interno di header di applicazioni dall'aspetto legittimo (ad es. Facebook, LinkedIn, ecc.) con i blocchi di dati per inquinare i log con varie applicazioni al fine di mascherare l'esfiltrazione dei dati.
Riassemblatore Fireaway: Il riassemblatore Fireaway (fa_assembler.py) viene utilizzato per riassemblare i dati ricevuti dai server Fireaway. L'assemblatore ha tre modalità, che corrispondono alla modalità dei server che hanno ricevuto i dati:
Modalità 1 - Riassembla i dati ricevuti in ordine sequenziale dai server in modalità 1. L'assemblatore chiederà di specificare la chiave di riassemblaggio per il file contenente i dati ricevuti per ciascun server, che è il valore casuale generato dal server e visualizzato all'avvio. Questo valore può anche essere trovato esaminando i file con i blocchi ricevuti e guardando i primi quattro caratteri.
Modalità 2 - Riassembla i dati ricevuti in ordine casuale dai server in modalità 2. L'assemblatore chiederà il percorso della chiave di sequenza, che è stata ricevuta dal client da un server casuale durante la trasmissione. Richiederà anche le chiavi di riassemblaggio per ogni file.
Modalità 3 - Riassembla i dati codificati in Base64 ricevuti negli header HTTP di applicazioni falsificate. Questi dati, come per la modalità 1, richiederanno anche la chiave di riassemblaggio.
Per avviare il riassemblatore:
python fa_assembler.py <modalità di riassemblaggio> <percorsi separati da virgola dei file da riassemblare>
L'output verrà salvato nel nome file specificato.
Segnalare eventuali problemi o domande tramite Github.