摘要
LFI(Linux Fault Injection)是Linux内核提供的一个故障注入工具,想要测试该工具效果需要通过指定方式编译并替换内核。内容源自本人23年10月的一部分实习工作,网络资料多为官方文档的翻译,缺少对LFI测试环境配置的完整教程,故将该笔记上传分享,希望各位少踩坑。
测试设备
设备:机械革命mini主机
CPU:R7-7735HS,8核16线程
显卡:核显AMD Radeon 680M
操作系统:Windows 11
虚拟机软件:Visual Box 7.0,Visulal Box 7.0 Extension Pack(选装)
虚拟机环境:Ubuntu 22.04.3 LTS,内核版本6.2.0-34
测试内核版本:Linux 6.5.7 stable
虚拟机配置
-
下载Ubuntu镜像,需约5G空间
-
虚拟机硬件设置,根据引导进行,此处注意勾选跳过自动安装
-
此次注意勾选启用EFI,否则后面可能无法使用NVMe调试
-
空间分配建议预留空间=1G<EFI引导>+2*虚拟机内存G<swap空间>+50G<内核编译中间文件>
-
检查无误点击完成即可,建议预先分配全部空间,以免出现混乱
-
(选)点击设置–>存储,第二个控制器名称为SATA,型号默认为ACHI。如果需要进行NVMe测试,可以在此时将型号改为NVMe
Ubuntu桌面系统安装
- 点击“启动”打开虚拟机,根据引导进行安装。语言最好选择English,避免中文乱码导致不兼容问题。
- 选择Minimal Installation,下一步安装类型选择Something else
- 空间分配规则,boot loader选择efi所在的Device
Use as | Primary or Logical | Size | Mount point |
---|---|---|---|
efi | Logical | 1024 MB | 无 |
swap | Logical | 16384 MB | 无 |
ext4 | Primary | 所有剩余空间 | / |
- 时区选上海,创建用户名和主机名,开始安装,完成后点击重启选项。
- 找到Software&Updates(蓝色A图标),更改Download from(下载源)为国内网站。然后找到Software Updater(黑色A图标)更新软件。
编译更换内核
- 安装依赖
sudo apt install libncurses5-dev openssl libssl-dev build-essential pkg-config \
libc6-dev bison flex libelf-dev zlib1g-dev minizip libidn11-dev dwarves
- 将压缩包解压到一个较少使用的文件夹中,避免误删除。解压后进入执行
make menuconfig
-
输入/,搜索lkdtm,置为y。输入/,搜索所有包含notifier_error_inject,全部置为y。输入/,搜索所有包含 fault_inject的选项位置,全部置为y,基本都在Kernel hacking>Kernel Testing and Converge里面。 !!!必须是显示*,如果是M或空不行!!!
-
完成后选择save写入磁盘,退出menuconfig后运行
gedit .config
- 修改如下,保存退出
CONFIG_MODULE_SIG=n
CONFIG_SYSTEM_TRUSTED_KEYS=“”
CONFIG_SYSTEM_REVOCATION_KEYS=“”
- 运行如下指令进行编译
make -j$(nproc) && make modules
- 安装
sudo make modules_install
sudo make install
- 重启,打开终端运行下面指令,如果显示的是要安装的版本号则成功。
uname -r