
Ambiente di debug del kernel Linux completamente dockerizzato per Linux e MacOS
LIKE-DBG (LInux-KErnel-DeBuGger) è un laboratorio completamente containerizzato per il debug e lo sfruttamento del kernel Linux. Compila o adotta un kernel e un root filesystem, li avvia sotto QEMU e ti porta in una sessione GDB interattiva (pwndbg o GEF), collegando ogni componente in un'unica finestra tmux.
L'obiettivo è eliminare la noiosa fase di configurazione, così il tuo tempo va al kernel, non all'impalcatura. Ogni passaggio viene eseguito all'interno di Docker, quindi le uniche cose da installare sull'host sono Docker, tmux, Python e uv. Scegli una versione del kernel (oppure passagli una challenge CTF), esegui un solo comando e arrivi a start_kernel con tutti i simboli disponibili.
Un solo comando risolve la tua configurazione, compila o riutilizza un kernel e un rootfs, avvia il guest e collega il debugger:
uv run ./start_kgdb
Il ciclo di lavoro è un loop in cui rimani: compili o adotti un kernel e una rootfs, lo avvii sotto QEMU (il Debuggee), colleghi GDB (il Debugger), poi modifichi, consegni, esegui, provochi il crash, individui la causa e ripeti.
Ci sono due modi per ottenere un kernel:
bzImage/Image di una challenge (più vmlinux e initramfs se li hai) e lo avvia così com'è sotto GDB. Vedi docs/ctf-foreign-kernel.md.exploit-dev, hardened, kasan, ubsan, lockdep e altri) che si risolvono in frammenti di configurazione del kernel e default di runtime. La verifica post-build del .config intercetta un profilo che non è stato applicato. Nota che exploit-dev (il default) disattiva solo KASLR; SMEP, SMAP e KPTI restano attivi a meno che tu non cambi profilo o li disattivi manualmente (vedi docs/configuration.md).current, task e module walking, symbol lookup); GEF è un cambio da una riga.--run e --upload consegnano un exploit al guest live tramite una condivisione 9p o SSH. Un singolo .c senza flag viene compilato automaticamente static-musl per l'architettura target; qualsiasi altra cosa viene consegnata così com'è. Vedi exploit/README.md.--insmod e --rmmod; i loro simboli si caricano automaticamente in GDB. Vedi modules/README.md.--analyze-crash rigenera un report offline.--run/--insmod finiscono sempre nel guest dal cui pannello li hai digitati.artifacts/runs/<id>/ con timestamp contenente impostazioni risolte, profilo host, record dei comandi, log e trascrizioni dei pannelli.Esegui come utente non-root nel gruppo docker. La cross-compilazione e il lavoro sull'initramfs avvengono all'interno dei container (una toolchain musl zig cc), quindi non serve alcuna cross-toolchain sull'host.
# 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
La prima esecuzione compila le immagini del container e un kernel, quindi richiede tempo; le esecuzioni successive riutilizzano la cache e partono in pochi secondi.
Ogni avvio rinomina la propria sessione in base a ciò che sta debuggando (LIKE-DBG-pawnyable-lk01,
LIKE-DBG-6_6_30-exploit-dev), così una sessione lasciata in esecuzione non blocca mai la successiva e due
challenge possono essere debuggate affiancate. Scollegati con C-b d; tmux -L likedbg ls mostra cosa è
in esecuzione, e il = qui sotto è la forma di corrispondenza esatta di tmux (senza di essa, una sessione -2 può avere la meglio):
tmux -L likedbg attach -t =LIKE-DBG-6_6_30-exploit-dev
Da qui, leggi docs/build-your-own-kernel.md per il flusso di lavoro completo, oppure docs/ctf-foreign-kernel.md se hai una challenge da debuggare. Per un tour pratico dell'intero ciclo su un driver vulnerabile incluso, segui la LK01 walkthrough.