阅读:3791回复:2
漏洞利用与卡巴斯基的对抗之路
◆0 致谢
特别感谢各位朋友在这一年中对自己工作的支持,无以为报,只能凑合写一些文章来一搏各位的欢心,如有不对之处还请各位不吝指出,感激不尽! 首先感谢以下朋友给予自己的帮助: 泉哥 没谱 instruder 我可爱的同事们 ◆1 题记: 主题是关于漏洞利用与卡巴斯基之间的种种对抗,之所以选择卡巴斯基是因为其在众多杀毒软件中为一个典型,从04、05年的内存查杀到最新流行的行为检测云查杀,卡巴斯基一直紧跟时代步伐并且针对漏洞利用的查杀也越来越准确有效,与诺顿、Bitdefender号称是最难绕过的杀软之一。杀毒软件对文档类漏洞和浏览器漏洞的查杀最为严格,此篇也以上述两类漏洞利用作为示例进行阐述。 漏洞利用技术的发展也是对抗杀毒软件查杀技术的发展,其中可见各种奇技淫巧,令人目不暇接,其中针对卡巴斯基这款杀毒软件的绕过方法更是让人眼前一亮,基本上绕过卡巴斯基的方法对于其他杀软基本可以做到通杀,这也是分析总结漏洞利用与卡巴斯基对抗的目的所在,以一个旁观者的角度来分析两者之间的对抗,更能清晰的理解漏洞利用与杀毒软件之间的对抗发展,管中窥豹可见一斑。 文章中使用的相关代码都是从实际的漏洞利用实例中提取精简而来,并不会实际提供相关漏洞样本,此处还请大家多多见谅。废话不多说,下面开始正题: ◆2 漏洞利用的基本形式 MS Office 漏洞的没落,Adobe Reader PDF漏洞的方兴未艾,Flash Player漏洞的强势崛起以及目前浏览器UAF漏洞的中兴,漏洞的形式多种多样但是漏洞利用的基本思路倒没有太大的变化,无非两种形式:下载并执行和释放并执行,可谓万变不离其宗,漏洞利用的最终目的就是把一个程序执行起来,杀毒软件的查杀目的为把这种行为检测出来报警并阻止其运行。 漏洞利用最终执行的伪代码如下: /***********************************************************************/ /* 演示漏洞利用伪代码 */ /***********************************************************************/ #include void main() { HANDLE hFileHandle; //主体文件句柄 HANDLE hExeFile; //exe程序句柄 char exploitName[MAX_PATH] = "bin.xxx"; // Exploit主体文件路径 char tempPath[MAX_PATH] = {0}; DWORD dwWrite =0; DWORD exeBufferOffset = 0x1000; //exe Exploit主体文件中的偏移 char exebuffer [1024] = {0}; //缓冲区 hFileHandle = CreateFileA(exploitName, //Exploit 主体文件路径 GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, NULL, NULL); SetFilePointer(hFileHandle, exeBufferOffset, NULL, FILE_BEGIN); ReadFile(hFileHandle,exebuffer,sizeof(exebuffer),&dwWrite,NULL); //读文件 GetTempPathA(MAX_PATH,tempPath); //获取temp路径 strcat_s(tempPath,"winexe.exe"); hExeFile = CreateFileA(tempPath, //创建exe GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, NULL, NULL); WriteFile(hExeFile, exebuffer, sizeof(exebuffer), &dwWrite, NULL); CloseHandle(hFileHandle); CloseHandle(hExeFile); WinExec(tempPath,SW_SHOW); //执行exe }} 以释放并执行的行为伪代码作为例子,可以得到以下信息: (1) ShellCode 使用操作系统的API 函数 (2) 主体文件路径必须要首先得到 (3) 通过偏移读取可执行文件 (4) 获取%temp%或其他路径 (5) 生成可执行程序并执行 ShellCode得以执行之前,还有很多漏洞利用方法,比如堆填充(Heap Spray),绕过地址随机化(ASLR)+数据执行保护(DEP)。 1 、Heap Spray 堆填充在浏览器和Flash Player相关漏洞应用比较多,Adobe Reader 的早期漏洞也会使用这种方法。其核心思想是在进程内存空间中填充大量无用数据,漏洞触发之后通过相应技巧跳转到ShellCode。 常见是在IE浏览器中,简单示例代码如下: Flash Player 和Adobe Reader中也会采用类似的方法来达到堆填充的目的。这里就不举相关例子了,有兴趣的话,可以在网络上搜索一下暴露的POC。 2、 ASLR+DEP 地址随机化和数据执行保护在最新的操作系统中普遍采用的一种保护技术,若要执行ShellCode,就必须要绕过ASLR+DEP。目前的采用的方法主要有两种:泄露模块基址、使用未ASRL的DLL模块,最终目的就是绕过DEP。 鉴于目前常见的技术是使用ROP,代码形式简单如下: ## ROP rop = struct.pack(" |
|
沙发#
发布于:2016-09-23 16:06
不错。谢谢分享!辛苦了!
|
|
|
板凳#
发布于:2016-09-24 14:13
支持一下UPUPW 必火!
|
|
|