서브메뉴
검색
본문
Powered by NAVER OpenAPI
-
C & C++ 시큐어 코딩 (버그 없는 안전한 소프트웨어를 위한)
저자 : 로버트 시코드
출판사 : 에이콘출판
출판년 : 2015
정가 : 45000, ISBN : 9788960776548
책소개
이 책은 소프트웨어 취약점의 근본 원인을 설명하고 침투를 막기 위해 취할 수 있는 대책을 알려준다. 더욱이 이 책을 통해 프로그래머는 당장 오늘만이 아니라 미래의 공격으로부터 소프트웨어를 보호하는 최상의 보안 업무 채택과 보안 사고 방식을 발전시킬 수 있다. 로버트 시코드는 CERT 보고서와 결론을 활용해 프로그램 에러가 대부분 보안 구멍이 되는 것을 체계적으로 확인하고, 그 보안 구멍이 어떻게 무단 이용될 수 있는지를 보이며, 가능한 결과를 고찰해보고 안전한 방법을 내놓는다. 이 책에는 윈도우와 리눅스에서 구현한 수백 개의 안전한 코드, 불안전한 코드, 익스플로잇 예제가 들어있다. 안전한 C 또는 C++ 소프트웨어를 만들(또는 안전하게 지킬) 책임이 있다면 이 책에서 가장 자세하고 전문적인 지원을 얻을 수 있다.
목차
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 참고 자료