iOS Application Security [보안담당자와 개발자를 위한 최고의 안내서]
- 원서명iOS Application Security: The Definitive Guide for Hackers and Developers (ISBN 9781593276010)
- 지은이데이비드 틸(David Thiel)
- 옮긴이이진호, 이상식
- ISBN : 9788960779709
- 30,000원
- 2017년 04월 20일 펴냄 (절판)
- 페이퍼백 | 380쪽 | 188*235mm
- 시리즈 : 해킹과 보안
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
2018년 대한민국학술원 우수학술도서 선정도서
요약
악의적인 공격자로부터 사용자를 보호하기 위해 iOS 애플리케이션의 보안상의 취약점을 제거하는 것은 개발자와 보안담당자 모두에게 중요하다. 이 책은 잘못된 코딩으로 발생할 수 있는 보안 취약점을 짚어주고, 이를 해결하는 방법을 다룬다. 또한, iOS 애플리케이션 구조와 오브젝티브 C 디자인 패턴을 빠르게 학습한 후, 잘못된 코드를 발견하고 보안상의 취약점을 바로잡는 방법과 iOS 애플리케이션의 블랙박스 테스팅 수행 방법에 대해 상세하게 알아본다.
이 책에서 다루는 내용
■ iOS 보안 모델과 내장된 보호의 한계
■ 페이스트보드(pasteboard)와 같은 민감한 데이터가 누출되는 다양한 방식
■ 키체인(Keychain), 데이터 보호 API, CommonCrypto를 활용한 암호화 구현 방법
■ 현재 iOS 애플리케이션에서도 여전히 문제를 일으킬 수 있는 C 언어의 기존 결함
■ 사용자 데이터 수집 방법 및 잠재적인 보안 위험 완화 방법과 관련된 개인정보 보호 문제
이 책의 대상 독자
이 책은 보안을 다룬다. 만약, iOS 애플리케이션이 사용자 보호에 실패해(부차적으로 이 글을 읽고 있는 독자 혹은 클라이언트가 이러한 보안 취약점에 대한 패치를 요구할) 일반적인 해결 방법에 대한 가이드를 찾는 개발자 혹은 보안 전문가라면, 올바른 선택을 한 것이다.
적지만 iOS 개발에 대해 경험이 있거나 iOS 애플리케이션이 동작 방식에 대해서 어느 정도 지식이 있다면, 이 책을 최대한 활용할 수 있을 것이다. 하지만 사전 지식이 없더라도, 경험이 있는 프로그래머나 필요할 애플의 문서를 깊게 연구하는 데 두려움이 없는 침투 테스터 또한 이 책이 도움이 될 것이다. 오브젝트 C와 가장 흔하게 사용되는 API, Cocoa Touch에 대해서 정신 없이 빠르게 진행되는 가이드를 2장에서 제공하기 때문에, 만약 높은 수준의 기본기가 필요하거나 언어에 대한 기억을 되살리고 싶다면 2장에서부터 시작하자.
이 책의 구성
1부, ‘iOS 기초’에서는 iOS의 배경지식에 대해 탐구하고, iOS 보안 역사와 기본적인 애플리케이션 구조에 대해서 배울 것이다.
1장, ‘iOS 보안 모델’에서는 플랫폼의 기본적인 보안 방어 개념과 플랫폼에서 제공하거나 제공할 수 없는 기능에 대한 내용을 간략하게 iOS 보안 모델로 진단한다.
2장, ‘게으른 사람들을 위한 오브젝티브 C’에서는 다른 프로그래밍 언어와 다른 점에 대해 설명하고, 용어와 관련된 개요와 디자인 패턴에 대해서 알아본다. 경험이 많은 오브젝티브 C 프로그래머에게는 새로운 정보가 없겠지만, 초심자와 iOS를 사용해본 경험이 적은 사용자에게는 유용할 것이다.
3장, ‘iOS 애플리케이션 구조’에서는 iOS 애플리케이션이 어떻게 구성돼 있는지 개요를 소개하고, 번들(bundle) 작업의 진행 과정과 민감한 정보가 유출될 수 있는 로컬 저장소 메커니즘을 살펴본다.
2부, ‘보안 테스팅’에서는 개발은 물론 침투 테스트를 수행할 때 사용할 보안 테스팅 환경을 구축하는 방법에 대해 알아본다. 사용 가능한 보안 메커니즘의 대부분을 사용하기 위해서 Xcode 프로젝트를 설정하기 위한 몇 가지 팁을 공유한다.
4장, ‘테스팅 플랫폼 만들기’에서는 테스트를 시작하기 위해 필요한 도구 정보와 iOS 애플리케이션 테스트와 감사를 도와줄 설정에 대해 알아본다. 이 장에서는 시뮬레이터의 사용 방법, 프록시 설정, TLS 검증 우회, 애플리케이션 작동 방식을 살펴본다.
5장, ‘lldb를 이용한 디버깅’에서는 애플리케이션 작동 방식을 모니터하고 lldb와 다른 Xcode의 내장된 도구를 사용하기 편하게 설정한다. 코드에서 조금 더 복잡한 문제를 분석하는 것을 도와줄 뿐만이 아니라, 오류 주입공격(fault injection)과 같은 작업을 하기 위한 테스트 장비 설정도 알아본다.
6장, ‘블랙박스 테스팅’에서는 소스 코드를 구할 수 없는 애플리케이션을 성공적으로 분석하기 위해 필요한 도구와 기법에 대해서 자세히 알아본다. 기본적인 역공학(reverse engineering), 바이너리 조작, 프로그램의 복제, 원격의 lldb 인스턴스를 사용한 디바이스의 디버깅을 살펴본다.
3부, ‘Cocoa API의 보안 단점’에서는 Cocoa Touch API에서 마주치는 뜻밖의 보안 위험에 대해서 알아본다.
7장, ‘iOS 네트워킹’에서는 네트워킹 방법과 인증 정보, 인증서 고정, TLS 접속 처리 과정에서의 실수를 포함한 iOS에서 전송계층(Transport Layer) 보안 작업에 대해 설명한다.
8장, ‘프로세스 간 통신’에서는 URL 스키마URL shceme와 새로운 유니버설 링크(Universal Link) 메커니즘을 포함한 프로세스 간 커뮤니케이션을 다룬다.
9장, ‘iOS 대상 웹 앱’에서는 웹 뷰 혹은 코르도바(Cordova)와 같은 자바스크립트/Cocoa 연결을 사용하는 iOS 네이티브 앱을 사용해서 웹 애플리케이션이 통합되는 방법을 살펴본다.
10장, ‘데이터 유출’에서는 민감한 데이터가 의도치 않게 로컬 저장소, 다른 애플리케이션, 네트워크를 통해 유출되는 다양한 방식에 대해 논의한다.
11장, ‘C 언어에 기반한 오래된 문제들’에서는 스택과 힙 조작과 포맷 스트링 취약점, 메모리 해지 후 사용(use-after-free), 오브젝티브 C에서 변형된 형태로 나타난 이전의 취약점 등 iOS 애플리케이션에서 남아 있는 C 취약점을 알아본다.
12장, ‘인젝션 공격’에서는 SQL 인젝션, 크로스 사이트 스크립팅, XML 인젝션, 조건명제(predicate) 인젝션과 같은 iOS 애플리케이션과 관련된 공격을 설명한다.
4부, ‘데이터 보호 유지’에서는 개인정보와 암호화와 관련된 이슈를 살펴본다.
13장, ‘암호화와 인증’에서는 적절하게 키체인(Keychain)을 사용하는 방법, 데이터 보호 API, 다른 CommonCrypto 프레임워크에 의해 제공되는 기본적인 암호화 방법을 포함한 암호화 베스트 프랙티스(best practice)를 살펴본다.
14장, ‘모바일 개인정보 보호’에서는 마지막으로 필요한 데이터보다 더 많은 데이터를 수집할 경우 애플리케이션 제작자와 사용자에게 나쁜 영향을 끼치는 경우에 대해 논의한다.
목차
목차
- 1부. IOS 기초
- 1장. iOS 보안 모델
- 안전한 부트
- 앱 샌드박스로 접근 제한하기
- 데이터 보호와 디스크 전체 암호화
- 암호키 계층
- 키 체인 API
- 데이터 보호 API
- 네이티브 코드 익스플로잇 방지: ASLR, XN와 기타 방식
- 탈옥 탐지
- 앱 스토어 리뷰는 얼마나 효과적일까?
- WebKit에서 브릿징
- 동적 패치하기
- 고의적으로 취약한 코드
- 내장된 인터프리터
- 마치며
- 2장. 게으른 사람을 위한 오브젝티브 C
- 핵심 iOS 프로그래밍 전문용어
- 메시지 전달
- 오브젝티브 C 프로그램 분해하기
- 인터페이스 선언
- 구현 파일의 내부
- Blocks로 콜백 명시하기
- 오브젝티브 C 메모리 관리 방법
- 자동 참조 카운팅
- 대리자와 프로토콜
- Should 메시지
- Will 메시지
- Did 메시지
- 프로토콜 선언 및 따르기
- 카테고리의 위험요소
- 메소드 스위즐링
- 마치며
- 3장. iOS 애플리케이션 구조
- plist 파일 처리하기
- 디바이스 디렉토리
- Bundle 디렉토리
- Data 디렉토리
- Document와 Inbox 디렉토리
- Library 디렉토리
- Saved Application State 디렉토리
- tmp 디렉토리
- Shared 디렉토리
- 마치며
- 2부. 보안 테스팅
- 4장. 테스팅 플랫폼 만들기
- 연습용 바퀴 떼어내기
- 테스팅 디바이스
- 디바이스를 사용한 테스팅 vs 시뮬레이터 사용하기
- 네트워크 및 프록시 설정
- TLS 검증 우회
- stunnel로 SSL 우회하기
- 디바이스의 인증서 관리
- 디바이스의 프록시 설정
- Xcode와 빌드 설정
- 작업을 어렵게 만드는 것들
- Clang과 정적 분석
- Address Sanitizer와 동적 분석
- Instrument를 활용한 프로그램 모니터링
- Instrument 실행하기
- Watchdog을 사용한 파일시스템 액티비티 관찰
- 마치며
- 5장. lldb를 이용한 디버깅
- lldb의 유용한 기능
- 브레이크 포인트로 작업하기
- 프레임과 변수 탐색하기
- 오브젝트 시각적으로 조사하기
- 변수와 속성 조작하기
- 브레이크 포인트 액션
- 보안 분석을 위해 lldb 사용하기
- Fault 인젝션
- 데이터 추적
- 핵심 프레임워크 진단하기
- 마치며
- lldb의 유용한 기능
- 6장. 블랙박스 테스팅
- 써드파티 앱 설치하기
- .app 디렉토리 사용하기
- .ipa 패키지 파일 사용하기
- 바이너리 복호화
- 디바이스에서 디버그 서버 실행하기
- 암호화 세그먼트 위치 결정
- 애플리케이션 메모리 덤프하기
- 복호화한 바이너리 역공학
- otool로 바이너리 조사하기
- Class-dump를 사용해 클래스 정보 얻기
- Cycript를 사용해 실행 중인 프로그램의 데이터 추출하기
- Hopper로 디셈블리하기
- 인증서 고정 무력화
- Cydia Substrate를 사용한 후킹
- Introspy를 사용한 후킹 자동화
- 마치며
- 써드파티 앱 설치하기
- 3부. Cocoa API의 보안 단점
- 7장. IOS 네트워킹
- iOS URL 로딩 시스템 사용하기
- 전송 계층 보안을 정확하게 사용하기
- NSURLConnection을 사용한 기본 인증
- SURLConnection을 사용해서 TLS 상호 인증 구현
- 리디렉트 작동 수정하기
- TLS 인증서 고정
- NSURLSession 사용하기
- NSURLSession 설정
- NSURLSession 태스크 수행
- NSURLSession TLS 우회 탐지하기
- NSURLSession을 사용한 기본 인증
- 저장된 URL 크리덴셜 관리하기
- 써드파티 네트워킹 API의 위험
- AFNetworking 사용의 장단점
- 안전하지 않은 ASIHTTPRequest 사용
- 멀티피어 연결성
- NSStream을 사용한 저수준 네트워킹
- CFStream을 사용한 더 낮은 수준의 네트워킹
- 마치며
- iOS URL 로딩 시스템 사용하기
- 8장. 프로세스 간 통신
- URL 스키마와 openURL 메서드
- URL 스키마 정의하기
- URL/IPC 요청 전송 및 수신
- URL 검증과 송신자 인증
- URL 스키마 하이재킹
- 유니버설 링크
- UIActivity를 사용해서 데이터 공유하기
- 애플리케이션 익스텐션
- 앱에 익스텐션 구현 여부 확인하기
- 공유 가능한 데이터를 제한하고 검증하기
- 앱이 익스텐션과 상호작용 방지하기
- 실패한 IPC 조작: Pasteboard
- 마치며
- URL 스키마와 openURL 메서드
- 9장. iOS 대상 웹 앱
- UIWebViews의 사용(과 남용)
- UIWebViews로 작업하기
- UIWebViews 내에서 자바스크립트 실행하기
- 자바스크립트-Cocoa 연결의 장단점
- 앱과 JavaScriptCore 사이의 인터페이스
- 코르도바로 자바스크립트 실행하기
- WKWebView 입문
- WKWebViews로 작업하기
- WKWebViews의 보안상 이점
- 마치며
- UIWebViews의 사용(과 남용)
- 10장. 데이터 유출
- NSLog와 관련된 진실과 애플 시스템 로그
- 배포 빌드에 NSLog 비활성화하기
- 브레이크포인트 액션을 대신 사용한 로깅
- iOS 10에서 통합 로깅으로 전환
- 페이스트보드를 통해 민감한 데이터가 유출되는 방식
- 제한이 없는 시스템 페이스트보드
- Cutom-named 페이스트보드의 리스크
- 페이스트보드 데이터 보호 전략
- HTTP 캐시 노출을 찾고 플러그인 하기
- 캐시 관리
- 캐시 데이터를 제거하기 위한 솔루션
- HTTP 로컬 스토리지와 데이터베이스에서의 데이터 유출
- 키로깅과 자동 수정 데이터베이스
- 사용자 환경 설정 오용
- 스냅샷의 민감한 정보 처리
- 스크린 정리 전략
- 스크린 정리는 왜 전략적인 작업인가?
- 흔한 정리 실수
- Suspension을 방지해 스냅샷 피하기
- 상태 보존으로 인한 누수
- 보안 상태 보존
- 유출을 방지하기 위한 iCloud 기능 종료하기
- 마치며
- NSLog와 관련된 진실과 애플 시스템 로그
- 11장. C 언어에 기반한 오래된 문제들
- 포맷 스트링
- 전통적인 C 포맷 스트링 공격 예방하기
- 오브젝티브 C에서 포맷 스트링 공격 예방하기
- 버퍼 오버플로우와 스택
- strcpy 버퍼 오버플로우
- 버퍼 오버플로우 예방하기
- 정수 오버플로우와 힙
- malloc 정수 오버플로우
- 정수 오버플로우 예방하기
- 마치며
- 포맷 스트링
- 12장. 인젝션 공격
- 클라이언트 측 크로스 사이트 스크립팅
- 입력 값 검사
- 출력값 인코딩
- SQL 인젝션
- 프레디케이트 인젝션
- XML 인젝션
- XML 외부 개체를 이용한 인젝션
- 다른 XML 라이브러리로 인한 문제
- 마치며
- 클라이언트 측 크로스 사이트 스크립팅
- 4부. 데이터 보호 유지
- 13장. 암호화와 인증
- 키체인 사용하기
- 사용자 백업에 키체인 사용하기
- 키체인 보호 속성
- 기본적인 키체인 사용법
- 키체인 래퍼
- 공유 키체인
- iCloud 동기화
- 데이터 보호 API
- 보호수준
- DataProtectionClass 엔타이틀먼트
- 보호된 데이터의 사용가능 여부 확인
- CommonCrypto를 이용한 암호화
- 사용하지 말아야 할 취약한 알고리즘
- 사용하지 말아야 할 취약한 초기화 벡터
- 취약한 복잡도
- 질 나쁜 키
- 해시 연산 수행
- 메시지 인증을 위한 HMAC
- CommonCrypto를 RNCryptor로 래핑
- TouchID를 이용한 로컬 인증
- 지문은 얼마나 안전한가?
- 마치며
- 키체인 사용하기
- 14장. 모바일 개인정보 보호
- 기기 고유 식별자의 위험성
- 애플의 해결책
- 고유 식별자를 다루는 규칙
- 모바일 사파리와 추적 방지 헤더
- 쿠키 수용 정책
- 위치와 동작 모니터링
- 위치 정보의 동작 방식
- 위치 정보 저장의 위험성
- 정확도 제한하기
- 위치 정보 요청하기
- 건강 및 동작 정보 관리하기
- HealthKit에서 데이터 읽고 쓰기
- M7 동작 프로세서
- 데이터 수집 권한 요청하기
- 아이비컨을 이용한 근접도 추적
- 아이비컨 모니터링
- iOS 기기의 아이비컨 신호 켜기
- 아이비컨의 고려사항
- 개인정보 보호 정책 수립
- 마치며
- 기기 고유 식별자의 위험성
도서 오류 신고
정오표
정오표
[p.228 아래에서 8행]
158페이지의 WKWebView 입문 참고
->
240페이지의 WKWebView 입문 참고
[p.239 그림 9.1 아래 이미지로 대체]