缓冲区溢出攻击
APT攻击:长时间窃取数据。目的通常包括对目标企业的信息技术架构进行篡改从而盗取数据(如将数据从内网输送到外网),执行或阻止一项任务、程序;又或是潜入对方架构中伺机进行偷取数据
- 情报收集:公开数据源(LinkedIn、Facebook等) 搜寻和锁定特定人员并加以研究,然后开发出定制化攻击
- 首次突破防线:通过电子邮件、实时通讯或网站顺道下载等社交工程技巧植入0-day恶意软件;在系统开后门,网络门户洞开,方便后续渗透
- 幕后操纵通讯
- 横向移动:一旦进入企业网络,进一步入侵更多计算机来搜集登入信息,提高权限,让计算机永远受到掌控资产/资料发掘
- 资料外传
缓冲区溢出攻击
- 栈溢出(stack smashing):向缓冲区写入超过缓冲区长度的内容,造成缓冲区溢出,破坏程序的堆栈,使程序转而执行其他的指令,达到攻击的目的
- 堆溢出(malloc/free heap corruption):利用free()的unlink()宏或malloc()的unlink()宏来改变程序流程的方法
- 格式化字符串漏洞(format stringvulnerability):
- 整形变量溢出(integer variable overflow):长度值是短整型数的,其数据的取值范围在-32768 ~ 32767,datalength*2后可能会超出16位short整型数所能表示的最大值,造成datalength*2<datalength,而改变代码运行方向
- 其他的攻击手法(others):利用ELF文件格式的特性如:覆盖.plt(过程连接表)、.dtor(析构函数指针)、.got(全局偏移表); return-to-libc(返回库函数等的方式进行攻击
栈溢出攻击原理:
向缓冲区写入超过缓冲区长度的内容,造成缓冲区溢出,破坏程序的堆栈,使程序转而执行其他的指令,达到攻击的目的
- 在进程的地址空间安排适当的代码(shellcode):1)利用进程中存在的代码传递一个适当的参数:如程序中有exec(arg),只要把arg指向“/bin/sh”就可以了;2)植入法:把指令序列放到缓冲区中,堆、栈、数据段都可以存放攻击代码,最常见的是利用栈 (Linux及其它几乎所有Intel x86系统、Solaris, etc:分页式存储管理;平面内存结构,4GB或更大逻辑地址空间;栈从下往上生长;C语言不进行边界检查)
- 控制程序转移到攻击代码:通过适当的初始化寄存器和内存,跳转到以上代码段执行
1)利用栈帧:溢出栈中的局部变量,使返回地址指向攻击代码(栈溢出攻击)
2)函数指针:如果定义有函数指针,溢出函数指针前面的缓冲区,修改函数指针的内容
3)长跳转缓冲区:覆盖setjmp/longjmp的缓冲区内容,longjmp就可以跳转到攻击者的代码