logo
logo
x
바코드검색
BOOKPRICE.co.kr
책, 도서 가격비교 사이트
바코드검색

인기 검색어

실시간 검색어

검색가능 서점

도서목록 제공

개발자가 바로 사용할 수 있는 보안 코딩 한정판 세트 - 전4권

개발자가 바로 사용할 수 있는 보안 코딩 한정판 세트 - 전4권

(『버그 없는 안전한 소프트웨어를 위한 CERT® C 프로그래밍』+ 『보안 전문가와 아이폰 개발자를 위한 iOS 해킹과 방어』+『Ajax 보안』+『웹 애플리케이션 해킹 대작전』)

마이크 앤드류스, 제임스 A. 휘태커, 빌리 호프만, 브라이언 설리번, 조나단 지드자스키, 로버트 시코드 (지은이), 민병호, 윤근용, 고현영, 윤평호, 현동석 (옮긴이)
에이콘출판
118,000원

일반도서

검색중
서점 할인가 할인률 배송비 혜택/추가 실질최저가 구매하기
알라딘 로딩중
yes24 로딩중
교보문고 로딩중
11st 로딩중
영풍문고 로딩중
쿠팡 로딩중
쿠팡로켓 로딩중
G마켓 로딩중
notice_icon 검색 결과 내에 다른 책이 포함되어 있을 수 있습니다.

중고도서

검색중
서점 유형 등록개수 최저가 구매하기
로딩중

eBook

검색중
서점 정가 할인가 마일리지 실질최저가 구매하기
로딩중

책 이미지

개발자가 바로 사용할 수 있는 보안 코딩 한정판 세트 - 전4권
eBook 미리보기

책 정보

· 제목 : 개발자가 바로 사용할 수 있는 보안 코딩 한정판 세트 - 전4권 (『버그 없는 안전한 소프트웨어를 위한 CERT® C 프로그래밍』+ 『보안 전문가와 아이폰 개발자를 위한 iOS 해킹과 방어』+『Ajax 보안』+『웹 애플리케이션 해킹 대작전』)
· 분류 : 국내도서 > 컴퓨터/모바일 > OS/Networking > 네트워크 보안/해킹
· ISBN : 9788960773882
· 쪽수 : 752쪽
· 출판일 : 2013-01-22

책 소개

『버그 없는 안전한 소프트웨어를 위한 CERT® C 프로그래밍』『보안 전문가와 아이폰 개발자를 위한 iOS 해킹과 방어』『Ajax 보안』『웹 애플리케이션 해킹 대작전』으로 구성된 세트.

목차

『버그 없는 안전한 소프트웨어를 위한 CERT® C 프로그래밍』

| 1장 | 표준 사용법
___시스템 품질
___자동 생성 코드
___표준 준수

| 2장 | 전처리기(PRE)
___PRE00-C. 함수형의 매크로보다는 인라인이나 정적 함수를 사용하라
___PRE01-C. 매크로에서는 매개변수에 괄호를 사용하라
___PRE02-C. 매크로로 치환될 영역은 반드시 괄호로 둘러싸야 한다
___PRE03-C. 타입 인코딩 시 매크로 정의 대신 타입 정의를 사용하라
___PRE04-C. 표준 헤더 파일 이름을 재사용하지 마라
___PRE05-C. 토큰들을 연결하거나 문자열 변환을 할 때 매크로 치환을 고려하라
___PRE06-C. 헤더 파일에 항상 인클루전 가드를 둬라
___PRE07-C. 연속되는 물음표를 사용하지 마라
___PRE08-C. 중복된 헤더 파일 이름이 없는지가 보장돼야 한다
___PRE09-C. 안전한 함수를 덜 안전한 함수로 바꾸지 마라
___PRE10-C. 복수 구문 매크로를 do-while 루프로 감싸라
___PRE30-C. 유니버설 문자열 이름을 여러 문자열을 붙여서 만들지 마라
___PRE31-C. 절대로 불안전한 매크로를 할당, 증가, 감소, 메모리 변수 접근, 함수 호출과 함께 사용하지 마라

| 3장 | 선언과 초기화(DCL)
___DCL00-C. 변하지 않는 객체는 const로 보장해둬라
___DCL01-C. 내부 스코프에서 변수 이름을 재사용하지 마라
___DCL02-C. 시각적으로 구별되는 식별자를 사용하라
___DCL03-C. 상수 수식의 값을 테스트할 때 정적 어썰션을 사용하라
___DCL04-C. 한 번에 여러 변수를 선언하지 마라
___DCL05-C. 코드의 가독성을 높이기 위해 타입 정의를 사용하라
___DCL06-C. 프로그램 로직상의 고정적인 값을 나타낼 때는 의미 있는 심볼릭 상수를 사용하라
___DCL07-C. 함수 선언 시 적절한 타입 정보를 포함시켜라
___DCL08-C. 상수 정의에서는 상수 간의 관계가 적절하게 나타나도록 정의하라
___DCL09-C. errno 에러 코드를 반환하는 함수의 반환 타입을 errno_t로 정의하라
___DCL10-C. 가변 인자를 가진 함수에서는 함수 작성자와 함수 사용자 간의 약속이 지켜져야 한다
___DCL11-C. 가변 인자 함수와 연관된 타입 문제를 파악하고 있어야 한다
___DCL12-C. 불투명한 타입을 사용해 추상 데이터 타입을 구현하라
___DCL13-C. 함수에 의해 바뀌지 않을 값에 대한 포인터를 함수의 매개변수로 사용할 때는 const로 정의하라
___DCL14-C. 여러 컴파일 단위를 거치는 전역 변수 초기화의 순서에 대해서는 어떤 가정도 하지 마라
___DCL15-C. 현재 범위를 넘어서까지 사용되지 않을 객체는 static으로 선언하라
___DCL30-C. 객체를 선언할 때 적절한 지속공간을 지정하라
___DCL31-C. 식별자를 사용하기 전에 먼저 선언하라
___DCL32-C. 서로에게 보이는 식별자가 유일한지를 보장하라
___DCL33-C. 함수 인자에서 restrict로 지정된 소스 포인터와 목적 포인터가 동일한 객체를 참조하지 않게 하라
___DCL34-C. 캐시될 수 없는 데이터에는 volatile을 사용하라
___DCL35-C. 함수 정의와 맞지 않는 타입으로 함수를 변환하지 마라
___DCL36-C. 링크 분류에서 충돌되는 식별자를 선언하지 마라

| 4장 | 표현식(EXP)
___EXP00-C. 연산자 우선순위를 나타내는 데 괄호를 사용하라
___EXP01-C. 포인터로 가리키는 타입의 크기를 결정하기 위해 포인터의 크기를 사용하지 마라
___EXP02-C. 논리 연산자 AND와 OR의 단축 평가 방식을 알고 있어라
___EXP03-C. 구조체의 크기가 구조체 멤버들 크기의 합이라고 가정하지 마라
___EXP04-C. 구조체끼리 바이트 단위로 비교하지 마라
___EXP05-C. const를 캐스트로 없애지 마라
___EXP06-C. sizeof의 피연산자가 다른 부수 효과를 가지면 안 된다
___EXP07-C. 표현식의 상수에 특정 값을 가정함으로써 상수를 사용해 얻는 이득을 없애지 마라
___EXP08-C. 포인터 연산이 정확하게 수행되고 있는지 보장하라
___EXP09-C. 타입이나 변수의 크기를 결정할 때는 sizeof를 사용하라
___EXP10-C. 하위 표현식의 평가 순서나 부수 효과가 발생할 수 있는 영역의 순서에 의존하지 마라
___EXP11-C. 호환되지 않는 타입들에는 연산자를 적용하지 마라
___EXP12-C. 함수에 의해 반환되는 값을 무시하지 마라
___EXP30-C. 시퀀스 포인트들 간의 평가 순서에 의존하지 마라
___EXP31-C. 어썰션의 부수 효과를 피하라
___EXP32-C. volatile 지정자를 캐스팅하여 없애지 마라
___EXP33-C. 초기화되지 않은 메모리를 참조하지 마라
___EXP34-C. 널포인터가 역참조되지 않음을 보장하라
___EXP35-C. 함수의 반환 값을 인접한 다음 시퀀스 포인트에서 접근하거나 수정하지 마라
___EXP36-C. 포인터를 더 엄격하게 할당된 포인터 타입으로 변환하지 마라
___EXP37-C. API에 의해 의도된 인자들로 함수를 호출하라
___EXP38-C. 유효하지 않은 타입이나 비트 필드 멤버들에 대해 offsetof(`)를 호출하지 마라

| 5장 | 정수(INT)
___INT00-C. 구현 시 사용되는 데이터 모델을 이해하고 있어라
___INT01-C. 객체의 크기를 나타내는 정수 값은 rsize_t나 size_t를 사용하라
___INT02-C. 정수 변환 규칙을 이해하라
___INT03-C. 안전한 정수 라이브러리를 사용하라
___INT04-C. 불분명한 소스에서 얻어지는 정수 값은 제한을 강제하라
___INT05-C. 모든 가능한 입력을 처리할 수 없다면 문자 데이터 변환을 위해 입력 함수를 사용하지 마라
___INT06-C. 문자열 토큰을 정수로 변환할 때는 strtol(`)이나 관련 함수를 사용하라
___INT07-C. 숫자 값에는 명시적으로 signed나 unsigned 값을 사용하라
___INT08-C. 모든 정수가 지정한 범위 내에 있음을 확인하라
___INT09-C. 열거형 상수가 유일한 값으로 매핑되도록 보장하라
___INT10-C. % 연산자를 쓸 때 나머지가 양수라고 가정하지 마라
___INT11-C. 정수를 포인터로 혹은 그 반대로 변환할 때 주의하라
___INT12-C. 표현식에서 signed, unsigned 표시가 없는 int 비트 필드의 타입을 가정하지 마라
___INT13-C. 비트 연산자는 unsigned 피연산자에만 사용하라
___INT14-C. 동일한 데이터에 비트 연산자와 산술 연산자를 수행하지 마라
___INT15-C. 프로그래머 정의 정수 타입의 포맷 지정 I/O에 대해 intmax_t나 uintmax_t를 사용하라
___INT30-C. unsigned 정수 연산이 래핑되지 않도록 주의하라
___INT31-C. 정수 변환으로 데이터가 손실되거나 잘못 처리되지 않도록 주의하라
___INT32-C. signed 정수의 연산이 오버플로되지 않도록 보장하라
___INT33-C. 나눗셈이나 모듈로 연산에서 0으로 나누는 에러가 발생하지 않게 하라
___INT34-C. 음수나 피연산자의 비트보다 더 많은 비트를 시프트하지 마라
___INT35-C. 정수 표현식으로 비교하거나 할당할 때 더 큰 타입으로 표현식을 평가하라

| 6장 | 부동소수점(FLP)
___FLP00-C. 부동소수점 수의 제한을 이해하라
___FLP01-C. 부동소수점 표현식을 재배치할 때 주의하라
___FLP02-C. 정확한 계산이 필요할 때는 부동소수점 수를 배제할 수 있는지 고려하라
___FLP03-C. 부동소수점 에러를 발견하고 처리하라
___FLP30-C. 부동소수점 변수를 루프 카운터로 사용하지 마라
___FLP31-C. 함수에 복소수를 사용하면서 실제 값을 얻을 거라 기대하지 마라
___FLP32-C. 수학 함수에서 도메인 에러나 영역 에러를 찾고 예방하라
___FLP33-C. 부동소수점 연산용 정수는 먼저 부동소수점으로 바꿔라
___FLP34-C. 부동소수점 변환이 새로운 타입의 범위 안에 들어가는지 확인하라

| 7장 | 배열(ARR)
___ARR00-C. 배열이 어떻게 동작하는지 이해하라
___ARR01-C. 배열의 크기를 얻을 때 포인터를 sizeof의 피연산자로 사용하지 마라
___ARR02-C. 암시적으로 초기화된 경우라도 배열의 경계를 명시적으로 지정하라
___ARR30-C. 배열의 인덱스가 유효한 범위 안에 있음을 보장하라
___ARR31-C. 모든 소스 파일에서 일관된 배열 표기를 사용하라
___ARR32-C. 가변 배열에서 크기를 나타내는 인자가 유효한 범위에 있음을 보장하라
___ARR33-C. 충분한 크기의 공간에서 복사가 진행됨을 보장하라
___ARR34-C. 표현식에서 배열 타입이 호환 가능함을 보장하라
___ARR35-C. 루프에서 반복자가 배열의 끝을 넘어 접근하지 않게 하라
___ARR36-C. 같은 배열을 참조하고 있지 않다면 두 개의 포인터를 빼거나 비교하지 마라
___ARR37-C. 배열이 아닌 객체에 대한 포인터에 정수를 더하거나 빼지 마라
___ARR38-C. 반환 값이 유효한 배열 원소를 참조하고 있지 않은 경우 포인터에 정수를 더하거나 빼지 마라

| 8장 | 문자와 문자열(STR)
___STR00-C. 적절한 타입으로 문자를 표현하라
___STR01-C. 문자열 관리를 위해 일관된 계획을 사용해 일관되게 구현하라
___STR02-C. 복잡한 하위 시스템으로 전달되는 데이터를 검열하라
___STR03-C. 널문자로 종료된 문자열이 부적절하게 잘리지 않게 하라
___STR04-C. 기본 문자 집합에서는 문자들을 위해 char를 사용하라
___STR05-C. 문자열 상수를 가리키는 포인터는 const로 선언하라
___STR06-C. strtok(`)에서 파싱되는 문자열이 보존된다고 가정하지 마라
___STR07-C. 문자열을 처리하는 코드를 수정할 때는 TR 24731을 사용하라
___STR08-C. 문자열을 처리하는 새로운 코드를 개발할 때 관리 문자열을 사용하라
___STR30-C. 문자열 리터럴을 수정하려고 하지 마라
___STR31-C. 문자열을 위한 공간이 문자 데이터와 널 종료문자를 담기에 충분함을 보장하라
___STR32-C. 요구되는 대로 문자열을 널문자로 종료하라
___STR33-C. 와이드 문자 스트링의 크기를 정확히 하라
___STR34-C. 문자들을 더 큰 타입인 정수로 변환하기 전에 unsigned 타입으로 캐스팅하라
___STR35-C. 경계가 불분명한 소스로부터 고정된 길이의 배열에 데이터를 복사하지 마라
___STR36-C. 문자열 리터럴로 초기화된 문자 배열의 경계를 지정하지 마라
___STR37-C. 문자를 처리하는 함수로 전달되는 인자는 반드시 unsigned char로 표현 가능해야 한다

| 9장 | 메모리 관리(MEM)
___MEM00-C. 동일한 추상화 레벨의 같은 모듈 안에서 메모리를 할당하고 해제하라
___MEM01-C. free(`) 후 즉시 포인터에 새로운 값을 저장하라
___MEM02-C. 메모리 할당 함수의 반환 값을 즉시 할당된 타입의 포인터로 변환시켜라
___MEM03-C. 재사용을 위해 반환된 재사용 가능한 리소스에 있는 중요한 정보를 클리어하라
___MEM04-C. 크기가 0인 할당을 수행하지 마라
___MEM05-C. 큰 스택 할당을 피하라
___MEM06-C. 중요한 데이터가 디스크에 기록되지 않도록 보장하라
___MEM07-C. calloc(`)의 인자가 곱해지는 경우 size_t로 표현될 수 있게 하라
___MEM08-C. 동적으로 할당된 배열을 리사이즈하는 경우에만 realloc(`)을 사용하라
___MEM09-C. 메모리 할당 루틴이 메모리를 초기화해줄 것이라 가정하지 마라
___MEM10-C. 포인터 검증 함수를 사용하라
___MEM30-C. 해제된 메모리에 접근하지 마라
___MEM31-C. 동적으로 할당된 메모리는 한 번만 해제하라
___MEM32-C. 메모리 할당 에러를 찾아 해결하라
___MEM33-C. 유연한 배열 원소에 정확한 문법을 사용하라
___MEM34-C. 동적으로 할당된 메모리만 해제하라
___MEM35-C. 객체에 충분한 메모리를 할당하라

| 10장 | 입력과 출력(FIO)
___FIO00-C. 포맷 문자열을 사용할 때 주의하라
___FIO01-C. 파일 이름이나 식별자를 사용하는 함수를 쓸 때 주의하라
___FIO02-C. 신뢰할 수 없는 소스로부터 얻은 경로 이름을 정형화해 사용하라
___FIO03-C. fopen(`)이나 파일 생성에 대해 특정 조건을 가정하지 마라
___FIO04-C. 입출력 에러를 찾아 해결하라
___FIO05-C. 여러 파일 속성을 통해 파일을 식별하라
___FIO06-C. 적절한 접근 권한으로 파일을 생성하라
___FIO07-C. rewind(`)보다 fseek(`)을 사용하라
___FIO08-C. 열린 파일에 대해 remove(`)를 호출할 때 주의하라
___FIO09-C. 시스템 간에 바이너리 데이터를 전송할 때는 주의하라
___FIO10-C. rename(`) 함수를 사용할 때는 주의하라
___FIO11-C fopen(`)의 모드 매개변수를 지정할 때 주의하라
___FIO12-C. setbuf(`)보다 setvbuf(`)를 사용하라
___FIO13-C. 방금 읽은 한 개의 문자 외의 것을 다시 넣지 마라
___FIO14-C. 파일 스트림에서 텍스트 모드와 바이너리 모드의 차이를 이해하라
___FIO15-C. 파일 연산이 안전한 디렉토리에서 수행되고 있음을 보장하라
___FIO16-C. jail을 만들어 파일 접근을 제한하라
___FIO30-C. 포맷 문자열에서 사용자 입력을 배제하라
___FIO31-C. 동시에 같은 파일을 여러 번 열지 마라
___FIO32-C. 파일에만 적용 가능한 연산을 장치에 대해 수행하지 마라
___FIO33-C. 정의되지 않은 동작을 초래하는 입출력 에러를 발견하고 처리하라
___FIO34-C. 문자 I/O 함수의 반환 값을 캡처할 때는 int를 사용하라
___FIO35-C. sizeof(int) == sizeof(char)일 때는 EOF나 파일 에러를 찾기 위해 feof(`)와 ferror(`)를 사용하라
___FIO36-C. fgets(`)를 사용할 때 개행문자가 읽힌다고 가정하지 마라
___FIO37-C. 문자 데이터를 읽었다고 가정하지 마라
___FIO38-C. 입출력 FILE 객체를 복사해 사용하지 마라
___FIO39-C. 플러시나 위치 조정 함수 호출 없이 스트림으로부터 입출력을 교대로 수행하지 마라
___FIO40-C. fgets(`) 실패 시 문자열을 리셋하라
___FIO41-C. 부수 효과가 있는 스트림 인자로 getc(`)나 putc(`)를 호출하지 마라
___FIO42-C. 더 이상 필요 없어진 파일이 적절히 닫혔는지 확인하라
___FIO43-C. 공유 디렉토리에 임시 파일을 생성하지 마라
___FIO44-C. fsetpos(`)에는 fgetpos(`)에서 반환된 값만 사용하라

| 11장 | 환경(ENV)
___ENV00-C. getenv(`)에서 반환한 문자열을 가리키는 포인터를 저장하지 마라
___ENV01-C. 환경변수의 크기를 함부로 가정하지 마라
___ENV02-C. 이름이 같은 여러 개의 환경변수가 존재할 수 있음을 알아두자
___ENV03-C. 외부 프로그램을 호출할 때는 환경변수를 정리하라
___ENV04-C. 커맨드 프로세서가 필요하지 않다면 system(`)을 호출하지 마라
___ENV30-C. getenv(`)가 반환한 문자열을 수정하지 마라
___ENV31-C. 환경변수의 값을 무효화할 수 있는 연산을 수행했다면 더 이상 그 값에 의존하지 마라
___ENV32-C. atexit 핸들러는 반환 외의 방법으로 종료돼선 안 된다

| 12장 | 시그널(SIG)
___SIG00-C. 인터럽트될 수 없는 시그널 핸들러로 처리되는 시그널을 마스크하라
___SIG01-C. 구현마다 다른 시그널 핸들러의 지속성에 대한 세부사항을 이해하라
___SIG02-C. 일반적인 기능을 구현하는 경우에는 시그널의 사용을 피하라
___SIG30-C. 시그널 핸들러에서는 비동기적으로 안전한 함수만 호출하라
___SIG31-C. 시그널 핸들러에서 공유 객체에 접근하거나 수정하지 마라
___SIG32-C. 시그널 핸들러 안에서 longjmp(`)를 호출하지 마라
___SIG33-C. raise(`) 함수를 재귀적으로 호출하지 마라
___SIG34-C. 인터럽트 가능한 시그널 핸들러 안에서 signal(`)을 호출하지 마라

| 13장 | 에러 처리(ERR)
___ERR00-C. 일관되고 이해할 수 있는 에러 처리 정책을 적용하고 구현하라
___ERR01-C. FILE 스트림 에러 체크 시 errno보다 ferror(`)를 사용하라
___ERR02-C. in-band 에러 표시자를 피하라
___ERR03-C. TR 24731-1에 정의된 함수를 호출할 때는 런타임 지정 핸들러를 사용하라
___ERR04-C. 적절한 종료 방법을 선택하라
___ERR05-C. 애플리케이션 독립적인 코드는 별도의 에러 처리 설명이 없는 에러 감지 코드를 제공해야 한다
___ERR06-C. assert(`)와 abort(`)의 종료 시 동작을 이해하라
___ERR30-C. errno를 사용하는 라이브러리 함수를 호출하기 전에 errno 값을 0으로 설정하고, 함수가 에러를 의미하는 값을 반환했을 때는 errno 값을 체크하라
___ERR31-C. errno를 재정의하지 마라
___ERR32-C. 애매한 errno 값에 의존하지 마라

| 14장 | 기타(MSC)
___MSC00-C. 컴파일 시 높은 경고 메시지 옵션을 줘라
___MSC01-C. 논리적으로 완전해지도록 노력하라
___MSC02-C. 실수로 누락하지 않도록 하라
___MSC03-C. 실수로 추가하지 않도록 하라
___MSC04-C. 주석은 일관되고 가독성 있게 사용하라
___MSC05-C. time_t 타입 값을 직접 조작하지 마라
___MSC06-C. 중요한 데이터를 다룰 때는 컴파일러 최적화를 고려하라
___MSC07-C. 죽은 코드를 찾아 제거하라
___MSC08-C. 라이브러리 함수는 자신의 매개변수를 검증해야 한다
___MSC09-C. 문자 인코딩: 안전을 위해 ASCII의 부분집합을 사용하라
___MSC10-C. 문자 인코딩: UTF-8 관련 이슈
___MSC11-C. 어썰션을 사용한 부적절한 진단 테스트
___MSC12-C. 아무 효과도 없는 코드를 찾아 제거하라
___MSC13-C. 사용되지 않는 값을 찾아 제거하라
___MSC14-C. 불필요하게 플랫폼 의존성을 끌어들이지 마라
___MSC15-C. 정의되지 않은 동작에 의존하지 마라
___MSC30-C. 의사난수를 만들기 위해 rand(`) 함수를 사용하지 마라
___MSC31-C. 반환 값이 적절한 타입으로 비교되는지 보장하라

| 부록 | POSIX(POS)
___POS00-C. 멀티스레드의 경쟁 상태를 피하라
___POS01-C. 링크의 유무를 확인하라
___POS02-C. 가장 적은 권한의 원리를 따르라
___POS30-C. readlink(`) 함수를 알맞게 사용하라
___POS31-C. 다른 스레드 뮤텍스를 잠금해제하거나 없애지 마라
___POS32-C. 멀티스레드 환경에서 비트 필드를 사용할 때는 뮤텍스를 도입하라
___POS33-C. vfork(`)를 사용하지 마라
___POS34-C. putenv(`)에 자동 변수에 대한 포인터를 인자로 전달하지 마라
___POS35-C. 심볼릭 링크를 체크할 때 교착 상태를 피하라
___POS36-C. 권한을 취소할 때 해제 순서가 올바른지 확인하라
___POS37-C. 권한 취소가 성공적으로 수행됐는지 보장하라


『보안 전문가와 아이폰 개발자를 위한 iOS 해킹과 방어』

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와 인터페이스로 연결
___악성 코드 삽입
______코드삽입 페이로드
______디버거로 코드 삽입
___동적 링커를 사용한 삽입
______영구적인 장치 감염
___요약

9장 트래픽 하이재킹하기
___APN 하이재킹
______페이로드 설치
______제거
___간단한 프록시 설정
___SSL 공격
______SSLStrip
______파로스 프록시
______브라우저 경고
___애플리케이션 수준의 SSL 검증 공격
______SSL 공격 페이로드
___파운데이션 HTTP 클래스 하이재킹
______포스트 공격 페이로드
___데이터 분석
___드리프트넷
______빌드
______실행
___연습문제
___요약

2부 방어

10장 암호화 구현
___암호 강도
______무작위 암호 생성기를 조심하자
___커먼 크립토 라이브러리
______무상태형 연산
______상태유지형 암호화
___마스터 키 암호화
___위치 기반 암호화
______암호를 결합한 위치 기반 암호화
___별도의 서버 측 키
___메모리 보호
______메모리 완전 삭제
___공개 키 암호화
___연습문제
11장 포렌식 대비책
___보안 완전 삭제
______DOD 5220.22-M 완전 삭제
______오브젝티브C
___SQLite 레코드 완전 삭제
___키보드 캐시
___숫자 입력 패드 무작위화
___애플리케이션 스크린샷

12장 런타임 보호
___변조 대응
______사용자 데이터 완전 삭제
______네트워크 접속 비활성화
______서버 보고
______로깅 활성화
______미끼와 킬 스위치
___프로세스 추적 검사
___디버거 차단
___런타임 클래스 무결성 검사
______주소 공간 검증
___인라인 함수
___디스어셈블링 복잡도 높이기
______최적화 플래그
______스트립
______뺑뺑이를 돌리자! -funroll-loops
___연습문제

13장 탈옥 탐지
___샌드박스 무결성 검사
___파일시스템 검사
______탈옥 파일 존재 여부
______/etc/fstab의 크기
______심볼릭 링크 검사
___페이지 실행 검사

14장 다음 단계
___공격자의 입장에서 생각해보자
___책에서 다루지 않은 리버스 엔지니어링 툴
___보안 vs 코드 관리
___보안을 대하는 유연한 자세
___그 밖의 훌륭한 책


『Ajax 보안』

1장 Ajax 보안 소개
___Ajax 첫걸음
______Ajax란 무엇인가?
______비동기 방식
______자바스크립트
______XML
______DHTML(다이내믹 HTML)
___Ajax 아키텍처로의 패러다임 전환
______무거운 클라이언트 아키텍처
______가벼운 클라이언트 아키텍처
______Ajax: 아키텍처계의 금발 미녀
______보안 관점에서 본 무거운 클라이언트 애플리케이션
______보안 관점에서 본 가벼운 클라이언트 애플리케이션
______보안 관점에서 본 Ajax 애플리케이션
___보안 취약점의 재앙
______복잡도, 투명성 그리고 규모의 확장
______사회학적인 이슈
______Ajax 애플리케이션: 매력적인 전략 목표
___결론

2장 보이지 않는 도둑
___이브
___HighTechVacations.net 해킹
______쿠폰 시스템 해킹
______클라이언트단 데이터 바인딩 공격
______Ajax API 공격
___보이지 않는 도둑

3장 웹 공격
___공격의 종류
______리소스 열거
______파라미터 조작
___그 밖의 공격 방법
______크로스 사이트 요청 변조
______피싱
______서비스 거부 공격
___리소스 열거와 파라미터 조작으로부터 보호하라
______보안 소켓 계층
___결론

4장 Ajax 공격 영역
___공격 영역의 이해
___전통적인 웹 애플리케이션 공격 영역
______폼 입력
______쿠키
______헤더
______숨겨진 폼 입력
______쿼리 파라미터
______업로드 파일
___전통적인 웹 애플리케이션 공격: 성적표
___웹 서비스 공격 영역
______웹 서비스 메소드
______웹 서비스 정의
___Ajax 애플리케이션 공격 영역
______Ajax 애플리케이션 공격 영역의 근원
______해커에게 최고의 먹잇감
___적절한 입력 확인
______블랙리스트와 특별 조치의 문제
______병 대신 병의 징후 다루기
______화이트리스트 입력 검증
______정규 표현
______입력 검증에 대한 숙고
___리치 사용자 입력 검증
______마크업 언어 검증
______이진 파일 검증
______자바스크립트 소스코드 검증
______시리얼라이즈 데이터 검증
___사용자 지원 콘텐츠의 신화
___결론

5장 Ajax 코드 복잡도
___다양한 언어와 구조
______배열 인덱싱
______스트링 연산
______코드 주석
______다른 사람의 문제
___자바스크립트와 관련하여
______인터프리트, 컴파일이 아니야
______약한 타입 체크
___비동기
______경쟁 상태
______데드락과 철학자의 식사 문제
______클라이언트단 동기화
___누구의 조언을 듣느냐가 중요하다
___결론

6장 Ajax 애플리케이션의 투명성
___블랙박스와 화이트박스
______예: MyLocalWeatherForecast.com
______예: MyLocalWeatherForecast.com을 'Ajax'로
______비교
___API로서의 웹 애플리케이션
______데이터 타입과 메소드 시그너처
___보안과 관련한 특정 오판
______부당한 인증
______기능이 나뉜 서버 API
______자바스크립트에서의 세션 상태 저장
______민감한 정보가 사용자에게 노출될 때
______클라이언트단 코드에 있는 주석과 문서화
______클라이언트단에서 수행하는 데이터 변환
___모호함을 통한 보안
______난독화
___결론

7장 Ajax 애플리케이션 하이재킹
___Ajax 프레임워크의 하이재킹
______실수로 인한 함수 덮어쓰기
______함수 덮어쓰기의 예
___주문형 Ajax의 하이재킹
___JSON API의 하이재킹
______객체 리터럴의 하이재킹
______JSON 하이재킹이 가능한 이유
______JSON 하이재킹을 막자
___결론

8장 클라이언트단 스토리지 공격
___클라이언트단 스토리지 시스템 개관
______일반적인 클라이언트단 스토리지 보안
___HTTP 쿠키
______쿠키 접근 제어 규칙
______HTTP 쿠키의 저장용량
______쿠키의 생존시간
______쿠키 스토리지에 대한 추가 기억사항
______쿠키 스토리지 요약
___플래시 로컬 공유 객체
______플래시 로컬 공유 객체 요약
___DOM 스토리지
______세션 스토리지
______글로벌 스토리지
______DOM 스토리지의 구멍
______DOM 스토리지 보안
______DOM 스토리지 요약
___인터넷 익스플로러 userData
______보안 요약
___일반적인 클라이언트단 스토리지 공격법과 대처법
______크로스 도메인 공격
______크로스 디렉토리 공격
______크로스 포트 공격
___결론

9장 오프라인 Ajax 애플리케이션
___오프라인 Ajax 애플리케이션
___구글 기어
______자체 보안 기능과 구글 기어의 단점
______작업풀의 이용
______LocalServer 데이터의 노출과 감염
______구글 기어 데이터베이스로의 직접 접근
______SQL 인젝션과 구글 기어
______클라이언트단 SQL 인젝션도 위험한가?
___Dojo.Offline
______키를 안전하게 보호하자
______데이터를 안전하게 보호하자
______패스워드의 선택이 멋진 키를 좌우한다
___클라이언트단 입력을 검증하자
___오프라인 애플리케이션에 대한 그 밖의 접근법
___결론

10장 요청 출처 이슈
___로봇, 스파이더, 브라우저, 크롤러
______안녕, 내 이름은 파이어폭스야. 청크화된 인코딩, PDF도
______좋아하고 해변에서 오랫동안 산책하는 것도 좋아해
___요청 출처 불확정성과 자바스크립트
______웹 서버 관점에서 본 Ajax 요청
______당신일까, 당신을 가장한 누구일까
______자바스크립트로 HTTP 요청 보내기
______pre-Ajax 세계에서의 자바스크립트 HTTP 공격
______XMLHttpRequest로 콘텐츠 사냥하기
______XSS/XHR 조합 공격
___방어
___결론

11장 웹 매시업과 애그리게이터
___머신에서 활용하는 인터넷 데이터
______90년대 초기: 웹의 시대가 오다
______90년대 중반: 머신 웹의 탄생
______2000년대: 머신 웹의 성숙기
______공개적으로 사용 가능한 웹 서비스
___매시업: 웹의 프랑켄슈타인
______ChicagoCrime.org
______HousingMaps.com
______그 밖의 매시업
___매시업 생성3
______매시업과 Ajax
___브리지, 프록시, 게이트웨이 - 이런!
______Ajax 프록시 대안
___Ajax 프록시 공격
______HousingMaps.com?
___매시업의 입력 검증
___애그리게이트 사이트
___보안과 신뢰가 떨어지는 상황
___결론

12장 프리젠테이션 계층에 대한 공격
___프리젠테이션의 콘텐츠 괴롭히기
___프리젠테이션 계층에 대한 공격
___CSS에서 정보 가져오기
___해킹의 룩앤필
______발전된 형태의 해킹 룩앤필
___삽입된 프로그램 로직
___CSS 요소
______브라우저 캐시 수정
___프리젠테이션 계층 공격 방지
___결론

13장 자바스크립트 웜
___자바스크립트 웜 개요
______기존의 컴퓨터 바이러스
______자바스크립트 웜
___자바스크립트 웜의 구성
______자바스크립트의 한계
______자바스크립트 웜의 복제
______자바스크립트 웜 실행부
______중간 정리
___사례 연구: 새미 웜
______어떻게 동작하는가
______바이러스 실행부
______새미 웜에 대한 결론
___사례 연구: 야매너 웜(JS/Yamanner-A)
______어떻게 동작하는가
______바이러스 실행부
______야매너 웜에 대한 결론
___실제 자바스크립트 웜에서 배우는 교훈
___결론

14장 Ajax 애플리케이션 테스트
___블랙 매직
___모든 사람이 웹 브라우저를 이용해 웹 서핑을 하는 것은 아니다.
______Catch-22
___보안 테스트 도구 - 생각만큼 멋지지는 않군요
______사이트 목록 생성
______취약점 탐지
______분석 도구: Sprajax
______분석 도구: Paros Proxy
______분석 도구: LAPSE
______분석 도구: WebInspect™
___보안 테스트에 대한 숙고

15장 Ajax 프레임워크 분석
___ASP.NET
______ASP.NET AJAX(이전에 ATLAS)
______ScriptService
______보안성 비교: UpdatePanel과 ScriptService
______ASP.NET AJAX와 WSDL
______ValidateRequest
______ViewStateUserKey
______ASP.NET 환경설정과 디버깅
___PHP
______Sajax
______Sajax와 크로스 사이트 요청 변조
___Java EE
______DWR
___자바스크립트 프레임워크
______클라이언트단 코드에서 주의할 사항
______Prototype

___결론

부록 A 새미 웜 소스코드
부록 B 야매너 웜 소스코드


『웹 애플리케이션 해킹 대작전』
1장 웹이 특별한 이유
___1장에서 다루는 내용
___개요
___월드와이드웹
___웹 유토피아의 가치
___웹과 클라이언트/서버
___웹 애플리케이션을 위한 결함 모델
______웹 서버
______웹 클라이언트
______네트워크
______결론


2장 목표물에 대한 정보 수집
___2장에서 다루는 내용
___개요
______공격 사금 채취
______공격 파일과 디렉토리 추정
______공격 예제 애플리케이션의 보안 취약점

3장 클라이언트 공격
___3장에서 다루는 내용
___개요
______공격 입력 선택 제한 회피
______공격 클라이언트에서의 검증 회피

4장 상태 기반 공격
___4장에서 다루는 내용
___개요
______공격 숨은 필드
______공격 CGI 인자
______공격 쿠키 조작
______공격 URL 건너뛰기
______공격 세션 가로채기

5장 사용자 입력 데이터 공격
___5장에서 다루는 내용
___개요
______공격 크로스 사이트 스크립팅
______공격 SQL 삽입
______공격 디렉토리 노출

6장 언어 기반 공격
___6장에서 다루는 내용
___개요
______공격 버퍼 오버플로우
______공격 정규화
______공격 널 문자열 공격

7장 서버 공격
___7장에서 다루는 내용
___개요
______공격 SQL 삽입 II - 저장 프로시저
______공격 명령 삽입
______공격 핑거프린팅 공격
______공격 서비스 거부

8장 인증
___8장에서 다루는 내용
___개요
______공격 암호 해독
______공격 인증 파괴
______공격 크로스 사이트 트레이싱
______공격 암호 기법 약화시키기

9장 프라이버시
___9장에서 다루는 내용
___개요
___사용자 에이전트
___리퍼러
___쿠키
___웹 버그
___클립보드 접근
___페이지 캐싱
___액티브X 컨트롤
___브라우저 헬퍼 오브젝트

10장 웹 서비스
___10장에서 다루는 내용
___개요
___웹 서비스란?
______XML
______SOAP
______WSDL
______UDDI
___위협
______WSDL 스캔 공격
______인자 조작
______XPATH 삽입 공격
______재귀 페이로드 공격
______대형 페이로드 공격
______외부 객체 공격

부록 A 소프트웨어 년: 소프트웨어 품질을 위한 핵심 요소
___1950~1959: 기원
___1960~1969: 대이동
___1970~1979: 혼돈의 시대
___1980~1989: 회복기
______CASE 툴
______정형 기법
___1990~1999: 프로세스
___2000~2009: 엔지니어링

부록 B Flowershop 버그

부록 C 툴
___TextPad
___Nikto
___Wikto
___Stunnel
___BlackWidow
___Wget
___cURL
___Paros
___SPIKE Proxy
___SSLDigger
___인간의 두뇌

저자소개

마이크 앤드류스 (지은이)    정보 더보기
소프트웨어 보안 전문가로, Foundstone의 선임 컨설턴트로서 재직 중이며 웹 애플리케이션 보안 평가와 Ultimate Web Hacking 교육을 담당하고 있다.
펼치기
제임스 A. 휘태커 (지은이)    정보 더보기
플로리다 공과대학의 컴퓨터공학과 교수로서 Security Innovation의 설립자이기도 하다. 지은 책으로 <How to Break Software Security&t;, <How to Break Software> 등이 있다.
펼치기
빌리 호프만 (지은이)    정보 더보기
HP 보안 연구소의 수석 보안 연구원으로, 웹 애플리케이션의 취약점을 자동으로 발견해주는 기술에 일가견이 있다. 블랙 햇, RSA, 툴콘(Toorcon), 쉬무콘(Shmooncon), 인포섹(Infosec)과 AJAXWorld 같은 컨퍼런스의 단골 발표자이며, FBI에서 초청 강연도 했다.
펼치기
브라이언 설리번 (지은이)    정보 더보기
HP 소프트웨어의 애플리케이션 보안 센터 부서의 소프트웨어 개발 매니저로서 일하고 있다. HP에 오기 전, SPI 다이내믹에서 책임연구원으로서 DevInspect를 만들었다. 이 프로그램은 웹 애플리케이션의 보안 취약점을 체계적으로 점검을 하는 데 탁월한 성능을 보이고 있다. 브라이언은 산업 현장의 현안을 AJAXWorld, 블랙 햇, RSA에서 발표하고 있다.
펼치기
조나단 지드자스키 (지은이)    정보 더보기
iOS 개발 커뮤니티에서 '너브가스(NerveGas)'라는 해커로 더 유명하다. 아이폰 해킹 분야에서의 조나단의 작업은 오픈소스 애플리케이션이 최초로 아이폰에 포팅되는 데 크게 기여했고, 그가 쓴 책인 『아이폰 오픈 애플리케이션 개발(iPhone Open Application Development)』은 애플이 SDK를 발표하기 오래 전부터 개발자들이 아이폰 애플리케이션을 개발할 수 있게 해줬다. 조나단은 『아이폰 SDK 애플리케이션 개발』(에이콘출판, 2010), 『아이폰 포렌식』 등의 책도 집필했다. 현재 전세계적으로 2,000개가 넘는 법 집행 기관을 돕고 있으며 iOS 장치에서 범죄 사건의 증거를 수집할 때 사용할 수 있는 iOS 포렌식 이미징 툴 스위트도 배포하고 있다. 조나단은 종종 법 집행 기관을 컨설팅하고 교육하며 포렌식 조사관의 수사를 돕는다. 조나단의 전업은 바이어 포렌식(Via Forensics)의 수석 포렌식 과학자며 주로 기업 고객의 iOS 애플리케이션을 대상으로 침투 테스트를 수행한다.
펼치기
로버트 C. 시코드 (지은이)    정보 더보기
NCC 그룹의 기술 이사로 C, C++ 및 다른 언어의 시큐어 코딩을 개발하고 가르친다. C 프로그래밍 언어의 국제 표준화 작업 그룹인 ISO/IEC JTC1/SC22/WG14의 전문가이기도 하다. 또한, 『CERT C 프로그래밍 2/e』(에이콘출판, 2022)와 『(개정판) C & C++ 시큐어 코딩』(에이콘출판, 2015), 『자바 시큐어 코딩 가이드라인』(인피니티북스, 2017) 등의 다른 책도 저술했다. 소프트웨어 보안과 구성 요소 기반 소프트웨어 엔지니어링, 웹 기반 시스템 설계, 레거시 시스템 현대화, 구성 요소 저장소 및 검색 엔진 그리고 사용자 인터페이스 설계 및 개발에 관한 50편 이상의 논문도 발표했다.
펼치기
윤근용 (옮긴이)    정보 더보기
시스템 프로그래머로서 시스템에 대한 다양한 분야에 관심이 많으며, 특히 보안 분야에 관심이 많아 다년간 보안 업무에 종사 중이다. 바이러스 보안업체를 거쳐 현재는 네이버에서 보안 관련 프로젝트를 수행 중이다. 에이콘출판사에서 펴낸 『웹 애플리케이션 해킹 대작전』, 『실전 해킹 절대 내공』, 『루트킷』, 『리버싱』, 『파이썬 해킹 프로그래밍』, 『안드로이드 포렌식』, 『해커의 공격 기술』을 번역했다.
펼치기
윤평호 (옮긴이)    정보 더보기
설계와 개발을 시작으로 제품 상용화와 유지 보수를 포함한 소프트웨어 개발의 전체 프로세스를 진행했다. 현재 PKI시스템 개발과 컨설팅을 진행하며, 보안과 표준에 관심이 많고 새로운 것에 도전하기 좋아하는 개발자다.
펼치기
현동석 (옮긴이)    정보 더보기
마이크로소프트 본사에서 분산 저장소와 코타나 서비스를 개발하다 귀국해 네이버 검색 시스템의 가시화 프로젝트를 진행 중이다. 개발과 디자인이 함께 어우러져 진행되는 일에 관심이 많으며 단순함과 간결함을 절대 포기하면 안 되는 미덕으로 여기는 개발자다. 에이콘출판사에서 펴낸 『버그 없는 안전한 소프트웨어를 위한 CERT C 프로그래밍』(2010)을 번역했고, 『구글 개발자가 들려주는-HTML5 활용』(2010)을 공역했다.
펼치기
이 포스팅은 쿠팡 파트너스 활동의 일환으로,
이에 따른 일정액의 수수료를 제공받습니다.
이 포스팅은 제휴마케팅이 포함된 광고로 커미션을 지급 받습니다.
도서 DB 제공 : 알라딘 서점(www.aladin.co.kr)
최근 본 책