1.4 端口扫描
根据tcp协议规范,当一台计算机收到一个tcp连接建立请求报文(tcp syn)的时候,做这样的处理:
1、 如果请求的tcp端口是开放的,则回应一个tcp ack报文,并建立tcp连接控制结构(tcb);
2、 如果请求的tcp端口没有开放,则回应一个tcp rst(tcp头部中的rst标志设为1)报文,告诉发起计算机,该端口没有开放。
相应地,如果ip协议栈收到一个udp报文,做如下处理:
1、 如果该报文的目标端口开放,则把该udp报文送上层协议(udp)处理,不回应任何报文(上层协议根据处理结果而回应的报文例外);
2、 如果该报文的目标端口没有开放,则向发起者回应一个icmp不可达报文,告诉发起者计算机该udp报文的端口不可达。
利用这个原理,攻击者计算机便可以通过发送合适的报文,判断目标计算机哪些tcp或udp端口是开放的,过程如下:
1、 发出端口号从0开始依次递增的tcp syn或udp报文(端口号是一个16比特的数字,这样最大为65535,数量很有限);
2、 如果收到了针对这个tcp报文的rst报文,或针对这个udp报文的icmp不可达报文,则说明这个端口没有开放;
3、 相反,如果收到了针对这个tcp syn报文的ack报文,或者没有接收到任何针对该udp报文的icmp报文,则说明该tcp端口是开放的,udp端口可能开放(因为有的实现中可能不回应icmp不可达报文,即使该udp端口没有开放)。
这样继续下去,便可以很容易的判断出目标计算机开放了哪些tcp或udp端口,然后针对端口的具体数字,进行下一步攻击,这就是所谓的端口扫描攻击。
1.5 分片ip报文攻击
为了传送一个大的ip报文,ip协议栈需要根据链路接口的mtu对该ip报文进行分片,通过填充适当的ip头中的分片指示字段,接收计算机可以很容易的把这些ip分片报文组装起来。
目标计算机在处理这些分片报文的时候,会把先到的分片报文缓存起来,然后一直等待后续的分片报文,这个过程会消耗掉一部分内存,以及一些ip协议栈的数据结构。如果攻击者给目标计算机只发送一片分片报文,而不发送所有的分片报文,这样攻击者计算机便会一直等待(直到一个内部计时器到时),如果攻击者发送了大量的分片报文,就会消耗掉目标计算机的资源,而导致不能相应正常的ip报文,这也是一种dos攻击。