iOS基本テスト操作

Reading time: 13 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

iOSデバイスの識別とアクセスの概要

iOSデバイスのUDIDの特定

iOSデバイスを一意に識別するために、UDIDと呼ばれる40桁のシーケンスが使用されます。macOS Catalina以降では、Finderアプリでこれを見つけることができます。iTunesはもはや存在しません。デバイスがUSB経由で接続され、Finderで選択されると、その名前の下の詳細をクリックすることで、UDIDを含む他の情報が表示されます。

Catalina以前のmacOSバージョンでは、iTunesがUDIDの発見を助けます。詳細な手順はこちらで確認できます。

コマンドラインツールは、UDIDを取得するための代替手段を提供します:

  • I/O Registry Explorerツール ioregを使用:
bash
$ ioreg -p IOUSB -l | grep "USB Serial"
  • ideviceinstallerをmacOS(およびLinux)で使用する:
bash
$ brew install ideviceinstaller
$ idevice_id -l
  • system_profilerの利用:
bash
$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
  • instrumentsを使用してデバイスをリストする:
bash
$ instruments -s devices

デバイスシェルへのアクセス

SSHアクセスは、OpenSSHパッケージを脱獄後にインストールすることで有効になり、ssh root@<device_ip_address>を介して接続できます。デバイスを保護するために、ユーザーrootmobileのデフォルトパスワード(alpine)を変更することが重要です。

USB経由のSSHはWi-Fiがない場合に必要となり、iproxyを使用してデバイスポートをSSH接続用にマッピングします。この設定により、次のコマンドを実行することでUSB経由でSSHアクセスが可能になります:

bash
$ iproxy 2222 22
$ ssh -p 2222 root@localhost

オンデバイスシェルアプリケーション、例えば NewTerm 2 は、デバイスとの直接的なインタラクションを促進し、特にトラブルシューティングに役立ちます。リバースSSHシェルも、ホストコンピュータからのリモートアクセスのために確立できます。

忘れたパスワードのリセット

忘れたパスワードをデフォルト(alpine)にリセットするには、/private/etc/master.passwd ファイルを編集する必要があります。これには、既存のハッシュを rootmobile ユーザーエントリの隣にある alpine のハッシュに置き換えることが含まれます。

データ転送技術

アプリデータファイルの転送

SSHとSCPによるアーカイブと取得: tar を使用してアプリケーションのデータディレクトリをアーカイブし、その後 scp を使用して転送するのは簡単です。以下のコマンドは、データディレクトリを .tgz ファイルにアーカイブし、その後デバイスからプルします:

bash
tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
exit
scp -P 2222 root@localhost:/tmp/data.tgz .

グラフィカルユーザーインターフェースツール

iFunboxとiExplorerの使用: これらのGUIツールは、iOSデバイス上のファイルを管理するのに便利です。しかし、iOS 8.4以降、Appleはデバイスが脱獄されていない限り、これらのツールのアプリケーションサンドボックスへのアクセスを制限しました。

Objectionを使用したファイル管理

Objectionによるインタラクティブシェル: objectionを起動すると、アプリのBundleディレクトリにアクセスできます。ここから、アプリのDocumentsディレクトリに移動し、ファイルを管理したり、iOSデバイスへのダウンロードやアップロードを行ったりできます。

bash
objection --gadget com.apple.mobilesafari explorer
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
file download <filename>

アプリの取得と抽出

IPAファイルの取得

オーバー・ザ・エア (OTA) 配信リンク: テスト用にOTAで配信されたアプリは、npmを介してインストールされるITMSサービスアセットダウンローダーツールを使用してダウンロードでき、IPAファイルをローカルに保存します。

bash
npm install -g itms-services
itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa

アプリバイナリの抽出

  1. IPAから: IPAを解凍して、復号化されたアプリバイナリにアクセスします。
  2. 脱獄デバイスから: アプリをインストールし、メモリから復号化されたバイナリを抽出します。

復号化プロセス

手動復号化の概要: iOSアプリのバイナリはAppleによってFairPlayを使用して暗号化されています。リバースエンジニアリングを行うには、メモリから復号化されたバイナリをダンプする必要があります。復号化プロセスには、PIEフラグの確認、メモリフラグの調整、暗号化されたセクションの特定、そしてこのセクションを復号化された形式にダンプして置き換えることが含まれます。

PIEフラグの確認と修正:

bash
otool -Vh Original_App
python change_macho_flags.py --no-pie Original_App
otool -Vh Hello_World

暗号化セクションの特定とメモリのダンプ:

otoolを使用して暗号化セクションの開始および終了アドレスを特定し、gdbを使用して脱獄したデバイスからメモリをダンプします。

bash
otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
dump memory dump.bin 0x8000 0x10a4000

暗号化セクションの上書き:

元のアプリバイナリの暗号化されたセクションを復号化されたダンプで置き換えます。

bash
dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App

復号の最終化: MachOViewのようなツールを使用して、バイナリのメタデータを変更し、cryptidを0に設定して暗号化がないことを示します。

復号 (自動的に)

frida-ios-dump

frida-ios-dumpツールは、iOSデバイスから自動的にアプリを復号化して抽出するために使用されます。最初に、dump.pyを設定してiOSデバイスに接続する必要があり、これはiproxyを介してローカルホストのポート2222を使用するか、デバイスのIPアドレスとポートを直接使用して行うことができます。

デバイスにインストールされているアプリケーションは、次のコマンドでリストできます:

bash
$ python dump.py -l

特定のアプリ、例えばTelegramをダンプするには、次のコマンドを使用します:

bash
$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph

このコマンドはアプリのダンプを開始し、現在のディレクトリに Telegram.ipa ファイルを作成します。このプロセスは脱獄したデバイスに適しており、未署名または偽署名のアプリは ios-deploy のようなツールを使用して再インストールできます。

flexdecrypt

flexdecrypt ツールは、そのラッパー flexdump とともに、インストールされたアプリケーションからIPAファイルを抽出することを可能にします。デバイス上での flexdecrypt のインストールコマンドには、.deb パッケージのダウンロードとインストールが含まれます。 flexdump は、以下のコマンドに示すように、アプリをリストおよびダンプするために使用できます。

bash
apt install zip unzip
wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump
flexdump list
flexdump dump Twitter.app

bagbak

bagbakは、アプリの復号化に脱獄したデバイスを必要とする別のFridaベースのツールです:

bash
bagbak --raw Chrome

r2flutch

r2flutchは、radareとfridaの両方を利用して、アプリの復号化とダンプを行います。詳細はそのGitHubページで確認できます。

アプリのインストール

サイドロードは、公式App Storeの外でアプリケーションをインストールすることを指します。このプロセスはinstalldデーモンによって処理され、アプリはApple発行の証明書で署名される必要があります。脱獄したデバイスはAppSyncを通じてこれを回避し、偽署名されたIPAパッケージのインストールを可能にします。

サイドロードツール

  • Cydia Impactor: iOS用のIPAファイルとAndroid用のAPKファイルを署名してインストールするためのツールです。ガイドとトラブルシューティングはyalujailbreak.netで見つけることができます。

  • libimobiledevice: iOSデバイスと通信するためのLinuxおよびmacOS用のライブラリです。USB経由でアプリをインストールするためのideviceinstallerのインストールコマンドと使用例が提供されています。

  • ipainstaller: このコマンドラインツールは、iOSデバイスに直接アプリをインストールすることを可能にします。

  • ios-deploy: macOSユーザー向けに、ios-deployはコマンドラインからiOSアプリをインストールします。IPAを解凍し、直接アプリを起動するために-mフラグを使用することがプロセスの一部です。

  • Xcode: Xcodeを利用して、Window/Devices and Simulatorsに移動し、アプリをInstalled Appsに追加することでアプリをインストールします。

非iPadデバイスへのアプリケーションインストールの許可

iPhoneやiPod touchデバイスにiPad専用アプリケーションをインストールするには、Info.plistファイル内のUIDeviceFamily値を1に変更する必要があります。ただし、この変更は署名検証チェックのためにIPAファイルの再署名を必要とします。

注意: この方法は、アプリケーションが新しいiPadモデル専用の機能を要求する場合、古いiPhoneやiPod touchを使用していると失敗する可能性があります。

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする