iOS Basic Testing Operations

ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricks をサポートする他の方法:

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

iOSデバイスのUDIDの特定

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

Catalinaより前のmacOSバージョンでは、iTunesがUDIDの発見を容易にします。詳しい手順はこちらで見つけることができます。

コマンドラインツールを使用すると、UDIDを取得するための代替方法が提供されます:

  • I/O Registry Explorerツール ioregを使用する:

$ ioreg -p IOUSB -l | grep "USB Serial"
  • ideviceinstallerをmacOS(およびLinux)で使用する方法:

$ brew install ideviceinstaller
$ idevice_id -l
  • system_profilerの利用:

$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
  • instrumentsを使用してデバイスをリストする:

$ instruments -s devices

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

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

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

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

オンデバイスシェルアプリケーションのようなNewTerm 2は、トラブルシューティングに特に役立つ、デバイスと直接やり取りを行うことができます。リバースSSHシェルを確立して、ホストコンピュータからリモートアクセスすることも可能です。

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

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

データ転送技術

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

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

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デバイスとの間でのファイルのダウンロードやアップロードなどができます。

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

アプリの取得と抽出

IPAファイルの取得

Over-The-Air (OTA)ディストリビューションリンク: OTA経由でテスト用に配布されるアプリは、ITMSサービスアセットダウンローダーツールを使用してダウンロードすることができます。このツールはnpmを介してインストールされ、IPAファイルをローカルに保存するために使用されます。

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フラグのチェックと修正:

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

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

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

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

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

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

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でlocalhost経由で行うか、デバイスのIPアドレスとポートを直接使用して行うことができます。

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

$ python dump.py -l

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

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

このコマンドはアプリのダンプを開始し、現在のディレクトリにTelegram.ipaファイルが作成されます。このプロセスは、未署名または偽の署名されたアプリをios-deployなどのツールを使用して再インストールできるジェイルブレイクされたデバイスに適しています。

flexdecrypt

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

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ベースのツールで、アプリの復号化には脱獄されたデバイスが必要です。

bagbak --raw Chrome

r2flutch

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

アプリのインストール

Sideloadingは、公式App Store以外からアプリをインストールすることを指します。このプロセスはinstalldデーモンによって処理され、アプリはAppleが発行した証明書で署名する必要があります。ジェイルブレイクされたデバイスは、AppSyncを介してこれをバイパスし、偽の署名されたIPAパッケージをインストールできます。

Sideloadingツール

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

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

  • 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ファイルを再署名する必要があります。

注意: この方法は、古いiPhoneやiPod touchを使用している間に、新しいiPadモデルに固有の機能を要求するアプリが失敗する可能性があります。

Last updated