
Ferramenta baseada na web para registro de atividades de red team, geração de relatórios e consciência situacional, com integração com Cobalt Strike e BloodHound.
Um hub para atividades de Red Team para auxiliar no registro de informações, consciência situacional e relatórios. O Stepping Stones fornece uma UI baseada na web para a equipe registrar atividades e gerar trechos de relatórios. A UI é projetada para ser rápida o suficiente para ser usada durante todo o engajamento, não apenas na fase de relatórios.
Postagem do Blog de Lançamento
O Stepping Stones é uma aplicação Python Django, então para ter uma cópia local em execução:
python -m venv .venv.venv\Scripts\activate ou source .venv/bin/activate no *nixpip install -r requirements.txtpython manage.py makemigrations background_taskpython manage.py migratepython manage.py runserver e python manage.py process_tasks simultaneamentepython manage.py check --deploy para obter recomendações de endurecimento e depois siga um guia como:
https://docs.djangoproject.com/en/6.0/howto/deployment/No Team Server - abra uma brecha no firewall para permitir que o Stepping Stones se conecte, ex.:
sudo ufw allow proto tcp from 172.31.16.0/20 to any port 50050Se estiver executando uma cópia local, quando o código for atualizado no git e você quiser os novos recursos:
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 no *nixpip install -r requirements.txtpython manage.py makemigrations background_taskpython manage.py migrate.
python manage.py makemigrations, então PARE e contate os desenvolvedores do Stepping Stones - é importante que todos os usuários estejam trabalhando com o mesmo conjunto de scripts de migração e que isso seja coordenado pelos desenvolvedores.sudo service ssbot restartsudo service steppingstones restartjournalctl -u steppingstonesSe você estiver usando a mesma instância para diferentes trabalhos e quiser arquivar os dados antigos e recomeçar, você pode:
mv db.sqlite3 db.sqlite.OLD_CLIENT_NAMEO sistema usa SQLite. Faça backup do arquivo db.sqlite3 na raiz do servidor ou pela interface web periodicamente para proteger seus dados valiosos.
Cada uma das URLs de webhook configuradas receberá um pequeno documento JSON em eventos importantes. O documento JSON sempre tem a estrutura:
{
"type": "notification type",
"message": "Human readable message"
}
O campo type pode ser um dos seguintes:
new beacon (Um beacon nunca antes visto conectou-se a um Team Server monitorado)respawned beacon (Um beacon já visto conectou-se a um Team Server monitorado)returned beacon (Um beacon que estava sendo explicitamente monitorado para reconexão acabou de se reconectar)Para consumir isso, você pode usar um cenário do https://make.com, baseado no seguinte 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"}}
Importe o blueprint acima criando um cenário em branco e usando o recurso "Import Blueprint" no menu "..." (Mais) encontrado no centro inferior da interface web.
Mais dois passos são necessários em seguida:
Os webhooks podem ser testados por meio de um botão na página de webhooks do Stepping Stones.
O Stepping Stones utiliza o sistema de permissões em nível de modelo do Django, permitindo que os usuários sejam impedidos de criar, editar, visualizar e excluir cada tipo de modelo de dados.
Grupos podem ser encontrados no console /admin, que atribuem um conjunto de permissões, ex.: adequadas para o Blue Team de um Cliente, a qualquer membro desse grupo.
Os grupos existentes são:
| Função | Descrição |
|---|---|
| Blue Team do Cliente - Somente Leitura | Pode ler a página de eventos e arquivos |
| Blue Team do Cliente - Escrita Limitada | Como o Blue Team do Cliente - Somente Leitura com acesso de escrita aos campos de desfecho e detecção de um Evento |
Os usuários criados durante o processo de instalação recebem status de "superuser" e, portanto, implicitamente têm todas as permissões possíveis. No entanto, ao criar usuários manualmente pelo console admin, certifique-se de que eles NÃO sejam marcados como "staff" nem "superuser" para que comecem sem permissões implícitas e, portanto, só obtenham permissões ao serem adicionados a grupos.
Os fusos horários dos usuários podem ser modificados pelo portal /admin. Os horários nos relatórios são intencionalmente emitidos em UTC para permitir uma correlação mais fácil pelas Blue Teams.
Os formatos de data apresentados pelo Stepping Stones devem corresponder ao locale do navegador da web. Ou seja, usuários cujo navegador esteja configurado com um locale dos EUA verão as datas no formato MM/DD/YYYY na interface web e nos trechos de relatório.
O Stepping Stones pode ingerir logs de outras ferramentas se eles forem formatados no formato EventStream personalizado, baseado em JSON. O formato é detalhado na interface web do SteppingStones, incluindo esquemas e dados de exemplo.
Depois que um log EventStream for ingerido pelo Stepping Stones, entradas específicas e relevantes podem ser clonadas em Eventos para o relatório.
O método preferido de integrar o Cobalt Strike é por meio do SSBot. Isso requer uma cópia licenciada do Cobalt Strike em /opt/cobaltstrike ou c:\tools\cobaltstrike, que será usada para contatar quaisquer Team Servers (habilitados) configurados na interface web.
Uma vez integrado:
Existem comandos CLI adicionais que podem ser usados se o SSBot não estiver funcionando como esperado:
.\manage.py reset_cs_data [-s SERVER] - Redefinirá quaisquer dados analisados do Team Server fornecido, ou todos se nenhum nome for fornecido. Isso não afetará dados derivados dos logs do CS, ex.: eventos ou credenciais clonados manualmente..\manage.py parse_log_tar <file name> - Analisará o conteúdo de um diretório de logs, empacotado em tar e obtido de um Team Server. Nota: isso não inclui todos os dados acessíveis pelo SSBot e, portanto, não é a técnica de ingestão preferidaServidores Neo4j configurados pela interface web serão usados para:
owned do BloodHound quando credenciais forem adicionadas com senha, ou quando um beacon for executado em um host específico como sistema.É possível estender a funcionalidade do Stepping Stones por meio de plugins. Documentação adicional está disponível aqui.