인증 우회, IDOR, 로직 버그를 찾는 AI 기반 SAST 스캐너로 Semgrep/CodeQL이 놓치는 부분을 찾습니다. 무료 GitHub Action. Python, JS/TS, Go, PHP, Ruby를 지원합니다.
AI 기반 코드 보안 스캐너로, Semgrep와 CodeQL이 놓치는 취약점을 찾아냅니다.
빠른 시작 • GitHub Action • 비교 • 언어 • FAQ
전통적인 SAST 도구는 패턴 매칭과 AST 규칙에 의존합니다. 알려진 취약점 패턴을 잡는 데는 뛰어나지만, 근본적으로 의도를 추론할 수 없습니다.
API에 20개의 엔드포인트가 있고 그중 19개가 리소스에 대해 작업을 수행하기 전에 인증을 확인한다면, Semgrep은 그렇지 않은 하나를 표시할 방법이 없습니다. 매칭할 패턴이 없기 때문입니다. 취약점은 패턴의 부재입니다.
VulnHawk는 AI로 코드를 분석하며, 검사하는 모든 코드 조각에 대해 코드베이스 내 다른 곳의 관련 코드를 컨텍스트로 포함시킵니다. 이 강화 단계를 통해 AI는 유사한 컴포넌트들이 보안을 어떻게 처리하는지 비교하고, 그렇지 않은 것을 발견할 수 있습니다.
pip install vulnhawk
백엔드 선택:
# Claude Code CLI - 구독자 무료 (권장)
vulnhawk scan ./src -b claude-code
# Codex CLI - ChatGPT Pro/Plus 구독자 무료
vulnhawk scan ./src -b codex
# Claude API
export ANTHROPIC_API_KEY=sk-ant-...
vulnhawk scan ./src
# OpenAI API
vulnhawk scan ./src -b openai -m gpt-4o
# Ollama - 무료, 로컬, 완전 비공개
vulnhawk scan ./src -b ollama -m llama3.1
설정 파일 없음. 규칙 작성 불필요. 데이터베이스 구축 필요 없음.
Claude Code 및 Codex 백엔드는 기존 구독이 있는 사용자에게 무료입니다. VulnHawk는 로컬 CLI를 통해 프롬프트를 전달하므로 추가 API 비용이 없습니다.
| 기능 | VulnHawk | Semgrep | CodeQL | Snyk Code | Checkmarx | SonarQube |
|---|---|---|---|---|---|---|
| 감지 방법 | AI 추론 | AST 패턴 | QL 데이터 흐름 | ML + 규칙 | 패턴 + 흐름 | 패턴 |
| 비즈니스 로직 결함 | 예 | 아니요 | 제한적 | 제한적 | 제한적 | 아니요 |
| 파일 간 컨텍스트 | 자동 | 사용자 정의 규칙 | 사용자 정의 쿼리 | 일부 | 유료 티어 | 제한적 |
| 설정 복잡성 | 설정 불필요 | 규칙 구성 | DB 구축 + QL | 설정 파일 | 복잡함 | 서버 설정 |
| 사용자 정의 규칙 필요 | 아니요 | 예 (YAML) | 예 (QL) | 일부 | 예 | 예 |
| 컨텍스트 인식 수정 | 예 | 일반적 | 일반적 | 일반적 | 일반적 | 일반적 |
| 로컬/비공개 모드 | Ollama | 예 | 예 | 아니요 | 아니요 | 자가 호스팅 |
| CI/CD 통합 | 1줄 Action | Action | Action | Action | 플러그인 | 플러그인 |
| SARIF 입력 (도구 체인) | 예 | 아니요 | 아니요 | 아니요 | 아니요 | 아니요 |
| 가격 | 무료* | 무료/유료 | 무료/유료 | 무료/$$$ | $$$$$ | 무료/$$$ |
*Claude Code, Codex CLI 또는 Ollama로 무료 사용 가능. API 백엔드는 스캔당 약 $0.50-$2.00 비용이 듭니다.
| 취약점 클래스 | 규칙 기반 도구가 놓치는 이유 |
|---|---|
| N개 중 1개의 엔드포인트에서 인증 누락 | 매칭할 패턴이 없음 - 버그는 검사 부재 |
| IDOR / BOLA | JWT의 사용자 ID가 URL의 ID와 일치해야 함을 이해해야 함 |
| 결제 금액 조작 | 비즈니스 로직 - 금액 필드를 클라이언트에서 신뢰해서는 안 됨 |
| 일관되지 않은 입력 검증 | 5개의 핸들러는 검증, 6번째는 안 함 - 파일 간 비교 필요 |
| 저장된 입력 오용 | 안전하게 저장되었지만 3파일 떨어진 곳에서 eval() 또는 원시 SQL로 사용됨 |
| 상태 업데이트의 경쟁 조건 | 잠금 없는 동시 잔액 수정 |
| 계층 | 도구 | 목적 |
|---|---|---|
| 1 | Semgrep | 알려진 악성 패턴에 대한 빠르고 결정론적인 게이트키핑 |
| 2 | CodeQL | 복잡한 호출 체인을 통한 깊은 오염 추적 |
| 3 | VulnHawk | 규칙이 표현할 수 없는 비즈니스 로직, 인증 갭, IDOR 및 불일치 |
vulnhawk scan ./src # 전체 스캔 (기본값)
vulnhawk scan ./src --mode auth # 인증 우회, 누락된 검사, 세션 결함
vulnhawk scan ./src --mode injection # SQLi, 명령 주입, SSTI, XSS
vulnhawk scan ./src --mode secrets # 하드코딩된 키, 토큰, 비밀번호
vulnhawk scan ./src --mode config # 디버그 모드, 허용적 CORS, 안전하지 않은 쿠키
vulnhawk scan ./src --mode crypto # 약한 해싱, 하드코딩된 키, 나쁜 RNG
vulnhawk scan ./src -o json -f results.json # JSON
vulnhawk scan ./src -o sarif -f results.sarif # SARIF (GitHub Code Scanning)
vulnhawk scan ./src -o markdown -f report.md # Markdown 보고서
vulnhawk scan ./src --severity high # Critical + High만
vulnhawk scan ./src --severity info # 모든 항목
Semgrep, CodeQL 또는 SARIF를 생성하는 모든 도구의 출력을 VulnHawk에 공급하세요. VulnHawk는 이러한 결과를 추가 컨텍스트로 사용하여 검증, 확장 및 체인하여 더 깊은 취약점을 찾아냅니다.
# 먼저 Semgrep을 실행한 후 VulnHawk로 강화
semgrep --config auto ./src -o semgrep.sarif --sarif
vulnhawk scan ./src --sarif-input semgrep.sarif
이를 통해 가능한 것:
vulnhawk info ./src # 파일, 청크 및 언어 분류 미리보기
VulnHawk는 기본 브랜치에서 기준 스캔으로 실행되며 모든 풀 리퀘스트에서 증분 스캔으로 실행됩니다.
name: VulnHawk Security Scan
on:
push:
branches: [main, master]
pull_request:
permissions:
security-events: write
contents: read
jobs:
vulnhawk:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: momenbasel/vulnhawk@main
with:
target: '.'
backend: 'claude-code'
claude-code-oauth-token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
severity: 'medium'
fail-on-findings: 'true'
결과는 SARIF를 통해 GitHub의 Security > Code Scanning 탭에 자동으로 업로드됩니다.
| 백엔드 | 구성 |
|---|---|
| Claude Code (무료) |
다음 명령어로 토큰 획득: |
| Codex (무료) |
러너에서 |
| Claude API |
|
| OpenAI API |
|
steps:
- uses: actions/checkout@v4
- name: Semgrep (빠른 패턴 스캔)
uses: returntocorp/semgrep-action@v1
with:
config: auto
generateSarif: true
- name: VulnHawk (심층 AI 분석)
uses: momenbasel/vulnhawk@main
with:
target: '.'
backend: 'claude-code'
claude-code-oauth-token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
sarif-input: 'semgrep.sarif'
| 언어 | 확장자 | 프레임워크 감지 |
|---|---|---|
| Python | .py | Django, Flask, FastAPI |
| JavaScript | .js .jsx | Express, Fastify, Next.js |
| TypeScript | .ts .tsx | Express, NestJS, Fastify |
| Go | .go | net/http handlers |
| Java | .java | 클래스/메서드 분할 |
| PHP | .php | Laravel 라우트, 클래스, 트레이트, 인터페이스 |
| Ruby | .rb .erb | Rails 라우트, 클래스, 모듈 |
코드베이스 ──> 발견 ──> 청크 ──> 강화 ──> 분석 ──> 검증 ──> 보고
│ │ │ │ │
.gitignore 및 함수 동일 디렉토리 + LLM + 보안 중복 제거 +
.vulnhawk- 클래스 인증 패턴의 프롬프트 신뢰도
ignore 준수 라우트 등 관련 코드 점수
모듈
강화 단계가 핵심 차별화 요소입니다. 각 코드 청크에 대해 VulnHawk는 다음을 포함합니다:
이를 통해 AI는 불일치를 식별하는 데 필요한 컨텍스트를 얻습니다.
스캔에서 경로 제외 (gitignore 구문):
generated/
vendor/
third_party/
*.gen.go