frida-anti-instrumentation について
Frida、root、脱獄、エミュレーター、デバッグの検知を調べるモバイルアプリセキュリティ向けスキルです。検知箇所を特定し、無関係な失敗を隠さない限定的なフックで回避を検証します。
主な機能
- 01アタッチ前後の失敗を切り分け
- 02プロセスやファイルなどの検査を記録
- 03Android、iOS、ネイティブの検知箇所を確認
- 04フックを外して回避を検証
活用シーン
- 01Fridaアタッチ時に終了するアプリの調査
- 02デバッグやアタッチを妨げる検査の特定
- 03特定の検知に対する回避の検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ rudra-ravi/ frida-skills --skill frida-anti-instrumentationインストール後、Claude Code で/frida-anti-instrumentationを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yaml
詳細
Frida による計測対策
アプリが終了する、動作を隠す、アタッチをブロックする、または Frida/root/脱獄/エミュレーター/デバッグを検知する場合に、このスキルを使用します。
診断の順序
- Frida のアタッチ前と後のどちらで障害が発生するかを確認します。
- 起動時のチェックには spawn モードを使用します。
- 終了、プロセスチェック、ファイルチェック、プロパティチェック、ネイティブのデバッグ対策呼び出しを記録します。
- バイパスする前に、具体的にどの検知が行われているかを特定します。
- 検知された条件だけを変える、範囲を絞ったフックのみを残します。
Android の境界
Java.perform(() => {
const Runtime = Java.use("java.lang.Runtime");
Runtime.exec.overload("java.lang.String").implementation = function (cmd) {
console.log("Runtime.exec", cmd);
return this.exec(cmd);
};
});
一般的な Java の対象箇所:File.exists、SystemProperties.get、Build.*、パッケージマネージャーのクエリ、シェルコマンドの実行、デバッガーチェック、エミュレーターのプロパティ。
ネイティブの境界
for (const name of ["open", "access", "stat", "ptrace", "prctl", "connect"]) {
try {
const f = Module.getGlobalExportByName(name);
Interceptor.attach(f, { onEnter() { console.log(name); } });
} catch (_) {}
}
一般的なネイティブの対象箇所:/proc、maps、task、frida、gum-js-loop、TCP ポートスキャン、ptrace、prctl、syscall、dlopen、チェックサム関数。
iOS の境界
ファイルチェック、URL スキームチェック、fork、ptrace、sysctl、csops、dyld イメージのスキャン、不審なライブラリ名、脱獄パスの一覧を確認します。
検証
- アプリが、以前ブロックされていた画面または動作に到達します。
- ログから、どの検知フックが実行されたかを確認できます。
- フックを削除すると、障害が再発します。
- 最終的なバイパスが、無関係なエラーやクラッシュ経路を隠していません。
参考資料
- Frida JavaScript API:https://frida.re/docs/javascript-api/
- Frida CodeShare:https://codeshare.frida.re/
- OWASP MASTG の Frida Android:https://mas.owasp.org/MASTG/tools/android/MASTG-TOOL-0001/
- OWASP MASTG の Frida iOS:https://mas.owasp.org/MASTG/tools/ios/MASTG-TOOL-0039/
コメント
Markdown 対応