偏执的企鹅 - 如何担心 Linux 安全
虽然我们大多数人设法在没有重大漏洞频繁发生的情况下勉强应付过去,但运行联网的 Linux 系统仍然是一项令人担忧的任务。嗯,在我看来,担心是好事!担心,如果是那种建设性的、能让自满情绪退避三舍的担心,就能让我们保持警惕。诀窍在于担心正确的事情,并对我们的担忧采取行动。
哦-哦,您可能会想,Mick 这个月要放下他的口袋保护器,转而使用肥皂箱了。我承认。我确信,如果您定期思考安全技术所处的更大背景,我的技术文章将对您更有用。因此,在本月的“偏执的企鹅”专栏中,是时候讨论在 Linux 安全方面应该担心什么以及应该为此做些什么了。
当您考虑防御时,最好由内而外地进行,但由于坏人通常从相反的方向看着您,因此现在时不时地考虑他们的观点是有启发意义的。因此,我首先谈谈我们需要担心哪些人会攻击我们的系统。接下来,我讨论他们的工具(攻击媒介),最后,我检查常见的系统漏洞以及我们可以减轻这些漏洞的方法。
那么,这些攻击者是谁?他们遵循一个从不熟练、经常鲁莽的朋克到谨慎、高度熟练的专业人士的频谱。我甚至不敢妄称自己了解整个频谱——这些不是我所处的圈子——但我可以描述一些常见的类型
身份窃贼收集用户名/密码组合、信用卡和银行帐户号码、电子商务凭证以及他们可以出售给其他骗子或自己用来实施各种欺诈行为的其他信息。
资源窃贼对您的数据不如对您的计算资源(您的计算机或其连接的网络)感兴趣,他们希望利用这些资源发送垃圾邮件、发起分布式拒绝服务 (DDoS) 攻击、掩盖他们攻击其他系统的来源、交易盗版软件 (warez) 或交易色情内容。您可能会惊讶地发现,人们可能会以多少种不同的方式让他们的网络活动看起来源于您的系统!
恶意代码既是工具,也是攻击者。虽然许多蠕虫、木马和病毒被用来进行特定类型的攻击,但其他一些的存在是为了它们自身的缘故(制造恶作剧)并自主运行。因此,我们需要担心那些以半定向方式使用恶意代码的资源窃贼和身份窃贼,以及自我传播的恶意代码。
破坏者想要破坏您的网站,扰乱您的网络流量,并普遍给您带来不便。在大多数情况下,更准确的说法是他们想在您付出代价的情况下给他们的朋友留下深刻印象,尽管一些网络破坏者实际上会仔细选择他们的目标(例如,所谓的黑客行动主义者,他们破坏他们认为邪恶的团体或政府的网站)。
企业间谍想要窃取您组织的专有数据:您的制药研究人员的实验室笔记、您董事会的并购计划等等。与身份窃贼或资源窃贼相比,这是一种目标更为明确的攻击者类型,并非我们所有人真的需要担心企业间谍,但请相信我,他们确实存在,并且确实会造成经济损失。
跟踪者希望您只看到他们是多么多么地爱您,即使他们激情的真正深度和美丽无法被任何缺乏幽默感的法官或爱管闲事的精神科医生所理解。(对不起,我在讽刺,但我确实讨厌跟踪者!)
每个人都需要担心身份窃贼、资源窃贼和破坏者,因为这些攻击者在选择目标时往往高度不加区分。当讨论企业间谍时,旧的安全口头禅“我没有什么任何人会想偷的东西”可能成立,但在这里完全不适用。事实上,特别是资源窃贼更喜欢低调、看起来无害的目标,因为避免引起注意是他们行动的重要组成部分。对于所有这三类人群(身份窃贼、资源窃贼和破坏者),攻击者根本不在乎您将计算机用于什么目的。
请注意,身份窃贼通常根本不在乎您的计算机。他们在乎的是您的身份,为了获得您的身份,他们更可能尝试黑入您——例如,通过欺骗您在冒充网站上输入您的网上银行凭证——而不是黑入您的实际计算机。(尽管如此,有人编写一个蠕虫来查找存储在其受害者硬盘驱动器上的身份信息只是时间问题。稍后会详细介绍恶意代码。)
此外,并非所有攻击者都是远程的。特别是企业间谍和身份窃贼,他们通常是他们攻击的组织中的“内部人员”,他们经常拥有或寻求对他们攻击的系统的本地/控制台访问权限。(与通过防火墙、入侵检测系统、应用程序访问控制等进行黑客攻击相比,获取您刚刚盗取的硬盘驱动器上的数据要容易得多。)然而,资源窃贼和破坏者通常是远程攻击者。
那么,这些各种各样的攻击者是如何实现他们邪恶的目标的呢?换句话说,他们的武器是什么?
当我在 20 世纪 90 年代中期首次成为网络工程师时,我们通常担心的攻击范式是一个人坐在计算机前,或多或少直接地与她的“受害者”系统实时交互。换句话说,电影战争游戏中马修·布罗德里克的角色是我们假设(无论对错)最常见的攻击者类型。
然而,今天,可以肯定地说,针对联网系统进行的大部分探测和攻击都是由自动化软件进程执行的——也就是说,由病毒、木马和蠕虫执行的。人仍然是这些类型攻击的幕后黑手;不要误会——必须有人编写、调整和部署所有这些恶意代码——但如今大多数实际攻击都是通过代理发生的。
例如,资源盗窃行业(垃圾邮件、兜售色情制品、DDoS 等)增长最快的工具之一是僵尸网络。僵尸程序是一台感染了蠕虫或病毒的计算机,该蠕虫或病毒会秘密联系释放它的人;僵尸网络是等待指令的整个僵尸程序网络。
僵尸网络是一个奇怪、复杂且阴暗经济的一部分。按分发节点付费的僵尸网络运营商,他们受垃圾邮件发送者的雇用分发垃圾邮件。大多数付钱给他们的商家都有意对这些节点可能不是合法的电子邮件服务器,而是非法劫持的系统(即僵尸程序)这一事实视而不见。当垃圾邮件僵尸网络运营商被抓获时,他们收入和垃圾邮件的实际来源总是声称他们不知道他们的垃圾邮件是由非法入侵的系统分发的。
资源窃贼不是唯一使用僵尸网络的人。DDoS 攻击者使用它们进行高度分散的网络轰炸,这种轰炸既难以追踪又难以阻止。身份窃贼经常进行网络钓鱼攻击,其中伪装成银行或电子商务网站的垃圾邮件被用来诱骗人们在冒充网站上输入他们的登录凭证。与普通的医药和色情垃圾邮件发送者相比,网络钓鱼者更有动力隐藏他们的踪迹,因此僵尸网络对于网络钓鱼垃圾邮件分发特别有用。
完全交互式的系统攻击者仍然与我们同在;并非所有攻击者都像垃圾邮件发送者或网络钓鱼者那样撒下大网。企业间谍、破坏者和跟踪者都可能利用一对一的攻击,其中攻击者将注意力集中在一个系统上,并或多或少地实时进行攻击。其中一些攻击者,尤其是在企业间谍活动领域,是高度熟练和富有创意的专家,他们甚至能够破解精心保护的系统,通常是通过编写定制的攻击软件。
然而,传统的看法是,许多(如果不是大多数)网站破坏者和其他破坏者类型都是脚本小子——技术不太熟练的攻击者,他们依赖于从互联网下载或从朋友那里获得的工具。与专业人士相比,此类攻击者更容易被击退,因为他们往往不够灵活。如果他们在给定系统上运行的攻击脚本失败,他们更有可能放弃并寻找更软的目标,而不是微调他们的脚本或完全编写新脚本。而且,给定的脚本可能仅适用于在特定架构上运行的某个应用程序的某个版本(例如,Intel x86 平台上的 Apache 2.0.1)。
总而言之,好消息是,大多数攻击是不加区分的、自动化的且不是很灵活的。高度集中、人工操作和富有创意的攻击要少得多。坏消息是,自动化攻击(包括垃圾邮件、网络钓鱼、恶意代码和脚本小子的工具)的绝对数量和种类使其成为一股不可忽视的力量。这些攻击每年给各地的人们和组织造成数百万美元的生产力损失和欺诈交易。此外,仅仅因为在给定的情况下,熟练/人为的攻击者可能看起来不像是一种可能的威胁,并不意味着您可以完全忽视他们。
那么,有攻击者,这些攻击者有工具。这些工具操纵的螺母和螺栓是什么?
考虑一下来自威胁建模术语的简单公式:威胁等于攻击者加上一些漏洞。漏洞是攻击者目标的一些特征,这些特征提供了一个缺口。威胁方程告诉我们,如果给定的漏洞无法被攻击者利用(例如,因为系统未联网且位于锁定的房间内),则它不构成风险。相反,无论有多少攻击者以系统为目标,没有漏洞的系统都不会有风险。
显然,没有完全无懈可击的系统。但是,有很多方法可以处理漏洞,从而降低漏洞被攻击者利用的可能性。
常见的漏洞类型包括
用户空间软件(应用程序)中的错误。
系统软件(内核、驱动程序/模块等)中的错误。
默认(不安全)应用程序或系统设置。
无关的用户帐户。
无关的软件(带有错误或草率/默认设置)。
应用程序中未使用的安全功能。
操作系统中未使用的安全功能。
容易上当的用户。
这些问题的补救措施往往很简单。错误可以修补,默认/不安全设置可以更改,无关的帐户和应用程序可以删除,安全功能可以利用,用户可以接受教育。“简单”并不一定意味着“容易”(或“快速”或“便宜”),但是。
正如我多次在这个专栏中说过的,补丁竞赛是徒劳的——您无法在首先发现错误的情况下编写补丁,好人在坏人之前发现每个重大错误的几率是多少?尽管如此,我们还是陷入了这个循环;我们必须打补丁。
加强系统和应用程序设置、利用应用程序/操作系统安全功能、教育用户以及应用其他安全技术和工具的前景要光明得多。
这使我们进入了我的小社论的积极、前瞻性部分:如何将所有这些担忧转化为建设性行动。我已经开始谈论安全技术和工具,我现在不打算再深入讨论这些——这就是我的技术文章的目的。相反,我想在这里总结一下我将担忧转化为行动的秘诀。
保护任何计算机系统或网络的第一步是定义其功能。它将做什么?它将存储、处理和为用户提供哪些数据?谁是预期的用户?这些用户将如何与系统交互?正如任何孙子兵法的爱好者都能看出的那样,这正是分析您需要防御的地形的古老技巧。
第二步是以一般术语识别您需要防御的攻击者类型。从所有可能的开始,但优先考虑最可能的。
第三步是考虑这些攻击者最有可能攻击您系统上的哪些数据或资源,以及他们可能尝试利用哪些类型的漏洞来实施这些攻击。一旦您考虑了最可能的攻击,请务必也考虑不太可能但仍然合理的攻击,特别是那些易于减轻的攻击。
让我们通过一个示例场景来演练此过程。假设我刚刚构建了一个基于 Debian 的 Web 服务器。在第一步中,我确定服务器的功能是托管一个简单的“宣传册式”网页,其中包含有关我的手风琴商店的信息(营业时间、地址等)。Web 服务器将只有少数本地用户帐户。大多数访问将由匿名 Web 客户端进行。上面不会存放任何敏感数据。此特定盒子不会提供任何其他网络服务(SMTP、DNS、IRC 等),尽管我需要通过安全外壳 (SSH) 对其进行管理。
在第二步中,我决定,由于服务器上不会有非公开数据,因此它不太可能成为企业间谍的目标。我的运营规模很小,而且事实上,我与镇上唯一的另一家手风琴经销商关系友好。她极不可能聘请专业的系统破解者来黑入我的网站。因此,我主要担心的是不加区分的攻击者:资源窃贼、一般的恶意代码和破坏者。不过,也可能有一些目标更明确的攻击者可能会攻击我的系统,以便利用它来攻击其他系统,因此我不会仅仅关注自动化攻击媒介。
在第三步中,我决定我的系统本身是最有可能的攻击目标,自动化攻击是最有可能的媒介,而软件错误和配置设置是最有可能被针对的漏洞。我面前似乎是一个非常通用的系统加固练习。我需要应用所有当前的软件/系统补丁(可能包括将 apt-get 作为 cron 作业运行),识别并删除无关的软件和用户帐户,尽可能安全地配置 Apache,并至少考虑使用 Tripwire、Snort 和 syslog-ng 等附加工具来帮助监控我的系统的安全状态。
我可能决定不费心在 chroot jail 中运行 Apache。这个盒子的全部目的是运行 Apache,因此如果有人破坏了 Apache,那么这个系统实际上就完蛋了。另一方面,如果攻击者设法将 Apache 漏洞升级为完整的系统(root)漏洞,那么他或她可能会更容易地利用我的 Web 服务器攻击其他系统,因此也许 chroot jail(例如,使用 mod_security)毕竟值得额外的麻烦。
Mick Bauer (darth.elmo@wiremonkeys.org) 是美国最大的银行之一的网络安全架构师。他是 O'Reilly 出版的Linux 服务器安全第二版(原名使用 Linux 构建安全服务器)的作者,偶尔在信息安全会议上发表演讲,并创作了“网络工程波尔卡舞曲”。