苹果遭火速打脸:照片扫描 AI 被逆向工程,英特尔工程师发现漏洞

8 月 19 日消息 没想到苹果被打脸来得如此之快。月初,苹果表示将在 iOS 15、macOS 12 中加入对用户照片的检测,目的是遏制儿童色情与虐童照片的传播。苹果还一再强调这项技术的安全性和准确性。

现在,不到半个月的时间,苹果的这项技术已经被一位名为 Asuhariet Ygvar 程序员“破解”了

他成功将这个尚未正式发布的 AI 模型逆向工程,并在 GitHub 上提供转化成 Python 的教程

几个小时后,另一位来自英特尔的工程师就发现了该模型的一个 bug。

这让苹果十分尴尬。

Ygvar 发现,其实早在 iOS 11.3、macOS 11.4 开始,就已经在系统中加入了照片检测模型 NeuralHash,只不过尚未启用。

因此任何可以下载到苹果系统固件的人,都可以轻松将 NeuralHash 模型提取出来。

如何提取 NeuralHash 模型

对于 macOS 用户或者已经越狱的 iOS 用户来说,找到 NeuralHash 模型文件非常方便,就在以下路径中:

/System/Library/Frameworks/Vision.framework/Resources/ (macOS)

/System/Library/Frameworks/Vision.framework/ (iOS)

你会发现 neuralhash 开头的 4 个文件:

至于未越狱的用户,可以下载 ipsw 格式刷机文件,找到其中最大的 dmg 文件,从这个镜像中找到模型。

由于步骤较多,在此不再赘述,具体操作看参照文末 GitHub 文档操作。

如何逆向工程

在这 4 个文件中,net 和 shape 结尾的文件都是 json 格式,使用苹果开源技术 LZFSE 压缩;weights 保存的是权重。

解压前首先需安装 LZFSE 解压工具:

brew install lzfse

将 net 和 shape 解压,和权重文件放在一个文件夹中:

dd if=NeuralHashv3b-current.espresso.net bs=4 skip=7 | lzfse -decode -o model.espresso.net
dd if=NeuralHashv3b-current.espresso.shape bs=4 skip=7 | lzfse -decode -o model.espresso.shape
cp NeuralHashv3b-current.espresso.weights model.espresso.weights

为了把模型转换为 ONNX 格式,还要安装以下依赖项:

pip install onnx coremltools

转换模型时,Ygvar 使用了腾讯优图实验室的 TNN,这是一款可以转换多种 AI 模型的开源工具,可以将苹果的 Core ML 转为 ONNX 格式。

cd ..
git clone https://github.com/AsuharietYgvar/TNN.git
cd TNN
python3 tools/onnx2tnn/onnx-coreml/coreml2onnx.py ../NeuralHash

模型转化为 ONNX 格式后,就可以算出任何图片的 96bit 神经哈希值。

ab14febaa837b6c1484c35e6

NeuralHash 如何工作

说到这里,苹果的 NeuralHash 具体是如何生成图片哈希值的?

NeuralHash 是一种基于神经网络的图像感知哈希(perceptual hashing)方法,具体步骤如下:

1、将图像转换为 RGB;

2、将图像大小调整为 360×360;

3、将 RGB 值归一化到 [-1, 1] 范围;

4、用 NeuralHash 模型进行推理;

5、将运算得到 128 个浮点数的向量与 96×128 矩阵相乘;

6、对生成的 96 个浮点向量使用单位阶跃函数;

7、将 1.0 和 0.0 的向量转换为位,生成 96 位二进制数据。

这项技术保证图像被压缩或者大小被调整的情况下,哈希值依旧不变。

▲ 经过黑白处理的图片和原图片具有相同哈希值

几小时后就被找到 bug

但是 Ygvar 发现,虽然 NeuralHash 可以承受图像大小调整和压缩,但如果图像遭裁剪或旋转,哈希值则会发生改变。

这也意味着,不法分子可以通过后两种编辑图片的方法,逃过图片审核

在 Ygvar 发布逆向工程的模型几个小时后,另一位高手就发现了 NeuralHash 的一个 bug。

英特尔工程师 Cory Cornelius 发现其中存在哈希值冲突漏洞,请看下面两张图:

只能说二者毫不相干,但是用 NeuralHash 模型计算一下却发现,二者的哈希值完全一样。

$ python3 nnhash.py NeuralHash/model.onnx neuralhash_128x96_seed1.dat beagle360.png
59a34eabe31910abfb06f308
$ python3 nnhash.py NeuralHash/model.onnx neuralhash_128x96_seed1.dat collision.png
59a34eabe31910abfb06f308

其实早在 11 天前,另一位名叫 unrealwill 的 GitHub 用户就上传了哈希值冲突攻击的代码,用来生成和原图哈希值一样的图片。

外媒 TechCrunch 针对这个漏洞询问了苹果。苹果还表示,现在被逆向工程的 NeuralHash 是早期版本,而不是即将推出的完整版本

但苹果回避了哈希值冲突问题,强调有人工审核防止该功能被滥用。

破解 NeuralHash 的 Ygvar 表示,他的目的是希望帮助我们更好地了解该算法,在所有 iOS 设备上启用之前发现潜在的问题。

不知下个月的 iOS 15 正式版是否真有重大改进。

GitHub 参考链接:点击打开

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注