[原创]突破主动防御之注册表监控篇(已更新)
文章作者:xyzreg [E.S.T] (www.xyzreg.net)信息来源:邪恶八进制信息安全团队(www.eviloctal.com)
目前主动防御的概念已经深入人心,许多杀毒软件、软件防火以及HIPS都具有了注册表监控功能,防止自启动项以及IE相关键值被修改,对防范病毒木马以及流氓软件等恶意程序起到了不小的作用。但是现有的注册表监控并非无懈可击,我们仍然可以绕过注册表监控修改注册表。
[b]绕过注册表监控的方法不止一种,应根据不同情况灵活运用。 除了本演示程序使用的操作HIVE文件修改注册表的方法,我们还可以写驱动解除注册表监控程序的钩子,或者直接调用CmXXXXX等未导出函数来操作注册表等。[/b]
测试了卡巴6、瑞星2007、GSS、江民2007等含有注册表监控功能的安全软件,我写的这个演示程序均可以突破他们成功修改注册表。
本程序仅作科普以及安全警示之用,旨在提高大家安全意识以及选择更好的安全产品。勿将程序中的方法用于非法用途。
[b][color=red]2月27日更新:
程序已升级,可以突破以前版本不能突破的 SSM(System Safety Monitor )最新版、卡巴6最新版、ZoneAlarm Pro 7、EQSecure、ProSecurity等。 就目前来看,此次增加的特殊方法修改注册表B可以突破除了犀牛(Safe'n'Sec)之外所有的实时拦截类注册表监控程序。[/color][/b]
当然,仍有方法突破犀牛改注册表的,比如使用非常规进Ring0法进Ring0然后恢复他的SSDT hook。至于360safe之类的注册表修改通知式的非实时注册表监控也有办法绕过。有两大方法,清除Notify回调函数和rootkit技术隐藏注册表。
[attach]5530[/attach]
程序下载地址:http://www.xyzreg.net/BypassRegMon.rar 在我的vista下无反映,与系统不兼容? 在vista下装载驱动已经很难了,一个原因是用户权限不够,另一个是没有数字认证的驱动vista拒绝装载,所以这个程序在你的VISTA下应该不不兼容.听说VISTA有伪造数字认证的漏洞,有时间去看看. 工具是好工具,不知LZ能不能把突破注册表监控的具体技术细节写出来?这样大家能更好学习..也不会让某些人觉得在炫耀了... 呵呵,楼主这个可是好东西啊,修改注册表里的启动项你的杀毒软件没有反应,意味着这是多么可怕 .....赶紧IDA一下..... [quote][b]引用第3楼[i]cncxz[/i]于[i]2007-02-26 13:07[/i]发表的[/b]:
工具是好工具,不知LZ能不能把突破注册表监控的具体技术细节写出来?这样大家能更好学习..也不会让某些人觉得在炫耀了...[/quote]
程序没加强壳没加花,很好逆向分析,IDA一下,这个程序的思路就出来~ [quote][b]引用第1楼[i]peter_yu[/i]于[i]2007-02-26 09:32[/i]发表的[/b]:
在我的vista下无反映,与系统不兼容?[/quote]
没在Vista下测试 卡巴
[img]http://bbs.2dai.com/attachments/month_0702/2007-02-26_23-51-30_OU8Vima821Ii.jpg[/img]
[img]http://bbs.2dai.com/attachments/month_0702/2007-02-26_23-52-34_yu4xChyeZdJz.jpg[/img]
[img]http://bbs.2dai.com/attachments/month_0702/2007-02-27_00-03-23_nuJJNEYVc6VZ.jpg[/img]
[img]http://bbs.2dai.com/attachments/month_0702/2007-02-27_00-04-22_OkWEpcJaCbfJ.jpg[/img] [quote][b]引用第13楼[i]vxk[/i]于[i]2007-02-27 03:34[/i]发表的[/b]:
haha~[/quote]
嘿嘿,可以突破SSM最新版了~ 人民需要科普,haha~ 不过那天群里提的高级方法就先不科普了,呵呵~ [quote][b]引用第12楼[i]安全[/i]于[i]2007-02-27 00:57[/i]发表的[/b]:
卡巴
.......[/quote]
请问你的卡巴6具体版本号是多少? 我在KIS6.0.0.300 以及 KIS 6.0.2.614均可以绕过~
你用我刚更新过的程序再试试看。 那我顺便请教一个问题.
如何突破WFP或饶过,和标题无管. KAV 6.0.307通过~~ 顺便请教一下LZ 如何具体实现清除Notify回调函数和rootkit技术隐藏注册表~~
谢谢~ 呵呵```厉害```
有机会下来测试下。
真不知道这是个好消息还是坏消息! [quote][b]引用第4楼[i]gyzy[/i]于[i]2007-02-26 13:08[/i]发表的[/b]:
呵呵,楼主这个可是好东西啊,修改注册表里的启动项你的杀毒软件没有反应,意味着这是多么可怕 .....赶紧IDA一下.....[/quote]
[s:39] 这个丢源代码是最好不过了,
gyzy即使要逆向,也要花太多的时间,是吧? 曾经试过用修改HIVE的办法可以过SSM,不过我用的是SSM免费版,不知道正式版的有没有对此限制 这跟reg load your.hiv好像没什么区别吧? 微软只要在OS上加个数字标准认证
可以屏蔽掉很多非法软件
更别说能运行得起来了
看看VISTA吧有空 厉害!
楼主如果能把源码发布出来就更好了! 还是希望楼主把源代码发表一下。 我下载完毕,去操作一下。我的kav6.0提示
2007-2-27 21:55:21 进程 C:\Documents and Settings\NEW\Local Settings\Temp\Rar$EX00.522\BypassRegMon2.exe (PID: 2724): 试图 执行可疑操作 被拒绝. [quote][b]引用第19楼[i]云飞天[/i]于[i]2007-02-27 22:17[/i]发表的[/b]:
我下载完毕,去操作一下。我的kav6.0提示
2007-2-27 21:55:21 进程 C:Documents and SettingsNEWLocal SettingsTempRar$EX00.522BypassRegMon2.exe (PID: 2724): 试图 执行可疑操作 被拒绝.[/quote]
你选哪个按扭时被拒绝的?试试 特殊方法B。如果还有反应请告知你的卡巴版本号。谢谢。 [quote][b]引用第9楼[i]xyzreg[/i]于[i]2007-02-27 07:10[/i]发表的[/b]:
请问你的卡巴6具体版本号是多少? 我在KIS6.0.0.300 以及 KIS 6.0.2.614均可以绕过~
你用我刚更新过的程序再试试看。[/quote]
是KAV6.0.2.671
[img]http://bbs.2dai.com/attachments/month_0702/2007-02-27_23-14-10_4Q5xA9b5RjUl.jpg[/img]
这是ssm免费版的报告
注册表:\\HKLM\Software\Microsoft\Windows\CurrentVersion\policies\Explorer\Run\ 添加 2007-2-27 PM 11:13:36
注册表:\\HKLM\Software\Microsoft\Windows\CurrentVersion\policies\Explorer\Run\ 添加 特殊方法 test.exe 2007-2-27 PM 11:13:36
[b][color=orangered]添加被阻止[/color][/b] 请教:
用RegSaveKey产生一个HIVE文件,
如何修改操作这个HIVE文件,
才可以使RegRestoreKey返回成功呢??? [quote][b]引用第21楼[i]安全[/i]于[i]2007-02-27 23:50[/i]发表的[/b]:
是KAV6.0.2.671
.......[/quote]
可以突破SSM最新版。你说的SSM免费版不是实时拦截型监控,这类注册表修改通知式的非实时注册表监控也有办法绕过。有两大方法,清除Notify回调函数和rootkit技术隐藏注册表。 [quote][b]引用第22楼[i]月无光[/i]于[i]2007-02-28 00:01[/i]发表的[/b]:
请教:
用RegSaveKey产生一个HIVE文件,
如何修改操作这个HIVE文件,
才可以使RegRestoreKey返回成功呢???[/quote]
可以直接RegRestoreKey~ [quote][b]引用第24楼[i]xyzreg[/i]于[i]2007-02-28 01:40[/i]发表的[/b]:
可以直接RegRestoreKey~[/quote]
我测试的情况是这样的:
用RegSaveKey导出一个HIVE文件,
用记事本打开,即使不做任何修改,此时再Ctrl+S保存一下,
再调用RegRestoreKey,就无法成功了。
xyzreg兄的意思是不是不要RegSaveKey,
而直接用RegRestoreKey恢复一个HIVE文件来ByPass??? [quote][b]引用第25楼[i]月无光[/i]于[i]2007-02-28 08:14[/i]发表的[/b]:
我测试的情况是这样的:
用RegSaveKey导出一个HIVE文件,
用记事本打开,即使不做任何修改,此时再Ctrl+S保存一下,
再调用RegRestoreKey,就无法成功了。
.......[/quote]
RegRestoreKey重复执行一下就应该成功了~ 嘿嘿 [quote][b]引用第21楼[i]安全[/i]于[i]2007-02-27 23:50[/i]发表的[/b]:
是KAV6.0.2.671
.......[/quote]
[b]我刚才用最新版 KAV6.0.2.675测试一下,特殊方法 A 他确实会报。但是我的程序已更新了,增加了 特殊方法改注册表 B,新增的这个就能突破卡巴最新版了,你可以试试~[/b] 呵呵```厉害```
有机会下来测试下。.。 卡巴来提特征码了 [s:34] [s:34] 对最新的360卫士没有效果。 厉害.......看来以后的杀防软件有得头疼了.....嘿嘿..... [quote][b]引用第30楼[i]xzchina[/i]于[i]2007-02-28 13:29[/i]发表的[/b]:
对最新的360卫士没有效果。[/quote]
360好像不是实时监控注册表吧? Set wmiServices = GetObject("winmgmts:root/default")
Set wmiSink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")
wmiServices.ExecNotificationQueryAsync wmiSink, _
"SELECT * FROM RegistryKeyChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' AND " & _
"KeyPath='SOFTWARE\\Microsoft\\Windows\\CurrentVersion'"
WScript.Echo "Listening..." & vbCrLf
While(1)
WScript.Sleep 1000
Wend
Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)
WScript.Echo "Received Registry Change Event" & vbCrLf & _
"------------------------------" & vbCrLf & _
wmiObject.GetObjectText_()
End Sub [color=royalblue][quote][b]引用第23楼[i]xyzreg[/i]于[i]2007-02-28 01:39[/i]发表的[/b]:
可以突破SSM最新版。你说的SSM免费版不是实时拦截型监控,这类注册表修改通知式的非实时注册表监控也有办法绕过。有两大方法,清除Notify回调函数和rootkit技术隐藏注册表。[/quote][/color]
SSM商业版的注册表监控,是监控到试图访问或修改,弹出提示框询问是否允许..........
免费版的注册表监控非常简陋,我设置了阻止修改,当试图修改时,SSM不弹提示框,而是直接阻止修改并模块报警
[quote][b]引用第27楼[i]xyzreg[/i]于[i]2007-02-28 08:19[/i]发表的[/b]:
[color=royalblue][b]我刚才用最新版 KAV6.0.2.675测试一下,特殊方法 A 他确实会报。但是我的程序已更新了,增加了 特殊方法改注册表 B,新增的这个就能突破卡巴最新版了,你可以试试~[/b][/quote][/color]
是的,特殊方法A不能过KAV6.02671,特殊方法B可以过了
只是在清除修改时候,会监控到 矛与盾的较量!
技术就是这样提高的! [quote][b]引用第32楼[i]月无光[/i]于[i]2007-02-28 14:01[/i]发表的[/b]:
360好像不是实时监控注册表吧?[/quote]
我的截图:
http://wisdombird.bokee.com/inc/bx.jpg [quote][b]引用第30楼[i]xzchina[/i]于[i]2007-02-28 13:29[/i]发表的[/b]:
对最新的360卫士没有效果。[/quote]
[b]我主贴里不是写了么:
至于360safe之类的注册表修改通知式的非实时注册表监控也有办法绕过。有两大方法,清除Notify回调函数和rootkit技术隐藏注册表。 [/b] 特殊方法修改 B可突破卡巴斯基安全套装6.0 楼主发表的东西是好东西,可以开源学习下吗 楼主,运行的时候,我的ZA提示用户是否同意修改。
还有我忘了几楼的朋友说vista驱动的问题,现在vista对硬件厂商有认证。你可以去你硬件厂商的主页看看有没有相关的vista版驱动 [quote][b]引用第40楼[i]net-owl[/i]于[i]2007-03-01 16:56[/i]发表的[/b]:
楼主,运行的时候,我的ZA提示用户是否同意修改。
还有我忘了几楼的朋友说vista驱动的问题,现在vista对硬件厂商有认证。你可以去你硬件厂商的主页看看有没有相关的vista版驱动[/quote]
特殊方法B可以绕过ZA最新版。 特殊方法B是不是使用了不监控的路径
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies
和配合C:\XYZ2.HIV
来实现? SSM通不过,我用的是正版的SSM。 .HIV是不是和.Reg的意思差不多?
.HIV里备份的是注册表项,然后用RegRestoreKey恢复?
反了下汇编貌似是这个意思,呵呵 这个程序的源没什么,只要是这个程序当你点"利用特殊方法修改注册表"的时候,这个程序会释放出一个c:\\xyz2.hiv文件,然后将SeRestorePrivilege事件作为参数传递给一个函数,这个函数负责把程序提升到system。之后对注册表进行操作,最后作者del xyz2.hiv了
真正的精华,是xyz2.hiv。
.text:004014D3 loc_4014D3:
.text:004014D3 cmp ax, 401h ;用户是否点了“退出”按扭
.text:004014D7 jnz short loc_4014FD ;点了就退
.text:004014D7
.text:004014D9 call sub_401090 ;如果没点,就利用特殊方法修改注册表
.text:004014D9
.text:004014DE mov eax, [esp+4]
.text:004014E2 push 20h
.text:004014E4 push offset s_S ; "提示"
.text:004014E9 push offset s_TIVSAPUB___CJ ; "\n特殊方法修改注册表自启动项 B
...\r\n\r\n如"...
.text:004014EE push eax
.text:004014EF call ds:MessageBoxA
.text:004014F5 mov eax, 1
.text:004014FA retn 10h
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
下面才是此程序的精华部分:
.text:00401090 sub_401090 proc near ; CODE XREF: .text:004014D9p
.text:00401090
.text:00401090 var_14 = dword ptr -14h
.text:00401090 phkResult = dword ptr -8
.text:00401090 NumberOfBytesWritten= dword ptr -4
.text:00401090
.text:00401090 sub esp, 8 ;分配内存
.text:00401093 push ebx ;这里不是参数,而是保存寄存器
.text:00401094 push esi
.text:00401095 push edi
.text:00401096 push offset Type ; "xyz2"
.text:0040109B push 84h ; lpName
.text:004010A0 push 0 ; hModule
.text:004010A2 call ds:FindResourceA ; 查找xyz2资源
.text:004010A8 mov esi, eax
.text:004010AA push esi ; hResInfo
.text:004010AB push 0 ; hModule
.text:004010AD call ds:SizeofResource ; 获取资源长度
.text:004010B3 push esi ; hResInfo
.text:004010B4 push 0 ; hModule
.text:004010B6 mov edi, eax
.text:004010B8 call ds:LoadResource ; 装载资源
.text:004010BE push 0 ; hTemplateFile
.text:004010C0 push 0 ; dwFlagsAndAttributes
.text:004010C2 push 2 ; dwCreationDisposition
.text:004010C4 push 0 ; lpSecurityAttributes
.text:004010C6 push 0 ; dwShareMode
.text:004010C8 push 40000000h ; dwDesiredAccess
.text:004010CD push offset FileName ; "c:\\xyz2.hiv"
.text:004010D2 mov ebx, eax
.text:004010D4 call ds:CreateFileA ; 打开文件准备把资源写入
.text:004010DA push 0 ; lpOverlapped
.text:004010DC mov esi, eax
.text:004010DE lea eax, [esp+18h+NumberOfBytesWritten]
.text:004010E2 push eax ; lpNumberOfBytesWritten
.text:004010E3 push edi ; nNumberOfBytesToWrite
.text:004010E4 push ebx ; hResData
.text:004010E5 call ds:LockResource ; 锁定资源
.text:004010EB push eax ; lpBuffer
.text:004010EC push esi ; hFile
.text:004010ED call ds:WriteFile ; 创建一个C:\xyz2.hiv文件
.text:004010F3 mov ebx, ds:CloseHandle
.text:004010F9 push esi ; hObject
.text:004010FA call ebx ; CloseHandle
.text:004010FC push offset Name ; "SeRestorePrivilege"
.text:00401101 call sub_401000 ; SeRestorePrivilege事件作为参数传递给一个 ;函数
.text:00401101
.text:00401106 add esp, 4 ; 把空间还给系统
.text:00401109 lea ecx, [esp+14h+phkResult]
.text:0040110D push ecx ; phkResult
.text:0040110E push offset SubKey ; ;"SOFTWARE\\Microsoft\\Windows\\CurrentVersi"...
.text:00401113 push 80000002h ; hKey
.text:00401118 call ds:RegOpenKeyA ; sub_401000函数已经帮我们把一切都摆平了, ;可以设置了
.text:0040111E mov edi, ds:RegRestoreKeyA
.text:00401124 xor esi, esi
.text:00401126 jmp short loc_401130
.text:0040115C pop ebx
.text:0040115D add esp, 8 ;典型的函数自己恢复堆栈
.text:00401160 retn
.text:00401160
.text:00401160 sub_401090 endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
将SeRestorePrivilege事件传递之后,程序做了如下动作,典型的调用OpenProcessToken等函数获取并且修改令牌来提升权限:
.text:00401000 TokenHandle = dword ptr -1Ch
.text:00401000 Luid = _LUID ptr -18h
.text:00401000 NewState = _TOKEN_PRIVILEGES ptr -10h
.text:00401000 lpName = dword ptr 4
.text:00401000
.text:00401000 sub esp, 1Ch
.text:00401003 lea eax, [esp+1Ch+TokenHandle]
.text:00401006 push eax ; TokenHandle
.text:00401007 push 28h ; DesiredAccess
.text:00401009 call ds:GetCurrentProcess
.text:0040100F push eax ; ProcessHandle
.text:00401010 call ds:OpenProcessToken ; Open the access token associated with a process
.text:00401016 test eax, eax
.text:00401018 jz short loc_401084
.text:00401018
.text:0040101A mov edx, [esp+1Ch+lpName]
.text:0040101E lea ecx, [esp+1Ch+Luid]
.text:00401022 push ecx ; lpLuid
.text:00401023 push edx ; lpName
.text:00401024 push 0 ; lpSystemName
.text:00401026 call ds:LookupPrivilegeValueA
.text:0040102C test eax, eax
.text:0040102E jnz short loc_40103E
.text:0040102E
.text:00401030 mov eax, [esp+1Ch+TokenHandle]
.text:00401033 push eax ; hObject
.text:00401034 call ds:CloseHandle
.text:0040103A add esp, 1Ch
.text:0040103D retn
.text:0040103D
.text:0040103E ; ---------------------------------------------------------------------------
.text:0040103E
.text:0040103E loc_40103E: ; CODE XREF: sub_401000+2Ej
.text:0040103E mov ecx, [esp+1Ch+Luid.LowPart]
.text:00401042 mov edx, [esp+1Ch+Luid.HighPart]
.text:00401046 push 0 ; ReturnLength
.text:00401048 push 0 ; PreviousState
.text:0040104A push 10h ; BufferLength
.text:0040104C lea eax, [esp+28h+NewState]
.text:00401050 push eax ; NewState
.text:00401051 mov [esp+2Ch+NewState.Privileges.Luid.LowPart], ecx
.text:00401055 mov ecx, [esp+2Ch+TokenHandle]
.text:00401059 push 0 ; DisableAllPrivileges
.text:0040105B push ecx ; TokenHandle
.text:0040105C mov [esp+34h+NewState.PrivilegeCount], 1
.text:00401064 mov [esp+34h+NewState.Privileges.Luid.HighPart], edx
.text:00401068 mov [esp+34h+NewState.Privileges.Attributes], 2
.text:00401070 call ds:AdjustTokenPrivileges ; Enable/disable privileges in the specified access token
.text:00401076 test eax, eax
.text:00401078 jnz short loc_401084
.text:00401078
.text:0040107A mov edx, [esp+1Ch+TokenHandle]
.text:0040107D push edx ; hObject
.text:0040107E call ds:CloseHandle
.text:0040107E
.text:00401084
.text:00401084 loc_401084: ; CODE XREF: sub_401000+18j
.text:00401084 ; sub_401000+78j
.text:00401084 add esp, 1Ch
.text:00401087 retn
.text:00401087
.text:00401087 sub_401000 endp 其实最主要的就是使用RegRestoreKeyA了,过咔吧就是它,哈哈 我在自己的機子執行RegSaveKey(鍵值是HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce)而生成的*.HIV文件拿到其他機子上用RegRestoreKey導入該文件,這樣會不會有問題?
另外,有沒有函數可修改*.HIV文件?如我要在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ 新增一啟動路徑後再導回註冊表,該如何做?
我試過用記事本打開生成後的*.HIV文件發現是一堆亂碼,不是一般的文本格式.
煩請指教,謝謝. 命令行下用Reg Save 导出hive,程序中RegRestoreKey替换即可。
回takdick的问题:可以在命令行下用Reg Load 将hive文件挂载到注册表中,即可修改,改完再调用Reg unload 我试了下。我的 微点主动防御 不报警,重起后微点也没提示,不过这个软件说是主动防御软件!
难道是忽悠???还是别的什么的!!! 呵呵 注册表的变动就报警 也太不智能了吧 你看下注册表变更日志里有记录没?
页:
[1]
2