版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 八 章 网络监听第 八 章 网络监听内容提纲2流量劫持3数据采集4网络监听概述1网络监听工具5网络监听防御内容提纲2流量劫持3数据采集4网络监听概述1网络监听工具5网知识回顾如何攻陷控制一台主机?网络侦察网络扫描口令攻击缓冲区溢出攻击木马 控制一台主机后如何把战果扩大到该局域网?知识回顾如何攻陷控制一台主机? 控制一台主机后如何把战网络监听网络监听( Network Listening):是指在计算机网络接口处截获网上计算机之间通信的数据,也称网络嗅探(Network Sniffing )。协助网络管理员监测网络传输数据,排除网络故障;被黑客利用来截获网络上的敏感信息,给网络安全带来极大危
2、害。网络监听网络监听( Network Listening):是网络监听案例网络监听在安全领域引起普遍注意是在1994年。在该年2月,一个不知名的人在众多的主机和骨干网络设备上安装了网络监听软件,对美国骨干互联网和军方网窃取了超过10万个有效的用户名和口令。该事件是互联网上最早期的大规模网络监听事件,使网络监听从“地下”走向了公开,并迅速地在大众中普及开来。网络监听案例网络监听在安全领域引起普遍注意是在1994年。在黑客用网络监听能干什么?嗅探敏感的帐号信息Telnet会话的用户名和密码;HTTP应用程序的用户名和密码;FTP口令;电子邮件消息截获网络上传输的文件分析协议信息黑客用网络监听能干
3、什么?嗅探敏感的帐号信息网络监听环境LANInternet 内网 外网 主机A 主机B 主机C 路由器R 黑客 监听点网络监听环境LANInternet 内网 外网 主机A 主机要实施网络监听,主要解决两个问题:一是网络流量劫持,即使监听目标的网络流量经过攻击者控制的监听点(主机),主要通过各种地址欺骗或流量定向的方法来实现二是在监听点上采集并分析网络数据,主要涉及网卡的工作原理、协议分析技术,如果通信流量加密了,则还需要进行解密处理。网络监听要解决的问题要实施网络监听,主要解决两个问题:网络监听要解决的问题内容提纲2流量劫持3数据采集4网络监听概述1网络监听工具5网络监听防御内容提纲2流量劫
4、持3数据采集4网络监听概述1网络监听工具5网攻击者要想监听目标的通信,首先要能够接收到目标的网络通信数据,如何做到呢?与网络环境有关。一般来说,网络环境可以划分为共享式网络环境和交换式网络环境两类。问题攻击者要想监听目标的通信,首先要能够接收到目标的网络通信数据共享式网络监听的原理广播特性的总线:主机发送的物理信号能被物理连接在一起的所有主机接收到。网卡处于混杂模式:接收所有的数据帧。共享式网络监听的原理广播特性的总线:主机发送的物理信号能被物共享式网络监听:总线型以太网B向 D发送数据 C D A E不接受 不接受 不接受 接受 B只有 D 接受B 发送的数据 广播特性的总线:所有都能收到,
5、但只有地址对了,才处理,从而实现了一对一的通信共享式网络监听:总线型以太网B向 D C D 共享网络监听:Hub共享网络监听:Hub一、交换式网络监听一、交换式网络监听交换机的工作方式端口管理 端口1 端口2 缓存 交换机 以太网 交换机 1 2 MAC 端口 3 CAM存储转发实现了无碰撞地传输数据Content Addressable Memory,内容可寻址存储器交换机的工作方式端口管理 端口1 端口2 缓存 交换机 (一)交换网络监听:交换机+集线器交换机 内网外网A:B:C:路由器R (一)交换网络监听:交换机+集线器交换机 内网外网A:10.(二)交换网络监听:端口镜像1 2 3
6、4 5 6 端口镜像(Port Mirroring):是把交换机一个或多个端口的数据镜像到某个端口的方法。管理员为了部署网络分析仪等设备,通过配置交换机端口镜像功能来实现对网络的监听。(二)交换网络监听:端口镜像1 2 3 4 5 6 端口镜像(三)交换网络监听:MAC洪泛攻击思路:在局域网中发送带有欺骗性MAC地址源的数据;CAM表中将会填充伪造的MAC地址记录,随着记录增多,与CAM表相关的交换机内存将被耗尽,这时交换机以类似于集线器的模式工作,向其它所有的物理端口转发数据。CAM MAC地址 端口 MAC1 1 MAC2 2 MAC3 3 伪造MAC 3 伪造MAC 3 伪造MAC 3
7、伪造MAC 3 伪造MAC 3 伪造MAC 3 伪造MAC 3 伪造MAC 3 伪造MAC 3 (三)交换网络监听:MAC洪泛攻击思路:CAM MAC地址交换网络监听:MAC洪泛为什么MAC洪泛攻击会成功?难道交换机不能根据自己的端口数来固定CAM表的长度吗? CAM MAC地址 端口 MAC1 1 MAC2 2 MAC3 3 伪造MAC 3 伪造MAC 3 伪造MAC 3 伪造MAC 3 伪造MAC 3 伪造MAC 3 交换网络监听:MAC洪泛为什么MAC洪泛攻击会成功?难道交换(三)交换网络监听:MAC洪泛问题:网络速度明显降低;目前许多交换机具有MAC洪泛免疫功能。(三)交换网络监听:M
8、AC洪泛问题:步骤1:攻击者向主机A和B发送ARP欺骗报文(四)交换网络监听:ARP欺骗交换机 内网外网A:B:C:路由器R: 的MAC地址是11:22:33:44:55:CC的MAC地址是11:22:33:44:55:CC 11:22:33:44:55:CC IP地址 MAC地址 11:22:33:44:55:RR 11:22:33:44:55:AA 11:22:33:44:55:CC 11:22:33:44:55:CC IP地址 MAC地址 11:22:33:44:55:RR 11:22:33:44:55:BB 11:22:33:44:55:CC步骤1:攻击者向主机A和B发送ARP欺骗报文
9、(四)交换网络监(四)交换网络监听:ARP欺骗交换机 内网外网A:B:C:路由器R: 11:22:33:44:55:CC IP地址 MAC地址 11:22:33:44:55:RR 11:22:33:44:55:CC 11:22:33:44:55:CC IP地址 MAC地址 11:22:33:44:55:RR 11:22:33:44:55:CC步骤2:攻击者从网络接口上嗅探受害主机发过来的数据帧(四)交换网络监听:ARP欺骗交换机 内网外网A:10.10(四)交换网络监听:ARP欺骗交换机 内网外网A:B:C:路由器R: 11:22:33:44:55:CC IP地址 MAC地址 11:22:33
10、:44:55:RR 11:22:33:44:55:CC 11:22:33:44:55:CC IP地址 MAC地址 11:22:33:44:55:RR 11:22:33:44:55:CC步骤3:攻击者将嗅探到的数据发送回原本应该接收的主机(四)交换网络监听:ARP欺骗交换机 内网外网A:10.10(四)交换网络监听:ARP欺骗需要监听的通信双方主机不在一个局域网内?需要监听主机与外界网络之间的通信?(四)交换网络监听:ARP欺骗需要监听的通信双方主机不在一个(四)交换网络监听:ARP欺骗交换机 内网外网A:B:C:路由器R: 路由器或网关是内网与外网之间报文转发的必经节点写出使用ARP欺骗的方法
11、监听局域网与外网之间通信的的详细步骤。课后思考题:(四)交换网络监听:ARP欺骗交换机 内网外网A:10.10目标主机的IP为22,它的网关IP地址为,网关MAC地址为00-e8-4c-68-17-8b网关欺骗ARP目标主机的IP为22,它的网关IP地攻击主机的IP地址为48,MAC地址为00-0c-29-6c-22-04,在运行攻击程序arpspoof.py之前,还需要开启对网关和目标IP地址的流量转发功能,在终端输入“echo 1 /proc/sys/net/ipv4/ip_forward”命令,然后运行上述攻击程序(需要root权限)后即可发起对目标主机的ARP欺骗攻击网关欺骗ARP攻击
12、主机的IP地址为48,MAC地址攻击主机发起ARP攻击后,目标主机的网关MAC地址已经被修改成攻击主机的MAC地址,目标主机的流量被攻击主机成功劫持网关欺骗ARP攻击主机发起ARP攻击后,目标主机的网关MAC地址已经被修改从图中可以看出,目标主机访问了2 () 网站的web服务网关欺骗ARP从图中可以看出,目标主机访问了2 攻击停止后,目标主机的网关MAC地址恢复正常网关欺骗ARP攻击停止后,目标主机的网关MAC地址恢复正常网关欺骗ARP(五)交换网络监听:端口盗用交换机 内网外网A:B:C:路由器R: 步骤1:发送伪造以太网帧:源MAC为受害者的MAC;目的MAC为攻击者的MAC。1 2 3
13、 4 11:22:33:44:55:BB 2 MAC地址 端口 11:22:33:44:55:CC 3 11:22:33:44:55:RR 4 11:22:33:44:55:AA 1 我的源MAC是A的MAC,目的MAC是C的MAC 11:22:33:44:55:AA 3 (五)交换网络监听:端口盗用交换机 内网外网A:10.10.(五)交换网络监听:端口盗用交换机 内网外网A:B:C:路由器R: 步骤2:受害主机将数据帧发送给攻击者,攻击者从网络接口嗅探数据。1 2 3 4 11:22:33:44:55:BB 2 MAC地址 端口 11:22:33:44:55:CC 3 11:22:33:4
14、4:55:AA 3 11:22:33:44:55:RR 4 问题:攻击者怎么把嗅探数据发还给受害主机? 步骤3:攻击者将数据缓存,让网络正常后,再将数据转交。然后再开始新一轮的攻击。(五)交换网络监听:端口盗用交换机 内网外网A:10.10.33交换网络监听小结网络管理员交换机+集线器端口镜像黑客MAC洪泛ARP欺骗端口盗用33交换网络监听小结网络管理员二、DHCP欺骗二、DHCP欺骗DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态地获得IP地址、Ga
15、teway地址、DNS服务器地址等信息,并能够提升地址的使用率。DHCP基本原理DHCP(Dynamic Host ConfiguratioDHCP基本原理DHCP基本原理DHCP欺骗DHCP欺骗三、DNS劫持三、DNS劫持在因特网中,域名解析系统(DNS)负责将域名(Domain Name)解析成 IP 地址。同ARP协议一样,DNS同样可以被黑客利用来进行网络流量窃取。DNS在因特网中,域名解析系统(DNS)负责将域名(Domain 攻击者还可以通过社会工程学等手段获得域名管理密码和域名管理邮箱,然后将指定域名的DNS纪录指向到黑客可以控制的DNS服务器,进而通过在该DNS服务器上添加相应
16、域名纪录,从而使网民访问该域名时,进入了黑客所指向的主机。DNS攻击攻击者还可以通过社会工程学等手段获得域名管理密码和域名管理邮DNS缓存投毒:控制DNS缓存服务器,把原本准备访问某网站的用户在不知不觉中带到黑客指向的其他网站上。其实现方式有多种,比如可以通过利用网民ISP端的DNS缓存服务器的漏洞进行攻击或控制,从而改变该ISP内的用户访问域名的响应结果;或者通过利用用户权威域名服务器上的漏洞,如当用户权威域名服务器同时可以被当作缓存服务器使用,黑客可以实现缓存投毒,将错误的域名纪录存入缓存中,从而使所有使用该缓存服务器的用户得到错误的DNS解析结果。DNS攻击DNS缓存投毒:控制DNS缓存
17、服务器,把原本准备访问某网站的DNS劫持DNS劫持CDN入侵 CDN入侵 四、Wi-Fi 流量劫持四、Wi-Fi 流量劫持Wi-Fi 热点Wi-Fi 热点Wi-Fi 热点钓鱼Wi-Fi 热点钓鱼Wi-Fi 强制断线Wi-Fi 强制断线内容提纲2流量劫持3数据采集4网络监听概述1网络监听工具5网络监听防御内容提纲2流量劫持3数据采集4网络监听概述1网络监听工具5网一、网卡的工作原理一、网卡的工作原理MAC地址网卡地址MAC地址网卡地址网卡工作方式单播(Unicast):网卡在工作时接收目的地址是本机硬件地址的数据帧;广播(Broadcast):接收所有类型为广播报文的数据帧;多播(Multica
18、st):接收特定的组播报混杂模式(Promiscuous):是指对报文中的目的硬件地址不加任何检查,全部接收的工作模式。网卡工作方式单播(Unicast):网卡在工作时接收目的地址网卡的处理流程网卡的处理流程二、数据采集二、数据采集以太网的广播方式发送B向 D发送数据 C D A E不接受 不接受 不接受 接受 B只有 D 接受B 发送的数据 物理层 数据链路层 网络层 传输层 应用层 网卡 网卡 物理层 数据链路层 网络层 传输层 应用层 网卡是否工作在混杂模式?广播特性的总线实现了一对一的通信以太网的广播方式发送B向 D C D A Libpcap(Libaray for Packet C
19、apture),即分组捕获函数库,是由劳伦斯伯克利国家实验室开发的一个在用户级进行实时分组捕获的接口,其特点是独立于操作系统。Libpcap的Windows版本,称为Winpcap目前的Libpcap已成为开发跨平台的分组捕获和网络监视软件的首选工具。LibpcapLibpcap(Libaray for Packet CapLibpcapLibpcap三、协议分析三、协议分析协议分析协议分析内容提纲2流量劫持3数据采集4网络监听概述1网络监听工具5网络监听防御内容提纲2流量劫持3数据采集4网络监听概述1网络监听工具5网WiresharkWiresharkWiresharkWiresharkWi
20、resharkWireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wire
21、shark案例:Cain Wireshark内容提纲2流量劫持3数据采集4网络监听概述1网络监听工具5网络监听防御内容提纲2流量劫持3数据采集4网络监听概述1网络监听工具5网如何发现Sniffer通过下面的方法可以分析出网络上是否存在Sniffer:构造特殊的报文,根据目标主机的反映判断其网卡是否处于混杂模式。往网上发大量包含着不存在的物理地址的包 ,由于监听程序将处理这些包,将导致性能下降,通过比较前后该机器性能(ICMP echo delay等方法)加以判断。如何发现Sniffer通过下面的方法可以分析出网络上是否存在如何发现Sniffer使用Anti-Sniffer、promisc、cm
22、p等工具,发现大型网络上的Sniffer 。测试网络接口有无被设置成混杂模式,因为虽然在非混杂模式下可以运行Sniffer,但只有在混杂模式下才可以捕获共享网络中的所有会话。对于SunOS、Linux和BSD Unix可以采用命令: ifconfig -a如何发现Sniffer使用Anti-Sniffer、promSniffer的防范规划网络: 一般将网络分段划分得越细,Sniffer收集到的信息越少。采用加密通信: 加密后,即使Sniffer捕获了数据,也难于获得数据的原文。目前比较流行的做法是使用SSL协议和SSH安全产品。Sniffer的防范规划网络: 一般将网络分段划分得越细,SSni
23、ffer的防范要想防止对WLAN的监听攻击,可以启用一些安全策略,考虑采用无线VPN产品增强认证和加密功能。对于主动监听工具,简单地采用交换机来防止监听已经不够了。要防止ARP缓存改写,必须对敏感网络中所有主机的ARP缓存表进行硬编码,这些主机包括在线网站、DNS和Mail服务器、防火墙和DMZ路由器等。另外还应该用Ipsec、VPN和其它的加密技术来保护敏感信息Sniffer的防范要想防止对WLAN的监听攻击,可以启用一网络监听的难点是什么?小结网络监听的难点是什么?小结作业8-1 写出使用ARP欺骗的方法监听局域网与外网之间通信的步骤8-2 对交换机使用MAC洪泛攻击,为什么会使得交换机以
24、类似于集线器的模式工作,向所有端口转发数据?8-3 你认为使用端口盗用的方法对交换网络实施监听,最需要克服的技术难题是什么?作业8-1 写出使用ARP欺骗的方法监听局域网与外网之间通信第 九 章 缓冲区溢出攻击第 九 章 缓冲区溢出攻击基础知识回顾什么是程序?程序是指令的集合,告诉计算机如何完成指定的任务。程序 = 算法 + 数据结构什么是进程?可并发执行的程序在一个数据集合上的运行过程。动态性;并发性;独立性;异步性;结构特征(程序段、数据段及进程控制块)基础知识回顾什么是程序?内容提要缓冲区溢出概述1缓冲区溢出攻击原理2缓冲区溢出攻击类型3缓冲区溢出攻击防御措施4内容提要缓冲区溢出概述1缓
25、冲区溢出攻击原理2缓冲区溢出攻击类概念缓冲区:用户为程序运行时在计算机中申请得的一段连续的内存,它保存了给定类型的数据。缓冲区溢出:计算机程序向缓冲区内填充的数据位数超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。缓冲区溢出攻击:(一般情况下,缓冲区溢出引起程序运行错误,但是在攻击者的设计下)向程序的缓冲区写入超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他的指令,以达到攻击的目的。概念缓冲区:用户为程序运行时在计算机中申请得的一段连续的内存缓冲区溢出的根源溢出的根源在于编程:如果缓冲区被写满,而程序没有去检查缓冲区边界,也没有停止接收数据,这时缓冲区溢出就会发生
26、。Unix和MS Windows系统由于要实现更好的性能和功能,往往在数据段中动态地放入可执行的代码。C/C+语言问题:对数组下标访问边界不做检查或者少做检查。程序员的编程习惯:忽略对输入数据进行严格的边界检查。缓冲区溢出的根源溢出的根源在于编程:如果缓冲区被写满,而程序发展历史1988年,Morris蠕虫攻击VAX 和 Sun机器,使当时Internet的大约10%崩溃。1996年,Elias Levy发表文章“Smashing the stack for fun and profit”,显示了很多程序都存在缓冲区溢出的危险。缓冲区溢出攻击被广泛关注。1999年,Dark spyrit AK
27、A Barnaby jack提出使用系统核心dll中的“jmp esp”指令完成shellcode跳转的想法,开创了Win32平台下缓冲区溢出的新思路,大量windows平台下缓冲区溢出漏洞被利用。2001年8月,“红色代码”利用微软IIS漏洞产生缓冲区存溢出,成为攻击企业网络的“罪魁祸首”。 2003年1月,Slammer蠕虫利用微软SQL漏洞产生缓冲区溢出对全球互联网产生冲击。同年,“冲击波”蠕虫病毒利用微软RPC远程调用存在的缓冲区漏洞对Windows 2000/XP、Windows Server 2003进行攻击,波及全球网络系统。发展历史1988年,Morris蠕虫攻击VAX 和 S
28、un机发展历史2004年5月爆发的“振荡波”利用了Windows系统的活动目录服务缓冲区溢出漏洞。2005年8月利用Windows即插即用缓冲区溢出漏洞的“狙击波”被称为历史上最快利用微软漏洞进行攻击的恶意代码。2008年底至2009年的Conficker蠕虫利用的是Windows处理远程RPC请求时的漏洞(MS08-067) 。发展历史2004年5月爆发的“振荡波”利用了Windows系危害性和普遍性缓冲区溢出漏洞可以使一个匿名的Internet用户有机会获得一台主机的部分或全部的控制权。缓冲区溢出攻击占了远程网络攻击的绝大多数,操作系统中超过50%的安全漏洞都是由内存溢出引起的。 任何平台
29、、任何程序都可能存在缓冲区溢出的漏洞。1998年Lincoln实验室用来评估入侵检测的的5种远程攻击中,有2种是缓冲区溢出。而在1998年CERT的13份建议中,有9份是是与缓冲区溢出有关的,在1999年,至少有半数的建议是和缓冲区溢出有关的。危害性和普遍性缓冲区溢出漏洞可以使一个匿名的InternetBuffer Overflow普遍性1999年,CERT安全建议中50%以上同它有关。严重性获得系统最高权限。没有有效预防措施C语言问题程序员编程习惯,安全意识薄弱Buffer Overflow普遍性1999年,CERT安安全漏洞数量(CERT)安全漏洞数量(CERT)内容提要缓冲区溢出概述1缓
30、冲区溢出攻击原理2缓冲区溢出攻击类型3缓冲区溢出攻击防御措施4内容提要缓冲区溢出概述1缓冲区溢出攻击原理2缓冲区溢出攻击类三种内存分配模式(1)静态分配:在进程创建时由系统一次性分配的整块静态内存,这块空间在进程运行期间保持不变。包括:正文( TEXT)段:指令数据( DATA)段:初始化的全局静态数据BSS段:未初始化的全局数据栈空间三种内存分配模式(1)静态分配:在进程创建时由系统一次性分配三种内存分配模式(2)栈(Stack)分配:调用程序的地址信息,函数参数的内存分配。整个栈空间已在进程创建时分配好。进程刚启动时,栈空间是空的,里面没有实体。 在进程运行期间,对具体实体的栈分配是进程自
31、行生成(压栈)和释放(弹出)实体,系统并不参与。 只要压入的实体的总长度不超过栈空间尺寸,栈分配就与系统无关。如果超过了,就会引发栈溢出错误。三种内存分配模式(2)栈(Stack)分配:调用程序的地址信三种内存分配模式(3)堆(Heap)分配:当进程需要生成实体时,向系统申请分配空间;不再需要该实体时,可以向系统申请回收这块空间。堆分配使用特定的函数:malloc();new()。 堆分配的空间利用率最高。三种内存分配模式(3)堆(Heap)分配:当进程需要生成实体三种内存分配模式比较静态分配 栈分配 堆分配 空间的生成 进程创建时进程创建时用一点分配一点 实体生成时间 进程创建时 进程运行时
32、 进程运行时 实体生成者 操作系统 进程 进程申请/系统实施 生命期 永久 临时 完全可控 访问方式标识标识指针三种内存分配模式比较静态分配 栈分配 堆分配 空间的生成 进内存布局不同区域: 堆栈保存调用程序的地址信息,所需要的变量,其它帧指针等: HEAP动态内存分配,本地变量: BSS符号块起始地址 :未初始化全局数据段,即:int foo; float baz;: DATA初始化全局静态数据,即:int shit=9,char head=”ugh”;: TEXT机器指令 = 操作码 + 操作数;read-only编译时分配执行时分配内存布局不同区域: 堆栈保存调用程序的地址信息,所需内存
33、布局ArgumentsVariablesenvironmentstackHeapBSSDatatext(code)Adresses hautesAdresses bassesuserstackframe代码区数据区栈堆内存布局ArgumentsstackHeapBSSDatat一、栈溢出一、栈溢出堆栈堆栈是一种数据结构。堆栈中的对象具有一个特性:最后一个放入堆栈中的物体总是被最先拿出来,这个特性通常称为后进先出(LIFO)队列。堆栈中两个最重要的操作是PUSH和POP:PUSH在堆栈的顶部加入一个元素, POP从堆栈顶部移去一个元素, 同时改变堆栈的大小。堆栈堆栈是一种数据结构。堆栈中的对象具
34、有一个特性:最后一个放堆栈的相关概念SP:堆栈指针,指向堆栈的顶部;堆栈的增长方向:向下增长(向内存低地址);FP:帧指针,指向堆栈的帧头。 堆栈的相关概念SP:堆栈指针,指向堆栈的顶部;栈帧的一般结构栈帧的一般结构函数调用过程Func函数中的局部变量调用Func函数前的EBP退出Func函数后的返回地址传递给Func的实参内存低地址内存高地址最先压入栈最后压入栈函数调用过程Func函数中的局部变量调用Func函数前的EB函数调用的栈帧变化假设过程P调用过程Q:Q的参数放在P的栈帧中;当P调用Q时,P中的返回地址被压入栈中,形成P的栈帧的末尾;返回地址就是当程序从Q返回时应继续执行的地方;Q的
35、栈帧从保存的帧指针的值开始,后面是保存的其他寄存器的值。函数调用的栈帧变化假设过程P调用过程Q:假设有一个程序,其函数调用顺序如下: main() - func_1() - func_2() - func_3() 栈布局假设有一个程序,其函数调用顺序如下: 栈布局函数调用例子void function(int a, int b, int c) char buffer15;char buffer210;void main() function(1,2,3);函数调用例子void function(int a, int函数调用过程按c、b、a的顺序将参数压栈;把指令指针(IP)压栈,IP也称为返回
36、地址(RET);把FP压栈,被保存的FP称为SFP;将当前的SP复制到FP,成为新的帧指针;将SP的值减小,为局部变量保留空间。函数调用过程按c、b、a的顺序将参数压栈;堆栈图buffer1cbaretsfpbuffer2堆栈顶部(内存低端)堆栈底部(内存高端)堆栈图buffer1cbaretsfpbuffer2堆栈顶部缓冲区溢出攻击的原理攻击的原理:通过往程序缓冲区写入超过其边界的内容,造成缓冲区溢出,使得程序转而执行攻击者指定的代码,通常是为攻击者打开远程连接的ShellCode。关键点:存在能够被攻击的数据结构要有被执行的攻击代码缓冲区溢出攻击的原理攻击的原理:通过往程序缓冲区写入超过其
37、边缓冲区溢出代码/ 函数定义void function(char *str) char buffer16;strcpy(buffer,str);/ 主函数void main() char large_string256;int i;for( i = 0; i 1) copy(argv1);活动记录示意代码copy(char* msg)活动记录栈帧示意图buffer0buffer511previous fpReturn addressargv1spfpattackcodeStack growthMemory growth活动记录栈帧示意图buffer0previous fpR3、函数指针(Fun
38、ction Pointers )函数指针可以用来定位任何地址空间。例如:“void (* foo)()”声明了一个返回值为void的函数指针变量foo。攻击者只需在任何空间内的函数指针附近找到一个能够溢出的缓冲区,然后溢出这个缓冲区来改变函数指针。在某一时刻,当程序通过函数指针调用函数时,程序的流程就按攻击者的意图实现了。3、函数指针(Function Pointers )函数指针用函数指针控制程序流程图示用函数指针控制程序流程图示函数指针示意代码int good (const char* str) copy(char* msg) int (*fptr)(const char* str); c
39、har buffer512; fptr=(int(*)(const char* str)good; strcpy(buffer,msg); (void)(*fptr)(buffer);main(int argc, char* argv)if(argc1)copy(argv1);函数指针示意代码int good (const char* 函数指针栈帧示意图buffer0buffer511fptrprevious fpReturn addressargv1spfpattackcodeStack growthMemory growth函数指针栈帧示意图buffer0fptrprevious4、长跳转
40、缓冲区 (Longjmp buffers )在C语言中包含了一个简单的检验/恢复系统,称为“setjmp/longjmp”,意思是在检验点设定“setjmp”,用longjmp“来恢复检验点。如果攻击时能够进入缓冲区的空间,那么“longjmp”实际上是跳转到攻击者的代码。像函数指针一样,longjmp缓冲区能够指向任何地方,所以攻击者所要做的就是找到一个可供溢出的缓冲区。一个典型的例子就是Perl 5.003,攻击者首先进入用来恢复缓冲区溢出的longjmp缓冲区,然后诱导进入恢复模式,这样就使Perl的解释器跳转到攻击代码上了。4、长跳转缓冲区 (Longjmp buffers )在C语二
41、、堆溢出二、堆溢出堆溢出当我们需要较大的缓冲区或在写代码时不知道包含在缓冲区中对象的大小,常常要使用堆。 堆溢出的工作方式几乎与栈溢出的工作方式完全相同,唯一不同的是,堆没有压栈和入栈操作,而是分配和回收内存。C语言中使用malloc()和free()函数实现内存的动态分配和回收,C+语言使用new()和delete()函数来实现相同的功能。 堆溢出当我们需要较大的缓冲区或在写代码时不知道包含在缓冲区中堆溢出实例# include # include # include # include # define BUFFER-SIZE 16# define OVERLAYSIZE 8 /* 我们将
42、覆盖buf2 的前OVERLAYSIZE 个字节 */int main()u-long diff ;char * buf1 = (char * )malloc (BUFFER-SIZE) ;char * buf2 = (char * )malloc (BUFFER-SIZE) ;diff = (u-long) buf2 - (u-long) buf1 ;printf (buf1 = %p , buf2 = %p , diff = 0 x %x ( %d) bytes n, buf1 , buf2 , diff , diff) ;/* 将buf2 用a填充 */memset (buf2 , a,
43、 BUFFER-SIZE - 1) , buf2BUFFER-SIZE - 1 = 0;printf (before overflow: buf2 = %s n, buf2) ;/* 用diff + OVERLAYSIZE 个b填充buf1 */memset (buf1 , b, (u-int) (diff + OVERLAYSIZE) ) ;printf (after overflow: buf2 = %s n, buf2) ;return 0 ; 堆溢出实例# include 堆溢出实例运行结果: / users/ test 41 % . / heap1 buf1 = 0 x8049858
44、 , buf2 = 0 x8049870 , diff = 0 x18 (24) bytes before overflow: buf2 = aaaaaaaaaaaaaaa after overflow: buf2 = bbbbbbbbaaaaaaa我们看到,buf2的前八个字节被覆盖了,这是因为往buf1中填写的数据超出了它的边界进入了buf2的范围。由于buf2的数据仍然在有效的Heap区内,程序仍然可以正常结束。 堆溢出实例运行结果:堆溢出实例虽然buf1和buf2是相继分配的,但它们并不是紧挨着的,而是有八个字节的间距。这是因为,使用malloc()动态分配内存时,系统向用户返回一个内
45、存地址,实际上在这个地址前面通常还有8字节的内部结构,用来记录分配的块长度、上一个堆的字节数以及一些标志等。这个间距可能随不同的系统环境而不同。buf1溢出后,buf2的前8字节也被改写为bbbbbbbb,buf2内部的部分内容也被修改为b。 堆溢出实例虽然buf1和buf2是相继分配的,但它们并不是紧堆溢出实例示意图:堆溢出实例示意图:堆溢出堆溢出不如栈溢出流行,原因在于比栈溢出难度更大需要结合其他的技术对于内存中变量的组织方式有一定的要求堆溢出堆溢出不如栈溢出流行,原因在于三、BSS段溢出三、BSS段溢出BSS溢出.bss段存放全局和静态的未初始化变量,其分配比较简单,变量与变量之间是连续
46、存放的,没有保留空间。下面这样定义的两个字符数组即是位于BSS段: static char buf116,buf216;如果事先向buf2中写入16个字符A,之后再往buf1中写入24个B,由于变量之间是连续存放的,静态字符数组buf1溢出后,就会覆盖其相邻区域字符数组buf2的值。利用这一点,攻击者可以通过改写BSS中的指针或函数指针等方式,改变程序原先的执行流程,使指针跳转到特定的内存地址并执行指定操作。 BSS溢出.bss段存放全局和静态的未初始化变量,其分配比较四、格式化字符串溢出四、格式化字符串溢出格式化串溢出与前面三种溢出不同的是,这种溢出漏洞是利用了编程语言自身存在的安全问题。格
47、式化串溢出源自*printf()类函数的参数格式问题(如printf、fprintf、sprintf等)。int printf (const char *format, arg1, arg2, ); 它们将根据format的内容(%s,%d,%p,%x,%n,),将数据格式化后输出。问题在于:*printf()函数并不能确定数据参数arg1,arg2,究竟在什么地方结束,即函数本身不知道参数的个数,而只会根据format中打印格式的数目依次打印堆栈中参数format后面地址的内容。 格式化串溢出与前面三种溢出不同的是,这种溢出漏洞是利用了编程格式化串溢出实例/*程序说明:%#x:按16进制输出
48、,并在前面加上0 x%.20d:按10进制输出,输出20位,并在前面补0%n:将显示内容的长度输出到一个变量中去*/# include main()int num= 0 x61616161 ;printf (Before : num = %#x n, num) ;printf (%.20d %n n, num, &num) ;printf (After : num = %#x n, num) ; 格式化串溢出实例/*程序说明:格式化串溢出实例当程序执行第二个printf语句时,参数压栈之后的内存布局如下:格式化串溢出实例当程序执行第二个printf语句时,参数压栈格式化串溢出实例根据C函数调用
49、约定,参数从右向左依次压栈,所以参数&num比参数num先压入栈中。也就是说,程序中将&num (num的地址)压入栈作为printf()的第三个参数,而使用打印格式%n会将打印总长度保存到对应参数(&num)的地址中去,从而改变了num的值。 整个程序的输出结果为: Before : num = 0 x61616161 00000000001633771873 After : num = 0 x14变量num的值已经变成了0 x14(20)。格式化串溢出实例根据C函数调用约定,参数从右向左依次压栈,所格式化串溢出实例如果将第二个printf语句修改为: printf (%.20d %n n,
50、 num) ; /注意,这里没有压num的地址入栈 则运行的结果为: Before : num= 0 x61616161 Segmentation fault (core dumped) /执行第二个printf()时发生段错误了原因:printf()将堆栈中main()函数的变量num当作了%n所对应的参数,因此会将0 x14保存到地址0 x61616161中去,而0 x61616161是不能访问的地址,因此系统提示发生段错误。如果可以控制num的内容,那么就意味着可以修改任意地址(当然是允许写入的地址)的内容。格式化串溢出实例如果将第二个printf语句修改为:格式化串溢出在实际应用中,如
51、果遇到脆弱的程序,将用户的输入错误地放在格式化串的位置,就会造成缓冲区溢出的攻击。如果攻击者可以事先构造好可以攻击的代码shellcode,如果可以将返回地址覆盖成shellcode的起始地址,当缓冲区溢出发生后,程序就会跳到精心设计好的shellcode处执行,达到攻击的目的。 格式化串溢出在实际应用中,如果遇到脆弱的程序,将用户的输入错内容提要缓冲区溢出概述1缓冲区溢出攻击原理2缓冲区溢出攻击类型3缓冲区溢出攻击防御措施4内容提要缓冲区溢出概述1缓冲区溢出攻击原理2缓冲区溢出攻击类防御策略系统管理上的防御策略关闭不需要的特权程序及时给程序漏洞打补丁程序开发中的防御策略编写正确的代码非执行的
52、缓冲区数组边界检查程序指针完整性检查其它方法防御策略系统管理上的防御策略1、关闭不需要的特权程序缓冲区溢出只有在获得更高的特权时才有意义;关闭一些不必要的特权程序就可以降低被攻击的风险。如Solaris下的fdformat是个有缓冲区溢出漏洞的suid程序。1、关闭不需要的特权程序缓冲区溢出只有在获得更高的特权时才有2、及时给程序漏洞打补丁大部分的入侵是利用一些已被公布的漏洞达成的;如能及时补上这些漏洞,无疑极大的增强了系统抵抗攻击的能力。2、及时给程序漏洞打补丁大部分的入侵是利用一些已被公布的漏洞3、编写正确的代码在所有拷贝数据的地方进行数据长度和有效性的检查,确保目标缓冲区中数据不越界并有
53、效;很多不安全程序的出现是由于调用了一些不安全的库函数。这些函数有strcpy()、sprintf()、strcat()等,用更安全的函数代替,比如用strncpy()替换strcpy() ;漏洞探测。利用一些工具,人为随机地产生一些缓冲区溢出来寻找代码的安全漏洞。已有这方面的一些高级的查错工具,如fault injection等。3、编写正确的代码在所有拷贝数据的地方进行数据长度和有效性的4、非执行的缓冲区通过使被攻击程序的数据段地址空间不可执行,从而使得攻击者不可能执行被植入被攻击程序输入缓冲区的代码,这种技术被称为非执行的缓冲区技术。信号传递:Linux通过向进程堆栈释放代码然后引发中断
54、来执行在堆栈中的代码来实现向进程发送Unix信号。GCC的在线重用:gcc在堆栈区里放置了可执行的代码作为在线重用之用,关闭这个功能并不产生任何问题。非执行堆栈的保护可以有效地对付把代码植入自动变量的缓冲区溢出攻击,而对于其他形式的攻击则没有效果。4、非执行的缓冲区通过使被攻击程序的数据段地址空间不可执行,5、数组边界检查数组边界检查能防止所有的缓冲区溢出的产生和攻击。方法包括:C的数组边界检查(Jones & Kelly );Compaq C 编译器(Compaq公司为Alpha CPU开发的C编译器支持有限度的边界检查 );内存存取检查(Purify 工具):使用“目标代码插入”技术来检查
55、所有的内存存取;类型-安全语言:Java,C#等。5、数组边界检查数组边界检查能防止所有的缓冲区溢出的产生和攻6、指针完整性检查程序指针完整性检查:阻止由于函数返回地址或函数指针的改变而导致的程序执行流程的改变。原理:在每次在程序指针被引用之前先检测该指针是否已被恶意改动过,如果发现被改动,程序就拒绝执行。因此即使一个攻击者成功地改变程序的指针,由于系统事先检测到了指针的改变,因此这个指针不会被使用。三个研究方向:手写的堆栈检测、堆栈保护、保护指针。6、指针完整性检查程序指针完整性检查:阻止由于函数返回地址或7、其它防御方法改进标准库。比如改进C语言函数库,对具有缓冲区溢出攻击隐患的系统函数如
56、gets(),sprintf(),strcpy(),strcat(),fscanf(),scanf(),vsprintf()等进行改进,开发出更安全的封装了若干已知易受堆栈溢出攻击的库函数。分割控制和数据堆栈 :将堆栈分割为两个堆栈,一个用于存储控制信息(如返回地址),另一个用于控制其他所有数据。使堆栈向高地址增长:使用堆栈压入数据时向高地址方向前进,那么无论缓冲区如何溢出,都不可能覆盖低地址处的函数返回地址指针,也就避免了缓冲区溢出攻击。但这种方法仍然无法防范利用堆和静态数据段的缓冲区进行溢出的攻击。 7、其它防御方法改进标准库。比如改进C语言函数库,对具有缓冲缓冲区溢出的防范策略堆栈(St
57、ack Buffer)堆(Heap Buffer)静态数据段(Static Buffer)活动记录堆栈保护非执行的缓冲区堆栈保护堆栈保护函数指针指针保护非执行的缓冲区指针保护指针保护长跳转缓冲区指针保护非执行的缓冲区指针保护指针保护其它变量手工的指针保护非执行的缓冲区手工的指针保护手工的指针保护缓冲区溢出的防范策略堆栈堆静态数据段活动记录堆栈保护堆栈保讨论对于类型-安全的语言Java, 是不是就不存在缓冲区溢出的危险?如果要对其进行缓冲区溢出攻击,该考虑从什么方面入手?作为Java执行平台的Java虚拟机是C程序,因此通过攻击JVM的一条途径是使JVM的缓冲区溢出。讨论对于类型-安全的语言Ja
58、va, 是不是就不存在缓冲区溢出小结小结作业9-1 简述缓冲区溢出攻击的原理?9-2 在程序开发过程中,防御缓冲区溢出需要做哪些工作?作业9-1 简述缓冲区溢出攻击的原理?第 十 章 Web网站攻击技术第 十 章 Web网站攻击技术Web应用程序体系结构Web客户端 Web服务器 Web应用程序 Web应用程序 Web应用程序 传输层 数据库 连接器 数据库 连接器 IE, Chrome,Firefox,etc.HTTP/HTTPS请求明文或SSLHTTP响应( HTML, JavaScript, etc.) Apache IIS etc. Perl C+ CGI Java ASP PHP e
59、tc. ADO ODBC JDBC etc. Oracle SQL Server etc.Web应用程序体系结构WebWebWebWebWeb传输层 Web应用体系结构潜在弱点Web客户端:活动内容执行,客户端软件漏洞的利用,交互站点脚本的错误;传输:偷听客户-服务器通信,SSL重定向;Web服务器:Web服务器软件漏洞;Web应用程序:攻击授权、认证、站点结构、输入验证,以及应用程序逻辑;数据库:通过数据库查询运行优先权命令,查询操纵返回额外的数据集。Web应用体系结构潜在弱点Web客户端:活动内容执行,客户端Web应用Web Applications: Software applicati
60、ons that interact with users or other applications using HTTP or HTTPSWeb Application Vulnerabilities:Weakness in custom Web Application, architecture, design, configuration, or code.Web应用Web Applications: SoftwarWeb应用安全的严重性在安全漏洞报告中,Web应用安全漏洞一直占据最前列。比如SANS RISK 在2007年8月的安全漏洞报告:SANS RISK Aug 20078/78
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商业地产买卖合同范本
- 饲料购销合同范本
- 塔吊租赁与安装合同
- 校服采购供应合同
- 国防物资订购协议书案例
- 专业林业承包合同范本
- 购销装饰布艺
- 法庭保证陈述无误
- 保温材料招标公告模板
- 居间房地产居间合同
- 2022年CCAA注册审核员《产品认证基础》(真题卷)
- 餐厅禁烟制度
- 【公开课】高三地理一轮复习-自然地理环境的整体性(课件)
- 四川广安市2024年市级事业单位招考工作人员拟聘用人员公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 《父亲、树林和鸟》公开课一等奖创新教案
- 专业技术职务聘任申请书范文
- 稀土发光材料的发光机理及其应用
- 2024江苏地区“三新”供电服务公司招聘600人高频考题难、易错点模拟试题(共500题)附带答案详解
- 初级经济师(初级建筑与房地产经济)题库【重点】
- 病情变化及抢救配合
- 医院药品采购相关培训
评论
0/150
提交评论