一、写在前面
相信许多网安人经常会遇到这种情况:每每做一些“敏感操作”时,总会遇到各种各样的安全软件对行为拦截。正巧笔者想起了前两年xjun师傅原创的文章《利用procexp驱动突破PPL限制》,于是本文将结合该内容,分享如何根据该驱动进行二次利用让安全软件彻底安静。
利用procexp驱动突破PPL限制原文链接:
https://www.52pojie.cn/thread-1546336-1-1.html
*左右滑动查看更多
二、PPL突破
从Windows8.1/Windows Server 2012 R2引入了PPL(Protected Process Light)安全机制后,对受保护的进程无法进行一些如线程注入、内存读写等恶意操作。根据xjun师傅的文章,通过procexp驱动调用ZwOpenProcess会把PreviousMode设置为KernelMode可以绕过PPL。但安全防护软件都有OBJECT_CALLBACK对受自身保护的进程进行句柄降权。
(Query information, VM read, Synchronize, Read control)
*左右滑动查看更多
所以无法通过驱动直接获得句柄,然后对防护软件进行恶意操作,但可以通过获得csrss这类的系统进程句柄,通过注入到这些可信的进程再对安全防护软件进行恶意操作。
三、构造跳板
绝大部分的安全软件都不会对csrss.exe这个进程(不要有自己创建同名进程、傀儡进程来绕过这个愚蠢的想法)有比较严的防护。通过测试验证可以知道(懒得分析回调函数)通过csrss.exe打开的进程句柄虽然不是FullContorl,但也是拥有较高的权限的。
(0x1f1fff (Query information, Set information, Set quotas, Set session ID, Create threads。。。。)
*左右滑动查看更多
但没有PROCESS_TERMINATE权限。
当csrss拥有对目标进程的CreateThread权限的句柄后,那么就可以通过注入到csrss后,通过线程注入到ZhuDongFangYu.exe以结束进程。
但驱动只提供OpenProcess,没有提供CreateThread的功能,所以如何注入到csrss成为了一个问题(远程线程也会有PPL的限制)。
很庆幸还有获得的csrss句柄PROCESS_VM_OPERATION/VM_READ/VM_WRITE权限,只需要通过Read/WriteProcessMemory对一些函数如NtClose之类的频发函数进行修改,达到hook去执行写入到csrss进程里用来结束ZhuDongFangYu.exe的shellcode。
但这样时机并不是太可控,通过调试发现csrsrv模块里的CsrCreateProcess函数是一个很好的利用点,注入后只需要创建个进程就能执行到shellcode。
四、工具编写
驱动调用的部分就不写了,xjun师傅给的比较齐全,uacpass、利用代码都给到了,大家可自行参考。我们只需要写shellcode和注入那一块即可,编写内容如下图:
五、结果测试
效果展示,打开某杀软进行测试:
在win7系统下:
在win10系统下:
六、缓解措施
建议结合终端和流量日志等进行综合分析,从而弥补终端安全机制被绕过后的威胁检测缺失。当前高版本process explorer的驱动已经修复了这个可以被利用的点,可以通过文件过滤驱动判断procexp是否是加载了可以被利用的版本。或对跟驱动通信的进程做检验,对于不带微软签名的进程禁止访问。
往期回顾
微信扫一扫
关注该公众号