深入Linux内核的Insmod模块注入实践(linuxinsmod)

Insmod是Linux内核中模块注入的有效工具,近几年受到了安全研究者的关注。Insmod是一种工具,可以使内核的模块在运行时动态加载到内核中。这样可以将外部驱动程序加入到内核中并在内核中执行,从而获得对内核的访问权限、维护资源[3]。

使用Insmod前首先需要编译要加入内核的模块程序,编译完成后会输出一个.ko文件,这就是内核模块的实际文件,并且使用Insmod时需要以管理员(root)身份运行,以保证拥有足够的权限。接下来,使用如下命令可以将内核模块加载到Linux内核中:

`insmod module.ko`

通过上面的指令,即可将module.ko加载到内核中。此外,Insmod还支持一些可选参数,以便加载模块时添加额外的信息[1]。

当卸载模块时,可以使用以下命令:

`rmmod module.ko`

通过前面介绍的Insmod,安全研究者可以对内存中的数据进行控制、管理、操作,进而对其功能进行修改,甚至可以实现内核的漏洞利用[2]。

例如,在KASLR(内核地址空间随机化)绕过攻击中,安全研究者可以通过构造一个恶意模块将.ko文件加载到内核中,实现KASLR的绕过。此外,Meltdown[4]和Spectre[5]缓解攻击中也会使用Insmod来简化攻击过程。

Insmod模块注入是一种与众不同的技术,可以实现对内核模块的动态加载,并且在安全研究上也具有重要意义。通过Insmod,可以获取对内核的权限,实现对内核的控制与操作,从而将攻击的完成度提高到另外一个层次。

参考文献

[1] A. X. Chen, “Overview – Insmod,” in Linux Kernel Module Programming Guide (3rd Edition), 2019.

[2] Y. Yang and K. Wang, “Insmod execution hijacking and module attack,” in Network Security (Netsys), 2015 IEEE Conference on, 2015, pp. 276–279.

[3] S. Priyadarshani et al., “Dynamic Kernel Module Insertion using insmod,” in In Proceedings of the 2nd ACM International Cooperation on Mobile Computing and Networking, Mobility’99, New York, NY, USA, 1999, pp. 317–324.

[4] P. Kocher et al., “Meltdown: Reading Kernel Memory from User Space,” in 23rd {USENIX} Security Symposium ({USENIX} Security 14), 2014, pp. 973–990.

[5] P. Kocher et al., “Spectre Attacks: Exploiting Speculative Execution,” in 2018 IEEE Symposium on Security and Privacy (SP), 2018, pp. 1–19.


数据运维技术 » 深入Linux内核的Insmod模块注入实践(linuxinsmod)