-
-
[已解决]驱动内核态怎么调用应用层的函数?
-
发表于:
2022-3-31 22:09
6566
-
目标是实现一个简单的进程筛选功能,比如通过校验exe文件的签名、MD5判断是否可以启动这个exe。
两种实现方案:
1、应用层挂钩拦截CreateProcess,涉及把dll注入所有进程里面,稳定性堪忧,所以选了下面这个方案。
2、驱动实现,内核层在PsSetCreateProcessNotifyRoutineEx中可以获取到正在被加载的filepath,并且可以控制进程是否允许加载,实现很简单。主要问题出在校验规则上,因为这个校验规则很复杂,不是简单对比一下文件名、文件路径,而是涉及exe的证书签名校验、MD5校验……等等复杂规则。
如果在应用层校验一个exe文件的签名、MD5非常简单,有现成的dll可以调用,但是在内核层要做文件的复杂校验规则想想就觉得可怕,所以想到在Ring0截获exe的filepath后送到Ring3去做Validate校验,然后在Ring3返回一个校验是否通过的Flag给Ring0,但是这样又在同步机制上遇到一些问题。
后来又查了资料发现有一些通过KeUserModeCallBack实现的Ring0 Call Ring3的方案,但是实现非常麻烦不说,还有很多ASM硬编码和shellcode,兼容性、稳定性堪忧。
不知道各位大神们有没有什么好的建议呀?遇到这种需要复杂Validate规则的情况怎么处理?
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2022-4-17 13:06
被碧水秋沙编辑
,原因: