
pentest-ai v1.2.0
모든 발견을 입증하는 오픈소스 AI 펜테스터. 머신 오라클이 각 익스플로잇을 재실행하며, 검증된 버그는 직접 재현할 수 있는 증명 캡슐과 함께 제공됩니다.
⚠️ 공격용 도구, 승인된 테스트 전용입니다. 설치함으로써 귀하는 AUP 및 약관에 동의하게 됩니다. 전문은 책임 있는 사용 ↓에 있습니다.
ptai는 모든 익스플로잇을 재실행하여 확인하는 AI 기반 펜테스트 도구입니다. 리콘을 실행하고, 로그인하며, 발견 항목을 다단계 공격 경로로 연결하지만, 결과를 신뢰하라고 요구하지는 않습니다. TruffleHog가 유출된 시크릿으로 로그인하여 이를 확인하는 것처럼, ptai는 익스플로잇을 재실행하여 웹 발견 항목을 확인합니다. 발견 항목은 머신 오라클이 N회 중 N회 재현할 때까지 후보(candidate)로 남으며, 그 후에야 VERIFIED 배지를 획득합니다. 서드파티 스캐너 출력(nuclei, nikto, zap)은 오라클이 재검증할 때까지 보류됩니다. 스캐너 노이즈는 팀이 자신의 도구를 무시하도록 훈련시키는 원인이므로, 보고서에는 ptai가 증명한 것만 담기며 각 VERIFIED 발견 항목에는 직접 재생할 수 있는 휴대용 증명 캡슐이 포함됩니다.
현재 14가지 취약점 클래스가 오라클 검증됩니다. 의도적으로 취약하게 만든 테스트 허니팟에서는 해당 클래스 전반에 걸쳐 23건의 발견 항목이 오탐 0건, 100% 정밀도로 검증됩니다. 기본 상태의 OWASP Juice Shop에서는 단일 스캔으로 12건이 검증됩니다. 노트북에서 실행됩니다. 클라우드 없음, 텔레메트리 없음.
작동 모습
기본 상태의 OWASP Juice Shop 스캔: 단일 스캔에서 12건의 발견 항목이 오라클 검증됨. 발견 항목은 실제이며, 시청 편의를 위해 속도를 조절했습니다.
자체 타깃 없이 2분 만에 핵심 아이디어를 직접 재현해 보세요:```bash pip install ptai && ptai demo
`ptai demo`는 번들로 포함된 취약한 앱을 스캔하여 `4 findings, 4 oracle-VERIFIED`를 보고하고, 프루프 캡슐에서 하나를 라이브로 재생한 다음(`replay 3/3`), 동일한 경로를 강화된 상태로 실행하고 `0 findings`를 보고합니다. 두 실행 사이에 바뀐 것은 수정 사항뿐이므로, 결과는 도구가 조용해져서가 아니라 취약점과 함께 나타나고 사라집니다. 2분이면 끝나고, API 키도, 직접 준비할 대상도 필요 없습니다. `ptai replay`로 어떤 캡슐이든 직접 재검증할 수 있습니다.
> **정직한 수치.** 허니팟 실행(14개 클래스에서 23건 검증, 정밀도 100%, 오탐 0건)과 Juice Shop 실행(단일 스캔에서 12건 검증)은 개별적으로 재현 가능한 벤치마크이지, 현장 오탐률이 아닙니다. oracle 게이트는 정밀도를 높여주는 것이지 탐지율을 높여주는 것이 아닙니다. 오탐을 제거할 뿐 탐지를 늘리지 않습니다. Juice Shop은 인터넷에서 가장 많이 연구된 취약한 앱이므로, 원시 볼륨은 폭(breadth)으로, 검증된 수는 정밀도 이야기로 읽으십시오. 우리가 직접 작성한 버그가 있는 허니팟이 정직한 신호입니다. 허니팟 하니스(`tests/honeypot/`)와 클린 앱 zero-FP 게이트(`tests/cleanapp/`)가 저장소에 포함되어 있으므로, 이 주장은 스크린샷이 아니라 재현 가능합니다.
## 1.1.0의 새로운 기능
검증 커버리지가 대략 두 배로 늘었고, 이제 스캔이 실행 도중 다운시킨 대상에 대해 0건을 보고하지 않습니다. 모든 VERIFIED 결과는 LLM 추측이 아니라 이름이 지정된 머신 oracle에서 나오며, 이는 코드로 강제됩니다. oracle을 특정할 수 없는 판정은 거부됩니다. 이 릴리스에서 추가된 내용은 다음과 같습니다.
- **새로운 oracle 클래스 10개(총 14개).** 신뢰할 수 있는 헤더 우회(Trusted-header bypass), JWT `alg:none`, 호스트 헤더 중독(host-header poisoning), XXE, 타입 혼동(type confusion), 저장형 XSS, 순차 IDOR, 대량 할당(mass assignment), 비블라인드 SSRF, SQLi 로그인 우회가 추가되어 기존의 SQLi(boolean/blind), BOLA/IDOR, 반사형 XSS, 오픈 리다이렉트, 경로 탐색(path traversal)에 합류합니다. 각 oracle에는 안전한 대상에서 반드시 실패해야 하는 컨트롤이 있어서, 취약하지 않은 앱은 배지를 얻는 대신 기권(abstain)합니다.
- **검증 복원력(Verification resilience).** 공격적인 스윕이 취약한 단일 컨테이너 대상을 다운시킬 수 있는데, 그 후 검증 단계는 모든 oracle에서 실패하고 유효하고 재생 가능한 레시피가 있음에도 0건을 보고했습니다. 이제는 재검증 전에 대상이 다시 응답할 때까지 대기하며, 이를 통해 OWASP Juice Shop 스캔이 0건에서 oracle-검증 12건으로 바뀌었습니다.
- **범위 안전성(Scope safety).** 능동 도구(sqlmap, dalfox)는 계약 대상 호스트에 고정됩니다. 이제 스캔은 페이지 콘텐츠에서 가져온 제3자 URL을 공격 도구에 전달하지 않습니다.
- **휴대용 프루프 캡슐(Portable proof capsules)** — `ptai replay`와 함께 제공되며, 화면에서 판정을 VERIFIED로 바꾸는 라이브 TUI와, 입증된 결과에 대해서만 빌드를 실패시키는 CI 게이트(`--fail-on verified`)를 포함합니다.
## 실제 대상: OWASP Juice Shop
기본 그대로의 OWASP Juice Shop을 대상으로, ptai는 **단일 스캔에서 12건의 결과를 oracle-검증**합니다. 보호된 엔드포인트에서 허용되는 JWT `alg:none`, BOLA 교차 사용자 읽기, 순차 IDOR, 타입 혼동이 각각 머신 oracle로 재입증되며, 추측이 아닙니다. 검증하는 것보다 더 많이 탐지합니다(`/rest/user/login`의 SQLi 인증 우회, `/rest/products/search`의 UNION SQLi, `/etc/passwd`를 노출하는 XXE, 대량 할당, 비밀번호 재설정 우회). 보고서에는 검증된 하위 집합만 포함됩니다. API 키 없이 MCP를 통해 Claude Code로 구동하거나, 독립 실행형으로 구동할 수 있습니다.
> **정직성 고지(Honesty caveat).** Juice Shop은 인터넷에서 가장 많은 문서화가 이루어진 취약한 앱이므로 LLM과 프로브 작성자 모두 유리한 출발점을 가집니다. 새로운 대상을 상대할 때 탐지율은 큐레이션된 프로브 라이브러리가 커버하는 범위(현재 60개 이상의 웹 프로브, 릴리스마다 증가)에 달려 있습니다. LLM은 결과를 조정하고 추론할 뿐, 프로브를 대체하지 않습니다. `tests/honeypot/`의 비공개 허니팟 하니스는 우리가 직접 작성한 버그에 대한 커버리지를 측정하며 CI(`tests/honeypot/test_mcp_honeypot_e2e.py`)에서 검증됩니다. 그 수치는 Juice Shop보다 낮으며, 그것이 바로 핵심입니다. 우리는 둘 다 공개합니다. 전체 [Juice Shop 벤치마크 vs ZAP / Nuclei / HexStrike](https://github.com/0xsteph/pentest-ai/blob/HEAD/docs/benchmarks/juice-shop.md)를 참조하세요.
## 설치```bash
pip install ptai
방법 1: Claude Code에서 구동하기 (API 키 불필요)
이미 Claude Pro / Max / Team 요금제를 결제 중이라면, 구독 자체가 LLM입니다. ptai를 MCP 서버로 연결하세요:```bash claude mcp add pentest-ai -- ptai mcp
Claude Code를 다시 시작한 후 다음을 요청하세요:
> *"staging.acme.com에 대해 인증된 펜테스트를 실행하세요. 로그인은 /login에 있고, 비밀번호는 $APP_PASS에 있습니다."*
> **네트워크에 전송되는 것**: ptai의 도구와 프로브는 대상에 대해 로컬에서 실행됩니다. 여러분의 프롬프트와 Claude Code가 읽는 도구 출력은 다른 모든 Claude Code 세션과 동일하게 Anthropic의 API를 통해 전달됩니다. 에어갭 경로가 필요하다면 경로 3(Ollama / 온프레미스 LLM)을 참조하세요.
Claude Code는 다음 MCP 도구를 통해 ptai를 구동합니다(현재 47개):
- `list_tools` / `run_tool`: 200개 이상의 래핑된 보안 도구를 나열하고 호출
- `plan_tools` / `ensure_tools_installed`: 엔게이지먼트에 대한 정식 도구 목록을 가져오고 일괄 설치
- `list_probes` / `run_probe`: OWASP Top 10 버그 클래스를 위한 60개의 SPA 인식 프로브
- `http_request`: 새로운 공격 체인을 위한 엄격한 범위 가드 아래의 원시 HTTP
- `start_engagement` / `get_findings` / `get_attack_chains`: 엔게이지먼트 레코드
- 그 외에도 `test_web_app`, `test_active_directory`, `test_cloud`, `test_api_security` 등이 있습니다.
### 경로 2: 기타 MCP 클라이언트 (Cursor, VS Code Copilot, Codex, Claude Desktop)```bash
ptai setup --mcp
설치된 모든 MCP 호환 클라이언트를 자동으로 감지하여 해당 구성 파일을 작성합니다. 클라이언트를 다시 시작하면 동일한 47개 도구가 표시됩니다.
경로 3: MCP 클라이언트가 없을 때 사용하는 독립형 CLI
Claude Code, Cursor, Codex 또는 Claude Desktop을 사용 중이라면 위의 경로 1 또는 2를 사용하고 이 섹션은 건너뛰세요. 거기에는 API 키가 필요 없습니다.
경로 3은 CI/CD 파이프라인, 예약된 cron 작업, 네트워크 분리 터미널 및 MCP 클라이언트가 없는 사용자를 위한 것입니다. 독립형 CLI에는 자체 LLM이 없으므로 환경 변수를 통해 하나를 가져와야 합니다:```bash export ANTHROPIC_API_KEY=sk-ant-... # Claude (best results)
or
export OPENAI_API_KEY=sk-... # OpenAI
or, fully local, no cloud
export PENTEST_AI_LLM_PROVIDER=ollama # Ollama (default localhost:11434)
or, any of 300+ models via LiteLLM (OpenRouter, Azure, DeepSeek, Groq, Mistral, ...)
pip install litellm
ptai start https://your-target.com
OpenAI 호환 엔드포인트(DeepSeek cloud, Groq, Together AI, vLLM 등)를 사용하고 있나요? `OPENAI_BASE_URL` + `PENTEST_AI_MODEL`을 설정하고 openai 프로바이더를 사용하세요. 모든 프로바이더에 대한 전체 레시피 - 사용자 정의 모델 이름, 문제 해결, LiteLLM-300+ 목록 포함 - 는 [`docs/llm-providers.md`](https://github.com/0xsteph/pentest-ai/blob/HEAD/docs/llm-providers.md)에 있습니다.
#### 지출 한도 (Path 3 전용)
독립형 에이전트 루프는 자체 LLM을 구동하므로, 통제 불능 루프는 실제 비용이 발생합니다. ptai는 작업당 지출을 기본적으로 **$10 USD**로 제한합니다. 프롬프트 캐싱을 사용하는 일반적인 Sonnet 4.6 웹 앱 스윕은 그 한도 훨씬 아래에서 완료되지만, Opus 4.7 딥 실행은 그 한도를 초과할 수 있습니다.
환경 변수를 통해 변경하세요 (CLI 플래그 없음 - 환경 변수가 유일한 조절 수단입니다):```bash
export PTAI_PRICE_LIMIT=25 # raise to $25
export PTAI_PRICE_LIMIT=0 # unlimited (logs a warning)
unset PTAI_PRICE_LIMIT # back to the $10 default
상한이 작업 중간에 발동되면, 해당 작업은 aborted_cost_limit으로 표시되고 체크포인트가 보존됩니다. 상한을 높이고 중단된 지점에서 재개하세요:```bash
export PTAI_PRICE_LIMIT=25
ptai resume <engagement_id>
경로 1 및 2 (MCP)는 이 상한선이 적용되지 않습니다. 여러분의 AI 클라이언트(Claude Code, Cursor 등)가 자체 LLM 결제를 처리합니다.
### 보안 도구 설치
ptai는 200개 이상의 외부 도구를 래핑합니다. 머신에 설치하는 세 가지 방법:```bash
# 1. Zero-config (recommended). At engagement start, the planner predicts
# which tools the LLM will need and asks ONCE to install the missing
# ones. Decline once and the answer persists in
# ~/.pentest-ai/install-preferences.json.
ptai start https://target.example.com
# 2. Batch install upfront. Skips the engagement-time prompt entirely.
ptai setup --tier core # ~6 essentials, ~30s
ptai setup --tier recommended # + fuzzers, crawlers, password tools, ~5m
ptai setup --tier full # everything, ~30m
# 3. Install specific tools by name.
ptai setup --per-tool wpscan,dalfox,paramspider
ptai setup --wizard # interactive picker
비대화형 컨텍스트(PTAI_NON_INTERACTIVE=1 또는 TTY 없음)에서 ptai는 PATH에 있는 것을 사용하고 누락된 항목에 대해 (프롬프트 대신) 로그를 남깁니다.
기타 경로: REST API, MCP 컴포지션, HITL 원격 조작, 클라우드 워크스페이스, 공개 벤치마크
HTTP REST API (대시보드 및 통합용)```bash
pip install ptai[api] ptai serve --port 8888
Endpoints: `/health`, `/version`, `/agents`, `/tools`, `/engagements` (목록, 상세, findings, chains, detection rules, SARIF 내보내기). 쓰기 엔드포인트(`POST /engagements`, `POST /engagements/{id}/abort`)에는 `Authorization: Bearer $PENTEST_AI_API_TOKEN`이 필요합니다. 라이브 이벤트 스트림은 `WS /engagements/{id}/stream`에서 제공됩니다.
### 다른 MCP 서버를 도구 소스로 로드
hexstrike 또는 기타 MCP 호환 보안 서버와 구성하세요. `~/.pentest-ai/mcp_servers.json`을 편집하십시오:```json
{
"servers": [
{"name": "hexstrike", "command": "python3 hexstrike_mcp.py", "transport": "stdio"}
]
}
실행 중 인계 (HITL 원격 조작)
엔게이지먼트가 실행되는 동안 600ms 이내에 Ctrl+C를 두 번 눌러 오케스트레이터를 일시 중지하고 REPL로 들어갑니다: step, inspect findings, inject <instruction>, skip, resume, abort. 현재 LLM은 완전히 자율적이지 않습니다. 중요할 때 운영자가 결정을 내립니다.
공개 벤치마크
재현 가능한 해결률 측정값은 benchmarks/:에 있습니다.```bash
./benchmarks/scripts/run_all.sh # writes JSON per run + RESULTS.md
Spec, harness, 결과는 모두 git에 있습니다. ZAP / Nuclei / HexStrike와의 전체 Juice Shop 비교는 [`docs/benchmarks/juice-shop.md`](https://github.com/0xsteph/pentest-ai/blob/HEAD/docs/benchmarks/juice-shop.md)에서 확인할 수 있습니다. 감사할 수 없는 "98.7% 탐지율" 주장은 없습니다.
### 클라우드 작업공간 (Pro / Team / Enterprise)
CLI는 영원히 무료이며 모든 것을 로컬에 저장합니다. 작업 이력, 브랜드가 적용된 고객 전달용 PDF 보고서, 팀 협업을 원한다면 CLI를 [app.pentestai.xyz](https://app.pentestai.xyz) 작업공간에 연결하세요:```bash
# Sign up, then Dashboard -> API Keys -> Generate -> copy ptai_...
ptai auth login # paste the key (hidden prompt)
ptai auth status # confirm link
# or use an env var for CI:
export PENTESTAI_API_KEY=ptai_...
ptai start는 인증된 경우 클라우드 작업 공간에 탐지 결과를 자동으로 동기화합니다. 클라우드가 없으면 호출이 발생하지 않습니다. 로그인하지 않으면 통합 기능은 자동으로 비활성화됩니다.
LLM을 전혀 사용하지 않음(대화형 런처)```bash
ptai menu
숫자 기반 카테고리 탐색, 검색(`/term`), 태그 필터링(`t web`), 키워드 기반 추천. 실제 모의 침투 작업은 여전히 전체 범위 확인과 함께 `ptai start`를 통해 진행됩니다.
</details>
## 왜 다른가
| | |
|---|---|
| 🤖 **LLM이 조정하지만 LLM에 의존하지 않음** | 17개의 에이전트가 정찰, 웹, API, AD, 클라우드, 모바일, 무선, 브라우저, 자격 증명, 권한 상승, 취약점 스캔, 공격 체이닝, PoC, 탐지, 보고서, 사회공학, LLM 레드팀을 다룹니다. LLM은 단계 루프를 실행하고 결과를 추론합니다. 버그 탐지는 선별된 결정적 프로브 라이브러리에 있습니다. API 키를 설정하지 않아도 동일한 프로브가 계속 실행됩니다. LLM은 조정할 뿐 스캔하지 않습니다. |
| 🔓 **MCP 경로에는 API 키 불필요** | Claude Code / Cursor / Codex 사용자는 기존 구독을 사용하여 MCP를 통해 ptai를 구동합니다. 200개 이상의 도구 래퍼와 60개의 프로브는 Anthropic 키 없이 LLM에서 호출할 수 있습니다. 독립형 CLI(`ptai start --agent-mode`)가 API 키가 필요한 지점입니다. 이는 MCP가 없는 Codex, CI, air-gapped 경로입니다. |
| 🔐 **로그인합니다** | 대부분의 스캐너는 로그인 페이지에서 멈춥니다. 이 도구는 세션을 유지하고, 자격 증명이 만료되면 갱신하며, 모든 다운스트림 도구가 쿠키를 상속받습니다. 인증 프로필은 *참조*(환경 변수, `op://`, Vault 경로, AWS Secrets Manager ARN)만 저장하며, 값 자체는 절대 저장하지 않습니다. |
| 🧪 **모든 발견 사항은 증명됩니다** | 비파괴적 개념 증명(PoC)이 대상에 대해 실행됩니다. 더 이상 시끄러운 스캐너에서 나온 40개의 '아마도' 후보를 분류할 필요가 없습니다. |
| ⚡ **CI 네이티브** | GitHub Action, 심각도 게이트, SARIF 출력, PR 댓글. 워크플로 파일에 넣으면 다음 PR에서 실행됩니다. |
| 💾 **노트북에서 실행** | MIT 라이선스, 클라우드 호출 없음. Ollama로 오프라인 실행 가능. 발견 사항은 디스크에 그대로 남습니다. |
## 작동 방식```
┌─────────────────────────────────────────────────────────────┐
│ ptai start <target> │
└─────────────────────────────────────────────────────────────┘
│
┌──────────────────┼──────────────────┐
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌─────────┐
│ recon │ -> │ auth │ -> │ web │
└────────┘ └────────┘ └─────────┘
│
┌────────────────────────────────────┤
▼ ▼
┌────────┐ ┌─────────┐
│ ad │ ┌──────────────────┐ │ cloud │
└────────┘ │ Findings DB │ └─────────┘
│ │ (sqlite + evidence)│ │
└───────▶│ scope-guarded │◀──────┘
│ deduplicated │
└──────────────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌──────┐ ┌─────────┐ ┌──────────┐
│chain │ │validate │ │ detect │
└──────┘ └─────────┘ └──────────┘
│
▼
┌──────────┐
│ report │ md · html · pdf · SARIF · JUnit
└──────────┘
각 에이전트는 키를 설정한 경우 LLM으로 실행되고, 설정하지 않은 경우 결정론적 도구 루프로 실행됩니다. 어느 쪽이든 단계 순서는 동일합니다.
에이전트
| 에이전트 | 단계 | 역할 |
|---|---|---|
recon | 1 | 포트 스캔, DNS 및 서브도메인 열거, 서비스 핑거프린팅 |
web | 2 | 인증된 OWASP 테스팅 가이드 v4 실행 |
api_security | 2 | OpenAPI/GraphQL/REST 표면 분석, OWASP API Top 10 |
browser | 2 | Playwright 기반 DOM 분석, XHR 캡처, 보안 헤더 등급 평가 |
ad | 3 | AD 열거, Kerberoasting, BloodHound 경로 탐색, 위임 남용 |
cloud | 4 | AWS, Azure, GCP IAM, 잘못된 구성, K8s RBAC, 서버리스 |
credential_tester | 4 | 패스워드 스프레이, 크리덴셜 스터핑, MFA 우회 검사 |
privesc | 5 | 수집된 컨텍스트를 기반으로 한 로컬 및 횡적 권한 상승 조언 |
vuln_scanner | 5 | 발견 항목 DB에 대한 교차 취약점 집계 |
exploit_chain | 6 | 발견 항목을 다단계 공격 경로로 연관 |
poc_validator | 7 | 발견 항목별 비파괴적 개념 증명 |
detection | 8 | 블루 팀을 위한 Sigma, SPL, KQL 규칙 |
report | 9 | Markdown, HTML, PDF, SARIF, JUnit, 컴플라이언스 맵 |
llm_redteam | opt | OWASP LLM Top 10 프로브 |
social_engineer | opt | 피싱 말뭉치 및 프리텍스트 생성 |
mobile | opt | Android/iOS 정적 + 동적 검사 |
wireless | opt | 무선 정찰 및 핸드셰이크 캡처 |
플레이북
파일로 저장된 당신의 방법론. git에 커밋됨. 팀과 공유됨.```yaml name: internal-ad-pentest inputs: domain: { required: true, prompt: "AD domain" } dc_ip: { required: true, prompt: "DC IP" }
phases:
-
id: recon tools: [nmap, masscan]
-
id: ad-enum depends_on: [recon] condition: "any_finding(type='open_port', port=445)" tools: [enum4linux, ldapsearch, bloodhound-python]
-
id: kerberoast requires_finding: { type: ad_user_enumerated } tools: [impacket-getuserspns] llm_decide: true # let the LLM skip if context says useless
I'm unable to translate because the provided input text is empty. Please provide the source content for chunk 31 of 39, and I will translate it into Korean while preserving all Markdown formatting.```bash
ptai playbook list # show installed playbooks
ptai playbook show web-app-quick # preview before running
ptai playbook run ./my-ad.yaml # execute
5개의 플레이북이 기본 제공됩니다. 커뮤니티 카탈로그가 곧 제공될 예정입니다.
CI에 통합하세요```yaml
.github/workflows/security.yml
name: Security scan on: [pull_request]
jobs:
ptai:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pip install ptai
- run: |
ptai start ${{ vars.STAGING_URL }}
--ci
--fail-on high
--sarif pentest.sarif
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
- uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: pentest.sarif
Findings post as a PR comment, SARIF uploads to GitHub Code Scanning, and the build fails on gated severity. **GitLab CI and Jenkins** 템플릿과 고급 옵션(CI의 인증 프로필, 비용 게이트, 범위 파일) -> [docs/ci-cd.md](https://github.com/0xsteph/pentest-ai/blob/HEAD/docs/ci-cd.md).
## Benchmarks
ptai의 설계는 큐레이션된 프로브 커버리지를 갖춘 SPA 펜테스트를 위해 특별히 제작되었습니다. OWASP Juice Shop에서 발표된 [4-툴 매트릭스](https://github.com/0xsteph/pentest-ai/blob/HEAD/docs/benchmarks/juice-shop.md)는 다음을 보여주었습니다:
| 도구 | 발견 수 | Critical+High | OWASP Top 10 버킷 | FP 비율 |
|---|---:|---:|---:|---:|
| **ptai 0.13.0** | **88** | **46** | **5** | **0%** |
| ZAP 2.17.0 | 593 | 0 | 1 | 47% |
| Nuclei 3.8.0 | 1 | 0 | 1 | 0% |
| HexStrike v6.0 | 11 | 0 | 1 | - |
n=1 단일 평가자, 단일 실행. 방법론 및 원시 아티팩트는 [`benchmarks/results/2026-05-12/juice-shop/`](https://github.com/0xsteph/pentest-ai/blob/HEAD/benchmarks/results/2026-05-12/juice-shop/)에 있습니다. 솔직한 평가: ptai는 큐레이션된 프로브 커버리지로 SPA 웹 펜테스트에 더 뛰어납니다. HexStrike는 더 광범위하며(클라우드, 바이너리, CTF) WordPress와 같은 전통적인 크롤링 가능한 표면에서 ptai를 능가할 가능성이 높습니다. 향후 릴리스에서 비교 범위를 넓힐 예정입니다.
최근 연구 맥락: 완전 자율 LLM 펜테스트 에이전트는 작업의 **21-31%**를 종단 간 완료하며, 인간 지원 설정은 **64%**에 도달합니다(ARTEMIS, DARPA AICC Atlantis, xOffense). ptai는 인간 지원 체제를 위해 설계되었습니다: LLM이 결과를 추론하고, 큐레이션된 프로브가 탐지하며, Ctrl+C를 두 번 누르면 운영자가 인수할 수 있습니다.
## vs the field
| | `ptai` | Hexstrike | ZAP | Nuclei | Burp Pro | PentestGPT |
|---|:-:|:-:|:-:|:-:|:-:|:-:|
| MCP를 통한 LLM 구동(API 키 불필요) | ✓ | ✓ | | | | |
| 범위 가드 하의 LLM 합성 HTTP | ✓ | 부분 | | | | |
| MCP를 통한 인증 스캔 | ✓ | 부분 | 부분 | 원시 HTTP | ✓ | |
| 익스플로잇 체이닝 | ✓ | 부분 | | | | 부분 |
| 비파괴적 PoC 검증 | ✓ | | | | 부분 | |
| 저장형 인젝션 체인(POST -> GET 검증) | ✓ | 수동 | 부분 | | 수동 | |
| 큐레이션된 프로브(템플릿 기반이 아닌 특수화됨) | 60 | 툴 래퍼 기반 | 규칙 기반 | 8000+ 템플릿 | 수동 + 스캔 | - |
| 래핑된 CLI 보안 도구 | 200+ | 150+ | - | - | - | - |
| 도구 설치 마법사 | core/recommended/full + 툴별 | - | n/a | n/a | n/a | - |
| 엔게이지먼트 시작 시 스마트 설치 | ✓ | | | | | |
| CI 네이티브(SARIF + 심각도 게이트) | ✓ | | 부분 | 부분 | 부분 | |
| LLM 레드팀 프로브 | ✓ | | | | | |
| YAML 플레이북 | ✓ | | | 템플릿 | | |
| 라이선스 | MIT | MIT | Apache-2.0 | MIT | 상용 | MIT |
## What's inside
- **17개 에이전트**: 정찰, 웹, API 보안, AD, 클라우드, 모바일, 무선, 브라우저, 자격 증명 테스트, 권한 상승, 취약점 스캔, 익스플로잇 체이닝, PoC 검증, 탐지, 리포팅, LLM 레드팀, 소셜 엔지니어링
- **60개의 큐레이션된 웹 프로브**: OWASP Top 10 + API Top 10 커버
- **200개 이상의 도구 래퍼** 자동 설치 포함: nmap, masscan, nuclei, ffuf, sqlmap, gobuster, wapiti, nikto, dalfox, xsstrike, wpscan, hydra, hashcat, enum4linux, bloodhound-python, impacket 스위트, trufflehog, gitleaks, kube-hunter, trivy, prowler, scout-suite 등
- **4000개 이상의 Nuclei 템플릿** 통합: 원자적 취약점 탐지용
- **47개의 MCP 도구**: LLM 기반 엔게이지먼트용. `plan_tools` / `ensure_tools_installed`를 포함하며, 이를 통해 외부 LLM이 Anthropic API 키 없이 도구를 일괄 설치할 수 있습니다.
- **300개 이상의 LLM 모델**: LiteLLM 제공자를 통해 지원 (Anthropic, OpenAI, Ollama 직접; Azure, OpenRouter, DeepSeek, Groq, Mistral, Together AI, Bedrock, Vertex AI, Cohere는 LiteLLM 경유)
- **HTTP REST API + WebSocket** 표면(`ptai serve`): 비-MCP 통합용
- **로컬 웹 대시보드**: 실시간 엔게이지먼트 뷰, 발견 사항 테이블, 공격 체인 시각화, SARIF 내보내기
- **브라우저 자동화 에이전트**: 스크린샷 캡처, DOM 분석, 네트워크 캡처, 보안 헤더 등급(Playwright 기반)
- **HITL(Human-In-The-Loop) 원격 조작**(실행 중 엔게이지먼트를 인수하려면 Ctrl+C를 두 번)
- **MCP 클라이언트** 기능: 외부 MCP 서버를 도구 소스로 로드
- **공개 재현 가능한 벤치마크 하네스**는 `benchmarks/`에 있습니다. 숫자, 코드, 원시 아티팩트, 모두 git에 포함됩니다.
- **6가지 출력 형식**: Markdown, HTML, PDF, SARIF 2.1.0, JUnit XML, 컴플라이언스 매핑(OWASP, CWE, CVE, CVSS v3.1)
- **2,400개 이상의 테스트**: Python 3.10, 3.11, 3.12, 3.13 CI 지원
- **MIT 라이선스**, 100% 당신의 것
## Who uses it for what
**AppSec 팀.** `ptai`를 CI에 연결하세요. 스테이징에 대한 모든 PR은 인증 스캔을 받습니다. 빌드는 높은 심각도의 발견 사항에서 실패합니다. 수정 -> 재테스트 -> 확인 루프가 자동으로 실행됩니다.
**컨설턴트.** 일주일짜리 엔게이지먼트를 설정하고, `ptai`를 대상 목록에 지정한 다음, 인간이 필요한 부분에 시간을 쓰세요: 발견 사항 분석, 시연할 체인 선택, 고객과의 대화. 보고서는 자동으로 작성됩니다.
**버그 바운티 헌터.** 아침 식사 시간에 실행하세요. 돌아오면 HackerOne에 붙여넣을 준비가 된 PoC와 함께 검증된 발견 사항 목록이 있습니다.
**레드팀.** AD 방법론을 YAML 플레이북으로 인코딩하세요. 모든 새 엔게이지먼트가 이를 실행합니다. 동일한 방법론을 팀 전체가 공유합니다.
**Claude Code / Cursor / Codex 사용자.** ptai를 MCP 서버로 추가하세요. 어시스턴트에게 일반 영어로 스캔을 실행하도록 요청하세요. 기존 구독이 LLM 비용을 지불하고, ptai는 도구를 제공합니다.
**AI 기능을 출시하는 개발자.** 챗봇에 대해 `--enable-llm-redteam`을 활성화하세요. 몇 분 안에 OWASP LLM Top 10 보고서를 얻을 수 있습니다.
## Responsible use
`pentest-ai`는 공격적 보안 도구입니다. 사용자가 지정한 대상에 대해 실제 네트워크 및 호스트 작업을 실행합니다. **모든 대상을 테스트할 수 있는 명시적이고 서면화된 권한을 보유했는지 확인할 책임은 전적으로 사용자에게 있습니다.**
`ptai`를 설치하거나 실행함으로써 [허용 가능한 사용 정책](https://pentestai.xyz/aup) 및 [서비스 약관](https://pentestai.xyz/terms)에 동의하게 됩니다. 서면 승인 없이 소유하지 않은 시스템을 테스트하면 미국 컴퓨터 사기 및 남용법(Computer Fraud and Abuse Act), 영국 컴퓨터 남용법 1990(Computer Misuse Act 1990), GDPR 제32조 및 해당 관할권의 동등 법률을 위반할 수 있습니다. 오용에 대한 책임은 전적으로 사용자에게 있습니다.
첫 실행 시 AUP 수락을 확인하라는 메시지가 표시되며 선택 사항은 `~/.pentest-ai/aup-consent.txt`에 저장됩니다. CI에서 `PENTEST_AI_AUP_ACCEPTED=1`을 설정하면 대화식 프롬프트 없이 건너뛸 수 있습니다.
시작 시 `ptai`는 범위 파일을 로드합니다. 범위를 벗어난 호스트는 도구 호출 시 거부됩니다. PoC는 기본적으로 비파괴적입니다. 스텔스 모드에서는 자동으로 속도 제한이 적용됩니다. 그런 사람이 되지 마세요.
### 대역외 콜백(OAST) - 개인정보 보호
`ptai`는 서버 측에서 실행될 때 대역외 콜라보레이터를 울리는 페이로드를 전송하여 블라인드 취약점 유형(블라인드 SSRF, 블라인드 SQLi, 블라인드 XXE, 블라인드 저장 XSS, SSTI, Log4Shell)을 탐지합니다. 기본적으로 콜백은 ProjectDiscovery의 공개 `oast.fun` 인프라로 라우팅됩니다.
**콜라보레이터에 도달하는 것과 읽을 수 있는 사람.** 각 엔게이지먼트는 로컬 `ptai` 프로세스에서 새로운 RSA-2048 키페어를 생성합니다. 상호작용 페이로드(콜라보레이터가 수신한 원시 HTTP 요청, DNS 쿼리, SMTP 봉투)는 서버 측에서 저장 시 AES-CTR-256으로 암호화되며, AES 키는 엔게이지먼트의 공개 키를 사용해 RSA-OAEP-SHA256으로 래핑됩니다. **일치하는 개인 키 보유자, 즉 로컬 `ptai` 프로세스만이 이를 복호화할 수 있습니다.** ProjectDiscovery(또는 콜라보레이터를 운영하는 주체)는 상호작용 내용을 읽을 수 없습니다. 그러나 **메타데이터는 서버에서 볼 수 있습니다**: 상호작용이 발생했다는 사실, 호출 대상의 소스 IP, 타임스탬프, 프로토콜.
**자가 호스팅이 필요한 경우.** PortSwigger는 버그 바운티 참여 규칙에서 공개 Burp Collaborator 사용을 명시적으로 금지하며, 대기업 프로그램(Meta, Apple, 금융)은 점점 더 콜백 인프라가 테스터가 제어하는 호스트에서 종료될 것을 요구합니다. 유료 엔게이지먼트의 경우 자체 Interactsh 서버(Apache-2.0, 단일 Go 바이너리)를 실행하고 ptai가 이를 가리키게 하세요:```bash
ptai start http://target --oast-server https://oast.example.com --oast-token <T>
To disable OAST entirely:```bash ptai start http://target --no-oast
OAST가 꺼져 있으면 블라인드 취약점 클래스는 탐지되지 않습니다. 인밴드(in-band) 탐지 경로(크기 델타 / SQL 오류 마커 / 메타데이터 서명 / 시간 기반)는 계속 실행됩니다.
## 생태계
| 저장소 | 설명 |
|---|---|
| [**pentest-ai**](https://github.com/0xSteph/pentest-ai) | 이 저장소. CLI 및 MCP 서버. Python 제품. |
| [**pentest-ai-agents**](https://github.com/0xSteph/pentest-ai-agents) | 독립형 Claude Code 서브에이전트 마크다운 파일. 선택 사항이며, 이 CLI 없이도 실행됩니다. |
공유 워크스페이스, 브랜드화된 PDF 보고서, SSO 또는 관리형 엔게이지먼트가 필요하신가요? [웹사이트](https://pentestai.xyz)에는 Pro / Team / Enterprise 대시보드와 원샷 Launch Engagement 옵션이 있습니다. OSS 도구는 계속 OSS로, 영원히 무료입니다.
## 커뮤니티
- **Discord:** [서버 참여하기](https://discord.gg/6weeTAubJw). 대화하고, 도움을 받고, 발견 사항을 공유하고, 눈팅하세요.
- **질문, 아이디어, 피드백:** [GitHub Discussions](https://github.com/0xSteph/pentest-ai/discussions)
- **버그 신고:** [GitHub Issues](https://github.com/0xSteph/pentest-ai/issues)
- **Show and tell:** `ptai`가 찾아준 가장 놀라운 발견을 [Show and tell](https://github.com/0xSteph/pentest-ai/discussions/categories/show-and-tell)에 게시하세요.
## FAQ
**API 키가 필요한가요?** MCP 경로에서는 필요 없습니다. Claude Code, Cursor, Codex 또는 Claude Desktop에서 ptai를 사용한다면 기존 구독이 곧 LLM입니다. 독립형 CLI(Path 3)에서만 키가 필요하며, 거기서도 Ollama로 완전히 로컬에서 실행할 수 있습니다. [설치](#install)를 참조하세요.
**정말 자율적으로 동작하나요, 아니면 제가 계속 관리해야 하나요?** 사용자가 루프에 계속 참여합니다. ptai는 LLM이 조정하지만 자율적이지 않습니다. 큐레이션된 프로브가 탐지를 수행하고, LLM이 결과를 추론하며, 최종 판단은 사용자가 내립니다. 실행 중에 Ctrl+C를 두 번 누르면 제어권을 넘겨받습니다. 완전 자율 LLM 에이전트는 펜테스트 작업을 처음부터 끝까지 완료하는 경우가 21~31%에 불과합니다. 인간이 개입하는 구성은 64%에 도달하며, ptai는 바로 그 두 번째 방식을 위해 설계되었습니다.
**프로덕션 환경을 대상으로 해도 안전한가요?** 서면 승인을 받은 경우에만, 그리고 가드레일을 켠 상태에서만 안전합니다. `intensity=safe`는 상태를 변경하는 프로브를 건너뛰고, `respect_rate_limits`는 429 / Retry-After를 존중하며, `strict_scope`는 호스트 외부 요청을 거부하고 리다이렉트 추적을 중단합니다. 세 가지 모두 기본값이 꺼져 있으므로 직접 켜야 합니다. [책임 있는 사용](#responsible-use)을 참조하세요.
**Juice Shop 수치는 높은데 허니팟 수치는 왜 더 낮나요?** Juice Shop은 인터넷에서 가장 많이 문서화된 취약한 앱이므로 LLM과 프로브 작성자 모두 유리한 출발점을 가집니다. 비공개 허니팟은 우리가 직접 작성한 버그를 측정하므로 수치가 더 낮습니다. 그리고 그 낮은 수치가 정직한 신호입니다. 우리는 두 수치를 모두 공개합니다. [벤치마크](#benchmarks)를 참조하세요.
**외부로 통신(phone home)하나요?** 텔레메트리가 없으며, 발견 사항은 사용자 디스크에 남습니다. MCP 경로에서는 프롬프트와 AI 클라이언트가 읽는 도구 출력이 다른 세션과 마찬가지로 해당 클라이언트의 API를 통해 전송됩니다. 블라인드 취약점 탐지(OAST)는 기본적으로 공개 oast.fun에 콜백을 보냅니다. 콘텐츠는 로컬 키페어로 암호화되지만, 콜백이 발생했다는 사실과 출발지 IP, 타임스탬프는 협력 서버(collaborator)를 운영하는 사람에게 보입니다. 이를 피하려면 Interactsh를 자체 호스팅하거나 `--no-oast`로 실행하세요. [책임 있는 사용](#responsible-use)을 참조하세요.
**실행 비용은 얼마인가요?** MCP 경로에서는 자체 결제를 처리하는 AI 구독 외에 추가 비용이 없습니다. 독립형 CLI에서는 ptai가 기본적으로 엔게이지먼트당 지출을 $10으로 제한합니다. `PTAI_PRICE_LIMIT`으로 변경할 수 있습니다. [설치](#install)를 참조하세요.
**그냥 Claude나 PentestGPT를 사용하는 것과는 어떻게 다른가요?** 큐레이션된 결정적 프로브 라이브러리가 버그를 찾습니다. LLM은 단계 루프를 실행하고 결과를 추론할 뿐, 스캔하지 않습니다. 그래서 발견 사항이 재현 가능하며, LLM의 추측이 아닌 작동하는 PoC와 함께 제공됩니다. [왜 다른가](#why-its-different)와 [다른 도구와의 비교](#vs-the-field)를 참조하세요.
## 스타 기록
<a href="https://star-history.com/#0xSteph/pentest-ai&Date">
<img src="https://assets.kitploit.com/production/public/readmes/placeholders/f0fc86cfe65f76d40e15aaec61704ec8220a56dc89d4be03c46f67cb31b9fa8c.svg" alt="Star history chart" width="600">
</a>
## 라이선스
MIT. 원하는 대로 사용하세요.
<div align="center">
**`ptai`가 당신의 일요일을 구해줬다면, [저장소에 스타를 남겨주세요](https://github.com/0xSteph/pentest-ai). 그것이 제가 요청하는 유일한 보상입니다.**
</div>