ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

安全硬核拆解:mercury-agent的SSRF防护、Shell黑名单与沙箱机制全景解析

安全硬核拆解:mercury-agent的SSRF防护、Shell黑名单与沙箱机制全景解析 安全硬核拆解mercury-agent的SSRF防护、Shell黑名单与沙箱机制全景解析【免费下载链接】mercury-agentSoul-driven AI agent with permission-hardened tools, token budgets, and multi-channel access. Runs 24/7 from CLI, Telegram or More.项目地址: https://gitcode.com/gh_mirrors/me/mercury-agentmercury-agent 是一个可以 7×24 小时从 CLI、Telegram 等渠道运行的 AI 智能体AI Agent能执行 Shell 命令、抓取网页、读写文件——这也正是它最需要缰绳的原因。本文带你硬核拆解 mercury-agent 的三大安全机制SSRF 防护拦截网络内探、Shell 黑名单三级命令管控与软件沙箱工作目录隔离、超时熔断与机密脱敏看看它如何让一个全天候在线的 AI变得可信。一、为什么 24/7 在线的 AI 助手最需要约束想象一下你的 AI 助手挂在服务器上整夜运行随时可以从 Telegram 被唤醒替你跑命令、抓网页、改文件。它听起来很爽但风险同样真实️SSRF服务端请求伪造攻击者诱导 AI 去抓取http://127.0.0.1:6379或云服务器的元数据接口169.254.169.254把你的内网信息反射回对话里危险命令一句rm -rf /或shutdown就能让机器告别越权文件访问AI 顺着符号链接摸出工作目录读写你根本没授权的文件。mercury-agent 的答案不是信任模型会听话而是三道独立防线全部在工具执行层强制执行模型求情也没用防线防护对象核心源码SSRF 守卫AI 发起的所有网络请求ssrf.tsShell 黑名单AI 执行的每条命令blocklist.ts软件沙箱工作目录、超时、输出、机密permissions.ts二、SSRF 防护六层校验拦截 AI 的网络探针什么是 SSRF为什么 AI 是高危目标SSRFServer-Side Request Forgery服务端请求伪造的本质是让一台能访问内网的服务器替你访问你不该访问的地址。普通程序请求的地址由开发者写死而 AI 的请求地址来自对话——攻击者只要在聊天里塞一句帮我看看这个链接就可能把探针伸进你的内网。mercury-agent 在 1.2.3 版本把fetch_url与install_skill等所有会出网的工具全部收口到同一个守卫 guardedFetch并针对 issue #108 的负责任披露做了加固完整处置记录见 ssrf-108-response.md。SSRF 守卫的六层拦截#拦截层防什么1协议白名单只允许http/httpsfile://、gopher://一律拒绝2私有地址识别127.0.0.1、10.x、192.168.x、169.254.169.254云元数据、CGNAT、多播及localhost、*.local、*.internal全部拦截IPv4/IPv6 全覆盖3DNS 混合应答 fail-closed域名解析出任何一个私有地址记录就整体拒绝——因为无法预知连接时会被解析到哪一个4地址钉扎防 DNS 重绑定校验通过的 IP 被钉在连接上恶意 DNS 服务器无法在校验和连接之间偷换地址TOCTOU 攻击5每一跳重定向都复检使用手动重定向模式公共 URL 跳一次私有地址也会被当场拦下6重跳数上限最多 5 次重定向防重定向环路这套设计值得细品的地方是第 4 层很多实现先校验、再请求中间留出的空隙恰好是 DNS 重绑定攻击的窗口。mercury-agent 让连接复用的恰好是校验过的那个 IP把窗口彻底焊死。 如果你确实在内网环境需要让 AI 抓取内网资源可以设置环境变量MERCURY_ALLOW_PRIVATE_FETCH1显式放行——默认是关的fail closed失败即拒绝才是默认姿态。三、Shell 黑名单三级命令管控体系mercury-agent 把 Shell 命令分成三个等级规则集中定义在 blocklist.ts并写入~/.mercury/permissions.yaml供你自定义。1️⃣ 永远不执行黑名单Blockedsudo、rm -rf /含rm -fr换位变体、mkfs、dd if*、shutdown、reboot、fork 炸弹:(){ :|: };:、Windows 下的format、del /s /q C:\*……这些命令无论什么权限模式、用户如何同意都直接拒绝没有任何商量余地。2️⃣ 自动放行安全只读白名单ls、cat、grep、find、git status、git diff等只读命令在任何模式下都免打扰这是不烦人体验的来源。3️⃣ 必须审批危险但合理的操作git push、npm publish、docker、rm -rf *、curl * | sh这类可能出事的命令在 Ask Me 模式下会弹出确认Yes / No / AlwaysAllow All 模式下才自动放行。关键细节命令链逐段检查最狡猾的攻击是借白名单洗白echo $(rm -rf ~)开头是白名单里的echo整串看起来无害。mercury-agent 的 splitShellSegments 会把命令按;、、管道、$()、反引号、子 shell 边界逐段拆开每一段单独过黑名单——即使藏在双引号里的命令替换也会被抽出检查。类似地find -delete、find -exec、cat 文件重定向改写、$HOME/~变量展开等伪装成只读的花样在 isSafeReadSegment 里都被点名不通过。四、软件沙箱给命令执行套上笼子mercury-agent 没有依赖操作系统级沙箱而是在 run-command.ts 与 permissions.ts 里用软件手段搭了一个等效的笼子共四块工作目录围栏cwdOnly命令里出现工作目录之外的绝对路径、../或 Windows 盘符路径时必须先通过文件系统作用域审批否则直接拒⏱️超时熔断命令默认 120 秒超时最长 600 秒到点先发SIGTERM5 秒宽限后升级SIGKILL杜绝僵尸构建拖死整个 Agent输出限额stdout/stderr 各限 1MB 缓冲、回传给模型的正文限 64KB防止恶意网页或命令输出撑爆内存、塞爆对话上下文机密脱敏Secret Redaction命令输出回传前经过 redactSecretssk-开头的 API Key、GitHub Token、AWSAKIA密钥、SlackxoxToken、passwordxxx等一律打码sk-1234****abcdAPI 密钥不会悄悄溜进会话日志。文件层面还有两道保险写入路径会做符号链接规范化canonicalizescope/link - /etc这种字面在作用域内、实际指向外面的写法会被识别并拒绝见 canonicalizePathWeb 面板的本地全放行设置永远不会静默提升来自远程通道的请求见 isGlobalAutoApproveActive。五、上手配置与自查清单查看/修改命令策略编辑~/.mercury/permissions.yamlblocked/autoApproved/needsApproval三个列表都可自定义自定义项与默认值合并生效默认项无法被删掉防误伤选对权限模式启动时选Ask Me默认高风险操作逐次确认或Allow All全程自动放行重启即重置——详细差异表见 permissions 文档验证 SSRF 拦截让 Agent 抓取一个指向http://127.0.0.1:xxxx的地址应看到Blocked: ... is a private/internal address (SSRF protection)的拒绝信息‍一键体检跑mercury doctor检查运行环境与配置参考 doctor 命令文档安全更新追踪SSRF 守卫、rm -fr变体入黑名单、0600 凭据文件、随机 Web 初始密码等变更均可在 CHANGELOG.md 的 1.2.3 安全章节查到。六、写在最后mercury-agent 的安全设计哲学可以概括为一句话永远不要相信模型会自觉要相信执行层会把关。SSRF 守卫把校验过的地址钉进连接连 DNS 重绑定都无隙可乘Shell 黑名单三级分层 命令链逐段审查让借白名单洗白的把戏失效软件沙箱用工作目录围栏、超时熔断、输出限额和机密脱敏把一条命令能造成的爆炸半径压到最小。对于想自建 24/7 AI 助手Telegram Bot、个人数字员工的开发者来说这份SSRF 防护 命令黑名单 沙箱的三层组合本身就是一份可直接借鉴的安全清单。【免费下载链接】mercury-agentSoul-driven AI agent with permission-hardened tools, token budgets, and multi-channel access. Runs 24/7 from CLI, Telegram or More.项目地址: https://gitcode.com/gh_mirrors/me/mercury-agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表