网络安全工作原理指南-全-
网络安全工作原理指南(全)
原文:
zh.annas-archive.org/md5/ded22b71f3a279732c2c455601cb65d0译者:飞龙
第一章:网络安全简介

网络安全是一个广泛且多样的领域。无论你是在设置防火墙还是制定密码策略,你的行动都会影响组织的各个层面,从技术人员和帮助台到 CEO。网络安全还涉及组织中每一件技术设备:手机、服务器,甚至是工业控制系统等设备。这样一个广泛且深入的领域在你初次接触时可能会让人感到有些令人畏惧。尤其是当你尝试学习网络安全而不进入这个领域时。这尤其适用于像你这样的 IT 部门负责人,想要学习更多内容,以便更好地保护你的组织。
本章开始较慢:我们将讨论什么是网络安全,什么不是网络安全,以及白帽黑客与黑帽黑客之间的区别。
什么是网络安全?
网络安全的核心目标是:识别组织中的网络威胁,计算与这些威胁相关的风险,并适当处理这些威胁。并不是每个公司经历的威胁都是网络安全直接处理的问题(例如,疫情或由龙卷风或洪水造成的建筑物物理损害)。通常,网络安全使用CIA 三元组模型来确定哪些威胁属于其职责范围。
CIA 三元组包括三类安全:机密性、完整性和可用性。机密性涉及资产和数据如何暴露给人员或过程,确保只有应当访问资源的人才能访问它。完整性确保资产和数据在没有适当授权的情况下不会被更改。这不仅包括像数据库服务器中的条目,还包括例如将用户添加到网络中。可用性确保在需要时能够访问数据或资产。为了工作的持续进行,必须能够在必要时访问数据。
图 1-1 展示了 CIA 三元组的元素以三角形的形式排列,旨在展示如何平衡它们以维持彼此的功能。例如,如果你过于关注机密性,你可能会大大限制资产的使用,以至于其他人无法使用这些数据进行工作,从而造成可用性问题。同样,如果过于强调完整性,你就会失去机密性,因为你必须能够读取数据以确保没有变化。通过平衡三元组的三个组件,你可以在网络安全的核心要素之间实现平衡。

图 1-1:CIA 三元组
一些专家讨论是否应当在传统的三位一体模型中加入新的元素,以应对网络安全领域中出现的新技术或新优先事项。一个常被加入的元素是不可否认性,即当某人或某个实体做某事时,必须有特定的证据将其与该行为关联,以至于他们无法否认自己做过这件事。
网络安全与隐私
近年来,网络安全和隐私之间的关系受到了越来越多的关注。在这种情况下,隐私意味着一个人控制自己信息的存储、共享和使用的权利和能力。尽管隐私的话题超出了网络安全的范围,网络安全在确保个人数据免受恶意使用方面仍然起着至关重要的作用。网络安全还负责许多控制措施,这些措施允许公司审计其数据使用,确保其遵循所有必要的规则和法规。展望未来,用户隐私的保护可能会成为网络安全领域中日益重要的一部分。
网络安全并不等同于
在像网络安全这样庞大的领域中,你肯定会遇到一些关于其范围的误解。为了减少这些误解,最好先讨论一下网络安全究竟不是做什么。这样做有助于界定该领域,并明确做网络安全到底意味着什么。
首先,网络安全并不等同于黑客攻击。媒体通常会让你认为所有的网络安全专业人员都只是拼命敲键盘,试图闯入系统。尽管渗透测试——即尝试闯入你被授权攻击的系统(比如自己的或客户的系统)以从攻击者的角度发现漏洞——是网络安全的一部分,但它只是该领域的一小部分。漏洞是系统中的缺陷,包括其设置方式或使用方式。例如,系统代码中的错误可能会导致漏洞。攻击者会创建利用工具来利用这些漏洞。但仅仅因为你不知道如何通过计算机内存中的缺陷执行利用工具,并不意味着你不能成为设置和维护防火墙的专家。这意味着你不需要理解每一个黑客工具如何运作,或者最新的利用工具具体做什么,才能为网络安全行业做出贡献。
第二,网络安全不是简单的开关切换。有些人用开关切换这个术语来形容他们认为系统工程师或其他 IT 专业人员的工作:他们只是在切换开关或配置系统,却没有理解让系统运行的底层过程。的确,配置一个系统以确保其安全对网络安全至关重要。但确保系统安全并不一定能通过遵循检查清单来实现。这需要从整体上审视整个系统,注意每个组件不仅如何与其他组件相互作用,还如何与其他系统交互,才能充分理解如何保障系统安全。此外,专业人员还需要深思熟虑和批判性思维的能力,以便在无法应用最佳实践的情况下,知道如何保障系统安全。
第三,网络安全不仅仅需要技术技能。与技术知识同样重要的是将这些信息转化为每个人都能理解的提示和资源的能力,尤其是在专业人员进行演讲或撰写报告时。网络安全专业人员需要与组织中的每个部门合作,这意味着他们的人际沟通能力至关重要。组织要变得更安全,唯一的方法就是每个人都理解自己在维护安全中的角色,这意味着你必须有效地传达这个角色。
黑帽与白帽
当你想到黑客这个词时,可能会想到某个恶意使用电脑做坏事的人,比如破坏文件或解锁门上的电子锁,让抢劫犯能够闯入。你之所以这样想,是因为媒体通常用黑客这个词来描述电脑犯罪分子。但并非所有黑客都是穿着连帽衫的青少年,在地下室里一边敲打键盘一边听死亡金属乐。事实上,来自不同背景和地区的人都可能参与到计算机犯罪中。黑客这个词也被用来形容优秀的网络安全专家:这个标签适用于那些提出问题并打破系统(无论是计算机还是物理设备)以了解更多信息的人,并不一定是为了犯罪。许多特定的表达,如坏演员、攻击者和国家行为体,专门指代网络犯罪分子。但在本书中,我将称他们为黑帽(也称为攻击者或对手)。
正如前面所提到的,攻击者来自不同的背景和地点,但他们都有相同的意图:利用自己的技术知识犯罪。这些犯罪通常与某种形式的经济利益相关,要么通过直接盗取资金或要求支付赎金,要么通过间接盗取重要信息(如社会保障号码,以便日后出售)。值得注意的是,并非每个对手都在追求金钱。他们可能在寻求特定的信息,或者试图破坏某项服务。在恶意计算机使用方面,关于什么构成犯罪有许多争议。在本书中,我认为任何违反现行《美国计算机欺诈和滥用法》的行为都符合网络犯罪的定义。
在另一个极端的是白帽黑客。白帽黑客是网络安全专家,他们将自己的技术知识应用于使系统更加安全。他们不仅包括为公司安全部门工作的人员,还包括进行安全研究的独立专业人士,例如分析恶意软件或发现零日漏洞(系统或软件中全新、前所未见的漏洞)。这些人不懈努力,试图始终领先一步,超越黑帽黑客。
处于中间灰色地带的是灰帽黑客。灰帽黑客的活动不一定具有恶意,但也不光彩。例如,未经许可攻击系统以查找漏洞,然后将漏洞披露给系统所有者,这属于灰色地带,因为通常白帽黑客不会在没有许可的情况下进行任何攻击。灰帽黑客的立场取决于个人的观点。如果有人利用自己的技能突破政府的互联网过滤器,政府可能会认为他是攻击者,但对所有试图行使言论自由的人来说,他可能是一个白帽黑客。
黑帽黑客的类型
尽管各种各样的人都符合黑帽黑客的角色,但你仍然可以将他们分为几类。这些类别并非详尽无遗,但应该能让你大致了解黑帽活动背后的动机。
脚本小子
脚本小子是那些没有固有技能、仅仅按照互联网找到的指示执行攻击的对手。他们通常会找到预先编写好的脚本(因此得名脚本小子),这些脚本是为了执行特定类型的攻击而设计的。然后,他们输入目标信息并运行脚本。传统上,脚本小子对大多数组织构成的威胁较小。他们使用的攻击通常不复杂,而且往往依赖过时或容易识别的攻击手段。但是,脚本小子不容小觑。仅仅因为他们没有更高级黑帽黑客的技能,并不意味着他们在拥有合适的工具时不能造成损害。
有组织犯罪
由于政府执法削弱了其其他收入来源,越来越多的有组织犯罪开始转向黑帽活动。有组织犯罪在招募具备专家技能的人方面非常有效。因此,这些攻击者使用最新的漏洞,创建自己的恶意软件,并进行广泛的研究,以获得丰厚的财务回报。这使得他们成为重要的威胁。东欧和俄罗斯是这种活动的热 beds。
黑客活动家
黑客活动家是指为了政治目的使用黑客技能的人或团体。他们通常试图破坏或扰乱服务,而不是窃取数据或金钱。例如,一个黑客活动家团体可能会占领一个与他们意见不合的公司的 Twitter 账户,利用该账户发布恶劣的消息,抹黑该公司的声誉或推动自己的议程。最具传奇性的黑客活动家团体之一是匿名者,它通常攻击政府或其他它认为具有权威性质的组织。它曾攻击网站并发布泄露的文件,进行过许多其他活动(尽管很难准确知道该团体具体做了什么,因为任何人都可以声称自己是成员)。黑客活动家可能对组织构成重大威胁,且通常比脚本小子更为熟练。
国家行为者
国家行为者是为政府工作的黑帽黑客。对许多人来说,这些特工处于灰色地带,因为他们的行为的合法性似乎可能因他们所服务的政府而异。然而,国家行为者使用与其他攻击者相同的技术,他们的攻击可能造成重大损害。国家行为者通常的目标是窃取专有信息以帮助自己的国家,或干扰服务以打击外国国家。中国、北朝鲜、伊朗和俄罗斯等国拥有强大的计划,与几个主要的黑帽攻击活动相关,包括入侵索尼窃取敏感的内部文件以及干扰全球选举。国家行为者构成最高的风险之一,因为他们资金充足,使用的是最新的技术和训练。
高级持续性威胁
一个较新的术语是高级持续性威胁(APT),描述的是一种隐藏时间较长的攻击,慢慢渗透到目标系统中,直到实现其目标。最初,只有国家行为者才具备执行此类攻击的资源和专业知识。但近年来,一些非政府组织也能够执行类似的操作。APT 攻击非常危险,因为很难确定它们在组织中的位置、它们可能访问的内容或它们已渗透的人员。APT 的动机从定向数据窃取到直接勒索不等。
白帽子的类型
就像黑帽黑客一样,白帽黑客也扮演着成功的网络安全程序中所需的各种角色。网络安全并不是单一的,它涵盖了许多领域和专业知识,很难由一个人独自处理。那些无法负担专门安全团队的组织应该考虑寻求外部帮助,以补充他们自己的内部 IT 团队,并在需要时提供建议。
以下章节将解释各种白帽职位,并简要描述每个职位的典型任务。这个列表绝不是详尽无遗的,也不应被视为标准,因为一些组织可能有不同的需求或对职位在其内部结构中的定位有不同的看法。尽管如此,这个列表应能让你对现有职位类型以及一个人填补特定角色所需的技能有一个良好的了解。另请注意,我没有提及任何教育学位。原因是大多数网络安全职位不要求特定学位;相反,它们更多依赖于知识和经验(这两者都可以通过其他途径积累)。我遇到过一些拥有高级网络安全学位的专家,也遇到过一些拥有军事历史硕士学位的专家。尽管如此,没有学位的人可能需要更长时间来积累必要的知识和经验。
网络安全/安全运营中心分析员
网络安全分析员是一个入门级职位,负责维护和监控来自各种网络安全工具或设备的警报。他们的主要工作是寻找任何看起来可疑的内容,并在必要时将其上报以便进一步分析。通常,这些职位与安全运营中心(SOC)相关联,SOC 是一个汇总和监控来自组织各个部分的警报的设施。
分析员是许多安全事件的第一响应者,因为他们是接收警报或直接联系最终用户的人。这些职位通常要求有强大的 IT 背景:额外的安全经验会有帮助,但并非总是必须的。要在这个职位上取得成功,一个人需要扎实的网络或系统管理知识、关注细节的能力、耐心,以及解决问题和任务管理的技能。
网络安全顾问
网络安全顾问 提供广泛的服务,并需要具有丰富的安全背景。实际上,他们的任务是为组织提供安全专业知识,解决组织当前面临的任何任务或问题。这包括政策制定、系统安全控制、事件响应、培训与意识提升以及一般安全建议等问题。顾问需要深入理解安全的总体原则,通常还需具备大部分操作系统、软件或特定硬件设备的基础知识。批判性思维、解决问题的能力、优秀的口头与书面表达能力以及任务管理能力是该职位的必要条件。
网络安全架构师
我们通常认为架构师是设计建筑物的人。网络安全架构师 的工作类似,但他们设计的是安全性,而不是建筑物。他们的任务是为环境创建安全控制措施,而不是实施或管理现有的控制措施。这意味着他们必须完全理解安全控制如何运作以及他们所处理的环境,并且还要理解在正常工作流中该环境及其内部控制的相互作用。例如,网络安全架构师会设计保护特定网络环境的安全控制措施,考虑所需的安全设备、信息如何在网络中流动以及在单个系统上所需的网络安全控制。
如果你认为这听起来像是一个庞大且复杂的工作,你是对的。网络安全架构师必须在其特定领域拥有大量经验,例如网络或数据库,此外还需要扎实的安全背景。理解工作流需要哪些控制措施,以及这些控制措施如何与环境中的其他部分产生不良交互,需要高水平的批判性思维和解决问题的能力。架构师还必须与跨越 IT 各个方面的多样化团队合作,因此他们必须磨练书面和口头沟通能力。此外,架构师通常需要在生产时间表的压力下工作,这意味着他们需要高效且细致地完成工作。
首席信息安全官
组织通常有一组人负责运营所有事务。这些人通常担任首席执行官(CEO)、首席财务官(CFO)或首席信息官(CIO)等职务。在安全领域,相应的职位是首席信息安全官(CISO)。CISO 负责组织内所有安全运营的管理:他们对组织如何管理安全做出广泛决策,并决定公司需要哪些项目或资源,以确保在面对威胁时保持足够的安全级别。
CISO 需要对安全有广泛的理解,但与大多数安全专业人员不同的是,他们还具备其他技能。要成为 CISO,你需要优秀的项目管理技能和预算经验。你还需要能够与团队及其他高层管理人员沟通,解释组织的目标和使命,以及安全如何与这些目标和使命相关。CISO 会花费大量时间在管理工作上,无论是管理人员、预算还是风险。风险管理要求你识别威胁、该威胁对组织的影响、该威胁发生的可能性,以及你可以采取什么措施来减轻风险(第十章详细讨论了风险管理)。作为组织的安全负责人,强大的领导力也是必不可少的。
即使是小型组织也需要一个 CISO(首席信息安全官)。无论是全职工作还是作为其他职责的一部分,有一个人担任此角色对于构建和维护安全性至关重要。小型组织可以考虑聘请顾问,提供 CISO 级别的指导,兼职进行。
事件响应人员
事件是指任何发生在组织中的不良事件:例如,账户被盗,数据丢失或被销毁,或恶意软件感染了系统。事件响应人员是当事件发生时做出反应的人。其主要工作是进行初步调查、保存信息和证据、阻止事件蔓延,并尽快恢复受影响的系统。你可以把事件响应人员比作急救员。急救员会稳定受伤的人并确定伤情,以便医生能够进行全面治疗。事件响应人员与此有些相似:他们不会对发生了什么进行全面调查。这项工作由法医专家负责,我们稍后会介绍。
事件响应人员的工作是稳定发生事件的系统,确保攻击不会扩散到整个环境。例如,他们可能会将系统从网络中断开,以阻止恶意软件的传播。接着,事件响应人员会收集并保存事件的证据。这意味着检查日志、系统副本、备份以及他们能够找到的其他信息。一旦他们收集了所有数据并确保事件被遏制,他们就会着手恢复环境。这可能意味着清除系统,以去除任何可能存在的恶意软件痕迹。
事件响应人员必须快速但有条不紊地工作。他们需要在压力下保持冷静头脑。必须是批判性思维者,能够通过推理每一个行动,确保他们不会使事件恶化或破坏证据。事件响应人员通常具有强大的安全背景,但通常需要接受特定的事件响应技术培训。响应人员通常在一个大团队中工作。通常,他们被要求为团队提供特定的系统专长;例如,他们可能对 Linux 操作系统有深入的理解。
漏洞管理者和威胁猎人
而事件响应是针对有害事件的反应,漏洞管理则试图在不良事件发生之前预防它们。漏洞管理者寻找系统中的安全漏洞并尝试修复它们。这是一个持续的过程,因为系统不断变化,从而产生新的漏洞。漏洞管理者需要耐心和勤奋,毫不松懈地确保没有漏洞被忽视。
威胁猎人的工作类似,但他们的操作更为深入,试图从整个组织中关联事件,以检测可能的威胁。他们通常寻找高级黑帽活动,例如 APT 实施的活动,这些活动通常不会被典型的警报识别出来。威胁猎人需要深厚的安全知识、细致入微的观察力和出色的批判性思维能力。他们还需要良好的口头和书面沟通技巧,以便将他们所检测到的威胁传达给组织中的每个人。
计算机取证分析师
在事件发生并且事件响应人员完成工作后,事件的取证分析便开始了。计算机取证分析是检索和分析与事件相关的证据的过程。
计算机取证分析师可以是事件响应团队的一部分,但通常是一个独立的组,在威胁被遏制后接管调查工作。这些分析师会对收集到的证据进行深入和详细的调查。他们不仅会查看日志等项目,还会检查系统上运行的进程、事件发生时加载到内存中的内容,甚至是单个软件代码。这需要极其专业的背景,并深入了解计算机代码的内部工作原理。计算机取证分析师使用各种专业工具,这些工具需要通过培训和实践才能有效使用。他们必须具备极高的细节关注力,并具备良好的沟通能力,将他们的发现用非技术性人员能够理解的语言传达出来。
渗透测试人员
对大多数具有网络安全专业知识的人来说,渗透测试员是最具代表性的角色。他们像黑帽攻击者一样尝试攻破系统,以发现系统的缺陷和漏洞。渗透测试实际上是一个需要大量训练才能成功的小领域。
渗透测试员必须具备扎实的技术技能,因为他们必须理解安全概念和攻击者使用的各种技术。这需要持续的培训和实践。渗透测试员依赖多种工具来攻击系统,每种工具都需要相应的专业知识。保持详尽的文档记录也至关重要,因为这能向客户提供他们行动的证据:最终,如果你无法解释如何攻破系统,那么攻入系统本身就没有意义。
练习:了解更多关于网络安全和威胁的知识
为了更好地理解网络安全,参与社区活动是非常有帮助的。最好的方法是注册新闻通讯和警报。以下部分列出了一些最好的威胁情报源,帮助你入门。在浏览这些资源时,试着回答以下问题:最常见的威胁类型是什么?不同来源如何分类这些威胁?你能在不同资源中找到哪些共同的预防攻击建议?你可能使用什么样的搜索词来找到更多的资源?
政府资源
国家标准与技术研究院 (NIST) 计算机安全资源中心在 csrc.nist.gov/: 一个很好的地方,可以找到关于如何保护你在家或工作中的系统的文章和其他信息。
网络安全与基础设施安全局 (CISA) 在 www.cisa.gov/: 负责提供网络安全和基础设施安全指导的政府机构。该网站包含大量关于安全实践和威胁的资源和通告。
国家网络安全教育研究所 (NICE) 在 www.nist.gov/itl/applied-cybersecurity/nice/: 该机构是 NIST 的一部分,提供与网络安全相关的教育资源,包括面向中学和高中生的挑战和培训课程。
威胁情报
多州信息共享与分析中心 (MS-ISAC) 在 www.cisecurity.org/ms-isac/: 该网站提供有关关键漏洞和其他与网络安全相关的信息警报。
InfraGard 在 www.infragard.org/: 该计划为国家和州级组织提供威胁情报以及其他服务,包括培训。
SANS 互联网风暴中心在 isc.sans.edu/: 该网站提供有关安全漏洞的更新以及各种安全主题的博客文章。
网络安全博客
Krebs on Security at krebsonsecurity.com/: 由安全专家 Brian Krebs 编写,本网站提供大量关于当前威胁和其他网络安全趋势的信息性文章。
Threatpost at threatpost.com/: 本网站提供有关最新漏洞和被利用的威胁的文章。
FireEye Blogs at www.fireeye.com/blog.html: 本网站包含有关威胁、行业故事以及其他有价值的网络安全文章。
网络安全播客
Security Now at twit.tv/shows/security-now/: 由 Leo Laporte 和 Steve Gibson 主持,这个节目深入探讨与网络安全相关的本周头条新闻。它是跟进最新漏洞、利用和威胁的好资源。
Darknet Diaries at darknetdiaries.com/: 由 Jack Rhysider 创办,这个节目探讨了多年来黑客和其他安全事件的真实故事。
结论
网络安全是一个令人畏惧的领域。然而,面对各种各样的攻击者和威胁,组织如果想要维护其安全,迫切需要网络安全专业人士。本章向你介绍了网络安全是什么以及存在的威胁。接下来的章节将引导你了解网络安全领域和你可能遇到的威胁,无论你是经理,还是长期从事 IT 工作的人员转行,或是刚刚进入职业世界的人。
第二章:互联网中的攻击目标

你知道有哪些类型的黑帽攻击者,但问题依然存在:他们是如何找到你的?大多数人并不期待自己会成为攻击者的目标。你可能会想知道自己有什么东西是黑帽攻击者想要的。
你会惊讶于攻击者认为有价值的东西。确实,许多人会窃取信用卡和社会保障号码,但也有些攻击者寻找的不仅仅是个人数据。某些人可能会想要关于其他目标的信息,或者他们可能想要访问你的设备,比如计算机或路由器,以进行其他黑客攻击。他们甚至可能只是想寻找不安全的设备,纯粹是为了好玩。在这些情况下,任何连接到互联网的设备都会成为黑帽攻击者的目标。
我们每个人都有大量设备,其中一些我们可能甚至不知道,它们使用互联网并需要保护以防止黑帽攻击。在本章中,我们将简要了解互联网是如何工作的,包括技术的历史,帮助你更好地理解攻击者是如何利用它的。接下来,我会解析黑帽攻击者如何利用他们从公共资源中收集到的信息来准备攻击。最后,我将通过实施三条互联网使用的基本规则,向你解释如何躲避攻击者。
互联网是如何运作的
要理解黑帽攻击者如何在互联网中找到并利用你,你需要理解一些关于互联网运作的基本概念。你今天所知的互联网起源于先进研究计划署(ARPA),这是一个美国政府机构,负责研究新技术以保持对苏联的技术领先优势。
在 1960 年代,ARPA 开始研究一种工具,用于在核攻击期间保护美国的通信。由于核弹可以轻易摧毁大量基础设施,美国军方需要一个能够在部分国家遭到攻击时自动重新调整的通信网络。例如,如果华盛顿特区遭到轰炸,军方需要能够绕过经过该城市的通信线路,以便继续与国家其他地区无缝地共享信息。
解决这个问题的一种方法是分组 交换的理念。其前提是将信息分成数据包,或者是自包含的单元,然后让计算机根据所提供的信息实时决定这些数据包应该发送到哪里。例如,如果计算机接收到一个目标是亚特兰大的数据包(通过附加在数据包上的地址来标识),并且知道中介的华盛顿特区通信线路已经中断,它可以自动将该数据包发送到克利夫兰,克利夫兰随后将其传递到亚特兰大。这使得即使网络的一部分被摧毁,计算机也能创建并维护一个通信网络。
ARPA 和许多其他研究人员致力于在大型网络中实现分组交换。在此之前,设备通过设置的专用电路直接进行通信。电路通常是单一的物理线路,任何线路中断都会导致整个网络瘫痪。到 1960 年代末和 1970 年代初,几个较小的网络,主要用于各大学和超级计算机站点之间的通信,开始使用分组交换,允许计算机在广阔的距离上相互通信。图 2-1 展示了作为 NSFNET 一部分的站点连接情况,NSFNET 是早期网络之一,后来发展成了互联网。这个工作一直持续到 1980 年代,当时商业桌面计算机开始更广泛地向公众提供。

图 2-1:1992 年的 NSFNET,连接美国各地的学术和其他站点(图片修改自原始图像,由 Merit Network, Inc. 创建,采用 Attribution-ShareAlike 3.0 Unported [CC BY-SA 3.0] 许可证,creativecommons.org/licenses/by-sa/3.0/deed.en)
正是在这一时期,Robert Kahn 和 Vinton Cerf 首次开发了被称为互联网协议(IP)和传输控制协议(TCP)的通信协议。
TCP/IP:互联网的支柱
TCP**/IP(有时称为 IP 套件)是运行现代互联网的协议集合。协议是特别的代码,定义了系统应如何理解和处理通过网络接收到的数据。例如,HTTP 协议告诉系统,发送的数据是一个网站,应该由网页浏览器处理。TCP/IP 协议告诉系统如何将流量(数据流)从一个设备传输到另一个设备,直到达到目的地。它是系统用来在分组交换网络中进行调整的信息的一部分。
IP 协议提供了一个编号,称为 IP 地址,用于标识计算机在给定网络上的位置。你可以把 IP 地址想象成你的邮政编码。邮政编码标识了一个大致的区域,邮政服务利用它来引导包裹。IP 地址有两个版本,版本 4(称为 IPv4)和版本 6(称为 IPv6)。在本章中,我只讨论 IPv4,因为它仍然是最常见的。
TCP 是一套规则,允许一个系统与另一个系统进行通信,同时确保两个系统都能在网络上访问。TCP 本质上就像打电话给朋友,确认他们在家,以便包裹寄到时可以接收。我们将在第六章中进一步讨论这两种协议。
随着 TCP/IP、分组交换技术以及家庭计算机变得更加便宜,商业公司很快对建立自己的网络产生了兴趣,以便企业和家庭能够进行通信。最终,这些网络开始互相连接,连接了越来越多的系统,直到互联网自然而然地发展成了由互联网服务提供商(ISPs)构成的网络。像 AT&T、Comcast 和 Verizon 这样的 ISP 开始提供互联网接入,并向企业以及最终的家庭销售必要的基础设施。自 1990 年代初以来,世界变得更加互联互通,计算机网络几乎覆盖了地球的每个角落。
公共网络与私人网络
当今的互联网由大量连接的小型网络组成。这些网络通常可以分为两种类型:公共网络和私人网络。本质上,任何人都可以使用公共网络,通常需要支付一定费用。例如,你家连接的网络并通过 ISP 支付使用费用的网络就是公共网络。这些网络构成了互联网的骨干,因为它们允许任何付费用户进行连接。通常,公共网络由 ISP 运营。
公共网络通常也与私人网络连接,私人网络仅允许有限的设备连接。例如,如果你在办公室工作,你可能可以通过桌面计算机的连接访问特定服务器上的文件。服务器和桌面计算机位于一个私人网络中,这意味着它们只允许彼此或其他位于私人网络上的设备进行通信。公共网络(互联网)上的人无法直接查看、连接或访问私人网络中的任何内容。
许多私人网络通过 ISP 提供的设备连接到公共网络,并支付费用以接入互联网。例如,你家可能有一个 Wi-Fi 网络。只有住在你家的人或你授权的访客才能使用这个 Wi-Fi 网络,这使它成为一个私人网络。然而,你的家与互联网连接,通常是通过一个叫做调制解调器或路由器的特殊设备。这些设备在你家的 Wi-Fi 网络和 ISP 的公共互联网之间传递流量。你和你邻里的其他人通过特别的 ISP 设备支付费用以访问互联网。如果你不允许别人访问,他们就无法从公共网络直接访问你的私人网络。
图 2-2 显示了带有公共和私人网络的互联网的可视化地图。
数十亿个节点构成了互联网。这些节点代表了 IP 地址之间的连接。图中右下角的扩展部分显示了像 8.8.8.8 这样的单个地址是如何连接到 ISP,形成更大连接,最终构成互联网的。

图 2-2:互联网地图(图像已根据 Opte 项目创建的原始图像进行修改,使用署名 2.5 通用 [CC BY 2.5] 许可证,creativecommons.org/licenses/by/2.5/deed.en)
私有网络和公共网络通过它们使用的 IP 地址类型来区分。IPv4 地址由四个数字组成,每个数字的范围是 0 到 255,通常用句点分隔,例如:192.168.15.1 和 10.10.10.255。某些数字范围仅为私有网络保留,而其余的则供公共使用。私有地址使用某些永不改变的地址,例如 10.0.0.0 或 192.168.27.0。公共地址在你从公共网络连接到私有网络时,会被转换为私有地址,反之亦然。例如,当你连接到 google.com 时,你可能会连接到地址 8.8.8.8(一个公共地址)。一旦与 8.8.8.8 的连接建立,Google 自己的网络设备可能会将该连接转换为私有地址,例如192.168.1.1,以便你能够访问 Google 私人网络中的资源。这个过程被称为网络地址转换(*NAT**)。
黑帽眼中的互联网
当黑帽访问互联网时,他们通常是在尝试弄清楚如何越过公共网络,进入私人网络。这可能非常困难,因为构成今天互联网的许多系统是专门设计来阻止公共网络上的人们查看任何私人网络中的情况的。考虑 NAT 过程:连接到公共地址的用户看不到翻译过程,也看不到幕后发生的事情。当你连接到 google.com 时,你是通过网页浏览器连接的,Google 网站会出现。你并不会被告知,也通常看不到 Google 私人网络中所有的机制,这些机制使得网页能够按照预期的方式运行。
因此,当对手集中攻击一个目标时,他们的第一步通常是确定如何从网络的公共侧转移到私人侧。一旦进入私人网络,他们就可以继续寻找特定的目标,并执行攻击以获取他们想要的东西,无论是破坏正常的业务运作,还是窃取数据。为了成功执行这些操作,许多黑帽依赖于一套特定的步骤,以最大化他们攻击的潜力。
黑帽攻击方法
并非所有黑帽攻击都遵循特定的模式或步骤。但大多数攻击者在完全实现他们的目标之前,必须完成某些特定的目标。虽然有多个模型对这些目标进行了分类,但其中最著名的之一是洛克希德·马丁网络攻击杀链(*CKC**)。
CKC 包含七个步骤,黑帽攻击者必须完成这些步骤,才能使他们的攻击有效。这些步骤涉及许多网络攻击的前期、进行中和后期活动:包括侦察、武器化、交付、利用、安装、指挥与控制和攻击目标。让我们更详细地看一下每个步骤。
侦察
在 CKC 的侦察阶段,攻击者尽可能多地了解目标。他们首先收集任何被认为是公开信息的数据。在组织的情况下,这意味着来自其网站和社交媒体的数据,以及有关员工、组织结构、物理位置、合作伙伴关系、近期新闻、组织拥有的公共 IP 地址等信息。对于个人,这可能包括关于家庭成员、工作地点、居住地、犯罪记录和其他政府记录的信息,当然,还有社交媒体上的内容。
这些对手还会寻找一些不那么公开的信息,尽管这些信息仍然可以通过互联网找到,只要你知道在哪里找。这包括虽然所有人都能访问的、但并非公开消费的网站,比如员工的远程登录页面。或者它可能包括收集到的有关公共 IP 地址的细节,比如它正在运行的服务。黑帽攻击者还可能通过挖掘社交媒体或其他互联网资源,开始列出相关的电子邮件地址,供以后使用。
攻击者可以通过嗅探和扫描来寻找信息。嗅探是截取并分析其他用户的网络流量。黑帽攻击者可以在不干扰流量的情况下进行嗅探,因此用户不会意识到他们的流量正在被监控。例如,攻击者可能会查看来自邮件服务器的所有数据,并在将原始邮件发送到目的地之前复制任何附件。扫描是向设备发送特殊构造的数据包,并监听设备如何回应这些数据包。这些响应可以向黑帽攻击者提供有关节点运行的系统或软件类型的信息。例如,如果攻击者想知道主机是否运行的是 Windows 操作系统,他们可以发送专为 Windows 系统设计的数据包。如果系统回应错误,他们就知道这不是 Windows 系统。我们将在第六章《攻击你的网络》中详细讨论扫描和嗅探;这两者都可以成为对手信息来源的丰厚宝库。
所有这些侦察工作提供的信息帮助黑客缩小他们的关注范围,直到他们知道从哪里开始他们的初步攻击。它还提供了宝贵的信息,供他们在下一阶段利用来制定可能成功的攻击。例如,如果攻击者扫描一个公共 IP 地址并发现它连接到一个 Windows 服务器,他们就不会浪费时间去利用 Apple 的漏洞。这正是侦察工作成为成功攻击关键部分的原因。
武器化
在下一步的武器化阶段,黑客创建实际的攻击工具来针对目标进行攻击。通过侦察阶段收集到的信息,他们计划并创建所需的工具。这个阶段还要求对手清楚地知道什么方法能够最迅速地达到他们的任务目标。例如,如果攻击者的目标是收集更多关于目标的个人信息并用来勒索他们,他们可能会尝试利用目标的电子邮件。尽管创建一个破坏 Word 文档的病毒是一个有效的攻击手段,但这并不是实现该目标的最佳方式。相反,创建一个链接到虚假电子邮件登录页面的 PDF 文件,并尝试欺骗受害者使用它,才是更好的选择。这样,攻击者可能能够从虚假页面收集受害者的凭证,并用它们登录合法账户。
传递
一旦黑客拥有了武器化的工具包,无论是恶意软件、网络钓鱼网站(我们将在第三章详细讨论)还是其他形式的攻击,他们就准备好进行攻击了。同样,这要求使用侦察阶段收集到的信息来决定最佳的传递方式。许多近期的攻击通过电子邮件进行,但这并不总是最好的方式。
如果攻击者知道目标使用的设备存在已知漏洞,他们可能会制定一种利用该漏洞的传递方式。例如,如果一个公司网站使用了包含漏洞的可填写表单,对手可能会通过该漏洞直接将代码注入到网站服务器。这将使他们能够直接向服务器传递攻击,而不必依赖员工为他们安装攻击。
利用与安装
接下来的两步——利用和安装——依赖于一旦传递完成,如何将漏洞利用安装到目标设备。这意味着要让某个人点击恶意链接或启动在传递阶段创建的恶意软件。一旦利用完成,黑客应该能够执行他们的攻击或在设备上安装恶意软件。
请记住,攻击者想要获取的许多物品,比如信用卡号码或其他个人信息,通常存储在私人网络中,这些信息对公众是不可访问的。这意味着攻击者必须先攻破私人网络,才能完全访问其中的内容。
这种妥协通常涉及对手建立后门。考虑这个类比:如果前门是人们进入房屋的正常途径,那么使用后门(或车库门)就是绕过控制手段(例如门上的锁)的方式。黑帽的后门也以类似的方式工作,允许对手在不通过正常、可信的身份验证手段的情况下访问系统。
指挥与控制,以及对目标的攻击
在指挥与控制和攻击目标阶段,黑帽利用后门在系统中建立立足点。然后,他们可以利用这个立足点作为基地,进一步识别可以利用的系统。这被称为横向渗透。攻击者会继续进行横向渗透,直到能够直接到达他们的目标(如第一章所讨论,目标会根据攻击者类型而有所不同)。一旦他们找到通向目标的路径,攻击者将发动一整套攻击来获得访问权限并完成他们的任务。
指挥与控制阶段涉及创建一个指挥与控制服务器,这是一个允许攻击者从远程位置向受害设备发送命令并接收信息的工具。例如,如果黑帽攻破了一个网页服务器,他们可能指示该服务器联系网络上的其他设备,寻找他们可以进一步攻破的系统。通常,这些命令会使用正常的流量模式来隐藏,以便白帽更难在为时已晚之前检测到它们。
对目标的攻击通常以类似的隐秘方式进行,以确保黑帽不会被阻止获取他们想要的东西,而且组织无法减轻损害。如果攻击者盗取了一些信用卡号码,只有在银行不知道这些号码被盗的情况下,它们才有用,届时银行会在它们被出售或使用之前取消这些卡片。完成最后阶段后,黑帽会出售他们的战利品,接着进入下一个目标,再次从侦察阶段开始。
黑帽如何找到你
如果你仔细观察黑帽攻击的各个阶段,你会注意到最重要的步骤之一是第一步:侦察。如果对手无法找到任何有用的信息关于他们的目标,他们将很难发动有效的攻击。当然,这也使得在私有网络中站稳脚跟变得更加困难。
那么,黑帽攻击者从哪里找到他们的侦察信息呢?他们大多数从公开可用的资源中获取这些信息,而这些资源通常是人们在不自觉中创建的,暴露了他们并未意识到的信息。许多时候,配置错误的系统会在互联网上公开通信,暴露出组织可能不希望对外公开的服务。你可以通过使用Shodan来看到许多这样的开放系统,Shodan 是一个扫描互联网开放服务和系统的工具。扫描之后,Shodan 将其发现结果放入一个易于使用的数据库中,供公众搜索。通过使用 Shodan,你可以找到各种关于从互联网公开可访问设备的详细信息。我们将在本章末的练习中演示如何使用该工具。
使用 Shodan 并不是唯一能在网上找到有用信息的方式。互联网上有大量数据可能帮助黑帽攻击者设计攻击。让我们看几个场景,帮助你理解敌人是如何收集这类信息的。
示例 1:并购
假设一个攻击者得知 Sparkle Kitten Inc.正在收购 Smelly Puppy Co.并将其直接并入 Sparkle Kitten。通过阅读新闻,黑帽攻击者了解到 Smelly Puppy 的首席执行官对这次并购感到不满。攻击者决定在这个压力巨大的时刻针对 Smelly Puppy。他们从扫描 Smelly Puppy 的官网开始,寻找任何列出的电子邮件地址。通过使用自动化工具遍历所有可用的网页,包括那些可能无法通过 Google 搜索到的网页,他们找到了一个需要了解特定类型 Web 服务器的管理员职位招聘广告。
通过使用公开的注册信息,黑帽攻击者可以精确地找到该公司购买并注册使用的 IP 地址。接着,攻击者使用扫描工具针对这些地址,寻找特定的 Web 服务器。他们找到了服务器,而且发现它对发送到它的流量有响应。现在他们可以利用已知漏洞来精心设计有效的攻击并获取服务器访问权限。
示例 2:社交媒体狩猎
一个黑帽攻击者想要攻击 Secure Co.,世界上最安全的公司之一(正如它的名字所示)。攻击者知道 Secure Co.使用最新的设备、培训和最佳实践来保持安全,因为 Secure Co.经常宣传这些信息。黑帽攻击者还意识到该组织使用了一个特定的营销公司——Super Awesome Marketing,来处理所有广告事务。敌人决定不直接攻击 Secure Co.,而是攻击 Super Awesome Marketing。
为了做到这一点,攻击者会浏览 LinkedIn 和 Facebook,寻找在 Super Awesome Marketing 工作的员工。他们找到了一个在 IT 部门工作的特定员工,并开始在 Twitter 上追踪他们。每天早晨,这名员工都会在同一个健身房拍照。黑帽黑客还注意到他们在帖子中留下了地理位置标签。通过这些标签,黑帽黑客找到了员工使用的健身房。攻击者某天早晨到达那家健身房,倾听员工的对话,得知了关于 Super Awesome Marketing 邮件服务器的一个特定漏洞。对手利用这个漏洞访问邮件服务器,并接管了某名员工的邮件账户。现在,黑帽黑客可以通过该账户感染 Super Awesome Marketing 为 Secure Co. 创建的营销材料。因为这些材料来自一个受信任的供应商,它能顺利通过正常的安全检查,悄悄地在 Secure Co. 的私人网络中设置后门。现在安全性不再那么强了,是吧?
如何从黑帽黑客中隐藏自己
前面关于对手如何收集信息的示例可能看起来有些牵强,但它们描述的是黑帽黑客使用的真实技巧。当人们公开发布信息时,攻击者可以利用这些信息找到他们安全系统中的漏洞,从而能够精心策划针对个人或组织的完美攻击。防御这些攻击的最佳方法是实施操作安全(*OPSEC**)。
OPSEC 是理解并最小化任何可能被用来对付你的信息的过程。这个技巧起源于军事领域,当时军方担心通过泄露看似不重要的信息,会让敌人猜到即将发动的攻击。例如,如果军方将一支部队转移到一个新基地,敌方可以通过与其他信息进行关联推测出军方可能正在计划对某个国家发动攻击,尤其是该国家距离新基地较近。
对于民间组织来说,OPSEC 是保护黑帽黑客可能用来攻击组织的信息。这意味着限制你在公共网站、新闻稿或社交媒体上分享的信息。OPSEC 很难做到完美,因为很难知道攻击者可能在特定的情况下发现什么信息有用。确保 OPSEC 的最佳方法是,在发布信息时记住关于互联网的三条规则:互联网是开放的、公开的,并且是永远存在的。
互联网是开放的
当你使用互联网时,假设任何人都能看到你正在做什么或分享的内容,包括任何通过网络传输的数据。保护这些信息是你的责任,你需要决定如何发送这些信息。
一个很好的例子是请求网页的能力。当您访问一个网页时,您的浏览器需要弄清楚该页面在互联网上的位置。它通过查询一个域名服务(DNS)服务器来做到这一点,该服务器包含网站分配的公共 IP 地址的记录。例如,DNS 服务器可能会告诉您,域名 sparklekitten.net 的 IP 地址是 1.1.1.1。当您告诉浏览器访问 sparklekitten.net 时,它会发送出一个请求,最终到达 DNS 服务器,服务器提供该网站所在的 IP 地址记录,这样您的浏览器就能访问该网站。
通常,DNS 请求会经过一系列的 DNS 服务器,直到找到正确的服务器。您的浏览器首先向由 ISP 托管的服务器发送请求,该服务器再将请求转发给另一个 DNS 服务器,接着又转发给另一个,直到找到拥有正确记录的 Sparkle Kitten DNS 服务器。直到最近,浏览器几乎完全以未加密的方式发送这些请求,这意味着这些请求处于明文状态,任何人都可以看到。因此,不仅您的 ISP 可以看到您请求的每一个网页——它们非常乐意将这些信息出售给营销公司——而且任何能够嗅探您流量的人也能看到您的 DNS 请求。即使您正在使用私人浏览器或访问加密链接的网站,该 DNS 请求仍然使用未加密的协议,因此任何人都能知道您试图访问哪个网站。
幸运的是,许多浏览器现在已经开始支持通过加密链接发送的 DNS 请求。不过,这仍然是一个典型的例子,展示了互联网是如何开放的。无论您是在浏览网页、发送邮件,还是下载文件,您都在传递信息,这些信息会被编目、存储,并且通常会被出售。这些信息可以很容易地被利用,用来了解您或您的组织,从而策划出完美的攻击。因此,意识到您在互联网上传递的是什么信息是非常重要的。虽然您不需要完全切断与世界的联系,生活在洞穴里,但最好确保您加密任何敏感信息,尤其是当您通过电子邮件、文件共享或社交媒体发送时。通常,研究您使用的服务及其可能在后台收集的数据是个好主意。尽管采取这些步骤可能需要额外的时间和精力,但它们提供的额外安全性和内心的平静是完全值得的。
互联网是公开的
互联网是完全公开的;只要拥有正确的连接设置或支付给像 ISP 这样的公司使用其设备,任何人都可以上网。从很多方面来看,访问并不与特定的人挂钩。通过使用用户名或隐藏您的 IP 地址(稍后会详细介绍),您可以在互联网上隐藏自己的身份,这既是合法的,也是最好的做法。这不仅适用于视频游戏或社交媒体网站上的用户名,也适用于您的 IP 地址和您在世界上的实际位置。
跟踪 IP 地址位置的一种方法是使用Whois查询来查找注册信息。Whois 是一个网站注册信息数据库。多个网站提供 Whois 信息,包括 Myip.ms,如图 2-3 所示,展示了 IP 地址 1.1.1.1 的 Whois 记录。

图 2-3:1.1.1.1 Whois 记录
尽管公共 IP 地址与全球特定地区相关联,但很难信任使用该 IP 地址的人确实位于该地点。就像你可以将公共 IP 地址转换为私有 IP 地址一样,你也可以将公共 IP 地址转换为另一个地址。这使得追踪流量的实际来源变得困难,从而使黑客能够轻松地在明处隐藏自己。
这也意味着其他国家的人、你的老师、你的祖母,甚至你的邮递员都可以访问你在互联网上发布的内容。更重要的是,如果你将某些内容发布到互联网上并设为公开,可能很难阻止别人看到它。即使你认为你只是与朋友分享,还是有可能你的朋友将其分享给了公众。当你在互联网上发布任何信息时,最好的规则是假设每个人都能看到它,因此要以这种假设为基础来表达自己的想法。如果你认为某条发布可能会伤害到你,或者提供别人可以用来对付你的信息,最好不要发布它。
互联网是永恒的
几乎不可能从互联网上删除信息。例如,当你删除一封电子邮件时,它真的被删除了吗?如果你使用像 Gmail 这样的服务,删除的邮件会进入垃圾箱,保留 30 天后才会被彻底删除。因此,你删除的邮件并没有真正删除,它只是被放到了一个不同的地方,黑客仍然可以访问。
在社交媒体的情况下,情况甚至更糟。像 Facebook 和 Google 这样的公司通过人们在平台上创建的数据赚取大量利润,因此它们有利益保持这些数据尽可能长时间。Facebook 和 Twitter 会保存多年发布的内容。即使你从平台上删除了自己,曾在群组中发布的帖子仍然会公开可见。试着搜索你的全名和所在州,可能会惊讶地发现你的帖子出现在搜索结果中。
此外,许多人记录在线活动,以保留互联网变化的历史。一项主要从事此项工作的项目是互联网档案馆,网址为archive.org/。互联网档案馆试图对每个创建的网页进行目录编制,因此即使你已删除或编辑了网页,仍有可能存在它们的记录,供他人查找。
正如假设每个人都能看到你发布到互联网上的内容一样,假设你的互联网帖子将永远存在也是同样重要的。同样,这并不意味着你应该完全放弃使用互联网。只是要注意自己在线时的行为。
理解互联网的三条规则将帮助你练习 OPSEC(操作安全),如果有一天你为一个需要防止敏感信息泄露的组织工作。通过注意自己发布个人信息的方式,你将能够识别出黑帽攻击者可能利用的信息来攻击你的组织。你还可以向你组织中的其他人,特别是新员工,教授如何限制他们向公众分享信息的重要性。这种行为会让你的组织整体上更加安全。毕竟,攻击者知道的信息越少,他们攻击的难度就越大。
练习:分析你的网络
正如你在本章中学到的,理解你发布到互联网的信息非常重要。否则,攻击者可能会利用你无意中暴露的帖子来访问你的账户或私人网络。正如前面提到的,你可以使用 Shodan 来查找这些信息,Shodan 就像是一个 IP 地址的搜索引擎,正如你记得的那样。
尽管你可以在网页浏览器中使用 Shodan,但其他一些有用的工具需要命令行,它允许你在系统中输入命令以执行任务。在这个练习中,你将学习如何使用一些简单的命令来发现关于你网络的信息。然后,你将利用这些信息去搜索 Shodan,看看你在互联网上留下了哪些开放的服务。
网络命令行工具
Windows 和 macOS 操作系统都自带了一些工具,帮助你了解你的网络。让我们看看其中四个特别有用的工具,它们能够帮助你找到信息,而这些信息在使用 Shodan 进行搜索时会很有用。在开始使用命令之前,你需要访问系统上的命令行。Windows 和 macOS 有不同的命令行程序;每个程序使用的命令版本略有不同,输出的结果也不同。让我们分别看看它们。
Windows
定位到屏幕左下角的搜索栏,输入CMD。在搜索结果的顶部,你应该能看到一个名为命令提示符的应用。选择它,像图 2-4 中那样的窗口应该会出现在你的屏幕上。如果你不是以管理员身份运行,C:后面的文字将是你的主目录,并包含你当前的用户名。

图 2-4:命令提示符窗口
首先,我们将使用ipconfig命令。这个命令会输出您当前的网络配置,包括计算机分配的 IP 地址、默认网关以及 DNS 服务器信息。默认网关是计算机连接的第一个路由器,用于将流量传出您的网络。路由器将流量从一个设备传递到另一个设备,以连接两个端点。路由器创建了一个单一的网络,设备可以加入其中。因此,默认网关地址是您的计算机需要知道的,用来将流量发送到控制进出您网络流量的路由器。当您在命令提示符窗口输入ipconfig时,您应该看到类似以下的输出:
C:\Windows\System32> **ipconfig**
Wireless LAN adapter Local Area Connection* 1: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . :
Wireless LAN adapter Local Area Connection* 10: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . :
Wireless LAN adapter Wi-Fi: Connection-specific DNS Suffix . : lan Link-local IPv6 Address . . . . . : fe80::4d78:5074:4095:fe97%18 IPv4 Address. . . . . . . . . . . : 192.168.86.36 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.86.1Ethernet adapter Bluetooth Network Connection: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . :
注意在Wireless Lan adapter Wi-Fi下方标记为IPv4 Address的部分。这是您计算机的私有 IP 地址。从这个输出中,您可以看到该系统被分配了一个私有 IP 地址。同时注意IPv4 Address部分下方两行的Default Gateway部分。这标识了系统将其流量发送到的路由器,以便离开私有网络。在家庭网络中,这通常是 ISP 提供的调制解调器或路由器。默认网关也有一个私有 IP 地址。
尽管ipconfig能为您提供有关计算机在本地网络中使用的地址的有用信息,但它并不适用于 Shodan 的使用,因为您需要查找的是公共 IP 地址,而不是私有 IP 地址。您可以使用在线工具来发现公共 IP 地址,但我们将使用nslookup命令,因为它是另一个通常可用的命令行工具。这个工具可以查找分配给网站域名的 IP 地址。要使用它,您需要一个目标。为了本次练习,让我们使用 google.com。在命令提示符窗口中输入nslookup命令,然后跟上google.com:
C:\Windows\System32> **nslookup** **google.com**
Server: testwifi.here
Address: 192.168.86.1
Non-authoritative answer:
Name: google.com
Addresses: 2607:f8b0:4002:c09::8b 2607:f8b0:4002:c09::65 172.217.9.14
来自nslookup的输出显示了当前附加在 google.com 上的公共 IP 地址。这个工具在您试图确定与网站关联的 IP 地址时非常有用,可以帮助您了解网络中可疑流量的来源。根据您的地理位置和 Google 使用的当前配置,您的输出可能会有所不同。
现在,您有了一个公共 IP 地址,您可以使用另一个工具,叫做ping。这个工具会向一个 IP 地址发送一个小的数据包,然后监听该目的地是否会回应自己的数据包。这告诉您是否能与该系统进行通信,因为如果系统无法接收到 ping 请求,它就无法回应。您可以尝试对通过nslookup发现的公共 IP 地址使用ping。只需输入ping,然后跟上您想要目标的 IP 地址:
C:\Windows\System32> **ping** **172.217.9.14**
Pinging 172.217.9.14 with 32 bytes of data:
Reply from 172.217.9.14: bytes=32 time=14ms TTL=116Reply from 172.217.9.14: bytes=32 time=14ms TTL=116
Reply from 172.217.9.14: bytes=32 time=14ms TTL=116
Reply from 172.217.9.14: bytes=32 time=15ms TTL=116
Ping statistics for 172.217.9.14: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds: Minimum = 14ms, Maximum = 15ms, Average = 14ms
如你所见,ping 发送了四个数据包。每个数据包会记录发送和返回到原点的速度。这个速度非常快,以毫秒为单位记录。在这个例子中,每个数据包大约用了 14 毫秒。在命令结束时,系统会提供一个关于发送和接收的数据包的总结。如果你无法访问某个系统,ping 会显示数据包丢失。
让我们使用最后一个工具,它将为你提供所有搜索 Shodan 所需的信息。你知道通过ping命令可以找到 Google 的 IP 地址,但它并没有告诉你数据包是如何到达 Google 系统的。要了解这一点,你可以使用 tracert 工具,它将数据包发送到你电脑和你希望流量到达的目的地之间的每个路由器。这些数据包提供了关于你流量到达目的地的各个停靠点(或跳数)信息,使用的功能叫做 生存时间(TTL)。本质上,每个数据包被设计成只能进行一定次数的跳跃,这个次数由其 TTL 值决定。当数据包通过一个路由器时,就算一次跳跃。每次路由器传递数据包时,TTL 值会减少 1。当 TTL 值降到 0 时,数据包会返回关于最后一个接收数据包的路由器的信息。数据包死亡,因此最后接收到它的路由器会向数据包的下一个亲属发送信息,或者在这种情况下,向最初发送数据包的设备发送消息。tracert 工具会总结所有这些跳跃。在命令提示符窗口中输入 tracert,并添加目标 IP 地址:
C:\Windows\System32> **tracert** **172.217.9.14**
Tracing route to dfw28s02-in-f14.1e100.net [172.217.9.14]
over a maximum of 30 hops: 1 2 ms 2 ms 2 ms testwifi.here [192.168.86.1] 2 3 ms 3 ms 3 ms Address Removed by Author 3 12 ms 14 ms 17 ms Address Removed by Author 4 10 ms 5 ms 5 ms 71.154.103.34 5 29 ms 23 ms 15 ms cr2.dlstx.ip.att.net [12.122.138.122] 6 17 ms 14 ms 14 ms 12.123.240.25 7 23 ms 22 ms 13 ms 12.255.10.100 8 23 ms 23 ms 22 ms 209.85.243.95 9 17 ms 22 ms 14 ms 108.170.231.69 10 19 ms 22 ms 15 ms dfw28s02-in-f14.1e100.net [172.217.9.14]
Trace complete.
输出显示,第一次跳跃是到你的默认网关(换句话说,就是你的路由器)。从那里开始,再经过九次跳跃,数据包才能到达目的地。每个跳跃都代表一个路由器,无论是在本地网络还是互联网中。每个跳跃都会发送三个数据包,以显示到达该点所花费的平均时间。
使用这个工具是确定你的网络或互联网中哪些部分可能遇到问题的理想方法。它还能帮助你了解你的 ISP 分配给你电脑的公共 IP 地址;这是你首先看到的公共地址,因为你的流量必须先经过这个跳跃才能访问互联网。在之前的 tracert 输出中,我省略了第二个和第三个结果,因为它们直接连接到我的家庭网络。但在正常的 tracert 执行中,你将能够看到这些地址。
macOS
在 macOS 上,打开终端应用程序以访问命令行。为此,请使用屏幕右上角的搜索栏,输入 Terminal,然后点击出现的应用程序。现在你可以学习一些有用的命令,帮助你找到有关网络的信息。
在 macOS 上,你可以使用与 Windows 10 命令非常相似的命令,尽管有些命令需要稍作调整。例如,在 macOS 上,你将使用 ifconfig 命令,而不是 ipconfig。ifconfig 命令提供与 ipconfig 相同的信息,但更为详细,正如你在以下输出中所看到的:
$**ifconfig** lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
XHC20: flags=0<> mtu 0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether b8:e8:56:16:38:10
inet6 fe80::8ec:dd2e:36cc:b962%en0 prefixlen 64 secured scopeid 0x5
inet 192.168.86.93 netmask 0xffffff00 broadcast 192.168.86.255
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
ether 0a:e8:56:16:38:10
media: autoselect
status: inactive
awdl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1484
ether ee:57:a6:16:74:96
inet6 fe80::ec57:a6ff:fe16:7496%awdl0 prefixlen 64 scopeid 0x7
nd6 options=201<PERFORMNUD,DAD>
media: autoselect
status: active
en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500options=60<TSO4,TSO6>
ether 32:00:1e:74:20:00
media: autoselect <full-duplex>
status: inactive
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=63<RXCSUM,TXCSUM,TSO4,TSO6>
ether 32:00:1e:74:20:00
Configuration:
id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
ipfilter disabled flags 0x2
member: en1 flags=3<LEARNING,DISCOVER> ifmaxaddr 0 port 8 priority 0 path cost 0
nd6 options=201<PERFORMNUD,DAD>
media: <unknown type>
status: inactive
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
inet6 fe80::b740:b05f:b952:2490%utun0 prefixlen 64 scopeid 0xa
nd6 options=201<PERFORMNUD,DAD>
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
inet6 fe80::508:28d2:8ad8:65a5%utun1 prefixlen 64 scopeid 0xb
nd6 options=201<PERFORMNUD,DAD>
utun2: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
inet6 fe80::e0b5:18ed:6a4c:a999%utun2 prefixlen 64 scopeid 0xc
nd6 options=201<PERFORMNUD,DAD>
ifconfig 命令返回大量信息。在这些输出中,可能很难找到你的设备的 IP 地址。查找 en0(以太网 0),它通常表示你的主要网络适配器。默认情况下,主网络适配器会分配你的 IP 地址。
macOS 上的 traceroute 命令类似于 Windows 上的 tracert 命令。它遵循相同的语法,输入命令后加上你要追踪的目标:
$ **traceroute** **31.13.93.35**
traceroute to 31.13.93.35 (31.13.93.35), 64 hops max, 52 byte packets 1 testwifi.here (192.168.86.1) 2.753 ms 2.391 ms 1.938 ms 2 REDACTED 2.349 ms 2.619 ms 2.141 ms 3 REDACTED 13.995 ms 4.940 ms 4.207 ms 4 71.154.103.34 (71.154.103.34) 5.964 ms * * 5 cr2.dlstx.ip.att.net (12.122.138.122) 16.537 ms 17.924 ms 20.084 ms 6 dlstx410me9.ip.att.net (12.123.18.177) 14.537 ms 15.603 ms 14.522 ms 7 12.245.171.14 (12.245.171.14) 15.592 ms 17.718 ms 31.346 ms 8 po104.psw04.dfw5.tfbnw.net (157.240.49.143) 14.118 ms 13.705 ms po104.psw02.dfw5.tfbnw.net (157.240.41.125) 23.049 ms 9 157.240.36.39 (157.240.36.39) 18.651 ms 157.240.36.135 (157.240.36.135) 17.058 ms 157.240.36.37 (157.240.36.37) 18.979 ms
10 edge-star-mini-shv-02-dfw5.facebook.com (31.13.93.35) 14.644 ms 20.972 ms 20.617 ms
nslookup 和 ping 命令在 macOS 和 Windows 上几乎相同。一个主要区别是,在 macOS 上,ping 默认不会仅执行四次 ping,而是会持续 ping 一个系统,直到用户手动停止命令。如果你正在更改系统配置并希望确保你所做的任何操作没有阻碍网络访问,这种行为会非常有用。但在大多数情况下,你可能希望将 ping 的次数限制为四次或五次,以避免一次发送过多的 ping。你可以使用 -c 参数设置发送的 ping 次数,-c 是 count(计数)的缩写:
$ **ping** **-c 4 192.168.86.1**
PING 192.168.86.1 (192.168.86.1): 56 data bytes
64 bytes from 192.168.86.1: icmp_seq=0 ttl=64 time=1.891 ms
64 bytes from 192.168.86.1: icmp_seq=1 ttl=64 time=2.907 ms
64 bytes from 192.168.86.1: icmp_seq=2 ttl=64 time=5.073 ms
64 bytes from 192.168.86.1: icmp_seq=3 ttl=64 time=9.108 ms
--- 192.168.86.1 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 1.891/4.745/9.108/2.769 ms
使用 Shodan
Shodan 提供两种形式:一个你可以安装的命令行工具和一个你可以浏览的网站。本章只讨论网站版。你可以访问 Shodan 网站 www.shodan.io/。在网站上,你需要注册一个免费账户。免费账户允许你使用大部分工具功能,包括搜索其数据库,但限制了你从网站下载报告和其他信息的数量。图 2-5 展示了首页。
一旦你拥有一个免费账户,浏览网站以熟悉其布局。首先点击 Explore 标签,它位于页面顶部、搜索框的右侧。这个页面提供了 Shodan 数据库中各种 IP 地址的分类和这些地址上暴露的服务。

图 2-5:Shodan 的首页
在左侧,你应该能看到几个有趣的类别。点击标记为 Video Games 的类别。你会看到一列各种在线游戏的列表,包括 Counter Strike、Starbound 和 Minecraft。如果点击 Minecraft,你将看到 Shodan 当前定位到的所有开放的 Minecraft 服务器。图 2-6 展示了该列表的一个示例。

图 2-6:Shodan 定位到的 Minecraft 服务器
Shodan 还可以提供更为严重的信息,例如攻击者可以用来利用系统的信息。返回到 Explore 页面,这次不要选择“Video Games”,而是点击Default Password,它位于页面中部,灰色框内。Shodan 验证过的使用默认密码进行身份验证的系统列表将会显示出来,如图 2-7 所示。

图 2-7:使用默认密码的系统列表
使用默认密码是邀请黑帽攻击者进入你系统的好方法。Shodan 允许你检查你正在使用的任何 IP 地址是否有默认凭据。它还可以告诉你哪些服务暴露在互联网上。例如,在左侧,你会看到一个名为“Top Services”的列表。点击Telnet,以查看允许 Telnet 连接的系统列表,如图 2-8 所示。

图 2-8:Telnet 开放的系统
Telnet 允许你远程连接到一个系统,并像管理员一样发送命令。它本质上让你控制系统。哦,顺便提一下,所有的 Telnet 流量都是以未加密的形式发送的,这使得它相当危险。但正如你所见,许多设备都允许 Telnet 连接。点击列表中的 IP 地址,查看这些设备的位置以及其他相关信息。图 2-9 展示了一个在中国的系统,Telnet 开放。

图 2-9:Shodan 上关于中国某系统的 IP 记录
现在开始有点偏执了吗?Shodan 为你提供了大量关于公众可以在互联网上看到的网络信息。你还可以用它来搜索特定的地址。在搜索栏中,尝试输入你在tracert试验中发现的中介地址,看看结果是什么。你可能不喜欢这些结果,但至少现在你知道你的网络将什么暴露给黑帽攻击者了。
隐藏攻击者的关键是首先了解他们可以看到什么。在这个练习中,使用命令行工具和 Shodan,你可以收集到这些数据。如果你发现你的某个设备在 Shodan 上暴露了,你可以采取一些步骤来关闭暴露。首先,你需要识别出哪个设备被暴露了。Shodan 提供了关于连接的更多细节,这些细节对完成这一任务很有帮助。其次,你需要控制暴露。这里有几个选项。你可以完全将设备从网络中移除,尽管这通常不可行,因为设备可能无法继续正常工作。你还可以查找制造商,看看是否有关于如何保护设备的建议。如果这些方法不起作用,像 Reddit 和 Spiceworks 这样的论坛通常会提供关于如何保护家庭网络的建议。一旦你知道哪个设备是开放的,关闭它就容易多了。
结论
互联网是由设备和连接构成的复杂结构,跨越全球。虽然这可能很难想象,但你不需要理解互联网的每一个方面就能安全地使用它。通过了解黑客如何找到目标,以及他们如何针对这些目标发动攻击,你可以在使用互联网时更好地保护自己的系统。第一步是知道你正在公开哪些信息。一旦了解了暴露给攻击者的信息,你就可以更好地部署自己的防御措施。
第三章:钓鱼策略

尽管看起来并非如此,但人类在某些行为上是相当可预测的。黑帽黑客知道这一点,并利用它来对自己有利,采用一种叫做社交工程的技巧,诱使受害者做出他们平时不会做的事情或泄露一些隐藏的信息。
攻击者通过社交工程技巧来欺骗你,从而获得系统或数据的访问权限。在本章中,我们将讨论攻击者用来获取情报的一些社交工程技巧,包括网络钓鱼、URL 劫持,甚至是恶作剧。到本章结束时,你将能很好地识别假消息和伪造网站,帮助你避免任何试图窃取个人信息的对手。
什么是网络钓鱼?
网络钓鱼是最常见的社交工程攻击类型之一。这是通过电子邮件等方式欺骗受害者透露关键信息的尝试。你很可能见过一些邮件,内容是承诺向你发送一百万美元,或者承诺如果你点击某个链接就能获得一个酷炫的奖品。你可能会因为其中可笑的语法或荒谬的前提而按下 DELETE 键。这些就是典型的钓鱼攻击例子。
黑帽黑客会试图伪装成合法的个人或组织,提供某种奖励或制造只有你能解决的危机。例如,他们可能会假装是来自你银行的人,并告诉你:“你需要在账户被锁定之前,回复你的账户详细信息。”通过增加紧迫感和威胁,他们希望你足够害怕,做出他们想要的行为,而不会怀疑他们的策略。
这些尝试通常会寻求一些细节信息,如个人身份信息(PII)、信用卡号码或重要在线账户的密码,如银行账户或电子邮件账户。有时,它们会直接在邮件中要求你提供这些信息。通常,它们会要求你点击一个链接,进入一个模仿真实网站的恶意网站,任何你在该网站输入的信息(如密码和用户名)都会被窃取并记录。这是一种钓鱼攻击的轻微变种,称为网络劫持。我们将在“黑帽如何通过 URL 欺骗你”一节中进一步讨论这一点。
一个明显的钓鱼攻击
有时,钓鱼邮件很容易识别,并且会被你的邮箱的垃圾邮件设置自动过滤掉。让我们来看一个你可能在任何一天的垃圾邮件文件夹中发现的典型钓鱼邮件的例子:
亲爱的人类 Greg,
我们注意到你的信用卡在我们的数据库中没有更新。我们有一个新系统,要求你重新输入你的信息。你看,Don 把一大杯咖啡洒在了旧系统上。我告诉 Don,不可以在系统地方喝咖啡,但他说他随时可以喝。请问,我可以要一下你的信用卡号吗?谢谢,再见。
此致敬礼,
Janice,一个真正的人类。(不是猫)
这封邮件显然不是由名为 Janice 的真实人员发送的。它有许多语法错误,并使用了不专业的语言。邮件中也没有提到他们代表的是哪个服务,更没有解释为什么他们会直接发送邮件要求您更新信息,而不是让您登录个人账户(这是典型的做法)。此外,邮件中包含了许多对于账户更新邮件来说不必要的细节。钓鱼邮件通常会包含一些叙事内容,目的是让您信任或同情发送者,比如讲述自己被驱逐出国或最近失去了亲人的故事。这些细节是为了混淆或欺骗您。
并非所有钓鱼攻击都显而易见
并非所有钓鱼邮件都容易识别。假设您收到了来自customerservice@amazon.org的邮件。
尊敬的客户,
您在
的账户最近因可疑活动被标记。由于此活动,我们已暂时暂停您的账户,并将在十天后永久删除该账户,除非您验证您的信息。 若要验证您的账户,请点击链接:
。这是一条自动消息。请将所有回复发送至 accounts@sparklekitten.net。 此致
客户服务
这个钓鱼攻击更难察觉。攻击者确保写了一封简短且连贯的邮件。内容直截了当——您的账户已被暂停,并可能被删除——并使用了紧迫感的社会工程学原理,促使您点击一个链接,链接肯定会将您引导到某种恶意网站,甚至下载恶意软件。通常,黑帽黑客会窃取真实公司的标志,使他们的电子邮件看起来更真实。上述示例电子邮件可能会在顶部粘贴亚马逊或 PayPal 的标志,让您以为这封邮件来自这些公司之一。
唯一真正能表明这是一封钓鱼邮件的迹象是电子邮件地址,customerservice@amazon.org。通常,当收到钓鱼邮件时,发件人的地址会与实际公司使用的地址非常接近,但又有所不同。通常会包含额外的单词或拼写错误,比如accounts@amzon.com。如果您不确定邮件的真实性,可以通过将地址与您从该公司收到的其他邮件进行比较,查看域名是否相同(域名是@符号后的文字)。
利用细节制造更有说服力的钓鱼邮件
有时候,攻击者会针对特定的人或组织,试图获取他们想窃取的特定数据,因此他们会使用一种叫做spear phishing的技术。Spear phishing 利用关于某个人的真实信息,制作出一封看起来非常真实的电子邮件,甚至可能骗过最优秀的白帽黑客。让我们来看一个例子:
早上好,Karen!
你好,这是来自 IT 帮助台的史蒂夫。HR 那边一切都好吗?我们今天晚上应该在你的系统上运行更新,但在这之前,我需要从你的账户做一些更改。你能把账户登录信息发给我吗?我现在忙得不可开交,没有时间走三层楼去你办公室,所以我希望能远程登录。谢谢!
史蒂夫
ABC 公司
123 街道
美国,某地
这次黑帽真的做了功课。他们不仅找到了一个目标——在 HR 部门工作的凯伦,还找到了一个 IT 帮助台人员来冒充,名字是史蒂夫。通过添加一些细节,比如 HR 部门距离 IT 部门三层楼的距离,攻击者能够与凯伦建立信任和熟悉感,这也是两种更强大的社会工程学原则。
网络钓鱼与其他非邮件钓鱼
电子邮件并不是攻击者尝试针对受害者的唯一方式。钓鱼攻击可以通过任何允许人与人之间沟通的媒体进行。已经发现钓鱼尝试出现在聊天应用如 Discord、社交媒体平台如 Instagram 和 Twitter,甚至在像英雄联盟或堡垒之夜这样的游戏中。
他们也可以使用你的电话。通过电话进行的钓鱼攻击叫做vishing,特别危险,因为对方可以实时对你的反应做出回应。如果你听起来很怀疑或者不感兴趣,黑帽可能会改变策略,试图诱使你提供他们想要的东西。vishing 攻击常常还会冒充权威来源,比如警察或国税局。模仿权威是一个社会工程学原则。人们倾向于立即信任已知的权威人物,比如医生,因此攻击者通常会假扮成这样的角色。
如何保护自己免受钓鱼攻击
现在你知道如何识别钓鱼邮件,这可能对你来说已经变得很容易,但并不是每个人都知道如何识别这些攻击。想想你的某位年长亲戚或亲人,比如祖父母,他们可能不懂黑帽钓鱼的特征。帮助他们识别攻击者何时在攻击他们是很重要的,可以通过记住钓鱼邮件的一些常见特征来做到这一点:
-
钓鱼邮件通常涉及某种紧急情况或权威。如果邮件中说你需要立即采取行动,否则将会有麻烦,那么很可能这就是钓鱼邮件。
-
一定要检查拼写错误、不正确的公司标志或奇怪的电子邮件地址。
-
如果你从未使用过某项服务,他们不太可能突然给你发邮件。你不可能收到没有账户的银行的款项。
-
技术支持永远不会先给你打电话。
-
除非你完全确定邮件来源,否则始终直接访问网站,而不是点击电子邮件中的链接。
教育你的朋友和家人注意在使用电子邮件时这些细节,能帮助他们保持安全。你还可以在他们的垃圾邮件过滤器中创建自定义规则,帮助他们防范常见的钓鱼攻击。例如,如果你知道他们只使用 Facebook,你可以创建一个规则,将来自其他社交媒体平台的邮件发送到垃圾邮件文件夹。这将帮助减少他们需要处理的钓鱼邮件量,从而更容易捕捉到那些漏网之鱼。
黑帽黑客如何利用网址欺骗你
许多钓鱼邮件不仅直接要求你提供个人信息;相反,它们会告诉你点击一个网址,导向一个恶意网页,在那里黑帽黑客可以窃取你的密码,甚至在你的计算机上安装恶意软件。当你点击链接时,你会以为自己正在访问一个完全安全的网页,因此可能毫不犹豫地输入你的重要信息。
URL(统一资源定位符)是用于查找网站的地址,例如 www.google.com/ 或 www.instagram.com/。当你在浏览器中输入该地址时,计算机会读取它并发送域名系统(DNS)查询,查找与该网址相关联的 IP 地址。这类似于学校通过在数据库中查找你的名字来找到你的家庭地址。从本质上讲,这就是 DNS 为你的网页浏览器所做的:它使用网站的名称(URL)来查找它的地址(IP 地址),从而让浏览器能为你展示正确的网页。DNS 通常保存在一个服务器上,可能是你的本地网络上的服务器,或者在很多情况下是由你的互联网服务提供商(ISP)管理的服务器。
错别字钓鱼
我们使用网址的频率如此之高,以至于大多数人已经不再关注网页地址了。这正是攻击者所期望的。黑帽黑客可以创建自己的网址,并用这些网址代替合法的网址,引导你访问恶意网页。这被称为“域名劫持”(pharming)。
攻击者通过修改网址或网站内容来实现“域名劫持”。当黑帽黑客拼写错误的网址时,这种行为被称为 错别字钓鱼。例如,他们可能会注册 petmart.com 而不是 petsmart.com。然后,DNS 查找拼写错误的网址,而不是正确的网址,导致你进入不安全的网站。如今,错别字钓鱼较为罕见,因为许多公司会注册所有可能的拼写错误,以确保它们都指向同一个合法网站。
复杂的 URL 和重定向
黑客还会创建难以阅读的复杂 URL。他们通过在初始 URL 后创建一个很长的路径来实现。路径是指在网站上找到文件的位置。例如,sparklekitten.net/kittenpics 就是访问 sparklekitten.net 网站中“猫咪图片”部分的路径。攻击者可以利用这一点,通过创建很长的路径来使 URL 的真实目的地变得难以察觉。例如,你可能会收到一封电子邮件,里面的链接看起来像这样:www.accounts.com/user/payments/…,三个点表示 URL 的其余部分被截断了。尽管这看起来像是一个有效的网站,但路径的结尾可能会有更危险的部分,比如payments/files/virus.exe。
黑帽黑客也可能使用重定向来隐藏他们的 URL 目的地。重定向是一段代码,当被激活时,它会将你引导到另一个网站,而不是你点击的原始网站。你可能会在网页上看到一个广告,显示一个很酷的新浏览器游戏叫做Cat Attack!这个广告看起来很真实,但当你点击广告横幅时,实际上你并没有进入一个有趣的网页游戏,而是网页中嵌入的一个脚本会激活并将你重定向到sparklekitten.net/dumbhooman。
重定向是对手们喜欢的手段,因为在激活之前很难被发现。如果合法网站不安全,攻击者也可以在真实的合法网站上放置脚本甚至重定向(关于重定向的更多内容,请参见第七章《Web 应用攻击》)。
修改 DNS 记录
攻击者喜欢通过篡改 DNS 记录来进行药物攻击。DNS 服务器使用记录来组织和管理所有网站及其 IP 地址。这些记录在互联网上的所有 DNS 服务器中维护,因此,如果你的 DNS 服务器没有记录,它会向另一个 DNS 服务器发送请求,直到找到你需要的记录。
如果黑帽黑客能够修改 DNS 记录,他们就可以指示你的网页浏览器去任何他们想去的地方。他们通过入侵 DNS 服务器并修改记录来实现这一点,这样任何查询该服务器的人都会得到恶意记录。幸运的是,修改 DNS 服务器是困难的,因为它们很难被入侵。
另一种药物攻击技巧是向你的计算机的本地主机文件中添加信息。所有计算机系统中都有本地主机文件。任何添加到文件中的 DNS 记录将会被使用,而不是向 DNS 服务器发送查询以寻找该记录。如果攻击者获得了该文件的访问权限,他们就可以创建自己的记录。与修改服务器上的 DNS 记录一样,访问本地主机文件也很难做到。
对于对手来说,攻击你的系统还有一种更简单的方法,那就是改变你的 DNS 查询的去向。攻击者可以让它们指向恶意的 DNS 服务器,而不是正确的 DNS 服务器。这通常是在你的计算机本地进行的,或者更常见的是在数据传输经过的路由器上进行。由于你的系统接受第一个收到的记录,攻击者可以通过他们的欺骗性 DNS 记录来重定向你所有的互联网流量。如果发生这种情况,不仅链接会被定向到不安全的网站,就连你输入 www.facebook.com 时,也会被送往一个危险的网站。伪造 DNS 服务器或记录很难被检测到,目前是网络安全研究人员热议的话题。
骗局
骗局是编造的故事,用来传播关于某个特定主题的虚假信息;例如,在互联网上,可能是一个假冒的名人故事或一种新的神奇健康疗法。骗局有很多不同的发起原因。有时它们仅仅是作为一个笑话被制造出来,比如关于最新 iPhone 型号上并不存在的新功能的恶作剧。
骗局也可能是为了损害或传播关于某个特定目标的误导性信息。例如,一个黑帽黑客可能因为某个猫粮公司不再生产自己猫咪最爱的脆口口味而感到愤怒。通过虚假的健康代码违规报告,这个对手可能会编造一个骗局,称该公司的猫粮是有毒的,从而让人们犹豫是否购买。
大多数骗局通过社交媒体传播。包含骗局的帖子或文章可以通过 Facebook 或 Twitter 快速传播。有时候,这些欺骗行为使用真实的信息,使它们看起来更加合法,这也是揭穿骗局并传播正确信息的难点。不了解真相时,很难反驳骗局,尤其是当它来自你信任的人时。
欺骗性可以成为一种强大的武器。在社交媒体的帮助下,黑客可以迅速传播关于某个主题的虚假信息。这可能产生巨大影响,导致人们对信息产生不信任、愤怒和困惑,因为他们越来越难以判断哪些是真实的。作为这种不诚实行为的大规模例子,我们可以看看 2016 年美国总统选举。关于两位候选人产生了多种虚假故事和骗局,导致大量误导性信息在公众中传播。任何骗局都有可能对人们造成伤害,因此我们需要时刻准备好在社交媒体动态中识别出它们。
为什么黑帽黑客喜欢钓鱼攻击
为什么黑帽黑客喜欢使用钓鱼技巧,包括 URL 劫持和骗局,来攻击人们?记住,攻击者是懒惰的。钓鱼攻击之所以有吸引力,是因为它便宜、简单且快速。
钓鱼攻击的成本很低,因为你只需要一个邮件服务器来发送信息。很多地方都允许你以极低的成本租用邮件服务器。更好的是,攻击者不仅可以使用自己的邮件服务器,还可以控制他人的邮件服务器。这样,他们不仅能从服务器的联系人列表中获得新的目标邮箱地址,还可以利用该系统发送邮件,使追踪钓鱼邮件的来源变得更加困难。即便只有千分之一的人做出回应,他们仍然很可能获利。
设置钓鱼邮件活动也非常简单。攻击者只需制作一封通用的钓鱼邮件,并安排在某个时间发送即可。因为钓鱼攻击不是时效性的,他们可以等到有人点击链接后,再继续进行其他项目。(像鱼叉式钓鱼等技术为初始邮件增加了复杂性,因为它需要关于受害者的定制信息。)
电子邮件是一种快速的媒介;一旦设置好邮件计划,数十万封钓鱼邮件可以轻松在一天内发送。这为攻击者提供了在相对较短的时间内找到易受骗目标的最大机会。一旦有人点击或回复,攻击者就应该拥有所有他们需要的信息来利用受害人。
黑帽黑客喜爱钓鱼攻击的最大原因是它有效。防御钓鱼攻击非常困难,因为没有硬件或软件能够完全防止攻击。即使是垃圾邮件过滤器也会漏掉一些信息。垃圾邮件过滤器检测鱼叉式钓鱼的可能性也非常小。唯一对抗钓鱼攻击的一致防线就是被攻击者本人。
三思而后行,避免钓鱼攻击
虽然看起来你总是需要警惕钓鱼攻击,但保持警觉的最佳方法是质疑一封邮件或一个电话是否合理。这样做将帮助你识别攻击。
通过停下来思考电子邮件的要求或电话中的人告诉你做什么,你可以轻松识别他们故事中的不一致或漏洞。以下是质疑潜在攻击时需要记住的一些关键细节:
-
没有任何公司会无论如何要求你提供密码。它可能会要求你重设密码,但绝不会直接要求你提供密码。
-
没有人会突然联系你,尤其是为了给你某些东西。
-
如果有人告诉你必须马上采取行动,停下来思考一下你是否应该这么做。
-
法律事务,尤其是刑事案件,几乎从未通过电话或电子邮件处理过。而且,你绝不应该在没有事先核实的情况下支付罚款(例如,税费或刑事罚款),最好是亲自检查是否为官方费用。
选择另一条路径
即使你采取了预防措施,识别出别人是否在试图诈骗你也可能很困难,尤其是当他们使用了鱼叉式钓鱼攻击时。但请记住,你总是可以选择其他方式来核实某件事情是否属实。例如,假设有人声称是你的银行工作人员,打电话说你的账户出现了问题。与其当时就处理,不如告诉他们你现在很忙,稍后会打回电话解决问题。黑帽黑客最讨厌这种情况,因为他们知道你不会再回拨电话,而是会打电话给真正的银行。
你可以对任何钓鱼方法使用这种策略。与其点击邮件中发送给你的链接,不如通过 Google 搜索或直接输入网址访问该网站。事实上,除非你百分百确定邮件的来源,否则绝不应点击邮件中的链接。你还可以使用知名的 DNS 服务器来确保你访问的是实际网站。将浏览器的 DNS 服务器设置为 8.8.8.8(Google 的 DNS)或 1.1.1.1(Cloudflare 的安全 DNS)是避免 DNS 劫持的好方法。
听从你的“蛛丝马迹”感觉
永远不要忘记,你是抵御钓鱼攻击的最佳防线。如果你看到可疑的东西,听从你内心的声音,做一些调查,确定它是否合法。你还应该负责提醒其他人。检查一个来源是否可信需要额外的时间,但这有助于防止虚假信息在互联网上蔓延。
练习:分析钓鱼邮件
成为网络安全专家的一部分不仅仅是识别威胁,更是理解这些威胁如何对你或你的组织造成伤害。尤其在钓鱼邮件的情况下,识别某些钓鱼邮件可能会很具挑战性。但即使你能识别并删除一封邮件,知道自己发现了钓鱼邮件也不能帮助你理解攻击者使用的技巧。相反,当你收到一封极其精心制作的钓鱼邮件时,你可以运用自己的知识来识别并分析它。
在这个练习中,你将学习如何分析一封钓鱼邮件,识别它的来源、是否有恶意以及黑帽黑客尝试进行的攻击类型。到最后,你将了解攻击者用来制作有说服力的钓鱼邮件的一些技巧,并学会如何使用免费的在线工具来判断邮件是否危险。
这个练习使用 Gmail 平台作为示例。但每一步收集的信息是一样的,无论你使用什么类型的邮件应用程序。
钓鱼邮件的指标
首先,你需要一封钓鱼邮件进行分析。图 3-1 展示了我收到的一封截图,试图冒充苹果 iCloud 登录警告。你通常可以在垃圾邮件文件夹中找到钓鱼邮件。只需确保不下载任何附件或点击任何链接。

图 3-1:钓鱼邮件的示例
这封邮件声称来自 Apple,并且宣称我的账户因来自 Linux 操作系统的可疑登录而被暂停。为了修复这个问题,它说我只需点击链接登录我的账户。
这是一封看起来非常真实的钓鱼邮件,几乎完全模仿了实际的 Apple 邮件。为了比较,图 3-2 展示了一张真实的 Apple iCloud 登录通知截图。

图 3-2:来自 Apple 的一封合法邮件
看起来几乎一样,对吧?那么,我是如何知道图 3-1 是钓鱼邮件的呢?让我们再看一遍,并加上一些注释(图 3-3)。

图 3-3:带有编号注释的钓鱼邮件
下面是这些显眼指示的解释:
-
邮件的发件人是 iCloud Notice,这很可疑,因为你可能会期望它只是显示 Apple。此外,它被加上了引号,表明它是一个 友好名称。电子邮件应用程序使用友好名称作为电子邮件地址的简写。例如,如果你的朋友 Jane 的电子邮件地址是 sparklekittenisamazingdazzle@emaildomain.com,应用程序可能会用 Jane 代替它,帮助你识别发件人。稍后在本练习中,你将看到黑帽黑客如何经常利用这一功能来试图欺骗用户。
-
“收件人”字段没有包含我的电子邮件地址。这表明邮件是通过 BCC(密件抄送)发送的,这样可以隐藏邮件的收件人。攻击者使用这个技巧向多个受害者发送钓鱼邮件,而不会让他们察觉。
-
邮件正文中没有包含我的账户名。如果这封警告邮件是专门发送给我的,难道我的账户名不应该列出吗?此外,邮件中有很多语法错误,包括最后一句话。而且,邮件试图通过声称我的账户将被禁用来吓唬我。
-
提供的链接与合法的 Apple 通知中的链接相同,但在这封邮件中,它是 活动的(可点击的)。更重要的是,当我将鼠标悬停在链接上时,显示的 URL 与写明的内容不同,因此它实际上不是指向 Apple 网站的链接。
-
邮件底部有三个“链接”,分别是 Apple ID、支持和隐私政策。这可能是最难察觉的指示。然而,当我将鼠标悬停在这些链接上时,它并没有显示典型的手形图标,表明它们是可点击的链接。原因是它们根本不是链接,而只是一个图片,用来模仿来自合法邮件的签名。
如你所见,即使邮件制作得非常精良,仍然有几个线索让人明显知道这是一封钓鱼邮件。但是,仅仅识别出邮件是钓鱼邮件只是良好分析的第一步。接下来,我们要通过分析邮件头和 URL 来了解邮件的更多信息。
为什么分析网络钓鱼邮件很重要?假设你在 Sparkle Kitten Inc. 的 IT 部门工作,一位用户打电话说他们收到了一个邮件,但不确定它是否合法。你可能会查看邮件,发现它是垃圾邮件,然后告诉用户删除它。这是一个不错的计划,但如果其他用户也收到了相同的邮件怎么办?如果其中一个用户点击了链接呢?通过花时间分析发送者是谁,以及点击链接后 URL 的作用,你将能获得宝贵的信息,如果这成为一个问题,你可以将其传递给你的邮件管理员或安全人员。
邮件头分析
你需要首先分析邮件头,以便检测邮件的来源并确定其他有用信息。邮件头提供有关邮件来源的详细信息(例如邮件到达你收件箱的路径),发送者是谁,以及邮件服务器用来读取和使用的其他特定信息。
查找完整邮件头的过程根据你使用的邮件应用程序不同而有所不同。在 Gmail 中,点击邮件右上角的三个点以访问菜单,如图 3-4 所示。

图 3-4: Gmail 中的邮件菜单
在此菜单中,点击显示原始邮件,如图 3-4 所示。这样做会在新窗口中打开邮件,并在原始的收件人和发件人字段下方显示完整的邮件头,如图 3-5 所示。

图 3-5: Gmail 中的邮件头
这些原始数据可能很难读取和理解,特别是考虑到它包含的字段数量。你如何理解如此复杂的文本?当然是使用一个设计用来读取数据的工具!你在分析中使用的第一个工具是 MX Toolbox。你可以在mxtoolbox.com/网站上免费找到它。MX Toolbox 提供了多种用于邮件分析的工具。现在,我们将使用 Analyze Headers 工具。你将在该网站的主页上看到它(见图 3-6)。

图 3-6: MX Toolbox Analyze Headers 工具
要使用 Analyze Headers 工具,只需将完整的邮件头复制并粘贴到空白窗口中。该工具将分析邮件头,并将所有数据分隔到易于阅读的字段中,如图 3-7 所示。

图 3-7: MX Toolbox 邮件头分析
在查看邮件头字段之前,我们需要先检查x-dmarc-info标题下方显示的内容。这些内容与邮件使用的两种身份验证类型有关:发送者政策框架(SPF)和域名密钥标识邮件(DKIM)记录,这两者合起来被称为域名消息身份验证报告(DMARC)。电子邮件应用程序本质上使用 SPF 和 DKIM 记录来验证邮件是否获得了从该域和 IP 地址发送的权限。例如,如果 Google 向您发送电子邮件,它来自 Google 的电子邮件服务器,并且具有特定的 IP 地址。该地址对应于一个 DKIM 和 SPF 记录。您的邮件服务器在收到邮件时会检查 Google 的 DKIM 记录。如果黑帽攻击者试图伪装成 Google 发送电子邮件,您的服务器将发现攻击者使用的 IP 地址与注册在 Google 的地址不同。因此,DKIM 记录将在邮件头中显示为失败,如图 3-8 所示。

图 3-8:DMARC 失败
尽管 SPF 或 DKIM 记录失败是识别钓鱼邮件的重要指标,但它们并不能作为证据。邮件服务器需要正确设置 DMARC 记录,签名系统才能正常工作,而许多服务器并没有这么做。也有可能伪装 IP 地址以通过 DMARC 检查,因此即使邮件通过检查,也不代表它是合法邮件。
现在,让我们看看邮件头字段。在图 3-9 中,注意到Return-path字段顶部的地址是 yantodiscordolaksroelp21@abtrenyx.com,这个地址与 Apple 使用的地址相差甚远。这个地址表明我们正在查看一封钓鱼邮件。还需要注意这个地址,以便邮件管理员稍后查找,以查看其他用户是否也收到了这封邮件。

图 3-9:带有突出显示字段的邮件头
继续查看邮件头,注意那些以X开头的头部字段。X头部包含邮件服务器用于决定如何发送邮件的信息。例如,X-Apple-Action头部显示MOVE_TO_FOLDER/INBOX。这意味着,当邮件进入我的 Gmail 账户时,它会自动发送到我的收件箱,而不是垃圾邮件或垃圾箱。下面这些头部,显示了关于 DMARC 的信息。如您所见,这里没有 DMARC 策略,因此邮件未能通过 DMARC 检查。
表 3-1 列出了一些其他需要关注的头部,以及您可以从中收集的信息。
表 3-1:重要的邮件头字段
| 字段 | 目的 |
|---|---|
Message-ID |
赋予邮件的唯一 ID。使得通过搜索功能更容易查找。 |
x-originating-ip |
发送邮件的原始 IP 地址。帮助判断发送者是否已知为恶意,并且可以找到该发送者发送的其他邮件。 |
X-Mailer |
指定用于发送电子邮件的应用程序。奇怪或意外的平台可能表示钓鱼攻击。 |
Received-SPF |
提供 SPF 检查的结果。 |
X-MS-Has-Attach |
指示电子邮件是否包含附件。 |
URL 分析
查看完邮件头信息后,你需要验证 URL 是否恶意。为此,你将使用另一个在线工具 VirusTotal,网址是www.virustotal.com/gui/home/url/。图 3-10 显示了其主页。

图 3-10:VirusTotal 的主页
VirusTotal 允许你使用多个杀毒引擎扫描 URL 链接的恶意行为,我们将在第四章中更详细地讨论。它通过每个引擎运行链接,并汇总信息,生成一个易于理解和共享的页面。如果即使只有一个引擎标记它为恶意,你也应该认为这个链接是恶意的。图 3-11 显示了将图 3-2 中的链接运行通过 VirusTotal 的结果。

图 3-11:来自 VirusTotal 的分析
即使只有一个引擎返回了恶意结果,也足以知道这个链接是危险的。
像所有优秀的安全专家一样,你对点击链接后发生的事情充满好奇。然而,你也知道点击链接可能会感染你的计算机。那么你该怎么办呢?
你使用另一个名为 Joe Sandbox 的工具(www.joesandbox.com/)。这是一个免费的工具,允许你在沙箱环境中运行附件或打开 URL。沙箱是模拟计算机,旨在像真实的物理机器一样运行,但你可以将它们与计算机系统的其他部分隔离,并轻松摧毁它们。这使得沙箱非常适合测试恶意实体,例如恶意软件,因为你可以研究恶意软件感染,而不用担心它会传播或损坏关键系统组件。
要开始使用 Joe Sandbox,首先创建一个帐户。然后将链接复制并粘贴到沙箱中,如图 3-12 所示。

图 3-12:Joe Sandbox 的主页
报告生成需要几分钟时间,但一旦完成,你将获得关于该链接和点击时运行的内容的丰富信息。两个最有趣的功能是行为图和截图部分。
行为图(图 3-13)显示了当某人点击链接时发生的所有进程,例如打开的任何内容或访问的任何网页。在这个示例中,链接打开了几个不同的网页,然后重定向到其他网页。你可以看到这些网页都不是实际的 Apple 域名,这进一步证明了这封邮件不是来自有效的 Apple 来源。

图 3-13:Joe Sandbox 报告:行为图
截图部分(图 3-14)显示了沙箱执行链接时打开或运行的截图。

图 3-14:Joe Sandbox 报告:截图部分
本节还提供了动画选项,因此你可以实时查看发生了什么。我提交的特定链接找不到,虽然这对我们的研究目的来说是个不幸的情况,但并不令人惊讶。钓鱼链接通常只在短时间内有效,然后要么被发现,要么被钓鱼者删除以避免被检测到。尽管如此,由于邮件要求你验证账户,你现在知道这很可能是一次凭证劫持攻击。在这种攻击中,攻击者试图窃取凭证,要么通过让受害者在虚假网站上输入凭证,要么通过利用浏览器漏洞捕获凭证。
通过一些研究和一些免费工具,你可以了解很多关于钓鱼邮件的信息。你现在已经分析了这封邮件,并确定它是一个钓鱼邮件,攻击源以及尝试的攻击类型。你现在可以通过在邮件程序中添加规则来更好地保护自己,指示服务器将来自这个恶意发送者的任何邮件直接发送到垃圾邮件箱,或将此信息传递给相关管理员以供其在防御工作中使用。
结论
说到钓鱼攻击,关键是要记住,攻击者只需一次点击就能访问你的计算机或潜在地窃取你的个人信息。钓鱼攻击可能来自不同的方向,因为攻击者基本上可以利用任何形式的社交工程通信。在使用电子邮件或接到电话时保持警惕。通过练习,你将学会更容易识别钓鱼尝试。无论攻击是使用网络劫持(pharming)、语音钓鱼(vishing)、精准钓鱼(spear phishing)还是任何其他类型的社交工程,都要花时间仔细思考别人要求你做的事情。这样做可能是钓鱼攻击成功与失败之间的区别。
第四章:恶意软件感染

计算机攻击中最著名的类型之一就是恶意软件的传播。有时被错误地称为病毒,恶意软件,或恶意软件,是任何旨在绕过系统预定操作的软件。此类活动通常未经用户授权,甚至对用户不可见。恶意软件自现代计算机问世以来就一直存在。它有很多形式,尽管杀毒软件的努力不断加强,今天仍然很常见。
在本章中,我们将讨论什么是恶意软件,一些较为常见的变种,以及如何最好地防御它,同时澄清你可能从电视上看到的虚构黑客那里得到的一些误解。
什么是恶意软件?
恶意软件是旨在破坏计算机系统的软件。因此,即使一个游戏占用了你计算机的全部内存,它也不被视为恶意软件。定义恶意软件损害的最佳方式是由未经授权的行为引起的损害,这种行为对系统来说是异常的。例如,一个正常的操作可能涉及用户使用由内部管理员设置的用户名和密码登录系统。如果一个应用程序允许黑客在没有使用用户名和密码的情况下访问系统,那么它就执行了一个未经授权的操作。
这可能看起来是琐碎的事,但理解恶意软件与漏洞或其他损坏软件之间的区别非常重要。如果一款软件,比如前面提到的游戏,存在一个无意的漏洞,导致计算机崩溃或造成其他伤害,它就不是恶意软件,只是一个劣质程序。同样,即使一个浏览器插件声明:“我们将窃取你的浏览历史并出售”,它也不是恶意软件,即使读者没有仔细阅读声明。另一方面,如果一个程序在表面上运行正常,但同时执行隐藏的操作,比如记录按键而没有通知用户,那它可能就是恶意软件。
大多数情况下,恶意软件很容易识别,因为它会执行明显恶意的操作,例如窃取密码或允许另一个未经授权的系统访问你的计算机。但是,有些程序执行的是合法的授权功能,同时也会进行一些不受欢迎的活动,比如展示广告或记录用户数据。仅仅因为一个程序看起来、表现得像一个安全的程序,并不意味着它没有在后台运行恶意代码。
恶意软件类型
为了分类不同类型的恶意软件,恶意软件分析师通常使用两个属性:恶意软件如何感染系统以及恶意软件执行什么类型的攻击。这些属性有助于将恶意软件划分为大致类别,从而帮助我们更好地防御它。在本节中,我们将探讨一些更常见的类别。
尽管本章讨论的恶意软件可以很好地归类为以下小节中描述的几类,但在现实世界中情况并非总是如此。黑帽黑客经常将不同类型的恶意软件类组合成一个单一的恶意软件包。例如,你可能会遇到一个病毒,它同时安装间谍软件和根工具。由于这一原因,当你试图清除恶意软件感染时,扫描计算机的每个部分非常重要。例如,仅仅清理病毒文件并不意味着你已经完全消除了整个感染。
病毒
也许最为人所知的恶意软件类型是病毒,我们定义病毒不是根据它的功能,而是根据它的行为。用户必须与病毒进行交互,病毒才能开始执行其恶意代码。我们将这种交互称为触发器。触发器可以是点击文件、运行程序或打开附件。一旦执行了这些操作,病毒就能运行其指令并释放其有效载荷。
病毒的有效载荷是执行病毒程序所设计的任何恶意操作的代码。例如,1990 年代创建的许多病毒,如切尔诺贝利病毒,旨在摧毁感染的系统,通常通过重写或删除关键文件(图 4-1)。切尔诺贝利病毒是由台湾大学生陈英豪创建的,他想证明当时的杀毒软件是无效的。一旦激活,代码就会用零重写系统硬盘的前一个千字节。这摧毁了许多系统运行所必需的关键文件,包括分区表,它有助于确定硬盘上信息的物理存储位置。

图 4-1:Windows 蓝屏(错误屏幕),显示切尔诺贝利病毒成功感染后的情况(原图由自由艺术许可 1.3 覆盖)
随着网络犯罪的普遍化,攻击者开始利用病毒植入其他类型的恶意软件,如木马或勒索软件(详见第 59 页),然后利用这些软件进一步利用系统。
尽管所有病毒都具有这些共同特征,但病毒的具体目标可能会有所不同。例如,文件感染病毒感染文件,而引导扇区病毒感染启动计算机时使用的启动文件。宏病毒专注于,你猜对了,就是系统中的宏。宏是将发送到计算机的指令转换成更长指令集的代码。例如,当你按下 CTRL-C 时,宏会将该按键转换为“复制”命令。宏通常用于 Microsoft Office 应用程序中,以提供额外的功能,尤其是在像 Excel 这样的电子表格应用程序中。一些病毒,被称为隐身病毒,在代码中加入了额外的层级,试图避开杀毒软件的检测。
蠕虫
蠕虫是一种恶意软件,设计目标只有一个:尽可能多地感染系统。与病毒不同,蠕虫可以在没有任何用户直接接触的情况下感染系统,这意味着它可以比病毒更容易地通过网络传播。一旦蠕虫感染了一个新系统,它会寻找其他未感染的计算机,继续传播。
蠕虫之所以能够在没有用户接触的情况下传播,是因为它们利用了一个漏洞,该漏洞允许进行远程代码执行,即即使是未经授权的用户,也可以在远程位置执行任何代码。这使得对手能够安装程序、创建用户,甚至更改网络设置。通常,允许远程代码执行的漏洞涉及欺骗系统,让它认为某个用户或进程有权限执行代码。一个经典的例子就是 ILOVEYOU 蠕虫(图 4-2)。该蠕虫于 2000 年创建,利用了当时 Windows 系统中的一个漏洞,导致文件类型 .vsb(表示 Visual Basic 脚本)被隐藏。这意味着当文件通过电子邮件发送时,附件看起来像一个普通的文本文档。但当用户打开它时,它会运行一个脚本,通过覆盖某些文件类型来感染系统。接着,它会使用目标的电子邮件账户,将文件副本发送给与 Microsoft Outlook 关联的地址簿中的每个联系人。传播蠕虫到新系统的最常见方式是通过电子邮件。这为蠕虫提供了一种接触其他用户的方法,并且可以通过它获得电子邮件地址列表。在 10 天内,报告了 5000 万个 ILOVEYOU 感染事件。

图 4-2:ILOVEYOU 蠕虫发送的电子邮件示例
从历史上看,黑客曾利用蠕虫作为炫耀的工具。你能够感染的系统越多,你在黑客社区中的信誉就越高。一些蠕虫,如 Melissa,就没有有效载荷。Melissa 是由 David Smith 于 1999 年创建的一个宏病毒。它通过伪装成 Word 文档的附件感染电子邮件系统。点击该文件后会运行宏代码,打开色情网站,并将其副本发送给联系人列表中的每个人。仅仅因为一个蠕虫没有有效载荷并不意味着它没有害处。Melissa 在蠕虫通过电子邮件泛滥,直到电子邮件服务器崩溃时,导致了许多邮件服务器离线。其他一些蠕虫,如 Code Red 和 SQL Slammer,也由于生成的流量过大,造成了网络服务的重大中断。Code Red 于 2001 年 7 月出现,几天内便感染了全球近 40 万个系统。SQL Slammer 更快:它在 2003 年出现时,仅在 10 分钟内就感染了大约 75,000 个主机。当蠕虫携带有效载荷时,它们通常会包含像勒索病毒或远程访问后门(稍后我们将讨论)这样的恶意软件。
特洛伊木马
就像它名字来源的经典希腊故事一样,特洛伊木马是一种恶意软件,它伪装成合法软件,暗地里在后台运行恶意任务。特洛伊木马模仿许多不同的软件元素,包括游戏、Word 文档或 PDF 文件,甚至插件或宏。一旦特洛伊木马安装完成,它通常会开始运行不必要的代码,但可能不会立即激活全部负载,直到满足特定条件或收到命令为止。例如,许多特洛伊木马会向一个由黑客控制的服务器发送 HTTP 请求,等待从感染的计算机接收命令。由于特洛伊木马模仿合法程序,使得它们非常难以检测,这也使得它们可以长时间潜伏不被发现。
最常见的一种特洛伊木马叫做远程访问木马(RAT)。它的主要目的是在你的系统上放置一个静默的、无法被检测到的程序,允许对方远程控制你的计算机。这个程序连接到指挥与控制(C&C)服务器,允许攻击者通过正常的流量过滤程序向你的计算机发送命令,而不被发现。
本质上,RAT 使用正常的流量,例如对互联网上某个网站的请求,来请求 C&C 服务器的额外命令。攻击者可以响应并发送额外的命令,或者在 RAT 的情况下,利用该程序获得后门访问系统的权限。(后门访问意味着通过未知或未授权的方式进入系统。)这使得黑客能够利用该系统,移动到其他目标或攻击其他系统。
勒索软件
勒索软件是一种使用加密技术锁定计算机,直到支付赎金为止的恶意软件。一旦勒索软件部署,它会加密特定的目标,例如正在使用的文件、整个硬盘,甚至整个数据库,导致这些文件无法使用。因为文件被加密,计算机无法读取它们,直到黑客提供解密密钥,才能恢复文件的内容。攻击者会扣留密钥,直到赎金支付,通常使用无法追踪的货币,如加密货币。
对手经常使用这种类型的恶意软件,因为它有几个优势。首先,它易于部署和扩展。一次感染就能传播到整个网络或加密关键的关键系统,实质上使一个组织瘫痪。其次,一旦部署,它几乎无法绕过。加密技术非常难以破解,许多现代加密协议的破解时间可能需要数十亿年。避免支付赎金的唯一有效方法是保持备份。然而,许多组织即使有备份,也选择支付赎金,因为恢复文件需要花费大量时间。第三,它便宜且有效。对手尝试感染几乎不需要任何成本,但一旦成功,便能获得成千上万甚至数十万美元的回报。随着服务的紧迫性增加,以及涵盖此类攻击的网络保险变得越来越普遍,更多的组织选择支付赎金。
间谍软件和广告软件
间谍软件和广告软件可能是影响系统的最令人讨厌的恶意软件类型。间谍软件窃取系统中的数据,而广告软件则在你使用系统时插入广告。两种恶意软件通常感染网络浏览器或其他使用互联网的程序。它们特别喜欢隐藏在用户安装的浏览器插件或宏中。这使得它们能够跟踪你的浏览历史、点击的链接和访问的账户,同时在屏幕上随机弹出烦人的广告。虽然这些恶意软件通常比其他类型的恶意软件造成的后果较轻,但它们可能会导致系统变慢,有时还会窃取有价值的个人数据,包括密码。它们还可能导致其他恶意软件的进一步感染,因为加载的广告会指向其他类型的恶意软件,如特洛伊木马。
Rootkit 和 Bootkit
Rootkit 和 bootkit 为攻击者提供了前所未有的系统访问权限。Rootkit 是一种恶意软件,它试图访问计算机的内部系统文件,这些文件是操作系统运行所必需的。例如,rootkit 可能会替换控制登录的文件。通过这样做,黑帽黑客可以创建一个秘密的登录账户,赋予他们对系统的完全管理员权限,同时隐藏实际的账户,使其他用户无法察觉,从而保持不被发现。通常,这些文件对未授权用户是禁止访问的。为了访问这些文件,rootkit 利用一个漏洞,使其能够以管理员身份运行。这样,它可以对系统文件进行各种修改,包括添加用户、更改文件权限或更改系统的网络设置。
启动病毒访问并修改系统的启动记录,启动记录是当你开启电脑时启动操作系统的文件。启动记录初始化许多不同的配置,通常还会加载额外的软件,比如硬件驱动程序,操作系统用来与电脑硬件(如键盘和鼠标)进行交互。通过修改启动记录,恶意软件可以改变系统的功能,允许黑客完全控制,或者将其他恶意软件(如僵尸网络)加载到系统中(关于僵尸网络的更多内容见第六章)。启动病毒的另一个优势是,许多系统安全功能直到系统启动后才会启动。这意味着恶意软件可以在不被杀毒引擎或其他安全工具检测到的情况下运行。物联网(IoT)设备,像是恒温器或监控摄像头等具有网络连接的小型设备,尤其容易受到启动病毒的攻击,因为它们通常几乎完全通过启动记录运行所有功能(我们将在第六章讨论物联网设备)。
启动病毒和根套件在系统中极难被检测到。根套件会修改原本用于检测它们的程序。例如,它们可以修改你的杀毒程序,使得在运行扫描时跳过安装根套件的位置。启动病毒能够躲避检测,因为传统的杀毒软件只有在操作系统加载后才会起作用,而操作系统加载是在启动记录运行之后进行的。这使得在问题出现之前,很难发现系统中的任何异常。
检测这两种类型感染的典型方法是通过传统的症状,如系统运行缓慢、文件丢失或损坏,或异常的运行进程。你也可以通过使用安装在 USB 闪存驱动器或其他媒介上的杀毒软件来检测根套件。一些系统还具备进行安全启动的能力。这种方式会修改启动过程,检测与启动病毒相关的错误或异常,从而在启动病毒运行之前将其拦截。Windows 系统通过检查启动记录是否来自微软来执行安全启动。如果系统发现启动记录被修改,检查会导致系统停止启动。但即使如此,找到恶意软件也只是战斗的一部分。移除它非常棘手,通常情况下,最好是彻底清除系统并重新安装,而不是冒险让感染潜藏在某个无法访问的角落里。
多态恶意软件
最强大且最危险的恶意软件形式是多态恶意软件。这种恶意软件具有先进的功能,能够根据特定因素改变其代码,比如它当前感染的系统类型或系统上运行的应用程序。这使得它能够根据环境进行调整,而不是仅仅运行固定的负载,从而使其非常难以通过传统方式被检测到,因为它在特定情境下才会变得有害。一旦触发条件被激活,恶意软件就会启动,改变其代码并执行破坏性操作,开始执行其预定任务。
幸运的是,多态恶意软件极为罕见,且通常是为非常特定的目标所打造的。由于创建这种恶意软件需要大量的时间和资源,通常只有国家行为者才会使用它。一个著名的多态恶意软件例子是Stuxnet 病毒。该恶意软件是由美国及其盟国设计的,目的是感染伊朗的核离心机,并阻止其正常运作。Stuxnet 的设计者特别将其制作成在进入离心机系统之前保持隐蔽,一旦进入系统,它就会重写代码并感染设备。Stuxnet 能够保持长时间未被发现,成功破坏了伊朗的核计划。
随着技术的进步,编写像多态恶意软件这样的高级代码变得越来越容易。你可能会发现传统恶意软件中集成了多态特征,从而赋予其额外的功能。例如,利用机器学习理论和算法,恶意软件可以被训练逃避杀毒软件的检测,即使杀毒程序之前已经检测到过相同的破坏性软件。根据 Hyrum Anderson 的最新研究,攻击者可以使用机器学习程序将恶意软件通过一系列杀毒引擎进行扫描,根据扫描结果稍微调整软件的代码。这个过程将反复进行数十万次,直到没有任何引擎能够检测到该恶意软件。最终的结果是,恶意软件的运行方式和之前一样,但不会引起杀毒引擎的注意。对敌人而言,他们无需做任何事情;机器学习程序会为他们完成所有工作。
黑帽黑客如何部署恶意软件
黑帽黑客部署恶意软件的原因多种多样。为了了解攻击者如何以及为何在系统上释放恶意软件,让我们通过一些典型的攻击案例来讲解。尽管所有恶意软件各不相同,但大多数恶意软件的安装方式是相似的。
部署任何恶意软件的第一步是创建破坏性软件。通常,攻击者通过两种方式来实现这一点:利用现有的漏洞或从零开始编写代码。许多黑帽黑客使用已经设计好以利用某个漏洞的恶意软件进行攻击。这意味着他们根据需要向现有的恶意软件中添加特定的有效载荷。一个很好的例子是 EternalBlue 漏洞,由美国国家安全局(NSA)开发,后来被攻击者用于多个恶意软件样本中。该漏洞通过利用服务器消息块协议(Server Message Block,SMB)处理某些类型信息的方式,使攻击者能够在目标 Windows 机器上执行远程代码。每次攻击中,攻击者都会添加自己的代码来执行。
从零开始编写新的代码比使用框架更难,但通常更有效。原因是目标系统的防护机制之前未曾遇到过该恶意软件。因此,新的恶意软件更有可能避开检测(正如我们在本章后面将讨论的那样),因为杀毒软件严重依赖于实际恶意软件样本的代码。
在创建了破坏性代码后,攻击者进入下一步:初始感染。通过各种方式,他们可以将有害软件安装到系统中,但最有效的方式是社会工程学,这是第三章中描述的过程。通过网络钓鱼技术,通常很容易让用户下载并执行恶意软件。例如,攻击者喜欢将不安全的代码隐藏在无特征的文件类型中,如 Word 文档或 Excel 电子表格。两种文件都允许创建宏,黑帽黑客可以在其中存储恶意代码,当用户打开文档时,代码会激活,从而导致初始感染。通过链接执行脚本下载有害代码到计算机也是常见的做法。由于许多恶意软件需要用户交互才能生效,因此文件或链接看起来越无害越好。这对木马尤其重要,因为木马必须长期留在系统中才能有效。
初始感染会释放完整的有效载荷,但这并不意味着恶意软件已经完全停止工作。在这个阶段,一些恶意软件专注于执行特定的操作;例如,勒索软件会加密文件或其他存储介质。其他恶意软件则专注于创建 APT(高级持续威胁),这是一种复杂的恶意软件,会在网络上长时间保持隐蔽,收集数据和其他信息,然后执行大规模攻击。RAT(远程访问木马)就是一种可能的 APT,它允许攻击者通过后门反复访问系统,以收集有关环境的更多信息。APT 非常危险,且难以处理,因为它们在设计上避免了许多传统的检测方式。更糟糕的是,一些恶意软件会执行炫目的攻击,例如加密所有的 Word 文档,以掩盖安装 rootkit 的秘密代码。这就是为什么在恶意软件攻击中数字取证至关重要的原因(见下文《如何防御恶意软件》)。
一旦感染发生并且有效载荷被部署,传播就可以开始。这可能涉及通过主机系统的联系人列表发送恶意软件的电子邮件;通过传输协议(如文件传输协议 FTP 或超文本传输协议 HTTP)在网络中传播;或是将恶意软件隐藏在文件中,直到新的用户点击它。虽然蠕虫特别擅长传播,勒索软件和病毒也可以快速而轻松地传播,尽管它们可能需要用户输入才能做到这一点。
如何防御恶意软件
防御恶意软件的最佳方法是使用反恶意软件软件,通常称为防病毒 程序(尽管它们现在防护几乎所有形式的恶意软件,而不仅仅是病毒)。防病毒程序由许多商业供应商提供。微软系统还内置了一款名为 Microsoft Defender(前身为 Windows Defender)的防病毒程序。但仅仅下载防病毒程序并不一定提供完全的保护。为了确保系统安全,你需要获得适当的软件,以减少计算机可能遇到的风险。
防病毒软件有两种基本的检测形式:特征码检测和启发式检测。前者通过代码特征来识别恶意软件。代码特征是破坏性程序代码中的独特部分,有助于识别它。例如,假设你收到一封电子邮件中的文件。特征码防病毒程序扫描该文件,并注意到该文件中包含作为宏一部分的代码sparklekitten.exe。它会将该代码与已知恶意软件特征数据库进行比对,确定sparklekitten.exe被标记为恶意。然后,防病毒软件会提醒你,并可能根据其设置将该文件隔离。
签名病毒软件非常快速,因为它只需将一段代码与签名数据库进行比较,以验证它是否为恶意软件。图 4-3 显示了一个在 Linux 系统上运行的此类程序的示例。它也不需要太多系统资源,因此可以在大多数系统上运行——即使是内存容量较小或中央处理单元(CPU)较慢的系统,也可以运行,这里的 CPU 负责处理发送给计算机的指令。然而,为了让软件能够检测到恶意软件,它的数据库必须包含恶意软件的签名。这意味着新创建的恶意软件可以避免病毒检测,至少在足够多的感染事件被报告给软件制造商并添加准确的签名到数据库之前。它还意味着黑客可以修改恶意软件的签名以避开检测(或像本章前面讨论的那样,使用机器学习改变恶意软件)。由于这些优缺点,最好将签名病毒软件部署在终端系统上,例如桌面、手机、笔记本电脑以及其他处理数据的系统上,以避免减慢系统实际工作的速度。

图 4-3:在基于 Linux 的系统上运行的病毒软件的屏幕截图(此图像已从 SourceFire 创建的原图修改,并根据 GNU 通用公共许可证授权)
启发式病毒检测根据网络流量的变化来调整其检测方式,寻找异常的流量,这些流量偏离了正常的流量模式。正常的流量会根据网络的使用方式而有所不同,因此启发式病毒程序必须花时间学习这个基准。然后,它就能察觉到异常。例如,如果你的计算机上安装了一个 RAT(远程访问木马),它的第一步是通过网络发送一条信息到其 C&C(指挥与控制)服务器。启发式病毒程序可以检测到这一行为,并识别出这不是正常流量(可能是因为它发生在异常时间,或者来自一个通常不发送这种流量的系统)。然而,如前所述,RAT 仍然有可能模仿启发式系统认为的正常流量。
启发式病毒检测非常有效,因为它能够检测到全新的恶意软件,以及试图隐藏的恶意软件,如 rootkit 或 bootkit。但它比基于签名的检测需要更多的设置和维护。为了发现不正常的流量,启发式引擎首先需要了解你系统的正常流量是什么样的。这意味着它必须在开始有效工作之前确定一个准确的基准,并且这个基准必须随着系统用户行为的变化而定期更新。通常,你会在一些关键的高流量区域找到启发式系统,比如扫描从外部进入网络的流量的防火墙上。
所有类型的杀毒软件都会扫描进入或离开系统的大多数数据,具体取决于你的设置或所使用的产品。这包括 PDF 或图片等文档、Excel 或游戏等应用程序,甚至是网页流量。现代系统中强大的扫描工具使得恶意软件难以通过传统手段进入你的屏幕。然而,良好的检测依赖于你拥有一个适当维护的杀毒程序。你需要定期更新软件并执行自动定期扫描。你还应确保软件设置为扫描所有类型的数据,特别是电子邮件附件或从互联网下载的文件。
尽管杀毒软件在技术上有许多进步,但攻击者仍然有可能通过理解并规避杀毒软件检测恶意文件的方式来绕过这些扫描。例如,你可能收到一份正常、干净的 Word 文档,杀毒软件对此没有反应;该文档在任何签名数据库中都不会显示为已知恶意软件,也不会显示为异常流量。但当你打开它时,你可能会触发一个链接,连接到互联网并下载勒索软件。在杀毒软件有机会反应之前,勒索软件可能会执行并锁定你所有的文件。
你还可以使用文件完整性工具来确保文件没有被篡改以隐藏木马或其他恶意软件。文件完整性工具使用文件哈希值,我们将在第九章讨论这一点,来检查文件是否已被修改。大多数公司会在其网站上提供其应用程序或文件的哈希值。你可以将该哈希值与下载的文件或应用程序的哈希值进行比较,以确保黑客没有在其中添加恶意软件。如果哈希值匹配,说明该文件或应用程序没有被修改。
要真正保护你的计算机免受恶意软件的侵害,你必须加强社交工程防御。奇怪的链接、未经请求的电子邮件附件以及其他类似的可疑请求都表明,攻击者可能试图诱使你下载恶意软件。
练习:分析恶意软件并管理杀毒设置
预测恶意软件的来源并避免它们是保护系统安全的关键步骤。毕竟,如果恶意软件永远没有进入你的计算机,你就不需要担心它会感染你的系统。在这个练习中,你将使用一些免费的在线工具扫描 PDF,看看它是否感染了恶意软件。你还将了解更多关于计算机中内置的杀毒设置,这样你就知道在不小心下载恶意软件到系统时该怎么办。完成这个练习后,你将学会如何识别并防御各种恶意软件威胁。
分析附件中的恶意软件
假设你收到了一份看起来像是朋友发来的奇怪 PDF 文件。这个朋友以前曾发送过类似的附件,但这次你并没有期待他们的邮件,也不确定这是否是恶意文件。一种解决方法是问问你的朋友是否发送了该文件;另一种方法是直接删除它,继续过你的生活。然而,假设你的朋友无法联系,并且你真的想知道该文件是否安全。那么,你就需要进行一些恶意软件分析了。
为了完成这项练习,你可以使用为本书创建的 PDF,名为maliciouspdf.pdf,该文件可在nostarch.com/cybersecurityreallyworks/下载。或者,你也可以分析任何你想要的文件;只要确保将它标记为DO NOT OPEN,以免忘记它可能是恶意软件。
首先,你需要验证发送的文件类型。Office 文档、可执行文件、媒体文件和 PDF 通常是无害的,除非你打开它们。但是,有些文件类型,如.js、.sh 或 .script 文件,下载后可能会立即执行;其他文件,如 .dll 文件,可能会在下载后被其他进程激活。最佳选择是使用虚拟机下载文件。虚拟机是与物理计算机其他部分隔离的环境,因此如果它被感染,很可能不会感染整个系统。为了让恶意软件突破虚拟机,它需要非常复杂的软件。
因为并非每个人都有虚拟机的使用权限,另一种解决方案是将可疑的有害文件下载到云平台。例如,如果你使用 Windows 的 OneDrive,你可以直接将文件保存到你的在线 OneDrive 文件夹,而不是保存到电脑上。通常,这会触发对文件的病毒扫描,可能会在不需要进一步分析的情况下显示它已被感染。如果你没有在线文件夹,下一种最佳选择是使用闪存驱动器或外部硬盘。尽管将恶意软件保存到外部存储设备仍然有可能感染主系统,但这样能减少一些风险。只需确保在保存可疑文件之前,驱动器上没有任何重要文件。
当你下载文件时,确保不要打开它。选择另存为选项,并将文件移动到一个名为 Do Not Open 或 Malware 的文件夹中,以提醒你和其他人不要意外打开它。同时,确保你的系统默认不会自动运行任何文件。许多系统在你下载文件时会提供用此打开选项。不要选择这个选项。
一旦安全保存了文件,你可以开始通过分析工具对其进行处理。你将首先使用的网站是 VirusTotal (www.virustotal.com/),你在第三章中曾用它分析可疑的 URL 链接。这次,你将使用文件分析功能。当你加载页面时,你会看到上传文件进行分析的选项。点击选择文件,导航到你保存的文件并选择它进行上传。图 4-4 显示了使用 maliciouspdf.pdf 文件的示例。

图 4-4:准备上传的恶意 PDF 文件
一旦文件上传完成,点击确认上传以开始分析。VirusTotal 会将文件通过多个杀毒软件程序进行扫描并返回结果,告知你文件是否含有恶意软件。请记住,VirusTotal 会指明找到恶意软件的引擎数量。如果即使只有一个引擎报告文件为不安全,你也可以假设它是恶意软件,不管其他引擎是否标记它为干净。图 4-5 提供了 maliciouspdf.pdf 文件的输出示例。

图 4-5:VirusTotal 的结果
如你所见,37 个不同的恶意软件扫描服务报告该文件含有恶意软件。这个文件是通过一个著名的漏洞创建的,其签名已被加载到许多杀毒程序中,因此容易被检测到。但这并不总是如此。文件可能包含尚未具有标准签名的新恶意软件,导致 VirusTotal 报告文件为干净,实际上它已经被感染。为了应对这种情况,你需要使用另一个熟悉的工具,Joe Sandbox。
如你在第三章中学到的,Joe Sandbox (www.joesandbox.com/) 允许你通过一个云平台分析链接或文件,这个平台像一个实际的系统。在本练习中,你将使用它在一个安全环境中打开文件,进行彻底的分析。首先,上传文件,如图 4-6 所示。

图 4-6:在 Joe Sandbox 上上传文件
一旦文件上传完成,沙盒会花几分钟时间完成分析。Joe Sandbox 会打开文件,并通过多个不同的杀毒扫描进行检查。图 4-7 显示这些杀毒扫描程序将 maliciouspdf.pdf 文件识别为恶意文件。

图 4-7:Joe Sandbox 对 maliciouspdf.pdf 的分析结果
Joe Sandbox 还提供了额外的分析,旨在了解文件中可能嵌入的恶意软件类型,以及如果下载并打开该恶意软件,它会如何影响你的系统。如果你认为自己可能不小心打开了文件,并需要找出它执行了什么样的恶意活动,这项分析会特别有用。图 4-8 显示了关于 maliciouspdf.pdf 的一些有用报告部分。
此分析提供了一个检测级别,在这个例子中是恶意的,并且还提供了两种文件分类方式:签名和分类图。回想一下,许多防病毒程序使用签名文件来检测恶意软件。签名部分显示与正在分析的文件匹配的签名。分类部分则根据扫描和检测到的签名,提供文件可能包含的恶意软件类型的估计。

图 4-8:maliciouspdf.pdf 分析概览
接下来,图 4-9 展示了当文件在沙箱中执行时,创建了哪些进程。

图 4-9:maliciouspdf.pdf 打开时创建的进程
报告还列出了由父进程创建的任何子进程。在这个例子中,打开 PDF 后启动了 Adobe Reader 进程,随后它生成了两个子进程。这个进程中的一个子进程又生成了更多的子进程。这部分报告对于识别在此类文件执行中不常见的进程(例如这里的子进程,它们与 Adobe 无关)非常有用。
审查防病毒设置
现在你已经分析了可疑文档,并知道它是恶意软件,你需要检查系统中的防病毒设置,确保你的计算机受到感染保护。
内建的防病毒软件并未随 macOS 一起提供,但你可以使用多个第三方选项来保护你的系统安全。所有 Windows 10 系统都预装了 Microsoft Defender,它集成在操作系统的安全设置中,并提供广泛的恶意软件防护,包括对勒索软件的防护。虽然其他商业产品,如 Sophos、Check Point、Avast 和 Symantec,提供额外的功能,但我们将重点介绍 Microsoft Defender,因为它是免费的,并且默认内置于 Windows 10 中。
macOS
大多数现代防病毒软件都有 Apple 兼容版本。如果你在寻找免费的程序,Avast 和 Sophos 提供有效的产品。但使用免费版本时,功能是有限的。两款产品都提供付费版本,提供更强大的功能。
尽管目前攻击 Apple 计算机的恶意软件种类不如 Windows 系统那么多,但定期扫描计算机仍然至关重要。设置自动更新同样关键,这样一来,一旦有新的病毒定义文件发布,你就能第一时间获取。即使是从官方 Apple 商店下载应用程序,也要小心。恶意软件,特别是勒索病毒和木马,常常伪装成应用程序,其中一些甚至能够绕过 Apple 的验证流程,进入官方商店。
Windows 10
要访问 Microsoft Defender 设置,请在屏幕左下角的任务栏中的搜索框中输入安全,找到安全仪表盘。点击Windows 安全,然后点击病毒与威胁防护以打开 Microsoft Defender 的防病毒保护设置,如图 4-10 所示。
使用这些选项,你可以执行几种不同的操作。首先,你可以使用快速扫描选项进行手动扫描。它会扫描病毒或其他恶意软件最可能存在的地方,且速度非常快。如你所见,此系统上最近一次扫描花费了 1 分 26 秒,扫描了 42,363 个文件。如果你认为计算机感染了常见的恶意软件,快速扫描非常有用。但并非所有恶意软件都藏在显眼的文件中。为了确保系统真正干净,最好扫描更多的文件,而不仅仅是快速扫描所检查的那些文件。为此,请点击扫描选项,位于快速扫描按钮下方。

图 4-10:病毒与威胁防护设置
Microsoft Defender 提供了除快速扫描外的几种扫描选项。完全扫描选项会检查整个操作系统。与快速扫描相比,这是一种更为彻底的扫描,因此可能会减慢计算机的运行速度,并且完成所需时间较长。但它通过检查系统的每个角落,为你提供一个全面的报告。你还可以进行自定义扫描,选择特定的文件进行扫描。当你确切知道自己面对的恶意软件类型并且知道它喜欢隐藏的地方时,使用这个选项效果最好。例如,你可以使用 Joe Sandbox 的分析报告,确定恶意文件与哪些文件或文件夹发生了交互,然后扫描这些文件或文件夹,看看恶意软件是否也感染了你的系统。Windows Defender 离线扫描实际上是一种启动扇区扫描选项。它会重新启动计算机,在系统完全启动之前进行扫描,以确保 rootkit 或 bootkit 无法在系统启动后隐藏或修改进程。图 4-11 显示了这些扫描选项。

图 4-11:Microsoft Defender 扫描选项
当你返回到病毒和威胁防护对话框时,找到“保护历史”选项。这个选项会显示微软 Defender 检测到的所有威胁及其采取的措施以中和这些威胁(图 4-12)。如果你担心病毒没有被正确清除,或者防病毒软件可能误删了合法文件(虽然这种情况很少见,但偶尔会发生),你可以使用这个对话框查看最近的活动。图 4-12 显示了系统中发现并被隔离的两个威胁的示例(如果你在想当你将恶意 PDF 添加到系统中时会发生什么,这是一个例子)。
下述病毒和威胁防护设置中的附加选项决定了微软 Defender 的运行方式,包括是否提供实时保护,以阻止恶意软件的安装,或是否将恶意代码的样本提交到防病毒数据库,用于生成签名。微软 Defender 也提供一些基于云的启发式资源,但总体而言,它是一个基于签名的系统。默认情况下,它会自动更新签名列表,但你仍然应该确保这些签名是最新的。你可以通过在病毒和威胁防护对话框中点击“检查更新”来手动检查更新。

图 4-12:微软 Defender 保护历史
最后你需要检查的设置是勒索软件 保护,如图 4-13 所示。为了防范勒索软件,微软 Defender 控制对文件夹的访问,并通过某些云平台提供备份。在这些设置中,你可以查看哪些文件已被保护,并修改一些保护设置。请记住,微软 Defender 不是万无一失的。如果你在外部硬盘或与主存储分开的云系统上保持定期备份,如果你的系统被勒索软件锁定,这将进一步帮助保护你的系统。
现在,你已经学会了如何分析文件中潜在的嵌入恶意软件,并且已准备好你的 Windows 系统以减少感染的威胁。这两项技能对于保护你的系统免受任何恶意软件威胁是至关重要的。将这些技能与第三章中学到的技能结合起来,将使黑客更难入侵你的系统。预防是击败恶意软件的最佳方法之一。记住,如果恶意软件从未进入你的系统,你就不需要担心它会做什么。

图 4-13:微软 Defender 勒索软件保护设置
结论
本章重点介绍了各种类型的恶意软件及其不同特征。病毒和蠕虫是最传统的恶意软件类型,通常携带有效负载,当激活时会执行恶意操作。此外,蠕虫还设计用于将恶意软件传播到新系统。勒索软件加密文件并要求赎金,允许黑客从受害者那里勒索钱财。木马则藏身于明面之中,允许后门访问,甚至安装根套件或启动套件,这些恶意软件感染系统的核心安全区域,导致操作的修改。间谍软件和广告软件有时比恶意更令人烦恼,它们窃取流量并弹出广告,比如突然出现的弹窗。但最危险的类型是变种恶意软件。这种先进的软件能够即时改变其代码,允许进行高级持久感染,极其难以检测。
本章还探讨了如何防御恶意软件。关键在于将社会工程防御技巧与先进的反恶意软件软件结合使用。通过注意你点击的内容、下载的文件以及点击的链接,你可以防止感染。如果系统确实被感染,杀毒软件可以通过使用签名或启发式特征来检测恶意代码。签名检测速度快,资源消耗少,但不如启发式检测先进,后者通过将流量与基准数据进行比较来判断是否正常或异常。通过结合这些策略,你可以保持系统免受感染,并使其正常运行。
第五章:密码盗窃与其他账户访问技巧

我们使用访问控制程序来确保只有授权人员能够访问系统、打开文件或运行软件。这是组织日常管理的一部分;每一个为企业工作的人都以某种方式接触到它,无论是通过登录电子邮件账户还是与客户共享文件。为了更好地管理这样一个庞大而重要的议题,安全界通常将访问控制分为三大类:认证、授权和审计。
在本章中,我们将探讨各种认证和授权方法如何保护你的系统安全,以及如何使用审计来跟踪系统中所做的一切。在本章中,你还将学习到黑帽攻击者如何绕过访问控制。
认证
认证是验证某人是否真的是他所说的那个人。假设有一位骑士来到你城堡的门前。他可能是敌对的骑士,也可能是友好的骑士,取决于他盾牌上的纹章。为了认证这位骑士,你派一个侍从去检查骑士的纹章。如果他有友好的纹章,你就让他进门。如果他有敌对的纹章,你就关上大门。
网络安全专家严格区分认证与相关概念——身份识别。你可能会使用某种形式的身份识别来说明你试图认证的是谁,而认证则证明你确实是那个人。例如,当你输入用户名和密码时,用户名是用来识别你的。但仅凭用户名并不能证明你真的是那个用户。通过输入密码,你验证了自己是与该 ID 相关联的用户。
认证方式
你可以通过多种方式对一个人或系统进行认证:使用密码、使用 DNA,甚至通过知道一个人说话的方式。每种认证方法都有其优点和缺点。为了更好地分类不同的方法,网络安全专家将其分为以下五种类型。
类型 1:你知道的东西
类型 1,某些你知道的东西,通常是你记住的一些信息。最常用的版本是密码,因为密码非常容易设置和维护,且许多系统都可以使用密码。想想你每天使用多少次密码来访问账户或系统。
但密码并不是唯一的类型 1 认证方式。另一个常见的方式是安全问题,也称为认知密码。通常,当你忘记常规密码时,会用这种方式来重置密码。系统询问的问题的答案是只有你知道的答案,例如你母亲的娘家姓或你成长的街道。然而,随着社交媒体的传播,黑帽攻击者更容易发现这些问题的答案并用它们来重置你的密码。
事实上,第一类身份验证是最容易破解的,因为它不一定是唯一的或复杂的。想一想你使用的密码,诚实地回答以下问题。你有多少个密码是:
-
仅在一个地方使用?
-
至少 12 个字符长?
-
由小写字母、大写字母、数字和符号组成?
如果你的任何密码未能满足上述要求,那么它们就容易受到攻击。攻击者使用一些巧妙的技术尝试破解密码,包括暴力破解。暴力破解密码时,计算机系统会自动尝试每一个可能的密码字符组合,然后用它们来登录系统。通常,这个过程只需要几个小时就能完成,而如果是人工操作,可能需要几个月的时间。尽管这种技术看起来耗时,但只要时间充足,暴力破解总是能成功,即使要花费多年时间去尝试每一个可能的组合。密码越短,破解起来就越容易。此外,你永远不知道攻击者何时会在第一次尝试时就成功。
另一种攻击方式是攻击者使用字典攻击。这种攻击依赖于常见的单词或组合,以缩短暴力破解密码所需的时间。例如,每年排名前列的密码之一就是qwerty(标准美国键盘顶部一行的字母)。字典攻击可能会遍历存储在文件中的所有密码,包括qwerty和一些其他常见的密码,从而缩小攻击者必须尝试的组合范围。密码越简单,就越容易通过字典攻击破解。
尽管如此,黑帽攻击者通常不需要暴力破解密码或使用字典攻击。让用户自己告诉他们密码要容易得多。攻击者通过社会工程学,或者仅仅是在某人桌子上的便利贴上寻找密码,常常能够让人们泄露他们的密码。一旦攻击者获得了密码,就没有任何东西能阻止他们使用它。第一类身份验证没有额外的检查来确认输入密码的人就是他们所声称的人;它仅仅读取密码,如果密码正确,就允许登录。所以,虽然第一类身份验证可能便宜且容易部署,但它并不是最安全的,这也是我们依赖其他类型身份验证的原因。
第二类:你拥有的东西
你所拥有的东西是一种实体,无论是物理物品还是计算机上的数字工件,你都必须向系统呈现它来进行身份验证。这个物品对你来说是唯一的,通常会提供一个代码或密钥供系统使用。实现第二类身份验证的方法有很多种;例如智能卡、密钥生成器和数字证书,你将在第九章了解更多关于它们的内容。
类型 2 认证比类型 1 更强,因为攻击者需要盗取物理物品来绕过认证,这比猜测密码要困难得多。但类型 2 也更复杂且实施成本更高,这就是为什么它不那么常见的原因。原因在于类型 2 需要特殊设备和额外硬件。例如,如果你为你的计算机添加了一个门禁卡阅读器系统来登录,你不仅需要购买、安装和维护阅读器,还需要为每个用户购买门禁卡,并且必须为避免有人丢失卡片而额外准备一些备用卡片。然而,在过去的几年里,实施类型 2 认证的新方法使得它变得更加便宜。其中最常见的就是文本验证代码。
使用文本验证代码的系统通常会在你首次设置帐户时提示你输入电话号码。之后,为了访问你的帐户,系统会要求你授权发送验证代码到你的手机。一旦你同意,代码将通过短信(或电话,尽管这种方式不太常见)发送给你。然后你将这个代码输入系统或应用程序中的字段。这一过程证明了你是帐户的拥有者,因为从理论上讲,只有你能访问那个电话号码。
类型 2 认证最安全的方法之一是智能卡。在使用智能卡的系统中,每个人都会收到一张独特的卡。卡上有一个包含加密密钥的芯片(我们将在第九章讨论这些密钥)。当你将卡片滑过芯片读取器时,读取器会检查密钥并验证你的身份。没有卡片?没有密钥?无法登录。使用加密密钥而非代码使得这种认证更加安全,因为几乎不可能猜测出密钥。随着时间的推移,这种方法变得越来越普遍:自 1990 年代中期以来,芯片就已应用于信用卡,但直到 2015 年才在美国普及。图 5-1 显示了一个通用访问卡(*CAC**)的例子,这是一种由美国联邦政府和军方用于访问桌面和建筑物的智能卡。

图 5-1:海军通用访问卡
类型 2 认证对象不必是物理实体。它也可以是数字实体,例如数字证书:存储在计算机上的一段数据,当计算机尝试访问另一个系统时,用于标识和认证它。例如,当一个系统查询数据库中的信息时,该系统可能会向数据库发送一个数字证书,以证明它有权进行查询。该证书存储在硬件中,有时在一个特殊的芯片中,称为受信平台模块(TPM)。TPM 和系统中其他硬件之间有许多安全层,这使得黑客如果没有物理接触到计算机,是极其困难的访问证书的。我们将在第九章中更详细地讨论证书和加密。
类型 3:你是谁
尽管类型 1 和类型 2 认证提供了很大的保护,但它们都有一个相同的缺点:它们都不能唯一地与某个人绑定,这使得别人可能会使用他们的凭证。这就是类型 3 认证的优势所在。类型 3 系统使用一个人的独特生物识别签名作为认证方法。
生物识别是指一个人身上的某种身体或行为特征。最常用的用于身份验证的生物识别示例是指纹,但其他例子还包括视网膜扫描、面部识别、声音,甚至是 DNA。生物识别也可以是某种行为,比如一个人的走路方式或签名。从理论上讲,这些特征是独一无二的,意味着世界上没有其他人拥有与之相同的特征。表 5-1 列出了一些常用的生物识别方式。
表 5-1:生物识别类型
| 生物识别类型 | 扫描数据 |
|---|---|
| 指纹扫描仪 | 手指垫上的螺旋纹路 |
| 手部扫描仪 | 手指和手掌上的独特图案 |
| 虹膜扫描仪 | 眼球的形状 |
| 视网膜扫描仪 | 眼球后部血管的图案 |
| 面部扫描仪 | 面部的图案和形状 |
要设置生物识别系统,使用该系统的人必须提供他们的生物识别签名,这些签名会存储在数据库中。例如,如果你的工作场所想在所有门上使用指纹扫描仪,它必须扫描你的指尖。当你在门口使用扫描仪时,收集到的签名将与存储在数据库中的签名进行比较。如果它们相同,你就可以进入。
这是一个棘手的过程,因为每个扫描仪的灵敏度不同。例如,如果后门的扫描仪过于敏感,即使它应该允许你通过那扇门进入,它也可能会拒绝你的进入。这种情况发生的频率被称为误拒绝率(FRR)。另一方面,如果扫描仪的灵敏度过低,它可能会允许一个不在数据库中的人通过。这种情况发生的频率被称为误接受率(FAR)。设计这些系统的人必须弄清楚如何设置扫描仪,以最小化 FRR 和 FAR 两者。我们称这个最佳平衡点为交叉错误率(CER)。寻找 CER 的需要使得安装生物识别系统成为一个反复试验的过程。此外,扫描仪的类型会影响系统的成功,因为简单的扫描仪不像更复杂的扫描仪那样能够创建完整或复杂的签名。
类型 3 是最强的身份验证形式。尽管电影中常常让人误以为如此,但伪造生物识别签名是极其困难的,尤其是在使用高质量扫描仪的情况下。一些目前使用的扫描仪甚至可以检测手指的心跳,以确定它是否连接到一个活人身上。这意味着,要获取签名,必须由正确的人使用扫描仪。这大大减少了敌人入侵系统或窃取凭证的能力,而这种能力在类型 1 或类型 2 身份验证中更容易实现。
除了高质量的扫描仪,这些系统还需要大型数据库来存储签名。这些要求使得生物识别技术的实施成本相当高。尽管扫描仪已经变得便宜,但放置在移动设备中的扫描仪并不像独立系统中使用的扫描仪那样精确。这就导致了生物识别技术的第二个问题:扫描不良。因为每个签名都非常独特,任何变化都会导致 FRR 错误。例如,如果你烧伤了用于指纹扫描的手指,扫描仪可能就无法工作了。即使是像刮胡子这样的行为,也可能会让面部扫描仪产生混乱。
生物识别技术可能难以使用和调整,因此,如果生物识别系统发生故障,拥有一个备份身份验证系统非常重要。例如,在带有指纹或面部扫描仪的手机上,身份验证系统通常会提供一个选项,让你在扫描仪无法识别身份时输入密码。这样,你可以随着时间的推移调整生物识别扫描仪的灵敏度,而不用担心它会把你锁定在无法访问的系统之外。
类型 4 和类型 5:你做的事情和你所在的地方
其他两种身份验证类型通常是作为多因素身份验证的一部分来补充其他身份验证形式,而不是作为独立的身份验证方法。它们是多因素身份验证的一部分(稍后将详细讨论)。
你所做的事情(类型 4)是你必须采取的动作来进行身份验证。例如,为了进入一个疯狂科学家的秘密实验室,你可能需要拉动书架上的某本书来揭示入口。只有知道该拉哪本书的人才能完成身份验证。类型 4 的另一个例子是验证码,它是一个证明你是人类而不是自动登录脚本的测试。通过选择正确的图片,例如从一组照片中选出汽车的图像,你证明自己是一个真实的人。然而,类型 4 身份验证方法本身并不能提供足够的保护,因为任何人只要知道需要做什么,就能执行这个动作。(在疯狂科学家的例子中,敌人可能会通过裂开的门或透过别人肩膀看到某人做出的选择,从而完成身份验证。)
你所在的位置(类型 5)是进行身份验证时人的位置。如果此人不在正确的位置,身份验证将失败。单独使用类型 5 时,其缺陷与类型 4 相似;仅凭此方法无法验证该位置的人是否是正确的人,除非结合其他身份验证方法。然而,当与其他身份验证类型配合使用时,类型 5 能为防止黑客入侵账户提供额外的保护。例如,如果你注册账户时设置的位置是阿肯色州的小石城,而有人尝试从香港登录该账户,系统可以识别出这可能不是你,并发送警报。尽管在互联网上伪造位置是可能的(第六章会讨论这个话题),但这种保护增加了另一个防御层,攻击者必须绕过这一层才能访问账户。防御层越多,攻击者突破系统的难度就越大。
多因素认证
使用多种身份验证方法被称为多因素认证。它可以弥补任何单一认证方法的不足。回顾类型 1 认证的问题,你知道的事情是可以猜测的,可以写下来或转交给其他人,任何人都能使用它,不管他们是否创建了它。但是,如果我们在已经使用类型 1 的系统中加入类型 2 认证,我们可以解决其中的许多问题。因为用户必须拥有某个额外的验证项来进行认证,例如来自短信的验证码,攻击者就无法仅凭猜测密码来进入账户。
如果你想保护你的系统免受黑客使用现代技术的攻击,你必须启用多因素认证。现在最常见的多因素认证策略是将电话号码或电子邮件地址添加到账户中,并在你尝试登录时向该地址发送验证码。然后,在输入密码后,系统会提示你输入该验证码。这可能看起来像是进入社交媒体账户时不必要的麻烦,但如前所述,攻击者可以通过多种方式获取密码。启用多因素认证会让攻击者更难以突破,许多情况下,他们在遇到障碍后会放弃。至少,它能为你提供额外的时间来应对攻击者的行动,在他们突破账户之前。
增加额外防御是一种安全策略,称为深度防御。基本上,你设置的障碍越多,攻击者想轻易进入的难度就越大。这不仅有助于弥补单一防御(例如可猜测密码中的漏洞)的不足,还能为白帽黑客提供时间,让他们察觉、了解并应对黑客的活动。如第一章所述,意识对攻击者来说是致命的;你构建的防御层越多,白帽黑客越有可能察觉到恶意活动并阻止它。
授权
一旦用户通过身份验证,他们必须被授权进行某些操作。之前例子中的友好骑士并不会仅仅因为他友好就进入公主所在的塔楼。相反,他可能被授权进入城堡,但不能进入塔楼。与身份验证类似,授权是基于你在组织中的身份。友好骑士和国王可能都能进入城堡,但只有国王、公主和公主的随从才可能被授权进入公主的塔楼。
授权至关重要。举一个更现代的例子,如果你的公司有两名工程师被授权修改 web 服务器,追踪到底是谁做了修改可能会变得很困难。当攻击者突破或发生恶意行为时,找到源头可能会更加复杂。如果只有一名工程师被授权对 web 服务器进行修改,那么你就能明确知道谁是负责任何修改或可能发生的恶意行为的责任人。
安全内核程序是操作系统的一部分,通常用于强制执行系统上更改的授权。安全内核如何执行授权取决于所使用的访问控制方案类型。有五种常见的访问控制方案:强制访问控制(MAC)、基于规则和基于角色的访问控制(这两者通常缩写为 RBAC,但为了避免混淆,我会使用完整名称)、基于属性的访问控制(ABAC)和自主访问控制(DAC)。让我们逐一看看每种方案。
强制访问控制
MAC 是一个集中式系统,其中中央权威严格执行访问控制。MAC 提供了对谁可以访问文件、系统或软件的高度控制,但它不允许太多灵活性。系统会根据中央安全策略测试所有访问资源的尝试,以决定是否授予访问权限。如果请求的访问类型不完全符合政策,就会被拒绝。由单一管理员或管理员组控制该策略。
为了创建这样的策略,管理员可能会使用标签来确定一个人访问每个资源所需的授权类型。例如,军方使用一个包含三个基本类别的分类系统:机密、秘密和绝密。任何新文件都会根据策略分配一个分类。如果一个文件被赋予绝密分类,只有那些拥有绝密许可的人才能访问它,而拥有秘密许可的人无法覆盖系统来查看绝密文件。
基于规则的访问控制
基于规则的访问控制使用特定的规则来决定授予何种授权。这是一个极其严格的系统。上下文的变化几乎不重要,如果没有规则与访问请求匹配,大多数系统会使用隐式拒绝,意味着它们会自动拒绝该操作。这有助于防止基于规则的访问控制策略变得过于臃肿。在系统中定义你希望发生的事情要比试图追踪你不希望发生的事情容易得多。尽管如此,该系统迫使管理员映射每一个可能的授权操作,否则人们很可能会被拒绝。在某些环境中,比如有许多需求的复杂环境,使用基于规则的访问控制系统可能不可行。与 MAC 不同,基于规则的方案必须对每个资产单独设置规则。
一个很好的基于规则的访问控制示例是文件权限。大多数操作系统根据规则授予文件访问权限,这些规则会考虑谁正在访问文件以及他们被授权执行的操作。每个文件都有一套这些规则,系统读取这些规则来决定是否授予访问权限。例如,系统管理员可能能够读取和写入(即更改)系统文件,而标准用户只能读取该文件。
基于角色的访问控制
基于角色的访问控制使用用户的角色来决定他们对系统的访问权限。与基于规则的访问控制不同,角色适用于整个系统,而不是像文件这样的单独对象。例如,如果你在人力资源部门工作,你可能会被赋予人力资源官员的角色。这意味着,当你登录到计算机时,你可以访问人力资源部门的共享文件夹并登录员工记录数据库。
基于角色的访问控制比 MAC 或基于规则的访问控制提供了更多的灵活性。系统管理员可以根据需要创建新的角色,以提供所需的访问级别。这种方法还使得管理大量人员的访问权限变得更加容易。例如,每个在呼叫中心工作的人可能需要访问一组资源,如客户账户列表。通过创建“呼叫中心员工”角色,系统管理员可以轻松地为每个呼叫中心员工授予执行其工作所需的权限,而无需进入系统并逐一授权每个资源的访问权限。
基于角色的访问控制的主要缺点是,它往往导致特权蔓延。特权蔓延是指个人或团体逐渐获得更多的授权,直到他们有权限做超出其工作要求的事情。当控制措施无法防止账户执行其实际上没有授权的操作时,这就成为一个问题。例如,你可能暂时接管公司中的一个角色,直到新员工被聘用。如果新员工加入后该角色授予的授权依然有效,你可能会有不该有的资源访问权限。
角色也可能过于宽泛。为了保证大量人群符合一个角色的要求,每个角色可能会有广泛的访问权限。例如,管理员角色通常会获得完整的权限集,无论该用户是否需要所有管理员功能。或者一个人力资源员工可能不需要查看与员工相关的所有文件。他们可能只是一个招聘人员,所以不需要访问当前员工的文件。
这样的广泛访问角色使得黑客更容易获取文件、账户或系统的访问权限。为了防止特权蔓延,安全专家通常应用最小权限和职务分离的概念。拥有最小权限的人仅拥有完成工作所必需的权限。例如,平面设计师可能能够更新网站上的图片,但不能登录管理员界面并更改网站名称。具有职务分离的任务要求多个人一起完成。例如,可能需要两个人来创建支票并支付供应商:一个人起草支票,另一个人在验证支票是有效支付后签署它。
基于属性的访问控制
ABAC 与基于角色的访问控制在灵活性上相似,但有助于缓解特权蔓延的问题。从本质上讲,ABAC 使用描述符(恰如其分地称为属性)来确定一个人或系统需要何种访问权限。你可以把每个属性看作是一个小角色。当某人或系统尝试访问资源时,系统会检查他们的属性来授权访问。
该方案解决了之前提到的人力资源问题。在 ABAC 系统中,某个部门的成员会在其账户中获得人力资源属性。然而,如果他们还是招聘人员,他们会同时拥有招聘人员属性。人力资源属性允许他们读取一般的人力资源文件,但由于他们还拥有招聘人员属性,他们无法读取现有员工的文件。
属性可以以多种方式组合,允许你在保持基于角色的访问控制的广度和灵活性的同时,进行细化的访问控制。特权蔓延依然是一个可能性;然而,使用 ABAC 更容易防止这种情况的发生,因为它可以在不使系统变得繁琐的情况下,严密限制属性的访问,就像严格的 MAC 系统一样。
自主访问控制
DAC 是所有访问控制系统中最灵活但最不安全的。在 DAC 下,谁拥有对象,无论是文件、应用程序还是系统,谁就决定谁有权访问。这为系统带来了极大的灵活性,因为拥有者可以根据需要授予或拒绝访问权限。但这个系统也不安全,因为没有中央权威决定如何授予或拒绝访问权限,从而增加了未经授权访问的可能性。
DAC 的一个很好的例子是在文档服务中,例如 OneDrive 或 Google Drive。当你在这些服务中创建文档时,它会被放入你的个人账户。然后,你可以通过与第三方共享文件来授予访问权限,例如与同一项目的同事。没有任何系统告诉你谁可以或不能接收该文档。由你决定与谁共享,一旦他们不再需要访问,你可以将其从共享中移除。
这种方案可能会导致一些问题;例如,如果你输入了错误的电子邮件地址,或者将文件分享给了另一个部门的员工,而他并不需要查看该文档。因此,我们通常只将 DAC 用于非常有限的应用场景,比如共享文档,而不是像 MAC 那样作为完整的访问控制系统。
会计
会计是确保每个在系统或网络上执行的操作都会生成记录。虽然会计不能防止攻击者直接访问账户或系统,但它对于维持组织的安全至关重要。如果你无法在任何时刻验证账户或系统中的活动,你将无法知道自己是否维持了安全。此外,如果发生事故,可能很难找到攻击的细节并将攻击者从环境中移除。因此,维持会计记录的过程很重要:启用日志记录和定期审计。
日志记录
日志记录是捕获系统在运行期间发生事件的统称。每个系统都有自己的日志记录方法。例如,如果您在记录一个应用程序,日志将包括应用程序运行时应用程序代码的确切操作记录。如果您在记录一个帐户,它将包括帐户何时登录、从哪里登录以及访问了哪些内容的时间线。大多数日志记录在处理事件时遵循类似的约定。这包括严重性级别、收集的信息以及日志存储的位置。
日志中的事件通常按级别分类,以表示问题的严重性。标准排名方法称为 Syslog,从 7 开始为最不严重,到 0 为最严重。表 5-2 列出了每个级别及其相关的严重性。
表 5-2:日志严重性级别
| 值 | 严重性 | 描述 |
|---|---|---|
| 0 | 紧急 | 系统不可用。 |
| 1 | 警报 | 必须立即采取行动。 |
| 2 | 严重 | 严重条件。 |
| 3 | 错误 | 错误条件。 |
| 4 | 警告 | 警告条件。 |
| 5 | 通知 | 正常但需要特别处理。 |
| 6 | 信息 | 信息性消息。 |
| 7 | 调试 | 调试消息。 |
最重要的事件,在级别 0 时,表示系统硬件发生了故障,导致系统崩溃。级别 1 表示导致系统运行不正常的故障,例如系统崩溃。级别 2 用于表示导致系统内部操作故障的故障,例如应用崩溃,尽管系统仍在运行。级别 3 包括导致错误但不会中断操作的情况;例如,尝试访问一个已不存在的文档可能会导致错误,但该错误可能不会导致计算机崩溃。级别 4 和 5 提供需要额外关注的信息,但通常不被视为安全风险。一个例子可能是用户在一小时内未能登录其帐户。级别 6 事件提供有关系统所做操作的信息:例如,它是否打开了文件或进行了授权连接。我们仅在极少数情况下使用级别 7,当我们尝试查找系统底层操作的问题时。通常,级别 7 默认未开启,您应该仅在极其小心的情况下使用它。日志记录会生成大量条目,单独使用级别 7 事件可能会填满日志存储。
通常,你应该尽可能记录更多的信息,同时保持信息的实用性。如果你记录的太少,可能会错过帮助你理解事件的关键信息。如果记录的太多,你会被大量数据淹没,这些数据可能会掩盖你需要快速找到的关键信息。许多日志代理允许你筛选事件,以使日志更易于处理。你可以筛选出级别为 6 的事件,比如成功登录,以便更容易找到其他事件,比如失败的登录尝试。但你必须小心调试此筛选,以免错过恶意事件。(我稍后将在本章讨论这些恶意事件可能的表现。)
此外,你还需要决定日志保留的时长。组织通常通过考虑日志类型、日志包含的信息量、可用存储空间、是否有法律或合规要求以及其他因素来做出这个决策。主要的关注点是,如果你需要回溯到某个特定事件或日期,你是否能够确定发生了什么。例如,如果你发现某个员工的电脑遭到攻击,你需要访问该电脑在当天的所有网络活动,以便确定黑客的行为。
大多数组织以前会保留 90 天的日志,但随着存储成本的降低,许多组织现在已转向保留年度日志。它们通常将日志存储在大容量服务器上,这些服务器配有固态硬盘,以最好地保护它们免受可能导致系统离线或删除数据的问题。无论选择何种媒介,你都应该将其存储在异地。这样,日志更有可能在灾难发生时(例如勒索软件感染)存活下来。云服务也提供为客户存储日志的能力。
任何人都不应具有写入访问权限——即修改日志的能力——或从系统中删除日志的能力。日志的整个意义在于它准确记录了系统或网络上发生的每个事件。如果一个人可以修改这些事件,日志就失去了可信度。使日志不可编辑有助于消除内部威胁。
审计
与捕捉日志信息同样重要的是查看这些信息。我们审计不仅仅是为了发现恶意活动,还为了日常维护。为了使审计有效,我们不能仅在出现问题时进行审计。我们需要在问题发生的第一时间就发现它们,避免硬件故障、软件漏洞或黑客攻击对我们的系统造成重大损害。
正如前面提到的,系统上的每个事件都应该产生一个日志。决定审计多少这些日志可能有些棘手。如果审计过多,你会浪费时间在处理正常事件上。如果审计过少,你会错过恶意活动的关键指标。相反,你需要优先考虑组织的关键资产。例如,审计组织中每台工作站可能并不现实,但你可以优先考虑每天检查网络上的关键服务器。
即使你缩小了关键资产的范围,可能还有成千上万个事件需要审查。为了进一步缩小范围,审计的下一步是设置关于重要事件的警报。这就是 Syslog 可以派上用场的地方。通过使用 Syslog 标准中的各种严重级别,你可以直接收到高级别的警报。例如远程登录、密码更改和账户锁定等事件也可能生成警报。
但是,设置警报可能仍然不足以捕捉到组织中的恶意活动,因为攻击者已经擅长隐藏行踪。对网络或系统进行公开攻击的同时,对手会结合不同的小攻击,最终导致更大的妥协。他们还非常有耐心,在最终找到入侵途径之前,会慢慢尝试不同的攻击。例如,他们可能不会通过快速连续尝试几个密码来暴力破解登录,而是每六个小时尝试一次密码。一旦找到正确的密码,他们可能会等待数周甚至数月才登录到账户。然后他们会坐下来等待,观察内部网络流量或系统活动,收集信息用于最终的大规模攻击,感染数据库以勒索软件。
这种攻击方法论单靠警报很难检测出来,因为直到对数据库的攻击之前,所有的活动都是寻常的。即使可能存在异常指标——例如黑客从不寻常的地点登录——这些指标可能也不足以触发警报,特别是如果奇怪的事件发生在多个设备上。
为了更好地跟踪这种类型的恶意行为,你可以使用安全信息和事件管理(*SIEM**)系统。SIEM 系统会将来自你组织内所有设备和网络的日志进行关联。这意味着,你组织中捕获的每个事件都会被输入到 SIEM 系统进行处理。然后,SIEM 系统会剔除正常事件或任何假阳性,并提供每个可疑事件的审计日志。你还可以将其编程为在发生关键事件时生成警报,比如针对某个账户的暴力破解攻击。最好的部分是,由于 SIEM 系统从多个设备获取日志,它可以关联活动以识别可疑行为。例如,远程登录到工作站并不一定是可疑的。但如果更改防火墙以允许远程连接到工作站,然后进行远程连接,这可能会引起警报。SIEM 系统会特别记录该活动的日志。如果该工作站随后以管理员身份连接到数据库并开始下载所有文件,这一系列异常事件可能会触发一个全面的警报。
SIEM 系统非常强大,但它们需要维护。从本质上讲,SIEM 系统仍然依赖规则和其他指标来判断某个事件或事件集是否是恶意的。随着组织的演变,它们必须更新这些规则,以确保这些规则与当前系统和网络的状态保持一致。例如,如果你添加了一个新服务器,你需要将其日志添加到 SIEM 系统中,并根据该服务器提供的服务创建规则。如果你未能维护好 SIEM 系统,你可能会错过一些关键事件,这些事件本可以帮助你发现潜在的安全漏洞。
攻击指标
攻击指标(IoA)是指指出网络、设备或账户上发生恶意活动的事件。这些活动可能是恶意软件、黑帽黑客或内部威胁所导致的。表 5-3 描述了几个常见的 IoA、每个的示例以及它们可能意味着什么。这份清单并不详尽无遗,但它应该能让你对在设置日志记录、审计或 SIEM 规则时需要考虑的内容有个较为清晰的了解。
表 5-3:攻击指标
| IoA | 示例 | 可能的活动 |
|---|---|---|
| 异常的外部流量 | 设备连接到已知的恶意 IP 地址;设备使用不寻常的协议,如 FTP;大量查询某个网站或一组网站 | 恶意软件联系命令和控制服务器;文件被移除;后门被访问 |
| 内部设备运行网络扫描 | 工作站或服务器发送 ping 数据包 | 恶意软件或黑帽黑客寻找其他可以攻击的系统 |
| 来自业务区域外的账户登录 | 来自外国的登录;在同一时间从多个不同地点的登录 | 黑帽或僵尸网络窃取账户凭证 |
| 系统设置的更改 | 防火墙更改或端口更改以允许新流量连接,例如打开 FTP 端口;新增系统账户;给账户赋予管理员权限;创建新的自动化任务 | 系统被恶意软件或黑客攻击 |
| 电子邮件设置的更改 | 创建了新的收件箱规则;新的邮件流规则;某账户的电子邮件活动剧增 | 电子邮件账户被侵入;利用电子邮件发送垃圾邮件或网络钓鱼攻击 |
| 应用程序或系统进行不正常的连接 | 外部网络中的系统连接到内部系统;应用程序进行新的或不寻常的请求,例如尝试从只读数据库下载数据;系统尝试访问其未授权或不在正常工作流程中的设备(例如,前台工作站试图连接到人力资源数据库) | 应用程序或系统被恶意软件或黑客攻击;攻击者利用这种侵入尝试从其他系统窃取数据或获取访问权限 |
| 多次快速失败 | 多次登录失败尝试;多次访问请求失败;多次系统故障 | 黑客试图访问系统或账户,例如,通过暴力破解账户登录;可能试图利用系统故障绕过正常的安全控制 |
| 未经授权的程序或进程运行 | 设置为开机启动的程序,并且不是正常业务软件的一部分;进程占用了大量内存或 CPU 资源 | 恶意软件,特别是木马 |
| 正常操作时间之外的活动 | 在非工作时间进行的网站查询、发送的电子邮件、运行的应用程序或登录操作 | 系统被恶意软件或黑客攻击,包括可能的后门或木马 |
练习:在 Windows 10 和 macOS 中设置账户
了解身份验证和授权系统如何影响你对系统的使用,最好的方法是管理家用计算机上的账户。无论你使用的是 Windows 还是 Apple 系统,你都应该能够创建账户,并控制它们对系统某些部分的访问权限。在这个练习中,你将配置 Windows 或 Apple 计算机上账户的安全设置。然后,你将创建一个新账户并授予其访问共享文件夹的权限。虽然这个过程很简单,但它涉及了本章讨论的所有身份验证和授权原则,并能让你真实地感受到如何保护这些系统免受不必要的访问。
Windows 10
Windows 自带多种内建安全功能,您可以使用它们保护账户免受未经授权的访问。许多这些功能默认已启用。但检查这些功能,确保系统得到最佳保护,是个好主意。为此,请在屏幕左下角的搜索栏中输入安全,任务菜单会出现,列出多个应用程序。点击Windows 安全以打开安全设置。图 5-2 展示了应该打开的 Windows 安全对话框。

图 5-2:Windows 安全对话框
如第四章所述,这是访问 Windows 系统包括的许多安全功能的地方。这次,您将点击账户保护,图 5-3 展示了相应的对话框。
在这个对话框中,您可以看到与账户登录相关的设置。顶部应显示您当前登录的账户名称。紧接着下面是Windows Hello 登录选项。Windows Hello 提供通过面部结构进行生物识别登录,从而解锁系统。(请注意,此功能仅适用于支持的系统,并且需要配备摄像头。)尽管生物识别登录比传统密码更安全,但需要注意的是,此功能在识别面部和允许其他形状相似的面孔登录时,曾出现过一些问题。

图 5-3:账户保护对话框
紧接着 Windows Hello 下面是动态锁定选项。此功能允许您的系统通过蓝牙与另一设备(如笔记本电脑、平板或手机)配对,并在与该设备失去连接时自动锁定计算机屏幕。动态锁定可以在您必须离开系统时提供安心,但如果您频繁移动并需要不断解锁屏幕,可能会感到有些麻烦。此外,尽管蓝牙是短距离无线技术,它仍然可以在意想不到的较远距离内连接。例如,您离开办公室去休息室拿一杯咖啡,可能并不足以让计算机锁定,因此计算机可能会保持打开状态,任何路过的人都可以访问。
现在您已经对 Windows 10 中的一些安全功能有了更多了解,接下来我们来看一下您可以更改的具体账户设置。在账户保护对话框中,点击管理登录选项,图 5-4 显示了应该出现的对话框。
通过这个对话框,您可以查看和更改系统登录到账户的方式。选项列表足够多样,既能提供所需的安全性,又能保持易用性。请记住,如果密码或其他身份验证操作不容易实现,用户可能会错误使用它,甚至完全绕过。
Windows Hello 指纹选项是一个生物识别指纹扫描器。它需要内置或附加的指纹扫描设备才能工作(正如你所看到的,图 5-3 中的电脑没有这个选项)。Windows Hello PIN选项提供了一个 PIN,你可以用它来登录,作为传统密码的替代方式。它设计为更快速地使用;但请记住,你仍然需要确保创建一个长且难以猜测的 PIN(至少六到八位数字),以防止暴力破解攻击。

图 5-4:登录选项对话框
安全密钥选项会生成一个令牌——一种二级身份验证因素——其唯一密钥使你能够登录系统。你必须拥有一个物理安全令牌与此设备配对。通常,这些密钥只在能负担得起购买它们的企业中使用,但也有一些价格便宜的商业令牌可用,例如 Duo 或 Google Authenticator 手机应用。
Windows 还提供了两种密码选项:传统密码和图片密码。图片密码要求你选择一张图片并在其上绘制。例如,你可以选择一张脸的图片,然后在眼睛周围画圈。要访问系统,你需要在登录时看到该图片并复制你的操作。这是类型 4 身份验证(你做的事情)。通常认为它是最弱的身份验证方式,因为大多数人的手势遵循图片的自然路径。例如,如果你选择了一个旗帜和旗杆的图片,你可能会沿着旗杆画一条线,这对于攻击者来说相对容易猜测,因为这是一个可预测的动作。
花点时间尝试每个选项,看看哪个最适合你。仅仅因为你一直使用密码,并不意味着它最适合你。添加一种不同类型的身份验证可能会为你的设备提供更好的安全性或功能。
在继续之前,让我们再看最后一个设置。在不同的登录选项下方有一个要求登录的下拉菜单。这个选项让你决定系统在一段时间未活动后应何时要求你重新登录:有两个选项,分别是从不和当电脑从休眠中唤醒时。你应该始终要求在系统唤醒后重新登录。这可以防止你在不使用系统但忘记退出时,系统遭到未经授权的访问。此设置默认应开启。
添加新账户
现在你已经选择了安全设置,你可以创建一个新账户。为此,点击左侧边栏中的家庭和其他用户选项。图 5-5 显示了出现的界面。

图 5-5:家庭和其他用户对话框
该对话框允许你将其他帐户添加到系统中。顶部是您的家庭部分。在 Windows 10 生态系统中,家庭成员帐户具有额外的审计功能和家长控制,以帮助保护孩子安全。此功能还允许你在帐户之间共享应用程序和其他购买。但在本练习中,我们将重点关注第二部分,其他用户。此选项允许你向操作系统添加另一个传统的用户帐户。
现在我们来添加一个新帐户。在本练习的后面,你将学习如何在当前帐户和新创建的帐户之间共享文件夹。点击将其他人添加到此计算机旁边的加号图标。会弹出一个对话框,询问新用户如何登录并提供一个相应的 Microsoft 帐户。如果新用户没有 Microsoft 帐户,点击我没有此人的登录信息。同样,在下一页中,点击不使用 Microsoft 帐户创建。图 5-6 展示了现在出现的对话框。
为系统创建一个本地帐户。本地帐户只与一台计算机关联,而不是属于更大的网络。在图 5-6 中,我创建了一个名为 Sparkle Kitten 的用户,但你可以将新用户命名为任何你喜欢的名字。填写信息后,完成时点击下一步。

图 5-6:创建新帐户
创建帐户后,你需要决定是否将其设为管理员帐户,这可以在“更改帐户类型”对话框中进行选择(图 5-7)。

图 5-7:更改帐户类型对话框
管理员帐户可以访问系统文件并对系统进行其他可能有害的更改,因此在将某人指定为管理员帐户之前,请确定他们是否真的需要这样的权限。记住在做出此决定时要遵循最小权限原则。在本练习中,标准用户帐户就足够了。
分享文件夹
访问控制的一个重要部分是能够基于最小权限原则和需要知道的原则来限制控制。现在让我们通过创建一个文件夹并将其与刚刚创建的新帐户共享来应用这些原则。在原始帐户中右键点击桌面空白区域,然后点击新建▶文件夹来创建一个新文件夹。文件夹创建的位置无关紧要,但“文档”或“桌面”可能是最方便的位置。
创建文件夹后,你需要访问其属性以共享它。右键点击文件夹,然后点击属性。图 5-8 展示了弹出的对话框。

图 5-8:文件夹属性
打开“属性”对话框后,点击顶部的共享标签。此标签包含你用来共享文件夹的设置(图 5-9)。
在此对话框中,点击高级共享,这将弹出图 5-10 所示的对话框。

图 5-9:共享对话框

图 5-10:高级共享对话框
选择共享此文件夹选项,这会打开一个新选项,询问你输入共享名称,并显示一个“权限”按钮。现在,点击权限(图 5-11)。

图 5-11:共享权限
共享权限对话框与你在许多访问控制系统中可能看到的类似。对于每个组或用户,它会显示与你的文件夹对应的权限列表。虽然这些权限很基础,但它们提供了全面的控制。读取权限允许用户查看文件夹中的内容,但不能删除或重命名文件夹。更改权限允许用户重命名或删除文件夹,而完全控制则授予用户完全访问权限,包括读取、写入、重命名或删除文件夹。
要添加特定用户,点击添加按钮,显示图 5-12 所示的对话框。
在这里,你可以将其他用户添加到文件夹的权限列表中,然后赋予他们相应的权限。只需在对话框底部附近的白色框中输入用户的名称。因为我将我的新用户命名为 Sparkle Kitten,所以我输入了这个名字。接下来,点击检查名称,系统应该会自动填写完整的用户名,如图 5-12 所示。如果用户名没有按图示填写,确保检查拼写。必须精确无误才能找到正确的用户名。
点击确定,你选择的用户应该出现在“共享权限”对话框中的“每个人”下方的列表中。然后你可以点击该用户名并设置其权限。通常,最好默认设置为仅有读取权限,这样用户可以查看文件夹中的内容,但不能进行更改。

图 5-12:添加用户
接下来,让我们看看属性对话框中共享标签旁边的安全标签。安全标签提供了与共享相同的一些功能。本质上,安全标签显示了所有能够访问该文件或文件夹的用户或组以及他们的权限。你可以像使用高级共享功能一样使用此标签:添加用户并为其赋予文件夹的权限。需要注意的是,你放入共享文件夹中的任何文件或文件夹,都必须与共享文件夹具有相同的用户权限,用户才能访问它们。共享文件夹的权限仅授予用户访问文件夹的权限,而不一定是其中的内容。图 5-13 显示了安全标签的示例。

图 5-13:安全标签
现在你已经知道如何配置账户的安全设置,添加用户,并授予该用户查看共享文件夹的权限。虽然这个练习看起来可能不那么重要,但我们已经涵盖了几乎所有的访问控制原则,包括身份验证、授权、最小权限,甚至是 DAC 模型。现在让我们来看看如何在 macOS 上配置安全设置。
macOS 的访问控制
macOS 提供了自己的一套访问控制和身份验证机制。一个挑战是,苹果系统简化了许多在 Windows 环境中通常可以访问的控制项。这让用户对如何管理系统的控制较为有限,除非他们准备深入系统文件并手动编辑。这不建议普通用户操作,除非你有足够的经验,因为不小心修改系统文件可能会破坏系统。在这一部分,我将提供一个关于你可以使用的控制项的概述,并告诉你在哪里可以找到它们。
账户管理
让我们从 macOS 的账户管理开始。这个操作系统提供了一些有用的控制项,你可以用它们来进一步保护你的系统,特别是系统自动注销的时间和方式。首先,点击屏幕左上角的苹果符号,然后点击系统偏好设置来打开该应用程序(见图 5-14)。

图 5-14:系统偏好设置应用程序
这个应用是你管理系统大多数设置和配置的一站式工具。点击安全与隐私,以显示图 5-15 中的对话框。

图 5-15:安全与隐私对话框
如对话框中所示,选择的选项不多。你应该设置一个定时器,用来确定系统在要求输入密码之前的非活动时间,最好设置为至少五分钟,若有更高的安全需求则可以设置得更低。你还可以通过点击左下角的锁定图标、输入密码,然后点击右下角的高级按钮,如图 5-16 所示,访问高级设置。(你需要有管理员权限才能执行此操作。)高级设置允许你通过要求输入管理员密码来增加系统的安全性,这样只有管理员才能更改影响多个用户的设置。你还可以更改非活动退出定时器。这个定时器与之前的非活动定时器不同,因为它会完全注销你,而不仅仅是要求你再次输入密码。最好将此选项设置为最多 30 分钟。
配置这些设置后,返回系统偏好设置。然后点击最底行图标中的用户与群组。此时应该会打开一个对话框,显示系统中的所有用户。再次点击左下角的锁图标并输入密码,你可以访问每个用户的附加设置。在“用户与群组”对话框的底部,点击登录选项以显示图 5-17 所示的对话框。
这些设置主要与登录菜单上出现的选项有关,例如密码提示或在未先登录的情况下关闭或重启计算机的功能。你还可以通过点击“登录选项”下方左下角的加号图标来为系统添加新用户。现在让我们来看一下如何在用户账户之间共享文件。

图 5-16:高级安全性与隐私设置

图 5-17:登录选项
文件共享
macOS 简化了文件共享,每个系统都有一个与用户账户关联的内建文件共享。你可以通过一个集中式对话框来控制并授予对该文件共享的访问权限。返回系统偏好设置并点击共享图标以显示其对话框,如图 5-18 所示。

图 5-18:共享对话框
在这个对话框中,你可以控制所有形式共享的设置,包括远程登录、文件共享、屏幕共享等。在共享对话框中,你可以看到共享文件夹的列表。通过点击此列表底部的加号图标,你可以添加另一个想要共享的文件夹。点击列表中的共享文件夹也会显示可以访问该文件夹的人员以及他们可以拥有的访问权限。这里的选项比 Windows 少,但非常容易理解。读取允许某人查看文件夹,而写入则允许他们向文件夹中添加或删除项目。
你现在已经学习了 Windows 和 macOS 的账户管理、访问控制和文件共享的基础知识。利用这些知识,你可以更好地控制谁可以访问你的系统以及如何与他人共享信息。记住,只授予他人完成其任务所需的最基本访问权限。给予某人完全权限,而他们仅需要“只读”权限,这无疑是在制造灾难。
结论
在本章中,您了解了一个健壮访问控制系统的三个组成部分:认证、授权和审计。进行用户认证时,确保使用适合您环境需求的方法,同时保持安全性。多因素认证可以提供额外的安全层,这一预防措施可能决定您的账户是否会被侵害。授权用户在系统上执行任务时,使用一个访问控制系统,确保每个人只拥有完成工作所需的最小权限。您还应当将职责分配给多个人,以确保没有一个人拥有过多的权力。
审计使您能够清楚地掌握组织内部发生的事情。要进行有效的审计,设置日志、建立良好的实践,并警惕各种 IoA。在这些过程的支持下,您将能够在组织内创建一个可靠且高效的访问控制程序。您会让正确的人进入,阻止不该进入的人,并确保每一个事件都被追踪。
第六章:网络监听

今天,几乎所有设备都连接到了网络。这使得它们可以在本地进行通信,比如连接打印机,或者通过互联网进行通信,比如访问网站或使用在线应用程序。尽管这些连接提供了很多便利,但它们也让黑帽黑客能够找到这些设备。通过利用网络的运行方式,攻击者可以看到你的流量,冒充合法设备,甚至确定流量在网络中的流动方式。
在本章中,你将学习更多关于如何创建有线计算机网络的内容,以及组成网络的设备的一些细节。你将了解对手是如何窃取这些网络上的流量并获取网络设备访问权限的。你还将学习如何使用防火墙和入侵检测系统(IDSs)来防御网络攻击。我们将在本章的最后配置你设备的防火墙。
本章只关注有线网络。在第八章中,我们将讨论无线网络,这些网络有自己的一套挑战。即使你使用无线网络,你的流量最终几乎肯定会通过有线网络。
网络设计基础
网络允许两个或更多设备进行通信,无论是无线还是使用电缆。你可以把设备之间的连接想象成有点类似于连接到你家里的电力线。这些电线,其中一些附着在电杆上,将电力站与房屋连接起来。电力站很可能与另一个电站相连,而那个电站又与另一个相连,直到到达产生电力的地方,比如水坝。同样地,你的计算机通过一条链路与其他设备连接,直到到达网络另一端的另一个设备。
网络不仅仅由电缆组成。它们还包括一些设备,例如路由器和交换机,它们帮助移动流量并导航连接。路由器提供两个不同网络之间的主要连接。在第二章中,我们讨论了公有网络和私有网络之间的区别。路由器是将流量导向这两种网络之间的设备。交换机在网络内部工作,指引流量在连接到它的设备之间流动。这两种设备共同将你的流量从一个点传输到另一个点。图 6-1 展示了一个大型企业网络可能使用的典型路由器和交换机机架的例子。较小的网络,如小型企业或家庭网络,可能只有一个交换机,或者使用交换机/路由器组合设备。

图 6-1:典型的网络机架设置(图片已修改,原图由 Adrian Sampson 根据CC BY 2.0许可证创建)
让我们来看一下当你访问一个网站时,流量的流动和连接。当你发送请求访问一个网站时,你使用的是 HTTP 协议。该协议帮助对数据进行分类,使得设备可以理解如何解析它。大多数协议还会分配一个端口号,这是分配给协议的特殊数字,以便网络设备识别正在发送的数据类型以及它们应该如何处理这些数据。对于 HTTP,端口号是 80,如果数据是加密的,则是 443。当交换机或路由器看到端口号 80 时,它会识别数据包为 HTTP 流量,并自动知道如何处理它,而不需要查看数据包内部的所有数据。这样就能更快地将数据包发送到目标。
使用 HTTP 时,你从计算机发送一个以数据包形式的请求。该数据包包括网站请求、端口号(80)、你的 IP 地址以及你访问的网站的 IP 地址。这个请求会发送到交换机。交换机查看请求并判断目标是否在当前网络上。很可能不在,所以交换机会将数据包传递给连接你家与互联网的路由器。如第二章所述,这个路由器被称为默认网关。
一旦路由器从交换机接收到数据包,它会检查连接到它的所有其他网络的列表。有许多类型的网络,但最常见的有局域网(LAN)和广域网(WAN)。局域网是一个小型网络,连接同一物理区域内的设备。局域网的例子包括办公楼、家庭甚至飞机。广域网连接跨越大范围地理区域的设备。互联网由许多广域网组成,所有这些广域网都连接成一个巨大的网络。路由器检查它从交换机接收到的数据包的目标 IP 地址,并确定该地址是否位于它连接的任何局域网或广域网中。如果路由器不知道该目标 IP 地址位于何处,通常会将流量发送到一个默认网络。
无论如何,路由器将流量传递给另一个路由器,后者按照相同的过程进行处理。这个链条会一直延续,直到数据包最终到达一个连接到目标设备所在局域网(LAN)的路由器。然后,路由器将数据包发送到局域网中的交换机,交换机找到目标设备。在局域网中可以有多个交换机,甚至在大型网络中有数百个交换机,比如 Google 或 Amazon 维护的网络。交换机之间像路由器一样传递流量,不过它们使用 MAC 地址而不仅仅是 IP 地址。一旦目标设备接收到数据包,它会读取数据包中的信息,比如网站请求,并做出响应。刚才描述的整个过程会反向进行:最初的请求源现在变成了响应的目标。
这是网络通信的基础。但它可能变得更加复杂。其他设备也会读取网络流量,甚至可能在发送之前对其进行修改。例如,一种特殊类型的服务器,叫做代理服务器,从一个网络连接获取数据包并将其传递到另一个连接。代理服务器通常会以某种方式修改原始数据包,例如,将目标 IP 地址从公有地址更改为私有地址。另一种类型的代理会读取网站请求,并判断它们是否符合组织确定的在工作时适合浏览的内容,然后再将它们发送到互联网以供处理。还有其他设备,如防火墙和入侵检测系统(IDS),会中断流量;我们将在本章后面讨论这些设备。
攻击你的网络
黑客根据他们的目标使用各种技术来攻击你的网络。网络攻击通常专注于获取对网络的访问权限,以查看流量或窃取数据。这意味着他们必须在你的系统发送的数据包和数据包的目的地之间连接到网络,这样他们才能看到正在发送的数据。对手还经常直接攻击网络。这些攻击通常围绕着试图找到关闭网络使用的方法,以使受害者无法像往常一样使用他们的网络。
无论如何,黑客的主要目标首先是了解网络。对手使用多种侦察技术在开始攻击之前了解他们的受害者。一个常见的方法是进行端口扫描,即向一个 IP 地址的所有可能端口发送请求,然后观察该地址上的设备如何响应。根据这些响应,攻击者可以获得大量关于系统的信息。例如,如果一个 IP 地址在黑客扫描端口 80 和 443 时做出响应,攻击者就知道这些端口是开放的,而且服务器可能正在运行某种 Web 服务。对手可以利用这些信息直接攻击服务器,或者欺骗其他系统认为它们是一个友好的系统。端口扫描为攻击者提供了宝贵的信息,使得他们可以更轻松地制定不同的网络攻击。
黑客如何查看你的流量
数据包为攻击者提供了各种详细信息,包括它们经过的设备、设备的位置以及设备使用的协议,更不用说数据包中包含的数据。当对手(或任何人)拦截流经网络的流量时,这叫做嗅探。就像猎犬跟踪一条线索一样,对手会获取经过网络的流量的碎片,并从中重建他们需要的信息。
在有线网络中,嗅探对攻击者来说可能是一个挑战,因为网络设计是将流量只发送到预定的接收方。这意味着攻击者必须想办法绕过这个设计,让流量直接发送到他们那里。在第八章中,你将看到攻击者如何在无线网络上做到这一点。在有线网络中,黑客可以通过几种不同的方法来实现这一点。
一种方法是将自己的硬件添加到网络中。如果你能够连接自己的物理设备,设备就可以扫描并复制通过网络的流量。那么攻击者如何偷偷地将路由器或交换机接入网络,而不被察觉呢?虽然做到这一点很困难,但对手通常会使用一个更小的设备,叫做网络监控器,它专门为此目的设计。图 6-2 展示了一个网络监控器的例子。监控器连接到网络中已经存在的基础设施,并复制通过它的流量。

图 6-2:网络监控器(图像经过修改,原图由 Andrew Fresh 根据CC BY 2.0许可创建)
对手还可以使用一种叫做IP 伪装的技术,伪装成网络上合法设备的 IP 地址并模仿该设备。任何原本应该发送到被伪装 IP 地址的设备的流量也会发送到黑客那里。IP 伪装可以让你误连接到一个设备,比如一台打印机,实际上这个设备是攻击者控制的。
第三种方法是通过更改网络设置来改变流量的去向。例如,通过更改设备的默认网关,黑客可以决定网络流量的去向。这使他们能够将流量引导到他们控制的设备上,从而捕获流量。
或者,攻击者可以在交换机上启用端口镜像功能。交换机有编号的物理端口,或者说是你插入电缆的插槽。通常,交换机有 24 到 48 个端口。端口镜像功能指示交换机将通过一个端口进出所有的流量复制到另一个端口。例如,如果攻击者能够在交换机上启用端口镜像,他们可以告诉交换机将进入端口 1 的所有流量复制到端口 22,然后他们可以将设备插入到端口 22 来捕获流量。更改流量设置通常需要较高的访问权限,尤其是在网络管理员没有注意到的情况下。
攻击者还可以使用另一种方法,通过物理方式接触传输流量的电缆。这种操作的方式取决于所使用电缆的类型。例如,早期网络常常使用一种被称为同轴电缆的电缆。它由两根铜线组成,外面包裹着厚厚的绝缘层。一种特殊的网络接入方式被称为吸血鬼接入,它能够穿透绝缘层,将两个金属尖端(即设备的牙齿)与两根铜线连接,从而允许接入记录任何经过的流量。图 6-3 展示了吸血鬼接入的示例。

图 6-3:吸血鬼接入示例(图像已修改,原图受创作共用-共享 2.5 Generic许可保护)
链接光纤电缆,它通过玻璃管中包裹的绝缘层利用光脉冲发送流量,需要弯曲电缆并将一个不带光的光纤放置在弯曲处。当光线经过弯曲时,不带光的光纤可以抓住一部分光,从而捕获流量。
这些物理方式捕获流量的问题在于几乎所有方法都会导致电缆信号的损失。例如,弯曲光纤电缆会增加延迟,导致任何监控网络的人都能立刻察觉到异常。
中间人攻击
尽管使用物理接入和更改网络设置可以让黑帽子看到网络中的流量,但要使这些技术生效需要大量的设置工作。它们也很难隐藏,尤其是当目标是拥有专职 IT 员工、负责寻找此类攻击的大型企业时。相反,攻击者可以使用中间人攻击,这种攻击能够在不需要物理访问网络的情况下实现相同的流量读取能力。
在中间人攻击中,攻击者将自己置于受害者和他们试图到达的目标之间的流量流中。攻击者并没有让你的流量直接发送到你原本打算发送的地方——例如一个网络服务器——而是先发送到攻击者那里。然后,攻击者可以读取、修改流量并将其转发给目标。这使得攻击者能够捕获你的数据并为自己目的操控它们。最糟糕的是,这些攻击通常极难被受害者发现。对受害者而言,一切看起来都在正常运行,尽管速度可能比平常慢。图 6-4 提供了一个基本的中间人攻击示例。

图 6-4:中间人攻击示例
在这种情况下,黑客向你发送了一封网络钓鱼邮件,邮件中的链接看起来像是来自你银行的合法链接 1。当你点击邮件中的链接时,它会把你带到对方的伪造 web 服务器,他们在该服务器上创建了一个看起来像你银行网站的页面。然后,你在该网站上输入了你的凭据 2。对方接收到你发送到该网站的流量,并进行修改,使其看起来像是来自攻击者的计算机,而不是你的。接着,攻击者将其发送到合法的银行网站 3,并成功访问了你的账户 4。攻击者随后向你发送了一个 404 未找到错误,确保你没有意识到发生了什么 5。
中间人攻击可以通过多种方式执行。除了刚刚描述的攻击方式,攻击者还可以创建一个代理服务器,然后诱使受害者连接到该代理。请记住,代理服务器代表另一台设备处理请求,因此通过让受害者连接到恶意代理,黑客可以捕获受害者发送到互联网的任何流量。建立中间人会话的另一种方法是更改受害者获取 DNS 信息的位置。如果攻击者能欺骗受害者或在系统上加载恶意软件,改变默认的 DNS IP 地址,他们就能迫使设备将所有 DNS 查询发送到恶意攻击者的服务器,而不是合法的 DNS 服务器。恶意服务器随后可以用任何它想要的 IP 地址进行响应,从而有效地让攻击者决定受害者设备发送网页流量的去向。
攻击者还可以使用网络上的设备发起中间人攻击。如果黑客能够访问某个设备,他们可以更改设置以重定向流量。物联网(IoT)设备尤其容易受到这种攻击。物联网设备是连接到互联网的非传统设备,通常提供某种增强功能。它们包括冰箱、电视、智能家居助手和安防摄像头。这些设备的安全性通常较差,因此攻击者很容易控制它们。攻击者有时可以更新物联网设备的固件(运行设备硬件的代码),以便包含新代码,从而允许他们捕获网络上的流量。由于这种方法通常不会影响设备的功能,因此很难被察觉。
拒绝服务
捕获流量并不是攻击者攻击网络的唯一选项。黑客还可以完全关闭网络,使其无法传输任何流量。这种类型的攻击被称为拒绝服务 (DoS)。DoS 攻击的基本原理是阻止网络正常运行。例如,攻击者可能会向单个 web 服务器发送大量流量,以至于其他任何人都无法访问该服务器及其托管的网页。
造成 DoS 攻击的方式有很多种。正如前面提到的,一种方法是通过大量流量压垮服务器,使系统崩溃。ping 数据包(在第二章讨论过)也是一种很好的方式,因为攻击者可以改变其大小并快速连续发送它们。在 ping 洪水攻击 中,攻击者的设备每秒发送大量的 ping 请求,使目标设备无法与网络通信。ping 数据包可以填满系统的内存,从而导致系统变慢。ping 洪水攻击很容易执行,因为它只需要一个能够发送 ping 的系统和比目标系统更多的带宽。图 6-5 展示了 ping 洪水攻击的示意图。

图 6-5:ping 洪水攻击
另一种 DoS 攻击形式是利用代码中的漏洞来造成 DoS 状态。一个例子就是 死亡 ping。ping 数据包通常最大为 65,535 位(位是计算机中数据大小的最基本度量单位),但可以创建超出此限制的 ping 数据包。如果黑客发送一个超大 ping 数据包给设备,它可以使接收该 ping 的系统崩溃并关闭。
ping 洪水攻击和死亡 ping 攻击现在已不如过去常见,因为大多数漏洞已经被修复。然而,它们仍然是如何利用代码或网络设计中的条件来造成 DoS 攻击的经典例子,许多现代 DoS 攻击仍使用类似的方法。
分布式拒绝服务
DoS 攻击是指一个设备攻击一个单一目标,类似于死亡 ping 攻击。在 分布式拒绝服务(DDoS)攻击中,攻击者利用多个系统来攻击单一目标。通过使用多个攻击系统,攻击者能够放大攻击的效果。
在 Smurf 攻击 中,这是一个过时的 DDoS 攻击实例,攻击者首先伪造了目标的 IP 地址。图 6-6 展示了 Smurf 攻击的示意图。

图 6-6:Smurf 攻击的示意图
在伪造 IP 地址后,攻击者向一个大网络的广播地址发送了 ping。广播地址会自动将流量发送到网络上的每一个设备。ping 请求发送到网络上的所有设备,它们随后向目标的 IP 地址做出回应。目标被大量响应淹没,最终崩溃。
更现代的 DDoS 攻击例子是 DNS 放大攻击(图 6-7)。

图 6-7:DNS 放大攻击的示意图
与 Smurf 攻击类似,DNS 放大攻击使用基本的 DNS 请求来淹没受害者的互联网连接。黑客制造伪造受害者 IP 地址的 DNS 查询请求 1。这些查询还包含了大响应参数,意味着它们将接受单个查询的最大响应大小。接着,攻击者向公共可用的 DNS 服务器持续发送这些查询 2。尽管查询本身相对较小,但响应非常大。DNS 服务器将这些大响应发送到受害者的 IP 地址 3,从而造成 DoS 状态。攻击者在 2016 年使用这种类型的攻击攻击了安全网站 Krebs on Security,造成了迄今为止最大的一次 DDoS 攻击。
对手尝试进行 DDoS 攻击的一种方式是通过创建僵尸网络。在这种情况下,僵尸是指黑客已经控制的系统,使其能够接受来自攻击者控制的服务器的指令。通过这种方式攻击设备通常需要安装恶意软件或恶意固件。攻击者可以将成千上万,甚至数百万的设备转变为僵尸,这些设备可以同时接收指令。这个僵尸网络可以向服务器发送同时的请求,从而发起强大的 DDoS 攻击。据记录,其中一个较大的僵尸网络——Mirai 僵尸网络,曾在其高峰期感染了 60 万个物联网设备。每个被感染的设备都可以用来发送 ping、DNS 查询或其他类型的 DoS 攻击,而攻击者无需直接攻击目标。这使得僵尸网络成为非常有效的工具,用于关闭受害者的系统。
网络攻击防御
防御网络攻击需要深入理解你的网络布局以及与之连接的资源。如果网络不规范,黑客更容易利用它,因为 IT 管理员在无法清楚了解流量如何在网络中流动的情况下,将更难确保正确的设置和安全控制措施到位。这对于拥有成千上万,甚至数万台系统的大型网络尤其如此。
解决这个问题的一种方法是将网络组织成多个区域,并基于每个区域而不是每个系统来构建安全性。当一个系统被添加到某个区域时,你会知道它需要具备一套特定的安全控制措施,以符合该区域的要求。当系统需要从外部访问时,一种常见的网络区域被称为非军事区(DMZ)。DMZ 处于内部私有网络与外部公共网络之间,实际上是两者的混合。通常,管理员会将允许外部连接的系统放在 DMZ 中。例如,如果你在服务器上托管一个网站,你会将该服务器放在 DMZ 中。DMZ 通常有严格的控制措施,以确保进出流量受到监控,从而防止攻击或漏洞突破。 图 6-8 显示了 DMZ 的示意图。
你可以将一个网络划分为多个区域,以维护安全控制。例如,你可能会有一个外部网络区域,一个 DMZ 区域,以及一个包括数据库和人力资源系统子区域的内部区域。使用多个区域的唯一缺点是管理和更新每个区域的所有安全控制。有时,你的系统可能还会适合多个区域,因此你需要仔细考虑将它们放在哪个区域。
一旦你建立了网络区域,你就可以添加控制措施。

图 6-8:网络中 DMZ 的示意图
防火墙
网络中最基本的控制之一就是防火墙。从基本层面来说,防火墙通过两种方式来调节流量:它要么允许流量通过并继续到达目的地,要么拒绝流量并阻止其继续前行。这个决策是通过将流量与一组规则进行匹配来决定如何处理流量的。
有多种类型的防火墙可供选择,它们可以是基于软件的或基于硬件的。软件防火墙是计算机程序,通常用于运行其他软件的设备上,如运行网站的服务器或桌面计算机。软件防火墙是系统防御的最后一道防线。通常,它们的功能比硬件防火墙少,但仍然是必要的,帮助控制哪些系统应用程序可以在网络上发送流量。硬件防火墙是用于查看和调节流入网络的流量的物理设备。一般而言,硬件防火墙比软件防火墙更强大。根据不同的型号,它们提供许多安全功能,并能够做出更多选择,而不仅仅是允许或拒绝流量。
包括包过滤防火墙
软件防火墙使用数据包过滤方法。它们在数据包进入系统时查看数据包,并根据一组规则决定是否允许该流量。如前所述,数据包包含有关发送数据的信息,包括目标和源 IP 地址以及到达的端口号。数据包过滤规则通常基于源 IP 地址和使用的端口号。表 6-1 显示了防火墙规则的示例。
表 6-1:示例防火墙规则
| 规则编号 | 允许/拒绝 | 协议 | 目标 IP | 源 IP | 端口号 |
|---|---|---|---|---|---|
| 1 | 允许 | 任意 | 192.168.15.1 | 任意 | 80 |
| 2 | 允许 | 任意 | 192.168.15.1 | 192.168.15.2 | 23 |
| 3 | 拒绝 | 任意 | 192.168.15.1 | 任意 | 23 |
| 4 | 拒绝 | 任意 | 任意 | 任意 | 任意 |
每一行表示防火墙中的一条规则。在协议列中,任意表示不管使用何种网络协议。有时,你会看到通配符符号(*)代替任意,但它们的意思是一样的。
请注意,第二条和第三条规则使用相同的端口号。然而,一条规则允许特定的源 IP,而另一条则拒绝任何源 IP。需要注意的是,当防火墙读取其规则时,它会逐条检查,直到找到匹配的规则。如果规则顺序不正确,可能会导致流量管理出现问题。例如,如果你将第 3 条和第 2 条规则调换,拒绝来自任何源 IP 的端口 23 流量的规则会被放在允许来自特定源 IP 流量的规则之前;因此,当来自 IP 地址 192.168.15.2 的流量进入时,防火墙会拒绝它,因为该 IP 地址与任意源 IP 匹配。出于这个原因,至关重要的是将允许流量的规则,特别是列出特定 IP 地址的规则,放在拒绝规则之前。
第四条规则确保,如果没有其他规则适用于流量,则该流量将被拒绝。我们称之为显式拒绝。许多现代防火墙默认会包含一条“拒绝所有”规则,而无需你将其添加到规则列表中;这被称为隐式拒绝。
有状态检测防火墙
另一种常见的防火墙形式是有状态检测 防火墙,它通常仅用于管理进入网络的流量。与数据包过滤防火墙类似,有状态检测防火墙有规则,基于 IP 地址和端口号等因素来管理流量。此外,有状态检测防火墙还会考虑条件来决定如何应用规则。
换句话说,当流量通过有状态检测防火墙时,外部设备会与防火墙建立连接。这与包过滤防火墙不同,包过滤防火墙会在流量经过其他设备时进行查看。防火墙会学习连接是如何建立的,以及一些关于连接的参数——例如,是否使用了加密。它还会决定是否允许或拒绝该流量。如果流量被允许,防火墙会监控流量的变化,观察连接的状态是否发生变化。这使得防火墙能够通过某些细节(例如源和目的 IP 地址)跟踪数据包。当来自相同位置的包在稍后时间到达时,防火墙可以利用这些细节来判断该流量是否被允许,而无需完全重新检查它。
应用程序防火墙
应用程序防火墙提供的是专为特定类型的应用程序设计的保护,例如 web 服务器或数据库。这些防火墙包含特殊的安全控制,帮助防御针对它们所保护应用程序的攻击。应用程序防火墙还可以在更深层次上检查流量,使其能够看到比有状态检测防火墙更多的信息。
例如,如果你使用 Web 应用程序防火墙 (WAF) 来保护 web 服务器,它将检查所有发送到该 web 服务器的 HTTP 请求。WAF 可以看到发送恶意软件的尝试、被利用的漏洞,甚至是与典型的 web 服务器设置的偏差。应用程序防火墙在处理流量时也有更多的选择。例如,有些可以将流量发送到一个新的 IP 地址进行分析。许多应用程序防火墙与其他安全设备一起捆绑在一起,例如入侵检测系统(将在下一节讨论)。
应用程序防火墙的主要缺点是它可能非常慢且资源消耗大。深入扫描数据包并分析数据以查找违规行为,比简单地检查 IP 地址和端口号(像包过滤防火墙那样)花费的时间要长得多。它还需要更多的内存和处理能力,这意味着运行应用程序防火墙的系统比运行包过滤防火墙的系统更昂贵。更高等级的安全控制需要这种权衡。还需要知道,应用程序防火墙是针对指定的应用程序的;你不能将 WAF 放在数据库服务器前面,并期望获得相同级别的安全性能。
防火墙无法读取加密流量,因为流量是加密的。然而,当网络中的流量被加密时,包含 IP 地址和端口号的数据包头通常是未加密的。这意味着有状态检查防火墙和数据包过滤防火墙可以正常工作,而应用防火墙则需要解密数据包中的数据才能进行检查,然后再决定是否允许该流量。
入侵检测系统
虽然防火墙对于防止许多不必要的连接是必要的,但它们并不总是高效地检测攻击或发现隐藏在合法流量中的恶意流量。由于防火墙是按照规则执行的,它有时可能会允许来自黑帽的流量,如果该流量符合允许规则。为了捕捉这些攻击,你应该在网络中添加 IDS。
IDS 旨在检测网络或系统上发生的攻击,并向安全人员提供警报。IDS 能够检测一些其他安全控制可能无法处理的攻击。例如,它们能够检测死亡回显(ping of death)或 Smurf 攻击,而防火墙如果有允许 ping 流量的规则,可能会接受这种流量。与防火墙一样,IDS 可以是软件或硬件基础的,可以监控单个系统或网络的一部分。IDS 通常用于网络的关键区域,如 DMZ 的入口或内部私有网络。
为了检测攻击,IDS 使用两种不同的方法:签名和启发式。签名类似于防火墙规则,但可能包含额外的行为元素,例如流量进入的时间或它试图建立的连接类型。签名的主要特点是它们是固定的。一旦编写签名,IDS 将仅寻找与该签名完全匹配的流量。例如,如果你写了一个查找对 sparklekitten.net 的特定请求的签名,而一个请求访问的是 sparklekitten.us,签名将不会检测到该请求。签名还可以检测已知的恶意软件。
基于启发式的 IDS 监视其所在的系统或网络,以了解正常流量基线的情况。然后,安全专业人员将启发式系统设置为在网络上某些条件发生变化时发出警报。例如,如果连接到 Web 服务器的数量通常每分钟保持在 1,000 次左右,安全人员可能会设置一个每分钟 10,000 次的阈值,以触发警报,因为这个流量增加可能表示正在进行热销活动或潜在的 DoS 攻击。启发式系统在检测新攻击方面非常有效,因为它们不必依赖签名来判断事件是否恶意。专家必须分析恶意软件以创建恶意软件签名,因此,如果恶意软件是全新的,签名系统可能无法检测到它。但启发式系统也需要不断的微调,以确保它们拥有正确的正常流量基线。如果系统在正常情况下每分钟生成 10,000 次连接时不应触发警报。
入侵防御系统
通常,IDS 是一种被动系统。它可以发送警报,但不会阻止恶意流量。与应用程序防火墙类似,IDS 可能需要很长时间来检查数据并确保它与签名或启发式特征不匹配。为了提高速度,许多 IDS 会复制流量,并在其通过系统后进行分析。但这意味着流量在被检测为恶意之前,已经到达了目的地。
显然,这可能是一个重大安全问题,尤其是对于可能在安全人员来不及反应之前就感染系统的恶意软件。为了解决这个问题,安全研究人员创建了名为 入侵防御系统 (IPS) 的设备。IPS 的工作原理与 IDS 类似,使用签名或启发式方法来检测恶意流量。但与被动的 IDS 不同,IPS 在流量到达目的地之前,会主动与之互动,以防止其对目标造成危害。
根据不同的模型,IPS 处理恶意流量的方式有几种。一种方法是完全阻止这些流量。IPS 可能直接执行此操作,或者可能会更改防火墙规则来阻止流量。IPS 还可以将流量发送到一个专门的安全系统,安全团队可以分析这些流量,以了解攻击者的技术。IPS 还可以在传递干净流量之前移除或隔离恶意软件。除了这些主动措施外,IPS 还会发送警报,类似于 IDS。
就像应用程序防火墙一样,IPS 的主要缺点是它比 IDS 更慢,并且需要更多的资源。这使得 IPS 比 IDS 更昂贵。因此,通常只会在关键位置使用 IPS,例如 DMZ 的入口,而 IDS 可能会在 DMZ 内的每台服务器上,如 图 6-9 所示。

图 6-9:IDS 和 IPS 在网络中的示例位置
IPS(入侵防御系统)和 IDS(入侵检测系统)通常被捆绑成一体机设备,将几种不同的服务结合成一个系统。这些设备可能包括多种安全设备,如防火墙、电子邮件过滤器、代理服务器等。
练习:设置您的防火墙
Windows 和 macOS 都包含内置防火墙,您可以用它们来阻止特定应用程序的流量进入您的系统。虽然两者都有一组默认规则,能够提供足够的安全性,但您也可以添加、删除或修改这些规则。自定义规则可以帮助您进一步提高设备的安全性,特别是在添加不希望允许外部连接的新应用程序时。在本练习中,您将配置防火墙,添加一个入站规则以保护您刚刚安装的新应用程序。
Windows
要访问 Windows 防火墙,请在屏幕左下角的搜索栏中输入firewall。Windows Defender 防火墙高级安全应用程序将出现。点击该应用程序,打开一个显示常规防火墙信息和设置的窗口。在左侧,点击高级设置,打开图 6-10 中显示的窗口(您必须拥有管理员账户才能执行此操作)。

图 6-10:Windows Defender 防火墙高级设置
左侧菜单显示了您可以设置的规则类型。您应该可以看到入站和出站规则的子菜单,以及其他一些选项。当您点击其中一个菜单项时,相应的选项将显示在中间框中,您可以执行的操作将在最右侧出现。
此时,您应该能在主框中看到防火墙配置文件。在 Windows Defender 防火墙中,配置文件可以根据系统连接的网络类型来更改防火墙的行为。这对于像笔记本电脑这样的设备非常有用,因为它们可能频繁切换不同的网络。域配置文件适用于远程管理的设备,例如公司中的设备。私有配置文件适用于私有网络,如您的家庭网络,公共配置文件适用于公共网络,如咖啡馆中的无线网络。每个配置文件的默认选项相同,但您可以进行更改。只是在进行任何修改时要小心,因为这些更改会影响整个系统,而不仅仅是特定的应用程序。
现在您已经查看了配置文件,让我们添加一个新规则。选择一个您想要应用新规则的应用程序。考虑好应用程序有助于您设置规则的参数。需要考虑的主要因素是应用程序使用的端口号以及允许哪些类型的流量连接到该应用程序。例如,如果您正在安装一款新游戏,您需要打开该游戏使用的端口号。您还需要检查是否有任何特定的协议或流量类型必须连接到游戏才能正常运行。对于大多数应用程序,您可以在用户手册或网站的帮助部分找到这些信息。
在考虑应用程序时,您需要选择要添加规则的菜单。对于本练习,让我们将规则添加到入站规则。入站规则适用于进入您系统的流量,而出站流量是您从计算机发送出去的数据。点击左侧的入站规则,以显示当前的入站流量规则列表。图 6-11 提供了这些规则的一个示例。

图 6-11:入站规则列表
这个窗口的布局与本章早些时候关于数据包过滤防火墙的表 6-1 稍有不同,但您可以看到相同的元素仍然存在。一个绿色的勾选标志表示该规则允许流量;没有标志的规则当前是禁用的。右侧是规则的名称和它所属的组别,该组别根据规则所依赖的协议或应用程序对规则进行分类。例如,在图 6-11 中,您可以看到几个规则处理桌面核心网络功能,因此它们被恰当地放置在核心网络组中。下一列是规则应用的配置文件。如您所见,一些规则仅在特定配置文件中处于活动状态。随后的列显示了规则的作用,包括操作(允许/拒绝)、规则适用的应用程序、规则适用的 IP 地址以及规则适用的协议类型。
协议通常与使用的连接类型相关,例如 TCP。如果您的应用程序不使用特定协议,选择"Any"是安全的。下一个列(图中未显示)与规则适用的端口号相关。回想一下,端口号可以告诉系统发送的流量类型。大多数应用程序使用常见的端口号,例如端口 80 用于网页流量。其他应用程序可能会使用独特的端口号;例如,游戏Doom在其多人模式下使用端口号 666。当安装新应用程序时,您可能需要添加一条规则来允许它使用一个新端口号。现在我们就来做这个!
在“入站规则”窗口的右侧,点击新建规则。这将弹出一个向导,帮助你设置规则(图 6-12)。你看到的第一个选项是规则类型。程序用于为特定应用程序创建规则。你也可以选择端口,用于影响特定端口号的规则;预定义用于连接默认创建的某个组,如核心网络,而自定义则允许你设置自己的参数,而不仅仅局限于端口号或应用程序。选择自定义以查看可用选项。

图 6-12:规则类型选项
指定你是为所有程序创建规则,还是仅为特定应用程序创建规则。为此,选择此程序路径,点击浏览,然后找到你在系统中保存的程序并从菜单中选择它。在图 6-13 中,我使用了一个虚拟程序名作为示例。你也可以这样做,或者继续选择“所有程序”选项。然后点击下一步。

图 6-13:程序选择示例
现在列出你的规则所需的端口和协议。如果你为某个应用程序创建规则,你应该能够从该应用程序的官方网站或支持材料中找到它使用的端口和协议。在这个示例中,我使用了端口 80 和协议 TCP 来表示 Web 服务。图 6-14 显示了已填写的选项。

图 6-14:端口号选择示例
点击下一步,在“范围”步骤中指定规则适用的 IP 地址。除非你打算与特定设备通信,例如打印机,否则最好保持广泛的地址范围可访问,以免你不断添加新的地址。这也是重新考虑规则并确保你愿意允许所有来源的流量进出的时候。
点击下一步进入“操作”步骤,决定你要采取的操作。你有三种选择:允许、如果安全则允许和阻止。“如果安全则允许”选项仅在连接使用了包含加密的知名安全协议时才允许连接(我们将在第九章讨论一些这些协议)。在此练习中,我设置规则为阻止连接,如图 6-15 所示。这意味着任何尝试访问指定应用程序的端口 80 上的流量将被阻止,从而有效地将其与 Web 流量隔离。
选择动作后,点击下一步以选择规则的配置文件。通常,你应该选择所有三种配置文件,以便无论你处于哪种类型的网络中,规则都能起作用。不过,你也可以选择一个特定的配置文件类型,以为你的计算机提供不同级别的安全性。例如,你可能会阻止与公共网络的连接,而这种连接通常会在私人网络中允许。

图 6-15:设置连接类型
最后,点击下一步来命名规则。然后点击完成。你应该能在“入站规则”窗口的顶部看到你新建的规则,如图 6-16 所示。

图 6-16:最终规则生效
现在你已经添加了一个新规则,你可以轻松地创建更多规则,以满足网络需求,同时保持设备的安全。记住,当你不再需要某个规则时,你可以禁用它,而不是删除它,以防将来可能还需要它。
macOS
macOS 包含一个内置的防火墙,你可以激活它。虽然它的选项没有 Windows Defender 防火墙那么强大,但一旦正确设置,它仍然提供了很好的保护。要找到防火墙,点击屏幕左上角的苹果标志,然后点击系统偏好设置。点击安全性与隐私,然后点击顶部菜单栏中的防火墙。图 6-17 显示了结果对话框。如果防火墙被关闭,你需要管理员权限才能打开它。点击对话框底部的锁图标来更改防火墙设置。点击开启防火墙,然后点击防火墙选项。
在选项对话框中(图 6-18),你有几种选择。你可以阻止所有进入系统的连接。虽然这会增加你的安全性,但如果应用程序无法接受传入连接,它们将无法正常工作。你还可以添加应用程序,并指定它们是否应接受或拒绝传入连接。在图 6-18 中,Adobe Photoshop 被设置为允许所有连接。

图 6-17:macOS 防火墙设置

图 6-18:macOS 防火墙选项
下一个选项允许内置软件自动接受传入连接。这意味着系统上安装的任何苹果产品默认都会接受传入连接。苹果有许多过程来测试其软件的漏洞,但你应该注意,仍然存在黑客可能利用这种防火墙条件来访问应用程序的风险。
下一个选项类似,但适用于下载的签名软件。签名软件来自经过验证的合法来源。最后一个选项,隐身模式,防止设备在接收到某些类型的流量(例如 ping 包)时做出回应。这可以帮助阻止攻击者获取有关设备的信息,包括它是否真的在线。
不幸的是,macOS 的图形界面(GUI)没有像 Windows Defender 防火墙那样提供很多选项;你可以将应用程序添加到防火墙列表中,但不能使用系统偏好设置中的选项创建带有端口号的自定义规则。还有一个叫做pf的防火墙,它是操作系统的一部分;不过,要访问它,你需要进入etc文件夹中的配置文件pf.conf。你可以通过在终端窗口输入man命令,man pf.conf,来查找其手册,这会显示内置的帮助文档。
在对防火墙进行任何更改之前,我强烈建议你彻底阅读手册。不幸的是,配置pf的具体细节超出了本书的范围。
现在你已经了解了如何为 Windows 和 macOS 创建规则,你可以微调你的防火墙,在工作时保护你的系统。需要记住的重要细节是,创建一个调优良好的防火墙需要时间和一些反复尝试。这也不是一个你可以设置一次就不再考虑的功能。定期审查防火墙规则,确保所有应用程序都受到保护,对于维持系统安全至关重要。
结论
阅读完这一章后,你现在知道预防对于保护网络安全至关重要。你的安全工作应该主要集中在防止攻击发生,而不是在攻击发生后再去阻止它。通过设置具有正确规则的防火墙,你可以通过阻止流量进入网络来挫败许多低级和中级攻击。对于高级攻击,使用应用程序防火墙或 IDS/IPS 可以在攻击到达目的地或释放负载之前帮助检测攻击。这些系统可以为安全专家提供必要的时间,以便在黑帽黑客获得访问权限之前做出反应。
第七章:云中的攻击

你应该听说过云计算这个词,可能是在作为技术产品的功能或广告中提到过。你可能使用过云存储,将照片或文档保存在互联网上。那么你可以理解,为什么那些想要访问这些文件的黑帽攻击者会攻击你的云存储。
但是这些简要的描述并没有解释云计算的真正含义。在本章中,我们将讨论云计算如何工作以及云计算服务的基本设置。我们将研究攻击者如何针对云计算并窃取其中托管的信息或服务。然后,我们将探讨你可以做些什么来更好地保护你的云账户,并在选择要使用的服务时更加了解。通过本章的练习,你将使用一些对手用来执行攻击的技术,叫做SQL 注入;通过这种方式,你将更好地理解它们是如何工作的。在本章结束时,你将了解云计算的运作方式以及如何保护你的云存储免受攻击。
云计算如何工作
云计算这个词可能会令人困惑,因为它在许多不同的上下文中使用,尤其是在用来营销产品时。从最基本的定义来看,云计算就是使用别人的计算机做某事。一开始,这个定义可能显得模糊不清,但这也正是关键所在;云计算涵盖了一系列服务和系统,其中一些你可能甚至不知道。
你可能熟悉的一个云服务例子是网站托管。如前所述,当你访问一个网站时,你实际上是向一个托管该网页的服务器发出请求。理论上,这意味着任何想要拥有网站的人都必须拥有自己的 Web 服务器,并自行设置和维护。但在现实中,很多公司提供网站托管服务,让你可以在互联网上拥有自己的网站,而不必拥有 Web 服务器。其中一些服务,如 Wix、Google 和 Squarespace,提供额外的云服务,如数据库存储、向其他网站投放营销广告,甚至是网站建设工具。
云服务的一个主要优势是你不需要维护使用某些硬件或软件所需的设备和系统。如果我想要托管一个销售我在午餐时随便在餐巾纸上涂鸦的 T 恤设计的网站,我会很难筹集到为现代网站有效运营所需的所有设备资金,更别提如何设置和运行它的技术知识了。相反,云服务允许我使用它的设备和专业知识。这减少了服务的整体成本,而这些成本会在服务的用户之间分摊。
使用云服务的一个缺点是你对设备的操作控制有限。以网站服务为例,该服务并不让你控制公司使用什么类型的网络服务器。你对服务提供的功能也有很大限制。如果它不提供某项服务——例如,你的网站没有在线商店——那么让服务提供商增加这个功能可能会很困难。你也受限于服务合同。例如,你可能有一个合同,只允许每天最多 100 个访问者访问你的网站。如果超过 100 个访问者浏览你的网站,你要么支付更高的费用,要么这些额外的访问者可能无法访问页面。
随着互联网的发展和网络连接设备数量的增加,云服务的提供也在不断增加。了解每种服务如何工作可能会让人感到困惑。对云系统进行分类的一种方式是描述它们提供的服务类型。通常,我们会将这些服务标记为服务名称后跟 as a service。例如,你可能会遇到 AaaS,它可能代表 应用程序即服务 或 分析即服务。正如你所看到的,云计算涵盖了如此多的功能和特性,甚至缩写都有多种定义。实际上,人们有时使用 XaaS 来表示 任何即服务,这显示了云服务的广泛性。
为了简单起见,让我们看一下通常与云相关的三种主要服务。
软件即服务
软件即服务(SaaS) 是托管在他人系统上的软件,用户可以通过网络连接访问,通常是通过网页登录门户进行登录。
SaaS 的一个很好的例子是微软 Office 365。这个产品让你通过网站访问 Microsoft Office 应用程序,如 Word 或 PowerPoint,而不需要将这些应用程序安装到你的计算机上。
SaaS 有几个优点:它可以让你访问最新的软件更新,并且可以在许多不同的系统上使用该软件。此外,SaaS 通常与其他云服务提供集成。例如,Office 365 与 OneDrive 集成,OneDrive 是微软的云存储服务。
平台即服务
平台即服务(PaaS) 包括运行服务所需的所有基础设施、工具、硬件和软件。网站托管平台就是 PaaS 的一个例子。另一个例子是电子邮件服务,如 Gmail 或 Outlook。在这种情况下,平台是电子邮件系统,它需要服务器、网站门户访问、应用程序和协议等来运行。就像 SaaS 一样,只不过规模更大,你可以访问整个平台,而无需管理运行所需的系统。
PaaS 不像 SaaS 那样给你那么多自由,因为你基本上受到云提供商运行的服务的限制。你对使用什么类型的硬件或软件作为平台的一部分选择有限。权衡是,你将获得更容易管理的选项,并且比自己运行应用程序或硬件时拥有更多强大的功能。
基础设施即服务
运行软件甚至平台适合小型项目,但如果你需要大量资源来同时运行多个不同类型的平台怎么办?这时基础设施即服务(IaaS)就派上用场了。IaaS 提供所有必要的资源,用于维护你或你的公司为客户提供的服务。这个描述可能看起来有些模糊,因为 IaaS 通常涉及大规模的运营,其中多个组件协同工作。让我们来看一个传统 IaaS 设置的例子。
假设你创建了一款包含多人功能的视频游戏。这个功能允许玩家加入同一个游戏,共同建造堡垒防御攻击的怪物。你是一个小型独立开发者,所以你主要专注于游戏的开发和艺术设计。然而,你知道你需要大量系统来运行多人组件,因此你雇佣了一家 IaaS 公司来提供必要的系统。
IaaS 公司不仅会为你提供托管游戏所需的服务器,还会提供玩家在游戏时连接服务器所需的设备。此外,IaaS 还会提供存储,用于保存玩家在不玩游戏时的数据,以便他们能够保留游戏物品。如果玩家在访问游戏时遇到问题,或者服务器崩溃,IaaS 还可能提供帮助台工作人员。
IaaS 提供大量设备和专业技术,旨在管理公司内部的核心服务。另一种流行的 IaaS 形式,称为托管服务提供商(MSP),为公司提供大部分技术设备,如桌面电脑、服务器和路由器,并且提供技术人员和帮助台工作人员来进行管理。
IaaS 在可用系统的种类以及你对这些系统的控制权方面提供的灵活性最少。在多人游戏的例子中,作为游戏的拥有者,你不一定能调整与系统运行相关的操作,比如服务器打补丁的频率、使用的安全类型,或者当系统崩溃或故障时如何恢复。签署 IaaS 合同时要特别注意,因为 IaaS 将是你工作方式中的一个重要组成部分。
图 7-1 展示了在不同云服务层级提供的一些服务示例。

图 7-1:按云层级划分的应用示例
安全即服务
云计算中的另一个领域是安全即服务(SECaaS),它提供网络安全服务,保护客户免受攻击。安全即服务可以包括多个不同的组件。有些服务范围有限,例如漏洞扫描服务,而其他服务则是全面的安全服务,提供在发生攻击时随时待命的人员支持。一个例子是托管检测与响应(MDR),它试图实时检测攻击并作出响应,以防止进一步的损害。该服务还可以包括持续的安全工作,如渗透测试或取证。
攻击云计算
许多在前几章中讨论的攻击方法对云基础设施仍然有效。例如,第三章讨论的社会工程学攻击和第五章讨论的身份验证攻击,对云服务来说是非常强大的攻击手段。由于许多云服务提供网站,客户可以通过这些网站与服务进行互动(例如 Gmail 帐户或 Office 365 应用程序),社会工程学攻击可以帮助黑客获取帐户信息并以用户身份登录。由于云应用程序的可访问性极广,因此检查诸如登录时间或登录尝试位置等典型的恶意活动指示器可能不起作用,从而使这些恶意登录更加难以被检测。
另一种针对云计算的攻击是中间人攻击,这在第六章中有介绍。如果攻击者能够拦截客户端与云服务提供商之间的网络流量,他们可以操控流量来访问服务或窃取正在传输的数据。攻击者可以通过设置一个看起来像云服务登录页面的假页面来创建这种中间人攻击场景。
恶意软件也是一种有效的攻击手段。许多攻击者通过恶意软件攻击云服务,因为它们可以利用大量的资源。例如,非法挖掘加密货币(如比特币)的加密挖矿恶意软件就是一个例子。加密挖矿需要大量的 CPU 资源和电力,因此攻击者有时会试图利用云服务的资源来挖掘加密货币。这类攻击很难被发现,因为许多加密挖矿程序伪装成在云环境中运行的合法应用程序。
大多数云攻击的目标是获得云服务提供商运行的基础设施的访问权限。实现这一点的一种方式是寻找云服务提供的客户端系统中的漏洞,然后利用这些漏洞访问私人内部资源。我们通常将这些漏洞称为Web 应用攻击;接下来我们将仔细了解这些攻击。
Web 应用攻击
许多云服务具有客户端接口,您可以通过网站或其他在线应用程序访问此接口。此接口允许您与您付费的功能进行互动,同时也为攻击者提供了一个理想的攻击目标。由于应用程序必须保持可供客户端使用,因此阻止攻击者访问它可能是很困难的。有些网络应用程序对公众开放,意味着任何人、任何时间都可以访问它们。
此外,网络应用程序通常与内部网络中的资源连接。这使得外部用户能够访问通常对外部不可用的数据,如用户个人资料或个人信息。它还为攻击者提供了一个方式,可以通过这些外部云服务访问内部网络,并窃取这些数据。
正如第六章所讨论的,私有网络通常将来自外部网络的连接发送到 DMZ(隔离区)。这允许用户访问云服务和其他资源,而无需访问内部网络。当用户需要访问存储在内部网络上的数据时,DMZ 中的云服务代表用户访问这些资源。
然而,攻击者仍有许多方法可以通过外部云服务攻击内部网络。这些攻击的主要目标之一是获得任意代码执行的能力,即在系统上执行任何命令或代码的能力。通常,只有具有最高权限的帐户才能执行此操作,但通常也有方法绕过现有的限制。一旦黑帽攻击者能够运行自己的代码,他们就可以通过安装后门或创建账户的方式完全渗透系统。
让我们看一些最常见的网络应用程序攻击实例,来确定此类攻击的一般结构及其工作原理。
缓冲区溢出
缓冲区溢出 攻击尝试填满计算机的内存,从而使系统崩溃或攻击者获得对系统通常未经授权部分的访问权限。要理解这种攻击是如何工作的,首先需要了解内存分配是如何运作的。系统使用内存来存储所有信息。通常,系统只有一定量的内存,并将其分配给各个功能模块。像云服务所使用的应用程序会分配一固定数量的内存块。未使用的内存称为缓冲区。
当攻击者发起缓冲区溢出攻击时,他们故意试图溢出分配给应用程序的内存缓冲区。例如,如果一个应用程序分配了五个内存块,攻击者可能会尝试将六个数据块注入其中,超出已分配的空间。图 7-2 展示了这一过程;单词excessive的大小超过了 A 部分分配的空间。

图 7-2:缓冲区溢出示例(图片修改自原图,原图受知识共享署名-相同方式共享 2.0 通用版许可保护)
一旦缓冲区被突破,可能会发生几种不同的事件。一些系统会因为无法存储提供给它们的所有数据而导致错误并崩溃。另一种选择是数据溢出到下一个内存块。
通常,攻击者会在提交给应用程序的数据的末尾添加命令。如果内存溢出并覆盖分配给管理功能的内存块,系统命令可能会使用高级别权限执行。这可能导致攻击者在系统上执行他们想要的任何代码。
管理缓冲区溢出的最佳方法是使用一种名为 输入验证 的功能。当用户向系统发送数据以存储到内存中时,输入验证代码首先检查数据是否适合,并且以正确的格式到达。如果输入不可接受,系统会在完全提交到内存之前丢弃它。这可以在缓冲区溢出攻击开始之前将其阻止。开发人员还可以使用另一种技术,称为 模糊测试。模糊测试会生成不同长度的随机输入,并自动将其应用到网站或云应用程序的输入字段中。这使得云服务可以确保输入验证到位,并且不会发生缓冲区溢出等漏洞。
SQL 注入
结构化查询语言(SQL) 是一种用于访问或操作存储在数据库中的数据的编程语言。Web 应用程序有时使用 SQL 数据库存储网站用户可以访问的信息。例如,一个具有登录功能的网站可能会使用 SQL 数据库存储用户的账户信息,包括他们的密码。当用户登录网站时,Web 应用程序会创建一个自定义 SQL 查询,并将其发送到数据库以检索用户的信息。图 7-3 展示了这一过程是如何工作的。

图 7-3:正常 SQL 登录示例
有时,使用 SQL 查询访问数据库意味着用户可以利用密码输入字段将他们选择的任何值直接发送到数据库进行处理。因此,攻击者可能会将用户名和密码之外的文本字符串注入到数据库中——比如他们自己的 SQL 查询,这会允许他们在数据库上执行命令。结果,他们可能会创建具有管理员权限的新账户,修改现有账户的密码,让他们使用新密码登录这些账户,并挖掘数据库中的个人信息,如信用卡号。黑帽黑客甚至可以删除数据库!图 7-4 展示了 SQL 注入的一个示例。

图 7-4:SQL 攻击示例
上半部分展示了如何通过用户名和密码创建正常的 SQL 查询。下半部分展示了用于确定服务是否容易受到 SQL 注入攻击的标准查询。该查询基本上告诉数据库查找任何用户并返回该信息(密码字段通过 */ 语法被置为 null),从而向攻击者指示该服务易受这种攻击类型的影响。
话虽如此,你在现代系统中很少会看到这种攻击成功,因为大多数服务已经识别并缓解了这种攻击。像缓冲区溢出一样,击败这种攻击的最佳方法是使用输入验证,删除发送到数据库之前的恶意 SQL 查询。不过,它仍然是一个很好的例子,展示了对手如何利用后端基础设施攻击云服务。
XML 注入
可扩展标记语言 (XML) 是一组用于创建动态文档的规则,web 服务器可以读取这些文档来填充网页。例如,假设你在 sparklekitten.net 上,正在购物,挑选那些酷炫的 Sparkle Kitten 产品。当你点击一个商品时,web 服务器可以向数据库发送一个包含价格信息的 XML 请求。数据库使用 XML 发送该信息,web 服务器随后将其填充到网页中,给你提供最新的产品价格。XML 很有用,因为无论你使用什么类型的 web 服务器或数据库,只要它们都支持 XML,它们就可以相互通信。
对手利用 XML 的灵活性来为自己谋取利益。在 XML 注入攻击中,黑客创建自己的 XML 文档并将其发送到 web 服务器。web 服务器接受该 XML 文档,并使用攻击者的恶意输入更新网站。XML 注入攻击的表现可能因文档的编写方式而异。例如,使用 XML 注入有可能创建一个拥有完整管理员权限的用户。
攻击者通常会使用其他漏洞来让 web 服务器验证 XML 文档。与 SQL 注入类似,他们可能会利用网页中的一个字段,将 XML 信息注入到应用程序的后端。这意味着你也可以使用输入验证来防御这些攻击。如果系统能够识别 XML 信息,就可以将其从输入中移除,或者直接拒绝该输入。
防御云服务
云服务比你拥有和运行的系统可能更安全。原因在于云服务提供商可以在安全性上花费比小型公司更多的资金。此外,由于云服务提供商为多个付费客户提供服务,他们能够负担得起维护多个安全服务,包括硬件、软件和人员,而无需让任何一个客户承担这些服务的全部费用。对于云服务提供商来说,确保安全性也是其最大利益,因为其整个业务是建立在确保客户能够安全、稳定地使用其服务的基础上的。
然而,你不能总是依赖云服务提供商提供所需的安全性。在注册云服务之前,仔细检查其服务条款,以确定云服务提供商将保持的安全级别。这些条款还应该告知你作为客户端的责任。许多云服务提供商会保留合规报告,例如 SOC II 报告,你可以请求查看。这些报告不仅展示他们所具备的安全功能,还提供了这些功能有效运行的证明。
云安全的一个薄弱点是公开可访问的客户端门户。到目前为止讨论的许多攻击都始于客户端用来与云服务交互的网页。管理员必须经常测试这些门户,以确保它们的安全性。实现这一点的一个方法是使用模糊测试,正如在第 130 页的“缓冲区溢出”中所讨论的那样。你还应该将云应用和连接添加到你为网络上的系统进行的监控中。例如,许多云服务允许你与第三方应用进行集成,比如使用 Facebook 登录来登录你的账户,或者与系统进行集成,这些系统你可以控制在你的内部网络中,比如客户数据库。监控你的云服务对其他应用、系统或账户的访问,可以帮助确保黑客没有控制你的云账户,或利用云服务访问你的内部系统。
对于云服务用户来说,接受适当的培训同样重要。这种准备有助于确保用户不会成为社会工程攻击的受害者。使用多因素认证也可以保护云服务。许多攻击者会放弃,转而寻找更容易的受害者,而不是花时间突破多因素认证。
练习:对 Damn Vulnerable Web Application 进行 SQL 注入攻击
为了更好地理解 SQL 注入的原理,让我们进行一次攻击。我们将以Damn Vulnerable Web Application(DVWA)为目标,这是一个有意设置防御漏洞的应用,旨在测试各种弱点。
在您加载 DVWA 之前,您需要一个运行平台。由于 DVWA 存在漏洞,最好将其作为虚拟机或容器运行。为了完成本练习,我们将使用 Docker 服务。Docker 是一个运行容器的平台,容器本质上是设计成可以在任何地方运行的软件包。
安装 Docker 和 DVWA
若要注册一个免费帐户并安装 Docker,请访问www.docker.com/,如图 7-5 所示。点击右上角的开始使用按钮,按照流程下载并安装 Docker Desktop 应用程序。标准安装即可满足我们的需求。
安装好 Docker 后,您可以选择通过教程进行学习,或者直接开始使用。

图 7-5:Docker 首页
接下来,您需要使用 Docker 下载并启动 DVWA。为此,请通过进入开始菜单并在 Windows 上输入命令提示符,或在 macOS 上打开终端应用程序来访问命令行。然后运行以下命令:
**docker run -–rm -it -p 80:80 vulnerables/web-dvwa**
此命令应创建包含 DVWA 的容器。命令运行完成后,输出应如下所示:
Unable to find image 'vulnerables/web-dvwa:latest' locallyLatest: Pulling from vulnerables/web-dvwa
3e17c6eae66c: Pull complete
0c57df616dbf: Pull complete
eb05d18be401: Pull complete
e9968e5981d2: Pull complete
2cd72dba8257: Pull complete
6cff5f35147f: Pull complete
098cffd43466: Pull complete
b3d64a33242d: Pull complete
Digest: sha256: dae203fe11646a86937bf04db0079adef295f426da68a92b440e3b181f337daa7
Status: Download newer image for vulnerables/web-dvwa:latest
[+] Starting mysql…
[ ok ] Starting Maria DB database server: mysqld.
[+] Starting apache
[...] Starting Apache httpd web server: apache2AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2\. Set the 'ServerName' directive globally to suppress this message.
ok
==> /var/log/apache2/access.log <==
==> /var/log/apache2/error.log <==
在成功安装 DVWA 后,您可以打开该应用程序。点击任务栏中的 Docker 图标,然后点击仪表板,如图 7-6 所示。

图 7-6:从 Docker 菜单中选择仪表板
您应该能看到 DVWA 列为一个可以选择的容器。当您高亮该容器时,它应显示多个图标,提供不同的选项。点击第一个在浏览器中打开,如图 7-7 所示,以启动 DVWA。

图 7-7:选择“在浏览器中打开”以打开 DVWA 容器
一个浏览器窗口将打开,进入 DVWA 的登录页面。使用以下默认凭据登录:
Username: admin
Password: password
出现如图 7-8 所示的屏幕。在这里,您可以创建一个数据库,以便在 DVWA 场景中使用。点击底部的创建/重置数据库按钮开始操作。操作后,您需要重新登录。

图 7-8:为 DVWA 创建数据库
现在您已经完成了 DVWA 的设置,我们可以进行一些 SQL 注入实验了。
列出用户
安装完成后,页面左侧应自动列出各种攻击。点击SQL 注入,进入一个包含用户 ID 字段和提交按钮的页面,如图 7-9 所示。

图 7-9:SQL 注入字段
为了开始注入,让我们尝试一个简单的操作。请输入1在字段中并按回车键。此时应弹出一个红色错误文本,显示以下内容:
ID: 1
First name: admin
Surname: admin
这个错误已经表明应用程序存在漏洞:它没有显示用户未找到或类似的消息,而是显示了 ID 为1的用户的名字和姓氏。让我们看看能否找到更多用户。输入以下内容到用户 ID 字段并按 ENTER 键:
**sparklekitten' or '1'='1**
让我们来分解这个输入。SQL 语言将每个查询评估为真或假。or 运算符会在其分隔的条件之一为真时显示记录。因为 sparklekitten 不会出现在用户 ID 字段中,这个条件将为假,但因为 1 永远等于 1,这个条件将为真。按照 SQL 的逻辑,这个输入实际上会返回数据库中所有的用户 ID 记录,因为 1=1 为真,而 or 运算符指的是任一条件;SQL 查询认为每个条目都符合查询要求,结果会返回每个用户名。输入这个内容后,你应该会看到如下输出:
ID: sparklekitten' or '1'='1
First name: admin
Surname: admin
ID: sparklekitten' or '1'='1
First name: Gordon
Surname: Brown
ID: sparklekitten' or '1'='1
First name: HackSurname: Me
ID: sparklekitten' or '1'='1
First name: Pablo
Surname: Picasso
ID: sparklekitten' or '1'='1
First name: Bob
Surname: Smith
如你所见,数据库中有五个用户。
查找数据库表名
现在你知道从用户 ID 输入字段运行 SQL 命令是有效的,你可以使用 SQL 查询来查找更多数据库信息。例如,找出数据库中所有表的名称。表就像 Excel 表格一样,它以列和行的形式存储数据。如果你找到了一个表的名称,你可以针对该表进行特定的查询。
要查找表名,请使用以下查询:
**sparklekitten' and 1=0 union select null, table_name from information_schema.tables #**
这个命令允许我们运行一个 SQL 查询,要求从 information_schema 表中选择两个结果:null 和 table_name。null 值不会返回任何内容。我们使用 null 是因为我们知道有两个字段(名字和姓氏),因此必须返回两个结果。真正的重点是表名;这个查询会找到 information_schema 表中的表名。在 SQL 数据库中,信息架构表保存了数据库中所有表的名称,因此我们实际上是要求数据库返回每个表的列表。我们应该会得到一个很长的表名列表,其中大多数是为运行 SQL 数据库而创建的标准表。在以下输出中,只有顶部的两个表名对我们很重要:guestbook 和 users。
ID: sparklekitten' and 1=0 union select null, table_name from information_schema.tables #
First name:
Surname: guestbook
ID: sparklekitten' and 1=0 union select null, table_name from information_schema.tables #
First name:
Surname: users
ID: sparklekitten' and 1=0 union select null, table_name from information_schema.tables #
First name:
Surname: ALL_PLUGINS
Output abridged
因为我们试图查找有关用户的信息,所以我们将重点关注这部分。现在我们知道了用户表的名称,我们可以查询它以获取更多信息。尝试以下查询,看看在继续练习之前是否能找到任何感兴趣的内容:
**sparklekitten' and 1=0 union select null, concat(table_name,0x0a,column_name) from information_schema.columns where table_name = 'users' #**
这行请求获取 users 表中所有列的名称。concat 命令要求从名为 users 的任何表中获取表名和列名。0x0a 语法表示换行,因此表名和列名会分开显示,便于阅读。
当你输入这个查询时,输出应该包含几行,显示表中的列名称。
查找密码
在本次练习中,有一列特别值得关注:
ID: %' and 1=0 union select null, concat(table_name,0x0a,column_name) from information_schema.columns where table_name = 'users' #
First name:
Surname: users
password
这个输出表明存在一个 password 列。这看起来很有希望!使用以下查询查看数据库在该字段中存储了什么:
%' and 1=0 union select null, concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) from users #
这个查询请求的是 first_name 列、last_name 列、user 列和 password 列,来自 users 表。输出应显示所有这些信息,给我们提供这个数据库管理员账户的密码。恭喜!你刚刚通过 SQL 注入获得了数据库访问权限。
这个场景设计得容易被利用,但在其他网站上执行 SQL 注入就没有这么简单了。不过,你现在应该能认识到,简单的编码错误可能会导致严重的安全漏洞。通过构造标准的 SQL 查询并学习数据库中表的名称,你发现了很多有用的信息,包括密码。一旦获得了密码,你很可能就能访问数据库。
DVWA 中还有许多其他的漏洞。我强烈建议你尝试使用它,并阅读它提供的关于各种攻击的资源。通过这样做,你将学到很多关于黑帽攻击者如何操作的知识。
结论
在涉及云服务时,记住的主要因素是,你正在使用一个在某种程度上由其他人或团体控制和拥有的服务。这使得安全性变得复杂,因为你可能没有太多控制权来确保服务的安全或维护。这也意味着,通常情况下,你必须通过互联网访问云服务。这使得云计算容易受到许多危险的攻击,例如缓冲区溢出或 SQL 注入等 Web 应用攻击。
为了维护系统的安全性,你需要在使用云服务之前进行调研,确保它注重安全并遵循最佳实践,比如本书中之前讨论过的那些。你还需要仔细监控云服务如何与你的系统集成,以验证黑帽攻击者是否利用云服务来访问你的内部系统。采取这些预防措施将大大有助于确保你可以安心使用云服务。
第八章:无线网络盗版

无线互联网给用户带来了一整套新的挑战,防止黑帽子攻击。显然,无线网络和第六章讨论的有线网络的主要区别在于它们是无线的。无线网络使用无线电波在设备之间传送数据,这意味着,就像菲尔·柯林斯(Phil Collins)1981 年的热门歌曲标题一样,它是在空中的今夜。
开玩笑的话,无线互联网更容易受到攻击,因为物理隔离——防御有线网络攻击的主要方式之一——不起作用。例如,通过锁定办公楼,可以潜在地阻止不受欢迎的人访问有线网络。但是这对无线网络无效,因为无线设备信号穿过这些障碍物,并且可以被外部的人捕捉到。
在本章中,您将学习无线网络的工作原理及其独特之处。在涵盖基础机制后,我们将讨论攻击者如何利用这些特性来利用无线网络并窃取它们发送的数据。然后,我们将探讨几种重要的防御措施,您可以使用这些措施来保护您的无线网络,无论是家庭环境还是办公环境。作为一个练习,您将学习如何保护典型的无线路由器。
无线网络如何工作
无线网络不使用电缆传输数据;相反,设备使用天线发送无线信号。这些天线可以是外部的,从设备上突出,就像外星人的耳朵,或者是内部的,就像您的笔记本电脑中可能的天线。现代无线设备具有多个天线以增加它们可以处理的信号量。
网络上的设备发送和接收信号与称为无线接入点(WAP)的中央设备的信号,通常是您的路由器或交换机。WAP 通过将信号传递给无线网络上的另一设备或将其发送到有线网络来管理设备之间的所有通信。
无线网络可以通过两种不同的方式设置。在基础设施模式中,WAP 充当路由器和交换机,为整个网络提供互联网的网关。尽管如此,也有一些类型的 WAP 没有路由或高级交换功能,仅仅会直接在无线和有线网络之间传递流量。
创建无线网络的另一种方式是使用 临时模式。在这种配置中,没有中央 WAP。相反,每个设备通过无线信号直接连接到另一个设备。由于设备之间是直接连接的,因此无需中央设备。每个设备将信息直接发送给其连接的设备。一个很好的临时网络示例是当你连接两个蓝牙设备时。蓝牙是一种旨在短距离内使用的无线通信形式,例如,当你将手机连接到车载系统播放音乐时。当你将蓝牙设备连接到手机或车载系统时,实际上是在创建一个临时无线网络。(这也是第二章中讨论的个人区域网络的一个例子。)
图 8-1 展示了每种类型无线网络的网络图示例。
设备可以通过使用 WAP 的唯一标识符——称为 服务集标识符(*SSID**)来查找并识别不同无线网络发出的信号。基本上,这就是无线网络的名称,当你将设备连接到网络时,它会显示出来,如 图 8-2 所示。WAP 通常会广播其 SSID,因此任何监听无线信号的设备都可以看到它们,尽管它们也可以隐藏其 SSID,这时你必须知道该标识符才能连接。

图 8-1:基础设施网络与临时网络设置的对比

图 8-2:无线网络的 SSID 示例
一旦选择了一个无线网络,设备就会使用一种叫做 关联 的过程与其连接。通常,像笔记本电脑或手机这样的设备一次只能与一个无线网络关联,但 WAP 可以同时与多个设备关联。然后,WAP 会管理发往每个设备的流量,确保每个设备都有机会使用信号,而不会互相干扰。
现代无线网络可以支持许多连接的设备。但当设备数量达到上限时,设备将开始体验到较慢的速度或失去与无线网络的连接。因此,在插入 WAP 之前,考虑如何使用网络非常重要。在一个小房子里,通常只需一个位于中心位置的接入点即可。在办公楼或较大区域内,您需要多个接入点来负载均衡网络,以避免任何单一设备过载。
然而,拥有多个接入点有时会导致问题,尤其是当设备无法在不同网络之间轻松连接时,因为它无法与新的接入点建立关联。为了解决这个问题,你可以创建一个网状网络。网状网络将多个 WAP 结合成一个大的无线网络,并使用一个单一的 SSID。这使得人们可以自由地在这些接入点之间移动设备,而不会丢失无线信号,只要设备仍然处于网状网络的范围内。
无线标准
无线技术成功的部分原因是创造了广泛采用的标准,确保设备之间的互操作性。此处的互操作性意味着一个无线设备可以轻松地与几乎任何其他无线设备通信,不论它们是由哪个公司制造的。这主要得益于 Wi-Fi 联盟的工作,Wi-Fi 联盟是一个推广无线标准的组织。基本上,如果一个无线设备遵循了特定的准则,它可以将自己称为Wi-Fi 启用设备。
公司遵循的主要标准被称为IEEE 802.11。电子电气工程师协会(IEEE)是一个制定标准的组织,而 802.11 只是一个分类该标准的编号。然而,这个数字现在已经成为无线技术的代名词。事实上,它已经变得如此普遍,你可能之前在家用或办公路由器上听到过或看到过它。
随着无线技术的发展,新的子标准应运而生,以管理新类型的无线网络。前两个主要的子标准是802.11a和802.11b,它们使用不同的无线电波长来发送信息。802.11a 标准使用 5 GHz 频段,而 802.11b 使用 2.4 GHz 频段。2.4 GHz 频段的信号覆盖范围更广,但速度较慢;而 5 GHz 频段速度更快,但覆盖范围较小。如今,这些差异大多已经不再重要,因为大多数现代无线设备同时支持这两种标准(稍后会详细介绍)。
后来的标准集成了新功能。802.11g在 802.11b 的基础上做出了改进,提供了更快、更强的信号。接下来是802.11n,它加入了一项名为多输入多输出(MIMO)的技术。MIMO 允许设备使用多个天线来增加无线设备一次性发送和接收的流量。这一特性大幅提高了无线接入点(WAP)的容量,使得同一网络上能够同时连接更多设备而不会导致网络减速或信号丢失。MIMO 还允许设备同时使用 2.4 GHz 和 5 GHz 信号。随后,802.11ac和802.11ax标准在 MIMO 和其他信号增强技术上做了改进,实现了极快的数据传输速度。发布于 2019 年的 802.11ax 仍在被逐步采用。表 8-1 列出了每个标准及其相关信息。
表 8-1:IEEE 802.11 标准
| 标准 | 信号类型 | 最大范围 | 速度 |
|---|---|---|---|
| 802.11a | 5 GHz | 120 m | 54 Mbps (兆比特/秒) |
| 802.11b | 2.4 GHz | 140 m | 11 Mbps |
| 802.11g | 2.4 GHz | 140 m | 54 Mbps |
| 802.11n | 2.4/5 GHz | 250 m | 600 Mbps |
| 802.11ac | 5 GHz | 120 m | 3466 Mbps (3.4 Gbps) |
| 802.11ax | 2.4/5/6 GHz | 120 m | 9608 Mb/s (9.6 Gbps) |
无线安全
IEEE 标准的另一个有趣之处在于它们将安全性作为功能的一部分。它们的设计者试图从一开始就防御一些明显的无线攻击,而不是事后做出反应。尽管绝非完美(正如你在“无线攻击”章节第 147 页所看到的那样),但这种对安全性的重视帮助创建了无线安全标准,这些标准在多次迭代中得以延续。
无线认证
无线网络的一大问题是很难确定谁在使用该网络。由于网络不受传统物理边界(如墙壁或门)的限制,它必须使用认证协议来确保只有正确的人才能访问它。另一个问题是,当你发送认证信息时,它会通过无线网络传输,而此时对手可能会截取它。因此,你还必须加密你的流量,以确保你的凭证保持秘密。
基本上,认证无线网络有两种方法。第一种是个人或PSK(预共享密钥)模式。这很可能是你熟悉的方法;当你想加入无线网络时,它要求你输入密码。如第五章所述,密码的强度取决于你设置的强度;因此,使用个人模式的弱密码将使黑客更容易突破你的无线网络。然而,这在家中使用是一种简单的方法,因为它不需要任何额外的设备或维护,除了你设置的 WAP。它也便于共享密码,让其他人加入你的无线网络。这就是为什么咖啡馆或其他公共场所的访客 Wi-Fi 网络使用个人模式的原因。
另一种用于无线网络认证的常见方法是企业模式,在该模式下,认证由认证数据库处理。WAP 将认证请求转发到数据库进行验证。数据库然后告诉 WAP 该设备是否被授权连接到无线网络。这些请求通过可扩展认证协议(EAP)发送,该协议会对其加密,使攻击者更难截取它们。EAP 还具有支持多种认证协议的额外优势,因此它能够与多种认证方法兼容。
使用企业模式(有时称为802.1X)的一个优势是,它提供了一种统一的身份验证方法,用于无线接入和接入 WAP 所连接的网络。因此,用户无需记住或输入多个凭证,只需进行一次身份验证即可访问他们所需的一切。另一个优势是,它提供了非常强大的身份验证方法,难以破解。缺点是,所有这些组件都需要大量的管理和成本。因此,在家庭或小型企业中,你不太可能看到使用企业模式。
无线加密
无线安全的另一个重要方面是确保通过网络发送的数据不会被黑帽子窃取。攻击者有可能捕获无线信号,窃取设备与 WAP 之间发送的任何数据。为了保护无线网络,WAP 会采用特殊的加密算法。
其中第一个是有线等效隐私(*WEP**),它作为原始 802.11 标准的一部分被引入,试图提供与当时有线网络相同级别的加密。然而,这个算法并没有达到其名称所承诺的效果。问题在于它的加密密钥不够长。正如你将在下一章学习到的那样,如果加密算法的密钥太短,攻击者可以轻松破解它。
了解到 WEP 在安全性方面存在问题后,Wi-Fi 联盟帮助创建了一种新的加密标准,称为Wi-Fi 保护访问(WPA**)。其目的是在开发更好的标准的同时,提供一种应急措施来缓解 WEP 存在的问题。WPA 使用了一种名为时序密钥完整性协议(TKIP)*的协议,来补充 WEP 加密的密钥大小,从而使其更难破解。然而,仍然存在密钥使用方式的缺陷,攻击者仍然可以破解加密。
最终,WPA 的另一个版本,恰如其分地命名为WPA2,达到了目标:它提供了与有线网络相当的加密安全性。WPA2 使用了一种完全新的加密算法,称为高级加密标准(AES;第九章将详细介绍),以提供强大的加密级别。WPA2 还包含了前面讨论的 802.1X 标准。这仍然是无线安全的主流标准。尽管不是完美无缺,正如你稍后会看到的,它提供了高水平的加密和认证,能够防止攻击者监听无线信号或未经许可加入无线网络。
需要注意的是,尽管所有现代 WAP 都支持 WPA2,但它们通常也支持遗留标准,如 WEP 和 WPA。因此,检查你的 WAP,确保它们没有使用存在重大缺陷的遗留标准,是至关重要的。
无线攻击
针对无线网络的最常见攻击是中间人攻击,像第二章中讨论的那样。这是因为无线网络本身让攻击者容易拦截 WAP 和连接到无线网络的设备之间的通信。
其他常见的攻击包括无线嗅探和拒绝服务(DoS)攻击。无线嗅探大部分可以通过使用强加密来缓解,但如果你使用像 WEP 这样的弱加密算法,它仍然是一个可行的攻击方式。拒绝服务(DoS)攻击也非常有效,因为通过干扰无线信号相对容易,有时甚至是无意的。
让我们通过一些具体的攻击示例来了解攻击者如何针对无线网络进行攻击,这样你就能了解黑帽攻击者是如何实现这些攻击的。
恶意接入点
攻击者制造中间人攻击的一种方式是模仿一个接入点,并诱使毫无防备的人连接到它。这种方式被称为恶意接入点,它允许攻击者看到任何受害者发送到假接入点的流量。由于无线网络不需要昂贵的设备,这种攻击特别容易实现。实际上,通常只需通过开源软件和计算机的无线网卡就可以完成。
一旦攻击者将其系统转变为恶意接入点,任何连接到它的人都会像连接到合法设备一样将流量发送给它。更糟糕的是,攻击者通常会创建一个与真实 WAP 的桥接,将流量传送到互联网,这使得受害者难以察觉问题,因为他们仍然能够顺利浏览网站。
另一种中间人攻击的形式叫做恶意双胞胎攻击。在这种变种中,攻击者复制一个合法无线网络的名称,诱使人们连接到它。为此,攻击者首先通过漫游驾驶(wardriving)技术,找到周围合法网络的名称,这是一种让他们的无线网卡接收到所有信号(即使是隐藏信号)的方法。这样,攻击者可以获得关于无线网络位置的信息。一旦确定了目标,攻击者就会将其设备转变为一个具有与目标相同 SSID 的恶意接入点。然后,他们等待某人连接到这个接入点,以为它是一个合法的接入点。图 8-3 展示了这种中间人攻击的示例。

图 8-3:恶意双胞胎攻击示例
欺骗用户认为虚假的接入点是可信的其实相当容易。因为许多地方提供客用 Wi-Fi,黑客只需将他们的网络伪装成某个客用网络,便能让人们连接上。特别是在一些人流密集的地方,比如机场,那里提供了很多客用网络选择。再加上各个终端的商店可能提供的网络,用户有很多选择。如此,攻击者便可以轻松地隐匿在众目睽睽之下(这也是为什么你绝对不应该使用机场的公共无线网络,我真的意思是绝对不要)。
恶意双胞胎攻击最糟糕的部分在于,许多设备会保存网络信息,以便以后连接。当它们接收到一个记得的 SSID 时,可能会自动连接到恶意双胞胎。实际上,当你告诉设备记住一个网络时,它会定期发送关联帧来寻找该 SSID。一旦它收到回应,它会连接到那个 WAP,无论它是否是真正的接入点。因此,检查你电脑连接的无线网络并确保它连接到正确的网络是非常重要的。
分离攻击
如前所述,将设备连接到 WAP 的过程叫做关联。为了与网络关联,设备必须通过一种叫做帧的数据块发送请求。当 WAP 收到这个关联请求帧时,它会开始与设备通信,以便建立与无线网络的连接。如果需要,还会进行身份验证。
在分离攻击中,黑客从网络中读取设备的 MAC 地址,复制该地址,并代表设备向 WAP 发送分离帧。分离帧的作用(你猜对了)是与关联帧相反;它会将设备与 WAP 断开连接。设备必须重新与接入点关联。攻击者可以反复执行此攻击,实际上阻断了受害者与 WAP 之间的通信。
分离攻击给攻击者带来几个好处。首先,它为受害者创造了一个 DoS 状态。其次,它给了攻击者一个机会,通过让受害者连接到一个恶意接入点,来实施中间人攻击。第三,它可以用来获取认证信息,从而破解用于保护网络的密码或加密密钥。许多针对无线加密的攻击开始时,会发送大量的关联帧或分离帧,以记录设备与 WAP 之间传输的加密数据。一旦攻击者收集到足够的加密数据,就可以更容易地通过系统进行暴力破解,找到 WAP 所使用的加密密钥。这也是为什么像 WEP 这样的弱密钥如此成问题的原因;破解这种密钥所需的加密通信较少,从而破解速度相对较快。
干扰
攻击无线网络的另一种方式是造成干扰,干扰信号,使得合法用户无法连接到网络。无线网络特别容易受到干扰,因为它们严重依赖于许多其他设备产生的无线电频率,如微波炉。因此,制造额外的噪音进行干扰非常容易,因为许多设备,如电话和无线键盘,通常已经接近 WAP。事实上,你甚至可能不小心制造出干扰条件。将设备放置在强电器旁边,如服务器和大型厨房电器,可能会减慢甚至完全阻断无线网络。
这对于 2.4 GHz 网络尤为适用,因为许多电子设备会产生该频段的信号。你甚至可以通过将一个 2.4 GHz 的 WAP 放得太靠近另一个 WAP 来干扰信号。2.4 GHz 频段被分为 12 个频道,除了 3 个频道外,其他的频道在某种程度上都会发生重叠,因此 1、6 和 11 成为唯一可用的频道。如果两个设备处于相同或重叠的频道,它们将相互干扰,导致用户无法有效地使用 WAP,甚至无法使用。
尽管 5 GHz 网络也会受到干扰,但该频段有 23 个非重叠的频道可用,使其更加抗干扰,不容易受到其他设备的影响。
以安全为前提设置无线网络
防止无线网络遭受攻击的最佳防御方法是从一开始就考虑安全地设置 WAP。当你小心地放置设备时,你可以消除黑帽攻击者首次攻击无线网络的机会。为了做到这一点,你需要一个有组织且有效的计划。一种方法是创建无线网络图,即你将布置无线网络的区域的地图。然后在地图上标注出 WAP 应放置的位置、无线网络应覆盖的范围以及你要创建的网络类型。
例如,你可能希望设置一个能够覆盖整座办公大楼的无线网络。通过使用无线网络图,你可以大致了解每个 WAP 的信号覆盖范围,以及需要多少个 WAP 才能覆盖整栋大楼。你还可以将接入点放置在特定的位置,使得信号仅在用户位于大楼内时可用。这将使得攻击者更加难以攻击网络;他们现在需要绕过物理障碍,例如上锁的门,才能发起无线攻击。
无线网络图也非常适合确保你不会将 WAP 放置在可能会导致干扰的设备附近。图 8-4 展示了一个无线网络图的示例。

图 8-4:网络示例图
使用无线网络图,您可以设置您的 WAP,并确保它们配置正确。验证它们是否使用 WPA2 进行加密,并且使用 802.1X 认证或强密码。同时,确保它们在您的内部网络中是独立分段的子网络。这样,任何从无线子网络到主内部网络的流量都必须经过额外的访问控制,才能允许通过,这与 DMZ 的工作方式类似。
在您设置好网络并验证配置之后,您需要定期在无线网络覆盖的区域内移动,并进行“路由驱动”以查找任何恶意接入点或 Evil Twin 攻击。这被称为站点调查。通过嗅探您自己的无线网络,您不仅能看到是否有攻击者试图伪造您的网络,还能发现对手可能用来访问您网络的隐藏 SSID。在一个著名的例子中,一名伪装成清洁工的攻击者正在更换带有小型无线发射器和键盘记录木马的相同型号键盘。这名黑帽通过无线发射器窃取了键盘记录的数据。尽管这是一个极端的案例,但它是攻击者可能悄悄将无线设备带入您内部网络并随后用来进行访问的完美示例。
需要记住的一个关键细节是,无线网络可能比有线网络需要更多的安全性,因为无线信号更容易被接收。这并不意味着您不能使用无线网络;您只需要在使用时更加谨慎。尽可能避免在无线网络上发送敏感数据而不先加密。这样,即使无线网络的加密被破解,您的数据仍然会保持加密状态。
通常,您还应避免使用公共无线网络,如咖啡馆和机场提供的网络。您无法知道谁可能在监听,因此最好完全避免使用这些网络。此外,始终确保您的无线网络至少使用 WPA2 或更高版本的加密。WPA 和 WEP 太容易被破解,不值得信赖作为安全协议。牢记这些提示,您可以避开黑帽嗅探器,享受无线访问的自由。
练习:保护您的 WAP
在这个练习中,您将学习如何启用 WAP 的各种安全设置。虽然某些配置细节会根据您拥有的 WAP 型号有所不同,但为了演示,我们将重点介绍功能的工作原理,而不是某个特定型号的机制。这种方法应该能让您了解在 WAP 设置中要查找的关键字,以及某些工具的工作方式。我们从设置一个接入点开始。
设置您的接入点
许多接入点在最初设置时都包括一个设置向导。要访问这个向导,你必须先打开接入点并等待它完全启动。然后,你应该会看到 WAP 上的指示灯,表明无线连接正在运行。
大多数无线接入点在首次启动时会创建一个默认的无线网络。通常,你可以在接入点的背面或设备文档中找到该无线网络的名称。找到网络后,你可以连接到它,无论是作为开放的接入点,还是使用给定的凭证(通常印在设备上)。如果找不到设备的默认网络,你可能需要通过以太网线直接连接设备。
一旦你连接到默认无线网络或设备,你需要访问设置向导。这通常需要知道设备启动时分配的默认 IP 地址。同样,你通常可以在 WAP 或其文档中找到这个地址。默认常见的 IP 地址是 192.168.1.1,但也有不同的变种。找到 IP 地址后,输入到浏览器中并按下 ENTER 键,浏览器应该会连接到设备,展示向导界面或管理菜单以开始设置过程。
例如,图 8-5 展示了 ASUS 无线路由器使用的向导主页。

图 8-5:无线接入点设置向导
向导应该会提示你输入密码。确保为管理员账户设置一个强密码,该账户允许你登录并更改路由器的设置。许多路由器提供管理员账户的默认密码,尤其是由 ISP 提供的路由器。你应该始终更改这个默认密码,以防他人利用该密码访问设置。即使密码是该路由器独有的,仍然有可能被他人发现,因为它们通常印在路由器上。
接下来,输入一个 SSID 或无线网络名称。有时,路由器在第一次启动时会使用默认名称。但如果你为它取一个独特的名字,它将在其他名称列表中容易被识别,尤其是当你住在有多个网络的地方,比如公寓楼。为你的网络命名也是给它增添个性的好方法;例如,我的网络名称是 Cat Party USA。
设置完 SSID 后,你可以确保正确配置了 WAP 的安全功能。
设置无线安全性
你要检查的第一个安全设置是路由器的无线加密标准。许多路由器会自动使用 WPA2,并可能在设备的初始设置中启用它。然而,最好检查使用的标准,并确保它正确设置,以确保获得最佳的加密保护。
要执行此操作,你需要找到路由器的安全设置。通常,它们会列在无线网络配置菜单或单独的安全配置菜单中。图 8-6 展示了 ASUS 路由器的此菜单示例。

图 8-6:无线加密选项
你将看到几种选项,通常对于家庭网络,最好的选项是 WPA2-个人。它允许你设置一个预共享密钥,这基本上是你用来加入网络的密码。记得遵循严格的密码最佳实践,如第五章所讨论的那样。由于其他人也可以访问登录菜单,确保密码足够强大,以抵御暴力破解攻击或其他密码破解技术。
你还可以选择与你的网络一起使用的加密标准。我们将在下一章中更详细地讨论加密;目前,最好的选择是AES,它是目前最有效的标准,提供极其强大的加密保护。
接下来,我们来看一下其他一些需要配置的安全功能。第一个是Wi-Fi 保护设置(WPS)。此功能允许你在不输入长密码或进行其他复杂安全设置的情况下访问 WAP。其原理是,通过使用 PIN 码或按下位于 WAP 上的物理按钮来登录网络。然而,WPS 存在缺陷,可能通过暴力破解 PIN 码来访问网络。通常情况下,应该禁用此功能。你通常可以在无线网络设置中找到 WPS 的配置选项。图 8-7 展示了此设置的示例。

图 8-7:WPS 设置
你还应该检查 WAP 的远程访问设置。可能有人能够在没有连接到网络的情况下通过互联网访问 WAP 的管理界面。这很危险,因为这可能导致对手在不需要物理接近设备的情况下获得设备访问权限。检查你的设置,确保没有人能够从 WAN(即互联网)访问 WAP。图 8-8 展示了远程访问设置的示例。

图 8-8:ASUS WAP 的远程访问设置
另一个需要检查的远程设置是如何保护与接入点设置的连接。避免使用 Telnet 或 HTTP,因为它们都不提供加密,这意味着对手在你修改路由器设置时,可以看到你所做的操作。相反,使用 SSH 或 HTTPS。SSH 需要更多的设置,因为你必须为设备创建一个特殊的加密密钥;最简单的选项是使用 HTTPS。这将确保当你使用 web 浏览器访问管理设置时,连接到 WAP 是安全的。
启用过滤
过滤允许你根据选择的参数有选择地接受连接,然后阻止所有其他设备或流量。根据你的路由器型号,你可能有几种过滤选项。让我们看看一些常见的选项。
一种选项,端口过滤,允许你根据与流量关联的端口号进行过滤。使用端口过滤是限制网络允许哪些协议的好方法。例如,你可能会阻止端口 21,因为它与 FTP 相关,FTP 是一种不加密的文件传输方式。你也可能想阻止端口 23,它是 Telnet 使用的端口;Telnet 也是一种不安全的远程访问协议。
无论你想阻止什么,都要小心。与所有过滤一样,阻止一个端口可能会导致意想不到的后果。例如,你可能会不小心阻止一个正在使用的应用程序。图 8-9 展示了端口过滤设置的示例。在这个示例中,WAP 允许你设置在某些时间段阻止端口,并显示你是在指定白名单还是黑名单。

图 8-9:ASUS 路由器的端口过滤设置
另一种过滤方式,URL 过滤,允许你阻止某些 URL,甚至是 URL 中使用的短语,让它们不能被 WAP 解析。基本上,当有人试图通过 WAP 访问这些 URL 时,WAP 会识别网站地址并阻止它。这是创建家长控制或限制无线网络上不良内容访问的好方法。然而,URL 过滤要求你非常具体,它有时会错误地过滤合法网站。与端口过滤一样,最好进行测试,以确保其正常工作。
另一种常见的 WAP 过滤选项是MAC 地址过滤。如第六章所述,交换机使用 MAC 地址来决定应该将流量发送到 LAN 的哪个位置。MAC 过滤允许你通过设备来过滤对无线网络的访问,可以使用黑名单或白名单。通常,白名单更为有效,因为你更可能知道你想要接入网络的设备的 MAC 地址,而不是那些你不想接入的设备的 MAC 地址。如果一个设备尝试连接到无线网络但不在白名单上,WAP 会拒绝它的连接。
尽管 MAC 过滤是限制谁可以访问网络的一个优秀方法,但它并不是阻止黑客的最佳方式。因为 MAC 地址是以未加密的形式发送的,攻击者可以轻松嗅探无线网络并收集允许连接的设备的 MAC 地址。一旦他们获得了白名单上的地址,他们就能轻松伪造地址以获得访问权限。通常来说,只要 MAC 地址在列表中,MAC 过滤器不会在意两个设备是否有相同的 MAC 地址。这正是为什么给网络增加多层保护很重要的一个例子:尽管 MAC 过滤可能单独不够有效,但它能增强设备的整体安全性。
图 8-10 展示了一个 MAC 过滤设置的示例。

图 8-10:ASUS 路由器上的 MAC 过滤设置
设置好这些配置后,你的 WAP 将会是安全的,并能够防止攻击者以及合法用户的不当行为。尽管配置这些设置可能看起来需要很多工作,但安全总比后悔好。你不必使用每一个提到的功能来保护你的网络,但安全层次越多,恶意攻击发生的可能性就越小。
结论
无线网络带来了独特的安全挑战。虽然方便,但网络覆盖广泛的能力使其容易被攻击者接入。攻击者还可能诱使用户连接到他们控制的无线网络。这就是为什么只使用你信任的无线网络,并避免使用公共无线网络非常重要。对于你自己的无线网络,使用加密(如 WPA2)和认证(如 802.1X)可以帮助防止攻击者破坏网络,让你在使用互联网时对网络的安全性更有信心。
第九章:加密破解

想象一下,如果你所有的互联网电子邮件、消息和购买记录都能被任何人查看。一位黑帽黑客只需要观察你的网络流量,就能知道你想要的任何信息,盗取你的文件,甚至捕获你的密码。网络安全中最重要的部分之一就是密码学,即隐藏数据的过程,使得只有授权的人才能看到它。
在本章中,你将了解加密是如何工作的,攻击者如何尝试破解它,以及你如何加强加密来保护个人信息免受窥探。
什么是密码学?
密码学是编写代码的研究与艺术。当人们想要隐藏数据时,他们通常通过编写代码或过程(称为密码)来掩盖信息。在现代计算机系统中,我们使用密码算法来隐藏数据,这些算法是执行复杂数学运算以安全地转换信息的过程。
密码和算法以各种方式工作,但它们都使用密钥来执行功能。一个密钥是一个独特的信息,通常保持秘密。通过使用这个密钥,用户可以将明文(即未加密的数据)转化为密文(即加密后的数据)。加密过程类似于在门上安装锁。当门未上锁时,任何人都可以访问门的另一侧。像密码学一样,锁限制了只有持有钥匙的人才能访问。每个门都有一个独特的锁和钥匙,用来保护门的另一侧的安全。使用密钥对数据进行编码的过程称为加密。你可以把它想象成给门上锁。反向加密过程,相当于解锁门,称为解密。
我们加密的内容
我们在许多类型的文件和过程上使用加密。基本上,存储在计算机上的任何内容都可以以某种形式加密。然而,所使用的加密类型可能会根据数据的状态而变化。所有数据都被组织为三类之一:静态数据、传输中的数据和使用中的数据。静态数据包括计算机不在主动处理的任何文件;例如,音乐、文档或数据库中的信息。传输中的数据是指在两个系统之间传输的任何数据,包括数据包(如第六章所讨论)、电子邮件或正在通过网络发送的文件。使用中的数据是指计算机系统当前正在使用的数据。此类数据不能加密,因为计算机必须能够读取它以进行使用。
当数据在不同状态之间传输时,加密类型会发生变化。例如,假设你在电脑上安装了一个游戏。如果你没有在玩这个游戏,你可以使用文件加密将其加密,并将其存储在硬盘或其他存储介质上。但一旦你打开游戏,它就变成了“使用中的数据”,计算机必须对其进行解密才能正常运行。现在假设你通过互联网将游戏发送给一个朋友。这时,游戏变成了“传输中的数据”,必须使用传输加密。
不同的加密选项有助于区分用于加密特定类型数据的方法。每种加密选项都有其优缺点,我们将在《现代密码学》第 160 页中更详细地讨论这一点。现在,请记住,单单因为你使用了一种加密方式,例如文件加密,并不意味着你的数据在其他状态下(例如使用中或传输中)也一定是安全的。
早期密码学
加密消息的做法与书写本身一样古老。军事部门早期使用密码学技术来传输消息,确保如果消息落入敌人之手,他们无法得知自己的计划。
早期的密码学也相当临时。人们没有加密消息的固定标准,因此通常是根据具体情况发明策略。有时,缺乏标准在将消息传递给陌生人时会带来问题,比如传递给其他王国的国王或将军,因为他们不知道加密方法。事实上,一些历史文献至今未能被解读,因为专家认为它们是用早已失传的密码写成的。
缺乏标准突显了密码学中的一个主要问题:如何创建一个在隐藏信息的同时,仍能在两人之间共享解密密钥的系统?换句话说,这是平衡机密性和可用性的 CIA 三原则元素的问题。如果加密系统过于复杂,可能会导致难以有效使用。例如,如果我加密一条消息,使得只有在某个王国的最高峰在满月时,并且在倒着说精灵语的魔法词语时才能解密,那我很可能会阻止敌人阅读这条消息。但如果我想和其他巫师分享我的工作,他们也会很难阅读它。然而,如果我创建一个使用关键字解密的密码,并将这个关键字写在消息的顶部,那么加密就变得毫无意义,因为任何收到消息的人都会知道这个关键字。
平衡可用性和机密性的考虑始终是密码学中的一个难题。为了解决这个问题,密码学家开始依赖两种加密方法:代换和置换。
代换密码
要创建一个替代密码,你需要用一个符号替换另一个符号。例如,考虑虚构的超级棒替代密码,在这种密码中,你用数字替换消息中的每个字母。要使用超级棒替代密码,你只需要知道其中一个替代规则,这可以作为密钥。这个密钥可能是字母 A 等于 10。一旦你知道了密钥,就可以继续计数,将每个后续字母与下一个数字配对:B变成11,C变成12,依此类推,直到Z变成36。使用这个密码和密钥,消息attack now就变成了10, 29, 29, 10, 12, 20, 23, 24, 32。
这种替代密码在实际应用中并不安全,因为它很容易通过试错法破解。然而,在历史上,许多有效的密码都使用了替代法。最著名的是凯撒密码,它由尤利乌斯·凯撒发明。它依赖于使用两个字母表副本。作者将这两个字母表一上一下对齐,使它们相匹配:上面的字母表中的字母A与下面字母表中的字母A对齐。然后,作者将下面的字母表向左或向右移动几个位置,并使用移动后的字母表来加密他们的信息。移动的空间数就是密钥。例如,要用密钥 3 加密字母A,你会将它写成字母D。虽然它仍然容易破解,但这是第一个创建标准替代算法的密码,并成为未来替代密码的基础。
换位密码
替代密码将消息替换为完全新的符号,而换位密码使用相同的符号,但将它们以不同的顺序排列以隐藏其含义。这个过程类似于你在报纸或在线上看到的字谜。当经过换位密码处理后,消息attack now可能变成kcnwta toa,例如。
为了使换位密码成为一种有效的加密形式,而不仅仅是一个有趣的脑筋急转弯,你必须以有序的方式打乱字母。有几种方法可以实现这一点,但其中一种最古老的方法是Scytale法。Scytale 法起源于希腊,原始的 Scytale 方法使用一块布,将其缠绕在一根特定厚度和长度的棒上。作者在布上写下信息,当他们将布解开时,信息沿着布的长度自然被打乱。解密消息的人必须将布缠绕在相同类型的棒上。为了进一步隐藏消息,人们有时将这些布作为腰带佩戴。
现代密码学
在 1800 年代,政府开始采用更系统化的密码学方法。这包括制造机器来处理加密/解密过程,这种加密方法最典型的例子就是德国的恩尼格玛机。恩尼格玛机在第二次世界大战期间使用,采用了三组旋转盘来加密和解密通过无线电发送的消息。从理论上讲,这种密码太复杂,如果没有恩尼格玛机来进行工作,就无法破解,因为该机器使用三片独特的磁盘生成了大量的符号组合。
但该密码并非无法破解。密码学的普遍缺陷是:任何密码都有可能被破解,只要有足够的时间,即使破解每一个可能的密钥组合需要一亿年。一个密码的真正价值在于它的工作量,也就是说,破解它所需的时间足够长,以至于消息在破解之前就不再相关。到第二次世界大战结束时,密码分析,即破解密码的研究,已经发展到如此先进的程度,以至于研究人员能够在短时间内破解依赖机械过程的任何密码,例如恩尼格玛机所使用的密码。这大大降低了这些密码的工作量,基本上使它们变得毫无价值。
计算机的出现进一步减少了工作量,但也创造了新的加密方式。计算机使得执行高级数学运算变得非常迅速。因此,人们能够在几分钟内解决那些通常需要几天或几周才能完成的问题。从 1950 年代开始,现代密码学家开始研究新的加密方法,这些方法使用极其复杂的数学问题来计算生成密文所需的数字。例如,利用椭圆曲线图上的两个特定点,配对后可以创建一组密钥来加密和解密密文。即使你知道其中一个点,使用高端计算机也需要许多年才能搜索出所有可能的配对以找到正确的那一对。
最终,加密学家创造了三种主要的加密方法:对称、非对称和哈希。这三种方法成为了现代密码学的基础,是当今大多数加密技术的构建基石。
对称密码学
对称密码学,也称为单一或私钥密码学,使用一个密钥来加密和解密明文(图 9-1)。

图 9-1:使用私钥加密
对称密钥算法使用复杂的函数将明文转化为密文,但其核心仍然使用替换和换位技术。它们不是交换或移动字母,而是移动表示这些字母的计算机中的 1 和 0。它们比传统的换位和替换技术要强大得多,因为与人类手动操作数据不同,计算机可以在短时间内执行数百次甚至数千次变换。计算机还可以在运行算法时改变它们执行替换或换位的方式。然而,这可能会有一定难度,原因有二:系统需要对 1 和 0 进行打乱,以确保它们无法再次被读取,同时也要确保在提供正确密钥的情况下,过程能够被逆转。
为了简化这些过程,对称密钥算法使用两种类型的密码模式:流式和块式。在流密码模式下,计算机一次加密一个比特的数据。这个模式产生的是一些最快的加密,但通常被认为比块模式弱,因为它在生成的密文中产生的随机性较少;换句话说,它会产生一些模式,这些模式可能使破解算法变得更容易,特别是当密钥过短或者同一密钥频繁使用时。
块密码对固定长度的比特块进行加密。与使用流密码相比,这种技术较慢但更强大。它不是逐个比特加密,而是将比特组织成块。例如,从正在加密的数据中取出一个 4×4 大小的比特块,并从密钥中取出一个相同大小的比特块。然后,算法一次性加密整个比特块,生成一个加密的 4×4 大小的比特块。
由于块的大小相同,算法可以将之前加密过的块与密钥结合,生成一个新的、唯一的输入,用来加密下一个块。因此,不仅密钥帮助创建独特的加密方式,而且被加密的内容也有助于增加最终密文的唯一性,使得破解变得极为困难。
就像用钥匙锁住一扇门一样,对称算法在加密文件时速度较快,这使得它们在大批量加密中非常高效,例如加密硬盘上的多个文件或整个数据库。但这种速度也有一个代价。如果两个人试图使用对称算法进行通信,他们必须找到一种方法来传输密钥而不暴露它。这需要找到一种不同于发送密文所用的传输方式,因为如果有人截获了密文,他们也会同时截获密钥。所需的传输方式被称为带外传输,在许多情况下,这可能会非常棘手。
有许多对称加密算法可用,但其中有两个特别著名。一个是数据加密标准(DES),这是最早的现代加密标准之一,在政府、军事和公共系统中被广泛使用。该算法实现了一个 56 位密钥的分组加密算法。尽管在 DES 被发明时,56 位密钥能够提供有效的工作因子,但由于计算机处理能力的提升,从 2000 年代初开始,破解一个 DES 密钥只需不到 24 小时。密钥位数越多,计算机需要遍历的组合就越多。随着处理器的速度越来越快,计算机能够更快地计算出所有可能的组合。56 位密钥的组合数不足以防止现代处理器快速猜测出密钥。
为了延长 DES 的生命周期,密码学家发明了一种新的使用该算法的方法,叫做3DES(发音为“三重 DES”),顾名思义,它使用了三个 DES 密钥,而不是仅使用一个。然而,这种方法在加密执行的方式上存在缺陷。黑客可以利用这个缺陷,几乎和破解 DES 一样快速地破译 3DES。
由于 DES 已经接近其生命周期的末期,人们需要一种新的算法来替代它。许多密码学家尝试开发替代算法,最终他们选择了 Rijndael 算法。今天,我们通常将该算法的实现称为高级加密标准(AES)。AES 通常使用 128 位密钥,尽管在需要时密钥长度可以达到 256 位。AES 使用的是分组加密方法。尽管该算法于 2001 年首次实施,但它至今仍在广泛使用,并且具有出色的工作因子。即使是当前的超级计算机,也需要数十亿年才能暴力破解一个 AES 密钥——这比宇宙的年龄还要长。
非对称加密
尽管对称加密适用于大多数加密需求,如保护文件或在两台设备之间建立安全连接,但无法轻易在两方之间共享密钥,这使得它在互联网上的有效通信中存在问题。这就是非对称加密,也称为公钥加密,发挥作用的地方。
在非对称加密中,算法为每一方使用两把密钥:公钥和私钥。这两把密钥是相互关联的,因此公钥加密的任何内容只有私钥才能解密,反之亦然。没有任何一把密钥能够加密并解密相同的密文。这个系统之所以有用,是因为任何用公钥加密的数据只能用私钥解密,因此你可以将公钥和要加密的数据一起在同一消息中共享(图 9-2)。

图 9-2:使用公钥/私钥对进行加密
正因如此,非对称加密使得两个人之间的通信加密变得容易,特别是当他们互不相识时。例如,假设艾丽丝想通过电子邮件向鲍勃发送一份私人文档。在她加密文档之前,她需要确保鲍勃在文档到达他的收件箱后能够解密它。如果她使用的是对称密钥,她就无法将密钥与电子邮件一起发送,因为任何可能监听流量的人都能看到文档和密钥。她可以将对称密钥放在一个 U 盘上,并通过邮寄的方式发送给鲍勃,但这需要时间和精力。与其使用对称密钥,艾丽丝可以让鲍勃将他的公钥发给她。鲍勃可以通过任何方便的方式通过互联网发送这个公钥,因为它不需要保密。然后,艾丽丝可以使用鲍勃的公钥加密文档,并通过电子邮件将文档发送回去。如果有对手拦截了电子邮件,他们也无法解密,因为只有鲍勃的私钥可以解密它。如果他的私钥保密,谁拥有他的公钥都无关紧要。
公钥加密对于证明某人就是他们所说的那个人,并防止他们否认自己发送了某个信息,也非常有益,这个概念叫做不可否认性。假设鲍勃审阅了文档,表示文档看起来不错,然后将其发回给艾丽丝。艾丽丝想要确认是鲍勃而不是某个冒充鲍勃的人发送了文档。为了使用非对称加密做到这一点,鲍勃可以用他的私钥加密文档的哈希值,并将其发送给艾丽丝(我们将在第 166 页的《哈希》一章中讨论哈希)。只有鲍勃的公钥可以解密该文件。如果解密成功,艾丽丝就知道是鲍勃发送的,因为他是唯一拥有私钥的人。此外,鲍勃以后不能否认自己没有发送文档,因为密钥对是唯一的,属于他自己。除非鲍勃的私钥被泄露,否则没有其他人能够使用它来加密信息。
很像对称加密,许多不同的算法也使用非对称密钥。然而,这些算法不使用分组密码或流密码。相反,它们依赖于极其复杂的数学问题来生成密钥对。例如,其中一个最早的非对称算法通过计算离散对数来实现。另一个则使用大素数的因数分解。尽管这些数学问题的细节超出了本书的范围,但密钥是解决问题所需的数字。这些问题非常复杂,以至于没有这些数字,计算机需要花费很长时间才能计算出解决问题所需的值。这就是算法的工作量因素。
长时间以来,非对称加密的事实标准是一个叫做 Rivest–Shamir–Adleman (RSA) 的算法。RSA 以其发明者命名,从 2000 年到 2013 年,它是互联网上最广泛使用的公钥加密算法。其主要的密钥长度是 1024 位,这比对称加密所使用的密钥要大得多。近年来,RSA 逐渐失宠,因为 2013 年证明美国政府可以使用超级计算机破解 1024 位的 RSA 密钥。从那时起,大多数系统使用 2048 位密钥,这要复杂得多,或者使用其他算法。
RSA 的一个更受欢迎的替代品是 椭圆曲线加密(ECC)。尽管非对称加密比对称加密慢得多,且生成的文件要大得多,但 ECC 是最迅速的非对称算法之一。它可以比 RSA 快 10 倍加密文件。ECC 还不需要消耗大量的处理器能力。它的典型密钥长度是 160 位,但也可以使用 256 位密钥。因此,我们可以在内存有限的设备上实现 ECC,例如物联网设备。
验证公钥
在阅读有关公钥加密的内容后,你可能会想知道爱丽丝最初是如何获得鲍勃的公钥的。这比你最初想象的要复杂,因为虽然接收公钥的人不重要,但你必须确保你使用的是正确的公钥来发送消息。特别是在互联网上交流时,这一点尤为重要,因为你根本无法确定接收方是否就是你认为的那个人。他们可能是一个黑帽黑客,伪装成别人。验证公钥的两种主要方法是 信任网 和 证书授权机构。
信任网
信任网是一个由受信任的个体组成的网络,每个人都为他们在网络中所连接的人担保。例如,爱丽丝在现实生活中认识鲍勃并信任他,因此她在自己和鲍勃之间建立了一个受信任的链接,她的系统接受鲍勃的公钥。鲍勃不仅信任爱丽丝,还信任查理。因此,爱丽丝也信任查理,因为她对鲍勃的信任转移到鲍勃信任的每个人(这也包括网络中的丹妮尔、埃里克和弗兰基)。
尽管信任网络对于那些不希望使用集中管理的信任系统的小型组织来说效果很好,但它在互联网中并不适用。随着数十亿人使用互联网,几乎不可能确保信任网络中的每个人都是可信的。对手很容易利用信任网络来欺骗他人,诱使他们发送敏感信息。因此,只有少数应用程序使用信任网络系统。其中一个最著名的应用叫做Pretty Good Privacy(PGP)。PGP 是一种主要用于加密电子邮件的加密系统。它作为一种替代方案应运而生,目的是避免集中式信任解决方案可能会受到政府或私人组织的破坏或监听。
证书颁发机构
验证公钥是否真实有效的更流行的方式是使用数字证书。类似于高中或大学文凭,数字证书是一种文档,验证你收到的公钥确实来自发送它的人。为了维护和管理数字证书,个人需要使用证书颁发机构(CA),这是一家为个人或组织创建、管理和验证证书的第三方机构。本质上,它告诉你是否可以信任一个公钥。
证书颁发机构提供几种不同的服务。其中一项是它们为个人或组织创建证书。例如,当一个组织(比如 Sparkle Kitten Inc.)希望在其网站上使用公钥加密时,它会选择一个证书颁发机构来为该公司提供证书。该证书颁发机构随后验证 Sparkle Kitten Inc.是一个合法公司,并且请求证书的人确实代表 Sparkle Kitten Inc. 一旦完成验证并收取费用,证书颁发机构会创建数字证书并提供副本给公司。证书颁发机构还会创建与证书一起使用的公钥/私钥对。通常,这些证书的有效期为一年,到期后,任何持有证书的人都会收到警告。在访问网站时,要注意过期的证书。即使网站所有者可能只是忘记续期证书,黑客也可以利用过期的证书来欺骗你连接到不安全的网站。
证书授权机构(CA)提供的另一个服务是密钥管理和恢复。假设 Sparkle Kitten Inc.使用对称密钥加密了整个数据库,然后使用其 CA 颁发的公钥对该对称密钥进行加密(这是一种常见的通过互联网共享对称密钥的做法)。私钥将是唯一可以访问对称密钥并解密数据库的方法。现在,假设公司的一只常驻猫把存储私钥的系统从窗户上撞了出去,摧毁了硬盘,导致无法从中恢复任何数据。没有密钥,数据库中加密的数据将永远丢失。幸运的是,CA 可以将它们创建的公钥/私钥对保存在高度安全的保险库中,以备不时之需,如果它们提供此服务,并且你为此支付了额外费用。一旦 Sparkle Kitten Inc.提供所需的认证材料,证明它合法拥有密钥,CA 就会将私钥释放回公司,使其能够恢复数据库。
此外,CA 还提供了一个高度管理的所有公开证书的存储库,供它们管理的所有证书公开使用。这使得互联网上的任何人都可以验证发送给他们的公钥是否来自正确的人。例如,当客户访问 Sparkle Kitten Inc.的网站时,他们将收到一个数字证书和一个公钥,用于保护连接。然后,客户的浏览器将联系颁发证书的 CA,以验证该证书是否来自该特定 CA。如果 CA 验证它是真实的,浏览器就可以信任发送给它的公钥。CA 还会维护不良证书的列表,并定期更新这些列表,以防止对手使用被破坏或过时的证书。
哈希
密码学中最广泛使用的一种形式是哈希,它是一种单向加密函数,给定相同的输入总是提供相同的加密输出。一旦数据使用哈希算法进行加密,它就无法再被解密。例如,如果我将单词CAT输入哈希算法,输出可能是x5d7nt2k。每次将单词 CAT 输入该算法时,输出结果都会相同。但如果我改变一个字母,比如将单词改为PAT,整个密文将变成完全不同的输出;例如,l3loi2jd。即使只改变字母的大小写,比如将大写的C改为小写的c,密文也会发生实质性的变化。这种现象被称为瀑布效应,它是哈希算法的主要目的之一;也就是说,确保即使是最微小的变化也会产生完全不同的密文。
起初,可能难以理解为什么我们需要一个始终生成相同输出且无法反向操作的算法。哈希算法的一个有用之处在于,它提供了一种验证信息真实性的方法,而不会泄露信息。例如,我们使用哈希算法来验证密码。与其以明文存储密码(这是一种极不安全的做法,容易被攻击者窃取),应用程序通常会将密码经过哈希算法处理后再存储哈希值。当用户想要登录他们的账户时,输入的密码会通过相同类型的哈希算法处理。应用程序并非以明文形式发送密码,而是发送哈希值通过网络传输。当哈希值到达系统后,系统将其与存储在数据库中的哈希值进行比较。由于哈希算法的输出在输入相同时永远不会改变,系统如果匹配的哈希值相同,则知道用户输入了正确的密码。此外,这意味着用户是唯一知道密码明文值的人。
我们还使用哈希算法来验证文件。我可以通过哈希算法运行文件(如软件)以获得哈希值,然后将该哈希值分发给公众。当有人下载我的软件时,他们可以将其通过相同的哈希算法运行,并将其与我提供的哈希值进行比较。如果两者相同,他们就知道这是原始软件,并且未被其他人修改,例如添加恶意代码如病毒。
许多哈希算法可供公众使用。首个获得广泛认可的算法是消息摘要 5(MD5)。MD5 的 摘要大小 是 128 位,这意味着其输出始终为 128 位,无论输入数据量大小如何。尽管这看起来是很多位,但并不足以防止攻击者破解哈希值(有关此主题的更多信息,请参阅第 171 页上的“黑客如何破解哈希值”)。由于 MD5 的缺陷,安全专家将其替换为安全哈希算法 1(SHA-1)。SHA-1 的摘要大小为 160 位,虽然比 MD5 好,但仍然不足以抵御现代黑客技术的攻击。目前,我们使用的是 SHA-2 或 SHA-3 算法。两者的摘要大小通常为 256 或 512 位。
还需注意的是,通常用户无需做任何事情即可使用哈希算法。哈希过程是计算机与应用程序或服务器之间正常通信的一部分。事实上,您的计算机甚至不会选择使用哪种算法;相反,连接的服务决定应该使用哪种算法。
访问网站时发生了什么?
现在你已经了解了不同类型的现代加密技术,让我们回顾一下我们所知道的通过互联网传输的加密流量。假设你想访问一个安全的网站,例如 sparklekitten.net。首先,Sparkle Kitten 的 Web 服务器会向你发送一个数字证书。该证书包含三项重要信息:该 Web 服务器的公钥、它将接受的对称密钥算法类型以及创建该证书的证书颁发机构(CA)。然后,你的系统通过联系 CA 来验证证书的合法性(或检查证书是否由已经信任的 CA 签名,例如一个受信的根证书机构)。
如果 CA 验证了证书,你的系统就会使用 Web 服务器指定的算法生成对称密钥。由于公钥加密速度较慢,必须使用对称密钥来高效地将数据发送到 sparklekitten.net。然而,为了保证安全,sparklekitten.net 不能直接将对称密钥发送给你,因为任何拦截 Web 服务器流量的黑帽黑客都可能捕获并破解加密。相反,你会生成一个对称密钥,并使用 sparklekitten.net 的公钥加密它。现在,只有 sparklekitten.net 的私钥能够解密该对称密钥。你还会将你刚刚发送给 sparklekitten.net 的所有数据的哈希值发送过去,用作完整性检查。
一旦 sparklekitten.net 的 Web 服务器接收到加密的对称密钥,它就会使用自己的私钥解密该密钥。然后,Web 服务器使用哈希值验证密钥的完整性。如果一切正常,Web 服务器会确认连接,允许你和 sparklekitten.net 使用相同的对称密钥安全地进行通信。整个过程通常不到一秒钟就可以完成。图 9-3 提供了该通信方式的详细说明。

图 9-3:与网站建立安全连接
尽管我们在多种方式中使用哈希和对称加密与非对称加密来保护通信,正如前面网站示例所示,保护通信是其中最常见的应用之一。需要记住的主要方面是,系统通常在后台处理密钥和加密。作为用户,你不需要做任何事情就能利用加密的强大功能来保护系统。事实上,你可能甚至没有意识到它正在发生,这使得加密对所有用户而言既简单又快速且有效。然而,这种缺乏意识可能导致你甚至不知道的攻击。
黑帽如何窃取你的密钥
绕过加密是黑客行为的核心部分。攻击者可以通过多种方式绕过加密提供的安全性,其中大多数方式涉及另一种类型的攻击,如社会工程学,这使得加密的存在变得无关紧要。例如,您可能对硬盘进行了全盘加密,但如果攻击者诱使您透露用于访问硬盘的 PIN 码或密码,那么无论加密多么强大,都没有意义。如果攻击者能够欺骗您与他们而非合法服务建立加密连接,这种情况也是一样的,这在许多中间人攻击中都有发生。如果发生这种情况,您与对方共享生成的对称密钥,允许他们在将流量转发给合法服务之前解密您的流量。
攻击者还可以窃取存储在硬件上的密钥,尤其是应用程序使用的密钥。存储在硬件上的密钥通常更难被破解,因为攻击者通常需要与系统进行物理交互才能窃取这些密钥。例如,您的密钥可能存储在一个 USB 驱动器中,必须将其插入才能访问这些密钥。如果对方没有 USB 驱动器,他们就无法获取这些密钥。某些漏洞,如内存存储中的错误或 CPU 访问信息时出现的问题,使得存储在硬件上的密钥有可能被访问,尽管这些漏洞通常非常罕见且难以利用。
这些针对硬件的攻击并不是攻击加密算法本身,而是影响了加密算法的实现。许多密码学漏洞是由于加密算法在使用时的运行方式存在缺陷,而非算法在理想状态下应如何运行。例如,最著名的例子之一是无线加密标准 WEP。它使用了 RC4 算法,但选择了一个极小的密钥空间并重用信息来生成密钥。这导致了该标准的漏洞,尽管底层算法本身是强大的。
密码分析
研究密码学及其破解方法被称为密码分析。现代密码分析通过检查加密算法的内部工作原理,寻找任何可能揭示加密消息明文的缺陷。这不仅包括寻找密钥的方法,还包括在不暴露密钥的情况下解码明文的方法。
研究人员在密码分析中使用多种技术,其中一种技术是暴力破解分析。如前所述,任何算法都可以被破解,只要时间足够。问题在于,如果暴力破解算法需要很长时间——比如说,几年或几十年——那么破解后获得的信息可能不再有用。因此,暴力破解分析还包括一些方法,利用算法处理信息时的漏洞,来减少正确猜测密钥所需的时间。例如,3DES 的主要漏洞在于其核心使用了三个不同的 DES 密钥进行加密过程。通过分析该算法,研究人员发现他们可以分别隔离每个密钥,实际上将其转化为普通的 56 位 DES 密钥,然后可以使用传统的暴力破解技术来破解,从而削弱了 3DES 的强度。这种攻击被称为meet-in-the-middle(不要与 man-in-the-middle 混淆)。
另一种密码分析技术是分析明文如何转换为密文。常见的做法之一是使用差分分析,它侧重于明文输入和密文输出之间的差异。该方法创建多种明文输入,除了一个受控变量(例如,每个输入中的数字不同)外,其他都相同。研究人员随后分析密文输出,并根据使用的明文寻找统计模式。另一种分析技术是积分分析,它考虑块密码的替代方法,寻找加密算法在管理替代过程中产生的统计模式。这两种分析方法通常可以发现可以利用的漏洞,例如之前提到的 meet-in-the-middle 漏洞。
密码分析不仅关注算法如何加密明文;它还关注算法与周围系统的互动。侧信道攻击侧重于算法外部的元素,如功耗、时序,甚至加密过程生成的声音,这些都可能导致发现关键的漏洞。
非对称算法攻击
尽管许多密码分析技术在对称和非对称算法上同样有效,但公钥密码学的特性使其更容易受到暴力破解攻击。由于非对称算法依赖于复杂的数学运算来生成密钥对,攻击者可能会利用任何能够加速问题求解的方法来破解非对称算法。例如,你的算法可能依赖于计算离散对数的难度,通过需要计算离散对数的数字来生成密钥,这些数字是从一对随机选择的数字中获得的。如果一个数学家找到了一种更快速的方法来计算离散对数,他们可能会显著降低你算法的工作难度。
RSA 的安全性在爱德华·斯诺登(Edward Snowden)——一名美国国家安全局承包商——揭露出超级计算机可以完成素数分解,从而创建公钥/私钥对后受到了削弱。这意味着传统的 1024 位密钥长度不再可行,算法必须使用 2048 位密钥才能保持安全。随着计算机处理器的持续增强,非对称加密必须不断更新其算法和标准,以避免被破解。
保护你的密钥
为了保护密钥,许多加密算法使用初始化向量(IV)。初始化向量由算法在加密数据之前添加到密钥中的随机位组成。这确保即使是用相同密钥加密的数据,也遵循不同的加密过程。初始化向量是保护加密分析的一个好方法,因为它们能避免加密数据中出现规律。
保护密钥的另一种方式是限制它们的重用频率。由于密钥在频繁使用时更容易被破解,因此最好尽可能频繁地更换密钥。你可以通过使用会话密钥来做到这一点,会话密钥仅在单个会话期间加密数据,例如在连接到谷歌时。一旦你关闭谷歌窗口或达到某个超时,会话就结束了,平台会销毁该密钥。这样,即使攻击者在会话期间获得了密钥,他们也无法用它解密未来的通信。我们通常使用对称密钥,如本章早些时候讨论的在连接到 sparklekitten.net 时创建的密钥,作为会话密钥来保护互联网通信。
我们还必须定期更换非对称密钥。通常,这会在每年进行一次,作为正常证书续期的一部分,但你也可以更频繁地更换。决定何时更新非对称密钥的一个好规则是,使用该密钥加密的流量越多,它需要更早更换:每年使用两次的密钥比每月使用数千次的密钥(或者像谷歌这样的公司每秒使用数千次的密钥)暴露的风险要小得多。
黑帽如何破解哈希值
我们经常使用哈希值来检查某些数据的完整性,如密码。由于哈希值本质上是不可逆的,哈希算法仅生成一个哈希值,不能用于解密。因此,大多数常见的密码分析攻击对哈希算法不起作用。然而,哈希值并非不可攻破。
对手破解哈希的主要方式是使用暴力破解技术。方法可能很简单,比如创建一个包含随机但可能的输入的哈希表,并将其与他们要破解的哈希进行比较。一旦找到哈希,他们就知道自己已经正确猜出了输入。但考虑到可能的输入数量——几乎是无限的——这种方法很少有效,除非他们拥有一些信息来缩小可能的结果范围,可能通过使用其他密码破解技术,如字典攻击或社会工程学。然而,哈希确实存在一个关键的漏洞,使其比其他加密密钥更容易被暴力破解:这个漏洞就是碰撞。
当两个输入产生相同的哈希输出时,就发生了碰撞。例如,随机情况下,单词sparkle和kitten可能都会生成哈希f90ab7。哈希算法中的碰撞会减少破解哈希所需的时间。可以这样理解:假设你有一个需要在超市购买的 10 个物品清单,而这些物品分布在商店的不同位置,可能需要花费 20 分钟才能找到所有物品。但如果其中有两个物品就放在靠近的货架上,找到它们所需的时间就会减少。物品之间越是靠得近,找到它们的时间就越短。哈希算法中的碰撞越多,攻击者通过各种组合找到目标的时间就越短。找到一个碰撞可以有效地将猜测输入的时间减半。碰撞越多,所需的时间就越少。
更强的哈希算法会生成较少的碰撞,因此破解所需的时间更长。但作为一种变通方法,黑帽黑客使用一种需要特殊工具的技术,这种工具被称为彩虹表。本质上,彩虹表是一个预先计算的哈希表,它通过哈希输出将哈希值分组,从而使特定输出更容易找到。因此,如果我有一个哈希值4fd3cd,该表会尝试将这个哈希值孤立成一个特定的输出组,并找到在该组中生成此哈希的密码。一旦表格找到密码,我就可以通过哈希算法确认它是否正确。
给你的哈希添加盐
MD5 算法极易受到碰撞攻击。在拥有正确的信息的情况下,破解其哈希只需几秒钟。SHA-1 虽然比 MD5 更安全,但也容易受到攻击。SHA-2 和 SHA-3 由于其哈希大小,更加安全。增强哈希安全的另一种方法是使用盐。像初始化向量(IV)一样,盐是一串随机位,在对输入进行哈希之前,我们将其添加到输入中。这一过程会生成一个独特的哈希,与未加盐的输入完全不同。
举个例子,假设输入kitten生成的哈希值是f903d。为了使哈希更加安全,我的系统可能会通过在末尾添加一组随机数字来对kitten进行哈希处理,使输入变成kitten123(尽管在实际应用中,它会将位添加到输入的二进制表示中,而不是十进制数字)。由于系统每次对kitten进行哈希时都会添加新的数字,因此哈希值每次都不同。这个过程还使得将哈希值聚集在一个彩虹表中变得更加困难,因为输出与被哈希的原始明文没有直接关联。
通过添加盐,你可以增加可能的哈希数量,直到碰撞变得极其罕见或难以发现。结果,破解哈希成为一个非常漫长的过程,尤其是当输入复杂时(有关详细信息,请参见第 76 页的“类型 1:你知道的某些东西”)。尽管如此,就像加密密钥一样,只要给足够的时间,任何哈希都是可以破解的。
练习:加密和哈希文件
Windows 和 macOS 系统提供了多种工具来帮助你加密和哈希文件。在本次练习中,你将使用 Windows 10 和 macOS 中嵌入的工具来加密文件。你还将对文件进行哈希处理,然后再加密它,并再次哈希,以查看哈希输出的不同之处。完成练习后,你将能够保护你的文件并验证它们是否已被修改。(只有 Windows 10 专业版才支持内建文件加密。对于使用 Windows 家庭版的用户,我建议使用 VeraCrypt 开源软件来创建存储敏感文件的地方,这样它们就会被加密。)
在 Windows 10 中加密和哈希文件
为了练习使用文件加密,你需要创建一个文件进行加密。最快的方法是打开一个文本编辑器,添加一些文本,然后将其保存为一个.txt文件,并存储在一个容易记住的位置;稍后你会输入文件路径。选择一个没有空格的文件名,以便稍后在练习中更容易使用。图 9-4 展示了我创建的一个超级秘密文件,名为Secretfile.txt,并将其保存到一个名为Secret的文件夹中。
接下来,你需要确保没有人能够在没有被你察觉的情况下修改你的秘密文件。最简单的方法之一就是创建文件的哈希值。然后,你可以将这个哈希值与该文件其他版本的哈希值进行比较,以确认文件内容是否完全一致。Windows 10 提供了内建工具,允许你创建这样的哈希值。要访问这些工具,打开命令提示符应用程序,就像在第二章的练习中那样。

图 9-4:一个非常秘密的文件
在命令提示符窗口中,你将使用 certutil 命令行工具。通常我们使用 certutil 来查找有关证书的信息,但它也可以创建文件哈希。使用以下命令运行该工具:
C:\Windows\System32>**certutil -hashfile****C:\Users\SparkleKitten\Documents\Secretfile.txt** **SHA512**
SHA512 hash of C:\Users\samgr\Desktop\Secret\SuperSecret.txt:
0dd47a4aa75835dfd19b1bb6ed5f8f60cc87492dacf8284ef598229cc258244f67d430e18d7cb770d36ed8b205af1571f42f9956bbe544a362ca191256450eb0
CertUtil: -hashfile command completed successfully.
该命令通过 hashfile 函数运行 certutil。回想一下第二章的练习,后续以破折号(–)开头的命令,被称为 标志,可以修改原始命令。添加文件路径,以便系统知道你要哈希的文件。输入文件路径时,从硬盘字母(通常是 C)开始,按顺序列出每个文件夹,直到到达存储文件的文件夹;确保在每个文件夹名称之间使用反斜杠(\)。然后选择要使用的哈希算法。默认情况下,此工具使用 SHA-1,因此我们在这里输入 SHA2-512,以确保我们使用的是强大的算法。按 ENTER 运行命令。
该命令计算哈希值并输出一长串字符。将这串字符复制并粘贴到另一个 .txt 文件中,例如名为 SecretHash.txt 的文件,以便以后进行比较。
现在你已经对文件进行了哈希处理,接下来需要对其进行加密。对于本次练习,你将使用 Windows 10 中内置的加密功能。要访问此功能,右键点击文件,在文件系统中选择 属性 以打开属性菜单。找到窗口底部的属性区域,然后点击 高级。在这里,你会看到一些不同的选项。选择 加密内容以保护数据,如图 9-5 所示,然后点击 确定 以使用默认的 AES 算法对文件进行加密。

图 9-5:选择加密内容选项
现在文件已加密并且安全。让我们再运行一次 certutil 工具,以比较原始的(Secretfile.txt)文件和加密版本的哈希值。因为你已经拥有了未加密的 Secretfile.txt 文件的哈希值,这些哈希值保存在 SecretHash.txt 文件中,现在你只需要为加密后的 Secretfile.txt 创建一个新的哈希值。请记住,任何对文件的修改,无论多么微小,都应该生成一个新的哈希值。在运行与之前相同的 certutil 命令后,将哈希值粘贴到名为 SecretHash.txt 的文本文件中,那里存放了第一个哈希值,然后比较这两个哈希值。注意到哈希值差异很大,这表明原始文件发生了变化。如果你没有进行这些更改,你可能会怀疑文件被恶意篡改。
使用 macOS 保护文件
在 macOS 中保护文件非常简单,因为你可以通过一些基本命令从终端访问所需的所有工具。首先,你需要创建一个文件作为示例。打开文本编辑器,创建一个名为 Secret 的新文件,并将其保存为 .rtf 文件,存放在你的 Documents 文件夹中。你可以在文件中写下任何你想要的内容。
一旦你创建了文件,就可以对它进行哈希处理,以便在文件被修改时提供一个基准值进行对比。打开终端应用程序,就像你在第二章的练习中所做的那样。你无需特别的权限即可在终端中使用这些命令。
要为Secret.rtf创建哈希,使用以下shasum命令。为了表示主目录,你可以使用波浪符(~)符号,而无需在路径中键入完整路径:
$ **shasum ~/Documents/Secret.rtf**
2966acd0faf387e024b8b6be50f47450c3c2f7fb /Users/sparklekitten/Documents/Secret.rtf
一旦你输入了命令,它会自动生成一个哈希值。这个长字符串就是你文件的哈希值。将这个字符串复制到一个新文件中,命名为SecretHash.rtf,以便日后进行比较。
要加密Secret.rtf,你需要使用 openssl 工具。SSL 是一种网络通信加密形式,而 openssl 是该协议的开源工具集。你可以通过输入以下命令来加密Secret.rtf:
$ **openssl aes256 -in** **~/Documents/Secret.rtf** **-out** **~/Documents/Secret.rtf.enc**
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
该命令使用了 AES-256 算法,正如你在本章中学到的,它非常强大。然后,它接收一个输入——在这个例子中,就是你想要加密的文件。输出使用不同的文件名来区分原始的Secret.rtf文件和加密后的文件,因此我建议在加密文件名的末尾添加.enc,这样你就知道它是加密过的。按下 ENTER 键运行命令后,你将被要求输入密码短语两次(第二次是确认)。请务必记住这个密码短语,因为它是解密文件的唯一方式。
要解密Secret.rtf,你再次运行相同的命令,但需要添加-d来表示解密,并反转-in和-out路径,如下所示:
$ **openssl aes256 -d -in** **~/Documents/Secret.rtf.enc -out** **~/Documents/Secret.rtf**
现在,让我们保持Secret.rtf的加密状态,以便你可以重新进行哈希,并将其与之前加密文件时创建的原始哈希进行比较。再次运行shasum命令,但这次指向加密后的文件:
$ **shasum -/Documents/Secret.rtf.enc**
786109556539fa6571704db78b79fb0d6ae035db
如你所见,哈希值与原始的完全不同,而原始哈希已被保存在SecretHash.rtf文件中。这个哈希值将帮助你检测文件是否已被修改,这可能表明文件中被添加了恶意内容。
使用 ssh-keygen 生成公钥(适用于 Windows 10 或 macOS)
现在,你已经加密了文件,无论是在 Windows 10 还是 macOS 上,并创建了哈希值,你需要创建一个安全的方式来发送文件。尽管文件已经加密,但最好还是通过安全的通信渠道发送文件。为此,你可能需要一对公钥/私钥的非对称密钥。你可以通过ssh-keygen命令生成 RSA 密钥对,无论是在 Windows 还是 macOS 上。对于这个练习,我使用了 Windows 命令,但 macOS 上的命令是一样的:
C:\Windows\System32> **ssh-keygen**
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\samgr/.ssh/id_rsa): **mykey**
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in **mykey****.**
Your public key has been saved in mykey.pub.
The key fingerprint is:
SHA256:FCRaZDnraock8vueS1FqjEZmdzcRB+LqXzRvRwqrLxc samgr@DESKTOP-OPFVANO
The key's randomart image is:
+---[RSA 2048]----+
| .*o*o. |
| =oo + |
| + o +o+ |
| + + =.o . |
| o *. S . |
|...o....E= o |
| o ooo o.+ . |
| ..+ooo.. . |
| .==oo+. |
+----[SHA256]-----+
会弹出一个提示,询问你想将文件存储在哪里。默认路径是当前用户目录下的.ssh文件夹(在示例中,目录是samgr,但它会根据你系统上的目录名称而不同)。默认文件名是id_rsa。若选择默认路径,按 ENTER 键,或者如果你想将密钥保存在特定位置,可以创建自己的文件路径。接下来的提示会要求你设置一个密码短语以保护密钥免受滥用。如果你设置了密码短语,每次使用密钥时都需要输入该短语。请输入一个强密码短语,并在下一个提示框中重新输入它。完成后,你的密钥将生成并保存到Users目录下的.ssh文件夹中。
.ssh文件夹现在应该包含两个文件。一个是id_rsa,它是实际的私钥。你可以在记事本中打开此文件以查看私钥。另一个文件是一个发布者文件,包含公钥。你也可以在记事本中打开此文件查看公钥。现在,你拥有了一对公钥/私钥,可以在需要时用于加密通信。
了解如何创建哈希、加密文件并生成公钥/私钥对,能够让你加密通信以确保其安全。通过使用这些技术,你可以保护文件免受未经授权的访问,并判断文件是否被修改。你还可以检查下载的文件,特别是可执行文件,看看它们的哈希值是否与供应商公布的真实哈希值匹配。如果不同,可能是黑客篡改了文件,添加了恶意软件或其他恶意代码。
结论
密码学是一个复杂的学科,涉及众多动态部分。这使得了解如何保持通信安全变得具有挑战性。通过认识到现代世界中密码学的基本结构,包括对称加密和非对称加密以及哈希技术如何协同工作以建立安全连接,你将更好地理解如何保护你的连接免受试图窃取数据的对手。尽管黑客有许多方法窃取密钥或破解加密,但正确使用密码学可以有效降低攻击成功的风险。确保在连接到网站或使用协议时正确实现加密的一个简单方法是检查是否有 S。
我说的检查“S”是什么意思?许多协议使用字母 S 来表示它们是安全的——例如,SSH(用于安全远程访问)、FTPS(用于安全文件传输)和 HTTPS(用于安全网络连接)。相比之下,Telnet、FTP 和 HTTP 提供相同的服务,但没有加密。虽然并非所有安全协议的缩写中都包含 S(WPA 就是一个典型例子),但寻找 S 仍然是一个很好的提醒,让你在发送或存储重要数据时检查是否进行了加密。你使用协议的上下文决定了你需要在哪里查找 S。例如,当浏览互联网时,查看网站名称,确保它以 HTTPS 而不是 HTTP 开头。
你需要自己验证系统是否正确设置了加密,无论是在线购物还是将敏感的税务文件发送给会计师。你可以在安全设置中进行此操作,无论是在你的电脑上还是在你使用的软件应用中。通过了解加密的工作原理,你可以更好地确保它按预期工作。这能保证无论你在做什么或发送什么,只要它保持加密状态,就能避免被攻击者窃取。
第十章:如何击败黑帽子黑客

到目前为止,你已经了解了什么是网络安全,为什么黑帽子黑客想要窃取你的数据,敌人如何以各种方式攻击你的系统,以及你可以采取什么措施来阻止特定类型的攻击。你应该对可能面临的威胁有一个清晰的认识,包括网络、社交媒体、电子邮件等方面。然而,正如你现在可能已经猜到的,优质的安全性不能仅仅依赖反应式的措施。如果你等到攻击发生后再试图阻止它,那时你已经输了。这就像玩一个打地鼠游戏:你可能打中了一个地鼠,但除非你修复所有的洞口,否则很快会有另一个地鼠冒出来。
要实现真正有效的安全性,你需要从基础做起。这意味着从一开始就制定一个详细的计划,说明你将如何创建、维护和更新你的安全措施。在这一章中,你将学习如何制定一个前瞻性的安全计划,将到目前为止学到的所有元素付诸实践。最终,你将创建一个定制的计划来保护房屋、学校、企业或任何其他实体。通过练习如何创建安全计划,你将能够将本书中学到的所有知识联系起来。在本章结束时,你将准备好开始制定一个安全策略,作为工作或家庭中任何项目的重要组成部分。
最坏的情况会是什么?
当你开始任何形式的安全计划时,甚至只是一般地考虑安全问题时,你应该始终从设想最坏的情况开始。事实上,安全人员常常被描述为悲观主义者,因为他们总是在考虑任何情况下可能出错的地方,通常考虑的程度可能让人觉得不必要。但正是这种思维方式能帮助你理解系统的威胁和它面临的风险。一旦你确定了问题所在,你就能开始解决它。首先,你需要了解风险和威胁之间的区别。
一开始,风险和威胁似乎有相同的含义,因为它们都可能对你的系统或组织造成巨大破坏。从理论上讲,它们都指示了你的组织可能遭遇攻击或损害的方式。但实际上,风险和威胁是不同的问题,你必须以不同的方式来应对它们。
风险
风险通常是因为你做了某些事情而产生的。你可以把风险看作是某个危险事件发生的可能性,这种事件可能是由个人或组织的行为引起的。例如,考虑早上起床。你可能扭伤脚踝摔倒在地。你也可能踩到乐高积木,伤到脚底。甚至有可能一只灰熊从你衣柜里跳出来,在你一醒来就攻击你。现在,你可能会想,灰熊怎么可能在我的衣柜里呢?你可能连生活的地方都不是灰熊栖息的区域。但这并不意味着它不可能发生。它只是意味着这种可能性很低。在网络安全中,任何行动都没有“零风险”这一说。
我们通过将事件发生的可能性与事件的影响相乘来计算风险。让我们回到起床的例子。你起床时踩到乐高积木的可能性有多大?如果你有小孩,可能性就会增加。如果他们拥有乐高玩具或有朋友拥有乐高玩具,可能性会更高。如果他们在你的卧室玩乐高积木,可能性会更大。但影响是什么呢?可能只是脚痛,是的,但很可能不过是短期的疼痛。如果你将可能性与影响结合起来,你可能会发现踩到乐高积木的风险是中等的。这种风险足以让你在睡觉前检查床周围的环境,但不足以禁止乐高出现在你家 200 码以内。
在计算风险时,使用数字有助于让你了解一些风险是如何与其他风险进行比较的。虽然有一些正式的方法可以衡量风险,比如通过风险实现时可能产生的金钱损失来计算,但你不必使用标准。例如,你可以选择一个 1 到 5 之间的数字来衡量可能性和影响。在灰熊藏在你衣柜里的例子中,你可能会给可能性评分为 1,因为这种可能性极低。然而,灰熊攻击的影响是严重的,所以你可能会给影响评分为 5。将这两个评分相乘,结果是 5 的风险。
尽管 5 分的评分看起来很高,但它还可以更高。让我们看看踩到乐高积木的风险。如果你家里有很多乐高积木,那么它离你床边的可能性大约是 3 分。但它的影响比与灰熊攻击的影响要小一些;假设它的影响也是 3 分(我是说,踩到乐高确实很疼)。因此,风险总分是 9。这几乎是灰熊攻击风险的两倍!
表 10-1 提供了这些计算的详细信息。
表 10-1:计算起床的风险
| 风险 | 可能性 | 影响 | 总风险 |
|---|---|---|---|
| 扭伤 脚踝 | 3 | 4 | 12 |
| 踩到乐高 | 3 | 3 | 9 |
| 灰熊 攻击 | 1 | 5 | 5 |
在你评估每个风险后,你必须决定如何处理该风险。当你发现一个风险时,应该立即处理它。特别注意一个法律术语叫做尽职调查,意思是做一个谨慎的人会做的事情。本质上,如果你知道某个事物是一个风险,就不要忽视它,否则如果风险发生,你可能会被追究法律责任。
也就是说,你可以通过几种方式来应对风险:
-
避免风险 不做导致风险的行为。如果你不下床,你就不会踩到乐高积木。
-
转移风险 将风险的所有权转移给另一个团体或实体。通常,这与保险有关。例如,如果你的房子有可能发生洪水,你可以通过购买洪水保险来转移这种风险。然后,如果风险发生,保险公司必须通过支付损失来处理它。
-
减轻风险 做一些事情,减少风险的影响或可能性到可接受的水平。例如,如果你在睡觉前检查床周围是否有松动的乐高积木,或者制定规则禁止它们进入卧室,你就在减轻踩到乐高积木的风险。
-
接受风险 接受一个不好的事件可能会发生。通常只有当风险的影响或可能性低到不值得花时间去减轻它时,才会这样做。例如,在我的卧室里遭遇熊袭击的可能性如此之低,根本没有必要采取预防措施。
让我们在网络安全的背景下考虑这些选项。例如,想象一下你的一名员工可能会点击钓鱼邮件中的链接。考虑到几乎每个企业都会以某种方式使用电子邮件,这显然是一个风险。正如你在第三章学到的,你也可以将这个风险视为具有高影响,特别是如果受害者下载了恶意软件或向攻击者提供了他们的凭证。
可能不太合理去避免这种风险,因为对于大多数企业来说,完全取消电子邮件并不是一个可行的选项。你可以通过购买网络安全保险来转移一些风险,但如果风险发生,这可能不足以覆盖整个影响。你也不能接受这个风险,因为一旦事件发生,其影响可能是如此严重,甚至可能导致企业停业。在这种情况下,最佳的选择是通过设置垃圾邮件过滤器和培训员工识别钓鱼尝试来减轻风险。
通常,管理风险并不像这样简单明了;许多因素会影响决定风险的可能性、影响以及应对策略。然而,哪怕只是像这里描述的那样简单地思考风险,也能帮助你更好地理解可能遇到的问题。
威胁
威胁是对系统、个人或组织的负面影响。换句话说,威胁是导致坏事件发生的动因。在起床的例子中,威胁是可能对你造成伤害的因素。在 LEGO 和熊袭击的情况下,威胁很明显。但在扭伤脚踝的情境中,识别威胁可能会很棘手,因为这取决于可能导致你扭伤脚踝的因素。如果是鞋子放错了地方,那鞋子就是威胁。如果只是你自己的笨拙,那么威胁就是你(或者至少是控制你动作的大脑部分)。
威胁有各种形式和大小。它们不一定是恶意的,甚至不一定是有意识的。例如,建筑物常常面临着可能着火并烧毁的威胁。但不论是人类还是其他,我们都称为带来威胁的因素为威胁行为者。威胁和威胁行为者之间的区别看起来可能很傻,但当你涉及到威胁管理时,这一点非常重要;管理威胁比管理威胁行为者要容易得多。
举个例子,假设你正在管理员工点击钓鱼链接的威胁。你可能认为威胁行为者是发送电子邮件的攻击者,但这只是部分正确。员工也是潜在的威胁行为者,因为他们是点击链接以激活它的人。由于你无法消除威胁行为者(没有员工的公司算什么呢?),你需要通过培训和垃圾邮件过滤器来减少威胁。
为了更好地应对威胁,将其分类会有所帮助。这样可以更清楚地了解如何将它们从环境中消除。表 10-2 展示了一个流行的网络安全威胁分类方案,即微软创建的 STRIDE 模型。这个助记符代表了六种类型的安全威胁:欺骗、篡改、拒绝、信息泄露、服务拒绝和权限提升。本质上,所有的网络安全攻击都可以归类为这几种威胁类别。事实上,你可能会在本书的前几章中认识到大多数这些威胁,作为各种攻击。
表 10-2:STRIDE 模型及其目标
| 威胁 | 目标 |
|---|---|
| 欺骗 | 认证 |
| 篡改 | 完整性 |
| 拒绝 | 不可否认 |
| 信息泄露 | 保密性 |
| 服务拒绝 | 可用性 |
| 权限提升 | 授权 |
通过将攻击分类,你可以大致了解它们的工作方式或至少了解它们的目标是什么。例如,如果我告诉你有一个新的攻击叫做“Sparkle Kitten Bite”,你可能不知道该如何应对。但如果我告诉你这是一种新的权限提升威胁,叫做“Sparkle Kitten Bite”,你至少会明白这个攻击试图访问它不应该访问的账户,很可能是为了在特权环境中执行命令。
控制措施
将威胁和威胁行为者分类还有助于你选择最佳的控制措施,这些控制措施试图预防或缓解威胁。到现在为止,你应该已经对不同类型的控制措施有了一个很好的了解,知道它们如何用于阻止各种攻击。例如,你知道通过使用冗余系统或在流量到达目标之前进行过滤(如第六章所述),可以防止 DoS 攻击。同样,你也知道应对暴力破解攻击的最佳方法是使密码复杂到即使是计算机也需要花费太长时间才能猜测出来(如第五章和第九章所述)。
与威胁类别一样,控制措施也有不同的分类,这可以帮助你选择最适合的控制措施。对于风险管理,我们通常按照控制措施如何试图保护目标免受威胁的方式来对其进行分类。五种控制类别是行政性、预防性、侦测性、补偿性和纠正性。表 10-3 列出了这些类别及其目的和每种类别的示例。
表 10-3:控制类别
| 类别 | 目的 | 示例 |
|---|---|---|
| 行政性 | 提供关于如何进行活动的指导 | 安全意识培训,政策,程序 |
| 预防性 | 在不良活动发生之前尝试阻止它 | 防火墙 |
| 侦测性 | 在不良活动发生后或正在发生时尝试发现它 | IDS,日志记录 |
| 补偿性 | 为弥补其他控制措施的弱点,提供额外的安全保障 | 加密 |
| 纠正性 | 在发现控制措施或缺陷后进行修复 | 补丁管理,漏洞管理 |
让我们考虑如何在实际场景中部署这些控制措施。预防性控制是显而易见的。例如,防火墙通过阻止其规则设定的连接来防止不良活动。另一方面,侦测性控制通常在恶意活动发生后提供发现手段,例如当你查看登录日志时,可以确定是否有攻击者闯入了你的服务器。
补偿控制加强另一个控制措施,使其更加安全。加密就是一个很好的补偿控制示例:如果另一个控制措施失败——例如,用于保护数据库的身份验证控制——攻击者仍然无法读取数据。修正控制修复另一个控制中发现的缺陷。例如,在发现关键漏洞后修补系统就是一种修正控制。
行政控制为组织提供如何实施安全性的指导。一个好的行政控制示例是为新员工设置计算机的程序。如果你记录下涉及的步骤,你可以确保每次操作都按照相同的方式进行,并且正确的安全配置始终得以实施。行政控制通常规定了其他控制措施的设置和维护方式。
理解风险、威胁和控制措施有助于你处理自己或组织可能遇到的问题,尤其是那些对手造成的问题。但对这些方面的了解只是过程的一部分。你还必须确保你在尽职尽责,包括处理所有威胁和维护你的控制措施。在这方面,风险管理程序可以带来重大好处。
风险管理程序
管理风险可能很复杂,因为它要求同时处理多个网络安全方面的内容。你不仅要应对威胁,还要维护已经实施的控制措施。此外,作为一名网络安全专业人员,你还需要回答关于组织安全性的问题。你必须向技术水平不同的人解释为什么某些风险需要解决,以及你选择的控制措施将如何应对这些风险。这要求你始终全面了解组织的安全状况。这确实不是一项小任务。
一个好的风险管理程序可以救命。风险管理程序的目的是跟踪公司面临的风险、相关的威胁以及用于应对这些风险的控制措施。理想情况下,风险管理程序应足够灵活,以便在环境发生变化时能够持续更新。你应该能够根据新风险的出现或已解决的风险不再是问题的情况,随时添加或删除控制措施。该程序还应该提供一个模板,用于处理一次性项目的风险,例如重大设备升级或新建筑的开设。
为了管理所有这些活动,你需要使用一个叫做风险 登记册的特殊工具,它是一个记录你当前正在追踪的所有风险的系统。可以将其视为一个任务组织工具,就像你在学校里使用过的那种。你可以用它来追踪风险、你如何应对这些风险,以及你用来应对的控制措施。该程序还可以高效地跟踪那些你尚未处理的风险,或那些尚未完全实施的控制措施。
风险登记册可以是一个复杂的软件,提供详细的状态信息,但你也可以使用简单的电子表格作为风险登记册。事实上,使用电子表格总比什么都不用要好。请记住,风险管理的重点是追踪你如何管理风险,这至少是为了满足通常由法律要求的尽职调查要求。图 10-1 展示了一个用来追踪风险的电子表格示例。让我们更详细地讨论每个部分。

图 10-1:Sparkle Kitten Inc. 的风险登记册
前两列追踪了组织的风险和威胁。记住,风险是基于我们所做的事情而发生的,而威胁则是发生在我们身上的事件。在这个例子中,由于 Sparkle Kitten Inc.使用电子邮件,因此它面临着电子邮件系统被破坏的风险。特别需要注意的是,威胁列中提到的钓鱼攻击威胁,它们是由黑客发起的。
风险登记册并不总是追踪风险和威胁,但这样做可以帮助区分风险实现的方式。例如,当你存储信息时,丢失数据是一个常见的风险。但请注意,在风险登记册中列出了两种不同的威胁,它们根据可能性和影响会有不同的结果。
风险评分可以帮助我们确定哪些风险需要立即处理,哪些可以暂时搁置。这份风险登记册显示,由于恶意软件导致服务器数据丢失的风险评分最高。因此,我们应该首先处理这个风险,因为如果这个风险发生,它可能是最具破坏性的。接下来的两列详细说明了我们如何应对该风险,以及我们使用了哪种控制措施来应对它。在服务器数据丢失的情况下,我们通过使用反恶意软件来缓解这一风险,期望该软件能检测并阻止恶意软件破坏我们的备份。
接下来的三列列出了我们选择的控制措施的状态,用以应对这个风险。例如,你可以看到反恶意软件软件已于 2020 年 5 月 20 日实施。控制负责人 Cheryl 负责维护和检查该控制措施,确保它仍然满足我们的需求。这些列还表明我们需要做的事情。注意,尽管我们决定通过购买小猫保险来转移小猫失去毛茸茸的风险,但我们尚未实施这一控制措施。由 Ted 负责为组织购买小猫保险。一旦他完成购买,他会更新登记册并加入新的日期,反映保险何时生效。
尽管这个电子表格可能很简单,但它可以帮助你组织公司面临的风险和威胁,使它们更容易处理。通过一目了然的方式,你可以看到已识别的风险、风险的影响以及控制过程的状态。你还可以找出需要与谁沟通以获取控制状态的最新信息。最棒的是,你不需要详细的技术知识就能理解你的组织是否安全。
汇总所有内容
让我们将你在本书中学到的所有内容结合成一个实际示例。假设你在一家有 500 名员工的中型公司担任安全分析师。你日常工作的一部分是检查员工或防火墙和入侵检测系统发出的任何警报。
有一天早晨,你收到一封焦虑的员工邮件,说他们收到了一个奇怪的邮件并点击了其中的链接。现在他们担心可能会对他们的电脑造成一些问题。你使用一些快速的钓鱼分析工具,比如在第三章练习过的 VirusTotal 和 MX Toolbox,检查了这封邮件。邮件声称是来自微软的密码重置通知,但发件人邮箱地址是M1cos0ft.com。查看链接后,你意识到这可能是恶意的。员工表示,当他们点击链接时,系统要求他们下载一个密码更新工具,并在电脑上运行。你意识到这很可能是恶意软件,于是开始对系统进行病毒扫描。
在扫描系统时,你检查了防火墙和 IDS 警报,查看是否有任何可疑的内容。果然,你注意到有警报显示来自员工计算机的新、可能是恶意的流量。你不确定该如何处理这些信息,因此你将警报上报给团队中的一位高级安全顾问。他们查看了警报并意识到,这很可能意味着员工下载了一个特洛伊木马,正在尝试通过网络传播勒索病毒。高级安全顾问迅速更新了 IDS 和防火墙,阻止员工计算机与网络上其他计算机进行连接。与此同时,你的扫描检测到一个知名的恶意软件工具包。你成功地将其隔离并删除了感染,但为了确保万无一失,你将员工的计算机完全重置了。
事件发生后,你和你的安全同事进行了一次事后分析,讨论发生了什么,并探讨如何在未来避免类似情况。CISO 主持了这次会议。从讨论中,每个人都意识到组织存在一个薄弱环节:培训员工识别钓鱼邮件,而钓鱼邮件是一个重大威胁,勒索病毒攻击就证明了这一点。CISO 将这一点加入公司的风险登记表,并讨论如何最佳实施员工培训控制。大家一致认为,专门的钓鱼培训平台是实施这一控制的最佳方式。
首席信息安全官(CISO)将新的风险带到季度风险管理会议,并讨论为组织购买钓鱼培训平台的想法。人力资源负责人同意 CISO 的想法,因为目前人力资源使用的培训平台没有包括钓鱼相关信息。首席财务官(CFO)也同意,因为该平台的成本较低,但带来的效益巨大。最终决定由 CISO 调查不同的选项,并在一个月内向委员会报告推荐方案。CISO 更新了风险登记表,并指派了一个安全团队成员来协助完成这项任务。
虽然这是一个虚构的场景,但它代表了安全在组织中应如何运作。在这个场景中,仅仅处理员工关于钓鱼邮件的来电是不够的。安全分析师必须交叉参考不同的信息来源,并请求其他团队成员的建议,以了解整个情况。此外,工作并没有在事件结束后停止。后续工作同样重要,它帮助组织识别出安全上的漏洞并修复它们。通过安全团队的专业知识,CISO 成功展示了为什么与高层领导合作购买特定培训平台是重要的。这也是风险管理计划至关重要的原因:它帮助将安全的各个方面联系起来。它以简单、易于管理的格式展示了安全的需求和解决方案。
练习:进行风险分析
对于这个最终的练习,选择一个目标并进行风险分析。风险分析定义了针对目标的所有风险,并检查每个风险的风险管理过程。你的目标可以是你的家、学校、工作场所或任何你对网络安全威胁或风险有较为清晰认识的地方。一旦你选择了目标,完成以下步骤:
-
确定你希望纳入分析的所有资产。例如,在你的家中,你可能会列出任何计算机、网络设备如路由器以及智能设备如游戏主机或电视。将这些设备列在电子表格或纸张上。
-
记录你认为这些资产可能遭受攻击或以其他方式受到损害的所有方式。在执行此操作时,记得进行合理性检查,考虑攻击的可能性。是的,在电影中,一个邪恶的 AI 可能会接管你的游戏主机并试图杀死你,但在现实生活中,这显然不是需要担心的事情。
-
查看所有可能攻击你的资产的方式,并使用 STRIDE 模型进行分组。识别这些攻击的共同点。这些就是针对你目标的威胁。例如,你的电视和游戏主机可能容易受到 DoS 攻击。
-
确定你的小组中哪个类别的实例最多。实例的数量越高,发生的可能性越大。另外,简要记录下潜在的影响。例如,如果你的游戏主机遭遇了 DoS 攻击,你就无法和朋友一起玩刚发布的电子游戏,这将是一个极其令人失望的体验,因此它的影响较大。
-
将威胁放入风险登记册中,比如本章前面展示的那种形式。包括风险内容、威胁及其风险评分。
-
查看你已经采取了哪些控制措施来应对这些攻击。例如,在面对针对游戏主机的 DoS 攻击时,你可能会研究处理这种攻击所需的带宽,主机的安全性,或者你的 ISP 是否有相关保护措施。
-
完善风险登记册,记录你如何应对风险,以及你正在使用哪些控制措施来应对这些风险。
现在你已经有了一个完整的风险登记册,这能让你对目标面临的威胁以及你能采取的应对措施(如果还没有采取的话)有一个清晰的了解。虽然有时候减轻已识别的威胁可能并不实际(比如单独阻止 DoS 攻击是非常困难的),但风险登记册为你提供了一种练习风险管理情境的方法。
告别并祝好运
现在你已经准备好开始踏入网络安全的世界。无论你打算加入网络安全专业人士的行列,还是只是想将这项新知识应用到日常生活中,你已经打下了一个坚实的基础,可以用来探索你感兴趣的安全话题。
以下是你网络安全之旅的一些最终建议:
-
点击前三思。即使是最优秀的专业人士,在匆忙中也会被欺骗。网络安全是慢工出细活。
-
抽出时间采取正确的步骤。网络安全的工作有时可能看起来是应该昨天就处理的任务;不过,还是要停下来,深呼吸一下,选择最好的下一步。
-
如果情况让你感觉不对劲,千万不要仅凭他人之言。如果你不确定某个配置是否正确完成,不要假设其他人已经处理好。
-
永远寻求帮助。网络安全不是一个孤立的领域,也不仅限于你的团队。
-
保持阅读和学习。网络安全需要不断的维护,才能始终领先于黑帽黑客。
-
玩得开心!网络安全是严肃的,但这并不意味着它必须是严肃的。


浙公网安备 33010602011771号