
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.