楼主: Dizziness2929
收起左侧

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

[复制链接]
ANY.LNK
发表于 2024-4-29 22:13:42 | 显示全部楼层
Dizziness2929 发表于 2024-4-29 18:38
有,叫做TrustedBoot(可信引导)。

GRUB之类的引导程序将引导链条上的各部分进行SHA-1/256(取决于你 ...

Windows好像也有个同名(看具体描述应该是一样的?)的功能
https://learn.microsoft.com/en-u ... d-boot#trusted-boot
00006666
发表于 2024-4-29 23:17:05 | 显示全部楼层
本帖最后由 00006666 于 2024-4-29 23:18 编辑
ANY.LNK 发表于 2024-4-29 22:13
Windows好像也有个同名(看具体描述应该是一样的?)的功能
https://learn.microsoft.com/en-us/windows ...

只要有个正规的签名,比如WHQL,就能绕过安全启动和受信任的引导

这些都是检查签名为主

https://learn.microsoft.com/zh-cn/windows/security/operating-system-security/system-security/secure-the-windows-10-boot-process

ANY.LNK
发表于 2024-4-29 23:21:10 | 显示全部楼层
00006666 发表于 2024-4-29 23:17
只要有个正规的签名,比如WHQL,就能绕过安全启动和受信任的引导

这些都是检查签名为主

有时甚至不正规的签名,像那些过期的无效签名有效日期在2015年之前的,也可以过
00006666
发表于 2024-4-29 23:34:45 | 显示全部楼层
ANY.LNK 发表于 2024-4-29 23:21
有时甚至不正规的签名,像那些过期的无效签名有效日期在2015年之前的,也可以过

2015 年 7 月 29 日之前

评分

参与人数 1人气 +1 收起 理由
ANY.LNK + 1 乐(

查看全部评分

blah
发表于 2024-4-29 23:39:32 | 显示全部楼层
Dizziness2929 发表于 2024-4-29 19:19
我想引用一句话:有些人是觉得自己懂了某种编程方法,就觉得自己明白了整个计算机,可实际上呢?

请好 ...

1. https://github.com/milabs/awesome-linux-rootkits,这是个开源Rootkit列表,不代表所有项目都停止更新。如https://github.com/h3xduck/TripleCross
2. LKRG相比PatchGuard,多做了一步遍历进程信息,定时校验每个进程的task_struct(参考src/modules/exploit_detection/exploit_detection.c),PatchGuard仅校验内核数据结构一致性
3. 目前的代码中并未有任何关于卸载内核模块代码(sys_delete_module)的调用,LKRG仅会清除异常task_struct指向的进程
4. SELinux、AppArmor等LSM代码直接编译进vmlinuz文件,不单独生成ko模块文件加载
5. LKRG支持的主流Linux均使用Dracut引导initramfs环境
5. LKRG等模块确实可以通过Dracut写入initramfs,但在Rocky Linux 8.9下dracut --force --add-drivers lkrg后能通过lsinitrd看到lkrg.ko,但并不会自动加载。Dracut仅会加载/sys/下出现的设备对应模块驱动,非硬件设备类模块不会加载。
6. 可通过/etc/modules-loads.d/下创建配置文件实现启动时加载模块,但该行为为systemd-modules-load服务控制,Systemd会并行启动服务,无法严格控制该服务的启动时间,无法像Windows通过ELAM确保反病毒驱动的预先加载
Dizziness2929
 楼主| 发表于 2024-4-30 07:25:27 | 显示全部楼层
本帖最后由 Dizziness2929 于 2024-4-30 07:33 编辑
blah 发表于 2024-4-29 23:39
1. https://github.com/milabs/awesome-linux-rootkits,这是个开源Rootkit列表,不代表所有项目都停止更 ...

1.但是列表中的Rootkit大部分已经过时至少两年。

2.在LKRG官网中已经提到了为什么要这样做:LKRG需要一部分用户态的数据来检测是否有异常的凭据变化(内核漏洞利用迹象)。

As controversial as this concept is, LKRG attempts to post-detect and hopefully promptly respond to unauthorized modifications to the running Linux kernel (integrity checking) or to credentials such as user IDs of the running processes (exploit detection). For process credentials, LKRG attempts to detect the exploit and take action before the kernel would grant access (such as open a file) based on the unauthorized credentials.
尽管这个概念存在争议,但 LKRG 试图对正在运行的 Linux 内核(完整性检查)或正在运行的进程的用户 ID 等凭据(漏洞检测)进行事后检测,并希望能够及时响应。对于进程凭据,LKRG 会尝试检测漏洞并在内核根据未经授权的凭据授予访问权限(例如打开文件)之前采取措施。

Master's Thesis of Juho Junnila, entitled "Effectiveness of Linux Rootkit Detection Tools", shows LKRG as the most effective kernel rootkit detector (of those tested).
Juho Junnila 的硕士论文题为“Linux Rootkit 检测工具的有效性”,表明 LKRG 是(测试者中)最有效的内核 rootkit 检测器。

3:不知道你有没有注意到LKRG的这个配置?

# Whether and to what extent to validate uses of usermodehelper (UMH).  Allowed
# values are 0 (validation disabled), 1 (allow only previously known programs),
# and 2 (completely block UMH).
#
# UMH can also be protected with pCFI regardless of this setting.
#
# UMH is a kernel-internal interface, which the kernel uses to invoke programs
# such as /sbin/modprobe (to auto-load a module on demand) and many others.
# When left unrestricted, UMH is convenient for kernel vulnerability exploits.
#
# Default: "1"
#lkrg.umh_validate = 1

# How to act on UMH usage violations.  Allowed values are 0 (log only), 1
# (prevent execution), and 2 (panic the kernel).
#
# Default: "1"
#lkrg.umh_enforce = 1

LKRG是在官网上没有写可以移除存在威胁的内核模块,这个你说得对,但是官网上也有写这是为什么:https://www.openwall.com/lists/lkrg-users/2020/06/14/5

Of course, none of these rootkits tried to bypass LKRG.  If they wanted
to, they could e.g. simply "rmmod p_lkrg" before loading themselves into
the kernel.  (Or the attacker could do that manually.)  In LKRG
development, we're currently more focused on exploits run before the
attacker got legitimate-looking privileged access to the system.  We're
not as focused on rootkits, which are loaded with legitimate-looking
privileged access.
当然,这些 rootkit 都没有试图绕过 LKRG。如果他们愿意,他们可以简单地“rmmod p_lkrg”,然后再将自己加载到内核中。(或者攻击者可以手动执行此操作。在 LKRG 开发中,我们目前更关注在攻击者获得对系统的合法特权访问之前运行的漏洞。我们不太关注 rootkit,它加载了看似合法的特权访问。

相关的测试论文在这里:https://oulurepo.oulu.fi/handle/10024/15182

该测试论文中明确指出:UMH验证可以阻止这些Rootkit的后续利用行为,这些Rootkit可以加载但无法起作用。

这并不妨碍我的结论是LKRG是有能力做到的,只是LKRG不愿意去做这些(LKRG更关心内核漏洞利用,而Rootkit是利用了合法的特权访问把自己加载进去的,换言之:如果攻击者都有能力在你的设备上装载他自己的模块,那不是LKRG能帮上忙的场合)

4、5、6合并回答:在我回复其他人的楼层中,我提到了如果要手动的变更LKRG加载优先级序列,你需要自定义内核。LKRG的systemd服务仅仅是为了实现自动加载LKRG(如果你看过那个服务做了什么就明白这一点)模块。

而且,在现代Linux上,systemd已经取代了init,所以并不需要自定义内核那么复杂,你可以尝试自定义systemd来实现优先加载LKRG模块。

至于SELinux之类的使用LSM(Linux安全模块)接口加载自己的东西,你说得对,LSM作为真正的内核的一部分是可以在更早阶段被加载(但是,LSM提供的功能相当有限)。

    Though LSM can be disabled in the vanilla kernel to allow the system to work functionally as it did in 2.4, all linux distributions will most likely be enabling it in their kernels. The mere existence of a security framework is not going to urge more users to use Trusted OS components in their kernels.
    虽然 LSM 可以在 vanilla 内核中禁用,以允许系统像在 2.4 中一样工作,但所有 linux 发行版很可能都会在其内核中启用它。仅仅存在一个安全框架并不会促使更多的用户在其内核中使用受信任的操作系统组件。
    Because LSM is compiled and enabled in the kernel, its symbols are exported. Thus, every rootkit and backdoor writer will have every hook he ever wanted in the kernel. This will allow for a new generation of sophisticated backdoors and rootkits that will be nearly impossible to detect.
    由于 LSM 是在内核中编译和启用的,因此会导出其符号。因此,每个 rootkit 和后门编写器都会在内核中拥有他想要的所有钩子。这将允许几乎不可能检测到的新一代复杂的后门和 rootkit。
    LSM still does not support stacking of security modules, or in fact support security modules currently at all! Today, grsecurity is compatible with all other LSMs -- if grsecurity were made to use the LSM framework, users would have to decide between it and other frameworks distros force on their users (Fedora/RHEL -> SELinux, Ubuntu/SuSE -> AppArmor). This removal of choice is detrimental to users' security.
    LSM 仍然不支持安全模块的堆叠,或者说实际上目前根本不支持安全模块!今天,grsecurity 与所有其他 LSM 兼容——如果 grsecurity 使用 LSM 框架,用户将不得不在它和其他框架发行版强加给用户(Fedora/RHEL -> SELinux、Ubuntu/SuSE -> AppArmor)之间做出决定。这种选择的删除对用户的安全是有害的。


Dizziness2929
 楼主| 发表于 2024-4-30 07:36:05 | 显示全部楼层
ANY.LNK 发表于 2024-4-29 23:21
有时甚至不正规的签名,像那些过期的无效签名有效日期在2015年之前的,也可以过

微软更多是为了震慑第三方厂商,而不是为了设备安全性。

此问题在一个我并不喜欢的人那里有解答:[科普]浅析WINDOWS 10的新签名政策 - WINDOWS核心编程 - 紫水晶编程技术论坛 - 努力打造成全国最好的编程论坛 - Powered by Discuz! (m5home.com)
早在今年8月,就有网友问过类似的问题,我当时给出了详细的回复:求解释WIN10(1607)的签名新政策。最近我正好在研究类似的事情,对这个新的签名政策有了更深入的了解。结论如下:
1、以后内核驱动程序都必须经过EV签名(SHA256算法,官方称呼是“扩展签名”),用老签名(SHA1算法,官方称呼是“标准签名”)不行了。
2、EV签名是有钱就能买到的,但是要想驱动被正常的加载,还必须“由硬件开发人员中心仪表板签名”(官网原话)。而普通开发者要获得这个签名不是容易的事情。这个可以理解为“新DSE政策”。
3、由于这个政策太严格,为了避免造成老设备大面积无法工作,所以目前微软还暂且留了个后门,就是不满足“系统为EFI模式启动、开启SecureBoot、驱动没在20150729之前被交叉签名”中的任一条件时,“新DSE政策”都不会被启用。
4、没有打补丁的WIN7X64SP1系统无法加载只带EV签名的驱动,您也可以通过对驱动进行双签名解决此问题。


Windows 11又加了一些:[科普]浅析WINDOWS 11的新签名政策 - WINDOWS核心编程 - 紫水晶编程技术论坛 - 努力打造成全国最好的编程论坛 - Powered by Discuz! (m5home.com)

WINDOWS 11内置了一个证书黑名单,拉黑了一些知名度非常高的“黑证书”,而且这个黑名单可以通过补丁的方式进行更新。如果你给驱动添加了“黑签名”,而且它正好在系统内置的黑名单里,那么你的驱动就无法加载。请注意,这个机制和DSE无关,即使你使用WINDBG关闭了DSE,驱动也是无法加载的。StartService返回的错误码转换为文字的意思是“一个证书已被它的颁发者明确地撤销”(我的两台电脑分别安装了英语和德语的系统,我看到的文字是"A certificate was explicitly revoked by its issuer."和"Ein Zertifikat wurde explizit durch den Aussteller gesperrt."。如果您有中文系统,请回帖告诉我系统原版的中文提示是什么)。

目前尚未清楚这个黑名单里有哪些证书。经我个人测试,确认它至少拉黑了“HT SRL”和“上海域联软件技术有限公司”这两个最广为人知的“黑证书”。


Dizziness2929
 楼主| 发表于 2024-4-30 07:40:15 | 显示全部楼层
本帖最后由 Dizziness2929 于 2024-4-30 07:54 编辑
DisaPDB 发表于 2024-4-29 21:13
ME确实是个很大的安全隐患
但是利用难度太高了,我至今没有见过再野利用

是的,但是以SA-00086为例,你会发现这个远程利用的难度说高吧,也不算。
目标平台激活了AMT;

攻击者知道AMT管理员密码,或利用漏洞绕过了验证机制;

BIOS没有设置密码保护(或者攻击者知道密码);

BIOS开启了ME区域的写入权限;如果上述条件均满足,那攻击者将能够远程利用该漏洞并访问Intel ME中的数据。

如何入侵一台已关机的电脑,或者在Intel ME中运行未签名的代码 - 知乎 (zhihu.com)

而在现实环境,有大量错误配置ME的存在,比如出厂了还是“工程模式”而非“产品模式”
00006666
发表于 2024-4-30 09:24:34 | 显示全部楼层
Dizziness2929 发表于 2024-4-30 07:36
微软更多是为了震慑第三方厂商,而不是为了设备安全性。

此问题在一个我并不喜欢的人那里有解答:[科 ...

这个驱动黑名单是公开的,但是实际中没看出来这个黑名单的作用,因为还有大量的黑签名和漏洞驱动并没有在名单内

https://learn.microsoft.com/zh-cn/windows/security/application-security/application-control/windows-defender-application-control/design/microsoft-recommended-driver-block-rules#microsoft-vulnerable-driver-blocklist
Dizziness2929
 楼主| 发表于 2024-4-30 09:34:07 | 显示全部楼层
00006666 发表于 2024-4-30 09:24
这个驱动黑名单是公开的,但是实际中没看出来这个黑名单的作用,因为还有大量的黑签名和漏洞驱动并没有在 ...

长远来看,微软努力的目标依旧是”检测有谁在利用漏洞而不修补既存的问题(在有限的视野里寻找无限的敌人多少是脑子有毛病)“,所以这个机制就是所谓的”有用,但总归是无用功“。
微软如果想正确的解决这个问题就得先改改自己的思路,比如把PatchGuard扩展到”检测内核模块之间的互相修改“(堵上这个漏洞可以有效的打击使用漏洞驱动的人)和”强制执行VBS和内核影子堆栈(不符合要求就不准安装Windows)“。

DSE(驱动程序强制签名政策)最多是做到了”可以追溯某个恶意的内核模块是哪来的“做不到”有了签名就代表安全“。

一句话:微软只是在打一场注定失败而且没用的战争。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

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

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-11-23 17:49 , Processed in 0.098165 second(s), 16 queries .

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

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