多疑的企鹅 - 七款顶级安全工具
Linux 支持大量出色的免费和开源安全工具——显然,这足以撰写一个关于该主题的月度专栏。但通常我专注于深入探讨一两种特定的工具或技术,而本月我想从较高层面讨论我最喜欢的一些 Linux 安全工具。
如果您是 Linux 或网络安全新手,这可能是您第一次接触这些特定的软件包,我希望本专栏能引导您朝着更多了解的方向前进。如果您熟悉其中的几个,但不熟悉其他的,我希望本文能帮助您扩充您的工具包。但即使这一切对您来说都是老生常谈,我也希望您会觉得看看我的笔记本电脑上哪些工具最近占据了最多的 CPU 时间很有趣。事不宜迟,我为您带来“多疑的企鹅之选”。
我们从我们精选工具中最普遍的一个开始:Netfilter,Linux 内核的内置防火墙代码。准确地说,相关的模块集合正式名称是 Netfilter——iptables 仅仅是我们用来配置 Netfilter 内核模块的用户空间命令。这两个名称在大多数情况下可以互换使用,当然,除非您正在发出 iptables 命令或与内核开发人员交谈。
Netfilter 是我们 2003 年编辑选择奖“最佳安全工具”类别的获胜者。正如我当时解释的那样,Netfilter 负责将 Linux 防火墙从原始的、无状态的数据包过滤泥潭中拉出来,带入有状态数据包过滤器的现代时代。对于非安全极客来说,这意味着 Netfilter 允许 Linux 防火墙有状态地检查彼此相关的网络数据包,也就是说,通过将它们与已建立的连接关联起来,将它们识别为新事务的开始等等。相比之下,在 2.4 之前的内核中,Linux 将每个数据包视为独立的实体,严格根据其来源和去向进行过滤。例如,HTTP 事务中的所有数据包都被单独过滤,而不是作为一个组来处理,但现在不再如此。
这种新的数据包能力和智能具有超越 Linux 作为网络防火墙的实用性的影响。Netfilter 对于服务器甚至工作站上的本地安全与在适当的网络防火墙上一样有用——我在我的文章“使用 iptables 进行本地安全”(LJ,2002 年 8 月)以及我的著作 使用 Linux 构建安全服务器 的第 3 章中精确地解释了如何操作,并包含了代码示例。
对于许多人来说,在花一些时间阅读 iptables(8) 手册页后,iptables 命令很容易使用。除了我关于该主题的材料外,我还推荐 Robert Ziegler 的著作 Linux 防火墙,第二版(New Riders,2002 年)。iptables 非常容易编写脚本,上述来源和互联网上充斥着您可以为自己使用而改编的示例脚本。
但是,如果您更喜欢将自己与数据包过滤的内部工作隔离开来,而是想要一个能用简单的英语与您对话的 GUI 前端呢?您很幸运:存在许多高质量的 Netfilter 第三方前端。其中最好的之一是 Firewall Builder (www.fwbuilder.org),它允许您使用可重用对象和向导创建防火墙规则。我在我的两部分系列文章“使用 Firewall Builder”(LJ,2003 年 5 月和 6 月)中深入介绍了 Firewall Builder。
另一个流行的 iptables 助手是 Mason,它通过被动观察正常的系统使用情况自动构建 iptables 脚本。这对于工作站上的个人防火墙设置尤其有用。Mason 可在 users.dhp.com/~whisper/mason 获取。另一个越来越流行的工具是 Shorewall,它根据您在目录 /etc/shorewall 中配置的一些简单文本文件生成 iptables 脚本。Shorewall 的主页是 shorewall.net。
最后,如果我不提许多 Linux 发行版都有自己(特定于发行版)的用于 iptables 的软件包,那我就失职了。例如,SuSE 8.2 具有 SuSEfirewall2,它根据您在文件 /etc/sysconfig/SuSEfirewall2 中设置的简单参数自动生成和运行 iptables 命令。如果您的首选发行版有这样的工具,那么值得一试——它可能已经安装在您的系统上。
顺便说一句,如果您想知道我个人更喜欢什么,我通常手动编写自己的 iptables 脚本。对我来说,这是最简单和最直接的方式;当然,我是一名专业的防火墙工程师——您的需求和技能可能会有所不同。
Bastille 是 Jay Beale 和 Jon Lasser 的创意,它本身就是一类。它是一个脚本,可以根据它向您提出的问题对您的 Linux 系统执行全面的锁定。真正使其与其他加固脚本区分开来的是它提出的所有问题都附有大量的注释。在我见过的所有安全工具中,没有一个比 Bastille 更能教育其用户。因此,我特别向新手推荐 Bastille。
几年前,当我撰写一篇关于 Bastille 的 Linux Journal 文章(“用 Bastille 封锁舱口” LJ,2001 年 4 月)时,我通过电子邮件向 Jay Beale 提出了一些问题,在不久之后面对面会面后,这导致了持久的友谊。Bastille 从 Jay 外向的性格中获益匪浅,他使用直接甚至有趣的语言使您能够帮助 Bastille 将您的系统调整到更安全的状态。
Bastille 在 Red Hat、Mandrake 和 Debian GNU/Linux 上获得官方支持。它甚至已被移植到 HP-UX 和 Mac OS X。您可以在 www.bastille-linux.org 获取 Bastille。
Netfilter 和 Bastille 是严格的防御工具,但如果您想测试您的 Linux 机器当前的安全状态怎么办?一种方法是运行端口扫描器并枚举其上的侦听端口,目的是推断正在运行哪些网络应用程序。
在全站安全审核中,自动端口扫描器对于确定主机是否已得到仔细且一致的安全保护非常宝贵。如果您对受防火墙保护的主机运行端口扫描器,它可以验证防火墙的配置。在最战术层面上,一个好的端口扫描器会告诉您攻击者可以在每个运行它的主机上看到的精确入口点。
Nmap(清单 1)是无可争议的端口扫描器之王:它速度快、低调、免费且功能丰富。Nmap 提供多种扫描方法,从快速但嘈杂的 TCP Connect 方法到神秘但隐秘的方法,例如 Xmas Tree 扫描。Nmap 甚至还配备了 GUI,NmapFE,尽管从命令行使用它也很容易。您可以从 www.insecure.org 获取最新版本的 Nmap,但您选择的 Linux 发行版可能也有自己的相当新的软件包。您很可能无需在 Linux CD 之外寻找 Nmap。
清单 1. Nmap 显示主机上可用的网络服务。
tamarin:/usr/src # nmap -sS -F -P0 -O 10.1.2.123 Starting nmap V. 3.00 ( www.insecure.org/nmap/ ) caught SIGINT signal, cleaning up tamarin:/usr/src # nmap -sS -F -P0 10.1.2.123 Starting nmap V. 3.00 ( www.insecure.org/nmap/ ) Interesting ports on wuxia.wiremonkeys.org (10.1.2.123): (The 1134 ports scanned but not shown below are in state: filtered) Port State Service 21/tcp closed ftp 22/tcp open ssh 25/tcp open smtp 53/tcp open domain 80/tcp open http 119/tcp closed nntp 389/tcp open ldap 418/tcp closed hyper-g 443/tcp open https 636/tcp open ldapssl 873/tcp closed rsync 993/tcp open imaps 3389/tcp closed ms-term-serv 6666/tcp closed irc-serv 8080/tcp closed http-proxy 11371/tcp closed pksd
端口扫描器只是枚举侦听端口,而安全扫描器则尝试连接到开放端口,并尽可能多地了解正在侦听的应用程序。最简单的情况是横幅抓取,即记录应用程序在成功连接时打印的文本消息。许多应用程序通过名称甚至版本来标识自己。
但是,专业级的安全扫描器比横幅抓取走得更远。一旦他们确定给定端口上正在运行哪个应用程序,他们就会尝试确定是否可以针对该应用程序利用各种已知的漏洞,有时甚至通过实际开始但不完成渗透方法来实现。Nessus(图 1)是一款专业级的安全扫描器,但它是免费且 100% 可定制的。
与 Nmap 一样,Nessus 对专业安全工程师的价值是不可估量的;我在我的工作中一直使用这两者。但即使是普通人也可以从中受益,例如,使用 Nessus 测试他们的业余 Web 服务器。与 Bastille 一样,Nessus 的设计目标包括用户教育。如果您仔细阅读报告,您不仅可以了解它识别的漏洞,还可以了解如何修复这些漏洞。
扫描、探测和模糊测试:注意
我喜欢使用和编写关于端口扫描器、安全扫描器和其他面向攻击的安全工具的文章。在谨慎和负责任的用户手中,它们在验证系统和网络安全方面发挥着重要作用。
然而,它们也具有巨大的滥用潜力,以至于如果有人意外发现您使用此类工具攻击他们的系统,他们可能不会认为您试图帮助他们。永远不要扫描任何您没有明确授权扫描的主机。
此外,永远不要在堡垒主机(加固的、公开可访问的服务器)上安装安全扫描器。此类主机被外部人员入侵的风险高于平均水平,因此它们是最不应该放置安全探测工具的地方。如果您需要在与目标系统相同的 LAN 上进行扫描,请购买一台笔记本电脑。一台能够运行 Nmap、Nessus 和其他工具的二手笔记本电脑的价格不应超过 350 美元,我自己的许多扫描和渗透测试都是使用这样的系统进行的。
在我们离开安全验证检查领域之前,让我们考虑一下 Web 应用程序安全。Web 应用程序是在互联网可访问服务和外部可利用系统漏洞方面增长最快的领域。那么我们如何测试我们的 Web 应用程序的安全性呢?
您可能会认为 Nessus 是一个好的开始,它确实如此,但主要是针对通用的 Web 守护程序安全。Nessus 告诉我们的关于 Web 服务的大部分内容都适用于服务器守护程序本身,例如 Apache,而不是它提供的实际 Web 内容。它不会告诉我们我们的自定义 Web 应用程序是否执行正确的输入验证,它们是否容易受到跨站点脚本漏洞的影响,它们是否容易受到模糊测试攻击(其中预期的参数被更改或模糊处理)等等。这就是 Paros 等工具的用武之地。
Paros(图 2)是一款根据 Clarified Artistic License 发布的免费工具,它用 Java 编写。您需要安装 Java 运行时环境才能使用 Paros。您可以从 www.proofsecure.com 下载 Paros 的可执行 JAR 文件及其完整的源代码。
Paros 的工作原理与新一代 Web 安全工具通用。您将其作为扫描工作站上的本地代理运行,并且本地浏览器和目标 Web 服务器之间的所有交互都由安全工具代理。通过这种方式,您可以捕获出站查询,更改或模糊处理它,然后将其发送到服务器。例如,假设您的 Web 应用程序使用带有下拉菜单的表单,并且您想确保应用程序正确验证输入。使用 Paros,您可以随意用随机字符串(而不是 monday 的 blozzle)替换下拉菜单选项,并查看该查询对应用程序的影响。
Paros 还支持多种扫描类型的功能,例如目录遍历。尽管 JRE 可能会对旧系统造成负担,但总的来说,Paros 是一款灵活且用户友好的工具。此外,由于它是基于 Java 的,因此它是跨平台的。我也在多种不同版本的 Windows 上使用过它。
Paros 不是唯一免费的模糊测试代理。我还应该提到 Dave Aitel 的 SPIKE Proxy。它也充当本地代理,但能够根据它通过观察您与目标站点的交互来了解到的内容运行自动模糊测试攻击。SPIKE 的另一个优点是用 Python 编写,这意味着与 Paros 相比,CPU 和内存开销要少得多。
我将用一个取证工具来结束我的小型调查:William Salusky 的 F.I.R.E.,即取证和事件响应环境。尽管令人不快,但无论您多么小心和积极主动,您仍然可能有一天会遇到系统泄露。如果您遇到这种情况并且想了解原因和方式,F.I.R.E. 可以提供帮助。
F.I.R.E. 是一个单 CD-ROM Linux 发行版,旨在分析受损系统并从中恢复数据。您可以使用它,方法是使用 F.I.R.E. CD-ROM 重新启动受损系统,或者将 CD-ROM 挂载到正在运行但担心已受损的 Linux 系统中,并直接从 CD 运行工具。后一种技术特别有用,尤其是在您不信任系统的二进制文件时,例如当您担心它们已被 rootkit 或木马病毒版本替换时,但还不能使系统脱机。
除了分析之外,F.I.R.E. 还可以轻松地将数据从受损系统复制到网络上的其他主机。F.I.R.E. 还包括 X Windows 系统和各种基于命令行和基于 X 的安全工具(包括 Nmap 和 Nessus)。您可以使用 F.I.R.E. 将普通的 Windows 笔记本电脑转变为强大的渗透测试主力。而且,F.I.R.E. 的主要功能可以从菜单系统访问,即使对于我们这些不是全职计算机取证专家的人来说,也可以理解。您可以在 fire.dmzs.com 了解并获取 F.I.R.E. 的所有信息。
Mick Bauer,CISSP,是 Linux Journal 的安全编辑,也是明尼苏达州明尼阿波利斯的 IS 安全顾问。他是 使用 Linux 构建安全服务器(O'Reilly & Associates,2002 年)的作者。