查看: 8692|回复: 51
收起左侧

[分享] PatchGuard不是Windows才有的东西

[复制链接]
Dizziness2929
发表于 2024-4-29 08:31:42 | 显示全部楼层 |阅读模式
本帖最后由 Dizziness2929 于 2024-4-29 08:42 编辑



是的,PatchGuard(Kernel Patch Protection)和后继者HyperGuard(Virtulization Based Security)不是Windows的专利(*^_^*)

今天要说的是Linux世界的LKRG(Linux Kernel Runtime Guard/Linux内核运行时守护),然后我们就可以看出来微软做的这个功能有多么奇异搞笑。

LKRG的原理在其官网上就有提到,通过不断的检查内核与一部分用户态数据,检测是否有怪东西试图利用内核漏洞(或者,有没有内核Rootkit尝试渗透)。

LKRG对正在运行的Linux内核进行检测,并希望能够及时响应对正在运行的进程用户id等凭证未经授权的修改(完整性检查)。对于进程凭据,LKRG尝试检测漏洞,并在内核根据未经授权的凭据授予访问权限(例如打开文件)之前采取行动。Juho Junnila的论文题为“Linux Rootkit检测工具的有效性”,显示了LKRG可以作为有效的内核Rootkit检测器。LKRG挫败了许多预先存在的Linux内核漏洞的利用,并且很可能会检测并防御许多未来没有特意试图绕过LKRG的利用(包括未知的漏洞)。虽然LKRG在设计上是可以绕过的,但这种绕过需要更复杂和/或更不可靠的漏洞。

就其核心而言,LKRG是一个可加载的内核模块,它试图检测正在运行的内核是否存在更改情况,以表明正在对其使用某种类型的漏洞利用。除此之外,它还可以检查系统上运行的进程,以查找对各种凭证的未经授权修改,以防止这些更改授予额外的访问权限,这是exploit试图做的事情。

而如果检测到内核漏洞利用/内核Rootkit,LKRG有两种手段进行反制:

1.杀死这个乱搞的实例(进程)。

2.直接把内核杀了欢天喜地的Kernel Panic(内核恐慌,等效于Windows的蓝屏死机或者macOS的五国界面)。

(小声:相比起Windows只会一言不合杀了自己,LKRG可谓武德充沛,当然接下来就会讲到原理)




实操部分。

由于我手上这台电脑没有存储我自己的服务器的SSH密钥和IP地址,因此我没办法直播演示。

LKRG在Github存储库上有安装过程描述,在这里:https://github.com/lkrg-org/lkrg

感兴趣可以根据Github存储库上的教程进行安装,但是:由于涉及内核操作,如果操作不当导致你的Linux系统爆炸了之类的,与我无关





背后的一些原理。

有人可能会好奇,为什么LKRG可以直接杀死威胁到内核的存在,但PatchGuard和HyperGuard不能?

答案是这样的:Linux、BSD之类的操作系统,其操作系统内核是“宏内核”(Monolithic Kernel,也叫“整体式核心”),宏内核的特点是内核模块和内核不分家——如果你可以加载到内核,那么你就是内核(就像下面这张图)



从这张图看得出来:整体式核心并不会区分内核模块和内核,只要被加载到内核,她就是内核的一部分。

因此作为内核的一部分的LKRG,自然有能力爆杀任何试图威胁内核的软件(只要LKRG是先被加载到内核的)——从简单的禁止加载、再到加载后处处限制、实在不行就把这个软件kill掉或者把内核kill掉……哦,这是内核自爆了,不是LKRG杀了内核,我的错

那么PatchGuard呢?PG和HG也是内核本身在执行,为什么只能执行自爆?

源自于微软的……我不知道该怎么评价的设计:微软Windows是“广义/迫真微内核”,也叫“混合内核”

先提一嘴微内核的设计:微内核认为内核就是内核,模块就是模块,个中界限分明。在微内核设计中,内核只负责做最基本的资源分配之类的事情,其余工作都交给被称为“系统服务”的中间态模块执行



显然这种设计的性能会特别拉(但是稳定性和安全性拉上来了),但是人类是既要又要还要的,在这个前提下,微软设计出了个“混合内核”——以微内核设计思想和结构去做内核,但是为了性能考虑,被称为“系统服务”的中间态模块却被放在了内核空间执行



这就是奇异搞笑的地方:本来在微内核的设计中,如果发现系统服务搞事就直接杀死/重启那个系统服务就行了。可由于混合内核的设计,内核即使检测到了系统服务是一个威胁自身的存在,也只能选择和她一起爆了。

同样的,混合内核的设计给Anti-Rootkit造成了大麻烦:微内核可以选择直接杀死威胁自己的系统服务、整体式内核只要尽可能把反Rootkit模块先加载进去,之后任何Rootkit都只能是笑话了。

然而混合内核既不能直接杀死威胁自己的系统服务,也做不到先加载进去的反Rootkit模块可以保证能够对抗任何后续加载的Rootkit(因为系统服务只是被放在内核空间,并不是内核的一部分),这种尴尬的设计导致了Windows世界每天都在内核战争(即使是PG和HG还有DSE/驱动程序强制签名政策存在的情况下)






那么macOS呢?

macOS也有类似的机制,叫做Kernel Integrity Protection(内核完整性保护)和System Integrity Protection(系统完整性保护),这两项功能构成了macOS的内核防御机制

(小声:其实macOS也是“混合内核”设计,但是混合的太离谱以至于我习惯称为“扶她内核”——macOS内核由Mach内核和BSD内核混合而成,启动时,Mach微内核负责基本事务,然后再拉起来BSD内核为上层应用提供服务)

至于macOS为什么没那么多内核战争?呃……(因攻击性太高而被折叠)。





参考资料:

https://support.apple.com/zh-cn/guide/security/secb7ea06b49/web

https://support.apple.com/zh-cn/guide/security/sec8b776536b/web

https://github.com/softknife/Joy ... 5%86%85%E6%A0%B8.md

https://zh.wikipedia.org/wiki/%E ... 7%E6%A0%B8%E5%BF%83

https://zh.wikipedia.org/wiki/%E5%BE%AE%E5%85%A7%E6%A0%B8

https://zh.wikipedia.org/wiki/%E ... 8%E6%A0%B8%E5%BF%83

https://github.com/lkrg-org/lkrg

https://lkrg.org/

https://cloud.tencent.com/developer/article/2127093

https://cloud.tencent.com/developer/article/2127099

https://en.wikipedia.org/wiki/Kernel_Patch_Protection


https://blackberry.qnx.com/zh

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x

评分

参与人数 7经验 +40 魅力 +1 人气 +17 收起 理由
白露为霜 + 40 + 1 原创内容
a286282313 + 3
anxiety520 + 3 感谢提供分享
DisaPDB + 3 感谢提供分享
隔山打空气 + 3 感谢提供分享

查看全部评分

blah
发表于 2024-4-29 10:25:05 | 显示全部楼层
Windows想实现结束恶意进程又不是难事,调个ZwTerminateProcess就行,。LKRG结束进程也是靠的send_sig_info向进程发个SIGKILL。
Dizziness2929
 楼主| 发表于 2024-4-29 10:27:55 | 显示全部楼层
blah 发表于 2024-4-29 10:25
Windows想实现结束恶意进程又不是难事,调个ZwTerminateProcess就行,。LKRG结束进程也是靠的send_sig_info ...

这里的进程包括“恶意的内核模块”,也就是你熟知的“内核Rootkit/驱动程序Rootkit”
chx818
发表于 2024-4-29 11:00:29 | 显示全部楼层
扶她内核大草
Dizziness2929
 楼主| 发表于 2024-4-29 11:06:13 | 显示全部楼层


Be like

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
DisaPDB
发表于 2024-4-29 14:05:47 | 显示全部楼层
本帖最后由 DisaPDB 于 2024-4-29 14:23 编辑
macOS内核由Mach内核和BSD内核混合而成,启动时,Mach微内核负责基本事务,然后再拉起来BSD内核为上层应用提供服务

貌似华为的HarmonyOS也是类似的设计?
至于KIP,Apple官方的解释是搭载 Apple 芯片的 Mac 上提供的基于硬件的内核完整性保护,真正和Windows PG相对的是SIP,也就是System Integrity Protection。后者用于防范内存中的内核修改。系统使用强制访问控制技术提供此功能以及许多其他内核级保护措施,包括沙盒化和数据保险箱。
https://support.apple.com/zh-cn/guide/security/secb7ea06b49/web

SIP技术的整个体系主要分为文件系统保护,运行时保护,内核扩展签名。
文件系统保护(Filesystem protection),即对关键系统文件通过沙盒层限制root权限。
运行时保护(Runtime protection),主要表现在SIP开启的状态下,受保护的关键系统进程在执行状态下无法被进行代码注入,挂调试器调试,以及限制内核调试等等。
内核扩展签名(Kext signing),此项从10.9开始已经引入,OS X10.10中发展为强制要求签名。现已作为SIP的一部分进行部署。

评分

参与人数 1经验 +20 收起 理由
白露为霜 + 20 版区有你更精彩: )

查看全部评分

Dizziness2929
 楼主| 发表于 2024-4-29 14:54:18 | 显示全部楼层
本帖最后由 Dizziness2929 于 2024-4-29 14:55 编辑
DisaPDB 发表于 2024-4-29 14:05
貌似华为的HarmonyOS也是类似的设计?
至于KIP,Apple官方的解释是搭载 Apple 芯片的 Mac 上提供的基于 ...

是的,KIP对应的应该是HyperGuard和强制执行的内核影子堆栈,SIP则是PG和SELinux的混合物。

因此才说是“类似”而不是“一致”。
鸿蒙无法评价,因为(已被删除),但是类似的扶她内核设计还有不少(例如WSA、WSL、WSU)。
blah
发表于 2024-4-29 17:20:23 | 显示全部楼层
Dizziness2929 发表于 2024-4-29 10:27
这里的进程包括“恶意的内核模块”,也就是你熟知的“内核Rootkit/驱动程序Rootkit”

目前的代码里我似乎没有看到有断开内核模块的功能,只有结束程序的功能。
Dizziness2929
 楼主| 发表于 2024-4-29 17:23:10 | 显示全部楼层
blah 发表于 2024-4-29 17:20
目前的代码里我似乎没有看到有断开内核模块的功能,只有结束程序的功能。

那么可以去找那几个开源内核Rootkit试一下(
blah
发表于 2024-4-29 17:25:18 | 显示全部楼层
而且,目前Linux没有实现模块加载顺序控制,无法保证LKRG一定会优先加载。Windows至少还有个ELAM。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-12-22 13:45 , Processed in 0.143761 second(s), 19 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表