Noir란?
OWASP Noir는 소스 코드에서 엔드포인트를 추출해, 사람 리뷰어, AI 감사자, DAST 스캐너에 공급하는 SAST 도구입니다.
안녕! 나는 Noir의 마스코트 학이야. Noir가 어떤 도구인지 소개할게.
Noir는 오픈 소스 SAST 도구입니다. 소스 코드를 읽어 애플리케이션이 노출하는 엔드포인트(경로, 메서드, 파라미터, 헤더, 쿠키, 그리고 그 뒤의 소스 파일)를 추출합니다. 섀도우 API와 문서화되지 않은 경로도 같은 인벤토리에 함께 나옵니다. 따로 켜는 모드가 아닙니다.
이 인벤토리는 세 부류의 사용자가 씁니다:
- 사람 리뷰어. 보안 엔지니어와 코드 감사자는 저장소 전체를 훑는 대신, 공격자가 도달할 수 있는 진입점만 추린 목록과 그 주변의 파일, 파라미터, 태그를 받습니다.
- AI 감사자. LLM 기반 SAST 에이전트는 같은 진입점 목록에 더해, 엔드포인트별 리뷰 컨텍스트(
--include callee로 plain 출력의 1-hop callee,--ai-context로 guards, callees, sources, sinks, validators, signals)까지 받습니다. - DAST 도구. ZAP, Burp Suite, Caido는 크롤링만으로는 절대 닿지 못했을 경로까지 포함된 실제 라우트 목록을 스캔 대상으로 받습니다.
Noir가 하는 일
엔드포인트 추출. 정적 분석으로 소스에서 엔드포인트, 파라미터, 헤더, 쿠키를 뽑아냅니다. 아무도 문서화하지 않은 것까지 포함합니다.
스택 전반. 단일 바이너리로 Crystal, Go, Java, JavaScript, Kotlin, PHP, Python, Ruby, Rust, Swift 등 32개 언어, 261개 프레임워크를 지원합니다. 플러그인이나 언어별 설정은 필요 없습니다.
LLM 폴백. 기본 지원하지 않는 프레임워크이거나 정적 규칙이 통하지 않는 커스텀 라우팅이라면, LLM(OpenAI, Ollama 등)을 연결해 빈자리를 채우세요.
DAST 스캐너에 공급. 엔드포인트를 ZAP, Burp Suite, Caido에 프록시로 바로 흘려보내거나, OpenAPI로 내보내 가져가게 하세요. 페이지에 링크되지 않아 스캐너가 놓치던 경로도 스캔 범위에 들어옵니다.
AI 리뷰어에게 컨텍스트 제공. LLM 기반 SAST 도구나 보안 에이전트는 저장소 전체 대신 이 인벤토리에서 시작할 수 있습니다. --include callee는 각 핸들러가 직접 호출하는 함수를 더하고, --ai-context는 엔드포인트마다 guards, callees, sources, sinks, validators, signals를 붙여 주므로 모델이 이를 다시 찾을 필요가 없습니다.
다음 도구가 읽을 형식으로 출력. JSON, YAML, OpenAPI, CI/CD용 SARIF, cURL, HTTPie, HTML 리포트, Postman 컬렉션 등으로 내보냅니다.
어떻게 작동하나요?
소스 코드를 Noir에 넘기면 자동으로:
- 프로젝트가 사용하는 언어와 프레임워크를 탐지
- 코드를 분석하여 엔드포인트, 파라미터, 헤더를 추출
- 원하는 형식으로 결과를 보고
flowchart LR
SourceCode:::highlight --> Detectors
subgraph Detectors
direction LR
Detector1 & Detector2 & Detector3 --> |Condition| PassiveScan
end
PassiveScan --> |Results| BaseOptimizer
Detectors --> |Techs| Analyzers
subgraph Analyzers
direction LR
CodeAnalyzers & FileAnalyzer & LLMAnalyzer
CodeAnalyzers --> |Condition| Minilexer
CodeAnalyzers --> |Condition| Miniparser
end
subgraph Optimizer
direction LR
BaseOptimizer[Optimizer] --> LLMOptimizer[LLM Optimizer]
LLMOptimizer[LLM Optimizer] --> OptimizedResult
OptimizedResult[Result]
end
Analyzers --> |Condition| Deliver
Analyzers --> |Condition| Tagger
Deliver --> 3rdParty
BaseOptimizer --> OptimizedResult
OptimizedResult --> OutputBuilder
Tagger --> |Tags| BaseOptimizer
Analyzers --> |Endpoints| BaseOptimizer
OutputBuilder --> Report:::highlight
classDef highlight fill:#ee2a22,stroke:#ee2a22,stroke-width:2px,color:#0b0b0c;
%% The entry and exit nodes carry the site accent. fill:#000 was safe
%% while the docs were dark-only; under light mode the node label is
%% near-black and vanished into the fill. Near-black on this red is
%% 4.67:1, the same pairing the primary CTA uses.
기여하기
Noir는 오픈 소스이며 기여를 받습니다. 기여 가이드를 참고하세요.
코어 팀
기여자
다음: Noir 설치