网络攻击看来正在日益得势。几乎每一天都会听说发生了新的针对软件漏洞的攻击,要么就是出现了一个更有效的散布垃圾邮件的方法(我的收件箱可以证明这一点),或者就是某公司或政府机构的敏感个人数据被窃这种轰动一时的事件。实现安全计算是一个永恒的挑战。我们并不缺乏挫败狡猾的黑帽黑客的技术,但他们仍然在不断地成功入侵一个又一个系统和网络。
每一类安全问题都有对应的开源解决方案或专有的解决方案。在网络入侵检测系统和网络访问控制设备(防火墙、过滤路由器等)方面尤其如此。防火墙技术的一种发展趋势是将来自入侵检测范畴的应用层检测技术与过滤网络流量的能力相结合,一些防火墙早就已经开始这么做了。本书的目的就是向读者显示Linux系统上的iptables防火墙可以充分把握这一趋势,特别是当它与一些旨在从入侵检测角度充分利用iptables的软件相结合时更是如此。
我希望《Linux防火墙》在已出版的相关著作中是独一无二的。市面上已有一些讨论Linux防火墙各个方面的优秀书籍,但就我所知,还没有一本书是专门讨论通过iptables及其提供的数据来检测(并在某些情况下挫败)攻击的。市面上还有许多介绍入侵检测的书籍,但没有一本书侧重于介绍如何真正地使用防火墙技术来辅助入侵检测过程。本书讨论的则是如何将这两种技术进行结合。
本书相关信息:http://www.cnblogs.com/turingbooks/archive/2009/04/20/1439824.html
我会在书中用大量的篇幅来介绍3个开源软件项目,它们旨在最大限度地发挥iptables的效力以检测和防御攻击。这3个项目是:
q psad——iptables日志分析程序和积极回应工具;
q fwsnort——将Snort规则转换为等价的iptables规则的脚本;
q fwknop——iptables的单数据包授权(SPA)的一个实现。
所有这些项目都是按照GNU公共许可证(GPL)的规定以开源软件的形式发布的,它们都可以从http://www.cipherdyne.org网站上下载。
为什么要使用iptables来检测攻击
ROSENCRANTZ:我是说,你们到底做什么呢?
PLAYER:平时,我们或多或少做些自己份内的事情。在舞台上,我们按剧情要求进行表演。
其实每一个出口也可以是一个入口,如果你能这么看待的话,那事情就圆满了。
——汤姆·斯托帕德《君臣人子小命呜呼》
如果你运行的是Linux操作系统,那么很有可能遇到过iptables防火墙。我这么说是有充分理由的,因为iptables提供了一个有效的手段来控制谁可以并如何通过网络连接到Linux系统。在因特网这个浩瀚自由的网络中,攻击可以来自全球的任何一个角落——虽然作恶之人可能就在附近。如果运行一个联网的Linux主机,系统时时刻刻都将冒着被攻击和入侵的危险。
部署一个严格的iptables过滤策略是维护一个强大安全实体的第一步。即使你的Linux系统所连接的网络已受到上游的另一个防火墙或其他过滤设备的保护,但该上游设备总是有可能无法提供足够的保护。比如这类设备可能配置不当,也可能遇到bug或其他故障,或不具备防御某类攻击的能力。所以在有可能的情况下实现一定程度的冗余是非常重要的,在每个Linux系统(服务器和桌面机)上运行iptables所带来的安全利益要大于因此所付出的额外管理开销。换句话说,在Linux基础设施中部署并维护iptables所付出的成本肯定要小于系统被入侵或有价值的数据丢失所带来的损失。
本书的主要目标是向读者显示如何从检测和回应网络攻击的角度来最大限度地利用iptables。采用iptables策略对用户访问Linux系统上服务的行为进行限制是完成这个目标的第一步,但你将很快看到还需要做更多的事情。
专用的网络入侵检测系统怎么样
对入侵进行检测的工作通常是留给专门的系统来处理的,它们就是为这个目的设计的,并且它们对本地网络有着广泛全面的了解。本书并不主张改变这个策略。专用的网络入侵检测系统(IDS)作为负责保护网络安全的基础设施的一部分,其地位是不可替代的。此外,IDS可以收集到的原始数据包中的数据是一个宝贵的数据源。每当安全分析员需要搞清楚在攻击或系统入侵中究竟发生了什么时,原始数据包中的数据是至关重要的,可用于顺藤摸瓜,而来自IDS的事件则可以指明调查的方向。如果没有IDS对可疑活动发出警告,分析员可能完全不会想到系统遭受到了攻击。
本书主张的是将iptables作为现有入侵检测基础设施的一个补充。虽然iptables主要用于对网络流量加以策略限制,而不是检测网络攻击,但它所提供的强大功能使其能够模拟一些传统上只属于入侵检测范畴的重要功能。例如,iptables的日志格式提供了网络层和传输层首部中几乎所有字段(包括IP和TCP选项)的详细数据,而且iptables的字符串匹配功能可以针对应用层数据执行字节序列的匹配。这类功能对于检测入侵企图是至关重要的。
入侵检测系统通常都是被动设备,它们没有被配置为针对可能怀有恶意的网络流量自动采取任何惩罚行动。一般而言,这么做是有充分理由的,因为这可以避免误将正常的流量看作怀有恶意的流量(即误报)。但也有一些IDS可以被部署为线内模式,当系统以这种方式部署时,通常就称为网络入侵防御系统(IPS)[①]。因为iptables是一个防火墙,所以它总是以线内模式运行的,这使得它可以在许多攻击造成重大损失之前将它们过滤掉。出于保障网络的基本连通性和网络性能的考虑,许多机构一直在犹豫是否在它们的网络基础设施中部署一个线内模式的IPS,但在某些情况下,基于应用层检查条件来过滤流量又是非常有用的。在Linux系统上,iptables可以通过将IDS签名转换进iptables策略以阻止网络攻击的方式来提供基本的IPS功能。
纵深防御
纵深防御是一个从军事上借用的原则,它常在计算机安全领域中应用。它规定我们必须在一个任意系统的各个层次都考虑到受攻击的可能性,攻击可能来自于计算机网络或一个实际的军事设施等各个方面。没有任何事情可以确保攻击绝不会发生。而且,一些攻击可能会成功地入侵或破坏一个系统的某些组件。因此,在系统中的各个层次部署多级防御机制是非常重要的,这样一来,当攻击入侵了一个安全设备时,另一个设备仍能正常工作以阻止它造成更多的损害。
在网络安全领域,最优秀的开源入侵检测系统是Snort,许多商业厂商也生产了优秀的防火墙和其他过滤设备。但如果你的基础设施中运行的是Linux系统,那么你需要考虑的真正问题是仅仅依靠这些安全机制来保护关键资产是否明智。纵深防御原则表明iptables可以作为对现有安全基础设施的一个重要补充。
先决条件
本书假设读者比较熟悉TCP/IP网络概念和Linux系统管理。如果读者对OSI参考模型、主要的网络层和传输层协议(IPv4、ICMP、TCP和UDP)以及DNS和HTTP应用层协议也比较了解的话,会对理解本书的内容很有帮助。虽然书中会经常提到OSI参考模型中的各层,但主要讨论的是其中的网络层、传输层和应用层(分别对应的是第3、4和7层),会话层和表示层在书中没有提及,物理层和数据链路层只是简略提到(有关第2层过滤的详细信息可以在http://ebtables.sourceforge. net上找到)。本书对网络层、传输层和应用层的涵盖强调了攻击可能在上述每一层中发生——我们假设读者对这些层的结构和功能都比较熟悉。虽然我们并没有专门讨论无线协议和IPv6,但书中的许多例子都同样适用于这些协议。
如果读者具备一些基本的编程实践(尤其是Perl和C编程语言),那么对理解本书的内容也将是有益的,书中的代码示例一般都会被细分和解释。书中有些地方还会显示由tcpdump以太网嗅探器捕获到的原始数据包中的数据,因此若用过以太网嗅探器(如tcpdump或Wireshark)也将有助于你阅读本书。除了上面提到的这些内容以外,我们并不要求读者必须具备计算机安全、网络入侵检测或防火墙概念的知识才能阅读本书。
最后,因为本书主要讨论的是对网络攻击的检测和回应,所以书中一般不讨论主机级的安全问题,如通过删除编译器来加固运行iptables的系统、大量削减用户账号、打上最新的安全补丁,等等。Bastille Linux项目(见http://www.bastille-linux.org)提供了很好的主机安全方面的信息。对于真正的核心安全员来说,美国国家安全局的SELinux发行版(见http://www.nsa.gov/selinux)在这方面是个很好的榜样,它从系统中最重要的组件——内核本身开始增强系统的安全性。
技术参考
下面列出的都是一些优秀的技术参考书籍,它们为本书所介绍的内容提供了更多的技术细节。
q 《构建Internet防火墙》第2版(Building Internet Firewalls,Elizabeth D. Zwicky,Simon Cooper和D. Brent Chapman著,O’Reilly公司2000年出版);
q 《计算机网络》第4版(Computer Networks,Andrew S. Tannenbaum著,Prentice Hall公司,2002年出版);
q 《防火墙与Internet安全:击退狡猾的黑客》第2版(Firewalls and Internet Security:Repelling the Wily Hacker,William R. Cheswick,Steven M. Bellovin和Aviel D. Rubin著,Addison-Wesley公司2003年出版);
q 《Linux系统安全》第2版(Linux System Security,Scott Mann和Ellen L. Mitchell著,Pearson Education公司2002年出版);
q 《Perl语言编程》第3版(Programming Perl,Larry Wall,Tom Christiansen和Jon Orwant著,O’Reilly公司2000年出版);
q 《网络安全监控之道:超越入侵检测》(The Tao of Network Security Monitoring:Beyond Intrusion Detection,Richard Bejtlich著,Addison-Wesley公司2004年出版);
q 《TCP/IP指南》(The TCP/IP Guide,Charles M. Kozierok著,中文版人民邮电出版社2008年出版);
q 《TCP/IP详解,卷1:协议》(TCP/IP Illustrated,Volume 1:The Protocols,W. Richard Stevens著Addison-Wesley公司1994年出版)。
有关网站
本书中包含一些示例脚本、iptables策略和命令、网络攻击案例和相关的数据包捕获。所有这些材料都可以在本书的网站http://www.cipherdyne.org/LinuxFirewalls上下载。拥有这样一份电子副本是自己修改并试验本书中的概念和代码的最佳方式。该网站还提供了psad、fwsnort和fwknop项目的使用示例和文档,以及使你能够查看每个项目源代码的Trac接口(http://trac.edgewall.com)。每个项目的源代码都被小心地保存在一个Subversion版本库(http://subversion.tigris.org)中,使我们可以很容易地看出代码是如何从一个版本改进到下一个版本的。最后,读者还可以在该网站上找到一些有趣的iptables日志数据的图形表示。
如果在阅读本书时有任何问题,你还可能在本书的网站上找到答案,当然也可以直接问我,我的电子邮件地址是[email protected]。
每章摘要
你在阅读本书的过程中将接触到许多内容,本节提供各章的简要概述,让你提前了解将要学习的内容。
第1章:iptables使用简介
这一章介绍如何使用iptables进行数据包过滤,包括内核编译的细节和iptables管理。这一章还提供了一个默认的策略和网络图,本书的其余章节都将参考这个策略和网络图。运行默认策略的Linux主机作为局域网(LAN)的防火墙,针对这个系统的攻击将在后续章节中说明。
第2章:网络层的攻击与防御
这一章介绍了网络层的攻击类型,以及我们的应对办法。我将向读者介绍iptables日志格式,并强调可以从iptables日志中收集到的网络层信息。
第3章:传输层的攻击与防御
传输层是使用端口扫描和端口扫射实现服务器侦查的领域,这一章将研究这些方法的内部机理。iptables的日志格式非常适合于表示传输层首部信息,这些信息可用于检测各种类型的攻击。
第4章:应用层的攻击与防御
如今的大多数攻击都是在利用位于TCP/IP协议簇顶端的日益复杂的应用层的漏洞。这一章说明了iptables可以检测到的各类应用层攻击,并介绍了iptables的字符串匹配扩展。
第5章:端口扫描攻击检测程序psad简介
这一章讨论psad的安装和配置,并展示为什么倾听iptables日志叙述的故事是那么地重要。
第6章:psad运作:检测可疑流量
psad提供了许多功能,旨在最大限度地发挥iptables日志信息的作用。psad可以检测各种可疑活动(从端口扫描到后门探测)并通过详细的电子邮件和syslog警报来报告这些活动。
第7章:psad高级主题:从签名匹配到操作系统指纹识别
这一章介绍psad的高级功能,包括集成的被动式操作系统指纹识别、通过数据包首部实现Snort签名检测、详细的状态信息和DShield报告。这一章显示了iptables日志信息在提供安全数据方面所能发挥的巨大作用。
第8章:使用psad实现积极回应
如果对入侵检测的讨论没有提及自动回应攻击,那么这样的讨论就是不完整的。psad提供的回应功能是建立在整洁的接口之上的,它使得psad与第三方软件的集成变得更加容易,这一章包括了一个psad与Swatch项目集成的例子。
第9章:转换Snort规则为iptables规则
Snort IDS向IDS社区显示了基于网络攻击的检测方法,因此在iptables中充分利用Snort签名语言是合乎逻辑的。因为iptables提供了丰富的日志记录格式和检查应用层数据的能力,所以有相当数量的Snort签名都可以转换为iptables规则。
第10章:部署fwsnort
将Snort签名转换为iptables规则的繁琐任务由fwsnort项目来自动完成。这一章将告诉你它是如何完成的。部署fwsnort将赋予你的iptables策略以入侵检测的能力。
第11章:结合psad与fwsnort
由fwsnort生成的日志信息可以被psad识别并分析,从而通过电子邮件更好地进行报告(电子邮件中包括了集成的whois、反向DNS查询以及被动式操作系统指纹识别)。这一章代表了攻击检测的最高点和iptables可以做到的减缓策略。
第12章:端口碰撞与单数据包授权
被动授权对于保持网络服务的安全正变得越来越重要。通过使用这类技术,零日攻击的破坏范围将大大受到限制,但并不是所有的被动授权模型都适用于关键部署。这一章将对比两种被动授权机制:端口碰撞和单数据包授权(SPA)。
第13章:fwknop简介
目前可以使用的SPA实现很少,fwknop是其中开发最活跃并受到广泛支持的SPA实现。这一章将讲述如何安装fwknop并将fwknop与iptables结合起来以维护默认丢弃的iptables策略,该策略将阻止所有未经验证和授权而企图连接到你的SSH守护进程的行为。
第14章:可视化iptables日志
最后一章介绍iptables日志数据的图形化表示。图形可以快速地展现网络通信中的变化趋势,揭示可能的系统入侵活动,通过将psad与AfterGlow项目相结合,可以洞悉iptables日志数据中原本难以发现的关联。
附录A:攻击伪造
剖析Snort签名规则集,然后使用伪造的源地址构造一个匹配这些签名的数据包是极其容易的。附录A讨论了一个Perl脚本示例(与fwsnort项目一起发布),该脚本就是用来做这件事情的。
附录B:一个完整的fwsnort脚本
fwsnort项目创建一个shell脚本自动执行iptables命令,必须执行这些命令才能创建一个能够检测应用层攻击的iptables策略。附录B包含了一个由fwsnort生成的fwsnort.sh脚本的完整示例。
本书采用的是一种高度实用的写法。理解概念的最好方法莫过于研究实例,而研究源代码或仔细检查数据包跟踪总是理解计算机工作原理的最佳方式。希望读者通过阅读本书,可以掌握使用iptables来检测并处理网络攻击的实用知识。再次重申,我欢迎读者向我提问,我的电子邮件地址是[email protected]。
[①] 尽管IPS有着这样一个冠冕堂皇的名字和供应商永无休止的营销炒作,但如果网络入侵防御系统没有一种方法来检测攻击,那么它就什么都不是——而检测机制就来自IDS领域。网络IPS通常只是增加了一些额外的设施来处理线内流量并回应攻击。