
프레임워크 인식 정적 코드 분석 도구로, 플랫폼별 규칙, 오염 분석, 노력 추정 및 억제 기준선을 통해 자동화된 소스 코드 리뷰를 수행합니다.
Author:
## Daksh SCRA 소개
Daksh SCRA(Source Code Review Assist)는 소스 코드 리뷰 프로세스의 효율성을 높이기 위해 설계되었으며, 코드 리뷰어에게 체계적이고 조직적인 접근 방식을 제공합니다.
잠재적 문제로 모든 것을 무분별하게 표시하는 대신, Daksh SCRA는 신중한 분석을 장려하여 잠재적 문제의 조사와 확인을 촉구합니다. 이러한 접근 방식은 모든 잠재적 우려 사항을 버그로 분류하려는 혼란을 줄여, 오탐(false positive)으로 인한 혼선과 낭비되는 시간을 줄여줍니다.
### 데뷔
Daksh SCRA는 처음에 Black Hat USA 2022(8월 6~9일)의 소스 코드 리뷰 교육 세션에서 소개되었으며, 특정 청중에게 조용히 공개되었습니다. 공식적인 공개 데뷔는 라스베이거스에서 열린 Black Hat USA 2023에서 이루어졌습니다.
## 기능 및 특징
- **소스 코드 내 관심 영역 식별:** 모든 것을 무분별하게 버그로 분류하는 대신 집중적인 조사와 확인을 장려합니다.
- **파일 경로 내 관심 영역 식별(세계 최초):** 파일 경로의 패턴을 인식하여 리뷰에 필요한 관련 섹션을 정확히 찾아냅니다.
- **사용 기술 식별을 위한 소프트웨어 수준 정찰:** 프로젝트 기술을 식별하여 코드 리뷰어가 적절한 규칙으로 정밀한 스캔을 수행할 수 있게 합니다.
- **코드 리뷰를 위한 자동화된 과학적 노력 추정(세계 최초):** 코드 리뷰에 필요한 노력을 추정하기 위한 측정 가능한 접근 방식을 제공합니다.
- **프레임워크 인식 스캔:** 프로젝트의 프레임워크가 감지되면 프레임워크별 규칙을 자동으로 적용합니다.
- **오염 분석 보고서:** 해커 모드와 전문가 모드 테마를 갖춘 플랫폼별 HTML 오염 흐름 보고서.
- **RDL(Rule Description Language):** `rdl_ref`로 참조되고 `core/rdl_engine.py` 파이프라인에 의해 실행되는 외부 규칙 로직 - 파일 인식 게이트, 부울 표현식, 프로젝트 관찰, 보고서의 내보낸 로직 메타데이터를 지원합니다.
- **스캔 상태 / 재개:** 긴 스캔을 체크포인트로 저장하고 중단 후 재개합니다.
- **억제 기준선:** 알려진 오탐(false positive)의 기준선을 생성하고 적용하여 향후 보고서에서 이를 억제합니다.
- **웹 UI:** 실시간 콘솔 피드와 작업 아티팩트 브라우저를 갖춘 브라우저 기반 스캔 실행기.
> 활발한 개선이 진행 중입니다. 향후 릴리스에는 여러 새로운 기능과 개선 사항이 계획되어 있습니다.
새로운 규칙 업데이트 또는 추가와 향후 개발에 자유롭게 기여해 주세요.
버그를 발견하면 [[email protected]](mailto:[email protected])으로 신고해 주세요.
상세 문서: [https://dakshlabs.com/#docs](https://dakshlabs.com/#docs)
---
## 시작하기
Daksh SCRA를 실행하는 방법은 두 가지가 있습니다. 워크플로에 맞는 방법을 선택하세요:
| | 가장 적합한 대상 | 바로가기 |
|---|---|---|
| 🌐 **웹 UI(Docker)** | 시작하기 가장 쉬운 방법 - 명령 하나, 브라우저 대시보드, 실시간 스캔 진행 상황, 보고서/아티팩트 브라우저를 제공합니다. 대부분의 사용자에게 권장됩니다. | [웹 UI(Docker)](#web-ui-docker) |
| 💻 **CLI(Python)** | 스크립팅, CI 파이프라인 또는 Docker 없이 스캔을 실행하는 경우. | [CLI 설정](#cli-setup) |
두 경로 모두 동일한 스캔 엔진을 실행합니다. 웹 UI는 동일한 CLI 위의 브라우저 프런트 엔드이므로 결과는 어느 쪽이든 동일합니다.
---
## 웹 UI(Docker)
Daksh SCRA를 실행하는 가장 빠른 방법은 단일 Docker Compose 명령으로 실행되는 브라우저 기반 웹 UI를 통하는 것입니다. 로컬 Python 환경 없이도 스캔 실행기, 실시간 콘솔 피드, 과거 보고서의 탐색 가능한 기록을 제공합니다.
Docker 설정은 웹 UI와 CLI를 동일한 이미지에서 빌드된 독립 서비스로 실행하므로 동일한 컨테이너에서 둘 중 하나(또는 둘 다)를 사용할 수 있습니다.
### 웹 UI 실행
포그라운드 모드(로그가 터미널로 스트리밍됨):```bash
docker compose up --build
분리 / 백그라운드 모드:```bash docker compose up --build -d
그런 다음 [http://localhost:8080](http://localhost:8080)을(를) 엽니다.
다른 포트를 사용하려면:```bash
DAKSH_PORT=9090 docker compose up
스택을 중지하려면:```bash docker compose down
### 로그인
Web UI는 계정이 필요합니다. 최초 시작 시 `DAKSH_ADMIN_USERNAME` / `DAKSH_ADMIN_PASSWORD`(`.env`에서 설정)로 초기 관리자 계정이 생성됩니다. `DAKSH_ADMIN_PASSWORD`를 설정하지 않으면 임의의 비밀번호가 생성되어 API 시작 로그에 한 번 출력됩니다. 이후에는 복구할 수 없으므로 반드시 저장하세요.
첫 로그인 시 자신만의 비밀번호(선택적으로 사용자 이름도)를 설정해야 합니다. 관리자 계정은 `POST /api/v1/auth/users` API 엔드포인트를 통해 추가 계정을 생성할 수 있습니다(전용 UI는 아직 없음). 인증 관련 설정(세션 수명, 쿠키 보안, CORS)의 전체 목록은 `.env.example`을 참조하세요.
### 제공되는 기능
- 스캔, 리콘, 추정, 리콘+추정, 목록, PDF-from-JSON 모드를 위한 반응형 명령 빌더
- 실행 중 실시간 콘솔 피드 및 단계별 진행 상황 라이브 표시
- HTML / PDF / JSON 출력에 대한 작업별 아티팩트 스냅샷
- 실행 폼, 실시간 피드, 아티팩트, 최근 작업 간 빠른 브라우저 내 탐색
- 대상 경로 선택을 위한 내장 디렉터리 브라우저(OS 인식: Windows, macOS, Linux / Docker)
내부적으로 CLI가 진실의 원천(source of truth)으로 남아 있습니다. 모든 스캔을 수행하고 모든 HTML / PDF / JSON 출력을 생성합니다. Web UI는 한 번에 하나의 활성 작업을 실행하며, 완료된 각 작업의 출력을 `runtime/webui/jobs/<job-id>/artifacts/`에 스냅샷으로 저장하여 과거 보고서에 계속 접근할 수 있게 합니다.
### Docker에서 CLI 실행
CLI를 사용하기 위해 로컬 Python 환경이 필요하지 않습니다. 동일한 이미지로 빌드된 자체 Compose 서비스로 제공됩니다.```bash
docker compose run --rm cli -h
docker compose run --rm cli -r auto -t /scan-targets/path/to/source
reports/ 및 runtime/ 볼륨주요 마운트 지점:
| 마운트 | 컨테이너 내부 경로 |
|---|---|
| 프로젝트 소스 | /app |
| 기본 스캔 루트 | /scan-targets |
| 호스트 드라이브 별칭 | /host, /host/c, /host/d |
| WSL 마운트 | /mnt, /run/desktop/mnt/host |
환경 변수 (.env에서 설정):
| 변수 | 설명 |
|---|---|
DAKSH_PORT | Web UI 포트 (기본값: 8080) |
DAKSH_SCAN_ROOT | 컨테이너 내부의 기본 대상 디렉터리 |
DAKSH_HOST_SOURCE | /scan-targets로 마운트할 호스트 경로 (기본값: /tmp) |
DAKSH_HOST_MOUNT | 추가 호스트 마운트 루트 |
DAKSH_HOST_C | Windows C: 드라이브 경로 (WSL) |
DAKSH_HOST_D | Windows D: 드라이브 경로 (WSL) |
DAKSH_DESKTOP_MOUNT | WSL 데스크톱 마운트 경로 |
DAKSH_BROWSE_ROOTS | 디렉터리 브라우저 루트 재정의 (쉼표로 구분) |
DAKSH_ADMIN_USERNAME | 초기 관리자 사용자 이름 (기본값: admin) |
DAKSH_ADMIN_PASSWORD | 초기 관리자 비밀번호 - 명시적으로 설정하는 것을 강력히 권장 |
Docker를 실행하기 전에 .env.example을 .env로 복사하고 머신에 맞는 경로와 자격 증명을 설정하세요.
Daksh SCRA를 Python으로 직접 실행하는 것을 선호하시나요? 로컬에서 설정하는 방법은 다음과 같습니다.
requirements.txt에 나열된 모든 라이브러리또는 최신 zip 파일을 [https://github.com/coffeeandsecurity/DakshSCRA](https://github.com/coffeeandsecurity/DakshSCRA)에서 다운로드하여 압축을 해제합니다.
### 2. 가상 환경 설정
> 💡 가상 환경은 어떤 디렉토리에서든 생성할 수 있습니다. DakshSCRA 폴더 안에 있을 필요는 없습니다.
**옵션 A: 원스텝 설정 (권장)**```bash
python setup_env.py
이 스크립트는 가상 환경을 생성하고, 모든 종속성을 설치하며, PDF 내보내기에 필요한 Playwright의 Chromium 브라우저를 설치합니다.
옵션 B: 수동 설정
Windows:```bash python -m venv daksh-env .\daksh-env\Scripts\activate
macOS / Linux:```bash
python3 -m venv daksh-env
source daksh-env/bin/activate
그런 다음 의존성을 설치합니다:```bash cd path/to/DakshSCRA pip install -r requirements.txt playwright install chromium
---
## CLI 사용법
가상 환경 내에서는 `python`을 사용하고, 가상 환경 밖에서는 `python3`을 사용하세요.
### 명령줄 옵션```
usage: dakshscra.py [-h] [-r RULES] [-f FILE_TYPES] [-v] [-t TARGET_DIR]
[-l {R,RF}] [--recon] [--rs] [--estimate]
[-rpt FORMATS] [--pdf-from-json]
[--json-input-dir PATH] [--pdf-output PATH]
[--pdf-multi-dir PATH] [--pdf-single-only]
[--skip-analysis] [--loc]
[--baseline-file PATH] [--baseline-generate] [--no-baseline]
[--review-config PATH]
[--resume-scan] [--state-file PATH] [--no-state] [--state]
| 옵션 | 설명 |
|---|---|
-r RULES | 플랫폼 규칙 (예: php, java, php,java) 또는 자동 감지 시 auto |
-f FILE_TYPES | 스캔에 사용할 기본 파일 유형 재정의 |
-v | 상세 수준 (-v, -vv, -vvv) |
-t TARGET_DIR | 대상 소스 코드 디렉터리 |
-l {R,RF} | 플랫폼 규칙 + 프레임워크 목록 [R] 또는 파일 유형 포함 [RF] |
--recon | 정찰 실행 (플랫폼 / 프레임워크 / 언어 감지) |
--rs, --recon-strict | 엄격한 정찰: 높은 신뢰도의 감지만 사용 (--recon과 함께 사용) |
--estimate | 코드베이스 규모 기반 코드 검토 작업량 추정 |
-rpt, --report FORMATS | 보고서 형식: html, pdf 또는 html,pdf (기본값: html) |
--pdf-from-json | 재스캔 없이 기존 JSON 출력에서 PDF 보고서 생성 |
--json-input-dir PATH | JSON 보고서 디렉터리 (기본값: ./reports/data) |
--pdf-output PATH | 단일 PDF 출력 경로 (기본값: ./reports/scan/pdf/report.pdf) |
--pdf-multi-dir PATH | 다중 파일 PDF 출력 디렉터리 (기본값: ./reports/scan/pdf/multi-file) |
--pdf-single-only | 결합된 단일 파일 PDF만 생성하고 플랫폼별 다중 파일 세트는 건너뜀 |
--skip-analysis | 이 실행에서 분석 단계 비활성화 |
--loc | 유효 코드 줄 수 계산 |
--baseline-file PATH | 억제 기준 파일 (JSON) |
--baseline-generate | 현재 발견 사항에서 억제 기준 생성 |
-f(파일 유형)는 선택 사항입니다. 지정하지 않으면 DakshSCRA는 선택한 플랫폼의 기본 파일 유형을 사용합니다.```bash
python dakshscra.py -r php -t /path/to/source
python dakshscra.py -r php,java,cpp -t /path/to/source
python dakshscra.py -r auto -t /path/to/source
python dakshscra.py -r php -f dotnet -t /path/to/source
python dakshscra.py --recon -t /path/to/source
python dakshscra.py --recon -r php -t /path/to/source
python dakshscra.py --recon --rs -t /path/to/source
python dakshscra.py --estimate -t /path/to/source
python dakshscra.py -r auto -t /path/to/source -rpt html,pdf
python dakshscra.py -r php -v -t /path/to/source # default python dakshscra.py -r php -vvv -t /path/to/source # show all pattern checks
python dakshscra.py -r auto -t /path/to/source --baseline-generate
python dakshscra.py -r auto -t /path/to/source --baseline-file config/suppressions.json
python dakshscra.py -r auto -t /path/to/source --no-baseline
python dakshscra.py -r auto -t /path/to/source --review-config config/review.json
python dakshscra.py -r auto -t /path/to/source --state
python dakshscra.py -r auto -t /path/to/source --resume-scan
python dakshscra.py -r auto -t /path/to/source --resume-scan --state-file runtime/scan_state.json
python dakshscra.py --pdf-from-json
python dakshscra.py --pdf-from-json --json-input-dir ./custom/reports/data
python dakshscra.py --pdf-from-json --pdf-output ./reports/scan/pdf/custom.pdf --pdf-multi-dir ./reports/scan/pdf/multi-file
python dakshscra.py --pdf-from-json --pdf-single-only
### 지원 플랫폼 규칙 및 프레임워크```bash
python dakshscra.py -l R # List platform rules and framework mappings
python dakshscra.py -l RF # List platform rules, framework mappings, and filetypes
현재 지원되는 플랫폼 및 프레임워크 매핑:
| 플랫폼 | 프레임워크 |
|---|---|
| dotnet | aspnetcore, entityframework |
| php | codeigniter, drupal, laravel, symfony, wordpress |
| java | hibernate, spring, springboot |
| javascript | angular, express, nestjs, nextjs, react, vue |
| kotlin | ktor, springkotlin |
| python | django, fastapi, flask |
| go | echo, fiber, gin |
| c | freertos |
| cpp | boost, qt |
| android | cordova-android, flutter-android, ionic-android, jetpack, nativescript-android, reactnative-android, xamarin-android |
| ios | cordova-ios, flutter-ios, ionic-ios, nativescript-ios, reactnative-ios, swiftui, uikit, xamarin-ios |
| reactnative | reactnative |
| flutter | flutter |
| xamarin | xamarin |
| ionic | ionic |
| nativescript | nativescript |
| cordova | cordova |
| ruby | rails, sinatra |
| rust | actix, axum, rocket |
| common | - |
최신 지원 플랫폼 및 프레임워크를 확인하려면 항상 다음을 실행하세요:```bash python dakshscra.py -l R
---
## 구성 참조
### `config/tool.yaml`
Daksh SCRA 런타임 기본값은 `config/tool.yaml`을 통해 제어됩니다.```yaml
state_management:
enabled: false
resume_mode: manual
persist_after_seconds: 300
persist_interval_seconds: 30
default_state_file: runtime/scan_state.json
cleanup_on_success: false
analysis:
run_by_default: true
include_frameworks: true
report_theme: hacker_mode
Analyzer 구성 옵션:
analysis.run_by_default
true: 스캔 중 분석기가 자동으로 실행됨false: 구성 또는 CLI에서 다시 활성화하지 않는 한 분석기가 비활성화됨analysis.include_frameworks
true: 프레임워크 감지가 존재하는 곳에 프레임워크 수준 분석기 항목 포함false: 플랫폼 수준 분석기 출력만 포함analysis.report_theme
hacker_mode: 어두운 고대비 모던 분석기 테마 (기본값)professional_mode: 밝은 모던 분석기 테마both: 두 테마 변형을 나란히 생성RDL(Rule Description Language)은 DakshSCRA의 외부화된 규칙 로직 계층입니다. 현재 아키텍처에서:
name, regex, 설명, 선택적 scan_config와 같은 메타데이터를 전달합니다.core/rdl_engine.py에 의해 실행됩니다.rules/scanning/logic/... 아래에 있으며 XML에서 <rdl_ref>를 사용하여 참조됩니다.rdl_ref 값은 rules/scanning/을 기준으로 해석됩니다. 예:
logic/php/core/some_rule.rdl -> rules/scanning/logic/php/core/some_rule.rdllogic_engine, logic_source,
logic_reason, logic_trace, logic_consulted_files, logic_outcome과 같은 메타데이터로 보고서 JSON에 내보내집니다.이전의 인라인 <rdl> 형식은 더 이상 활성 아키텍처가 아니며 새 규칙에 사용해서는 안 됩니다.
XML rule -> regex / exclude / scan_config / descriptions -> rdl_ref -> rules/scanning/logic///.rdl -> core/rdl_engine.py -> pass / fail -> reason / fail_reason -> trace / consulted_files / outcome
#### 스캔 순서
소스 규칙의 경우 DakshSCRA는 다음 순서로 로직을 평가합니다:
1. Recon이 일치하는 플랫폼과 프레임워크를 선택합니다.
2. XML 규칙이 `rules/scanning/platform/...`에서 로드됩니다.
3. `regex`는 후보 라인 또는 존재 시 전체 파일 일치 항목을 찾습니다.
4. `exclude`는 해당 규칙에 대해 존재할 경우 명백한 노이즈를 제거합니다.
5. `rdl_ref`의 외부 `.rdl` 파일이 현재 파일 텍스트, 현재 파일 경로 및 프로젝트 루트에 대해 평가됩니다.
6. RDL 스크립트가 통과하면 DakshSCRA는 발견 항목을 유지하고 내보낸 로직 메타데이터를 보고서 출력에 병합합니다.
7. RDL 스크립트가 실패하면 일치 항목은 RDL 실패 이유 및 결정 추적 메타데이터와 함께 억제됩니다.
`filepaths.xml`의 파일 경로 규칙의 경우 동일한 `rdl_ref` 모델이 적용되지만 일치 대상은
소스 코드 텍스트 대신 정규화된 상대 경로입니다. 해당 모드에서 RDL은 상대 경로
문자열을 현재 파일 텍스트 및 경로 컨텍스트로 받습니다.
#### 현재 규칙 구조```xml
<rule>
<name>Rule Name</name>
<regex><![CDATA[regex_to_match]]></regex>
<rdl_ref>logic/common/core/insecure_sql_query_unsafe_string_concatenation.rdl</rdl_ref>
<exclude><![CDATA[pattern_to_exclude_lines]]></exclude> <!-- optional -->
<scan_config>...</scan_config> <!-- optional -->
<rule_desc>Short description of what the rule detects.</rule_desc>
<vuln_desc>Why the pattern matters.</vuln_desc>
<developer>Fix guidance for developers.</developer>
<reviewer>Manual confirmation guidance for reviewers.</reviewer>
</rule>
.rdl 구조```textVERSION 1 WHEN PRESENT /\b(?:mysql_query|mysqli_query|->query)\s*\(/i WHEN EXPR PRESENT:\$_(GET|POST|REQUEST|COOKIE) && MISSING:\b(?:prepare|bindParam|bindValue|PDO::prepare)\b REPORT AS area_of_interest REASON SQL query execution appears reachable without parameterisation in this file. FAIL_REASON Matching query API was found, but the file also contains prepared-statement indicators. TRACE SQLi gate: input source present and mitigation missing.
#### 현재 레이아웃```text
rules/
└── scanning/
├── platform/
│ ├── php/php.xml
│ ├── java/java.xml
│ └── ...
└── logic/
├── common/core/
├── php/core/
├── php/framework/laravel/
├── mobile/android/core/
├── filepaths/core/
└── ...
WHEN PRESENT, WHEN MISSING, WHEN CURRENT_FILE_MATCHES는 현재 파일 텍스트를 기준으로 평가합니다.WHEN FILE_NAME_IS와 WHEN FILE_PATH_MATCHES는 현재 파일 경로 컨텍스트를 기준으로 평가합니다.WHEN EXPR는 PRESENT:, MISSING:, EXISTS: 조건자에 대한 부울 논리를 지원합니다.OBSERVE PROJECT_HAS_GLOB ... AS ...는 발견 항목을 게이트하지 않으며, 관련 프로젝트 파일을 추적 메타데이터에 기록합니다.REPORT AS, REASON, FAIL_REASON, TRACE는 내보내는 보고 메타데이터를 제어합니다./pattern/flags로 작성할 수 있으며, i, m, s 플래그가 지원됩니다.| 명령 | 동작 | 일반적인 용도 |
|---|---|---|
WHEN PRESENT <regex> | 현재 파일 텍스트에 패턴이 존재해야 함 | 동시에 발생하는 위험한 API 또는 민감한 필드 요구 |
WHEN MISSING <regex> | 현재 파일 텍스트에 패턴이 없어야 함 | 완화 조치가 이미 존재할 때 억제 |
WHEN EXPR <expr> | PRESENT: / MISSING: / EXISTS:를 &&, ` | |
WHEN CURRENT_FILE_MATCHES <regex> | 전체 현재 파일 텍스트와 일치 | 복잡한 전체 파일 조건 재확인 |
WHEN FILE_NAME_IS <name> | 현재 파일 이름이 정확히 일치해야 함 | plist / manifest / config 규칙 제한 |
WHEN FILE_PATH_MATCHES <glob> | 현재 상대 경로가 glob과 일치해야 함 | 프레임워크/설정 경로 규칙 좁히기 |
UNLESS CURRENT_FILE_MATCHES <regex> | 전체 파일이 제외 패턴과 일치하면 실패 | 알려진 안전한 구조적 사례 차단 |
OBSERVE PROJECT_HAS_GLOB <glob> AS <label> | 관련 프로젝트 파일을 추적 메타데이터에 기록 | 지원 설정 또는 동반 파일 표면화 |
REPORT AS <outcome> | 규칙 결과 설정, 일반적으로 area_of_interest | 명시적 결과의 미래 대비 |
REASON <text> | 규칙이 통과할 때 표시되는 이유 | 발견 항목이 유지된 이유 설명 |
FAIL_REASON <text> | 규칙이 일치 항목을 억제할 때 표시되는 이유 | 적중이 필터링된 이유 설명 |
TRACE <text> | 디버그/결정 추적 줄 추가 | 마이그레이션/디버깅 지원 |
WHEN EXPR의 부울 표현식은 다음을 지원합니다:
PRESENT:<regex>MISSING:<regex>EXISTS:<regex>&&, ||, !, 및 괄호XML 규칙:```xml Possible SQL Injection in Query Execution query)\s*\(]]> <rdl_ref>logic/common/core/insecure_sql_query_unsafe_string_concatenation.rdl</rdl_ref> <rule_desc>...</rule_desc>
외부 RDL:```text
VERSION 1
WHEN PRESENT /\b(?:mysql_query|mysqli_query|->query)\s*\(/i
WHEN EXPR PRESENT:\$_(GET|POST|REQUEST|COOKIE) && MISSING:\b(?:prepare|bindParam|bindValue|PDO::prepare)\b
REPORT AS area_of_interest
REASON Query execution appears to rely on direct input without parameterisation.
FAIL_REASON Query API matched, but parameterised query indicators were also found in the file.
XML 규칙:```xml Exported Components Without Permission activity|service|receiver|provider)\s[^>]*android:name="(?P[^"]+)"[^>]*android:exported="true"[^>]*(?:/>|>)]]> <rdl_ref>logic/mobile/android/core/exported_components.rdl</rdl_ref> <scan_config>...</scan_config>
외부 RDL:```text
VERSION 1
WHEN FILE_NAME_IS AndroidManifest.xml
WHEN CURRENT_FILE_MATCHES /android:exported\s*=\s*"true"/i
WHEN MISSING /android:permission\s*=\s*"/i
REPORT AS area_of_interest
REASON Exported component appears reachable without a permission guard.
XML 규칙:```xml Admin Section File Path <rdl_ref>logic/filepaths/core/admin_section.rdl</rdl_ref>
외부 RDL:```text
VERSION 1
WHEN CURRENT_FILE_MATCHES /(^|\/)(admin|administrator|root)(\/|$)/i
UNLESS CURRENT_FILE_MATCHES /(^|\/)(tests?|docs?|samples?|examples?)(\/|$)/i
REPORT AS area_of_interest
REASON File path suggests privileged application functionality.
FAIL_REASON Path matched an excluded documentation or sample location.
regex는 후보를 포착할 수 있을 만큼 충분히 넓게 유지한 다음, RDL을 사용해 컨텍스트를 필터링하세요.rdl_ref를 우선 사용하고, .rdl 파일을 해당 플랫폼/프레임워크 로직 트리 옆에 두세요.<rdl> 블록을 추가하지 마세요.WHEN PRESENT / WHEN MISSING을 사용하고, 로직이 진정한 부울일 때만 WHEN EXPR을 사용하세요.REASON에, 억제 설명은 FAIL_REASON에 넣으세요.PRESENT와 MISSING은 파일 전체 검사로 취급하세요. 파일 어디에든 완화 조치가 있으면 해당 파일의 모든 매치를 억제할 수 있습니다.OBSERVE PROJECT_HAS_GLOB를 사용해 프로젝트 컨텍스트로 결과를 보강하되, 통과/실패 게이트로는 사용하지 마세요.logic/... 경로는 안정적이고 플랫폼 범위로 유지하여 XML 규칙이 얇게 유지되고 로직 계층이 재사용 가능하도록 하세요.모든 출력은 reports/ 디렉터리 아래에 작성됩니다:```
reports/
├── scan/
│ ├── html/
│ │ ├── report.html # Single-file HTML scan report
│ │ └── multi-file/ # Per-platform HTML report set
│ ├── pdf/
│ │ ├── report.pdf # Single-file PDF scan report
│ │ └── multi-file/ # Per-platform PDF report set
│ ├── recon/
│ │ └── reconnaissance.html # Reconnaissance HTML report
│ └── estimate/
│ └── estimation.html # Effort estimation HTML report
├── analysis/
│ └── /
│ ├── analysis.html # Taint analysis report (default theme)
│ ├── analysis_professional.html # Professional theme (if theme=both)
│ ├── analysis_xref.html # Cross-reference report
│ └── analysis.json # Structured analysis data
└── data/
├── areas_of_interest.json # AoI findings
├── filepaths_aoi.json # File path AoI findings
├── summary.json # Scan summary
├── recon.json # Recon summary
└── analysis.json # Analyzer output
런타임 파일(스캔 상태, 로그, 인벤토리)은 `runtime/` 아래에 기록됩니다.
Web UI를 통해 실행할 때 각 작업의 출력은 추가로 `runtime/webui/jobs/<job-id>/artifacts/` 아래에 스냅샷으로 저장됩니다([Web UI (Docker)](#web-ui-docker) 참조).
---
## 작성자
| | |
|---|---|
| 웹사이트 | [coffeeandsecurity.com](https://www.coffeeandsecurity.com) |
| 이메일 | [email protected] |
| Twitter / X | [@coffeensecurity](https://x.com/coffeensecurity) |
| 소스 | [github.com/coffeeandsecurity/DakshSCRA](https://github.com/coffeeandsecurity/DakshSCRA) |
| 라이선스 | GNU General Public License v3.0 (GPL-3.0) |
DakshSCRA가 팀의 상당한 시간, 노력, 비용을 절약하고, 고가의 상용 도구에 대한 의존도를 줄이며, 리뷰 범위를 개선하거나 코드 리뷰를 더 체계적이고 효과적으로 만드는 데 도움이 되었다면, 주저하지 말고 연락하여 경험을 공유해 주세요. 저는 항상 사려 깊은 피드백과 흥미로운 대화에 열려 있습니다.
버그를 발견했거나 기여하고 싶으신가요? GitHub에서 이슈를 열거나 풀 리퀘스트를 제출해 주세요.
--no-baseline | 이 실행에서 기준 억제 비활성화 |
--review-config PATH | 발견 사항 분류 파일 (JSON); 이전에 검토된 오탐을 보고서에서 제외 |
--resume-scan | 상태 파일에서 이전에 중단된 스캔 재개 |
--state-file PATH | 사용자 지정 스캔 상태 / 체크포인트 파일 경로 |
--no-state | 이 실행에서 스캔 상태 체크포인트 비활성화 |
--state | 이 실행에서 스캔 상태 체크포인트 강제 활성화 |