hacktricks/mobile-pentesting/ios-pentesting/ios-testing-environment.md

10 KiB

iOS 테스팅 환경

htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅까지 AWS 해킹 배우기!

HackTricks를 지원하는 다른 방법:

Apple 개발자 프로그램

프로비저닝 ID는 Apple 개발자 계정과 관련된 공개 및 개인 키의 모음입니다. 앱에 서명하려면 99달러/년을 지불하여 Apple 개발자 프로그램에 등록하여 프로비저닝 ID를 받아야 합니다. 이를 통해 소스 코드에서 응용 프로그램을 물리적 장치에서 실행할 수 있습니다. 이를 하지 않으면 jailbroken 장치를 사용해야 합니다.

Xcode 7.2부터 Apple은 무료 iOS 개발 프로비저닝 프로필을 생성할 수 있는 옵션을 제공했습니다. 실제 iPhone에서 응용 프로그램을 작성하고 테스트할 수 있습니다. Xcode --> Preferences --> Accounts --> + (새 Appli ID 추가) --> 생성된 Apple ID 클릭 --> Manage Certificates --> + (Apple Development) --> 완료
__그런 다음 iPhone에서 응용 프로그램을 실행하려면 먼저 컴퓨터를 신뢰하도록 iPhone을 지시해야 합니다. 그런 다음 Settings --> General --> Profiles and Device Management --> 신뢰할 수 없는 프로필을 선택하고 "Trust"를 클릭하세요.

동일한 서명 인증서로 서명된 응용 프로그램은 키체인 항목과 같은 리소스를 안전한 방식으로 공유할 수 있습니다.

프로비저닝 프로필은 /Library/MobileDevice/ProvisioningProfiles 폴더에 저장됩니다.

시뮬레이터

{% hint style="info" %} 시뮬레이터는 에뮬레이터와 같지 않습니다. 시뮬레이터는 장치 및 기능의 동작을 시뮬레이트하지만 실제로 사용하지는 않습니다. {% endhint %}

시뮬레이터

시뮬레이터에서 펜테스트를 수행하는 것은 jailbroken 장치에서 하는 것보다 제한적일 수 있습니다.

iOS 앱을 빌드하고 지원하는 데 필요한 모든 도구는 공식적으로 Mac OS에서만 지원됩니다.
iOS 앱을 만들고 디버깅/인스트루먼트를 하는 Apple의 주요 도구는 Xcode입니다. 다른 시뮬레이터 및 다양한 SDK 버전을 다운로드하여 앱을 빌드하고 테스트하는 데 필요합니다.
공식 앱 스토어에서 Xcode를 다운로드하는 것이 매우 권장됩니다. 다른 버전에는 악성 코드가 포함될 수 있습니다.

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

시뮬레이터를 열려면 Xcode를 실행한 다음 Xcode 탭 --> 개발자 도구 열기 --> _시뮬레이터_를 누르세요
__다음 이미지에서 "iPod touch [...]"를 클릭하여 테스트할 다른 장치를 선택할 수 있습니다:

시뮬레이터 내 응용 프로그램

/Users/<username>/Library/Developer/CoreSimulator/Devices 내에서 설치된 시뮬레이터를 모두 찾을 수 있습니다. 에뮬레이터 중 하나에서 생성된 응용 프로그램의 파일에 액세스하려면 어느 에뮬레이터에 설치된 앱인지 알기 어려울 수 있습니다. 올바른 UID를 찾는 빠른 방법은 시뮬레이터에서 앱을 실행하고 다음을 실행하는 것입니다:

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

에뮬레이터

Corellium은 유일하게 공개적으로 이용 가능한 iOS 에뮬레이터입니다. 이는 사용자 당 라이선스 모델을 채택한 엔터프라이즈 SaaS 솔루션이며 무료 평가 라이선스를 제공하지 않습니다.

Jailbreaking

애플은 iPhone에서 실행되는 코드가 반드시 애플이 발급한 인증서로 서명되어야 한다고 엄격히 요구합니다. Jailbreaking은 이러한 제한 및 운영 체제에서 시행되는 다른 보안 제어를 우회하는 과정입니다. 그러므로 기기가 jailbroken되면 설치된 앱을 확인하는 무결성 검사가 패치되어 우회됩니다.

{% hint style="info" %} 안드로이드와 달리 iOS에서는 장치에서 "개발자 모드"로 전환할 수 없습니다. {% endhint %}

안드로이드 루팅 vs. iOS Jailbreaking

자주 비교되지만, 안드로이드에서의 루팅과 iOS에서의 Jailbreaking은 근본적으로 다른 프로세스입니다. 안드로이드 장치의 루팅은 su 바이너리 설치 또는 루팅된 사용자 정의 ROM으로 시스템 교체를 포함할 수 있으며, 부트로더가 잠겨 있지 않으면 필요에 따라 exploits이 필요하지 않을 수 있습니다. 사용자 정의 ROM 플래싱은 부트로더를 잠금 해제한 후 장치의 운영 체제를 교체하며 때로는 exploits이 필요할 수 있습니다.

반면, iOS 장치는 부트로더가 애플이 서명한 이미지만 부팅할 수 있도록 제한되어 있어 사용자 정의 ROM을 플래싱할 수 없습니다. iOS Jailbreaking은 애플의 코드 서명 보호를 우회하여 서명되지 않은 코드를 실행하는 것을 목표로 하며, 애플의 지속적인 보안 강화로 인해 이 과정이 복잡해집니다.

Jailbreaking의 어려움

애플이 취약점을 빠르게 패치하기 때문에 iOS Jailbreaking은 점점 어려워지고 있습니다. iOS 다운그레이드는 출시 후 일정 기간 동안만 가능하며, Jailbreaking은 시간적으로 민감한 문제입니다. 보안 테스트용으로 사용되는 장치는 재-Jailbreaking이 보장될 때까지 업데이트해서는 안 됩니다.

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

Jailbreak 종류

  • Tethered jailbreaks는 각 재부팅마다 컴퓨터 연결이 필요합니다.
  • Semi-tethered jailbreaks는 컴퓨터 없이 비-Jailbroken 모드로 부팅할 수 있습니다.
  • Semi-untethered jailbreaks는 컴퓨터가 필요하지 않은 수동 재-Jailbreaking이 필요합니다.
  • Untethered jailbreaks는 재적용이 필요 없는 영구적인 Jailbreak 솔루션을 제공합니다.

Jailbreaking 도구 및 리소스

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

  • Checkra1n: A7-A11 칩 장치용.
  • Palera1n: Checkm8 장치 (A8-A11)용 iOS 15.0-16.5.
  • Unc0ver: iOS 14.8까지의 버전용.

장치 수정에는 위험이 따르며, Jailbreaking은 신중하게 접근해야 합니다.

Jailbreaking의 이점과 위험

Jailbreaking은 OS가 부과한 샌드박싱을 제거하여 앱이 전체 파일 시스템에 액세스할 수 있게 합니다. 이 자유는 비승인 앱을 설치하고 더 많은 API에 액세스할 수 있게 합니다. 그러나 일반 사용자에게는 잠재적인 보안 위험과 장치의 불안정성 때문에 Jailbreaking이 권장되지 않습니다.

Jailbreaking 후

{% content-ref url="basic-ios-testing-operations.md" %} basic-ios-testing-operations.md {% endcontent-ref %}

Jailbreak 탐지

몇몇 애플리케이션은 모바일이 jailbroken되었는지 감지하려고 시도하며, 그 경우 애플리케이션이 실행되지 않을 수 있습니다

  • iOS를 jailbreak한 후 일반적으로 파일 및 폴더가 설치되며, 이를 통해 장치가 jailbroken되었는지 확인할 수 있습니다.
  • Jailbroken 장치에서 애플리케이션은 샌드박스 외부의 새 파일에 읽기/쓰기 액세스를 얻습니다.
  • 일부 API 호출다르게 작동할 수 있습니다.
  • OpenSSH 서비스의 존재
  • /bin/sh를 호출하면 0 대신 1이 반환됩니다.

Jailbreaking 탐지 방법에 대한 자세한 정보여기에서 확인할 수 있습니다.

이러한 탐지를 objectionios jailbreak disable를 사용하여 피할 수 있습니다.

Jailbreak 탐지 우회

  • 이러한 탐지를 objectionios jailbreak disable를 사용하여 피할 수 있습니다.
  • 또한 도구 Liberty Lite (https://ryleyangus.com/repo/)를 설치할 수 있습니다. 리포지토리를 추가한 후, 앱은 '검색' 탭에 나타날 것입니다.

참고 자료