CyberStrikeAI 人机协同(HITL)最佳实践:审批流、审计 Agent 与免审批白名单治理
发布时间:2026/9/17 20:31:51来源:尧图网络
CyberStrikeAI 人机协同HITL最佳实践审批流、审计 Agent 与免审批白名单治理【免费下载链接】CyberStrikeAIThe system of action for AI-native cybersecurity—where intent becomes governed execution, evidence becomes operational memory, and every operation improves the next.项目地址: https://gitcode.com/GitHub_Trending/cy/CyberStrikeAI本篇技术指南聚焦 CyberStrikeAI 的人机协同Human-in-the-loopHITL能力在 Agent 执行工具调用之前由人工或审计 Agent 先行审批从而对文件写入、命令执行、C2 任务与 WebShell 操作等高危行为进行管控并留下审计轨迹。读完本文你将掌握 HITL 的完整配置方式Web UI 与config.yaml、先人工后委派的分阶段审批策略、Audit Agent 小模型接管常规审批的落地方法以及免审批白名单的保守治理原则并理解底层实现机制配置继承、白名单并集、保守拒绝语义可直接用于真实渗透测试与生产环境的安全运营。HITL 是什么为什么要在 Agent 执行前设一道闸CyberStrikeAI 的多智能体编排可以让 Agent 自主调用大量安全工具扫描、利用、C2、WebShell 等。HITL 的作用是在工具调用真正执行之前插入一道闸门Agent 提出调用系统先暂停执行交由审批方裁决通过后才放行拒绝则返回反馈让模型修正迭代。它的核心价值有三点控制高危操作删除/覆盖数据、修改账号权限、持久化、横移、面向生产目标的写操作等必须有人把关审计留痕每次审批请求、裁决结果与理由都会持久化到审计日志形成可追溯的操作证据链审计 Agent 接管当人工审批积压时可以把常规、低风险请求的审批委派给一个小模型驱动的 Audit Agent让人工专注处理高风险裁决。需要强调的是HITL 的审批只解决Agent 是否该执行的治理问题它不会绕过 RBAC 与资源范围——白名单只是跳过审批这一环并不授予额外访问权限详见下文白名单的边界语义。在哪里配置Web UI 与 config.yaml 双入口Web UI 入口在 Web 界面的System Settings系统设置→ Human-in-the-loop人机协同页面可以配置以下项全局默认审批方Global default reviewerhuman或audit_agent审计 Agent 专用模型hitl.audit_model已裁决审计日志保留天数Resolved audit log retention days免审批工具白名单hitl.tool_whitelist审批模式approval与审查编辑模式review-edit的审计提示词。config.yaml 示例以下是 config.example.yaml 中完整的hitl配置块含注释可直接复制到你的配置文件中按需裁剪hitl: # 全局默认人机协同模式off关闭approval审批模式review_edit审查编辑新建会话无独立配置时沿用 default_mode: off # 全局默认审批方human人工审批audit_agent审计 Agent新建会话无独立配置时沿用 default_reviewer: human # 全局默认审批等待时限秒3005分钟0不限时新建会话无独立配置时沿用 default_timeout_seconds: 300 # 审计 Agent 专用模型字段留空则复用上方 openai 配置。建议 model 填小模型用于降低审批成本。 audit_model: provider: # openai / claude留空跟随 openai.provider base_url: # 留空跟随 openai.base_url api_key: # 留空跟随 openai.api_key model: # 留空跟随 openai.model例如可填 gpt-4o-mini / qwen-turbo / deepseek-chat # 已决策审计日志保留天数与 MCP 监控一致省略默认 900 表示不自动清理 retention_days: 90 # 按你环境里的真实工具名增删与侧栏一致、小写不敏感不需要全局免审批可改为 [] tool_whitelist: [read_file, ls, list_dir, glob, grep, tool_search, upsert_project_fact, get_project_fact, list_project_facts, search_project_facts, list_vulnerabilities, get_vulnerability, get_asset, query_assets, list_knowledge_risk_types, get_tool_execution, wait_tool_execution, batch_task_list, batch_task_get, manage_webshell_list, c2_event, c2_file] # audit_agent_prompt: | # 审批模式留空使用内置默认可在「人机协同」页编辑 # audit_agent_prompt_review_edit: | # 审查编辑模式留空使用内置默认 audit_agent_prompt: |- # ...完整默认提示词见下方把策略编码进提示词一节 audit_agent_prompt_review_edit: |- # ...审查编辑模式专用默认提示词输出格式要求 editedArguments 字段配置参数的完整语义对应 internal/config/config.go 中的HitlConfig结构体各字段取值与默认行为如下配置项类型取值/默认说明default_modestringoff/approval/review_edit省略默认off全局默认协同模式feedback/followup被归一化为approval见EffectiveDefaultModeconfig.godefault_reviewerstringhuman/audit_agent省略默认human全局默认审批方agent/ai别名也映射为audit_agentEffectiveDefaultReviewerconfig.godefault_timeout_secondsint省略默认3000表示不限时负数视为0审批等待超时后系统自动拒绝EffectiveDefaultTimeoutSecondsconfig.goretention_daysint省略默认900表示不自动清理已裁决审计日志非 pending 的hitl_interrupts保留天数RetentionDaysEffectiveconfig.goaudit_modelOpenAIConfig字段级继承审计 Agent 专用模型空字段继承主openai配置见下文tool_whitelist[]string默认空全局免审批工具名大小写不敏感audit_agent_prompt/audit_agent_prompt_review_editstring空则使用内置默认两种模式各自的审计提示词EffectiveAuditAgentPromptForModeconfig.goaudit_model 的部分配置继承audit_model支持部分配置留空的字段会自动继承已解析的默认 AI 渠道openai主配置。其实现位于AuditModelEffectiveinternal/config/config.go先以主配置为基底再逐个用audit_model中非空的provider、base_url、api_key、model、max_total_tokens、max_completion_tokens覆盖。因此最常见的做法是只填model让审批跑在更便宜的小模型上例如hitl: audit_model: model: qwen-turbo # 只填 model其余继承主渠道全局默认与会话级配置的合并规则HITL 支持全局默认 会话级覆盖的两层配置全局默认config.yaml的hitl块作用于新建会话无独立配置的会话沿用全局默认见loadHITLConversationConfiginternal/handler/hitl.go会话级配置Web 侧栏或 API可独立开关、设置模式、审批方、超时与白名单持久化到hitl_conversation_configs表白名单取并集运行时生效的白名单 config.yaml全局白名单 ∪ 会话白名单 ∪ 内置免审批元工具。hitlRequestWithMergedConfigWhitelistinternal/handler/hitl.go负责把三者合并后注入运行时侧栏「应用」操作还会把会话白名单合并写回config.yaml并立即生效MergeHitlToolWhitelistIntoConfig。值得注意的是内置免审批元工具HitlExemptMetaToolsinternal/multiagent/hitl_toolsearch_compat.gotool_search, skill, task, write_todos, write_file, transfer_to_agent, exit, TaskCreate, TaskGet, TaskUpdate, TaskList, upsert_project_fact, get_project_fact这些工具始终免审批原因是硬依赖tool_search若被 HITL 拒绝其结果与 Eino toolsearch 中间件不兼容会导致模型链路硬崩write_file必须免审批否则长脚本/请求体无法先安全落盘模型输出修复链路会被再次阻塞。这是从源码结构可以确认的设计权衡你在规划白名单时无需也不应把它们排除在外。另一个关键语义在shouldInterruptinternal/handler/hitl.go当会话白名单为空时意味着所有工具都需要审批只有白名单内工具才跳过审批。这与默认放行的直觉相反务必注意。推荐审批策略先人工后逐步委派1. 先以人工为主观察后逐步委派上线初期建议保持最保守的配置default_reviewer: humantool_whitelist只放行明确只读的工具文件写入、命令执行、C2 任务、WebShell 操作一律走人工审批。运行一段时间后结合审计日志Human-in-the-loop → Audit logs识别出反复出现、且从未造成问题的低风险操作再逐步移入白名单。白名单的扩充应该是由审计数据驱动的增量决策而不是一次性拍脑袋放行。2. 人工跟不上时用小模型接管常规审批当待审批请求开始积压时把默认审批方切换为审计 Agent 并使用小模型hitl: default_reviewer: audit_agent audit_model: model: your-small-reviewer-model适合交给小模型审批的典型请求只读查询信息侦察reconnaissance端口与服务扫描目录枚举非破坏性的验证类命令。必须保留人工审批的请求删除、覆盖或清空数据修改权限、密码或账号持久化persistence、横向移动lateral movement及高危 C2 任务面向生产目标的写入操作。3. 把策略编码进提示词审计 Agent 的提示词应该描述操作策略而不是笼统地说请小心。策略要明确四件事哪些低风险动作通常放行、哪些破坏性动作必须拒绝、哪些情况必须升级给人工、审查编辑模式下可以如何收窄参数。原文档给出的策略片段Approve routine reconnaissance, read-only queries, and port scans by default. Reject file deletion, database clearing, account or permission changes, persistence, and stopping critical services. Reject actions outside the user-authorized target scope. In review-edit mode, you may narrow paths, targets, or command arguments before approving, but must not expand the attack surface.仓库内置的默认审计提示词hitlAuditAgentPromptBaseinternal/config/config.go本身就是一套完整的策略编码范本值得直接参考或在其基础上定制规则优先级必须 reject 的规则 必须 approve 的规则 默认放行规则同时命中 reject 与 approve 时必须 reject必须 reject 的高危情形示例非穷举修改/重置任意用户或管理员密码、强制下线真实用户修改服务器或服务配置系统配置、Web/数据库参数、防火墙、启动项、计划任务修改/创建/删除用户、角色、权限删除或大规模破坏数据/文件DROP/TRUNCATE/DELETE 全表、rm重要文件、清空数据库停止、禁用、重启业务服务systemctl stop、kill关键进程、shutdown、reboot大规模压测或高并发造成 DoS必须 approve 的情形即使看起来攻击性强或包含写操作各类漏洞探测与利用 payloadSQL 注入含读写型、命令注入、反序列化、文件包含、路径遍历、SSRF、SSTI、XXE 等文件上传测试含上传/写入 webshell命令执行探测、反弹 Shell、dnslog/数据外带探测数据库命令执行、写文件、写计划任务、内存马注入等 getshell 利用常规速率的口令爆破信息收集、端口/目录扫描、枚举、抓取攻陷后无害侦察命令whoami/id/uname/ls/cat等判定基调写本身不是拦截理由——渗透测试大量依赖写操作注入、上传、爆破、getshell关键看是否破坏「业务可用性 / 关键数据完整性」拿不准时放行宁可放过可恢复的测试不要误拦合法攻击。审批模式approval要求模型只输出一行 JSON{decision:approve|reject,comment:实际操作...成功后的后果...命中规则...}审查编辑模式review_edit额外允许输出editedArguments字段仅 approve 且需要改参时填写要求提供完整替换后的工具参数对象、只做最小必要修改以收窄范围且禁止扩大攻击面不得扩大目标范围、提升权限或引入破坏性参数无法安全改参时应 reject 而不是勉强 approveinternal/config/config.go。4. 白名单保持保守白名单工具跳过审批因此要保持列表稳定且低风险。推荐的可白名单工具分组来自 docs/en-US/hitl-best-practices.md分组推荐工具本地只读read_file、ls、glob、grep、tool_search项目与漏洞读取get_project_fact、list_project_facts、search_project_facts、list_vulnerabilities、get_vulnerability资产与知识元数据读取get_asset、query_assets、list_knowledge_risk_types执行与任务状态读取get_tool_execution、wait_tool_execution、batch_task_list、batch_task_get本地管理元数据读取manage_webshell_list、c2_event、c2_file注意事项这些内置 MCP 读取仍受 RBAC 与资源范围约束白名单只绕过 HITL 审批不授予额外权限list_dir只有在该工具实际叫这个名字时才有效——Eino 文件系统目录列举工具的实际名称是ls避免全局白名单化的工具任意 shell 执行类工具、文件写/删类工具、C2 任务类工具、WebShell 命令执行类工具避免白名单化名义上只读但会向目标或外部服务发请求的工具如webshell_file_read、webshell_file_list、search_knowledge_base避免白名单化复用型工具——同一工具既含读又含写动作的如c2_session、c2_listener、c2_profile、c2_task_manage。模式选择Off / Approval / Review-edit模式适用场景Off本地实验室或完全可信的工具链Approval仅批准/拒绝不修改参数Review-edit让审计 Agent 在批准前收窄参数如果你配置了小模型作为审计 Agent建议先使用Approval模式——它只要求模型输出decision和comment裁决负担最小。只有当你希望 AI 安全地收窄路径、目标范围或命令参数时再切换到Review-edit模式。从实现上看两种模式共享同一套裁决管线区别仅在于是否接受editedArguments在 internal/handler/hitl.go 的waitDecision中只有 review_edit 模式会保留 edited arguments其他模式一律忽略auditAgentReview里也有同样的保护逻辑internal/handler/hitl_audit_agent.go。收到editedArguments后工具调用的argumentsObj会被整体替换并重新序列化回argumentsinternal/handler/hitl.go。审计 Agent 的裁决如何产生与解析当会话审批方为audit_agent时工具调用命中审批后走auditAgentReviewinternal/handler/hitl_audit_agent.go其调用细节决定了裁决的可靠性与成本输入buildAuditAgentReviewInput把hitlMode、toolName以及arguments/argumentsObj/command/userMessage/thinking/reasoningChain/planning等字段组装成格式化 JSON 发给模型参数temperature: 0.1低随机性、max_completion_tokens: 1024、thinking显式禁用避免 Qwen 等把正文放进reasoning_content导致解析失败超时单次审计调用 90 秒上下文超时保守拒绝API Key 或 Model 未配置、LLM 调用失败、无有效响应、响应无法解析——全部保守拒绝决策为reject不会带病放行决策归一化normalizeAuditAgentDecision把模型输出统一为approve/reject支持approved/pass/allow/yes/accept等英文别名以及通过/批准/允许/同意/放行、拒绝/驳回/禁止/否决等中文表述internal/handler/hitl_audit_agent.go容错解析parseAuditAgentLLMContent依次尝试完整文本、去除 markdown 代码围栏后的文本、提取的第一个 JSON 对象等候选兼容模型输出前后夹杂散文的情况。以上行为均有测试用例佐证例如 internal/handler/hitl_audit_agent_test.go 覆盖了 approve/reject、中文决策词、markdown 代码围栏包裹、散文包裹 JSON、editedArguments提取等场景TestParseAuditAgentLLMContentApprove、TestParseAuditAgentLLMContentReject、TestParseAuditAgentLLMContentChineseDecision、TestParseAuditAgentLLMContentWithEditedArguments等。运行机制中断、超时与安全生命周期从 internal/handler/hitl.go 可以还原出一次 HITL 审批的完整生命周期Agent 发起工具调用shouldInterrupt判断该会话是否开启 HITL 且工具不在白名单内命中审批则创建一条hitl_interrupts记录状态pending并通过 SSE 向 Web 前端推送hitl_interrupt事件含createdAt/timeoutSeconds/expiresAt审批方为audit_agent时直接调用 LLM 裁决hitl_audit_agent_started→hitl_audit_agent事件审批方为human时请求进入内存待办队列等待人工在侧栏批准/拒绝/忽略裁决结果写回数据库decideddecisiondecision_commentdecided_by并向 Agent 执行链路返回hitl_resumed放行或hitl_rejected拒绝模型基于反馈继续迭代事件拒绝时的反馈以NewHumanRejectError形式返回给 Eino 中间件层internal/multiagent/hitl_middleware.go让模型感知并修正。三个值得注意的安全细节超时自动拒绝默认等待 300 秒配置为0则不限时超时后系统以HITL timeout auto-reject for safety为由自动拒绝而不是自动放行internal/handler/hitl.go进程重启清理服务启动时会把上一进程遗留的所有pending中断标记为cancelled/rejectprocess restarted因为内存中的决策通道已丢失、永远无法裁决EnsureSchemainternal/handler/hitl.go审计持久化已裁决的审批记录按retention_days策略在 internal/hitl/retention.go 中实现清理与 MCP 监控保留策略保持一致。运维建议与落地清单综合原文档的运维要点与源码实现给出如下落地清单定期复盘审计日志经常查看Human-in-the-loop → Audit logs根据裁决分布持续调优白名单与审计提示词审计数据是白名单扩缩容的唯一依据高危环境坚持人工终审在高风险环境中保持default_reviewer: human审计 Agent 仅用于给出建议可将其作为辅助意见通道信任保守拒绝小模型审查失败时CyberStrikeAI 默认保守拒绝不会放行存疑操作——这正是把审批权交给小模型的安全底线模型变更后必须测试修改hitl.audit_model后在设置页点击Test audit model验证连通性与输出格式避免上线后批量裁决失败生产/客户系统对生产、客户或真实业务系统始终保持人工作为最终审批人明确授权范围策略提示词中务必写明拒绝超出用户授权目标范围的动作把 HITL 与项目授权边界可参考 docs/zh-CN/hitl-best-practices.md 中文版与其他安全类文档联动起来。HITL 的正确姿势是层层递进先用人工守住全部风险面再用审计数据识别低风险操作逐步放行最后用配置了策略提示词的小模型接管常规审批而白名单始终保守、人工始终兜底。这套机制让 CyberStrikeAI 在高自主性的多智能体渗透编排中依然保持意图受控执行、每次操作都有据可查的治理底线。【免费下载链接】CyberStrikeAIThe system of action for AI-native cybersecurity—where intent becomes governed execution, evidence becomes operational memory, and every operation improves the next.项目地址: https://gitcode.com/GitHub_Trending/cy/CyberStrikeAI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网