
Entorno de depuración del kernel de Linux totalmente dockerizado
LIKE-DBG (LInux-KErnel-DeBuGger) tiene como objetivo automatizar los pasos aburridos a la hora de intentar configurar un entorno de depuración del kernel de Linux. Me propuse sumergirme en la investigación de explotación del kernel y encontré que las soluciones existentes no eran lo suficientemente utilizables. Por lo tanto, este es un intento de hacer que todos los pasos previos necesarios antes de siquiera pensar en sumergirse en la investigación sean lo más indoloros y divertidos posible. Todos los pasos, desde compilar un kernel, ejecutarlo dentro de un entorno emulado y adjuntar un depurador, se realizan de forma transparente dentro de contenedores docker para mantener al mínimo los requisitos del sistema. Actualmente, hay un contenedor docker dedicado para cada uno de los siguientes pasos:
Como este proyecto está en sus primeras etapas, espero que las cosas cambien rápidamente y que también se introduzcan cambios que rompan la compatibilidad en el camino. Los puntos principales a mejorar son:
x86_64 y arm64A pesar de sus primeras etapas, en el lado positivo, ya hay un par de características útiles presentes:
configs/user.ini fácil de entender que permite sesiones altamente personalizables
ctf/misc que alberga algunos scripts ingeniosos para ayudar en CTFsx86_64, arm64gcc y clang para compilar el kernelconfigs/*.ini.io/scripts/gdb_script para permitir una experiencia de depuración adaptada al escenarioPara comenzar, debes asegurarte de tener los siguientes requisitos en tu sistema:
dockertmuxpython>=3.11poetry # https://python-poetry.org/docs/Se recomienda no ejecutar esto como usuario root, p. ej. para fines de prueba en un VPS.
Puede funcionar bien, pero en general recomiendo encarecidamente crear un usuario no root dedicado y agregarlo al grupo docker y sudo!
Nota: Si usas una configuración personalizada de TMUX, asegúrate de que tu primer panel comienza en 0!
Esta sección cubre herramientas que no son necesarias para ejecutar LIKE-DBG pero que resultan útiles y ayudan enormemente al depurar o escribir un exploit.
Dentro de like-dbg ejecuta poetry install
Afinar la experiencia de depuración del kernel es uno de los objetivos de este proyecto.
Actualmente, todas las opciones ajustables están expuestas en los dos archivos de configuración: configs/system.ini y configs/user.ini.
Se recomienda no alterar algunos campos, ya que son principalmente por razones de desarrollo.
Sin embargo, todos aquellos para personalizar el entorno según tus necesidades deberían ser autoexplicativos, ya que todos están etiquetados con un breve comentario.
Nota: En el primer uso, ejecuta poetry install.
Una vez que tengas lista una configuración escrita/adaptada, el uso depende de tu escenario.
La forma más fácil de comenzar, basada en la configuración configs/user.ini, es la siguiente:
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
Existen 2 usuarios para los sistemas de archivos creados automáticamente:
root sin contraseñauser:userEsto está pensado para que puedas desarrollar y explotar desde cualquiera de las dos perspectivas con facilidad.
# 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
El subdirectorio examples alberga ejemplos de cómo LIKE-DBG puede ayudarte en tareas específicas de depuración del kernel.
Cada ejemplo contiene también un README.md dedicado con la información necesaria para reproducir los ejemplos.

El código Python debería ser bastante legible, así que siéntete libre de ampliar el proyecto con tus propias ideas. ¡Todos los PRs son muy bienvenidos :)! De lo contrario, no dudes en crear un issue de solicitud de funciones o dirígete a la página de discusiones para intercambiar ideas sobre algunas funciones nuevas geniales.
PD: Si quieres proporcionar un logotipo, siéntete libre de hacerlo.