缓冲区溢出攻击
近年来甚至出现了基于架构(Frame Work)的漏洞利用程序开发平台,让这项技术的进入门槛大大降低,使得原本高不可攀的黑客技术变得不再遥不可及。
逆向&汇编语言 为辅??
蓝色:多定义n.; 绿色:不重要 红色:重要
1 漏洞利用
把二进制代码安置在输入参数里,精确地计算栈中返回地址的偏移量,通过一个合法的调 用执行非法的代码,
所有漂亮的 exploits 背后都隐藏着无数个对着寄存器发呆的不眠之夜
网站 --用户输入限制 -- SQL 注入攻击和 XSS(Cross Site Script,跨站脚本)
功能性逻辑缺陷(bug)
安全性逻辑缺陷(漏洞)
常见的漏洞包括软件中的缓冲区溢出漏洞、网站中的跨站脚本漏洞(XSS)、SQL 注入漏洞等。
slammer 蠕虫--利用系统漏洞传播—远程控制
服务器软件安全漏洞,&系统中可以被 RPC 远程调用的函数中存在缓冲区溢出漏洞—“肉鸡”
点击链接URL -–解析HTML文件存在缓冲区溢出漏洞--HTML搭载shellcode-下载木马运行。
三方软件 ActiveX控件漏洞—“网马”
文档--office解析存在缓冲区溢出漏洞—shellcode
SQL注入漏洞—明文密码 本地Hash算法加密—CRACK攻击
端口扫描、网络监听、密码猜解、 DOS……
-
-
- 漏洞挖掘、漏洞分析、漏洞利用
-
3步骤,3步走 所需系统底层知识、逆向工程
1.漏洞挖掘
QA工程师’s功能性测试 难以发现 安全性漏洞
专业测试 Penetration test(攻击测试),这些测试团队则被称做 Tiger team 或者 Ethic hacker。
漏洞挖掘--高级测试(QA) 静态分析(学术界), Fuzz”灰盒”测试(工程界)详见3章
2.漏洞分析
搜索POC(proof of concept)代码, 重现漏洞触发的现场 (Paimei工具) 方便找到漏洞触发点
搜索无: 补丁比较器patch前后可执行文件哪些地方被修改,用反汇编工具(IDA pro) 重点逆向分析.
所需 逆向&调试技术
3.漏洞利用
内存漏洞(堆栈溢出) Web 应用漏洞(脚本注入)
手机安全及 Web 应用中的脚本注入攻击所使用的技术与 Windows 平台下缓冲区溢出相差较大,且自成体系
编写Expolit 利用漏洞 未被修复的漏洞往往被称做 0 day。
公布漏洞的权威机构有2个:
CVE (Common Vulnerabilities and Exposures) CVE -CVE CVE编号
CERT(Computer Emergency Response Team) http://www.cert.org/
微软的安全中心通常每月第二周星期二发布补丁 “Black Tuesday”
刚刚被 patch 过的漏洞称为 1 day 攻击。(patch 发布后 1 天,叫做 1 d ay,5 天叫做 5 day,未发 patch 统称 0 day)
1.2 二进制文件概述
1.2.1 PE 文件格式
PE(Portable Exec utable)是 Win32 平台下可执行文件遵守的数据格式。常见的可执行文件(如“*.exe”文件和“*.dll”文件)都是典型的 PE 文件。
PE 文件格式把可执行文件分成若干个数据节(section),
一可执行文件不只有二进制的机器代码,还会自带许多其他信息,如字符串、菜单、 图标、位图、字体等。规定了在可执行文件中如何组织。
典型 节:
.text 由编译器产生,存放着二进制的机器代码,也是我们反汇编和调试的对象。
.data 初始化的数据块,如宏定义、全局变量、静态变量等。
.idata 可执行文件所使用的动态链接库等外来函数与文件的信息。
.rsrc 存放程序的资源,如图标、菜单等。
除此以外,还可能出现的节包括“.reloc”、“.edata”、“.tls”、“.rdata”等。
1.2.2 虚拟内存
Windows 的内存 :物理内存&虚拟内存。 物理内存较复杂 需进入Windows 内核级别 ring0 才能看到。
用调试器看到的内存 地址都是虚拟内存
进程所有的虚拟内存中包含了程序运行时所必需的资源--代码、栈空间、堆空间、资源区、动态链接库等。
进程不使用虚拟内存时,这些内存只是一些地址,是虚拟存在的,是一笔无形的数字财富。
进程使用内存时,内存管理器会为这个虚拟地址映射实际的物理内存地址,虚拟内存 地址和最终被映射到的物理内存地址之间没有什么必然联系;
操作系统的”虚拟内存“(操作系统内存不足时,将用硬盘充当内存)
1.2.3 PE 文件与虚拟内存之间的映射
静态反汇编工具看到PE文件 指令位置相对于磁盘文件而言(文件偏移)还需知道在内存中所处的位置,虚拟内存地址(VA)
文件偏移地址(File Offset)
数据在 PE 文件中的地址,个人认为叫做文件地址更加准确。这是文件在磁盘上存放时相对于文件开头的偏移。
装载基址(Image Base)
PE 装入内存时的基地址。默认情况下,EXE 文件在内存中的基地址是 0x00400000,DLL 文件是 0x10000000。这些位置可以通过修改编译选项更改
虚拟内存地址(Virtual Address,VA)
PE 文件中的指令被装入内存后的地址。
相对虚拟地址(Relative Virtual Address,RVA)
相对虚拟地址是内存地址相对于映射基址的偏移量。
虚拟内存地址、映射基址、相对虚拟内存地址三者之间有如下关系。
VA= Image Base+ RVA