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

新闻 2021-08-19 晓查
435

官方:这不是最新版

晓查 发自 凹非寺
非常AI 报道 | 公众号 QbitAI

没想到苹果被打脸来得如此之快。

月初,苹果表示将在iOS 15、macOS 12中加入对用户照片的检测,目的是遏制儿童色情与虐童照片的传播。

苹果还一再强调这项技术的安全性和准确性。

图片

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

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

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

这让苹果十分尴尬。

Ygvar发现,其实早在iOS 11.3macOS 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正式版是否真有重大改进。

参考链接:
[1]
https://www.reddit.com/r/MachineLearning/comments/p6hsoh/p_appleneuralhash2onnx_reverseengineered_apple/
[2]https://github.com/AsuharietYgvar/AppleNeuralHash2ONNX
[3]https://gist.github.com/unrealwill/c480371c3a4bf3abb29856c29197c0be
[4]https://github.com/AsuharietYgvar/AppleNeuralHash2ONNX/issues/1#issue-973388387
[5]https://techcrunch.com/2021/08/18/apples-csam-detection-tech-is-under-fire-again/

相关文章