数据驱动的网络分析

978-7-115-37671-8
作者: 【美】Michael Collins
译者: 姚军
编辑: 傅道坤

图书目录:

详情

传统上,系统和网络管理员都是通过一些常规工具来监控网络的运行情况,而由于现代网络的复杂化,这些工具已经难以胜任。本书讲解了一些用来收集、分析数据的技术和工具,借助这些工具,可以迅速定位网络中的问题,并采取相应的行动,以保障网络的运行安全。

图书摘要

版权信息

书名:数据驱动的网络分析

ISBN:978-7-115-37671-8

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

著    [美] Michael Collins

译    姚 军

责任编辑 傅道坤

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315


Copyright © 2014 by O’Reilly Media. Inc.

Simplified Chinese Edition, jointly published by O’Reilly Media, Inc. and Posts & Telecom Press, 2014. Authorized translation of the English edition, 2011 O’Reilly Media, Inc., the owner of all rights to publish and sell the same.

All rights reserved including the rights of reproduction in whole or in part in any form.

本书中文简体字版由O’Reilly Media, Inc.授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式复制或抄袭。

版权所有,侵权必究。


传统的入侵检测和日志文件分析已经不再足以保护当今的复杂网络,本书讲解了多种网络流量数据集的采集和分析技术及工具,借助这些工具,可以迅速定位网络中的问题,并采取相应的行动,保障网络的运行安全。

本书分为3部分,共15章,内容包括数据采集的常规过程,用于采集网络流量的传感器,基于特定系统的传感器,数据存储和分析,使用互联网层次知识系统(SiLK)分析NetFlow数据,用于安全分析的R语言简介、入侵检测系统的工作机制以及实施,确定实施攻击的幕后真凶,探索性数据分析以及数据可视化,检查通信流量和行为,获取网络映射和库存盘点的详细过程等。

本书适合网络安全工程师和网络管理人员阅读。


O’Reilly Media通过图书、杂志、在线服务、调查研究和会议等方式传播创新知识。自1978年开始,O’Reilly一直都是前沿发展的见证者和推动者。超级极客们正在开创着未来,而我们关注真正重要的技术趋势——通过放大那些“细微的信号”来刺激社会对新科技的应用。作为技术社区中活跃的参与者,O’Reilly的发展充满了对创新的倡导、创造和发扬光大。

O’Reilly为软件开发人员带来革命性的“动物书”;创建第一个商业网站(GNN);组织了影响深远的开放源代码峰会,以至于开源软件运动以此命名;创立了《Make》杂志,从而成为DIY革命的主要先锋;公司一如既往地通过多种形式缔结信息与人的纽带。O’Reilly的会议和峰会集聚了众多超级极客和高瞻远瞩的商业领袖,共同描绘出开创新产业的革命性思想。作为技术人士获取信息的选择,O’Reilly现在还将先锋专家的知识传递给普通的计算机用户。无论是通过书籍出版、在线服务或者面授课程,每一项O’Reilly的产品都反映了公司不可动摇的理念——信息是激发创新的力量。

“O’Reilly Radar博客有口皆碑。”

      ——Wired

“O’Reilly凭借一系列(真希望当初我也想到了)非凡想法建立了数百万美元的业务。”

      ——Business 2.0

“O’Reilly Conference是聚集关键思想领袖的绝对典范。”

      ——CRN

“一本O’Reilly的书就代表一个有用、有前途、需要学习的主题。”

      ——Irish Times

“Tim是位特立独行的商人,他不光放眼于最长远、最广阔的视野并且切实地按照Yogi Berra的建议去做了:‘如果你在路上遇到岔路口,走小路(岔路)。’回顾过去Tim似乎每一次都选择了小路,而且有几次都是一闪即逝的机会,尽管大路也不错。”

      ——Linux Journal


这是一本关于网络的书籍:监控、研究网络,并使用研究的结果改进网络。这里所说的“改进”是指让网络更安全,但是我还没有足够的词汇或者知识,自信地描述这一点——至少现在还没有。为了实现安全性,我们试图实现更为容易量化和描述的某种目标:态势感知(situational awareness)。

态势感知这个术语主要是用于军事领域,准确的意思是了解你展开行动的环境。对于我们的目标,态势感知包括理解网络的组成部分,以及这些组成部分的使用方式。这种感知往往和网络的配置和原始设置方式有根本的不同。

为了理解态势感知在信息安全中的重要性,我希望你考虑一下自己的家,计算一下房子里Web服务器的数量。你是否在计算中包括了无线路由、电缆调制解调器和打印机?你是否考虑了通用UNIX打印系统(CUPS)的Web界面?是否考虑了电视机?

对于许多IT经理来说,上面列出的许多设备都没有登记成“Web服务器”。但是,嵌入式的Web服务器也使用HTTP,它们有已知的漏洞,随着专用控制协议被Web界面所代替,这些服务器越来越常见。攻击者常常会进入嵌入式系统,却没有意识到它们是什么——数据采集与监控(SCADA)系统是一种包含两个有趣的附加目录的Windows服务器,而核磁共振(MRI)机器则完全可以用于垃圾邮件制造。

本书的主题是采集和研究网络上的数据,以理解网络的使用情况,重点在于分析——这是获取安全数据,用于做出可操作决策的过程。我在此强调“可操作”一词,是因为安全决策实际上就是对行为的限制。安全策略告诉人们不应该做哪些事(或者从义务的角度说,告诉人们必须做什么):不要使用Dropbox保存公司数据,使用密码和RSA软件狗登录,不要复制整个项目服务器、出售给竞争对手。当我们做出安全决策时,就会对人们的工作方式作出干预,为此,我们最好有正当、可靠的理由。

所有安全系统最终依赖于用户对安全重要性的认识,以及对其必然带来的限制的接受。安全取决于人:取决于系统用户对规则的遵守,取决于分析人员和监控人员在规则被破坏时能够发现。安全几乎不算是个技术问题——信息安全的主要问题就是有创意的人们不断找出新的方法来违规使用技术,面对这种不断变化的威胁,你需要来自防御人员和用户的协作。糟糕的安全策略会导致用户不断地躲避检测,以便完成其工作,或者使用户不停地发脾气,这只会给你的防御人员带来额外的负担。

对可操作性的强调和实现安全性的目标,是本书与数据科学的一般教科书之间的区别。关于分析的部分介绍了从多种其他学科借用的统计和数据分析技术,但是总体的焦点是理解网络的结构,和可以用于保护它的决策。为了达到这一目的,我已经尽可能地忽略理论,将重点放在辨别恶意行为的机制上。安全分析有一个独特的问题:你所观察的目标不仅知道自己正在被监视,而且还会尽一切可能阻止这种监视。

 

MRI和总裁的便携电脑

几年以前,我和一位主要关注大学医院的分析人员交谈过。他告诉我,他的网络上最常被控制的机器是核磁共振(MRI)机。现在回想起来,这很容易理解。

他告诉我:“想一想,MRI是医疗设备,这意味着它使用的是特殊版本的Windows。所以,每周都有人攻击和入侵它,在上面安装僵尸程序(Bot)。垃圾邮件通常在周三左右开始出现。”当我问他为什么不阻止该机访问互联网,他耸耸肩,告诉我医生们想要得到扫描的结果。他是我碰到的第一位有这种问题的分析人员,但不是最后一个。

我们在任何有着高层人物(医生、资深合伙人、总裁)的组织中都常常发现这种问题。你可以构建任何保护措施,但是如果总裁希望在周末借走便携电脑,让他的孙女上“尼奥宠物”网站,你在周一就可能需要维修一台受到感染的电脑。

 

这里我有一句潜台词,下面将作详细的说明。我坚定地相信,防护网络的最有效手段是只加固和防护你必须要加固和防护的东西。我相信这一点是因为信息安全始终要求人们接受监控和调查——攻击手段变化太快,当我们采用自动化防御时,会发现攻击者现在可以利用它们来攻击我们。

作为安全分析人员,我坚定地相信,安全应该是令人感到不便、精心定义和强制性的。安全应该是一种人为的行动,并被扩展到必须得到保护的资产上。之所以是人为的行动,是因为任何安全系统中的最后一道防线都是系统中的人——完全参与安全工作的人应该是不轻信的、多疑的,而且要不断寻找可疑的行为。这不是快乐的生活方式,所以,为了使生活变得可以忍受,我们必须将安全措施限制在必须受到保护的实体上。如果试图监控任何事物,你就失去了帮助你保护真正重要资产的武器。

因为安全会带来不便,高效的安全分析人员必须说服人们,告诉他们必须改变常规的操作、服从规定,否则的话,为了避免未来攻击的发生,他们的工作就要受到限制。为了实现这个目标,分析人员必须确定决策,生成支持信息,并且向他们的听众阐述可能的风险。

正如本书中所描述的,数据分析过程的重点是拓展安全知识,以便作出有效的安全决策。这些决策可能用于诉讼:重现事实,确定为何发生攻击,攻击的进展程度以及产生的破坏。这些决策也可能是前瞻性的:开发限速器、入侵检测系统,或者可以限制网络攻击者的策略。

信息安全分析是一个年轻的学科,我实际上还不能对任何清晰定义的知识点说“我了解这些”。本书的意图是为我和其他人在过去10年中曾经使用过并且坚持使用的分析技术提供简单的描述。

本书的目标读者是网络管理员和运营安全分析人员,在网络运营中心工作的人员和经常面对IDS控制台的人。我希望,你对TCP/IP工具(如netstat)有所熟悉,并具备一些基本的统计和数学技能。

此外,我期望你熟悉脚本语言。在本书中,我将Python作为组合工具的语言。这些Python代码是说明性的,没有Python背景的人也能理解,但是我们假定你具备在所选语言中创建过滤器或者其他工具的能力。

在本书的编写过程中,我加入了来自不同学科的技术。只要有可能,我就会加入对原始来源的引用,便于读者阅读这些素材,寻找其他方法。这些技术中很多都涉及数学和统计方法,我有意将它们控制在功能层面,而不是详细地介绍这些方法的起源。不过,对统计学的基本了解是很有帮助的。

本书分为3个部分:数据、工具和分析。数据部分讨论采集和组织数据的过程,工具部分讨论一些支持分析过程的不同工具,分析部分讨论不同的分析方案和技术。

第1部分讨论数据的采集、存储和组织。数据存储和后勤保障是安全分析中至关重要的问题,采集数据很容易,但是搜索和寻找真正的现象很难。数据需要占用空间,而且很有可能采集了太多数据,导致无法进行有意义的搜索。这部分包括如下章节。

第1章

本章讨论数据采集的常规过程,为探索不同传感器采集和报告信息以及它们之间的相互作用提供了一个框架。

第2章

本章扩展第1章的讨论,重点在于采集网络流量数据的传感器。这些传感器(包括tcpdump和NetFlow)提供了网络活动的全面视图,但是由于重现网络流量很困难,所以往往不容易解读。

第3章

本章讨论特定系统上的传感器,如基于主机的入侵检测系统和来自HTTP等服务的日志。虽然这些传感器涵盖的流量远远少于网络传感器,但是它们提供的信息通常更容易理解,需要的解读和猜测也较少。

第4章

本章讨论保存流量数据的工具和机制,包括传统数据库、Hadoop等大数据系统,以及图形数据库和REDIS等专用工具。

第2部分讨论一些用于分析、可视化和报告的不同工具。这一部分描述的工具在后面的章节中讨论不同分析方法时经常被引用。

第5章

互联网层次知识系统(System for Internet-Level Knowledge,SiLK)是卡内基•梅隆大学的计算机安全应急响应组(CERT)开发的一个流量分析工具包。本章讨论SiLK和使用该工具分析NetFlow数据的方法。

第6章

R是一个统计分析和可视化环境,可用于有效地探索几乎所有可以想象的数据源。本章提供了R环境的基本知识,并讨论如何使用R进行基本统计分析。

第7章

入侵检测系统(IDS)是一种自动化分析系统,它们检查流量,在发现可疑行为时发出警报。本章主要介绍IDS的工作原理、检测错误对IDS警报的影响,以及使用SiLK等工具实现IDS或者配置Snort等现有IDS,构建更好的检测系统的方法。

第8章

分析中较为常见且令人沮丧的工作之一是找出IP地址的来源,或者某个特征的含义。本章的重点是可用于识别网络流量中地址、名称和其他标记的所有者和来源的工具及调查方法。

第9章

本章简单介绍一些可用于分析、但不适合于前面几章的专用工具。这些工具包括专用的虚拟化工具、封包生成和操纵工具,以及分析人员应该熟悉的其他工具。

本书的最后一部分主要介绍所有数据采集工作的目标:分析。这些章节讨论可用于检查数据的各种不同流量现象和数学模型。

第10章

探索性数据分析(Exploratory Data Analysis,EDA)是检查数据,以确认异常现象结构的过程。因为安全数据经常变化,EDA是任何分析人员的必要技能。本章为用于研究数据的基本可视化和数学技术提供基础。

第11章

本章关注通信中所犯的错误,以及将这些错误用于识别扫描等现象的方法。

第12章

本章讨论通过检查一段时间的流量水平和通信行为,可以完成的分析。这包括DDoS和数据库攫取等攻击,以及工作日对流量水平的影响和过滤流量,提高分析效率的机制。

第13章

本章讨论将网络流量转换为图形数据,以及使用图形识别网络的重要结构的方法。可以使用集中度等图属性,找出重要的主机或者异常的行为。

第14章

本章讨论确定哪些流量通过网络中服务端口的技术。这包括端口号等简单查找,以及标志提取(Banner Grabbing)和预期数据包尺寸的研究。

第15章

本章讨论网络库存清单制作和识别网络中重要主机的详细过程。网络映射和库存清点是信息安全中的重要步骤,应该定期进行。

 

 提示 

该图标表示一个提示、建议或者一般的注解。

 

 

 警告 

该图标表示警告或者注意事项。

 

补充材料(代码示例、练习等)可以从https://github.com/mpcollins/nsda_examples下载。

本书的目的是为了帮助读者完成工作。一般而言,你可以在你的程序和文档中使用本书中的代码,而且也没有必要取得我们的许可。但是,如果你要复制的是核心代码,则需要和我们打个招呼。例如,你可以在无需获取我们许可的情况下,在程序中使用本书中的多个代码块。但是,销售或分发O’Reilly图书中的代码光盘则需要取得我们的许可。通过引用本书中的示例代码来回答问题时,不需要事先获得我们的许可。但是,如果你的产品文档中融合了本书中的大量示例代码,则需要取得我们的许可。

在引用本书中的代码示例时,如果能列出本书的属性信息是最好不过。一个属性信息通常包括书名、作者、出版社和ISBN。例如:“Network Security Through Data Analysis, by Michael Collins (O’Reilly). Copyright 2014 Michael Collins, 978-1-449-3579-0.”

在使用书中的代码时,如果不确定是否属于正常使用,或是否超出了我们的许可,请通过permissions@oreilly.com与我们联系。

如果你想就本书发表评论或有任何疑问,敬请联系出版社:

美国:

O’Reilly Media Inc.

1005 Gravenstein Highway North

Sebastopol, CA 95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

欢迎登录我们的网站(http://www.oreilly.com),查看更多我们的书籍、课程、会议和最新动态等信息。

Facebook: http://facebook.com/oreilly

Twitter: http://twitter.com/oreillymedia

YouTube: http://www.youtube.com/oreillymedia

Safari在线图书是一个按需订阅的数字图书馆,以图书和视频的方式分发技术和商业领域中世界一流作者的专家级内容。

技术专家、软件开发人员、Web设计人员和业务及创意专家们都将Safari Books Online当作研究、问题解决、学习和认证培训的主要资源。

Safari Books Online为组织、政府机构和个人提供一系列产品组合和定价计划。订阅者可以从来自O’Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology等几十家出版商的可搜索数据库访问数千种书籍、培训视频和发行前手稿。关于Safari Books Online的信息,可以访问我们的网站http://www.safaribooksonline.com/。

我必须感谢编辑Andy Oram的支持和反馈,没有他的工作,我可能仍在一次又一次地重写有关网络观测的报道。感谢助理编辑Allyson MacDonald 和Maria Gulick,感谢他们辛勤劳动,帮助我完成本书的编辑工作。我还要感谢技术评审们:Rhiannon Weaver、Mark Thomas、Rob Thomas、Andre DiMino和 Henry Stern。他们的意见帮助我改正了错误,并将焦点放在重要的问题上。

本书是吸取运营中心和实验室中的大量经验的一次尝试,在此过程中得到了许多这两方面人士的帮助。下面的排名不分先后:Tom Longstaff、Jay Kadane、Mike Reiter、John McHugh、Carrie Gates、Tim Shimeall、Markus DeShon、Jim Downey、Will Franklin、Sandy Parris、Sean McAllister、Greg Virgin、Scott Coull、Jeff Janies和Mike Witt。

最后,我要感谢我的父母James和Catherine Collins。在本书写作的过程中,父亲去世了;过去,他不断向我提出问题,由于不理解问题的答案,所以总是打破砂锅问到底,直到获得答案为止。


本部分讨论用于分析和响应的数据的采集和存储。高效的安全分析需要从许多不同来源采集数据,每个来源都提供网络上发生的特定事件全貌的一部分。

为了理解不同数据来源的需求,考虑一下最现代化的僵尸程序(Bot),这是一种多功能的软件系统,僵尸程序可以使用多种技术渗透和攻击网络上的其他主机,这些攻击可能包括缓冲区溢出、通过网络共享传播和简单密码破解。利用密码尝试攻击SSH服务器的僵尸程序可能会被主机的SSH日志文件记录下来,提供攻击的明确证据,但是对于僵尸程序所做的其他事情没有任何信息记录。网络流量不能重现会话,但是可以告诉你攻击者的其他操作,例如包括成功地与一台主机建立了长时间的会话,而该主机却从未报告会话的进行。

数据驱动分析的核心问题是,必须采集足够的数据才能够重现少数事件,但是又不能采集过多的数据,使得查询无法进行。数据采集极其简单,但是采集到有意义的数据却要比这难得多。在安全领域,这个问题因为少数真正的安全威胁而变得更加复杂。大部分网络流量是无害和重复的:大量电子邮件、每个人都看同一个YouTube视频、文件访问。在少数真正的安全攻击中,大部分是很愚蠢的,例如盲目地扫描空的IP地址。另外的一小部分则代表着真正的威胁,比如文件泄漏和僵尸网络通信。

我们在本书中的所有数据分析都与I/O相关。这意味着,分析数据的过程包括定位正确的数据,然后提取它。在数据中搜索需要花费很多时间,而且数据会占据空间:一条OC-3每天能够产生5TB的原始数据。相比之下,一个eSATA接口每秒可以读取0.3GB的数据,如果你在不同的磁盘上读写数据 ,在上述数据中执行一次搜索需要几个小时。从多个来源采集数据会造成冗余,这会占用更多磁盘空间,增加查询时间。

精心设计的存储和查询系统能够帮助分析人员对数据进行任何查询,在合理的时间内得到响应 。设计不佳的系统则会在查询上花费比采集数据更多的时间。开发好的设计需要理解不同传感器采集数据的方法,它们相互补充、复制和干扰的情况,以及高效地存储数据以便进行分析的方法。本部分的重点就是这些问题。

本部分分为4章。第1章是数据采集一般过程的简介,还要介绍描述不同传感器相互作用的词汇。第2章讨论从网络接口采集数据的传感器,如tcpdump 和 NetFlow。第3章关注主机和服务传感器,这些传感器采集服务器或者操作系统等进程的数据。第4章讨论采集系统的实现和可用选项——从数据库到更现代化的大数据技术。


高效的信息监控是建立在从多个传感器采集的数据之上的,传感器是许多不同的人为了不同的目的创建的,能够生成不同类型的数据。传感器可以是从网络分流器到防火墙日志的任何东西,它能够采集有关网络的信息,可以用来对网络的安全性做出判断。构建一个实用的传感器系统,必须在完整性和冗余性上取得平衡。完美的传感器系统应该是完整且无冗余的:完整指的是每个事件都得到有意义的描述,而无冗余意味着传感器不会重复事件的相关信息。这些目标可能无法实现,但是它们是确定监控解决方案构建方法的标志。

没有一种传感器是全能的。基于网络的传感器提供广泛的覆盖范围,但是可能受到流量工程的欺骗,无法描述加密流量,只能粗略估计主机上的活动,基于主机的传感器为它们所针对的现象提供更为广泛和精确的信息。为了有效地组合传感器,我从3个方面对它们进行分类。

观察点

传感器在网络中的位置。具有不同观察点的传感器将会看到同一个事件的不同部分。

领域

传感器提供的信息,可能是有关主机、主机上的服务或者网络的信息。具有相同观察点,但是所处领域不同的传感器可以提供相同事件的补充数据。对于某些事件。你可能只能从一个领域得到信息。例如,主机监控是发现主机曾经被物理访问的唯一手段。

操作

传感器决定报告信息的方式。它可能只记录数据,提供事件或者操纵产生数据的流量。具有不同操作的传感器可能相互干扰。

传感器的观察点描述它所能观察的封包(Packet)。观察点由传感器位置和网络路由基础架构之间的相互作用确定。为了理解影响观察点的现象,见图1-1,图中描述了一些由大写字母区分的单独传感器。按照顺序,这些传感器的位置如下。

图1-1 一个简单网络上的观察点和图形表示

A

监控连接路由器和互联网的接口。

B

监控路由器连接到交换机的接口。

C

监控路由器连接到IP地址128.2.1.1的主机的接口。

D

监控主机128.1.1.1。

E

监控由交换机操作的一个映射端口(Spanning port)。映射端口记录通过交换机的所有流量(映射端口的更多信息参见第2章有关端口映射的小节)。

F

监控交换机和集线器之间的接口。

G

采集主机128.1.1.2 上的HTTP日志数据。

H

嗅探集线器上的所有TCP流量。

上述传感器各有不同的观察点,根据这些观察点,能够看到不同的流量。你可以将网络的观察点转换成简单的节点— 链接图(如图1-1右下角所示),然后跟踪节点之间的链接,粗略地描述网络的观察点。链接可以记录穿过它前往目标的任何流量。例如,在图1-1中有以下链接。

注意,没有任何一个传感器能够全面覆盖该网络。而且,测量要求处理冗余流量。例如,如果我测量H和E,就会两次看到128.1.1.3到128.1.1.1的流量。选择正确的观察点需要在流量的完全覆盖和不陷入冗余数据之间求得平衡。

测量一个网络时,确定观察点是一个三步骤过程:获得网络拓扑图,确定潜在观察点,然后确定最优的覆盖。

第一步包括获得网络拓扑图,以及网络的连接方法和潜在测量点的列表。图1-1是这种拓扑图的简化版本。

第二步确定每个点的观察点,包括确定网络上潜在的可测量点,然后确定该位置所能看到的流量。这可以表示为IP地址/端口范围的组合。

表1-1提供了图1-1库存清单的示例。可以先用一个图形猜测观察点所能看到的流量,但是真正准确的模型需要有关路由和网络硬件的更深入信息。例如,在处理路由器时,可能发现观察点不对称的位置(注意,表1-1中的流量全是对称的)。更多信息参见2.1小节。

表1-1 展示图1-1中观察点的工作表

观 察 点

源IP范围

目标IP范围

A

Internet

128.1, 2.1.1-32

128.1, 2.1.1-32

Internet

B

128.1.1.1-32

128.2.1.1, Internet

128.2.1.1, Internet

128.1.1.1-32

C

128.2.1.1

128.1.1.1-32, Internet

128.1.1.1-32, Internet

128.2.1.1

D

128.1.1.1

128.1.1.2-32, 128.2.1.1, Internet

128.1.1.2-32, 128.2.1.1, Internet

128.1.1.1

E

128.1.1.1

128.1.1.2-32, 128.2.1.1, Internet

128.1.1.2

128.1.1.1, 128.1.1.3-32, 128.2.1.1,Internet

128.1.1.3-32

128.1.1.1-2,128.2.1.1, Internet

F

128.1.1.3-32

128.1.1.1-2, 128.2.1.1, Internet

128.1.1.1-32, 128.2.1.1, Internet

128.1.1.3-32

G

128.1,2.1.1-32, Internet

128.1.1.2:tcp/80

128.1.1.2:tcp/80

128.1,2.1.1-32

H

128.1.1.3-32

128.1.1.1-32, 128.2.1.1,Internet

128.1.1.1-32, 128.2.1.1, Internet

128.1.1.3-32

最后一步是选择工作表所展示的最优观察点。目标是选择一组提供最小冗余的监控点。例如,传感器E提供了传感器F所提供数据的一个超集,也就是说,没有必要把两者都包含进来。观察点的选择总是涉及对某些冗余的处理,这有时候受到过滤规则的限制。例如,为了测量128.1.1.3~32之间主机的流量,必须测量H点,这些流量在E、F、B和A点也再次出现。如果在那些测量点的传感器被配置为不报告来自128.1.1.3~32的流量,冗余的问题也就没有意义了。

图1-1中的传感器G与其他传感器不同,同时假定网络上的其他传感器记录所有网络流量,而G只记录HTTP流量(tcp/80)。其他传感器采集网络流量数据,而G采集的是不同领域的数据。传感器的领域描述了它所记录的信息的范围。传感器可以采集3个领域的数据。

网络

这个领域采集的是关于网络流量的信息。这种传感器的例子包括VPN、大部分入侵检测系统(IDS)、NetFlow采集器(如YAF,参见5.11.1小节)和TCP采集器(如Snort和tcpdump采集的原始数据)。

主机

驻留在主机上,监控主机上的活动:登录、注销、文件访问等。基于主机的传感器可以提供基于网络的传感器所不能提供的信息,例如特定主机的物理登录,或者USB外设的使用。基于主机的传感器包括Tripwire 或者McAfee HIPS应用程序等IPS工具,以及系统日志文件或者安全日志。基于主机的传感器提供主机低级操作的相关信息,但是不能提供太多运行在主机上的服务信息。很明显,你只能在自己了解的主机上实施基于主机的传感器。必须首先找出未授权的主机,才能够监控它们。

服务

服务传感器由特定的服务进程生成,如HTTP或者SMTP服务器日志。服务传感器记录服务中形式上正常,但不一定合法的活动(例如,HTTP传感器将记录失败的URL读取,但是不会记录不发送HTTP兼容命令的80端口会话)。和主机及传感器日志(它们都是通用传感器)不同,基于服务的传感器主要记录与特定服务的交互:发送的邮件消息、服务的HTTP请求等。和基于主机的传感器一样,你必须知道存在的服务,才能使用基于服务的传感器。

 

流重组和封包解剖

有许多不同的工具可以从数据包中提取信息,取得网络流量和估算出服务日志。例如,CLF记录(详见3.3.1小节)的内容在HTTP客户端和HTTP服务器之间交换。

网络分析工具往往提供数据包解析或者会话重建机制,作为数据包深入检查的一部分。这些机制根据封包数据构建会话的模型,在没有服务日志的情况下,这些工具对估计会话中发生的情况非常有用,但是它们会遇到和网络会话重建相关的标准限制:它们不能处理加密数据,只能对会话做出估计,可能丢失和实现相关的细节,重建的过程代价高昂。与此同时,这些采集器可用于任何网络流量数据,不需要识别和观测单个服务的那些给后勤带来压力的过程。

 

注意,领域描述了传感器使用的信息,而不是传感器报告的信息。例如,NetFlow、tcpdump和基于网络的IDS传感器都工作于网络领域,但是提供的输出却互不相同。

为了理解这3个领域的不同点,考虑通过3个不同领域观察到的HTTP交互:嗅探封包的基于网络监控器,跟踪性能和文件访问的基于主机传感器,和一个HTTP服务器日志文件;网络传感器可以记录发送的数据包,但是不能关联它们,组成会话、Cookie或者页面等HTTP结构;主机传感器可以记录文件最后访问时间,但是不能将该文件与URL或者请求关联,服务传感器可以说明发生了一次HTTP会话,包含了提供的页面,但是不能记录80端口上的半开扫描。

在3个传感器中,处于服务领域的传感器是唯一能够说明特定交互发生的(除非日志遭到篡改),其他2个只能为分析人员提供猜测的根据。在同等条件下,让传感器的领域尽可能接近目标,是首选的方法。

传感器的领域和观察点决定了传感器组合的冗余程度。如果2个传感器有相同的领域,其中一个传感器的观察点是另一个传感器的超集,较小的传感器就是冗余的,不应该运行。相反,如果2个传感器有相同的观察点,但是领域不同,它们应该相互补充。

我们来看看如图1-2所示的示例网络,128.2.1.1上有一个HTTPS服务器,128.2.1.2上有一个未知的HTTP服务器,128.2.1.3上有一个客户端。

图1-2 基于主机和基于网络的传感器协同工作的例子

HTTPS服务器可以通过FTP访问,这不会被记录。我们扩展表1-1的格式,添加领域来汇总信息,如表1-2所示。

表1-2 图1-2的观察点和领域

观 察 点

源IP范围

目标IP范围

领  域

A

128.1.1.1-3

Internet

网络

12.1.1.1-3

128.1.1.1-3

网络

Internet

128.1.1.1-3

网络

B

128.1.1.2-3, Internet

128.1.1.1:tcp/443

服务/HTTPS

128.1.1.1: tcp/433

128.1.1.2-3,Internet

服务/HTTPS

现在,我们进行一些不同的攻击,看看这些传感器的反应。

不同领域中的传感器提供了比单一传感器更丰富的信息,即使这些传感器的观察点相同也是如此。基于主机的传感器提供更多信息,并且可以提供网络传感器中可能没有的数据(例如未加密的载荷)。但是,防御者必须意识到基于主机传感器的存在,才能使用它。

基于网络的传感器通常提供比基于主机传感器更多的信息,这是因为网络传感器覆盖了多台主机,而且主机可能不会对网络上发送的流量做出响应。与此同时,和其数量相比,网络数据的价值较低——想要发现发生的情况,需要观察更多的记录,而且常常难以确定主机是否真正对网络通信做出响应。网络传感器可以在发现阶段提供协助,并在基于主机传感器不能提供信息时作为备用手段。

传感器的操作(action)描述了传感器与其采集的数据进行的交互。传感器可以进行如下3种基本操作。

报告

只提供和传感器观察到的所有现象相关的信息。报告传感器很简单,对于建立基线很重要。对于警告和阻塞传感器还不能识别的现象来说,它们还有助于为这些现象开发特征码和警告。报告传感器包括NetFlow采集器、tcpdump和服务器日志。

事件

事件传感器与报告传感器的不同之处在于,它使用多种数据,生成数据某些子集的摘要——事件(event)。例如,基于主机的入侵检测系统可能检查内存映像,找出内存中的一个恶意软件特征码,发送一个事件,表示该主机受到恶意软件的侵害。在极端的情况下,事件传感器是一个黑盒,产生响应专家开发的内部进程的事件。事件传感器包括IDS和防病毒(AV)系统。

控制

控制传感器和事件传感器类似,使用多种数据,做出对该数据的评判,然后做出反应。和事件传感器不同的是,控制传感器在发送事件时修改或者拦截流量。控制传感器包括IPS、防火墙、防垃圾系统以及某些防病毒系统。

传感器的操作不仅影响传感器报告数据的方式,还影响其对观测数据的操作。控制传感器可能修改或者拦截流量。图1-3展示了这3种不同类型操作与数据的交互。该图展示了3种传感器的工作方式:R是报告传感器,E是事件传感器,C是控制传感器。事件和控制传感器是对字符串“ATTACK”(攻击)做出响应的特征匹配系统。每个传感器都放在互联网和某个目标之间。

图1-3 3种不同的传感器操作

报告传感器R只报告观察到的流量。在这个例子中,它报告正常和攻击流量,不影响流量,也不对观察到的数据进行总结。事件传感器E对正常流量不做任何操作,但是在观察到攻击流量时发起事件。E不会拦截流量,只会发送事件。控制传感器C在发现攻击流量时发送事件而不影响正常流量。除此之外,C还阻止异常流量到达目标。如果另一个传感器在C之后的路径上,它就不会发现C所拦截的流量。

 

汇聚和传输工具

在评估日志记录软件包时,检查它是否提供汇聚或者传输记录的软件很重要。这些功能不会增加响应某些现象的数据,但是可能修改记录的格式和内容。

这方面的例子包括Cisco NetFlow中汇聚功能的使用,以及flow-tools[1]中的重定向和传输工具。历史上,NetFlow用基本格式(原始流)记录,发送给某个采集器(collector),采集器将这些数据汇总成不同的报告。Flow-tools提供许多可以获得流数据,并根据需要将其路由到不同传感器的工具。

 

本章介绍的各种分类应该足以描述安全监控中使用的任何传感器,解释它们的相互作用。这些描述的意图是从较高的层次帮助运营人员开始对传感器进行分类,而无需陷入细节。在第2章和第3章,我们深入讨论观察点、领域和操作,更精确地列举它们与真实系统的关联。

[1] Flow-tools邮件列表和知识库都可以从http://bit.ly/flow-tools免费下载。——原注


网络传感器直接从网络通信中采集数据,不需要中介应用程序作为代理,这使其不同于第3章中讨论的基于主机传感器。这方面的例子包括路由器上的NetFlow传感器,以及使用tcpdump等嗅探工具采集流量的传感器。

网络流量所面临的挑战是你在所有日志数据中都会遇到的:真正的安全事件很少,而数据在时间和存储空间上都有代价。只要可能,首选日志数据,因为它清晰(日志数据记录了高级事件)而紧凑。网络流量中的相同事件必需从几百万个数据包中提取,这些数据包往往是冗余、加密或者难以理解的。与此同时,攻击者很容易操纵网络流量,在线路上形成看似合法,但是完全伪造的会话。在日志记录中300个字节的事件很容易积累多达数兆字节的网络封包数据,其中只有前10个封包具有分析价值。

这是坏消息,好消息是,网络流量是“协议无关的”(没有更好的术语),这意味着,它是找出审计盲点的最佳信息来源。基于主机的采集系统首先需要知道主机的存在,在许多情况下,只有看到线路上的流量,你才有可能知道特定服务运行。网络流量提供了最有确定性的网络视图——它告诉你网络上存在着不为人知的主机、你没有意识到的后门、攻击者已经进入了你的地盘,以及你所没有考虑到的网络路由。与此同时,当你面对零日漏洞或者新的恶意软件时,封包数据可能是唯一的数据来源。

本章余下的部分分成下面几个小节:下一小节介绍网络观察点,包括封包在网络上如何移动,在观测网络时如何利用这一点;再下一个小节介绍tcpdump——这是一个基本的网络流量捕捉协议,并提供封包采样、过滤和长度操纵的窍门;此后的一个小节介绍NetFlow,这是一种强大的流量汇总方法,提供了有关网络流量的高价值、紧凑的汇总信息;在本章的最后,我们研究一个样板网络,讨论如何利用不同的采集策略。

计算机网络采用分层设计。层(Layer)是对一组网络功能的抽象,旨在隐藏机制和实现细节。理想状况下,每个层次都是分离的实体,某层上的实现可以与另一个实现交换信息,而不会影响到更高的层次。例如,互联网协议(IP)存在于OSI模型中的第3层,IP实现在不同的2层协议(如以太网或者FDDI)上同样可以运行。

有许多不同的分层模型。最常见的是OSI的7层模型和TCP/IP的4层模型。图2-1展示了这两种模型,代表协议,以及和第1章定义的传感器领域之间的关系。正如图2-1所示,OSI模型和TCP/IP有粗略的对应关系。OSI使用如下7个层次。

图2-1 分层模型

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章中曾经说过,传感器的观察点指的是特定传感器观察到的流量。在计算机网络中,观察点指的是传感器依靠封包传输本身(通过交换机或者路由)或者通过窃听(在冲突域中)观察到的封包。有效地观测网络必须正确地建立观察点模型,所以我们必须深入网络的运营机理。

网络观察点可以通过考虑流量在OSI模型的3个不同层次之间传递的方式来描述。这些层次跨越共享总线或者冲突域(第1层)、网络交换机(第2层)或者使用路由硬件(第3层)。每个层次提供不同形式的观察点和相同的实现机制。

最基本的组网方式是跨越冲突域。冲突域是一个或者多个网络接口用于传输数据的共享资源,例子包括网络集线器或者无线路由器使用的信道。冲突域的叫法是因为单独的元素可能同时发送数据,造成冲突,第2层协议包含了弥补或者避免冲突的机制。

结果是,第2层数据报文通过公共来源广播,如图2-2所示。同一个冲突域上的网络接口都回看到相同的报文,它们只选择传递给自己的报文进行翻译。tcpdump等网络捕捉工具可以混杂模式工作,记录冲突域中观察到的所有报文。

图2-2 跨越冲突域的观察点

图2-2展示了跨越广播域的观察点。在图中可以看到,初始帧(A-B)在集线器中广播,集线器作为共享总线。连接到集线器的每台主机可以接收和响应这些帧,但是只有B应该这么做。符合该原则的主机C忽略并丢弃该帧。主机D以混杂模式操作,记录该帧。因此,集线器的观察点就是连接的所有地址。

共享冲突域效率很低,特别是使用以太网等异步协议时。因此,通常使用以太网交换机等2层设备,确保连接到网络的每台主机都有自己的专用以太网端口,如图2-3所示。

图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 处理多个接口时的观察点

图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-1 操作系统的默认TTL

操 作 系 统

TTA值

Linux(2.4, 2.6)

64

FreeBSD

64

Mac OS X

64

Windows XP

128

Windows 7, Vista

128

Solaris

225

图2-5展示了TTL的操作方式。假定主机C和D运行于监控端口上,封包从A传送到B。而且,封包的TTL初始设置为2。第一台路由器接收封包并将其传递给第2台路由器。第2台路由器丢弃该封包,否则它将把TTL减为0。TTL不直接影响观察点,但是引入了错误的盲点——封包可以被某个传感器看到,但是由于TTL递减,后面的其他路由器无法看到它。

图2-5 跳数和路由器观察点

结果是,C可以观察到封包,但是B永远也不会接收到它,D有可能观察到该封包(取决于路由器的配置)。

 

物理分流器

"你可以监控电缆本身,而不是配置网络硬件在专用接口上报告数据。这使用网络分流器实现,网络分流器是一种从物理上连接到电缆,复制流量供监控用的设备。网路分流器的好处是将采集和复制数据的过程移出网络硬件,但是观察点仅限于所连接的电缆。

 

网络上的实体可以有多个用于联系它们的地址。例如,主机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地址。这种动态性可以建设性的方式使用(例如用于隧道),也可以破坏性的方式使用(例如用于欺骗)。

在本书的语境中,封包数据实际上意味着libpcap的输出,这种输出可能是通过IDS或者tcpdump完成。libpcap最初由LBNL的网络研究组开发,是基本的网络捕捉工具,可以作为snort、bro和tcpdump等工具的采集器。

在封包捕捉数据中寻找有价值的信息如同大海捞针。这类数据的捕捉需要平衡海量的可捕捉数据和真正有意义的少数数据之间的关系。

在几乎所有现代化系统上,tcpdump将在以太网上捕捉IP,这意味着libpcap捕捉的数据实际上是包含了IP封包的以太网帧。虽然IP包含了超过80个不同的协议,但是在任何可用的网络上,绝大多数流量是从3个协议中产生的:TCP(协议 6)、UDP(协议17)和ICMP(协议 1)。

TCP、UDP和ICMP占据了IP流量的绝大部分,不过许多其他协议也可能出现在网络中,特别是在使用VPN的情况下。IANA有一个IP协议组的完整列表,其中重要的包括IPv6(协议 41)、GRE(协议 47)和ESP(协议 50)。GRE和ESP用于VPN通信。

完全的pcap捕捉往往不切实际。海量的冗余数据使得在合理的时间内保存网络流量中有意义的部分十分困难。封包捕捉数据的过滤和限制机制主要有3种:使用滚动缓存(Rolling buffers)保存同步的子样本;操纵快照长度,只捕捉固定长度的封包(例如报头);用BPF或者其他过滤规则过滤流量。每种方法都是分析上的一种妥协,各有优劣。

滚动缓存(rolling buffer)是内存中的一个位置,数据在这里循环转储:信息被顺序丢弃,当缓冲区被填满时,数据被转储到缓冲区的开始位置,这一过程重复进行。例2-1给出了tcpdump使用滚动缓冲区的例子。在本例中,该过程向磁盘写入大约128MB数据,然后轮转到一个新的文件。当32个文件被填满(由-W开关指定),过程重新开始。

例2-1 在tcpdump中使用滚动缓存

host$ tcpdump -i en1 -s 0 -w result -C 128 -W 32

滚动缓存在流量分析上实现了一个时间范围:数据只能在缓冲区中读取。因此,建议使用较小的文件尺寸,因为当你发现异常现象时,必须快速地将其从缓存中取出。

捕捉完整封包的替代方法是捕捉载荷的有限子集,在tcpdump中由快照长度(-s)参数控制。快照长度将封包限制在参数中指定的帧尺寸。如果你指定至少68个字节的帧尺寸,就能够记录TCP或者UDP报头(Header)[1]。这种解决方案不能很好地代替NetFlow(本章后面将作讨论)。

 

在交换机上进行过滤的替代方法之一是在镜像端口采集流量之后进行过滤。利用tcpdump和其他工具,这一方法很容易用伯克利封包过滤(Berkeley Packet Filtering,BPF)实现。BPF允许操作员指定任意的复杂过滤,因此你可以选择的范围非常广。本节将用实例说明一些有用的选项。图2-6提供了以太网帧、IP、UDP、ICMP和TCP报头的分解。

图2-6 以太网、IP、TCP、UDP和ICMP帧及封包格式

在我们介绍这些主要字段的时候,会指出描述和用于过滤这些字段的BPF宏。在大部分UNIX风格的系统中,pcap-filter manpage提供了BPF语法的汇总,Free BSD 的BPF manpage(http://bit.ly/bsd-manpages)中还总结了可用的命令。

在以太网帧中,最为关键的字段是两个MAC地址。这些48个字节的字段用于识别发送和接收流量的接口硬件地址。MAC地址被限制在一个冲突域中,并会在封包穿越多个网络时被修改(例见图2-5)。在BPF中,MAC地址用ether src和 ether dst谓词访问。

 

tcpdump和MAC地址

大部分tcpdump实现需要一个命令行参数,才能显示链路级(以太网)信息。在Mac OS X中,-e开关将显示MAC地址。

 

在IP报头中,你最感兴趣的字段通常是IP地址、长度、TTL和协议。IP标识符、标志和用于涉及封包重新组装攻击的分段偏移——但是,它们也是以太网成为通用传输协议之前的历史遗迹。你可以用src host和dst host谓词访问IP地址,这些谓词还可以过滤网络掩码。

BPF中的地址过滤

BPF中的地址可以使用host和net谓词过滤。为了理解这些谓词的工作方式,我们来看一个简单的tcpdump输出。

host$ tcpdump -n -r sample.pcap | head -5
reading from file sample.pcap, link-type EN10MB (Ethernet)
20:01:12.094915 IP 192.168.1.3.56305 > 208.78.7.2.389: Flags [S],
 seq 265488449, win 65535, options [mss 1460,nop, wscale 3,nop,
 nop,TS val 1111716334 ecr 0,sackOK,eol], length 0
20:01:12.094981 IP 192.168.1.3.56302 > 192.168.144.18.389: Flags [S],
 seq 1490713463, win 65535, options [mss 1460,nop,wscale 3,nop,
 nop,TS val 1111716334 ecr 0,sackOK,eol], length 0
20:01:12.471014 IP 192.168.1.102.7600 > 192.168.1.255.7600: UDP, length 36
20:01:12.861101 IP 192.168.1.6.17784 > 255.255.255.255.17784: UDP, length 27
20:01:12.862487 IP 192.168.1.6.51949 > 255.255.255.255.3483: UDP, length 37

src host或者dst host将过滤准确的IP地址,下面过滤进出192.168.1.3的流量:

host$ tcpdump -n -r sample.pcap src host 192.168.1.3 | head -1
reading from file sample.pcap, link-type EN10MB (Ethernet)
20:01:12.094915 IP 192.168.1.3.56305 > 208.78.7.2.389: Flags [S],
 seq 265488449, win 65535, options [mss 1460,nop,wscale 3,nop,
 nop,TS val 1111716334 ecr 0,sackOK,eol], length 0
host$ tcpdump -n -r sample.pcap dst host 192.168.1.3 | head -1
reading from file sample.pcap, link-type EN10MB (Ethernet)
20:01:13.898712 IP 192.168.1.6.48991 > 192.168.1.3.9000: Flags [S],
 seq 2975851986, win 5840, options [mss 1460,sackOK,TS val 911030 ecr 0,
 nop,wscale 1], length 0

src net和dst net可以过滤网络地址块。下面的例子说明如何用地址或者CIDR标记法逐步过滤192.168.1 网络中的地址:

# 使用 src net 匹配8位字节,进行过滤
host$ tcpdump -n -r sample.pcap src net 192.168.1 | head -3
reading from file sample.pcap, link-type EN10MB (Ethernet)
20:01:12.094915 IP 192.168.1.3.56305 > 208.78.7.2.389: Flags [S],
 seq 265488449, win 65535, options [mss 1460,nop,wscale 3,nop,nop,
 TS val 1111716334 ecr 0,sackOK,eol], length 0
20:01:12.094981 IP 192.168.1.3.56302 > 192.168.144.18.389: Flags [S],
 seq 1490713463, win 65535, options [mss 1460,nop,wscale 3,nop,
 nop,TS val 1111716334 ecr 0,sackOK,eol], length 0
# 匹配一个地址
host$ tcpdump -n -r sample.pcap src net 192.168.1.5 | head -1
reading from file sample.pcap, link-type EN10MB (Ethernet)
20:01:13.244094 IP 192.168.1.5.50919 > 208.111.133.84.27017: UDP, length 84
# 使用CIDR地址块匹配
host$ tcpdump -n -r sample.pcap src net 192.168.1.64/26 | head -1
reading from file sample.pcap, link-type EN10MB (Ethernet)
20:01:12.471014 IP 192.168.1.102.7600 > 192.168.1.255.7600: UDP, length 36

 

使用ip proto谓词可以过滤协议。BPF还提供各种特定于协议的谓词,如tcp、udp和icmp。封包长度可以用less和greater谓词过滤,而TTL的过滤需要更高级的位操作,后面将讨论。

下面的代码片段过滤除了来自指定网络地址块(使用24位掩码的主机)之外的所有流量。

host$ tcpdump -i en1 -s 0 -w result src net 192.168.2.0/24

例2-2演示了tcpdump的过滤。

例2-2 使用tcpdump的过滤示例

host$ # 过滤内部流量之外的所有流量
host$ tcpdump -i en1 -s 0 -w result src net 192.168.2.0/24 && dst net \
    192.168.0.0/16
host$ # 过滤由端口指定的Web流量之外的所有流量
host$ tcpdump -i en1 -s 0 -w result ((src port 80 || src port 443) && \
    (src net 192.168.2.0))

在TCP中,端口号和标志最为关键。TCP标志用于维护TCP状态机制,而端口号用于区分会话和服务标识。端口号可以用src port和dst port开关过滤,也可以用src portrange和dst portrange开关过滤端口范围。BPF支持多种TCP标志谓词,包括tcp-fin、tcp-syn、tcp-rst、tcp-push、tcp-ack和 tcp-urg。

 

地址分类和CIDR地址块

IPv4地址是一个32位的整数。为方便起见,这些整数通常使用句点分隔四元组标记法,如o1.o2.o3.o4,所以0x000010FF代表的IP地址被写作0.0.16.255。3层路由几乎从来不是对单独的地址进行的,而是对一组地址——历史上曾称作分类(Class),现在称作网段(netblock)。

A类地址(0.0.0.0~127.255.255.255)的最高位设置为0,接下来的7位分配给某个实体,剩下的24位由所有者控制。这为所有者提供了224个地址。B类地址(128.0.0.0~191. 255.255.255)将16位分配给所有者,而C类(192.0.0.0~223.255.255.255)分配8位。这种方法导致地址很快耗尽,1993年开发的无类域际路由(Classless Inter-Domain Routing,CIDR)代替了原来的分类系统。在CIDR方案中,通过地址和一个网络掩码向用户分配网段。网络掩码表示地址中用户可以操纵的位数,根据惯例,这些位被设置为0。例如,拥有192.28.3.0~192.38.3.255的用户所得到的网段为192.28.3.0/24。

 

和TCP一样,UDP端口号也是最重要的,可以用和TCP相同的port和portrange开关访问。

因为ICMP是互联网的错误信息传递协议,ICMP消息包含的数据往往极其丰富。ICMP类型和代码最为重要,它们定义了后续载荷(如果有的话)的语法。BPF提供了各种特定于类型和代码的过滤器,包括icmp-echoreply、icmp-unreach、 icmptstamp和icmp-redirect。

为了简洁起见,本书专门针对以太网上的IP,但是你可能会经常遇到其他的传输和数据协议。大部分这类协议都是专用的,其中许多种协议除了在libpcap上构建的工具之外还需要其他的捕捉软件。

ATM

异步传输模式(Asynchronous Transfer Mode,ATM)是20世纪90年代重要的IP传输协议,现在大部分用于ISDN和PSTN传输,以及一些遗留的设备。

光纤通道

光纤通道(Fibre Channel)主要用于高速存储,是各种SAN实现的支柱。

CAN

CAN是Controller Area Network(控制器区域网络)的缩写,主要和车载网络等嵌入式系统有关,CAN是一种总线协议,用于在小型的隔离网络中发送消息。

任何形式的过滤都有性能方面的代价。在交换机或者路由上使用镜像端口会牺牲性能,交换机或者路由可能将这些性能用于通信。过滤器越复杂,过滤器软件增加的开销也就越大。在带宽较大的情况下,这可能是一个问题。

NetFlow是Cisco开发的流量汇总标准,最初用于网络服务记账。虽然本意不是为了安全性,但是人们臆测NetFlow对此有益,因为它提供了紧凑的网络通信会话摘要,可以快速访问,并且包含了以相对紧凑的格式保存的最高价值信息。从1999年flow-tools软件包发布以来,NetFlow越来越多地用于安全分析,已经开发出了各种工具,这些工具为NetFlow提供了更多的字段,例如可选择的载荷片段。

NetFlow的核心是流(Flow)的概念,它与TCP会话近似。回忆前面介绍的知识,TCP会话在端点通过比较顺序号组装。在路由器判断处理多个TCP会话中包含的顺序号是不可能的,但是可以用超时值做出合理的估算。流是一组时间上很接近的同地址封包。

NetFlow v5是最早的通用NetFlow标准,在讨论替代的版本之前,有必要介绍一下NFv5的字段值。NetFlow的字段如表2-2所示,大致分为3类:直接从IP封包中复制的字段、IP封包摘要字段和与路由相关的字段。

表2-2 NetFlow v5字段

字  节

名  称

描  述

0–3

srcaddr

源IP地址

4–7

dstaddr

目标IP地址

8–11

nexthop

路由器下一跳的地址

12–13

input

输入接口SNMP索引

14–15

output

输出接口SNMP索引

16–19

packets

流中的封包数量

20–23

dOctets

流中第3层字节数

24–27

first

流开始时的sysuptime a

28–31

last

流中最后一个封包接收时的sysuptime

32–33

srcport

TCP/UDP源端口

34–35

dstport

TCP/UDP目标端口,ICMP类型和代码

36

pad1

填充

37

tcp_flags

流中所有TCP标志进行“或”运算的结果

38

prot

IP协议

39

tos

IP服务类型

40–41

src_as

源自治系统编号(ASN)

42–43

dst_as

目标自治系统编号

44

src_mask

源地址前缀掩码

45

dst_mask

目标地址前缀掩码

46–47

pad2

填充字节

a这个值是路由器系统启动时间的相对值

NetFlow记录的srcaddr、 dstaddr、 srcport、 dstport、 prot和 tos字段直接从IP封包的对应字段复制。但是,对于IP协议族中的每个协议都会生成流,这就意味着,srcport和dstport字段严格来说是TCP/UDP专用的,不一定总是有意义的。在ICMP协议中,NetFlow在dstport字段中记录类型和代码,其他协议则忽略该值。

packets、dOctets、 first、 last和 tcp_flags字段都是从一个或者多个封包中汇总而得。packets和dOctets是简单的总和,需要注意的是,dOctets值是第3层的字节总数,也就是说包含了IP和协议报头(例如,没有载荷的单封包TCP流将记录为40个字节,而没有载荷的单封包UDP流将记录为28个字节)。first和last值分别是流中第一次和最后一次观察到封包的时间。

tcp_flags的情况特殊。在NetFlow v5中,tcp_flags字段由出现在流中的所有标志进行或运算求得。在形式合法的流中,这意味着SYN、FIN和ACK标志总为高值。

最后一组字段——nexthop、input、output、src_as、dst_as、src_mask和dst_mask都与路由相关。这些值只能在路由器上采集。

“流和内容”:NetFlow v9和IPFIX

Cisco开发了NetFlow的多个版本,最终NetFlow v5成为这个标准的主力实现。但是v5是一个受限和过时的标准,主要针对IPv4,而且是在流被广泛采用之前设计的。Cisco的解决方案是NetFlow v9,这是一个基于模板的流报告标准,路由器管理员可以用它指定包含在流中的字段。

之后,基于模板的NetFlow由IETF标准化为IPFIX[2]。IPFIX提供了几百种流字段,这些字段在RFC 5102( http://bit.ly/rfc-5102)中说明。该标准优先考虑的是网络监控和流量分析,而不是信息安全。为了处理可选的字段,IPFIX有一个“供应商空间”的概念。在开发SiLK工具包的过程中,卡内基梅隆大学的CERT网络态势感知小组在他们的IPFIX空间内开发了一组安全敏感字段,提供一组用于安全分析的有用字段。

NetFlow记录由网络硬件设施(例如路由器或者交换机)直接生成,或者使用软件将封包转换为流。每种方法各有不同的优劣之处。

基于设施的生成手段使用的是硬件制造商提供的NetFlow机制。不同制造商使用类似但不同于Cisco的名称,例如Juniper Networks的Jflow和华为的NetStream。因为NetFlow由许多不同制造商提供,具有各种各样的规则,不可能在本书的范围内对必要的配置进行技术性探讨。但是,下面的经验法则值得一提。

基于路由采集的替代方法是使用应用程序,如CERT的Yet Another Flowmeter(YAF)工具(http://tools.netsa.cert.org)、softflowd (http://bit.ly/softflowd)或者QoSient Argus (http://bit.ly/qo-argus)工具提供的大量流监控工具,从pcap数据生成NetFlow。这些应用程序将Pcap当成文件,或者直接从网络接口上采集封包并将其聚合成流。此类传感器缺乏路由器的观察点,但是同时能够提供更多的处理资源,分析封包和生成更加丰富的NetFlow输出,包含深度封包检查等功能。

1.Richard Bejtlich, The Tao of Network Security Monitoring: Beyond Intrusion Detection (Addison–Wesley, 2004).

2.Kevin Fall and Richard Stevens, TCP/IP Illustrated, Volume 1: The Protocols (2nd Edition) (Addison–Wesley, 2011).

3.Michael Lucas, Network Flow Analysis (No Starch Press, 2010).

4.Radia Perlman, Interconnections: Bridges, Routers, Switches, and Internetworking Protocols (2nd Edition) (Addison–Wesley, 1999).

5.Chris Sanders, Practical Packet Analysis: Using Wireshark to Solve Real-World Problems (No Starch Press, 2011).

[1] 快照长度基于以太网帧,所以要在对应的IP报头长度上加上20个字节。——原注

[2] RFC 5101、 5102和5103。——原注


相关图书

物联网全栈开发原理与实战
物联网全栈开发原理与实战
区块链技术本质与应用
区块链技术本质与应用
网络调研技术与实战
网络调研技术与实战
区块链架构与实现:Cosmos详解
区块链架构与实现:Cosmos详解
TongWeb中间件实用教程
TongWeb中间件实用教程
2020区块链漫游指南
2020区块链漫游指南

相关文章

相关课程