文章总结: 本文记录了AI安全工具Hati在跨平台兼容性、可降级设计和审计合规方面的实践经验。针对Windows/Linux/macOS环境,解决了终端编码、Celery替代方案等问题;通过Elasticsearch/Redis降级机制确保系统稳定性;详细说明了技能添加流程和MCP工具集成方法。文章还分析了LLM决策偏好、误报率等挑战,并提出了多Agent协作、长期记忆等未来发展方向。 综合评分: 82 文章分类: AI安全,渗透测试,安全工具,安全建设,漏洞分析
第八章 – 重生之我是AI人:扩展与反思 — Hati踩过的坑
TtTeam
2026年6月21日 11:13 广东
在小说阅读器读本章
去阅读
以下文章来源于威胁情报Z分析 ,作者Gach0ng
威胁情报Z分析 .
国际网络安全威胁情报,地缘政治事件分析。
- 跨平台兼容那些坑
Hati 跑在 Windows、Linux、macOS 三个平台。跨平台最大的坑是细节。
坑 1:Windows 终端编码
症状:PowerShell 跑 python -m api.main 报 UnicodeEncodeError: ‘gbk’ codec can’t encode character。
为啥:Windows 默认 GBK,我们的 prompt 和日志里有大量中文和 emoji。
解法:agents/orchestrator.py:9-15
if sys.platform == 'win32': try: sys.stdout.reconfigure(encoding='utf-8', errors='replace') sys.stderr.reconfigure(encoding='utf-8', errors='replace') except AttributeError: pass
这行代码在所有 agent 模块都重复了 4-5 次。重复是合理的 — 因为每个模块都可能被独立 import,不能依赖外部。
教训:Python 项目做跨平台,encoding 永远第一坑。
坑 2:Celery 在 Windows 失效
症状:celery worker 在 Windows 启动失败,报 NotImplementedError。
为啥:Celery 4.x 在 Windows 上不支持 prefork,用 solo pool 又不支持定时任务。
解法:不用 Celery,直接用 concurrent.futures.ThreadPoolExecutor。
文件:api/main.py(后台任务)
from concurrent.futures import ThreadPoolExecutorexecutor = ThreadPoolExecutor(max_workers=5)
@router.post("/api/pentest/start")async def start_pentest(req: PentestStartRequest): task_id = str(uuid.uuid4()) # 扔进线程池,不阻塞 executor.submit(run_pentest_task, task_id, req) return {"task_id": task_id, "status": "started"}
但 Linux 上还能用 Celery(config/celery_config.py 留着)。
教训:别死磕一个方案,降级到能跑的就行。
坑 3:Docker Desktop 启动慢
症状:Windows 上 docker-compose up -d redis 要 30 秒,Linux 上 1 秒。
为啥:Docker Desktop 用 WSL2 后端,启动慢。
解法:
● Windows 用户:接受现实,或者用 WSL 直接装 Redis
● 配置好超时(timeout=10 改成 timeout=30)
- 可降级设计
设计原则:外部依赖挂了,Hati 不能挂。
2.1 Elasticsearch 降级
文件:security/audit_logger.py:48-65
def _init_es(self): try: self._es = Elasticsearch([ES_URL], verify_certs=False, request_timeout=10) if self._es.ping(): print(f"✅ ES 连接成功") else: print("⚠️ ES 连接失败,降级到本地日志") self._es = None except Exception as e: print(f"⚠️ ES 异常,降级到本地日志: {e}") self._es = None
def log(self, event): if self._es: self._es.index(index="pentest-logs", document=event) else: # 降级:写本地 JSON with open(f"logs/{event['timestamp']}.json", "a") as f: f.write(json.dumps(event) + "\n")
实际效果:Hati 启动时如果 ES 不通,日志显示”降级到本地日志”,任务正常跑。
2.2 Redis 降级
类似逻辑:state/progress_tracker.py 检测 Redis 不通就改用内存字典。
2.3 MCP 降级
如果 Kali VM 不可达,Hati 会:
-
跳过 execute_tool 路径
-
不报错,直接走 execute_skill 路径(主机侧 requests 发包)
-
任务能完成,只是少了 30% 功能
-
审计和合规
每次任务都产生审计记录:
# security/audit_logger.pyaudit.log( task_id=task_id, actor="orchestrator", action="execute_skill", target="http://testphp.vulnweb.com", decision=llm_decision, # LLM 输出的 JSON result=execution_result, # 执行结果 timestamp=datetime.utcnow().isoformat(), authorized_by="[email protected]" # 来自请求)
审计字段:
● 谁(actor)
● 干了啥(action)
● 对谁(target)
● 决策依据(decision – LLM 思考过程)
● 结果(result)
● 授权人(authorized_by)
为啥要审计:
● 合规:渗透测试必须有书面授权
● 复盘:出问题时能追
● 客户要求:甲方常要”完整的测试日志”
- 怎么加新技能(开发者视角)
第 6 章讲了 Markdown 加法,这里讲工程化做法。
步骤:
-
在 skills/hack-skills/skills/ 下创建目录
-
写 SKILL.md
-
(可选) 写 SCENARIOS.md(具体场景)
-
重新加载技能
示例:加一个”密码学误用”技能
mkdir -p skills/hack-skills/skills/crypto-misuse
写 SKILL.md:
---name: crypto-misusedescription: 检测密码学 API 的常见误用(弱算法、硬编码 IV 等)severity: mediumtags: [crypto, api, web]---
## detection1. 抓包看 HTTPS 协议版本(SSLv3、TLS 1.0 都是弱协议)2. 看证书是否过期3. 看加密算法是否使用 MD5、SHA1、DES4. 看 IV 是否硬编码或可预测
## success_indicators- 响应头: Server: SSLv3- 证书过期天数 < 0- 加密算法包含 MD5|SHA1|DES|RC4
## pocsopenssl s_client -connect target.com:443 -tls1
重启 Hati:
# 强制重载技能python -c "from agents.skill_loader import get_skill_loader; get_skill_loader()"
新技能就被纳入 match_skills 的候选池,LLM 可以在 ReAct 循环里自动发现和使用。
- 怎么加新 MCP 工具
步骤:
-
在 Kali VM 上装工具
-
在 hexstrike/hexstrike_mcp.py 加 @mcp.tool() 装饰器
-
重启 HexStrike Server
-
Hati 端不需要改 — HexStrikeClient.execute_command() 透传命令
# hexstrike/[email protected]()def my_new_tool(target: str, option: str = "default") -> dict: """我的新工具""" return subprocess_run(["my-new-tool", option, target])
6.1 单 LLM 决策的偏置
LLM 对热门漏洞类型有偏好(老提 SQL 注入、XSS),很少主动提 SSRF、XXE。这是训练数据分布问题。
应对:
● state/diversity_injector.py:强制多类型漏洞尝试
● 第 7 章 RAG 注入历史 POC 来平衡
6.2 8 轮上下文窗口紧张
8 轮后早期信息开始被压缩/遗忘。
应对:
● state/context_compressor.py:对历史结果做摘要
● 把”上一轮结果”摘要(不全文)喂给下一轮
6.3 误报率
虽然有多模式确认,误报率仍在 3-5%。
应对:
● 不在生产目标上跑(仅授权测试)
● 报告里明确标记 status: confirmed/potential/false_positive
6.4 性能瓶颈
单任务 5-10 分钟,主要时间花在 LLM 调用上(每次决策 3-10 秒)。
应对:
● 分层 Prompt 减少 KV-cache 失效
● 并行执行独立任务(ThreadPoolExecutor)
● 用更小的模型(未来方向)
- 未来方向
我目前在想的几个方向:
7.1 更多的agent协作
现状:有限的 LLM 做所有决策。
未来:
● ReconAgent(专门做信息收集)
● VulnAgent(专门做漏洞分析)
● ExploitAgent(专门做漏洞利用)
● ReportAgent(专门做报告)
● 互相通信,各有专长
7.2 长期记忆
现状:每次任务经验不沉淀。
未来:
● 把”成功的 POC 改写模式”存进向量库
● 下次遇到类似目标,直接复用历史经验
7.3 主动学习
现状:模型参数固定。
未来:
● 用 LoRA 微调
● 把”成功任务”作为训练数据
● 让 LLM 在 Hati 场景下越来越准
7.4 实时决策可视化
现状:Web UI 只显示”现在在干啥”。
未来:
● 实时画 ReAct 决策树
● 让用户介入决策(“这个目标先别测 XSS”)
● 半自动化 → 监督式自动化
- 写在最后:开源与安全
Hati 已经开源,MIT 协议。
但必须强调:这个工具仅供合法的安全测试和学术研究使用。
# 来自 README本工具仅供合法的安全测试和学术研究使用。使用前请确保已获得目标系统所有者的书面授权。使用者需遵守当地法律法规,作者不承担任何因滥用本工具而导致的法律责任。
我在每次 PR 合并前都会确认:
● ✅ 没有硬编码的”恶意 payload”
● ✅ 默认配置下不会真的打未授权目标
● ✅ 审计日志默认开启
- 联系和反馈
● 绿泡泡和github同名,作者多年甲方经验,目前在乙方厂商做ai安全分析,在岗看机会中~欢迎交流
● 项目地址:https://github.com/Gach0ng/Hati
● GitHub Issues:提 bug、提建议
● PR 欢迎:加技能、改 prompt、优化 RAG 都行
● 安全问题:请私下交流,不要在公开 issue 提
感谢您的耐心,祝挖洞愉快。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:TtTeam 《第八章 – 重生之我是AI人:扩展与反思 — Hati踩过的坑》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论