장바구니 담기 close

장바구니에 상품을 담았습니다.

C & C++ 시큐어 코딩(컴퓨터/IT)

C & C++ 시큐어 코딩(컴퓨터/IT)

  • 로버트 시코드 지음 | 이승준 옮김
  • |
  • 에이콘출판
  • |
  • 2015-01-09 출간
  • |
  • 685페이지
  • |
  • 188 X 235 mm
  • |
  • ISBN 9788960776548
★★★★★ 평점(10/10) | 리뷰(1)
판매가

45,000원

즉시할인가

40,500

배송비

무료배송

(제주/도서산간 배송 추가비용:3,000원)

수량
+ -
총주문금액
40,500

※ 스프링제본 상품은 반품/교환/환불이 불가능하므로 신중하게 선택하여 주시기 바랍니다.

목차

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 접근 제어
__유닉스 파일 권한
__프로세스 특권
__특권 변경
__특권 관리 <

도서소개

★ 요약 ★

이 책은 소프트웨어 취약점의 근본 원인을 설명하고 침투를 막기 위해 취할 수 있는 대책을 알려준다. 더욱이 이 책을 통해 프로그래머는 당장 오늘만이 아니라 미래의 공격으로부터 소프트웨어를 보호하는 최상의 보안 업무 채택과 보안 사고 방식을 발전시킬 수 있다. 로버트 시코드는 CERT 보고서와 결론을 활용해 프로그램 에러가 대부분 보안 구멍이 되는 것을 체계적으로 확인하고, 그 보안 구멍이 어떻게 무단 이용될 수 있는지를 보이며, 가능한 결과를 고찰해보고 안전한 방법을 내놓는다. 이 책에는 윈도우와 리눅스에서 구현한 수백 개의 안전한 코드, 불안전한 코드, 익스플로잇 예제가 들어있다. 안전한 C 또는 C++ 소프트웨어를 만들(또는 안전하게 지킬) 책임이 있다면 이 책에서 가장 자세하고 전문적인 지원을 얻을 수 있다.

★ 추천의 글 ★
사회가 네트워크 소프트웨어 시스템에 의존할수록 이런 시스템을 겨냥한 공격 횟수는 나날이 증가했다. 또한 이런 공격(정부, 기업, 교육 기관, 개인이 대상)으로 중요 데이터의 파괴와 손상, 시스템 피해, 생산성 하락, 경제적 손실이 발생했다.

오늘날 인터넷에서 행해지는 공격의 대부분은 단순한 골칫거리 수준에서 끝나긴 하지만, 점점 범죄, 테러, 그 외의 악의적인 목적을 띠고 소프트웨어의 취약점을 노리는 일들이 점점 늘어나는 추세다. 최근 통계에 따르면 연간 4,000개 이상의 소프트웨어 취약점이 발견된다고 한다. 이런 취약점은 소프트웨어를 개발할 때 시스템 보호를 적절히 하지 않았거나 보안 결함을 제거하는 데 충분히 집중하지 못했기 때문에 발생한다.

취약점이 증가함에 따라 공격의 복잡성과 효율성도 꾸준히 발전했다. 침입자는 제품에서 발견된 취약점을 파고들 스크립트를 재빨리 개발했으며, 스크립트를 이용해 컴퓨터를 손상시키는 것은 물론, 다른 공격자들이 사용할 수 있게 스크립트를 공유하기까지 한다. 이렇게 공유된 스크립트를 활용한 프로그램이 만들어지면 취약점이 있는 시스템을 자동 검색해 공격하고 손상시키며, 그런 시스템들을 경유해 더 많은 시스템을 공격한다.

매년 막대한 수의 취약점이 발견되므로 관리자들은 기존 시스템을 패치하는 데 더욱 골머리를 앓고 있다. 패치 적용이 어려울 수 있고 예상치 못한 부작용이 있을지도 모른다. 업체가 보안 패치를 내놓은 후에 취약점이 있는 컴퓨터의 90~95%가 패치를 적용하기까지는 수개월, 심지어 수년이 걸릴 수 있다.

인터넷 사용자들은 공신력 있는 보안 관련 인터넷 커뮤니티에 크게 의존한다. 그러나 오늘날 그런 해결 방식은 점점 한계에 부딪히고 있다. 각각의 처리 조직이 절차를 능률적이고도 자동화하는 데 모두 열심이긴 하지만, 상용 소프트웨어 제품의 취약점 수가 너무 많아 아주 뛰어난 조직이 아니라면 이제 해결이 불가능한 수준에 와 있다.

대부분 제품에서 보안이 더 강화됐다고는 볼 수 없다. 즉, 많은 소프트웨어 개발자들은 취약점의 원인으로 얻은 교훈을 이해하지 못하거나 적절한 완화 전략을 펼치지 못하고 있다. CERT/CC가 초기 버전의 제품에서 발견했던 것과 똑같은 종류의 취약점을 이후 버전에서도 계속 발견하는 사실로 미루어 이 점을 알 수 있다.

위 요소들을 하나로 합쳐 생각해보면 실제로 시스템 속도가 빨라진 만큼 단시간 내에 많은 공격으로 상당한 경제적 손실과 서비스 혼란이 발생할 것으로 보인다.
일사불란한 처리가 계속 필요하지만 쉽게 공격 당하지 않게 더 많은 보안 시스템을 갖춰야 한다.

이 책에서는 1988년에 CERT를 설립한 이래로 기록된 가장 흔하고 위험하며 파괴적인 소프트웨어 취약점에 대한 C/C++ 프로그래밍 주요 에러를 다룬다. 이 책으로 프로그래밍 에러를 깊이 있게 기술적으로 분석하고, 침투 위험을 줄이거나 제거하는 데 효과적이고도 실용적인 완화 전략 모두를 배울 수 있다.

1987년 4월, 로버트가 소프트웨어 공학 연구소(SEI, Software Engineering Institute)에 처음으로 합류할 때부터 줄곧 함께 일해 왔다. 로버트는 노련하고도 지식이 풍부한 소프트웨어 엔지니어인데, 소프트웨어 취약점을 세세하게 분석하고 자신이 관찰하고 발견한 내용을 잘 설명했다. 그렇기 때문에 이 책은 소프트웨어 개발자들이 직면하는 가장 일반적인 문제들에 대해 매우 신중한 처리와 실질적 해결책을 제공한다. 로버트는 소프트웨어 개발에 대해 광범위한 배경 지식을 갖고 있어 소스코드 개발 시에 이해득실을 따져야 하는 성능 균형, 유용성, 기타 품질 속성에도 신경을 기울였다. 로버트의 능력에 더해 이 책에는 CERT를 운용하면서 얻은 축적된 지식들이 들어있고, SEI의 CERT/CC 취약점 분석 팀, CERT 운영 스태프, 그리고 편집 및 지원 스태프의 특별한 작업도 들어있다.
- 리차드 페시아(Richard D. Phethia)/CERT 디렉터

★ 이 책에서 다루는 내용 ★

■ 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++ 애플리케이션의 전체 보안을 향상시키기 위해 특정 개발 관행을 권고한다. 이런 권고안은 특정 취약점 부류의 문제를 해결하기 위해 각 장에 있는 권장 사항들에 이어지는 것이다.

★ 저자 서문 ★

1988년 11월, 인터넷 시스템의 10%를 멈추게 만든 모리스(Morris) 웜 사건이 계기가 돼 미국 방위 고등 연구 계획국(DARPA, Defense Advanced Research P

교환 및 환불안내

도서교환 및 환불
  • ㆍ배송기간은 평일 기준 1~3일 정도 소요됩니다.(스프링 분철은 1일 정도 시간이 더 소요됩니다.)
  • ㆍ상품불량 및 오배송등의 이유로 반품하실 경우, 반품배송비는 무료입니다.
  • ㆍ고객님의 변심에 의한 반품,환불,교환시 택배비는 본인 부담입니다.
  • ㆍ상담원과의 상담없이 교환 및 반품으로 반송된 물품은 책임지지 않습니다.
  • ㆍ이미 발송된 상품의 취소 및 반품, 교환요청시 배송비가 발생할 수 있습니다.
  • ㆍ반품신청시 반송된 상품의 수령후 환불처리됩니다.(카드사 사정에 따라 카드취소는 시일이 3~5일이 소요될 수 있습니다.)
  • ㆍ주문하신 상품의 반품,교환은 상품수령일로 부터 7일이내에 신청하실 수 있습니다.
  • ㆍ상품이 훼손된 경우 반품 및 교환,환불이 불가능합니다.
  • ㆍ반품/교환시 고객님 귀책사유로 인해 수거가 지연될 경우에는 반품이 제한될 수 있습니다.
  • ㆍ스프링제본 상품은 교환 및 환불이 불가능 합니다.
  • ㆍ군부대(사서함) 및 해외배송은 불가능합니다.
  • ㆍ오후 3시 이후 상담원과 통화되지 않은 취소건에 대해서는 고객 반품비용이 발생할 수 있습니다.
반품안내
  • 마이페이지 > 나의상담 > 1 : 1 문의하기 게시판 또는 고객센터 1800-7327
교환/반품주소
  • 경기도 파주시 문발로 211 1층 / (주)북채널 / 전화 : 1800-7327
  • 택배안내 : CJ대한통운(1588-1255)
  • 고객님 변심으로 인한 교환 또는 반품시 왕복 배송비 5,000원을 부담하셔야 하며, 제품 불량 또는 오 배송시에는 전액을 당사에서부담 합니다.