试水:如何执行内部网络钓鱼活动
网络钓鱼是现代计算中最危险的威胁之一。网络钓鱼攻击已经从粗制滥造的群发邮件演变为有针对性的攻击,旨在愚弄即使是最谨慎的用户。没有万无一失的防御措施,大多数专家都认为教育和常识是应对该问题的最佳工具。问题是如何安全地测试您的用户以确定他们的反应?在大多数情况下,答案是网络钓鱼活动——持续尝试测试您的用户在这些类型的风险上的表现。
在本文中,我将研究一个名为 Gophish 的开源工具,该工具适用于大多数企业。我将介绍如何使用 Gophish 执行多个网络钓鱼活动,并为持续测试奠定基础。对于示例活动,我选择了三种流行的网络钓鱼威胁类型:电子邮件正文中的恶意链接,这些链接会重定向到不需要的站点;指向可能捕获凭据的虚假站点的链接;以及最终的、通过附件传播的恶意软件。
在继续之前,我觉得有必要插入一些免责声明。第一,未经公司管理层的明确书面批准,请勿在您的企业或任何企业执行此工作。第二,确保定义您的活动范围。您将使用哪些类型的攻击?您想针对哪些目标?您的活动的时间范围是什么?尽可能彻底地回答尽可能多的这些问题。第三,不要偏离您的范围。仅将您的测试限制在定义的区域内。请遵守这些免责声明,如果您确实遇到因您的活动引起的任何问题,请务必谨慎并咨询签署批准活动的同一管理层。
安装 Gophish 非常简单。您可以在 Linux 或 Windows 上安装它。我选择使用 CentOS 7 发行版作为我的 Gophish 服务器。要安装该程序,只需下载并解压缩项目站点上提供的安装文件即可。在我的例子中,我将其解压缩到 /etc 文件夹。使用 chmod
命令允许 Gophish 可执行文件运行。
要启动该程序,请从终端窗口运行 gophish
。这将启动一个脚本,该脚本启动 Gophish 程序的各种组件。脚本完成后,您将收到通知,告知管理页面正在 http://127.0.0.1:3333 上运行(图 1)。在本地计算机上打开浏览器,并使用默认凭据“admin/gophish”登录。登录后,您将看到一个极简的界面,您可以从中开始工作(图 2)。

图 1. Gophish 登录页面

图 2. Gophish 界面
在继续第一个活动之前,您需要完成一些初步工作,这些工作将在整个测试中重复使用。第一个项目是创建一个测试域和电子邮件地址,以用于您的活动。通常,为每个活动使用不同的电子邮件/域组合是一个好主意,但您将在此处的活动之间重复使用此信息,以节省空间。
由于俄罗斯域名是网络钓鱼攻击的已知避风港,因此我选择使用一个未使用的俄罗斯域名用于这些目的。如果您从俄罗斯发送或接收大量电子邮件,这显然效果不佳。
选择您的域或域名后,在您的环境中创建一个 DNS 区域,并为“tlbank”创建一个主机记录。此主机将在您的第二个活动中发挥作用。
我选择了 somzvanets@fakerussiandomain(使用实际域名)作为测试地址。确保将您的域名标记为安全和/或在您环境中部署的任何垃圾邮件过滤软件或代理上将其列入白名单。这还包括防病毒软件,因为许多产品将保护功能组合到一个代理中。
让我再补充一点。您拥有工具和能力,可以真正发挥创造力并成功欺骗您的用户。但是,我认为目标不是完全欺骗用户,而是给他们线索来触发他们大脑中的批判性思维中心。您想要测试和衡量的正是这些技能,因为它们在对抗网络钓鱼攻击中最有价值。留下可以帮助用户进行威胁识别过程的面包屑——例如拼写错误的单词、糟糕的语法、奇怪的措辞等等。您必须在整个过程中帮助您的用户。否则,您并不是真正在测试您的用户,而只是在测试您欺骗他们的能力。现在,开始第一个活动。
Gophish 中的活动由几个组件组成。第一个是发送配置文件。这是您将从中发送邮件的虚假地址。您的 Gophish 服务器上可以有多个发送配置文件,但每个活动一次只能使用一个。单击“发送配置文件”链接,然后在显示的字段中填写(图 3)。在“发件人”字段中输入您的虚假地址,并输入内部 SMTP 主机。

图 3. 发送配置文件
请注意,我强烈建议在您的测试中仅使用您可用的内部资源。一些付费网络钓鱼服务是基于 Web 或云的,可能需要额外的网络配置。我喜欢将所有内容都放在内部,这样我就绝对知道何时何地以及在什么硬件上发生了什么。这也将有助于防止您公司的邮件服务器被列入互联网黑名单。如果您的内部 SMTP 主机需要登录,也请输入登录信息。当您的配置文件信息完成后,使用“发送测试邮件”按钮确认您的设置有效。当您对您的设置感到满意时,单击“保存配置文件”。
要配置的下一个组件是着陆页。着陆页是如果用户单击您提供的链接,您的网络钓鱼消息中的链接将用户发送到的位置。单击左侧的“着陆页”链接。在新窗口中,将页面命名为“空白页”。对于第一个活动,让我们使用一个简单的重定向页面。单击“源代码”按钮,然后在空格中输入以下代码(在 url= 部分输入您的用户常用的站点)
<html>
<head><meta http-equiv="refresh" content="0;
↪url=http://somewebsite/" />
<title></title>
</head>
<body></body>
<html>
单击“保存”。
接下来,您将创建您的第一个电子邮件模板。模板是活动中使用的电子邮件消息。单击左侧的“电子邮件模板”链接,然后单击页面顶部的“新建模板”。将您的模板命名为“恶意链接”,作为此活动的标识符。在“新建模板”屏幕上,您可以选择创建自己的模板或导入自定义电子邮件。在这里,您将使用一个简单的消息,其中包含指向您的空白页面的链接以及重定向代码。
如果您选择使用根据真实世界的网络钓鱼消息量身定制的自定义电子邮件,请勿直接使用来自网络的任何内容。您可以使用细齿梳仔细检查这些消息,但您最不想做的事情是错过任何不小心将恶意软件带入您网络的东西。我的建议是转录您要使用的任何示例。切勿复制和粘贴。转录是避免意外使用测试中任何恶意代码的唯一可靠方法。彻底扫描您要下载和使用的任何图像。谨慎使用非您自己的图像。
创建一个类似于知名公司或金融机构的模板不一定是坏主意,但请注意,您的用户实际上可能使用该公司/金融机构的服务。这变成了一把双刃剑。一方面,用户实际上可能与您冒充的公司建立连接/帐户,这可能会导致他们单击一些他们不确定的内容。另一方面,您希望您的用户以批判的眼光看待每条消息,即使是那些可能影响他们的消息也是如此。
您可以在图 4 中看到我创建的消息的文本。我已将主题设置为“拖欠帐户”,因为它既通用又可能仍然引起用户的注意。在消息中创建链接时,使用“链接类型 = URL”并将 URL 设置为 {{.URL}}(图 5)。这会将单击链接的用户发送到您刚刚设置的着陆页上的唯一 URL,Gophish 服务器使用该 URL 来跟踪活动的数据。单击“保存模板”以保存并关闭模板。

图 4. 创建模板

图 5. 添加着陆页 URL
单击“用户和组”链接。给组起一个描述性名称,并使用提供的字段一次添加一个用户,或批量导入 .csv 文件。根据您的需要将您的用户划分为组。您可以按地理位置或站点、按职位或按内部组来划分他们。使用最符合您的测试目标的任何策略。我只是简单地将其命名为“测试组”。
在所有必要的组件都到位后,单击“活动”链接,并使用您先前创建的项目填写字段以匹配图 6。在“URL”字段中,输入您的 Gophish 服务器的 IP 地址或主机名。如果您不希望活动立即开始,请单击“计划”按钮。您可以在图 7 中看到发送给测试组的测试消息。

图 6. 创建新活动

图 7. 测试消息
在活动进行中,您可以在“仪表板”或“活动”链接上查看结果(图 8)。将您的活动保留在原位,时间长短由您自行决定。几天通常就足够了,因为用户的记忆力很短。当您准备好时,您可以使用“完成”按钮完成您的活动。您应该会看到一个时间线,显示电子邮件的发送时间以及(如果成功)链接的点击时间。如果您向下滚动,您将看到按您组中的用户列出的结果。任何成功都代表用户被网络钓鱼消息诱骗到恶意网站的合理机会。

图 8. 查看结果
下一个活动围绕一个虚假的网站展开,该网站捕获凭据。因为您将为每个活动重复使用相同的发送配置文件,所以您可以继续进行着陆页。这将是一个简单的页面,其中包含用于用户名/密码组合的表单输入。在新的“着陆页”窗口中,输入“捕获凭据”。您可以随意使用我的基本 HTML 代码并在其基础上进行自定义以满足您的需求,但我的建议是使用“导入站点”功能来克隆一个需要登录的真实网站。我个人收到过此类网络钓鱼电子邮件——声称来自我开设帐户的知名银行、我使用的数据提供商或我订阅的流行流媒体服务。通过模仿真实站点,您可能会获得比模仿像这样的明显虚假站点更好的结果。要使用我的页面,请将下面的代码复制到“着陆页”窗口的源代码视图中。当您单击提交按钮时,它会将用户重定向到您喜欢的任何页面。我删除了一些样式标签以保持代码简洁
<html>
<head>
<title>The Totally Legitimate Bank</title>
</head>
<body>
<h2><strong>$$$$$ The Totally Legitimate Bank
↪$$$$$</strong><br />
<em>Your Trusted (wink, wink) Hometown Bank</em><br />
</h2>
<p>User ID:<input type="text" /></p>
<p>Password:<input type="password" /></p>
<p><input onclick="document.location.href
↪='http://tlbank.tresk.ru'" type="button"
↪value="Click to Login" /></p>
<p> </p>
<p><strong>Member FDIP</strong>™2017</p>
</body>
</html>
您可能会注意到代码框下方的“捕获提交的数据”选项。除非管理层或决策者在您的范围内明确同意,否则我不会使用此选项。网络钓鱼活动可以与其他类型的安全测试配对,在这些测试中捕获此数据可能相关,但这并不是这里的目标。
对于这个新的电子邮件模板,您可能已经猜到,您将冒充完全合法的银行。我制作了图 9 中显示的电子邮件,以引诱用户访问该站点。与之前一样,在正文中使用 {{.URL}} 作为您的链接代码。在制作也使用配套站点的网络钓鱼电子邮件时,匹配品牌(真实或虚假)非常重要。在这些情况下,用户很少会上当那些在视觉或其他方面不匹配的网站。

图 9. 冒充完全合法的银行
单击“活动”链接并打开一个新活动。设置选项以匹配图 10。我输入的 URL 是先前创建的主机 (tlbank) 的 FQDN。如果您的 DNS 服务器具有区域和主机的记录,则有效 URL 将显示在用户的浏览器中。这很重要,因为您不希望任何精通技术的用户仅通过查看 URL 就能发现问题。准备就绪后,单击“启动活动”。当您监视此活动时,您将看到“事件:单击链接”,如果用户在虚假站点中输入了数据,您将看到第二个红点,其中包含“事件:提交的数据”,指示用户在表单中提交了信息。

图 10. 创建另一个新活动
用户可能已经将字段留空并单击了按钮,如果您想确保万无一失,有两种方法可以处理这种情况。第一,编码您的表单以检查并确保在提交发生或捕获凭据之前字段已填写,但我不建议这样做。当您对结果感到满意时,完成活动。如果您的结果中有很多第二个“事件:提交的数据”消息,您应该特别关注您的用户在不知不觉中将其凭据提交给未知方的情况。
第三个也是最后一个活动涉及向用户发送恶意附件。这是一种非常流行的安装勒索软件的方式。目前使用最多的两种以此方式感染用户的应用程序是 Adobe Acrobat 和 Microsoft Word。不幸的是,Gophish 目前不具备测试此功能所需的所有工具,因此您需要为此活动设置额外的资源。
与之前的“完全合法”网页一样,您将使用快速而肮脏的方法来获得您需要的东西。使用此类测试,您可以做更多的事情,尤其是使用 Metasploit 等工具,但这超出了本文的范围。
首先从 此处 下载 LAMP appliance。我在不到五分钟的时间内就启动并运行了我的 appliance。使用下面的代码在根站点之外创建一个名为 verify.php 的网页
<?php
session_start();
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
$counter_name = "/var/www/counter/counter.txt";
$iplog_name = "/var/www/counter/ip.txt";
// Check if a text file exists. If not create
// one and initialize it to zero.
if (!file_exists($counter_name)) {
$f = fopen($counter_name, "w");
fwrite($f,"0");
fclose($f);
}
// Read the current value of our counter file
$f = fopen($counter_name,"r");
$counterVal = fread($f, filesize($counter_name));
fclose($f);
// Has visitor been counted in this session?
// If not, increase counter value by one and append ip.txt file
if(!isset($_SESSION['hasVisited'])){
$_SESSION['hasVisited']="yes";
$counterVal++;
$f = fopen($counter_name, "w");
fwrite($f, $counterVal);
fclose($f);
$file = fopen($iplog_name,"a");
$ip=$_SERVER['REMOTE_ADDR'];
echo fwrite($file,$ip);
echo fwrite($file, "\n");
fclose ($file);
header('Location: http://somewebsite');
}
header('Location: http://somewebsite');
这个简单的页面会将用户计为访问者,在文本文件中记录他们的 IP 地址,然后将他们重定向到某个外部站点。
现在,让我们创建恶意附件。假设您安装了 Microsoft Word,打开该程序和一个空白文档,然后按 Alt-F11 打开 VB 编辑器。创建一个新模块,并使用以下代码,其中 http://somewebsite 是您的 LAMP Web 服务器的名称
Sub AutoOpen()
myURL = http://mylampserver/verify.php
ShellExecute 0, "OPEN", myURL, "", "", 0
End Sub
将文档另存为 .docm 类型,然后关闭 Word。
返回 Gophish 服务器,创建一个名为“恶意附件”的新电子邮件模板,并通过单击“添加文件”按钮将您创建的文档文件用作附件。有关模板的措辞,请参见图 11。

图 11. 恶意附件模板
在此示例中,您声称用户有未付的发票。您不需要着陆页,因此像在第一个活动中一样将其设置为“空白页”。将其余设置与图 12 匹配并启动活动。您可以在 URL 字段中使用主机名,但由于您未使用 Gophish 来跟踪活动,因此您可以仅使用 Gophish 服务器的 IP。

图 12. 活动设置
与之前的活动不同,您必须使用 verify.php 页面创建的文本文件来跟踪您的结果。关于此活动的一个注意事项——大多数当前的文字处理器都具有某种形式的宏保护,通常是警告提示。用户将必须绕过这些提示或启用宏才能打开附件,这意味着他们真的想打开它。如果您的 LAMP 服务器上的文本文件中显示大量命中,您可能需要考虑增加扫描入站附件的强度,如果可以,禁用宏,并且始终如一地教育受影响的用户关于打开可疑附件可能造成的后果。
测试完成后,评估您发现的成功之处,并使用技术或教育资源来解决这些问题。如果可以,请使用这些结果并推动定期测试。这不应该是一次性测试。您应该让您的用户保持警惕,就像任何其他技能一样,您必须定期练习才能保持有效。计算机安全领域有一句古老的格言“坏人只需要对一次即可。” 确保您的用户做好了准备。随着人员流动、晋升和职责变更,许多用户最不关心的就是电子邮件安全。持续加强良好的安全实践和定期测试以验证您的培训方法对于避免灾难至关重要。