
DakshSCRA v0.38-beta
Herramienta de análisis estático de código sensible al framework para la revisión automatizada del código fuente con reglas específicas de plataforma, análisis de contaminación, estimación de esfuerzo y líneas de base de supresión.
Daksh SCRA (Asistente de Revisión de Código Fuente)```
Author:
- Debasis Mohanty ([email protected])
- Twitter / X: @coffeensecurity
- www.coffeeandsecurity.com
## Acerca de Daksh SCRA
Daksh SCRA (Source Code Review Assist) está diseñado para mejorar la eficiencia del proceso de revisión de código fuente, proporcionando un enfoque bien estructurado y organizado para los revisores de código.
En lugar de marcar indiscriminadamente todo como un posible problema, Daksh SCRA promueve un análisis reflexivo, instando a la investigación y confirmación de problemas potenciales. Este enfoque reduce la carrera por etiquetar cada posible preocupación como un error, recortando la confusión y el tiempo perdido en falsos positivos.
### Debut
Daksh SCRA se presentó inicialmente durante una sesión de formación sobre revisión de código fuente en Black Hat USA 2022 (6-9 de agosto), donde se mostró de forma discreta a un público específico. Su debut público oficial tuvo lugar en Black Hat USA 2023 en Las Vegas.
## Características y funcionalidades
- **Identifica áreas de interés en el código fuente:** Fomenta una investigación y confirmación centradas en lugar de etiquetar indiscriminadamente todo como un error.
- **Identifica áreas de interés en rutas de archivo (primicia mundial):** Reconoce patrones en las rutas de archivo para señalar secciones relevantes para la revisión.
- **Reconocimiento a nivel de software para identificar tecnologías utilizadas:** Identifica las tecnologías del proyecto, lo que permite a los revisores de código realizar escaneos precisos con reglas adecuadas.
- **Estimación científica automatizada del esfuerzo para la revisión de código (primicia mundial):** Proporciona un enfoque medible para estimar el esfuerzo requerido para una revisión de código.
- **Escaneo consciente del framework:** Aplica automáticamente reglas específicas del framework cuando se detecta el framework del proyecto.
- **Informes de análisis de taint:** Informes HTML de flujo de taint por plataforma con temas de modo hacker y modo profesional.
- **RDL (Rule Description Language):** Lógica de reglas externa referenciada con `rdl_ref` y ejecutada por el pipeline de `core/rdl_engine.py`: admite compuertas conscientes de archivos, expresiones booleanas, observaciones del proyecto y metadatos de lógica exportados en los informes.
- **Estado de escaneo / reanudación:** Marca escaneos largos y reanuda tras una interrupción.
- **Línea base de supresión:** Genera y aplica una línea base de falsos positivos conocidos para suprimirlos de futuros informes.
- **Interfaz web:** Lanzador de escaneos basado en navegador con feed de consola en tiempo real y navegador de artefactos de trabajos.
> Las mejoras activas están en curso. Se planean múltiples funciones y mejoras nuevas para próximas versiones.
Siéntete libre de contribuir a la actualización o adición de nuevas reglas y al desarrollo futuro.
Si encuentras algún error, repórtalo a [[email protected]](mailto:[email protected]).
Documentación detallada: [https://dakshlabs.com/#docs](https://dakshlabs.com/#docs)
---
## Primeros pasos
Hay dos formas de ejecutar Daksh SCRA: elige la que mejor se adapte a tu flujo de trabajo:
| | Mejor para | Ir a |
|---|---|---|
| 🌐 **Interfaz web (Docker)** | La forma más fácil de empezar: un solo comando, un panel en el navegador, progreso de escaneo en vivo y un navegador de informes/artefactos. Recomendado para la mayoría de los usuarios. | [Interfaz web (Docker)](#web-ui-docker) |
| 💻 **CLI (Python)** | Scripting, pipelines de CI o ejecución de escaneos sin Docker. | [Configuración CLI](#cli-setup) |
Ambas rutas ejecutan exactamente el mismo motor de escaneo: la interfaz web es un frontend de navegador sobre la misma CLI, por lo que los resultados son idénticos en ambos casos.
---
## Interfaz web (Docker)
La forma más rápida de ejecutar Daksh SCRA es a través de su interfaz web basada en navegador, lanzada con un solo comando de Docker Compose. Te ofrece un lanzador de escaneos, un feed de consola en vivo y un historial navegable de informes anteriores, sin necesidad de un entorno Python local.
La configuración de Docker ejecuta la interfaz web y la CLI como servicios independientes construidos a partir de la misma imagen, por lo que puedes usar cualquiera de los dos (o ambos) desde el mismo contenedor.
### Lanzar la interfaz web
Modo en primer plano (los registros se transmiten a tu terminal):```bash
docker compose up --build
Modo desacoplado / en segundo plano:```bash docker compose up --build -d
Luego abre [http://localhost:8080](http://localhost:8080).
Para usar un puerto diferente:```bash
DAKSH_PORT=9090 docker compose up
Detén la pila con:```bash docker compose down
### Iniciar sesión
La interfaz web requiere una cuenta. En el primer arranque, se crea una cuenta de administrador inicial a partir de `DAKSH_ADMIN_USERNAME` / `DAKSH_ADMIN_PASSWORD` (configúralas en `.env`); si `DAKSH_ADMIN_PASSWORD` se deja sin definir, se genera una contraseña aleatoria y se imprime una sola vez en el registro de inicio de la API: guárdala, ya que no se puede recuperar después.
Se te pedirá que establezcas tu propia contraseña (y, opcionalmente, nombre de usuario) la primera vez que inicies sesión. Una cuenta de administrador puede crear más cuentas mediante el endpoint de API `POST /api/v1/auth/users` (aún no hay una interfaz dedicada para esto). Consulta `.env.example` para ver la lista completa de ajustes relacionados con la autenticación (duración de la sesión, seguridad de cookies, CORS).
### Qué obtienes
- Constructor de comandos receptivo para los modos de escaneo, reconocimiento, estimación, reconocimiento+estimación, lista y PDF desde JSON
- Fuente de consola en tiempo real y progreso en vivo por etapa durante la ejecución
- Instantáneas de artefactos por trabajo para salidas HTML / PDF / JSON
- Navegación rápida en el navegador entre el formulario de ejecución, la fuente en vivo, los artefactos y los trabajos recientes
- Explorador de directorios integrado para seleccionar rutas de destino (consciente del sistema operativo: Windows, macOS, Linux / Docker)
Internamente, la CLI sigue siendo la fuente de verdad: realiza todo el escaneo y genera cada salida HTML / PDF / JSON. La interfaz web ejecuta un trabajo activo a la vez y guarda instantáneas de las salidas de cada trabajo completado en `runtime/webui/jobs/<job-id>/artifacts/` para que los informes anteriores sigan siendo accesibles.
### Ejecutar la CLI en Docker
Tampoco necesitas un entorno Python local para usar la CLI: está disponible como su propio servicio de Compose, construido a partir de la misma imagen:```bash
docker compose run --rm cli -h
docker compose run --rm cli -r auto -t /scan-targets/path/to/source
Qué hay en la imagen
- Backend FastAPI + frontend de interfaz web
- La CLI completa de Daksh SCRA, como servicio independiente
- Playwright Chromium, para la generación de PDF
- Volúmenes persistentes
reports/yruntime/ - Montajes de rutas del host para que los escaneos puedan acceder a los árboles de código fuente desde dentro del contenedor
Puntos de montaje clave:
| Montaje | Ruta dentro del contenedor |
|---|---|
| Código fuente del proyecto | /app |
| Raíz de escaneo predeterminada | /scan-targets |
| Alias de unidades del host | /host, /host/c, /host/d |
| Montajes WSL | /mnt, /run/desktop/mnt/host |
Variables de entorno (configúralas en .env):
| Variable | Descripción |
|---|---|
DAKSH_PORT | Puerto de la interfaz web (predeterminado: 8080) |
DAKSH_SCAN_ROOT | Directorio de destino predeterminado dentro del contenedor |
DAKSH_HOST_SOURCE | Ruta del host para montar como /scan-targets (predeterminado: /tmp) |
DAKSH_HOST_MOUNT | Raíz de montaje adicional del host |
DAKSH_HOST_C | Ruta de la unidad C: de Windows (WSL) |
DAKSH_HOST_D | Ruta de la unidad D: de Windows (WSL) |
DAKSH_DESKTOP_MOUNT | Ruta de montaje del escritorio WSL |
DAKSH_BROWSE_ROOTS | Anula las raíces del navegador de directorios (separadas por comas) |
DAKSH_ADMIN_USERNAME | Nombre de usuario administrador inicial (predeterminado: admin) |
DAKSH_ADMIN_PASSWORD | Contraseña de administrador inicial: se recomienda encarecidamente establecerla explícitamente |
Copia .env.example a .env y establece las rutas y credenciales para tu máquina antes de ejecutar Docker.
Configuración de la CLI
¿Prefieres ejecutar Daksh SCRA directamente con Python? Así es como se configura localmente.
Requisitos previos
- Python 3.8+
- Todas las bibliotecas listadas en
requirements.txt
1. Descargar Daksh SCRA```bash
git clone https://github.com/coffeeandsecurity/DakshSCRA.git
O descarga el último zip desde [https://github.com/coffeeandsecurity/DakshSCRA](https://github.com/coffeeandsecurity/DakshSCRA) y descomprímelo.
### 2. Configurar un Entorno Virtual
> 💡 El entorno virtual se puede crear en cualquier directorio: no es necesario que esté dentro de la carpeta DakshSCRA.
**Opción A: Configuración en un solo paso (recomendada)**```bash
python setup_env.py
Este script crea el entorno virtual, instala todas las dependencias e instala el navegador Chromium de Playwright (necesario para la exportación a PDF).
Opción B: Configuración manual
Windows:```bash python -m venv daksh-env .\daksh-env\Scripts\activate
macOS / Linux:```bash
python3 -m venv daksh-env
source daksh-env/bin/activate
Entonces instala las dependencias:```bash cd path/to/DakshSCRA pip install -r requirements.txt playwright install chromium
---
## Uso de la CLI
Usa `python` dentro de un entorno virtual, o `python3` fuera de uno.
### Opciones de la línea de comandos```
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]
| Opción | Descripción |
|---|---|
-r RULES | Reglas de la plataforma (p. ej., php, java, php,java) o auto para detección automática |
-f FILE_TYPES | Sobrescribir los tipos de archivo predeterminados para el escaneo |
-v | Nivel de verbosidad (-v, -vv, -vvv) |
-t TARGET_DIR | Directorio del código fuente objetivo |
-l {R,RF} | Listar reglas de la plataforma + frameworks [R] o incluir tipos de archivo [RF] |
--recon | Ejecutar reconocimiento (detección de plataforma / framework / lenguaje) |
--rs, --recon-strict | Reconocimiento estricto: solo detecciones de alta confianza (usar con --recon) |
--estimate | Estimar el esfuerzo de revisión de código según el tamaño del código base |
-rpt, --report FORMATS | Formatos de informe: html, pdf o html,pdf (predeterminado: html) |
--pdf-from-json | Generar informe(s) PDF a partir de salidas JSON existentes sin volver a escanear |
--json-input-dir PATH | Directorio de informes JSON (predeterminado: ./reports/data) |
--pdf-output PATH | Ruta de salida del PDF único (predeterminado: ./reports/scan/pdf/report.pdf) |
--pdf-multi-dir PATH | Directorio de salida del PDF de varios archivos (predeterminado: ./reports/scan/pdf/multi-file) |
--pdf-single-only | Generar solo el PDF combinado de un solo archivo; omitir el conjunto de varios archivos por plataforma |
--skip-analysis | Deshabilitar la etapa de análisis para esta ejecución |
--loc | Contar líneas de código efectivas |
--baseline-file PATH | Archivo de línea base de supresión (JSON) |
--baseline-generate | Generar línea base de supresión a partir de los hallazgos actuales |
--no-baseline | Deshabilitar la supresión de línea base para esta ejecución |
--review-config PATH | Archivo de triaje de hallazgos (JSON); suprimir falsos positivos ya revisados de los informes |
--resume-scan | Reanudar un escaneo previamente interrumpido desde el archivo de estado |
--state-file PATH | Ruta personalizada del archivo de estado / punto de control del escaneo |
--no-state | Deshabilitar el guardado de puntos de control del escaneo para esta ejecución |
--state | Forzar la habilitación del guardado de puntos de control del escaneo para esta ejecución |
Ejemplo de uso
-f(tipos de archivo) es opcional. Si no se especifica, DakshSCRA usa los tipos de archivo predeterminados para la(s) plataforma(s) seleccionada(s).```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
### Reglas y Frameworks de Plataforma Compatibles```bash
python dakshscra.py -l R # List platform rules and framework mappings
python dakshscra.py -l RF # List platform rules, framework mappings, and filetypes
Plataformas y frameworks compatibles actualmente:
| Plataforma | 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 | - |
Para obtener las plataformas y frameworks compatibles más recientes, ejecuta siempre:```bash python dakshscra.py -l R
---
## Referencia de Configuración
### `config/tool.yaml`
Los valores predeterminados del tiempo de ejecución de Daksh SCRA se controlan a través de `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
Opciones de configuración del analizador:
analysis.run_by_defaulttrue: el analizador se ejecuta automáticamente durante el escaneofalse: el analizador está deshabilitado a menos que se vuelva a habilitar en la configuración o mediante CLI
analysis.include_frameworkstrue: incluir entradas del analizador a nivel de framework donde exista detección de frameworkfalse: solo salida del analizador a nivel de plataforma
analysis.report_themehacker_mode: tema de analizador moderno oscuro de alto contraste (predeterminado)professional_mode: tema de analizador moderno claroboth: generar ambas variantes de tema lado a lado
Autoría de reglas RDL
RDL (Lenguaje de Descripción de Reglas) es la capa de lógica de reglas externalizada de DakshSCRA. En la arquitectura actual:
- Las reglas XML siguen siendo el inventario de reglas y contienen metadatos como
name,regex, descripciones yscan_configopcional. - La lógica RDL se ejecuta mediante
core/rdl_engine.py. - Los archivos de lógica de reglas se encuentran en
rules/scanning/logic/...y se referencian desde XML usando<rdl_ref>. - Los valores de
rdl_refse resuelven relativos arules/scanning/, por ejemplo:logic/php/core/some_rule.rdl->rules/scanning/logic/php/core/some_rule.rdl - Los resultados de la lógica se exportan al JSON del informe como metadatos como
logic_engine,logic_source,logic_reason,logic_trace,logic_consulted_filesylogic_outcome.
La forma antigua en línea <rdl> ya no es la arquitectura activa y no debe usarse para nuevas reglas.
Arquitectura RDL de un vistazo```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
#### Secuencia de escaneo
Para una regla de origen, DakshSCRA evalúa la lógica en este orden:
1. Recon selecciona las plataformas y frameworks coincidentes.
2. La regla XML se carga desde `rules/scanning/platform/...`.
3. `regex` encuentra líneas candidatas o coincidencias de archivo completo cuando están presentes.
4. `exclude` elimina el ruido obvio para esa regla, si está presente.
5. El archivo `.rdl` externo de `rdl_ref` se evalúa contra el texto del archivo actual, la ruta del archivo actual y la raíz del proyecto.
6. Si el script RDL pasa, DakshSCRA conserva el hallazgo y fusiona los metadatos de lógica exportados en la salida del informe.
7. Si el script RDL falla, la coincidencia se suprime con el motivo de fallo de RDL y los metadatos de seguimiento de decisión.
Para las reglas de ruta de archivo en `filepaths.xml`, se aplica el mismo modelo `rdl_ref`, pero el sujeto de coincidencia es
la ruta relativa normalizada en lugar del texto del código fuente. En ese modo, RDL recibe la cadena de ruta relativa
como el texto del archivo actual y el contexto de ruta.
#### Estructura de regla actual```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>
Estructura actual de `.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.
#### Diseño actual```text
rules/
└── scanning/
├── platform/
│ ├── php/php.xml
│ ├── java/java.xml
│ └── ...
└── logic/
├── common/core/
├── php/core/
├── php/framework/laravel/
├── mobile/android/core/
├── filepaths/core/
└── ...
Semántica de ejecución
WHEN PRESENT,WHEN MISSINGyWHEN CURRENT_FILE_MATCHESse evalúan contra el texto del archivo actual.WHEN FILE_NAME_ISyWHEN FILE_PATH_MATCHESse evalúan contra el contexto de la ruta del archivo actual.WHEN EXPRadmite lógica booleana sobre los predicadosPRESENT:,MISSING:yEXISTS:.OBSERVE PROJECT_HAS_GLOB ... AS ...no condiciona el hallazgo; registra archivos de proyecto relacionados en los metadatos de traza.REPORT AS,REASON,FAIL_REASONyTRACEcontrolan los metadatos de informe exportados.- Los tokens de expresiones regulares pueden escribirse como patrones sin formato o como
/patrón/banderas, con soporte parai,mys.
Comandos RDL admitidos
| Comando | Comportamiento | Uso típico |
|---|---|---|
WHEN PRESENT <regex> | Requiere que un patrón exista en el texto del archivo actual | Requerir una API de riesgo o un campo sensible co-ocurrente |
WHEN MISSING <regex> | Requiere que un patrón esté ausente del texto del archivo actual | Suprimir cuando ya existe una mitigación |
WHEN EXPR <expr> | Evalúa expresiones booleanas usando PRESENT: / MISSING: / EXISTS: con &&, ` | |
WHEN CURRENT_FILE_MATCHES <regex> | Compara contra el texto completo del archivo actual | Revisar condiciones complejas de todo el archivo |
WHEN FILE_NAME_IS <name> | Requiere que el nombre del archivo actual coincida exactamente | Limitar reglas de plist / manifest / config |
WHEN FILE_PATH_MATCHES <glob> | Requiere que la ruta relativa actual coincida con un glob | Acotar reglas de rutas de framework/config |
UNLESS CURRENT_FILE_MATCHES <regex> | Falla cuando todo el archivo coincide con un patrón de exclusión | Bloquear casos estructurales seguros conocidos |
OBSERVE PROJECT_HAS_GLOB <glob> AS <label> | Registra archivos de proyecto relacionados en los metadatos de traza | Superficie de config de soporte o archivos complementarios |
REPORT AS <outcome> | Establece el resultado de la regla, normalmente area_of_interest | Resultados explícitos a prueba de futuro |
REASON <text> | Razón mostrada cuando la regla pasa | Explicar por qué el hallazgo permaneció visible |
FAIL_REASON <text> | Razón mostrada cuando la regla suprime una coincidencia | Explicar por qué el acierto fue filtrado |
TRACE <text> | Añadir líneas de traza de depuración/decisión | Soporte de migración/depuración |
Las expresiones booleanas en WHEN EXPR admiten:
PRESENT:<regex>MISSING:<regex>EXISTS:<regex>&&,||,!y paréntesis
Ejemplo 1 - Compuerta de inyección SQL en PHP
Regla 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.
Ejemplo 2 - Regla de manifiesto de Android con comprobaciones conscientes de archivos
Regla 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.
Ejemplo 3 - Regla de área de interés por ruta de archivo
Regla 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.
Guía de autoría
- Mantén
regexlo suficientemente amplio para captar candidatos y luego usa RDL para filtrar el contexto. - Prefiere
rdl_refpara toda la lógica de reglas y mantén el archivo.rdljunto al árbol de lógica de la plataforma/marco correspondiente. - No agregues nuevos bloques
<rdl>en línea. - Usa
WHEN PRESENT/WHEN MISSINGpara compuertas simples yWHEN EXPRsolo cuando la lógica sea genuinamente booleana. - Coloca el razonamiento dirigido a revisores en
REASONy las explicaciones de supresión enFAIL_REASON. - Trata
PRESENTyMISSINGcomo comprobaciones de archivo completo. Una mitigación en cualquier parte del archivo puede suprimir todas las coincidencias de ese archivo. - Usa
OBSERVE PROJECT_HAS_GLOBpara enriquecer los hallazgos con contexto del proyecto, no como una compuerta de aprobado/reprobado. - Mantén las rutas
logic/...estables y con ámbito de plataforma para que las reglas XML sigan siendo delgadas y la capa de lógica siga siendo reutilizable.
Estructura de salida de informes
Todas las salidas se escriben bajo el directorio 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
Los archivos de ejecución (estado del escaneo, registros, inventario) se escriben en `runtime/`.
Cuando se ejecuta a través de la interfaz web, las salidas de cada trabajo también se guardan como instantáneas en `runtime/webui/jobs/<job-id>/artifacts/` (consulte [Interfaz web (Docker)](#web-ui-docker)).
---
## Autor
| | |
|---|---|
| Sitio web | [coffeeandsecurity.com](https://www.coffeeandsecurity.com) |
| Correo electrónico | [email protected] |
| Twitter / X | [@coffeensecurity](https://x.com/coffeensecurity) |
| Fuente | [github.com/coffeeandsecurity/DakshSCRA](https://github.com/coffeeandsecurity/DakshSCRA) |
| Licencia | GNU General Public License v3.0 (GPL-3.0) |
Si DakshSCRA ha ayudado a tu equipo a ahorrar tiempo, esfuerzo o costes significativos, ha reducido la dependencia de herramientas comerciales caras, ha mejorado la cobertura de las revisiones o ha hecho que la revisión de código sea más estructurada y eficaz, no dudes en ponerte en contacto y compartir tu experiencia. Siempre estoy abierto a comentarios reflexivos y conversaciones interesantes.
¿Has encontrado un error o quieres contribuir? Abre un issue o pull request en GitHub.