
Framework-bewusstes statisches Code-Analyse-Tool für automatisierte Quellcode-Reviews mit plattformspezifischen Regeln, Taint-Analyse, Aufwandsabschätzung und Unterdrückungsbaselines.
Author:
## Über Daksh SCRA
Daksh SCRA (Source Code Review Assist) wurde entwickelt, um die Effizienz des Quellcode-Review-Prozesses zu steigern und Code-Reviewern einen gut strukturierten und organisierten Ansatz zu bieten.
Anstatt wahllos alles als potenzielles Problem zu kennzeichnen, fördert Daksh SCRA eine durchdachte Analyse und drängt zur Untersuchung und Bestätigung potenzieller Probleme. Dieser Ansatz reduziert das hektische Markieren jedes potenziellen Bedenken als Fehler und verringert so die Verwirrung und verschwendete Zeit durch Fehlalarme.
### Debüt
Daksh SCRA wurde ursprünglich während einer Schulung zur Quellcode-Überprüfung auf der Black Hat USA 2022 (6.–9. August) vorgestellt, wo es einem bestimmten Publikum dezent präsentiert wurde. Sein offizielles öffentliches Debüt fand auf der Black Hat USA 2023 in Las Vegas statt.
## Funktionen und Merkmale
- **Identifiziert interessante Bereiche im Quellcode:** Fördert fokussierte Untersuchung und Bestätigung, anstatt wahllos alles als Fehler zu kennzeichnen.
- **Identifiziert interessante Bereiche in Dateipfaden (Weltpremiere):** Erkennt Muster in Dateipfaden, um relevante Abschnitte für die Überprüfung zu lokalisieren.
- **Reconnaissance auf Software-Ebene zur Identifizierung verwendeter Technologien:** Identifiziert Projekttechnologien und ermöglicht Code-Reviewern präzise Scans mit geeigneten Regeln.
- **Automatisierte wissenschaftliche Aufwandsschätzung für Code-Reviews (Weltpremiere):** Bietet einen messbaren Ansatz zur Schätzung des für ein Code-Review erforderlichen Aufwands.
- **Framework-bewusstes Scannen:** Wendet automatisch frameworkspezifische Regeln an, wenn das Framework des Projekts erkannt wird.
- **Taint-Analyse-Berichte:** Plattformbezogene HTML-Taint-Flow-Berichte mit Hacker-Modus- und Profi-Modus-Designs.
- **RDL (Rule Description Language):** Externe Regellogik, die mit `rdl_ref` referenziert und von der `core/rdl_engine.py`-Pipeline ausgeführt wird – unterstützt dateibewusste Gates, boolesche Ausdrücke, Projektbeobachtungen und exportierte Logikmetadaten in Berichten.
- **Scan-Status / Fortsetzen:** Lange Scans als Checkpoints speichern und nach Unterbrechung fortsetzen.
- **Unterdrückungs-Baseline:** Eine Baseline bekannter Fehlalarme erstellen und anwenden, um diese aus zukünftigen Berichten zu unterdrücken.
- **Web-UI:** Browserbasierter Scan-Launcher mit Echtzeit-Konsolenfeed und Artefakt-Browser für Jobs.
> Laufende Verbesserungen sind im Gange. Mehrere neue Funktionen und Verbesserungen sind für kommende Versionen geplant.
Zögern Sie nicht, zur Aktualisierung oder Ergänzung neuer Regeln sowie zur zukünftigen Entwicklung beizutragen.
Wenn Sie Fehler finden, melden Sie diese an [[email protected]](mailto:[email protected]).
Ausführliche Dokumentation: [https://dakshlabs.com/#docs](https://dakshlabs.com/#docs)
---
## Erste Schritte
Es gibt zwei Möglichkeiten, Daksh SCRA auszuführen – wählen Sie, was am besten zu Ihrem Workflow passt:
| | Am besten geeignet für | Weiter zu |
|---|---|---|
| 🌐 **Web-UI (Docker)** | Der einfachste Einstieg – ein Befehl, ein Browser-Dashboard, Live-Scan-Fortschritt und ein Berichts-/Artefakt-Browser. Für die meisten Benutzer empfohlen. | [Web-UI (Docker)](#web-ui-docker) |
| 💻 **CLI (Python)** | Skripterstellung, CI-Pipelines oder das Ausführen von Scans ohne Docker. | [CLI-Setup](#cli-setup) |
Beide Wege nutzen exakt dieselbe Scan-Engine – die Web-UI ist ein Browser-Frontend über derselben CLI, sodass die Ergebnisse in beiden Fällen identisch sind.
---
## Web-UI (Docker)
Der schnellste Weg, Daksh SCRA auszuführen, ist über die browserbasierte Web-UI, die mit einem einzigen Docker-Compose-Befehl gestartet wird. Sie bietet einen Scan-Launcher, einen Live-Konsolenfeed und einen durchsuchbaren Verlauf früherer Berichte – ohne dass eine lokale Python-Umgebung erforderlich ist.
Das Docker-Setup führt die Web-UI und die CLI als unabhängige Dienste aus, die aus demselben Image erstellt werden, sodass Sie beide (oder einen davon) aus demselben Container verwenden können.
### Web-UI starten
Vordergrundmodus (Logs werden an Ihr Terminal gestreamt):```bash
docker compose up --build
Detached / Hintergrundmodus:```bash docker compose up --build -d
Dann öffne [http://localhost:8080](http://localhost:8080).
Um einen anderen Port zu verwenden:```bash
DAKSH_PORT=9090 docker compose up
Stoppe den Stack mit:```bash docker compose down
### Anmelden
Die Weboberfläche erfordert ein Konto. Beim ersten Start wird ein anfängliches Admin-Konto aus `DAKSH_ADMIN_USERNAME` / `DAKSH_ADMIN_PASSWORD` erstellt (in `.env` festlegen); wenn `DAKSH_ADMIN_PASSWORD` nicht gesetzt ist, wird ein zufälliges Passwort generiert und einmalig im Startprotokoll der API ausgegeben – bewahren Sie es auf, da es danach nicht wiederhergestellt werden kann.
Beim ersten Anmelden müssen Sie Ihr eigenes Passwort (und optional einen Benutzernamen) festlegen. Ein Admin-Konto kann über den API-Endpunkt `POST /api/v1/auth/users` weitere Konten erstellen (dafür gibt es noch keine eigene Oberfläche). Siehe `.env.example` für die vollständige Liste der authentifizierungsbezogenen Einstellungen (Sitzungsdauer, Cookie-Sicherheit, CORS).
### Was Sie erhalten
- Responsiver Befehls-Builder für die Modi Scan, Recon, Estimate, Recon+Estimate, List und PDF-aus-JSON
- Echtzeit-Konsolenfeed und Live-Fortschritt pro Phase während der Ausführung
- Artefakt-Snapshots pro Auftrag für HTML / PDF / JSON-Ausgaben
- Schnelle Navigation im Browser über Ausführungsformular, Live-Feed, Artefakte und letzte Aufträge
- Integrierter Verzeichnisbrowser zur Auswahl von Zielpfaden (betriebssystemabhängig: Windows, macOS, Linux / Docker)
Im Hintergrund bleibt die CLI die Quelle der Wahrheit – sie führt alle Scans durch und erzeugt sämtliche HTML / PDF / JSON-Ausgaben. Die Weboberfläche führt jeweils einen aktiven Auftrag aus und speichert die Ausgaben jedes abgeschlossenen Auftrags als Snapshot in `runtime/webui/jobs/<job-id>/artifacts/`, sodass frühere Berichte weiterhin zugänglich bleiben.
### Ausführen der CLI in Docker
Sie benötigen auch für die CLI keine lokale Python-Umgebung – sie ist als eigener Compose-Dienst verfügbar, der aus demselben Image erstellt wird:```bash
docker compose run --rm cli -h
docker compose run --rm cli -r auto -t /scan-targets/path/to/source
reports/- und runtime/-VolumesWichtige Mount-Punkte:
| Mount | Pfad im Container |
|---|---|
| Projektquelle | /app |
| Standard-Scan-Root | /scan-targets |
| Host-Laufwerks-Aliase | /host, /host/c, /host/d |
| WSL-Mounts | /mnt, /run/desktop/mnt/host |
Umgebungsvariablen (in .env konfigurieren):
| Variable | Beschreibung |
|---|---|
DAKSH_PORT | Web-UI-Port (Standard: 8080) |
DAKSH_SCAN_ROOT | Standard-Zielverzeichnis im Container |
DAKSH_HOST_SOURCE | Host-Pfad, der als /scan-targets gemountet wird (Standard: /tmp) |
DAKSH_HOST_MOUNT | Zusätzlicher Host-Mount-Root |
DAKSH_HOST_C | Windows-C:-Laufwerkspfad (WSL) |
DAKSH_HOST_D | Windows-D:-Laufwerkspfad (WSL) |
DAKSH_DESKTOP_MOUNT | WSL-Desktop-Mount-Pfad |
DAKSH_BROWSE_ROOTS | Überschreibt die Roots des Verzeichnisbrowsers (kommagetrennt) |
DAKSH_ADMIN_USERNAME | Initialer Admin-Benutzername (Standard: admin) |
DAKSH_ADMIN_PASSWORD | Initiales Admin-Passwort – es wird dringend empfohlen, es explizit zu setzen |
Kopieren Sie .env.example nach .env und setzen Sie die Pfade und Anmeldedaten für Ihre Maschine, bevor Sie Docker ausführen.
Bevorzugen Sie es, Daksh SCRA direkt mit Python auszuführen? So richten Sie es lokal ein.
requirements.txt aufgeführten BibliothekenOder lade das neueste ZIP von [https://github.com/coffeeandsecurity/DakshSCRA](https://github.com/coffeeandsecurity/DakshSCRA) herunter und entpacke es.
### 2. Eine virtuelle Umgebung einrichten
> 💡 Die virtuelle Umgebung kann in einem beliebigen Verzeichnis erstellt werden – sie muss sich nicht im DakshSCRA-Ordner befinden.
**Option A: Ein-Schritt-Einrichtung (empfohlen)**```bash
python setup_env.py
Dieses Skript erstellt die virtuelle Umgebung, installiert alle Abhängigkeiten und installiert den Chromium-Browser von Playwright (erforderlich für den PDF-Export).
Option B: Manuelle Einrichtung
Windows:```bash python -m venv daksh-env .\daksh-env\Scripts\activate
macOS / Linux:```bash
python3 -m venv daksh-env
source daksh-env/bin/activate
Dann installiere die Abhängigkeiten:```bash cd path/to/DakshSCRA pip install -r requirements.txt playwright install chromium
---
## CLI-Nutzung
Verwende `python` in einer virtuellen Umgebung oder `python3` außerhalb einer solchen.
### Befehlszeilenoptionen```
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]
| Option | Beschreibung |
|---|---|
-r RULES | Plattform-Regeln (z. B. php, java, php,java) oder auto für automatische Erkennung |
-f FILE_TYPES | Standard-Dateitypen für den Scan überschreiben |
-v | Ausführlichkeitsgrad (-v, -vv, -vvv) |
-t TARGET_DIR | Ziel-Quellcode-Verzeichnis |
-l {R,RF} | Plattform-Regeln + Frameworks auflisten [R] oder Dateitypen einbeziehen [RF] |
--recon | Aufklärung ausführen (Plattform-/Framework-/Sprachenerkennung) |
--rs, --recon-strict | Strikte Aufklärung: nur Erkennungen mit hoher Sicherheit (mit --recon verwenden) |
--estimate | Code-Review-Aufwand basierend auf der Codebasis-Größe schätzen |
-rpt, --report FORMATS | Berichtsformate: html, pdf oder html,pdf (Standard: html) |
--pdf-from-json | PDF-Berichte aus vorhandenen JSON-Ausgaben ohne erneuten Scan erzeugen |
--json-input-dir PATH | JSON-Berichtsverzeichnis (Standard: ./reports/data) |
--pdf-output PATH | Einzelner PDF-Ausgabepfad (Standard: ./reports/scan/pdf/report.pdf) |
--pdf-multi-dir PATH | Ausgabeverzeichnis für mehrteilige PDFs (Standard: ./reports/scan/pdf/multi-file) |
--pdf-single-only | Nur die kombinierte Einzeldatei-PDF erzeugen; mehrteiligen Satz pro Plattform überspringen |
--skip-analysis |
-f(Dateitypen) ist optional. Wenn nicht angegeben, verwendet DakshSCRA die Standard-Dateitypen für die ausgewählte(n) Plattform(en).```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
### Unterstützte Plattformregeln und Frameworks```bash
python dakshscra.py -l R # List platform rules and framework mappings
python dakshscra.py -l RF # List platform rules, framework mappings, and filetypes
Aktuell unterstützte Plattformen und Framework-Zuordnungen:
| Plattform | Frameworks |
|---|---|
| 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 | - |
Um die neuesten unterstützten Plattformen und Frameworks zu erhalten, führen Sie immer Folgendes aus:```bash python dakshscra.py -l R
---
## Konfigurationsreferenz
### `config/tool.yaml`
Die Laufzeit-Standardwerte von Daksh SCRA werden über `config/tool.yaml` gesteuert.```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-Konfigurationsoptionen:
analysis.run_by_default
true: Der Analyzer läuft automatisch während des Scansfalse: Der Analyzer ist deaktiviert, sofern er nicht in der Konfiguration oder über die CLI wieder aktiviert wirdanalysis.include_frameworks
true: Framework-Ebene-Analyzer-Einträge einbeziehen, wo Framework-Erkennung vorhanden istfalse: Nur Ausgabe auf Plattform-Ebene des Analyzersanalysis.report_theme
hacker_mode: Dunkles, kontrastreiches, modernes Analyzer-Theme (Standard)professional_mode: Helles, modernes Analyzer-Themeboth: Beide Theme-Varianten nebeneinander generierenRDL (Rule Description Language) ist die externalisierte Regellogik-Schicht von DakshSCRA. In der aktuellen Architektur:
name, regex, Beschreibungen und optional scan_config.core/rdl_engine.py ausgeführt.rules/scanning/logic/... und werden aus XML über <rdl_ref> referenziert.rdl_ref-Werte werden relativ zu rules/scanning/ aufgelöst, zum Beispiel:
logic/php/core/some_rule.rdl -> rules/scanning/logic/php/core/some_rule.rdllogic_engine, logic_source,
logic_reason, logic_trace, logic_consulted_files und logic_outcome in das Berichts-JSON exportiert.Die ältere Inline-<rdl>-Form ist nicht mehr die aktive Architektur und sollte für neue Regeln nicht verwendet werden.
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
#### Scan-Sequenz
Für eine Quellregel wertet DakshSCRA die Logik in dieser Reihenfolge aus:
1. Recon wählt passende Plattformen und Frameworks aus.
2. Die XML-Regel wird aus `rules/scanning/platform/...` geladen.
3. `regex` findet Kandidatenzeilen oder Ganzdatei-Übereinstimmungen, sofern vorhanden.
4. `exclude` entfernt offensichtliches Rauschen für diese Regel, sofern vorhanden.
5. Die externe `.rdl`-Datei aus `rdl_ref` wird gegen den aktuellen Dateitext, den aktuellen Dateipfad und das Projektverzeichnis ausgewertet.
6. Wenn das RDL-Skript erfolgreich ist, behält DakshSCRA den Fund und führt die exportierten Logik-Metadaten in die Berichtsausgabe zusammen.
7. Wenn das RDL-Skript fehlschlägt, wird die Übereinstimmung mit dem RDL-Fehlergrund und den Entscheidungs-Trace-Metadaten unterdrückt.
Für Dateipfad-Regeln in `filepaths.xml` gilt dasselbe `rdl_ref`-Modell, aber das Übereinstimmungssubjekt ist
der normalisierte relative Pfad anstelle des Quellcode-Texts. In diesem Modus erhält RDL den relativen Pfad
als aktuellen Dateitext und Pfadkontext.
#### Aktuelle Regelstruktur```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-Struktur```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.
#### Aktuelles Layout```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 und WHEN CURRENT_FILE_MATCHES werden gegen den aktuellen Dateitext ausgewertet.WHEN FILE_NAME_IS und WHEN FILE_PATH_MATCHES werden gegen den aktuellen Dateipfad-Kontext ausgewertet.WHEN EXPR unterstützt boolesche Logik über PRESENT:, MISSING: und EXISTS:-Prädikate.OBSERVE PROJECT_HAS_GLOB ... AS ... steuert den Befund nicht; es zeichnet zugehörige Projektdateien in den Trace-Metadaten auf.REPORT AS, REASON, FAIL_REASON und TRACE steuern die exportierten Berichtsmetadaten./pattern/flags geschrieben werden, wobei i, m und s unterstützt werden.| Befehl | Verhalten | Typische Verwendung |
|---|---|---|
WHEN PRESENT <regex> | Erfordert, dass ein Muster im aktuellen Dateitext vorhanden ist | Erfordert eine gleichzeitig auftretende riskante API oder ein sensibles Feld |
WHEN MISSING <regex> | Erfordert, dass ein Muster im aktuellen Dateitext fehlt | Unterdrücken, wenn eine Abhilfe bereits existiert |
WHEN EXPR <expr> | Wertet boolesche Ausdrücke mit PRESENT: / MISSING: / EXISTS: sowie &&, ` | |
WHEN CURRENT_FILE_MATCHES <regex> | Prüft gegen den vollständigen aktuellen Dateitext | Komplexe Ganzdatei-Bedingungen erneut prüfen |
WHEN FILE_NAME_IS <name> | Erfordert, dass der aktuelle Dateiname exakt übereinstimmt | Plist-/Manifest-/Konfigurationsregeln einschränken |
WHEN FILE_PATH_MATCHES <glob> | Erfordert, dass der aktuelle relative Pfad einem Glob entspricht | Framework-/Konfigurationspfadregeln eingrenzen |
UNLESS CURRENT_FILE_MATCHES <regex> | Schlägt fehl, wenn die gesamte Datei einem Ausschlussmuster entspricht | Bekannte sichere strukturelle Fälle blockieren |
OBSERVE PROJECT_HAS_GLOB <glob> AS <label> | Zeichnet zugehörige Projektdateien in den Trace-Metadaten auf | Unterstützende Konfigurations- oder Begleitdateien sichtbar machen |
REPORT AS <outcome> | Legt das Regel-Ergebnis fest, normalerweise area_of_interest | Zukunftsichere explizite Ergebnisse |
REASON <text> | Grund, der angezeigt wird, wenn die Regel besteht | Erklären, warum der Befund sichtbar blieb |
FAIL_REASON <text> | Grund, der angezeigt wird, wenn die Regel einen Treffer unterdrückt | Erklären, warum der Treffer gefiltert wurde |
TRACE <text> | Fügt Debug-/Entscheidungs-Trace-Zeilen hinzu | Migrations-/Debugging-Unterstützung |
Boolesche Ausdrücke in WHEN EXPR unterstützen:
PRESENT:<regex>MISSING:<regex>EXISTS:<regex>&&, ||, ! und KlammernXML-Regel:```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>
Externe 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-Regel:```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>
Externe 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-Regel:```xml Admin Section File Path <rdl_ref>logic/filepaths/core/admin_section.rdl</rdl_ref>
Externe 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 breit genug, um Kandidaten zu erfassen, und filtere den Kontext anschließend mit RDL.rdl_ref für die gesamte Regellogik und platziere die .rdl-Datei neben dem entsprechenden Plattform-/Framework-Logikbaum.<rdl>-Blöcke hinzu.WHEN PRESENT / WHEN MISSING für einfache Bedingungen und WHEN EXPR nur, wenn die Logik wirklich boolesch ist.REASON und Unterdrückungserklärungen in FAIL_REASON.PRESENT und MISSING als dateiweite Prüfungen. Eine Abhilfemaßnahme an beliebiger Stelle in der Datei kann jeden Treffer aus dieser Datei unterdrücken.OBSERVE PROJECT_HAS_GLOB, um Ergebnisse mit Projektkontext anzureichern, nicht als Bestanden-/Nicht-bestanden-Gate.logic/...-Pfade stabil und plattformspezifisch, damit XML-Regeln schlank bleiben und die Logikebene wiederverwendbar bleibt.Alle Ausgaben werden unter dem Verzeichnis reports/ geschrieben:```
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
Laufzeitdateien (Scan-Status, Logs, Inventar) werden unter `runtime/` geschrieben.
Bei der Ausführung über die Web-UI werden die Ausgaben jedes Jobs zusätzlich unter `runtime/webui/jobs/<job-id>/artifacts/` als Schnappschuss gespeichert (siehe [Web-UI (Docker)](#web-ui-docker)).
---
## Autor
| | |
|---|---|
| Website | [coffeeandsecurity.com](https://www.coffeeandsecurity.com) |
| E-Mail | [email protected] |
| Twitter / X | [@coffeensecurity](https://x.com/coffeensecurity) |
| Quelle | [github.com/coffeeandsecurity/DakshSCRA](https://github.com/coffeeandsecurity/DakshSCRA) |
| Lizenz | GNU General Public License v3.0 (GPL-3.0) |
Wenn DakshSCRA Ihrem Team erheblich Zeit, Aufwand oder Kosten gespart hat, die Abhängigkeit von teuren kommerziellen Tools reduziert, die Review-Abdeckung verbessert oder Code-Reviews strukturierter und effektiver gemacht hat, zögern Sie nicht, sich zu melden und Ihre Erfahrungen zu teilen. Ich bin stets offen für durchdachtes Feedback und interessante Gespräche.
Einen Fehler gefunden oder möchten Sie einen Beitrag leisten? Eröffnen Sie ein Issue oder einen Pull-Request auf GitHub.
| Analyzer-Stufe für diesen Lauf deaktivieren |
--loc | Effektive Codezeilen zählen |
--baseline-file PATH | Unterdrückungs-Baseline-Datei (JSON) |
--baseline-generate | Unterdrückungs-Baseline aus aktuellen Befunden erzeugen |
--no-baseline | Baseline-Unterdrückung für diesen Lauf deaktivieren |
--review-config PATH | Befund-Triage-Datei (JSON); zuvor geprüfte False Positives aus Berichten unterdrücken |
--resume-scan | Einen zuvor unterbrochenen Scan aus der Statusdatei fortsetzen |
--state-file PATH | Benutzerdefinierter Scan-Status-/Checkpoint-Dateipfad |
--no-state | Scan-Status-Checkpointing für diesen Lauf deaktivieren |
--state | Scan-Status-Checkpointing für diesen Lauf erzwingen |