
Outil web de journalisation des activités de red team, de génération de rapports et de connaissance de la situation, avec intégration de Cobalt Strike et BloodHound.
Un hub pour l'activité Red Team afin de faciliter la tenue de registres, la connaissance de la situation et le reporting. Stepping Stones fournit une interface web permettant à l'équipe de consigner son activité et de générer des extraits de rapport. L'interface est conçue pour être suffisamment rapide pour être utilisée tout au long de la mission, et pas seulement en phase de reporting.
Stepping Stones est une application Python Django, donc pour obtenir une copie locale fonctionnelle :
python -m venv .venv.venv\Scripts\activate ou source .venv/bin/activate sur *nixpip install -r requirements.txtpython manage.py makemigrations background_taskpython manage.py migratepython manage.py runserver et python manage.py process_tasks simultanémentpython manage.py check --deploy pour obtenir des recommandations de durcissement, puis suivez un guide tel que :
https://docs.djangoproject.com/en/6.0/howto/deployment/Sur le serveur d'équipe, ouvrez une porte dans le pare-feu pour permettre à Stepping Stones de se connecter, par ex. :
sudo ufw allow proto tcp from 172.31.16.0/20 to any port 50050Si vous exécutez une copie locale, lorsque le code a été mis à jour dans git et que vous souhaitez profiter des nouvelles fonctionnalités :
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 ou source .venv/bin/activate sur *nixpip install -r requirements.txtpython manage.py makemigrations background_taskpython manage.py migrate.
Si vous utilisez la même instance pour différents travaux et souhaitez archiver les anciennes données puis repartir de zéro, vous pouvez :
mv db.sqlite3 db.sqlite.OLD_CLIENT_NAMELe système utilise SQLite. Sauvegardez régulièrement le fichier db.sqlite3 situé à la racine du serveur ou via l'interface web pour protéger vos précieuses données.
Chacune des URL de webhook configurées recevra un petit document JSON lors des événements clés. Le document JSON a toujours la structure suivante :
{
"type": "notification type",
"message": "Human readable message"
}
Le champ type peut être l'une des valeurs suivantes :
new beacon (un beacon jamais vu auparavant s'est connecté à un Team Server surveillé)respawned beacon (un beacon déjà vu s'est connecté à un Team Server surveillé)returned beacon (un beacon explicitement surveillé pour une reconnexion vient de se reconnecter)Pour consommer ces notifications, vous pouvez utiliser un scénario https://make.com, basé sur le blueprint suivant :
{"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"}}
Importez le blueprint ci-dessus en créant un scénario vierge et en utilisant la fonctionnalité « Import Blueprint » sous le menu « ... » (Plus) situé en bas au centre de l'interface web.
Deux étapes supplémentaires sont ensuite requises :
Les webhooks peuvent être testés via un bouton sur la page des webhooks de Stepping Stones.
Stepping Stones utilise le système de permissions au niveau des modèles de Django, permettant de restreindre les utilisateurs dans la création, la modification, la consultation et la suppression de chaque type de modèle de données.
Les groupes se trouvent dans la console /admin et attribuent un ensemble de permissions, par ex. adaptées à la Blue Team d'un client, à tous les membres de ce groupe.
Groupes existants :
| Rôle | Description |
|---|---|
| Client Blue Team - Read Only | Peut lire la page des événements et des fichiers |
| Client Blue Team - Limited Write | Comme Client Blue Team - Read Only avec accès en écriture aux champs de résultat et de détection d'un événement |
Les utilisateurs créés pendant le processus d'installation reçoivent le statut « superuser » et disposent donc implicitement de toutes les permissions possibles. Cependant, lors de la création manuelle d'utilisateurs via la console d'administration, assurez-vous qu'ils ne soient marqués ni comme « staff » ni comme « superuser », afin qu'ils ne démarrent avec aucune permission implicite et n'obtiennent des permissions qu'en étant ajoutés à des groupes.
Les fuseaux horaires des utilisateurs peuvent être modifiés via le portail /admin. Les heures dans les rapports sont volontairement affichées en UTC pour faciliter la corrélation par les Blue Teams.
Les formats de date présentés par Stepping Stones doivent correspondre à la locale du navigateur web. C'est-à-dire que les utilisateurs dont le navigateur est configuré avec une locale américaine verront les dates au format MM/DD/YYYY dans l'interface web et les extraits de rapport.
Stepping Stones peut ingérer des journaux provenant d'autres outils s'ils sont formatés dans le format EventStream sur mesure, basé sur JSON. Le format est détaillé dans l'interface web de SteppingStones, y compris les schémas et des exemples de données.
Une fois qu'un journal EventStream a été ingéré par Stepping Stones, les entrées pertinentes peuvent être clonées dans des événements pour le rapport.
La méthode privilégiée pour intégrer Cobalt Strike est via SSBot. Cela nécessite une copie sous licence de Cobalt Strike dans /opt/cobaltstrike ou c:\tools\cobaltstrike, qui sera utilisée pour contacter tout serveur d'équipe (activé) configuré dans l'interface web.
Une fois l'intégration effectuée :
Il existe des commandes CLI supplémentaires qui peuvent être utilisées si SSBot ne fonctionne pas comme prévu :
.\manage.py reset_cs_data [-s SERVER] - Réinitialise toutes les données analysées depuis le serveur d'équipe donné, ou toutes si aucun nom n'est fourni. Cela n'affectera pas les données dérivées des journaux CS, par ex. les événements clonés manuellement ou les identifiants..\manage.py parse_log_tar <file name> - Analyse le contenu d'un répertoire de journaux, compressé en tar et récupéré depuis un serveur d'équipe. Remarque : cela n'inclut pas toutes les données accessibles par SSBot et n'est donc pas la technique d'ingestion privilégiéeLes serveurs Neo4j configurés via l'interface web seront utilisés pour :
owned de BloodHound lorsque des identifiants sont ajoutés avec un mot de passe, ou lorsqu'un beacon est exécuté en tant que système sur un hôte spécifique.Il est possible d'étendre les fonctionnalités de Stepping Stones via des plugins. Une documentation supplémentaire est disponible ici.
python manage.py makemigrations, arrêtez-vous et contactez les développeurs de Stepping Stones – il est important que tous les utilisateurs travaillent à partir du même ensemble de scripts de migration et ceux-ci doivent être coordonnés par les développeurs.sudo service ssbot restartsudo service steppingstones restartjournalctl -u steppingstones