1. 程式人生 > 資訊 >蘋果遭火速打臉:照片掃描 AI 被逆向工程,英特爾工程師發現漏洞

蘋果遭火速打臉:照片掃描 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 解壓工具:

brewinstalllzfse

將 net 和 shape 解壓,和權重檔案放在一個資料夾中:

ddif=NeuralHashv3b-current.espresso.netbs=4skip=7|lzfse-decode-omodel.espresso.netddif=NeuralHashv3b-current.espresso.shapebs=4skip=7|lzfse-decode-omodel.espresso.shapecpNeuralHashv3b-current.espresso.weightsmodel.espresso.weights

為了把模型轉換為 ONNX 格式,還要安裝以下依賴項:

pipinstallonnxcoremltools

轉換模型時,Ygvar 使用了騰訊優圖實驗室的 TNN,這是一款可以轉換多種 AI 模型的開源工具,可以將蘋果的 Core ML 轉為 ONNX 格式。

cd..gitclonehttps://github.com/AsuharietYgvar/TNN.gitcdTNNpython3tools/onnx2tnn/onnx-coreml/coreml2onnx.py../NeuralHash

模型轉化為 ONNX 格式後,就可以算出任何圖片的 96bit 神經雜湊值。

ab14febaa837b6c1484c35e6

NeuralHash 如何工作

說到這裡,蘋果的 NeuralHash 具體是如何生成圖片雜湊值的?

NeuralHash 是一種基於神經網路的影象感知雜湊(perceptual hashing)方法,具體步驟如下:

1、將影象轉換為 RGB;

2、將影象大小調整為 360x360;

3、將 RGB 值歸一化到 [-1, 1] 範圍;

4、用 NeuralHash 模型進行推理;

5、將運算得到 128 個浮點數的向量與 96x128 矩陣相乘;

6、對生成的 96 個浮點向量使用單位階躍函式;

7、將 1.0 和 0.0 的向量轉換為位,生成 96 位二進位制資料。

這項技術保證影象被壓縮或者大小被調整的情況下,雜湊值依舊不變。

▲經過黑白處理的圖片和原圖片具有相同雜湊值

幾小時後就被找到 bug

但是 Ygvar 發現,雖然 NeuralHash 可以承受影象大小調整和壓縮,但如果影象遭裁剪或旋轉,雜湊值則會發生改變。

這也意味著,不法分子可以通過後兩種編輯圖片的方法,逃過圖片稽核

在 Ygvar 釋出逆向工程的模型幾個小時後,另一位高手就發現了 NeuralHash 的一個 bug。

英特爾工程師 Cory Cornelius 發現其中存在雜湊值衝突漏洞,請看下面兩張圖:

只能說二者毫不相干,但是用 NeuralHash 模型計算一下卻發現,二者的雜湊值完全一樣。

$python3nnhash.pyNeuralHash/model.onnxneuralhash_128x96_seed1.datbeagle360.png59a34eabe31910abfb06f308$python3nnhash.pyNeuralHash/model.onnxneuralhash_128x96_seed1.datcollision.png59a34eabe31910abfb06f308

其實早在 11 天前,另一位名叫 unrealwill 的 GitHub 使用者就上傳了雜湊值衝突攻擊的程式碼,用來生成和原圖雜湊值一樣的圖片。

外媒 TechCrunch 針對這個漏洞詢問了蘋果。蘋果還表示,現在被逆向工程的 NeuralHash 是早期版本,而不是即將推出的完整版本

但蘋果迴避了雜湊值衝突問題,強調有人工稽核防止該功能被濫用。

破解 NeuralHash 的 Ygvar 表示,他的目的是希望幫助我們更好地瞭解該演算法,在所有 iOS 裝置上啟用之前發現潛在的問題。

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

GitHub 參考連結:點選開啟