TensorFlow 的维护,任重而道远。
TensorFlow 是一个庞大而复杂的系统,它依赖于大量的第三方库,例如numpy
、libjpeg-turbo
、PNG parsers、protobuf
)。TensorFlow 或其依赖库可能包含一些漏洞,这些漏洞可能允许触发特殊输入造成的意外或危险行为。
日前,由于存在任意代码执行漏洞,谷歌 TensorFlow 团队宣布已撤销对 YAML 的支持。
YAML 是一个用于在进程和应用程序之间存储数据和传递对象的通用格式。许多Python应用程序使用 YAML 来序列化和反序列化对象。
根据GitHub 上的公告,TensorFlow 和 Keras(TensorFlow 的包装库)使用不安全的函数来反序列化 YAML 编码的机器学习模型。
一条概念验证显示该漏洞被利用来返回敏感系统文件的内容:
“鉴于支持 YAML 格式所牵扯的工作量很大,所以我们暂时将其删除,”该库的维护者这样说道。
反序列化不安全
“对于用 Python、PHP 和 Java 等语言编写的代码而言,反序列化漏洞是一个很大的攻击面”发现该问题的安全研究员 Arjun Shibu 在接受 Daily Swig 采访时说道。
“我在 TensorFlow 中搜索了 Pickle 和 PyYAML 反序列化模式,令人惊讶的是,我发现了对危险函数 yaml.unsafe_load()的调用 。”
该函数直接加载 YAML 输入而不对其进行清理,这就可能让恶意代码注入到数据中。
不幸的是,不安全的反序列化已蔚然成风。
“使用类似 Grep.app 这样的代码搜索应用程序进行进一步研究,我发现数以千计的项目/库在未经验证的情况下反序列化 Python 对象,”Shibu 说道。“其中大多数是特定于机器学习的,并将用户输入作为参数。”
对机器学习应用的影响
序列化的使用在机器学习应用中非常普遍。训练模型是一个昂贵且缓慢的过程。因此,开发人员经常使用预先训练好的模型进行训练,这些模型已经存储在 YAML 或其他由 TensorFlow 等机器学习库所支持的格式中。
“由于 ML 应用程序通常接受来自用户的模型配置,因此我感觉这个漏洞会很常见,这就使得很大一部分产品面临风险,”Shibu 说。
关于 YAML 漏洞,IBM Research 的 RPI-IBM AI 研究合作首席科学家 Pin-Yu Chen 告诉 The Daily Swig:
“在我看来,大多数基于云的 AI/ML 服务都需要 YAML 文件来指定配置——所以我认为需要大量的安全指示。”
许多围绕机器学习安全性的研究都集中在对抗性攻击上 ——修改机器学习模型上的数据片段。但这一最新发现提醒我们,与所有其他应用程序一样,安全地编写代码是机器学习中非常重要的一方面。
“虽然这些攻击不是针对机器学习模型本身,但不可否认,它们对机器学习构成了严重的威胁,需要立即采取行动,”Pin-Yu Chen 这样说道。
机器学习安全
自年初以来,谷歌已经在 TensorFlow 上修复了 100 多个安全漏洞。并且还发布了关于运行不受信任的模型、清理不受信任的用户输入以及在网络上安全地运行模型的综合安全指南。
“这些漏洞很容易找到,使用漏洞扫描程序可以帮助我们找出它们,”Shibu 说道。
“通常,如果有安全性更好的替代方案,开发人员应尽可能使用更为安全的解决方案。例如,使用 unsafe_load()或 load()与默认的 YAML 加载器可以替换为安全的 safe_load()函数。如果没有更好的选择,就需要对用户输入进行净化处理。”
目前谷歌已修复该漏洞,官方已发布最新版本,链接如下:
https://github.com/tensorflow/tensorflow/releases
参考链接:
https://github.com/tensorflow/tensorflow/security/advisories/GHSA-r6jx-9g48-2r5r
评论 1 条评论