要做到有效的网络管理,就需要通过网络监控机制搜集相关信息,主动找出问题点并加以解决。 NetFlow 就是一种提供网络流量相关信息的协议,网管人员通过NetFlow 可以快速有效地掌握所管辖网络的状态。
随着网络应用的蓬勃发展,很多学校网络带宽大幅增加,而网络使用的效能却没有成正比的提升。要做到有效的网络管理,就需要通过网络监控机制搜集相关信息,主动找出问题点并加以解决。 NetFlow 就是一种提供网络流量相关信息的协议,网管人员通过NetFlow 可以快速有效地掌握所管辖网络的状态。接下来我们会依序介绍NetFlow 与之前网络管理机制的差异及其运作机制,最后介绍目前NetFlow 的相关应用。 NetFlow的由来。
传统上的网络管理者通常是通过SNMP (Simple Network Management Protocol) 协议的工具从支持SNMP的网络设施搜集网络流量数据,虽然通过这种方式取得信息不会造成处理上过重的负担,但是SNMP 提供的只是粗糙、简略的资料。这些信息只能让管理者发现问题,却无法进一步解决问题。
那么有没有另外一种能提供更详细网络信息的技术呢?网络探针(sniffer) 或是类似的监听工具开始被部署在网络设备上,用来捕捉流过的数据包并将数据包加以翻译,找出数据包头中字段的相关信息,并进一步分析其内容以取得更详细的信息。
虽然通过数据包监听工具可以取得更详细的网络信息,但监听工具通常专注在单一网络数据包的内容,所以网络管理者很难从监听工具所提供的信息来掌握整体网络的状态。此外,分析数据包非常耗费时间,而且数据包监听所储存并需要分析的数据量非常庞大,对于资源和人员的消耗是惊人的,这种方式显然不适合高校环境下的网络管理。
NetFlow 便是在这种情况下应运而生并成为网管人员热门工具的,越来越多的学校在通过这一工具了解网络使用情形。NetFlow 不仅能提供更详细的网络信息,而且其分析方式避免了网络频宽及运算资源过重的负担。
NetFlow 运作机制
NetFlow 是由Cisco 公司的Darren Kerr 和Barry Bruins 在1996 年开发的一套网络流量监测技术,目前已内建在大部分Cisco 路由器上,Juniper、Ex-treme、港湾网络等网络设备供货商也支持NetFlow 技术,它已逐渐成为大家都能接受的标准。
NetFlow 本身是一套网络流量统计协议,其主要原理是根据网络数据包传输时,连续相邻的数据包通常是往相同目的地IP 地址传送的特性,配合cache 快取机制,当网络管理者开启路由器或交换机接口的NetFlow 功能时,设备会在接收数据包时分析其数据包的标头部分来取得流量资料,并将所接到的数据包流量信息汇整成一笔一笔的Flow,在NetFlow 协议中Flow 是被定义为两端点间单一方向连续的数据流,这意味着每一个网络的连接都会被分别纪录成两笔Flow 数据,其中一笔记录从客户端连到服务器端,另外随着一笔纪录从服务器端连回到客户端的信息。
网络设备通过以下字段来区分每一笔Flow:来源IP 地址(source IP address)、来源端口号(source port number)、目的IP 位址(destination IP address)、目的端口号(destination port number)、协议种类(protocol type)、服务种类(type of service)及路由器输入接口(router input interface),任何时间当设备接收到新的数据包时,会检视这七个字段来判断这个数据包是否属于任何已记录的Flow,有的话则将新收集到的数据包的相关流量信息整合到对应的Flow 记录中,如果找不到数据包对应的Flow 记录,便产生一个新的Flow 记录来储存相关的流量信息。由于设备内高速缓存的空间有限,无法无限制地容纳持续增加的Flow 纪录,所以NetFlow 协议也定义了终结Flow记录的机制,来维持网络设备中储存Flow 信息的空间。
只要下面三种情况任何一个成立,路由器就会通过UDP 数据包将终止的Flow 纪录汇出到使用者事先指定的NetFlow 数据收集设备上:当数据包内字段flag 显示传输协议中传输完成的讯息如TCP FIN 时;流量停止超过15 秒;流量持续传送,每30 分钟会自动终止。
虽然大部分的网络硬件供货商都支持NetFlow,但NetFlow版本有很多,其中NetFlow Version 5 是常见的Netflow 数据格式,包含以下几个字段:Source IP Address (源主机IP 地址)、Destination IP Address (目的主机IP 位址)、Source TCP/UDP Port (源主机所使用的端口号)、Destination TCP/UDP Port (目的主机所使用的端口号)、Next Hop Address (下一个端点的地址)、Source AS Number (来源主机所属的AS 编号)、Destination AS number (目的主机所属的AS 编号)、Source Prefix Mask (来源主机所属网域的子网掩码)、Destination Prefix Mask (目的主机所属网络的子网掩码)、Protocol (使用的通讯协议)、TCP Flag (数据包控制标记)、Type of Service (QoS需求参数)、Start sysUpTime (起始时间)、End sysUpTime (终止时间)、Input ifIndex (信息流流入接口编号)、Output ifindex (信息流流出接口编号)、Packet Count (数据包数量)、Byte Count (Byte数量)。
支持NetFlow 功能的网络设备将其所收集到的Flow 信息以UDP 数据包送往预先设置好的流量接收主机,配合NetFlow 相关收集软件,将这些原始流量资料作适当的处理、储存以提供后续的相关应用。
NetFlow在网络安全上的相关应用
NetFlow 的纪录能够提供足够的信息来协助网络管理者掌握所管辖网络中的网络异常事件,而且由于NetFlow 不需要对数据包内容进行分析,大大减轻了网络设备运算处理的负担,所以很适合用来分析高速、忙碌的网络环境。
由于NetFlow 数据来源是网络中的三层数据转发设备,所以通过从三层设备所搜集到的NetFlow 信息可以协助掌握整体网络的情况,而且通过适当地分析NetFlow 信息,可以协助管理者在蠕虫爆发或不正常网络行为的初期快速分析出网络中存在的问题。接下来我们进一步介绍如何利用NetFlow中所包含的信息来侦测异常的行为。
从网络层的角度进行分析
一般来说,网络攻击行为会存在着某些可供辨识的特征,我们可以通过这些特征来与所获得的NetFlow 数据进行对比,进而找出可能的异常行为。我们可以通过分析NetFlow 数据中目的主机所使用端口号字段,来过滤NetFlow资料找出相对应的攻击;另外我们也可以利用不合逻辑的来源或目的IP 地址来找出异常;此外,因特网地址指派机构(Internet Assigned Numbers Authority , IANA)将下列三段IP 地址保留给私有网络使用10.0.0.0~10.255.255.255、172.16.0.0~172.31.255.255 及192.168.0.0~192.168.255.255,这几段网络的地址不能出现在外在网络环境中,但由于当初网络设计的缺陷,路由器对于所接收数据包的来源地址字段并不会进行验证,所以攻击者可利用这个缺陷伪造来源IP 地址(IP Spoofing )来发动攻击,避免被追踪到攻击来源,所以我们可以从我们所接受到NetFlow 数据中来源主机所使用的IP 地址(Source IP Address)字段,找出伪造来源地址的流量,再利用NetFlow数据中信息流流入接口编号(Input IFindex)字段的信息,找出连接这个接口的上游路由器,请他们协助调查或处理。
某些异常行为可能会连到某个或某些特定地址。比如在2001 年造成严重网络拥塞的Code Red 蠕虫,我们分析所收集到的NetFlow 资料便可发现,此蠕虫的攻击行为有一个特性,每笔Flow 的destination TCP/UDP port 字段值会等于80,Packet Count 字段值等于3,Byte Count 字段值等于144bytes,网络管理者可以撰写程序分析所搜集的NetFlow数据,找出具备此特征的Flow 数据,便可找出管辖网络内有可能感染Code Red蠕虫的主机,并强行将该主机下线或封锁物理端口以降低蠕虫造成的危害。利用已收集到攻击的特征与NetFlow 信息中的相关字段进行比对找出可能的攻击,可以在造成网络严重伤害之前,采取相应措施来降低形成严重问题的可能性。
从传输层的角度进行分析
我们可以通过NetFlow 数据找出网络中建立session 数目最多的主机,因为如果一台主机对特定主机产生不正常的大量连接,这可能代表着新的蠕虫、阻断服务攻击、网络扫描等的可能性,因为一个正常的主机对外连接会有一定正常的频率,如果正常的主机感染了蠕虫,就可能会开始产生异常的网络行为,开始产生对外大量的连接需求来找寻下一个感染的对象,因此我们可以从感染蠕虫的主机的NetFlow 信息中发现到大量的对外连接需求,同样的原理,如果所管辖网络中的使用者从网络上下载阻断服务攻击之工具程序企图对外发动攻击时,或是使用者利用Nmap 之类的扫瞄工具扫瞄特定网址,以找出目标主机所可能存在弱点或是漏洞时,我们都可以从NetFlow 数据中发现从网域中某个特定地址送出的大量session。
除了侦测网络攻击外,我们也可以通过分析session 的方式找出网络滥用的行为,例如分析NetFlow 数据中目的主机所使用端口号的信息,通过分析对外25 port 连接的相关信息,若某一台主机对外25 port 连接的数目在某个特定时间内超出正常值过多,我们便可合理怀疑这台主机被利用来散发广告信或通过e-mail感染蠕虫,同样原理我们也可以应用来分析像emule 等peer-to-peer 档案分享软件常用之TCP 4662 / UDP 4672 port,找出网络滥用的行为,并进行适当处置以降低其所造成的伤害。
利用TCP 的控制过滤出可疑的Flow
但对于一些大型网络,攻击的相关NetFlow 信息可能会被其它正常的NetFlow 信息所稀释,例如感染病毒的初期或是谨慎的黑客,可能会利用正常的流量来掩护其异常行为。另外,当我们遇到新的攻击手法或是病毒时,可能无法在第一时间掌握其Flow 特征,也无法通过特征比对的方式找出异常流量。为了更快速有效地侦测出异常的流量,我们试着对TCP 的控制标志进行分析,希望缩小需要进一步分析的NetFlow 数据量,以及早发现异常流量。对蠕虫而言,由于其在网络中通过感染大量主机进行自我复制的本质,蠕虫会在很短的时间内尽全力探测可能的感染目标,而且大部分的蠕虫都是通过TCP 协议来传输散布,所以我们可以从TCP 的控制标志中发现到一些蛛丝马迹,作为我们缩小可疑名单的根据。
以正常的TCP 连接建立过程而言,客户端会先送出一个SYN 数据包给目的端主机,接着目的端主机会响应一个SYN/ACK 数据包,客户端在接收到这样的数据包后,再送回给目的端主机ACK 数据包完成连接,但并不是每一次都能顺利建立连接,由于NetFlow 会将每个session中所有传输时的TCP 控制标志全部储存在数据包控制标志(TCP Flag) 这个字段中,因此我们可以通过这个字段中的信息来协助我们推测特定主机联机的特性。
若某个Flow 正常地建立TCP 连接后,其数据包控制(TCP Flag) 字段会记录的包含ACK、SYN、FIN 等控制标志,但是如果蠕虫进行感染的动作时,由于随机选取的主机并不一定存在,或是即使存在但目标主机没有开放蠕虫所要感染的TCP port,在这种情况下,NetFlow 信息中由受感染主机对外联机所产生的Flow 数据包控制标志(TCP Flag) 字段会只存在SYN 这个TCP 控制标志,根据这种特性网络管理者可以先将其NetFlow 数据中数据包控制标志(TCP Flag)字段只有存在SYN 控制标志的Flow 数据过滤出来,通过这种方式我们可以把大部分正常的流量排除,这时候我们要从可疑的数据中找出真正异常流量的难度就会降低许多,能快速找出问题,也可以避免运算资源无谓的浪费。
利用ICMP的讯息协助过滤出可疑的Flow
某些蠕虫或网络攻击也会利用ICMP 来进行,我们可以从NetFlow数据中过滤出有异常行为的主机,首先找出通讯协议(protocol) 字段值为1 的Flow,代表所使用的通讯协议为ICMP,再根据目的主机之端口号(destination TCP/UDP port)字段值分析出所代表的ICMP 讯息,例如目的主机之端口号(destination TCP/UDP port)字段值为2048,转化成八进位为800,第一位代表位数字代表的是ICMP 的类型,后两码为这个ICMP 类型中的编码,整体的意思是ICMP echo 请求;但如果字段值为769,转化为八进位则为301,这个编码代表的是ICMP host unreachable;如果字段值是771则代表ICMP port unreachable;字段值是768 则代表ICMP network unreachable。我们可以先找出所使用通讯协议为ICMP 的Flow,进一步过滤出其中目的主机所使用端口号为768、769、771 的Flow,再进一步分析找出可能的异常行为。通过这种方式从大量NetFlow 数据中过滤出可疑名单,再对名单内的Flow 数据进行进一步的分析,这样可以帮助网络管理者快速找出问题所在。
由于目前网络带宽增长非常迅速,仅仅在核心层部署NetFlow可能会导致设备性能下降。目前港湾网络可以在汇聚层的FlexHammer 5210系列、核心层的BigHammer 6800系列提供相应的NetFlow功能,通过核心和汇聚层的NetFlow分布式部署,可以在确保网络性能的前提下提供完善的病毒和网络异常控制机制,从而协助网络管理者完成网络的维护工作,为各个高校网络中心降低管理压力。