还记得去年三月,有这样子一篇新闻,“NVIDIA数字签名被盗,病毒浑水摸鱼,杀毒软件也没用”
所以发问,为什么我们的软件稍有敏感操作就会被ban掉?为什么一些明显高权限的软件却不会被爆敏感?为什么我们不可以关掉杀软,杀软却总能停掉我们的进程?这就要从Windows内核的信任关系说起了。
为什么我们不能ban杀软?
首先我们要知道,Windows有R3层和R0层。如图⬇️
R0又称为内核层,我们的操作系统和驱动程序是在这一层的。R3层称为用户层,我们平时的应用比如微信、QQ就是在这一层的。R0层拥有最高的内核权限,R3层拥有最低的权限。应用程序工作在RING3层,只能访问RING3层的数据,操作系统工作在RING0层,可以访问所有层的数据(上可犯下,下不可犯上)。如果普通应用程序企图执行RING0指令,则Windows会显示“非法指令”错误信息。而我们杀软,就是以驱动运行在R0层的。什么?就是让我们网卡或者麦克风跑起来的那东西。驱动(.sys),犹如(.dll)一样,作为一个函数库来调用的。我们用openark可以查看到电脑加载的驱动列表⬇️"驱动管理"
除了网卡声卡等等,你还可以看到火绒,360或者其他这些软件一样的驱动文件。
用户层如何操作内核层?如果你理解了上文,那你肯定会想,那我们同样编写一个驱动,加载到系统,不就可以同权限对抗了吗?可以吗?答案是可以!举个🌰,在游戏安全对抗时,我们的TP、EAC等等反作弊软件也是以驱动的形式加载到系统的。那我们去修改内存呢?我们需要用winapi来实现,比如WriteProcessMemory函数。但是api嘛,还是一个调用接口一样。Windows给我们提供了一个访问内核的接口供我们访问内核。而驱动呢?是直接访问内核的(但这也需要一个R3层的用户界面供我们调用驱动对吧)。如图是两种方式⬇️
那我们反作弊程序呢?
这样子的,以驱动模式加载到内核的,我们可以看到,当我们从R3层调用winapi时,会被AntiCheatHOOK掉,对吧,上可犯下嘛。那我们以mydrive驱动去调用呢?我们这时也作为驱动程序加载,就无法被检测对吧!我们直接操作的是内核。回到我们的正题!杀软与恶意软件直接的对抗也是这样子的。我们或许听过内核级别的提权或者内核级别的shell就是这个意思!那我们是不是可以直接写一个驱动加载来晃飞杀软呢?答案是——不完全可以。开头引子就是案例对吧。那如何实现呢?我们要知道,Windows对内核的调用有严格的信任机制来管理。我们需要有效的签名才可以作为合法的驱动加载(大概几千吧)。由于dse的出现,未经签名的驱动无法被内核加载,而使用带有签名的漏洞驱动通过利用漏洞的方式加载无签名的驱动是一种可行的方式。
实现案例
方案一
“获取内核级别提权的最好方法是攻击一个写的稀烂的驱动”逆向思维是,我们可以用一个写的稀烂的驱动来加载我们的驱动。参考如下链接
"漏洞的位置位于驱动ioctl处理函数中,驱动在初始化过程中注册了ioctl处理函数并在控制码为0x80862007的对应函数中提供了任意地址读写、获取物理地址、映射任意地址等功能"展开来讲篇幅就太长了。
方案二
加载泄露的驱动,虽然往往这些驱动已经被各大杀软加入黑名单,会被来回鞭尸。但是在游戏外挂领域,内核对抗,逆向分析方面应用广泛。
方案三
禁用驱动程序强制签名,按下Win键,输入cmd,在搜索结果中找到“命令提示符”,右键点击“以管理员身份运行”。
在命令提示符窗口中,输入以下命令并按回车键:
重启计算机后,驱动程序强制签名将被禁用。
DONE,如何给文件签名见下篇文章!
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...