曉查 發自 凹非寺
量子位 報道 | 公眾號 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。netdd if=NeuralHashv3b-current。espresso。shape bs=4 skip=7 | lzfse -decode -o model。espresso。shapecp 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 TNNpython3 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。
英特爾工程師Cory Cornelius發現其中存在
雜湊值衝突
漏洞,請看下面兩張圖:
圖片
只能說二者毫不相干,但是用NeuralHash模型計算一下卻發現,二者的雜湊值完全一樣。
$ python3 nnhash。py NeuralHash/model。onnx neuralhash_128x96_seed1。dat beagle360。png59a34eabe31910abfb06f308$ python3 nnhash。py NeuralHash/model。onnx neuralhash_128x96_seed1。dat collision。png59a34eabe31910abfb06f308
其實早在11天前,另一位名叫unrealwill的GitHub使用者就上傳了
雜湊值衝突
攻擊的程式碼,用來生成和原圖雜湊值一樣的圖片。
圖片
外媒TechCrunch針對這個漏洞詢問了蘋果。蘋果還表示,現在被逆向工程的NeuralHash是早期版本,而不是即將推出的完整版本。
但蘋果迴避了雜湊值衝突問題,強調有人工稽核防止該功能被濫用。
破解NeuralHash的Ygvar表示,他的目的是希望幫助我們更好地瞭解該演算法,在所有iOS裝置上啟用之前發現潛在的問題。
不止下個月的iOS 15正式版是否真有重大改進。