iOS 기본 테스트 작업

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 app에서 확인할 수 있으며, iTunes는 더 이상 제공되지 않습니다. 기기를 USB로 연결하고 Finder에서 선택한 후 이름 아래의 세부 정보를 클릭하면 UDID를 비롯한 기타 정보가 표시됩니다.

Catalina 이전 버전의 macOS에서는 iTunes에서 UDID를 확인할 수 있습니다. 자세한 지침은 here에서 확인하세요.

Command-line 도구는 UDID를 가져오는 대안 방법을 제공합니다:

  • I/O Registry Explorer 도구 ioreg 사용:
$ ioreg -p IOUSB -l | grep "USB Serial"
  • macOS (및 Linux)에서 ideviceinstaller 사용하기:
$ 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 access는 탈옥 후 OpenSSH package를 설치하면 가능하며, ssh root@<device_ip_address>로 연결할 수 있습니다. 장치를 안전하게 유지하려면 사용자 rootmobile의 기본 비밀번호(alpine)를 변경하는 것이 중요합니다.

SSH over USB는 Wi-Fi가 없는 경우 필요해지며, SSH 연결을 위해 디바이스 포트를 매핑하기 위해 iproxy를 사용합니다. 이 설정으로 다음을 실행하여 USB를 통해 SSH에 접근할 수 있습니다:

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

On-device shell applications, like NewTerm 2, 기기와의 직접 상호작용을 용이하게 하며, 특히 문제 해결에 유용합니다. Reverse SSH shells는 또한 호스트 컴퓨터에서의 원격 액세스를 위해 설정할 수 있습니다.

Resetting Forgotten Passwords

기본값(alpine)으로 비밀번호를 재설정하려면 /private/etc/master.passwd 파일을 편집해야 합니다. 이는 rootmobile 사용자 항목 옆의 기존 해시를 alpine의 해시로 교체하는 것을 포함합니다.

Data Transfer Techniques

Transferring App Data Files

Archiving and Retrieval via SSH and SCP: 애플리케이션의 Data 디렉터리를 tar로 아카이브한 다음 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부터는 기기가 jailbroken 상태가 아니면 Apple이 이러한 도구들의 application sandbox 접근을 제한했습니다.

파일 관리를 위한 Objection 사용

Objection을 이용한 대화형 셸: objection을 실행하면 앱의 Bundle directory에 접근할 수 있습니다. 여기에서 앱의 Documents directory로 이동해 파일을 관리할 수 있으며, iOS device로부터 파일을 다운로드하거나 iOS device로 파일을 업로드할 수 있습니다.

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를 통해 테스트용으로 배포된 앱은 npm으로 설치하는 ITMS services asset downloader 도구를 사용하여 다운로드하고 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. From an IPA: IPA의 압축을 풀어 decrypted app binary에 접근합니다.
  2. From a Jailbroken Device: 앱을 설치하고 memory에서 decrypted binary를 추출합니다.

복호화(Decryption) 프로세스

수동 복호화 개요: iOS 앱 바이너리는 Apple이 FairPlay를 사용해 암호화합니다. To reverse-engineer, memory에서 decrypted binary를 dump해야 합니다. 복호화 과정은 PIE flag 확인, memory flags 조정, encrypted section 식별, 그리고 해당 섹션을 dump하여 decrypted form으로 교체하는 것을 포함합니다.

PIE Flag 확인 및 수정:

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

암호화된 섹션 식별 및 메모리 덤프:

otool을 사용해 암호화된 섹션의 시작 및 끝 주소를 결정하고, jailbroken device에서 gdb를 사용해 메모리를 덤프합니다.

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

Encrypted Section 덮어쓰기:

원본 app binary에 있는 encrypted section을 decrypted dump로 덮어씁니다.

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

Finalizing Decryption: 바이너리의 메타데이터를 수정하여 암호화가 없음을 표시합니다. MachOView 같은 도구를 사용해 cryptid를 0으로 설정하세요.

Decryption (자동으로)

frida-ios-dump

The frida-ios-dump 도구는 iOS 기기에서 앱을 자동으로 암호 해제하고 추출하는 데 사용됩니다. 먼저 dump.py를 구성하여 iOS 기기에 연결해야 하며, 이는 iproxy를 통해 localhost의 포트 2222로 연결하거나 기기의 IP 주소와 포트로 직접 연결하여 수행할 수 있습니다.

기기에 설치된 애플리케이션은 다음 명령으로 나열할 수 있습니다:

$ python dump.py -l

Telegram과 같은 특정 앱을 dump하려면 다음 명령을 사용합니다:

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

이 명령은 앱 덤프를 시작하여 현재 디렉터리에 Telegram.ipa 파일을 생성합니다. 이 프로세스는 탈옥된 장치에 적합하며, 서명되지 않았거나 가짜로 서명된 앱은 ios-deploy 같은 도구로 재설치할 수 있습니다.

frida-ipa-extract

탈옥된 장치용 Frida 기반 IPA 추출기; 더 빠른 추출을 위해 USB Frida 세션과 선택적 SSH/SFTP를 사용합니다.

  • 요구 사항: Python 3.9+, frida, paramiko, frida-server가 설치된 탈옥된 장치 (SSH 모드용 OpenSSH).
  • 설정:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
  • 사용법:
python extract.py -U -f com.example.app -o MyApp.ipa
python extract.py -U -f com.example.app -o MyApp.ipa --sandbox --no-resume
python extract.py -H 192.168.100.32 -P 2222 -u root -p password -f com.example.app
  • 플래그: -f <bundle>는 프로세스를 생성하거나 연결합니다 (또는 --pid는 PID 사용); -o는 출력 이름을 설정합니다. -U는 USB를 사용합니다; -H/-P/-u/-pfrida-server의 27042로 SSH 터널을 열고 SFTP로 가져옵니다( -U와 결합 가능). --sandbox는 샌드박스를 덤프합니다; --no-resume는 세션이 끊어질 경우 시스템 프로세스에 의한 크래시와 재시도를 피하기 위해 앱을 일시중단 상태로 유지합니다.
  • 문제 해결: Frida attach timed out-f 또는 --no-resume 사용; script has been destroyed--no-resume 또는 SSH 전송 사용; No running apps found → 앱을 시작하거나 생성하세요.

flexdecrypt

The flexdecrypt tool, along with its wrapper 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, utilizing both radare and frida, serves for app decryption and dumping. More information can be found on its GitHub page.

Installing Apps

Sideloading란 공식 App Store 외부에서 애플리케이션을 설치하는 것을 말합니다. 이 프로세스는 installd daemon에 의해 처리되며 앱은 Apple이 발행한 인증서로 서명되어야 합니다. 탈옥된 기기는 AppSync를 통해 이를 우회하여 위조 서명된 IPA 패키지의 설치를 가능하게 합니다.

Sideloading Tools

  • 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에 추가하여 앱을 설치합니다.

Allow Application Installation on Non-iPad Devices

iPad 전용 애플리케이션을 iPhone 또는 iPod touch 기기에 설치하려면, Info.plist 파일의 UIDeviceFamily 값을 1로 변경해야 합니다. 그러나 이 변경은 서명 검증 때문에 IPA 파일의 재서명이 필요합니다.

참고: 앱이 최신 iPad 모델에만 있는 기능을 요구하는 경우, 구형 iPhone 또는 iPod touch에서 이 방법이 실패할 수 있습니다.

References

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 지원하기