框架感知的静态代码分析工具,用于自动化源代码审查,支持平台特定规则、污点分析、工作量估算和抑制基线。
Author:
- Debasis Mohanty ([email protected])
- Twitter / X: @coffeensecurity
- www.coffeeandsecurity.com
Daksh SCRA(Source Code Review Assist,源代码审查辅助工具)旨在提升源代码审查流程的效率,为代码审查人员提供结构良好、组织有序的方法。
Daksh SCRA 不会不加区分地将所有内容标记为潜在问题,而是倡导深思熟虑的分析,敦促对潜在问题进行调查和确认。这种方法减少了将所有潜在关注点都标记为漏洞的慌乱,减少了因误报而造成的混乱和时间浪费。
Daksh SCRA 最初在 Black Hat USA 2022(8 月 6 日至 9 日)的源代码审查培训课程中推出,当时仅向特定受众低调展示。其正式的公开亮相是在拉斯维加斯举行的 Black Hat USA 2023 上。
DakshSCRA 汇集了用于手动源代码审查的独特能力,涵盖文件路径关注区域、工作量估算、软件侦察、上下文规则和跨文件分析。
| 特性 | 标签 | 重要性 |
|---|---|---|
| 文件路径关注区域 | 世界首创* | 除代码外,还扫描文件和目录名称本身,以标记审查人员经常遗漏的可疑路径,如备份文件、调试端点、配置转储和凭据文件。 |
| 科学的工作量估算 | 世界首创* | 根据代码库规模和项目信号,生成手动审查工作量的量化估算。可配置的假设使项目规划明确且可重复。 |
| 关注区域,而非漏洞标记 | 审查人员掌控 | 呈现值得调查的模式,而不是将每个匹配项都标记为漏洞。上下文规则和抑制证据可减少分类噪音,让审查人员保持掌控。 |
| 软件侦察 | 集成软件侦察 | 在扫描前从文件内容和项目结构中检测语言、框架和基础设施。将技术清单与自动规则选择、语义分析和审查规划相连接。 |
| RDL 条件规则 | 高级条件规则 | 超越简单的正则表达式,支持 PRESENT、MISSING、布尔表达式以及文件/路径条件。RDL v1 记录决策和抑制原因;RDL v2 增加了类型化语义服务和有界跨文件证据。 |
| 高级语义与跨文件分析 | 从零构建 | 使用专门构建的分析,在支持的文件边界之间追踪用户控制的数据从源到汇。高级分析与原始 RDL 于 2026 年 3 月一同发布;RDL v2 将语义规则评估扩展到跨文件。 |
| 平台无关的自动扫描 | 自动多平台 | 使用 -r auto 扫描混合技术项目,无需事先选择单一语言。侦察会自动选择受支持的平台和框架规则。于 2024 年 11 月在 v0.23-beta 中引入。 |
| 应用特定的安全逻辑 | 自定义 RDL 包 | 在可选的自定义 RDL 包中编码应用信任边界、授权决策和业务不变量。项目特定的逻辑与通用扫描规则一同运行。 |
| 交互式文本与图形证据 | 循证追踪 | 在关联的文本和图形视图中追踪记录的源到汇路径。源代码摘录、文件泳道和交接细节使跨文件证据更易于检查。 |
| 审查生命周期与可移植报告 | 审查、恢复与导出 | 保留扫描历史、审查抑制记录,并恢复中断的扫描。通过共享的 CLI 和 Web UI 报告导出 HTML、PDF、可编辑 Word 和 JSON,并在可用时提供离线证据导航。 |
日期标识仓库或版本里程碑;它们并不独立确立全球优先权。“未验证”意味着尚未从所审查的证据中确定版本号。
版本里程碑和对比证据列于上方。
DakshSCRA 在 Black Hat USA 2022 培训期间推出,并在 Black Hat USA 2023 上公开亮相。这些日期描述的是项目的推出时间,而非当前的所有特性。
积极的增强工作正在进行中。多个新特性和改进计划在即将发布的版本中推出。
欢迎为更新或添加新规则以及未来开发做出贡献。
如果您发现任何错误,请报告至 [email protected]。
详细文档:https://dakshlabs.com/#docs
运行 Daksh SCRA 有两种方式——选择适合您工作流程的方式:
| 最适合 | 跳转至 | |
|---|---|---|
| 🌐 Web UI (Docker) | 最简单的入门方式——一条命令、浏览器仪表板、实时扫描进度和报告/工件浏览器。推荐大多数用户使用。 | Web UI (Docker) |
| 💻 CLI (Python) | 脚本编写、CI 流水线,或在不使用 Docker 的情况下运行扫描。 | CLI 设置 |
两种方式运行完全相同的扫描引擎——Web UI 是同一 CLI 之上的浏览器前端,因此无论哪种方式结果都相同。
运行 Daksh SCRA 最快的方式是通过其基于浏览器的 Web UI,使用主机感知的 Docker 启动辅助程序启动。它为您提供扫描启动器、实时控制台输出以及可浏览的历史报告。启动辅助程序需要 Python 3(仅标准库);应用程序及其依赖项在 Docker 中运行。
Docker 设置将 Web UI 和 CLI 作为基于同一镜像构建的独立服务运行,因此您可以从同一容器中使用任一(或两者)。
从 GitHub 下载 Daksh SCRA 后,请先解压 ZIP 归档文件。
在包含 docker-compose.yml 和 dakshscra.py 的解压项目文件夹内打开终端(Windows 上为 PowerShell 或命令提示符)。
请从该文件夹运行以下所有启动和 Docker Compose 命令。
如果您的终端在其他位置打开,请先切换到解压后的文件夹:
cd "path/to/extracted/DakshSCRA-folder"
将示例路径替换为您实际的下载位置和文件夹名称。
如果您改为克隆了仓库,请从其父文件夹运行 cd DakshSCRA。
启动辅助程序会识别 Windows、WSL、Linux 和 macOS,然后以只读方式挂载 主机根目录、可用的 Windows 驱动器以及常用文件夹,之后 再启动容器。请在运行 Docker 的计算机上运行它。
Linux、macOS 或 WSL(前台):
python3 tools/start_webui.py
Windows PowerShell 或命令提示符(前台):
py tools/start_webui.py
要以分离(后台)模式运行,请添加 --detach。启动命令返回后,容器会继续运行,你的终端仍可继续使用。
Linux、macOS 或 WSL(分离模式):
python3 tools/start_webui.py --detach
Windows PowerShell 或命令提示符(分离模式):
py tools/start_webui.py --detach
使用 --dry-run 可在不启动容器的情况下检查检测到的路径。
现有的 .env 路径覆盖会被保留。重新创建容器时,账户、扫描结果和运行时
卷都会被保留。
Docker Desktop 可能需要权限才能共享选定的主机路径。如果它 拒绝某个挂载,请在 Docker Desktop 中允许该位置并重新运行辅助脚本。 远程浏览器看到的是 Docker 主机 的文件夹,而不是它自己计算机的驱动器。 自动检测需要本地 Docker 引擎;使用远程 Docker 上下文时,请在引擎 主机上运行辅助脚本。
对于手动配置的挂载,docker compose up --build -d api web 仍然
可用。其基线将仓库挂载到 /scan-targets,并将
${DAKSH_HOST_MOUNT:-/} 挂载到 /host/root。使用辅助脚本进行 Windows 驱动器发现
和常用文件夹快捷方式;普通 Compose 无法检测客户端操作系统。
然后打开 http://localhost:8080。
要使用不同的端口:
DAKSH_PORT=9090 python3 tools/start_webui.py
使用以下命令停止堆栈:
docker compose down
Web UI 需要一个账户。首次启动时,会根据 DAKSH_ADMIN_USERNAME / DAKSH_ADMIN_PASSWORD(在 .env 中设置)创建一个初始管理员账户;如果 DAKSH_ADMIN_PASSWORD 未设置,则会生成一个随机密码,并在 API 的启动日志中打印一次——请保存它,因为之后无法恢复。
首次登录时,你需要设置自己的密码(以及可选的用户名)。管理员账户可以通过 POST /api/v1/auth/users API 端点创建更多账户(目前还没有专门的 UI)。有关身份验证相关设置的完整列表(会话生命周期、cookie 安全性、CORS),请参阅 .env.example。
在底层,CLI 仍然是唯一可信来源——它执行所有扫描并生成每个 HTML / PDF / JSON 输出。Web UI 一次运行一个活动作业,并将每个已完成作业的输出快照保存到 runtime/webui/jobs/<job-id>/artifacts/,以便过去的报告仍然可以访问。
你也不需要本地 Python 环境来使用 CLI——它作为独立的 Compose 服务提供,基于同一个镜像构建:
docker compose run --rm cli -h
docker compose run --rm cli -r auto -t /scan-targets/path/to/source
reports/ 和 runtime/ 卷关键挂载点:
| 挂载 | 容器内路径 |
|---|---|
| 项目源码 | /app |
默认扫描根目录(仓库,或 DAKSH_SCAN_ROOT) | /scan-targets |
| 主机文件系统(Windows 上的系统盘) | /host/root |
| 其他 Windows/WSL 驱动器 | /host/drives/<letter> |
| 当前用户的主目录 | /host/user |
| 常见主机文件夹 | /host/locations/<name> |
可选的 DAKSH_HOST_SOURCE | /host/source |