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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
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
を使用してアプリケーションのデータディレクトリをアーカイブし、その後 scp
を使用して転送するのは簡単です。以下のコマンドは、データディレクトリを .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ファイルの取得
オーバー・ザ・エア (OTA) 配信リンク: テスト用にOTAで配信されたアプリは、npmを介してインストールされるITMSサービスアセットダウンローダーツールを使用してダウンロードでき、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を使用するか、デバイスの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ページで確認できます。
アプリのインストール
サイドロードは、公式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を使用していると失敗する可能性があります。
参考文献
- https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/
- https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/
- https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/
- https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/
- https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。