iOS Basic Testing Operations

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

iOS 기기 식별 및 액세스 요약

iOS 기기의 UDID 식별

iOS 기기를 고유하게 식별하기 위해 UDID라고 알려진 40자리 시퀀스를 사용합니다. macOS Catalina 이상에서는 iTunes가 더 이상 존재하지 않으므로 이를 Finder 앱에서 찾을 수 있습니다. 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를 사용하여 애플리케이션의 데이터 디렉토리를 아카이브한 다음 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을 실행하면 앱의 번들 디렉토리에 액세스할 수 있습니다. 여기서 앱의 문서 디렉토리로 이동하여 파일을 관리할 수 있으며, 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 서비스 자산 다운로더 도구를 사용하여 로컬에 IPA 파일을 저장하는 데 사용할 수 있습니다. 이 도구는 npm을 통해 설치됩니다.

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. Jailbroken 장치에서 추출하기: 앱을 설치하고 메모리에서 복호화된 바이너리를 추출합니다.

복호화 과정

수동 복호화 개요: 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 기반 도구로, 앱 복호화를 위해 jailbroken 장치가 필요합니다:

bagbak --raw Chrome

r2flutch

r2flutch는 radare와 frida를 모두 활용하여 앱의 복호화와 덤프를 수행합니다. 자세한 정보는 GitHub 페이지에서 확인할 수 있습니다.

앱 설치하기

Sideloading은 공식 App Store 이외의 앱을 설치하는 것을 의미합니다. 이 과정은 installd 데몬에 의해 처리되며, 앱은 Apple이 발급한 인증서로 서명되어야 합니다. Jailbroken된 기기는 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 모델에만 적용되는 기능을 요구하는 앱의 경우 실패할 수 있습니다.

참고 자료

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

Last updated