
DakshSCRA v0.38-beta
フレームワーク対応の静的コード解析ツールで、自動ソースコードレビュー、プラットフォーム固有のルール、汚染解析、工数見積もり、抑制ベースラインを備えています。
Daksh SCRA(ソースコードレビュー支援)```
Author:
- Debasis Mohanty ([email protected])
- Twitter / X: @coffeensecurity
- www.coffeeandsecurity.com
## Daksh SCRAについて
Daksh SCRA(ソースコードレビュー支援)は、ソースコードレビュープロセスの効率を高めるために構築されており、コードレビュアーに構造化され整理されたアプローチを提供します。
潜在的な問題として無差別にすべてをフラグ付けするのではなく、Daksh SCRAは思慮深い分析を促進し、潜在的な問題の調査と確認を促します。このアプローチにより、潜在的な懸念事項をすべてバグとしてタグ付けしようとする混乱を軽減し、誤検知に費やされる混乱と無駄な時間を削減します。
### デビュー
Daksh SCRAは当初、Black Hat USA 2022(8月6日〜9日)のソースコードレビュー研修セッションで紹介され、特定の聴衆に控えめに提示されました。公式の一般公開は、ラスベガスで開催されたBlack Hat USA 2023で行われました。
## 機能と特徴
- **ソースコード内の注目領域を特定:** 無差別にすべてをバグとしてラベル付けするのではなく、焦点を絞った調査と確認を促進します。
- **ファイルパス内の注目領域を特定(世界初):** ファイルパスのパターンを認識して、レビュー対象の関連セクションを特定します。
- **使用技術を特定するソフトウェアレベルの偵察:** プロジェクトの技術を特定し、コードレビュアーが適切なルールで正確なスキャンを実行できるようにします。
- **コードレビューの自動化された科学的労力見積もり(世界初):** コードレビューに必要な労力を見積もるための測定可能なアプローチを提供します。
- **フレームワーク対応スキャン:** プロジェクトのフレームワークが検出された場合、フレームワーク固有のルールを自動的に適用します。
- **汚染分析レポート:** ハッカーモードとプロフェッショナルモードのテーマを備えた、プラットフォーム別のHTML汚染フローレポート。
- **RDL(ルール記述言語):** `rdl_ref`で参照され、`core/rdl_engine.py`パイプラインによって実行される外部ルールロジック - ファイル対応ゲート、ブール式、プロジェクト観察、レポート内のエクスポートされたロジックメタデータをサポートします。
- **スキャン状態/再開:** 長時間のスキャンをチェックポイントし、中断後に再開します。
- **抑制ベースライン:** 既知の誤検知のベースラインを生成して適用し、将来のレポートから抑制します。
- **Web UI:** リアルタイムコンソールフィードとジョブ成果物ブラウザを備えたブラウザベースのスキャンランチャー。
> 現在も積極的な拡張が進行中です。今後のリリースでは、複数の新機能と改善が計画されています。
既存のルールの更新や新規追加、今後の開発への貢献は自由に行ってください。
バグを見つけた場合は、[[email protected]](mailto:[email protected]) まで報告してください。
詳細なドキュメント: [https://dakshlabs.com/#docs](https://dakshlabs.com/#docs)
---
## はじめに
Daksh SCRAを実行する方法は2つあります。ワークフローに合った方を選択してください:
| | 最適な用途 | ジャンプ先 |
|---|---|---|
| 🌐 **Web UI(Docker)** | 最も簡単な開始方法 - 1つのコマンド、ブラウザダッシュボード、ライブスキャン進行状況、レポート/成果物ブラウザ。ほとんどのユーザーに推奨。 | [Web UI(Docker)](#web-ui-docker) |
| 💻 **CLI(Python)** | スクリプト、CIパイプライン、またはDockerなしでのスキャン実行。 | [CLIセットアップ](#cli-setup) |
どちらのパスもまったく同じスキャンエンジンを実行します - Web UIは同じCLIのブラウザフロントエンドであるため、結果はどちらの方法でも同一です。
---
## Web UI(Docker)
Daksh SCRAを実行する最速の方法は、単一のDocker Composeコマンドで起動するブラウザベースのWeb UIです。ローカルのPython環境を必要とせずに、スキャンランチャー、ライブコンソールフィード、過去のレポートの閲覧可能な履歴を提供します。
Dockerセットアップでは、Web UIとCLIが同じイメージから構築された独立したサービスとして実行されるため、同じコンテナからどちらか(または両方)を使用できます。
### Web 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 はまだありません)。認証関連の設定(セッション有効期間、Cookie セキュリティ、CORS)の完全な一覧は `.env.example` を参照してください。
### 提供される機能
- scan、recon、estimate、recon+estimate、list、PDF-from-JSON モードに対応したレスポンシブなコマンドビルダー
- 実行中のリアルタイムコンソールフィードと、ステージごとのライブ進捗表示
- HTML / PDF / JSON 出力のジョブごとのアーティファクトスナップショット
- 実行フォーム、ライブフィード、アーティファクト、最近のジョブ間を高速に移動できるブラウザ内ナビゲーション
- ターゲットパス選択用の組み込みディレクトリブラウザ(OS 対応: Windows、macOS、Linux / Docker)
内部では、CLI が引き続き信頼できる情報源です。CLI がすべてのスキャンを実行し、すべての HTML / PDF / JSON 出力を生成します。Web UI は一度に 1 つのアクティブなジョブを実行し、完了した各ジョブの出力を `runtime/webui/jobs/<job-id>/artifacts/` にスナップショットとして保存するため、過去のレポートにもアクセスできます。
### Docker での CLI の実行
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バックエンド + Web UIフロントエンド
- 完全なDaksh SCRA CLI(独立したサービスとして)
- PDF生成用のPlaywright Chromium
- 永続的な
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 にコピーし、お使いのマシンに合わせてパスと認証情報を設定してください。
CLIセットアップ
Daksh SCRAをPythonで直接実行したいですか? ローカルでのセットアップ方法は次のとおりです。
前提条件
- Python 3.8以上
requirements.txtに記載されているすべてのライブラリ
1. Daksh SCRAをダウンロードする```bash
git clone https://github.com/coffeeandsecurity/DakshSCRA.git
Or download the latest zip from [https://github.com/coffeeandsecurity/DakshSCRA](https://github.com/coffeeandsecurity/DakshSCRA) and unzip it.
### 2. Set Up a Virtual Environment
> 💡 The virtual environment can be created in any directory - it does not need to be inside the DakshSCRA folder.
**Option A: One-step setup (recommended)**```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
---
## 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 | 現在の検出結果から抑制ベースラインを生成 |
--no-baseline | この実行のベースライン抑制を無効化 |
--review-config PATH | 検出結果トリアージファイル(JSON); レビュー済みの誤検知をレポートから抑制 |
--resume-scan | 状態ファイルから以前に中断されたスキャンを再開 |
--state-file PATH | カスタムスキャン状態/チェックポイントファイルのパス |
--no-state | この実行のスキャン状態チェックポイントを無効化 |
--state | この実行のスキャン状態チェックポイントを強制有効化 |
使用例
-f(ファイルタイプ)はオプションです。指定しない場合、DakshSCRA は選択されたプラットフォームのデフォルトファイルタイプを使用します。```bash
Single platform scan
python dakshscra.py -r php -t /path/to/source
Multiple platforms
python dakshscra.py -r php,java,cpp -t /path/to/source
Auto-detect platform and apply matching rules
python dakshscra.py -r auto -t /path/to/source
Override filetypes
python dakshscra.py -r php -f dotnet -t /path/to/source
Reconnaissance only (no scanning)
python dakshscra.py --recon -t /path/to/source
Reconnaissance + scanning
python dakshscra.py --recon -r php -t /path/to/source
Strict recon (high-confidence detections only)
python dakshscra.py --recon --rs -t /path/to/source
Effort estimation
python dakshscra.py --estimate -t /path/to/source
Scan with HTML + PDF report output
python dakshscra.py -r auto -t /path/to/source -rpt html,pdf
Verbosity levels
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
Generate suppression baseline from current findings
python dakshscra.py -r auto -t /path/to/source --baseline-generate
Apply suppression baseline (suppress known FPs)
python dakshscra.py -r auto -t /path/to/source --baseline-file config/suppressions.json
Disable baseline for this run
python dakshscra.py -r auto -t /path/to/source --no-baseline
Apply findings triage / review config
python dakshscra.py -r auto -t /path/to/source --review-config config/review.json
Scan with checkpoint state enabled
python dakshscra.py -r auto -t /path/to/source --state
Resume an interrupted scan
python dakshscra.py -r auto -t /path/to/source --resume-scan
Resume with a custom state file
python dakshscra.py -r auto -t /path/to/source --resume-scan --state-file runtime/scan_state.json
Generate PDF from existing JSON outputs (no re-scan)
python dakshscra.py --pdf-from-json
Generate PDF from a custom JSON directory
python dakshscra.py --pdf-from-json --json-input-dir ./custom/reports/data
Custom output paths for PDF
python dakshscra.py --pdf-from-json --pdf-output ./reports/scan/pdf/custom.pdf --pdf-multi-dir ./reports/scan/pdf/multi-file
Single combined PDF only (skip per-platform set)
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_defaulttrue: スキャン中にアナライザーが自動的に実行されますfalse: 設定またはCLIで再度有効にしない限り、アナライザーは無効になります
analysis.include_frameworkstrue: フレームワーク検出が存在する場合、フレームワークレベルのアナライザーエントリを含めますfalse: プラットフォームレベルのアナライザー出力のみ
analysis.report_themehacker_mode: ダークで高コントラストなモダンアナライザーテーマ(デフォルト)professional_mode: ライトなモダンアナライザーテーマboth: 両方のテーマバリアントを並べて生成します
RDLルール作成
RDL(Rule Description Language)は、DakshSCRAの外部化されたルールロジック層です。現在のアーキテクチャでは:
- XMLルールはルールインベントリのままであり、
name、regex、説明、オプションのscan_configなどのメタデータを保持します。 - RDLロジックは
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.rdl- ロジックの結果は、
logic_engine、logic_source、logic_reason、logic_trace、logic_consulted_files、logic_outcomeなどのメタデータとしてレポートJSONにエクスポートされます。
古いインラインの<rdl>形式は、もはやアクティブなアーキテクチャではなく、新しいルールには使用しないでください。
RDLアーキテクチャの概要```text
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 構造```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 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がサポートされます。
サポートされている RDL コマンド
| コマンド | 動作 | 典型的な用途 |
|---|---|---|
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> | 現在の相対パスがグロブに一致することを要求 | フレームワーク / 設定パスのルールを絞り込む |
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>&&、||、!、および括弧
例 1 - PHP SQL インジェクションのゲーティング
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.
例2 - ファイル認識チェックを備えたAndroidマニフェストルール
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.
例3 - ファイルパス領域の関心ルール
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 で issue または pull request を開いてください。