
Linux 및 MacOS용 완전히 도커화된 Linux 커널 디버깅 환경
LIKE-DBG(LInux-KErnel-DeBuGger)는 완전히 컨테이너화된 Linux 커널 디버깅 및 익스플로잇 실습 환경입니다. 커널과 루트 파일시스템을 빌드하거나 가져와 QEMU에서 부팅하고, 대화형 GDB 세션(pwndbg 또는 GEF)으로 진입하며, 모든 요소를 하나의 tmux 창에 연결합니다.
목표는 지루한 설정 작업을 없애 시간을 커널에 쓸 수 있도록 하는 것입니다. 모든 단계가 Docker
내부에서 실행되므로 호스트에 설치해야 하는 것은 Docker, tmux, Python, 그리고
uv뿐입니다. 커널 버전을 선택하거나(또는 CTF
챌린지를 넘겨주고) 명령 하나만 실행하면 전체 심볼과 함께 start_kernel에 도착합니다.
명령 하나로 설정을 확인하고, 커널과 rootfs를 빌드하거나 재사용하고, 게스트를 부팅한 뒤 디버거를 연결합니다:
uv run ./start_kgdb
실행은 당신이 머무는 루프입니다: 커널과 rootfs를 빌드하거나 채택하고, QEMU(Debuggee) 아래에서 부팅하고, GDB(Debugger)를 연결한 다음, 편집하고, 전달하고, 실행하고, 크래시를 일으키고, 근본 원인을 분석하고, 반복합니다.
커널을 얻는 방법은 두 가지입니다:
bzImage/Image(가지고 있다면 vmlinux와 initramfs도 포함)를 넘기면 GDB 아래에서 그대로 부팅합니다. docs/ctf-foreign-kernel.md를 참조하세요.exploit-dev, hardened, kasan, ubsan, lockdep 등)을 제공합니다. 빌드 후 .config 검증은 프로필이 적용되지 않은 경우를 잡아냅니다. exploit-dev(기본값)는 KASLR만 끄며, 프로필을 전환하거나 직접 토글하지 않는 한 SMEP, SMAP, KPTI는 켜진 상태로 유지됩니다(docs/configuration.md 참조).current, 태스크 및 모듈 워킹, 심볼 조회)를 위한 pwndbg를 사용하며, GEF는 한 줄로 전환할 수 있습니다.--run과 --upload는 9p 공유 또는 SSH를 통해 익스플로잇을 실행 중인 게스트에 전달합니다. 플래그 없는 단일 .c 파일은 대상 아키텍처용 정적-musl로 자동 컴파일되며, 그 외의 것은 그대로 전달됩니다. exploit/README.md를 참조하세요.--insmod와 --rmmod로 명령 시 로드합니다. 해당 심볼은 GDB에 자동으로 로드됩니다. modules/README.md를 참조하세요.--analyze-crash는 오프라인으로 보고서를 재생성합니다.--run/--insmod는 항상 명령을 입력한 창의 게스트에 적용됩니다.artifacts/runs/<id>/를 기록합니다.docker 그룹의 비루트 사용자로 실행하세요. 크로스 컴파일과 initramfs 작업은 컨테이너 내부(zig cc musl 툴체인)에서 이루어지므로 호스트 크로스 툴체인이 필요하지 않습니다.
# 1. Install dependencies
uv sync
# 2. Start the project tmux server (loads the shipped .tmux.conf)
tmux -L likedbg -f .tmux.conf new -s LIKE-DBG
# 3. Inside that tmux session: build-or-reuse a kernel, boot it, attach the debugger
uv run ./start_kgdb
첫 실행은 컨테이너 이미지와 커널을 빌드하므로 시간이 걸리지만, 이후 실행은 캐시를 재사용하여 몇 초 만에 시작됩니다.
각 부팅은 디버깅 대상에 따라 세션 이름을 바꾸므로(LIKE-DBG-pawnyable-lk01,
LIKE-DBG-6_6_30-exploit-dev), 실행 중인 세션이 다음 세션을 막지 않으며 두 개의
챌린지를 나란히 디버깅할 수 있습니다. C-b d로 분리하세요. tmux -L likedbg ls는 실행 중인
세션을 보여주며, 아래의 =는 tmux의 정확한 일치 형식입니다(이것이 없으면 -2 세션이 선택될 수 있습니다):
tmux -L likedbg attach -t =LIKE-DBG-6_6_30-exploit-dev
여기서 전체 워크플로는 docs/build-your-own-kernel.md를 읽고, 디버깅할 챌린지가 있다면 docs/ctf-foreign-kernel.md를 읽으세요. 번들로 제공되는 취약한 드라이버를 대상으로 전체 루프를 직접 체험하려면 LK01 walkthrough를 따라가세요.
| 문서 | 다루는 내용 |
|---|---|
| docs/walkthrough-lk01.md | 여기서 시작하세요: 번들로 제공되는 취약한 드라이버를 대상으로 빌드부터 use-after-free, 크래시 리포트까지 안내하는 엔드투엔드 예제입니다. |
| docs/build-your-own-kernel.md | 소스에서 커널을 빌드하고, 부팅한 뒤, 디버깅하며 반복합니다. |
| docs/ctf-foreign-kernel.md | 제공된 CTF 또는 외부 커널을 채택하고 익스플로잇을 전달합니다. |
| docs/configuration.md | TOML 설정 스택, 디버그 프로필, 그리고 모든 설정 항목. |
| exploit/README.md | 익스플로잇 개발 루프: 자동 컴파일 경계와 탈출구. |
| modules/README.md | 트리 외부 커스텀 모듈과 GDB 심볼 자동 로드. |
modules/lk01/에는 의도적으로 취약하게 만든 작은 학습용 드라이버와 크래시 PoC가 포함되어 있으며, 전체 빌드, 로드, 익스플로잇 루프를 위한 예제로 구성되어 있습니다.

Python 코드는 src/likedbg/에 있으며 읽기 쉽게 작성되었습니다. just test는 테스트 스위트를 실행하고, just lint는 ruff와 mypy를 실행하며, just build-images는 Dockerfile이나 내장 스크립트 변경 후 컨테이너 이미지를 다시 빌드합니다. 버그 리포트, 기능 요청, PR은 이슈 트래커와 토론 페이지를 통해 환영합니다.
MIT. LICENSE를 참조하세요.