
Cerca segreti nei volumi EBS esposti
Dufflebag è uno strumento che cerca tra gli snapshot pubblici di Elastic Block Storage (EBS) eventuali segreti accidentalmente lasciati al suo interno. Potresti sorprenderti di quante password e segreti sono sparsi in giro!
Lo strumento è organizzato come un'applicazione Elastic Beanstalk ("EB", da non confondere con EBS) e sicuramente non funzionerà se provi a eseguirlo sulla tua macchina locale.
Dufflebag ha molti componenti in movimento perché in pratica non è affatto banale leggere i volumi EBS. Devi essere in un ambiente AWS, clonare lo snapshot, creare un volume dallo snapshot, collegare il volume, montare il volume, ecc... Ecco perché è realizzato come un'app Elastic Beanstalk: così può scalare automaticamente su o giù quanto desideri, e l'intera struttura può essere facilmente smantellata quando hai finito.
Tieni d'occhio la console AWS per assicurarti che non vada fuori controllo e accumuli costi. Abbiamo cercato di pensare a ogni evenienza e di fornire una gestione degli errori... ma sei stato avvertito!
Dovrai aggiungere alcune autorizzazioni IAM AWS aggiuntive al ruolo: aws-elasticbeanstalk-ec2-role. In alternativa, puoi creare un nuovo ruolo con queste autorizzazioni e impostare EB per utilizzare quel ruolo, ma è un po' più complesso. In ogni caso, dovrai aggiungere:
L'applicazione principale è scritta in Go, quindi avrai bisogno di un compilatore Golang. Ma l'applicazione EB viene effettivamente compilata in un file .zip (funziona così EB), quindi il makefile produrrà un zip per te.
Controlla la tua regione. Dufflebag può operare solo in una regione AWS alla volta. Se desideri cercare in ogni regione, dovrai distribuire altrettante istanze. Per cambiare regione, modifica i contenuti del file sorgente region.go.
Installa le dipendenze: Ubuntu 18.04 x64:
sudo apt install make golang-go git
go get -u github.com/aws/aws-sdk-go
go get -u github.com/deckarep/golang-set
go get -u github.com/lib/pq
go get -u lukechampine.com/blake3
make
Ora dovresti vedere un file dufflebag.zip nella directory principale del progetto.
dufflebag. I nomi dei bucket S3 devono essere globalmente unici, quindi probabilmente avrai bisogno di un suffisso come un insieme di caratteri casuali o qualcosa del genere.Vai alla console AWS e trova l'opzione di menu Elastic Beanstalk. Questo è probabilmente fattibile anche tramite CLI, ma questa descrizione utilizzerà la console. Seleziona Actions -> Create Environment.

Poi nella finestra successiva scegli Worker environment e premi Select.

Nella finestra successiva, scegli Preconfigured -> Go per la Platform.

Sotto Application Code, scegli Upload your Code.

Premi il pulsante Upload e seleziona il file dufflebag.zip che hai appena compilato.

Infine, premi Create Environment per iniziare.
Ci vorranno alcuni minuti per AWS per creare tutto e avviarsi. Una volta creato, Dufflebag partirà immediatamente. Non è necessario fare altro.
Una volta che tutto è operativo, puoi riprovare senza la valvola di sicurezza. Di default, Dufflebag cerca solo 20 snapshot EBS. (Per evitare che vada fuori controllo al primo tentativo.) Per ampliare la ricerca all'intera regione, vai in populate.go, rimuovi la seguente riga di codice e ricompila:
//#####################################################################
//#### Safety Valve ####
//#### Remove this line of code below to search all of your region ####
//#####################################################################
snapshots = snapshots_result.Snapshots[0:20]
Uno dei motivi per cui Dufflebag è progettato come app Elastic Beanstalk è per consentire di scalare automaticamente il programma verso l'alto o verso il basso facilmente. Di default, funzionerà su una sola istanza e sarà piuttosto lento. Ma se desideri aumentare un po' le prestazioni, regola l'autoscaling in Elastic Beanstalk. Le opzioni complete sono un po' al di fuori dello scopo di questo documento, quindi ti lascio giocare con esse. In pratica, ho scoperto che un semplice trigger basato sull'utilizzo della CPU funziona abbastanza bene.
Quando imposti l'ambiente sopra, troverai le opzioni sotto il pulsante Configure more options (invece di premere Create environment) e poi premi Scaling.

Dufflebag copierà i file interessanti nel bucket S3 che hai creato in precedenza. (Tecnicamente, Dufflebag utilizzerà il primo bucket S3 che trova il cui nome inizia con "dufflebag".)
Puoi semplicemente osservare i file arrivare uno per uno nel tuo bucket S3. Saranno denominati:
originalfilename_blake3sum_volumeid
Se tutto va bene, non dovresti aver bisogno di leggere i log. Ma per ogni evenienza, Elastic Beanstalk permette alle app di scrivere su file di log mentre sono in esecuzione, e questi vengono catturati navigando alla scheda Logs. Poi premi Request Logs e Last 100 Lines. Questo ti fornirà il batch più recente dei log di Dufflebag. Premi il pulsante Download per leggerlo. Questo file conterrà una serie di altri log di sistema, ma la parte di Dufflebag si trova sotto "/var/log/web-1.log" all'inizio.
Per vedere la cronologia completa dei log, seleziona Full Logs invece di Last 100 Lines. (Nota che EB ruota i log abbastanza aggressivamente per impostazione predefinita)
Inoltre, puoi farti un'idea del progresso generale guardando la coda SQS per l'ambiente. Gli ambienti worker di Elastic Beanstalk utilizzano SQS per gestire il flusso di lavoro. Ogni messaggio nella coda per Dufflebag rappresenta un volume EBS da elaborare:

La colonna Messages Available mostra quanti volumi non sono ancora stati elaborati. La colonna Messages in Flight mostra quanti volumi sono in fase di elaborazione in questo momento.
Dufflebag è programmato per cercare cose che abbiamo ritenuto probabili essere "interessanti": chiavi private, password, chiavi AWS, ecc... Ma se volessi cercare qualcosa di specifico per te? Ad esempio, se lavori per bank.com e vuoi vedere cosa c'è là fuori che menziona bank.com.
Per farlo, dovrai apportare una piccola modifica al codice di Dufflebag, ma non molta. Non preoccuparti! La logica su cosa cercare si trova in inspector.go. La funzione pilfer() è una goroutine che gestisce l'ispezione di un file. Il codice lì potrebbe sembrare un po' intimidatorio all'inizio, ma ecco cosa fa (e come puoi modificarlo senza troppa difficoltà).
Blacklist dei nomi file:
blacklist_exact)blacklist_contains)blacklist_prefix)Puoi modificare la logica di ricerca abbastanza facilmente cambiando ciò che c'è in queste tre liste. Tuttavia, in generale ti consiglio di lasciarle intatte. Queste blacklist sono progettate per coprire file noiosi presenti in molti filesystem ed evitano che Dufflebag debba ispezionare in profondità ogni singolo file su tutto AWS. I dati sensibili che cerchi POTREBBERO trovarsi in quei file... ma probabilmente no.
Whitelist dei nomi file:
IsSensitiveFileName() controlla il nome file contro un'espressione regolare che trova nomi file sensibili. (Ad esempio /etc/shadow, bash_history, ecc...)Contenuto dei file:
checkContentsRegex() controlla il contenuto del file contro un insieme di espressioni regolari. (L'argomento di input del file è riga per riga, quindi l'input di questa funzione è una riga del file, non l'intero file.) Quindi, per cercare parole chiave relative alla tua organizzazione, basta modificare le espressioni regolari all'interno di checkContentsRegex().