
Déploiement automatisé d'infrastructure Red Team avec Docker
Version précoce. Suivez-moi sur Twitter pour rester informé du développement de Redcloud.
💁☁️🐚🌱
Démarrage rapide - Architecture - Cas d'utilisation - Captures d'écran
Redcloud est une boîte à outils puissante et conviviale pour déployer une infrastructure Red Team complète en utilisant Docker. Exploitez la vitesse du cloud pour vos outils. Déploie en quelques minutes. Utilisez-la et gérez-la avec son interface web élégante.
Idéal pour vos tests d'intrusion, terrains d'entraînement, red teaming et chasses aux bugs !
Auto-hébergez votre infrastructure d'attaque sans douleur, déployez votre propre infrastructure offensive vivante, scalable et résiliente en quelques minutes.
La démo suivante montre le déploiement de Redcloud via SSH, suivi de Metasploit. Ensuite, nous examinons Traefik et un volume live attaché à Metasploit. Enfin, nous vérifions que la base de données de Metasploit est fonctionnelle avec le terminal web, supprimons le conteneur, et terminons Redcloud.
cat ~/.ssh/id_rsa.pub | ssh root@your-deploy-target-ip 'cat >> .ssh/authorized_keys'
eval (docker-machine env default)
python --version
Déploiement:```bash
> git clone https://github.com/khast3x/redcloud.git
> cd redcloud
> python redcloud.py
Redcloud utilise PyYAML pour afficher la liste des modèles disponibles. Il est installé par défaut sur la plupart des systèmes.
Si ce n'est pas le cas, exécutez simplement :```bash
pip install -r requirements.txt
Redcloud a 3 méthodes de déploiement différentes :
1. **Localement**
2. **À distance, via ssh**. Nécessite que votre clé publique soit dans le fichier `authorized_keys` de votre cible.
3. **À distance, via docker-machine**. Exécutez la ligne `eval (docker-machine env deploy_target)` pour précharger votre environnement avec votre docker-machine, puis lancez `redcloud.py`. Redcloud devrait détecter automatiquement votre docker-machine et mettre en évidence les éléments de menu pertinents pour un déploiement docker-machine.
___
<h4 align="center">
<b>Modèles</b>
<br>
<br>
</h4>
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/345/e38f19fa9cc10216030f7856b99170a4ac7c35399c2dd9daf19156a6e9b75e46.png" width="540" title="Modèles Redcloud">
</p>
___
**En bref,**
`redcloud.py` déploie une pile [Portainer](https://www.portainer.io/), **préchargée avec de nombreux modèles d'outils pour vos engagements offensifs**, propulsée par Docker. Une fois déployé, contrôlez Redcloud avec [l'interface web](#captures-d'écran). Utilise [Traefik](https://traefik.io/) comme proxy inverse. Déploiement à distance facile vers votre serveur cible en utilisant le `ssh` système ou `docker-machine`.
* :rocket: Vous avez toujours voulu lancer un Kali dans le cloud en quelques clics ?
* :package: Avoir des silos propres entre vos outils, techniques et étapes ?
* :ambulance: Surveiller la santé de vos scans et C2 ?
* :fire: Éviter les tâches d'administration système pour configurer une campagne de phishing et pirater plus vite ?
* :smiling_imp: Curieux de savoir comment vous construiriez *la* infrastructure d'attaque idéale ?
Utilisez l'interface web pour surveiller, gérer et **interagir avec chaque conteneur**. Utilisez le terminal web réactif comme vous le feriez avec le vôtre. Créez des volumes, des réseaux et des redirections de ports à l'aide de l'interface simple de Portainer.
Déployez et gérez tous vos outils et techniques préférés avec la puissance d'Internet de qualité centre de données :rocket:
___
*Dans la section suivante, nous irons plus en détail dans les concepts de conception de Redcloud. Vous pouvez commencer sans avoir à plonger dedans.*
___
* :book: **Table des matières**
- [Introduction](#introduction)
- [Fonctionnalités](#fonctionnalités)
- [Démarrage rapide](#démarrage-rapide)
- [Détails](#détails)
- [Architecture de Redcloud](#architecture-de-redcloud)
- [Flux de déploiement](#flux-de-déploiement)
- [Réseaux](#réseaux)
- [Volumes](#volumes)
- [Accéder aux conteneurs depuis le terminal](#accéder-aux-conteneurs-depuis-le-terminal)
- [Accéder aux fichiers](#accéder-aux-fichiers)
- [Certificats SSL](#certificats-ssl)
- [Arrêter Redcloud](#arrêter-redcloud)
- [Modèles d'applications Portainer](#modèles-dapplications-portainer)
- [Proxy inverse Traefik](#proxy-inverse-traefik)
- [Considérations de sécurité de Redcloud](#considérations-de-sécurité-de-redcloud)
- [Candidats de déploiement testés](#candidats-de-déploiement-testés)
- [Dépannage](#dépannage)
- [Cas d'utilisation](#cas-dutilisation)
- [Captures d'écran](#captures-décran)
- [Guide de contribution](#guide-de-contribution)
- [Hébergement de Redcloud](#hébergement-de-redcloud)
- [Inspirations et remerciements](#inspirations-et-remerciements)
___
## Détails
### Architecture de Redcloud
* `redcloud.py`: Démarre/Arrête l'interface Web et les Modèles d'applications, en utilisant Docker et Portainer.
* `portainer`: Interface web Portainer.
* `traefik`: Conteneur proxy inverse Traefik pour l'interface web, l'api et les conteneurs de fichiers. Certains modèles ont des routes préconfigurées pour plus de commodité. Voir le `templates.yml`.
* `templates`: Conteneur `http.server` python3 qui alimente les Modèles d'applications. Vit dans un réseau "interne".
* `cert_gen`: Le conteneur [omgwtfssl](https://github.com/paulczar/omgwtfssl) qui génère les certificats SSL en utilisant les meilleures pratiques courantes.
* https://your-server-ip/portainer: Interface web Redcloud une fois déployée.
* https://your-server-ip/files: Volume `redcloud_files` de Redcloud. Vous pouvez également accéder au contenu du conteneur `redcloud_log`, protégé par le même `.htpasswd` que Traefik. Identifiants par défaut : `admin:Redcloud`
* https://your-server-ip/api: Page de surveillance de l'état de santé du proxy inverse Traefik. Affiche des statistiques en direct sur les itinéraires, les backends, les codes de retour. Affichera également les données de rappel inverse de l'implant si configurées via Traefik.
### Flux de déploiement
**Le flux de déploiement de Redcloud est le suivant :**
1. Clonez/Téléchargez le dépôt Redcloud.
2. Lancez `redcloud.py`.
3. Choisissez le candidat de déploiement dans le menu (local, ssh, docker-machine).
4. `redcloud.py` automatiquement :
* vérifie la présence de `docker` et `docker-compose` sur la machine cible.
* installe `docker` et `docker-compose` si absents.
* déploie la pile web sur la cible en utilisant `docker-compose`.
5. Une fois le déploiement terminé, `redcloud.py` affichera l'URL. Rendez-vous sur https://your-deploy-machine-ip/portainer.
6. Définissez le nom d'utilisateur/mot de passe depuis l'interface web.
7. Sélectionnez le point d'accès (le seul dans la liste).
8. Accédez aux modèles via l'élément de menu "Modèles d'applications" sur la gauche :rocket:
**Le déploiement d'un modèle d'application est le suivant :**
1. Choisissez un modèle.
2. Si vous souhaitez ajouter des options supplémentaires, sélectionnez "+ Afficher les options avancées".
3. Ajoutez le mappage de ports, les options de réseau et le mappage de volumes comme bon vous semble.
4. Sélectionnez "Déployer le conteneur".
5. Portainer lancera le conteneur. Cela peut prendre quelques minutes s'il doit récupérer l'image. Si votre serveur est dans un centre de données, cette étape sera très rapide.
6. Le conteneur devrait être en cours d'exécution :rocket:
7. Portainer vous redirigera vers la page "Conteneurs". De là, vous pouvez :
a. Voir les logs en direct du conteneur.
b. Inspecter les détails du conteneur (`docker inspect`).
c. Voir les statistiques en direct du conteneur (mémoire/processeur/réseau/processus).
d. Utiliser un shell web pour interagir avec votre conteneur.
e. Selon le modèle d'application, utilisez soit `bash` soit `sh`. Choisissez en conséquence dans le menu déroulant.
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/345/cf013b73e9bb7dc6f94dafbd31d9d158f7736fc676f94995c64de133ad9bebbe.png" width="540" title="Menu Redcloud">
</p>
### Réseaux
Redcloud facilite l'expérimentation avec les réseaux et les conteneurs.
Vous pouvez créer des réseaux supplémentaires avec différents pilotes et attacher vos conteneurs comme bon vous semble. Redcloud est livré avec 2 réseaux, `redcloud_default` et `redcloud_inside`.
### Volumes
Vous pouvez partager des données entre conteneurs en partageant des volumes. Redcloud est livré avec 3 volumes :
* `certs`: Conteneur avec les certificats générés par [omgwtfssl](https://github.com/paulczar/omgwtfssl).
* `files`: Volume de partage de fichiers standard. Pour l'instant, les fichiers sont disponibles lors de la navigation sur https://your-server-ip/files, et sont servis par le conteneur proxy inverse Traefik directement depuis le volume `files`. Un cas d'utilisation typique est d'attacher le volume à un conteneur Metasploit, de générer votre payload directement dans le volume `files`. Vous pouvez maintenant servir votre nouveau payload directement via Traefik vers la route du serveur de fichiers.
* `logs`: Disponible pour les logs, servi également par le serveur de fichiers. L'accès nécessite une authentification de base. Par défaut `admin:Redcloud`.
### Accéder aux conteneurs depuis le terminal
Si vous souhaitez rester dans votre terminal pour travailler avec les conteneurs déployés, c'est très facile avec Docker. Gardez ces points à l'esprit :
* La plupart des conteneurs ont `bash`, mais certains utilisent `sh` à la place
* Tous les noms de conteneurs des modèles d'applications Redcloud commencent par `red_`, comme `red_msf-postgresql`
* Avec Docker, vous pouvez utiliser `docker exec` ou `attach` pour interagir avec un conteneur
* `exec` est préféré car il crée un nouveau processus
* `attach` vous place directement sur le processus en cours d'exécution, ce qui pourrait tuer votre conteneur en cours d'exécution
* Si vous exécutez Redcloud :
* Localement ou via `docker-machine`, tapez simplement ces commandes dans votre shell local
* Via `ssh`, connectez-vous d'abord en ssh à votre cible de déploiement pour exécuter les commandes suivantes
Pour commencer à interagir avec le conteneur déployé souhaité :```bash
> docker exec -it red_container-name /bin/bash
root@70a819ef0e87:/#
Si vous voyez le message suivant, cela signifie que bash n'est pas installé. Dans ce cas, remplacez simplement /bin/bash par /bin/sh :```bash
docker exec -it red_container-name /bin/bash OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caused "exec: "/bin/bash": stat /bin/bash: no such file or directory": unknown
docker exec -it red_container-name /bin/sh
Pour utiliser `docker attach`, exécutez simplement :```bash
> docker attach red_container-name
Si vous utilisez attach, le conteneur doit être démarré en mode interactif afin d'aboutir à un shell interactif.
Pointez votre navigateur vers https://votre-ip-redcloud/files.
Veuillez vous référer au volume files pour plus d'informations.
Redcloud génère un nouveau certificat SSL non signé lors du déploiement.
Le certificat est généré par omgwtfssl, implémentant la plupart des bonnes pratiques.
Une fois généré :
Il déposera les certificats générés dans /certs par défaut et les affichera également sur stdout sous une forme YAML standard, ce qui les rend faciles à consommer dans Ansible ou d'autres outils utilisant YAML.
Les certificats sont stockés dans un volume Docker partagé appelé certs. Vos conteneurs peuvent accéder à ce volume si vous l'indiquez dans "+ Advanced Settings" lors du déploiement. Le proxy inverse Traefik récupère les certificats directement depuis son fichier de configuration. Si vous souhaitez remplacer ces certificats par les vôtres, remplacez-les simplement sur ce volume.
Cela signifie également que vous pouvez partager les certificats générés dans d'autres conteneurs, comme Empire ou Metasploit pour vos callbacks inversés, ou pour une campagne de phishing.
La plupart des configurations liées au SSL se trouvent dans traefik/traefik.toml ou le fichier docker-compose.yml.
Vous pouvez arrêter Redcloud directement depuis le menu.
Les modèles d'applications déployés doivent être arrêtés manuellement avant d'arrêter Redcloud. Vous pouvez les arrêter via l'interface web de Portainer, ou docker rm -f nom-du-conteneur.
Si vous souhaitez forcer l'arrêt des conteneurs Portainer exécutant Redcloud, exécutez simplement docker-compose kill dans le dossier redcloud/.
L'option d'arrêt local et docker-machine est la même, donc elles sont combinées dans la même option.
Redcloud utilise Portainer pour orchestrer et interagir avec le moteur Docker. Portainer en soi est un projet fantastique pour gérer les déploiements Docker à distance. Portainer inclut également un système de modèles très pratique, qui est le composant majeur pour notre déploiement Redcloud.
Les modèles se trouvent dans ./templates/templates.yml. Portainer récupère le fichier de modèles depuis un conteneur dédié (templates).
Traefik est un merveilleux « routeur de périphérie cloud-native ». Il a remplacé la configuration précédente du proxy inverse NGINX.
Une image Traefik est construite lors du déploiement, en utilisant le Dockerfile situé dans traefik/Dockerfile. Il ajoute un fichier .htpasswd avec les identifiants admin:Redcloud.
Par défaut, le déploiement génère les routes suivantes :
https://votre-ip-serveur/portainerhttps://votre-ip-serveur/fileshttps://votre-ip-serveur/apiLes authentifications sont basées sur les données du .htaccess.
Depuis l'interface web de l'api Traefik, vous pouvez visualiser vos routes déployées, surveiller l'état de santé ainsi que les métriques en temps réel. C'est très pratique.
Vous pouvez ajouter des étiquettes supplémentaires qui indiquent à Traefik où router le trafic, en utilisant :
traefik/traefik.tomldocker-compose.ymltemplates.ymlVoir la documentation officielle pour plus d'informations.

Redcloud se déploie avec un certificat https auto-signé et proxyfie toutes les interactions avec la console web via celui-ci.
Cependant, le réseau par défaut expose les ports de vos conteneurs vers l'extérieur.
Vous pouvez :
labels personnalisés pour créer des routes avec Traefik. Voir le fichier docker-compose.yml pour l'inspiration.De plus :
docker & docker-machine nécessitent des privilèges root. Vous pouvez réduire les exigences de privilèges en suivant la documentation officielle.redcloud.py récupère l'adresse IP publique de Redcloud en utilisant icanhazip.com.| Cible de déploiement | Statut |
|---|---|
| Ubuntu Bionic | ✔️ |
| Ubuntu Xenial | ✔️ |
| Debian Stretch | ✔️ |
python --version. Redcloud nécessite Python 3+.python3 au lieu de python sur un système plus ancien.redcloud.py exige que le candidat au déploiement ait la clé publique dans son .ssh/authorized_keys, et gère l'authentification sans mot de passe en utilisant la clé publique de l'utilisateur. C'est la configuration par défaut pour la plupart des workflows VPS.eval comme illustré ci-dessus.docker & docker-machine nécessitent des privilèges root. Vous pouvez réduire les exigences de privilèges en suivant la documentation officiellerm -rf /opt/portainer/data/files/./files/.
msfconsole de Metasploit via l'interface web
Toute aide est appréciée. C'est un projet annexe, donc il manque probablement quelques boulons et vis. Avant tout :
Vous pouvez héberger Redcloud sur n'importe quel serveur Unix qui exécute Docker.
Redcloud est conçu pour être utilisé dans un environnement cloud, comme un simple VPS avec ssh, ou même AWS EC2, GCP, etc.
Un grand nombre de fournisseurs cloud offrent des crédits gratuits pour se familiariser avec leurs services. De nombreuses listes et tutoriels couvrent la façon d'obtenir des crédits d'hébergement gratuits auprès des grands fournisseurs. Cette liste est un bon point de départ.
En ce qui concerne la méthode de déploiement, je préfère personnellement travailler avec docker-machine car il devient extrêmement facile de créer de nouvelles machines et de les gérer une fois que vous avez configuré le driver de votre fournisseur cloud. Si vous préférez utiliser ssh, assurez-vous de jeter un œil au projet shellz d'evilsocket pour gérer vos clés et profils.
Red Team Infrastructure Wiki - bluscreenofjeff
Automated Red Team Infrastructure Guide - rastamouse
Safe Red Team Infrastructure - Tim MalcomVetter
Red Baron - Coalfire Research
Rapid Attack Infrastructure - Obscurity Labs
Decker - Steven Aldinger
hideNsneak - Mike Hodges
@Ullaakut pour le logo - Assurez-vous de consulter son repo !
Enfin, si vous souhaitez voir votre outil intégré, contactez-moi sur Twitter. Ce projet est maintenu sur mon temps libre. Gardez un œil sur la branche dev pour les fonctionnalités à venir.
Redcloud a été initialement développé pour faciliter le déploiement d'environnements de formation pour les étudiants en sécurité informatique.
Si vous souhaitez rester informé de ce projet :
python3-distutils en utilisant apt-get install python3-distutils sur une base debian/ubuntu.portainer ne pourra pas utiliser son emplacement de volume par défaut /opt/. Pour résoudre ce problème, ouvrez le fichier docker-compose.yml, remplacez /opt/portainer/data:/data par un dossier avec un accès en écriture, par exemple : /tmp/portainer/:/data et créez le répertoire /tmp/portainer avant d'exécuter Redcloud.