Shikata Ga Nai

Private? There is no such things.

第13回:アプリ診断の2つの方法:静的解析と動的解析とは?

Hello there, ('ω')ノ

🧭 まずはざっくり違いを把握!

観点 静的解析(Static Analysis) 動的解析(Dynamic Analysis)
アプリの状態 動かさずに調べる(止まってる) 実行しながら調べる(動いてる)
使用ツール例 MobSF, jadx, apktool など Drozer, Frida, Burp Suite など
分析対象 アプリの構造・コード・設定 実行中の動作・通信・挙動
メリット 短時間で広く浅く確認できる 実際の動作を正確に把握できる
デメリット 実際の動作は見えない 手間や環境構築が必要になる

🧪 静的解析とは?

~アプリを“開封”して、中をのぞくイメージ~

✅ 目的:

アプリ(APKファイル)を分解し、中に含まれるコード、設定、リソースなどを調査します。

✅ よく使うツール:

  • MobSF:自動的に権限やコードの特徴を分析
  • jadx:DEXファイルからJava風コードを逆変換
  • apktool:AndroidManifest.xmlやリソースの確認

✅ 分析できること:

  • 危険なパーミッションの使用
  • APIキーや秘密情報のハードコーディング
  • Exportされたコンポーネントの存在
  • 暗号化処理の有無やロジックの欠陥

📝 具体例:

MobSFでAPKをアップロードすると、次のようなレポートが出てきます:

  • このアプリは「外部ストレージ書き込み」の権限を要求しています
  • 画像ファイルにAPIキーらしき文字列が埋め込まれています
  • マニフェスト内にexported=trueのServiceがあります

これだけで手を動かさなくてもリスクのありそうな部分を発見できるのが魅力です。


🔍 動的解析とは?

~アプリを“実際に動かして”調べる方法~

✅ 目的:

アプリを実際にスマホで起動し、どのように動いているか・どんな通信をしているかを観察・分析します。

✅ よく使うツール:

  • Drozer:実機からアプリの機能に疑似アクセス
  • Frida:実行中の関数や変数の値をリアルタイムで覗く・書き換える
  • Burp Suite:通信(HTTPS含む)をキャプチャ・改ざん

✅ 分析できること:

  • 他アプリから呼び出せてしまうActivityの存在
  • 通信で送られるユーザーデータの中身
  • 認証ロジックがバイパスできないか
  • 暗号化されたはずの情報が平文で送信されていないか

📝 具体例:

  • Drozerで「非公開のActivity」を強制的に起動し、画面に個人情報が表示されるか検証
  • Burpで通信をキャプチャしたところ、ログイン時にIDとパスワードが平文で送信されていた
  • Fridaで暗号化関数をフックし、暗号前の生のデータを抽出できた

こういった動的解析は、静的解析では見えなかった“実際の危険”をあぶり出すのに効果的です。


🤝 両者を組み合わせてこそ真の診断

実際の診断では、静的解析と動的解析はセットで使うのが基本です。

✅ 理由:

  • 静的解析 → 怪しい箇所を見つける
  • 動的解析 → 本当に危険なのか、再現して確かめる

たとえば、「exportedなActivityがある」と静的解析で見つけた場合、それが実際に他アプリからアクセス可能かどうかは、Drozerで試すことで初めて確認できます。


🧠 どっちから始めればいい?

初心者には、まず静的解析からスタートするのがオススメです。 MobSFやjadxを使えば、インストールも少なく、簡単に全体像が見えるからです。

慣れてきたら、実機を使って動的解析へ進みましょう!


✅ まとめ

  • アプリ診断は大きく「静的解析」と「動的解析」の2つに分けられる
  • 静的解析はコードや構造を見る、動的解析は実行時の挙動を見る
  • それぞれに強みがあり、組み合わせることで正確で深い診断ができる
  • 最初は静的解析から始め、ツールや流れに慣れたら動的解析に挑戦しよう

Best regards, (^^ゞ