최근 우리 사회는 정보화 시대를 지나 4차 산업혁명 시대를 맞이하여 스마트 사회(Smart Society), 초연결 사회로 진화하고 있고, 우리의 실생활 또한 엄청나게 변화하고 있다. 누구든지 스마트 기기만 가지고 있으면 어느 곳에 있든 초고속통신망인 인터넷을 통해서 전 세계 모든 정보를 원하는 대로 찾아보고 활용할 수 있어서 정치, 금융, 행정, 교육, 국방 등 거의 모든 산업 분야에 엄청난 변화를 가져오고 있다. 특히, SNS를 통한 소통의 변화는 시공간을 초월해서 전 세계 모든 사람과 소통할 뿐만 아니라 공통의 관심을 가진 분야의 사람끼리 원하는 목적을 위해 마음대로 소통할 수 있는 시대가 되었다.
이렇게 우리 삶의 거의 모든 분야에서 변화를 가져다준 컴퓨터와 인터넷은 우리가 알고 있는 많은 좋은 점(순기능)을 가지고 있지만, 반대로 이에 못지않게 우리에게 엄청난 피해를 줄 수 있는 여러 가지 역기능을 가지고 있다. 각종 악성 코드, 악의적인 해킹, 도청, DDoS 공격, 개인정보 침해사고 등이 날이 갈수록 새롭게 생겨나고 있으며, 그 유형 또한 점점 더 다양하게 나타나고 있다. 따라서 이러한 역기능으로 인한 피해를 줄이기 위한 대응책으로서 다양한 정보보호(security 또는 보안) 대응 및 방어 기술들이 개발되어 사용되고 있다.
하지만 국내에서 컴퓨터 보안 기술에 대한 기초적이고 체계적으로 다룬 책은 많이 나와 있지만, 대부분은 이론 중심의 책이다. 더군다나 최근에 많은 대학에서 보안 관련 학과를 개설해서 운영되고 있지만, 전공 분야 학생들뿐만 아니라 보안에 관심이 많은 일반인에게 더욱 실제적인 도움을 줄 수 있는 실제적이고 실무적인 내용을 담은 책은 많지 않다.
국내에 사이버 보안과 관련한 소프트웨어, 웹, 하드웨어의 보안 위협과 공격에 대해 실습을 통해 학습할 수 있는 좋은 자료가 없다고 생각하던 차에 미국 시라큐스대학의 Wenliang Du 교수가 쓴 “Computer Security” 3판 책을 접하고 이 책이 컴퓨터 소프트웨어, 월드와이드웹, 하드웨어 분야에서 일어날 수 있는 보안 위협과 다양한 공격을 실제로 실습을 통해서 학습할 수 있는 좋은 책이라고 생각되어 번역해서 출간하게 되었다.
이 책의 내용은 저자가 수년에 걸쳐 구축한 실험, 실습 내용(SEED Lab)을 학생들이 직접 접속해서 실습과 구현을 해보면 사이버 보안의 기본 원칙과 여러 가지 취약점과 공격, 나아가 대응책을 더 쉽게 이해할 수 있다고 생각한다. 또, 대학에서도 교수 개인별 또는 학과별로 실험, 실습 환경을 구축하기보다는 무료로 제공하는 SEED Lab을 활용하면 보다 알찬 수업을 진행할 수 있다고 생각된다.
이 책은 소프트웨어 보안: 공격과 대응책, 웹 보안: 공격과 대응책, Meltdown과 Spectre 공격, Dirty COW, Shellshock, Hash 충돌 등을 포함한 새롭게 발견된 공격, 일반적인 해킹과 방어 기술을 체계적으로 취약점과 공격들을 SEED Lab을 통하여 실제 실습할 수 있다.
Contents
PART Ⅰ 소프트웨어 보안
Chapter 01 리눅스 보안 개요
1.1 사용자와 그룹
1.2 허가 권한과 접근 제어 목록
1.3 특권으로 명령어 실행하기
1.4 인증
1.5 요약
Chapter 02 Set-UID 특권 프로그램과 이들에 대한 공격
2.1 특권 프로그램의 필요성
2.2 Set-UID 메커니즘
2.3 잘못될 수 있는 것: 슈퍼맨에게 일어난 일
2.4 Set-UID 프로그램의 공격 표면
2.5 다른 프로그램 인보크하기
2.6 최소 특권의 원칙
2.7 요약
Chapter 03 환경 변수를 통한 공격
3.1 환경 변수
3.2 환경 변수로 인한 공격 표면
3.3 동적 링커를 통한 공격
3.4 외부 프로그램을 통한 공격
3.5 라이브러리를 통한 공격
3.6 응용 프로그램 코드
3.7 Set-UID 방식 대 서비스 방식
3.8 요약
Chapter 04 버퍼 오버플로우 공격
4.1 프로그램 메모리 배치
4.2 스택과 함수 호출
4.3 스택 버퍼-오버플로우 공격
4.4 실험을 위한 설정
4.5 버퍼 오버플로우 공격 수행하기
4.6 주소와 버퍼 크기를 알 수 없는 공격
4.7 64비트 프로그램에 대한 버퍼 오버플로우 공격
4.8 대응책: 개요
4.9 주소 랜덤화
4.10 StackGuard
4.11 bash와 dash에서 대응책을 무력화하기
4.12 요약
Chapter 05 Return-to-libc 공격과 반환-지향 프로그래밍
5.1 개요: 실행 불가능 스택
5.2 공격 실험: 설정
5.3 Return-to-libc 공격 시작하기: 1부
5.4 Return-to-libc 공격 시작하기: 2부
5.5 쉘의 대응책 무력화하기
5.6 반환 지향 프로그래밍
5.7 요약
Chapter 06 형식 문자열 취약점
6.1 인수가 가변적인 함수
6.2 선택적 인수가 누락된 형식 문자열
6.3 취약한 프로그램과 실험 설정
6.4 형식 문자열 취약점 악용하기
6.5 형식 문자열 취약점을 이용한 코드 주입 공격
6.6 대응책
6.7 버퍼 오버플로우 공격과의 관계
6.8 요약
Chapter 07 경쟁 조건 취약성
7.1 일반적인 경쟁 조건 문제
7.2 경쟁 조건 취약성
7.3 실험 설정
7.4 경쟁 조건 취약성 악용하기
7.5 개선된 방법
7.6 대응책
7.7 요약
Chapter 08 Dirty COW 경쟁 조건 공격
8.1 mmap()을 이용한 메모리 매핑
8.2 MAP_SHARED, MAP_PRIVATE 및 Copy On Write
8.3 복사된 메모리 폐기하기
8.4 읽기 전용 파일 매핑하기
8.5 Dirty COW 취약점
8.6 Dirty COW 취약점 악용하기
8.7 요약
Chapter 09 쉘코드
9.1 개요
9.2 어셈블리 코드 작성하기
9.3 쉘코드 작성하기: 기본 아이디어
9.4 접근 방식 1: 스택 방식
9.5 접근 방식 2: 코드 세그먼트 방식
9.6 64비트 쉘코드 작성하기
9.7 일반 쉘코드
9.8 요약
Chapter 11 웹 보안 개요
11.1 웹 구조
11.2 웹 브라우저
11.3 웹 서버: HTTP 서버와 웹 응용 프로그램
11.4 브라우저-서버 통신: HTTP 프로토콜
11.5 쿠키와 세션
11.6 자바스크립트 샌드박싱
11.7 Ajax 요청과 보안
11.8 요약
Chapter 12 사이트 간 요청 위조
12.1 사이트 간 요청과 이의 문제
12.2 사이트 간 요청 위조 공격
12.3 HTTP GET 서비스에 대한 CSRF 공격
12.4 HTTP POST 서비스에 대한 CSRF 공격
12.5 대응책
12.6 요약
Chapter 13 교차 사이트 스크립팅 공격
13.1 교차 사이트 스크립팅 공격
13.2 동작 중인 XSS 공격
13.3 자체-전파 달성하기
13.4 XSS 공격 막아내기
13.5 일반적인 자바스크립트 코드 주입 공격
13.6 요약
Chapter 14 SQL 주입 공격
14.1 SQL의 간단한 튜토리얼
14.2 웹 응용 프로그램에서 데이터베이스와 상호 작용하기
14.3 SQL 주입 공격 시작하기
14.4 근본적인 원인
14.5 대응책
14.6 요약
Chapter 15 Clickjacking 공격
15.1 전주곡
15.2 개요와 배경
15.3 투명한 iframe을 이용한 클릭재킹 공격
15.4 불투명한 iframe을 이용한 클릭재킹
15.5 대응책
15.6 iframe 보안
15.7 요약
Chapter 16 Shellshock 공격
16.1 배경: 쉘 함수
16.2 Shellshock 취약점
16.3 Set-UID 프로그램에 대한 Shellshock 공격
16.4 CGI 프로그램에 대한 Shellshock 공격
16.5 PHP에 대한 원격 공격
16.6 요약
PART Ⅲ 하드웨어 보안
Chapter 17 Meltdown 공격
17.1 개요와 유추
17.2 CPU 캐시를 통한 사이드 채널 공격
17.3 비밀을 간직한 방: 커널
17.4 가드 넘어가기: CPU에 의한 비순차적 명령어 실행
17.5 Meltdown 공격
17.6 대응책
17.7 요약
Chapter 18 Spectre 공격
18.1 개요
18.2 비순차적 실행과 분기 예측
18.3 Spectre 공격
18.4 통계적 방식을 이용한 공격 개선하기
18.5 Spectre 변종과 완화
18.6 요약
Bibliography