Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
DakshSCRA — Инструмент статического анализа кода с учётом фреймворков для автоматизированного ревью исходного кода, включающий платформозависимые правила, анализ потоков данных (taint analysis), оценку трудозатрат и базовые линии подавления предупреждений. | Kitploit
Инструменты/GitHubGitHub/coffeeandsecurity/dakshscra
Статический анализСканеры уязвимостейСтатический анализ кода (SAST)Анализ уязвимостейАнализ КодаВеб-безопасностьТестирование на ПроникновениеDevSecOpsМобильная безопасность
Обучение и Образование
GitHubcoffeeandsecurity/dakshscra

DakshSCRA

Инструмент статического анализа кода с учётом фреймворков для автоматизированного ревью исходного кода, включающий платформозависимые правила, анализ потоков данных (taint analysis), оценку трудозатрат и базовые линии подавления предупреждений.

Репозиторий
4579016 дней назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Daksh SCRA (Source Code Review Assist)```

Author:

  • Debasis Mohanty ([email protected])
  • Twitter / X: @coffeensecurity
  • www.coffeeandsecurity.com
root@kitploit:~
## О Daksh SCRA

Daksh SCRA (Source Code Review Assist) создан для повышения эффективности процесса анализа исходного кода, обеспечивая хорошо структурированный и организованный подход для рецензентов кода.

Вместо того чтобы без разбора помечать всё как потенциальную проблему, Daksh SCRA способствует вдумчивому анализу, побуждая к исследованию и подтверждению потенциальных проблем. Такой подход снижает суету с пометкой каждого потенциального замечания как ошибки, сокращая путаницу и потерю времени на ложные срабатывания.

### Дебют

Daksh SCRA был впервые представлен во время обучающей сессии по анализу исходного кода на Black Hat USA 2022 (6–9 августа), где он был ненавязчиво показан конкретной аудитории. Его официальный публичный дебют состоялся на Black Hat USA 2023 в Лас-Вегасе.

## Возможности и функции

- **Выявление областей интереса в исходном коде:** Поощряет целенаправленное исследование и подтверждение, а не бездумную пометку всего как ошибки.
- **Выявление областей интереса в путях файлов (первое в мире):** Распознаёт шаблоны в путях файлов, чтобы определить релевантные разделы для анализа.
- **Разведка на уровне ПО для определения используемых технологий:** Определяет технологии проекта, позволяя рецензентам кода проводить точные сканирования с соответствующими правилами.
- **Автоматизированная научная оценка трудозатрат на анализ кода (первое в мире):** Предоставляет измеримый подход для оценки усилий, необходимых для анализа кода.
- **Сканирование с учётом фреймворков:** Автоматически применяет правила, специфичные для фреймворка, когда фреймворк проекта обнаружен.
- **Отчёты по анализу потоков данных (Taint Analysis):** HTML-отчёты о потоках данных для каждой платформы с темами режима хакера и профессионального режима.
- **RDL (язык описания правил):** Внешняя логика правил, на которую ссылаются через `rdl_ref` и которая выполняется конвейером `core/rdl_engine.py` — поддерживает гейты с учётом файлов, булевы выражения, наблюдения проекта и экспортируемые метаданные логики в отчётах.
- **Состояние сканирования / возобновление:** Контрольные точки для длительных сканирований и возобновление после прерывания.
- **Базовый уровень подавления:** Генерация и применение базового уровня известных ложных срабатываний для их подавления в будущих отчётах.
- **Веб-интерфейс:** Запуск сканирования через браузер с лентой консоли в реальном времени и браузером артефактов заданий.

> Активные улучшения продолжаются. В предстоящих выпусках запланировано множество новых функций и улучшений.

Не стесняйтесь вносить вклад в обновление или добавление новых правил и будущую разработку.

Если вы обнаружите какие-либо ошибки, сообщите о них на [[email protected]](mailto:[email protected]).

Подробная документация: [https://dakshlabs.com/#docs](https://dakshlabs.com/#docs)

---

## Начало работы

Есть два способа запустить Daksh SCRA — выберите тот, который подходит вашему рабочему процессу:

| | Лучше всего подходит для | Перейти к |
|---|---|---|
| 🌐 **Веб-интерфейс (Docker)** | Самый простой способ начать — одна команда, панель в браузере, живой прогресс сканирования и браузер отчётов/артефактов. Рекомендуется для большинства пользователей. | [Веб-интерфейс (Docker)](#web-ui-docker) |
| 💻 **CLI (Python)** | Скрипты, CI-конвейеры или запуск сканирований без Docker. | [Настройка CLI](#cli-setup) |

Оба пути используют один и тот же движок сканирования — веб-интерфейс является браузерным фронтендом поверх того же CLI, поэтому результаты идентичны в любом случае.

---

## Веб-интерфейс (Docker)

Самый быстрый способ запустить Daksh SCRA — через браузерный веб-интерфейс, запускаемый одной командой Docker Compose. Он предоставляет запуск сканирования, живую ленту консоли и просматриваемую историю прошлых отчётов, без необходимости локального окружения Python.

Настройка Docker запускает веб-интерфейс и CLI как независимые сервисы, собранные из одного образа, поэтому вы можете использовать любой из них (или оба) из одного контейнера.

### Запуск веб-интерфейса

Режим переднего плана (логи выводятся в ваш терминал):```bash
docker compose up --build

Откреплённый / фоновый режим:```bash docker compose up --build -d

root@kitploit:~
Затем откройте [http://localhost:8080](http://localhost:8080).

Чтобы использовать другой порт:```bash
DAKSH_PORT=9090 docker compose up

Остановите стек с помощью:```bash docker compose down

root@kitploit:~
### Вход в систему

Веб-интерфейс требует учетную запись. При первом запуске создается начальная учетная запись администратора из `DAKSH_ADMIN_USERNAME` / `DAKSH_ADMIN_PASSWORD` (задайте их в `.env`); если `DAKSH_ADMIN_PASSWORD` оставить незаданным, будет сгенерирован случайный пароль и однократно выведен в журнал запуска API — сохраните его, так как восстановить его впоследствии невозможно.

При первом входе вам потребуется задать собственный пароль (и, при желании, имя пользователя). Учетная запись администратора может создавать дополнительные учетные записи через конечную точку API `POST /api/v1/auth/users` (выделенного интерфейса для этого пока нет). Полный список настроек, связанных с аутентификацией (время жизни сессии, безопасность cookie, CORS), см. в `.env.example`.

### Что вы получаете

- Адаптивный конструктор команд для режимов scan, recon, estimate, recon+estimate, list и PDF-from-JSON
- Лента консоли в реальном времени и живой прогресс по этапам во время выполнения
- Снимки артефактов для каждого задания для выходных данных HTML / PDF / JSON
- Быстрая навигация в браузере по форме запуска, живой ленте, артефактам и недавним заданиям
- Встроенный обозреватель каталогов для выбора целевых путей (с учетом ОС: Windows, macOS, Linux / Docker)

Под капотом CLI остается источником истины — он выполняет все сканирование и генерирует все выходные данные HTML / PDF / JSON. Веб-интерфейс запускает одно активное задание за раз и сохраняет снимки выходных данных каждого завершенного задания в `runtime/webui/jobs/<job-id>/artifacts/`, чтобы прошлые отчеты оставались доступными.

### Запуск CLI в Docker

Для использования CLI вам также не нужна локальная среда Python — он доступен как отдельный сервис Compose, собранный из того же образа:```bash
docker compose run --rm cli -h
docker compose run --rm cli -r auto -t /scan-targets/path/to/source

Что внутри образа

  • Бэкенд FastAPI + фронтенд Web UI
  • Полный CLI Daksh SCRA как отдельный сервис
  • Playwright Chromium для генерации PDF
  • Постоянные тома reports/ и runtime/
  • Монтирование путей хоста, чтобы сканирование могло получать доступ к исходным деревьям изнутри контейнера

Ключевые точки монтирования:

Точка монтированияПуть внутри контейнера
Исходный код проекта/app
Корень сканирования по умолчанию/scan-targets
Псевдонимы дисков хоста/host, /host/c, /host/d
Монтирования WSL/mnt, /run/desktop/mnt/host

Переменные окружения (настраиваются в .env):

ПеременнаяОписание
DAKSH_PORTПорт Web UI (по умолчанию: 8080)
DAKSH_SCAN_ROOTКаталог назначения по умолчанию внутри контейнера
DAKSH_HOST_SOURCEПуть на хосте для монтирования как /scan-targets (по умолчанию: /tmp)
DAKSH_HOST_MOUNTДополнительный корень монтирования хоста
DAKSH_HOST_CПуть к диску C: Windows (WSL)
DAKSH_HOST_DПуть к диску D: Windows (WSL)
DAKSH_DESKTOP_MOUNTПуть монтирования рабочего стола WSL
DAKSH_BROWSE_ROOTSПереопределение корней браузера каталогов (через запятую)
DAKSH_ADMIN_USERNAMEИмя администратора по умолчанию (по умолчанию: admin)
DAKSH_ADMIN_PASSWORDПароль администратора по умолчанию — настоятельно рекомендуется задать явно

Скопируйте .env.example в .env и задайте пути и учётные данные для вашей машины перед запуском Docker.


Настройка CLI

Предпочитаете запускать Daksh SCRA напрямую через Python? Вот как настроить его локально.

Предварительные требования

  • Python 3.8+
  • Все библиотеки, перечисленные в requirements.txt

1. Загрузка Daksh SCRA```bash

git clone https://github.com/coffeeandsecurity/DakshSCRA.git

root@kitploit:~
Или скачайте последний zip-архив с [https://github.com/coffeeandsecurity/DakshSCRA](https://github.com/coffeeandsecurity/DakshSCRA) и распакуйте его.

### 2. Настройка виртуального окружения

> 💡 Виртуальное окружение можно создать в любой директории — оно не обязательно должно находиться внутри папки DakshSCRA.

**Вариант A: Настройка в один шаг (рекомендуется)**```bash
python setup_env.py

Этот скрипт создаёт виртуальное окружение, устанавливает все зависимости и устанавливает браузер Chromium для Playwright (требуется для экспорта в PDF).

Вариант B: Ручная настройка

Windows:```bash python -m venv daksh-env .\daksh-env\Scripts\activate

root@kitploit:~
macOS / Linux:```bash
python3 -m venv daksh-env
source daksh-env/bin/activate

Затем установите зависимости:```bash cd path/to/DakshSCRA pip install -r requirements.txt playwright install chromium

root@kitploit:~
---

## Использование CLI

Используйте `python` внутри виртуального окружения или `python3` вне его.

### Параметры командной строки```
usage: dakshscra.py [-h] [-r RULES] [-f FILE_TYPES] [-v] [-t TARGET_DIR]
                    [-l {R,RF}] [--recon] [--rs] [--estimate]
                    [-rpt FORMATS] [--pdf-from-json]
                    [--json-input-dir PATH] [--pdf-output PATH]
                    [--pdf-multi-dir PATH] [--pdf-single-only]
                    [--skip-analysis] [--loc]
                    [--baseline-file PATH] [--baseline-generate] [--no-baseline]
                    [--review-config PATH]
                    [--resume-scan] [--state-file PATH] [--no-state] [--state]
ОпцияОписание
-r RULESПравила платформы (например, php, java, php,java) или auto для автоматического определения
-f FILE_TYPESПереопределить типы файлов по умолчанию для сканирования
-vУровень подробности (-v, -vv, -vvv)
-t TARGET_DIRКаталог исходного кода цели
-l {R,RF}Список правил платформы + фреймворков [R] или с типами файлов [RF]
--reconЗапустить разведку (определение платформы / фреймворка / языка)
--rs, --recon-strictСтрогая разведка: только высоконадёжные определения (используйте с --recon)
--estimateОценить трудозатраты на проверку кода на основе размера кодовой базы
-rpt, --report FORMATSФорматы отчётов: html, pdf или html,pdf (по умолчанию: html)
--pdf-from-jsonСоздать PDF-отчёт(ы) из существующих JSON-выводов без повторного сканирования
--json-input-dir PATHКаталог JSON-отчётов (по умолчанию: ./reports/data)
--pdf-output PATHПуть для единого PDF-вывода (по умолчанию: ./reports/scan/pdf/report.pdf)
--pdf-multi-dir PATHКаталог для многофайловых PDF-выводов (по умолчанию: ./reports/scan/pdf/multi-file)
--pdf-single-onlyСоздавать только объединённый однофайловый PDF; пропустить многофайловый набор по платформам
--skip-analysis

Пример использования

-f (типы файлов) необязателен. Если не указан, DakshSCRA использует типы файлов по умолчанию для выбранной(ых) платформы(форм).```bash

Single platform scan

python dakshscra.py -r php -t /path/to/source

Multiple platforms

python dakshscra.py -r php,java,cpp -t /path/to/source

Auto-detect platform and apply matching rules

python dakshscra.py -r auto -t /path/to/source

Override filetypes

python dakshscra.py -r php -f dotnet -t /path/to/source

Reconnaissance only (no scanning)

python dakshscra.py --recon -t /path/to/source

Reconnaissance + scanning

python dakshscra.py --recon -r php -t /path/to/source

Strict recon (high-confidence detections only)

python dakshscra.py --recon --rs -t /path/to/source

Effort estimation

python dakshscra.py --estimate -t /path/to/source

Scan with HTML + PDF report output

python dakshscra.py -r auto -t /path/to/source -rpt html,pdf

Verbosity levels

python dakshscra.py -r php -v -t /path/to/source # default python dakshscra.py -r php -vvv -t /path/to/source # show all pattern checks

Generate suppression baseline from current findings

python dakshscra.py -r auto -t /path/to/source --baseline-generate

Apply suppression baseline (suppress known FPs)

python dakshscra.py -r auto -t /path/to/source --baseline-file config/suppressions.json

Disable baseline for this run

python dakshscra.py -r auto -t /path/to/source --no-baseline

Apply findings triage / review config

python dakshscra.py -r auto -t /path/to/source --review-config config/review.json

Scan with checkpoint state enabled

python dakshscra.py -r auto -t /path/to/source --state

Resume an interrupted scan

python dakshscra.py -r auto -t /path/to/source --resume-scan

Resume with a custom state file

python dakshscra.py -r auto -t /path/to/source --resume-scan --state-file runtime/scan_state.json

Generate PDF from existing JSON outputs (no re-scan)

python dakshscra.py --pdf-from-json

Generate PDF from a custom JSON directory

python dakshscra.py --pdf-from-json --json-input-dir ./custom/reports/data

Custom output paths for PDF

python dakshscra.py --pdf-from-json --pdf-output ./reports/scan/pdf/custom.pdf --pdf-multi-dir ./reports/scan/pdf/multi-file

Single combined PDF only (skip per-platform set)

python dakshscra.py --pdf-from-json --pdf-single-only

root@kitploit:~
### Поддерживаемые правила платформ и фреймворки```bash
python dakshscra.py -l R    # List platform rules and framework mappings
python dakshscra.py -l RF   # List platform rules, framework mappings, and filetypes

Текущие поддерживаемые платформы и сопоставления фреймворков:

ПлатформаФреймворки
dotnetaspnetcore, entityframework
phpcodeigniter, drupal, laravel, symfony, wordpress
javahibernate, spring, springboot
javascriptangular, express, nestjs, nextjs, react, vue
kotlinktor, springkotlin
pythondjango, fastapi, flask
goecho, fiber, gin
cfreertos
cppboost, qt
androidcordova-android, flutter-android, ionic-android, jetpack, nativescript-android, reactnative-android, xamarin-android
ioscordova-ios, flutter-ios, ionic-ios, nativescript-ios, reactnative-ios, swiftui, uikit, xamarin-ios
reactnativereactnative
flutterflutter
xamarinxamarin
ionicionic
nativescriptnativescript
cordovacordova
rubyrails, sinatra
rustactix, axum, rocket
common-

Чтобы получить последние поддерживаемые платформы и фреймворки, всегда запускайте:```bash python dakshscra.py -l R

root@kitploit:~
---

## Справочник по конфигурации

### `config/tool.yaml`

Значения по умолчанию для среды выполнения Daksh SCRA управляются через `config/tool.yaml`.```yaml
state_management:
  enabled: false
  resume_mode: manual
  persist_after_seconds: 300
  persist_interval_seconds: 30
  default_state_file: runtime/scan_state.json
  cleanup_on_success: false

analysis:
  run_by_default: true
  include_frameworks: true
  report_theme: hacker_mode

Параметры конфигурации анализатора:

  • analysis.run_by_default
    • true: анализатор запускается автоматически во время сканирования
    • false: анализатор отключен, если не включен повторно в конфигурации или через CLI
  • analysis.include_frameworks
    • true: включать записи анализатора уровня фреймворков там, где существует определение фреймворка
    • false: только вывод анализатора уровня платформы
  • analysis.report_theme
    • hacker_mode: темная высококонтрастная современная тема анализатора (по умолчанию)
    • professional_mode: светлая современная тема анализатора
    • both: генерировать оба варианта темы рядом

Создание правил RDL

RDL (Rule Description Language) — это внешний слой логики правил DakshSCRA. В текущей архитектуре:

  • XML-правила остаются реестром правил и содержат метаданные, такие как name, regex, описания и необязательный scan_config.
  • Логика RDL выполняется через core/rdl_engine.py.
  • Файлы логики правил находятся в rules/scanning/logic/... и ссылаются из XML с помощью <rdl_ref>.
  • Значения rdl_ref разрешаются относительно rules/scanning/, например: logic/php/core/some_rule.rdl -> rules/scanning/logic/php/core/some_rule.rdl
  • Результаты логики экспортируются в JSON-отчет как метаданные, такие как logic_engine, logic_source, logic_reason, logic_trace, logic_consulted_files и logic_outcome.

Более старая встроенная форма <rdl> больше не является активной архитектурой и не должна использоваться для новых правил.

Архитектура RDL с первого взгляда```text

XML rule -> regex / exclude / scan_config / descriptions -> rdl_ref -> rules/scanning/logic///.rdl -> core/rdl_engine.py -> pass / fail -> reason / fail_reason -> trace / consulted_files / outcome

root@kitploit:~
#### Последовательность сканирования

Для исходного правила DakshSCRA оценивает логику в следующем порядке:

1. Recon выбирает соответствующие платформы и фреймворки.
2. XML-правило загружается из `rules/scanning/platform/...`.
3. `regex` находит строки-кандидаты или совпадения по всему файлу, если они присутствуют.
4. `exclude` удаляет очевидный шум для этого правила, если он присутствует.
5. Внешний файл `.rdl` из `rdl_ref` оценивается относительно текущего текста файла, текущего пути к файлу и корня проекта.
6. Если RDL-скрипт проходит, DakshSCRA сохраняет находку и объединяет экспортированные метаданные логики в вывод отчёта.
7. Если RDL-скрипт не проходит, совпадение подавляется с указанием причины отказа RDL и метаданных трассировки решения.

Для правил путей к файлам в `filepaths.xml` применяется та же модель `rdl_ref`, но объектом сопоставления является
нормализованный относительный путь вместо текста исходного кода. В этом режиме RDL получает строку относительного пути
как текущий текст файла и контекст пути.

#### Текущая структура правил```xml
<rule>
  <name>Rule Name</name>
  <regex><![CDATA[regex_to_match]]></regex>
  <rdl_ref>logic/common/core/insecure_sql_query_unsafe_string_concatenation.rdl</rdl_ref>
  <exclude><![CDATA[pattern_to_exclude_lines]]></exclude>  <!-- optional -->
  <scan_config>...</scan_config>                           <!-- optional -->
  <rule_desc>Short description of what the rule detects.</rule_desc>
  <vuln_desc>Why the pattern matters.</vuln_desc>
  <developer>Fix guidance for developers.</developer>
  <reviewer>Manual confirmation guidance for reviewers.</reviewer>
</rule>

Текущая структура `.rdl````text

VERSION 1 WHEN PRESENT /\b(?:mysql_query|mysqli_query|->query)\s*\(/i WHEN EXPR PRESENT:\$_(GET|POST|REQUEST|COOKIE) && MISSING:\b(?:prepare|bindParam|bindValue|PDO::prepare)\b REPORT AS area_of_interest REASON SQL query execution appears reachable without parameterisation in this file. FAIL_REASON Matching query API was found, but the file also contains prepared-statement indicators. TRACE SQLi gate: input source present and mitigation missing.

root@kitploit:~
#### Текущая раскладка```text
rules/
└── scanning/
    ├── platform/
    │   ├── php/php.xml
    │   ├── java/java.xml
    │   └── ...
    └── logic/
        ├── common/core/
        ├── php/core/
        ├── php/framework/laravel/
        ├── mobile/android/core/
        ├── filepaths/core/
        └── ...

Семантика выполнения

  • WHEN PRESENT, WHEN MISSING и WHEN CURRENT_FILE_MATCHES оцениваются относительно текста текущего файла.
  • WHEN FILE_NAME_IS и WHEN FILE_PATH_MATCHES оцениваются относительно контекста пути текущего файла.
  • WHEN EXPR поддерживает булеву логику над предикатами PRESENT:, MISSING: и EXISTS:.
  • OBSERVE PROJECT_HAS_GLOB ... AS ... не блокирует срабатывание правила; он записывает связанные файлы проекта в метаданные трассировки.
  • REPORT AS, REASON, FAIL_REASON и TRACE управляют экспортируемыми метаданными отчёта.
  • Токены регулярных выражений могут записываться либо как сырые шаблоны, либо как /pattern/flags, с поддержкой i, m и s.

Поддерживаемые команды RDL

КомандаПоведениеТипичное использование
WHEN PRESENT <regex>Требовать наличие шаблона в тексте текущего файлаТребовать сопутствующий рискованный API или чувствительное поле
WHEN MISSING <regex>Требовать отсутствие шаблона в тексте текущего файлаПодавлять, когда смягчение уже существует
WHEN EXPR <expr>Вычислять булевы выражения с помощью PRESENT: / MISSING: / EXISTS: с &&, `
WHEN CURRENT_FILE_MATCHES <regex>Сопоставлять с полным текстом текущего файлаПовторно проверять сложные условия для всего файла
WHEN FILE_NAME_IS <name>Требовать точное совпадение имени текущего файлаОграничивать правила для plist / manifest / config
WHEN FILE_PATH_MATCHES <glob>Требовать соответствие текущего относительного пути glob-шаблонуСужать правила для путей фреймворков/конфигураций
UNLESS CURRENT_FILE_MATCHES <regex>Срабатывать как ошибка, когда весь файл соответствует шаблону исключенияБлокировать заведомо безопасные структурные случаи
OBSERVE PROJECT_HAS_GLOB <glob> AS <label>Записывать связанные файлы проекта в метаданные трассировкиВыявлять вспомогательные конфигурации или сопутствующие файлы
REPORT AS <outcome>Задавать исход правила, обычно area_of_interestЯвные исходы для будущей совместимости
REASON <text>Причина, показываемая при прохождении правилаОбъяснять, почему срабатывание осталось видимым
FAIL_REASON <text>Причина, показываемая при подавлении совпадения правиломОбъяснять, почему срабатывание было отфильтровано
TRACE <text>Добавлять строки отладки/трассировки решенийПоддержка миграции/отладки

Булевы выражения в WHEN EXPR поддерживают:

  • PRESENT:<regex>
  • MISSING:<regex>
  • EXISTS:<regex>
  • &&, ||, ! и круглые скобки

Пример 1 - Условие для SQL-инъекций в PHP

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>

root@kitploit:~
Внешний RDL:```text
VERSION 1
WHEN PRESENT /\b(?:mysql_query|mysqli_query|->query)\s*\(/i
WHEN EXPR PRESENT:\$_(GET|POST|REQUEST|COOKIE) && MISSING:\b(?:prepare|bindParam|bindValue|PDO::prepare)\b
REPORT AS area_of_interest
REASON Query execution appears to rely on direct input without parameterisation.
FAIL_REASON Query API matched, but parameterised query indicators were also found in the file.

Пример 2 — правило манифеста Android с проверками, учитывающими файлы

XML-правило:```xml Exported Components Without Permission activity|service|receiver|provider)\s[^>]*android:name="(?P[^"]+)"[^>]*android:exported="true"[^>]*(?:/>|>)]]> <rdl_ref>logic/mobile/android/core/exported_components.rdl</rdl_ref> <scan_config>...</scan_config>

root@kitploit:~
Внешний RDL:```text
VERSION 1
WHEN FILE_NAME_IS AndroidManifest.xml
WHEN CURRENT_FILE_MATCHES /android:exported\s*=\s*"true"/i
WHEN MISSING /android:permission\s*=\s*"/i
REPORT AS area_of_interest
REASON Exported component appears reachable without a permission guard.

Пример 3 — Правило области интереса по пути к файлу

XML-правило:```xml Admin Section File Path <rdl_ref>logic/filepaths/core/admin_section.rdl</rdl_ref>

root@kitploit:~
Внешний RDL:```text
VERSION 1
WHEN CURRENT_FILE_MATCHES /(^|\/)(admin|administrator|root)(\/|$)/i
UNLESS CURRENT_FILE_MATCHES /(^|\/)(tests?|docs?|samples?|examples?)(\/|$)/i
REPORT AS area_of_interest
REASON File path suggests privileged application functionality.
FAIL_REASON Path matched an excluded documentation or sample location.

Рекомендации по написанию правил

  • Держите regex достаточно широким, чтобы находить кандидатов, а затем используйте RDL для фильтрации контекста.
  • Отдавайте предпочтение rdl_ref для всей логики правил и храните файл .rdl рядом с соответствующим деревом логики платформы/фреймворка.
  • Не добавляйте новые встроенные блоки <rdl>.
  • Используйте WHEN PRESENT / WHEN MISSING для простых проверок и WHEN EXPR только когда логика действительно булева.
  • Помещайте обоснования для рецензентов в REASON, а пояснения для подавления — в FAIL_REASON.
  • Считайте PRESENT и MISSING проверками всего файла. Любая мера смягчения в любом месте файла может подавить все совпадения из этого файла.
  • Используйте OBSERVE PROJECT_HAS_GLOB для обогащения результатов контекстом проекта, а не как проверку «пройдено/не пройдено».
  • Держите пути logic/... стабильными и ограниченными платформой, чтобы XML-правила оставались тонкими, а слой логики — переиспользуемым.

Структура вывода отчётов

Все результаты записываются в каталог reports/:``` reports/ ├── scan/ │ ├── html/ │ │ ├── report.html # Single-file HTML scan report │ │ └── multi-file/ # Per-platform HTML report set │ ├── pdf/ │ │ ├── report.pdf # Single-file PDF scan report │ │ └── multi-file/ # Per-platform PDF report set │ ├── recon/ │ │ └── reconnaissance.html # Reconnaissance HTML report │ └── estimate/ │ └── estimation.html # Effort estimation HTML report ├── analysis/ │ └── / │ ├── analysis.html # Taint analysis report (default theme) │ ├── analysis_professional.html # Professional theme (if theme=both) │ ├── analysis_xref.html # Cross-reference report │ └── analysis.json # Structured analysis data └── data/ ├── areas_of_interest.json # AoI findings ├── filepaths_aoi.json # File path AoI findings ├── summary.json # Scan summary ├── recon.json # Recon summary └── analysis.json # Analyzer output

root@kitploit:~
Файлы времени выполнения (состояние сканирования, журналы, инвентаризация) записываются в `runtime/`.

При запуске через веб-интерфейс выходные данные каждого задания дополнительно сохраняются в виде снимков в `runtime/webui/jobs/<job-id>/artifacts/` (см. [Веб-интерфейс (Docker)](#web-ui-docker)).

---

## Автор

| | |
|---|---|
| Веб-сайт | [coffeeandsecurity.com](https://www.coffeeandsecurity.com) |
| Электронная почта | [email protected] |
| Twitter / X | [@coffeensecurity](https://x.com/coffeensecurity) |
| Исходный код | [github.com/coffeeandsecurity/DakshSCRA](https://github.com/coffeeandsecurity/DakshSCRA) |
| Лицензия | GNU General Public License v3.0 (GPL-3.0) |

Если DakshSCRA помог вашей команде сэкономить значительное время, усилия или средства, снизил зависимость от дорогих коммерческих инструментов, улучшил полноту проверок или сделал ревью кода более структурированным и эффективным, не стесняйтесь связаться со мной и поделиться своим опытом. Я всегда открыт для вдумчивых отзывов и интересных бесед.

Нашли ошибку или хотите внести вклад? Откройте issue или pull request на GitHub.
Скачать инструмент
Отключить этап анализа для этого запуска
--locПодсчитать эффективное количество строк кода
--baseline-file PATHФайл базовой линии подавления (JSON)
--baseline-generateСоздать базовую линию подавления из текущих находок
--no-baselineОтключить подавление по базовой линии для этого запуска
--review-config PATHФайл триажа находок (JSON); подавлять ранее проверенные ложные срабатывания из отчётов
--resume-scanВозобновить ранее прерванное сканирование из файла состояния
--state-file PATHПользовательский путь к файлу состояния / контрольной точки сканирования
--no-stateОтключить контрольные точки состояния сканирования для этого запуска
--stateПринудительно включить контрольные точки состояния сканирования для этого запуска