多语言安全静态与动态分析工具

一款支持多语言的静态应用安全测试(SAST)和动态模糊测试工具,提供漏洞检测、验证和修复指导,适用于软件开发中的安全审计。

  • by backspace-shmackspace
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 backspace-shmackspace/deep-code-security

使用说明

深度代码安全

具有代理验证和人工智能模糊的多语言SAST工具。两种分析模式:

  1. 静态分析(SAST) -使用Semgrep和树型回退进行确定性AST解析、沙盒验证的漏洞利用PoC和结构化修复指导
  2. 动态分析(引信) -基于人工智能的模糊器,具有覆盖率引导反馈、崩溃重复数据删除和语料库管理功能

通过MCP服务器公开克劳德代码集成的所有功能。

快速开始

# Install (basic)
pip install -e ".[dev]"

# Install with fuzzing support
pip install -e ".[dev,fuzz]"

# Static analysis via CLI
dcs hunt /path/to/project
dcs hunt /path/to/project --ignore-suppressions
dcs verify --finding-ids <id1> <id2>

# Dynamic analysis (fuzzing) via CLI
dcs fuzz /path/to/target.py
dcs replay /path/to/corpus
dcs corpus /path/to/corpus
dcs fuzz-plugins
dcs report /path/to/output

# Integrated SAST-to-Fuzz pipeline
dcs hunt-fuzz /path/to/project

# Enable C fuzzing (in addition to Python)
export DCS_FUZZ_ALLOWED_PLUGINS=python,c

# Build the C fuzzer sandbox (Podman required)
make build-fuzz-c-sandbox

# Fuzz a C target with SAST-to-Fuzz bridge
dcs hunt-fuzz /path/to/c_project --consent

# Run via MCP server
python -m deep_code_security.mcp

建筑

静态分析(SAST)

Target Codebase
    |
    v
HUNTER     scanner backend (Semgrep/tree-sitter) → source/sink match → taint track
    |      Output: RawFinding[] (JSON, paginated)
    v
AUDITOR    PoC generation → sandbox execution → confidence scoring
    |      Output: VerifiedFinding[] (JSON)  [Exploit = 10% bonus only]
    v
ARCHITECT  context gather → guidance generation → dependency analysis
           Output: RemediationGuidance[] (JSON)

动态分析(引信)

Target Function
    |
    v
FUZZER     LLM-guided input generation → sandboxed execution →
           crash detection → corpus management → coverage tracking
           Output: CrashReport[] (JSON, with reproducer inputs)

支持的语言(v1)

  • Python(Flask、Django模式;SAST+模糊测试)
  • Go(net/http、数据库/sql模式;仅限SAST)
  • C(命令注入、缓冲区溢出、格式化字符串、内存损坏 模式;SAST+模糊测试)。C模糊要求 DCS_FUZZ_ALLOWED_PLUGINS=python,c 以及人工智能驱动的线束生成 地址消毒器和gcov仪器。

抑制文件

您可以通过创建 .dcs-suppress.yaml 文件 在您的项目根目录中。这有助于标记已接受的误报 风险或稍后将讨论的发现。

基本用法:

# .dcs-suppress.yaml
version: 1
suppressions:
  - rule: CWE-22
    file: "src/config/*.py"
    reason: "Config paths are admin-controlled"

  - rule: CWE-89
    file: "src/legacy/db.py"
    line: 145
    reason: "Legacy code scheduled for refactor in Q2"

CLI标志:

  • 默认情况下,在以下期间应用抑制 dcs hunt, dcs full-scan, 和 dcs hunt-fuzz 命令
  • 使用 --ignore-suppressions 绕过抑制文件并显示全部 发现

笔记:

  • 抑制文件仅影响SAST发现,不影响模糊崩溃
  • 文件必须命名 .dcs-suppress.yaml 并位于项目中 根
  • 所有格式化程序(文本、JSON、SARIF、HTML)在中显示抑制统计信息 产量

安装

# Clone
git clone https://github.com/your-org/deep-code-security.git
cd deep-code-security

# Install with dev dependencies
pip install -e ".[dev]"

# Install with fuzzing support (requires anthropic SDK)
pip install -e ".[dev,fuzz]"

# Build sandbox images (requires Docker or Podman)
make build-sandboxes        # Build auditor/architect sandbox images
make build-fuzz-sandbox     # Build Python fuzzer sandbox image (Podman only)
make build-fuzz-c-sandbox   # Build C fuzzer sandbox image (Podman only)

MCP配置

添加 ~/.claude/settings.json:

{
  "mcpServers": {
    "deep-code-security": {
      "command": "python",
      "args": ["-m", "deep_code_security.mcp"],
      "cwd": "/path/to/deep-code-security",
      "env": {
        "DCS_REGISTRY_PATH": "/path/to/deep-code-security/registries",
        "DCS_ALLOWED_PATHS": "/path/to/projects",
        "DCS_CONTAINER_RUNTIME": "auto",
        "ANTHROPIC_API_KEY": "your-api-key-here"
      }
    }
  }
}

可选环境变量

对于高级调优,可以使用其他变量:

静态分析:

变量 默认值 描述
DCS_SCANNER_BACKEND auto 扫描仪后端: semgrep, treesitter,或 auto (如果可用,请选择semgrep)
DCS_SEMGREP_TIMEOUT 120 Semgrep子进程的最大秒数
DCS_SEMGREP_RULES_PATH <registry>/semgrep DCS Semgrep规则文件的路径
DCS_MAX_RESULTS 100 每次狩猎行动返回的最大发现数
DCS_MAX_VERIFICATIONS 50 审计阶段需要验证的最大发现
DCS_SANDBOX_TIMEOUT 30 每次漏洞利用超时(秒)
DCS_MAX_FILES 10000 每次扫描的最大文件数
DCS_MAX_CONCURRENT_SANDBOXES 2 沙盒执行的并发限制
DCS_QUERY_TIMEOUT 5.0 树保姆查询超时(秒)
DCS_QUERY_MAX_RESULTS 1000 每个树座查询的最大结果数
DCS_BRIDGE_MAX_TARGETS 10 SAST对fuzz桥产生的最大模糊目标

动态分析(引信):

变量 默认值 描述
ANTHROPIC_API_KEY (none) Claude的API密钥(模糊化需要)
GOOGLE_CLOUD_PROJECT (无) Vertex AI的GCP项目ID(可选)
CLOUD_ML_PROJECT_NUMBER (无) Vertex AI的GCP项目编号(可选)
ANTHROPIC_VERTEX_PROJECT_ID (无) 顶点AI项目覆盖(可选)
DCS_FUZZ_MODEL claude-sonnet-4-6 输入生成的Claude模型
DCS_FUZZ_MAX_ITERATIONS 10 最大模糊迭代次数
DCS_FUZZ_INPUTS_PER_ITER 10 每次迭代生成的输入
DCS_FUZZ_TIMEOUT_MS 5000 每次输入执行超时
DCS_FUZZ_MAX_COST_USD 5.0 API成本预算
DCS_FUZZ_OUTPUT_DIR ./fuzzy-output 语料库和报告输出目录
DCS_FUZZ_CONSENT false CI的预配置同意
DCS_FUZZ_GCP_REGION us-east5 Vertex AI的GCP区域
DCS_FUZZ_ALLOWED_PLUGINS python 逗号分隔的模糊器插件列表(默认:python;设置为python,c启用两者)
DCS_FUZZ_MCP_TIMEOUT 120 MCP模糊调用的硬墙时钟超时
DCS_FUZZ_CONTAINER_IMAGE dcs-fuzz-python:latest ContainerBackend用于MCP模糊运行的Podman映像
DCS_FUZZ_C_CONTAINER_IMAGE dcs-fuzz-c:latest CContainerBackend使用的Podman图像
DCS_FUZZ_C_COMPILE_FLAGS "" 逗号分隔的gcc标志(例如。, -O2,-march=native)
DCS_FUZZ_C_INCLUDE_PATHS "" 逗号分隔的C线束编译包含路径

MCP工具

工具 说明
deep_scan_hunt 运行Hunter阶段(AST解析+污染跟踪)
deep_scan_verify 运行审核阶段(沙盒漏洞验证)
deep_scan_remediate 运行架构师阶段(补救指导)
deep_scan_full 按顺序运行所有三个阶段
deep_scan_status 检查沙盒运行状况和注册表信息
deep_scan_fuzz 运行AI驱动的模糊测试(需要Podman容器后端)
deep_scan_hunt_fuzz 运行SAST分析,然后对识别出的脆弱功能进行人工智能模糊测试(需要Podman+同意)
deep_scan_fuzz_status 检查模糊器的可用性和配置

信心评分

置信度得分(0-100)使用加权复合:

因素 重量 备注
Taint路径完整性 45% 完整路径=100,部分路径=50,启发式路径=20
消毒剂缺失 25% 无消毒剂=100,满消毒剂=0
CWE严重性基线 20% 严重=100,高=75,中=50,低=25
漏洞利用验证 10% 仅奖金 --失败的PoC不会受到惩罚

阈值: >=75 确认, >=45 可能, >=20 未经证实, <20 假阳性

沙盒安全策略

沙盒容器强制执行:

  • --network=none --无网络访问
  • --read-only --只读根文件系统
  • --tmpfs /tmp:rw,noexec,nosuid,size=64m --使用noexec写入临时文件
  • --cap-drop=ALL --没有Linux功能
  • --security-opt=no-new-privileges --无特权升级
  • --security-opt seccomp=seccomp-default.json --自定义seccomp配置文件
  • --pids-limit=64 --没有叉式炸弹
  • --memory=512m --内存上限
  • --user=65534:65534 --像无名小卒一样奔跑

发展

make lint           # Lint with ruff
make test           # All tests (90%+ coverage required)
make test-hunter    # Hunter tests only
make test-auditor   # Auditor tests only
make test-architect # Architect tests only
make test-mcp       # MCP server tests only
make test-fuzzer    # Fuzzer tests only
make test-c-fuzzer  # C fuzzer plugin tests only
make sast           # Security scan with bandit
make security       # sast + pip-audit

注册表格式

看 registries/README.md 对于YAML注册表格式文档。

已知限制(v1)

  1. 仅限于程序内污染 --源和汇必须在同一个功能体中。预期检测率: 10-25% 真实世界的注射漏洞。大多数web应用程序漏洞跨越多个函数调用边界,v1无法检测到。

  2. 查询脆弱性(仅限树型后端) --树型查询匹配特定的AST形状。使用Semgrep后端时,可以正确处理别名导入、完全限定名和类属性。使用树保姆时,以下模式不匹配:

    • 别名导入: req = request; req.form
    • 完全限定名称: flask.request.form
    • 类属性: self.request.form
    • 连锁电话: request.form.get("key") (仅部分匹配)
  3. PoC验证只是奖励 --大多数基于模板的PoC由于缺少执行上下文(框架设置、依赖注入、状态初始化)而失败。PoC失败并不意味着漏洞是假的。漏洞利用奖金上限为10分。

  4. 无跨语言污点 --不分析Python通过FFI调用C。每种语言都是独立分析的。

  5. 无过程间分析 --v1中不跟踪跨函数/文件的调用图。推迟到v1.1。

  6. Fuzzer需要可选的依赖关系 --动态分析需要 pip install -e ".[fuzz]" 要安装 anthropic SDK和相关软件包。没有这些依赖关系,模糊器将不可用。

  7. deep_scan_fuzz MCP工具需要Podman --MCP模糊测试工具使用 ContainerBackend用于完全隔离,仅在Podman处于以下状态时可用 安装和 dcs-fuzz-python:latest 图像是通过以下方式构建的 make build-fuzz-sandbox.CLI模糊测试支持两个子进程后端 (仅限限制)和ContainerBackend。

  8. C语言:无预处理器解析 — #ifdef 警卫和宏观 扫描仪看不到扩展。隐藏在条件后面的代码 编译将不会被分析。

  9. C语言:无结构体成员污染跟踪 --污点不会传播 通过结构体字段分配。只有标量变量和直接指针 取消引用被跟踪。

  10. C语言:仅在同一函数内跟踪指针别名 — 程序内约束适用(与限制1相同)。指针 传递给其他函数的别名不会被跟踪。

  11. C语言:输出参数源延迟 --C源函数 通过输出参数传递受污染的数据(recv, fread, read, scanf, getline, getdelim)在v1中不是有效的污染源。 仅返回值为受污染数据的函数(argv, getenv, gets, fgets)正确使用LHS播种污染发动机。

  12. C语言:CWE-416(免费后使用)检测延迟 --要求 时序分析(跟踪 free(ptr) 在a之前 后续使用 ptr),这与 源到汇污染模型。

  13. C语言: mktemp()/tmpnam() 探测间隙 --注册为 CWE-676会下沉,但污染流管道需要一个源头才能下沉 路径。大多数现实世界的使用都是用硬编码的模板字符串来调用这些,所以 它们不会被标记。

  14. C模糊器线束验证是基于allowlist的,而不是 防沙箱逃逸 --C模糊器编译并执行生成的LLM 带有seccomp强制的Podman容器内的C代码。双层AST 验证禁止危险的系统调用和非标准包含,但是 这是一种深度防御措施,而不是一个完整的安全边界。这 主要的隔离机制是Podman容器 --network=none, --read-only, --cap-drop=ALL,以及自定义seccomp配置文件 (sandbox/seccomp-fuzz-c.json).快速注射攻击,逃避 AST allowlist仍然可以在容器内执行任意代码(但是 不要逃到主人那里)。

安全模型

MCP服务器作为 本地stdio进程 在主机上。它不运行 在Docker容器中,避免Docker套接字装载攻击向量。 Docker或Podman用于执行漏洞PoCs的沙盒容器 (审计员/架构师阶段)。模糊器的ContainerBackend使用Podman 专门用于无根容器执行。

所有文件访问都通过 DCS_ALLOWED_PATHS 通过符号链接解析进行满列表验证。在利用模板插值之前,所有RawFinding字段都经过验证。查找来源是通过服务器端会话存储验证的(外部调用者不能注入任意结果)。

引信执行模型

Python和C模糊器在沙盒容器中使用了根本不同的执行模型:

  • Python模糊器 (_worker.py):使用 eval() 具有受限的全局变量(无导入、有限的内置)和双层AST验证。不会生成任意机器代码。
  • C模糊器 (_c_worker.py):不使用 eval()。相反,AI生成的C源代码是用 gcc 并执行得到的二进制文件。这意味着任意机器代码在容器内运行,使Podman seccomp配置文件(sandbox/seccomp-fuzz-c.json)主要安全边界。

两个后端都在下面运行 --network=none, --read-only, --cap-drop=ALL, --pids-limit=64,以及 --memory=512m.

v1.1路线图

  • 程序间污染跟踪(调用图构建)
  • Java和Rust语言支持
  • 其他注册表模式(别名导入、完全限定名)
  • gVisor/Firecracker沙箱选项,用于高风险部署