AndroidアプリのHTTPS通信傍受とSSL Pinning回避手法

背景と目的

現代のAndroidアプリケーションではHTTPS通信が標準的に採用されており、セキュリティ向上の観点からSSL証明書ピニングが実装されるケースが増えています。Android 7以降のバージョンでは、ユーザーがインストールした証明書をシステムが信頼しないため、従来の方法ではHTTPS通信の傍受が困難となっています。本稿では、この制限を回避し、Androidアプリの通信解析を可能にする環境構築手法について解説します。

必要な環境とツール

  • Nox Playerエミュレータ(Android 9バージョン)
  • Magisk v25.2 + LSPosed v1.8.6
  • TrustMeAlready v1.11
  • Postern v3.1.3

MagiskとLSPosedのインストール手順

Nox PlayerにAndroid 9のインスタンスを作成後、MagiskのAPKファイルをエミュレータ内にドラッグ&ドロップしてインストールします。ターミナルを起動し、以下のコマンドを順次実行します:

m
Y
1
x
/sdcard/Pictures/25206.apk
1

エミュレータの再起動後、Magiskアプリを起動してバージョン番号が表示されることを確認します。設定メニューからZygiskを有効にし、LSPosedのZIPファイルを同様の方法でインストールします。モジュールセクションからローカルインストールを選択し、LSPosedのZIPファイルを指定してインストールを完了させます。

TrustMeAlreadyとPosternの設定

TrustMeAlreadyモジュールはSSL証明書ピニングの回避を、Posternはプロキシ検出の回避をそれぞれ担当します。TrustMeAlreadyのAPKファイルをエミュレータにインストール後、LSPosedインターフェースでモジュールが有効になっていることを確認します。Posternも同様にインストールし、後続の設定で使用します。

Burp Suite証明書のインストール

エミュレータのネットワーク設定をブリッジモードに変更し、静的IPアドレスを割り当てます。Posternを起動し、プロキシサーバー設定でBurp SuiteのIPアドレスとポート番号を指定します。Burp Suiteの証明書をDER形式でダウンロードし、拡張子を.cerに変更してエミュレータに転送します。

設定アプリの「セキュリティと位置情報」セクションから「暗号化と認証情報」を選択し、「SDカードからインストール」オプションで先ほど転送した証明書をインポートします。

実践例:旅行アプリの通信傍受

単方向認証を使用するHTTPS通信を行うアプリを対象に、上記設定が正しく機能していることを確認します。認証コード取得リクエストなどの通信が傍受可能であれば、環境構築は成功しています。

Android 12実機での設定

USB接続による設定

開発者オプションでUSBデバッグを有効にし、以下のコマンドで接続を確認します:

adb devices -l

Wi-Fi接続による設定

USB接続確立後、以下のコマンドでTCP/IPモードに切り替えます:

adb tcpip 5555
adb connect [IPアドレス]:5555

システム証明書への移動

movecertモジュールを使用して、ユーザー証明書をシステム証明書領域に移動します。Magiskの改良版を使用してモジュールをインストールし、再起動後に証明書がシステム領域に移動したことを確認します。

Root検出の回避

Shamikoモジュールをインストールし、Magiskの除外リスト機能と併用することで、Root権限の検出を防止します。対象アプリを除外リストに追加し、LSPosedモジュールとの互換性を維持します。

タグ: Android PenetrationTesting SSL-Pinning Burp-Suite Magisk

5月25日 04:09 投稿