pentesting 0.8.0 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,391 +1,82 @@
1
- # 🎯 Pentesting
2
-
3
- <p align="center">
4
- <img src="docs/assets/pentesting-logo.png" alt="Pentesting" width="400">
5
- </p>
6
-
7
- <p align="center">
8
- <strong>인간처럼 생각하고 실행하는 자율 침투 테스트 AI 에이전트</strong>
9
- </p>
10
-
11
- <p align="center">
12
- <a href="https://www.npmjs.com/package/pentesting"><img src="https://img.shields.io/npm/v/pentesting.svg?style=for-the-badge" alt="npm version"></a>
13
- <a href="https://github.com/agnusdei1207/pentesting/actions"><img src="https://img.shields.io/github/actions/workflow/status/agnusdei1207/pentesting/ci.yml?branch=main&style=for-the-badge" alt="CI status"></a>
14
- <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge" alt="MIT License"></a>
15
- </p>
16
-
17
- ---
18
-
19
- ## 💡 철학: 왜 Pentesting인가?
20
-
21
- ### 문제
22
-
23
- 기존 침투 테스트는 **도구 중심**입니다:
24
- - nmap으로 스캔하고, 결과를 보고
25
- - sqlmap으로 테스트하고, 다른 도구로 넘어가고
26
- - 각 도구의 출력을 해석하고, 다음 단계를 결정하고
27
-
28
- 이것은 **반복적이고, 시간 소모적이며, 전문가 지식이 필요**합니다.
29
-
30
- ### 해결책
31
-
32
- Pentesting은 **사고 중심**입니다:
33
- - "이 웹 애플리케이션을 침투하라"
34
- - 에이전트가 스스로 도구를 선택하고, 결과를 분석하고, 다음 전략을 결정합니다
1
+ <div align="center">
35
2
 
36
3
  ```
37
- Before (도구 중심):
38
- Human → [결정] → nmap → [분석] → [결정] → sqlmap → [분석] → ...
39
-
40
- After (사고 중심):
41
- Human "침투하라" → Pentesting Agent → [자동화된 사고-행동 루프] → 보고서
4
+ ██████╗ ███████╗███╗ ██╗████████╗███████╗███████╗████████╗██╗███╗ ██╗ ██████╗
5
+ ██╔══██╗██╔════╝████╗ ██║╚══██╔══╝██╔════╝██╔════╝╚══██╔══╝██║████╗ ██║██╔════╝
6
+ ██████╔╝█████╗ ██╔██╗ ██║ ██║ █████╗ ███████╗ ██║ ██║██╔██╗ ██║██║ ███╗
7
+ ██╔═══╝ ██╔══╝ ██║╚██╗██║ ██║ ██╔══╝ ╚════██║ ██║ ██║██║╚██╗██║██║ ██║
8
+ ██║ ███████╗██║ ╚████║ ██║ ███████╗███████║ ██║ ██║██║ ╚████║╚██████╔╝
9
+ ╚═╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚══════╝╚══════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝
42
10
  ```
43
11
 
44
- ### 핵심 신념
45
-
46
- 1. **AI는 도구가 아니라 동료입니다**
47
- - 명령을 실행하는 것이 아니라 목표를 달성합니다
48
- - 실패하면 스스로 다른 방법을 찾습니다
12
+ **Autonomous AI Penetration Testing Agent**
49
13
 
50
- 2. **신뢰할 수 있는 결과만 보고합니다**
51
- - 80% 이상 신뢰도의 발견만 보고
52
- - 거짓 양성을 적극적으로 필터링
14
+ [![npm version](https://badge.fury.io/js/pentesting.svg)](https://www.npmjs.com/package/pentesting)
15
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
53
16
 
54
- 3. **인간 전문가의 사고 과정을 모방합니다**
55
- - "Think → Act → Observe → Reflect" 루프
56
- - 막다른 길에서 시간여행으로 복구 (D-Mail)
17
+ </div>
57
18
 
58
19
  ---
59
20
 
60
- ## 🧠 ReAct: 생각하고 행동하기
61
-
62
- Pentesting은 [ReAct 패턴](https://arxiv.org/abs/2210.03629)을 핵심으로 합니다:
63
-
64
- ```
65
- ┌─────────────────────────────────────────────────────────────────┐
66
- │ │
67
- │ 🤔 THINK │
68
- │ "타겟이 Apache 2.4.49를 실행 중이다. │
69
- │ Path Traversal 취약점(CVE-2021-41773)이 있을 수 있다." │
70
- │ │
71
- │ ⚡ ACT │
72
- │ [nmap_scan] target=192.168.1.1 ports=80,443 │
73
- │ │
74
- │ 👁️ OBSERVE │
75
- │ "포트 80에서 Apache/2.4.49 확인. │
76
- │ mod_cgi 활성화됨." │
77
- │ │
78
- │ 💭 REFLECT │
79
- │ "CVE-2021-41773 가능성 높음. 익스플로잇 시도해야 함. │
80
- │ 신뢰도: 85%. 다음: exploit-researcher에게 위임." │
81
- │ │
82
- └─────────────────────────────────────────────────────────────────┘
83
- ```
84
-
85
- ---
86
-
87
- ## 🚀 빠른 시작
88
-
89
- ### 설치
21
+ ## Quick Start
90
22
 
91
23
  ```bash
92
24
  npm install -g pentesting
93
- # 또는
94
- npx pentesting
95
- ```
96
-
97
- ### API 키 설정
98
-
99
- ```bash
100
- export ANTHROPIC_API_KEY=sk-ant-xxx
101
- ```
102
25
 
103
- ### 실행
26
+ # GLM example
27
+ export PENTEST_API_KEY="your_api_key"
28
+ export PENTEST_BASE_URL="https://api.z.ai/api/anthropic"
29
+ export PENTEST_MODEL="glm-4.7"
104
30
 
105
- ```bash
106
31
  pentesting
107
32
  ```
108
33
 
109
- ### 첫 번째 공격
110
-
111
- ```
112
- 🎯 Pentesting > scan 192.168.1.1
113
- ```
114
-
115
- 에이전트가 자동으로:
116
- 1. 포트 스캔 수행
117
- 2. 서비스 버전 확인
118
- 3. 취약점 검색
119
- 4. 익스플로잇 시도
120
- 5. 결과 보고
121
-
122
- ---
123
-
124
- ## 🏗️ 아키텍처
125
-
126
- ```
127
- ┌─────────────────────────────────────────────────────────────────────┐
128
- │ PENTESTING SOUL │
129
- │ │
130
- │ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │
131
- │ │ ReAct Loop │ │ D-Mail │ │ Planner │ │
132
- │ │ │ │ System │ │ │ │
133
- │ │ Think/Act/ │ │ Time Travel │ │ Attack Plan │ │
134
- │ │ Observe/ │ │ Checkpoint │ │ Generation │ │
135
- │ │ Reflect │ │ Rollback │ │ │ │
136
- │ └───────┬───────┘ └───────┬───────┘ └───────┬───────┘ │
137
- │ │ │ │ │
138
- │ └──────────────────┼──────────────────┘ │
139
- │ │ │
140
- │ ┌──────────────────────────▼──────────────────────────────────┐ │
141
- │ │ RUNTIME │ │
142
- │ │ Context │ Toolset │ Memory │ Approval │ │
143
- │ └──────────────────────────────────────────────────────────────┘ │
144
- └──────────────────────────────┬──────────────────────────────────────┘
145
-
146
-
147
- ┌─────────────────────────────────────────────────────────────────────┐
148
- │ LABOR MARKET │
149
- │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
150
- │ │ Recon │ │ Exploit │ │ Web │ │
151
- │ │ Agent │ │ Agent │ │ Agent │ │
152
- │ └──────────────┘ └──────────────┘ └──────────────┘ │
153
- └─────────────────────────────────────────────────────────────────────┘
154
- ```
155
-
156
- ### 핵심 컴포넌트
157
-
158
- | 컴포넌트 | 역할 |
159
- |---------|------|
160
- | **PentestingSoul** | 메인 에이전트 루프, 모든 것을 조율 |
161
- | **ReActLoop** | Think/Act/Observe/Reflect 패턴 구현 |
162
- | **DMailSystem** | 시간여행 디버깅, 체크포인트 롤백 |
163
- | **Planner** | 공격 계획 생성 및 관리 |
164
- | **LaborMarket** | 전문 서브에이전트 할당 |
165
- | **ContextManager** | 대화 히스토리 압축 |
166
- | **ConfidenceFilter** | 80%+ 신뢰도 필터링 |
167
-
168
- ---
169
-
170
- ## ⏱️ D-Mail: 시간여행 디버깅
171
-
172
- 막다른 길에 도달했을 때, 에이전트는 과거로 메시지를 보내 다른 경로를 시도합니다:
173
-
174
- ```
175
- 현재: SQLi 시도 5회 모두 실패
176
-
177
- D-Mail 전송: "SQLi 실패함. XSS 시도할 것"
178
-
179
- 체크포인트로 롤백
180
-
181
- 새로운 전략으로 재시도
182
- ```
183
-
184
- ```typescript
185
- // 에이전트 내부 동작
186
- if (isStuck) {
187
- dmailSystem.sendDMail(
188
- 'SQLi approach failed. Try XSS instead.',
189
- lastCheckpoint,
190
- 'Stuck after 5 SQLi attempts'
191
- );
192
- throw new BackToTheFuture('Time travel initiated', lastCheckpoint);
193
- }
194
- ```
195
-
196
- ---
197
-
198
- ## 👥 멀티 에이전트 시스템
199
-
200
- ### 전문 에이전트
201
-
202
- | 에이전트 | 전문 분야 | 도구 |
203
- |---------|-----------|------|
204
- | **target-explorer** | 정찰, 정보 수집 | nmap, whois, dig |
205
- | **exploit-researcher** | 취약점 연구 | searchsploit, cve-search |
206
- | **web-hacker** | 웹 애플리케이션 | sqlmap, nuclei |
207
- | **crypto-analyst** | 암호 분석 | hashcat, john |
208
-
209
- ### 에이전트 위임
210
-
211
- ```
212
- Main Agent: "웹 서버에서 SQLi 가능성 발견"
213
-
214
- └──→ [web-hacker] "로그인 폼에서 SQLi 테스트"
215
-
216
- └──→ 결과 반환: "SQLi 확인, 데이터베이스 덤프 가능"
217
- ```
218
-
219
- ### 병렬 Swarm 실행
220
-
221
- ```typescript
222
- const swarm = new AgentSwarm(runtime);
223
-
224
- const results = await swarm.executeParallel([
225
- { agentName: 'web-hacker', task: 'Test SQLi on login' },
226
- { agentName: 'web-hacker', task: 'Test XSS on search' },
227
- { agentName: 'target-explorer', task: 'Find hidden endpoints' },
228
- ]);
229
- ```
230
-
231
- ---
232
-
233
- ## 🔒 신뢰도 기반 필터링
234
-
235
- **80% 이상 신뢰도만 보고합니다.**
236
-
237
- ```
238
- 신뢰도 계산:
239
- 기본값: 50%
240
- + 증거 수 × 10% (최대 30%)
241
- + 익스플로잇 가능: +15%
242
- + 심각도 높음: +5-10%
243
- + CVE 참조: +10%
244
- = 최종 신뢰도
245
- ```
246
-
247
- ```typescript
248
- const finding = createFinding({
249
- title: 'SQL Injection in login',
250
- description: 'Time-based blind SQLi',
251
- severity: 'critical',
252
- evidence: ['sqlmap output', 'response time analysis', 'CVE-2021-xxxx'],
253
- exploitable: true,
254
- });
255
-
256
- // 신뢰도: 50 + 30 + 15 + 10 + 10 = 115% → 100%
257
- // → 보고됨 ✅
258
- ```
259
-
260
- ---
261
-
262
- ## 📋 명령어
263
-
264
- | 명령어 | 설명 |
265
- |--------|------|
266
- | `scan <target>` | 타겟 스캔 및 정찰 |
267
- | `exploit <target>` | 취약점 익스플로잇 |
268
- | `report` | 발견 사항 보고서 생성 |
269
- | `status` | 현재 진행 상황 |
270
- | `plan` | 공격 계획 조회 |
271
- | `agents` | 사용 가능한 에이전트 목록 |
272
-
273
- ---
274
-
275
- ## ⚙️ 설정
276
-
277
- ```typescript
278
- // pentesting.config.ts
279
- export default {
280
- // LLM 설정
281
- model: 'claude-opus-4-0',
282
- maxTokens: 8096,
283
-
284
- // 에이전트 설정
285
- maxStepsPerTurn: 50,
286
- confidenceThreshold: 80,
287
-
288
- // 컨텍스트 설정
289
- maxContextTokens: 150000,
290
- compactionThreshold: 0.8,
291
-
292
- // 승인 설정
293
- yoloMode: false, // true면 모든 도구 자동 승인
294
- };
295
- ```
296
-
297
34
  ---
298
35
 
299
- ## 🧪 테스트
36
+ ## Environment Variables
300
37
 
301
- ```bash
302
- npm test
303
- ```
304
-
305
- ```
306
- tests/soul.test.ts (24 tests) 10ms
307
- ✓ Context
308
- ✓ AgentRegistry
309
- ✓ ConfidenceFilter
310
- ✓ ReActLoop
311
- ✓ DMailSystem
312
- ✓ MessageBus
313
- ✓ MemoryManager
314
- ✓ Integration Tests
315
- ```
38
+ | Variable | Required | Default | Description |
39
+ |----------|----------|---------|-------------|
40
+ | `PENTEST_API_KEY` | ✅ | - | API key (`ANTHROPIC_API_KEY` also works) |
41
+ | `PENTEST_BASE_URL` | | - | Custom API endpoint URL |
42
+ | `PENTEST_MODEL` | | `claude-sonnet-4-20250514` | LLM model name |
43
+ | `PENTEST_MAX_TOKENS` | | `16384` | Max response tokens |
316
44
 
317
45
  ---
318
46
 
319
- ## 📁 프로젝트 구조
47
+ ## Features
320
48
 
321
- ```
322
- src/
323
- ├── soul/ # 핵심 에이전트 시스템
324
- │ ├── pentesting-soul.ts # 메인 에이전트 루프
325
- │ ├── react.ts # ReAct 패턴
326
- │ ├── dmail.ts # 시간여행 시스템
327
- │ ├── planner.ts # 계획 시스템
328
- │ ├── swarm.ts # 병렬 에이전트
329
- │ ├── confidence.ts # 신뢰도 필터링
330
- │ └── ...
331
- ├── tools/ # 도구 정의
332
- ├── agents/ # 에이전트 스펙
333
- ├── experience/ # 학습 시스템
334
- └── prompts/ # 프롬프트 템플릿
335
- ```
49
+ - **Soul Architecture** - ReAct pattern: Think → Act → Observe → Reflect
50
+ - **9 Specialized Agents** - Recon, Exploit, PrivEsc, Web, Crypto...
51
+ - **80%+ Confidence Filter** - Only high-confidence findings
52
+ - **D-Mail Time Travel** - Auto-recovery from dead ends
53
+ - **50+ Security Tools** - nmap, sqlmap, gobuster, hydra...
336
54
 
337
55
  ---
338
56
 
339
- ## 📖 문서
57
+ ## Commands
340
58
 
341
- - [시스템 아키텍처](docs/architecture.md) - 상세 기술 문서
342
- - [OpenClaw 분석](docs/OPENCLAW_ANALYSIS.md) - 개선 계획
343
- - [API 레퍼런스](docs/api-reference.md) - API 문서
344
- - [구현 진행 상황](docs/IMPLEMENTATION_PROGRESS.md) - 개발 상태
59
+ | Command | Description |
60
+ |---------|-------------|
61
+ | `/target <ip>` | Set target |
62
+ | `/start [objective]` | Start autonomous pentest |
63
+ | `/findings` | Show findings |
64
+ | `/status` | Status |
65
+ | `/yolo` | Toggle auto-approve |
66
+ | `/help` | Help |
345
67
 
346
68
  ---
347
69
 
348
- ## 🛣️ 로드맵
70
+ ## Documentation
349
71
 
350
- ### v1.0 (현재)
351
- - [x] ReAct 패턴 구현
352
- - [x] D-Mail 시간여행
353
- - [x] 멀티 에이전트 시스템
354
- - [x] 신뢰도 필터링
355
- - [x] 컨텍스트 압축
356
-
357
- ### v1.1 (다음)
358
- - [ ] 영구 벡터 메모리
359
- - [ ] 세션 영속성
360
- - [ ] 강화된 훅 시스템
361
-
362
- ### v1.2 (계획)
363
- - [ ] Docker 샌드박스
364
- - [ ] 스킬 마켓플레이스
365
- - [ ] 인증 프로필 관리
366
-
367
- ---
368
-
369
- ## 🤝 기여
370
-
371
- 기여를 환영합니다! [CONTRIBUTING.md](CONTRIBUTING.md)를 참고하세요.
72
+ - [Architecture](docs/architecture.md)
73
+ - [API Reference](docs/api-reference.md)
74
+ - [Troubleshooting](docs/troubleshooting.md)
372
75
 
373
76
  ---
374
77
 
375
- ## 📜 라이선스
78
+ ## License
376
79
 
377
- MIT License - [LICENSE](LICENSE)
378
-
379
- ---
380
-
381
- ## ⚠️ 면책 조항
382
-
383
- 이 도구는 **합법적인 보안 테스트 목적**으로만 사용해야 합니다.
384
- 허가 없이 시스템을 테스트하는 것은 불법입니다.
385
- 사용자는 모든 행동에 대한 책임을 집니다.
386
-
387
- ---
80
+ MIT
388
81
 
389
- <p align="center">
390
- <sub>Built with 🧠 by <a href="https://github.com/agnusdei1207">agnusdei1207</a></sub>
391
- </p>
82
+ ⚠️ **For authorized security testing only.**
@@ -8,8 +8,8 @@ import {
8
8
  readVersionCache,
9
9
  semverTuple,
10
10
  writeVersionCache
11
- } from "./chunk-AIBIXGJI.js";
12
- import "./chunk-5QWIIPHH.js";
11
+ } from "./chunk-N27ISRFF.js";
12
+ import "./chunk-IYELGZKK.js";
13
13
  import "./chunk-3RG5ZIWI.js";
14
14
  export {
15
15
  checkForUpdate,
@@ -186,7 +186,7 @@ var SENSITIVE_TOOLS = [
186
186
 
187
187
  // src/config/constants.ts
188
188
  import { createRequire } from "module";
189
- var pkgVersion = "0.7.48";
189
+ var pkgVersion = "0.8.0";
190
190
  try {
191
191
  const require2 = createRequire(import.meta.url);
192
192
  const pkg = require2("../../package.json");
@@ -200,6 +200,14 @@ var LLM_API_KEY = process.env.PENTEST_API_KEY || process.env.ANTHROPIC_API_KEY |
200
200
  var LLM_BASE_URL = process.env.PENTEST_BASE_URL || void 0;
201
201
  var LLM_MODEL = process.env.PENTEST_MODEL || "claude-sonnet-4-20250514";
202
202
  var LLM_MAX_TOKENS = parseInt(process.env.PENTEST_MAX_TOKENS || "16384", 10);
203
+ var CONTEXT_WINDOW = {
204
+ maxTokens: 2e5,
205
+ // Claude's context window size
206
+ compactionThreshold: 15e4,
207
+ // Trigger compaction at 75% usage
208
+ reservedTokens: 4e3
209
+ // Reserved for system prompt
210
+ };
203
211
  var AGENT_CONFIG = {
204
212
  maxIterations: 200,
205
213
  maxToolCallsPerIteration: 10,
@@ -240,5 +248,6 @@ export {
240
248
  LLM_BASE_URL,
241
249
  LLM_MODEL,
242
250
  LLM_MAX_TOKENS,
251
+ CONTEXT_WINDOW,
243
252
  AGENT_CONFIG
244
253
  };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  APP_NAME,
3
3
  APP_VERSION
4
- } from "./chunk-5QWIIPHH.js";
4
+ } from "./chunk-IYELGZKK.js";
5
5
 
6
6
  // src/core/update/auto-update.ts
7
7
  import { execSync } from "child_process";
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ import {
6
6
  APP_DESCRIPTION,
7
7
  APP_VERSION,
8
8
  CLI_COMMAND,
9
+ CONTEXT_WINDOW,
9
10
  LLM_API_KEY,
10
11
  LLM_BASE_URL,
11
12
  LLM_MAX_TOKENS,
@@ -15,7 +16,7 @@ import {
15
16
  PHASE_STATUS,
16
17
  THOUGHT_TYPE,
17
18
  TOOL_NAME
18
- } from "./chunk-5QWIIPHH.js";
19
+ } from "./chunk-IYELGZKK.js";
19
20
  import {
20
21
  __require
21
22
  } from "./chunk-3RG5ZIWI.js";
@@ -3162,7 +3163,7 @@ function getHistoryTokens(messages) {
3162
3163
  return total + estimateTokens(content);
3163
3164
  }, 0);
3164
3165
  }
3165
- function needsCompaction(messages, maxTokens = 15e4, minMessages = 10) {
3166
+ function needsCompaction(messages, maxTokens = CONTEXT_WINDOW.compactionThreshold, minMessages = 10) {
3166
3167
  if (messages.length < minMessages) return false;
3167
3168
  return getHistoryTokens(messages) > maxTokens;
3168
3169
  }
@@ -3218,7 +3219,7 @@ var ContextManager = class {
3218
3219
  client;
3219
3220
  constructor(client, options) {
3220
3221
  this.client = client;
3221
- this.maxTokens = options?.maxTokens ?? 15e4;
3222
+ this.maxTokens = options?.maxTokens ?? CONTEXT_WINDOW.compactionThreshold;
3222
3223
  this.warningThreshold = options?.warningThreshold ?? 12e4;
3223
3224
  }
3224
3225
  /**
@@ -6983,7 +6984,7 @@ var App = ({ autoApprove = false, target }) => {
6983
6984
  setCheckpointCount(contextManagerRef.current?.getCheckpoints().length || 0);
6984
6985
  }
6985
6986
  });
6986
- import("./auto-update-FWXZGK5Z.js").then(({ checkForUpdateAsync, formatUpdateNotification }) => {
6987
+ import("./auto-update-NUVK35LG.js").then(({ checkForUpdateAsync, formatUpdateNotification }) => {
6987
6988
  checkForUpdateAsync().then((result) => {
6988
6989
  if (result.hasUpdate) {
6989
6990
  const notification = formatUpdateNotification(result);
@@ -7686,7 +7687,7 @@ ${list}`);
7686
7687
  return;
7687
7688
  case "update":
7688
7689
  try {
7689
- const { checkForUpdate, formatUpdateNotification, doUpdate } = await import("./update-OD3N757W.js");
7690
+ const { checkForUpdate, formatUpdateNotification, doUpdate } = await import("./update-VGGUNUWQ.js");
7690
7691
  const result = checkForUpdate(true);
7691
7692
  if (result.hasUpdate) {
7692
7693
  const notification = formatUpdateNotification(result);
@@ -8,8 +8,8 @@ import {
8
8
  readVersionCache,
9
9
  semverTuple,
10
10
  writeVersionCache
11
- } from "./chunk-AIBIXGJI.js";
12
- import "./chunk-5QWIIPHH.js";
11
+ } from "./chunk-N27ISRFF.js";
12
+ import "./chunk-IYELGZKK.js";
13
13
  import "./chunk-3RG5ZIWI.js";
14
14
  export {
15
15
  checkForUpdate,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pentesting",
3
- "version": "0.8.0",
3
+ "version": "0.8.2",
4
4
  "description": "Autonomous Penetration Testing AI Agent",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",