dcg模糊测试实践:11个Fuzz Target如何守护模式引擎
dcg模糊测试实践11个Fuzz Target如何守护模式引擎【免费下载链接】destructive_command_guardThe Destructive Command Guard (dcg) is for blocking dangerous git and shell commands from being executed by agents.项目地址: https://gitcode.com/GitHub_Trending/de/destructive_command_guarddcgDestructive Command Guard是一款拦截 AI Agent 执行危险 git / shell 命令的安全护栏工具它内置了 11 个模糊测试Fuzz目标用无限刁钻输入持续轰炸模式引擎确保任何畸形命令、恶意构造都让 dcg 崩溃不了、误判不了。本文将完整拆解这 11 个 Fuzz Target 的职责分工与设计思路带你快速理解一个 Rust 安全项目如何用模糊测试守住可靠性底线。为什么 dcg 需要模糊测试️dcg 运行在 AI 编码助手的命令出口上Agent 每发出一条 shell 命令dcg 都要先解析、归一化、匹配规则再决定放行还是拦截。这意味着它的输入面非常野畸形 shell 语法引号不闭合、反斜杠续行、嵌套管道未终止的 here-docEOF没有结尾标记、超长脚本体恶意 JSON钩子Hook输入的类型混淆、深层嵌套对抗性文本专为触发正则灾难性回溯而构造的字符串。人工写测试用例永远枚举不完模糊测试则让 libFuzzer 自动生成并变异海量输入用程序不变量invariant自动判定对不对。快速上手如何运行 dcg 的模糊测试整个 fuzz 工程独立在主工程之外配置见 fuzz/Cargo.toml基于cargo-fuzzlibfuzzer-sys构建。常用命令运行单个目标以评估器为例cargo fuzz run fuzz_evaluate运行全部 11 个目标依次cargo fuzz run target名或用 CI 脚本批量执行查看语料库种子语料存放在 fuzz/corpus/ast_matcher_fuzz/ 与 fuzz/corpus/heredoc_fuzz/例如bash_rm_rf、unterminated_python等文件分别覆盖了 bash 递归删除、未终止 Python 脚本等典型场景。 小提示每个目标都对输入大小做了上限如 10_000 字节避免超大输入浪费变异时间——这是工程上的常见取舍。11个Fuzz Target全景清单 #目标被测模块守护的不变量1fuzz_evaluate主评估器任意命令不得 panic、不得灾难性回溯2fuzz_hook_inputHook JSON 解析畸形 JSON 只报错、不崩溃3fuzz_contextshell 分词器所有 span 边界必须合法4fuzz_normalize命令归一化归一化幂等normalize² normalize5fuzz_heredoc_triggerhere-doc 触发检测触发结果与匹配集合严格一致6fuzz_heredoc_extracthere-doc 内容抽取抽取体受上限约束无漏报7fuzz_heredoc_language脚本语言识别启发式探测永不越界8fuzz_shell_extractbash AST 提取tree-sitter 解析不 panic9heredoc_fuzzhere-doc 集成管线失败必须fail-open而非 panic10ast_matcher_fuzzAST 模式匹配器解析错误/超时一律放行不拦截11fuzz_scan_extractors8 类文件扫描提取器行号 ≥ 1、提取器 ID 非空入口层评估器与钩子解析fuzz/fuzz_targets/fuzz_evaluate.rs—— 直接轰炸evaluate_command主入口。它会用git、rm、docker、kubectl、psql等 8 个关键词组合反复评估专找正则灾难性回溯与内存问题fuzz/fuzz_targets/fuzz_hook_input.rs—— AI 助手通过 JSON 把命令喂给 dcg这个目标验证类型混淆、深层嵌套等攻击下解析器只会优雅报错。解析层分词、归一化与 AST 提取fuzz/fuzz_targets/fuzz_context.rs—— shell 分词器负责区分被执行的部分与纯数据部分fuzz 验证每个 span 的起止字节都落在命令长度之内fuzz/fuzz_targets/fuzz_normalize.rs—— 归一化会剥离路径前缀目标验证其幂等性归一化两次与一次结果必须完全相同这是规则命中率的基石fuzz/fuzz_targets/fuzz_shell_extract.rs—— 针对 tree-sitter经 ast-grep的 bash AST 命令提取确保解析器面对任意字节流都能安全失败。here-doc 专题三个单元 一个集成 dcg 支持识别python EOF ... EOF这类内嵌脚本设计见 docs/adr-001-heredoc-scanning.mdfuzz 套件也按分层思路配置了三枚单元目标Tier 1 触发fuzz/fuzz_targets/fuzz_heredoc_trigger.rs 验证check_triggers()与matched_triggers()两个接口结论永远一致杜绝触发却说没触发的逻辑裂缝Tier 2 抽取fuzz/fuzz_targets/fuzz_heredoc_extract.rs 检查抽取体不超过ExtractionLimits10_000 字节 / 1_000 行 / 5 个 here-doc / 20ms 超时语言识别fuzz/fuzz_targets/fuzz_heredoc_language.rs 用 shebang、命令名、内容三种启发式交叉探测验证对怪异输入不越界。集成的fuzz/fuzz_targets/heredoc_fuzz.rs更精巧首字节选择命令包装器、次字节选择解释器语言、其余字节作为脚本体——让变异始终贴着真实 shell 结构发生同时自由产生未终止、非执行的 here-doc。匹配层fail-open 是硬指标 fail-open失败放行是 dcg 模糊测试里最重要的设计哲学解析器超时、语法不支持、模式编译失败时宁可放行也不让 Agent 被卡死或误拦。fuzz/fuzz_targets/ast_matcher_fuzz.rs用 10ms 超时与 0ms 超时两套匹配器对照测试find_matches报ParseError/Timeout时has_blocking_match必须返回不拦截且所有命中的行号、字节偏移都落在字符边界上配合语料 fuzz/corpus/ast_matcher_fuzz/bash_rm_rf 等种子持续逼近匹配器边界。扫描层八类 CI/DevOps 文件提取器fuzz/fuzz_targets/fuzz_scan_extractors.rs一次性轰炸 8 个扫描提取器Dockerfile、Makefile、GitHub Actions、GitLab CI、Docker Compose、package.json、Terraform、shell 脚本。断言朴素但关键行号必须 ≥ 1、提取器 ID 非空——保证dcg scan输出永远可定位。各提取器的行为规格可参考 docs/scan/github-actions-extractor-v1-spec.md 与 docs/scan/dockerfile-extractor-v1-spec.md。这套 Fuzz 体系好在哪✨分层覆盖从字节输入 → 解析 → 归一化 → 规则匹配 → 扫描输出每一层都有独立目标问题定位精确到模块不变量驱动不是不崩就赢而是幂等性、span 边界、fail-open 等可证明的性质被写成断言fuzz 即回归测试贴近真实攻击面here-doc 集成的包装器 语言 脚本体三段结构让随机变异也产生高价值样本。总结dcg 的 11 个 Fuzz Target 构成一张分层防护网入口层守住进程存活解析层守住边界与幂等here-doc 专题守住内嵌脚本管线匹配层把 fail-open 变成硬约束扫描层保证报告可定位。对想给自家 CLI 工具加模糊测试的团队来说这套按模块切目标、用不变量做断言的做法是一份值得直接抄的清单。【免费下载链接】destructive_command_guardThe Destructive Command Guard (dcg) is for blocking dangerous git and shell commands from being executed by agents.项目地址: https://gitcode.com/GitHub_Trending/de/destructive_command_guard创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Haystack 与 vLLM 集成实战:基于 OpenAI 兼容接口接入文档嵌入、文本嵌入、Chat 生成与 Rerank 排序

Haystack 与 vLLM 集成实战:基于 OpenAI 兼容接口接入文档嵌入、文本嵌入、Chat 生成与 Rerank 排序

Haystack 与 vLLM 集成实战:基于 OpenAI 兼容接口接入文档嵌入、文本嵌入、Chat 生成与 Rerank 排序 【免费下载链接】haystack Open-source AI orchestration framework for building context-engineered, production-ready LLM applications. Design modular pipe…

2026/11/6 11:21:11 阅读更多 →
Wazuh 4.x 到 5.x 如何迁移代理分组与 shared 共享配置?

Wazuh 4.x 到 5.x 如何迁移代理分组与 shared 共享配置?

Wazuh 4.x 到 5.x 如何迁移代理分组与 shared 共享配置? 【免费下载链接】wazuh Wazuh - The Open Source Security Platform. Unified XDR and SIEM protection for endpoints and cloud workloads. 项目地址: https://gitcode.com/GitHub_Trending/wa/wazuh …

2026/11/6 8:30:37 阅读更多 →
M.2 SSD兼容性硬核指南:搞懂PCIe协议、Key接口与NVMe启动逻辑

M.2 SSD兼容性硬核指南:搞懂PCIe协议、Key接口与NVMe启动逻辑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/1 16:59:42 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/5 12:28:00 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/6 9:29:27 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/5 12:28:01 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/5 12:28:02 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/6 8:08:42 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/5 19:38:59 阅读更多 →

日新闻

周新闻

月新闻