본문 바로가기
트렌드 이슈 · 토픽

아이폰의 「탈옥」은 어떻게 행해지는가?

by 두우우부 2023. 10. 5.
반응형

 
 
iPhone의 시스템 관리자 권한을 취득하는 「탈옥」이라는 행위, 이것은 일부 소프트웨어 애호가들 사이에서 활발하게 이루어지고 있으며, App Store 이외에서 앱을 입수하거나 시스템 동작을 개선하거나 할 수 있는 반면, 보안 리스크 등이 높아져 버리는 특징이 있습니다. 이 「탈옥」이 어떠한 구조인지를, 소프트웨어 개발자인 필립 텐 씨가 해설하고 있습니다.

Exploiting the iPhone 4, Part 1: Gaining Entry | Phillip Tennen
https://axleos.com/exploiting-the-iphone-4-part-1-gaining-entry/

Exploiting the iPhone 4, Part 1: Gaining Entry

Note This series was discussed further on Hacker News. Introduction Years ago, I was active in the iOS tweak development scene. I made many products and tools, distributed on Cydia, that modified iOS system behavior and added new functionality to SpringBoa

axleos.com



탈옥은 앱이나 시스템에 다양한 변경을 가할 수 있지만, 실패하면 다시 시작할 수 없게 되는 리스크나, 한번 탈옥을 실행하면 정품 보증을 받을 수 없게 된다는 단점이 있습니다.



탈옥의 첫걸음은 먼저 장치를 얻는 것에서부터 시작됩니다. 텐씨는 이번에 아이폰4를 사용했습니다.



탈옥에는 여러 가지 방법이 있습니다. 텐 씨는 당초 애플의 공식 개발 환경 「Xcode」를 사용하려 했습니다만, Xcode의 최신 버전에서는 iPhone 4에 탑재된 낡은 iOS를 지원히지 않아, 결국 부트 ROM의 취약성을 공략하는 방법을 선택했습니다.



부트 ROM 취약점은 일반적으로 USB를 통해 장치와 상호 작용하는 호스트 시스템에 일부 코드를 작성하여 악용할 수 있습니다. iPhone 4에는 공개적으로 알려진 취약점을 뚫는 익스플로잇 limera1n이 있으며, 텐 씨는 이를 이용하기로 했습니다.

부팅 ROM은 Apple 용어에서 SecureROM이라고 합니다. SecureROM은 iOS 부트 프로세스의 첫 번째 단계이며, 부트 프로세스의 다음 부분을 부트 스트랩합니다. SecureROM은 다음에 로드하는 것이 모두 신뢰할 수 있는 것, 즉 Apple이 출하하고 서명한 정확한 이미지만 실행하도록 보장하는 역할을 합니다.

SecureROM은 상황에 따라 두 가지 구성 요소 중 하나를 로드합니다. 장치가 파일 시스템에서 "일반"부팅을 수행하는 경우 SecureROM은 NOR의 디스크 파티션에서 LLB (Low Level Bootloader)라는 구성 요소를 부팅합니다. 또는 장치가 DFU(장치 펌웨어 업데이트) 모드로 USB를 통해 컴퓨터에 연결되어 있는 경우 iBSS(iBoot Single Stage) 부트 로더를 전송하여 iPhone 복원 프로세스를 시작할 수 있습니다.

SecureROM이 LLB 또는 iBSS가 신뢰할 수 있는 것인지 확인하려면 LLB와 iBSS도 마찬가지로 다음에 로드하는 것이 신뢰할 수 있는 것인지 확인해야 합니다. 각 단계의 흐름은 대략 아래와 같습니다. 각 단계는 신뢰할 수 있는 것만 로드하므로 최종 사용자 코드는 항상 신뢰할 수 있어야 합니다.


각 단계에서 크게 다른 특징 중 하나가 SecureROM은 내재적으로 신뢰된다는 것입니다. 다른 모든 단계는 iOS 업데이트를 통하여 취약점을 해결할 수 있지만 SecureROM은 장치 제조 시 읽기 전용 메모리에 새겨져 있으며, 특정 SecureROM 버전에서 제조된 장치에서 발견된 취약점은 영구적으로 수정되지 않습니다. 텐 씨가 공략하는 것이 바로 이 취약점입니다.

iPhone 4에 탑재된 SoC 「A4」의 취약성을 공략하는 것이 전술한 limera1n입니다. limera1n은 DFU 모드에서 컴퓨터에 연결할 때 악용 가능한 익스플로잇으로, 텐 씨는 이를 사용하기 위해 Bootrom-Dumper라는 프로젝트를 활용했습니다. Bootrom-Dumper는 limera1n 실행 방법과, 페이로드에 어떤 코드를 포함할 수 있는지 USB를 통해 장치에서 메모리를 읽는 방법에 대해 텐 씨에게 지식을 주었습니다.



USB를 통해 iOS 장치에 데이터를 쓸 수 있을 뿐만 아니라 장치가 읽기 요청에 응답한다는 것을 알고 텐 씨는 놀랐습니다. 텐 씨가 이해한 바에 따르면, A4의 MMU는 SRAM의 베이스 0x84000000에 매핑해, DFU 디바이스와 통신하는 호스트는 리퀘스트 타입이 0x21, 리퀘스트 ID가 1의 USB 컨트롤 패킷을 송신하는 것으로 iBSS 이미지를 분할해 송신할 수 있다는 것입니다. 또한, 제어 패킷에서 전송된 데이터는 0x84000000에서 SRAM으로 복사되고 호스트가 더 많은 패킷을 전송함에 따라 더 높은 주소로 시프트 하여 SecureROM은 다음 패킷이 어디에 복사되어야 하는지를 추적하는 몇몇 내부 카운터를 보유하고 있어 이러한 카운터를 클리어할 수 있다는 것입니다.

이 아이디어에 따라 호스트가 요청 유형 0xA1, 요청 ID가 2인 제어 패킷을 보내면 장치도 응답합니다. 장치는 0x84000000의 메모리 내용을 읽고 호스트로 보냅니다. 장치에서 코드를 실행할 수 있는 능력이 있고 원하는 것을 0x84000000으로 복사할 수 있는 경우 이 시스템을 활용할 수 있습니다.



텐씨가 Bootrom-Dumper를 베이스로, 자신의 limera1n를 사용, SecureROM을 덤프해 보았더니 목적을 달성하고 iPhone 4로 코드를 실행할 수 있게 되었다고 합니다.



그 후, 텐씨는 iPhone 4용의 탈옥 환경 「gala」를 구축했습니다. gala의 리포지토리는 GitHub에 게시되어 있습니다.

GitHub - codyd51/gala: A4 / iOS 4 jailbreak
https://github.com/codyd51/gala

GitHub - codyd51/gala: A4 / iOS 4 jailbreak

A4 / iOS 4 jailbreak. Contribute to codyd51/gala development by creating an account on GitHub.

github.com

반응형