
Strumento basato sul web per la registrazione delle attività di red team, il reporting e la consapevolezza situazionale, con integrazione con Cobalt Strike e BloodHound.
Un hub per l'attività Red Team per supportare la tenuta dei registri, la consapevolezza situazionale e il reporting. Stepping Stones fornisce un'interfaccia web per il team per registrare le attività e generare frammenti di report. L'interfaccia è pensata per essere abbastanza rapida da essere usata durante tutta l'operazione, non solo nella fase di reporting.
Stepping Stones è un'applicazione Python Django, quindi per avere una copia locale in esecuzione:
python -m venv .venv.venv\Scripts\activate oppure source .venv/bin/activate su *nixpip install -r requirements.txtpython manage.py makemigrations background_taskpython manage.py migratepython manage.py runserver e python manage.py process_tasks contemporaneamentepython manage.py check --deploy per ottenere consigli sull'indurimento, quindi seguire una guida come:
https://docs.djangoproject.com/en/6.0/howto/deployment/Sul team server - aprire un varco nel firewall per consentire a Stepping Stones di connettersi, ad esempio:
sudo ufw allow proto tcp from 172.31.16.0/20 to any port 50050Se si esegue una copia locale, quando il codice è stato aggiornato in git e si desiderano le nuove funzionalità:
sudo service ssbot stopsudo service steppingstones stoprm -rf /tmp/stepping-stones-main; unzip /tmp/stepping-stones-main.zip && cp -R /tmp/stepping-stones-main/* /opt/steppingstones.venv\Scripts\activate oppure source .venv/bin/activate su *nixpip install -r requirements.txtpython manage.py makemigrations background_taskpython manage.py migrate.
python manage.py makemigrations, FERMARSI e contattare gli sviluppatori di Stepping Stones - è importante che tutti gli utenti lavorino con lo stesso set di script di migrazione e che questi siano coordinati tramite gli sviluppatori.sudo service ssbot restartsudo service steppingstones restartjournalctl -u steppingstonesSe si sta usando la stessa istanza per diversi lavori e si desidera archiviare i vecchi dati per poi ricominciare da zero, si può:
mv db.sqlite3 db.sqlite.OLD_CLIENT_NAMEIl sistema usa SQLite. Eseguire periodicamente il backup del file db.sqlite3 nella radice del server o tramite l'interfaccia Web per proteggere i propri dati preziosi.
A ciascun URL di webhook configurato verrà inviato un piccolo documento JSON in corrispondenza di eventi chiave. Il documento JSON ha sempre la struttura:
{
"type": "notification type",
"message": "Human readable message"
}
Il campo type può essere uno dei seguenti:
new beacon (un beacon mai visto prima si è connesso a un Team Server monitorato)respawned beacon (un beacon già visto si è connesso a un Team Server monitorato)returned beacon (un beacon esplicitamente monitorato per la riconnessione si è appena riconnesso)Per consumare questi dati, si può usare uno scenario https://make.com, basato sul seguente blueprint:
{"name":"Webhook to iOS","flow":[{"id":1,"module":"gateway:CustomWebHook","version":1,"parameters":{"hook":129792,"maxResults":1},"mapper":{},"metadata":{"designer":{"x":-386,"y":-129},"restore":{"parameters":{"hook":{"data":{"editable":"true"},"label":"My webhook"}}},"parameters":[{"name":"hook","type":"hook:gateway-webhook","label":"Webhook","required":true},{"name":"maxResults","type":"number","label":"Maximum number of results"}],"interface":[{"name":"type","type":"text"},{"name":"message","type":"text"}]}},{"id":8,"module":"ios:SendNotification","version":1,"parameters":{"device":171760},"mapper":{"body":"{{1.message}}","title":"{{1.type}}","action":"","priority":10,"collapsible":false},"metadata":{"designer":{"x":-31,"y":-128},"restore":{"expect":{"action":{"label":"Default"},"priority":{"label":"Deliver immediately"}},"parameters":{"device":{"data":{"editable":"undefined"},"label":"Personal Phone"}}},"parameters":[{"name":"device","type":"device:apn","label":"Device","required":true}],"expect":[{"name":"title","type":"text","label":"Title","required":true},{"name":"body","type":"text","label":"Body"},{"name":"action","type":"select","label":"Action","validate":{"enum":["open_url"]}},{"name":"priority","type":"select","label":"Priority","required":true,"validate":{"enum":[10,5]}},{"name":"collapsible","type":"boolean","label":"Collapse push notifications","required":true}]}}],"metadata":{"instant":true,"version":1,"scenario":{"roundtrips":1,"maxErrors":3,"autoCommit":true,"autoCommitTriggerLast":true,"sequential":false,"confidential":false,"dataloss":false,"dlq":false},"designer":{"orphans":[]},"zone":"eu1.make.com"}}
Importare il blueprint precedente creando uno scenario vuoto e usando la funzione "Import Blueprint" nel menu "..." (Altro) che si trova al centro in basso nell'interfaccia Web.
Sono quindi necessari altri due passaggi:
I webhook possono essere testati tramite un pulsante nella pagina dei webhook di Stepping Stones.
Stepping Stones utilizza il sistema di permessi a livello di modello di Django, consentendo di limitare gli utenti nella creazione, modifica, visualizzazione ed eliminazione di ciascun tipo di modello dati.
I gruppi si trovano nella console /admin e assegnano un insieme di permessi, ad esempio adatti al Blue Team di un cliente, a tutti i membri del gruppo.
I gruppi esistenti sono:
| Ruolo | Descrizione |
|---|---|
| Client Blue Team - Read Only | Può leggere la pagina degli eventi e dei file |
| Client Blue Team - Limited Write | Come Client Blue Team - Read Only con accesso in scrittura ai campi esito e rilevamento di un evento |
Gli utenti creati durante il processo di installazione ricevono lo stato di "superuser", quindi implicitamente hanno tutti i permessi possibili. Tuttavia, quando si creano manualmente utenti tramite la console admin, assicurarsi che NON siano contrassegnati come "staff" né come "superuser", così da partire senza permessi impliciti e ottenere permessi solo tramite l'aggiunta a gruppi.
I fusi orari degli utenti possono essere modificati tramite il portale /admin. I tempi nei report sono intenzionalmente emessi in UTC per consentire una più facile correlazione da parte dei Blue Team.
I formati data presentati da Stepping Stones dovrebbero corrispondere alla locale del browser web. Ad esempio, gli utenti il cui browser è configurato con una locale statunitense visualizzeranno le date nel formato MM/DD/YYYY nell'interfaccia web e nei frammenti di report.
Stepping Stones può acquisire log da altri strumenti se sono formattati nel formato EventStream personalizzato basato su JSON. Il formato è descritto in dettaglio nell'interfaccia web di SteppingStones, inclusi schemi e dati di esempio.
Una volta che un log EventStream è stato acquisito da Stepping Stones, le voci pertinenti specifiche possono essere clonate in Eventi per il report.
Il metodo preferito per integrare Cobalt Strike è tramite SSBot. Ciò richiede una copia con licenza di Cobalt Strike in /opt/cobaltstrike o c:\tools\cobaltstrike che verrà utilizzata per contattare qualsiasi team server (abilitato) configurato nell'interfaccia Web.
Una volta integrato:
Sono disponibili comandi CLI aggiuntivi che possono essere usati se SSBot non funziona come previsto:
.\manage.py reset_cs_data [-s SERVER] - Reimposta tutti i dati analizzati dal team server indicato, o tutti se non viene indicato alcun nome. Questo non influisce sui dati derivati dai log CS, ad esempio eventi clonati manualmente o credenziali..\manage.py parse_log_tar <file name> - Analizza il contenuto di una directory di log, compressa in tar e prelevata da un team server. Nota: non include tutti i dati accessibili da SSBot e quindi non è la tecnica di acquisizione preferitaI server Neo4j configurati tramite l'interfaccia web verranno utilizzati per:
owned di BloodHound quando vengono aggiunte credenziali con una password o quando un beacon viene eseguito su un host specifico come system.È possibile estendere le funzionalità di Stepping Stones tramite plugin. La documentazione aggiuntiva è disponibile qui.