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 内置事件之一的解释流程。*
## 为什么选择 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, 单文件二进制, 可视化界面, 安全扫描器, 库, 应急响应, 恶意依赖检测, 文档结构分析, 无后门, 无线安全, 本地扫描, 离线扫描, 网络信息收集, 自动化响应, 通知系统