# iOS 기본 테스트 작업
htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요! HackTricks를 지원하는 다른 방법: * **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요! * [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요. * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다. * 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** **팔로우**하세요. * **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
## **iOS 기기 식별 및 액세스 요약** ### **iOS 기기의 UDID 식별** iOS 기기를 고유하게 식별하기 위해 UDID라고 알려진 40자리 시퀀스를 사용합니다. macOS Catalina 이상에서는 iTunes가 더 이상 존재하지 않으므로 이를 **Finder 앱**에서 찾을 수 있습니다. USB로 연결하고 Finder에서 선택한 기기는 이름 아래의 세부 정보를 클릭하면 UDID를 포함한 다른 정보를 확인할 수 있습니다. Catalina 이전 버전의 macOS에서는 iTunes를 통해 UDID를 확인할 수 있습니다. 자세한 지침은 [여기](http://www.iclarified.com/52179/how-to-find-your-iphones-udid)에서 찾을 수 있습니다. 명령 줄 도구를 사용하면 UDID를 검색하는 대체 방법을 제공합니다: * **I/O Registry Explorer 도구 `ioreg` 사용:** ```bash $ ioreg -p IOUSB -l | grep "USB Serial" ``` * **`ideviceinstaller`를 macOS (및 Linux)에서 사용하는 방법:** ```bash $ brew install ideviceinstaller $ idevice_id -l ``` * **`system_profiler` 활용하기:** ```bash $ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:" ``` * **`instruments`를 사용하여 장치 목록 나열하기:** ```bash $ instruments -s devices ``` ### **기기 쉘에 접근하기** **SSH 액세스**는 **OpenSSH 패키지**를 탈옥 후 설치하여 `ssh root@`를 통해 연결할 수 있도록 합니다. 기기의 보안을 위해 `root`와 `mobile` 사용자의 기본 암호(`alpine`)를 변경하는 것이 중요합니다. **USB를 통한 SSH**는 Wi-Fi가 없는 경우에 필요하며, `iproxy`를 사용하여 기기 포트를 SSH 연결에 매핑합니다. 이 설정은 다음을 실행하여 USB를 통한 SSH 액세스를 가능하게 합니다: ```bash $ iproxy 2222 22 $ ssh -p 2222 root@localhost ``` **장치 내 쉘 애플리케이션**인 NewTerm 2와 같은 것은 문제 해결에 유용하며, 특히 장치와 직접 상호작용하는 데 도움이 됩니다. **역 SSH 쉘**은 호스트 컴퓨터에서 원격 액세스를 설정할 수도 있습니다. ### **잊어버린 비밀번호 재설정** 잊어버린 비밀번호를 기본값(`alpine`)으로 재설정하려면 `/private/etc/master.passwd` 파일을 편집해야 합니다. 이는 `root`와 `mobile` 사용자 항목 옆에 `alpine`의 해시로 기존 해시를 대체하는 것을 의미합니다. ## **데이터 전송 기법** ### **앱 데이터 파일 전송** **SSH와 SCP를 통한 아카이빙 및 검색:** `tar`를 사용하여 애플리케이션의 데이터 디렉토리를 아카이브한 다음 `scp`를 사용하여 전송하는 것은 간단합니다. 아래 명령은 데이터 디렉토리를 .tgz 파일로 아카이브한 다음 장치에서 가져옵니다: ```bash 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 기기로부터 파일을 다운로드하거나 업로드할 수 있습니다. ```bash objection --gadget com.apple.mobilesafari explorer cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents file download ``` ## **앱 획득 및 추출** ### **IPA 파일 획득** **Over-The-Air (OTA) 배포 링크:** OTA를 통해 테스트용으로 배포된 앱은 ITMS 서비스 자산 다운로더 도구를 사용하여 로컬에 IPA 파일을 저장하는 데 사용할 수 있습니다. 이 도구는 npm을 통해 설치됩니다. ```bash 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 플래그 확인 및 수정:** ```bash otool -Vh Original_App python change_macho_flags.py --no-pie Original_App otool -Vh Hello_World ``` **암호화된 섹션 식별 및 메모리 덤프:** `otool`을 사용하여 암호화된 섹션의 시작 및 끝 주소를 확인하고, gdb를 사용하여 탈옥된 기기에서 메모리를 덤프합니다. ```bash otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO dump memory dump.bin 0x8000 0x10a4000 ``` **암호화된 섹션 덮어쓰기:** 원래 앱 바이너리에서 암호화된 섹션을 복호화된 덤프로 대체합니다. ```bash dd bs=1 seek= conv=notrunc if=dump.bin of=Original_App ``` **암호 해독 완료:** MachOView와 같은 도구를 사용하여 이진 파일의 메타데이터를 수정하여 암호화가 없음을 나타내는 `cryptid`를 0으로 설정합니다. ### **자동으로 암호 해독하기** #### **frida-ios-dump** [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) 도구는 iOS 기기에서 앱을 자동으로 해독하고 추출하는 데 사용됩니다. 먼저, `dump.py`를 iOS 기기에 연결하도록 구성해야 합니다. 이는 **iproxy**를 통해 로컬호스트의 2222 포트를 통해 또는 기기의 IP 주소와 포트를 직접 사용하여 수행할 수 있습니다. 기기에 설치된 애플리케이션은 다음 명령을 사용하여 나열할 수 있습니다: ```bash $ python dump.py -l ``` Telegram과 같은 특정 앱을 덤프하려면 다음 명령을 사용합니다: ```bash $ python3 dump.py -u "root" -p "" ph.telegra.Telegraph ``` 이 명령은 앱 덤프를 시작하여 현재 디렉토리에 `Telegram.ipa` 파일을 생성합니다. 이 프로세스는 탈옥된 기기에 적합하며, 미서명 또는 가짜 서명된 앱은 [**ios-deploy**](https://github.com/ios-control/ios-deploy)와 같은 도구를 사용하여 다시 설치할 수 있습니다. #### **flexdecrypt** [**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt) 도구와 그 래퍼인 [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac)를 사용하면 설치된 애플리케이션에서 IPA 파일을 추출할 수 있습니다. 기기에 **flexdecrypt**를 설치하기 위한 명령어에는 `.deb` 패키지를 다운로드하고 설치하는 것이 포함됩니다. 아래 명령어에서와 같이 **flexdump**를 사용하여 앱을 나열하고 덤프할 수 있습니다: ```bash 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**](https://github.com/ChiChou/bagbak), 또 다른 Frida 기반 도구로, 앱 복호화를 위해 jailbroken 장치가 필요합니다: ```bash bagbak --raw Chrome ``` #### **r2flutch** **r2flutch**는 radare와 frida를 모두 활용하여 앱의 복호화와 덤프를 수행합니다. 자세한 정보는 [**GitHub 페이지**](https://github.com/as0ler/r2flutch)에서 확인할 수 있습니다. ### **앱 설치하기** **Sideloading**은 공식 App Store 이외의 앱을 설치하는 것을 의미합니다. 이 과정은 **installd 데몬**에 의해 처리되며, 앱은 Apple이 발급한 인증서로 서명되어야 합니다. Jailbroken된 기기는 **AppSync**를 통해 이를 우회하여 가짜 서명된 IPA 패키지를 설치할 수 있습니다. #### **Sideloading 도구** - **Cydia Impactor**: iOS에서 IPA 파일 및 Android에서 APK 파일에 서명하고 설치하는 도구입니다. 가이드 및 문제 해결 방법은 [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/)에서 확인할 수 있습니다. - **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 모델에만 적용되는 기능을 요구하는 앱의 경우 실패할 수 있습니다. ## 참고 자료 * [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://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-0052/) * [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/](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-0054/) * [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/)
htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요! HackTricks를 지원하는 다른 방법: * **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 플랜**](https://github.com/sponsors/carlospolop)을 확인하세요! * [**공식 PEASS & HackTricks 스웨그**](https://peass.creator-spring.com)를 얻으세요. * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점적인 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션입니다. * 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **참여**하거나 **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**를** 팔로우하세요. * **HackTricks**와 **HackTricks Cloud** github 저장소에 PR을 제출하여 **자신의 해킹 기법을 공유**하세요.