这个 NVIDIA AI红队 专注于跨数据、科学和人工智能生态系统扩展安全开发实践。 我们参与 开源安全倡议 ,释放 工具 ,出现在 行业会议 ,主机 教育竞赛 ,并提供 创新培训 .
最近发布的 代码的Meta Kaggle 数据集是大规模分析机器学习(ML)研究和实验竞争代码安全性的绝佳机会。 我们的目标是使用这些数据回答以下问题:
ML研究代码中的安全卫生状况如何?
安全组织如何改进ML研究人员的安全编码实践?
我们的分析表明,ML研究人员继续使用不安全的编码实践,尽管有关于安全风险的公共文档和相对无摩擦的高级安全工具。 我们的理论是,研究人员优先考虑快速实验,不认为自己或他们的项目是目标,因为他们通常不运行生产服务。
此外,Kaggle环境可能会加剧基于以下原因的安全疏忽 与研究人员的“真实基础设施”隔离。然而,研究人员必须承认他们在软件供应链中的地位,并应意识到不安全的编码实践对他们的研究和系统的风险。
虽然最初是在2015年的研究论文中提出的 解释和利用对手的例子 我们还发现,在ML研究管道中几乎没有采用对抗性训练或评估的证据。 这可能部分归因于卡格尔竞赛的结构和得分指标,但这与我们的其他研究和观察结果一致。 然而,随着多模态模型的最新进展和基于图像的快速注入攻击的演示,研究人员应该优先考虑在对抗条件和扰动下测试其模型。
观察
最重要的观察结果是明文凭证的使用、不安全的反序列化(主要是pickle)、缺乏对抗性健壮性和评估技术以及打字错误。 围绕这些主题进行防御性控制和教育。
纯文本凭据
研究人员仍然使用寿命长的明文凭证并将其提交给源代码管理。 我们为OpenAI、AWS、GitHub等第三方服务找到了140多个独特的活动明文凭证。 对于某些凭据类型,凭据可以与其他用户数据(如电子邮件)关联,从而使用户暴露于钓鱼和其他攻击。
为了与协调漏洞披露相关的标准行业惯例保持一致,我们于2023年8月24日向Kaggle报告了这一凭证风险。 他们已采取措施减轻这种风险。
不安全的反序列化
最常见的风险是不安全的反序列化。 此外,许多笔记本电脑都包含路径遍历迭代,这增加了恶意负载被执行的可能性。
例如,用户迭代 feature_dir(功能目录)
和 文件名
重复执行以下命令: feature=np.load(feature_dir+fileName+'.npy',allow_pickle=True)
.
XML Injection的大多数发现都来自熊猫 读取html
易受XML外部实体攻击的调用和大多数处理不当的敏感信息发现与 http协议
使用而不是 https(https)
.
图1。 按类别汇总的调查结果
泡菜仍是标准
对于研究人员来说,事实上的序列化格式仍然是 泡菜 模块。 它是进口量最大的50个模块之一,进口量近5000件。 ONNX公司 一种更安全的ML模型序列化格式,只被直接导入了九次。 pickle模块还可能通过其他库中的内置序列化格式间接使用。
例如,许多 数字Py 或 PyTorch公司 序列化调用依赖仍然基于pickle的内置save方法。 例如,我们确定了45000多个pickle文件作为 熊猫 , 作业库 和NumPy反序列化。
缺乏对抗性的再培训或测试
没有证据表明存在对抗性的再培训或测试。 常见的对抗性再培训和测试库,如 对抗稳健工具箱(ART) , 对口 , 文本攻击 、和 聪明的汉斯 不要出现在任何导入中。 对于常见的解释性工具,没有导入 托辞 ,但是 Fairlearn公司 被进口了34次。
其他保护隐私的培训技术,如联合学习和差异隐私,也几乎完全没有(除了 PyDP公司 ,已导入一次)。
打字
我们观察到输入错误 熊猫
和 mathplotlib库
(应该是 熊猫
和 马特普洛特利布
)。 PyPI上的Typosquating是一种臭名昭著的恶意软件传播机制。 有关更多详细信息,请参阅 PyPI抢占排印活动事后分析 .
一些积极的方面
我们没有发现研究人员从来源加载序列化对象或模型的任何实例,这些源很容易在运输过程中被劫持或修改。 此外,根据 谷歌安全浏览查找API .
建议
特别是在研究中,安全控制必须分层并校准到最小的影响速度。 了解保护研究人员、研究和网络所需的控制措施,以及将成功的研究转化为生产所需的额外控制措施。 下面列出的我们的建议是基于前面的观察结果。
开发在源代码中输入长期凭据的替代方法
替代方法包括使用 机密管理员 提供短期令牌的环境变量、输入提示和凭证自动售货服务。 多因素身份验证(MFA)还减少了源代码中凭据泄露的影响。
经验反复表明,如果开发人员开始在源代码中使用凭据,则泄漏的可能性会显著增加。 泄漏可能发生在这样的数据集中,意外提交到版本控制中,或通过历史记录和日志暴露,如我们的 2023年JupyterCon的演示 .
使用自动化在错误提交到远程资源之前捕获错误
GitHub等版本控制系统和Jenkins等连续部署系统往往是攻击者的“皇冠明珠”。 使用 预提交挂钩 运行安全自动化并防止本地错误广播到这些目标。
这个 泡菜的安全风险 都有很好的文档记录,但仍然需要恶意参与者具有足够的访问权限和权限来执行攻击。 我们的团队建议组织转向更健壮的序列化格式,如ONNX和协议缓冲区。 如果您的工具或组织必须支持pickle,请实现无需反序列化即可验证的完整性验证步骤。
识别并减轻潜在的对抗性ML攻击
研发过程中的漏洞和利用可能会影响最终服务的安全性和有效性。 了解针对ML系统的各种攻击,以建立适当的威胁模型和防御控制。 要了解更多信息,请参阅 NVIDIA AI红色团队简介 .
例如,在训练期间进行对抗性再训练可以确保分类器对对抗性回避攻击更为稳健。 考虑添加 对抗鲁棒性度量 在比较模型性能时,请参考评估框架。 如果您正在赞助Kaggle竞赛,请考虑在评估数据集中添加对抗性示例,以便奖励最健壮的解决方案。
考虑开发环境的寿命和隔离
所有分析过的用户代码都运行在Kaggle平台的短暂环境中,与开发人员主机隔离。 但是,您的组织可能没有相同级别的租户隔离。 重要的是不要不必要地阻碍研究人员的速度,但要考虑简单错误(例如拼写错误的进口声明)的潜在影响和爆炸半径,并努力确保 域资源隔离 尽可能进行网络分割。
对导入和数据集等工件使用允许/阻止列表和内部工件存储库
承认对研究速度的潜在影响,考虑保持 内部存储库 或实现一个 导入挂钩 降低恶意软件包安装和导入风险的方案。 数据集的类似卫生改进了安全性、再现性和可审计性。
方法
该数据集包含大约140GB的R、Python和Jupyter笔记本源代码,这些源代码公开托管在Kaggle上。 Kaggle允许用户保存版本,所以这些工件中的许多只是对其他文件的更新和更改。 我们的分析仅限于Python文件和Jupyter笔记本,即2020年4月至2023年8月在Kaggle上执行的大约350万个文件。
一些分析是手动的,但我们也严重依赖于两个现有的开源安全工具, 松露猪 识别凭据和 Semgrep公司 以执行静态分析。 使用这些工具重复我们的分析,并考虑将其包含在您的安全工具套件中。
为了识别和验证凭据,TruffleHog可以在Docker容器中针对源代码存储库或本地文件运行。 为了进行此分析,我们使用本地下载运行了TruffleHog docker run--rm-it-v“kaggle:/pwd”trufflesecurity/trufflehog:最新的文件系统/pwd--json-only-verified>trufflehog _findings.json
.
TruffleHog还支持预提交挂钩,以帮助确保凭据不会提交到远程存储库,并支持CI/CD集成以持续监控泄漏。 TruffleHog能够针对Kaggle数据集运行而无需修改,我们基于独特的秘密值对发现进行了重复数据消除。
Semgrep是一个静态代码分析器,它使用规则来识别目标源代码中的潜在弱点。 由于Semgrep本机不支持Jupyter笔记本,因此我们使用 nb转换
在Semgrep处理之前将其转换为Python文件。 我们使用了162条默认规则 Python规则 和 比特轨迹维护的规则 更侧重于ML应用程序。
安装Semgrep后,使用 semgrep--配置“p/trailobits”--配置“p/python”--json kaggle/-o semgrep_findings.json
.在分析过程中,我们过滤掉了比特轨迹 自动内存固定规则 因为我们找不到以前剥削的直接途径或证据。
NVIDIA AI红色团队将这些工具封装在一个名为 皮棉ML 。要重现我们的结果,请使用 lintML–semgrep-options“--config'p/python'–config'p/trailobits'”<目录>
.
限制
虽然我们对这一分析的数量感到自豪,但所有样本都是通过Kaggle采集的,这仍然是“单一来源”。 虽然许多调查结果可能是相同的,但来自其他数据源的安全观察结果的潜在分布可能会有所不同。
例如,对GitHub工件执行的类似分析可能倾向于“更安全”,因为这些存储库更有可能包含产品化代码。
此外, 卡格尔竞赛 奖励快速迭代和准确性,这可能导致不同的库导入、技术和安全考虑,从而产生研究。 例如,卡格尔竞赛通常会提供必要的数据。 实际上,采购、清洁和标记数据通常是重要的设计决策 潜在漏洞的来源 .
我们使用的工具同时启用并限制了此分析。 如果TruffleHog中不存在凭证或验证器,则此处没有相关的查找。 同样,Semgrep分析受到我们选择的规则集的限制。 这些发现中只有一个子集可能是可利用的,但数量可能与整个项目风险相关。
此外,发现数量分析可能受到规则分布的影响(反序列化规则越多,结果越多)。 安全研究人员应继续为机器学习安全相关发现的既定工具做出贡献(正如NVIDIA AI红色团队为这两项工作所做的那样 松露猪 和 Semgrep公司 规则)。 NVIDIA AI红色团队对数据流和污点分析在机器学习应用程序中的应用特别感兴趣。
结论
卡格尔是一个实验、研究和竞争的地方。 它奖励快速的实验迭代和性能,所以这些代码工件不能代表生产服务。
还是他们? 代码经常被重用,习惯是在研究过程中形成的,默认值是粘性的。 在对GitHub上300多个排名靠前的机器学习存储库进行的类似分析中,我们仍然发现了第三方服务的硬编码凭证以及这里提供的所有结果。 在研究期间提高安全意识以及信息和预防性控制有助于确保产品的安全,并提高企业的专业性和安全态势。
安全专业人员应将此分析作为分析其组织中的研究和开发实践的基础。 这些发现大多代表了基本安全控制。 如果您开始在组织的研究代码中找到它们,那么它们就是与研发团队更深入合作的信号。
使用类似的技术在机器学习开发周期中评估工件,以确保宽松的研究实践不会将风险传播到生产产品中。 尽早发现提供低成本工具的机会,而不仅仅是在生产交付管道中。 利用主动对抗性评估和演习来提高教育、意识和合理的安全控制。
作为科学诚信的一部分,研究人员应注重建立和保持良好的安全卫生。 安全风险应被视为不需要的变量,应予以缓解,以确保实验的准确性。 想想您将要引入组织的数据和代码的来源。 与您的安全团队接洽,以获得最佳实践和环境强化方面的指导。
正如您在严格测试假设时所做的那样,在测试项目时要非常关键,并确定准确性可能不是您想要优化的唯一指标的机会,并考虑包括稳健性、可解释性和公平性测试。 即使您不是在编写生产服务,您可能仍然是 使自己、研究和组织面临潜在风险。
使用我们的 安全实践笔记本 要自己开始分析此数据,或下载 Meta Kaggle代码 与TruffleHog和Semgrep进行评估。 使用进行实验 皮棉ML 识别ML培训代码中的风险。
要了解有关ML安全性的更多信息,请查看 黑帽机器学习 2023年在黑帽欧洲。
致谢
我们要感谢Kaggle提供了这个数据集。 此类数据有助于提高安全意识和行业基准。 NVIDIA AI红队一直在努力满足ML从业者的需求,而Kaggle一直是这项任务的绝佳合作伙伴和推动者。 有关更多详细信息,请参阅 在DEF CON竞赛中提高机器学习安全技能 。我们还要感谢所有Kaggle竞争对手为数据集贡献代码。
此外,我们要感谢TruffleHog、Semgrep和Trail of Bits提供的开源安全工具,这些工具促成了这项研究,并感谢Jupyter、pandas、NumPy和Matplotlib提供的高质量数据分析和可视化工具。