官方:这不是最新版
晓查 发自 凹非寺
非常AI 报道 | 公众号 QbitAI
没想到苹果被打脸来得如此之快。
月初,苹果表示将在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)方法,具体步骤如下:
-
将图像转换为RGB;
-
将图像大小调整为360×360;
-
将RGB值归一化到[-1, 1]范围;
-
用NeuralHash模型进行推理;
-
将运算得到128个浮点数的向量与96×128矩阵相乘;
-
对生成的96个浮点向量使用单位阶跃函数;
-
将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/