SARIF
SARIF(정적 분석 결과 교환 형식) v2.1.0로 스캔 결과를 생성하는 방법을 배워보세요. GitHub, GitLab, Azure DevOps와 같은 CI/CD 플랫폼과 원활하게 통합되는 보안 도구 출력용 업계 표준 형식입니다.
SARIF(정적 분석 결과 교환 형식)는 정적 분석 도구의 출력을 나타내기 위한 OASIS 표준입니다. Noir는 SARIF v2.1.0 호환 출력을 생성할 수 있어 스캔 결과를 최신 CI/CD 플랫폼 및 보안 대시보드와 쉽게 통합할 수 있습니다.
SARIF를 사용하는 이유는?
- 표준 준수: SARIF는 보안 도구 생태계 전반에서 널리 지원되는 OASIS 표준입니다.
- CI/CD 통합: GitHub Code Scanning, GitLab Security Dashboard, Azure DevOps 등에서 기본 지원합니다.
- 풍부한 메타데이터: 심각도 수준, 파일 위치, 규칙 설명 등 발견 사항에 대한 자세한 정보가 포함됩니다.
- 기계 판독 가능: 구조화된 형식으로 파이프라인에서 자동화된 보안 게이트 및 정책 적용이 가능합니다.
SARIF 출력 생성 방법
Noir를 실행할 때 -f sarif 또는 --format sarif 플래그를 사용하여 SARIF 형식으로 스캔 결과를 얻을 수 있습니다. 출력을 깔끔하게 유지하려면 --no-log 플래그를 사용하는 것이 좋습니다.
noir -b . -f sarif --no-log
보안 플랫폼에 업로드하기 위해 출력을 파일로 저장할 수도 있습니다:
noir -b . -f sarif -o results.sarif --no-log
SARIF 출력 예시
다음은 SARIF 출력의 샘플입니다:
{
"$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json",
"version": "2.1.0",
"runs": [
{
"tool": {
"driver": {
"name": "OWASP Noir",
"version": "0.24.0",
"informationUri": "https://github.com/owasp-noir/noir",
"rules": [
{
"id": "endpoint-discovery",
"name": "Endpoint Discovery",
"shortDescription": {
"text": "정적 분석을 통해 발견된 API 엔드포인트"
},
"fullDescription": {
"text": "이 규칙은 정적 코드 분석을 통해 발견된 API 엔드포인트, HTTP 메서드 및 매개변수를 식별합니다"
},
"defaultConfiguration": {
"level": "note"
},
"helpUri": "https://github.com/owasp-noir/noir"
}
]
}
},
"results": [
{
"ruleId": "endpoint-discovery",
"level": "note",
"message": {
"text": "GET /api/users/:id (매개변수: path: id)"
},
"locations": [
{
"physicalLocation": {
"artifactLocation": {
"uri": "src/routes.cr"
},
"region": {
"startLine": 42
}
}
}
]
},
{
"ruleId": "endpoint-discovery",
"level": "note",
"message": {
"text": "POST /api/users (매개변수: json: username, json: email)"
},
"locations": [
{
"physicalLocation": {
"artifactLocation": {
"uri": "src/routes.cr"
},
"region": {
"startLine": 56
}
}
}
]
}
]
}
]
}
Noir의 SARIF 기능
엔드포인트 발견
발견된 각 엔드포인트는 다음과 같은 SARIF 결과로 보고됩니다:
- 규칙 ID: API 엔드포인트 발견 사항에 대한
endpoint-discovery - 수준:
note(정보 제공 발견 사항) - 메시지: HTTP 메서드, URL 경로 및 발견된 매개변수
- 위치: 엔드포인트가 발견된 파일 경로 및 줄 번호
수동 스캔 통합
Noir의 수동 스캔 기능(-P 또는 --passive-scan)을 사용하면 보안 발견 사항이 적절한 심각도 매핑과 함께 SARIF 출력에 자동으로 포함됩니다:
- Critical/High 심각도 →
error수준 - Medium 심각도 →
warning수준 - Low 심각도 →
note수준
각 수동 스캔 규칙은 설명, 참조 및 작성자 정보를 포함한 완전한 메타데이터와 함께 rules 배열에 포함됩니다.
통합 예시
GitHub Code Scanning
SARIF 결과를 GitHub Code Scanning에 업로드:
# SARIF 출력 생성
noir -b . -f sarif -o noir-results.sarif --no-log
# GitHub에 업로드 (GitHub CLI 사용)
gh api /repos/:owner/:repo/code-scanning/sarifs \
-F sarif=@noir-results.sarif \
-F ref=refs/heads/main \
-F commit_sha=$(git rev-parse HEAD)
GitLab Security Dashboard
GitLab CI/CD 파이프라인에 Noir의 SARIF 출력 포함:
noir_scan:
script:
- noir -b . -f sarif -o gl-sast-report.json --no-log
artifacts:
reports:
sast: gl-sast-report.json
Azure DevOps
Azure Pipelines에서 SARIF 결과 게시:
- script: noir -b . -f sarif -o noir.sarif --no-log
displayName: 'Noir 스캔 실행'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: 'noir.sarif'
ArtifactName: 'CodeAnalysisLogs'
추가 리소스
SARIF 출력을 사용하면 기존 보안 워크플로에 Noir를 원활하게 통합하고 최신 DevSecOps 플랫폼이 제공하는 풍부한 시각화 및 추적 기능을 활용할 수 있습니다.