MASTG-TEST-0047 ファイル完全性チェックのテスト (Testing File Integrity Checks)
ファイル完全性チェックのバイパス
アプリケーションソースの完全性チェックのバイパス
アンチデバッグ機能にパッチを適用します。望まない動作を無効にするには、関連するバイトコードやネイティブコードを NOP 命令で上書きするだけです。
Frida か Xposed を使用して、Java やネイティブ層のファイルシステム API をフックします。改変したファイルではなく、元のファイルへのハンドルを返します。
カーネルモジュールを使用して、ファイル関連のシステムコールをインターセプトします。プロセスが改変したファイルを開こうとする際、未改変のバージョンのファイルのファイル記述子を返します。
パッチ適用、コードインジェクション、カーネルモジュールの例についてはメソッドフックを参照してください。
ストレージ完全性チェックのバイパス
デバイスからデータを取得します。
取得したデータを改変して、ストレージに戻します。
有効性評価
アプリケーションソースの完全性チェック:
変更を加えていない状態でアプリを実行し、すべてが動作することを確認します。 アプリパッケージの classes.dex
と任意の .so ライブラリに簡単なパッチを適用します。"セキュリティテスト入門" の章の説明に従って、アプリを再パッケージ化し、再署名してからアプリを実行します。アプリは改変を検出し、何らかの反応を示すはずです。少なくとも、アプリはユーザーに警告したり、終了するはずです。防御のバイパスに取り組み、以下の質問に回答します。
そのメカニズムは簡単に (たとえば、一つの API 関数をフックするなどで) バイパスできますか?
静的解析および動的解析によって検出コードを特定することはどのくらい難しいですか?
その防御を無効にするカスタムコードを書くことは必要はありますか?どのくらい時間がかかりましたか?
そのメカニズムをバイパスすることの難しさをどのように評価しますか?
ストレージ完全性チェック:
アプリケーションソースの完全性チェックと同様のアプローチを適用します。以下の質問に回答します。
そのメカニズムは簡単に (たとえば、ファイルやキーと値のコンテンツを変更することなどで) バイパスできますか?
HMAC キーや非対称秘密鍵 (private key) を取得することはどのくらい難しいですか?
その防御を無効にするカスタムコードを書くことは必要はありますか?どのくらい時間がかかりましたか?
そのメカニズムをバイパスすることの難しさをどのように評価しますか?
Last updated
Was this helpful?