
Deploy automatizzato di infrastruttura Red Team utilizzando Docker
Versione anticipata. Seguimi su Twitter per rimanere aggiornato sullo sviluppo di Redcloud.
💁☁️🐚🌱
Avvio Rapido - Architettura - Casi d'uso - Screenshot
Redcloud è un toolbox potente e facile da usare per distribuire una Infrastruttura Red Team completa utilizzando Docker. Sfrutta la velocità del cloud per i tuoi strumenti. Si distribuisce in pochi minuti. Usalo e gestiscilo con la sua interfaccia web raffinata.
Ideale per i tuoi test di penetrazione, shooting range, red teaming e bug bounty!
Ospita la tua infrastruttura di attacco senza problemi, distribuisci la tua infrastruttura offensiva live, scalabile e resiliente in pochi minuti.
La seguente demo mostra la distribuzione di Redcloud tramite SSH, seguita da Metasploit. Osserviamo quindi Traefik e un volume live collegato a Metasploit. Infine, verifichiamo che il database di Metasploit sia funzionante con il terminale web, eliminiamo il contenitore e terminiamo Redcloud.
cat ~/.ssh/id_rsa.pub | ssh root@your-deploy-target-ip 'cat >> .ssh/authorized_keys'
eval (docker-machine env default)
python --version
Distribuzione:```bash
> git clone https://github.com/khast3x/redcloud.git
> cd redcloud
> python redcloud.py
Redcloud usa PyYAML per stampare l'elenco dei template disponibili. È installato di default sulla maggior parte dei sistemi.
In caso contrario, esegui semplicemente:```bash
pip install -r requirements.txt
Redcloud ha 3 diversi metodi di distribuzione:
1. **Localmente**
2. **Remotamente, usando ssh**. Richiede di avere la propria chiave pubblica nel file `authorized_keys` del target.
3. **Remotamente, usando docker-machine**. Esegui il comando `eval (docker-machine env deploy_target)` per precaricare il tuo ambiente con il tuo docker-machine, e avvia `redcloud.py`. Redcloud dovrebbe rilevare automaticamente il tuo docker-machine e evidenziare gli elementi del menu rilevanti per una distribuzione tramite docker-machine.
___
<h4 align="center">
<b>Modelli</b>
<br>
<br>
</h4>
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/345/e38f19fa9cc10216030f7856b99170a4ac7c35399c2dd9daf19156a6e9b75e46.png" width="540" title="Modelli Redcloud">
</p>
___
**In breve,**
`redcloud.py` distribuisce uno stack di [Portainer](https://www.portainer.io/), **precaricato con molti modelli di strumenti per le tue operazioni offensive**, basato su Docker. Una volta distribuito, controlla Redcloud tramite l'[interfaccia web](#screenshots). Utilizza [Traefik](https://traefik.io/) come reverse-proxy. Distribuzione remota facile sul tuo server target utilizzando `ssh` di sistema o `docker-machine`.
* :rocket: Hai mai desiderato avviare un Kali nel cloud con pochi clic?
* :package: Avere silos puliti tra i tuoi strumenti, tecniche e fasi?
* :ambulance: Monitorare la salute delle tue scansioni e del C2?
* :fire: Saltare quelle attività di amministrazione di sistema per impostare una campagna di phishing e ottenere pwning più velocemente?
* :smiling_imp: Curioso di come costruiresti *l'*infrastruttura d'attacco ideale?
Usa l'interfaccia web per monitorare, gestire e **interagire con ogni contenitore**. Usa il terminale web scattante proprio come faresti con il tuo. Crea volumi, reti e inoltri di porta utilizzando la semplice interfaccia di Portainer.
Distribuisci e gestisci tutti i tuoi strumenti e tecniche preferiti con la potenza di Internet di livello data center :rocket:
___
*Nella sezione seguente, approfondiremo i concetti di design di Redcloud. Puoi iniziare senza doverti immergere, comunque.*
___
* :book: **Indice dei contenuti**
- [Introduzione](#introduction)
- [Caratteristiche](#features)
- [Avvio rapido](#quick-start)
- [Dettagli](#details)
- [Architettura di Redcloud](#redcloud-architecture)
- [Flusso di lavoro della distribuzione](#deployment-workflow)
- [Reti](#networks)
- [Volumi](#volumes)
- [Accesso ai contenitori dal terminale](#accessing-containers-from-the-terminal)
- [Accesso ai file](#accessing-files)
- [Certificati SSL](#ssl-certificates)
- [Arresto di Redcloud](#stopping-redcloud)
- [Modelli di app di Portainer](#portainer-app-templates)
- [Reverse-proxy Traefik](#traefik-reverse-proxy)
- [Considerazioni sulla sicurezza di Redcloud](#redcloud-security-considerations)
- [Candidati di distribuzione testati](#tested-deployment-candidates)
- [Risoluzione dei problemi](#troubleshooting)
- [Casi d'uso](#use-cases)
- [Screenshot](#screenshots)
- [Linee guida per i contributi](#contribution-guideline)
- [Hosting di Redcloud](#hosting-redcloud)
- [Ispirazioni e ringraziamenti](#inspirations--shout-outs)
___
## Dettagli
### Architettura di Redcloud
* `redcloud.py`: Avvia/Arresta l'interfaccia web e i modelli di app, utilizzando Docker e Portainer.
* `portainer`: Interfaccia web di Portainer.
* `traefik`: Container reverse-proxy Traefik per l'interfaccia web, i contenitori api e files. Alcuni modelli hanno rotte preconfigurate per comodità. Vedi il file `templates.yml`.
* `templates`: Container python3 `http.server` che alimenta i modelli di app. Vive in una rete "interna".
* `cert_gen`: Il container [omgwtfssl](https://github.com/paulczar/omgwtfssl) che genera i certificati SSL utilizzando le migliori pratiche comuni.
* https://your-server-ip/portainer: Interfaccia web di Redcloud dopo la distribuzione.
* https://your-server-ip/files: Volume `redcloud_files` di Redcloud. Puoi anche accedere al contenuto del container `redcloud_log`, protetto dallo stesso `.htpasswd` di Traefik. Credenziali predefinite: `admin:Redcloud`
* https://your-server-ip/api: Pagina di monitoraggio della salute del reverse-proxy Traefik. Mostra statistiche in tempo reale su rotte, backend, codici di ritorno. Mostrerà anche i dati degli implant di callback inverso se configurati tramite Traefik.
### Flusso di lavoro della distribuzione
**Il flusso di lavoro della distribuzione di Redcloud è il seguente:**
1. Clona/Scarica il repository di Redcloud.
2. Avvia `redcloud.py`.
3. Scegli il candidato di distribuzione dal menu (locale, ssh, docker-machine).
4. `redcloud.py` automaticamente:
* verifica la presenza di `docker` e `docker-compose` sulla macchina target.
* installa `docker` e `docker-compose` se assenti.
* distribuisce lo stack web sul target utilizzando `docker-compose`.
5. Una volta completata la distribuzione, `redcloud.py` restituirà l'URL. Vai su https://your-deploy-machine-ip/portainer.
6. Imposta nome utente/password dall'interfaccia web.
7. Seleziona l'endpoint (l'unico nell'elenco).
8. Accedi ai modelli tramite la voce di menu "App Templates" a sinistra :rocket:
**La distribuzione di un modello di app è la seguente:**
1. Scegli un modello.
2. Se desideri aggiungere opzioni aggiuntive, seleziona "+ Show advanced options".
3. Aggiungi mappatura delle porte, opzioni di rete e mappatura dei volumi come preferisci.
4. Seleziona "Deploy the container".
5. Portainer avvierà il container. Potrebbero essere necessari alcuni minuti se deve scaricare l'immagine. Se il tuo server è in un data center, questo passaggio sarà molto veloce.
6. Il container dovrebbe essere in esecuzione :rocket:
7. Portainer ti reindirizzerà alla pagina "Containers". Da lì, puoi:
a. Visualizzare i log in tempo reale del container.
b. Ispezionare i dettagli del container (`docker inspect`).
c. Visualizzare le statistiche in tempo reale del container (memoria/cpu/rete/processi).
d. Utilizzare una web shell per interagire con il tuo container.
e. A seconda del modello di app, utilizzare `bash` o `sh`. Scegli di conseguenza dal menu a discesa.
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/345/cf013b73e9bb7dc6f94dafbd31d9d158f7736fc676f94995c64de133ad9bebbe.png" width="540" title="Menu di Redcloud">
</p>
### Reti
Redcloud rende facile giocare con reti e contenitori.
Puoi creare reti aggiuntive con driver diversi e collegare i tuoi contenitori come preferisci. Redcloud viene fornito con 2 reti, `redcloud_default` e `redcloud_inside`.
### Volumi
Puoi condividere dati tra contenitori condividendo volumi. Redcloud viene fornito con 3 volumi:
* `certs`: Container con i certificati generati da [omgwtfssl](https://github.com/paulczar/omgwtfssl).
* `files`: Volume di condivisione file standard. Per ora, i file sono disponibili navigando su https://your-server-ip/files, e vengono serviti dal container reverse-proxy Traefik direttamente dal volume `files`. Un caso d'uso tipico è collegare il volume a un container Metasploit, generare il payload direttamente nel volume `files`. Ora puoi servire il tuo nuovo payload direttamente attraverso Traefik alla route del file server.
* `logs`: Disponibile per i log, servito anche dal file server. L'accesso richiede l'autenticazione di base. Il valore predefinito è `admin:Redcloud`.
### Accesso ai contenitori dal terminale
Se desideri rimanere nel tuo terminale per lavorare con i contenitori distribuiti, è molto facile usando Docker. Tieni presente queste cose:
* La maggior parte dei contenitori ha `bash`, ma alcuni usano `sh` invece
* Tutti i nomi dei contenitori dei modelli di app di Redcloud iniziano con `red_`, come `red_msf-postgresql`
* Con Docker, puoi usare `docker exec` o `attach` per interagire con un contenitore
* `exec` è preferito perché crea un nuovo processo
* `attach` ti porta direttamente sul processo in esecuzione, potenzialmente uccidendo il contenitore in esecuzione
* Se esegui Redcloud:
* Localmente o usando `docker-machine`, digita semplicemente questi comandi nella tua shell locale
* Usando `ssh`, prima accedi via ssh al tuo target di distribuzione per eseguire i seguenti comandi
Per iniziare a interagire con il contenitore desiderato:```bash
> docker exec -it red_container-name /bin/bash
root@70a819ef0e87:/#
Se vedi il seguente messaggio, significa che bash non è installato. In tal caso sostituisci semplicemente /bin/bash con /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
Per usare `docker attach`, esegui semplicemente:```bash
> docker attach red_container-name
Se usi attach, il container deve essere avviato in modalità interattiva, in modo da accedere a una shell interattiva.
Punta il browser su https://your-redcloud-ip/files.
Fai riferimento al volume files per maggiori informazioni.
Redcloud genera un nuovo certificato SSL non firmato durante il deployment.
Il certificato è generato da omgwtfssl, implementando la maggior parte delle best practice.
Una volta generato:
Scaricherà i certificati generati in /certs di default e li visualizzerà in stdout in una forma YAML standard, rendendoli facili da consumare in Ansible o altri strumenti che usano YAML.
I certificati sono memorizzati in un volume docker condiviso chiamato certs. I tuoi container possono accedere a questo volume se lo indichi in "+ Impostazioni avanzate" durante il deployment. Il proxy inverso Traefik recupera i certificati direttamente dal suo file di configurazione. Se desideri sostituire questi certificati con i tuoi, è sufficiente sostituirli in questo volume.
Ciò significa anche che puoi condividere i certificati generati in altri container, come Empire o Metasploit per i tuoi callback inversi, o per una campagna di phishing.
La maggior parte delle configurazioni relative a SSL si trovano in traefik/traefik.toml o nel file docker-compose.yml.
Puoi fermare Redcloud direttamente dal menu.
I modelli di App distribuiti devono essere fermati manualmente prima di fermare Redcloud. Puoi fermarli usando l'interfaccia web di Portainer, o docker rm -f nome-container.
Se desideri forzare l'arresto dei container Portainer che eseguono Redcloud, esegui semplicemente docker-compose kill all'interno della cartella redcloud/.
L'opzione di arresto locale e docker-machine è la stessa, quindi sono combinate nella stessa opzione.
Redcloud utilizza Portainer per orchestrare e interfacciarsi con il motore Docker. Portainer di per sé è un progetto fantastico per gestire deployment Docker da remoto. Portainer include anche un comodo sistema di template, che è il componente principale per il nostro deployment Redcloud.
I template si trovano in ./templates/templates.yml. Portainer recupera il file dei template da un container dedicato (templates).
Traefik è un meraviglioso "edge router nativo del cloud". Ha sostituito il precedente setup con proxy inverso NGINX.
Un'immagine Traefik viene costruita durante il deployment, utilizzando il Dockerfile situato in traefik/Dockerfile. Aggiunge un .htpasswd con le credenziali admin:Redcloud.
Per impostazione predefinita, il deployment genera le seguenti rotte:
https://your-server-ip/portainerhttps://your-server-ip/fileshttps://your-server-ip/apiLe autenticazioni si basano sui dati di .htaccess.
Dall'interfaccia web di Traefik, puoi visualizzare le tue rotte deployate, monitorare lo stato e le metriche in tempo reale. È molto comodo.
Puoi aggiungere etichette aggiuntive che dicono a Traefik dove instradare il traffico, utilizzando:
traefik/traefik.tomldocker-compose.ymltemplates.ymlVedi la documentazione ufficiale per maggiori informazioni.

Redcloud si deploya con un certificato https autofirmato e proxy tutte le interazioni con la console web attraverso di esso.
Tuttavia, la rete di default espone le porte dei tuoi container al mondo esterno.
Puoi:
labels personalizzate per creare rotte con Traefik. Vedi il file docker-compose.yml come ispirazione.Inoltre:
docker e docker-machine richiedono privilegi di root. Puoi ridurre i requisiti di privilegio seguendo la documentazione ufficiale.redcloud.py recupera l'indirizzo IP pubblico di Redcloud usando icanhazip.com.| Target di deployment | Stato |
|---|---|
| Ubuntu Bionic | ✔️ |
| Ubuntu Xenial | ✔️ |
| Debian Stretch | ✔️ |
python --version. Redcloud necessita di Python 3+.python3 invece di python su sistemi più vecchi.redcloud.py richiede che il candidato al deployment abbia la chiave pubblica in .ssh/authorized_keys e gestisce l'autenticazione senza password usando la chiave pubblica dell'utente. Questa è la configurazione predefinita per la maggior parte dei flussi di lavoro VPS.eval come illustrato sopra.docker e docker-machine richiedono privilegi di root. Puoi ridurre i requisiti di privilegio seguendo la documentazione ufficiale.rm -rf /opt/portainer/data/files/./files/.
msfconsole di Metasploit attraverso l'interfaccia web
Ogni aiuto è apprezzato. Questo è un progetto parallelo, quindi probabilmente mancano qualche bullone e qualche vite. Soprattutto:
Puoi ospitare Redcloud su qualsiasi server Unix che esegua Docker.
Redcloud è pensato per essere usato in un ambiente cloud, come un semplice VPS con ssh, o anche un AWS EC2, GCP, ecc...
Una vasta gamma di provider cloud offrono crediti gratuiti per familiarizzare con i loro servizi. Molte liste e tutorial coprono come ottenere crediti di hosting gratuiti dai principali fornitori. Questa lista è un buon punto di partenza.
Per quanto riguarda il metodo di deployment, personalmente preferisco lavorare con docker-machine poiché diventa estremamente facile creare nuove macchine e gestirle una volta configurato il driver del tuo provider cloud. Se preferisci usare ssh, dai un'occhiata al progetto shellz di evilsocket per gestire le tue chiavi e profili.
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 per il logo - Assicurati di dare un'occhiata al suo repo!
Infine, se desideri vedere il tuo strumento integrato, contattami su Twitter. Questo progetto è mantenuto nel mio tempo libero. Tieni d'occhio il branch dev per le prossime funzionalità.
Redcloud è stato originariamente sviluppato per facilitare il deployment di ambienti di formazione per studenti di infosec.
Se desideri rimanere aggiornato su questo progetto:
python3-distutils usando apt-get install python3-distutils su base debian/ubuntu.portainer non sarà in grado di usare la sua posizione di volume predefinita /opt/. Per risolvere, apri il file docker-compose.yml, sostituisci /opt/portainer/data:/data con una cartella con permessi di scrittura, ad esempio: /tmp/portainer/:/data e crea la directory /tmp/portainer prima di eseguire Redcloud.