
Un dépôt pour générer automatiquement et maintenir à jour une série d'images Docker via GitHub Actions.
RAUDI (Regularly and Automatically Updated Docker Images) génère et maintient automatiquement à jour une série d'Images Docker via GitHub Actions pour les outils qui ne sont pas fournis par leurs développeurs.
RAUDI est ce qui vous évitera de créer et gérer manuellement un grand nombre d'Images Docker. Chaque fois qu'un logiciel est mis à jour, vous devez mettre à jour l'Image Docker si vous voulez utiliser les dernières fonctionnalités, les dépendances ne fonctionnent plus.
C'est compliqué et chronophage.
Ne vous inquiétez plus, nous nous en occupons.
Vous pouvez soit forker ce dépôt et utiliser le workflow GitHub vous-même, soit l'utiliser localement (et gérer son exécution comme vous le souhaitez).
Si vous souhaitez forker ce dépôt, vous devez également configurer quelques secrets pour pouvoir pousser vos images sur votre compte Docker Hub personnel. Deux secrets GitHub doivent être définis :
Après avoir défini ces secrets, vous devez modifier la variable organization définie dans le fichier tools/main.py, car elle est configurée pour pousser sur Docker Hub pour SecSI.
C'est tout : allez dans Action, activez-la pour votre dépôt forké, attendez minuit, et le Workflow fera le travail lourd !
Ce dépôt peut également être exécuté localement. Les prérequis à remplir sont les suivants :
Voici la documentation pour travailler avec BuildX : https://docs.docker.com/buildx/working-with-buildx/
La phase de configuration est assez simple, il suffit de lancer les commandes suivantes :
git clone https://github.com/cybersecsi/RAUDI
cd RAUDI
pip install -r requirements.txt
Vous êtes prêt !
Pour exécuter les tests, vous devez installer pytest avec la commande pip install pytest (il n'est pas dans requirements.txt car il n'est nécessaire que pour les tests), puis vous pouvez lancer :
pytest -s
ou
python -m pytest -s
pour exécuter les tests.
RAUDI peut construire et pousser tous les outils placés dans le répertoire tools. Plusieurs options peuvent être utilisées lors de son exécution. Avant de l'utiliser localement, vous devez créer un fichier .env (vous pouvez simplement copier le fichier .env.sample) et y ajouter votre jeton d'accès personnel GitHub pour éviter la limitation de débit. Pour les utilisateurs non authentifiés, GitHub autorise jusqu'à 60 requêtes par heure, tandis que les utilisateurs authentifiés peuvent en effectuer jusqu'à 15 000 par heure. Pour cette raison, nous vous conseillons de l'ajouter ! Vous pouvez également créer un jeton d'accès personnel sans aucune portée, car tout ce que nous faisons est de lire quelques informations pour chaque dépôt GitHub.
Dans ce mode, RAUDI essaie de construire tous les outils si nécessaire. La commande pour l'exécuter est simplement :
python3 ./raudi.py --all
Dans ce mode, RAUDI essaie de construire uniquement l'outil spécifié. La commande dans ce cas est :
python3 ./raudi.py --single <nom_outil>
nom_outil DOIT être le nom du répertoire dans le dossier tools.
Étant donné que le paramètre tests a été ajouté à la structure de configuration de l'outil, il peut être utile de tester si les commandes insérées renvoient bien un code de statut 0. La commande pour tester un outil spécifique est :
python3 ./raudi.py --test <nom_outil>
nom_outil DOIT être le nom du répertoire dans le dossier tools.
Si vous voulez connaître les outils disponibles, vous pouvez exécuter cette commande :
python3 ./raudi.py --list
Si vous voulez ajouter rapidement un nouveau dossier d'outil à partir de l'un des templates disponibles, vous pouvez exécuter cette commande :
python3 ./raudi.py --bootstrap <nouveau_nom_outil>
| Option | Description | Valeur par défaut |
|---|---|---|
| --push | Pousser automatiquement vers Docker Hub | False |
| --remote | Vérifier sur Docker Hub plutôt que sur Docker local avant la construction | False |
Voici la liste actuelle des outils qui ont été ajoutés. Ce sont tous des outils qui n'ont pas d'Image Docker officielle fournie par le développeur :
Chaque outil dans le répertoire tools contient au moins deux fichiers :
Si vous voulez ajouter un nouvel outil, il vous suffit de créer un dossier pour cet outil spécifique dans le répertoire tools. Dans ce dossier, vous devez placer le Dockerfile avec des build args définis pour personnaliser et automatiser la construction. Une fois le Dockerfile créé, vous devez créer un fichier config.py dans le même répertoire avec une fonction nommée get_config(organization, common_args). Attention : la fonction DOIT s'appeler ainsi et DOIT avoir ces deux paramètres (même si vous ne les utilisez pas). La valeur retournée est la configuration pour cet outil spécifique et a la structure suivante :
config = {
'name': organization+'/<nom_de_l_image>',
'version': '', # Devrait être une fonction helper
'buildargs': {
},
'tests': []
}
Les quatre clés sont :
Après cela, vous êtes prêt ! Faites juste attention que le nom de l'outil DOIT ÊTRE LE MÊME que le répertoire dans lequel vous avez placé son Dockerfile.
Il y a une CONVENTION DE NOMMAGE pour les versions : utilisez uniquement des POINTS et des CHIFFRES ; veuillez donc supprimer tout 'v' en tête de la version dans le config.py spécifique (pour un exemple fonctionnel, vérifiez tools/dirsearch/config.py).
Pour obtenir les dernières versions et informations sur les outils et les images de base, un ensemble de helpers a été implémenté. Si vous voulez ajouter un nouvel outil, vous devriez utiliser ces helpers pour avoir une Image Docker qui est automatiquement mise à jour par RAUDI.
get_latest_pip_versionCe helper est utilisé pour récupérer la dernière version d'un package pip. Il suffit du nom du package et retourne le numéro de version. Exemple :
VERSION = helper.get_latest_pip_version(package_name)
get_latest_npm_registry_versionCe helper est utilisé pour récupérer la dernière version d'un package npm. Il suffit du nom du package et retourne le numéro de version. Exemple :
VERSION = helper.get_latest_npm_registry_version(package_name)
get_latest_github_releaseCe helper est utilisé pour récupérer des informations sur un dépôt GitHub qui utilise les Releases et possède plusieurs types d'artefacts (par exemple des exécutables pour différents OS). Ce helper prend le dépôt (au format user/repo) et une chaîne cible pour identifier le bon artefact à télécharger. Il retourne un dictionnaire avec deux clés (url et version). Exemple :
VERSION = helper.get_latest_github_release("user/repo", "linux_amd64")
get_latest_github_release_no_browser_downloadCe helper est utilisé pour récupérer des informations sur un dépôt GitHub qui utilise les Releases et n'a que le code source (ce qui signifie qu'il y a un zipball et un tarball). Ce helper prend le dépôt (au format user/repo) et retourne un dictionnaire avec deux clés (url et version). Exemple :
VERSION = helper.get_latest_github_release_no_browser_download("user/repo")
get_latest_github_tag_no_browser_downloadCe helper est utilisé pour récupérer des informations sur un dépôt GitHub qui utilise les Tags et n'a que le code source (ce qui signifie qu'il y a un zipball et un tarball). Ce helper prend le dépôt (au format user/repo) et retourne un dictionnaire avec deux clés (url et version). Exemple :
VERSION = helper.get_latest_github_tag_no_browser_download("user/repo")
get_latest_github_commitCe helper est utilisé pour récupérer des informations sur un dépôt GitHub qui n'utilise ni Tags ni Releases. Dans ce cas, l'objectif est de récupérer le dernier commit. Ce helper prend le dépôt (au format user/repo) et retourne une chaîne représentant la date du dernier commit au format YYYYYMMDD.
VERSION = helper.get_latest_github_commit("user/repo")
Cette section fournit des exemples pour les outils de sécurité réseau actuellement ajoutés. Comme vous pouvez le voir, les images ne fournissent que l'outil, donc si vous avez besoin d'utiliser une wordlist, vous devez la monter.
docker run -it --rm secsi/<outil> <commande>
docker run -it --rm -v <répertoire_src_wordlist>:<répertoire_conteneur_wordlist> secsi/dirb <url> <répertoire_conteneur_wordlist>/<fichier_wordlist>
Nous sommes italiens, donc nous le prononçons probablement différemment de vous. La prononciation correcte (en utilisant la transcription phonétique) est la suivante :
/ˈraʊdi/
Sinon, pensez au chien en peluche dans la célèbre série TV Scrubs : Rowdy
Tout le monde est invité à contribuer ! Nous avons créé un document très détaillé pour décrire comment contribuer à RAUDI.
RAUDI est fièrement développé @SecSI par :
Autres contributeurs :
RAUDI est un logiciel open-source et gratuit publié sous la GNU GPL v3.
| --force |
| Construire ou non si une image avec le même nom de tag a été trouvée |
| False |
| Nom | Image Docker | Source |
|---|