攻亦是防,防亦是攻——Linux内核视角看权限维持

💡 原文中文,约13700字,阅读约需33分钟。
📝

内容提要

本文讨论了隐藏rootkits的技术,包括在/proc/modules和/sys/module目录中隐藏,以及使用eBPF和binfmt_misc来检测和逃避rootkits。文章还探讨了如何使用eBPF来监控恶意行为,如网络通信和恶意系统调用。

🔎

延伸解读

内核模块隐藏的底层逻辑

文章指出,Rootkit模块通过从内核双向链表脱链来隐藏,这利用了/proc/modules和/sys/module的遍历机制。防守方若仅依赖这些接口检查模块,可能被绕过。理解module结构体和kobject的链表操作,有助于开发更底层的检测方法,例如直接扫描内核内存或监控关键链表完整性。

eBPF的双刃剑特性

eBPF既能用于攻击(如隐藏进程、劫持系统调用),也能用于防御(如监控异常)。其强大之处在于可编程性和深度hook能力,但这也意味着攻击者可能滥用。防守方需关注eBPF程序的加载和运行,特别是具有CAP_SYS_ADMIN或CAP_BPF权限的进程,并监控bpf系统调用的异常使用。

binfmt_misc的逃逸风险

binfmt_misc允许自定义可执行文件格式的解释器,若容器具有CAP_SYS_ADMIN权限,攻击者可注册恶意解释器,在主机执行文件时触发逃逸。这提醒我们,容器安全配置应遵循最小权限原则,避免赋予不必要的capability,并监控/proc/sys/fs/binfmt_misc的异常注册。

检测思路与攻击原理的对称性

文章强调,eBPF检测Rootkit的原理与攻击手法异曲同工,例如通过检查系统调用表指针是否在内核代码段范围内来发现劫持。这种对称性表明,防守方需深入理解攻击技术,才能设计出有效的检测方案。同时,攻击者也可能利用eBPF绕过传统HIDS,因此防守需多层部署。

❓

Q&A

什么是rootkit,它是如何隐藏的?

Rootkit是一种恶意软件,攻击者通过将其模块从内核的双向链表中脱链,隐藏在/proc/modules和/sys/module目录中。

eBPF在检测恶意行为方面有什么作用?

eBPF可以监控系统调用和网络事件,检测恶意行为并检查系统调用表的劫持情况。

如何通过eBPF实现对系统调用的劫持检测?

可以通过检查系统调用入口指针是否在内核符号地址范围内,来检测是否存在劫持情况。

binfmt_misc功能是什么,它如何影响容器逃逸?

binfmt_misc允许识别任意可执行文件格式,攻击者可以利用它执行特定格式的文件,从而实现容器逃逸。

攻击者如何利用eBPF进行网络流量的隐蔽?

攻击者可以通过eBPF在网络驱动的早期接收路径上运行程序,绕过主机的防火墙限制,隐蔽恶意流量。

如何通过修改内核模块实现rootkit的隐藏?

通过将rootkit模块的module结构体从内核的双向链表中脱链,可以实现模块的隐藏。

🏷️

标签

➡️

继续阅读