月初,蘋果表示將在iOS 15、macOS 12中加入對使用者照片的檢測,目的是遏制兒童色情與虐童照片的傳播。 蘋果還一再強調這項技術的安全性和準確性。
現在,不到半個月的時間,蘋果的這項技術已經被一位名為Asuhariet Ygvar程式師「破解」了。
他成功將這個尚未正式發佈的AI模型逆向工程,並在GitHub上提供轉化成Python的教程。 幾個小時後,另一位來自Intel的工程師就發現了該模型的一個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=4skip=7| lzfse -decode -o model.espresso.net
dd if=NeuralHashv3b-current.espresso.shape bs=4skip=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.gitcd TNN
python3 tools/onnx2tnn/onnx-coreml/coreml2onnx.py ../NeuralHash
模型轉化為ONNX格式後,就可以算出任何圖片的96bit神經雜湊值。
ab14febaa837b6c1484c35e6
NeuralHash如何工作
說到這裡,蘋果的NeuralHash具體是如何產生圖片雜湊值的?
NeuralHash是一種基於神經網路的圖像感知雜湊(perceptual hashing)方法,具體步驟如下:
- 將圖像轉換為RGB;
- 將圖像大小調整為360x360;
- 將RGB值歸一化到[-1, 1]範圍;
- 用NeuralHash模型進行推理;
- 將運算得到128個浮點數的向量與96x128矩陣相乘;
- 對產生的96個浮點向量使用單位階躍函數;
- 將1.0和0.0的向量轉換為位,產生96位二進位資料。
這項技術保證圖像被壓縮或者大小被調整的情況下,雜湊值依舊不變。
幾小時後就被找到bug
但是Ygvar發現,雖然NeuralHash可以承受圖像大小調整和壓縮,但如果圖像遭裁剪或旋轉,雜湊值則會發生改變。
這也意味著,不法分子可以透過後兩種編輯圖片的方法,逃過圖片審核。
在Ygvar發佈逆向工程的模型幾個小時後,另一位高手就發現了NeuralHash的一個bug。
Intel工程師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正式版是否真有重大改進。
資料來源:
- AppleNeuralHash2ONNX: Reverse-Engineered Apple NeuralHash, in ONNX and Python
- https://github.com/AsuharietYgvar/AppleNeuralHash2ONNX
- https://gist.github.com/unrealwill/c480371c3a4bf3abb29856c29197c0be
- https://github.com/AsuharietYgvar/AppleNeuralHash2ONNX/issues/1#issue-973388387
- Apple’s CSAM detection tech is under fire — again