
Un repository per generare e mantenere automaticamente aggiornata una serie di immagini Docker tramite GitHub Actions.
RAUDI (Regularly and Automatically Updated Docker Images) genera e mantiene aggiornate automaticamente una serie di Immagini Docker tramite GitHub Actions per strumenti non forniti dagli sviluppatori.
RAUDI è ciò che ti salverà dal creare e gestire manualmente molte Immagini Docker. Ogni volta che un software viene aggiornato, devi aggiornare l'Immagine Docker per utilizzare le ultime funzionalità, le dipendenze non funzionano più.
È disordinato e richiede tempo.
Non preoccuparti più, ci pensiamo noi.
Puoi fare il fork di questo repository e utilizzare tu stesso il Workflow GitHub, oppure usarlo localmente (e gestirne l'esecuzione come preferisci).
Se vuoi fare il fork di questo repository devi anche impostare alcuni secret per poter inviare le tue immagini sul tuo account Docker Hub personale. Due secret GitHub devono essere impostati:
Dopo aver impostato questi secret, devi modificare la variabile organization impostata nel file tools/main.py poiché è configurata per inviare su Docker Hub per SecSI.
Questo è tutto ragazzi: vai su Action, abilitalo per il tuo repository forkato, aspetta fino a mezzanotte, e il Workflow farà il lavoro pesante!
Questo repository può anche essere eseguito localmente. I requisiti da soddisfare sono i seguenti:
Ecco la documentazione per lavorare con BuildX: https://docs.docker.com/buildx/working-with-buildx/
La fase di setup è abbastanza semplice, hai solo bisogno dei seguenti comandi:
git clone https://github.com/cybersecsi/RAUDI
cd RAUDI
pip install -r requirements.txt
Sei pronto per iniziare!
Per eseguire il test devi installare pytest con il comando pip install pytest (non è in requirements.txt poiché è necessario solo per scopi di test) e poi puoi eseguire:
pytest -s
oppure
python -m pytest -s
per eseguire i test.
RAUDI può costruire e inviare tutti gli strumenti presenti nella directory tools. Ci sono diverse opzioni che possono essere utilizzate durante l'esecuzione. Prima di usarlo localmente dovresti creare un file .env (puoi semplicemente copiare il file .env.sample) e aggiungere il tuo GitHub Personal Access Token per evitare il Rate Limiting. Per gli utenti non autenticati GitHub permette fino a 60 richieste all'ora, mentre gli utenti autenticati possono effettuare fino a 15.000 richieste all'ora. Per questo motivo ti consigliamo di aggiungerlo! Puoi anche creare un personal access token senza alcun scope poiché tutto ciò che facciamo è leggere alcune informazioni per ogni repository GitHub.
In questa modalità RAUDI tenta di costruire tutti gli strumenti se necessario. Il comando per eseguirlo è semplicemente:
python3 ./raudi.py --all
In questa modalità RAUDI tenta di costruire solo lo strumento specificato. Il comando in questo caso è:
python3 ./raudi.py --single <tool_name>
tool_name DEVE essere il nome della directory all'interno della cartella tools.
Poiché il parametro tests è stato aggiunto alla struttura di configurazione dello strumento, può essere utile per verificare se i comandi inseriti restituiscono un codice di stato 0. Il comando per testare uno strumento specifico è:
python3 ./raudi.py --test <tool_name>
tool_name DEVE essere il nome della directory all'interno della cartella tools.
Se vuoi conoscere gli strumenti disponibili puoi eseguire questo comando:
python3 ./raudi.py --list
Se vuoi aggiungere rapidamente una nuova cartella strumento partendo da uno dei template disponibili, puoi eseguire questo comando:
python3 ./raudi.py --bootstrap <new_tool_name>
| Opzione | Descrizione | Valore Predefinito |
|---|---|---|
| --push | Se inviare automaticamente a Docker Hub | False |
| --remote | Se controllare su Docker Hub invece che su Docker locale prima della build | False |
Questa è l'attuale lista di strumenti che sono stati aggiunti. Sono tutti strumenti che non hanno un'Immagine Docker ufficiale fornita dallo sviluppatore:
Ogni strumento nella directory tools contiene almeno due file:
Se vuoi aggiungere un nuovo strumento devi solo creare una cartella per quello strumento specifico all'interno della directory tools. In questa cartella devi inserire il Dockerfile con build args definiti per personalizzare e automatizzare la costruzione. Una volta creato il Dockerfile, devi creare un config.py nella stessa directory con una funzione chiamata get_config(organization, common_args). Attenzione: la funzione DEVE chiamarsi in questo modo e DEVE avere questi due parametri (anche se non li usi). Il valore restituito è la config per quello strumento specifico e ha la seguente struttura:
config = {
'name': organization+'/<nome_dell_immagine>',
'version': '', # Dovrebbe essere una funzione helper
'buildargs': {
},
'tests': []
}
Le quattro chiavi sono:
Dopo aver fatto ciò, sei pronto! Fai solo attenzione che il nome dello strumento DEVE ESSERE UGUALE alla directory in cui hai posizionato il suo Dockerfile.
C'è una CONVENZIONE DI NOMENCLATURA per le versioni: usa solo PUNTI e CIFRE; quindi rimuovi qualsiasi 'v' finale dalla versione nel config.py specifico (per un esempio funzionante controlla tools/dirsearch/config.py).
Per ottenere le ultime versioni e informazioni su strumenti e immagini di base è stato implementato un set di helper. Se vuoi aggiungere un nuovo strumento dovresti usare questi helper per avere un'Immagine Docker che viene automaticamente aggiornata da RAUDI.
get_latest_pip_versionQuesto helper viene utilizzato per recuperare l'ultima versione di un pacchetto pip. Richiede solo il nome del pacchetto e restituisce il numero di versione. Esempio:
VERSION = helper.get_latest_pip_version(package_name)
get_latest_npm_registry_versionQuesto helper viene utilizzato per recuperare l'ultima versione di un pacchetto npm. Richiede solo il nome del pacchetto e restituisce il numero di versione. Esempio:
VERSION = helper.get_latest_npm_registry_version(package_name)
get_latest_github_releaseQuesto helper viene utilizzato per recuperare informazioni su un repository GitHub che utilizza Releases e ha diversi tipi di asset (es. eseguibili per diversi sistemi operativi). Questo helper prende il repository (nel formato user/repo) e una stringa target per poter identificare l'asset corretto da scaricare. Restituisce un dict con due chiavi (url e version). Esempio:
VERSION = helper.get_latest_github_release("user/repo", "linux_amd64")
get_latest_github_release_no_browser_downloadQuesto helper viene utilizzato per recuperare informazioni su un repository GitHub che utilizza Releases e ha solo il codice sorgente (cioè c'è uno zipball e un tarball). Questo helper prende il repository (nel formato user/repo) e restituisce un dict con due chiavi (url e version). Esempio:
VERSION = helper.get_latest_github_release_no_browser_download("user/repo")
get_latest_github_tag_no_browser_downloadQuesto helper viene utilizzato per recuperare informazioni su un repository GitHub che utilizza Tags e ha solo il codice sorgente (cioè c'è uno zipball e un tarball). Questo helper prende il repository (nel formato user/repo) e restituisce un dict con due chiavi (url e version). Esempio:
VERSION = helper.get_latest_github_tag_no_browser_download("user/repo")
get_latest_github_commitQuesto helper viene utilizzato per recuperare informazioni su un repository GitHub che non utilizza Tags o Releases. In questo caso, l'obiettivo è recuperare l'ultimo commit. Questo helper prende il repository (nel formato user/repo) e restituisce una stringa che rappresenta la data dell'ultimo commit nel formato YYYYYMMDD.
VERSION = helper.get_latest_github_commit("user/repo")
Questa sezione fornisce esempi per gli strumenti di sicurezza di rete attualmente aggiunti. Come puoi vedere, le immagini forniscono solo lo strumento, quindi se devi usare una wordlist devi montarla.
docker run -it --rm secsi/<tool> <command>
docker run -it --rm -v <wordlist_src_dir>:<wordlist_container_dir> secsi/dirb <url> <wordlist_container_dir>/<wordlist_file>
Siamo italiani, quindi probabilmente lo pronunciamo in modo diverso dal tuo. La pronuncia corretta (usando la trascrizione fonetica) è la seguente:
/ˈraʊdi/
Altrimenti pensa al cane di peluche nel famoso show TV Scrubs: Rowdy
Tutti sono invitati a contribuire! Abbiamo creato un documento molto dettagliato per descrivere come contribuire a RAUDI.
RAUDI è orgogliosamente sviluppato @SecSI da:
Altri contributori:
RAUDI è un software open-source e gratuito rilasciato sotto GNU GPL v3.
| --force | Se costruire o meno se è stata trovata un'immagine con lo stesso nome tag | False |
| Nome | Immagine Docker | Fonte |
|---|