- 多くのアプリがAIモデルをデバイスに直接統合している。これは高速な推論やオフラインアクセスが重要な場合に有利
- しかし、デバイス内部にモデルファイルが存在するということは、ユーザーがそのファイルを抽出して分析できることも意味する
目的
- MicrosoftのSeeing AIアプリは、視覚障害者のための「話すカメラ」であり、物体、文書、紙幣などを認識して音声で説明してくれる
- 特に紙幣(currency)認識機能は17以上の通貨に対応しており、225種類の固有の紙幣を認識する
- アプリの配布形式であるAPKファイルの中にモデルが含まれているが、暗号化された状態のファイル(
currency)として存在する
- ファイルが単純に暗号化されているだけなら、アプリ実行中のメモリや復号化の過程を追跡してファイルを抽出できる
初期調査
- AndroidアプリはAPKファイルとして配布され、これはアプリ実行に必要なすべてを含むアーカイブ
- AIモデルは通常、このようなアセットと一緒に保存される
apktoolを使ってAPKをデコンパイルし、構造を分析できる
assetsフォルダでcurrencyというファイルを見つけたが、暗号化されている
さらに進む
- アプリが
currencyファイルをどのように復号化するのかをリバースエンジニアリングできる
- TensorFlow Liteが
com.microsoft.seeingaiで使われていることを確認
org.tensorflow.lite.NativeInterpreterWrapperを使って*.tfliteモデルをロードできる
Fridaを使う
- Fridaは、ほぼあらゆるOSで動作する動的インストルメンテーションツールで、実行中のプロセスに接続して挙動を変更できる
- プロセスの実行中にアタッチしてメソッド呼び出しを追跡し、引数と戻り値を確認したり、メソッド本体を任意のロジックで上書きしたりできる
- 例:
checkKey(key)が常にtrueを返すように変更することもできる
- ObjectionはFridaスクリプトを集めたCLIツールで、モバイルアプリの調査に役立つ
org.tensorflow.lite.NativeInterpreterWrapperの関数呼び出しを追跡して、モデルをディスクにダンプする
- アプリ実行時に
.createModelWithBuffer(java.nio.ByteBuffer, long)が呼び出され、このとき渡されるByteBufferが復号化された.tfliteモデルである可能性が高い
- フックによってこのメソッドをダンプ用コードに置き換えれば、該当モデルをディスクに保存できる
adb pullコマンドで抽出した.tfliteモデル(currency.tflite)をローカルデバイスに持ってくる
- Netronのようなツールでロードし、実際にTensorFlow Liteモデルであること(レイヤー、重み、バイアスなど)を確認
- 紙幣認識モデルの完全なダンプに成功
CTRL + C; CTRL + V
- TensorFlow Liteを使うアプリに対してこの攻撃を応用できる
- たとえばAdobe Scanは、私が実際によく使っている素晴らしいアプリで、スマホのカメラで文書をスキャンできるのが最大の魅力
注意事項
- 抽出されたモデルには著作権があるため、適法な許可なく無断で使用・改変することは避けるべき
- 本投稿の方法は研究目的のものであり、実際に適用する際は関連法規や知的財産権の問題を考慮する必要がある
3件のコメント
そしてモデルもリバースエンジニアリング、、
わあ、apkファイルからweightファイルを抽出するんですか??
特定のライブラリに限った話とはいえ、すごいですね..
Hacker Newsのコメント
tfliteを検討しているアプリ開発者にとっては、Firebaseにモデルをホストし、処理完了後に削除するほうがより安全な方法であるbizarreの一般的な綴りが2通りある