Fridaによる動的解析
Fridaとフック
「Fridaによる動的解析」はCoddyKit上の無料Ethical Hacking Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはEthical Hacking Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ethical Hacking Academyコースには全4レッスンが含まれています。
Fridaとは
Fridaは動的計装ツールキットです。実行中のアプリにJavaScriptエンジンをインジェクトし、再コンパイルせずに実行時の動作を調査・変更できます。
動的モバイルペネトレーションテストにおいて、最も重要なツールです。
Fridaの仕組み
Fridaは小さなエージェント(デバイス上のfrida-server)と、マシン上のクライアントで動作します。対象プロセスの関数にフックするJavaScriptを記述します。
スクリプトから引数を読み取り、戻り値を変更し、メソッドを直接呼び出すことができます。
セットアップ
対応するfrida-serverバイナリをroot化したデバイスに転送して実行します(または、root化されていないデバイスではfrida-gadgetを組み込んだパッチ済みAPKを使用します)。
その後、デスクトップツールがUSB経由で接続します。
adb push frida-server /data/local/tmp/
adb shell /data/local/tmp/frida-server &アプリの列挙
FridaのCLIツールでインストール済みアプリと実行中のプロセスを一覧表示し、接続を確認してください。
これにより、frida-serverに到達できることを確認し、対象にするパッケージ名を取得できます。
frida-ps -Uaiフックとは
フックとは、関数を横取りして、関数の前、後、または代わりに自分のコードを実行することです。入力をログに記録したり、出力を調査したり、動作全体を置き換えたりできます。
Androidでは、実行中のアプリ内部にあるJavaメソッド(およびネイティブ関数)をフックします。
シンプルなJavaフック
Java.performの内部でクラスを選択し、メソッドを指定して、そのimplementationを上書きします。引数をログに記録してから、元のメソッドを呼び出すこともできます。
この例では、JSONで安全に扱えるようにバッククォートではなく、シングルクォートを使用している点に注意してください。
Java.perform(function(){
var Login = Java.use('com.app.Login');
Login.check.implementation = function(pw){
console.log('pw=' + pw);
return this.check(pw);
};
});チェックの回避
ロジックを回避するには、メソッドを上書きして任意の値を返すようにします。たとえば、root化チェックやライセンスチェックがfalse(検出されていない)またはtrue(認証済み)を返すよう強制できます。
これにより、デバイスを信頼するクライアント側のセキュリティを無効化できます。
RootCheck.isRooted.implementation = function(){ return false; };SSLピンニングの回避
アプリはSSLピンニングを使用してプロキシを拒否します。Fridaスクリプト(一般的なObjectionやユニバーサルなピンニング回避スクリプトなど)はピンニングのロジックをフックし、HTTPS通信を傍受できるようにします。
プロキシ経由でアプリのAPI呼び出しを調査するために不可欠です。
frida -U -f com.app -l ssl-bypass.jsObjection
ObjectionはFridaを基盤としており、スクリプトを書かずにSSLピンニングの回避、キーストアのダンプ、アクティビティの一覧表示、アプリストレージの読み取りなどを行える、すぐに使えるコマンドを提供します。
評価中によく行う作業を効率化できます。
objection -g com.app exploreSpawnとAttachの違い
Fridaでは、実行中のプロセスにattachすることも、スクリプトを最初から読み込んだ状態でアプリを新たにspawnすることもできます(-f)。
起動時に実行される改ざん防止チェックなど、早い段階で実行されるコードをフックする必要がある場合は、spawnが必要です。
frida -U -f com.app -l hook.js --no-pausefrida-traceによるトレース
frida-traceは、パターンに一致する関数へのフックを自動生成してアタッチし、すべての呼び出しをログに記録します。アプリが実際に使用しているメソッドを発見するのに適しています。
Javaメソッドまたはネイティブ関数を対象にし、生成されたハンドラーを調整して特定の引数を調査できます。
frida-trace -U -f com.app -j '*Crypto*!*'クイックチェック
Fridaの中核となる機能を思い出してください。
まとめ
これで、Fridaを使った動的解析について理解できました。
- FridaはJSエンジンをインジェクトし、実行中のアプリの関数をフックします。
- frida-serverをセットアップし、
frida-psでアプリを列挙して、Javaメソッドをフックします。 - メソッドを上書きしてチェックやSSLピンニングを回避します。Objectionを使えば自動化できます。
- spawnモードを使用して、起動直後に実行されるコードを捕捉します。
次は、安全でないストレージと通信について調べます。
よくある質問
「Fridaによる動的解析」レッスンは無料ですか?
はい。「Fridaによる動的解析」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ethical Hacking Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ethical Hacking Academyコースには全4レッスンが含まれています。
「Fridaによる動的解析」で何を学びますか?
Fridaとフック ブラウザで直接実行するハンズオンコードでEthical Hacking Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ethical Hacking Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのEthical Hacking Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Fridaによる動的解析」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このEthical Hacking Academyレッスンでコードを書いて実行できますか?
はい。すべてのEthical Hacking Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Androidアプリの構造
- APKの静的解析
- Fridaによる動的解析
- 安全でないストレージと通信