소프트웨어 개발에 종사하는 모든 엔지니어가 읽어야 할 보안 실천 가이드!
MS와 구글에서 현대 보안 기술을 선도하고 디지털 인증서를 창시한 저자의 20년노하우!
공개 키 인증서 개념을 최초로 만들고 마이크로소프트에서 위협 모델링 STRIDE 개념을 창안한
현대 보안 기술의 선구자인 로렌 콘펠더가 집대성한 책!
저자 로렌 콘펠더가 20여 년 동안 보안 업계에서 겪은 경험을 간결하고 세련되게 집약한 소프트웨어 보안 가이드로서, 소프트웨어 아키텍트, 디자이너, 개발자, IT 관리자를 비롯한 광범위한 소프트웨어 전문가를 위한 책이다. 저자는 소프트웨어 설계 초기부터 보안을 내재화하고 전체 팀이 함께 프로세스에 참여할 것을 강조한다. 핵심 보안 개념인 신뢰, 위협, 완화, 보안 설계 패턴, 암호화를 설명하며 1부를 시작한다. 2부에서는 보안을 염두에 두고 소프트웨어를 설계하고 검토하는 과정을 다룬다. 마지막 3부에서는 C와 파이썬으로 작성된 다양한 코드 예제를 활용해 취약점이 만들어지는 코딩 결함에 대해 자세하게 살펴본다. 소프트웨어의 미래에 대한 현대적이고 실용적인 모범사례, 통찰, 아이디어가 담겨 있으므로, IT 분야에 종사하는 누구나 읽어야 하는 필독서다.
Contents
1부 l 안전한 소프트웨어를 위한 기본 개념
1장 보안의 기초
보안에 대한 이해
신뢰
__신뢰감
__비트는 눈에 보이지 않는다
__능숙함과 불완전성
__신뢰는 스펙트럼이다
__신뢰 결정
__암묵적으로 신뢰할 수 있는 컴포넌트
__제품 신뢰도 높이기
고전적인 원칙
__정보 보안의 C-I-A 원칙
__황금표준
__개인정보보호
2장 위협 모델링
적대적인 관점
4가지 질문
위협 모델링
__모델 기반 작업
__자산 식별
__공격 표면 식별
__신뢰 경계 식별
__위협 식별
__위협 완화
개인정보보호 고려사항
어디에나 존재하는 위협 모델링
3장 보안 위협의 완화
위협 처리
구조적 완화 전략
__공격 표면 최소화
__좁은 취약점 창
__데이터 노출 최소화
접근 정책과 접근 제어
인터페이스
통신
스토리지
4장 보안 설계 패턴
설계 속성
__설계의 경제성 패턴
__투명한 설계
노출 최소화
__최소 권한
__최소 정보
__안전이 기본
__차단목록보다 허용목록
__예측 가능성 방지
__안전한 실패
강력한 집행
__완전한 중재
__최소 공통 메커니즘
중복성
__심층 방어
__권한 분리
신뢰와 책임
__신뢰에 대한 저항
__보안 책임 수용
안티패턴
__혼동된 대리인
__신뢰의 역류
__서드파티 훅
__패치 불가능한 컴포넌트
5장 보안을 위한 암호화 기법
암호화 도구
난수
__의사 난수
__암호학적으로 안전한 의사 난수
메시지 인증 코드
__변조 방지를 위한 메시지 인증 코드 사용
__재전송 공격
__안전한 MAC 통신
대칭 암호화
__일회용 패드
__고급 암호화 표준
대칭 암호화 사용
비대칭 암호화
__RSA 암호체계
디지털 서명
디지털 인증서
키 교환
암호화 사용
2부 l 안전한 소프트웨어 설계
6장 보안 설계 원칙
설계에 보안 통합
__설계 가정의 명시화
__범위 정의
__보안 요구사항 설정
__위협 모델링
완화의 구현
__인터페이스 설계
__데이터 처리 설계
소프트웨어 설계에 개인정보보호 통합
전체 소프트웨어 수명주기 계획
트레이드오프 처리
설계 단순성
7장 보안 설계 리뷰
보안 설계 리뷰의 실행 계획
__수행 목적
__수행 시기
__문서화는 필수적이다
보안 설계 리뷰 프로세스
__검토
__질문
__식별
__협력
__작성
__후속 조치
설계 보안 평가
__4가지 질문을 지침으로 사용하라
__좀 더 파고 들어본다면
__개인정보보호 리뷰
__업데이트 리뷰
이견 관리
__재치 있게 소통하라
__사례 연구: 어려운 리뷰
__의견 불일치의 조정
실습, 실습, 실습
3부 l 보안 구현
8장 안전한 프로그래밍
안전한 프로그래밍이 어려운 이유
__악의적인 영향
__취약점은 버그다
__취약점 체인
__버그와 엔트로피
__경계심
사례연구: goto fail 취약점
__코드 한 줄의 취약점
__풋건을 조심하라
__goto fail의 교훈
코딩 취약점
__원자성
__시차 공격
__직렬화
유력한 용의자
9장 로우레벨 코딩의 취약점 사례
산술적 취약점
__고정너비 정수 취약점
__부동소수점 정밀도 취약점
__예제: 부동소수점 언더플로
__예제: 정수 오버플로
__안전한 연산
메모리 접근 취약점
__메모리 관리
__버퍼 오버플로
__예제: 메모리 할당 취약점
__사례 연구: 하트블리드 보안 대참사
10장 신뢰할 수 없는 입력의 보안 위협
입력 유효성 검사
__유효성 결정
__검사 기준
__잘못된 입력 거부
__잘못된 입력 수정
문자열 취약점
__문자열 길이 문제
__유니코드 문제
인젝션 취약점
__SQL 인젝션
__경로 탐색
__정규표현식
__XML의 위험성
인젝션 공격의 완화 조치
11장 웹 보안
프레임워크 기반 구축
웹 보안 모델
__HTTP 프로토콜
__디지털 인증서와 HTTPS
__동일 출처 정책
__웹 쿠키
일반적인 웹 취약점
__크로스 사이트 스크립팅(XSS)
__크로스 사이트 요청 위조(CSRF)
기타 취약점과 완화 방법
12장 보안 테스팅
보안 테스팅이란 무엇인가
goto fail 취약점에 대한 보안 테스팅
__기능 테스트
__취약점을 갖는 기능 테스팅
__보안 테스트 케이스
__보안 테스팅의 한계
보안 테스트 케이스 작성
__입력 유효성 검사 테스팅
__XSS 취약점 테스트
퍼즈 테스팅
보안 회귀 테스트
가용성 테스팅
__리소스 소비
__임계치 테스트
__분산 서비스 거부 공격(디도스 공격)
보안 테스팅 모범사례
__테스트 주도 개발
__통합 테스팅 활용
__보안 테스팅 따라잡기
13장 안전한 개발 모범사례
코드 품질
__코드 관리 습관
__예외 및 오류 처리
__보안 문서화
__보안 코드 리뷰
의존성
__보안 컴포넌트 선택
__인터페이스 보안
__보안 도구를 재발명하지 말라
__레거시 보안과의 경쟁
취약점 분류
__DREAD 평가
__작동하는 공격 코드 제작
__분류 결정
안전한 개발환경 유지
__운영환경과 개발환경의 분리
__개발 도구 보안
__제품 출시
14장 끝나지 않는 보안의 여정
실천하고 행동할 것
__보안은 모두의 일이다
__보안의 내재화
보안의 미래
__소프트웨어 품질 향상
__복잡성 관리
__투명성 최소화에서 최대화로
__소프트웨어의 진본성, 신뢰, 책임감 개선
라스트 마일: 마지막 한걸음 완수
마치며
부록 A 소프트웨어 설계 문서 샘플
부록 B 용어집
부록 C 생각해볼 문제
부록 D 핵심 요약 자료
Author
로렌 콘펠더,김영기,박기성
50여 년 전에 프로그래밍을 시작했다. MIT 학부생 시절 졸업 논문으로 제출한 「실용적인 공개 키 암호화 시스템을 향해(Towards a Practical Public-Key Cryptosystem)」는 사상 처음으로 디지털 인증서와 공개 키 인프라(PKI)의 기초를 설명한 논문이었다. 펀치카드, 디스크 컨트롤러 작성, 링킹 로더, 비디오 게임, 2차례의 일본 근무부터 반도체 연구소의 장비 제어 소프트웨어에 이르기까지 다방면의 프로그래밍 작업을 아우르는 소프트웨어 경력을 자랑한다. 마이크로소프트에 재직할 당시 인터넷 익스플로러(IE) 팀의 보안 업무로 복귀했으며, 이후 닷넷(.NET) 플랫폼 보안 팀에서 업계 최초의 사전 예방적 보안 프로세스 방법론에 기여한 바 있다. 최근에는 구글에서 보안 팀 소프트웨어 엔지니어로 일했으며, 개인정보보호 팀의 창립 멤버로서 대규모 상용 시스템에 대한 보안 설계 리뷰를 100회 이상 수행했다.
50여 년 전에 프로그래밍을 시작했다. MIT 학부생 시절 졸업 논문으로 제출한 「실용적인 공개 키 암호화 시스템을 향해(Towards a Practical Public-Key Cryptosystem)」는 사상 처음으로 디지털 인증서와 공개 키 인프라(PKI)의 기초를 설명한 논문이었다. 펀치카드, 디스크 컨트롤러 작성, 링킹 로더, 비디오 게임, 2차례의 일본 근무부터 반도체 연구소의 장비 제어 소프트웨어에 이르기까지 다방면의 프로그래밍 작업을 아우르는 소프트웨어 경력을 자랑한다. 마이크로소프트에 재직할 당시 인터넷 익스플로러(IE) 팀의 보안 업무로 복귀했으며, 이후 닷넷(.NET) 플랫폼 보안 팀에서 업계 최초의 사전 예방적 보안 프로세스 방법론에 기여한 바 있다. 최근에는 구글에서 보안 팀 소프트웨어 엔지니어로 일했으며, 개인정보보호 팀의 창립 멤버로서 대규모 상용 시스템에 대한 보안 설계 리뷰를 100회 이상 수행했다.