
DakshSCRA v0.38-beta
Ferramenta de análise estática de código consciente de frameworks para revisão automatizada de código-fonte com regras específicas de plataforma, análise de fluxo de dados, estimativa de esforço e linhas de base de supressão.
Daksh SCRA (Assistente de Revisão de Código-Fonte)```
Author:
- Debasis Mohanty ([email protected])
- Twitter / X: @coffeensecurity
- www.coffeeandsecurity.com
## Sobre o Daksh SCRA
O Daksh SCRA (Source Code Review Assist) foi criado para aumentar a eficiência do processo de revisão de código-fonte, oferecendo uma abordagem bem estruturada e organizada para revisores de código.
Em vez de sinalizar indiscriminadamente tudo como um problema potencial, o Daksh SCRA promove uma análise criteriosa, incentivando a investigação e a confirmação de problemas potenciais. Essa abordagem reduz a correria de marcar cada preocupação potencial como um bug, diminuindo a confusão e o tempo desperdiçado com falsos positivos.
### Estreia
O Daksh SCRA foi inicialmente apresentado durante uma sessão de treinamento de revisão de código-fonte na Black Hat USA 2022 (6 a 9 de agosto), onde foi exibido de forma discreta para um público específico. Sua estreia pública oficial ocorreu na Black Hat USA 2023, em Las Vegas.
## Recursos e Funcionalidades
- **Identifica Áreas de Interesse no Código-Fonte:** Incentiva uma investigação e confirmação focadas, em vez de rotular indiscriminadamente tudo como um bug.
- **Identifica Áreas de Interesse em Caminhos de Arquivo (Primeiro do Mundo):** Reconhece padrões em caminhos de arquivo para apontar seções relevantes para revisão.
- **Reconhecimento em Nível de Software para Identificar Tecnologias Utilizadas:** Identifica as tecnologias do projeto, permitindo que revisores de código realizem varreduras precisas com regras adequadas.
- **Estimativa Científica Automatizada de Esforço para Revisão de Código (Primeiro do Mundo):** Oferece uma abordagem mensurável para estimar o esforço necessário para uma revisão de código.
- **Varredura Ciente de Frameworks:** Aplica automaticamente regras específicas de frameworks quando o framework do projeto é detectado.
- **Relatórios de Análise de Taint:** Relatórios HTML de fluxo de taint por plataforma, com temas de modo hacker e modo profissional.
- **RDL (Rule Description Language):** Lógica de regras externa referenciada com `rdl_ref` e executada pelo pipeline `core/rdl_engine.py` — suporta gates cientes de arquivos, expressões booleanas, observações do projeto e metadados de lógica exportados nos relatórios.
- **Estado da Varredura / Retomada:** Marca pontos de verificação em varreduras longas e retoma após interrupções.
- **Linha de Base de Supressão:** Gera e aplica uma linha de base de falsos positivos conhecidos para suprimi-los de relatórios futuros.
- **Interface Web:** Lançador de varreduras baseado em navegador, com feed de console em tempo real e navegador de artefatos de trabalhos.
> Aprimoramentos ativos estão em andamento. Vários novos recursos e melhorias estão planejados para os próximos lançamentos.
Sinta-se à vontade para contribuir com a atualização ou adição de novas regras e com o desenvolvimento futuro.
Se você encontrar algum bug, reporte-o para [[email protected]](mailto:[email protected]).
Documentação detalhada: [https://dakshlabs.com/#docs](https://dakshlabs.com/#docs)
---
## Primeiros Passos
Há duas maneiras de executar o Daksh SCRA — escolha a que melhor se adequa ao seu fluxo de trabalho:
| | Melhor para | Ir para |
|---|---|---|
| 🌐 **Interface Web (Docker)** | A maneira mais fácil de começar — um comando, um painel no navegador, progresso de varredura ao vivo e um navegador de relatórios/artefatos. Recomendado para a maioria dos usuários. | [Interface Web (Docker)](#web-ui-docker) |
| 💻 **CLI (Python)** | Scripts, pipelines de CI ou execução de varreduras sem Docker. | [Configuração da CLI](#cli-setup) |
Ambos os caminhos executam exatamente o mesmo mecanismo de varredura — a Interface Web é um front-end de navegador sobre a mesma CLI, portanto, os resultados são idênticos de qualquer forma.
---
## Interface Web (Docker)
A maneira mais rápida de executar o Daksh SCRA é por meio de sua Interface Web baseada em navegador, iniciada com um único comando do Docker Compose. Ela oferece um lançador de varreduras, um feed de console ao vivo e um histórico navegável de relatórios anteriores, sem precisar de um ambiente Python local.
A configuração do Docker executa a Interface Web e a CLI como serviços independentes criados a partir da mesma imagem, para que você possa usar um (ou ambos) a partir do mesmo contêiner.
### Iniciar a Interface Web
Modo em primeiro plano (os logs são transmitidos para o seu terminal):```bash
docker compose up --build
Modo destacado / em segundo plano:```bash docker compose up --build -d
Em seguida, abra [http://localhost:8080](http://localhost:8080).
Para usar uma porta diferente:```bash
DAKSH_PORT=9090 docker compose up
Pare a pilha com:```bash docker compose down
### Iniciar sessão
A interface Web requer uma conta. No primeiro arranque, é criada uma conta de administrador inicial a partir de `DAKSH_ADMIN_USERNAME` / `DAKSH_ADMIN_PASSWORD` (defina estes valores em `.env`); se `DAKSH_ADMIN_PASSWORD` ficar por definir, é gerada uma palavra-passe aleatória e impressa uma única vez no registo de arranque da API - guarde-a, pois não pode ser recuperada posteriormente.
Será obrigado a definir a sua própria palavra-passe (e, opcionalmente, nome de utilizador) na primeira vez que iniciar sessão. Uma conta de administrador pode criar contas adicionais através do endpoint da API `POST /api/v1/auth/users` (ainda sem interface dedicada para isto). Consulte `.env.example` para a lista completa de definições relacionadas com autenticação (duração da sessão, segurança de cookies, CORS).
### O que obtém
- Construtor de comandos responsivo para os modos scan, recon, estimate, recon+estimate, list e PDF-from-JSON
- Feed de consola em tempo real e progresso por etapa ao vivo durante a execução
- Instantâneos de artefactos por tarefa para saídas HTML / PDF / JSON
- Navegação rápida no navegador entre o formulário de execução, feed ao vivo, artefactos e tarefas recentes
- Navegador de diretórios integrado para selecionar caminhos de destino (ciente do SO: Windows, macOS, Linux / Docker)
Nos bastidores, a CLI continua a ser a fonte de verdade - é ela que faz toda a análise e gera todas as saídas HTML / PDF / JSON. A interface Web executa uma tarefa ativa de cada vez e tira instantâneos das saídas de cada tarefa concluída para `runtime/webui/jobs/<job-id>/artifacts/`, para que relatórios anteriores permaneçam acessíveis.
### Executar a CLI no Docker
Também não precisa de um ambiente Python local para usar a CLI - está disponível como um serviço Compose próprio, construído a partir da mesma imagem:```bash
docker compose run --rm cli -h
docker compose run --rm cli -r auto -t /scan-targets/path/to/source
O que há na imagem
- Backend FastAPI + frontend Web UI
- A CLI completa do Daksh SCRA, como um serviço separado
- Playwright Chromium, para geração de PDF
- Volumes persistentes
reports/eruntime/ - Montagens de caminhos do host para que as varreduras possam acessar as árvores de origem de dentro do contêiner
Pontos de montagem principais:
| Montagem | Caminho dentro do contêiner |
|---|---|
| Origem do projeto | /app |
| Raiz de varredura padrão | /scan-targets |
| Aliases de unidades do host | /host, /host/c, /host/d |
| Montagens WSL | /mnt, /run/desktop/mnt/host |
Variáveis de ambiente (configure em .env):
| Variável | Descrição |
|---|---|
DAKSH_PORT | Porta da Web UI (padrão: 8080) |
DAKSH_SCAN_ROOT | Diretório de destino padrão dentro do contêiner |
DAKSH_HOST_SOURCE | Caminho do host a ser montado como /scan-targets (padrão: /tmp) |
DAKSH_HOST_MOUNT | Raiz de montagem adicional do host |
DAKSH_HOST_C | Caminho da unidade C: do Windows (WSL) |
DAKSH_HOST_D | Caminho da unidade D: do Windows (WSL) |
DAKSH_DESKTOP_MOUNT | Caminho de montagem da área de trabalho do WSL |
DAKSH_BROWSE_ROOTS | Substituir raízes do navegador de diretórios (separadas por vírgula) |
DAKSH_ADMIN_USERNAME | Nome de usuário admin inicial (padrão: admin) |
DAKSH_ADMIN_PASSWORD | Senha admin inicial — altamente recomendado defini-la explicitamente |
Copie .env.example para .env e defina os caminhos e credenciais para sua máquina antes de executar o Docker.
Configuração da CLI
Prefere executar o Daksh SCRA diretamente com Python? Veja como configurá-lo localmente.
Pré-requisitos
- Python 3.8+
- Todas as bibliotecas listadas em
requirements.txt
1. Baixar o Daksh SCRA```bash
git clone https://github.com/coffeeandsecurity/DakshSCRA.git
Ou descarregue o zip mais recente de [https://github.com/coffeeandsecurity/DakshSCRA](https://github.com/coffeeandsecurity/DakshSCRA) e descompacte-o.
### 2. Configurar um Ambiente Virtual
> 💡 O ambiente virtual pode ser criado em qualquer diretório - não precisa de estar dentro da pasta DakshSCRA.
**Opção A: Configuração num único passo (recomendada)**```bash
python setup_env.py
Este script cria o ambiente virtual, instala todas as dependências e instala o navegador Chromium do Playwright (necessário para exportação de PDF).
Opção B: Configuração 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
Em seguida, instale as dependências:```bash cd path/to/DakshSCRA pip install -r requirements.txt playwright install chromium
---
## Utilização da CLI
Use `python` dentro de um ambiente virtual, ou `python3` fora de um.
### Opções da Linha 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]
| Opção | Descrição |
|---|---|
-r RULES | Regras da plataforma (ex.: php, java, php,java) ou auto para detecção automática |
-f FILE_TYPES | Substituir os tipos de arquivo padrão para a varredura |
-v | Nível de verbosidade (-v, -vv, -vvv) |
-t TARGET_DIR | Diretório do código-fonte alvo |
-l {R,RF} | Listar regras da plataforma + frameworks [R] ou incluir tipos de arquivo [RF] |
--recon | Executar reconhecimento (detecção de plataforma / framework / linguagem) |
--rs, --recon-strict | Reconhecimento estrito: apenas detecções de alta confiança (usar com --recon) |
--estimate | Estimar o esforço de revisão de código com base no tamanho do código-fonte |
-rpt, --report FORMATS | Formatos de relatório: html, pdf ou html,pdf (padrão: html) |
--pdf-from-json | Gerar relatório(s) PDF a partir de saídas JSON existentes sem nova varredura |
--json-input-dir PATH | Diretório de relatórios JSON (padrão: ./reports/data) |
--pdf-output PATH | Caminho único de saída do PDF (padrão: ./reports/scan/pdf/report.pdf) |
--pdf-multi-dir PATH | Diretório de saída do PDF multi-arquivo (padrão: ./reports/scan/pdf/multi-file) |
--pdf-single-only | Gerar apenas o PDF único combinado; pular o conjunto multi-arquivo por plataforma |
--skip-analysis | Desabilitar o estágio de análise nesta execução |
--loc | Contar linhas efetivas de código |
--baseline-file PATH | Arquivo de linha de base de supressão (JSON) |
--baseline-generate | Gerar linha de base de supressão a partir dos achados atuais |
--no-baseline | Desabilitar a supressão por linha de base nesta execução |
--review-config PATH | Arquivo de triagem de achados (JSON); suprimir falsos positivos já revisados dos relatórios |
--resume-scan | Retomar uma varredura interrompida anteriormente a partir do arquivo de estado |
--state-file PATH | Caminho personalizado do arquivo de estado / checkpoint da varredura |
--no-state | Desabilitar o checkpointing de estado da varredura nesta execução |
--state | Forçar a ativação do checkpointing de estado da varredura nesta execução |
Exemplo de Uso
-f(tipos de arquivo) é opcional. Se não for especificado, o DakshSCRA usa os tipos de arquivo padrão para a(s) plataforma(s) selecionada(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
### Regras e Frameworks de Plataforma Suportados```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 e frameworks atualmente suportados:
| 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 obter as plataformas e frameworks mais recentes suportados, execute sempre:```bash python dakshscra.py -l R
---
## Referência de Configuração
### `config/tool.yaml`
Os padrões de tempo de execução do Daksh SCRA são controlados por meio 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
Opções de configuração do analisador:
analysis.run_by_defaulttrue: o analisador é executado automaticamente durante a verificaçãofalse: o analisador fica desabilitado, a menos que seja reativado na configuração ou via CLI
analysis.include_frameworkstrue: inclui entradas do analisador em nível de framework onde a detecção de framework existefalse: apenas a saída do analisador em nível de plataforma
analysis.report_themehacker_mode: tema de analisador moderno escuro de alto contraste (padrão)professional_mode: tema de analisador moderno claroboth: gera ambas as variantes de tema lado a lado
Criação de Regras RDL
RDL (Rule Description Language) é a camada de lógica de regras externalizada do DakshSCRA. Na arquitetura atual:
- As regras XML permanecem como o inventário de regras e carregam metadados como
name,regex, descrições escan_configopcional. - A lógica RDL é executada por
core/rdl_engine.py. - Os arquivos de lógica de regras ficam em
rules/scanning/logic/...e são referenciados a partir do XML usando<rdl_ref>. - Os valores de
rdl_refsão resolvidos em relação arules/scanning/, por exemplo:logic/php/core/some_rule.rdl->rules/scanning/logic/php/core/some_rule.rdl - Os resultados da lógica são exportados para o JSON do relatório como metadados, como
logic_engine,logic_source,logic_reason,logic_trace,logic_consulted_fileselogic_outcome.
A forma inline <rdl> mais antiga não é mais a arquitetura ativa e não deve ser usada para novas regras.
Arquitetura RDL em resumo```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
#### Sequência de digitalização
Para uma regra de origem, o DakshSCRA avalia a lógica nesta ordem:
1. O Recon seleciona plataformas e frameworks correspondentes.
2. A regra XML é carregada de `rules/scanning/platform/...`.
3. `regex` encontra linhas candidatas ou correspondências de arquivo inteiro quando presente.
4. `exclude` remove ruídos óbvios para essa regra, se presente.
5. O arquivo `.rdl` externo de `rdl_ref` é avaliado em relação ao texto do arquivo atual, ao caminho do arquivo atual e à raiz do projeto.
6. Se o script RDL passar, o DakshSCRA mantém a descoberta e mescla os metadados de lógica exportados na saída do relatório.
7. Se o script RDL falhar, a correspondência é suprimida com o motivo da falha do RDL e os metadados de rastreamento de decisão.
Para regras de caminho de arquivo em `filepaths.xml`, o mesmo modelo `rdl_ref` se aplica, mas o sujeito da correspondência é
o caminho relativo normalizado em vez do texto do código-fonte. Nesse modo, o RDL recebe a string do caminho relativo
como o texto do arquivo atual e o contexto do caminho.
#### Estrutura atual da regra```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>
Estrutura atual do `.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.
#### Layout atual```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 execução
WHEN PRESENT,WHEN MISSINGeWHEN CURRENT_FILE_MATCHESavaliam o texto do arquivo atual.WHEN FILE_NAME_ISeWHEN FILE_PATH_MATCHESavaliam o contexto do caminho do arquivo atual.WHEN EXPRsuporta lógica booleana sobre os predicadosPRESENT:,MISSING:eEXISTS:.OBSERVE PROJECT_HAS_GLOB ... AS ...não bloqueia o achado; ele registra arquivos de projeto relacionados nos metadados de rastreamento.REPORT AS,REASON,FAIL_REASONeTRACEcontrolam os metadados de relatório exportados.- Tokens de regex podem ser escritos como padrões brutos ou como
/padrão/flags, com suporte ai,mes.
Comandos RDL suportados
| Comando | Comportamento | Uso típico |
|---|---|---|
WHEN PRESENT <regex> | Exige que um padrão exista no texto do arquivo atual | Exigir uma API arriscada ou campo sensível co-ocorrente |
WHEN MISSING <regex> | Exige que um padrão esteja ausente do texto do arquivo atual | Suprimir quando a mitigação já existe |
WHEN EXPR <expr> | Avalia expressões booleanas usando PRESENT: / MISSING: / EXISTS: com &&, ` | |
WHEN CURRENT_FILE_MATCHES <regex> | Corresponde ao texto completo do arquivo atual | Reavaliar condições complexas de arquivo inteiro |
WHEN FILE_NAME_IS <nome> | Exige que o nome do arquivo atual corresponda exatamente | Limitar regras de plist / manifest / config |
WHEN FILE_PATH_MATCHES <glob> | Exige que o caminho relativo atual corresponda a um glob | Restringir regras de caminho de framework/config |
UNLESS CURRENT_FILE_MATCHES <regex> | Falha quando o arquivo inteiro corresponde a um padrão de exclusão | Bloquear casos estruturais conhecidos como seguros |
OBSERVE PROJECT_HAS_GLOB <glob> AS <rótulo> | Registra arquivos de projeto relacionados nos metadados de rastreamento | Expor arquivos de configuração ou complementares de suporte |
REPORT AS <resultado> | Define o resultado da regra, geralmente area_of_interest | Resultados explícitos à prova de futuro |
REASON <texto> | Motivo exibido quando a regra passa | Explicar por que o achado permaneceu visível |
FAIL_REASON <texto> | Motivo exibido quando a regra suprime uma correspondência | Explicar por que o hit foi filtrado |
TRACE <texto> | Adicionar linhas de rastreamento de depuração/decisão | Suporte a migração/depuração |
Expressões booleanas em WHEN EXPR suportam:
PRESENT:<regex>MISSING:<regex>EXISTS:<regex>&&,||,!e parênteses
Exemplo 1 - Portão de injeção SQL em PHP
Regra 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.
Exemplo 2 - Regra de manifesto Android com verificações cientes de arquivos
Regra 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.
Exemplo 3 - Regra de área de interesse por caminho de arquivo
Regra 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.
Orientações de autoria
- Mantenha
regexamplo o suficiente para capturar candidatos e, em seguida, use RDL para filtrar o contexto. - Prefira
rdl_refpara toda a lógica de regras e mantenha o arquivo.rdlao lado da árvore de lógica apropriada da plataforma/framework. - Não adicione novos blocos inline
<rdl>. - Use
WHEN PRESENT/WHEN MISSINGpara portas simples eWHEN EXPRapenas quando a lógica for genuinamente booleana. - Coloque o raciocínio voltado ao revisor em
REASONe as explicações de supressão emFAIL_REASON. - Trate
PRESENTeMISSINGcomo verificações de arquivo inteiro. Uma mitigação em qualquer lugar do arquivo pode suprimir todas as correspondências desse arquivo. - Use
OBSERVE PROJECT_HAS_GLOBpara enriquecer descobertas com contexto do projeto, não como uma porta de aprovação/reprovação. - Mantenha os caminhos
logic/...estáveis e com escopo de plataforma para que as regras XML permaneçam enxutas e a camada de lógica continue reutilizável.
Estrutura de saída do relatório
Todas as saídas são gravadas no diretório 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
Os ficheiros de runtime (estado da análise, registos, inventário) são gravados em `runtime/`.
Ao executar através da interface Web, os resultados de cada tarefa são adicionalmente capturados em `runtime/webui/jobs/<job-id>/artifacts/` (consulte [Interface Web (Docker)](#web-ui-docker)).
---
## Autor
| | |
|---|---|
| Website | [coffeeandsecurity.com](https://www.coffeeandsecurity.com) |
| Email | [email protected] |
| Twitter / X | [@coffeensecurity](https://x.com/coffeensecurity) |
| Fonte | [github.com/coffeeandsecurity/DakshSCRA](https://github.com/coffeeandsecurity/DakshSCRA) |
| Licença | GNU General Public License v3.0 (GPL-3.0) |
Se o DakshSCRA ajudou a sua equipa a poupar tempo, esforço ou custos significativos, reduziu a dependência de ferramentas comerciais dispendiosas, melhorou a cobertura das revisões ou tornou a revisão de código mais estruturada e eficaz, não hesite em contactar e partilhar a sua experiência. Estou sempre aberto a feedback ponderado e conversas interessantes.
Encontrou um bug ou quer contribuir? Abra uma issue ou pull request no GitHub.