MASTG-KNOW-0087
リバースエンジニアが一般的に使用するツール、フレームワーク、アプリの存在はリバースエンジニアアプリの試みを示していると考えられます。これらのツールには脱獄済みデバイスでのみ実行できるものもあれば、アプリを強制的にデバッグモードにしたり、モバイルフォンのバックグラウンドサービスの開始に依存するものもあります。したがって、リバースエンジニアリング攻撃を検出し、それ自体を終了させるなどの対応を実装する方法はさまざまです。
関連するアプリケーションパッケージ、ファイル、プロセス、またはその他のツール固有の改変や成果物を探すことで、改変されていない形式でインストールされている一般的なリバースエンジニアリングツールを検出できます。以下の例では、Frida 計装フレームワークを検出するさまざまな方法について説明します。Frida 計装フレームワークはこのガイドと現実世界でも広く使用されています。ElleKit などの他のツールも同様に検出できます。インジェクション、フッキング、DBI (動的バイナリ計装) ツールは、以下で説明する実行時完全性チェックを通じて暗黙的に検出できることが多いことに注意します。
バイパス:
リバースエンジニアリングツールの検出をバイパスする際には以下の手順を参照にしてください。
アンチリバースエンジニアリング機能にパッチを当てます。radare2/iaito や Ghidra を使用してバイナリにパッチを当て、望ましくない動作を無効にします。
Frida や ElleKit を使用して、Objective-C/Swift やネイティブレイヤでファイルシステム API を フックします。改変されたファイルではなく、元のファイルのハンドルを返します。
Frida は脱獄済みデバイス上ではデフォルト設定 (インジェクションモード) で frida-server という名前で動作します。ターゲットアプリに明示的に (frida-trace や Frida CLI などを介して) アタッチすると、Frida はアプリのメモリ内に frida-agent を注入します。したがって、アプリにアタッチした後 (前ではありません) では、それが見つかるはずです。Android では、 proc ディレクトリのプロセス ID のメモリマップ (/proc/<pid>/maps) で文字列 "frida" を grep するだけなので、これを検証するのは非常に簡単です。 しかし、 iOS では proc ディレクトリが利用できませんが、関数 _dyld_image_count を利用してアプリにロードされている動的ライブラリを一覧表示できます。
Frida はいわゆる組み込みモードでも動作できます。これは脱獄済みではないデバイスでも機能します。 frida-gadget を IPA に組み込み、それをネイティブライブラリの一つとしてロードすることをアプリに 強制 します。
ARM コンパイルされたバイナリやその外部ライブラリなどのアプリケーションの静的コンテンツは <Application>.app ディレクトリ内に保存されます。 /var/containers/Bundle/Application/<UUID>/<Application>.app ディレクトリのコンテンツを調べると、組み込まれた frida-gadget が FridaGadget.dylib として見つかります。
iPhone:/var/containers/Bundle/Application/AC5DC1FD-3420-42F3-8CB5-E9D77C4B287A/SwiftSecurity.app/Frameworks root# ls -alh
total 87M
drwxr-xr-x 10 _installd _installd 320 Nov 19 06:08 ./
drwxr-xr-x 11 _installd _installd 352 Nov 19 06:08 ../
-rw-r--r-- 1 _installd _installd 70M Nov 16 06:37 FridaGadget.dylib
-rw-r--r-- 1 _installd _installd 3.8M Nov 16 06:37 libswiftCore.dylib
-rw-r--r-- 1 _installd _installd 71K Nov 16 06:37 libswiftCoreFoundation.dylib
-rw-r--r-- 1 _installd _installd 136K Nov 16 06:38 libswiftCoreGraphics.dylib
-rw-r--r-- 1 _installd _installd 99K Nov 16 06:37 libswiftDarwin.dylib
-rw-r--r-- 1 _installd _installd 189K Nov 16 06:37 libswiftDispatch.dylib
-rw-r--r-- 1 _installd _installd 1.9M Nov 16 06:38 libswiftFoundation.dylib
-rw-r--r-- 1 _installd _installd 76K Nov 16 06:37 libswiftObjectiveC.dylib
Frida が 残した これらの トレース を見ると、 Frida を検出することは簡単な作業であると想像できることでしょう。そしてこれらのライブラリを検出することは簡単ですが、そのような検出をバイパスすることも同様に簡単です。ツールの検出はいたちごっこであり、事態はさらに複雑になるかもしれません。以下の表は典型的な Frida 検出方法とその有効性について簡単な説明をまとめたものです。
IOSSecuritySuite には以下の検出方法の一部が実装されています。
この表は完全ではないことを忘れないでください。例えば、他に二つの検出メカニズムが考えられます。
いずれも Substrate や Frida's Interceptor を検出するのに 役立ち ますが、たとえば、 Frida's Stalker に対しては効果的ではありません。これらの各検出方法が成功するかどうかは、脱獄済みデバイスを使用しているかどうか、特定バージョンの脱獄および手法やツール自体のバージョンにより依存することを忘れないでください。最後に、これはコントロールされていない環境 (エンドユーザーのデバイス) で処理されているデータを保護するいたちごっこの一部です。