
프레임워크 인식 정적 코드 분석 도구로, 플랫폼별 규칙, 오염 분석, 노력 추정 및 억제 기준선을 통해 자동화된 소스 코드 리뷰를 수행합니다.
Author:
## Daksh SCRA 소개
Daksh SCRA(Source Code Review Assist)는 소스 코드 리뷰 프로세스의 효율성을 높이기 위해 만들어졌으며, 코드 리뷰어에게 잘 구조화되고 체계적인 접근 방식을 제공합니다.
모든 것을 잠재적 이슈로 무분별하게 표시하는 대신, Daksh SCRA는 신중한 분석을 장려하며 잠재적 문제에 대한 조사와 확인을 촉구합니다. 이러한 접근 방식은 모든 잠재적 우려를 버그로 태그하려는 혼란을 완화하고, 오탐에 소비되는 혼란과 시간 낭비를 줄여줍니다.
### 데뷔
Daksh SCRA는 Black Hat USA 2022(8월 6-9일)의 소스 코드 리뷰 교육 세션에서 처음 소개되었으며, 특정 청중에게 조용히 발표되었습니다. 공식적인 대중 데뷔는 라스베이거스에서 열린 Black Hat USA 2023에서 이루어졌습니다.
## 기능 및 특징
- **소스 코드에서 관심 영역 식별:** 모든 것을 무분별하게 버그로 라벨링하는 대신 집중적인 조사와 확인을 장려합니다.
- **파일 경로에서 관심 영역 식별 (세계 최초):** 파일 경로의 패턴을 인식하여 리뷰에 관련된 섹션을 정확히 찾아냅니다.
- **사용된 기술을 식별하기 위한 소프트웨어 수준 정찰:** 프로젝트 기술을 식별하여 코드 리뷰어가 적절한 규칙으로 정밀한 스캔을 수행할 수 있게 합니다.
- **코드 리뷰를 위한 자동화된 과학적 노력 추정 (세계 최초):** 코드 리뷰에 필요한 노력을 추정하기 위한 측정 가능한 접근 방식을 제공합니다.
- **프레임워크 인식 스캐닝:** 프로젝트의 프레임워크가 감지되면 프레임워크별 규칙을 자동으로 적용합니다.
- **테인트 분석 보고서:** 해커 모드 및 프로페셔널 모드 테마를 갖춘 플랫폼별 HTML 테인트 흐름 보고서.
- **RDL (Rule Description Language):** `rdl_ref`로 참조되고 `core/rdl_engine.py` 파이프라인에 의해 실행되는 외부 규칙 로직 - 파일 인식 게이트, 불리언 표현식, 프로젝트 관찰, 보고서의 내보낸 로직 메타데이터를 지원합니다.
- **스캔 상태 / 재개:** 장시간 스캔을 체크포인트하고 중단 후 재개합니다.
- **억제 베이스라인:** 알려진 오탐의 베이스라인을 생성하고 적용하여 향후 보고서에서 억제합니다.
- **웹 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 시작 헬퍼로 실행되는 브라우저 기반 웹 UI를 통하는 것입니다. 스캔 런처, 실시간 콘솔 피드, 과거 보고서의 탐색 가능한 기록을 제공합니다. 시작 헬퍼는 Python 3(표준 라이브러리만)가 필요하며, 애플리케이션과 그 의존성은 Docker에서 실행됩니다.
Docker 설정은 웹 UI와 CLI를 동일한 이미지로 빌드된 독립적인 서비스로 실행하므로, 동일한 컨테이너에서 둘 중 하나(또는 둘 다)를 사용할 수 있습니다.
### 웹 UI 실행
GitHub에서 Daksh SCRA를 다운로드한 후, **먼저 ZIP 아카이브를 추출하세요**.
`docker-compose.yml`과 `dakshscra.py`가 포함된 추출된 프로젝트 폴더 안에서 터미널(Windows에서는 PowerShell 또는 명령 프롬프트)을 엽니다.
**아래의 모든 시작 및 Docker Compose 명령어를 해당 폴더에서 실행하세요.**
터미널이 다른 위치에서 열리는 경우, 먼저 추출된 폴더로 이동하세요:```text
cd "path/to/extracted/DakshSCRA-folder"
예제 경로를 실제 다운로드 위치와 폴더 이름으로 바꾸세요.
저장소를 복제한 경우, 상위 폴더에서 cd DakshSCRA를 실행하세요.
시작 도우미는 Windows, WSL, Linux 및 macOS를 인식한 다음, 컨테이너를 시작하기 전에 호스트 루트, 사용 가능한 Windows 드라이브 및 일반 폴더를 읽기 전용으로 마운트합니다. Docker를 실행 중인 컴퓨터에서 실행하세요.
Linux, macOS 또는 WSL (포그라운드):```bash python3 tools/start_webui.py
Windows PowerShell 또는 명령 프롬프트(포그라운드):```powershell
py tools/start_webui.py
백그라운드 모드에는 --detach를, 감지된 경로를 확인하려면 --dry-run을 추가하세요.
기존 .env 경로 재정의는 존중됩니다. 컨테이너가 다시 생성될 때 계정, 스캔 및 런타임
볼륨은 보존됩니다.
Docker Desktop은 선택한 호스트 경로를 공유하기 위한 권한을 요구할 수 있습니다. 마운트를 거부하면 Docker Desktop에서 해당 위치를 허용하고 헬퍼를 다시 실행하세요. 원격 브라우저는 Docker 호스트의 폴더를 보며, 자신의 컴퓨터 드라이브를 보지 않습니다. 자동 감지에는 로컬 Docker 엔진이 필요합니다. 원격 Docker 컨텍스트를 사용할 때는 엔진 호스트에서 헬퍼를 실행하세요.
수동으로 구성된 마운트의 경우 docker compose up --build -d api web을 계속 사용할 수 있습니다. 기본 마운트는 저장소를 /scan-targets에, ${DAKSH_HOST_MOUNT:-/}를 /host/root에 마운트합니다. Windows 드라이브 검색
및 공통 폴더 바로 가기에는 헬퍼를 사용하세요. 일반 Compose는 클라이언트 OS를 감지할 수 없습니다.
그런 다음 http://localhost:8080을 여세요.
다른 포트를 사용하려면:```bash DAKSH_PORT=9090 python3 tools/start_webui.py
스택을 다음으로 중지합니다:```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을 참조하세요.
내부적으로 CLI가 핵심이며, 모든 스캔을 수행하고 모든 HTML / PDF / JSON 출력물을 생성합니다. Web UI는 한 번에 하나의 활성 작업을 실행하고, 완료된 각 작업의 출력물을 runtime/webui/jobs/<job-id>/artifacts/에 스냅샷으로 저장하여 과거 보고서에 계속 접근할 수 있도록 합니다.
CLI를 사용하기 위해 로컬 Python 환경이 필요하지 않습니다. CLI는 동일한 이미지로 빌드된 자체 Compose 서비스로 제공됩니다:```bash docker compose run --rm cli -h docker compose run --rm cli -r auto -t /scan-targets/path/to/source
### 이미지에 포함된 내용
- FastAPI 백엔드 + 웹 UI 프런트엔드
- 전체 Daksh SCRA CLI, 별도 서비스로 제공
- PDF 생성을 위한 Playwright Chromium
- 영구 `reports/` 및 `runtime/` 볼륨
- 컨테이너 내부에서 스캔이 소스 트리에 접근할 수 있도록 하는 호스트 경로 마운트
**주요 마운트 지점:**
| 마운트 | 컨테이너 내부 경로 |
|---|---|
| 프로젝트 소스 | `/app` |
| 기본 스캔 루트 (저장소 또는 `DAKSH_SCAN_ROOT`) | `/scan-targets` |
| 호스트 파일 시스템 (Windows의 시스템 드라이브) | `/host/root` |
| 추가 Windows/WSL 드라이브 | `/host/drives/<letter>` |
| 현재 사용자의 홈 | `/host/user` |
| 일반 호스트 폴더 | `/host/locations/<name>` |
| 선택적 `DAKSH_HOST_SOURCE` | `/host/source` |
선택적 경로 및 인증 재정의를 위해 `.env.example`을 `.env`로 복사하세요.
`DAKSH_BROWSE_ROOTS`는 **컨테이너** 경로의 쉼표로 구분된 허용 목록입니다.
마운트된 위치를 자동 검색하려면 설정하지 않은 채로 두세요. 헬퍼로 전환할 때
구식 `/host/c`, `/host/d` 또는 `/mnt` 허용 목록은 제거하거나 업데이트해야 합니다.
호스트 폴더는 읽기 전용이며, 보고서와 런타임 데이터는 기존 애플리케이션
위치에서 쓰기 가능한 상태로 유지됩니다. 다른 드라이브를 연결한 후에는 헬퍼를
사용하여 재시작하세요. Docker 소켓이나 권한 있는 컨테이너는 필요하지 않습니다.
---
## CLI 설정
Python으로 Daksh SCRA를 직접 실행하는 것을 선호하시나요? 로컬에서 설정하는 방법은 다음과 같습니다.
### 사전 요구 사항
- Python 3.8+
- `requirements.txt`에 나열된 모든 라이브러리
### 1. Daksh SCRA 다운로드```bash
git clone https://github.com/coffeeandsecurity/DakshSCRA.git
또는 https://github.com/coffeeandsecurity/DakshSCRA에서 최신 zip 파일을 다운로드한 후 압축을 해제합니다.
💡 가상 환경은 어느 디렉터리에든 생성할 수 있으며, DakshSCRA 폴더 안에 있을 필요는 없습니다.
옵션 A: 한 단계 설정 (권장)```bash python setup_env.py
이 스크립트는 가상 환경을 생성하고, 모든 종속성을 설치하며, Playwright의 Chromium 브라우저(PDF 내보내기에 필요)를 설치합니다.
**옵션 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
가상 환경 내에서는 python을 사용하고, 가상 환경 외부에서는 python3을 사용하세요.