一、阻断未建立起来的连接
我们知道TCP的建立要经过3次握手,假设客户端C向服务器S请求连接
1、C发送带有SEQ_C(随机)初始序列号的SYN报文给S
2、S回复带有SEQ_S(随机)初始序列号和确认序列号ACK_S(必须是SEQ_C+1)的SYN报文给C
3、C回复确认序列号ACK_C(取值为SEQ_S)给S
整个过程如果正确的话,连接将会建立。
通常需要进行阻断的情况是审计控制系统旁路监听内网。旁路监听的方式一般是将主交换机的数据镜像到控制系统,控制系统可以采用
libpcap捕获数据包。
在这种情况下要阻断tcp连接的建立只要在监听到第一次握手的时候,控制系统伪造服务器发起第二次握手回应,就能阻断客户端与服务器连接的建立。因为我们的系统在内网,发出的报文肯定比服务器快,这样客户端接收到我们伪造的报文以后会回应第三次握手,当服务器真正的报文到达的时候客户端将不再处理,此时客户端再向服务器请求数据,因为seq号和ack号出错,服务器不会受理客户端的请求。
- typedef struct tcp_header {
- u_int16_t th_sport; /* source port */
- u_int16_t th_dport; /* destination port */
- tcp_seq th_seq; /* sequence number */
- tcp_seq th_ack; /* acknowledgement number */
- u_int8_t th_offx2; /* data offset, rsvd */
- #define TH_OFF(th) (((th)->th_offx2 & 0xf0) >> 4)
- u_int8_t th_flags;
- #define TH_FIN 0x01
- #define TH_SYN 0x02
- #define TH_RST 0x04
- #define TH_PUSH 0x08
- #define TH_ACK 0x10
- #define TH_URG 0x20
- #define TH_ECNECHO 0x40 /* ECN Echo */
- #define TH_CWR 0x80 /* ECN Cwnd Reduced */
- u_int16_t th_win; /* window */
- u_int16_t th_sum; /* checksum */
- u_int16_t th_urp; /* urgent pointer */
- }tcp_header;
判断第一次握手的方式flag = tcp_h->th_flags;当flag等于0x02的时候说明客户端发起tcp握手,伪装第二次握手的代码:
- int ForgedSYN(char *srcIP, char *dstIP, int srcPort, int dstPort)
- {
- unsigned char buff[2048] = {0};
- unsigned char *ptr = buff;
- char options[4] = {0x02, 0x04, 0x05, 0x64};
- ip_header iph;
- tcp_header tcph;
- psd_header psdh;
- int num = 0;
- unsigned int isrcip;
- unsigned int idstip;
- unsigned short iIPSize = sizeof(ip_header) / sizeof(unsigned long);
- unsigned short iIPVersion = 4;
- unsigned short iTotalSize = sizeof(ip_header) + sizeof(tcp_header) + 4;
- unsigned short iTcpSize = sizeof(tcp_header) + 4;
- struct sockaddr_in server;
- if(createSocket()<0) return -1;
- iph.ip_vhl = (iIPVersion << 4) | iIPSize;
- iph.ip_tos = 0;
- iph.ip_len = htons(iTotalSize);
- iph.ip_id = htons(17393);
- iph.ip_off = 0;
- iph.ip_ttl = 118;
- iph.ip_p = IPPROTO_TCP;
- iph.ip_sum = 0;
- isrcip = inet_addr(srcIP);
- idstip = inet_addr(dstIP);
- memcpy(&iph.ip_src, &isrcip, 4);
- memcpy(&iph.ip_dst, &idstip, 4);
- iph.ip_sum = checksum((unsigned short *)&iph, 20);
- tcph.th_sport = htons(srcPort);
- tcph.th_dport = htons(dstPort);
- tcph.th_seq = htonl(0x581A784D);
- tcph.th_ack = htonl(g_seq+1);
- tcph.th_offx2 = (24/4<<4|0);
- tcph.th_flags = 0x12;
- tcph.th_win = htons(16384);
- tcph.th_sum = 0;
- tcph.th_urp = 0;
- psdh.s_addr = isrcip;
- psdh.d_addr = idstip;
- psdh.mbz = 0;
- psdh.protocol = IPPROTO_TCP;
- psdh.tcpl = htons(iTcpSize);
- memcpy(buff, &psdh, sizeof(psd_header));
- memcpy(buff+sizeof(psd_header), &tcph, sizeof(tcp_header));
- memcpy(buff+sizeof(psd_header)+sizeof(tcp_header), options, 4);
- tcph.th_sum = checksum((unsigned short *)buff, sizeof(psd_header)+sizeof(tcp_header)+4);
- memset(buff, 0x00, 2048);
- ptr = buff;
- memcpy(ptr, &iph, sizeof(ip_header));
- ptr += sizeof(ip_header);
- memcpy(ptr, &tcph, sizeof(tcp_header));
- ptr += sizeof(tcp_header);
- memcpy(ptr, options, 4);
- server.sin_family = AF_INET;
- server.sin_port = htons(dstPort);
- server.sin_addr.s_addr = inet_addr(dstIP);
- num = sendto(sockfd, buff, iTotalSize, 0, (struct sockaddr *)&server, sizeof(struct sockaddr));
- return num;
- }
数据伪造的时候ip头部和tcp头部要进行校验:
- unsigned short checksum(unsigned short *buffer, int size)
- {
- unsigned long cksum=0;
- while (size > 1)
- {
- cksum += *buffer++;
- size -= sizeof(unsigned short);
- }
- if (size)
- {
- cksum += *(unsigned char *)buffer;
- }
- cksum = (cksum >> 16) + (cksum & 0xffff);
- cksum += (cksum >>16);
- return (unsigned short)(~cksum);
- }
二、阻断已经建立起来的连接
对于已经建立起来的连接只要伪造服务器发送rst包迫使客户端重新进行连接,或者fin包直接中断连接。
正常通行中的tcp报文seq和ack存在如下关系,假设C向S请求数据,seq是seq1,ack是ack1,服务器返回给客户端的seq2和ack2必须存在这种关系:
seq2 = ack1
ack2 = seq1+datalen(服务返回报文的长度,不包括ip头和tcp头)
相关推荐
对于下载等长时间的任务,可以100%阻断。。对于一般网页,阻断率90%以上。。对于类似baidu,google这种简单页面,阻断率20%左右。。 原因:RST到达对方前,数据包已经发送结束了。优化可能性不高。。经过测试,完全...
这种模式允许Snort在检测到恶意流量时,通过发送重置(RST)包的方式中断连接,从而实现旁路阻断功能。 #### Snort Flexible Response模式详解 **旁路阻断插件**:在Snort中使用灵活响应插件,可以通过旁路模式...
旁路阻断则通过TCP Reset报文结束TCP连接,或使用ARP欺骗将数据包重定向,以更隐蔽的方式实现阻断。虽然旁路阻断对网络影响较小,但可能需要复杂的管理和操作来确保效果。 射频阻断是针对无线设备的一种策略,分为...
3. 旁路阻断审计设备(ICA):ICA设备主要用于监听网络流量,阻断TCP协议和捕获Telnet协议报文。它可以与应用代理服务器配合部署,或独立部署在内网中,通过旁路方式监控内网连接,自动阻断非法连接。 4. 数据库:...
##### 2.7 发现IDS等旁路部署的安全设备的阻断行为 许多安全设备(如入侵检测系统IDS)都采用旁路部署的方式工作,这意味着它们不会直接参与数据包的转发过程,而是监听网络流量并采取相应的安全措施。通过对数据包...
1. 范围:该规范主要涉及采用TCP/IP协议的入侵防御产品,适用于此类产品的研制、开发、测评和采购。 2. 规范性引用文件:本规范引用了GB/T5271.8信息技术词汇第8部分:安全,即所有引用条款都是本规范的一部分。 3...
* 协议滥用类攻击防护功能:LAND、Fraggle、Smurf、Winnuke、Ping of Death、Tear Drop、TCP Error Flag等攻击。 * HTTP应用防护功能:支持高频HTTP Flood防御、慢速HTTP Slow Header、HTTP Slow Post、RUDY、LOIC、...
例如,在电信骨干网清洗中心建设中,Detector通过旁挂方式监控流量,分析Netflow信息,检测网络层攻击,而Guard作为流量清洗设备,通过集群旁路部署,提供高处理性能,保证网络的高可靠性。在网吧业务和云清洗平台...
8. **HTTP RFC符合性**:系统需提供HTTP协议防护,并支持HTTPS的SSL加密会话分析。需要真实来源IP解析功能,以便识别通过代理服务器访问的用户。 9. **内置规则与自定义规则**:系统应包含内置规则,并提供自定义...
这种方式可以基于TCP实现数据包的阻断,以阻止非法访问。同时,网关还可以配置不同的认证类型,如本地认证、Radius 认证、AD域认证等,以确保用户身份的真实性。 核心技术 北信源网络接入控制系统采用多种核心技术...
AFD工作模式为旁路时,只有通道口才是业务口,才会处理流量,无论使用端口镜像还是流量采样,AFD通道输入输出口均为同一个接口。 关于HC GAP文件同步配置,文件同步后,会将源端文件册除。编辑册除文件同步任务或...
产品采用专用隔离设备和模块化工作组件设计,通过链路阻断、协议转换的方式,使得数据只能以专有数据块的方式静态地在两个网络之间进行"摆渡",从而切断两个网络之间的所有直接连接,保证不同安全级别网络之间的数据...
AFD 工作模式为旁路时,只有通道口才是业务口,才会处理流量,无论使用端口镜像还是流量采样,AFD 通道输入输出口均为同一个接口。 8. 关于 H3C GAP 文件同步配置,文件同步后,不会将源端文件册除;编辑册除文件...