
자동화된 침투 테스트를 위한 다중 에이전트 시스템 (MASAPT)
❗ 면책 조항
이 도구는 대학 과정의 일환으로 학술 및 연구 목적으로 개발되었습니다. 사전 동의 없이 대상을 공격하는 데 MASAPT를 사용하는 것은 불법입니다.
개발자는 이 도구로 인한 모든 피해에 대해 책임을 지지 않으며, MASAPT의 어떤 악의적인 사용도 규탄합니다. 이 도구는 현재 전문적인 환경에서 사용하기 위한 것이 아니며, 기본이 되는 이론적 모델의 _개념 증명_에 불과합니다.
자동 침투 테스트를 위한 다중 에이전트 시스템 🐱💻

XMPP를 통해 통신하여 침투 테스트를 조정하고 수행하는 SPADE 에이전트의 자율 시스템입니다. CLI 도구로!
URL을 입력하고, 잠시 기다린 후, 보고서를 읽으세요!

Python으로 개발된 개념 증명 다중 에이전트 시스템으로, 구조화되고 지능적인 방식으로 침투 테스트 프로세스를 자동화하는 데 사용하기 위한 것입니다.
궁극적인 목표는 침투 테스트 작업을 자동화하는 데 사용할 수 있는 작동 가능하고 유연하며 분산된 CLI 기반 침투 테스트 도구를 만드는 것입니다.
현재 기능:
향후 계획 및 기능은 여기에 나열되어 있습니다.
어렵다.
설치해야 할 사전 요구 사항 및 요구 사항이 꽤 많습니다:
Kali에서 찾을 수 있는 Python 및 침투 테스트 도구 외에도 일부 XMPP 서비스에 액세스해야 합니다. 시스템 테스트를 위해 로컬에서 실행되는 ejabberd를 사용했습니다.
선택한 XMPP 서버에서 에이전트를 실행하려면 다음 사용자를 생성해야 합니다. 물론 다른 사용자를 생성할 수도 있지만, 그 경우 masapt 스크립트에서 에이전트를 생성할 때 새 JID 및 PWD 매개변수를 전달해야 합니다.
| JID | 비밀번호 |
|---|---|
| repoter@domain | repoterSecret |
사전 요구 사항이 설치되고 XMPP가 설정된 후:
프로젝트 폴더로 cd
cd ../MASAPT
디렉토리를 PATH에 추가
export PATH=$PATH:/path/to/MASAPT
source ~/.bashrc
Python 요구 사항 설치
pip install -r requirements.txt
masapt 스크립트를 실행 가능하게 만들기
chmod +x masapt
다음 명령으로 시스템 시작:
masapt -t url/to/target
더 많은 에이전트:
다음을 수행할 수 있도록 Explorer.py 확장:
다음을 수행할 수 있도록 SQLinjector.py 확장:
다음을 수행할 수 있도록 Coordinator.py 확장:
MASAPT 시스템은 모듈식, 분산식, 실용적으로 구상되었습니다. 즉, 시스템을 구성하는 에이전트는 메인 프로세스와 독립적이며 업그레이드가 가능하고 기존의 '전투 테스트를 거친' 침투 테스트 도구를 사용합니다.
구상된 목표를 달성하기 위해 에이전트는 표준 침투 테스트 단계(계획 - 실행 - 사후 실행)에서 파생된 3계층 모델의 일부로 개발됩니다. 해당 모델의 개요는 아래 Img1에서 확인할 수 있습니다.
이 개요의 모든 이론적 개념은 (미래를 위한 아이디어인 Img 8을 제외하고) 이미 코드로 구현되었습니다. 이러한 개념은 시스템에 대한 향후 업그레이드에서도 계속 구현되어야 합니다.
_3계층 모델_의 주요 아이디어는 이 시스템에서 에이전트를 구성하고 분류하는 데 사용되는 프레임워크를 제공하는 것입니다.
모델의 첫 번째 계층에는 대상에 대한 OSINT를 수행하고 유용한 정보를 수집하는 Explorer 에이전트가 포함됩니다.
두 번째 계층에는 Coordinator 에이전트와 Exploit 에이전트가 포함됩니다. Coordinator는 현재 테스트에 어떤 익스플로잇 에이전트가 참여할지 결정하는 단일 에이전트입니다. Exploit 에이전트는 이름에서 알 수 있듯이 SQL 인젝션, XSS, DoS, 버퍼 오버플로우 등 익스플로잇을 실행하는 에이전트입니다. 이러한 익스플로잇 에이전트는 여러 개가 있을 수 있습니다.
세 번째 계층에는 모든 익스플로잇 에이전트의 익스플로잇 데이터, 결과, 데이터 덤프를 수집하여 최종 보고서로 요약하는 Reporter가 포함됩니다. 그런 다음 보고서는 사용자에게 표시되고 로컬에 저장됩니다.
첫 번째 이미지에서 굵은 화살표는 모델의 데이터 흐름을 나타냅니다.

Img2는 첫 번째 이미지와 동일한 모델을 더 자세히 보여줍니다. 에이전트가 각 계층에서 명확하게 표시됩니다. 이 이미지의 실선 화살표는 다시 모델의 데이터 흐름을 나타내며, 결과적으로 어떤 에이전트가 서로 통신하는지 보여줍니다. Explorer 에이전트가 Coordinator 에이전트에 데이터를 보내고, Coordinator는 다시 Exploit 에이전트(SQLinjector, agent2, agent3)에 일부 데이터를 보내는 것을 볼 수 있습니다. 마지막으로, 익스플로잇 에이전트가 수집한 모든 데이터는 Reporter 에이전트에 전달되어 이를 컴파일하고 요약하여 사용자에게 제시합니다.
또한 Explorer 및 Exploit (SQLinjector) 에이전트만 외부 환경(테스트 대상)과 상호 작용하는 것을 볼 수 있습니다. 이는 양방향 점선 화살표로 표시됩니다.
앞서 언급했듯이 MASAPT 시스템의 특성 중 하나는 분산되어 있다는 것입니다. 이 중 한 가지 측면은 모든 에이전트가 독립적인 프로그램으로 구현되어 메인 (masapt) 스크립트에 의해 실행된다는 점에서 이미 구현되었습니다.
Img 3는 현재 시스템이 어떻게 설정되고 테스트되었는지 보여줍니다. 에이전트가 로컬 시스템에 설정된 XMPP (ejabberd) 서버를 통해 통신하기 위해 SPADE 환경을 사용하는 것을 볼 수 있습니다. 테스트 대상(SQLi Labs)도 로컬 시스템에 설정되어 있습니다. 이 설정은 시스템 테스트에는 좋지만 분산 시스템으로서의 MASAPT의 완전한 기능을 보여주지는 않습니다.
반면 Img 4는 MASAPT의 가능한 미래 구현 중 하나를 보여줍니다. XMPP를 사용하여 통신하고 Docker를 사용하여 여러 다른 시스템에서 실행되는 분산 다중 에이전트 시스템을 보여줍니다. 실선 화살표는 다시 한 번 시스템의 통신 및 데이터 흐름 측면을 보여주며, 에이전트가 중앙 XMPP 서버를 통해 데이터를 주고받는 방식을 보여줍니다.
에이전트가 XMPP를 통해 통신하는 주된 이유는 통신을 위한 안정적이고 언어에 구애받지 않는 방법을 제공하기 위해서입니다. 이 접근 방식을 사용하면 모든 미래 에이전트가 Python으로 작성되거나 SPADE 환경을 사용할 필요가 없습니다.
그 이유는 미래에 다른 시스템이 MASAPT의 일부가 되어야 하는 사용 사례가 있을 수 있기 때문입니다(예: 다른 프로그래밍 언어로 작성된 에이전트). 따라서 이 'XMPP 접근 방식'이 시스템에 그러한 유연성을 제공하는 가장 좋은 방법입니다.
통신 능력 외에도 동작은 모든 에이전트의 두 번째로 중요한 측면입니다. MASAPT 에이전트와 그 동작은 일련의 상태로 모델링되어 유한 상태 기계가 됩니다. SPADE 환경은 유한 상태 기계 생성에 대한 좋은 지원을 제공합니다.
아래 다이어그램은 에이전트가 특정 시점에 있을 수 있는 모든 가능한 상태를 보여줍니다. 다이어그램은 또한 어떤 이벤트가 에이전트가 다음 상태로 전환되는지 보여줍니다. 모든 미래 에이전트는 동일한 방식으로 구현되어야 합니다.
모든 미래 익스플로잇 에이전트(예: DoS, XSS...)는 Img 8 다이어그램을 템플릿으로 사용하여 구현되어야 합니다.


[1] 오류 기반, 블라인드 부울 및 시간 기반 SQL 인젝션 테스트를 위해 Audi-1과 그의 훌륭한 SQLI labs에 큰 감사를 드립니다!
| explorerSecret |
| coordinator@domain | coordinatorSecret |
| sqlinjector@domain | injectorSecret |