책 소개
요약
iOS의 탈옥을 두고 해커와 애플은 끊임없이 공격과 방어를 반복하고 있다. 이 책은 과거의 유명한 탈옥툴인 Evasi0n에서부터 현재 사용되는 Pangu와 iOS 11 버전 탈옥까지, 여러 유형의 탈옥 기법을 상세하게 분석한 연대기와 같다. 애플 운영체제를 해킹으로부터 보호하기 위한 코드 서명, AMFI, 샌드박스 등의 보안 메커니즘을 심도 있게 다루며, macOS High Sierra(10.13)와 iOS Bursa(11.1.2) 이후 업데이트를 포함해 최신 macOS Mojave(10.14) 와 iOS Peace(12.0)의 업데이트까지 반영했다.
이 책에서 다루는 내용
■ 인증, 인가 및(macOS) 감사
■ 코드 서명
■ 소프트웨어 제한(macOS) - 게이트키퍼, 정책 및 관리를 적용한 클라이언트
■ AppleMobileFileIntegrity
■ 샌드박스
■ 시스템 무결성 보호(SIP)
■ 개인 정보 및 데이터 보호
추천의 글
그동안 iOS 보안과 관련된 연구 자료들은 다른 플랫폼에 비해 구하기 어려웠다. 그러다 보니 관련 연구에 입문하기도 쉽지 않았다. 이 책은 이러한 미지의 영역을 들여다본다. 먼저 코드 서명, 샌드박스, KPP 같은 iOS/macOS의 보안 메커니즘들과 AppleMobileFileIntegrity와 같이 공식적으로 문서화되지는 않았지만 중요한 역할을 하는 보안 메커니즘을 살펴본다. 그 후 천천히 탈옥 도구들을 해부한다. 2013년에 등장한 Evasi0n(iOS 6)부터 2017년 이안 비어의 async_wake(iOS 11)에 이르기까지 탈옥이 어떻게 발전해왔는지 분석한다.
탈옥이 iOS의 여러 보안 메커니즘을 우회하기 위해서는 여러 취약점이 필요하다. 하지만 무조건 특정 단계를 따라야 하는 것은 아니며, iOS는 다양한 공격 벡터들을 갖고 있기 때문에 다양한 방법을 통해 탈옥할 수 있다. 이 책에서는 탈옥 개발자들이 어떤 영리한 방법으로 탈옥을 성취하는지 상세히 분석한다. 탈옥 도구들의 내부가 얼마나 복잡하고 정교한지, 어떤 취약점들로 커널을 공격하고 TrustZone의 커널 보호를 우회하는지, 그 취약점들이 나중에 어떻게 수정되는지 또 어떻게 잘못 수정되는지에 대해 설명한다. 이 책은 전체적으로 보안 메커니즘들과 그 메커니즘들이 어떻게 우회돼왔는지에 대해 자세히 알아봄으로써 연구에 필요한 많은 인사이트를 제공한다.
이정훈(@lokihardt)
이 책의 대상 독자
현재 *OS Internals의 3부작 중 일부지만, 독립적인 내용인 동시에 보안 중심으로 구성돼 있다. 따라서 보안과 관련된 내용을 원하는 독자에게 유용할 것이다.
1부는 macOS 관리자와 고급 사용자는 물론, 보안 연구자와 보안 감사인에게 적합하다. 내부 API를 문서화한 부분은 퍼징(fuzzing) 또는 (애플이 승인하지 않는) 해당 서브 시스템과 인터페이스하길 원하는 프로그래머가 기본적인 내용을 학습할 때 유용할 것이다.
2부는 저수준 분야와 기술적인 부분을 다루기 때문에 나이가 어린 독자, 심약자 또는 인텔 및/또는 ARM64 어셈블리에 심한 거부감이 있는 독자에게 부적합할 수 있다. 그러나 역공학을 선호하며, 해커지향적인 독자는 원하는 내용을 찾을 수 있을 것이다. 익스플로잇과 탈옥의 작동 방법에 대한 자세한 설명과 디버거 시퀀스를 이용한 단계별 상세 지시문 그리고 다수의 디스어셈블리를 제공한다.
이 책의 구성
1부는 macOS에서 시스템 보안 서비스를 제공하거나 시스템을 잠그기 위해 애플에서 사용하는 보안 메커니즘과 기술을 중점적으로 다룬다. 이들 대부분은 현재 모든 플랫폼에서 공통적으로 사용되고 있다(특히, 10.11). 하지만 OS는 여전히 애플이 가장 많이 투자하는 분야다.
1장에서는 기본적으로 macOS 함수인 인증을 다루며 시작한다. 오래 전부터 사용해온 master.passwd 파일을 다루지만, PAM(Pluggable Authentication Module)과 오픈 디렉터리(Open Directory)의 macOS 구현 그리고 NIS 및 마이크로소프트의 액티브 디렉터리와 같은 외부 도메인과의 통합을 중점적으로 다룬다.
2장에서는 사용자 또는 프로세스가 승인하거나 시도한 작업을 추적하고 자세한 로그 추적을 제공하는 감사에 대해 설명한다. macOS에서의 감사는 솔라리스(Solaris)에서 차용한 기능이며, 실제로는 기본적으로 사용하고 있지만 비교적 알려지지는 않았다. 감사를 통해 클라이언트(일반적으로 관리자 또는 모니터링 소프트웨어)는 모든 시스템 측면에서 크거나 작은 사용자 또는 커널에 대해 전례 없는 수준의 모니터링을 제공한다.
3장에서는 사용자 또는 프로세스(1장에서 인증)가 작업을 허용 또는 거부하는 권한 부여를 탐색해 AAA 삼위일체를 완성한다. 그리고 (커널 확장 기능에 대한 비공식적 지원으로 *OS에서는 실제로 사용할 수 없지만) KAuth**로 알려진 커널 프로그래밍 인터페이스(KPI, Kernel Programming Interface)를 다룬다.
4장에서는 권한 부여와 커널에 대해 자세히 다루며, TrustedBSD에서 차용한 강제적 접근 통제 프레임워크(MACF, Mandatory Access Control Framework)를 자세히 다룬다. MACF는 감사보다 훨씬 강력한 기능을 갖췄다. 감사는 어떠한 사실이 발생한 이후에 알림을 제공하지만, MACF는 실제로 작업에 개입해 허용, 거부, 수정할 수 있다. MACF는 기본적으로 *OS에서 모든 애플 보안의 기반을 제공해준다. 유감스럽지만 애플이 개인 KPI로 간주하는 KAuth를 능가하는 가장 강력한 인증 메커니즘이다.
5장에서는 코드 서명(macOS의 가장 직접적인 애플리케이션)에 대해 논의한다. MACF는 애플이 iOS 초창기부터 *OS를 적용 중이며, macOS에서도 매우 최근에 적용되기 시작했다. 애플의 OS가 코드 서명을 사용하는 유일한 운영체제는 아니지만, 구현 방식은 훨씬 더 발전됐다. 또한 코드 서명은 애플리케이션 수준 보안의 기초가 되는 인타이틀먼트와 함께 사용하고 있다.
6장에서는 macOS에서 특별히 사용하는 기능인 소프트웨어 제한 메커니즘에 대해 논의한다. macOS 게이트키퍼(GateKeeper)부터 macOS 대상 멀웨어(malware) 퇴치를 위해 애플이 10.7.5에서 도입했다. 게이트키퍼는 authd 및 syspolicyd와 같은 다수의 데몬과 격리 저장소(Quarantine)라는 특수 커널 확장 기능과 상호 운용된다. 그런 다음, 기업 환경과 자녀 보호(Parental Controls)에서 사용하는 macOS의 “관리 중인 클라이언트 확장 기능(Managed Client Extensions)”을 주제로 다룬다.
7장에서는 AppleMobileFileIntegrity 또는 AMFI에 대해 설명한다. 이름에 “모바일(mobile)”이 있지만, AMFI는 iOS 코드 서명 집행자로 시작해 macOS 10.10부터 사용됐으며, 10.11에서는 “시스템 무결성 보호(System Integrity Protection)”로 더 큰 역할을 하고 있다. iOS와 macOS의 구현 방법을 MACF 정책, MIG 메시지 및 IOUserClient의 역공학을 통해 심층적으로 탐구한다.
8장에서는 애플 샌드박스와 애플이 처음으로 OS 10.5에서 사용하기 시작한 “안전벨트(SeatBelt)”라는 이름의 MACF의 애플리케이션에 대해 다룬다. 이후로 조금 단순하지만 사전 동의 opt-in 구현은 매우 발전해, iOS에서 강력한 감옥(jail)의 역할을 하고 있다. 샌드박스 적용에 대해 macOS의 “앱 샌드박스(AppSandbox)”를 통한 기초에서부터 강화된 iOS 구현에 이르기까지 설명한다. 프로필, 컨테이너 및 기타 빌딩 블록에 대한 자세한 내용은 macOS 10.11의 SIP와 iOS 10 플랫폼 프로필을 논의하기 위한 기반을 마련할 것이다.
9장은 macOS의 SIP에 대해 논의한다: 기초(AMFI와 샌드박스)에 대한 설명은 SIP는 단지 시스템 차원의 정책 정의일 뿐이다. iOS 9.x에는 없지만 SIP가 *OS에서도 등장하는 것은 시간 문제일 뿐이며, iOS 10의 플랫폼 정책은 이미 매우 강화됐다.
10장에서는 개인 정보 보호에 대해 다루는데, 이는 TCCd라는 작고 문서화되지 않은 데몬에 의해 처리된다. 데몬은 특정 앱이 어떤 스토어에 접근하는지 정의하고, 개인 TCC.framework로 래핑된 XPC API를 제공하는 데이터베이스에 상주한다. 많은 소프트웨어 공급 업체가 소프트웨어를 설치한 장치를 식별하기 위해 수집을 시도하는 고유 식별자(특히, iOS의 경우)에 대한 추가 고려 사항을 다룬다.
11장은 데이터 보호에 중점을 두고 있으며, 구현 방식은 macOS와 나머지 OS에서 다르다. macOS 솔루션은 FileVault2를 통해 이뤄지며, CoreStorage와 함께 10.7에서 소개됐다. *OS 솔루션은 하드웨어 기반 키와 파일당 암호화 함수를 통해 암호화를 강화했다. CoreStorage는 애플의 새로운 파일 시스템인 APFS의 기능으로 대체됐다. 이 책은 1.4 버전쯤 돼서야 자리 잡았지만(이 번역서는 1.5.3 기준으로 했다), 이전 버전의 CoreStorage에 대한 논의를 제외하기로 결정했다. APFS의 상세한 분석은 2권에서 다룬다.
2부는 1부의 애플 엔지니어들이 최선의 계획을 기반으로 제작한 정교한 구조들이 예상과 다르게 작동한 방식에 대해 알아본다. 각 장에서는 macOS에서 악성 코드를 유발한 과거의 취약점 또는 iOS 탈옥에 대해 알아본다.
macOS의 취약점에 대해, 특히 10.10(각 부의 버전에서 중대한 변화를 갖는다)과 10.11을 괴롭혔던 몇 가지 취약점을 강조하고자 한다. iOS 취약점에 따른 탈옥을 시간 순서로 보여주기로 결정했다. 이러한 취약점과 해당 취약점의 익스플로잇를 보여주는 데 탈옥보다 더 좋은 것은 없다. 각 탈옥은 iOS(와 파생된 운영체제)를 족쇄에서 해방시킬 수 있도록 올바른 방식으로 여러 취약점의 익스플로잇을 활용한 정교하게 만들어진 모음집과 같다.
어떤 면에서 2부는 일종의 작은 “해커 핸드북”으로 생각할 수 있다. 그러나 이 책에서 제공하는 세부 수준과 깊이는 이전의 역공학 책과 보안 책보다 훨씬 자세하며 전례 없는 수준이다. 탈옥을 성공시킨 천재 중 몇 명을 개인적으로 알았지만, 그럼에도 간단하게 해결하고 싶은 충동에 저항하며, 연구자처럼 바이너리만으로 탈옥의 역공학을 수행했다. 이 과정에서 저자가 제작한 툴을 사용했으며, 이 책의 관련 웹 사이트에서 사용할 수 있다.
마지막으로, 부록에는 macOS 보안 강화 가이드가 포함돼 있다. 처음에는 그다지 좋지 않을 것이라 생각했지만, 세바스티안 볼프(Sebastien Volpe)의 질문을 통해 생각이 바뀌었다. macOS의 다양한 보안 기능에 대해 자세히 설명하고 취약점을 소개한, 이 책의 ‘비공식 요약본’이라 생각한다.
상세 이미지
목차
목차
- 1부. 방어 기술 및 기법
- 1장. 인증
- 패스워드 파일들(*OS)
- setuid와 setgid(macOS)
- Pluggable Authentication Module(macOS)
- opendirectoryd(macOS)
- LocalAuthentication 프레임워크
- Apple ID
- 외부 계정
- 참고 자료
- 2장. 감사
- 설계
- 감사 세션
- 구현.
- 시스템 호출 인터페이스
- OpenBSM API
- 감사 고려 사항
- 참고 자료
- 3장. 권한 부여
- 설계
- 구현
- KAuth 인증 정보
- KAuth 신원 확인 서비스(macOS)
- KAuth 디버깅
- 참고 자료
- 4장. 강제적 접근 제어 프레임워크
- 배경
- MACF 정책
- MACF 설정하기
- MACF 콜아웃
- MACF 시스템 호출
- 최종 노트
- 참고 자료
- 5장. 코드 서명
- 코드 서명 포맷
- 코드 서명 요구 사항
- 인타이틀먼트
- 코드 서명 적용
- 코드 서명 API
- 참고 자료
- 6장 소프트웨어 제한(macOS)
- 권한 부여
- authd
- 게이트키퍼(macOS)
- libquarantine
- Quarantine.kext
- 격리 저장소의 실제
- syspolicyd
- 앱 위치 변경
- 관리 중인 클라이언트(macOS)
- 참고 자료
- 7장. AppleMobileFileIntegrity
- AppleMobileFileIntegrity.kext
- MACF 정책
- amfid
- 프로비저닝 프로파일
- AMFI 신뢰 캐시
- AMFI User Client
- 최종 노트
- 참고 자료
- 8장. 샌드박스
- 샌드박스의 진화
- 앱 샌드박스(macOS)
- 모바일 컨테이너(*OS)
- 샌드박스 프로파일
- 사용자 모드 API
- mac_syscall
- Sandbox.kext
- 프로파일 평가
- sandboxd(macOS)
- 참고 자료
- 9장. 시스템 무결성 보호(macOS)
- 설계
- 구현
- API
- 참고 자료
- 10장. 개인 정보 보호
- 투명성, 동의 및 제어
- 고유 장치 식별자
- 차등 개인 정보 보호(macOS 12/iOS 10)
- 참고 자료
- 11장. 데이터 보호
- 볼륨 레벨 암호화(macOS)
- 파일 수준 암호화(*OS)
- mobile_obliterator
- KeyBags
- AppleKeyStore.kext
- 키체인
- 최종 참고 사항
- 참고 자료
- 2부. 취약점과 익스플로잇 작업
- 12장. macOS 취약점
- 10.1: ntpd 원격 루트(CVE-2014-9295)
- 10.2: 루트 파이프 권한 상승(CVE-2015-1130)
- 10.3: Kextd 레이스(CVE-2015-3708)
- 10.4: DYLDPRINTTO_FILE 권한 상승(CVE-2015-3760)
- 10.5: DYLDROOTPATH 권한 상승
- 11.0: tpwn 권한 상승 및/또는 SIP 무력화
- 11.3 “Mach Race” 로컬 권한 상승(CVE-2016-1757)
- 11.4: LokiHardt의 trifecta(CVE-2016-1796, 1797, 1806)
- 최종 노트
- 참고 자료
- 13장. 탈옥
- 미신 타파
- 탈옥 과정
- 커널 패치
- 커널 패치 보호
- iOS 탈옥의 진화
- 참고 자료
- 14장. Evasi0n
- 로더
- 언테더
- 커널 모드 익스플로잇
- 애플 버그 수정
- 참고 자료
- 15장. Evasi0n 7
- 로더
- 언테더
- 커널 모드 익스플로잇
- 애플 버그 수정
- 참고 자료
- 16장. Pangu 7
- 로더
- 탈옥 페이로드
- 언테더
- 커널 모드 익스플로잇
- 애플 버그 수정
- 참고 자료
- 17장. Pangu 8
- 로더
- 사용자 모드 익스플로잇
- 언테더
- 애플 버그 수정
- 참고 자료
- 18장. TaiG
- 로더
- 언테더
- 커널 모드 익스플로잇
- 애플 버그 수정
- 참고 자료
- 19장. TaiG 2
- 코드 서명 우회
- 언테더
- 커널 익스플로잇
- 애플 버그 수정
- 참고 자료
- 20장. Pangu 9
- 로더
- 탈옥 페이로드
- 커널 모드 익스플로잇
- 코드 서명 우회
- 언테더
- Pangu 9.1
- 애플 버그 수정
- 참고 자료
- 21장. Pangu 9.3
- 커널 익스플로잇
- 애플 버그 수정
- 22장. 페가수스
- 익스플로잇 흐름
- 커널 메모리 읽기 및 KASLR 우회
- 임의의 커널 메모리 쓰기
- 지속성
- 애플 버그 수정
- 참고 자료
- 22 1/2장. 피닉스
- 정보 유출
- 영역 다듬기
- machportsregister
- 조립 - 피닉스 부활!
- 애플 버그 수정
- 참고 자료
- 23장. mach_portal
- 익스플로잇 흐름
- Mach 포트 이름 urefs 처리
- powerd 충돌
- XNU UAF의 setdpcontrol_port
- 보호 기능 비활성화
- 애플 버그 수정
- 참고 자료
- 24장. Yalu(10.0~10.2)
- KPP 우회
- 익스플로잇 이후의 작업
- 10.2: 치명적인 함정과 재앙의 레시피
- 최종 노트
- 참고 자료
- 25장. async_wake & QiLin 툴킷(11.0~11.1.2)
- KASLR 우회
- 커널 메모리 손상
- 익스플로잇 이후의 작업: 탈옥 툴킷
- 참고 자료
- 에필로그: 앞으로의 예측
- 부록 A. macOS 보안성 강화 가이드
- 반복해 패치하기
- 로깅 및 감사
- 사용자 수준 보안
- 데이터 보호
- 물리적 보안
- 애플리케이션 수준 보안
- 서드파티/오픈소스 툴 사용
- 네트워크 보안
- 편집증을 가진 사람들을 위해
- 부록 B. Darwin 18 변경 사항
- 강제적 접근 제어 프레임워크
- 코드 서명
- 게이트키퍼(macOS)
- AMFI
- 샌드박스
- 프라이버시
- APFS 스냅샷 마운트(iOS 11.3)
- 하드웨어 변경 사항(A12와 이후의 프로세서)
- 부록 C. 용어 사전