能力值:
( LV2,RANK:10 )
|
-
-
2 楼
看来误报很严重啊
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
貌似是个不错的想法,不知道有没有实现的代码,发出来共享下。
|
能力值:
(RANK:330 )
|
-
-
4 楼
向瑞星同志学习
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
瑞* 实在是敢作敢为
学习.
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
[QUOTE=;]...[/QUOTE]
只是可疑罢了~软件不是人 没这么智能吧
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
只是可疑罢了~软件不是人 没这么智能吧
呵呵,
再看看我2004年写的一个安全小工具,使用的是现在流行的HIPS理念
装上瑞星就把它当木马病毒杀了,看来有人没有分析就添加病毒库了
http://www.raslab.net/download/AntiVirus1.0.exe
|
能力值:
( LV8,RANK:130 )
|
-
-
8 楼
刚才理解错了,不好意思。
我觉得,Inline也未必保险,ShellCode可以找个地方执行原始指令再跳到回原函数继续执行。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
8楼
找一个esp也不是吃菜一样,随便夹都是,你还想把shellcode控制着当弹簧吗
虽说这种可能性是存在的,但在现实世界就....,呵呵 , 你可以花几年试试看
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
在stdcall类型的vc代码钩子函数中使用下面代码就可以了
_asm
{
add ebp,4;
mov eax,[ebp];
sub ebp,4;
}
然后你再把eax值 mov到你的变量中去,就得到函数返回地址了
|
能力值:
( LV12,RANK:300 )
|
-
-
11 楼
既然提到了flash网马,我记得楼主看过我的帖子呀,难道楼主没注意? 事实是,那个Flash网马使用的shellcode,就正好绕过了楼主所提到的检测。
【原创】flash漏洞所用shellcode的分析中,提到shellcode调用LoadLibraryA的实现方式:
以下是我的帖子中的内容:
***********************************
接着是使用LoadLibraryA加载urlmon.dll并取得URLDownloadToFileA函数的地址。值得一提的是这里不是直接 call而是用在子函数里用先 push返回地址再 jmp的方式。
00407069 6A 01 push 1
0040706B 59 pop ecx
0040706C 68 6F6E0000 push 6E6F
00407071 68 75726C6D push 6D6C7275
00407076 54 push esp ; 'urlmon'
00407077 8B06 mov eax, dword ptr [ esi] ; LoadLibraryA
00407079 E8 10010000 call 0040718E ; (13)为了对付溢出检查,采用kernel32.dll中搜到的retn地址作为返回地址,调用LoadLibraryA。
0040718E 8B56 30 mov edx, dword ptr [ esi+30] ; (14)
00407191 41 inc ecx
00407192 5B pop ebx
00407193 52 push edx
00407194 03E1 add esp, ecx
00407196 03E1 add esp, ecx
00407198 03E1 add esp, ecx
0040719A 03E1 add esp, ecx
0040719C 83EC 04 sub esp, 4
0040719F 5A pop edx
004071A0 53 push ebx
004071A1 8BDA mov ebx, edx
004071A3 ^ E2 F7 loopd short 0040719C
004071A5 52 push edx ; 返回地址入栈,这里刚好是一个retn命令
004071A6 FFE0 jmp eax ; jmp进API函数开头
***********************************
这里shellcode就从kernel32.dll中搜索到了一个retn的地址,然后在调用LoadLibraryA的时候,采用先push这个地址,再jmp到API函数中的方法,完成一个等效的call。而且这时候,进入LoadLibraryA时堆栈的返回地址是在kernel32.dll中,而不是在堆栈中,因此就绕过了这种检测。
另外,这种思想卡巴斯基早就用了,而且这种绕过的方法也早就公开了,网上随便一搜,就看到安焦的文章:
http://www.xfocus.net/articles/200708/936.html
这篇文章不但讨论了卡巴斯基使用的这种方法(也就是楼主所提的这种方法)的缺点,还提出了更进一步结合对shellcode特征码的搜索来检测的思想。
|
能力值:
( LV8,RANK:130 )
|
-
-
12 楼
不用我解释了吧~
还花几年~
囧
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
调用完LoadLibrary后又返回到栈上,然后再来URLDownloadToFileA跳转??
|
能力值:
( LV13,RANK:970 )
|
-
-
14 楼
是不是老纳同事?
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
11 楼的跳过了几重检测?
一重还是多重调用栈检测?
如果真要做溢出检测,估计我会写3重调用栈检测
|
能力值:
( LV8,RANK:130 )
|
-
-
16 楼
[QUOTE=commport;477943]在stdcall类型的vc代码钩子函数中使用下面代码就可以了
_asm
{
add ebp,4;
mov eax,[ebp];
sub ebp,4;
}
然后你再把eax值 mov到你的变量中去,就得到函数返回地址了[/QUOTE]
我的意思是:你不一能Hook到。
你Patch掉的指令可以去另外的地方执行。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
Windows 是一层一层的函数往下调用
你就是到了sysenter指令进入内核之后,我们也可以同样的用调用栈还原之上的几个函数层的调用
并在函数的返回地址前后做检测
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
而抓住溢出攻击必然会有破坏动作,如下载文件,执行有恶意的函数等等行为,我们就可以通过类似于后续的它的操作去确认这个溢出的发生
|
能力值:
( LV8,RANK:130 )
|
-
-
19 楼
无论怎样,你检测的基础是Hook。一旦被绕过或者是被欺骗(例如那个Flash的网马),一切都是0了。
见你挺能说的
放bin吧~
那样多好玩~~
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
看来又有人开始怀疑我的编码及设计能力了
呵呵
有意思
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
Flash 网马无敌了吗?
国内很多都可以拦住了,来试试这个
来看看2008年3月10日放出来的网页防漏工具
www.raslab.net/download/AntiSysLeak.zip
绝对的bin安装包
|
能力值:
( LV12,RANK:300 )
|
-
-
22 楼
现在不是在讨论flash网马是不是无敌,flash网马只是一个举例,说明用来绕过这种栈溢出检测的方法已经被用在shellcode中了。
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
再往深处想想,有些检测是可以有算法行为库来实现的,为什么?
因为执行的操作很特别,肯定能找到行为的
硬件防溢出需要cpu支持,当前使用的这种防溢出方法可能全部使用jmp绕过
jmp esp等指令特征可能会误检测,
行为的方法虽然好,却没办法及时检测出溢出,
PAGE_GUARD 方法又只能对付HeapAlloc出来的堆
难道真没有更好的办法了吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
有了新的方法了
函数调用行为分析法
为了防止新方法又被图谋不轨的人太明了,我这里就不公布了
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
貌似是个不错的想法,不知道有没有实现的代码,发出来共享下。
|
|
|