[iOS 해킹과 보안 가이드 : iOS 공격 사례와 방어 기술 구매하기]
목차
1장 iOS 보안의 기초
__iOS 하드웨어/디바이스 타입
__앱스토어 보안
__보안 위협
__iOS 보안 구조
____공격 범위 축소
____iOS 기능 축소
____권한 분리
____코드 서명
____데이터 실행 보호(DEP)
____주소 영역 무작위 배치(ASLR)
____샌드박싱
__iOS 공격 기법의 역사
____Libtiff
____SMS로 장난치기
____Ikee 웜
____Storm8
__SpyPhone
__Pwn2Own 2010
__Jailbreakme.com 2(‘Star’)
__Jailbreakme.com 3(‘Saffron’)
__정리
2장 기업 환경의 iOS
__iOS 설정 관리
____모바일 설정 프로파일
____아이폰 설정 유틸리티
______설정 프로파일 생성
______설정 프로파일 설치
______프로파일 업데이트
______프로파일 삭제
______프로파일 프로비저닝
__MDM
____MDM 네트워크 통신
____라이온 서버의 프로파일 매니저
______프로파일 매니저 설정
______설정 만들기
______디바이스 등록
__정리
3장 암호화
__데이터 보호
____데이터 보호 API
__데이터 보호 기능 공격 방법
____사용자 암호 공격
__아이폰 데이터 보호 도구
____도구 설치를 위한 준비 작업
____램디스크 빌드
____램디스크 부팅
____네 자리 암호에 대한 무작위 공격
____키체인 덤프
____데이터 파티션 덤프
____데이터 파티션 복호화
__정리
4장 코드 서명과 메모리 보호
__접근 제어
____AMFI 훅
____AMFI와 exev
__프로비저닝 동작 과정
____프로비저닝 프로파일
____프로비저닝 파일 검증
__애플리케이션 서명 과정
__Entitlement
__코드 서명 동작 과정
____서명 정보 수집과 검증
____프로세스에 대해 코드 서명을 검증하는 과정
____서명된 페이지가 변경되지 않게 iOS에서 보장하는 방법
__동적 코드 서명
____모바일 사파리가 특별한 이유
____커널에서 JIT를 처리하는 과정
____모바일 사파리에서 공격
__코드 서명 무력화
____iOS 셸코드 교체
____iOS에서 메터프리터 사용
____앱스토어 승인받기
__정리
5장 샌드박싱
__샌드박스 기본 구조
__앱을 샌드박스에 적용
__샌드박스 구현 세부 사항
____유저 영역 라이브러리 구현 세부 사항
____커널로 들어가기
____TrustedBSD 정책 구현
____유저 영역에서 설정하는 과정
____정책 적용
____프로파일 바이트코드
__샌드박스가 앱 스토어와 플랫폼 애플리케이션에 미치는 영향
__정리
6장 퍼징
__퍼징의 동작 방식
__퍼징 방법
____변이 기반(단순) 퍼징
____생성 기반(똑똑한) 퍼징
____테스트 케이스 제출과 모니터링
__사파리 퍼징
____인터페이스 선택
____테스트 케이스 작성
____애플리케이션 테스트와 모니터링
__PDF 퍼징
__퀵 룩 퍼징
__시뮬레이터로 퍼징
__모바일 사파리 퍼징
____인터페이스 선택
____테스트 케이스 만들기
____모바일 사파리 퍼징과 모니터링
__PPT 퍼징
__SMS 퍼징
____SMS의 기초
____PDU 모드
____PDUspy 사용
____사용자 데이터 헤더 정보 이용
____연속적인 메시지 조작
____UDH 데이터의 다른 타입 이용
____설리로 생성 기반 퍼징
____iOS에 SMS 삽입
____SMS 모니터링
____SMS 버그
__정리
7장 취약점 공격
__공격 코드 버그의 종류
____객체 생애 취약점
__iOS 시스템 할당기 이해
____영역
____할당
____할당 해제
__iOS 할당기 길들이기
____도구
____Alloc/Dealloc의 기초
______연산 취약점 공격
______객체 생애 관련 취약점 공격
__TCMalloc의 이해
____라지 객체의 할당과 해제
____스몰 객체 할당
____스몰 객체 해제
__TCMalloc 길들이기
____힙 배치를 예측 가능하게 만들기
____힙 조작 코드를 디버깅하기 위한 도구
____TCMalloc으로 연산 취약점 공격: 힙 풍수
____TCMalloc으로 객체 생애 취약점 공격
__ASLR의 저항
__사례 연구: Pwn2Own 2010
__테스트 하부 구조
__정리
8장 ROP
__ARM 기초
____iOS 호출 규약
____시스템 콜 호출 규약
__ROP 입문
____ROP와 힙 버그
____수동으로 ROP 페이로드 만들기
____ROP 페이로드 작성 자동화
__iOS에서 ROP로 할 수 있는 일
____ROP 페이로드 테스트
__iOS의 ROP 셸코드 예제
____파일 내용 빼내기 페이로드
____두 개의 공격 코드를 연결하기 위한 ROP 사용(JailBreakMe v3)
__정리
9장 커널 디버깅과 취약점 공격
__커널 구조
__커널 디버깅
__커널 익스텐션과 IOKit 드라이버
____IOKit 드라이버 객체 트리 재구성하기
____커널 익스텐션에서 취약점 찾기
____IOKit 드라이버의 취약점 찾기
______디바이스 속성을 통해 공격
______외부 트랩과 함수를 통한 공격
__커널 취약점 공격
____임의의 메모리 덮어쓰기
______커널에 취약점 패치
______덮어쓸 대상 선택
______시스템 콜 테이블 찾기
______공격 코드 만들기
____초기화되지 않은 커널 변수
____커널 스택 버퍼 오버플로우
____커널 힙 버퍼 오버플로우
______커널 힙 구역 할당기
______커널 힙 풍수
______커널 힙의 상태 알아내기
______커널 힙 버퍼 오버플로우 공격
__정리
10장 탈옥
__탈옥을 하는 이유
__탈옥의 유형
____탈옥의 지속성
______불완전 탈옥
______완전 탈옥
____공격 코드 유형
______부트롬 레벨
______iBoot 레벨
______사용자 영역 레벨
__탈옥 프로세스의 이해
____부트롬 공격
____램디스크 부팅
____파일 시스템 탈옥
____언테더링 공격 코드 설치
____AFC2 서비스 설치
____기본 유틸리티 설치
____애플리케이션 숨기기
____번들 설치
____설치 후 프로세스
__커널 페이로드와 패치 실행
____커널 상태 되돌리기
____권한 상승
____커널 패치
______security.mac.proc_enforce
______cs_enforcement_disable (kernel)
______cs_enforcement_disable (AMFI)
______PE_i_can_has_debugger
______vm_map_enter
______vm_map_protect
______AMFI 바이너리 트러스트 캐시
______Task_for_pid 0
______샌드박스 패치
______캐시 지우기
__깔끔한 리턴
__정리
11장 베이스밴드 공격
__GSM 기초
__OpenBTS 설정
____필요한 하드웨어
____OpenBTS 설치와 설정
______닫힌 설정과 애스테리스크 다이얼링 규칙
__스택 아래의 RTOS
____Nucleus PLUS
____ThreadX
____REX/OKL4/Iguana
____힙 구현
______Nucleus PLUS의 동적 메모리
______ThreadX의 바이트 풀
______퀄컴 모뎀 힙
__취약점 분석
____베이스밴드 펌웨어 획득과 추출
____IDA Pro에 펌웨어 이미지 로딩
____애플리케이션/베이스밴드 프로세스 인터페이스
____스택 트레이스와 베이스밴드 코어 덤프
____공격 범위
____1999년 같은 바이너리 코드 정적 분석
____명세서를 참고한 퍼징 테스트
__베이스밴드 공격하기
____로컬 스택 버퍼 오버플로우: AT+XAPP
____ultrasn0w 언락
____무선으로 공격 가능한 오버플로우
__정리