第2章 网络传感器
网络传感器直接从网络通信中采集数据,不需要中介应用程序作为代理,这使其不同于第3章中讨论的基于主机传感器。这方面的例子包括路由器上的NetFlow传感器,以及使用tcpdump等嗅探工具采集流量的传感器。
网络流量所面临的挑战是你在所有日志数据中都会遇到的:真正的安全事件很少,而数据在时间和存储空间上都有代价。只要可能,首选日志数据,因为它清晰(日志数据记录了高级事件)而紧凑。网络流量中的相同事件必需从几百万个数据包中提取,这些数据包往往是冗余、加密或者难以理解的。与此同时,攻击者很容易操纵网络流量,在线路上形成看似合法,但是完全伪造的会话。在日志记录中300个字节的事件很容易积累多达数兆字节的网络封包数据,其中只有前10个封包具有分析价值。
这是坏消息,好消息是,网络流量是“协议无关的”(没有更好的术语),这意味着,它是找出审计盲点的最佳信息来源。基于主机的采集系统首先需要知道主机的存在,在许多情况下,只有看到线路上的流量,你才有可能知道特定服务运行。网络流量提供了最有确定性的网络视图——它告诉你网络上存在着不为人知的主机、你没有意识到的后门、攻击者已经进入了你的地盘,以及你所没有考虑到的网络路由。与此同时,当你面对零日漏洞或者新的恶意软件时,封包数据可能是唯一的数据来源。
本章余下的部分分成下面几个小节:下一小节介绍网络观察点,包括封包在网络上如何移动,在观测网络时如何利用这一点;再下一个小节介绍tcpdump——这是一个基本的网络流量捕捉协议,并提供封包采样、过滤和长度操纵的窍门;此后的一个小节介绍NetFlow,这是一种强大的流量汇总方法,提供了有关网络流量的高价值、紧凑的汇总信息;在本章的最后,我们研究一个样板网络,讨论如何利用不同的采集策略。
2.1 网络分层及其对测量的影响
计算机网络采用分层设计。层(Layer)是对一组网络功能的抽象,旨在隐藏机制和实现细节。理想状况下,每个层次都是分离的实体,某层上的实现可以与另一个实现交换信息,而不会影响到更高的层次。例如,互联网协议(IP)存在于OSI模型中的第3层,IP实现在不同的2层协议(如以太网或者FDDI)上同样可以运行。
有许多不同的分层模型。最常见的是OSI的7层模型和TCP/IP的4层模型。图2-1展示了这两种模型,代表协议,以及和第1章定义的传感器领域之间的关系。正如图2-1所示,OSI模型和TCP/IP有粗略的对应关系。OSI使用如下7个层次。
1.物理层:物理层由用于连接网络的机械部件组成——线路、电缆、无线电波和其他用于将数据从一个位置传送到下一个位置的机制。
2.数据链路层:数据链路层负责管理通过物理层传输的信息。数据链路层协议(如以太网)确保异步通信正确中继。在IP模型中,数据链路层和物理层被组合成为链路层。
3.网络层:网络层负责从一条数据链路到另一条数据链路的通信路由。在IP模型中,网络层直接对应到第2层——互联网层。
4.传输层:传输层负责管理通过网络层传输的信息。它与数据链路层有类似的关注点,例如流量控制和可靠数据传输,但是规模不同。在IP模型中,传输层是第3层。
5.会话层:会话层负责会话的建立和维护,专注于身份验证等问题。会话层协议的最常见示例是SSL——它是用于HTTP、SMTP和许多其他通信安全加固服务使用的加密和身份验证层。
6.表示层:表示层编码信息用于更高级别的显示。常见的表示层例子是MIME——电子邮件中使用的消息编码协议。
7.应用层:应用层是服务,如HTTP、DNS和SSH。OSI的第5层~第7层大约对应于IP模型的应用层(第4层)。
分层模型只是模型而非规范,模型总是不完美的。例如,TCP/IP模型避开了更为细致的OSI模型,在许多情况下,OSI模型中的协议可能存在于多个层次中。网络接口控制器(NIC)处于模型中的第1层和第2层。这些层次相互影响,特别是数据的传输方式(以及观测方式),并在更高的层次中带来了性能上的限制。
在分层对网络流量的影响中,我们最经常遇到的是最大传输单元(MTU)。MTU是数据帧尺寸的上限,影响到介质中可以传送的封包的最大尺寸。以太网的MTU为1500个字节,这意味着IP封包几乎不会超过这个尺寸。
分层模型还为我们提供了基于网络和基于服务传感器领域之间的清晰分别。如图2-1所示,网络传感器的焦点是OSI模型中的第2层~第4层,而服务传感器的焦点是第5层及以上。
分层和网络传感器的作用
网络传感器为什么不能监控所有信息?这是一个合乎逻辑的问题,毕竟,我们所讨论的攻击是通过网络发生的。此外,网络传感器不会像主机日志那样篡改或者删除,而且可以看到主机日志中不能记录的行为,例如扫描或者失败的连接尝试。
网络传感器提供的覆盖范围很广,但是从这个覆盖范围中恢复真正发生的情况随着OSI模型中层次的升高而变得更加复杂。在第5层及更高的层次中,协议和封包转译的问题越来越突出。会话加密是第5层的一个选项,加密的会话无法理解。在第6层和第7层中,你必须知道协议中用于提取有意义信息的细节。
从封包数据中重建协议是复杂且存在歧义的。TCP/IP是按照端到端的原则设计的,也就是说,只有服务器和客户端需要从封包中构造会话。Wireshark(第9章中将介绍)或者NetWitness等工具可以重建会话内容,但是这只是实际发生情况的近似表现。
网络、主机和服务传感器最好是相互补充。网络传感器提供其他传感器所没有记录的信息,而主机和服务传感器记录实际的事件。
在第1章中曾经说过,传感器的观察点指的是特定传感器观察到的流量。在计算机网络中,观察点指的是传感器依靠封包传输本身(通过交换机或者路由)或者通过窃听(在冲突域中)观察到的封包。有效地观测网络必须正确地建立观察点模型,所以我们必须深入网络的运营机理。
2.1.1 网络层次和观察点
网络观察点可以通过考虑流量在OSI模型的3个不同层次之间传递的方式来描述。这些层次跨越共享总线或者冲突域(第1层)、网络交换机(第2层)或者使用路由硬件(第3层)。每个层次提供不同形式的观察点和相同的实现机制。
最基本的组网方式是跨越冲突域。冲突域是一个或者多个网络接口用于传输数据的共享资源,例子包括网络集线器或者无线路由器使用的信道。冲突域的叫法是因为单独的元素可能同时发送数据,造成冲突,第2层协议包含了弥补或者避免冲突的机制。
结果是,第2层数据报文通过公共来源广播,如图2-2所示。同一个冲突域上的网络接口都回看到相同的报文,它们只选择传递给自己的报文进行翻译。tcpdump等网络捕捉工具可以混杂模式工作,记录冲突域中观察到的所有报文。
图2-2展示了跨越广播域的观察点。在图中可以看到,初始帧(A-B)在集线器中广播,集线器作为共享总线。连接到集线器的每台主机可以接收和响应这些帧,但是只有B应该这么做。符合该原则的主机C忽略并丢弃该帧。主机D以混杂模式操作,记录该帧。因此,集线器的观察点就是连接的所有地址。
共享冲突域效率很低,特别是使用以太网等异步协议时。因此,通常使用以太网交换机等2层设备,确保连接到网络的每台主机都有自己的专用以太网端口,如图2-3所示。
运行于混杂模式的捕捉工具将复制接口上接收到的所有帧,但是第2层交换机确保接口只接收明确地以该接口为目标的帧。结果如图2-3所示,从A发向B的帧为B所接收,而C和D什么也接收不到。
对这个问题有基于硬件的解决方案。大部分交换机实施某种形式的端口镜像(Port Mirroring)。除了原始目标之外,端口配置还将不同端口之间发送的帧复制到公共的镜像端口。使用镜像,你可以配置交换机,将交换机接收的每个帧的副本发送到公共的接口。不过,端口映射可能是代价很高的操作,大部分交换机限制监控的接口或者VLAN数量。
交换机的观察点是端口的功能和交换机的配置。默认情况下,任何单独端口的观察点只是从连接到端口的接口发出或者接收到的流量。镜像端口将拥有配置镜像到它的端口的观察点。
当路由成为考虑因素时,第3层的观察点比较混乱。路由是一个管理员可以配置的半自治过程,为了提供可靠性,它被设计为提供某种程度的局部自动化。此外,路由有TTL等性能和可靠性功能,这也可能影响监控。
最简单的3层观察点和2层观察点的操作方式类似。和交换机一样,路由器通过特定的端口发送流量。路由器可以配置类似映射的功能,但是不同路由器制造商使用不同的术语。3层观察点和2层观察点的主要不同是,2层关注单独的以太网地址,而在第3层,接口通常关注IP地址块,因为路由器接口一般通过交换机或者集线器与数十台主机相连。
在处理多宿主接口(如图2-4所示的情况)时,第3层观察点变得更加复杂。到目前为止,本书讨论的所有观察点都是对称的——如果观测一个点可以看到从A到B的流量,也就可以看到从B到A的流量。而多宿主主机(如路由)有多个接口可供流量进出。
图2-4展示了多接口的例子,以及它们对第3层观察点的潜在影响。在这个例子中,A和B相互通信。A发送封包{A→B}给B,B发送封包{B→A}给A。C和D在路由器上进行监控:路由器1配置为从A到B的最短路径。路由器2配置为从B到A的最短路径 。这种配置的效果是,在C和D的观察点是不对称的。C将看到从A到B的流量,D将看到从B到A的流量,两点都无法看到双向的互动。这个例子虽然有些勉强,但是由于业务关系和网络的不可靠性,这种配置可能出现。当处理有多个互联网接口的网络时,带来的问题特别多 。
IP封包内置了超时功能:一个名为存活时间(time-to-live,TTL)的字段。每当封包穿越一个路由器(不是交换机等2层设施),TTL减1,直到为0。在大部分情况下,TTL不应该成为问题——大部分现代协议栈将TTL设置为至少64个,这远远大于穿越整个互联网所需的跳数。但是,TTL是可以人工修改的,有些攻击可能将TTL用于躲避。表2-1列出了操作系统的默认TTL值。
图2-5展示了TTL的操作方式。假定主机C和D运行于监控端口上,封包从A传送到B。而且,封包的TTL初始设置为2。第一台路由器接收封包并将其传递给第2台路由器。第2台路由器丢弃该封包,否则它将把TTL减为0。TTL不直接影响观察点,但是引入了错误的盲点——封包可以被某个传感器看到,但是由于TTL递减,后面的其他路由器无法看到它。
结果是,C可以观察到封包,但是B永远也不会接收到它,D有可能观察到该封包(取决于路由器的配置)。
物理分流器
你可以监控电缆本身,而不是配置网络硬件在专用接口上报告数据。这使用网络分流器实现,网络分流器是一种从物理上连接到电缆,复制流量供监控用的设备。网路分流器的好处是将采集和复制数据的过程移出网络硬件,但是观察点仅限于所连接的电缆。
2.1.2 网络层次和编址
网络上的实体可以有多个用于联系它们的地址。例如,主机www.mysite.com可能使用IP地址196.168.1.1和以太网地址0F:2A:32:AA:2B:14。这些地址用于在网络不同抽象层次解析主机的标识。在大部分网络中,主机拥有一个MAC(以太网)地址,和一个IPv4或者IPv6地址。
这些地址通过各种协议动态控制,不同类型的网络硬件将修改地址间的关系。最常见的例子是DNS修改,它将单一名称与多个地址关联(反之亦然),第8章将更深入地讨论。下面是网络上常用的地址。
MAC 地址
大部分2层协议(包括以太网、FDDI、令牌环、蓝牙和ATM)使用的48字节标识符。MAC地址通常以6个两位16进制数的形式记录(例如,12:34:56:78:9A:BC)。MAC地址由原始制造商分配给硬件,前24位保留用作制造商ID。作为2层地址,MAC地址不能路由;当帧通过路由器传输时,这个地址信息被路由器接口的地址信息所代替。IPv4和IPv6地址用地址解析协议(Address Resolution Protocol,ARP)与MAC地址关联。
IPv4 地址
IPv4地址(除了保留的动态地址控制之外,这些地址的更多信息参见第8章)是分配给每台可路由主机的一个32位整数。IPv4地址最经常的表现方式是句点分隔四元组格式:用句点分隔的4个0~255的整数(例如,128.1.11.3)。
IPv6 地址
IPv6是IPv4的替代方案,正在稳步推进,它修复了原始协议中的许多设计缺陷,特别是IP地址的分配。IPv6使用128位地址来标识主机。默认情况下,这些地址用一组以冒号分隔的16位16进制数描述(例如,AAAA:2134:0918:F23A:A13F: 2199:FABE:FAAF)。考虑到长度问题,IPv6地址使用了一些约定来缩短这种表现形式:前导0被删除,最常的0值序列(16位)被删除并用两个冒号代替(例如,0019:0000:0000:0000:0000:0000: 0000:0182可以简写为19::182)。
这些关系都是动态的,一个层次上的多个地址可能与另一个层次的一个地址关联。正如前面所讨论的,一个DNS名称可能通过DNS服务代理与多个IP地址关联。类似地,一个MAC地址可能通过ARP协议代理,支持多个IP地址。这种动态性可以建设性的方式使用(例如用于隧道),也可以破坏性的方式使用(例如用于欺骗)。