随着各种网络应用迅速增加,由此带来了网络流量的激增。在这些流量中,网络用户的上网行为如何管理?各种类型的流量如何分布?在这种情况下,可以使用NetFlow这一有效工具以满足对网络流量管理的需求。
NetFlow最初是由Cisco开发的,由于使用广泛,目前很多厂家都可以实现,如:Juniper、Extreme、Foundry、H3C等。Cisco的NetFlow也有多种版本,如V5、V7、V8、V9。目前NetFlow V5是主流。因此本文主要针对NetFlow V5,该版本数据包中的基本元素包含哪些内容呢?首先从Flow讲起,一个IP数据包的Flow至少定义了下面7个关键元素:
Ø 源IP地址;
Ø 目的IP地址;
Ø 源端口号;
Ø 目的端口号;
Ø 第三层协议的类型;
Ø TOS字段;
Ø 网络设备输入/输出的逻辑端口(if index)
以上7个字段定义了一个基本的Flow信息。 Netflow就是利用分析IP数据包的上述7种属性,快速区分网络中传送的各种类型的业务数据流。
1. Cache管理
在NetFlow中有两个关键组件:
(1) NetFlow Cache,主要描述流缓存(或者说源数据)如何存放在Cache中。
NetFlow缓存管理机制中包含一系列高度精细化算法,能够有效地判断一个报文是属于已存在Flow的一部分还是应该在缓存中产生一条新的Flow。这些算法也能动态更新缓存中Flow的信息,并且判断哪些Flow应该到期终止。
(2) NetFlow Export,数据流的输出机制,主要描述了数据流是如何输出并被分析器接收的。
首先了解NetFlow Cache(缓存机制)。当缓存中的Flow到期后,就产生一个将Flow输出的动作。将超时的Flow信息以数据报文的方式输出,叫做“NetFlow Export”,这些输出的报文包含30条以上的Flow信息。这些NetFlow信息一般是无法识别的,需由专用收集器(Flow Collector)采集到并做出进一步分析,这些Flow Collector能够识别NetFlow的特殊格式。
2.输出格式
NetFlow的输出报文包含报头和一系列的Flow流,报头包含系列号、记录数、系统时间等,Flow流包含具体内容,如IP地址、端口、路由信息等。各个版本的NetFlow格式都相同,且NetFlow采用UDP报文,这更有利于大流量情况下的数据报文传输。换句话说,在路由器,防火墙等网络设备中如要使用NetFlow就不能禁用UDP端口,否则无法接收设备传递的信息。
3 .抽样机制
在Netflow的实际应用中,它不是时刻都把数据包抓取过来,而是采用抽样的机制,通过使用抽样技术可以降低路由器的CPU利用率,减少Flow的输出量,但仍然可以监测到大多数的流量信息。当我们不需要了解网络流量的每个Flow的具体细节的时候,抽样就成了比较好的选择。但流量计费系统采用NetFlow会造成误差,使得NetFlow输出有时不能准确反映流量的实际情况。这时如果你的流量计费系统选用Netflow就不太合适了。
4.性能影响
使用任何一种技术作为工程师最应该关注它的性能问题。由于在设备缓存中Flow的生成,需要消耗系统资源同样,将Flow格式化成特定的输出报文并将报文输出,也是要消耗系统资源,因此在设备上使用NetFlow时,肯定就会影响设备性能。由于高端Cisco设备(如6500、7600系列等)都是通过ASIC硬件处理数据包,所以占用10%~20%利用率均属正常。注意,在使用中CPU的利用率会随着缓存中Flow条目的增大而增加,所以在高负载情况下,一定要慎用Netflow功能。
5.在蠕虫病毒监测中的举例
前些年Code Red、SQL Slammer、冲击波、振荡波等蠕虫病毒的相继爆发,不但对用户主机造成影响,而且对网络的正常运行也构成了的危害,因为这些病毒具有扫描网络,主动传播病毒的能力,会大量占用网络带宽或网络设备系统资源。这些蠕虫在网络行为上都有某些共同特征,我们可以利用NetFlow的信息筛选出这些数据包,从而快速发现问题。
例1:CodeRed的Flow特征是destination port=80,、packets=3、size=144bytes。虽然在Internet上,符合上述特性的正常行为是存在的(如使用ICQ),但是一般正常使用的主机不会在连续几段时间内发出大量的这些报文。
因此监测CodeRed 可采用的方法是:取几个不同时间段,例如每段时间5分钟,如果每个时间段内符合特征的Flow大于上限值,则可以判断为Code Red。
例2:感染了Nimda病毒的主机会向外部地址(往往是TCP 80端口)发起大量连接,Nimda的Flow特征是每个Flow代表一次连接destination port=80的行为,如果普通的客户机在一段时间内(例如5分钟)Flow数量过大,那么很有可能遭受病毒感染或者有其他针对HTTP的攻击行为。
因此监测Nimda可采用的策略是:取几个不同时间段,每段时间5分钟,如果每个时间段内符合特征的Flow超过上限值,则可以判断为Nimda病毒或其他攻击行为。另外,如果Apache Http Server感染了Slapper Worm的话,也会产生大量的Http报文。
例3:震荡波(Worm.Sasser)的特征是一个IP同时向随机生成的多个IP发起445端口的TCP连接。因此检测条件是:相同源IP,大量不同目的IP,目的端口为445,当符合的Flow达到上限值时,则可以认定是振荡波病毒。
例4:几年前臭名昭著的微软SQL-Server漏洞造成了很大的影响,它的特征是目的端口为1433的TCP流。表13-2是根据此条件筛选出的NetFlow统计数据,可以得知IP地址66.190.144.166正在对某网段进行SQL漏洞扫描。
表1 筛选的NetFlow数据
例5:用NetFlow分析DOS攻击流量
DOS攻击使用非正常的数据流量攻击网络设备或其接入的服务器,致使网络设备或服务器的性能下降,或占用网络带宽,影响其他相关用户流量的正常通信,最终可能导致网络服务不可用。例如DOS可以利用TCP协议的缺陷,通过SYN打开半开的TCP连接,占用系统资源,使合法用户被排斥而不能建立正常的TCP连接。以下为一个典型的DoS SYN攻击的NetFlow数据实例,该案例中多个伪造的源IP同时向一个目的IP发起TCP SYN攻击。
111.*.68.35|202.*.*.80|Others|64851|3|2|10000|10000|6|1|40|1
105.*.93.91|202.*.*.80|Others|64851|3|2|5557|5928|6|1|40|1
158.*.25.208|202.*.*.80|Others|64851|3|2|3330|10000|6|1|40|1
日常工作中发现,除了遇到DOS 以外还有许多攻击属于DDOS攻击,只不过攻击类别不同,有些为Ping Death,另一些则为SYN Flooding。
DDOS攻击基本上都造成这样一种结果:服务器无法处理源源不断如潮水般涌来的请求,从而造成响应迟缓,直至系统资源耗尽而宕机。DDOS攻击的共同点是来源广泛,针对一台主机,大量数据包。
因此检测ICMP攻击就可以根据下面的条件:在连续的几个时间段,假设每个时间段为5分钟,各个时间段内ICMP报文大于5000。符合这个条件的,可以认为受到了ICMP攻击。
下面是ICMP流的NetFlow实例。
另外,还有一种DDOS攻击是SYN flooding,它的特征是TCP报头中的SYN被置位,且有大量的SYN特征数据包。NetFlow输出格式中提供了Flag位,为我们判断SYN攻击创造了条件。
因此检测SYN flooding的条件是:在连续的几个时间段,假设每个时间段为5分钟,产生大量flag=2的数据包,正常连接不会产生这么多flag=2的数据包,所以可以设置阈值为5000。超过这个数值就认为服务器受到SYN flooding攻击。如果主机发出flag=2的数据包数量超过1000,则可以认为主机在发起攻击。以下是SYN特征的NetFlow实例。
各种DDOS攻击的特征都是在短时间内产生大量的数据包,因此,即使不知道攻击报文的特征,也可以在NetFlow的输出结果中进行相应的查找,找到符合条件的异常Flow。这就为及时发现和防范网络上的不安全因素提供了有效的手段。
案例6:NetFlow在网络取证方面的应用
假设图1中的ADSL拨号用户从Internet上某FTP服务器上下载了可疑文件,在客户端PC上留有下载日期时间戳信息,在局端的接入服务器上也可以看到特定IP地址在相应时间内被分配给客户端PC,通过在ISP方面的ANI(Automatic Number Identification)日志就能将客户端的所在家庭电话号码与上网拨号信息联系到一起,与此同时,在ISP的路由器上记录(一般会保留30天左右)着FTP下载/上传网络流量(NetFlow)日志,这个流量至关重要。最后在Ftp服务器上还有完整的下载记录。
图 1 分析下载可疑文件
由上图可以看出,从客户端发起连接到FTP服务器下载分为四个阶段,分别是客户端发送/接受、接入服务器验证、路由器转发及FTP服务器接受下载,每个阶段都有日志记录信息包含用户账号、登录时间、IP、端口、发送数据包大小及日期及时间戳等。这些日志信息分别存放在不同的设备上,即便是某些日志遭到了一定程度破坏(例如篡改IP,丢失了某些日志等)也不会影响全局,所以这些相关信息,在调查人员进行计算机网络取证时就显得尤为重要,希望引起管理人员重视。
在某些情况下,设备不支持Netflow,怎么对流量进行检测呢?对于这样的环境也有相应的解决方法,那就是使用Fprobe。利用Fprobe来生成Netflow报文,其默认格式为V5版本。最初Fprobe是一款在BSD环境下运行的软件,目前在UNIX/Linux平台上均可运行。它可以将NIC接口收到的数据转化为Netflow数据,并发送至Netflow分析端。我们可以通过部署这样一台Ossim服务器,将网络流量镜像至Ossim服务器,实现网络流量分析。Ossim服务器中的Netflow分析器,由下列三个工具组成:
Ø Fprobe: 从远程主机发送数据流;
Ø NfSen: NetFlow的分析图形前端;
Ø Nfdump: NetFlow采集模块;
有关Ossim结构大家可以先参看本书第14章,这里介绍Netflow分析数据包的过程。首先,在网络接口接收网络数据,然后由Fprobe程序将收集的数据按照一定规则和格式进行转换(Netflow格式),再发到系统的555端口(查看/etc/default/fprobe能得知详情),再由Nfsen系统中的Nfdump程序将转换后的数据统一存放在/var/cache/nfdump/flows/目录下,最后由Web前端程序Nfsen来读取,数据通过555端口接收,同时结果会显示在前台Web界面上(在Ossim系统中路径为Situational Awareness→Network→Traffic,显示效果在Ossim右侧导航栏里可以查看),分析Netflow过程如图2所示。
图 2 Ossim系统分析Netflow数据
在Ossim4.1系统中查询 Netflow流量如图13-3所示。
图 3 Netflow流量源端口Top 10
在Ossim 4.1系统中由Netflow收集的数据放置在/var/cache/nfdump/flows/live/ossim/目录下,并存储为二进制文件格式,以天为单位分别设置目录,方便查看。这些数据按照一定的时间组织起来,每5分钟采集一次数据,同时由nfcapd产生新的文件,并用当前时间来命名,例如nfcapd.2013053112035包含的数据是从2013年5月31日12小时35分钟开始的数据。
图 4 nfcapd产生的数据
从系统捕获数据包的过程来看Nfdump这一过程至关重要,它由nfcpad、fddump、nfprofile和nfreplay这4个进程组成,功能见表2所示。
表2 nfdump工具组成
6.分布式环境数据流处理
本节内容是对上述知识点的总结,下面这个实验在一个模拟的分布式环境中完成,其中有一台混合安装的Ossim USM,两台Sensor,三台接入层交换机和一台核心交换机以及若干PC组成,为简化实验这些设备均在同一个VLAN中,实际生产中应在多个VLAN。拓扑如图5所示。
图5 Ossim分布式部署
第2章讲解了如何添加Sensor,并与Server进行连接,下面接着启用Netflow服务,交换机上Netflow也必须同时设置正确,注意nfcapd进程在12000和120001端口进行监听。各主机IP、UUID及端口如表3所示。
表3 Ossim服务器传感器配置
前面已经讲过查看UUID的方法下面依次在终端下输入如下命令:
所有数据存储在Ossim Server端,所以我们到Server命令行下输入以下命令进行验证:
为了确保在SensorA、SensorB和Sensor上都能展现其Netflow数据要确保nfsen都收到数据,我们在Ossim Server的终端控制台下,操作以下命令
接着观察目录的内容,我们进入目录564db4303295cb66ae8a8141c00f6233,在该目录下有若干Pcap格式的文件,每隔5分钟生成一个,每个文件大小在500KB~1000KB(大小并不固定),每天会产生100~200MB的抓包文件。
如果在实验中发现没有收到Sensor数据包,首先检查设置是否正确,接下来用tcpdump来抓包分析,具体抓包操作如下图所示。
或tcpdump -i eth0 ‘port 12001’ 。
通过nfdump可以实现Netflow记录的过滤、Top统计和排序等功能,在Ossim通过Web UI能轻松的展现给用户,如图6所示。
图6 Netflow多传感器显示
作为系统维护人员需要了解后台执行的命令,例如我们进入2015-05-01目录,对其数据包按端口排序输入命令nfdump –r nfcapd.201505010315 –s dstport –n 10
又如
7.交换机上配置
下面归纳一下实施流量监控的步骤(以Cisco 6000系列交换机为例):
1) 在Cisco 6509上配置NetFlow(或其他网络设备),并输出到指定到Ossim采集器(IP)的固定UDP端口。
2) 采集器软件为Ossim系统的Flow-tool工具,该软件监听UDP端口,接收进入的NetFlow数据包并存储为特定格式。
3) 使用Nfsen等软件包中的工具对NetFlow源文件进行读取,转换成可读的ASICII格式,再用Ossim内的Perl程序对NetFlow进行分析和规范格式的操作,并将读取的NetFlow信息存储入Ossim数据库中。
4) 依据蠕虫和DDOS攻击等异常报文的流量特征,在分析程序中预设各种触发条件,定时运行,从中发现满足这些条件的Flow。
5) 将分析结果在Web客户端中展示,或者通过E-mail、短信等接口发送。也可以通过与设备联动的方式,采用ACL对设备进行自动配置,等攻击流消退后再自动取消ACL。
除了OSSIM之外,还有些商业软件都提供了很好的分析工具,例如Solarwinds NetFlow Traffic Analysis 和Manage Engine NetFlow Analyzer这两款软件如图7所示,它们都是不错的选择。