1. 운영체제란 무엇인가?

이론적 정의: 사용자의 하드웨어, 시스템 리소스를 제어하고프로그램에 대한 일반적 서비스를 지원하는 시스템 소프트웨어.
하드웨어를 제어하기 위해 가장 먼저 부팅되는 소프트웨어이다.

2. 나는 왜 운영체제를 제대로 알고 있어야 하는가?

기초를 다지지 않고 쌓은 탑은 무너지기 마련이다.
결국 운영체제에 대한 이해가 뒷받침되지 않으면, 아무리 효과적인 기법이나 테크닉을 공부해도 이해와 응용에 한계가 생긴다.
또한 모든 프로그램의 실행과 메모리 접근은 결국 운영체제의 규칙 위에서 이루어지기 때문에 컴퓨터를 깊이 이해하고 훌륭한 pwner가 되기 위해선 반드시 쌓아야 하는 기초 체력이라고 생각하였기 때문이다.

3. 나는 운영체제 공부를 통해 무엇을 달성하고 싶은가?

따라서 내 목표는 운영체제를 정복하겠다는 두루뭉술한 목적이 아니라, 커널 취약점을 이해하기 위해 필요한 만큼의 운영체제 메커니즘을 완전히 내 것으로 만드는 것이다.

그동안 CTF와 워게임 문제들를 풀면서 운영체제에 대한 이해 부족으로 인해 많은 어려움을 겪었다. 각 취약점이 의존하는 커널의 동작 원리를 이해하지 못한 채 기법만 따라가는 방식에는 분명한 한계가 있었다.
이 글은 내가 실제로 마주했던 취약점들을 출발점으로 삼아, 해당 취약점이 어떤 운영체제 메커니즘을 깨뜨리는지를 역추적하고 학습하는 방식으로 구성된다.

따라서 본 문서는 전통적인 운영체제 교과서보단, x86-64 Linux 커널을 기준으로 실제 시스템이 어떻게 동작하는지를 Exploit의 관점에서 해석한 기록에 가깝다.

본 시리즈에서 다루는 주요 취약점은 다음과 같다: