
DakshSCRA v0.38-beta
Strumento di analisi statica del codice consapevole del framework per la revisione automatica del codice sorgente con regole specifiche per piattaforma, analisi del taint, stima dello sforzo e baseline di soppressione.
Daksh SCRA (Source Code Review Assist)```
Author:
- Debasis Mohanty ([email protected])
- Twitter / X: @coffeensecurity
- www.coffeeandsecurity.com
## Informazioni su Daksh SCRA
Daksh SCRA (Source Code Review Assist) è progettato per migliorare l'efficienza del processo di revisione del codice sorgente, offrendo un approccio ben strutturato e organizzato per i revisori del codice.
Piuttosto che segnalare indiscriminatamente tutto come un potenziale problema, Daksh SCRA promuove un'analisi ponderata, spingendo a indagare e confermare i potenziali problemi. Questo approccio riduce la corsa a etichettare ogni potenziale preoccupazione come un bug, tagliando la confusione e il tempo sprecato in falsi positivi.
### Debutto
Daksh SCRA è stato inizialmente presentato durante una sessione di formazione sulla revisione del codice sorgente al Black Hat USA 2022 (6-9 agosto), dove è stato mostrato in modo discreto a un pubblico specifico. Il suo debutto pubblico ufficiale è avvenuto al Black Hat USA 2023 a Las Vegas.
## Funzionalità e Caratteristiche
- **Identifica le Aree di Interesse nel Codice Sorgente:** Incoraggia un'indagine e una conferma mirate piuttosto che etichettare indiscriminatamente tutto come un bug.
- **Identifica le Aree di Interesse nei Percorsi dei File (Prima al Mondo):** Riconosce i pattern nei percorsi dei file per individuare le sezioni rilevanti da revisionare.
- **Ricognizione a Livello Software per Identificare le Tecnologie Utilizzate:** Identifica le tecnologie del progetto, consentendo ai revisori del codice di eseguire scansioni precise con regole appropriate.
- **Stima Automatica e Scientifica dello Sforzo per la Revisione del Codice (Prima al Mondo):** Fornisce un approccio misurabile per stimare lo sforzo richiesto per una revisione del codice.
- **Scansione Consapevole del Framework:** Applica automaticamente regole specifiche del framework quando viene rilevato il framework del progetto.
- **Report di Analisi del Taint:** Report HTML del flusso taint per piattaforma con temi modalità hacker e modalità professionale.
- **RDL (Rule Description Language):** Logica di regole esterna referenziata con `rdl_ref` ed eseguita dalla pipeline `core/rdl_engine.py` - supporta gate consapevoli dei file, espressioni booleane, osservazioni sul progetto e metadati di logica esportati nei report.
- **Stato di Scansione / Ripresa:** Crea checkpoint per scansioni lunghe e riprendi dopo un'interruzione.
- **Baseline di Soppressione:** Genera e applica una baseline di falsi positivi noti per sopprimerli dai report futuri.
- **Interfaccia Web:** Avvio di scansioni basato su browser con feed console in tempo reale e browser degli artefatti dei job.
> Sono in corso miglioramenti attivi. Molte nuove funzionalità e migliorie sono previste per le prossime release.
Sentiti libero di contribuire all'aggiornamento o all'aggiunta di nuove regole e allo sviluppo futuro.
Se trovi bug, segnalali a [[email protected]](mailto:[email protected]).
Documentazione dettagliata: [https://dakshlabs.com/#docs](https://dakshlabs.com/#docs)
---
## Per Iniziare
Ci sono due modi per eseguire Daksh SCRA - scegli quello che si adatta al tuo flusso di lavoro:
| | Ideale per | Vai a |
|---|---|---|
| 🌐 **Web UI (Docker)** | Il modo più semplice per iniziare - un solo comando, una dashboard nel browser, avanzamento della scansione in tempo reale e un browser per report/artefatti. Consigliato per la maggior parte degli utenti. | [Web UI (Docker)](#web-ui-docker) |
| 💻 **CLI (Python)** | Scripting, pipeline CI o esecuzione di scansioni senza Docker. | [Configurazione CLI](#cli-setup) |
Entrambi i percorsi eseguono esattamente lo stesso motore di scansione - la Web UI è un frontend nel browser sopra la stessa CLI, quindi i risultati sono identici in entrambi i casi.
---
## Web UI (Docker)
Il modo più veloce per eseguire Daksh SCRA è tramite la sua Web UI basata su browser, avviata con un singolo comando Docker Compose. Ti offre un avviatore di scansioni, un feed console in tempo reale e una cronologia navigabile dei report passati, senza bisogno di un ambiente Python locale.
La configurazione Docker esegue la Web UI e la CLI come servizi indipendenti costruiti dalla stessa immagine, così puoi usare entrambi (o uno solo) dallo stesso contenitore.
### Avvia la Web UI
Modalità in primo piano (i log vengono trasmessi al tuo terminale):```bash
docker compose up --build
Modalità distaccata / in background:```bash docker compose up --build -d
Poi apri [http://localhost:8080](http://localhost:8080).
Per usare una porta diversa:```bash
DAKSH_PORT=9090 docker compose up
Ferma lo stack con:```bash docker compose down
### Accesso
L'interfaccia Web richiede un account. Al primo avvio, viene creato un account amministratore iniziale da `DAKSH_ADMIN_USERNAME` / `DAKSH_ADMIN_PASSWORD` (impostali in `.env`); se `DAKSH_ADMIN_PASSWORD` viene lasciato vuoto, viene generata una password casuale e stampata una sola volta nel log di avvio dell'API - salvala, poiché non può essere recuperata in seguito.
Ti verrà richiesto di impostare la tua password (e, opzionalmente, il nome utente) la prima volta che accedi. Un account amministratore può creare ulteriori account tramite l'endpoint API `POST /api/v1/auth/users` (nessuna UI dedicata per questo al momento). Consulta `.env.example` per l'elenco completo delle impostazioni relative all'autenticazione (durata della sessione, sicurezza dei cookie, CORS).
### Cosa ottieni
- Builder di comandi reattivo per le modalità scan, recon, estimate, recon+estimate, list e PDF-da-JSON
- Feed della console in tempo reale e avanzamento live per fase durante l'esecuzione
- Snapshot degli artefatti per job per gli output HTML / PDF / JSON
- Navigazione rapida nel browser tra modulo di esecuzione, feed live, artefatti e job recenti
- Browser di directory integrato per selezionare i percorsi di destinazione (consapevole del sistema operativo: Windows, macOS, Linux / Docker)
Sotto il cofano, la CLI rimane la fonte di verità - esegue tutta la scansione e genera ogni output HTML / PDF / JSON. L'interfaccia Web esegue un job attivo alla volta e salva gli output di ogni job completato in `runtime/webui/jobs/<job-id>/artifacts/` così i report passati rimangono accessibili.
### Esecuzione della CLI in Docker
Non hai bisogno di un ambiente Python locale per usare la CLI - è disponibile come servizio Compose dedicato, costruito dalla stessa immagine:```bash
docker compose run --rm cli -h
docker compose run --rm cli -r auto -t /scan-targets/path/to/source
Cosa contiene l'immagine
- Backend FastAPI + frontend Web UI
- L'intera CLI Daksh SCRA, come servizio separato
- Playwright Chromium, per la generazione di PDF
- Volumi persistenti
reports/eruntime/ - Montaggi di percorsi host in modo che le scansioni possano raggiungere gli alberi sorgente dall'interno del container
Punti di montaggio principali:
| Mount | Percorso all'interno del container |
|---|---|
| Sorgente del progetto | /app |
| Root di scansione predefinita | /scan-targets |
| Alias delle unità host | /host, /host/c, /host/d |
| Montaggi WSL | /mnt, /run/desktop/mnt/host |
Variabili d'ambiente (configurare in .env):
| Variabile | Descrizione |
|---|---|
DAKSH_PORT | Porta della Web UI (predefinita: 8080) |
DAKSH_SCAN_ROOT | Directory di destinazione predefinita all'interno del container |
DAKSH_HOST_SOURCE | Percorso host da montare come /scan-targets (predefinito: /tmp) |
DAKSH_HOST_MOUNT | Root di montaggio host aggiuntivo |
DAKSH_HOST_C | Percorso dell'unità C: di Windows (WSL) |
DAKSH_HOST_D | Percorso dell'unità D: di Windows (WSL) |
DAKSH_DESKTOP_MOUNT | Percorso di montaggio desktop WSL |
DAKSH_BROWSE_ROOTS | Sostituisce le root del browser di directory (separate da virgole) |
DAKSH_ADMIN_USERNAME | Nome utente admin iniziale (predefinito: admin) |
DAKSH_ADMIN_PASSWORD | Password admin iniziale - fortemente consigliato impostarla esplicitamente |
Copiare .env.example in .env e impostare i percorsi e le credenziali per la propria macchina prima di eseguire Docker.
Configurazione CLI
Preferisci eseguire Daksh SCRA direttamente con Python? Ecco come configurarlo localmente.
Prerequisiti
- Python 3.8+
- Tutte le librerie elencate in
requirements.txt
1. Scaricare Daksh SCRA```bash
git clone https://github.com/coffeeandsecurity/DakshSCRA.git
Oppure scarica l'ultimo zip da [https://github.com/coffeeandsecurity/DakshSCRA](https://github.com/coffeeandsecurity/DakshSCRA) e decomprimilo.
### 2. Configura un Ambiente Virtuale
> 💡 L'ambiente virtuale può essere creato in qualsiasi directory - non deve necessariamente trovarsi all'interno della cartella DakshSCRA.
**Opzione A: Configurazione in un unico passaggio (consigliata)**```bash
python setup_env.py
Questo script crea l'ambiente virtuale, installa tutte le dipendenze e installa il browser Chromium di Playwright (richiesto per l'esportazione in PDF).
Opzione B: Configurazione manuale
Windows:```bash python -m venv daksh-env .\daksh-env\Scripts\activate
macOS / Linux:```bash
python3 -m venv daksh-env
source daksh-env/bin/activate
Allora installa le dipendenze:```bash cd path/to/DakshSCRA pip install -r requirements.txt playwright install chromium
---
## Utilizzo da CLI
Usa `python` all'interno di un ambiente virtuale, oppure `python3` al di fuori di esso.
### Opzioni della riga di comando```
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]
| Opzione | Descrizione |
|---|---|
-r RULES | Regole della piattaforma (es. php, java, php,java) oppure auto per il rilevamento automatico |
-f FILE_TYPES | Sostituisce i tipi di file predefiniti per la scansione |
-v | Livello di verbosità (-v, -vv, -vvv) |
-t TARGET_DIR | Directory del codice sorgente di destinazione |
-l {R,RF} | Elenca le regole della piattaforma + framework [R] oppure include i tipi di file [RF] |
--recon | Esegue la ricognizione (rilevamento piattaforma / framework / linguaggio) |
--rs, --recon-strict | Ricognizione rigorosa: solo rilevamenti ad alta affidabilità (da usare con --recon) |
--estimate | Stima lo sforzo di revisione del codice in base alla dimensione del codebase |
-rpt, --report FORMATS | Formati di report: html, pdf oppure html,pdf (predefinito: html) |
--pdf-from-json | Genera report PDF da output JSON esistenti senza eseguire una nuova scansione |
--json-input-dir PATH | Directory dei report JSON (predefinita: ./reports/data) |
--pdf-output PATH | Percorso di output PDF singolo (predefinito: ./reports/scan/pdf/report.pdf) |
--pdf-multi-dir PATH | Directory di output PDF multi-file (predefinita: ./reports/scan/pdf/multi-file) |
--pdf-single-only | Genera solo il PDF combinato a file singolo; salta il set multi-file per piattaforma |
--skip-analysis | Disabilita la fase di analisi per questa esecuzione |
--loc | Conta le righe di codice effettive |
--baseline-file PATH | File di baseline per la soppressione (JSON) |
--baseline-generate | Genera la baseline di soppressione dai risultati attuali |
--no-baseline | Disabilita la soppressione tramite baseline per questa esecuzione |
--review-config PATH | File di triage dei risultati (JSON); sopprime i falsi positivi già revisionati dai report |
--resume-scan | Riprende una scansione precedentemente interrotta dal file di stato |
--state-file PATH | Percorso personalizzato del file di stato / checkpoint della scansione |
--no-state | Disabilita il checkpointing dello stato della scansione per questa esecuzione |
--state | Forza l'abilitazione del checkpointing dello stato della scansione per questa esecuzione |
Esempio di utilizzo
-f(tipi di file) è opzionale. Se non specificato, DakshSCRA utilizza i tipi di file predefiniti per le piattaforme selezionate.```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
### Regole e Framework delle Piattaforme Supportate```bash
python dakshscra.py -l R # List platform rules and framework mappings
python dakshscra.py -l RF # List platform rules, framework mappings, and filetypes
Piattaforme e framework attualmente supportati:
| Piattaforma | Framework |
|---|---|
| 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 | - |
Per ottenere le ultime piattaforme e framework supportati, esegui sempre:```bash python dakshscra.py -l R
---
## Riferimento alla Configurazione
### `config/tool.yaml`
Le impostazioni predefinite del runtime di Daksh SCRA sono controllate tramite `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
Opzioni di configurazione dell'analizzatore:
analysis.run_by_defaulttrue: l'analizzatore viene eseguito automaticamente durante la scansionefalse: l'analizzatore è disabilitato a meno che non venga riabilitato nella configurazione o tramite CLI
analysis.include_frameworkstrue: include le voci dell'analizzatore a livello di framework dove esiste il rilevamento del frameworkfalse: solo output dell'analizzatore a livello di piattaforma
analysis.report_themehacker_mode: tema analizzatore moderno scuro ad alto contrasto (predefinito)professional_mode: tema analizzatore moderno chiaroboth: genera entrambe le varianti di tema affiancate
Creazione di regole RDL
RDL (Rule Description Language) è il livello di logica delle regole esternalizzato di DakshSCRA. Nell'architettura attuale:
- Le regole XML rimangono l'inventario delle regole e contengono metadati come
name,regex, descrizioni escan_configopzionale. - La logica RDL viene eseguita da
core/rdl_engine.py. - I file di logica delle regole si trovano in
rules/scanning/logic/...e vengono referenziati dall'XML tramite<rdl_ref>. - I valori
rdl_refvengono risolti relativamente arules/scanning/, ad esempio:logic/php/core/some_rule.rdl->rules/scanning/logic/php/core/some_rule.rdl - I risultati della logica vengono esportati nel JSON del report come metadati come
logic_engine,logic_source,logic_reason,logic_trace,logic_consulted_fileselogic_outcome.
La vecchia forma inline <rdl> non è più l'architettura attiva e non dovrebbe essere utilizzata per nuove regole.
Architettura RDL a colpo d'occhio```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
#### Sequenza di scansione
Per una regola sorgente, DakshSCRA valuta la logica in questo ordine:
1. Recon seleziona le piattaforme e i framework corrispondenti.
2. La regola XML viene caricata da `rules/scanning/platform/...`.
3. `regex` trova righe candidate o corrispondenze su interi file quando presente.
4. `exclude` rimuove il rumore ovvio per quella regola, se presente.
5. Il file `.rdl` esterno da `rdl_ref` viene valutato rispetto al testo del file corrente, al percorso del file corrente e alla radice del progetto.
6. Se lo script RDL passa, DakshSCRA mantiene il risultato e unisce i metadati della logica esportata nell'output del report.
7. Se lo script RDL fallisce, la corrispondenza viene soppressa con il motivo del fallimento RDL e i metadati della traccia di decisione.
Per le regole sui percorsi file in `filepaths.xml`, si applica lo stesso modello `rdl_ref`, ma il soggetto della corrispondenza è
il percorso relativo normalizzato invece del testo del codice sorgente. In quella modalità, RDL riceve la stringa del percorso relativo
come testo del file corrente e contesto del percorso.
#### Struttura attuale delle regole```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>
Struttura .rdl corrente```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.
#### Layout attuale```text
rules/
└── scanning/
├── platform/
│ ├── php/php.xml
│ ├── java/java.xml
│ └── ...
└── logic/
├── common/core/
├── php/core/
├── php/framework/laravel/
├── mobile/android/core/
├── filepaths/core/
└── ...
Semantica di esecuzione
WHEN PRESENT,WHEN MISSINGeWHEN CURRENT_FILE_MATCHESvengono valutati rispetto al testo del file corrente.WHEN FILE_NAME_ISeWHEN FILE_PATH_MATCHESvengono valutati rispetto al contesto del percorso del file corrente.WHEN EXPRsupporta la logica booleana sui predicatiPRESENT:,MISSING:edEXISTS:.OBSERVE PROJECT_HAS_GLOB ... AS ...non blocca il finding; registra i file di progetto correlati nei metadati di traccia.REPORT AS,REASON,FAIL_REASONeTRACEcontrollano i metadati di reporting esportati.- I token regex possono essere scritti sia come pattern grezzi sia come
/pattern/flags, con supporto peri,mes.
Comandi RDL supportati
| Comando | Comportamento | Uso tipico |
|---|---|---|
WHEN PRESENT <regex> | Richiede che un pattern esista nel testo del file corrente | Richiedere una API rischiosa o un campo sensibile co-occorrente |
WHEN MISSING <regex> | Richiede che un pattern sia assente dal testo del file corrente | Sopprimere quando esiste già una mitigazione |
WHEN EXPR <expr> | Valuta espressioni booleane usando PRESENT: / MISSING: / EXISTS: con &&, ` | |
WHEN CURRENT_FILE_MATCHES <regex> | Confronta con l'intero testo del file corrente | Ricontrollare condizioni complesse sull'intero file |
WHEN FILE_NAME_IS <name> | Richiede che il nome del file corrente corrisponda esattamente | Limitare regole per plist / manifest / config |
WHEN FILE_PATH_MATCHES <glob> | Richiede che il percorso relativo corrente corrisponda a un glob | Restringere regole su percorsi di framework/config |
UNLESS CURRENT_FILE_MATCHES <regex> | Fallisce quando l'intero file corrisponde a un pattern di esclusione | Bloccare casi strutturali noti come sicuri |
OBSERVE PROJECT_HAS_GLOB <glob> AS <label> | Registra i file di progetto correlati nei metadati di traccia | Evidenziare file di supporto o companion |
REPORT AS <outcome> | Imposta l'esito della regola, di solito area_of_interest | Esiti espliciti a prova di futuro |
REASON <text> | Motivazione mostrata quando la regola passa | Spiegare perché il finding è rimasto visibile |
FAIL_REASON <text> | Motivazione mostrata quando la regola sopprime una corrispondenza | Spiegare perché il hit è stato filtrato |
TRACE <text> | Aggiunge righe di traccia per debug/decisioni | Supporto a migrazione/debugging |
Le espressioni booleane in WHEN EXPR supportano:
PRESENT:<regex>MISSING:<regex>EXISTS:<regex>&&,||,!e parentesi
Esempio 1 - Gating per SQL injection in PHP
Regola 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>
External 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.
Esempio 2 - Regola manifest Android con controlli sensibili ai file
Regola 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>
External 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.
Esempio 3 - Regola area di interesse basata sul percorso file
Regola XML:```xml Admin Section File Path <rdl_ref>logic/filepaths/core/admin_section.rdl</rdl_ref>
External 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.
Linee guida per l'autore
- Mantieni
regexsufficientemente ampio da individuare i candidati, poi usa RDL per filtrare il contesto. - Preferisci
rdl_refper tutta la logica delle regole e tieni il file.rdlaccanto all'albero logico della piattaforma/framework appropriato. - Non aggiungere nuovi blocchi
<rdl>inline. - Usa
WHEN PRESENT/WHEN MISSINGper controlli semplici eWHEN EXPRsolo quando la logica è genuinamente booleana. - Metti le motivazioni rivolte ai revisori in
REASONe le spiegazioni di soppressione inFAIL_REASON. - Tratta
PRESENTeMISSINGcome controlli a livello di intero file. Una mitigazione in qualsiasi punto del file può sopprimere ogni corrispondenza proveniente da quel file. - Usa
OBSERVE PROJECT_HAS_GLOBper arricchire i risultati con il contesto del progetto, non come gate di superamento/fallimento. - Mantieni stabili e limitati alla piattaforma i percorsi
logic/...così che le regole XML restino sottili e il livello logico rimanga riutilizzabile.
Struttura dell'output dei report
Tutti gli output vengono scritti nella directory 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
I file di runtime (stato della scansione, log, inventario) vengono scritti sotto `runtime/`.
Quando si esegue tramite l'interfaccia Web, gli output di ciascun job vengono inoltre salvati come snapshot sotto `runtime/webui/jobs/<job-id>/artifacts/` (vedi [Web UI (Docker)](#web-ui-docker)).
---
## Autore
| | |
|---|---|
| Sito web | [coffeeandsecurity.com](https://www.coffeeandsecurity.com) |
| Email | [email protected] |
| Twitter / X | [@coffeensecurity](https://x.com/coffeensecurity) |
| Sorgente | [github.com/coffeeandsecurity/DakshSCRA](https://github.com/coffeeandsecurity/DakshSCRA) |
| Licenza | GNU General Public License v3.0 (GPL-3.0) |
Se DakshSCRA ha aiutato il tuo team a risparmiare tempo, sforzo o costi significativi, a ridurre la dipendenza da costosi strumenti commerciali, a migliorare la copertura delle revisioni o a rendere la revisione del codice più strutturata ed efficace, non esitare a contattarmi e condividere la tua esperienza. Sono sempre aperto a feedback ponderati e conversazioni interessanti.
Hai trovato un bug o vuoi contribuire? Apri un issue o una pull request su GitHub.