hacktricks/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md

13 KiB

iOS 기본 테스트 작업

{% hint style="success" %} AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기
{% endhint %}

iOS 기기 식별 및 접근 요약

iOS 기기의 UDID 식별하기

iOS 기기를 고유하게 식별하기 위해 40자리 시퀀스인 UDID가 사용됩니다. macOS Catalina 이상에서는 Finder 앱에서 이를 찾을 수 있으며, iTunes는 더 이상 존재하지 않습니다. USB로 연결된 기기를 Finder에서 선택하면, 이름 아래의 세부 정보를 클릭하여 UDID를 포함한 기타 정보를 확인할 수 있습니다.

Catalina 이전 버전의 macOS에서는 iTunes가 UDID 발견을 용이하게 합니다. 자세한 지침은 여기에서 확인할 수 있습니다.

명령줄 도구는 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 접근은 탈옥 후 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 파일 획득하기

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를 통해 localhost의 포트 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 daemon에 의해 처리되며, 앱은 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 파일을 다시 서명해야 합니다.

참고: 이 방법은 애플리케이션이 구형 iPhone 또는 iPod touch를 사용할 때 최신 iPad 모델에만 해당되는 기능을 요구하는 경우 실패할 수 있습니다.

References

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}