보안 전문가와 아이폰 개발자를 위한 iOS 해킹과 방어
- 원서명Hacking and Securing iOS Applications: Stealing Data, Hijacking Software, and How to Prevent It (ISBN 9781449318741)
- 지은이조나단 지드자스키
- 옮긴이민병호
- ISBN : 9788960773370
- 35,000원
- 2012년 08월 31일 펴냄 (절판)
- 페이퍼백 | 472쪽 | 188*245mm
- 시리즈 : 해킹과 보안
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
모바일 앱 개발자, 특히 금융/쇼핑 앱, 개인정보 저장 앱, 또는 사내 전용 앱을 개발하는 개발자라면 주목하자. 여러분이 개발한 앱이 해킹에 취약할 확률은 거의 100%다! 책을 읽다 보면 자꾸만 작성한 코드를 열고 보안 허점을 수정하는 자신을 발견하게 되리라 장담한다. 애플의 보호 클래스를 사용해서 데이터를 암호화하니 안전하다고 생각하는가? 지금 바로 이 책을 읽어보자. 신혼의 단꿈이 무너지듯 현실은 냉혹하기 그지 없을 것이다. 이 책은 iOS 보안의 불완전함을 알기 쉽게 설명하고 개발자 입장에서 이를 어떻게 보완할 수 있는지 친절하게 알려준다. 모바일 보안이 이슈인 요즘, 미래를 대비하는 개발자라면 꼭 한 번 읽어보자.
[ 소개 ]
오브젝티브C의 기초가 탄탄한 개발자라면 반드시 읽어야 할 필독서! 이제까지 개발한 모든 애플리케이션이 여러 형태의 공격에 취약할 가능성이 매우 높다. 악의적인 해커는 대부분의 프로그래머가 알지 못하는 리버스 엔지니어링, 포렌식, 추적, 변조 툴을 사용하기 때문이다.
책에서는 다양한 종류의 iOS 공격을 다루면서 해커가 실제로 사용하는 툴과 기술을 설명한다. 여러분의 애플리케이션을 보호할 수 있는 베스트 프랙티스도 배운다. 지피지기면 백전불태라는 말처럼 책을 읽고 나면 공격자 입장에서 이해하고 전략을 세우는 일이 얼마나 중요한지 알게 된다.
[ 이 책에서 다루는 내용 ]
■ 실제 애플리케이션에 존재하는 취약점과 이를 미연에 방지하는 기술
■ 코드 삽입을 이용한 맬웨어 감염 기술
■ iOS 키체인과 데이터 보호의 암호화를 깨는 기술
■ 디버거와 커스텀 코드 삽입을 이용한 오브젝티브C 런타임 환경 변조 기술
■ SSL 세션 하이재킹과 트래픽 도청 방지 기술
■ 파일 완전 삭제 방법과 애플리케이션에서 포렌식 흔적을 최소화하는 기술
■ 디버깅 탐지 방법, 실행 중 클래스의 무결성을 검증하는 기술, 코드 추적을 어렵게 하는 기술
[ 이 책의 대상 독자 ]
이 책의 주요 대상 독자는 애플리케이션을 안전하게 설계하고자 하는 iOS 개발자다. 정부나 금융 애플리케이션은 물론이고 개발자가 보호하고자 하는 데이터나 기능이 있는 애플리케이션은 모두 보안 애플리케이션에 해당한다. 책의 내용을 이해하려면 iOS용 오브젝티브C 코딩에 상당히 익숙해야 한다. C와 어셈블리 언어까지 잘 알고 있다면 더욱 좋겠지만 의무 사항은 아니다.
책의 주요 대상이 iOS긴 하지만 맥 OS X 데스크탑에 바로 적용할 수 있는 내용도 많다. iOS와 OS X 모두 오브젝티브C 환경을 지원하며 공통적인 툴도 많기 때문이다. 그러므로 기업용 데스크탑 애플리케이션의 취약점을 분석할 때도 책의 내용을 유용하게 활용할 수 있다.
[ 이 책의 구성 ]
『보안 전문가와 아이폰 개발자를 위한 iOS 해킹과 방어』는 크게 두 부분으로 나뉜다. 전반부에서는 iOS와 iOS 애플리케이션의 다양한 취약점과 이를 이용한 해킹을 논한다. 후반부에서는 애플리케이션을 좀 더 안전하게 보호할 수 있는 기술을 다룬다.
1장에서는 모바일 보안의 핵심적인 문제를 설명하고 개발자가 보안을 고려할 때 주로 저지르는 일반적인 착각과 실수를 다룬다.
2장에서는 탈옥을 포함한 여러 가지의 iOS 장치 장악 기술을 소개한다. 커스텀 코드를 작성한 후 유명한 탈옥 기술과 커스텀 램 디스크를 사용해서 iOS 장치에 코드를 삽입하는 방법을 배운다.
3장에서는 어떻게 iOS 장치의 파일시스템을 몇 분 만에 빼낼 수 있는지와 왜 개발자가 제조사의 디스크 암호화에만 의존해서는 안 되는지를 중점적으로 살펴본다. 장치 소유자 몰래 잠시 장치를 손에 넣을 수 있는 일반적인 사회 공학 기술도 배운다.
4장에서는 운영체제가 남기는 포렌식 데이터와 이 데이터로부터 얻을 수 있는 갖가지 정보를 다룬다.
5장에서는 iOS의 키체인 암호화와 데이터 보호 암호화를 무력화하는 방법과 이 두 가지 보호 기법의 근본적인 문제를 살펴본다.
6장에서는 HFS 저널을 이용해서 삭제된 파일을 복구하는 방법과 파일을 복구할 수 없도록 안전하게 삭제하는 방법을 배운다.
7장에서는 런타임 환경을 모니터링 및 조작할 수 있는 툴을 소개하고 블랙햇 해커가 iOS 애플리케이션의 객체, 변수, 메소드를 어떻게 조작해서 다양한 보안 계층을 우회할 수 있는지 알아본다.
8장에서는 애플리케이션 디스어셈블링과 디버깅, 악성 코드 삽입, 여러 가지 로우레벨 공격 기술에 유용한 툴과 접근 방법을 소개한다.
9장에서는 SSL 세션을 하이재킹할 수 있는 툴을 설명하고 이런 공격으로부터 애플리케이션을 보호할 수 있는 방법을 살펴본다.
10장에서는 보안에 관한 내용을 좀 더 자세히 다루고 애플리케이션 데이터를 보호할 수 있는 제대로된 암호화 기술의 구현을 배운다.
11장에서는 애플리케이션이 최소한의 흔적만 남기도록 설계함으로써 포렌식 데이터의 유출을 미연에 방지하는 방법을 설명한다.
12장에서는 애플리케이션 공격에 필요한 복잡도를 증가시킬 수 있는 다양한 베스트 프랙티스를 다룬다.
13장에서는 애플리케이션이 몇 가지 유명한 탈옥 툴을 이용해서 탈옥한 장치에서 실행 중인지 확인할 때 사용할 수 있는 기술을 알아본다.
14장에서는 책의 내용을 정리하면서 적의 입장에서 이해하고 전략을 세우는 게 얼마나 중요한지 설명한다.
[ 소개 ]
오브젝티브C의 기초가 탄탄한 개발자라면 반드시 읽어야 할 필독서! 이제까지 개발한 모든 애플리케이션이 여러 형태의 공격에 취약할 가능성이 매우 높다. 악의적인 해커는 대부분의 프로그래머가 알지 못하는 리버스 엔지니어링, 포렌식, 추적, 변조 툴을 사용하기 때문이다.
책에서는 다양한 종류의 iOS 공격을 다루면서 해커가 실제로 사용하는 툴과 기술을 설명한다. 여러분의 애플리케이션을 보호할 수 있는 베스트 프랙티스도 배운다. 지피지기면 백전불태라는 말처럼 책을 읽고 나면 공격자 입장에서 이해하고 전략을 세우는 일이 얼마나 중요한지 알게 된다.
[ 이 책에서 다루는 내용 ]
■ 실제 애플리케이션에 존재하는 취약점과 이를 미연에 방지하는 기술
■ 코드 삽입을 이용한 맬웨어 감염 기술
■ iOS 키체인과 데이터 보호의 암호화를 깨는 기술
■ 디버거와 커스텀 코드 삽입을 이용한 오브젝티브C 런타임 환경 변조 기술
■ SSL 세션 하이재킹과 트래픽 도청 방지 기술
■ 파일 완전 삭제 방법과 애플리케이션에서 포렌식 흔적을 최소화하는 기술
■ 디버깅 탐지 방법, 실행 중 클래스의 무결성을 검증하는 기술, 코드 추적을 어렵게 하는 기술
[ 이 책의 대상 독자 ]
이 책의 주요 대상 독자는 애플리케이션을 안전하게 설계하고자 하는 iOS 개발자다. 정부나 금융 애플리케이션은 물론이고 개발자가 보호하고자 하는 데이터나 기능이 있는 애플리케이션은 모두 보안 애플리케이션에 해당한다. 책의 내용을 이해하려면 iOS용 오브젝티브C 코딩에 상당히 익숙해야 한다. C와 어셈블리 언어까지 잘 알고 있다면 더욱 좋겠지만 의무 사항은 아니다.
책의 주요 대상이 iOS긴 하지만 맥 OS X 데스크탑에 바로 적용할 수 있는 내용도 많다. iOS와 OS X 모두 오브젝티브C 환경을 지원하며 공통적인 툴도 많기 때문이다. 그러므로 기업용 데스크탑 애플리케이션의 취약점을 분석할 때도 책의 내용을 유용하게 활용할 수 있다.
[ 이 책의 구성 ]
『보안 전문가와 아이폰 개발자를 위한 iOS 해킹과 방어』는 크게 두 부분으로 나뉜다. 전반부에서는 iOS와 iOS 애플리케이션의 다양한 취약점과 이를 이용한 해킹을 논한다. 후반부에서는 애플리케이션을 좀 더 안전하게 보호할 수 있는 기술을 다룬다.
1장에서는 모바일 보안의 핵심적인 문제를 설명하고 개발자가 보안을 고려할 때 주로 저지르는 일반적인 착각과 실수를 다룬다.
2장에서는 탈옥을 포함한 여러 가지의 iOS 장치 장악 기술을 소개한다. 커스텀 코드를 작성한 후 유명한 탈옥 기술과 커스텀 램 디스크를 사용해서 iOS 장치에 코드를 삽입하는 방법을 배운다.
3장에서는 어떻게 iOS 장치의 파일시스템을 몇 분 만에 빼낼 수 있는지와 왜 개발자가 제조사의 디스크 암호화에만 의존해서는 안 되는지를 중점적으로 살펴본다. 장치 소유자 몰래 잠시 장치를 손에 넣을 수 있는 일반적인 사회 공학 기술도 배운다.
4장에서는 운영체제가 남기는 포렌식 데이터와 이 데이터로부터 얻을 수 있는 갖가지 정보를 다룬다.
5장에서는 iOS의 키체인 암호화와 데이터 보호 암호화를 무력화하는 방법과 이 두 가지 보호 기법의 근본적인 문제를 살펴본다.
6장에서는 HFS 저널을 이용해서 삭제된 파일을 복구하는 방법과 파일을 복구할 수 없도록 안전하게 삭제하는 방법을 배운다.
7장에서는 런타임 환경을 모니터링 및 조작할 수 있는 툴을 소개하고 블랙햇 해커가 iOS 애플리케이션의 객체, 변수, 메소드를 어떻게 조작해서 다양한 보안 계층을 우회할 수 있는지 알아본다.
8장에서는 애플리케이션 디스어셈블링과 디버깅, 악성 코드 삽입, 여러 가지 로우레벨 공격 기술에 유용한 툴과 접근 방법을 소개한다.
9장에서는 SSL 세션을 하이재킹할 수 있는 툴을 설명하고 이런 공격으로부터 애플리케이션을 보호할 수 있는 방법을 살펴본다.
10장에서는 보안에 관한 내용을 좀 더 자세히 다루고 애플리케이션 데이터를 보호할 수 있는 제대로된 암호화 기술의 구현을 배운다.
11장에서는 애플리케이션이 최소한의 흔적만 남기도록 설계함으로써 포렌식 데이터의 유출을 미연에 방지하는 방법을 설명한다.
12장에서는 애플리케이션 공격에 필요한 복잡도를 증가시킬 수 있는 다양한 베스트 프랙티스를 다룬다.
13장에서는 애플리케이션이 몇 가지 유명한 탈옥 툴을 이용해서 탈옥한 장치에서 실행 중인지 확인할 때 사용할 수 있는 기술을 알아본다.
14장에서는 책의 내용을 정리하면서 적의 입장에서 이해하고 전략을 세우는 게 얼마나 중요한지 설명한다.
목차
목차
- 1장 여러분이 제대로 알고 있는 사실은 아무것도 없다
- 모노컬처의 신화
- iOS 보안 모델
- iOS 보안 모델의 구성요소
- 자물쇠와 열쇠 함께 저장하기
- 사용자 암호 = 취약한 보안
- 데이터 포렌식으로 암호화 깨부수기
- 외부 데이터 역시 위험한 건 마찬가지
- 트래픽 하이재킹
- 데이터 도난은 순식간
- 아무것도 믿지 말자, 직접 작성한 애플리케이션조차도
- 물리적 보안은 선택사항이다
- 요약
- 1부 해킹
- 2장 iOS 해킹 기초
- 탈옥 방법을 배워야 하는 이유
- 탈옥의 모든 것
- 개발자 툴
- 최종 사용자용 탈옥
- 아이폰 해킹
- DFU 모드
- 테더드(Tethered) 대 언테더드(Untethered)
- 장치 해킹과 코드 삽입
- 커스텀 코드 제작
- 바이너리 분석
- 바이너리 시험해보기
- 코드 데몬화
- 타르 파일을 이용한 악성 코드 설치
- 램 디스크를 이용한 악성 코드 설치
- 연습문제
- 요약
- 3장 파일시스템 훔치기
- 디스크 전체 암호화
- 솔리드 스테이트 낸드(Solid State Nand)
- 디스크 암호화
- iOS 디스크 암호화의 실패 원인
- 라이브 파일시스템 복사
- 데이터 훔치기 페이로드
- 커스텀 launchd 제작
- 램 디스크 준비
- 파일시스템 이미지 획득
- 로우 파일시스템 복사
- 로우 이미지 훔치기 페이로드
- 커스텀 launchd 제작
- 램 디스크 준비
- 파일시스템 이미지 획득
- 연습문제
- 사회 공학 활용
- 비활성화된 장치 이용
- 초기화된 장치 이용
- 맬웨어가 설치된 장치 이용
- 암호 공학 애플리케이션 이용
- 요약
- 디스크 전체 암호화
- 4장 포렌식 흔적과 데이터 유출
- 이미지의 위치 태그 추출
- 통합 GPS 캐시
- SQLite 데이터베이스
- 데이터베이스 연결
- SQLite 내장 명령어
- SQL 질의 수행
- 중요한 데이터베이스 파일 목록
- 주소록 연락처
- 주소록 이미지
- 구글 지도 데이터
- 캘린더 이벤트
- 통화 기록
- 이메일 데이터베이스
- 메모
- 사진 메타데이타
- SMS 메시지
- 사파리 북마크
- SMS 스포트라이트 캐시
- 사파리 웹 캐시
- 웹 애플리케이션 캐시
- 웹킷 저장소
- 음성 사서함
- 데이터베이스 필드의 파편 리버스 엔지니어링
- SMS 임시 저장 메시지
- 프로퍼티 리스트
- 중요한 프로퍼티 리스트 파일
- 그 밖의 중요한 파일
- 요약
- 이미지의 위치 태그 추출
- 5장 암호화 깨부수기
- 소게티의 데이터 보호 툴
- 데이터 보호 툴 설치
- 브루트포스 공격 툴 제작
- 필수 파이썬 라이브러리 빌드
- 암호화 키 추출
- 키 추출 페이로드
- 커스텀 launchd 제작
- 램 디스크 준비
- 커널 준비
- 브루트포스 실행
- 키체인 복호화
- 로우 디스크 복호화
- 아이튠스 백업 복호화
- 스파이웨어를 이용한 암호화 깨부수기
- 스파이웨어 페이로드
- spyd 데몬화
- 커스텀 launchd 제작
- 램 디스크 준비
- 페이로드 실행
- 연습문제
- 요약
- 소게티의 데이터 보호 툴
- 6장 삭제된 파일 복구
- HFS 저널 수집
- 빈 공간 카빙
- 복구 가능한 주요 데이터
- 애플리케이션 스크린샷
- 삭제된 프로퍼티 리스트
- 삭제된 음성 사서함 메시지와 음성 메모
- 삭제된 키보드 캐시
- 사진과 기타 개인 정보
- 요약
- 7장 런타임 조작
- 바이너리 분석
- 마크오 형식
- class-dump-z 사용
- 심볼 테이블
- 암호화된 바이너리
- 오프셋 계산
- 메모리 덤프
- 복호화된 코드를 파일로 다시 복사
- cryptid 재설정
- 쓰크립트로 런타임 조작
- 쓰크립트 설치
- 쓰크립트 사용
- 간단한 잠금 기능 무력화
- 메소드 바꿔치기
- 데이터 자세히 살펴보기
- 데이터 기록
- 훨씬 심각한 사례
- 연습문제
- 스프링보드 애니메이션
- 일종의 전화 도청
- 스크린샷 생성
- 요약
- 바이너리 분석
- 8장 런타임 라이브러리를 사용한 공격
- 오브젝티브C 완전 해부
- 인스턴스 변수
- 메소드
- 메소드 캐시
- 디스어셈블링과 디버깅
- 메시지 엿듣기
- 기본적인 오브젝티브C 프레임워크
- 오브젝티브C와 인터페이스로 연결
- 악성 코드 삽입
- 코드삽입 페이로드
- 디버거로 코드 삽입
- 동적 링커를 사용한 삽입
- 영구적인 장치 감염
- 요약
- 오브젝티브C 완전 해부
- 9장 트래픽 하이재킹하기
- APN 하이재킹
- 페이로드 설치
- 제거
- 간단한 프록시 설정
- SSL 공격
- SSLStrip
- 파로스 프록시
- 브라우저 경고
- 애플리케이션 수준의 SSL 검증 공격
- SSL 공격 페이로드
- 파운데이션 HTTP 클래스 하이재킹
- 포스트 공격 페이로드
- 데이터 분석
- 드리프트넷
- 빌드
- 실행
- 연습문제
- 요약
- APN 하이재킹
- 2부 방어
- 10장 암호화 구현
- 암호 강도
- 무작위 암호 생성기를 조심하자
- 커먼 크립토 라이브러리
- 무상태형 연산
- 상태유지형 암호화
- 마스터 키 암호화
- 위치 기반 암호화
- 암호를 결합한 위치 기반 암호화
- 별도의 서버 측 키
- 메모리 보호
- 메모리 완전 삭제
- 공개 키 암호화
- 연습문제
- 암호 강도
- 11장 포렌식 대비책
- 보안 완전 삭제
- DOD 5220.22-M 완전 삭제
- 오브젝티브C
- SQLite 레코드 완전 삭제
- 키보드 캐시
- 숫자 입력 패드 무작위화
- 애플리케이션 스크린샷
- 보안 완전 삭제
- 12장 런타임 보호
- 변조 대응
- 사용자 데이터 완전 삭제
- 네트워크 접속 비활성화
- 서버 보고
- 로깅 활성화
- 미끼와 킬 스위치
- 프로세스 추적 검사
- 디버거 차단
- 런타임 클래스 무결성 검사
- 주소 공간 검증
- 인라인 함수
- 디스어셈블링 복잡도 높이기
- 최적화 플래그
- 스트립
- 뺑뺑이를 돌리자! -funroll-loops
- 연습문제
- 변조 대응
- 13장 탈옥 탐지
- 샌드박스 무결성 검사
- 파일시스템 검사
- 탈옥 파일 존재 여부
- /etc/fstab의 크기
- 심볼릭 링크 검사
- 페이지 실행 검사
- 14장 다음 단계
- 공격자의 입장에서 생각해보자
- 책에서 다루지 않은 리버스 엔지니어링 툴
- 보안 vs 코드 관리
- 보안을 대하는 유연한 자세
도서 오류 신고
정오표
[ p43 4-5행 ]
브라우저나에서 → 브라우저에서
[ p72 첫 번째 코드 마지막 행 ]
sheel → wheel
브라우저나에서 → 브라우저에서
[ p72 첫 번째 코드 마지막 행 ]
sheel → wheel