
AgentField에서 실행되는 AI 네이티브 코드 보안 감사 도구로, 판정, 추적 기록, 조치 가능한 증거를 통해 악용 가능성을 입증합니다.
다른 도구들은 패턴을 탐지합니다. SEC-AF는 악용 가능성을 증명합니다: 모든 발견 사항에는 판정, 데이터 흐름 추적, 그리고 실행 가능한 증거가 포함됩니다. 무료, 오픈소스, API 호출 한 번으로 충분합니다. 검증된 30건의 발견 사항을 포함한 전체 감사 비용은 LLM 호출 기준 약 $1.40입니다.
af CLI(af ≥ 0.1.87 필요)로 실행하세요 — 실시간 진행 상황을 스트리밍하고 결과를 출력합니다:```bash
af call sec-af.audit --in '{"repo_url": "https://github.com/dolevf/Damn-Vulnerable-GraphQL-Application"}'
raw HTTP를 선호하시나요? curl로 API를 직접 호출하세요:```bash
curl -X POST http://localhost:8080/api/v1/execute/async/sec-af.audit \
-H "Content-Type: application/json" \
-d '{"input": {"repo_url": "https://github.com/dolevf/Damn-Vulnerable-GraphQL-Application"}}'
이는 SEC-AF가 DVGA (의도적으로 취약하게 만든 GraphQL 애플리케이션)를 감사하면서 확인한 실제 발견 사항입니다:```jsonc { "title": "OS Command Injection in run_cmd Helper Function", "severity": "critical", "verdict": "confirmed", // not "maybe" — confirmed exploitable "evidence_level": 5, "cwe_id": "CWE-78",
"rationale": "Tracer confirms complete data flow from GraphQL parameters (host, port, path, scheme, cmd, arg) to os.popen(cmd).read() sink. Sanitization functions are bypassable in Easy mode...",
"proof": { "verification_method": "composite_subagent_chain:sast", "data_flow_trace": [ { "description": "core/views.py:203 — GraphQL args defined (host, port, path, scheme)", "tainted": true }, { "description": "core/views.py:210 — URL constructed from user input", "tainted": true }, { "description": "core/views.py:211 — helpers.run_cmd(f'curl {url}') called", "tainted": true }, { "description": "core/helpers.py:9 — os.popen(cmd).read() executes input", "tainted": true } ] },
"location": { "file_path": "core/helpers.py", "start_line": 9, "code_snippet": "def run_cmd(cmd):\n return os.popen(cmd).read()" } }
모든 결과에는 **판정(verdict)**(`confirmed` / `likely` / `inconclusive` / `not_exploitable`), 전체 taint trace를 포함한 **증명 객체(proof object)**, 그리고 정확한 코드 위치가 포함됩니다. "문제일 수도 있습니다" 수준이 아닙니다. SEC-AF는 데이터를 source부터 sink까지 추적하고 실제로 악용 가능한지 증명합니다.
> 전체 벤치마크 출력(30개 결과): [`exampl/dvga-benchmark-result.json`](https://github.com/agent-field/sec-af/blob/HEAD/exampl/dvga-benchmark-result.json) | 성능 분석: [`exampl/benchmark-analysis.json`](https://github.com/agent-field/sec-af/blob/HEAD/exampl/benchmark-analysis.json)
## 벤치마크: DVGA
우리는 의도적으로 취약하게 만든 21개의 문서화된 보안 시나리오를 가진 [Damn Vulnerable GraphQL Application](https://github.com/dolevf/Damn-Vulnerable-GraphQL-Application)을 대상으로 SEC-AF를 실행합니다.
| 지표 | 값 |
|---|---|
| 발견된 원시 결과 | 106 |
| AI 중복 제거 후 | 61 |
| **적대적 검증 후** | **28 confirmed** |
| Inconclusive(수동 검토 필요) | 1 |
| 악용 불가(올바르게 기각됨) | 1 |
| 노이즈 감소 | 94% |
| DAG 간선(reasoner 호출) | 82 |
| 에이전트 호출 | ~166–255 |
| 실행된 전략 | 11 |
| 실제 소요 시간 | ~78 min |
| 예상 비용(Kimi K2.5) | ~$0.18–$0.90 |
<details>
<summary><strong>분류별 30개 검증 결과 분석</strong></summary>
| 카테고리 | 개수 | 예시 |
|---|---|---|
| 인증 누락 | 8 | ImportPaste, delete_all_pastes, system_debug, CreateUser, 파일 업로드 |
| 명령어 주입 | 4 | `os.popen(cmd)` via ImportPaste, system_debug, system_diagnostics |
| SQL 주입 | 3 | `resolve_pastes`의 비위생화 `filter`, LIKE 패턴 주입, login |
| 인증 우회 | 3 | JWT 서명 비활성화, JWT 인가 우회, 취약한 비밀번호 인증 |
| 평문 자격 증명 | 3 | 평문 비밀번호 저장, 평문 비교, 진단 정보의 비밀번호 |
| SSRF | 2 | ImportPaste 뮤테이션이 사용자 제공 URL을 서버 측에서 따라감 |
| 비즈니스 로직 / URL 검증 | 2 | 불충분한 URL 검증, 인증 없는 대량 삭제 |
| DoS / 리소스 고갈 | 3 | users/audits 쿼리에 페이지네이션 누락, 제어되지 않는 simulate_load |
| 설정 / 비밀값 | 2 | 하드코딩된 JWT/Flask 비밀값, 프로덕션에서 디버그 모드 활성화 |
</details>
<details>
<summary><strong>설계 패턴: AI 네이티브 보안 분석이 작동하는 방식</strong></summary>
SEC-AF는 단일 모놀리식 스캔을 실행하는 대신 많은 초점화된 AI 에이전트를 조합해야만 가능한 몇 가지 아키텍처 패턴을 적용합니다. 이러한 패턴은 AI 기반 보안 분석의 근본적인 문제를 해결합니다.
**1. 적대적 에이전트 긴장(HUNT vs. PROVE)**
대부분의 AI 보안 도구는 단일 모델에게 "이게 취약한가?"라고 묻고 답을 그대로 받아들입니다. SEC-AF는 _발견(finding)_ 에이전트와 _반증(disproving)_ 에이전트를 구조적으로 분리합니다. 헌터는 취약점을 찾도록 유도되고, 프루버는 이를 반증하도록 유도됩니다. 각 결과는 4개 에이전트 검증 체인을 통과합니다. 트레이서가 데이터 흐름을 재구성하고, 새니타이제이션 분석기가 헌터가 놓쳤을 수 있는 완화 조치를 찾고, 익스플로잇 가설 설정자가 구체적인 공격 시나리오를 구성하며, 판정 에이전트가 모든 상충되는 증거를 평가합니다. 에이전트 간의 이러한 적대적 긴장이 94% 노이즈 감소를 이끌어냅니다. 즉, 아키텍처 자체가 회의주의를 내재화한 것입니다.
**2. 점진적 축소를 통한 신호 캐스케이드**
파이프라인은 모든 결과를 사용자에게 한꺼번에 쏟아내는 대신 각 단계에서 신호를 압축합니다. 원시 결과 106개 → AI 중복 제거 후 61개 → 적대적 검증 후 30개. 각 단계는 필터입니다. 이는 인간 보안 팀의 트리아지 방식과 같습니다. 먼저 광범위하게 발견한 다음 점점 더 엄격한 검증을 거치는 것입니다. 핵심 통찰은 각 필터가 _서로 다른 종류의_ AI 추론이라는 점입니다. 중복 제거에는 의미론적 유사성, 검증에는 taint 분석, 확인에는 익스플로잇 구성이 사용됩니다.
**3. 컨텍스트 정리를 통한 정보 경제**
LLM은 관련 없는 컨텍스트를 받으면 더 많이 환각합니다. SEC-AF는 각 에이전트가 필요로 하는 정보만 라우팅합니다. 인젝션 헌터는 데이터 흐름 맵과 입력 진입점으로 정리된 recon 컨텍스트를 받고, crypto hunter는 의존성 트리와 키 관리 패턴을 받습니다. 검증자는 특정 검증 방법에 필요한 필드만 포함된 투영된 결과 뷰를 받습니다. 이러한 전략별 컨텍스트 정리는 환각과 비용을 모두 줄여줍니다. 에이전트는 결코 볼 수 없는 정보로 스스로를 혼란스럽게 만들 수 없기 때문입니다.
**4. 스트리밍 단계 오버랩**
기존 파이프라인은 순차적으로 실행됩니다. recon을 마친 후 헌팅을 시작하고, 그다음 증명을 시작합니다. SEC-AF는 `asyncio.Queue`를 통해 단계를 겹쳐 실행합니다. 헌터는 recon 출력이 도착하는 대로 소비하기 시작하고, 각 헌터가 완료되면 dedup이 결과를 처리합니다. 이후 헌터가 아직 실행 중인 동안 프루버는 첫 번째 중복 제거된 결과를 검증하기 시작합니다. 이 스트리밍 아키텍처는 신호 캐스케이드를 희생하지 않으면서 실제 소요 시간을 줄입니다. 각 결과는 여전히 모든 필터를 통과하지만, 더 일찍 통과합니다.
**5. AI 게이트를 통한 동적 라우팅**
파이프라인은 발견한 내용에 따라 런타임에 적응합니다. AI 게이트가 recon 출력을 검사하고 어떤 헌트 전략을 활성화할지 선택합니다. JWT 인증을 사용하는 Flask 앱은 gRPC를 사용하는 Go 마이크로서비스와 다른 헌터를 트리거합니다. 별도의 CWE 확장 게이트는 감지된 기술 스택에 따라 취약점 대상 목록을 동적으로 넓힙니다. 도달 가능성 게이트는 검증 리소스를 도달할 수 없는 코드에 낭비하기 전에 의존성 취약점에 악용 가능한 호출 경로가 있는지 평가합니다.
**6. 코딩 에이전트를 위한 안내된 자율성**
SEC-AF는 AgentField 하네스를 통해 코딩 에이전트(Claude Code, OpenCode, Codex) 위에서 실행됩니다. 에이전트에게 단일 거대 프롬프트를 주는 대신, 각 reasoner는 단계 인식 안내 자율성을 제공합니다. 에이전트는 좁은 작업 정의, 평면 출력 스키마(2-4개 필드), 전략별 컨텍스트를 받습니다. 에이전트는 이 경계 내에서 완전한 자율성을 가집니다. 파일을 읽고, 코드를 추적하고, 자유롭게 추론할 수 있지만, 하네스는 출력의 _형태_ 를 제한합니다. 이는 자율 에이전트가 작업에서 벗어나거나 구조화되지 않은 결과를 생성하는 일반적인 실패 모드를 방지합니다.
**7. 완전한 관측 가능성을 갖춘 구성 가능한 reasoner DAG**
모든 에이전트 호출은 AgentField 컨트롤 플레인을 통과하여 감사 과정의 완전한 DAG(directed acyclic graph)를 생성합니다. 어떤 헌터가 어떤 결과를 찾았는지, 각 검증에 얼마나 걸렸는지, 프루버가 어떤 증거를 생성했는지, 파이프라인이 어디에 시간을 썼는지 확인할 수 있습니다. 새로운 취약점 클래스를 추가하는 것은 파일 하나, 즉 새 헌터 하나를 추가하는 것입니다. 오케스트레이터가 이를 발견하고, 컨텍스트를 라우팅하고, 기존 dedup → prove → remediation 파이프라인에 결과를 통합합니다. DAG가 곧 아키텍처입니다.
</details>
<details>
<summary><strong>놓친 것(그리고 그 이유)</strong></summary>
놓친 9개 시나리오는 주로 **GraphQL 프로토콜 수준 공격**입니다. 배치 쿼리, 깊은 재귀, 별칭 남용, 필드 중복, 인트로스펙션 노출 등입니다. 이러한 공격은 런타임/DAST 분석이 필요합니다. SEC-AF는 현재 SAST에 중점을 두고 있습니다. 프로토콜 수준 탐지는 로드맵에 있습니다.
</details>
## 작동 방식
SEC-AF는 [Composite Intelligence](https://github.com/Agent-Field/agentfield) 철학을 기반으로 합니다. 단일 모놀리식 LLM 호출에 의존하는 대신, 많은 초점화되고 안내된 LLM 호출을 **reasoner DAG**로 구성하여 아키텍처 자체가 지능을 인코딩합니다(이 패턴에 대한 자세한 내용은 [The Atomic Unit of Intelligence](https://www.santoshkumarradha.com/writing/atomic-unit-of-intelligence) 참조). 각 LLM 호출은 평면 Pydantic 스키마(2-4개 속성)로 작고 명확하게 정의된 작업을 처리합니다. 오케스트레이터는 컨텍스트 흐름, 병렬 처리, 동적 라우팅을 관리합니다.
### 아키텍처: Reasoner 호출 그래프(DAG)
모든 단계는 `@reasoner`이며, AgentField 컨트롤 플레인을 통해 하위 reasoner를 호출하여 특정 쿼리에 대해 총 약 200~300개의 에이전트가 동기적으로 작업합니다:
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/7491/d3e99c5c9b7067b17005f71ecb0f7c7abeb9d7fc8843d33938de9f755f416b7b.png" alt="SEC-AF Signal Cascade Pipeline — RECON → HUNT → DEDUP → PROVE → OUTPUT" width="100%" />
</p>
### 신호 캐스케이드 파이프라인
각 단계는 신호를 좁힙니다. 원시 결과는 점점 더 엄격한 게이트를 통해 필터링됩니다:
| 단계 | 목적 | 병렬 처리 |
|---|---|---|
| **RECON** | 아키텍처, 의존성, 데이터 흐름, 보안 컨텍스트 매핑 | 3중 병렬(아키텍처 + 의존성 + 설정), 이후 2중(데이터 흐름 + 보안) |
| **HUNT** | 10개 이상의 전문 전략 헌터 실행 | 세마포어 기반 병렬(기본 4개 동시) + 점진적 중복 제거 |
| **PROVE** | 적대적 검증: 각 결과를 **반증**하려 시도 | 세마포어 기반 병렬(기본 3개 동시) |
| **REMEDIATION** | confirmed/likely 결과에 대한 수정 제안 생성 | 세마포어 기반 병렬(기본 3개 동시) |
### 왜 멀티-reasoner 아키텍처인가
대부분의 AI 보안 도구는 하나의 큰 프롬프트를 실행하고 LLM이 올바르게 처리하기를 기대합니다. SEC-AF는 문제를 약 258개의 초점화된 에이전트 호출로 분해하며, 각 호출은 평면 스키마(2-4개 필드)와 좁은 작업을 가집니다. 아키텍처는 프롬프트가 아니라 추론 전략을 인코딩합니다(이것이 왜 중요한지는 [The Atomic Unit of Intelligence](https://www.santoshkumarradha.com/writing/atomic-unit-of-intelligence) 참조).
- **많은 초점화된 에이전트 > 하나의 강력한 에이전트.** 단일 LLM 호출로 아키텍처 매핑, 데이터 흐름 추적, 인젝션 헌팅, 악용 가능성 검증, 수정 제안을 동시에 수행할 수 없습니다. SEC-AF는 각 작업을 한 가지 일을 잘 수행하는 별도의 reasoner에 할당합니다. 오케스트레이터는 구성, 병렬 처리, 컨텍스트 라우팅을 담당합니다.
- **확증 편향이 아닌 적대적 검증.** PROVE 단계는 각 결과에 대해 반대 목표를 가진 4개의 하위 에이전트를 실행합니다. 트레이서는 데이터 흐름을 재구성하고, 새니타이제이션 분석기는 차단 요소를 찾고, 익스플로잇 가설 설정자는 공격을 구성하며, 판정 에이전트는 모든 증거를 평가합니다. 에이전트 간의 이러한 긴장은 단일 모델에게 "이것이 악용 가능한가?"라고 묻는 것보다 더 높은 신뢰도를 제공합니다.
- **AI 게이트를 통한 동적 라우팅.** 시스템은 런타임에 적응합니다. AI 게이트가 recon 출력을 검사하고 어떤 헌트 전략을 활성화할지 선택합니다. 별도의 게이트는 감지된 스택에 따라 CWE 대상 목록을 확장합니다. JWT 인증을 사용하는 Flask 앱은 gRPC를 사용하는 Go 마이크로서비스와 다른 헌터를 받습니다.
- **점진적 신호 축소.** 원시 결과 106개는 중복 제거 후 61개, 적대적 검증 후 30개가 됩니다. 94% 노이즈 감소입니다. 각 단계는 필터입니다. 파이프라인은 취약점을 탐지해 그냥 던져두는 것이 아니라 노이즈를 압축합니다.
- **정보 경제.** 각 에이전트는 필요한 것만 봅니다. 헌터는 자신의 전략에 맞게 정리된 recon 컨텍스트를 받습니다. 검증자는 최소한의 필드만 포함된 투영된 결과 뷰를 받습니다. 이는 환각과 비용을 줄이고 각 LLM 호출을 집중된 상태로 유지합니다.
- **점진적 스트리밍.** 헌터가 계속 결과를 생산하는 동안 dedup이 소비자로 실행됩니다. 각 헌터가 완료되면 결과가 지문 기반으로 중복 제거되고, 마지막 의미론적 패스가 전략 간 중복을 잡아냅니다. 파이프라인은 배치가 아니라 스트리밍으로 동작합니다.
## 비교
> 주장은 공식 문서와 가격 페이지에서 가져왔습니다. 잘못된 부분이 있으면 [이슈를 열어주세요](https://github.com/Agent-Field/sec-af/issues).
| | SEC-AF | Nullify | Snyk Code | Semgrep | CodeQL |
|---|---|---|---|---|---|
| **접근 방식** | **AI 네이티브** | **AI 네이티브** | **AI 지원** | **규칙 기반** | **규칙 기반** |
| | 멀티-reasoner DAG · LLM이 코드에 대해 추론 | 자율 보안 워크포스 | DeepCode AI 엔진 | 패턴 + taint 매칭 | 시맨틱 분석 + 데이터플로우 |
| **오픈소스** | ✅ Apache 2.0 | ❌ 독점 | ❌ 독점 | 엔진: LGPL-2.1 · Pro 규칙: 독점 | 쿼리: MIT · 엔진: 독점 |
| **검증된 결과** | ✅ 적대적 PROVE 단계 · 결과별 verdict + 증명 | ✅ 익스플로잇 증명 생성 | ❌ 우선순위 점수(불투명) · 익스플로잇 증명 없음 | ❌ 패턴 매칭만 | ❌ 정적 분석 알림 |
| **결과별 증거** | taint 전파가 포함된 데이터 흐름 추적 | 익스플로잇 경로 + 재현 단계 | 소스-투-싱크 흐름 표시 | - | 경로 쿼리가 데이터 흐름 표시 |
| **아키텍처** | 완전한 관측 가능성을 갖춘 구성 가능한 reasoner DAG | 모놀리식 에이전트 | 단일 패스 엔진 | 규칙 엔진 | 쿼리 엔진 |
| **병렬 처리** | ✅ 병렬 헌터, 검증자, 리미디에이터 + 점진적 중복 제거 | 문서화되지 않음 | 문서화되지 않음 | ✅ 규칙 병렬 처리 | ✅ 쿼리 병렬 처리 |
| **점수 산정** | ✅ 공개된 복합 공식 | 내부 | 불투명한 우선순위 점수 | 내부 | - |
| **SARIF** | ✅ Native 2.1.0 | 문서화되지 않음 | ✅ | ✅ | ✅ 네이티브 |
| **규정 준수 매핑** | PCI-DSS, SOC2, OWASP, HIPAA, ISO27001 | 문서화되지 않음 | 플랫폼 규정 준수만 | OWASP 규칙 사용 가능 | - |
| **언어** | LLM이 지원하는 모든 언어 | 문서화되지 않음 | 14+ | 35+ (파서 기반) | 10 |
| **가격** | **무료 · 오픈소스** (LLM 비용으로 감사당 약 $0.18–$0.90) | **$6,000/mo** | $25-105/mo/developer | OSS 엔진: 무료 사용 · Pro: 기여자당 월 $30 | 공개 저장소 무료 · 커미터당 월 $49 (GHAS) |
**SEC-AF가 가장 강한 부분**: 증명 객체를 갖춘 검증된 결과, 투명한 점수 산정, 규정 준수 매핑, 완전한 DAG 관측 가능성을 갖춘 구성 가능한 멀티-에이전트 아키텍처, 그리고 완전한 오픈소스.
**다른 도구가 더 강한 부분**: Semgrep과 CodeQL은 35개 이상의 언어에 걸쳐 수년간 검증된 규칙 커버리지를 보유하고 있습니다. Snyk은 깊은 IDE/SCA 통합을 제공합니다. Nullify는 런타임 클라우드 컨텍스트와 자동 수정 캠페인을 추가합니다. SEC-AF는 더 새롭고 현재는 AI 기반 코드 수준 분석에서 가장 강합니다.
> **동일한 아키텍처, 다른 도메인:** [Contract-AF](https://github.com/Agent-Field/contract-af)는 법률 계약에 적대적 HUNT→PROVE를 적용합니다. 에이전트가 에이전트를 생성하여 단일 LLM이 놓치는 조항 간 상호작용을 찾아냅니다.
### 멀티-에이전트 아키텍처가 중요한 이유
전통적인 보안 스캐너는 모놀리식입니다. 하나의 엔진, 한 번의 패스, 하나의 규칙 집합. SEC-AF의 멀티-reasoner 아키텍처는 구조적 이점을 제공합니다:
- **전문화**: 각 헌터는 안내된 LLM 전문가입니다. 인젝션 헌터는 crypto hunter와 다르게 추론합니다. 아키텍처는 프롬프트뿐만 아니라 라우팅에 도메인 지식을 인코딩합니다.
- **구성 가능성**: 헌터 파일 하나를 추가하면 새 취약점 클래스를 추가할 수 있습니다. 오케스트레이터가 이를 자동으로 발견하고 실행합니다. 파이프라인 변경은 필요 없습니다.
- **적대적 검증**: PROVE 단계는 HUNT와 구조적으로 분리되어 있습니다. 헌터는 취약점을 찾으려 하고, 프루버는 이를 반증하려 합니다. 이러한 적대적 긴장이 오탐을 줄입니다.
- **관측 가능성**: 모든 reasoner 호출이 컨트롤 플레인을 통과하여 완전한 DAG를 생성합니다. 어떤 헌터가 어떤 결과를 찾았는지, 각 단계에 얼마나 걸렸는지, LLM이 각 단계에서 무엇을 추론했는지 정확히 볼 수 있습니다.
- **비용 효율성**: 컨텍스트 정리와 스키마 뷰 덕분에 각 LLM 호출은 필요한 컨텍스트만 받습니다. 30개의 검증된 결과가 포함된 전체 표준 깊이 감사는 LLM 호출에서 약 $0.18–$0.90의 비용이 추정됩니다(Kimi K2.5 via OpenRouter).
## 빠른 시작
### AgentField에 설치(`af install`)
이미 [AgentField](https://github.com/Agent-Field/agentfield) 컨트롤 플레인을 실행 중이신가요? GitHub에서 바로 SEC-AF를 설치하세요. 클론도, 로컬 설정도 필요 없습니다:```bash
af install https://github.com/Agent-Field/sec-af
af run sec-af
af install는 저장소를 클론하고 격리된 Python 환경을 프로비저닝하며 sec-af 노드를 제어 플레인에 등록합니다. 첫 af run 시 필수 OPENROUTER_API_KEY를 입력하라는 메시지가 표시됩니다 — 이 키는 암호화되어 저장되고 모든 노드에서 재사용되므로 한 번만 입력하면 됩니다. 그런 다음 감사를 실행하세요:```bash
af call sec-af.audit --in '{"repo_url": "https://github.com/dolevf/Damn-Vulnerable-GraphQL-Application"}'
AgentField가 처음이신가요? 먼저 `curl -fsSL https://agentfield.ai/install.sh | bash`로 컨트롤 플레인을 설치하거나 아래의 Docker / Railway 옵션을 사용하세요.
### 원클릭 배포 (Railway)
[](https://railway.com/deploy/sec-af)
AgentField 컨트롤 플레인 + SEC-AF 에이전트를 배포합니다. `OPENROUTER_API_KEY`가 필요합니다.
### 로컬 (Docker Compose)```bash
git clone https://github.com/Agent-Field/sec-af.git && cd sec-af
cp .env.example .env # Add OPENROUTER_API_KEY
docker compose up --build
AgentField 컨트롤 플레인(http://localhost:8080) + SEC-AF 에이전트를 시작합니다.
감사 트리거:```bash
curl -X POST http://localhost:8080/api/v1/execute/async/sec-af.audit
-H "Content-Type: application/json"
-d '{"input": {"repo_url": "https://github.com/dolevf/Damn-Vulnerable-GraphQL-Application"}}'
결과 폴링:```bash
curl http://localhost:8080/api/v1/executions/<execution_id>
전제 조건: Python 3.11+, Git, OpenRouter API 키
1단계 — 저장소 복제```bash git clone https://github.com/Agent-Field/sec-af.git cd sec-af
**2단계 — 가상 환경 생성 및 활성화**```bash
python3 -m venv .venv
source .venv/bin/activate
3단계 — 패키지 설치```bash pip install -e .
**4단계 — 환경 변수 구성**```bash
cp .env.example .env
.env 파일을 열고 키를 입력하세요:```
OPENROUTER_API_KEY=sk-or-...
선택 사항 — 권한 문제를 피하기 위해 사용자 지정 작업 디렉터리를 설정하세요:```
SEC_AF_WORKSPACES_DIR=~/.sec-af/workspaces
5단계 — AgentField 컨트롤 플레인 시작 (별도의 터미널에서)```bash af server
이것은 기본적으로 `http://localhost:8080`에서 실행됩니다.
**6단계 — SEC-AF 에이전트 시작** (다른 터미널에서, venv가 활성화된 상태로)```bash
python3 main.py
에이전트는 컨트롤 플레인에 자체 등록하고 요청을 수락할 준비가 됩니다.
7단계 — 감사 실행```bash
curl -X POST http://localhost:8080/api/v1/execute/async/sec-af.audit
-H "Content-Type: application/json"
-d '{"input": {"repo_url": "https://github.com/dolevf/Damn-Vulnerable-GraphQL-Application"}}'
## API
<details>
<summary><strong>전체 요청 옵션</strong></summary>```bash
curl -X POST http://localhost:8080/api/v1/execute/async/sec-af.audit \
-H "Content-Type: application/json" \
-d '{
"input": {
"repo_url": "https://github.com/org/repo",
"branch": "main",
"depth": "thorough",
"severity_threshold": "high",
"scan_types": ["sast", "sca", "secrets", "config"],
"output_formats": ["sarif", "json", "markdown"],
"compliance_frameworks": ["pci-dss", "soc2", "owasp", "hipaa"],
"max_cost_usd": 15.0,
"max_provers": 30,
"max_duration_seconds": 1800,
"include_paths": ["src/"],
"exclude_paths": ["tests/", "vendor/"]
}
}'
| 판정 | 의미 |
|---|---|
confirmed | 구체적인 증거로 악용 가능성이 입증됨 |
likely | 강력한 지표, 부분 검증 |
| 형식 | 소비자 | 설명 |
|---|---|---|
sarif |
jobs: security-audit: runs-on: ubuntu-latest permissions: contents: read security-events: write steps: - uses: actions/checkout@v4
- name: Trigger SEC-AF
run: |
RESPONSE=$(curl -sS -X POST "$AGENTFIELD_SERVER/api/v1/execute/async/sec-af.audit" \
-H "Content-Type: application/json" \
-d '{
"input": {
"repo_url": "${{ github.event.repository.clone_url }}",
"branch": "${{ github.head_ref }}",
"commit_sha": "${{ github.event.pull_request.head.sha }}",
"base_commit_sha": "${{ github.event.pull_request.base.sha }}",
"depth": "standard",
"output_formats": ["sarif"]
}
}')
echo "execution_id=$(echo "$RESPONSE" | jq -r '.execution_id')" >> "$GITHUB_ENV"
env:
AGENTFIELD_SERVER: ${{ secrets.AGENTFIELD_SERVER }}
- name: Wait for results
run: |
for i in {1..60}; do
RESULT=$(curl -sS "$AGENTFIELD_SERVER/api/v1/executions/$execution_id")
STATUS=$(echo "$RESULT" | jq -r '.status')
[ "$STATUS" = "succeeded" ] && { echo "$RESULT" | jq -r '.result.sarif' > results.sarif; exit 0; }
[ "$STATUS" = "failed" ] && { echo "Audit failed"; exit 1; }
sleep 10
done
echo "Timed out"; exit 1
env:
AGENTFIELD_SERVER: ${{ secrets.AGENTFIELD_SERVER }}
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
</details>
## 구성
<details>
<summary><strong>환경 변수</strong></summary>
| 변수 | 필수 | 기본값 | 설명 |
|---|---|---|---|
| `AGENTFIELD_SERVER` | 예 | `http://localhost:8080` | 컨트롤 플레인 URL |
| `OPENROUTER_API_KEY` | 예 | - | LLM 공급자 자격 증명 |
| `HARNESS_MODEL` | 아니요 | `moonshotai/kimi-k2.5` | 심층 `.harness()` 분석을 위한 모델 |
| `AI_MODEL` | 아니요 | `moonshotai/kimi-k2.5` | 빠른 `.ai()` 게이트 및 판정을 위한 모델 |
| `SEC_AF_MAX_TURNS` | 아니요 | `50` | 호출당 최대 하네스 턴 수 |
| `AGENTFIELD_API_KEY` | 아니요 | unset | 보안 환경용 API 키 |
| `SEC_AF_WORKSPACES_DIR` | 아니요 | `/workspaces` | 복제된 저장소 디렉터리(쓰기 불가능하면 `~/.sec-af/workspaces`로 대체) |
| `HARNESS_PROVIDER` | 아니요 | `opencode` | 하네스 백엔드 공급자 |
| `SEC_AF_AI_MAX_RETRIES` | 아니요 | `3` | 모델 호출 재시도 횟수 |
</details>
## 개발 설정```bash
python -m venv .venv && source .venv/bin/activate
pip install -e .[dev]
pytest
ruff check src tests
| 프로필 | 전략 | 검증 | 일반적인 시간 | 일반적인 비용 |
|---|
quick | 5가지 핵심 전략 | 주요 결과만 | 2-5분 | ~$0.10-0.40 |
standard | 11가지 전략 (핵심 + 확장) | 상위 30개 결과 | 15-80분 | ~$0.18-0.90 |
thorough | 전체 전략 세트 | 모든 결과 | 30-120분 | ~$2-8 |
비용은 OpenRouter를 통한 Kimi K2.5 기준입니다($0.22/M 입력, $0.88/M 출력). DVGA 벤치마크(표준 깊이, 검증된 결과 30개, 약 166255회의 추정 LLM 호출, 82개의 DAG 엣지)는 약 **$0.18$0.90**의 비용이 들었습니다. 전체 분석: exampl/benchmark-analysis.json. OpenRouter 호환 모델이라면 무엇이든 사용할 수 있습니다 — 전환하려면 HARNESS_MODEL과 AI_MODEL을 설정하세요.
inconclusive | 증거 부족, 수동 검토 필요 |
not_exploitable | 실질적인 악용 경로가 없음을 시사하는 증거 |
| GitHub Code Scanning, 보안 도구 |
| 심각도와 위치를 포함한 SARIF 2.1.0 |
json | 파이프라인, API | 판정, 증명, 비용을 포함한 전체 구조화된 결과 |
markdown | 보안 팀 | 결과 및 수정 방안을 포함한 서술형 보고서 |
SWE-AF — 자율 엔지니어링 팀. API 호출 한 번으로 계획·코딩·테스트·검토된 코드를 배포합니다. 95/100점을 기록했습니다.
Contract-AF — 법률 계약 위험 분석기. 런타임에서 에이전트가 에이전트를 생성합니다. 적대적 검토는 단일 LLM이 놓치는 부분을 포착합니다.
SEC-AF는 프로덕션급 자율 에이전트를 위한 오픈 인프라인 AgentField 기반으로 구축되었습니다. 그 외 구축 중인 것들 보기 →