
Sistema Multiagente para Testes de Penetração Automatizados (MASAPT)
❗ Aviso
Esta ferramenta foi desenvolvida para fins académicos e de investigação como parte de um curso universitário. O uso do MASAPT para atacar alvos sem consentimento prévio é ilegal.
Os programadores não se responsabilizam por qualquer dano causado por esta ferramenta e condenam qualquer uso nefasto do MASAPT. Esta ferramenta não se destina a ser usada em qualquer ambiente profissional neste momento, é apenas uma prova de conceito para o modelo teórico subjacente.
Sistema Multiagente para Testes de Penetração Automatizados 🐱💻

Um sistema autónomo de agentes SPADE que se comunicam via XMPP para coordenar e realizar testes de penetração. Numa ferramenta CLI!
Passe o URL, espere um pouco, leia o relatório!

É uma prova de conceito, sistema multiagente, desenvolvido em Python, destinado a ser usado para automatizar o processo de testes de penetração de forma estruturada e inteligente.
O objetivo final é criar uma ferramenta de pentest funcional, flexível, distribuída e baseada em CLI que possa ser usada para automatizar tarefas de testes de penetração.
Recursos atuais:
Planos futuros e recursos estão listados aqui.
Difícil.
Há um número razoável de pré-requisitos e requisitos para instalar:
Além do Python e das ferramentas de pentest que podem ser encontradas no Kali, também precisa de acesso a algum serviço XMPP. Para testar o sistema usei o ejabberd a correr localmente.
Para executar os agentes no seu servidor XMPP de escolha, precisará criar os seguintes utilizadores. Pode, claro, criar outros utilizadores, mas depois necessitará de passar os novos parâmetros JID e PWD ao criar agentes no script masapt.
| JID | PASSWORD |
|---|---|
| repoter@domain | repoterSecret |
Após os pré-requisitos estarem instalados e o XMPP configurado:
cd para a pasta do projeto
cd ../MASAPT
Adicionar diretório ao PATH
export PATH=$PATH:/path/to/MASAPT
source ~/.bashrc
Instalar requisitos python
pip install -r requirements.txt
Tornar o script masapt executável
chmod +x masapt
Inicie o sistema com:
masapt -t url/to/target
Mais agentes:
Expandir Explorer.py para que possa:
Expandir SQLinjector.py para que possa:
Expandir Coordinator.py para que possa:
O sistema MASAPT foi concebido para ser modular, distribuído e pragmático. Isto significa que os agentes que compõem o sistema são independentes do processo principal, atualizáveis e usam ferramentas de pentest existentes e 'testadas em batalha'.
Para alcançar os objetivos previstos, os agentes são desenvolvidos como parte de um modelo de três camadas que é derivado das fases padrão de pentest (planeamento - execução - pós-execução). Uma visão geral do referido modelo pode ser vista na Img1 abaixo.
Todos os conceitos teóricos desta visão geral já foram implementados em código (exceto a ideia para o futuro - Img 8.). Estes conceitos devem continuar a ser implementados em quaisquer futuras atualizações do sistema.
A ideia principal por trás do modelo de três camadas é fornecer uma estrutura para organizar e classificar agentes neste sistema.
A primeira camada do modelo contém o(s) agente(s) Explorer (Explorador) que são encarregados de realizar OSINT e recolher informações úteis sobre o alvo.
A segunda camada contém o agente Coordinator (Coordenador) e agentes Exploit (Exploração). O Coordinator é um único agente que decide quais agentes de exploração participarão dos testes atuais. Agentes de exploração, como o nome implica, são os que executam explorações - injeção de SQL, XSS, DoS, buffer overflow... Pode haver muitos destes agentes de exploração.
A terceira camada contém o Reporter (Relator) cuja tarefa é recolher todos os dados de exploração, resultados, dumps de dados de todos os agentes de exploração e resumi-los num relatório final. O relatório é então exibido ao utilizador e armazenado localmente.
Na primeira imagem, setas grossas representam o fluxo de dados no modelo.

Img2 mostra o mesmo modelo da primeira imagem, mas com mais detalhes - os agentes podem ser claramente vistos nas suas respetivas camadas. As setas cheias nesta imagem novamente representam o fluxo de dados no modelo, que consequentemente mostra quais agentes estão a comunicar entre si. Pode ver-se que o agente Explorer envia dados para o agente Coordinator, que por sua vez envia alguns dados para os agentes Exploit (SQLinjector, agent2, agent3). Finalmente, todos os dados que os agentes de exploração recolhem são passados para o agente Reporter, que então os compila, resume e apresenta ao utilizador.
Também pode ser visto que apenas os agentes Explorer e Exploit (SQLinjector) interagem com o ambiente externo (Alvo de teste). Isto é representado com setas pontilhadas bidirecionais.
Como mencionado anteriormente, uma das características do sistema MASAPT é ser distribuído. Um aspeto disto já foi implementado, visto que todos os agentes são implementados como programas independentes, executados pelo script principal (masapt).
Img 3. mostra como o sistema atual foi configurado e testado. Pode ver-se que os agentes usam o ambiente SPADE para comunicar via servidor XMPP (ejabberd) que é configurado no sistema local. O alvo de teste (SQLi Labs) também é configurado no sistema local. Esta configuração é boa para testar o sistema, mas não mostra a capacidade total do MASAPT como sistema distribuído.
Img 4. por outro lado, mostra uma possível implementação futura do MASAPT. Mostra um sistema multiagente distribuído que usa XMPP para comunicar e Docker para executar em muitos sistemas diferentes. Setas cheias mostram novamente o aspeto de comunicação e fluxo de dados do sistema, mostrando como os agentes enviam e recebem os seus dados através de um servidor XMPP central.
A principal razão para os agentes comunicarem via XMPP é fornecer uma forma fiável e independente de linguagem para os agentes comunicarem. Com esta abordagem, nem todos os agentes futuros têm de ser escritos em Python ou mesmo usar o ambiente SPADE.
A lógica por detrás disto é que pode haver algum caso de uso para um sistema diferente fazer parte do MASAPT no futuro (ex. agentes escritos noutras linguagens de programação). Portanto, esta 'abordagem XMPP' é a melhor forma de fornecer esse tipo de flexibilidade ao sistema.
Além da sua capacidade de comunicar, o comportamento é o segundo aspeto mais importante de qualquer agente. Os agentes MASAPT e o seu comportamento são modelados com um conjunto de estados, o que os torna máquinas de estados finitos. O ambiente SPADE tem bom suporte para criar máquinas de estados finitos.
Os diagramas abaixo mostram todos os estados possíveis que um agente pode estar em qualquer momento no tempo. Os diagramas também mostram quais eventos causam a transição do agente para o próximo estado. Todos os agentes futuros devem ser implementados da mesma maneira.
Todos os futuros agentes de exploração (ex. DoS, XSS...) devem ser implementados usando o diagrama Img 8. como modelo.


[1] Muito obrigado a Audi-1 e ao seu excelente SQLI labs por testar injeção SQL baseada em erro, booleana cega e baseada em tempo!
| explorerSecret |
| coordinator@domain | coordinatorSecret |
| sqlinjector@domain | injectorSecret |