首页
论坛
课程
招聘
Adventure
雪    币: 3348
活跃值: 活跃值 (22)
能力值: ( LV6,RANK:90 )
在线值:
发帖
15
回帖
37
粉丝
1

[讨论][原创]迅雷有必要搞这样的流氓行为吗?

2020-1-8 14:58 4512

[讨论][原创]迅雷有必要搞这样的流氓行为吗?

2020-1-8 14:58
4512
最近我们的系统拦截到操作系统刚启动services.exe的时候,检测到该系统进程中执行未知shellcode加载dll的事件,对shellcode进行简单分析后,发现通过LdrLoadDll函数加载了一个迅雷的dll文件

shellcode加载的dll文件路径:C:\Program Files (x86)\Common Files\Thunder Network\xlguard\xlsvc001.dll

shellcode反汇编,如下图:

由于被加载DLL是迅雷的,所以这事和迅雷有莫大的关系! 可是网上缺搜不到和xlsvc001.dll这个文件相关的任何资料,关注点转移到存放这个dll的目录名称xlguard


原来早在两年前迅雷就已经被人关注到xlguard这关键词了,简单看了一下该文只是说逆向该驱动发现会在卸载驱动和关机时,再把迅雷的XLServicePlatform服务通过注册表,设置为开机自动启动


具体细节,参考卡饭链接:https://bbs.kafan.cn/thread-2072871-1-1.html


使用IDA看了一下xlguard.sys文件,发现它利用内核强大权限,监控主流操作系统上所有DLL加载事件

并在事件回调函数中且判断如果是services.exe进程加载dll事件


首先修改services.exe进程EPROCESS结构的签名级别为0  ==  Unchecked

关于保护进程的签名级别可以参考:《 Protected Processes Part 3 : Windows PKI Internals (Signing Levels, Scenarios, Root Keys, EKUs & Runtime Signers 》 http://www.alex-ionescu.com/?p=146  

以及其看雪其它人对《迅雷在win10x64上的services进程注入》的分析 https://bbs.pediy.com/thread-250446.htm   

 


然后在services进程中申请可执行内存,拷贝驱动中硬编码的shellcode模板,并替换掉模板中共4处需要动态替换的地址:

0x11111111、0x22222222、0x33333333、0x44444444 




驱动中的shellcode模板如下,与我们在services进程中拦截到的shellcode一致:

unsigned char ida_chars[] =
{
0x48, 0x89, 0x5C, 0x24, 0x08, 0x48, 0x89, 0x6C, 0x24, 0x10,
0x48, 0x89, 0x74, 0x24, 0x18, 0x48, 0x89, 0x7C, 0x24, 0x20,
0x41, 0x54, 0x48, 0x83, 0xEC, 0x20, 0x83, 0x3D, 0x11, 0x11,
0x11, 0x11, 0x00, 0x48, 0x8B, 0x2D, 0x22, 0x22, 0x22, 0x22,
0x49, 0x8B, 0xD9, 0x4D, 0x8B, 0xE0, 0x48, 0x8B, 0xFA, 0x48,
0x8B, 0xF1, 0x75, 0x13, 0x4C, 0x8D, 0x05, 0x33, 0x33, 0x33,
0x33, 0xC7, 0x05, 0x44, 0x44, 0x44, 0x44, 0x01, 0x00, 0x00,
0x00, 0xFF, 0xD5, 0x4C, 0x8B, 0xCB, 0x4D, 0x8B, 0xC4, 0x48,
0x8B, 0xD7, 0x48, 0x8B, 0xCE, 0x48, 0x8B, 0xC5, 0x48, 0x8B,
0x5C, 0x24, 0x30, 0x48, 0x8B, 0x6C, 0x24, 0x38, 0x48, 0x8B,
0x74, 0x24, 0x40, 0x48, 0x8B, 0x7C, 0x24, 0x48, 0x48, 0x83,
0xC4, 0x20, 0x41, 0x5C, 0x48, 0xFF, 0xE0
};

随后查看被注入的xlsvc001.dll到底想搞什么事情! 首先第一个函数初始化一些需要用到的函数到全局变量



然后通过读取services.exe自身特征,找到guid为{367abb81-9844-35f1-ad32-98f038001003}的字符,搜索时注意大小端排序,使用16进制编辑器可对services.exe二进制文件搜索 81bb7a36


定位到guid以后,加固定偏移,可以得到这个com对象的接口虚表,最终这个函数返回虚表地址。拿到虚表地址以后,对虚表中的0x10和0x1C偏移位置的接口函数地址进行替换



那么问题来了,这个guid代表哪个com对象? 被替换的接口是什么? 替换的目的是什么?


通过github搜索相关guid找到了这个guid是关于svcctl对象的,这个对象中的0x10和0x1C号函数正是OpenServiceA和OpenServiceW




相关地址: https://github.com/mauropalumbo75/bro-2.6.1/blob/29fe549f512c032c14124d962c4e80018059a7ea/scripts/base/protocols/dce-rpc/consts.bro#L649


看雪上已经有相关Hook劫持RPC函数的文章: https://bbs.pediy.com/thread-251158-1.htm


那么迅雷为什么要劫持这两个函数呢?


通过劫持这两个函数,发现如果是打开XLServicePlatform服务,再通过I_RpcBindingInqLocalClientPID获取请求的客户端进程ID-》再获取进程名称



如果是thunder.exe、lserviceplatform.exe就可以打开该服务 




如果是mmc.exe、msconfig.exe、svchost.exe、taskhost.exe、taskmgr.exe,则返回5 拒绝访问





MSDN ROpenServiceA文档: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/ddd7c91f-e4fb-446e-9053-0b6308c640eb




我通过任务管理器,找到迅雷的XLServicePlatform服务,尝试停止该服务,果然提示拒绝访问!!




通过这种方式劫持rpc服务请求确实挺有意思!




[公告]看雪论坛2020激励机制上线了!发帖不减雪币了!如何获得积分快速升级?

最新回复 (17)
BRUCE_897
雪    币: 38
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
0
回帖
5
粉丝
0
BRUCE_897 活跃值 2020-1-8 15:00
2
0
大佬 写个东西搞死他
悲桑的问题
雪    币: 67
活跃值: 活跃值 (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
0
回帖
11
粉丝
0
悲桑的问题 活跃值 2020-1-8 15:02
3
2
大佬 666,带我飞,我给你生猴子~
payload
雪    币: 1
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
0
回帖
2
粉丝
0
payload 活跃值 2020-1-8 15:06
4
0
膜拜大佬!自己要认真学习下
灬哈密瓜
雪    币: 1062
活跃值: 活跃值 (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
0
回帖
23
粉丝
0
灬哈密瓜 活跃值 2020-1-8 15:15
5
0
律师函警告
pureGavin
雪    币: 8109
活跃值: 活跃值 (141)
能力值: ( LV8,RANK:120 )
在线值:
发帖
44
回帖
714
粉丝
14
pureGavin 活跃值 2020-1-8 15:29
6
1
迅雷很早之前就删了,最近才看到一个叫motrix的开源软件,还没用过,不知道干不干净
bjtwokeight
雪    币: 2963
活跃值: 活跃值 (81)
能力值: ( LV3,RANK:30 )
在线值:
发帖
4
回帖
132
粉丝
0
bjtwokeight 活跃值 2020-1-8 15:57
7
0
问题不大
gamehack
雪    币: 4680
活跃值: 活跃值 (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
4
回帖
152
粉丝
1
gamehack 活跃值 2020-1-8 16:48
8
0
老的极速版,试了一下,任务管理器可以停止这个服务
Sprite雪碧
雪    币: 10426
活跃值: 活跃值 (35)
能力值: ( LV4,RANK:50 )
在线值:
发帖
2
回帖
278
粉丝
6
Sprite雪碧 活跃值 1 2020-1-8 18:51
9
0
mark
黑洛
雪    币: 5270
活跃值: 活跃值 (49)
能力值: ( LV5,RANK:70 )
在线值:
发帖
6
回帖
364
粉丝
3
黑洛 活跃值 1 2020-1-9 00:26
10
0
之前抄注入的时候就说过了,但是现在的XL没有了吧
shuyangzjg
雪    币: 2659
活跃值: 活跃值 (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
1
回帖
148
粉丝
0
shuyangzjg 活跃值 2020-1-9 09:47
11
0
mark
昵称好麻烦
雪    币: 849
活跃值: 活跃值 (32)
能力值: ( LV3,RANK:30 )
在线值:
发帖
11
回帖
65
粉丝
3
昵称好麻烦 活跃值 2020-1-9 10:17
12
0
我的文章被引用了,好激动
lynnux
雪    币: 308
活跃值: 活跃值 (11)
能力值: ( LV4,RANK:40 )
在线值:
发帖
23
回帖
362
粉丝
0
lynnux 活跃值 2020-1-9 10:41
13
0
学习了,还可以这样玩
编程小白
雪    币: 137
活跃值: 活跃值 (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
3
回帖
113
粉丝
0
编程小白 活跃值 2020-1-9 17:42
14
0
这个手法可以应用于EDR的RPC检测,是一个不错的例子,比如DNS也可以通过类似方法获取到真正发起查询的进程信息。
mb_tdoscbua
雪    币: 1186
活跃值: 活跃值 (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
0
回帖
4
粉丝
0
mb_tdoscbua 活跃值 2020-1-14 21:57
15
0
大佬 666,带我飞,我给你生猴子~
Oday小斯
雪    币: 732
活跃值: 活跃值 (24)
能力值: ( LV3,RANK:20 )
在线值:
发帖
3
回帖
62
粉丝
0
Oday小斯 活跃值 2020-1-15 00:25
16
0
感谢分享
罗小墨
雪    币: 87
活跃值: 活跃值 (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
2
回帖
63
粉丝
0
罗小墨 活跃值 2020-1-15 10:32
17
0
大佬大佬
中国石油
雪    币: 53
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
0
回帖
9
粉丝
0
中国石油 活跃值 2020-1-30 17:33
18
0
感谢分享
游客
登录 | 注册 方可回帖
返回