makash/scira

GitHub: makash/scira

SCIRA 是一款主机端供应链投毒事件响应代理,以单二进制形式帮助安全团队快速检测 PyPI 和 npm 生态中已知投毒事件的影响范围。

Stars: 0 | Forks: 0

# scira **SCIRA** 代表 **Supply Chain Incident Response Agent**(供应链事件响应代理)。 `scira` 是一个单二进制文件的主机/文件夹事件响应代理,专为软件供应链事件设计,目前主要支持 PyPI 和 npm。 开箱即用,SCIRA 可帮助您应对两起重大的供应链事件: - **PyPI 上的 LiteLLM** — 检测受损的 `litellm` 版本、IOC 域名、IOC 文件以及 Python 环境证据 - **npm 上的 Axios** — 检测受损的 `axios` 版本、恶意的 `plain-crypto-js` 依赖、IOC 域名以及 Node/npm 环境证据 作为首个版本,它整合了来自 [agent-infra-security](https://github.com/makash/agent-infra-security) 的特定生态系统事件响应专业知识,并内置了 `litellm` 和 `axios` 事件处理流程。 ![SCIRA demo](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/7b286b9495215824.gif) *一次快速扫描 → 对 SCIRA 内置事件之一的解释流程。* ## 为什么选择 SCIRA? 大多数人在 LiteLLM 泄露事件后构建的事件响应工具都落入以下四类之一: - 无法检查您实际机器的 Web 检查器 - 绑定到单一事件的一次性 bash 或 Python 脚本 - 需要 Claude Code 或其他主机代理的 agent 技能 - 没有报告结构或审计痕迹的手动命令列表 SCIRA 采用了不同的方法: - **单一二进制文件** — 无需首先信任该生态系统的工具即可扫描受损的生态系统 - **本地优先** — 直接检查代码库、主目录或服务器 - **结构化输出** — 人类可读的摘要、JSON 报告和有意义的退出代码 - **代理工作流** — 首先进行确定性扫描,然后进行可选的 AI 解释 - **支持离线扫描** — 核心扫描不需要网络访问 - **今日即可使用** — 为 LiteLLM PyPI 泄露和 Axios npm 泄露内置了响应流程 - **为成长而构建** — 该模型旨在随着时间的推移支持更多的事件配置文件 ## 内置事件响应 ### PyPI 上的 LiteLLM 使用 SCIRA 检查主机、代码库或用户环境是否受到 LiteLLM 泄露的影响。 SCIRA 会查找: - 受损的 `litellm` 版本 - Python 清单和锁文件中的宽松和固定引用 - 诸如 `models.litellm.cloud` 和 `checkmarx.zone` 等 IOC 域名 - 诸如 `litellm_init.pth` 等 IOC 文件 - 来自 Python 环境和缓存的已安装包证据 ### npm 上的 Axios 使用 SCIRA 检查主机、代码库或 CI 工作区是否受到 Axios 泄露的影响。 SCIRA 会查找: - 受损的 `axios` 版本 - 恶意的 `plain-crypto-js` 依赖 - `package.json` 和 `package-lock.json` 中的宽松和固定引用 - 诸如 `sfrclak.com` 等 IOC 域名 - 来自 npm 环境和缓存的已安装包证据 ## 它的功能 - 扫描目标文件夹或主机可见的广泛路径 - 在遍历目标树时忽略自动生成的路径,如 `.git/`、`target/` 和捆绑的技能资产 - 检查常见的 Python 和 Node/npm 清单及锁文件 - 搜寻精确的受损版本、宽松引用、IOC 文件、IOC 域名以及用户可见的环境证据 - 清晰地报告权限缺口,并仅在有帮助时建议使用 `sudo` - 可以选择使用 LLM 解释发现,使 CLI 感觉像一个代理,而不仅仅是一个扫描器 ## 快速开始 ``` scira scan litellm scira scan axios --target /srv/app scira scan litellm --all-dirs scira scan axios --format json --output axios-report.json ``` 如果配置了 LLM 访问权限并且您处于交互式终端中,`scira` 会在确定性扫描完成后主动提供解释报告的服务。 您也可以稍后解释已保存的 JSON 报告: ``` scira scan litellm --format json --output report.json scira explain report.json ``` ## 返回结果 终端摘要示例: ``` Status: likely_affected Why: - A compromised version or strong IOC evidence was found during the scan. - Found compromised version 1.82.8 in /srv/app/requirements.txt:1 - Found IOC domain models.litellm.cloud in logs/app.log:42 Immediate next steps: 1. Isolate the affected host or runner 2. Preserve evidence before cleanup 3. Rotate credentials in scope ``` 如果您需要可编写脚本或可共享的内容,请使用 JSON 输出: ``` scira scan litellm --target /srv/app --format json --output report.json ``` ## 服务器用法 SCIRA 的预期工作流程之一是:将单一二进制文件复制到服务器,以特定用户身份运行,并检查该用户的环境。 ``` scp scira-linux-amd64 server:/tmp/scira ssh server chmod +x /tmp/scira sudo -u myuser -H /tmp/scira scan litellm --target /home/myuser ``` 这在以下情况非常有用: - 您想要检查特定操作员或应用程序用户的主目录 - 您不想在服务器上安装 Python 包或辅助脚本 - 您想要确定性输出以及可以保存或传输到其他地方的报告 ## 安装 从 [SCIRA GitHub Releases 页面](https://github.com/makash/scira/releases) 下载正确的二进制文件,将其重命名为 `scira`,并赋予其可执行权限。 ### macOS (Apple Silicon) ``` curl -L -o scira https://github.com/makash/scira/releases/download/v0.2.0/scira-darwin-arm64 chmod +x scira xattr -d com.apple.quarantine ./scira 2>/dev/null || true ./scira scan litellm ``` ### macOS (Intel) ``` curl -L -o scira https://github.com/makash/scira/releases/download/v0.2.0/scira-darwin-amd64 chmod +x scira xattr -d com.apple.quarantine ./scira 2>/dev/null || true ./scira scan litellm ``` ### macOS 注意事项:Gatekeeper / 隔离 如果 macOS 提示无法打开该二进制文件,因为其来自身份不明的开发者,请在下载后移除隔离属性: ``` xattr -d com.apple.quarantine ./scira ``` 如果需要,您可以先验证该属性: ``` xattr ./scira ``` #### 为什么开发工具会遇到这种情况 当您从 GitHub Releases 下载 CLI 二进制文件时,macOS 通常会使用 `com.apple.quarantine` 标记它。在经过公证、签名或明确允许之前,Gatekeeper 会将其视为未知的互联网下载。 这对于独立和开源开发人员工具来说是正常的。`scira` 是直接发布的二进制文件,而不是通过 Apple 渠道分发的应用程序,因此您可能需要在运行前清除隔离。 #### 为什么这不是单纯的安全 Theater 这应该是一个深思熟虑的开发者工作流,而不是盲目绕过: - 从官方的 [`makash/scira` releases 页面](https://github.com/makash/scira/releases) 下载 - 验证 URL 和代码库所有者 - 如果您需要更强的信任检查,请验证 `sha256sums.txt` - 然后移除隔离并运行它 换句话说,您不是在说: 您是在说: 如果 `scira` 以后添加了代码签名和公证,这个手动步骤应该会消失。 ### Linux (x86_64) ``` curl -L -o scira https://github.com/makash/scira/releases/download/v0.2.0/scira-linux-amd64 chmod +x scira ./scira scan litellm ``` ## LLM 设置 ### 最简途径 设置一个单一的环境变量: ``` export SCIRA_LLM_API_KEY=... ``` `scira` 将尝试: - 从密钥的格式推断提供商 - 选择合理的默认模型 - 自动启用 AI 解释 ### 可选覆盖 ``` export SCIRA_LLM_PROVIDER=anthropic|openai|gemini export SCIRA_LLM_MODEL=... export SCIRA_LLM_BASE_URL=... ``` 当存在提供商原生环境变量时,它也支持: - `ANTHROPIC_API_KEY` - `OPENAI_API_KEY` - `GEMINI_API_KEY` - `GOOGLE_API_KEY` ## 信任模型 SCIRA 旨在将证据收集和推理分开。 - **确定性扫描结果是真实的来源** - **AI 解释是可选的和建议性的** - **核心扫描是本地优先且支持离线的** - **除非您明确启用基于 LLM 的解释,否则任何数据都不会离开本机** 这意味着您可以将 SCIRA 用作普通的本地事件响应 CLI,或者在需要帮助解释发现时将其用作更具代理性的工具。 ## 退出代码 - `0` = 扫描完成,没有可能受影响的指标 - `10` = 扫描完成,需要后续跟进 - `20` = 扫描完成,可能已受影响 - `1` = 操作/配置错误 ## 构建 ``` cargo build --release ``` 二进制文件名为: ``` ./target/release/scira ``` ## 捆绑情报 此代码库捆绑了以下内容的本地副本: - `bundled/pypi-supply-chain-response/SKILL.md` - `bundled/pypi-supply-chain-response/references/ioc-patterns.md` - `bundled/npm-supply-chain-response/SKILL.md` - `bundled/npm-supply-chain-response/references/ioc-patterns.md` 这些内容用作解释上下文,以便运行时与市场技能保持一致,同时在 Rust 中保持确定性扫描逻辑。 ## 当前范围 首个版本有意保持了较窄的范围: - 两个内置事件:`litellm`、`axios` - 两个生态系统起点:PyPI / Python 和 npm / Node.js - 优先考虑主机/文件夹 CLI 后续版本可以添加更多捆绑事件和更广泛的生态系统覆盖。
标签:Agent, AI依赖安全, Axios, GNU通用公共许可证, GraphQL安全矩阵, IOC检测, LiteLLM, Node.js, npm, PyPI, Python, 单文件二进制, 可视化界面, 安全扫描器, 库, 应急响应, 恶意依赖检测, 文档结构分析, 无后门, 无线安全, 本地扫描, 离线扫描, 网络信息收集, 自动化响应, 通知系统