【免费下载链接】DontFeedTheAI
Transparent anonymization proxy for AI-assisted pentesting. Strips IPs, credentials, hostnames and PII before they reach any LLM (Claude, OpenAI, OpenRouter). Local Ollama + regex detection. Per-engagement vault.
DontFeedTheAI 是一款面向 AI 辅助渗透测试的透明匿名化代理:它在你与 Claude、OpenAI、OpenRouter 等大模型之间拦截请求,先把 IP、凭据、主机名和公司名等敏感信息替换为假值,再把响应还原后返回。它的核心之一就是本地的Ollama 上下文检测层,专门负责在自由文本中识别那些正则规则抓不到的主机名与公司名。
为什么正则规则不够用
DontFeedTheAI 采用双层检测架构:
| 检测层 | 擅长识别 | 工作方式 |
|---|---|---|
| 🔍 正则层(Regex) | IP、CIDR、哈希、Token、API Key | 确定性模式匹配 |
| 🧠 Ollama 层(LLM) | 裸主机名、公司/项目名、人名、DOMAIN\user | 本地大模型理解上下文 |
问题在于:10.20.0.5或AKIA...这类字符串有固定格式,正则一击即中;但像DC01、Acme Corp、stelear-tech-app-01这样的词,在文本里就是普通单词——没有前缀、没有固定格式,只有结合上下文("nmap 扫描 DC01 发现 445 端口开放")才能判断它是敏感信息。这正是上下文检测层存在的意义。
Ollama 上下文检测层是如何工作的
检测逻辑位于 src/llm_detector.py,整体流程如下:
- 分块:长文本按
LLM_CHUNK_SIZE(默认 1500 字符)切块,相邻块保留 150 字符重叠,避免实体被拦腰截断; - 并发推理:各块最多 2 路并发,调用本机 Ollama 的
/api/chat,默认模型qwen3:1.7b,temperature=0保证输出稳定; - 结构化输出:要求模型只返回 JSON 实体列表,每项包含
text(必须是输入中的原文子串)和type(HOSTNAME、ORGANIZATION、CREDENTIAL 等); - 去重汇总:按出现顺序合并各块的检测结果。
几个关键设计值得新手注意:
- 幻觉防护:解析时校验
text in chunk_text——模型"编造"出来的、文本里根本不存在的实体会被直接丢弃; - 分块 LRU 缓存:相同内容的块(比如反复粘贴的同一段工具输出)按 MD5 命中缓存,最多保留 500 条;
- 硬失败策略:Ollama 不可达或超时时会抛出
OllamaUnavailableError,代理拒绝转发请求,而不是带着没脱敏的数据放行——宁可报错也不漏数据; - 系统提示词热更新:若存在
data/system_prompt.txt,它会覆盖内置提示词,且最多每 60 秒重新读取一次磁盘,无需重启服务即可让优化后的提示词生效。
主机名与公司名是怎么被识别的
裸主机名:靠"上下文长相"判断
系统提示词中的 HOSTNAME 规则要求模型识别不带 FQDN 的唯一机器名,例如DC01、WEBSERVER01、FILESERVER-PRD、FORTUNA-CA。判断依据不是格式而是语境——它必须"看起来像一个具体的机器名",而不是泛泛的server、host这类普通词。识别后,DC01会被替换为类似dc-0042的假主机名,规则实现在 src/surrogates.py。
公司名:要求"原样返回"
ORGANIZATION 规则覆盖公司名称、品牌、项目代号,并明确要求模型按原始大小写和空格精确返回(返回Acme Corp而不是acme.corp)。它还覆盖了一些容易漏掉的场景:全大写的 Windows 域/工作组名、WiFi SSID 值、带公司前缀的云资源名(存储桶、K8s 命名空间、GCP 项目 ID)等。
严格的不标记清单:避免误杀
识别敏感信息最大的坑是误报。提示词中列了一张详细的"DO NOT FLAG"清单:渗透工具名(nmap、mimikatz、bloodhound)、协议名(Kerberos、NTLM)、技术产品与版本(IIS 10、Apache 2.4.49)、CVE 编号、AD 内置账户(krbtgt、Domain Admins)等一概不标记。代理层还叠加了一层硬编码白名单(src/anonymizer.py 中的_NEVER_ANONYMIZE),即使模型误判也不会动这些词。
背后的原则一句话:描述"技术是什么"的保留,描述"它是谁的/在哪的"才替换——否则模型连你面对的是 IIS 10 还是 Apache 都判断不了,分析结果毫无价值。
识别之后:一致的假值映射
每识别出一个实体,代理会在按ENGAGEMENT_ID隔离的本地 SQLite 保险库中建立"原文 ↔ 假值"映射(src/vault.py),同一任务内相同原文始终映射到相同假值,保证 AI 推理时上下文连贯:
| 原文 | 替换为 |
|---|---|
dc01.contoso.local | xkqpzt.pentest.local |
DC01 | dc-0042 |
C0nt0s0@2024! | [CRED_XK9A2B3C] |
云端 LLM 只能看到假值;响应返回时代理再按映射还原,整个过程敏感数据不离开本机。
如何验证与调优检测效果
- 可视化审计:运行
python3 wizard.py tunnel --audit,打开上图所示的面板,可按实体类型(DOMAIN、CREDENTIAL、HOSTNAME…)过滤每条ORIGINAL → SURROGATE映射,一眼发现漏网之鱼; - 全链路测试:
python3 wizard.py test --integration让全部 fixture 走完 LLM + 正则完整管线并断言零泄露; - 反馈闭环:scripts/dev/feedback_loop.py 会把验证器发现的漏报案例回灌,用于持续改进系统提示词。
更多支持的上游客户端与配置项,可查阅 docs/providers.md;完整的两层管线技术拆解见 docs/architecture.md。
小结
| 要点 | 说明 |
|---|---|
| 定位 | 本地 Ollama 承担"理解型"检测,专治自由文本中的主机名、公司名、人名 |
| 可靠性 | 幻觉校验 + 提示词热更新 + Ollama 故障时硬失败拦截 |
| 防误报 | 提示词 DO-NOT-FLAG 清单 + 代理层硬白名单双重过滤 |
| 安全性 | 检测全程本机运行,敏感数据不出机器;审计页仅在 SSH 隧道内开放 |
对于需要在 AI 辅助下分析渗透报告、生产日志又担心客户信息外泄的安全从业者来说,这套"本地上下文检测 + 正则兜底"的分层方案,是一个值得参考的务实架构。
【免费下载链接】DontFeedTheAI
Transparent anonymization proxy for AI-assisted pentesting. Strips IPs, credentials, hostnames and PII before they reach any LLM (Claude, OpenAI, OpenRouter). Local Ollama + regex detection. Per-engagement vault.
相关推荐
如何用HanLP实现精准中文命名实体识别:终极指南
如何用HanLP实现精准中文命名实体识别:终极指南 中文命名实体识别是自然语言处理中的关键技术,能够自动识别文本中的人名、地名、组织机构名等实体信息。HanLP
人工智能NLP机器学习深度学习大模型PlayIntegrityFix完整指南:如何轻松通过Google设备完整性验证
PlayIntegrityFix完整指南:如何轻松通过Google设备完整性验证 你是否遇到过这些烦人的问题?Google Play商店显示"设备未认证",银行
应用安全系统编程weave的重命名检测秘诀:如何用名称+结构哈希精准识别被改名的函数
weave的重命名检测秘诀:如何用名称+结构哈希精准识别被改名的函数 weave 是一个实体级(entity level)Git 合并驱动,它的重命名检测(re
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考