RAUDI: Regularly and Automatically Updated Docker Images

Written by Angelo Delicato - 4 Nov 2022
RAUDI

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

RAUDI GitHub

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:

Dockerfile 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:

config.py knock

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

RAUDI Workflow

I passi da seguire sono i seguenti:

  1. Recuperare informazioni comuni (ad es. l’ultima versione di Alpine)
  2. Caricare tutti gli strumenti e recuperare le informazioni per ciascuno di essi
  3. Caricare tutti gli strumenti e recuperare le informazioni per ciascuno di essi
  4. Se non esiste, compilare l’immagine Docker
  5. Verificare se i comandi di test restituiscono un codice di stato 0
  6. Se il codice di stato è 0, pubblica l’immagine.

Tool disponibili

Attualmente (11/01/2022) la lista di tool disponibili sono i seguenti:

NomeImmagine Docker
Apktoolsecsi/apktool
BFACsecsi/bfac
dirbsecsi/dirb
dirhuntsecsi/dirhunt
dirsearchsecsi/dirsearch
dnscansecsi/dnscan
EyeWitnesssecsi/eyewitness
ffufsecsi/ffuf
fiercesecsi/fierce
Findsploitsecsi/findsploit
Gitrobsecsi/gitrob
GitToolssecsi/gittools
gobustersecsi/gobuster
hydrasecsi/hydra
The JSON Web Token Toolkitsecsi/jwt_tools
Knocksecsi/knockpy
LFI Suitesecsi/lfisuite
MASSCANsecsi/masscan
MassDNSsecsi/massdns
Nmapsecsi/nmap
pureDNSsecsi/puredns
Race The Websecsi/race-the-web
RestfulHarvestsecsi/restfulharvest
Retire.jssecsi/retire
Sandcastlesecsi/sandcastle
sqlmapsecsi/sqlmap
Sublist3rsecsi/sublist3r
theHarvestersecsi/theharvester
vimsecsi/vim
waybackpysecsi/waybackpy
WhatWebsecsi/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.

RAUDI: Regularly and Automatically Updated Docker Images
Torna su