深度代码安全
具有代理验证和人工智能模糊的多语言SAST工具。两种分析模式:
- 静态分析(SAST) -使用Semgrep和树型回退进行确定性AST解析、沙盒验证的漏洞利用PoC和结构化修复指导
- 动态分析(引信) -基于人工智能的模糊器,具有覆盖率引导反馈、崩溃重复数据删除和语料库管理功能
通过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
# 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 | /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)
- 仅限于程序内污染 --源和汇必须在同一个功能体中。预期检测率: 10-25% 真实世界的注射漏洞。大多数web应用程序漏洞跨越多个函数调用边界,v1无法检测到。
- 查询脆弱性(仅限树型后端) --树型查询匹配特定的AST形状。使用Semgrep后端时,可以正确处理别名导入、完全限定名和类属性。使用树保姆时,以下模式不匹配:
- 别名导入: req = request; req.form - 完全限定名称: flask.request.form - 类属性: self.request.form - 连锁电话: request.form.get("key") (仅部分匹配)
- PoC验证只是奖励 --大多数基于模板的PoC由于缺少执行上下文(框架设置、依赖注入、状态初始化)而失败。PoC失败并不意味着漏洞是假的。漏洞利用奖金上限为10分。
- 无跨语言污点 --不分析Python通过FFI调用C。每种语言都是独立分析的。
- 无过程间分析 --v1中不跟踪跨函数/文件的调用图。推迟到v1.1。
- Fuzzer需要可选的依赖关系 --动态分析需要
pip install -e ".[fuzz]"要安装anthropicSDK和相关软件包。没有这些依赖关系,模糊器将不可用。
deep_scan_fuzzMCP工具需要Podman --MCP模糊测试工具使用
ContainerBackend用于完全隔离,仅在Podman处于以下状态时可用 安装和 dcs-fuzz-python:latest 图像是通过以下方式构建的 make build-fuzz-sandbox.CLI模糊测试支持两个子进程后端 (仅限限制)和ContainerBackend。
- C语言:无预处理器解析 —
#ifdef警卫和宏观
扫描仪看不到扩展。隐藏在条件后面的代码 编译将不会被分析。
- C语言:无结构体成员污染跟踪 --污点不会传播
通过结构体字段分配。只有标量变量和直接指针 取消引用被跟踪。
- C语言:仅在同一函数内跟踪指针别名 —
程序内约束适用(与限制1相同)。指针 传递给其他函数的别名不会被跟踪。
- C语言:输出参数源延迟 --C源函数
通过输出参数传递受污染的数据(recv, fread, read, scanf, getline, getdelim)在v1中不是有效的污染源。 仅返回值为受污染数据的函数(argv, getenv, gets, fgets)正确使用LHS播种污染发动机。
- C语言:CWE-416(免费后使用)检测延迟 --要求
时序分析(跟踪 free(ptr) 在a之前 后续使用 ptr),这与 源到汇污染模型。
- C语言:
mktemp()/tmpnam()探测间隙 --注册为
CWE-676会下沉,但污染流管道需要一个源头才能下沉 路径。大多数现实世界的使用都是用硬编码的模板字符串来调用这些,所以 它们不会被标记。
- **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沙箱选项,用于高风险部署
