《端口扫描原》PPT课件.ppt
端口扫描原理,端口扫描,端口扫描是通过与目标系统的TCP/IP端口连接,查看该系统处于监听或运行状态的服务。一项自动探测本地和远程系统端口开放情况的策略及方法,它使系统用户了解系统目前向外界提供了哪些服务,从而为管理或攻击提供了一种手段。,端口扫描,原理1)向目标主机的TCP/IP服务端口发送探测数据包,记录目标主机的响应。2)分析响应,判断服务端口是打开还是关闭,得知端口提供的服务或信息。端口扫描也可以通过捕获本地主机或服务器的流入流出IP数据包对本地主机的运行情况进行监视,查找内在弱点。,端口扫描,1、TCP概述2、TCP扫描1)全连接扫描2)半连接扫描(TCP SYN扫描)3)TCP FIN扫描(秘密扫描)4)TCP Xmas和TCP null5)间接扫描3、UDP扫描4、防范,TCP 协议概述,源端口和目的端口字段各占2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。,序号字段占4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。,确认号字段占4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。,数据偏移占4 bit,它指出TCP 报文段的数据起始处距离TCP 报文段的起始处有多远。“数据偏移”的单位不是字节而是32 bit 字(4 字节为计算单位)。,保留字段占6 bit,保留为今后使用,但目前应置为0。,紧急比特URG 当URG=1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。,确认比特ACK 只有当ACK=1 时确认号字段才有效。当ACK=0 时,确认号无效。,推送比特PSH(PuSH)接收TCP 收到推送比特置1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。,复位比特RST(ReSeT)当RST=1 时,表明TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。,同步比特SYN 同步比特SYN 置为1,就表示这是一个连接请求或连接接受报文。,终止比特FIN(FINal)用来释放一个连接。当FIN=1 时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。,窗口字段占2 字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。,检验和占2 字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP 报文段的前面加上12 字节的伪首部。,紧急指针字段占16 bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。,选项字段长度可变。TCP 只规定了一种选项,即最大报文段长度MSS(Maximum Segment Size)。MSS 告诉对方TCP:“我的缓存所能接收的报文段的数据字段的最大长度是MSS 个字节。”,MSS 是TCP 报文段中的数据字段的最大长度。数据字段加上TCP 首部才等于整个的TCP 报文段。,填充字段这是为了使整个首部长度是4 字节的整数倍。,用三次握手建立TCP连接,A 的TCP 向B 发出连接请求报文段,其首部中的同步比特SYN 应置为1,并选择序号x,表明传送数据时的第一个数据字节的序号是x。B 的TCP 收到连接请求报文段后,如同意,则发回确认。B 在确认报文段中应将SYN 置为1,其确认号应为x+1,同时也为自己选择序号y。A 收到此报文段后,向B 给出确认,其确认号应为y+1。A 的TCP 通知上层应用进程,连接已经建立。当运行服务器进程的主机B 的TCP 收到主机A 的确认后,也通知其上层应用进程,连接已经建立。,建立TCP 连接,从A 到B 的连接就释放了,连接处于半关闭状态。相当于A 向B 说:“我已经没有数据要发送了。但你如果还发送数据,我仍接收。”,释放TCP连接,TCP扫描,思路:通过穷举法,依次判断哪些端口在开放。依次判1-1024端口是否开放。,客户端,服务器端,端口开放,TCP扫描,1)全连接扫描是TCP端口扫描的基础,通过完整的三次握手与目标主机的指定端口建立一次完整的连接。,客户端,服务器端,端口开放,TCP扫描,2)半连接扫描(TCP SYN扫描)两次握手,客户端,服务器端,端口开放,TCP扫描,3)TCP FIN(秘密扫描)针对Unix系统,客户端,服务器端,端口开放,TCP扫描,4)TCP Xmas和TCP null针对Unix系统,是TCP FIN的变种;TCP Xmas扫描打开FIN、URG、PUSH标记NULL扫描则关闭所有标记。目的是防止包被过滤。,TCP扫描,5)间接扫描攻击主机借用第三方IP(欺骗、伪装主机IP)扫描目标主机。,攻击主机,伪装主机第三方主机,目标主机,使用伪装主机IP给目标主机发包,根据端口状态,发回应包给伪装主机,发回应包给目标主机,监控伪装主机的行为,分析目标主机状态,UDP扫描,UDP概述,UDP扫描,为何UDP扫描不容易实现?1)UDP ICMP端口不可达扫描,UDP扫描,1)UDP ICMP端口不可达扫描问题:丢包、限定ICMP差错分组的发送频率;需root权限,UDP扫描,2)UDP recvfrom()和write()扫描对非root用户不能直接读取“端口不可达”错误,Linux能间接地在它们到达时通知用户:对一个关闭的端口的第二次调用write()将失败在非阻塞的UDP套接字上调用recvfrom()时,如果ICMP出错还没有到达时回返回EAGAIN-重试。如果ICMP到达时,返回ECONNREFUSED-连接被拒绝,用来查看端口是否打开。,端口扫描的防范,1)确定SYN包中伪造IP,通过防火墙、路由器拒绝其进入2)基于状态的防火墙防护3)进行出口过滤,防止有伪造IP的包的流出,