FACE

22
端端端端端端 F A C E

description

FACE. 端口扫描技术. 一、概述. 网络安全扫描系统可以自动检测远程或本地主机安全脆弱点,通过采用适度的模拟攻击对目标可能存在的已知安全漏洞进行逐项检查,发现远程服务器的各种 TCP 端口的分配及提供的服务和它们的软件版本,根据扫描结果向系统管理员提供周密可靠的安全性分析报告,为提高网络安全整体水平提供重要依据。. - PowerPoint PPT Presentation

Transcript of FACE

Page 1: FACE

端口扫描技术

FFAACCEE

Page 2: FACE

网络扫描的工作原理是基于端口的。端口这个概念是在传输层提出的,是传输层标识服务的手段。传输层有两个重要的传输协议 : 传输控制协议 (TCP) 及用户数据报协议 (UDP) 。 UDP 协议比较简单, TCP 协议是大部分常用的应用层协议 ( 如 FTP 、 Telnet 、 SMTP 等等 ) 的基础。

网络安全扫描系统可以自动检测远程或本地主机安全脆弱点,通过采用适度的模拟攻击对目标可能存在的已知安全漏洞进行逐项检查,发现远程服务器的各种 TCP 端口的分配及提供的服务和它们的软件版本,根据扫描结果向系统管理员提供周密可靠的安全性分析报告,为提高网络安全整体水平提供重要依据。

一、概述一、概述

Page 3: FACE

1.1 、 TCP 通信

TCP 提供了连在网上的两个终端节点之间的可靠的全双工流连接,每个 TCP 连接可以用一个四元组:

{ 源 IP 地址, 目的 IP 地址, 源 PORT 号, 目的 PORT 号 }

来描述,每个发送字节都用一个 32 位的序列号标记,而接收方则对该序列号予以确认。

二、理论基础二、理论基础

Page 4: FACE

SYN x , MSS=m1

SYN y , ACK x+1 , MSS=m2

ACK Data

Connect()SYN_SENT

ESTABLISHED

Connect return

WRITE

READReturn

Close()FIN_WAIT_1

FIN_WAIT_2

TIME_WAIT

LISTENAccept()SYN_RCVD

ESTABLISHEDAccept return

READProcessWrite

CloseedReturn 0CLOSE_WAIT

Close()LAST_ACK

CLOSED

ACK y+1

Data (Request)

Data (Reponse)

FIN xf

ACK xf+1

ACK yf+1FIN yf

图 1 TCP 通信过程示意图

Client Server通通信信图图

Page 5: FACE

状状态态图图

原理

TC

P

通信状态转换示意图

CLOSED

LISTEN

ESTABLISHED

CLOSING

SYN_RCVD SYN_SENT

FIN_WAIT_1

FIN_WAIT_2 LAST_ACK

CLOSE_WAIT

TIME_WAIT CLOSED

被动 OPEN ( 建立 TCB)

Close() ( 删除 TCB) 主动 OPEN

( 建立 TCB) ( 发送 SYN)

Send() ( 发送 SYN)

接收 SYN ( 发送 SYN,ACK)

接收 SYN(发送 SYN,ACK)

接收 SYN 的 ACK ( 无动作)

接收 SYN , ACK ( 发送 ACK )

Close() ( 发送 FIN )

Close() ( 发送 FIN )

Close() ( 发送 FIN )

接收 FIN ( 发送 ACK )

接收 FIN ( 发送 ACK )

接收 FIN 的 ACK ( 无动作)

接收 FIN 的 ACK ( 无动作) 接收 FIN 的 ACK

( 无动作) 接收 FIN

( 发送 ACK )

Close() or Timeout

RST or Timeout

接收 RST

2MSL timeout

接收 RST

接收 FIN,ACK

(发送 ACK)

Page 6: FACE

为了便于分析,引入下面一些变量来描述连接状态:RCV_SEQ :服务方下一个字节发送时用来作标记的序列号。RCV_ACK :服务方接收的下一个字节应具有的序列号。RCV_WIND :服务方基于“滑动窗口”流量控制机制的接收窗口大小。RCV_SEQ0 :初始的接收序号。SND_SEQ :客户方下一个字节发送时用来作标记的序列号。SND_ACK :客户方接收的下一个字节应具有的序列号。SND_WIND :客户方基于“滑动窗口”流量控制机制的接收窗口大小。SND_UNA :客户方未得到应答的发送序号 ;

SND_SEQ :客户方下一个发送序号 ;

SND_SEQ0 :初始的发送序号。SEG_SEQ :报文序号 ;

SEG_ACK :报文应答号 ;

SEG_LEN :报文长度 ;

SEG_WIND :接收方传输给发送方的接收窗口大小,用于流量控制。

变量变量

Page 7: FACE

1 )建立连接。

11 )建立连接)建立连接

建立 TCP 正常连接示意图

发送 SYN seq=x

接收 SYN 报文发送 SYN seq=y, ACK=x+1

接收 SYN + ACK 报文发送 ACK=y+1

接收 ACK 报文

Client Server

SYN seq=x

SYN seq=y, ACK=x+1

ACK=y+1

Page 8: FACE

建立连接时,若连接处于无数据交换的状态,有:

SND_ACK=RCV_SEQ

RCV_ACK=SND_SEQ 。

成立,但当存在数据交换的时候,上面的关系式就应改为:

RCV_ACK≤SND_SEQ≤RCV_ACK+RCV_WIND ,

SND_ACK≤RCV_SEQ≤SND_ACK+SND_WIND 。

11 )建立连接)建立连接

Page 9: FACE

客户方发送数据时会设置 SEG_SEQ=SND_SEQ 和 SEG_ACK=SND_ACK 。 TCP 通过“三次握手”机制来建立连接。设客户方的初始序列号为 SND_SEQ0 ,服务方的初始序列号为 RCV_SEQ0 ,连接建立完毕后,连接双方将处于 ESTABLISHED 状态。此时,有下面的等式成立:

SND_SEQ=SND_SEQ0+1

SND_ACK=RCV_SEQ0+1

RCV_SEQ=RCV_SEQ0+1

RCV_ACK=SND_SEQ0+1

Page 10: FACE

2 )传输数据。

当连接双方进入 ESTABLISHED 状态后,对服务方而言,只有收到的报文的序列号在范围 [RCV_ACK ,RCV_ACK+RCV_WIND] 内,该报文才会被接受。

对客户方而言,只有收到的报文的序列号在范围[SND_ACK , SND_ACK+SND_WIND] 内,该报文才会被接受。否则,报文将被抛弃,并且接收方会发送一个反馈报文,通知发送方合法的序列号范围。

22 )传输数据)传输数据

Page 11: FACE

当主机要关闭连接的时候,它将发送一个设置了 FIN 或 RST 控制位的包,对端主机收到后就进入 CLOSED状态,并将同该连接相关的各种资源释放。通常情况下,含 RST 标志位的包是不被确认的。任何随后而来的报文都会被简单地抛弃。

33 )关闭连接)关闭连接

FIN x

ACK x+1

ACK y+1

FIN y

( 应用程序关闭连接 )发送 FIN seq=x

接收 ACK 报文 写通道关闭

接收 FIN+ACK 报文发送 ACK y+1关闭读通道

( 应用程序关闭连接 )发送 FIN seq=y,ACK x+1

接收 ACK 报文关闭写通道

接收 FIN 报文发送 ACK x+1关闭读通道( 通知本端应用程序 )

关闭连接示意图

3 )关闭连接。

Page 12: FACE

TCP 包头中同攻击相关的参数有:

SourcePort :源端口号。DestinationPort :目的端口号。SequenceNumber :报文中第 1 个字节的序列号。AcknowledgementNumber :期待收到的包的序列号。DataOffset :数据的偏移位置 ( 因为存在变长包头 ) 。FlagBits :特定的控制信息,包括:  

FIN :设成 1 ,表示请求关闭连接。  SYN :设成 1 ,表示请求建立连接。  RST :设成 1 ,请求重置连接。  PSH :设成 1 ,接数据后,不缓存,立即传给高层应用程序。ACK :设成 1 ,确认序列号有效。URG :设成 1 ,使用紧急数据指针。

Window :发送方的滑动窗口大小。Checksum : TCP 包中包头和数据的校验和。Options : TCP选项,包括下面几种选项:  

SEG_SEQ :描述该包的序列号。  SEG_ACK :描述该包携带的确认序列号。  SEG_FLAG :描述 FlagBits 控制标记位的值。

Page 13: FACE

根据扫描时发送端发送的报文类型来分,端口扫描技术可分为 :TCP 链接扫描、TCP 同步扫描、 FIN 系列扫描、 UDP 扫描、 ACK( 应答 ) 扫描和窗口扫描。

三、端口扫描技术三、端口扫描技术

Page 14: FACE

1 、 TCP connect 扫描技术

扫描者向被扫描机器的目标端口发送 SYN 报文,等待目标端口发送 SYN & ACK 报文,收到后返回报文后,证明目标端口开放,于是向目标端口发送 ACK 报文,扫描机进入连接状态,目标机收到 ACK 报文后,也进入连接状态。如 TCP 状态图所示,源主机和目标主机双双进入 ESTABLISHED 状态,即完成“三次握手”。

对 SOCKET 用户来说,只需调用一个 connect() 函数,检查 connect 返回状态就可完成这三个报文交换。

11 、 、 TCP connectTCP connect 扫描扫描

Page 15: FACE

如果发送 SYN 报文后,未收到目标端口的 SYN&ACK响应报文,可以多次重发 SYN 报文,若都失败,connect()函数将返回 ETIMEOUT 的错误。

如果目标端口没有服务进程在等待连接,目标机的TCP 协议将返回 RST 数据段, connect()函数受到该数据段后,立即返回错误 ECONNREFUSED 。

这种扫描技术简单易行, 它不需超级用户权限,任何希望管理端口服务的人都可以使用。但如果将它运用于探测别人的网络服务时,很容易被目标主机记录。

Page 16: FACE

2 、 TCP SYN 扫描技术

TCP 同步扫描其实就是向目标端口发送伪造的 SYN 控制报文, 如果 SYN 标志位置 1 ,目标机先进行安全性检查,再进行优先级检查,如果其中之一不能通过检查, 目标端口处于 CLOSED 状态,发送 RST响应报文,报文格式为: [SEQ =0] [ACK =SEG_SEQ +SEG_LEN] [CTL =RST , ACK]

然后丢弃到达的 SYN 控制报文,处理完成 。

(虽然协议中这么要求,但是很多网络内核的 TCP 不进行这样的检查 ) 。

Page 17: FACE

如果优先级和安全性两项检查通过,则目标端口处于LISTEN 即监听状态。设置 RCV_NXT =SEG_SEQ +1 , RCV_SEQ0 =SEG_SEQ ,

并且选择一个随机值 INI_S 作为初始序列号。发送 SYN& ACK 报文,格式为:

[SEQ =INI_S] [ACK =RCV_NXT] [CTL =SYN , ACK]

这时 SND_NXT被设置为 INI_S +1 , SND_UNA 设置为INI_S ,进入 SYN_RCVD 状态。

随后扫描方发送一个 RST 控制报文,处于 SYN_RCVD 状态的接收方端口默默丢弃它,然后返回 LISTEN 状态。这样,被扫描方就没有任何察觉,因为扫描前后被扫描主机状态没有改变。

Page 18: FACE

3 、 TCP FIN 扫描技术

正常的 TCP 通信是先进行“三次握手”的确认连接,然后进行数据传输和关闭连接。 TCP FIN 扫描则绕过确认连接,直接向目标主机的目标端口发送 FIN 控制报文。处于CLOSED 状态的目标端口发送 RST 控制报文,报文格式为: [SEQ =0] [ACK =SEG_SEQ +SEG_LEN] [CTL =RST , ACK]

而处于 LISTEN 状态的目标端口则忽略到达报文,不作任何应答。判断是否有报文收到,就可知目标主机的端口状态。

33 、 、 TCP FIN TCP FIN 扫描扫描

Page 19: FACE

FIN 系列扫描还有两种构造发送报文的格式:一种是报文的 RST 、 FIN 、 URG 标志全部置“ 1” ,另一种是关闭所有标志。无论是哪一种,收到的响应报文都是一样的。但是,有些系统 ( 如 Windows)却不遵守上面所说的响应规则,全部忽略。所以这种技术对系统的依赖性很强。一个积极的副作用是可以通过它判断目标系统是 Windows 系统。

Page 20: FACE

4 、 UDP 扫描技术

UDP 协议和 TCP 协议一样是建立在 IP 协议基础上,但 UDP 提供非面向连接和不可靠的数据报服务。应用程序可以构造一个 UDP 数据报,通过低层的 IP 协议传给目标机,目标机的 UDP 协议收到 UDP 数据报后,将数据报传给数据报定义的目标端口相应的接收缓冲区。

如果 UDP 目的端口打开,接收缓冲区未满则没有应答报文,当接收缓冲区已满时,丢弃该 UDP 数据报,但不返回错误信息 ; 如果目的端口关闭,则返回会端口不可达( Unreachable )的 ICMP 报文。这样,只需构造一个 UDP 报文,观察响应报文就可知道目标端口的状态。

44 、 、 UDPUDP 扫描技术扫描技术

Page 21: FACE

5 、 ACK 扫描技术

主要用来探测过滤性防火墙的过滤规则。应用程序可以构造一个数据包,将 ACK 标志位置 1(不设 RST 标志),目标机 TCP 协议受到 ACK 报文后,会产生 RST响应报文。

若目标端口处于 CLOSED 状态, TCP 发送 RST响应报文。报文的格式: [SEQ =SEG_ACK] [CTL =RST]

若目标端口处于 LISTEN 状态, 因为处于这一状态的端口没有发送任何数据报文,不应收到应答报文,说明到达报文非法。 TCP也发送 RST响应报文,格式同上。然后丢弃到达报文,处理完成。

对于防火墙,如果端口被过滤,要么收不到报文,要么收到 ICMP 的目标不可达报文 ; 相反,如果没有被过滤时,则收到上面的 RST 报文。

55 、 、 ACKACK 扫描技术扫描技术

Page 22: FACE

6 、 WINDOW 扫描技术

TCP 滑动窗口协议允许随时改变窗口大小,接收方在对每个 TCP 数据段的确认中,除了指明下一个期待接收字节的序列号外,还包括一个窗口通告说明当前接收缓冲区的大小,以保证 TCP 的可靠传输和提供流量控制。一些网络实现,比如 BSD4. 3 ,在 LISTEN 状态对于到达的窗口控制报文,发送的 RST响应报文中却包含了当前的窗口大小。这样,只要检查 RST 报文的 SEQ_WIND ,就可通过窗口扫描得到目标端口的状态。

如果以应答报文 (ACK) 的方式向目标端口发送窗口控制报文,可以和 ACK 扫描一样用来探测过滤性防火墙的过滤规则。

66 、 、 WINDOWWINDOW 扫描扫描