欢迎来到兴华永恒!加入收藏设为首页
您当前所在位置:首页 > 手艺专栏 > 专业公布
手艺专栏
新葡京娱乐网址

网络设备破绽阐发技术研究




一、 研讨布景


1.1 研讨网络设备的缘故原由 



网络设备处在计算机网络中的节点位置,一台网络设备常常连接着许多台PC或其他网络设备。和进犯难度愈来愈大的PC电脑比拟,网络设备的防护很懦弱,而且假如获得到一台网络设备的权限,由于其位置的便当和功用上的特性,能够获得到与其相连的PC的网络流量,而且能够做到不被PC用户发觉。

近年以来,关于网络设备的破绽表露和进犯的报导日趋增加,一方面是由于攻击者开端从网络设备动手停止进犯,另一方面人们逐步开端正视网络设备的安全。


表1-1:比年有关网络设备的安全变乱


QQ截图20160907095052.png


1.2 网络设备破绽的特性

新葡京388

按照近3年的CVE数量,能够看出破绽大多归类于拒绝服务破绽,剩下的就是绕过认证、过滤等安全机制的破绽和其他范例的破绽。

网络设备的破绽多为网络和谈的破绽,而网络和谈的破绽多为内存毁坏的破绽,内存毁坏的破绽多数归类于拒绝服务。

思科IOS是一个体积很大的二进制法式间接运转在主CPU上,假如发作非常,内存毁坏,或是CPU被连续占用城市招致装备重启。

思科ASA是在嵌入式linux体系上运转着lina_monitor和lina,当lina呈现非常的时分,lina_monitor卖力重启装备。


1.3 研讨汗青


最早公然的关于网络设备破绽操纵的研讨是2002年Felix ‘FX’ Lindner和FtR的“Attacking networked embedded systems”,作者演示思科IOS破绽操纵的可行性。

2005年,Michael Lynn开始公然地演示了可靠的操纵思科IOS的缓冲区溢出破绽。

2007年,Gyan Chawdhary和Varun Uppal公然了gdb调试思科IOS shellcode的法子,并给出了2种shellcode的演示和代码。

2008年,Felix ‘FX’ Lindner开辟了思科IOS取证东西CIR。

2011年,SebasEan Muniz, Alfredo Ortega演示了思科IOS fuzzing。以及Ang Cui, JaEn Kataria, Salvatore J. Stolfo提出了通用思科IOS破绽操纵的办法。

2012年,Felix ‘FX’ Lindner展现了华为路由器的安全问题。

2015年,George Nosenko演示了shellcode在内存中施行tcl剧本。


二、研讨内容


2.1 研讨思绪


3.png

图2-1:研讨思绪


2.2 固件获得


1.官网下载

2.Tftp,ftp,http,scp等方法从装备上下载

3.从flash,cf等存储模块中读取

4.网上服务器的分享


2.3 固件解包


固件解包的目标:

1.解出要阐发的法式

2.解出模仿时需求的文件

ASA固件解包

4.png

4.png

图2-2:ASA固件格局表示


图2中,vmlinuz是紧缩的linux内核,initrd是体系指导历程中挂载的暂时根文件系统,经由过程字符串“Direct booting from floppy is no longer supported”和“rootfs.img”肯定vmlinuz和initrd的肇端地址。

IOS解包7z提取紧缩镜像中的体系文件。


5.png

图2-3:紧缩镜像中的体系文件


2.4 体系模仿


ASA的qemu模仿

1. qemu-img create FLASH 512M

2.  qemu-system-i386 -s -m 512 -nographic -icount auto -hda FLASH -kernel vmlinuz -initrd initrd -hdachs 980,16,32 -append "ide_generic.probe_mask=0x01 ide_core.chs=0.0:980,16,32 auto nousb console=ttyS0,9600 bigphysarea=65536 no-hlt"

-net "nic,vlan=0,macaddr=00:00:ab:cd:ef:01,model=pcnet"

-net "tap,vlan=0,script=no,ifname=tap0"

-net "nic,vlan=1,macaddr=00:00:ab:cd:ef:02,model=pcnet"

-net "user,vlan=1,net=172.16.1.0/24"

然后设置网桥能够使模仿的ASA与外界通讯。 

IOS的dynamips模仿

利用dynamips gdb mod,由于内置了gdb stub,能够用来调试IOS体系。

dynamips -Z 1234 -P 3600 -j -s slot:f0/0:linux_eth0 C36XX.BIN

此中-Z是待毗连的端口,-P是模仿的硬件平台,-s的内容是指将Cisco装备的f0/0接口映射到linux的eth0,最初是解包后的镜像。


2.5 网络设备调试


2.5.1 模仿调试


接纳qemu模仿网络设备的运转,ida长途attach的方法停止网络设备的调试。


7.png

图2-4:IDA attach qemu示意图



起首,将asa防火墙镜像停止解包,提取出内核文件和打包的文件系统,就能够开端模仿asa防火墙了。

接着,设置虚拟网桥和TAP装备使模仿的体系可以和宿主机通讯。

最初,ida长途gdb debugger attach到qemu宿主机ip。


2.5.2 真机调试


ASA防火墙内置gdbserver,在主机上利用gdb经由过程串口能够掌握远端的gdbserver调试ASA防火墙的lina历程。



新葡京娱乐网址


图2-5:gdb调试ASA装备示意图


ASA防火墙默许不启动gdbserver,需求修正镜像中的内核参数,将quiet loglevel=0 auto改为rdinit=/bin/sh。

因为ASA防火墙会对镜像停止校验,以是修正的镜像无法间接经由过程tftp传入装备存储,ASA利用CF卡作为存储装备,能够经由过程用CF卡读卡器间接将镜像写入CF卡中的方法绕过校验,由于ASA没有对CF中的镜像停止校验。

装备启动后,会间接进入linux shell,利用sed号令修正/asa/scripts/rcS中的gdbserver参数,然后启动/sbin/init法式,终极停在等候调试的形态。

主机gdb长途串口毗连gdbserver开端调试。


2.5.3 装备调试号令


●Debug号令(IOS & ASA)

Eg:debug crypto ikev2 protocol 能够显现出ikev2和谈历程中失利的缘故原由。

●Show crashinfo(ASA),more flash:crashinfo_xxx(IOS)显现奔溃信息

● console log(IOS) 开启console上的log显现



2.6 模仿情况数据获得


利用GNS3搭建网络模仿情况,能够经由过程GNS3自带对网络线路的数据抓取功用,挪用wireshark抓包,也能够利用模仿装备自带的抓包功用抓取数据,以后导出到host主机。抓取数据包的次要目标是为了理解和谈的通信历程,以及通信的每一个步调的数据包组成。


9.png


图2-6:vm1与vm2经由过程IPSec毗连拓扑图


 


2.7 CVE-2016-1287


2.7.1 IKEV2 和谈


在IKEv2的和谈中,通讯单方协商由3个交流来完成,别离为初始交流(Initial Exchange)、成立子交流(CREATE_CHILD_SA_Exchange)和信息交流(Information Exchange)


10.png


图2-7:ikev2通讯数据包


思科IKEv2 fragment头部构造以下:


11.png


图2-8:IKEv2分片头部构造


IKEv2 Configuration Attributes payload构造以下:


12.png


图2-9:IKEv2设置属性构造


2.7.2  破绽成因


cve-2016-1287是思科ASA软件的IKEv1和IKEv2代码中的整数溢出破绽,ASA软件在增加ikev2 分片行列的时分,只检测了新的重组行列长度的上限能否大于0x7FFF,而新的重组行列长度 = 分片长度 + 重组行列长度– 8,是能够为负的,下溢新的重组行列长度能绕过查抄。

1、newre_len = frag_len + re_len – 8  

2、if newre_len <= 0x7fff:  

3、把分片参加到重组行列

1、分派终极的重组行列长度 + 8的空间给重组缓冲区。

re_buff = malloc(final_re_len + 8)  

  把每一个分片的载荷拷贝到从重组缓冲区的地址+ 4开端的缓冲区内。 

1、offset= 0

2、while True:

3、fragment = get_from_re_ queue()

4、frag_payload = fragment->payload

5、payload_len = fragment->length - 8

6、memcpy(re_buff + offset + 4,frag_payload,payload_len)  

7、Offset += payload_len

假如思科IKEV2 分片报文头部中的length < 8,相当于payload长度为负数,因而malloc分派的空间不敷,招致了溢出。


2.7.3 POC 实现



在施行ikev2_add_rcv_frag()之前,要可以完成初始交流而且ikev2报文载荷中含有Vendor ID : Fragment,不然不会施行ikev2_add_rcv_frag()。


blob.png



图2-10:ikev2_parse_frag_payload函数


在处置Vendor ID的函数中的相干代码:


blob.png

图2-11:ikev2_parse_vid_payload函数


完成初始交流后,fragment header的length = 1便可触发破绽。


blob.png


图2-12:poc

2.7.4  破绽操纵


破绽操纵的历程如下图所示:

blob.png


图2-13:破绽操纵历程


次要思绪是先规划堆,用巨细为100h的堆块添补堆里的空地。发送100h的分片包,能够获得2块持续的130h的堆块,分别是IKEv2 daemon分派的100h和分片剖析时分配的100h。

blob.png


数据包处置终了,第一个130h的堆会被开释掉,当破绽触发时,会分派100h的堆块来处置数据包,而之前100h的空地都被添补了,以是130h的堆块被拆分成100h和30h,使巨细为100h,30h,130h堆块顺次排布。

blob.png


然后100h的堆块发作溢出,改动30h的巨细为60h,相当于30h的数据是130h的头部,30h是free堆块,故新的60h也是free的。


blob.png


当100h用后开释的时分会与60h兼并成160h,此时160h,100h顺次排布。


blob.png

从头分派巨细为160h的堆块,使160h重用,假造出新的30h和130h的头部。


blob.png


最初在开释堆块的时分触发2次write 4,第一次是130h这个堆块被开释,由于这个堆块开端的时分寄存的就是一个分片的数据,以后堆块头被改后,不断没有被开释,直到从头机关出头部后,再次收到新的进犯数据包后,终极开释,第二次是30h和130h兼并是发生的,挟制ikev2_add_rcv_frag()中利用的函数指针到一个牢固的地址,在,跳转到最初一个数据包中的shellcode。

Shellcode的感化是获得linux shell,先挪用start_loopback_proxy()开启socksv5代办署理,接下来就是经典的connect-back shellcode。


2.8  破绽操纵时存在的成绩和处理


2.8.1 缓存不一致


blob.png


图2-14:缓存不一致

 

装备的CPU有2个分隔的缓存:指令缓存和数据缓存。memcpy()写入的数据颠末数据缓存存入内存中,可是指令缓存并未更新,返回的位置的代码未发作变革。

解决办法是先施行可以革新缓存大概封闭缓存的函数,将内存的值读入指令缓存中,在跳转到shellcode的位置。


2.8.2 体系镜像的多样性



2009年,FX的演讲提出利用功用上的稳定特性来处理二进制的多样性。比方enable暗码输入毛病时,会回显“%Bad Secrets”这个字符串,经由过程搜索这个字符串能够找到相干函数的位置,而不是经由过程硬编码地址。

2011年,Ang Cui在演讲中提出FX的办法存在运转工夫太长的成绩,会触发watchdog。并提出了一种中止挟制的shellcode,来实现通用可靠的IOS操纵。


三、 总结


网络设备的安全措施相对PC十分简朴,高端装备才逐步的增长上,低端装备可以说有了破绽,操纵起来就十分简朴了。不外正由于网络设备的破绽次要呈现在和谈上,而装备体系的代码十分的不变,以是发明破绽的难度很大,呈现破绽的位置是和谈的“边角”部位或是一些较新的和谈。关于网络设备而言提权破绽十分少见,由于网络设备的管理命令行供给十分受限的输入接口。




在线征询 周一至周五
09:00-18:00
新葡京388