MASTG-KNOW-0006 バイナリ保護メカニズム (Binary Protection Mechanisms)
バイナリ保護メカニズム の存在を検出することはアプリケーションの開発に使用された言語に大きく依存します。
一般的にはすべてのバイナリをテストすべきです。これにはメインのアプリ実行可能ファイルだけでなくすべてのライブラリや依存関係が含まれます。しかし、Android では次に説明するようにメインの実行可能ファイルは安全であると考えられるため、ネイティブライブラリに焦点を当てます。
Android は アプリの DEX ファイル (classes.dex など) から Dalvik バイトコードを最適化し、ネイティブコードを含む新しいファイルを生成します。通常、拡張子は .odex, .oat です。この Android コンパイル済みバイナリ (アプリパッケージの探索 (Exploring the App Package) の "コンパイル済みアプリバイナリ" を参照) は Linux や Android がアセンブリコードをパッケージ化するために使用するフォーマットである ELF フォーマット を使用してラップされています。
アプリの NDK ネイティブライブラリ (アプリパッケージの探索 (Exploring the App Package) の "ネイティブライブラリ" を参照) も ELF フォーマットを使用 しています。
PIE (Position Independent Executable):
Android 7.0 (API レベル 24) 以降、メインの実行可能ファイルに対して PIC コンパイルは デフォルトで有効 になっています。
Android 5.0 (API レベル 21) で PIE 非対応のネイティブライブラリのサポートは 廃止 され、それ以降 PIE は リンカーによって強制 されるようになりました。
Android アプリはメモリセーフと考えられる (少なくともバッファオーバーフローを軽減する) Dalvik バイトコードにコンパイルされます。Flutter などの他のフレームワークはその言語 (この場合は Dart) がバッファーオーバーフローを軽減する方法であるため、スタックカナリアを使用したコンパイルは行われません。
Android ネイティブライブラリは有効にしなければなりませんが、それを完全に判断するのは難しいかもしれません。
NDK ライブラリはコンパイラがデフォルトでそれを行うため有効になっているはずです。
他のカスタム C/C++ ライブラリは有効になっていない可能性があります。
詳しくはこちら。
Last updated
Was this helpful?