逆向工程破解蘋果監控iPhone圖片的演算法:原來iOS14.3上就有了

編輯:澤南、杜偉

神秘的 NeuralHash 演算法,打開一看是 MobileNet V3。

蘋果要在新作業系統裡內建機器學習掃描程序,監控所有人的手機了。

本月初,當這個訊息爆出之後,整個科技圈都大為震動。雖然蘋果一再表示掃描照片的演算法僅在本地運行,該演算法也僅會在部分國家上線,但人們對於科技大廠忽視隱私安全的擔憂仍然成為了主流。

對於開發者們來說,機器學習演算法是不是真的侵犯隱私,還是要看程式碼是怎麼寫的。近日,有程式設計師就把蘋果的 neuralMatch 演算法給逆向工程了。

一切都真相大白,甚至還有預料之外的發現

一切都真相大白,甚至還有預料之外的發現。

該破解者在 GitHub 上建立了名為 AsuharietYgvar 的賬號,並公開了程式碼。首先,他發現這個掃描色情資訊的演算法早在 iOS 14.3 上就已經存在,其隱藏在混淆的類名下。不過蘋果在隨後發給 Motherboard 的一份聲明中表示,在 iOS 14.3 中發現的 NeuralHash 版本並不是與 iOS 15 一起發佈的最終版本。

在對隱藏的 API 進行了一些挖掘和逆向工程之後,程式設計師設法將其模型(即 MobileNetV3)匯出到 ONNX,並在 Python 中重建了整個 NeuralHash 演算法。大家現在可以直接在 Linux 上嘗試了。

GitHub 連結:https://github.com/AsuharietYgvar/AppleNeuralHash2ONNX

出於顯而易見的原因,這裡沒有訓練好的模型檔案。但是按照作者的操作指南,想要匯出一個非常容易,你也不需要使用任何蘋果設備。

經過作者的簡單測試,蘋果的圖像識別演算法可以容忍圖像大小調整和壓縮,但如果有人裁剪或旋轉了圖片,那麼 AI 就無法識別了。當然你也可以使用駭客松上破解臉部辨識的方法,通過加入擾動欺騙演算法將兩張完全不同的圖片識別為同一張。

現在我們可以更加全面地了解 NeuralHash 演算法,並在所有 iOS 設備上啟用該演算法前了解它的潛在問題了。

根據蘋果的官方說法,其正在與兒童安全專家合作,在三個領域引入兒童安全功能。首先,新工具將使父母能夠在孩子進行使用 Messages 接收到敏感資訊時獲得警告。

接下來,iOS 和 iPadOS 將使用新的加密應用程序限制 CSAM(兒童色情內容)的傳播。CSAM 檢測將幫助蘋果向執法部門提供有關 iCloud 照片中 CSAM 集合的資訊。

最後,Siri 和搜尋的更新將為父母和兒童提供更多資訊,並在他們遇到不安全情況時提供幫助。當使用者嘗試搜尋 CSAM 相關主題時,Siri 和搜尋也會進行干預。

蘋果表示在檢測敏感資訊的同時,自己無法獲知資訊本身的內容。這些功能將於今年晚些時候在 iOS 15、iPadOS 15、watchOS 8 和 macOS Monterey 的更新中推出。

在檢測到敏感資訊時,iMessage 會彈出提示。

具體怎麼實現的?

蘋果的 NeuralHash 是一種基於神經網路的圖像感知哈希演算法,它可以實現圖像縮放和壓縮。哈希演算法的步驟是這樣的:

  • 將圖像轉換為 RGB 格式;

  • 將圖像大小調整為 360×360;

  • 將 RGB 值範圍歸一化為 [-1, 1];

  • 在 NeuralHash 模型上執行推理;

  • 計算 96×128 矩陣與 128 浮點結果向量的點積;

  • 將二進位制應用於 96 浮點結果向量;

  • 將 1.0 和 0.0 的向量轉換為 bit,得到 96bit 的二進位制資料。

在這個項目中,作者將蘋果的 NeuralHash 模型轉換為了 ONNX 格式,還提供了測試模型的演示腳本。

系統要求

作者表示,macOS 和 Linux 系統都可以運行。

在安裝 LZFSE 解碼器時,對於 macOS 系統,運行 brew install lzfse 即可安裝;對於 Linux 系統,從 lzfse 資源中創建和安裝。

此外,作者選用的 Python 版本是 3.6 及以上,需要安裝以下依賴:

    pip install onnx coremltools

    轉換指南

    步驟 1:準備 NeuralHash 模型

    你需要最近的 macOS 或 iOS 構建中的 4 個檔案,分別如下:

    • neuralhash_128x96_seed1.dat

    • NeuralHashv3b-current.espresso.net

    • NeuralHashv3b-current.espresso.shape

    • NeuralHashv3b-current.espresso.weights

    具體地,你可以通過以下兩種方式獲取以上檔案。

    第一種選擇是從 macOS 或 jailbroken iOS 設備中獲取。如果 macOS 是 11.4 及以上或者 jailbroken iOS 是 14.7 及以上,則只需要從 macOS 上的 / System/Library/Frameworks/Vision.framework/Resources / 或 iOS 上的 / System/Library/Frameworks/Vision.framework / 中抓取以上檔案即可。

    第二種選擇是從 iOS IPSW 中獲取,並將它們放在同一個目錄下

      mkdir NeuralHashcd NeuralHashcp /System/Library/Frameworks/Vision.framework/Resources/NeuralHashv3b-current.espresso.* .cp /System/Library/Frameworks/Vision.framework/Resources/neuralhash_128x96_seed1.dat .

      步驟 2:解碼模型結構和形狀

      一般編譯的 Core ML 模型在 model.espresso.net 中儲存結構,在 model.espresso.shape 中儲存形狀,並且都使用 JSON 格式。NeuralHash 模型同樣如此,但是使用 LZFSE 進行了壓縮。

      步驟 3:將 NeuralHash 模型轉換為 ONNX 格式

      最終得到的模型是 NeuralHash/model.onnx。

        cd ..git clone https://github.com/AsuharietYgvar/TNN.gitcd TNNpython3 tools/onnx2tnn/onnx-coreml/coreml2onnx.py ../NeuralHash

        作者答疑

        作者在 Reddit 上回答了網友的一些疑問(以下作者回復以第一人稱表述)。

        疑問 1:如何知道提取的模型與用於 CSAM 檢測的 NeuralHash 相同

        首先,模型檔案中有前綴 NeuralHashv3b-,它與蘋果《CSAM 檢測技術總結》文件中使用的 term 相同。

        其次,在這篇文件中,蘋果在 Technology Overview -> NeuralHash 章節描述了該演算法的細節,這與我發現的完全相同。如下所示,浮點數 N=128,M=96。

          Second, the descriptor is passed througha hashing scheme to convert the N floating-point numbers to M bits. Here, M is much smaller than thenumber of bits needed to represent the N floating-point numbers.

          此外,如果你改變圖像大小或壓縮圖像,該腳本生成的哈希幾乎不會改變,這再次與蘋果文件中描述的一致。

          《CSAM 檢測技術總結》文件地址:https://www.apple.com/child-safety/pdf/CSAM_Detection_Technical_Summary.pdf

          疑問 2:repo 中生成的哈希為什麼略有不同?(相差幾個 bits)

          這是因為神經網路基於浮點運算,準確率高度依賴於硬體。對於較小的網路,影響不大。但是,NeuralHash 擁有 200 多個層,這導致了顯著的累積誤差。在實踐中,蘋果很可能在實現哈希比較時允許幾個 bits 的誤差。

          疑問 3:如何發現隱藏的 API 函數?

          隱藏的 API 之前已被其他人發現了,因此我不打算過多地討論逆向工程的過程。我所做的主要是使用 Xcode 偵錯程式 + Hopper 反彙編器 + LLDB 命令,來理解該 API 函數如何以彙程式設計式碼在底層工作。有一些部分我沒有理解,但通過猜測,我成功地從腳本中得到與從 API 函數中得到的相同的哈希結果。

          發現隱藏 API 的另一個項目地址:https://github.com/KhaosT/nhcalc

          在 NeuralHash 程式碼被上傳到 GitHub 之後,很快就引起了人們的注意。蘋果立即做出迴應:使用者在 GitHub 上分析的那個版本是一個通用版本,而不是用於 iCloud 照片 CSAM 檢測的最終版本。蘋果表示,它還公開了該演算法。

          「NeuralHash 演算法…… 是作業系統程式碼的一部分,(並且)安全研究人員可以驗證它的行為是否符合描述,」蘋果在一份文件中寫道。蘋果還表示,在使用者儲存的檔案超過 30 個匹配閾值後,運行在蘋果伺服器上的第二個非公開演算法將被激活檢查結果。

          文件中寫道:「選擇這個獨立的哈希是為了避免由於非 CSAM 圖像被對抗性攻擊干擾導致誤報的可能性。」

          參考內容:

          https://www.apple.com/child-safety/

          https://www.vice.com/en/article/wx5yzq/apple-defends-its-anti-child-abuse-imagery-tech-after-claims-of-hash-collisions

          https://www.reddit.com/r/MachineLearning/comments/p6hsoh/p_appleneuralhash2onnx_reverseengineered_apple/

          相關文章

          科普 | 創建和簽名以太坊交易

          科普 | 創建和簽名以太坊交易

          來源 | 以太坊愛好者 責編 | 晉兆雨 頭圖 | 付費下載於視覺中國 在我們之前的文章中,我們已經講解了創建私鑰的作用以及如何創建一個私鑰...

          在CVPR上,OPPO的一系列「業界首次」

          在CVPR上,OPPO的一系列「業界首次」

          下個爆款應用,可能就來自於這些研究。 用 AI 重建真實環境的 3D 數字模型,是虛擬現實、遊戲環境渲染等任務的重要環節。通常人們必須依賴紅...

          深度學習的可解釋性

          深度學習的可解釋性

          一、深度學習的可解釋性研究概述 隨著深度學習模型在人們日常生活中的許多場景下扮演著越來越重要的角色,模型的「可解釋性」成為了決定使用者是否能...