13 KiB
iOS Basic Testing Operations
ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)!
HackTricks をサポートする他の方法:
- HackTricks で企業を宣伝したいまたは HackTricks をPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksスワッグを手に入れる
- The PEASS Familyを発見し、独占的なNFTsコレクションを見つける
- **💬 Discordグループ**に参加するか、telegramグループに参加するか、Twitter 🐦 @carlospolopmをフォローする
- ハッキングトリックを共有するために、PRを HackTricks および HackTricks Cloud githubリポジトリに提出してください。
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>
を介して接続が可能になります。デバイスを保護するために、ユーザーroot
とmobile
のデフォルトパスワード(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
ファイルを編集する必要があります。これには、既存のハッシュをroot
とmobile
ユーザーエントリの横に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
アプリバイナリの抽出
- IPAからの抽出: IPAを解凍して複合化されたアプリバイナリにアクセスします。
- ジェイルブレイクされたデバイスからの抽出: アプリをインストールし、メモリから複合化されたバイナリを抽出します。
複合化プロセス
手動複合化の概要: 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モデルに固有の機能を要求するアプリが失敗する可能性があります。