smb协议常用的端口号是什么_smb端口扫描的流量特征

hacker|
191

第七章 流量监控与分析工具常用的网络流量监测方法有几种?分别是什么

所谓网络流量分析,是指通过一定的技术手段,实时监测用户网络七层结构中各层的流量分布,进行协议、流量的综合分析,从而有效的发现、预防网络流量和应用上的瓶颈,为网络性能的优化提供依据。通过流量分析帮助管理人员了解到网络中哪个用户正在大量的下载或者上传数据,判定出网络中是哪个用户在占用了大量的带宽,是由于哪个用户造成了网络的缓慢。通过流量分析管理,可以使网络管理人员掌握网络负载状况,及时发现网络结构的不合理,或是网络性能瓶颈,根据网内应用及不同业务使用情况,为用户提供高品质的网络服务,避免了网络带宽和服务器瓶颈问题。通过流量分析管理,可以使网络管理人员快速掌握网络流量的实时状况,网内应用及不同业务在不同的时间段的使用情况,快速展示某个时间段内的流量概况,帮助管理人员分析网络流量的忙闲时。目前市面上的网络流量分析软件很多,但是实现方式大致分为三类,通过这三种网络流量分析的采集技术,来实现网络流量的分析。2、端口镜像(Portmirroring),也叫做端口扫描或端口监控功能,是在很多管理型交换机中的一个功能,其被用在一个网络交换机上来发送所有分组的拷贝,在一个交换机端口查看来监控在另一个交换机端口的网络连接。也就是把所有的交换机端口的数据,都拷贝一份到这个端口上,所有的数据都进行采集。3、通过协议如netflow或者netstream等。根据需求和采集技术特点选择上述的三种技术,各有各的优点和缺点,其中的网络混杂模式,主要用于一个比较小的网络中,一般一个小的局域网内使用,比如网吧等,通过这种技术实现的软件比较多,如果sniffer等。缺点也很明显,就是对网络带宽的占用比较大。建议在非关键性的小网络中使用。另外一种通过端口镜像实现,特点是通过交换机来实现,缺点也比较明显,就是所有的端口的数据都要拷贝一份给监控端口,增加了交换机的负担,比较严重的影响交换机的性能。一般在公司网络的出口交换机上使用,比如监控公司中人员的互联网连接等。第三种通过思科的netflow协议或者华为的netstream协议,特点是占用网络带宽最小,切采集的数据最全,一般用在比较大的企业网络中,原理就是交换机本身将通过的数据计数,而不做数据的拷贝。这样,就大大降低了交换机的负担。市面上的软件也比较多,比较重要的厂商如摩卡软件等。下面以摩卡软件的NTA软件来举例说明网络流量分析的功能。摩卡软件网络流量分析的优势摩卡软件在行业内具有十年的IT运维管理经验,摩卡软件在全国超过23家的大客户现场积累了深厚的应用平台运维管理经验,其中对于网络流量监控的优势在于:支持协议种类多:从思科的netflow到华为的netstream,到IPFIX、sflow等都支持。适用的范围比较广:从宏观上监控整个网络中的流量,从二层到七层,所有的流量的情况。支持自定义的应用的监控:软件支持自定义的网络应用的监控。友好的用户界面:从用户的界面出发,更容易读懂和使用。

端口扫描的最新技术有些什么?

一:TCP/IP相关问题

连接端及标记

IP地址和端口被称作套接字,它代表一个TCP连接的一个连接端。为了获得TCP服务,必须在发送机的一个端口上和接收机的一个端口上建立连接。TCP连接用两个连接端来区别,也就是(连接端1,连接端2)。连接端互相发送数据包。

一个TCP数据包包括一个TCP头,后面是选项和数据。一个TCP头包含6个标志位。它们的意义分别为:

SYN: 标志位用来建立连接,让连接双方同步序列号。如果SYN=1而ACK=0,则表示该数据包为连接请求,如果SYN=1而ACK=1则表示接受连接。

FIN: 表示发送端已经没有数据要求传输了,希望释放连接。

RST: 用来复位一个连接。RST标志置位的数据包称为复位包。一般情况下,如果TCP收到的一个分段明显不是属于该主机上的任何一个连接,则向远端发送一个复位包。

URG: 为紧急数据标志。如果它为1,表示本数据包中包含紧急数据。此时紧急数据指针有效。

ACK: 为确认标志位。如果为1,表示包中的确认号时有效的。否则,包中的确认号无效。

PSH: 如果置位,接收端应尽快把数据传送给应用层。

TCP连接的建立

TCP是一个面向连接的可靠传输协议。面向连接表示两个应用端在利用TCP传送数据前必须先建立TCP连接。 TCP的可靠性通过校验和,定时器,数据序号和应答来提供。通过给每个发送的字节分配一个序号,接收端接收到数据后发送应答,TCP协议保证了数据的可靠传输。数据序号用来保证数据的顺序,剔除重复的数据。在一个TCP会话中,有两个数据流(每个连接端从另外一端接收数据,同时向对方发送数据),因此在建立连接时,必须要为每一个数据流分配ISN(初始序号)。为了了解实现过程,我们假设客户端C希望跟服务器端S建立连接,然后分析连接建立的过程(通常称作三阶段握手):

1: C --SYN XXà S

2: C ?-SYN YY/ACK XX+1------- S

3: C ----ACK YY+1--à S

1:C发送一个TCP包(SYN 请求)给S,其中标记SYN(同步序号)要打开。SYN请求指明了客户端希望连接的服务器端端口号和客户端的ISN(XX是一个例子)。

2:服务器端发回应答,包含自己的SYN信息ISN(YY)和对C的SYN应答,应答时返回下一个希望得到的字节序号(YY+1)。

3:C 对从S 来的SYN进行应答,数据发送开始。

一些实现细节

大部分TCP/IP实现遵循以下原则:

1:当一个SYN或者FIN数据包到达一个关闭的端口,TCP丢弃数据包同时发送一个RST数据包。

2:当一个RST数据包到达一个监听端口,RST被丢弃。

3:当一个RST数据包到达一个关闭的端口,RST被丢弃。

4:当一个包含ACK的数据包到达一个监听端口时,数据包被丢弃,同时发送一个RST数据包。

5:当一个SYN位关闭的数据包到达一个监听端口时,数据包被丢弃。

6:当一个SYN数据包到达一个监听端口时,正常的三阶段握手继续,回答一个SYN ACK数据包。

7:当一个FIN数据包到达一个监听端口时,数据包被丢弃。"FIN行为"(关闭得端口返回RST,监听端口丢弃包),在URG和PSH标志位置位时同样要发生。所有的URG,PSH和FIN,或者没有任何标记的TCP数据包都会引起"FIN行为"。

二:全TCP连接和SYN扫描器

全TCP连接

全TCP连接是长期以来TCP端口扫描的基础。扫描主机尝试(使用三次握手)与目的机指定端口建立建立正规的连接。连接由系统调用connect()开始。对于每一个监听端口,connect()会获得成功,否则返回-1,表示端口不可访问。由于通常情况下,这不需要什么特权,所以几乎所有的用户(包括多用户环境下)都可以通过connect来实现这个技术。

这种扫描方法很容易检测出来(在日志文件中会有大量密集的连接和错误记录)。Courtney,Gabriel和TCP Wrapper监测程序通常用来进行监测。另外,TCP Wrapper可以对连接请求进行控制,所以它可以用来阻止来自不明主机的全连接扫描。

TCP SYN扫描

在这种技术中,扫描主机向目标主机的选择端口发送SYN数据段。如果应答是RST,那么说明端口是关闭的,按照设定就探听其它端口;如果应答中包含SYN和ACK,说明目标端口处于监听状态。由于所有的扫描主机都需要知道这个信息,传送一个RST给目标机从而停止建立连接。由于在SYN扫描时,全连接尚未建立,所以这种技术通常被称为半打开扫描。SYN扫描的优点在于即使日志中对扫描有所记录,但是尝试进行连接的记录也要比全扫描少得多。缺点是在大部分操作系统下,发送主机需要构造适用于这种扫描的IP包,通常情况下,构造SYN数据包需要超级用户或者授权用户访问专门的系统调用。

三:秘密扫描与间接扫描

秘密扫描技术

由于这种技术不包含标准的TCP三次握手协议的任何部分,所以无法被记录下来,从而必SYN扫描隐蔽得多。另外,FIN数据包能够通过只监测SYN包的包过滤器。

秘密扫描技术使用FIN数据包来探听端口。当一个FIN数据包到达一个关闭的端口,数据包会被丢掉,并且回返回一个RST数据包。否则,当一个FIN数据包到达一个打开的端口,数据包只是简单的丢掉(不返回RST)。

Xmas和Null扫描是秘密扫描的两个变种。Xmas扫描打开FIN,URG和PUSH标记,而Null扫描关闭所有标记。这些组合的目的是为了通过所谓的FIN标记监测器的过滤。

秘密扫描通常适用于UNIX目标主机,除过少量的应当丢弃数据包却发送reset信号的操作系统(包括CISCO,BSDI,HP/UX,MVS和IRIX)。在Windows95/NT环境下,该方法无效,因为不论目标端口是否打开,操作系统都发送RST。

跟SYN扫描类似,秘密扫描也需要自己构造IP 包。

间接扫描

间接扫描的思想是利用第三方的IP(欺骗主机)来隐藏真正扫描者的IP。由于扫描主机会对欺骗主机发送回应信息,所以必须监控欺骗主机的IP行为,从而获得原始扫描的结果。间接扫描的工作过程如下:

假定参与扫描过程的主机为扫描机,隐藏机,目标机。扫描机和目标记的角色非常明显。隐藏机是一个非常特殊的角色,在扫描机扫描目的机的时候,它不能发送任何数据包(除了与扫描有关的包)。

四:认证扫描和代理扫描

认证扫描

到目前为止,我们分析的扫描器在设计时都只有一个目的:判断一个主机中哪个端口上有进程在监听。然而,最近的几个新扫描器增加了其它的功能,能够获取监听端口的进程的特征和行为。

认证扫描是一个非常有趣的例子。利用认证协议,这种扫描器能够获取运行在某个端口上进程的用户名(userid)。认证扫描尝试与一个TCP端口建立连接,如果连接成功,扫描器发送认证请求到目的主机的113TCP端口。认证扫描同时也被成为反向认证扫描,因为即使最初的RFC建议了一种帮助服务器认证客户端的协议,然而在实际的实现中也考虑了反向应用(即客户端认证服务器)。

代理扫描

文件传输协议(FTP)支持一个非常有意思的选项:代理ftp连接。这个选项最初的目的(RFC959)是允许一个客户端同时跟两个FTP服务器建立连接,然后在服务器之间直接传输数据。然而,在大部分实现中,实际上能够使得FTP服务器发送文件到Internet的任何地方。许多攻击正是利用了这个缺陷。最近的许多扫描器利用这个弱点实现ftp代理扫描。

ftp端口扫描主要使用ftp代理服务器来扫描tcp端口。扫描步骤如下:

1:假定S是扫描机,T是扫描目标,F是一个ftp服务器,这个服务器支持代理选项,能够跟S和T建立连接。

2:S与F建立一个ftp会话,使用PORT命令声明一个选择的端口(称之为p-T)作为代理传输所需要的被动端口。

3:然后S使用一个LIST命令尝试启动一个到p-T的数据传输。

4:如果端口p-T确实在监听,传输就会成功(返回码150和226被发送回给S)。否则S回收到"425无法打开数据连接"的应答。

5:S持续使用PORT和LIST命令,直到T上所有的选择端口扫描完毕。

FTP代理扫描不但难以跟踪,而且当ftp服务器在防火墙后面的时候

五:其它扫描方法

Ping扫描

如果需要扫描一个主机上甚至整个子网上的成千上万个端口,首先判断一个主机是否开机就非常重要了。这就是Ping扫描器的目的。主要由两种方法用来实现Ping扫描。

1:真实扫描:例如发送ICMP请求包给目标IP地址,有相应的表示主机开机。

2:TCP Ping:例如发送特殊的TCP包给通常都打开且没有过滤的端口(例如80端口)。对于没有root权限的扫描者,使用标准的connect来实现。否则,ACK数据包发送给每一个需要探测的主机IP。每一个返回的RST表明相应主机开机了。另外,一种类似于SYN扫描端口80(或者类似的)也被经常使用。

安全扫描器

安全扫描器是用来自动检查一个本地或者远程主机的安全漏洞的程序。象其它端口扫描器一样,它们查询端口并记录返回结果。但是它们。它们主要要解决以下问题:

1:是否允许匿名登录。

2:是否某种网络服务需要认证。

3:是否存在已知安全漏洞。

可能SATAN是最著名的安全扫描器。1995年四月SATAN最初发布的时候,人们都认为这就是它的最终版本,认为它不但能够发现相当多的已知漏洞,而且能够针对任何很难发现的漏洞提供信息。但是,从它发布以来,安全扫描器一直在不断地发展,其实现机制也越来越复杂。

栈指纹

绝大部分安全漏洞与缺陷都与操作系统相关,因此远程操作系统探测是系统管理员关心的一个问题。

远程操作系统探测不是一个新问题。近年来,TCP/IP实现提供了主机操作系统信息服务。FTP,TELNET,HTTP和DNS服务器就是很好的例子。然而,实际上提供的信息都是不完整的,甚至有可能是错误的。最初的扫描器,依靠检测不同操作系统对TCP/IP的不同实现来识别操作系统。由于差别的有限性,现在只能最多只能识别出10余种操作系统。

最近出现的两个扫描器,QueSO和NMAP,在指纹扫描中引入了新的技术。 QueSO第一个实现了使用分离的数据库于指纹。NMAP包含了很多的操作系统探测技术,定义了一个模板数据结构来描述指纹。由于新的指纹可以很容易地以模板的形式加入,NMAP指纹数据库是不断增长的,它能识别的操作系统也越来越多。

这种使用扫描器判断远程操作系统的技术称为(TCP/IP)栈指纹技术。

另外有一种技术称为活动探测。活动探测把TCP的实现看作一个黑盒子。通过研究TCP对探测的回应,就可以发现 TCP实现的特点。TCP/IP 栈指纹技术是活动探测的一个变种,它适用于整个TCP/IP协议的实现和操作系统。栈指纹使用好几种技术来探测TCP/IP协议栈和操作系统的细微区别。这些信息用来创建一个指纹,然后跟已知的指纹进行比较,就可以判断出当前被扫描的操作系统。

栈指纹扫描包含了相当多的技术。下面是一个不太完整的清单:

1:FIN探测

2:BOGUS标记探测

3:TCP ISN 取样

4:TCP 初始窗口

5:ACK值

6:ICMP错误信息

7:ICMP信息

8:服务类型

9:TCP选项

基于网络的入侵检测数据集研究

摘要:标记数据集是训练和评估基于异常的网络入侵检测系统所必需的。本文对基于网络的入侵检测数据集进行了重点的文献综述,并对基于包和流的底层网络数据进行了详细的描述。本文确定了15种不同的属性来评估单个数据集对特定评估场景的适用性。这些属性涵盖了广泛的标准,并被分为五类,例如用于提供结构化搜索的数据量或记录环境。在此基础上,对现有数据集进行了全面的综述。本综述还强调了每个数据集的特性。此外,本工作还简要介绍了基于网络的数据的其他来源,如流量生成器和数据存储库。最后,我们讨论了我们的观察结果,并为使用和创建基于网络的数据集提供了一些建议。

一、引言

信息技术安全是一个重要的问题,入侵和内部威胁检测的研究已经投入了大量的精力。在处理与安全相关的数据[1]-[4]、检测僵尸网络[5]-[8]、端口扫描[9]-[12]、蛮力攻击[13]-[16]等方面已经发表了许多贡献。所有这些工作的共同点是,它们都需要具有代表性的基于网络的数据集。此外,基准数据集是评价和比较不同网络入侵检测系统(NIDS)质量的良好基础。给定一个带标签的数据集,其中每个数据点都被分配给类normal或attack,可以使用检测到的攻击数量或虚警数量作为评估标准。

不幸的是,没有太多具有代表性的数据集。Sommer和Paxson[17](2010)认为,缺乏具有代表性的公共可用数据集是基于异常的入侵检测面临的最大挑战之一。Malowidzki等人(2015)和Haider等人(2017)也发表了类似的声明。然而,社区正在解决这个问题,因为在过去几年中已经发布了几个入侵检测数据集。其中,澳大利亚网络安全中心发布了UNSW-NB15[20]数据集,科堡大学发布了CIDDS-001[21]数据集,新布伦瑞克大学发布了CICIDS 2017[22]数据集。未来还会有更多数据集发布。然而,现有数据集没有全面的索引,很难跟踪最新的发展。

本文对现有的基于网络的入侵检测数据集进行了文献综述。首先,对底层数据进行更详细的研究。基于网络的数据以基于包或基于流的格式出现。基于流的数据只包含关于网络连接的元信息,而基于包的数据也包含有效负载。然后,对文献中常用的评价网络数据集质量的不同数据集属性进行了分析和分组。本调查的主要贡献是对基于网络的数据集进行了详尽的文献综述,并分析了哪些数据集满足哪些数据集属性。本文重点研究了数据集内的攻击场景,并强调了数据集之间的关系。此外,除了典型的数据集之外,我们还简要介绍了流量生成器和数据存储库作为网络流量的进一步来源,并提供了一些观察和建议。作为主要的好处,本调查建立了一组数据集属性,作为比较可用数据集和确定合适数据集的基础,给出了特定的评估场景。此外,我们创建了一个网站1,其中引用了所有提到的数据集和数据存储库,我们打算更新这个网站。

本文的其余部分组织如下。下一节将讨论相关工作。第三部分详细分析了基于包和流的网络数据。第四部分讨论了文献中常用来评价入侵检测数据集质量的典型数据集属性。第五节概述了现有的数据集,并根据第四节确定的属性检查每个数据集。第六节简要介绍了基于网络的数据的进一步来源。在本文件以摘要结束之前,第七节讨论了意见和建议。

二、相关工作

本节回顾基于网络的入侵检测数据集的相关工作。需要注意的是,本文没有考虑基于主机的入侵检测数据集,比如ADFA[23]。读者可以在Glass-Vanderlan等人的[24]中找到关于基于主机的入侵检测数据的详细信息。

Malowidzki等人[18]将缺失的数据集作为入侵检测的一个重要问题进行了讨论,对好的数据集提出了要求,并列出了可用的数据集。Koch等人的[25]提供了入侵检测数据集的另一个概述,分析了13个数据源,并根据8个数据集属性对它们进行了评估。Nehinbe[26]为IDS和入侵防御系统(IPS)提供了关键的数据集评估。作者研究了来自不同来源的七个数据集(如DARPA数据集和DEFCON数据集),强调了它们的局限性,并提出了创建更真实数据集的方法。由于在过去的四年中发布了许多数据集,我们延续了2011年到2015年[18],[25],[26]的工作,但提供了比我们的前辈更最新和更详细的概述。

虽然许多数据集论文(如CIDDS-002[27]、ISCX[28]或UGR ' 16[29])只对一些入侵检测数据集做了一个简要的概述,但Sharafaldin等人对[30]提供了更详尽的综述。他们的主要贡献是一个生成入侵检测数据集的新框架。Sharafaldin等人还分析了11个可用的入侵检测数据集,并根据11个数据集属性对其进行了评估。与早期的数据集论文相比,我们的工作重点是对现有的基于网络的数据集提供一个中立的概述,而不是提供一个额外的数据集。

最近的其他论文也涉及到基于网络的数据集,但主要关注的焦点有所不同。Bhuyan等人对网络异常检测进行了全面的综述。作者描述了现有的9个数据集,并分析了现有异常检测方法所使用的数据集。类似地,Nisioti等人的[32]关注于用于入侵检测的无监督方法,并简要参考了现有的12个基于网络的数据集。Yavanoglu和Aydos[33]分析比较了最常用的入侵检测数据集。然而,他们的审查只包含七个数据集,包括其他数据集,如HTTP CSIC 2010[34]。总而言之,这些作品往往有不同的研究目标,而且只是接触对于基于网络的数据集,则略有不同。

三、数据

通常,网络流量以基于包或基于流的格式捕获。在包级捕获网络流量通常是通过镜像网络设备上的端口来完成的。基于包的数据包含完整的有效载荷信息。基于流的数据更加聚合,通常只包含来自网络连接的元数据。Wheelus等人通过一个说明性的比较强调了这一区别:“捕获包检查和NetFlow之间的一个很好的区别示例是徒步穿越森林,而不是乘坐热气球飞越森林”[35]。在这项工作中,引入了第三类(其他数据)。另一个类别没有标准格式,并且因每个数据集而异。

A基于分组的数据

基于包的数据通常以pcap格式捕获,并包含有效负载。可用的元数据取决于使用的网络和传输协议。有许多不同的协议,其中最重要的是TCP、UDP、ICMP和IP。图1显示出了不同的报头。TCP是一种可靠的传输协议,它包含诸如序列号、确认号、TCP标志或校验和值之类的元数据。UDP是一种无连接的传输协议,它的头比TCP小,TCP只包含四个字段,即源端口、目标端口、长度和校验和。与TCP和UDP相比,ICMP是一个包含状态消息的支持协议,因此更小。通常,在报头旁边还有一个可用的IP报头传输协议的。IP报头提供源和目标IP地址等信息,如图1所示。

b .流为基础数据

基于流的网络数据是一种更简洁的格式,主要包含关于网络连接的元信息。基于流的数据将所有在时间窗口内共享某些属性的包聚合到一个流中,通常不包含任何有效负载。默认的五元组定义,即,源IP地址、源端口、目标IP地址、目标端口和传输协议[37],是一种广泛使用的基于流的数据属性匹配标准。流可以以单向或双向格式出现。单向格式将主机A到主机B之间共享上述属性的所有包聚合到一个流中。从主机B到主机A的所有数据包聚合为另一个单向流。相反,一个双向流总结了主机a和主机B之间的所有数据包,不管它们的方向如何。

典型的基于流的格式有NetFlow[38]、IPFIX[37]、sFlow[39]和OpenFlow[40]。表I概述了基于流的网络流量中的典型属性。根据特定的流格式和流导出器,可以提取额外的属性,如每秒字节数、每个包的字节数、第一个包的TCP标志,甚至有效负载的计算熵。

此外,可以使用nfdump2或YAF3之类的工具将基于包的数据转换为基于流的数据(但不是相反)。读者如果对流导出器之间的差异感兴趣,可以在[41]中找到更多细节,并分析不同的流导出器如何影响僵尸网络分类。

c .其他数据

这个类别包括所有既不是纯基于包也不是基于流的数据集。这类的一个例子可能是基于流的数据集,这些数据集已经用来自基于包的数据或基于主机的日志文件的附加信息进行了丰富。KDD CUP 1999[42]数据集就是这一类别的一个著名代表。每个数据点都有基于网络的属性,比如传输的源字节数或TCP标志的数量,但是也有基于主机的属性,比如失败登录的数量。因此,这个类别的每个数据集都有自己的一组属性。由于每个数据集都必须单独分析,所以我们不对可用属性做任何一般性的说明。

四、数据集属性

为了能够比较不同的入侵检测数据集,并帮助研究人员为其特定的评估场景找到合适的数据集,有必要将公共属性定义为评估基础。因此,我们研究了文献中用于评估入侵检测数据集的典型数据集属性。一般概念FAIR[43]定义了学术数据应该遵循的四个原则实现,即可查找性、可访问性、互操作性和可重用性。在与这个一般概念相一致的同时,本工作使用更详细的数据集属性来提供基于网络的入侵检测数据集的重点比较。通常,不同的数据集强调不同的数据集属性。例如,UGR ' 16数据集[29]强调较长的记录时间来捕捉周期效应,而ISCX数据集[28]强调精确的标记。由于我们的目标是研究基于网络的入侵检测数据集的更一般的属性,所以我们试图统一和概括文献中使用的属性,而不是采用所有的属性。例如,一些方法评估特定类型攻击的存在,比如DoS(拒绝服务)或浏览器注入。某些攻击类型的存在可能是评估这些特定攻击类型的检测方法的相关属性,但是对于其他方法没有意义。因此,我们使用一般的属性攻击来描述恶意网络流量的存在(见表三)。第五节提供了关于数据集中不同攻击类型的更多细节,并讨论了其他特定的属性。

我们不像Haider et al.[19]或Sharafaldin et al.[30]那样开发评估评分,因为我们不想判断不同数据集属性的重要性。我们认为,某些属性的重要性取决于具体的评估场景,不应该在调查中普遍判断。相反,应该让读者能够找到适合他们需要的数据集。因此,我们将下面讨论的数据集属性分为五类,以支持系统搜索。图2总结了所有数据集属性及其值范围。

A.一般资料

以下四个属性反映了关于数据集的一般信息,即创建年份、可用性、正常网络流量和恶意网络流量的存在。

1)创建年份:由于网络流量受概念漂移影响,每天都会出现新的攻击场景,因此入侵检测数据集的年龄起着重要作用。此属性描述创建年份。与数据集发布的年份相比,捕获数据集的底层网络流量的年份与数据集的最新程度更相关。

2)公共可用性:入侵检测数据集应公开可用,作为比较不同入侵检测方法的依据。此外,数据集的质量只能由第三方检查,如果它们是公开可用的。表III包含此属性的三个不同特征:yes, o.r. (on request)和no。On request是指在向作者或负责人发送消息后授予访问权限。

3)正常用户行为:此属性指示数据集中正常用户行为的可用性,并接受yes或no值。值yes表示数据集中存在正常的用户行为,但它不声明是否存在攻击。一般来说,入侵检测系统的质量主要取决于其攻击检测率和误报率。此外,正常用户行为的存在对于评估IDS是必不可少的。然而,缺少正常的用户行为并不会使数据集不可用,而是表明它必须与其他数据集或真实世界的网络流量合并。这样的合并步骤通常称为覆盖或盐化[44]、[45]。

4)攻击流量:IDS数据集应包含各种攻击场景。此属性指示数据集中是否存在恶意网络通信,如果数据集中至少包含一次攻击,则该属性的值为yes。表四提供了关于特定攻击类型的附加信息。

B.数据的性质

此类别的属性描述数据集的格式和元信息的存在。

1)元数据:第三方很难对基于包和基于流的网络流量进行内容相关的解释。因此,数据集应该与元数据一起提供关于网络结构、IP地址、攻击场景等的附加信息。此属性指示附加元数据的存在。

2)格式:网络入侵检测数据集以不同的格式出现。我们大致将它们分为三种格式(参见第三节)。(1)基于分组的网络流量(例如pcap)包含带负载的网络流量。(2)基于流的网络流量(如NetFlow)只包含关于网络连接的元信息。(3)其他类型的数据集可能包含基于流的跟踪,带有来自基于包的数据甚至来自基于主机的日志文件的附加属性。

3)匿名性:由于隐私原因,入侵检测数据集往往不会公开,或者只能以匿名的形式提供。此属性指示数据是否匿名以及哪些属性受到影响。表III中的none值表示没有执行匿名化。值yes (IPs)表示IP地址要么被匿名化,要么从数据集中删除。同样,值yes (payload)表示有效负载信息被匿名化,要么从基于分组的网络流量中删除。

C.数据量

此类别中的属性根据容量和持续时间描述数据集。

1) Count:属性Count将数据集的大小描述为包含的包/流/点的数量或物理大小(GB)。

2)持续时间:数据集应涵盖较长时间内的网络流量,以捕捉周期性影响(如白天与夜晚或工作日与周末)[29]。属性持续时间提供每个数据集的记录时间。

D.记录环境

此类别中的属性描述捕获数据集的网络环境和条件。

1)流量类型:描述网络流量的三种可能来源:真实的、模拟的或合成的。Real是指在有效的网络环境中捕获真实的网络流量。仿真的意思是在测试床或仿真网络环境中捕获真实的网络流量。综合意味着网络流量是综合创建的(例如,通过一个流量生成器),而不是由一个真实的(或虚拟的)网络设备捕获的。

2)网络类型:中小企业的网络环境与互联网服务提供商(ISP)有着本质的区别。因此,不同的环境需要不同的安全系统,评估数据集应该适应特定的环境。此属性描述创建相应数据集的基础网络环境。

3)完整网络:该属性采用Sharafaldin等人的[30],表示数据集是否包含来自具有多个主机、路由器等网络环境的完整网络流量。如果数据集只包含来自单个主机(例如蜜罐)的网络流量,或者只包含来自网络流量的一些协议(例如独占SSH流量),则将值设置为no。

E.评价

以下特性与使用基于网络的数据集评估入侵检测方法有关。更精确地说,这些属性表示预定义子集的可用性、数据集的平衡和标签的存在。

1)预定义的分割:有时,即使在相同的数据集上对不同的IDS进行评估,也很难对它们的质量进行比较。在这种情况下,必须明确是否使用相同的子集进行训练和评估。如果数据集附带用于训练和评估的预定义子集,则此属性提供信息。

2)均衡:基于异常的入侵检测通常采用机器学习和数据挖掘方法。在这些方法的训练阶段(例如,决策树分类器),数据集应该与其类标签相平衡。因此,数据集应该包含来自每个类(normal和attack)的相同数量的数据点。然而,真实世界的网络流量是不平衡的,它包含了比攻击流量更多的正常用户行为。此属性指示数据集是否与其类标签相平衡。在使用数据挖掘算法之前,应该通过适当的预处理来平衡不平衡的数据集。他和Garcia[46]提供了从不平衡数据中学习的良好概述。

3)带标签:带标签的数据集是训练监督方法、评估监督和非监督入侵检测方法所必需的。此属性表示是否标记了数据集。如果至少有两个类normal和attack,则将此属性设置为yes。此属性中可能的值为:yes, yes with BG。(yes with background)、yes (IDS)、indirect和no。是的,有背景意味着有第三类背景。属于类背景的包、流或数据点可以是正常的,也可以是攻击。Yes (IDS)是指使用某种入侵检测系统来创建数据集的标签。数据集的一些标签可能是错误的,因为IDS可能不完美。间接意味着数据集没有显式标签,但是可以通过其他日志文件自己创建标签。

五、数据集

我们认为,在搜索足够的基于网络的数据集时,标记的数据集属性和格式是最决定性的属性。入侵检测方法(监督的或非监督的)决定是否需要标签以及需要哪种类型的数据(包、流或其他)。因此,表II提供了关于这两个属性的所有研究的基于网络的数据集的分类。表三给出了关于第四节数据集属性的基于网络的入侵检测数据集的更详细概述。在搜索基于网络的数据集时,特定攻击场景的存在是一个重要方面。因此,表III显示了攻击流量的存在,而表IV提供了数据集中特定攻击的详细信息。关于数据集的论文描述了不同抽象级别的攻击。例如,Vasudevan等人在他们的数据集中(SSENET- 2011)将攻击流量描述为:“Nmap、Nessus、Angry IP scanner、Port scanner、Metaploit、Backtrack OS、LOIC等是参与者用来发起攻击的一些攻击工具。”相比之下,Ring等人在他们的CIDDS-002数据集[27]中指定了执行端口扫描的数量和不同类型。因此,攻击描述的抽象级别可能在表四中有所不同。对所有攻击类型的详细描述超出了本文的范围。相反,我们推荐感兴趣的读者阅读Anwar等人的开放存取论文“从入侵检测到入侵响应系统:基础、需求和未来方向”。此外,一些数据集是其他数据集的修改或组合。图3显示了几个已知数据集之间的相互关系。

基于网络的数据集,按字母顺序排列

AWID [49]。AWID是一个公共可用的数据集4,主要针对802.11网络。它的创建者使用了一个小型网络环境(11个客户机),并以基于包的格式捕获了WLAN流量。在一个小时内,捕获了3700万个数据包。从每个数据包中提取156个属性。恶意网络流量是通过对802.11网络执行16次特定攻击而产生的。AWID被标记为一个训练子集和一个测试子集。

Booters[50]。Booters是罪犯提供的分布式拒绝服务(DDoS)攻击。Santanna et. al[50]发布了一个数据集,其中包括九种不同的启动程序攻击的跟踪,这些攻击针对网络环境中的一个空路由IP地址执行。结果数据集以基于分组的格式记录,包含超过250GB的网络流量。单独的包没有标记,但是不同的Booters攻击被分成不同的文件。数据集是公开可用的,但是出于隐私原因,booters的名称是匿名的。

僵尸网络[5]。僵尸网络数据集是现有数据集的组合,可以公开使用。僵尸网络的创建者使用了[44]的叠加方法来组合ISOT[57]、ISCX 2012[28]和CTU-13[3]数据集的(部分)。结果数据集包含各种僵尸网络和正常用户行为。僵尸网络数据集被划分为5.3 GB训练子集和8.5 GB测试子集,都是基于包的格式。

CIC DoS[51]。CIC DoS是加拿大网络安全研究所的一组数据,可以公开使用。作者的意图是创建一个带有应用层DoS攻击的入侵检测数据集。因此,作者在应用层上执行了8种不同的DoS攻击。将生成的跟踪结果与ISCX 2012[28]数据集的无攻击流量相结合生成正常的用户行为。生成的数据集是基于分组的格式,包含24小时的网络流量。

CICIDS 2017 [22]。CICIDS 2017是在模拟环境中历时5天创建的,包含基于分组和双向流格式的网络流量。对于每个流,作者提取了80多个属性,并提供了关于IP地址和攻击的附加元数据。正常的用户行为是通过脚本执行的。数据集包含了多种攻击类型,比如SSH蛮力、heartbleed、僵尸网络、DoS、DDoS、web和渗透攻击。CICIDS 2017是公开可用的。

cidds - 001 [21]。CIDDS-001数据集是在2017年模拟的小型商业环境中捕获的,包含为期四周的基于单向流的网络流量,并附带详细的技术报告和附加信息。该数据集的特点是包含了一个在互联网上受到攻击的外部服务器。与蜜罐不同,来自模拟环境的客户机也经常使用此服务器。正常和恶意的用户行为是通过在GitHub9上公开可用的python脚本执行的。这些脚本允许不断生成新的数据集,并可用于其他研究。CIDDS-001数据集是公开可用的,包含SSH蛮力、DoS和端口扫描攻击,以及从野外捕获的一些攻击。

cidds - 002 [27]。CIDDS-002是基于CIDDS-001脚本创建的端口扫描数据集。该数据集包含两个星期的基于单向流的网络流量,位于模拟的小型业务环境中。CIDDS-002包含正常的用户行为以及广泛的不同端口扫描攻击。技术报告提供了关于外部IP地址匿名化的数据集的附加元信息。数据集是公开可用的。

什么是端口探查

就是扫描一下端口。

端口扫描的原理就是通过往某一个IP发送制定的网络信息

设置的端口数目

比如 1-8000端口 发送数据

返回正常代表端口存在。

在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。二是逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。我们这里将要介绍的就是逻辑意义上的端口。

端口扫描原理

"端口扫描"通常指用同一信息对目标计算机的所有所需扫描的端口进行发送,然后根据返回端口状态来分析目标计算机的端口是否打开、是否可用。"端口扫描"行为的­一个重要特征是:在短时期内有很多来自相同的信源地址传向不同的目的地端口的包。

对于用端口扫描进行攻击的人来说,攻击者总是可以做到在获得扫描结果的同时,使自己很难被发现或者说很难被逆向跟踪。为了隐藏攻击,攻击者可以慢慢地进行扫描。­除非目标系统通常闲着(这样对一个没有listen端口的数据包都会引起管理员的注意),有很大时间间隔的端口扫描是很难被识别的。隐藏源地址的方法是发送大量­的欺骗性的端口扫描包(1000个),其中只有一个是从真正的源地址来的。这样,即使全部包(1000)都被察觉,被记录下来,也没有人知道哪个是真正的信源地­址。能发现的仅仅是"曾经被扫描过"。也正因为这样那些黑客们才乐此不彼地继续大量使用这种端口扫描技术来达到他们获取目标计算机信息、并进行恶意攻击。

通常进行端口扫描的工具目前主要采用的是端口扫描软件,也通称之为"端口扫描器",端口扫描可以为提供三个用途:

(1)识别目标系统上正在运行的TCP协议和UDP协议服务。

(2)识别目标系统的操作系统类型(Windows 9x, Windows

NT,或UNIX,等)。

(3)识别某个应用程序或某个特定服务的版本号。

端口扫描器是一种自动检测远程或本地计算机安全性弱点的程序,通过使用扫描器你可不留痕迹的发现远程服务器的各种TCP协议端口的分配及提供的服务,还可以得知­它们所使用的软件版本!这就能让间接的了解到远程计算机所存在的安全问题。

端口扫描器通过选用远程TCP/IP协议不同的端口的服务,记录目标计算机端口给予的回答的方法,可以搜集到很多关于目标计算机的各种有用信息(比如:是否有端­口在侦听?是否允许匿名登陆?是否有可写的FTP目录,是否能用TELNET等。

端口扫描器并不是一个直接攻击网络漏洞的程序,它仅仅能帮助发现目标机的某些内在的弱点。一个好的扫描器还能对它得到的数据进行分析,帮助查找目标计算机的漏洞­。但它不会提供一个系统的详细步骤。

端口扫描器在扫描过程中主要具有以下三个方面的能力:

(1) 发现一个计算机或网络的能力;

(2)

一旦发现一台计算机,就有发现目标计算机正在运行什么服务的能力;

(3)

通过测试目标计算机上的这些服务,发现存在的漏洞的能力。

编写扫描器程序必须要很多TCP/IP协议程序编写和C,Perl和或SHELL语言的知识。需要一些Socket编程的背景,一种在开发客户/服务应 端口服务。)。

渗透测试之操作系统识别

利用TTL起始值判断操作系统,不同类型的操作系统都有默认的TTL值(简陋扫描,仅作参考)

TTL起始值:Windows xp(及在此版本之前的windows)  128 (广域网中TTL为65-128)

    Linux/Unix64(广域网中TTL为1-64)

    某些Unix:255

    网关:255

使用python脚本进行TTL其实质判断

使用nmap识别操作系统:nmap -O 192.168.45.129 #参数-O表示扫描操作系统信息,nmap基于签名,指纹,特征,CPE编号等方法去判断目标系统的信息

CPE:国际标准化组织,制定了一套标准,将各种设备,操作系统等进行CPE编号,通过编号可以查询到目标系统

使用xprobe2进行操作系统识别,专门用来识别目标操作系统:xprobe2 192.168.45.129,但结果并不是很精确

被动操作系统识别:不主动向目标主机发数据包,基于网络监听原理

通过抓包分析,被动扫描,使用kali中的p0f工具进行网络监听

p0f:p0f是一种被动指纹识别工具,可以识别您连接的机器,连接到您的盒子的机器,甚至连接在盒子附近的机器,即使该设备位于数据包防火墙后面。

p0f的使用:只要接收到数据包就可以根据数据包判断其信息,首先输入p0f,然后在浏览器里面输入目标系统的网址,便会获得目标系统的信息

或者使用p0f结合ARP地址欺骗识别全网OS

snmp扫描:简单网络管理协议,明文传输,使用网络嗅探也可获取到信息

SNMP是英文"Simple Network Management Protocol"的缩写,中文意思是"简单网络管理协议"。SNMP是一种简单网络管理协议,它属于TCP/IP五层协议中的应用层协议,用于网络管理的协议。SNMP主要用于网络设备的管理。由于SNMP协议简单可靠 ,受到了众多厂商的欢迎,成为了目前最为广泛的网管协议。

snmp的基本思想是为不同种类、不同厂家、不同型号的设备定义一个统一的接口和协议,使管理员可以通过统一的外观面对这些需要管理的网管设备进行管理,提高网管管理的效率,简化网络管理员的工作。snmp设计在TCP/IP协议族上,基于TCP/IP协议工作,对网络中支持snmp协议的设备进行管理。

在具体实现上,SNMP为管理员提供了一个网管平台(NMS),又称为管理站,负责网管命令的发出、数据存储、及数据分析。被监管的设备上运行一个SNMP代理(Agent)),代理实现设备与管理站的SNMP通信。如下图

管理站与代理端通过MIB进行接口统一,MIB定义了设备中的被管理对象。管理站和代理都实现了相应的MIB对象,使得双方可以识别对方的数据,实现通信。管理站向代理申请MIB中定义的数据,代理识别后,将管理设备提供的相关状态或参数等数据转换为MIB定义的格式,应答给管理站,完成一次管理操作。

已有的设备,只要新加一个SNMP模块就可以实现网络支持。旧的带扩展槽的设备,只要插入SNMP模块插卡即可支持网络管理。网络上的许多设备,路由器、交换机等,都可以通过添加一个SNMP网管模块而增加网管功能。服务器可以通过运行一个网管进程实现。其他服务级的产品也可以通过网管模块实现网络管理,如Oracle、WebLogic都有SNMP进程,运行后就可以通过管理站对这些系统级服务进行管理。

使用UDP161端口(服务端),162端口(客户端),可以监控网络交换机,防火墙,服务器等设备

可以查看到很多的信息,但经常会被错误配置,snmp里面

有一些默认的Community,分别是Public/private/manager

如果目标的community是public,那么就可以发送SNMP的查询指令,对IP地址进行查询

在kali中存在对snmp扫描的工具,为onesixtyone

在Windows XP系统安装SNMP协议:

1,在运行框输入appwiz.cpl

2,找到管理和监控工具,双击

3,两个都勾选,然后点OK

使用onesixtyone对目标系统进行查询:命令为:onesixtyone 192.168.45.132  public

  onesixtyone -c  字典文件  -I  主机  -o 倒入到的文件 -w 100

onesixtyone默认的字典在:/usr/share/doc/onesixtyone/dict.txt

使用snmpwalk查找目标系统的SNMP信息:snmpwalk 192.168.45.129 -c public -b 2c

snmpcheck -t  192.168.45.129

snmpcheck -t  192.168.45.129 -w  参数-w检测是不是有可写权限

SMB协议扫描:server message block,微软历史上出现安全问题最多的协议,在Windows系统上默认开发,实现文件共享

在Windows系统下管理员的Sid=500,

SMB扫描:nmap -v -p 139,445 192.168.45.132 --open 参数-v表示显示详细信息,参数--open表示显示打开的端口

nmap 192.168.45.132 -p 139,445 --script=smb-os-discovery.nse

smb-os-discovery.nse:这个脚本会基于SMB协议去判别操作系统,主机名,域名,工作组和当前的时间

nmap -v -P 139,445 --script=smb-check-vulns  --script-args=unsafe=1 192.168.45.132

脚本smb-check-vulns:检查已知的SMB重大的漏洞

后面给脚本定义参数 --script-args=unsafe=1,unsafe可能会对系统有伤害,导致宕机,但要比safe准确

nbtscan -r 192.168.45.0/24参数-r使用本地137端口进行扫描,兼容性较好,可以扫描一些老版本的Windows

nbtscan可以扫描同一局域网不同的网段,对于局域网扫描大有裨益

enum4linux -a 192.168.45.132 :

SMTP扫描:目的在于发现目标系统的邮件账号

使用nc -nv 192.168.45.132 25

VRFY root :确定是不是有root用户

nmap扫描SMTP服务:

nmap smtp.163.com -p25 --script=smtp-enum-users.nse --script-args=smtp-enum-

users.methods={VRFY}

脚本smtp-enum-users.nse用于发现远程系统上所有user的账户

nmap smtp.163.com -p25 --script=smtp-open-relay.nse,如果邮件服务器打开了open-relay功能,那么黑客可以拿管理员的邮箱去发送钓鱼邮件

防火墙识别:通过检查回包,可能识别端口是否经过防火墙过滤

设备多种多样,结果存在一定的误差

第一种情况:攻击机向防火墙发送SYN数据包,防火墙没有给攻击机回复,攻击机再发送ACK数据包,若防火墙返回RST数据包,那么证明该端口被防火墙过滤

第二种类似

第三种:攻击机向防火墙发送SYN数据包,防火墙返回SYN+ACK或者SYN+RST数据包,攻击者再发送ACK数据包,若防火墙返回RST数据包,那么就可以证明防火墙对于该端口没被过滤.unfiltered=open

第四种情况类似,证明该端口是关闭的,或者防火墙不允许其他用户访问该端口

使用python脚本去判定:

使用nmap去进行防火墙识别:nmap有系列防火墙过滤检测功能

nmap -sA 192.168.45.129 -p 22 参数-sA表示向目标主机发送ACK数据包,参数-sS表示向目标发送SYN数据包,通过抓包分析收到的数据包判断是否有防火墙检测功能

负载均衡识别:负载均衡可以跟为广域网负载均衡和服务器负载均衡

在kali中使用lbd命令用于识别负载均衡机制

格式:lbd +域名/IP地址,如lbd

WAF识别:WEB应用防火墙,在kali中最常用的waf检测扫描器

输入:wafw00f -l:可以检测出这个工具可以检测到的waf类别

探测微软公司的WAF:wafw00f 

使用nmap中的脚本去扫描目标网站使用的waf信息:nmap    --script=http-waf-detect.nse

脚本详情:

nmap补充:

参数:-iL:把IP地址做成文件,使用该参数扫描这个文件里面的IP! nmap -iL ip.txt

-iR:随机选取目标进行扫描,后面跟需要扫描的主机个数,例:nmap -iR  20  -p 22:随机扫描20个主机的22号端口,默认发送SYN数据包

参数-sn表示不做端口扫描

参数-Pn表示跳过主机发现,扫描所有在线的主机,扫防火墙帮助很大

参数p0表示进行IP协议ping

参数-n/-R表示不进行DNS解析

参数--dns-servers表示指定一个DNS服务器去解析

参数--traceroute表示进行路由追踪

参数-sM表示发送ACK+FIN

参数-sF发送FIN数据包

参数-sV根据特征库匹配开放的服务,加上参数--version-intensity 后面加等级,0最小,9最完善

参数--script=脚本名

参数--script=arge.脚本.脚本名

参数--script-updatedb更新脚本

参数--script-help=脚本名  查看脚本的信息

参数-O检测操作系统类型

参数--scan-delay 表示每次探测间隔多长时间,后面个时间,如nmap 192.168.45.132 --scan-delay 10s :间隔十秒

参数-f表示设置MTU最大传输单元

参数-D表示伪造源地址,增加一些虚假的扫描IP,例:nmap  -D 192.138.1.1,192.151.141.4  172.16.45.1  :扫描172.16.45.1主机,用这两个地址做干扰,防止被发现

参数-S表示伪造源地址,但要获取得到的IP地址,那么就得登陆到伪造的IP上

参数--proxies指定代理服务器

参数--spoof-mac欺骗mac地址 nmap 10.1.1.1  --spoof-mac=00:11:22:33:44:55

参数-6表示扫描IPv6

Kali Linux 网络扫描秘籍 第三章 端口扫描(二)

执行 TCP 端口扫描的一种方式就是执行一部分。目标端口上的 TCP 三次握手用于识别端口是否接受连接。这一类型的扫描指代隐秘扫描, SYN 扫描,或者半开放扫描。这个秘籍演示了如何使用 Scapy 执行 TCP 隐秘扫描。

为了使用 Scapy 执行 TCP 隐秘 扫描,你需要一个运行 TCP 网络服务的远程服务器。这个例子中我们使用 Metasploitable2 实例来执行任务。配置 Metasploitable2 的更多信息请参考第一章中的“安装 Metasploitable2”秘籍。

此外,这一节也需要编写脚本的更多信息,请参考第一章中的“使用文本编辑器*VIM 和 Nano)。

为了展示如何执行 SYN 扫描,我们需要使用 Scapy 构造 TCP SYN 请求,并识别和开放端口、关闭端口以及无响应系统有关的响应。为了向给定端口发送 TCP SYN 请求,我们首先需要构建请求的各个层面。我们需要构建的第一层就是 IP 层:

为了构建请求的 IP 层,我们需要将 IP 对象赋给变量 i 。通过调用 display 函数,我们可以确定对象的属性配置。通常,发送和接受地址都设为回送地址, 127.0.0.1 。这些值可以通过修改目标地址来修改,也就是设置 i.dst 为想要扫描的地址的字符串值。通过再次调用 dislay 函数,我们看到不仅仅更新的目标地址,也自动更新了和默认接口相关的源 IP 地址。现在我们构建了请求的 IP 层,我们可以构建 TCP 层了。

为了构建请求的 TCP 层,我们使用和 IP 层相同的技巧。在这个立即中, TCP 对象赋给了 t 变量。像之前提到的那样,默认的配置可以通过调用 display 函数来确定。这里我们可以看到目标端口的默认值为 HTTP 端口 80。对于我们的首次扫描,我们将 TCP 设置保留默认。现在我们创建了 TCP 和 IP 层,我们需要将它们叠放来构造请求。

我们可以通过以斜杠分离变量来叠放 IP 和 TCP 层。这些层面之后赋给了新的变量,它代表整个请求。我们之后可以调用 dispaly 函数来查看请求的配置。一旦构建了请求,可以将其传递给 sr1 函数来分析响应:

相同的请求可以不通过构建和堆叠每一层来执行。反之,我们使用单独的一条命令,通过直接调用函数并传递合适的参数:

要注意当 SYN 封包发往目标 Web 服务器的 TCP 端口 80,并且该端口上运行了 HTTP 服务时,响应中会带有 TCP 标识 SA 的值,这表明 SYN 和 ACK 标识都被激活。这个响应表明特定的目标端口是开放的,并接受连接。如果相同类型的封包发往不接受连接的端口,会收到不同的请求。

当 SYN 请求发送给关闭的端口时,返回的响应中带有 TCP 标识 RA,这表明 RST 和 ACK 标识为都被激活。ACK 为仅仅用于承认请求被接受,RST 为用于断开连接,因为端口不接受连接。作为替代,如果 SYN 封包发往崩溃的系统,或者防火墙过滤了这个请求,就可能接受不到任何信息。由于这个原因,在 sr1 函数在脚本中使用时,应该始终使用 timeout 选项,来确保脚本不会在无响应的主机上挂起。

如果函数对无响应的主机使用时, timeout 值没有指定,函数会无限继续下去。这个演示中, timout 值为 1秒,用于使这个函数更加完备,响应的值可以用于判断是否收到了响应:

Python 的使用使其更易于测试变量来识别 sr1 函数是否对其复制。这可以用作初步检验,来判断是否接收到了任何响应。对于接收到的响应,可以执行一系列后续检查来判断响应表明端口开放还是关闭。这些东西可以轻易使用 Python 脚本来完成,像这样:

在这个 Python 脚本中,用于被提示来输入 IP 地址,脚本之后会对定义好的端口序列执行 SYN 扫描。脚本之后会得到每个连接的响应,并尝试判断响应的 SYN 和 ACK 标识是否激活。如果响应中出现并仅仅出现了这些标识,那么会输出相应的端口号码。

运行这个脚本之后,输出会显示所提供的 IP 地址的系统上,前 100 个端口中的开放端口。

这一类型的扫描由发送初始 SYN 封包给远程系统的目标 TCP 端口,并且通过返回的响应类型来判断端口状态来完成。如果远程系统返回了 SYN+ACK 响应,那么它正在准备建立连接,我们可以假设这个端口开放。如果服务返回了 RST 封包,这就表明端口关闭并且不接收连接。此外,如果没有返回响应,扫描系统和远程系统之间可能存在防火墙,它丢弃了请求。这也可能表明主机崩溃或者目标 IP 上没有关联任何系统。

Nmap 拥有可以执行远程系统 SYN 扫描的扫描模式。这个秘籍展示了如何使用 Namp 执行 TCP 隐秘扫描。

为了使用 Nmap 执行 TCP 隐秘扫描,你需要一个运行 TCP 网络服务的远程服务器。这个例子中我们使用 Metasploitable2 实例来执行任务。配置 Metasploitable2 的更多信息请参考第一章中的“安装 Metasploitable2”秘籍。

就像多数扫描需求那样,Nmap 拥有简化 TCP 隐秘扫描执行过程的选项。为了使用 Nmap 执行 TCP 隐秘扫描,应使用 -sS 选项,并附带被扫描主机的 IP 地址。

在提供的例子中,特定的 IP 地址的 TCP 80 端口上执行了 TCP 隐秘扫描。和 Scapy 中的技巧相似,Nmap 监听响应并通过分析响应中所激活的 TCP 标识来识别开放端口。我们也可以使用 Namp 执行多个特定端口的扫描,通过传递逗号分隔的端口号列表。

在这个例子中,目标 IP 地址的端口 21、80 和 443 上执行了 SYN 扫描。我们也可以使用 Namp 来扫描主机序列,通过标明要扫描的第一个和最后一个端口号,以破折号分隔:

在所提供的例子中,SYN 扫描在 TCP 20 到 25 端口上执行。除了拥有指定被扫描端口的能力之外。Nmap 同时拥有配置好的 1000 和常用端口的列表。我们可以执行这些端口上的扫描,通过不带任何端口指定信息来运行 Nmap:

在上面的例子中,扫描了 Nmap 定义的 1000 个常用端口,用于识别 Metasploitable2 系统上的大量开放端口。虽然这个技巧在是被多数设备上很高效,但是也可能无法识别模糊的服务或者不常见的端口组合。如果扫描在所有可能的 TCP 端口上执行,所有可能的端口地址值都需要被扫描。定义了源端口和目标端口地址的 TCP 头部部分是 16 位长。并且,每一位可以为 1 或者 0。因此,共有 2 ** 16 或者 65536 个可能的 TCP 端口地址。对于要扫描的全部可能的地址空间,需要提供 0 到 65535 的端口范围,像这样:

这个例子中,Metasploitable2 系统上所有可能的 65536 和 TCP 地址都扫描了一遍。要注意该扫描中识别的多数服务都在标准的 Nmap 1000 扫描中识别过了。这就表明在尝试识别目标的所有可能的攻击面的时候,完整扫描是个最佳实践。Nmap 可以使用破折号记法,扫描主机列表上的 TCP 端口:

这个例子中,TCP 80 端口的 SYN 扫描在指定地址范围内的所有主机上执行。虽然这个特定的扫描仅仅执行在单个端口上,Nmap 也能够同时扫描多个系统上的多个端口和端口范围。此外,Nmap 也能够进行配置,基于 IP 地址的输入列表来扫描主机。这可以通过 -iL 选项并指定文件名,如果文件存放于执行目录中,或者文件路径来完成。Nmap 之后会遍历输入列表中的每个地址,并对地址执行特定的扫描。

Nmap SYN 扫描背后的底层机制已经讨论过了。但是,Nmap 拥有多线程功能,是用于执行这类扫描的快速高效的方式。

除了其它已经讨论过的工具之外,Metasploit 拥有用于 SYN 扫描的辅助模块。这个秘籍展示了如何使用 Metasploit 来执行 TCP 隐秘扫描。

为了使用 Metasploit 执行 TCP 隐秘扫描,你需要一个运行 TCP 网络服务的远程服务器。这个例子中我们使用 Metasploitable2 实例来执行任务。配置 Metasploitable2 的更多信息请参考第一章中的“安装 Metasploitable2”秘籍。

Metasploit 拥有可以对特定 TCP 端口执行 SYN 扫描的辅助模块。为了在 Kali 中启动 Metasploit,我们在终端中执行 msfconsole 命令。

为了在 Metasploit 中执行 SYN 扫描,以辅助模块的相对路径调用 use 命令。一旦模块被选中,可以执行 show options 命令来确认或修改扫描配置。这个命令会展示四列的表格,包括 name 、 current settings 、 required 和 description 。 name 列标出了每个可配置变量的名称。 current settings 列列出了任何给定变量的现有配置。 required 列标出对于任何给定变量,值是否是必须的。 description 列描述了每个变量的功能。任何给定变量的值可以使用 set 命令,并且将新的值作为参数来修改。

在上面的例子中, RHOSTS 值修改为我们打算扫描的远程系统的 IP 地址。地外,线程数量修改为 20。 THREADS 的值定义了在后台执行的当前任务数量。确定线程数量涉及到寻找一个平衡,既能提升任务速度,又不会过度消耗系统资源。对于多数系统,20 个线程可以足够快,并且相当合理。 PORTS 值设为 TCP 端口 80(HTTP)。修改了必要的变量之后,可以再次使用 show options 命令来验证。一旦所需配置验证完毕,就可以执行扫描了。

上面的例子中,所指定的远程主机的钱 100 个 TCP 端口上执行了 TCP SYN 扫描。虽然这个扫描识别了目标系统的多个设备,我们不能确认所有设备都识别出来,除非所有可能的端口地址都扫描到。定义来源和目标端口地址的TCP 头部部分是 16 位长。并且,每一位可以为 1 或者 0。因此,共有 2 ** 16 或 65536 个可能的 TCP 端口地址。对于要扫描的整个地址空间,需要提供 0 到 65535 的 端口范围,像这样:

在这个李忠,远程系统的所有开放端口都由扫描所有可能的 TCP 端口地址来识别。我们也可以修改扫描配置使用破折号记法来扫描地址序列。

这个例子中,TCP SYN 扫描执行在由 RHOST 变量指定的所有主机地址的 80 端口上。与之相似, RHOSTS 可以使用 CIDR 记法定义网络范围。

Metasploit SYN 扫描辅助模块背后的底层原理和任何其它 SYN 扫描工具一样。对于每个被扫描的端口,会发送 SYN 封包。SYN+ACK 封包会用于识别活动服务。使用 MEtasploit 可能更加有吸引力,因为它拥有交互控制台,也因为它是个已经被多数渗透测试者熟知的工具。

除了我们之前学到了探索技巧,hping3 也可以用于执行端口扫描。这个秘籍展示了如何使用 hping3 来执行 TCP 隐秘扫描。

为了使用 hping3 执行 TCP 隐秘扫描,你需要一个运行 TCP 网络服务的远程服务器。这个例子中我们使用 Metasploitable2 实例来执行任务。配置 Metasploitable2 的更多信息请参考第一章中的“安装 Metasploitable2”秘籍。

除了我们之前学到了探索技巧,hping3 也可以用于执行端口扫描。为了使用 hping3 执行端口扫描,我们需要以一个整数值使用 --scan 模式来指定要扫描的端口号。

上面的例子中,SYN 扫描执行在指定 IP 地址的 TCP 端口 80 上。 -S 选项指明了发给远程系统的封包中激活的 TCP 标识。表格展示了接收到的响应封包中的属性。我们可以从输出中看到,接收到了SYN+ACK 响应,所以这表示目标主机端口 80 是开放的。此外,我们可以通过输入够好分隔的端口号列表来扫描多个端口,像这样:

在上面的扫描输出中,你可以看到,仅仅展示了接受到 SYN+ACK 标识的结果。要注意和发送到 443 端口的 SYN 请求相关的响应并没有展示。从输出中可以看出,我们可以通过使用 -v 选项增加详细读来查看所有响应。此外,可以通过传递第一个和最后一个端口地址值,来扫描端口范围,像这样:

这个例子中,100 个端口的扫描足以识别 Metasploitable2 系统上的服务。但是,为了执行 所有 TCP 端口的扫描,需要扫描所有可能的端口地址值。定义了源端口和目标端口地址的 TCP 头部部分是 16 位长。并且,每一位可以为 1 或者 0。因此,共有 2 ** 16 或者 65536 个可能的 TCP 端口地址。对于要扫描的全部可能的地址空间,需要提供 0 到 65535 的端口范围,像这样:

hping3 不用于一些已经提到的其它工具,因为它并没有 SYN 扫描模式。但是反之,它允许你指定 TCP 封包发送时的激活的 TCP 标识。在秘籍中的例子中, -S 选项让 hping3 使用 TCP 封包的 SYN 标识。

在多数扫描工具当中,TCP 连接扫描比 SYN 扫描更加容易。这是因为 TCP 连接扫描并不需要为了生成和注入 SYN 扫描中使用的原始封包而提升权限。Scapy 是它的一大例外。Scapy 实际上非常难以执行完全的 TCP 三次握手,也不实用。但是,出于更好理解这个过程的目的,我们来看看如何使用 Scapy 执行连接扫描。

为了使用 Scapy 执行全连接扫描,你需要一个运行 UDP 网络服务的远程服务器。这个例子中我们使用 Metasploitable2 实例来执行任务。配置 Metasploitable2 的更多信息请参考第一章中的“安装 Metasploitable2”秘籍。

此外,这一节也需要编写脚本的更多信息,请参考第一章中的“使用文本编辑器*VIM 和 Nano)。

Scapy 中很难执行全连接扫描,因为系统内核不知道你在 Scapy 中发送的请求,并且尝试阻止你和远程系统建立完整的三次握手。你可以在 Wireshark 或 tcpdump 中,通过发送 SYN 请求并嗅探相关流量来看到这个过程。当你接收到来自远程系统的 SYN+ACK 响应时,Linux 内核会拦截它,并将其看做来源不明的响应,因为它不知道你在 Scapy 中 发送的请求。并且系统会自动使用 TCP RST 封包来回复,因此会断开握手过程。考虑下面的例子:

这个 Python 脚本的例子可以用做 POC 来演系统破坏三次握手的问题。这个脚本假设你将带有开放端口活动系统作为目标。因此,假设 SYN+ACK 回复会作为初始 SYN 请求的响应而返回。即使发送了最后的 ACK 回复,完成了握手,RST 封包也会阻止连接建立。我们可以通过观察封包发送和接受来进一步演示。

在这个 Python 脚本中,每个发送的封包都在传输之前展示,并且每个收到的封包都在到达之后展示。在检验每个封包所激活的 TCP 标识的过程中,我们可以看到,三次握手失败了。考虑由脚本生成的下列输出:

在脚本的输出中,我们看到了四个封包。第一个封包是发送的 SYN 请求,第二个封包时接收到的 SYN+ACK 回复,第三个封包时发送的 ACK 回复,之后接收到了 RST 封包,它是最后的 ACK 回复的响应。最后一个封包表明,在建立连接时出现了问题。Scapy 中可能能够建立完成的三次握手,但是它需要对本地 IP 表做一些调整。尤其是,如果你去掉发往远程系统的 TSR 封包,你就可以完成握手。通过使用 IP 表建立过滤机制,我们可以去掉 RST 封包来完成三次握手,而不会干扰到整个系统(这个配置出于功能上的原理并不推荐)。为了展示完整三次握手的成功建立,我们使用 Netcat 建立 TCP 监听服务。之后尝试使用 Scapy 连接开放的端口。

这个例子中,我们在 TCP 端口 4444 开启了监听服务。我们之后可以修改之前的脚本来尝试连接 端口 4444 上的 Netcat 监听服务。

这个脚本中,SYN 请求发送给了监听端口。收到 SYN+ACK 回复之后,会发送 ACK回复。为了验证连接尝试被系统生成的 RST 封包打断,这个脚本应该在 Wireshark 启动之后执行,来捕获请求蓄力。我们使用 Wireshark 的过滤器来隔离连接尝试序列。所使用的过滤器是 tcp (ip.src == 172.16.36.135 || ip.dst == 172.16.36.135) 。过滤器仅仅用于展示来自或发往被扫描系统的 TCP 流量。像这样:

既然我们已经精确定位了问题。我们可以建立过滤器,让我们能够去除系统生成的 RST 封包。这个过滤器可以通过修改本地 IP 表来建立:

在这个例子中,本地 IP 表的修改去除了所有发往被扫描主机的目标地址的 TCP RST 封包。 list 选项随后可以用于查看 IP 表的条目,以及验证配置已经做了修改。为了执行另一次连接尝试,我们需要确保 Natcat 仍旧监听目标的 4444 端口,像这样:

和之前相同的 Python 脚本可以再次使用,同时 WIreshark 会捕获后台的流量。使用之前讨论的显示过滤器,我们可以轻易专注于所需的流量。要注意三次握手的所有步骤现在都可以完成,而不会收到系统生成的 RST 封包的打断,像这样:

此外,如果我们看一看运行在目标系统的 Netcat 服务,我们可以注意到,已经建立了连接。这是用于确认成功建立连接的进一步的证据。这可以在下面的输出中看到:

虽然这个练习对理解和解决 TCP 连接的问题十分有帮助,恢复 IP 表的条目也十分重要。RST 封包 是 TCP 通信的重要组成部分,去除这些响应会影响正常的通信功能。洗唛按的命令可以用于刷新我们的 iptable 规则,并验证刷新成功:

就像例子中展示的那样, flush 选项应该用于清楚 IP 表的条目。我们可以多次使用 list 选项来验证 IP 表的条目已经移除了。

执行 TCP 连接扫描的同居通过执行完整的三次握手,和远程系统的所有被扫描端口建立连接。端口的状态取决于连接是否成功建立。如果连接建立,端口被认为是开放的,如果连接不能成功建立,端口被认为是关闭的。

0条大神的评论

发表评论