目录
在 SafeDep,我们运营着一个大规模的恶意包扫描基础设施。利用这一基础设施,我们持续监控 npm 和 pypi 包注册表中是否存在恶意包。与漏洞不同,恶意包并非由开发者自愿报告,因此我们需要实时检测。我们采用静态代码分析与基于 LLM 的分析相结合的方式来完成这项工作。了解更多关于如何使用 vet 进行恶意包分析的信息。
智能体工作流
误报是任何采用静态代码分析的工具都面临的常见问题。特别是在恶意包分析领域,我们的目标是降低误报率,以减少人工分类所需的工作量。为此,我们构建了一个实验性的 Model Context Protocol (MCP) 服务器,可以帮助 Claude Desktop 等 MCP 客户端对被我们的实时扫描基础设施标记为恶意的包进行额外的分析层。特别地,我们希望让 LLM 能够访问我们分析流程中使用的所有工具和资源。这包括:
- 静态代码分析工具(AST 查询、搜索等)
- 代码能力分析引擎
- YARA forge 规则匹配工具
- SafeDep Insights API
- 包注册表适配器(工具)
- GitHub API
- 针对每个生态系统的指导提示模板
该设置的简化架构如下所示。
虽然结果对我们来说很有前景且令人兴奋,但要将这项技术产品化还有很长的路要走。例如,我们的自动化公包注册表监控系统使用的是静态编码的工作流,目前运行时间成本仅为智能体执行的不到 10%。它还通过利用静态代码分析和自定义规则来最大程度减少 LLM 调用,从而实现更好的扩展性。
示例分析
以下是 Claude Desktop 运行我们的智能体工作流对一个被我们的实时扫描基础设施标记为恶意的包的未编辑分析结果。通常我们需要人工对这个包进行分类,然后提供详细的分析报告。
注意: 如果您认为 ok-script 被错误标记为恶意,请发送附带支持证据的说明到 [email protected]。
🚨 安全分析:ok-script 0.0.504 🚨
❗ 执行摘要
ok-script 0.0.504 展现出强烈的恶意意图迹象,包括混淆的功能、可疑的二进制组件以及可能有害的系统操作能力。
📊 包概览
| 属性 | 值 |
|---|---|
| 包名称 | ok-script |
| 版本 | 0.0.504 |
| 仓库 | https://github.com/ok-oldking/ok-script |
| 风险等级 | 🔴 高 |
🔍 主要发现
📁 可疑的二进制文件
- 🚩 检测到伪装成二进制可执行文件:
ok/__init__.cp312-win_amd64.pyd(2.7MB)- 文件被分类为
application/vnd.microsoft.portable-executable,扩展名为.exe - 在包导入时通过
__init__.py文件加载
- 文件被分类为
🔄 危险的自动更新机制
- 🚩 该包包含一个复杂的自动更新系统(
GitUpdater.py),能够:- 从远程仓库自主下载代码
- 在新的虚拟环境中执行代码
- 可以终止进程并修改系统 PATH 值
- 使用 Windows API 操作文件所有权
# Suspicious process termination code from GitUpdater.py
def wait_kill_pid(pid):
process = psutil.Process(pid)
process.terminate()
process.wait(timeout=30)
logger.info(f'kill process {pid} exists {psutil.pid_exists(pid)}')💻 系统操作能力
- 🚩 管理员检测:检查管理员权限的函数
- 🚩 系统控制:可以阻止系统睡眠并操作显示设置
- 🚩 硬件识别:访问 BIOS 序列号和硬件信息
- 🚩 进程控制:可以枚举并终止系统进程
📝 仓库分析
| 仓库属性 | 观察结果 | 风险指示 |
|---|---|---|
| 创建日期 | 2023年12月 | 尽管版本号很高,但创建时间很新 |
| 内容 | 几乎为空(仅 README.md) | 仓库可能只是一个占位符 |
| 活动 | 非常有限(2次提交) | 没有与二进制复杂度相匹配的开发活动 |
| 最新提交 | 2025年3月 | 非常近期的活动 |
🧪 漏洞评估
- 🚩 无 provenance 信息:包缺少 SLSA provenance 数据
- 🚩 无漏洞报告:包没有报告的漏洞(可能是由于使用量有限)
- 🚩 无流行度数据:表明合法的使用量很小
🔎 详细技术分析
🔍 导入的系统模块
该包导入了多个敏感模块:
psutil(进程操作)win32api、win32security(Windows 系统 API 访问)subprocess(命令执行)
🔄 自动更新利用路径
- 自动更新系统(
GitUpdater.py)检测到版本差异 - 通过多个代理服务器从远程控制的仓库下载代码
- 创建隔离的 Python 环境
- 以系统权限执行下载的代码
# GithubMultiDownloader.py contains a list of proxy servers for evading detection
download_url_us = [
['https://gh.h233.eu.org/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [@X.I.U/XIU2] 提供'],
['https://gh.ddlc.top/https://github.com', '美国',
'[美国 Cloudflare CDN] - 该公益加速源由 [@mtr-static-official] 提供'],
['https://dl.ghpig.top/https://github.com', '美国', '[美国 Cloudflare CDN] - 该公益加速源由 [feizhuqwq.com] 提供'],
# ... additional proxy servers omitted
]# Code from GitUpdater.py showing remote execution capabilities
def start_app(self):
communicate.update_running.emit(True, True)
logger.info(f'start_app enter')
try:
new_ver = self.starting_version
entry = 'main.py'
script_path = os.path.join('repo', new_ver, entry)
# [...snip...]
process = subprocess.Popen(
[python_path, script_path, f'--parent_pid={os.getpid()}'],
creationflags=subprocess.CREATE_NO_WINDOW,
close_fds=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)📝 建议
- 🛑 如果已安装,请立即删除此包:
pip uninstall ok-script - 🔍 扫描系统以查找入侵指标
- 🔐 检查是否存在未经授权的网络连接
- 📊 监控系统是否有异常进程活动
- 🧹 验证没有安装计划任务或持久化机制
- 🚫 将该包添加到组织阻止列表中
🧠 使用的分析技术
- 二进制文件类型分析
- 危险能力源代码审查
- 仓库元数据分析
- GitHub 提交历史调查
- 发布者信誉评估
结论:该包展现出与恶意软件一致的多项高风险指标。混淆的二进制代码、系统操作能力和自动更新机制的结合强烈表明此包旨在对受影响系统进行未授权访问和远程控制。
- npm
- 恶意软件
SafeDep 博客最新更新
关注以获取开源安全与工程的最新更新和见解