完全docker化的Linux内核调试环境
作者:Sec-Labs | 发布时间:
项目地址
https://github.com/0xricksanchez/like-dbg
项目介绍
LIKE-DBG ( LI nux- KE rnel- De B u G ger ) 旨在 自动化 尝试设置 Linux 内核调试环境时的无聊步骤。 我开始深入内核开发研究,发现现有的解决方案不够可用。 因此,这是一种尝试,在人们甚至可以考虑尽可能轻松有趣地进行研究之前,先做好所有必要的准备工作。 从构建内核、在模拟环境中运行它到附加调试器的所有步骤都在 docker 容器中透明地完成,以将系统要求保持在最低限度。 目前,以下每个步骤都有一个专用的 docker 容器:
- 构建内核
- 创建与内核一起使用的根文件系统
- 作为调试对象 启动内核+文件系统
- 作为 调试器附加到内核
注意事项
由于这个项目还处于早期阶段,我预计事情会迅速发生变化,同时也会在此过程中引入重大变化。 需要改进的主要点是:
- 超越真正的多架构
x86_64支持arm64 - 扩展内核构建器不仅可以成功构建最新的™内核
- 添加安卓内核支持
- 添加(集成)测试
- 进一步提升调试体验
特征
从好的方面来看,尽管处于早期阶段,但已经存在一些有用的功能:
- 一般的:
- 由于每个步骤的 dockerization,对主机系统的要求最低
- 一个易于掌握的
configs/user.ini配置,允许高度可定制的会话- 或者通过命令行为不同的调试设置提供不同的配置!
- 专为处理 Linux 内核开发挑战而设计的 CTF 运行程序
ctf/misc包含一些漂亮的脚本来帮助 CTF
- 代码质量措施:
- python代码的黑色 格式化程序
- 所有 python 代码的 flake8 linter
- shell 脚本的 shellcheck linter
- 用于Dockerfile 的 hadolint linter
- 与操作系统无关,这意味着它应该可以在以下平台上正常运行:
- Debian/Ubuntu
- Arch Linux/曼扎罗
- 软呢帽
- 内核构建器:
- 多架构:
x86_64,arm64 gcc在和 之间选择clang构建内核- 配置方式:
- 通用模式,
- syzkaller 模式,
- 自定义模式,或
- 提供可用的内核配置
- 用于构建的细粒度版本控制:
- 提交哈希
- 发布标签(例如:5.10-rc)
- 主要-次要补丁(例如:5.10.77)
- 能够自动应用补丁文件
- 添加自定义内核模块的基本能力
- 多架构:
- 根文件系统构建器:
- 由 debootstrap提供支持
- 自动生成匹配内核架构的文件系统
- 定制能力:
- 文件系统中需要的包
- 一切都基于 Debian 发行版
- 调试对象:
- 由 QEMU提供支持
- 从
configs/*.ini文件中自定义 QEMU 运行时选项。
- 调试器:
- 由 GDB(多架构) 提供 支持
- GEF 和 GEF-extras ,或
- pundbg
- 允许用户指定 GDB 脚本
io/scripts/gdb_script以允许场景定制的调试体验
- 由 GDB(多架构) 提供 支持
要求
首先,您必须确保在系统中设置以下要求:
dockertmuxpython>=3.9venv
建议不要以 root 用户身份运行它,例如为了在 VPS 上进行测试。 它可能工作得很好,但总的来说,我强烈建议创建一个专门的非 root 用户来放入 docker 和 sudo 组中!
选修的
本节涵盖运行 LIKE-DBG不需要 的工具, 但在调试或编写 exploit 时拥有并提供大量帮助是很好的。
配置
微调内核调试体验是本项目的目标之一。 目前,所有可调选项都暴露在两个配置文件中: configs/system.ini 和 configs/user.ini . 建议不要更改某些字段,因为它们主要是出于开发原因。 但是,所有根据您的需要自定义环境的内容都应该是不言自明的,因为它们都标有简短的注释。
用法
一旦您设置好编写/调整配置,使用取决于您的场景。 基于 configs/user.ini 配置的最简单的入门方法如下:
tmux -f .tmux.conf
python3 -m venv .like-dbg
source .like-dbg/bin/activate
python3 -m pip install --upgrade pip
python3 -m pip install -r requirements.txt
# This checks out a kernel, builds it, creates a root file system and starts the debugger and debuggee eventually
./start_kgdb.py
自动创建的文件系统存在 2 个用户:
root没有密码user:user
这是为了让您可以轻松地从任一角度进行开发和利用。
扩展使用
# 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
例子
该 examples 子目录包含有关如何 LIKE_DBG 帮助您完成特定内核调试任务的示例。 每个示例都包含一个专用 README.md 的以及包含重现示例的必要信息。
展示
