资源描述
毕毕 业业 设设 计计( 论论 文文) 端口扫描与检测技术的实现端口扫描与检测技术的实现 论论文作者姓名:文作者姓名: 申申请请学位学位专业专业: : 申申请请学位学位类别类别: : 指指导导教教师师姓姓名名( (职职称称) ): : 论论文提交日期:文提交日期: 端口扫描与检测技术的实现端口扫描与检测技术的实现 摘摘 要要 随着 Internet 日益广泛的应用,黑客攻击行为也是有增无减。如何有效地 抵御这种攻击行为,一直是信息安全领域的焦点。 而其中,端口扫描技术吸引了越来越多人的关注。端口扫描是黑客搜集目 标主机信息的一种常用方法。为了有效地对付网络入侵行为,对端口扫描进行研 究是非常有益和必要的。攻击者在攻击一个目标时,首先要获取目标的一些基 本信息,端口扫描就是其中最简单最重要的方法之一,它可以扫描目标机器中 开放的端口,从而确定目标机器中提供的服务,为下一步攻击做准备。针对端 口扫描技术,相应的端口扫描检测技术显的越发重要,作为网络安全技术中的 一个重要课题,端口扫描检测技术意义重大。 本文首先阐述了端口扫描技术以及端口扫描检测技术的基本原理和常用方 法,然后在此基础上设计了一个对基于网络的端口进行扫描,能判断出目标主 机端口开放情况的程序以及一个从网络信息的数据包的捕获和分析着手,再通 过统计判断是否存在端口扫描行为的程序,最后从攻击和防御的角度对端口扫 描和检测技术作了演示及分析。 关键词关键词:端口;端口扫描;数据包捕获;端口检测 The Realization of Port Scanning and Detecting Technology Abstract As the widely applying of Internet, the attacking behavior made by hacker is increasing but not decreasing. How to resist this kind of attacking behavior is always the key point of the domain of the information security. And the port scanning draws peoples attention more and more. Port scanning is a usual method which is used by the hacker to collect the information of the target main processor. In order to deal with the invading behavior of the Internet effectively, it is very useful and necessary to work on the port scanning. When an attacker attacks to a target, he or she will firstly gets some basic information about the target, and the port scanning is one of the most simple and important methods which can scan the opening Port of the target machine to make sure the offering service made by the target machine, and it is a preparation to the next attacking. The port detecting seems more and more important referring to the port scanning. As an important task of the secure technique of Internet, the port detecting is of great significance. In this thesis, it firstly elaborates the basic principles and usual methods of the port scanning. On this basis, it then designs a program which can scan the Port of the Internet, and assess the opening situation of the target main processor, and the other program which begins on capturing and analyzing the information packet of Internet, and then assess whether there is a behavior about port scanning through statistic analyses. Lastly, it demonstrates and analyses the technology of port scanning and port detecting from the viewpoint of attacking and resisting. Key Words:port; port scanning; packet capture; port detecting 目目 录录 论文总页数:23 页 1引言1 1.1本课题研究的意义1 1.2本课题的研究方法2 2端口扫描概述2 2.1基本概念2 2.2端口扫描原理3 2.3端口扫描技术简介5 3检测端口扫描概述7 3.1端口扫描检测的分析7 3.2普通端口扫描检测技术概述8 3.3慢速端口扫描检测技术概述9 3.4端口扫描的分布式检测概述9 3.5主流的端口扫描工具.11 4端口扫描的实现.12 4.1扫描程序的设计原理.12 4.2程序流程图.12 5检测端口扫描的实现.13 5.1检测程序的设计原理.13 5.2程序流程图.13 5.3设计实现重点代码.14 6性能测试.18 6.1端口扫描程序性能测试.18 6.2检测端口扫描程序性能测试.19 结 论.20 参考文献.21 致 谢.22 声 明.23 第 1 页 共 23 页 1 1 引言引言 随着科学技术的飞速发展,21 世纪的地球人已经生活在信息时代。20 世纪 人类的两大科学技术成果计算机技术和网络技术,均已深入到人类社会的 各个领域,Internet 把“地球村”的居民们紧密联系在一起, “天涯若比邻” 已然成为现实。 互联网之所以能这样迅速蔓延,被世人所接受,是因为它具备特有的信息 资源。无论对商人、学者,还是对社会生活中的普通老百姓,只要你进入网络 的世界,就能找到其隐藏的奥妙,就能得到你所需要的信息。近年来 Internet 的迅速发展,给人们的日常生活带来了全新的感受, “网络生存”已经成为时尚, 同时人类社会诸如政治、科研、经济、军事等各种活动对信息网络的依赖程度 已经越来越强, “网络经济”时代已初露端倪。 然而,网络技术的发展在给我们带来便利的同时也带来了巨大的隐患,尤 其是 Internet 和 Intranet 的飞速发展对网络安全提出了前所未有的挑战。技 术是一把双刃剑,不法分子试图不断利用新的技术伺机攻入他人的网络系统, 而肩负保护网络安全重任的系统管理员则要利用最新的网络技术来防范各种各 样的非法网络入侵行为。事实已经证明,随着互联网的日趋普及,在互联网上 的犯罪活动也越来越多,特别是 Internet 大范围的开放以及金融领域网络的接 入,使得越来越多的系统遭到入侵攻击的威胁。而作为黑客入侵的前奏,端口 扫描是最常见的信息获取手段,端口扫描的检测技术在当今已经越来越成为一 个重要的课题。 本文首先对端口扫描技术进行研究,并开发一个能查询目标主机端口开放 情况的程序;然后重点研究端口扫描的检测技术,从对数据包的捕获和分析着 手,再定义一个判断是否扫描的条件,并通过统计由定义的扫描条件判断是否 存在端口扫描行为,不但能对一般的扫描、快速扫描能够检测,且在一定程度 上对慢速扫描也能很好的检测。 1.11.1 本课题研究的意义本课题研究的意义 在今天快速发展的 Internet 中,黑客攻击方法层出不穷,网络的安全性已 经越来越受到威胁。要保证计算机资源的保密性、有效性、完整性也变得越来 越困难。 端口扫描作为黑客攻击的一个重要方面,也在不停地向前发展,扫描手段 已经变得越来越丰富,越来越隐蔽,越来越具有威胁性。如何有效的对端口扫 描行为进行检测,已经是越来越重要的一个课题,这对于保证我们网络的安全 性有着重要的意义,也是入侵检测系统(IDS)和入侵预防系统(IPS)的一个 重点。 第 2 页 共 23 页 1.21.2 本课题的研究方法本课题的研究方法 本文分别对端口扫描技术以及端口扫描的检测技术作了研究,并设计出一 个根据扫描者向目标主机的 TCP/IP 服务端口发送探测数据包,并记录目标主机 的响应,通过分析响应来判断服务端口是打开还是关闭,进而得知端口的状态 的端口扫描程序,以及一个从网络信息的数据包的捕获和分析着手,通过统计 判断是否存在端口扫描行为的端口扫描检测程序。 2 2 端口扫描概述端口扫描概述 2.12.1 基本概念基本概念 端口的含义: 在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比 如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如 RJ-45 端口、SC 端口等等。二是逻辑意义上的端口,一般是指 TCP/IP 协议中的 端口,端口号的范围从 0 到 65535,比如用于浏览网页服务的 80 端口,用于 FTP 服务的 21 端口等等。 我们这里将要介绍的就是逻辑意义上的端口。 端口分类: 逻辑意义上的端口有多种分类标准,下面将介绍两种常见的分类: 按端口号分布划分: (1)知名端口(Well-Known Ports) 知名端口即众所周知的端口号,范围从 0 到 1023,这些端口号一般固定分 配给一些服务。比如 21 端口分配给 FTP 服务,25 端口分配给 SMTP(简单邮件 传输协议)服务,80 端口分配给 HTTP 服务,135 端口分配给 RPC(远程过程调 用)服务等等。 (2)动态端口(Dynamic Ports) 动态端口的范围从 1024 到 65535,这些端口号一般不固定分配给某个服务, 也就是说许多服务都可以使用这些端口。只要运行的程序向系统提出访问网络 的申请,那么系统就可以从这些端口号中分配出一个供该程序使用。比如 1024 端口就是分配给第一个向系统发出申请的程序。在关闭程序进程后,就会释放 所占用的端口号。 不过,动态端口也常常被病毒木马程序所利用,如冰河默认连接端口是 7626、WAY 2.4 是 8011、Netspy 3.0 是 7306、YAI 病毒是 1024 等等。 按协议类型划分: 第 3 页 共 23 页 按协议类型划分,可以分为 TCP、UDP、IP 和 ICMP(Internet 控制消息协 议)等端口。下面主要介绍 TCP 和 UDP 端口: (1)TCP 端口 TCP 端口,即传输控制协议端口,需要在客户端和服务器之间建立连接, 这样可以提供可靠的数据传输。常见的包括 FTP 服务的 21 端口,Telnet 服务 的 23 端口,SMTP 服务的 25 端口,以及 HTTP 服务的 80 端口等等。 (2)UDP 端口 UDP 端口,即用户数据包协议端口,无需在客户端和服务器之间建立连接, 安全性得不到保障。 常见的有 DNS 服务的 53 端口,SNMP(简单网络管理协议)服务的 161 端口, QQ 使用的 8000 和 4000 端口等等。 2.22.2端口扫描原理端口扫描原理 扫描者向目标主机的 TCP/IP 服务端口发送探测数据包,通过探测性数据包 得到目标主机的响应并记录下来,通过分析响应来判断服务端口是打开还是关 闭,进而得知端口的状态。 通常通过调用套接字函数connect ()连接到目标计算机上,完成一个完整 的3次握手程。如果端口处于侦听状态,那么connect()就能成功返回。否则, 该端口不可用,即没有提供服务。 端口扫描的第一步是向目标主机的TCP/UDP端口发送探测数据包,然后根据 对方的回应判断端口是否开放。由于网络环境的差异以及操作系统对连接请求 的应答并不一致,在端口扫描中支持多种扫描方式,以保证扫描的准确和快速。 大多数扫描技术要发送原始套接字包来进行探测。因为只有原始套接字支持对 IP 报头的设置,即构造IP 数据包。同时,原始套接字也支持发送和接收IP数 据包。这样,原始套接字接口实际上成为网络层向上提供的接口。实现时可通 过调用Winsock2库中的函数setsockopt()来设置选项IP_HDRINCL,以获取自定 义IP报头的权限。由于Windows2000仅支持Raw ICMP和Raw IGMP,不支持 RawTCP,因此,发送TCP数据包,必须通过设置选项IP_HDRINCL来构造IP报头。 首先创建原始套接字,定义IP首部。 IPHEADER, TCP伪首部TCPSOCHEADER和TCP首部TCPHEADER,再填充IP首部和 TCP首部,其中,TCP首部中的结构体变量tcpHeader的tcpHeade.th_flag=2,表 示发送的是SYN数据包,修改它可以实现不同的标志位探测,如2是SYN,0是 NULL,1是FIN,16是ACK探测等等。因为是自己填充IP首部和TCP首部,所以还 需定义一个计算校验和函数checksum来计算IP报头和TCP报头的校验和。在填充 TCP首部时,通过TCP伪首部填充TCP数据包的IP选项。事实上TCP伪首部并不是 第 4 页 共 23 页 真正存在的,只是用于填充TCP的一些选项和计算校验和。调用setsockopt()设 置选项IP_HDRINCL,根据填充TCP、IP报头的内容构造IP 数据包。设置侦听原 始套接字的同步和超时之后,调用sendto()发送IP 数据包。 发送原始套接字包流程图如图1所示: 图 1 发送原始套接字包流程图 原始套接字包发送完后,就可以接收目标主机的回应。当发送原始套接字 包时(如TCP SYN数据包),操作系统核心并不知道,也没有此数据发送或者连接 建立的记录。因此,当远端主机回应时,系统核心就把这些包都全部丢掉,从 而到达不了应用程序上。所以,程序中不能简单地使用接收函数来接收这些数 据包。要达到接收数据包的目的,必须采用嗅探,接收所有通过的数据包,然 后进行筛选,留下符合需要的。为此可以再定义一个原始套接字,用来接收数 据,并在套接字I/0控制函数中设置SIO_RCVALL,表示接收所有的数据。通过设 置原始套接字的I/0控制命令,便可以调用recv()接收返回的数据包。一般情况 下使用的是TCP SYN半连接扫描,由于TCPConnect()全连接扫描拥有很好的稳定 第 5 页 共 23 页 性,这种技术用得非常多。通常通过调用套接字函数connect()连接到目标计算 机上,完成一个完整的3 次握手过程。如果端口处于侦听状态,那么connect() 就能成功返回。否则,该端口不可用,即没有提供服务。以上实现的端口扫描, 可以得到每个端口的状态,此处的状态并非端口本身的性质,而是对扫描结果 的描述。端口状态可以分为5种:open(开放的)、closed(关闭的)、 filtered(被过滤的)、unfiltered(未被过滤的)和open filtered(开放或者 被过滤的)。 2.32.3端口扫描技术简介端口扫描技术简介 常用的端口扫描技术主要有以下几种: (1)TCP connect() 扫描 这是最基本的TCP扫描。 利用操作系统提供的connect系统调用,用来与每一个感兴趣的目标计算机 的端口进行连接。如果端口处于侦听状态,则connect就能成功。否则,这个端 口是不能用的,即没有提供服务。 这个技术的最大的优点是,用户不需要任何权限,系统中的任何用户都有 权利使用这个调用。另一个好处就是速度快。如果对每个目标端口以串行的方 式,使用单独的connect()调用,那么将会花费相当长的时间,用户可以通过同 时打开多个套接字,从而加速扫描。使用非阻塞I/O允许设置一个较低的超时时 限,同时观察多个套接字。但这种方法的缺点是很容易被发觉,并且被过滤掉。 目标计算机的logs文件会显示一连串的连接和连接是否出错的服务消息,并且 能很快地使它关闭。 (2)TCP SYN扫描 这种技术通常认为是“半开放”扫描,这是因为扫描程序不必要打开一个 完全的TCP连接。 扫描程序发送的是一个SYN数据包,好象准备打开一个实际的连接并等待反 应一样(参考TCP的三次握手建立一个TCP连接的过程)。一个SYN/ACK 的返回 信息表示端口处于侦听状态。一个RST返回,表示端口没有处于侦听态。如果收 到一个SYN/ACK,则扫描程序必须再发送一个RST信号,来关闭这个连接过程。 这种扫描技术的优点在于一般不会在目标计算机上留下记录,但这种方法的缺 点是,必须要有root权限才能建立自己的SYN数据包,不过这个条件一般都是很 容易满足的。 (3)TCP FIN扫描 有的时候有可能SYN扫描都不够秘密。一些防火墙和包过滤器会对一些指定 的端口进行监视,有的程序能检测到这些扫描。相反,FIN数据包可能会顺利通 第 6 页 共 23 页 过。 这种扫描方法的思想是关闭的端口会用适当的RST来回复FIN数据包。另一 方面,打开的端口会忽略对FIN数据包的回复。这种方法和系统的实现有一定的 关系。如果有的系统不管端口是否打开,都回复RST,那么这种扫描方法就不适 用了。但这种方法在区分Unix和NT时是十分有用的。 (4)IP段扫描 这种不能算是新方法,只是其他技术的变化。 它并不是直接发送TCP探测数据包,是将数据包分成二个较小的IP段。这样 就将一个TCP头分成好几个数据包,从而过滤器就很难探测到。但一些程序在处 理这些小数据包时会有些问题。 (5)FTP返回攻击 FTP协议的一个的特点是它支持代理FTP连接。即入侵者可以从自己的计算 机和目标主机的FTP server-PI(协议解释器)连接,建立一个 控制通信连接。然后,请求这个server-PI激活一个有效的server-DTP(数据传 输进程)来给Internet上任何地方发送文件。对于一个User-DTP,这是个推测, 尽管RFC明确定义请求一个服务器发送文件到另一个服务器是可以的,但当前的 大多数实现并不支持,因为这个特性“能用来发送不能跟踪的邮件和新闻,给 许多服务器造成打击,用尽磁盘,企图越过防火墙”。 利用FTP返回攻击的目的是从一个代理的FTP服务器来扫描TCP端口。这样, 用户能在一个防火墙后面连接到一个FTP服务器,然后扫描端口。如果FTP服务 器允许从一个目录读写数据,你就能发送任意的数据到发现的打开的端口。对 于端口扫描,这个技术是使用PORT命令来表示被动的User DTP正在目标计算机 上的某个端口侦听。然后入侵者试图用LIST命令列出当前目录,结果通过 Server-DIP发送出去。如果目标主机正在某个端口侦听,传输就会成功,(产 生一个150或226的回应)否则,会出现“425 Cant build data connection:Connection refused.”。然后,使用另一个PORT命令,尝试目标 计算机上的下一个端口。这种方法的优点很明显,难以跟踪,能穿过防火墙。 主要缺点是速度很慢,有的FTP服务器最终能得到一些线索,关闭代理功能。 (6)UDP ICMP端口不能到达扫描 这种方法与上面几种方法的不同之处在于使用的是UDP协议。由于这个协议 很简单,所以扫描变得相对困难。 这是由于打开的端口对扫描探测并不发送一个确认,关闭的端口也并不需 要发送一个错误数据包。幸运的是,许多主机在你向一个未打开UDP端口发送一 个数据包时,会返回一个ICMP_PORT_UNREACH错误。这样你就能发现哪个端口是 第 7 页 共 23 页 关闭的。UDP和ICMP错误都不保证能到达,因此,这种扫描器必须还实现一个在 包看上去是丢失的时候能重新传输。这种扫描方法是很慢的,因为RFC对ICMP错 误消息的产生速率作了规定。同样,这种扫描方法需要具有root权限。 (7)UDP recvfrom()和write()扫描。 当非root用户不能直接读到端口不能到达错误时,Linux能间接地在它们到 达时通知用户。比如,对一个关闭的端口的第二个write()调用将失败。在非阻 塞的UDP套接字上调用recvfrom()时,如果ICMP出错还没有到达时会返回 EAGAIN-重试。如果ICMP到达时,返回ECONNREFUSED-连接被拒绝。这就是用来 查看端口是否打开的技术。 (8)TCP 反向 ident 扫描 ident 协议(rfc1413)允许看到通过 TCP 连接的任何进程的拥有者的用户 名,即使这个连接不是由这个进程开始的。 例如,扫描者能连接到 Http 端口,然后用 ident 来发现服务器是否正在以 root 权限运行。这种方法只能在和目标端口建立了一个完整的 TCP 连接后才能 看到。 总之,为了避过目标系统的日志审计和防火墙的阻截,为了避过目标系统 的端口扫描检测,入侵者往往会采用一系列方法来改变正常的端口扫描方式, 以达成端口扫描的隐蔽性,这些方法包括:改变扫描端口的顺序、慢速扫描、 端口扫描间隔随机化、随机化扫描包的其它区域、伪造源地址扫描和分布式扫 描等。 3 3 检测端口扫描概述检测端口扫描概述 3.13.1 端口扫描检测的分析端口扫描检测的分析 端口扫描是一台主机对多个目标端口进行试探,包括打开的和没有打开的 端口。这就为检测端口扫描提供了两条“线索”:一是“是否存在试图连接已 经关闭端口的行为” ;二是“在一段时间内,是否存在从一个源地址发出的数据 包到达多个目的地址的行为” 。 检测端口扫描的方法主要有两种: 一种是对主机没有对外提供服务的端口进行监听,如果检测到有对这样的 端口的连接请求,就认为有扫描发生; 另一种检测方法是对整个网络流量进行监控,检查网络中所有的数据,并 对异常情况进行记录。 在本文中,为了便于对端口扫描检测进行研究,从端口扫描检测的角度出 发,把端口扫描技术分为普通扫描,慢速扫描及分布式扫描,并在后面的介绍 第 8 页 共 23 页 中分别对不同的检测方法作了介绍。 3.23.2普通普通端口扫描检测技术概述端口扫描检测技术概述 目前比较常见的端口扫描就是一对一的扫描关系,如下图2所示,即只有一 个扫描者,且扫描者从本身出发,不经过任何隐藏通过发送探测性数据包来判 断目标主机的端口开放情况。 图2 普通扫描技术 针对这种一对一的普通或快速的端口扫描技术,目前端口扫描的检测技术 采用的方法有Snort方法、Watcher方法和PortSentry方法等三种,都能很好的 检测出这种扫描。 它们进行端口扫描检测采用的算法大致可以概括如下:在M秒内,监测从同 一源端发出的数据包, 如果其目的IP与目的端口的组合数目超出N的话, 则认为 是一次扫描。 Snort是一个轻量级的网络入侵检测系统。它的探测引擎采用模块化的插件 结构,允许开发者扩展Snort的功能, 也可以使得用户可以按自己的需要定制功 能。Snort检测端口扫描的方法是:在Y秒内, 如果检测到从同一个源发出,目的 为不同的主机和端口的组合的TCP或UDP包的数目超出阈值X, 则认为是扫描。其 中X和Y的值可以由用户自己设定。另外, Snort也同样可以检测有奇异标志的 TCP包。 Watcher是一个比较完整的基于网络的入侵检测系统的设计代码。它检测所 有通过的信息包, 并且将它认为是恶意的攻击行为记录在syslog中。它的检测 原理是:如果在短时间内有超过7个以上的端口收到信息包(不管类型如何) , 那么这一事件就被当成端口扫描记录下来。 PortSentry是基于主机的网络入侵检测系统的一个组成部分,主要用来检 测外部对主机的端口扫描,它能够对多种扫描方法进行检测。它的检测原理是: 对没有开放服务的端口的访问有可能是一次扫描。通过监测没有开放服务的端 口,在最近n次连接里由同一个源发起的连接超过X次则判断为一次扫描。 以上几种扫描检测方法对端口扫描所采用的检测技术都比较简单,且存在 第 9 页 共 23 页 以下缺点: (1)无法检测慢速扫描, 因为在检测中时间窗是个固定值, 只要扫描速度 低于这个阈值, 攻击者就可以成功地逃避检测。当设定的时间阈值大到一定程 度时,需要从相当长时间的网络连接记录中找出扫描行为,系统资源消耗较大,无 法适应宽带网络尤其是高速网络环境; 从理论上讲,黑客总能够以略大于系统设 定阈值的时间间隔进行端口扫描; (2)未考虑到受保护网段的特点, 对网段内所有主机都采用相同的检测策 略, 效率不高而且容易导致误报。 3.33.3慢慢速端口扫描检测技术概述速端口扫描检测技术概述 慢速端口扫描是在普通端口扫描技术上进化而来的,可以说是黑客技术提 高的体现。 通常普通端口扫描的扫描者对被扫描者发送探测性数据包都是快速的,被 扫描者在进行捕包判断上就会显得比较容易,而慢速扫描与普通扫描一样,都 是一对一,即扫描者和被扫描者都只有一个,但是其对目标主机发送探测性数 据包的时间间隔上就变化很大,可以在1分钟发送一个探测性数据包后20分钟再 继续发送探测性数据包,也或者在发送一个探测性数据包后时间就递增,产生 一个时间上的变化,总之给检测端口扫描带来了极大的困难,这就需要用新的 规则,新的技术来进行端口检测。 在目前的慢速扫描检测技术中,模糊技术是应用的比较好的能检测出慢速 端口扫描的新型技术。 3.43.4端口端口扫描的分布式检测概述扫描的分布式检测概述 在当前端口扫描技术中,比较难以检测的是分布式扫描,针对分布式扫描, 不能采取对普通扫描及慢速扫描的检测方法。 如下图 3 所示,分布扫描是指扫描者通过控制其他多台计算机对目标主机 进行数据包探测,这样,被扫描者所捕获的数据包就是来自于不同的 IP,但是 实际扫描者通过所控制的计算机对应答数据包的分析依然能够判断出目标主机 的端口开放情况,被扫描者虽然所捕获到的探测性数据包其 IP 是正确的,但是 受到了 IP 欺骗,并没有判断出真正的扫描者,在这种情况下通常的检测方法对 分布式扫描是无效的。当然,在分布式扫描的基础上加以慢速扫描,则是更加 难以检测的扫描技术。 第 10 页 共 23 页 图 3 分布式扫描技术 在当前的分布式扫描检测技术中,最常用的是在进行端口扫描检测时,将 系统分成两个部分: 第一部分是传感器,它的功能是判断一个包的异常程度,赋给包一个异常 值。如果一个包有异常,则从网络数据中过滤出来,进行下一步的处理;如果 一个包没有异常,则简单地丢弃。 第二部分是分析器,它对异常包进行汇集、分类、分析。首先将异常包根 据其不同特性分成不同的类,然后再对不同的类计算一个类的异常值总和。如 果一个类的异常值总和超过了阈值,则判断为扫描。在分布式端口扫描检测系 统中,传感器分布在一个大网的各个子网内,采集网络上的各种有关扫描异常 数据;而分类器是一个汇总的分析器,通过汇总分析网络内各个子网的数据, 可以更好地分析网络上出现的扫描情况。 分布式检测方法具有很多优点: 首先,它能够实现分布式扫描的检测。因为分布式扫描其扫描包具有一定 的异常性,所以这些包可以被第一步的检测从网络数据中过滤出来。在第二步 进行分类分析的时候,由于这些分布式扫描的包具有一个共同的特性,即扫描 对象是同一个主机或同一个端口,因此它们可以被聚集到一个类里,从而被检 测为扫描。其次,这种方法也能够检测慢速的扫描。由于网络上巨大的通信量, 所以在以前的检测方法里检测时间窗T必须很小,否则会消耗掉太多的内存和 CPU时间而瘫痪。而采用该方法,由于分析器只需分析处理异常包,因此可以取 一个很大的时间窗T,从而检测出慢速的扫描。 另外,分布式检测方法具有很好的实时性。由于传感器只需要判断一个包 的异常程度,而不需要判断是否属于扫描,因此可以实现一个很快的异常包过 滤器。而传统的检测方法,例如,SNORT在接收到一个包以后,首先检查包的结 第 11 页 共 23 页 构,然后检查现有的扫描列表,相对来说是很费时间的。 异常包的检测: 首先,需要有一个准则来确定网络上一个包的异常程度。通过分析已有的 一些检测工具、扫描工具、以及入侵者用以躲避扫描检测的方法,总结出下面 的包是异常的包: (1)带有奇怪标志位的包有可能是扫描包; (2)没有正确的执行TCP协议握手过程的包有可能是扫描包; (3)连接后马上断开,没有具体协议内容的包,有可能是扫描包; (4)对没有开放服务的端口的连接包有可能是扫描包。 扫描技术在进步,相应的检测技术也在相应提高,现今还出现了一种新的 检测分布式扫描的方法,其原理是靠统计流量来进行判断,也能很好的检测出 分布式扫描。但是由于网络上的流量非常的大,且相当的不固定,要定义一定 时间内的流量有很大的困难,所以这种检测方法还存在很多缺陷,容易产生误 判为端口扫描,也容易放过真正的端口扫描行为。 3.53.5主流的端口扫描工具主流的端口扫描工具 常用的几种端口扫描检测器有: NSM(The Network Security Monitor)、Gr IDS、Snort和Portsentry等。 NSM是最早的基于网络的入侵检测系统,它认为所有与大于15个其它主机建 立连接的主机都是扫描者。这种算法是许多检测系统检测算法的雏形。 Gr IDS通过建立网络连接拓扑图来检测端口扫描。它使用节点代表主机, 如果主机间存在数据交换,就在相应的节点间连线。一次扫描试探就会在扫描 者的主机和被扫描者的主机之间建立一条连线,Gr IDS通过计算一个节点上存 在多少连线的方法判断是不是有端口扫描行为。这种方法不能检测秘密扫描, 速度相对较慢,具体的端口扫描行为的判断需要人工完成。 Snort是基于libpcap的一个源代码公开的轻量级的入侵检测系统。它的端 口检测功能是通过一个嵌入程序来完成。Snort的扫描检测器通过计算“在时间 X秒内有Y个TCP或UDP数据包从一个源地址发往不同的目的地址”来确定是否有 端口扫描行为;Snort能查找单个不正常的TCP包。缺点是不能检测分布式扫描、 慢速扫描,不能处理分片。 Portsentry是基于主机的端口扫描检测器。它指定多个TCP/UDP端口进行监 听,当这些端口被试图连接或扫描时,能在瞬间捕捉连接或扫描企图;它能有 效捕捉非连续随机扫描,生成外界扫描动作的详细日志记录,并将发起扫描的 主机地址写入tcp_wrapper的host.deny文件中,并重指扫描者路由,把信息流 第 12 页 共 23 页 重定向到一个不存在的主机。缺点是仅限于对一台单机进行端口扫描分析;判 断规则过于严格,正常的扫描容易被误认为是端口扫描行为。 4 4 端口扫描的实现端口扫描的实现 4.14.1扫描程序的设计原理扫描程序的设计原理 在进行端口扫描的设计与开发中,利用三次握手的原理,建立原始套接字, 通过向目标主机的 TCP/IP 服务端口发送探测性数据包,并记录目标主机的响应 情况,最后通过分析响应情况来判断目标主机服务端口是打开还是关闭,进而 得知端口的状态。 4.24.2程序流程图程序流程图 如下图 4 所示,所开发的端口扫描流程图: 图 4 端口扫描流程图 第 13 页 共 23 页 5 5 检测端口扫描的实现检测端口扫描的实现 5.15.1检测程序的设计原理检测程序的设计原理 在检测端口扫描程序的设计与开发中,这里首先是采取通过套接字来进行 数据包的捕获,再通过解 IP 包,然后对所解出的 TCP 包和 UDP 包分别再进行解 包,并记录下到达的端口,以及源 IP 地址,目的 IP 地址,目的端口,再设计 一种算法,通过算法对数据包进行统计分析,最后设定一个判断发生扫描行为 的条件,当满足条件有三次及三次以上的相同源 IP 且到达端口的不同的数据包 即判断发生端口扫描行为。 此检测端口扫描程序的设计不但可以检测一般的扫描和快速扫描,在一定 的程度上也能检测慢速扫描。 以前的端口扫描检测方法都是采用在一个固定的时间窗 T 内查看从同一个 源地址发起的连接数 X , 如果 X 超出了设定的阀值, 则判断为一次扫描。由于 网络上的通信量非常大, 所以以前的端口扫描方法都会设定一个很小的时间窗 T ,防止消耗掉过多的内存和 CPU 时间。由于本文提出的方法与时间窗无关, 所 以在不降低系统整体性能的前提下,在慢速扫描发送探测性数据包时间间隔上 不超出所设计程序所能记录数据包的最大上限的情况下仍能很好的检测慢速扫 描。 5.25.2程序流程图程序流程图 如下图 5 所示,所开发的检测端口扫描程序基本流程图: 第 14 页 共 23 页 图 5 端口检测流程图 5.35.3设计实现重点代码设计实现重点代码 在此端口扫描检测程序设计中,重点在于设计一个算法,用于研究是否存 在端口扫描行为,算法是此设计的重点。 就此设计的检测程序来说,在捕获数据包后所解的 TCP 包和 UDP 包,由于 在分析中要分别考虑 TCP 包和 UDP 包,但是对两种包的分析都是一样的,现我 们只详细阐述分析 TCP 包的情况。 在所设计用于检测端口扫描的算法中,首先是一个统计函数,用于对通过 第 15 页 共 23 页 套接字捕获数据包的统计: void statistics(char szProtocol,char szSourceIP,int iSourcePort,char szDestIP) if(strcmp(szProtocol,“TCP“) if(TCP_MAX=MAX_LEN_REC) TCP_MAX=0; if(TCP_MAX=0) strcpy(TCP_RECTCP_MAX.szProtocol,szProtocol); strcpy(TCP_RECTCP_MAX.szSourceIP,szSourceIP); TCP_RECTCP_MAX.iSourcePort=iSourcePort; strcpy(TCP_RECTCP_MAX.szDestIP,szDestIP); +TCP_MAX; else if(check(TCP_REC,szDestIP,iSourcePort,TCP_MAX-1) /调用 check 函数 strcpy(TCP_RECTCP_MAX.szProtocol,szProtocol); strcpy(TCP_RECTCP_MAX.szSourceIP,szSourceIP); TCP_RECTCP_MAX.iSourcePort=iSourcePort; strcpy(TCP_RECTCP_MAX.szDestIP,szDestIP); +TCP_MAX; 在统计的时候这里需要调用一个 check 函数即检测函数,此函数的作用是 用于排除完全相同的数据包,由于在分析中不需要对完全相同的数据包进行分 析,以免出现重复情况产生误判,所以在统计时候这里需要先把完全相同的数 据包进行排除,以保证存入 TCP_REC中的数据包是完全没有任何是一个是相 同的。 bool check(STATISTIC TYPE,char szDestIP,int port,int count) /check 函数,比 较协议类型,目的 IP,端口,计数(count) int i=0; bool flag=true; for(i=count;i=0;i-) if(!strcmp(TYPEi.szDestIP,szDestIP) break; return flag; 对所捕获的数据包进行统计后,接着是对所捕获的 TCP 包以及 UDP 数据 包进行分析的分析函数,首先是一个用于存放不同 IP 的 rec,在这里我们用 到一个临时变量 temp,用于帮助对不同 IP 的提取,最后再根据所记录的不同 IP 到 TCP_REC中进行提取符合 IP 的数据包信息,再存入 tcp_tem中,在 tcp_tem中就是经过统计分析后的所捕获的探测性数据包。 void analysis_tcp(STATISTIC tcp)/对 IP,端口进行分析的函数,判定是否为端 口扫描行为 STATISTIC tcp_temMAX_LEN_REC,recMAX_LEN_REC,temp; int i=0;int count=0,reccount=0; strcpy(temp.szProtocol,tcp0.szProtocol); strcpy(temp.szSourceIP,tcp0.szSourceIP); temp.iSourcePort=tcp0.iSourcePort; strcpy(temp.szDestIP,tcp0.szDestIP); /临时变量记录第一条数据包的情况 strcpy(recreccount.szProtocol,tcp0.szProtocol); strcpy(recreccount.szSourceIP,tcp0.szSourceIP); recreccount.iSourcePort=tcp0.iSourcePort; strcpy(recreccount.szDestIP,tcp0.szDestIP); /将第一条记录保存到地址列表中 for(i=0;i=0;t-) /进入 for 循环,将 reccount 的值赋给 t,t 大于等于 0,t 的值减 1 if(!strcmp(temp.szDestIP,rect.szDestIP) flag=false; break; /反向搜索地址记录表如果有相同的则不记录 if(flag) +reccount; strcpy(recreccount.szProtocol,temp.szProtocol); strcpy(recreccount.szSourceIP,temp.szSourceIP); recreccount.iSourcePort,temp.iSourcePort; strcpy(recreccount.szDestIP,temp.szDestIP); /没有相同的则将该不同的地址记录到数组中 /if 条件判断 /如果相同则不记录 /for 循环 system(“cls“); printf(“nTCP_REC 中的数据是:n“); for(i=0;iTCP_MAX;i+) printf(“%s:%dn“,TCP_RECi.szDestIP,TCP_RECi.iSourcePort); for(i=0;i=reccount;i+) int j=0;count=0; memset(tcp_tem,0,100*sizeof(STATISTIC); for(j;jTCP_MAX;j+) 第 18 页 共 23 页 if(!strcmp(reci.szDestIP,tcpj.szDestIP) strcpy(tcp_temcount.szProtocol,tcpj.szProtocol); strcpy(tcp_temcount.szSourceIP,tcpj.szSourceIP); tcp_temcount.iSourcePort=tcpj.iSourcePort; strcpy(tcp_temcount.szDestIP,tcpj.szDestIP); +count; 在程序的最后,由于此设计是需要判断是否发生端口扫描行为,这里就需 要设定一个条件来定义端口扫描行为。 在此设计中,我们定义扫描行为是当有 3 个或 3 个以上的探测性数据包且 其源 IP 一致的数据包存在的时候就判断为端口扫描行为,当然在这里能够定义 更多或者更少的探测性数据包为发生端口扫描行为条件,只要检测程序在当记 录到有 3 个或 3 个以上的数据包且源 IP 一致的数据包对本机进行连接的时候能 显示出来所发出的探测性数据包并判断为存在端口扫描行为,并显示出扫描者 的 IP 信息以及对本机所扫描的端口。 此检测端口扫描程序设计对一般的以及快速扫描均能很好的扫描,在一定 程度上能很好的检测慢速扫描,虽然并没有设定时间阈值,不会存在当设定的 时间阈值大到一定程度时,需要从相当长时间的网络连接记录中找出扫描行为, 系统资源消耗较大,无法适应宽带网络尤其是高速网络环境;但是毕竟所分析的 数据包有个定量,扫描者总能以略大于系统设定数据包捕获定量的时间间隔进 行端口扫描,所以说针对慢速扫描只能在一定程度上实现。 6 6 性能测试性能测试 6.16.1端口扫描程序性能测试端口扫描程序性能测试 在端口扫描程序设计完成后,用开发出的端口扫描程序作了一个性能演示, 如下图 6 所示,扫描者通过扫描命令向 IP 为 192.168.1.102 的目标主机的 1- 10000 端口进行了发送探测性数据包扫描,并根据回应显示目标主机的端口开 放情况。 第 19 页 共 23 页 图 6 端口扫描效果显示图 如图 6 显示,IP 为 192.168.1.102 的目标主机在 1-10000 端口中,开放的 端口有 21,25,81,82,83,110,119,139,143。 6.26.2检测端口扫描程序性能测试检测端口扫描程序性能测试 再用所开发的检测端口扫描程序作了测试,针对攻击者的扫描行为,捕获 探测性数据包,并进行分析,当收到同一地址而且目的端口不同的数据包有3个 时,能准确判断出来自扫描者的端口扫描行为。 如下图7所示,当程序运行并有IP为192.168.1.7的扫描者向本机发起扫描 时候,能显示IP为192.168.1.7的扫描者发起了端口扫描行为,能作出判断并显 示出相应的信息。 图 7 检测端口扫描效果显示图 第 20 页 共 23 页 如图 7 显示当本机遭受到扫瞄者扫描时,程序能对扫描者发起的探测性的 数据包进行捕获,并记录下来,当有 3 个来自于同一 IP,且目的端口不同的时 候程序就判定为遭到了来自于所捕获数据包源 IP 主机的扫描。 这种情况是在只有一个扫描者的时候能正确显示出扫描者的信息以及扫描 者对本机哪些端口进行了扫描。 当程序运行并且有 IP 为 192.168.1.7 和 192.168.1.103 的两个扫描者向本 机发起扫描时候,能显示 IP 为 192.168.1.7 和 192.168.1.7 的扫描者对本机发 起了端口扫描行为,并能将探测性数据包显示出来且能作出判断并显示出相应 的信息,对用户作出报警,由此可见扫描者的个数并不会影响程序的正常检测, 如下图 8 所示: 图 8 多扫描者进行扫描时检测端口扫描效果显示图 如图 8 显示当本机遭受到有两个扫瞄者扫描时,程序能对扫描者发起的探 测性的数据包进行捕获,并记录下来,当有 3 个来自于同一 IP,且目的端口不 同的时候程序就判定为遭到了来自于所捕获数据包源 IP 主机的扫描。在这种情 况下有两个不同 IP 的扫描者对本机进行扫描,程序能分辨出不同的 IP 并显示 出来遭受到来自两个扫描者的扫描。 结结 论论 本文首先介绍了各种扫描技术,以及分析入侵者可以逃避检测的各种方法。 其后又介绍了现有的各种端口扫描检测工具,并对它们的原理和功能进行了分 析。 检测端口扫描是防止系统被攻击的一个重要手段,是 IDS 的主要内容。文中 第 21 页 共 23 页 分析了端口扫描基本原理,总结了现有检测工具存在的主要问题,对现有检测工具 原理进行了阐述。 本文所设计的端口扫描程序是基于 TCP 连接设计;端口检测是基于捕获数 据包进行统计分析,能较好的解决普通扫描,并在一定程度上能检测出慢速扫 描,尚未解决分布式扫描,本人水平有限和时间仓促,很多问题考虑不周全甚 至可能有错误。所以请老师多多指正。 参考文献参考文献 1 Andrew S.Tanenbaum美.计算机网络M.北京:清华大学出版社,1998。 2 Anonymous美.网络最高安全技术指南M.北京:机械工业出版社,1998。 3 David A.Solomon美.计算机网络管理M.北京:清华大学出版社,1999。 4 Douglas E.Comer美.TCP/IP 网络互连技术M.北京:清华大学出版社,1998。 5 David J.Kruglinski美.Visual C+ 技术内幕M.北京:清华大学出版社,1999。 6 Anonymous美.网络入侵检测系统分析与设计M.北京:机械工业出版社,1998。 7 W.Richard Stevens美.TCP/IP 详解M.北京:机械工业出版社,2000。 8 张仕斌.网络安全技术M.北京:清华大学出版社,2004。 第 22 页 共 23 页 致致 谢谢 本文是在赵攀老师和盛志伟老师的热情关心和指导下完成的,他们渊博的 知识和严谨的治学作风使我受益匪浅,对顺利完成本课题起到了极大的作用。 在此向他表示我最衷心的感谢! 在论文完成过程中,本人还得到了同事和同学的热心帮助,本人向他们表 示深深的谢意! 最后向在百忙之中评审本文的各位专家、老师表示衷心的感谢! 作者简介: 姓 名:谢欣 性别:男 出生年月:1983 年 11 月 18 日 民族:汉 E-mail: 第 23 页 共 23 页 声声 明明 本论文的工作是 2007 年 2 月至 2007 年 6 月在成都信息工程学院网络工程 系完成的。文中除了特别加以标注地方外,不包含他人已经发表或撰写过的研 究成果,也不包含为获得成都信息工程学院或其他教学机构的学位或证书而使 用过的材料。除非另有说明,本文的工作是原始性工作。 关于学位论文使用权和研究成果知识产权的说明: 本人完全了解成都信息工程学院有关保管使用学位论文的规定,其中包括: (1)学校有权保管并向有关部门递交学位论文的原件与复印件。 (2)学校可以采用影印、缩印或其他复制方式保存学位论文。 (3)学校可以学术交流为目的复制、赠送和交换学位论文。 (4)学校可允许学位论文被查阅或借阅。 (5)学校可以公布学位论文的全部或部分内容(保密学位论文在解密后 遵守此规定) 。 除非另有科研合同和其他法律文书的制约,本论文的科研成果属于成都信息 工程学院。 特此声明! 作者签名: 年 月 日 第 24 页 共 23 页 “Are you hungry now?“ “No, I am tired and lazy now; if I pursue you I will not catch you, and if I catch you-through y
展开阅读全文