
Rust로 작성된 비동기 API 보안 스캐너로, CORS, CSP, GraphQL, JWT, OpenAPI 및 능동적 API 자세 점검을 수행합니다.
이 프로젝트가 업무에 도움이 된다면, 지속적인 유지보수와 새로운 기능 개발을 지원해 주세요.
ETH 기부 지갑
0x11282eE5726B3370c8B480e321b3B2aA13686582
QR 코드를 스캔하거나 위의 지갑 주소를 복사하세요.
API 기준 테스트와 회귀 탐지를 위한 비동기, 모듈형 API 보안 스캐너.
적응형 동시성과 CI 대응 출력(NDJSON/SARIF)을 사용하여 탐지와 타겟 검사(CORS/CSP/GraphQL/OpenAPI/JWT/API 보안)를 결합합니다.
사용 사례: 공격(offense) 측면에서는 레드팀/API 침투 테스트 탐지와 익스플로잇 검증, 방어(defense) 측면에서는 CI/CD 회귀 게이팅, 지속적인 API 하드닝, 조기 오구성 탐지 등이 있습니다.
대규모 스캐닝을 하시나요? Triage 모드를 확인하세요 — 핵심 보안 검사로 20분 안에 5000개 대상을 스캔한 다음, Enrich 모드를 사용해 발견 항목에 위협 인텔리전스 컨텍스트(포트, CVE, ASN, 도메인 연령)를 추가할 수 있습니다.
ApiHunterapihunterapi_scannerapihunter (cargo run 기본값)검색 가능성을 위해 GitHub 저장소 설정에서 다음 항목을 지정하세요:
Async API security scanner for CORS/CSP/GraphQL/JWT/OpenAPI and active API posture checks.https://github.com/Teycir/ApiHunterrust, security, api-security, scanner, graphql, cors, csp, jwt, openapi, sarif, ndjsonflowchart LR A[CLI apihunter] --> B[main.rs] D[Input Sources] --> E[Pre-filter + Discovery] B --> C[HttpClient + Config] E --> F[runner.rs] C --> F
F --> G1[Passive scanners]
F --> G2[Active scanners]
I[template-tool] --> H[CVE templates]
H --> G2
G1 --> J[Findings]
G2 --> J
J --> K[Reporter]
K --> L[Auto Reports]
K --> M[CI/CD Controls]
## ApiHunter를 선택해야 하는 이유는?
### 핵심 장점
- **API 우선 아키텍처**: 웹 앱 스캐너를 개조한 것이 아니라 REST/GraphQL API 전용으로 설계됨
- **지능형 오탐(False Positive) 감소**:
- 카나리 프로빙을 통한 SPA catch-all 감지
- 컨텍스트 인식 시크릿 검증(프런트엔드 vs 백엔드)
- 본문 콘텐츠 검증 및 referer 확인
- 중복 발견 항목을 건너뛰기 위한 응답 핑거프린팅
- **설계상 프로덕션 안전**:
- 오류 발생 시 백오프하는 적응형 동시성(AIMD)
- 구성 가능한 지연 시간을 갖춘 호스트별 속도 제한
- 정중함 제어(재시도, 타임아웃, WAF 우회)
- 활성 검사를 위한 드라이런 모드
- **스텔스 및 회피**:
- 큐레이션된 풀(assets/user_agents.txt)에서 런타임 User-Agent 로테이션
- 지터가 포함된 무작위 요청 지연
- 호스트별 지연 강제(버스트 패턴 방지)
- 지수 백오프가 포함된 재시도 로직
- 정상 트래픽과 혼합되기 위한 사용자 정의 헤더 주입
- 서버 응답에 따른 적응형 타이밍
- 기본 모드에서 하드코딩된 스캐너 핑거프린트 없음
### 스텔스 기법 심층 분석
ApiHunter는 WAF(웹 애플리케이션 방화벽) 및 봇 보호 시스템의 탐지를 피하기 위해 여러 스텔스 기법을 사용합니다:
#### 1. User-Agent 로테이션
**기능:** 파일(`assets/user_agents.txt`)에서 100개 이상의 실제 브라우저 User-Agent 문자열을 무작위로 순환합니다.
**효과가 있는 이유:** 봇은 일반적으로 동일한 User-Agent(예: `curl/7.68.0`)를 사용합니다. Chrome, Firefox, Safari 등으로 위장하면 정상 트래픽에 섞여들 수 있습니다.
**쉬운 비유:** 항상 같은 제복을 입는 대신 여러 가지 변장을 하는 것과 같습니다.
#### 2. 무작위 타이밍 및 지터
**기능:** 요청 사이에 지터(작은 무작위 변동)와 함께 무작위 지연을 추가합니다(`--delay-ms`로 제어).
**효과가 있는 이유:** 봇은 완벽한 간격(정확히 100ms 간격)으로 요청을 보냅니다. 인간은 예측할 수 없습니다. 무작위 타이밍은 트래픽을 자연스럽게 보이게 만듭니다.
**쉬운 비유:** 로봇처럼 행진하는 대신 불규칙한 보폭으로 걷는 것과 같습니다.
#### 3. 호스트별 지연 강제
**기능:** 전역이 아닌 각 도메인에 대해 지연을 별도로 추적합니다.
**효과가 있는 이유:** 한 호스트에 50번을 순식간에 때리는 버스트 패턴을 방지합니다. 각 호스트는 정중하고 간격을 둔 요청을 보게 됩니다.
**쉬운 비유:** 한 사람에게 반복적으로 소리치는 대신 여러 대화에 번갈아 참여하는 것과 같습니다.
#### 4. 적응형 동시성(AIMD)
**기능:** 429(속도 제한) 또는 503(서버 사용 중) 오류가 발생하면 자동으로 속도를 늦추고, 성공하면 속도를 높입니다.
**효과가 있는 이유:** 적발되면 물러나고 브라우저가 재시도하는 방식을 모방합니다. WAF는 "이 클라이언트는 우리의 제한을 존중한다"고 봅니다.
**쉬운 비유:** 교통이 혼잡하면 속도를 줄이고, 열린 도로에서는 속도를 높이는 것과 같습니다.
#### 5. 지수 백오프 재시도
**기능:** 요청이 실패하면 재시도 전에 1초, 그다음 2초, 그다음 4초를 기다립니다.
**효과가 있는 이유:** 정당한 클라이언트는 정상적으로 재시도합니다. 봇은 종종 즉시 두들기거나 포기합니다.
**쉬운 비유:** 문을 두드릴 때 계속 두드리는 대신 매번 더 오래 기다리는 것과 같습니다.
#### 6. 스캐너 핑거프린트 없음
**기능:** `X-Scanner: ApiHunter` 같은 헤더나 예측 가능한 패턴을 보내지 않습니다.
**효과가 있는 이유:** 많은 도구가 시그니처(Nuclei 템플릿, sqlmap 패턴)를 남깁니다. ApiHunter는 명백한 표식을 피합니다.
**쉬운 비유:** "보안 테스터"라는 이름표를 달지 않는 것과 같습니다.
#### 7. 연결 재사용 및 풀링
**기능:** 호스트별 HTTP 클라이언트 풀을 사용하고 연결을 유지합니다.
**효과가 있는 이유:** 브라우저는 연결을 재사용합니다. 모든 요청에 대해 열고 닫는 것은 의심스러워 보입니다.
**쉬운 비유:** 문을 계속 닫아 버리고 다시 벨을 누르는 대신 문을 열어 두는 것과 같습니다.
#### 8. 사용자 정의 헤더 주입
**기능:** `Referer`, `X-Forwarded-For`, 사용자 정의 쿠키 같은 헤더를 추가할 수 있습니다.
**효과가 있는 이유:** 요청이 정상적인 애플리케이션 흐름(링크 클릭, 세션 쿠키 보유)에서 온 것처럼 보이게 만듭니다.
**쉬운 비유:** 울타리를 넘는 대신 입장 시 티켓 스텁을 보여주는 것과 같습니다.
#### 탐지 비교
| 기법 | 회피 없음 | 회피 적용 |
|-----------|----------------|-------------|
| **User-Agent** | `python-requests/2.28.0`(명백한 봇) | `Mozilla/5.0 (Windows NT 10.0; Win64; x64)...`(Chrome처럼 보임) |
| **타이밍** | 완벽한 100ms 간격 → WAF 차단 | 120ms, 95ms, 180ms → 인간처럼 보임 |
| **재시도** | 즉시 재시도 → 차단 | 1초→2초→4초 대기 → "인내심 있는 클라이언트" |
| **동시성** | 100개 병렬 히트 → 경보 | 응답에 따라 적응형 5→10→3 → "정중한 브라우저" |
#### `--waf-evasion` 사용 시점
- Cloudflare/Akamai/AWS WAF가 있는 프로덕션 API 테스트
- 대규모 스캔 중 IP 차단 방지
- 레이더에 잡히지 않아야 하는 침투 테스트