ossf/package-analysis
GitHub: ossf/package-analysis
OpenSSF 推出的开源软件包行为分析工具,通过沙盒环境中的动态与静态分析检测开源生态中的恶意软件包。
Stars: 901 | Forks: 73
[](https://api.securityscorecards.dev/projects/github.com/ossf/package-analysis)
# Package 分析
Package Analysis 项目用于分析开源仓库中可用软件包的功能。该项目旨在寻找表明恶意软件的行为:
- 它们访问了哪些文件?
- 它们连接了哪些地址?
- 它们运行了哪些命令?
该项目还会追踪软件包行为随时间的变化,以识别以前安全的软件何时开始表现出可疑行为。
这项工作旨在通过检测恶意行为来提高开源软件的安全性,为选择软件包的消费者提供信息,并为研究人员提供关于该生态系统的数据。
此代码旨在与
[Package Feeds](https://github.com/ossf/package-feeds) 项目协同工作,
并且最初是在那里起步的。
有关此项目检测到的内容示例,请查看
[案例研究](docs/case_studies.md)。
## 工作原理
该项目的组件包括:
- [调度器](./cmd/scheduler/) - 从 Package Feeds 为分析 worker 创建作业。
- 分析(一次性 [analyze](./cmd/analyze/) 和 [worker](./cmd/worker/)) -
通过对每个软件包进行静态和动态分析来收集行为数据。
- [加载器](./function/loader/) - 将分析结果推送到 BigQuery 中。
我们的目标是让所有这些组件协同工作,并提供可扩展的、由社区运行的基础设施,以研究开源软件包的行为并寻找恶意软件。我们也希望这些组件可以独立使用,为任何感兴趣的人提供软件包订阅源或运行时行为数据。
Package Analysis 项目目前由以下 pipeline 组成:

1. 监控软件包仓库以获取新软件包。
2. 调度每个新软件包交由一个 worker 池进行分析。
3. worker 在 sandbox 内部对软件包执行动态分析。
4. 结果将被存储并导入到 BigQuery 中以供检查。
通过 [gVisor](https://gvisor.dev/) 容器进行沙盒化处理,可确保软件包被隔离。在 sandbox 内部引爆软件包使我们能够捕获 strace 和网络包数据,这些数据可以表明与系统的恶意交互,以及可用于泄露敏感数据或允许远程访问的网络连接。
## 公共数据
此数据可在公开的 [BigQuery 数据集](https://console.cloud.google.com/bigquery?d=packages&p=ossf-malware-analysis&t=analysis&page=table)中获取。
## 配置
这些子项目的配置包含用于各种 endpoint 的一系列环境变量。这些 endpoint 使用兼容 goclouddev 的 URL 字符串进行配置。在这种情况下,将会链接到相关文档,并且应忽略 `DRIVER-Constructor` 部分,而应使用 `DRIVER` 部分,因为它们适用于这些子项目中的现有配置。请注意,并非所有的 driver 都受支持,但只需对代码仓库进行微小的补丁即可轻松添加它们。有关调度器添加 kafka 的示例,请参见
[这一行代码](https://github.com/ossf/package-analysis/commit/985ab76a67d29d2fc8582b3920643e7eb963da8a#diff-8565ef29cfb886db7902792675eddce1e7a0ccfe33428a59e7f2e365b354af88R12)。
有关这些变量的示例,可以在
[e2e 示例 docker-compose](configs/e2e/docker-compose.yml) 中找到。
### 分析
`OSSMALWARE_WORKER_SUBSCRIPTION` - 可用于设置来自调度器的数据的订阅 URL。其值应遵循
[goclouddev 订阅](https://gocloud.dev/howto/pubsub/subscribe/)规范。
`OSSF_MALWARE_ANALYSIS_RESULTS` - **可选**:可用于设置发布结果的目标 bucket URL。其值应遵循
[goclouddev bucket](https://gocloud.dev/howto/blob/)规范。
`OSSF_MALWARE_ANALYSIS_PACKAGES` - **可选**:可用于设置获取自定义上传软件包的 bucket URL。其值应遵循
[goclouddev bucket](https://gocloud.dev/howto/blob/)规范。
`OSSF_MALWARE_NOTIFICATION_TOPIC` - **可选**:可用于设置主题 URL,以便在新的软件包分析完成后发布供消费的消息。其值应遵循
[goclouddev 发布](https://gocloud.dev/howto/pubsub/publish/)规范。
### 调度器
`OSSMALWARE_WORKER_TOPIC` - 可用于设置发布数据的 topic URL,以供分析 worker 消费。其值应遵循
[goclouddev 发布](https://gocloud.dev/howto/pubsub/publish/)规范。
`OSSMALWARE_SUBSCRIPTION_URL` - 可用于设置来自 [package-feeds](https://github.com/ossf/package-feeds)数据的订阅 URL。
其值应遵循
[goclouddev 订阅](https://gocloud.dev/howto/pubsub/subscribe/)规范。
## 本地分析
要在本地运行分析代码,最简单的方法是使用 Docker 镜像
`gcr.io/ossf-malware-analysis/analysis`。可以通过
`make build/image/analysis` 进行构建,或者也可以直接使用公共镜像。
此容器使用 `podman` 来运行一个嵌套的、沙盒化的 ([gVisor]) 容器以进行
分析。
以下命令会将 JSON 结果转储到 `/tmp/results`
并将完整日志转储到 `/tmp/dockertmp`。
### 线上软件包
要在实时软件包上运行此命令(例如 [pypi.org](https://pypi.org) 上的最新版本 "Django" 软件包)
```
$ scripts/run_analysis.sh -ecosystem pypi -package Django
```
或者指定版本
```
$ scripts/run_analysis.sh -ecosystem pypi -package Django -version 4.1.3
```
### 本地软件包
要对位于本地归档文件 `/path/to/test.whl` 中、名为 'test' 的本地 PyPi 软件包运行分析
```
$ scripts/run_analysis.sh -ecosystem pypi -package test -local /path/to/test.whl
```
### Docker 说明
(注意:这些选项由 `scripts/run_analysis.sh` 脚本处理)。
需要 `--privileged` 和兼容的文件系统才能正确运行嵌套容器。同时也使用了 `-v /var/lib/containers:/var/lib/containers`,因为它允许缓存 sandbox 镜像并支持本地开发。
## 开发
### 测试
有关如何使用模拟恶意活动的示例软件包进行测试,请参阅 `sample_packages/README.md`。
### 必需依赖
- Go v1.26.3
- Docker
# 贡献
如果您想参与进来,或者有任何想法想要讨论,我们会在 [OSSF Securing Critical Projects Working Group](https://github.com/ossf/wg-securing-critical-projects) 的会议上讨论这个项目。
请参阅[社区日历](https://calendar.google.com/calendar?cid=czYzdm9lZmhwNWk5cGZsdGI1cTY3bmdwZXNAZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ)了解日程安排和会议邀请。
标签:DAST, EVTX分析, Prompt Engineering, 云安全监控, 恶意软件分析, 日志审计, 请求拦截, 静态分析