
Environnement de débogage du noyau Linux entièrement dockerisé
LIKE-DBG (LInux-KErnel-DeBuGger) vise à automatiser les étapes fastidieuses de mise en place d'un environnement de débogage du noyau Linux. Je me suis lancé dans la recherche en exploitation de noyaux et j'ai trouvé les solutions existantes insuffisamment utilisables. Cette tentative a donc pour but de rendre toutes les étapes préalables, avant même de penser à se plonger dans la recherche, aussi simples et amusantes que possible. Toutes les étapes, de la compilation d'un noyau à son exécution dans un environnement émulé, en passant par l'attachement d'un débogueur, sont réalisées de manière transparente dans des conteneurs docker afin de minimiser les exigences système. Actuellement, il existe un conteneur docker dédié pour chacune des étapes suivantes :
Comme ce projet en est à ses débuts, je m'attends à ce que les choses évoluent rapidement, tout en introduisant des changements cassants au passage. Les principaux points à améliorer sont :
x86_64 et arm64Côté positif, malgré son stade précoce, quelques fonctionnalités utiles sont déjà présentes :
configs/user.ini facile à appréhender qui permet des sessions hautement personnalisables
ctf/misc qui contient quelques scripts astucieux pour aider lors des CTFx86_64, arm64gcc et clang pour compiler le noyauconfigs/*.ini.io/scripts/gdb_script pour offrir une expérience de débogage adaptée au scénarioPour commencer, vous devez vous assurer que les prérequis suivants sont installés sur votre système :
dockertmuxpython>=3.11poetry # https://python-poetry.org/docs/Il est recommandé de ne pas exécuter ceci en tant qu'utilisateur root, par exemple à des fins de test sur un VPS.
Cela peut très bien fonctionner, mais en général je recommande vivement de créer un utilisateur non-root dédié et de l'ajouter aux groupes docker et sudo !
Remarque : Si vous utilisez une configuration TMUX personnalisée, assurez-vous que votre premier volet commence à 0 !
Cette section couvre les outils qui ne sont pas requis pour exécuter LIKE-DBG mais qui sont agréables à avoir et qui aident considérablement lors du débogage ou de l'écriture d'un exploit.
Dans like-dbg, exécutez poetry install
Le réglage fin de l'expérience de débogage du noyau est l'un des objectifs de ce projet.
Actuellement, toutes les options réglables sont exposées dans les deux fichiers de configuration : configs/system.ini et configs/user.ini.
Il est recommandé de ne pas modifier certains champs, car ils servent principalement au développement.
Cependant, tous ceux permettant de personnaliser l'environnement selon vos besoins devraient être explicites, car ils sont tous accompagnés d'un bref commentaire.
Remarque : Lors de la première utilisation, exécutez poetry install.
Une fois que vous avez écrit ou adapté une configuration, l'utilisation dépend de votre scénario.
La façon la plus simple de commencer, basée sur la configuration configs/user.ini, est la suivante :
tmux -f .tmux.conf
poetry shell
# This checks out a kernel, builds it, creates a root file system and starts the debugger and debuggee eventually
./start_kgdb.py
Il existe 2 utilisateurs pour les systèmes de fichiers créés automatiquement :
root sans mot de passeuser:userC'est prévu afin que vous puissiez développer et exploiter facilement depuis l'un ou l'autre point de vue.
# If you want to try a CTF challenge where you were given a (compressed) Linux Image and a root filesystem try:
./start_kgdb.py --ctf <Image> <RootFS>
# If you want to kill the current debugging session
./start_kgdb.py -k
# If you want to provide a custom 'user.ini' for a specific debugging setup
./start_kgdb.py -c <path_to_cfg> [other_args]
# If you want to test some partial functionality of LIKE-DBG
# Stage 1: Download Kernel
# Stage 2: Stage 1 & unpack Kernel
# Stage 3: Stage 2 & build Kernel
# Stage 4: Only build a root file system
# Stage 5: Stage 3+4 & start debuggee
./start_kgdb.py -p <stage_nr>
# Update all containers
./start_kgdb.py -u
Le sous-répertoire examples contient des exemples illustrant comment LIKE_DBG peut vous aider dans des tâches spécifiques de débogage du noyau.
Chaque exemple contient également un README.md dédié avec les informations nécessaires pour reproduire les exemples.

Le code Python est assez lisible, alors n'hésitez pas à étendre le projet avec vos propres idées. Toutes les PR sont les bienvenues :) ! Sinon, n'hésitez pas à créer une issue de demande de fonctionnalité ou à vous rendre sur la page de discussions pour réfléchir à de nouvelles fonctionnalités sympas !
PS : Si vous souhaitez fournir un logo, n'hésitez pas.