bosch-aisecurity-aishield/watchtower
GitHub: bosch-aisecurity-aishield/watchtower
一款面向 AI/ML 模型与 Notebook 的自动化安全扫描工具,帮助发现并分级漏洞以保障供应链安全。
Stars: 203 | Forks: 20

  
 
# AIShield.Watchtower 🔍: 强化 AI/ML 模型与 Notebook 安全
在当今快速发展的机器学习和人工智能(AI)领域,确保 AI 模型的安全已成为当务之急。这些模型是众多应用中决策背后的驱动力。因此,保障其完整性并防范潜在攻击仍是首要任务。遗憾的是,AI 生态系统中的关键组件,即 Jupyter notebook 和模型,在日常的安全评估中经常被忽视,使其成为潜在攻击者眼中脆弱且极具吸引力的目标。使用开源工具进行的初步测试描绘了一幅严峻的画面,突显了严重的局限性以及对定制化解决方案的迫切需求。
随着 AI/ML 模型继续重塑行业并推动创新,模型安全的重要性不言而喻。然而,在对 AI 潜力的兴奋之中,Jupyter notebook 和 AI 模型的安全性却一直被置于阴影之中。
一个说明这种安全盲区的典型例子与 Jupyter notebook 的广泛使用有关。在这些数字页面中,隐藏着为当今许多 AI 驱动的产品和服务注入活力的蓝图、代码和算法。然而,与其他代码库一样,Jupyter notebook 也无法避免可能无意中进入最终产品的漏洞。这些漏洞如果得不到解决,可能会成为网络攻击的网关,不仅危及 AI 驱动产品的完整性,还会危及用户数据的安全。
**AIShield Watchtower** 旨在自动化模型和 notebook 的发现过程,并进行全面的漏洞扫描。
它的功能不仅限于识别您代码库中的所有模型和 notebook。它还能评估风险,例如硬编码的机密信息、PII、过时/不安全的库、模型反序列化攻击、自定义的不安全操作等。
AIShield Watchtower 的突出之处在于它能够将扫描结果划分为四个不同的风险级别:“低危”、“中危”、“高危”和“严重”。这种分类使组织能够根据检测到的风险级别调整其安全工作。其自适应的方法和细致的风险分类极大地加强了安全防范,有效地巩固了安全防线。Watchtower 与 OWASP、MITRE、CWE、NIST AI RMF MAP 函数等行业标准的对齐,通过提供先进的安全解决方案,进一步提升了其市场地位。
## 目录
- [用法](#usage)
- [前置条件](#prerequisite)
- [检查 Jupyter Notebook 和模型的方法](#prerequisite)
- [CLI](#cli)
- [UI](#ui)
- [UI-Docker](#ui-docker)
- [报告](#reports)
- [功能](#features)
- [优势](#benefits)
- [限制](#limitation)
- [贡献](#contribution)
- [许可协议](#license)
## 用法
AIShield Watchtower 可用于检查 Jupyter notebook、requirements.txt 和 AI/ML 模型中的漏洞(参考:[功能](#features))。
要使用 AIShield Watchtower,请克隆 Watchtower 代码库。安装前置条件并扫描您的 notebook 和 AI/ML 模型。Watchtower 代码库中提供了一些入门的示例测试文件。
### 前置条件
- 要在 CLI 或 UI 版本中运行 Watchtower,主机系统应安装 python3 和 pip。
- 要运行 UI-Docker 版本,主机系统应安装 docker 和 docker-compose。
克隆 Watchtower 代码库
```
git clone https://github.com/bosch-aisecurity-aishield/watchtower.git
cd watchtower
```
### 使用以下命令安装 Watchtower 相关的依赖库:
#### 在 Linux(Ubuntu) 系统中运行此命令安装依赖:
```
./install.sh
```
#### 在 Windows 系统中运行此命令安装依赖:
```
./install.bat
```
### 检查 Jupyter Notebook 和 ML/DL 模型
切换目录到 src。
```
cd src
```
可以通过以下任何一种方法来检查 Jupyter Notebook 和 ML/DL 模型:
#### CLI
查看 CLI 模式下的可用选项
```
python watchtower.py -h
```
##### 扫描模型文件(.h5, .pb 和 .keras)
要扫描 .h5、.pb 和 .keras 格式的模型文件,请结合任何代码库使用 **--scan_tf_model** 参数。目前此功能仅在 Linux 操作系统上支持。
例如,针对 GitHub:
```
python watchtower.py --repo_type= --repo_url= --branch_name= --scan_tf_model
```
##### 检查公共 GitHub 代码库中的制品
```
python watchtower.py --repo_type=github --repo_url= --branch_name= --depth=
```
注意:branch_name 和 depth 参数是可选的。branch_name 的默认值为 main,默认 depth 值为 1
##### 检查 Huggingface 代码库中的制品
```
python watchtower.py --repo_type=huggingface --repo_url=
```
##### 扫描 AWS S3 bucket 中的制品
```
python watchtower.py --repo_type=s3 --bucket_name="" --region="" --aws_access_key_id="" --aws_secret_access_key=""
```
##### 扫描本地系统中的制品
```
#Select Repo_type = file for scanning individual file
python watchtower.py --repo_type=file --path=
#Select Repo_type = file for scanning individual file
python watchtower.py --repo_type=folder --path=
```

## UI
要使用 Watchtower UI,请执行以下命令:
```
python watchtower_webapp.py
```

## UI-Docker
要使用 Docker 运行 Watchtower UI,请为 watchtower 构建 Docker 镜像并运行 watchtower 镜像
```
cd watchtower
docker-compose build
docker-compose up
```
打开浏览器并粘贴:http://localhost:5015/watchtower-aishield
成功完成扫描后,Watchtower 漏洞报告将保存在 Watchtower 根目录的 reports 文件夹中。
要停止并移除 Watchtower 镜像,请执行以下命令
```
docker-compose down
```
## 报告
Watchtower 扫描成功完成后,将在以下路径生成三份报告:
- 对于 CLI 模式 - 所有三份报告将位于 Watchtower 的 src 文件夹中。用户可以参考控制台中摘要报告的最后一行,获取报告位置的完整路径。
- 对于 UI 模式 - 所有三份报告将位于 Watchtower 的 src 文件夹中。用户可以参考 UI 上的成功消息获取报告位置的路径。
- 对于 UI-Docker 模式 - 所有三份报告将位于 Watchtower 的 reports 文件夹中。用户可以参考 UI 上的成功消息获取报告位置的路径。
1. 摘要报告 - 摘要报告将提供有关检测到的模型文件和 notebook 文件数量、检测到的漏洞数量,以及映射到“严重”、“高危”、“中危”和“低危”的漏洞计数的信息。摘要报告示例片段:
```
{
"Repository Type": "github",
"Repository URL": "https://github.com/bosch-aisecurity-aishield/watchtower.git",
"Total Number of Model Found": 17,
"Total Number of Notebooks & Requirement files Found": 6,
"Total Number of Model Scanned": 17,
"Total Number of Notebooks & Requirement files Scanned": 6,
"Total Notebook & Requirement files Vulnerabilities Found": {
"Critical": 0,
"High": 40,
"Medium": 17,
"Low": 1
},
"Total Model Vulnerabilities Found": {
"Critical": 0,
"High": 4,
"Medium": 2,
"Low": 8
}
}
```
2. 严重性映射报告 - 此报告中将详细报告“高危”、“中危”和“低危”到模型或 Notebook 的映射关系。严重性映射报告示例片段:
```
{
"type": "Hex High Entropy String",
"filename": "repo_dir_1696827949/sample_test_files/sample_notebook_files/classification_notebook.py",
"hashed_secret": "8d1e60a0b91ca2071dc4027b6f227990fb599d27",
"is_verified": false,
"line_number": 47,
"vulnerability_severity": "High"
},
{
"type": "Secret Keyword",
"filename": "repo_dir_1696827949/sample_test_files/sample_notebook_files/classification_notebook.py",
"hashed_secret": "8d1e60a0b91ca2071dc4027b6f227990fb599d27",
"is_verified": false,
"line_number": 47,
"vulnerability_severity": "High"
}
```
3. 详细报告 - 在此报告中,Watchtower 用户将能够找到漏洞扫描期间生成的所有日志。
## 功能
- **模型与 Notebook 检测**:自动识别所提供代码库中的 AI/ML 模型和 Notebook。
- **扫描**:对模型和 notebook 执行全面扫描,以检测潜在的安全和保障问题。
- **报告生成**:生成综合报告,将包含“低危”、“中危”、“高危”和“严重”风险的受扫描文件进行分类。
- **支持的代码库**:AIShield Watchtower 支持与 GitHub、Huggingface 和 AWS S3 bucket 集成,允许对代码库和 AWS S3 bucket 进行自动化扫描以识别潜在风险。
### 支持的模型格式
| 框架 | 文件格式 | 反序列化风险 | 后门风险 | 运行时风险 |
|-------------------|------------------|------------------------|-------------------------|------------------------|
| [Tensorflow](https://www.tensorflow.org/tutorials/keras/save_and_load#save_the_entire_model) | .pb | ✅ | ✅ | |
| [Tensorflow](https://www.tensorflow.org/tutorials/keras/save_and_load#save_the_entire_model) | .h5 | ✅ | ✅ | |
| [Tensorflow-savedmodel](https://www.tensorflow.org/) | .ckpt | ✅ | | |
| [Keras](https://keras.io/api/models/model_saving_apis/model_saving_and_loading/#save_model-function) | .keras | ✅ | ✅ | |
| [Keras](https://keras.io/api/models/model_saving_apis/model_saving_and_loading/#save_model-function) | .h5 | ✅ | ✅ | |
| [PyTorch](https://pytorch.org/docs/stable/generated/torch.save.html#torch.save) | .pt | ✅ | | |
| [PyTorch](https://pytorch.org/docs/stable/generated/torch.save.html#torch.save) | .pth | ✅ | | |
| [PyTorch](https://pytorch.org/docs/stable/generated/torch.save.html#torch.save) | .bin | ✅ | | |
| [ONNX*](https://onnx.ai/) | .onnx* | | ✅ | |
| [GGUF*](https://github.com/ggerganov/ggml) | .gguf* | | | ✅ |
| [Scikit-Learn](https://scikit-learn.org/stable/modules/model_persistence.html) | .pkl | ✅ | | |
| 其他 | .zip | ✅ | | |
*有关这些文件格式的更多详细信息,请发送邮件至 [AIShield.Contact@in.bosch.com](mailto:AIShield.Contact@in.bosch.com)。
### 其他文件格式
| 框架 | 文件格式 | 检测内容 |
| :--------------- | :---------- | :------------------------------------------------------- |
| Jupyter Notebook | .ipynb | 硬编码的机密信息、密码、PII、Token (API、Web 及其他) |
| Python | .py | 硬编码的机密信息、密码、PII、Token (API、Web 及其他) |
## 风险分析
### 1. 反序列化风险
当使用未经验证的数据重建对象时会发生此类风险。攻击者可能会利用这些风险引入恶意代码,从而危及系统完整性。
### 2. 后门风险
隐藏的路径允许攻击者通过特定触发器操纵模型行为。这些隐蔽的攻击在正常操作期间很难被察觉。
### 3. 运行时风险
在模型推理或任务执行期间激活,运行时风险涉及恶意代码执行,导致未经授权的访问或操纵。
## 优势
1. **实时扫描**是快速识别和缓解新出现威胁的重要组成部分。此功能确保对 AI/ML 模型和 notebook 的任何更改或添加都能得到及时分析。它支持对潜在漏洞立即采取行动,从而保持 AI/ML 应用程序的完整性。
2. **多框架支持**使 Watchtower 能够兼容各种模型框架,从而满足各种 AI/ML 项目的需求。这种多功能性使组织无论使用何种框架都能利用 Watchtower,使其成为一款普遍适用的安全工具。
3. **动态风险识别**在不断变化的 AI/ML 环境中适应不断演变的威胁和漏洞方面发挥着关键作用。随着新威胁类型的不断涌现,这种适应能力至关重要,它要求安全工具能够同步发展和适应。
4. **全面评估**由 Watchtower 提供,涵盖了广泛的漏洞评估,识别和分析各种风险。它仔细检查潜在威胁的各个方面,确保个人和组织全面了解其安全态势。
5. **行业标准合规性**通过与 OWASP、MITRE 和 CWE 等知名安全标准保持一致来确保。这种合规性保证了 Watchtower 遵循全球公认的安全实践,建立了安全基线并培养了利益相关者之间的信任。
6. **效率与可扩展性**通过自动化评估实现,显著加速了安全工作流程。对于扩展其 AI/ML 计划的组织而言,这种效率至关重要,可确保在扩展期间安全性不会阻碍开发过程。
7. **无缝集成**是一项有价值的功能,它允许 Watchtower 与流行的 AI/ML 平台和代码库轻松集成。它简化了将 Watchtower 纳入现有开发生态系统中的过程,精简了安全实施并确保了跨平台的一致性。
8. **明智的决策**由 Watchtower 生成的详细漏洞报告提供支持。
这些报告使组织能够优先采取行动并有效分配资源,从而能够及时解决严重漏洞并实现资源的最佳利用。
9. **竞争优势**通过在安全性至关重要的市场中利用像 Watchtower 这样的高级安全工具来获得。这种优势不仅吸引了客户和最终用户,还增强了利益相关者的信心。它强调了组织保护其 AI/ML 资产免受从模型篡改到未经授权的数据访问等各种风险的承诺。这种综合评估确保了对所有可能漏洞的彻底检查,在保护 AI/ML 资产方面不遗余力。
## 限制
1. 对扫描来自3 bucket 的 .pb 文件的支持有限。
2. Presidio 分析器的最大长度限制为 1000000(1GB)。任何大于 1GB 的数据都不会被捕获在报告中。
3. Whispers 库和 Watchtower 严重性级别之间的严重性级别可能存在不匹配。
4. 本地:Docker UI 不支持文件/文件夹上传。
### 即将推出的功能
1. 通过使用这些能更准确地检测漏洞的定制版本来减少误报。
2. 结合针对不同级别的上下文规则,优化 PII 严重性评估。
3. 通过增加对 embedding 层潜在问题的检查来增强模型漏洞检测。
4. 与 Github actions 集成
## 已知问题
1. 在 watchtower 分析期间从 GitHub 和 Hugging Face 克隆的代码库在分析后不会被自动移除。建议手动删除位于 'src' 目录中的这些文件夹。
## 许可协议
本项目基于 Apache 许证授权。详情请参阅 [LICENSE](LICENSE.md)。
## 鸣谢
首先,我们要向充满活力的开源社区致以最深的谢意。AIShield 建立的 AI Watchtower 的基础建立在无数贡献者分享的集体智慧、工具和见解之上。能站在这些巨人的肩膀上是我们的荣幸:
- [Yelp 的 detect-secrets](https://github.com/Yelp/detect-secrets):用于扫描配置以防止意外提交敏感数据。
- [Safety](https://github.com/pyupio/safety):用于扫描 python 依赖项中已知的安全漏洞,并为检测到的漏洞建议适当的修复措施。
- [Whispers](https://github.com/Skyscanner/whispers) :识别静态结构化文本中硬编码的机密信息
- [Whispers:高级机密信息检测](https://medium.com/@SkyscannerEng/whispers-advanced-secrets-detection-15dd64a9dfb7)
- [Presidio Analyzer](https://microsoft.github.io/presidio/analyzer/):Presidio analyzer 是一个基于 Python 的服务,用于检测文本中的 PII 实体
- [PII 机密性影响级别](https://www.dvidshub.net/image/6145774/pii-confidentiality-impact-levels)
- [面向开发者的顶级开源许可协议与法律风险](https://www.synopsys.com/blogs/software-security/top-open-source-licenses.html)
- [安全的 API 密钥](https://blog.hubspot.com/website/api-keys)
- [OWASP Top 10:漏洞与过时组件](https://owasp.org/Top10/A06_2021-Vulnerable_and_Outdated_Components/)
- [Chris Anley - 机器学习系统的实用攻击](https://research.nccgroup.com/2022/07/06/whitepaper-practical-attacks-on-machine-learning-systems/)
- [Abhishek Kumar - 使用 Python Pickle 模块的不安全反序列化](https://medium.com/@abhishek.dev.kumar.94/sour-pickle-insecure-deserialization-with-python-pickle-module-efa812c0d565)
- [Shibin B Shaji - 使用 Python 的 pickling 解释不安全反序列化](https://medium.com/@shibinbshaji007/using-pythons-pickling-to-explain-insecure-deserialization-5837d2328466)
- TensorFlow 模型比较:来自 Saturn Cloud 的见解 [[1](https://saturncloud.io/blog/how-to-convert-a-tensorflow-frozen-graph-to-savedmodel/), [2](https://saturncloud.io/blog/list-of-tensor-names-in-graph-in-tensorflow/), [3](https://saturncloud.io/blog/how-to-examine-the-feature-weights-of-a-tensorflow-linearclassifier/) ]
- [TensorFlow 利用恶意模型进行远程代码执行](https://splint.gitbook.io/cyberblog/security-research/tensorflow-remote-code-execution-with-malicious-model)
- [TensorFlow layers embedding 导致内存泄漏](https://github.com/tensorflow/tensorflow/issues/30952)
- [在 Tensorflow 中为未知词汇添加 embedding](https://saturncloud.io/blog/how-to-add-new-embeddings-for-unknown-words-in-tensorflow/)
- [机器学习中的数据泄露](https://towardsdatascience.com/data-leakage-in-machine-learning-how-it-can-be-detected-and-minimize-the-risk-8ef4e3a97562)
- [竞态条件与安全的文件操作](https://developer.apple.com/library/archive/documentation/Security/Conceptual/SecureCodingGuide/Articles/RaceConditions.html)
- [Nuthdanai Wangpratham - 特征缩放对准确预测的重要性](https://medium.datadriveninvestor.com/scaling-for-success-why-feature-scaling-matters-for-accurate-predictions-6e4f29fe58b7)
- [预测隐藏神经元如何以及何时扭曲测量到的突触相互作用](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1006490)
- [TensorFlow 机器学习框架中的反序列化漏洞允许任意代码执行](https://portswigger.net/daily-swig/deserialization-bug-in-tensorflow-machine-learning-framework-allowed-arbitrary-code-execution)
- [Tom Bonner - 深入探讨 TensorFlow 和 Keras 中的安全风险](https://hiddenlayer.com/research/models-are-code/)
- [MLOps Pipeline 中的安全](https://irmcon.com/blog/security-in-mlops-pipeline/)
- [应用于 AI/ML 模型的传统攻击向量](https://5stars217.github.io/2023-03-30-on-malicious-models/)
- [Pickle Scanner 参考 github 链接 ](https://github.com/mmaitre314/picklescan/tree/main)
- [Pickle Scanner 库的 Pypi 参考链接](https://pypi.org/project/picklescan/)
……以及许多其他在开源许可协议、API 密钥安全、MLOps pipeline 安全等方面贡献知识的人。
在创建 AI Watchtower 的过程中,这是我们对这个令人难以置信的社区的一点微薄回馈。我们受到协作精神的启发,很高兴能为开源知识的浩瀚沙漠贡献我们的一粒沙。让我们携手继续为大家让 AI 的环境变得更安全、更稳健!
标签:AI供应链安全, Jupyter Notebook, Python, 人工智能安全, 合规性, 安全检测工具, 插件系统, 无后门, 机器学习模型, 漏洞扫描