摘要:根据现代网络协议攻击的情况,针对嵌入式系统的ICMP协议的攻击进行探讨。列举出ICMP协议被利用于网络攻击的方式和实施方法,采用Linux系统进行攻击测试,分析攻击核心代码,并针对洪水攻击的情况提出有效的防范策略。
关键字:嵌入式系统;ICMP协议;网络防御;防范策略
Attack and Defense Policies of Internet Flood base on ICMP Protocol of Embedded System
XIE Suzhen
(Chaozhou Chuangjia Elecrtonic co.,Ltd., Chaozhou, 521000, China)
Abstract: According to the modern network protocol attacks, discuss the ICMP protocol of Embedded System attacks. Enumerate the ICMP protocol used in network attack mode and implementation method, attack testing on the Linux system, analysis against the core code, and put forward effective prevention strategies for flood attack.
Keywords: Ping Flood; Embedded System; ICMP Attack; Internet Defense; Defense Policies
引言
随着互联网的高速发展,学习、工作、生活等社会活动对网络的依赖程度逐步提高,网络设备的升级、网络数据的增大以及网络速度的提高对社会生活的质量有着极大的提升,各种平板、手机等移动嵌入式设备也层出不穷。但也正因为如此,针对嵌入式系统的网络攻击,对社会的危害也逐渐加大。
1 利用协议进行攻击
现在的网络协议趋向成熟,但各种嵌入式系统使用的网络协议存在漏洞。本文将对IP协议中的ICMP协议的问题进行讨论。
1.1. ICMP网络协议
ICMP(Internet Control Message Protocol)协议为IP协议提供控制服务[1],它允许目标主机或路由器为数据发送端提供反馈信息,其信息包括:数据包未能发送到目标主机、转发缓冲区溢出导致数据包删除、路由重定向信息等。ICMP协议是TCP/IP协议族的一个子协议,是IP协议的补充,用于实现IP层的差错控制、拥塞控制、路径控制以及路由器和主机信息的获取等控制功能。ICMP协议和IP协议都位于IP层,但是ICMP报文被IP数据报封装。ICMP协议接受来自上层(UDP和TCP)的请求,将请求转变为ICMP报文,将报文作为IP数据报的数据部分,加上数据报的首部,组成IP数据报发送出去。ICMP协议报文可以分为差错报告、控制报文和请求/应答报文三大类。其ICMP协议包如图1所示。
图1 ICMP协议包结构
1.2. PING
ICMP类型属于PING命令,可用于测试网络的通断。PING可以引发ICMP 回送请求和回送回答,主机或路由器发送一个ICMP报文给一个指定的报宿,并请求任何收到回送请求的报宿产生一个回送回答,并返回给发送端,请求中包含一个可自定的不定字节的数据区域,而回送回答中也包含有发送数据的副本[2]。
1.3. DoS攻击
常见的ICMP攻击可以分为三类,且都可认为是DoS攻击(拒绝服务攻击):针对带宽的拒绝服务攻击;针对主机的拒绝服务攻击;针对网络连接的拒绝服务攻击[3]。
著名的死亡之ping(Ping of Death),是一种基于ICMP最基本,同时也是最简单的DoS攻击形式。它是利用对目标系统发送一个非法的ICMP Echo Request数据包,使得目标系统不能对数据进行正常处理,最后导致目标系统出现奔溃或重启的情况。ICMP数据包的尺寸超过64KB上限时,目标系统就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使目标系统出现奔溃或重启的情况。尺寸超过64KB上限的ICMP报文就是指数据部分长度超过65507个字节的ICMP报文。其工作原理是让被攻击者一直处理这些无用的ICMP报文,直到资源耗尽。攻击者的带宽和性能都优于被攻击者时,这种攻击非常有效,但只能针对早期性能差的设备才能起到攻击效果。如今科技飞速发展,设备性能包括处理能力、内存大小和网络速度都有飞速的发展,网络带宽甚至超过了千兆级别,TCP/IP协议也早已完全能对付大包了,一般都自己丢弃了。
以下将对较为综合性的攻击方式——洪水(Flood)攻击进行讨论。
2 洪水(Flood)攻击
2.1洪水攻击类型
2.1.1 直接Flood
利用直接PING的方式去攻击一个网络端,想达到洪水的程度,需要发送端有足够的带宽,形成针对带宽攻击,而且需要发包速度够快,形成针对网络连接的DoS攻击,占用受攻击者的网络资源[4],如图2所示。当然,直接连接受攻击者的主机会暴露攻击方的IP。
图2 直接Flood攻击
2.1.2 伪造IP的Flood
顾名思义,就是伪装自己的IP去攻击别的网络端,伪造的IP让受攻击方无法探查IP确切来源,如图3所示。
图3 伪造IP的Flood
2.1.3 反射ICMP Flood
攻击方通过修改ICMP协议包,把发送的IP修改为被攻击方的IP,让其他与攻击方和被攻击方互联的实体计算机发送回复包去攻击被攻击方,如图4所示。
图4 反射ICMP Flood
所谓反射,就是间接地利用一些反射节点,产生一种把同一个端口发送出去的数据全部通过这些反射节点转发到另一个网络端口的方式。采取该方式,如果被攻击方对IP和MAC进行反查,都能查到一些反射节点的信息,可能都是些大型网站的服务器,如百度、网易等等。这种方式具有较高的隐蔽性。
2.2 ICMP洪水伪装IP攻击(C语言实现)
本项目对伪装IP攻击的程序进行了编写,在main()函数下,利用signal(SIGINT, DoS_sig);截取信号,让信号停止,去执行DoS_sig函数,然后检查输入的IP地址格式是否正确。利用socket(AF_INET, SOCK_RAW, IPPROTO_RAW)建立一个socket,并利用pthread_create (&pthread[i], NULL, DoS_fun, NULL)函数建立多线程,去实行DoS_fun函数,在该函数中设置一个要被攻击的IP去实行Dos_icmp()函数进行攻击。
Dos_icmp()函数中随机IP的协议包代码如下:
iph->ip_v=4;
iph->ip_hl=5;
iph->ip_tos=0;
iph->ip_len=htons(pktsize);
iph->ip_id=htons(getpid());
iph->ip_off=0; iph->ip_ttl=0x0;
iph->ip_p=PROTO_ICMP;
iph->ip_sum=0;
iph->ip_src.s_addr=(unsigned int) myrandom(0, 65535);
iph->ip_dst.s_addr = dest;
其中myrandom(0, 65535)函数设置随机的IP为XXX.XXX.0.0,代码为0的ICMP类型为回答请求,程序对不为0的数据进行计算。
在Linux下对IP为172.16.60.46进行攻击,如图5所示。
图5 对172.16.60.46进行伪装IP攻击
2.3 攻击测试
本项目先使用Wireshark对名为eno16777736的网络端口进行监控,在进行伪装IP攻击下,该端口发出了大量的ICMP包,源IP地址为随机的XXX.XXX.0.0,发送的包的Destination的IP地址都为172.16.60.46,如图6所示。
图6 利用Wireshark软件对发送端进行检测
本项目自主编写了抓包程序capeth,对网络端口进行抓包,获取端口数据包情况,如图7所示。
图7 capeth程序在洪水攻击情况下抓包
本文利用MAC地址不变的情况,编写对伪装IP攻击编写了抓包并检测的程序,对是否受到伪装IP的攻击,如图8。
图8 测试伪装IP攻击
该程序编写了MacComp(unsigned char*comp)函数,对MAC进行检测,如果同一个MAC(非全一和全零)“连续”攻击10次,就被判定为被攻击,并提示“Warning!!!You are under attack!!!”。
3. 防范措施
由上述内容可知,对于ICMP协议的洪水攻击主要的特征为:在极短的时间内连续接收到大量的ICMP包、收到的ICMP包数据量大、以及针对主机漏洞进行攻击的方式。这里讨论两种方式对ICMP洪水攻击进行防范。
3.1 防火墙
防火墙作为网络接入时的一个检测过滤机制,可利用防火墙本身的功能进行防范。对于WINDOWS CE等微软的嵌入式系统,可以对防火墙直接设置过滤ICMP包的方法,这里不做详述。在Linux系统下,可以对防火墙程序Iptables进行规则添加,比如使用以下命令可以设置ICMP包过滤:
[root ~]#iptables –A FORWORD -p icmp –m limit –limit 1/s –limit-burst 10 –j ACCEPT
以上的过滤规则为:允许每秒1个数据包,限制触发条件是10个包。
3.2 嵌入式系统内核改动
在Linux系统中,为了进行网络防范,可对内核中获取数据包的程序进行改动,Linux内核源文件位于/usr/src/linux中,需要修改的文件为ip_input.c和ip_output.c,位于/usr/src/linux/net/ipv4/ 目录中。由于流入流出的数据包都需要经过这两个文件,可在这两个文件中添加附加代码进行包过滤或其他防范措施。
4 结语
随着科技的发展,嵌入式系统在人们生活和工作中应用越来越广泛,给人们带来了很大的便利的同时,嵌入式系统的网络攻击造成的社会混乱和经济损失越来越严重。本文讨论在嵌入式系统上利用ICMP协议进行PING的洪水攻击,对其攻击方式进行探讨,并选择其中的伪装IP的攻击进行测试及研究防范措施,并列举出防范的方法。根据上述的论述,能对ICMP协议的网络安全的研究提供一定的参考价值,具体的防御方法应该根据经验和具体需求做出具体方案[5]。
参考文献:
[1]谢希仁. 计算机网络(第6版) [M]. 北京:电子工业出版社, 2013.
[2]杜新华, 杜力耘, 张蓓蓓. 基于ICMP的Ping软件实现[J]. 上海交通大学学报, 1997, 31(5): 117-129.
[3]张振国, 张楠. 基于ICMP的网络攻击与防范[J]微计算机信息,, 2005, 21(3): 77-79.
[4]杨杨, 房超, 刘辉. ARP欺骗及ICMP重定向攻击技术研究[J]. 计算机工程, 2008, 34(2): 103-104.
[5]孟朝霞, 吴晨晖. ICMP的应用、缺陷及防御[J].运城学院学报, 2003, 21(3): 21-22.
论文作者:谢素桢
论文发表刊物:《基层建设》2016年24期8月下
论文发表时间:2016/12/6
标签:协议论文; 网络论文; 报文论文; 洪水论文; 数据论文; 如图论文; 嵌入式系统论文; 《基层建设》2016年24期8月下论文;