Alcune settimane fa ho visto uno dei miei colleghi costruire un paio di file Docker per alcuni strumenti legati alla sicurezza di rete che non hanno un’immagine Docker ufficiale. Nella mia mente ho pensato: “Questa immagine Docker non sarà mai aggiornata. Lo odio“.
un’idea ha attraversato la mia mente: quanti strumenti non hanno un’immagine Docker ufficiale? Per centinaia e centinaia di strumenti, ci affidiamo a immagini Docker costruite da un tizio che vive dall’altra parte del mondo e che probabilmente si dimentica di aggiornare costantemente quell’immagine Docker. Ci siamo quindi rimboccati le maniche e abbiamo cercato di risolvere questo odioso problema. Il risultato è RAUDI (Regularly and Automatically Updated Docker Images).
Cosa è RAUDI
RAUDI vi eviterà di creare e gestire manualmente molte immagini Docker. Ogni volta che uno strumento viene aggiornato è necessario aggiornare l’immagine Docker se si vogliono utilizzare le ultime funzionalità, le dipendenze non funzionano più.
Si tratta di un’operazione scomoda e che richiede molto tempo..

Fondamentalmente, RAUDI è un progetto Python in grado di recuperare informazioni su un insieme di strumenti e di determinare se è necessario costruire/pubblicare una nuova immagine Docker per ogni strumento. Descriviamo il tutto passo per passo.
Come funziona RAUDI
Struttura dello strumento
Il lavoro iniziale è, ovviamente, manuale. Per aggiungere un nuovo strumento da gestire è necessario creare due file:
- config.py
- Dockerfile
Il Dockerfile contiene semplicemente le istruzioni per costruire un’immagine Docker per quello specifico strumento. Cosa c’è di diverso? Utilizziamo argomenti di compilazione che vengono recuperati dinamicamente. Ecco un esempio di implementazione di un popolare strumento chiamato Knock:

Come si può vedere, il contenuto è piuttosto semplice. Si ottiene il file .tar.gz, lo si scompatta e si installano i requisiti. Tutto qui.
L’aspetto interessante è che gli ARG forniti dinamicamente da config.py:

Il file config.py, d’altra parte, ha bisogno di qualche spiegazione in più. Ogni config.py deve avere una funzione get_config che prende due argomenti:
- organization: il nome dell’organizzazione (il valore predefinito è secsi)
- common_args: valori comuni a diversi strumenti (come ad esempio la versione Alpine da utilizzare)
e deve restituire un dict Python con le seguenti chiavi:
- name: il nome dell’immagine Docker una volta costruita;
- version: la versione che sarà utilizzata come tagname;
- buildargs: a dict che contiene tutti gli ARGs utilizzati nel Dockerfile;
- tests: an array di comandi da testare per verificare che il container funzioni dopo la pubblicazione.
Come si può vedere, le informazioni come l’URL di download e la versione vengono recuperate tramite una funzione helper che prende il nome del repo GitHub.
Workflow
Data la descrizione di un singolo strumento, vediamo cosa succede quando RAUDI viene eseguito (ci sono diverse modalità di esecuzione, quella mostrata nell’immagine sottostante rappresenta la modalità normale).

I passi da seguire sono i seguenti:
- Recuperare informazioni comuni (ad es. l’ultima versione di Alpine)
- Caricare tutti gli strumenti e recuperare le informazioni per ciascuno di essi
- Caricare tutti gli strumenti e recuperare le informazioni per ciascuno di essi
- Se non esiste, compilare l’immagine Docker
- Verificare se i comandi di test restituiscono un codice di stato 0
- Se il codice di stato è 0, pubblica l’immagine.
Tool disponibili
Attualmente (11/01/2022) la lista di tool disponibili sono i seguenti:
Nome | Immagine Docker |
Apktool | secsi/apktool |
BFAC | secsi/bfac |
dirb | secsi/dirb |
dirhunt | secsi/dirhunt |
dirsearch | secsi/dirsearch |
dnscan | secsi/dnscan |
EyeWitness | secsi/eyewitness |
ffuf | secsi/ffuf |
fierce | secsi/fierce |
Findsploit | secsi/findsploit |
Gitrob | secsi/gitrob |
GitTools | secsi/gittools |
gobuster | secsi/gobuster |
hydra | secsi/hydra |
The JSON Web Token Toolkit | secsi/jwt_tools |
Knock | secsi/knockpy |
LFI Suite | secsi/lfisuite |
MASSCAN | secsi/masscan |
MassDNS | secsi/massdns |
Nmap | secsi/nmap |
pureDNS | secsi/puredns |
Race The Web | secsi/race-the-web |
RestfulHarvest | secsi/restfulharvest |
Retire.js | secsi/retire |
Sandcastle | secsi/sandcastle |
sqlmap | secsi/sqlmap |
Sublist3r | secsi/sublist3r |
theHarvester | secsi/theharvester |
vim | secsi/vim |
waybackpy | secsi/waybackpy |
WhatWeb | secsi/whatweb |
Conclusioni
RAUDI è un software libero e open-source rilasciato sotto licenza GNU GPL v3.
Cosa ne pensate? Se avete suggerimenti per migliorare o aggiungere nuovi strumenti, non siate timidi! È possibile visualizzare il codice sorgente di RAUDI facendo clic qui.