iOS Testing Environment

Support HackTricks

Apple Developer Program

프로비저닝 아이덴티티는 Apple 개발자 계정과 연결된 공개 및 개인 키의 모음입니다. 앱 서명을 하려면 99$/년을 지불하고 Apple Developer Program에 등록하여 프로비저닝 아이덴티티를 받아야 합니다. 이를 하지 않으면 물리적 장치에서 소스 코드로부터 애플리케이션을 실행할 수 없습니다. 이를 수행하는 또 다른 방법은 탈옥된 장치를 사용하는 것입니다.

Xcode 7.2부터 Apple은 실제 iPhone에서 애플리케이션을 작성하고 테스트할 수 있는 무료 iOS 개발 프로비저닝 프로필을 생성할 수 있는 옵션을 제공했습니다. Xcode --> Preferences --> Accounts --> + (자격 증명으로 새 Appli ID 추가) --> 생성된 Apple ID 클릭 --> Manage Certificates --> + (Apple Development) --> Done __그런 다음, iPhone에서 애플리케이션을 실행하려면 먼저 iPhone이 컴퓨터를 신뢰하도록 지정해야 합니다. 그런 다음, Xcode에서 모바일에서 애플리케이션을 실행해 보려고 하면 오류가 발생합니다. 따라서 Settings --> General --> Profiles and Device Management --> 신뢰할 수 없는 프로필을 선택하고 "Trust"를 클릭합니다.

같은 서명 인증서로 서명된 애플리케이션은 키체인 항목과 같은 리소스를 안전하게 공유할 수 있습니다.

프로비저닝 프로필은 전화기 내부의 **/Library/MobileDevice/ProvisioningProfiles**에 저장됩니다.

Simulator

시뮬레이터는 에뮬레이터와 동일하지 않다는 점에 유의하세요. 시뮬레이터는 장치의 동작과 기능을 시뮬레이션할 뿐 실제로 사용하지는 않습니다.

Simulator

가장 먼저 알아야 할 것은 시뮬레이터 내에서 펜테스트를 수행하는 것이 탈옥된 장치에서 수행하는 것보다 훨씬 더 제한적이라는 것입니다.

iOS 앱을 구축하고 지원하는 데 필요한 모든 도구는 Mac OS에서만 공식적으로 지원됩니다. Apple의 사실상 도구는 iOS 애플리케이션을 생성/디버깅/계측하는 Xcode입니다. 이를 사용하여 시뮬레이터 및 애플리케이션을 구축하고 테스트하는 데 필요한 다양한 SDK 버전과 같은 다른 구성 요소를 다운로드할 수 있습니다. 공식 앱 스토어에서 Xcode를 다운로드하는 것이 강력히 권장됩니다. 다른 버전은 맬웨어를 포함할 수 있습니다.

시뮬레이터 파일은 /Users/<username>/Library/Developer/CoreSimulator/Devices에 있습니다.

시뮬레이터를 열려면 Xcode를 실행한 다음 Xcode 탭 --> Open Developer tools --> _Simulator_를 누릅니다. __다음 이미지에서 "iPod touch [...]"를 클릭하면 테스트할 다른 장치를 선택할 수 있습니다:

Applications in the Simulator

/Users/<username>/Library/Developer/CoreSimulator/Devices 내부에서 설치된 시뮬레이터를 모두 찾을 수 있습니다. 에뮬레이터 중 하나에서 생성된 애플리케이션의 파일에 접근하려면 어느 에뮬레이터에 앱이 설치되었는지 아는 것이 어려울 수 있습니다. 올바른 UID를 찾는 빠른 방법은 시뮬레이터에서 앱을 실행하고 다음을 실행하는 것입니다:

xcrun simctl list | grep Booted
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)

Once you know the UID the apps installed within it can be found in /Users/<username>/Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application

하지만 놀랍게도 여기에서 애플리케이션을 찾을 수 없습니다. /Users/<username>/Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/에 접근해야 합니다.

그리고 이 폴더에서 애플리케이션의 패키지를 찾을 수 있습니다.

Emulator

Corellium은 공개적으로 사용 가능한 유일한 iOS 에뮬레이터입니다. 이는 사용자당 라이선스 모델을 가진 기업 SaaS 솔루션이며, 시험 라이선스를 제공하지 않습니다.

Jailbeaking

Apple은 iPhone에서 실행되는 코드가 Apple이 발급한 인증서로 서명되어야 한다고 엄격히 요구합니다. Jailbreaking은 OS에 의해 설정된 그러한 제한 및 기타 보안 통제를 우회하는 과정입니다. 따라서 장치가 탈옥되면 앱 설치를 확인하는 무결성 검사가 패치되어 우회됩니다.

Android와 달리, iOS에서는 "개발자 모드"로 전환하여 장치에서 서명되지 않거나 신뢰할 수 없는 코드를 실행할 수 없습니다.

Android Rooting vs. iOS Jailbreaking

종종 비교되지만, Android의 rooting과 iOS의 jailbreaking은 근본적으로 다른 과정입니다. Android 장치의 루팅은 su 바이너리 설치 또는 루팅된 커스텀 ROM으로 시스템 교체를 포함할 수 있으며, 부트로더가 잠금 해제된 경우 반드시 익스플로잇이 필요하지는 않습니다. 커스텀 ROM 플래싱은 부트로더를 잠금 해제한 후 장치의 OS를 교체하며, 때때로 익스플로잇이 필요합니다.

반면, iOS 장치는 부트로더가 Apple 서명 이미지만 부팅하도록 제한되어 있어 커스텀 ROM을 플래시할 수 없습니다. iOS 탈옥은 서명되지 않은 코드를 실행하기 위해 Apple의 코드 서명 보호를 우회하는 것을 목표로 하며, 이는 Apple의 지속적인 보안 강화로 인해 복잡해집니다.

Jailbreaking Challenges

iOS의 탈옥은 Apple이 취약점을 신속하게 패치함에 따라 점점 더 어려워지고 있습니다. iOS 다운그레이드는 릴리스 후 제한된 시간 동안만 가능하므로 탈옥은 시간에 민감한 문제입니다. 보안 테스트에 사용되는 장치는 재탈옥이 보장되지 않는 한 업데이트하지 않아야 합니다.

iOS 업데이트는 챌린지-응답 메커니즘(SHSH blobs)에 의해 제어되며, Apple 서명 응답에 대해서만 설치를 허용합니다. 이 메커니즘은 "서명 창"으로 알려져 있으며, OTA 펌웨어 패키지를 저장하고 나중에 사용할 수 있는 능력을 제한합니다. IPSW Downloads 웹사이트는 현재 서명 창을 확인할 수 있는 리소스입니다.

Jailbreak Varieties

  • Tethered jailbreaks는 각 재부팅 시 컴퓨터 연결이 필요합니다.

  • Semi-tethered jailbreaks는 컴퓨터 없이 비탈옥 모드로 부팅할 수 있습니다.

  • Semi-untethered jailbreaks는 컴퓨터 없이 수동으로 재탈옥해야 합니다.

  • Untethered jailbreaks는 재적용 없이 영구적인 탈옥 솔루션을 제공합니다.

Jailbreaking Tools and Resources

탈옥 도구는 iOS 버전 및 장치에 따라 다릅니다. Can I Jailbreak?, The iPhone Wiki, Reddit Jailbreak와 같은 리소스는 최신 정보를 제공합니다. 예시로는:

  • A7-A11 칩 장치를 위한 Checkra1n

  • iOS 15.0-16.5에서 Checkm8 장치를 위한 Palera1n

  • iOS 14.8까지의 버전을 위한 Unc0ver

장치를 수정하는 것은 위험을 동반하며, 탈옥은 주의해서 접근해야 합니다.

Jailbreaking Benefits and Risks

탈옥은 OS가 부과한 샌드박스를 제거하여 앱이 전체 파일 시스템에 접근할 수 있도록 합니다. 이 자유는 승인되지 않은 앱을 설치하고 더 많은 API에 접근할 수 있게 합니다. 그러나 일반 사용자에게는 잠재적인 보안 위험과 장치 불안정성으로 인해 탈옥이 권장되지 않습니다.

After Jailbreaking

iOS Basic Testing Operations

Jailbreak Detection

여러 애플리케이션이 모바일이 탈옥되었는지 감지하려고 시도하며, 이 경우 애플리케이션이 실행되지 않습니다.

  • iOS를 탈옥한 후 파일과 폴더가 일반적으로 설치되며, 이를 검색하여 장치가 탈옥되었는지 확인할 수 있습니다.

  • 탈옥된 장치에서는 애플리케이션이 샌드박스 외부의 새 파일에 대한 읽기/쓰기 접근 권한을 얻습니다.

  • 일부 API 호출다르게 동작합니다.

  • OpenSSH 서비스의 존재

  • /bin/sh를 호출하면 0 대신 1을 반환합니다.

탈옥 감지 방법에 대한 더 많은 정보는 여기에서 확인할 수 있습니다.

objection의 ios jailbreak disable을 사용하여 이러한 감지를 피할 수 있습니다.

Jailbreak Detection Bypass

  • objection의 ios jailbreak disable을 사용하여 이러한 감지를 피할 수 있습니다.

  • Liberty Lite (https://ryleyangus.com/repo/) 도구를 설치할 수도 있습니다. 리포가 추가되면 앱이 ‘검색’ 탭에 나타나야 합니다.

References

Support HackTricks

Last updated