이미 소장하고 있다면 판매해 보세요.
|
1장. 가위들고 뛰기
1.1 위협 알아보기 __손실 비용은 얼마인가? __누가 위협하는가? __소프트웨어 보안 1.2 보안 개념 __보안 정책 __보안 결함 __취약점 __익스플로잇 __완화 1.3 C와 C++ __간략한 역사 __C 언어에서의 문제점 __레거시 코드 __기타 언어 1.4 개발 플랫폼 __운영체제 __컴파일러 1.5 정리 1.6 추가 참고 자료 2장. 문자열 2.1 문자열 __문자열 데이터 형 __UTF-8 __확장 문자열 __문자열 리터럴 __C++에서의 문자열 __문자형 __int __unsigned char __wchar_t __문자열 크기 지정 2.2 일반 문자열 처리 에러 __길이 제한 없는 문자열 복사 __1바이트 오버플로 에러 __null 종료 에러 __문자열 잘림 __함수 없이 발생하는 문자열 에러 2.3 문자열 취약점과 익스플로잇 __오염된 데이터 __보안 결함: IsPasswordOK __버퍼 오버플로 __프로세스 메모리 조직 __스택 관리 __스택 스매싱 __코드 인젝션 __아크 인젝션 __복귀 지향 프로그래밍 2.4 문자열에 대한 완화 전략 __문자열 처리 __C11 Annex K 경계 점검 인터페이스 __동적 할당 함수 __C++ std::basic_string __문자열 객체 참조의 무효화 __basic_string 사용에서의 기타 일반적 실수 2.5 문자열 처리 함수 __gets() __C99 __C11 Annex K 경계 점검 인터페이스: gets_s() __동적 할당 함수 __strcpy()와 strcat() __C99 __strncpy()와 strncat() __memcpy()와 memmove() __strlen() 2.6 런타임 방지 전략 __검출과 복구 __입력 유효화 __객체 크기 점검 __비주얼 스튜디오 컴파일러가 생성하는 런타임 점검 __스택 카나리아 __스택 스매싱 프로텍터(프로폴리스) __운영체제 전략 __검출과 복구 __비실행 스택 __W^X __PaX __향후 방향 2.7 주목할 만한 취약점 __원격 로그인 __커버로스 2.8 정리 2.9 추가 참고 자료 3장. 포인터 변조 3.1 데이터 위치 3.2 함수 포인터 3.3 객체 포인터 3.4 명령 포인터 수정 3.5 전역 오프셋 테이블 3.6 .dtors 섹션 3.7 가상 포인터 3.8 atexit()와 on_exit() 함수 3.9 longjmp() 함수 3.10 예외 처리 __구조적 예외 처리 __시스템 기본 예외 처리 3.11 완화 전략 __스택 카나리아 __W^X __함수 포인터의 인코딩/디코딩 3.12 정리 3.13 추가 참고 자료 4장. 동적 메모리 관리 4.1 C 메모리 관리 __C 표준 메모리 관리 함수 __정렬 __alloca()과 가변 크기 배열 4.2 일반적인 C 메모리 관리 에러 __초기화 에러 __반환 값 점검 생략 __Null이나 부적절한 포인터의 역참조 __해제된 메모리 참조 __메모리의 여러 번 해제 __메모리 누수 __0 길이 할당 __DR #400 4.3 C++ 동적 메모리 관리 __할당 함수 __할당 해제 함수 __가비지 콜렉션 4.4 일반적인 C++ 메모리 관리 에러 __할당 실패를 올바로 처리 못함 __짝이 잘못된 메모리 관리 함수 __메모리 여러 번 해제 __할당 해제 함수의 예외 처리 4.5 메모리 관리자 4.6 더그 리의 메모리 할당자 __힙에서의 버퍼 오버플로 4.7 이중 해제 취약점 __해제된 메모리에 쓰기 __RtlHeap __버퍼 오버플로(리덕스) 4.8 완화 전략 __Null 포인터 __일관성 있는 메모리 관리 습관 __phkmalloc __무작위화 __OpenBSD __jemalloc 메모리 관리자 __정적 분석 __런타임 분석 도구 4.9 중요한 취약점 __CVS 버퍼 오버플로 취약점 __마이크로소프트 데이터 액세스 컴포넌트(MDAC) __CVS 서버의 이중 해제 __MIT 커버로스 5의 취약점 4.10 정리 5장. 정수 보안 5.1 정수 보안 소개 5.2 정수 데이터 형 __부호 없는 정수형 __랩어라운드 __부호 있는 정수형 __부호 있는 정수형의 범위 __정수 오버플로 __문자형 __데이터 모델 __기타 정수형 5.3 정수 변환 __정수 변환 __정수 변환 순위 __정수 프로모션 __보통의 산술 변환 __부호 없는 정수형의 변환 __부호 있는 정수형의 변환 __암시적 변환 5.4 정수 연산 __대입 __덧셈 __뺄셈 __곱셈 __나눗셈과 나머지 __시프트 5.5 정수 취약점 __취약점 __랩어라운드 __변환과 잘림 에러 __예외가 아닌 정수 로직 에러 5.6 완화 전략 __정수형 선택 __추상 데이터 형 __임의 정확 연산 __범위 점검 __선행 조건과 후행 조건 검사 __시큐어 정수 라이브러리 __오버플로 검출 __컴파일러가 생성한 런타임 검사 __입증 가능한 범위 내 연산 __AIR 정수 모델 __검사와 분석 5.7 정리 6장. 형식화된 출력 6.1 배리어딕 함수 6.2 형식화된 출력 함수 __형식 문자열 __GCC __비주얼 C++ 6.3 형식화된 출력 함수 공격 __버퍼 오버플로 __출력 스트림 __프로그램의 비정상적 종료 __스택 내용 보기 __메모리 내용 보기 __메모리 덮어쓰기 __국제화 __확장 문자 형식 문자열 취약점 6.4 스택 무작위화 __스택 무작위화 없애기 __두 개의 워드로 주소 기록 __직접 인자 접근 6.5 완화 전략 __형식 문자열에서 사용자 입력 배제 __정적 내용의 동적 사용 __기록될 바이트 제한 __C11 Annex K 경계 점검 인터페이스 __iostream과 stdio __검사 __컴파일러 점검 __정적 오염 분석 __배리어딕 함수 구현 수정 __Exec 실드 __포맷가드 __정적 바이너리 분석 6.6 주목할 만한 취약점 __워싱턴 대학의 FTP 데몬 __CDE 툴토크 __이터캡 버전 NG-0.7.2 6.7 정리 6.8 추가 참고 자료 7장. 동시성 7.1 멀티스레딩 7.2 병렬 처리 __데이터 병렬 처리 __작업 병렬 처리 7.3 성능 목표 __암달의 법칙 7.4 일반적인 에러 __경합 상태 __손상된 값 __휘발성 객체 7.5 완화 전략 __메모리 모델 __동기화 기본 연산 __스레드 역할 분석(연구) __불변 데이터 구조 __현재 코드 성질 7.6 완화 함정 __교착 상태 __일찍 해제한 잠금 __쟁탈 __ABA 문제 7.7 주목할 만한 취약점 __멀티코어 DRAM 시스템에서의 DoS 공격 __시스템 호출 래퍼에서의 동시성 취약점 7.8 정리 8장. 파일 I/O 8.1 파일 I/O 기본 __파일 시스템 __특수 파일 8.2 파일 I/O 인터페이스 __데이터 스트림 __파일 열고 닫기 __POSIX __C++에서의 파일 I/O 8.3 접근 제어 __유닉스 파일 권한 __프로세스 특권 __특권 변경 __특권 관리 __권한 관리 8.4 파일 식별 __디렉토리 이동 __동일 에러 __심볼릭 링크 __정규화 __하드 링크 __장치 파일 __파일 속성 8.5 경합 상태 __점검 시간, 사용 시간 __교체 없이 생성 __배타적 접근 __공유 디렉토리 8.6 완화 전략 __경합 윈도우 닫기 __경합 객체 제거 __경합 객체에 대한 접근 제어 __경합 검출 도구 8.7 정리 9장. 권고 관행 9.1 보안 개발 생명주기 __TSP 시큐어 __계획과 추적 __품질 관리 9.2 보안 훈련 9.3 요구 사항 __시큐어 코딩 표준 __보안 품질 요구 공학 __유즈/미스유즈 케이스 9.4 설계 __시큐어 소프트웨어 개발 원칙 __위협 모델링 __공격면 분석 __기존 코드의 취약점 __시큐어 래퍼 __입력 검증 __신뢰 경계 __블랙리스팅 __화이트리스팅 __검사 9.5 구현 __컴파일러 보안 기능 __무한 범위 정수 모델 __안전한 시큐어 C/C++ __정적 분석 __소스코드 분석 실험기 __철저한 방어 9.6 검증 __정적 분석 __침투 테스팅 __퍼즈 검사 __코드 감사 __개발자 지침과 점검표 __독립 보안 리뷰 __공격면 리뷰 9.7 정리 9.8 참고 자료 |
|
★ 이 책에서 다루는 내용 ★
■ C나 C++ 애플리케이션의 전체 보안을 향상시킬 수 있는 방법 ■ 불안전한 조작 로직을 무단 이용하는 버퍼 오버플로, 스택 스매싱, 반환 지향적 프로그래밍 공격 등을 무력화시킬 방법 ■ 동적 메모리 관리 함수의 잘못된 사용으로 발생하는 취약점과 보안 허점을 예방하는 방법 ■ 부호 정수 오버플로, 무부호 정수 래핑, 잘림 에러로 인해 발생하는 정수 관련 문제를 제거하는 방법 ■ 시큐어 I/O를 수행해 파일 시스템 취약점을 예방하는 방법 ■ 형식 문자열 취약점을 만들지 않고 형식화된 출력 함수를 올바르게 사용하는 방법 ■ 동시 발생 코드를 개발하는 동안에 경합 상태와 기타 무단 이용 가능한 취약점을 예방하는 방법 ■ C11와 C++11에 대한 내용 업데이트 ■ 문자열, 동적 메모리 관리, 정수 보안 관련 내용 업데이트 ■ 동시 발생에 대한 새로운 단원 추가 ★ 이 책의 대상 독자 ★ 이 책은 C와 C++로 소프트웨어 개발과 유지 보수에 종사하는 사람에게 유용하다. ■ C/C++ 프로그래머라면 소프트웨어 취약점이 되는 통상적인 프로그래밍 에러를 확인하고 이러한 에러가 어떻게 무단 이용되는지를 이해하며 안전 방식으로 해결책을 구현하는 방법을 알 수 있다. ■ 소프트웨어 프로젝트 관리자라면 소프트웨어 취약점의 중요성과 위험을 식별해 시큐어 소프트웨어 개발에 투자 해야 할지를 판단할 수 있다. ■ 컴퓨터공학과 학생이라면 나쁜 습관이 드는 것을 막아주며 프로 직업인이 돼서 시큐어 프로그램을 개발할 수 있는 프로그래밍 실기를 익힐 수 있다. ■ 보안 분석가라면 일상적인 취약점에 대해 세부적인 설명을 이해하고 이러한 취약점을 발견하는 방법을 알게 되며 실제적인 예방 전략을 익힐 수 있다. ★ 이 책의 구성 ★ 1장, '가위들고 뛰기'에서는 문제의 개략을 제공하고, 보안 용어와 개념을 소개하며 그토록 많은 취약점이 C와 C++ 프로그램에서 발견되는 이유를 알려준다. 2장, '문자열'에서는 C와 C++에서의 버퍼 오버플로와 스택 스매싱 같은 문자열 조작, 통상적인 보안 결함, 그 결과로 나타나는 취약점을 설명한다. 코드 인젝션과 아크 인젝션 익스플로잇을 모두 알아본다. 3장, '포인터 변조'에서는 공격자가 메모리의 어느 위치에서든 주소를 쓸 수 있는 임의 메모리 쓰기 익스플로잇을 소개하고, 이런 익스플로잇이 들어간 머신에서 임의 코드를 실행하는 데 사용될 수 있는 방법을 설명한다. 임의 메모리 쓰기로 발생한 취약점은 이후의 장에서 다룬다. 4장, '동적 메모리 관리'에서는 동적 메모리 관리를 설명한다. 동적으로 할당된 버퍼 오버플로, 해제된 메모리에 쓰기, 이중 해제 취약점을 설명한다. 5장, '정수 보안'에서는 정수 오버플로, 부호 에러, 잘림 에러 등의 필수 보안 문제(정수를 취급하는 보안 문제)를 다룬다. 6장, '형식화된 출력'에서는 형식화된 출력 함수의 적절하거나 부적절한 사용을 설명한다. 이들 함수의 부적절한 사용으로 인한 형식 문자열과 버퍼 오버플로 취약점 모두를 설명한다. 7장, '동시성'에서는 교착 상태, 경합 상태, 부적절한 메모리 접근 순서로 인해 발생하는 동시성과 취약점에 초점을 맞춘다. 8장, '파일 I/O'에서는 파일 I/O와 관련된 통상적인 취약점을 설명하는데, 여기에는 경합 상태와 TOCTOU 취약점이 포함된다. 9장, '권고 관행'에서는 C/C++ 애플리케이션의 전체 보안을 향상시키기 위해 특정 개발 관행을 권고한다. 이런 권고안은 특정 취약점 부류의 문제를 해결하기 위해 각 장에 있는 권장 사항들에 이어지는 것이다. |