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 형식 문
이 책은 저자의 20년 교육과 연구 경험을 바탕으로 쓴 것이다. 사이버 보안의 기본 원칙을 다룬다. 이 책의 목표는 독자가 다양한 공격이 동작하는 방식, 공격의 근본적인 원인이 무엇인지, 공격을 방어하는 방법과 다양한 방어 메커니즘이 동작하는 방식을 이해하도록 돕는 것이다. 이 책의 지식을 갖춘 독자는 컴퓨터와 네트워크 시스템이 직면한 위험을 평가하고, 소프트웨어의 일반적인 취약점을 감지하고, 시스템과 네트워크를 보호하기 위한 적절한 방법을 사용하고, 공격을 차단하고 더 중요한 것은 보안 원칙을 적용하여 실제 문제를 해결하는 것이다.
저자는 “실제 해보고 알아가는 학습”을 강력히 믿기 때문에 이 책은 실험, 실습 접근 방식을 취한다. 각 보안 원칙에 관해 이 책에서는 원칙을 설명하는 데 도움이 되는 일련의 실습 활동을 제공한다. 독자는 원리를 읽는 대신에 "실제 해보는" 실험을 할 수 있다. 예를 들어 보안 원칙에 공격이 포함된 경우 이 책은 독자에게 실제로 공격을 해보도록 안내한다(격리된 환경에서. 어떤 경우에는 원칙에 보안 메커니즘과 관련된 경우 이 책은 독자에게 이 메커니즘의 미니 버전을 구현하도록 안내한다. 독자는 이러한 실습 활동을 통해 더 잘 배울 수 있다.
모든 실험, 실습 활동은 작성자가 제공한 가상 머신 이미지에서 수행된다. 다음 URL에서 다운로드할 수 있다: https://seedsecuritylabs.org. 활동에 필요한 모든 것이 설정되어 있다. 독자는 VM(무료을 다운로드하고 VirtualBox를 사용하여 실행하기만 하면 책에서 다루는 활동을 즉시 수행할 수 있다. 이 책은 Ubuntu 20.04 VM 이미지를 기반으로 한다.
책에 있는 대부분의 활동은 전 세계의 강사들이 널리 사용하는 저자의 SEED Lab(버전 2.0을 기반으로 한다. 이 Lab은 2002년부터 국립과학재단이 자금을 지원한 SEED라는 프로젝트에서 저자와 그의 학생들이 수행한 20년의 연구, 개발 및 테스트 노력의 결과이다.
저자는 모든 내용