Show GN: 기존 kali-mcp를 Go로 제구현 해봤습니다.
(github.com/found-cake)안녕하세요. 정보보호학과를 재학 중인 대학생입니다.
모의 해킹 / 트래픽 테스트 / CTF 자동화 작업에 kali-mcp를 즐겨 사용해왔는데, 여러 에이전트를 동시에 붙이는 환경에서 병목을 겪게 되어 Go로 직접 재구현해봤습니다.
GitHub: https://github.com/found-cake/kali-mcp-go
기존 kali-mcp 구조와 한계
원본은 Flask + Python으로 구현되어 있고, CommandExecutor 클래스가 요청마다 subprocess.Popen을 생성한 뒤 stdout/stderr 각각을 읽기 위한 daemon thread 2개를 추가로 띄우는 구조입니다.
단일 에이전트에서는 충분하지만, multi-agent 환경에서 동시 요청이 몰리면 다음과 같은 문제가 생깁니다.
- Flask 기본 단일 워커 — 에이전트들이 서로를 블로킹
- 요청마다 프로세스 + thread 생성 오버헤드
- 에이전트가 응답 지연을 타임아웃으로 오인해 동일 작업 재시도
주요 변경 사항
서버
- 기존: Flask (기본 단일 워커)
- 변경: Fiber v3 / fasthttp — 완전 동시성
출력 수집
- 기존: daemon thread 2개로 readline 루프
- 변경: goroutine 2개 + WaitGroup으로 동기화, stdout/stderr 수집 시점을 명확히 맞춰 출력 누락 없이 처리
timeout/cancel
- 기존:
process.wait(timeout=...)+ 강제 kill - 변경: context 기반 — 파이프까지 정확하게 닫힘
Metasploit 임시파일
- 기존:
/tmp/mks_msf_resource.rc하드코딩 — 동시 요청 시 레이스 컨디션 가능 - 변경:
os.CreateTemp— 각 요청마다 고유 파일명으로 안전하게 처리
tshark 지원
- 기존: 없음
- 변경: 전용 엔드포인트 추가
아키텍처
기존과 동일한 2티어 구조를 유지하면서 내부를 교체했습니다.
[AI Client] →(MCP stdio)→ [mcp-client] →(HTTP + Bearer token)→ [kali-server] →(exec)→ [nmap, tshark, ...]