实用网络钓鱼

AWS上设置开源网络钓鱼框架Gophish以测试您公司的网络钓鱼防御。

我在喀喀湖上的乌鲁芦苇鱼

介绍

最近有人要求我对我们自己的AirWalk员工进行网络钓鱼测试,以评估我们受到攻击的可能性。 我们不想花钱聘请第三方测试公司,因为作为一家技术公司,我们认为我们可以自己做。

在我以前的故事《网络钓鱼理论》中,我讨论了在向同事发送电话电子邮件之前向他们发送垃圾邮件时应考虑的事项,以及这些邮件应采取的形式。

在这里,我将讨论用于执行测试的系统的实际实现。 这个故事将比上一个更加注重技术。

如果您希望做类似的事情来测试公司的防御能力,我将介绍我采取的所有技术步骤。 我要在这里强调,在模仿我在此描述的任何内容之前,请确保您具有组织中正确人员的权威。 虽然我很高兴回答任何问题,但是如果您被解雇了,不要怪我me

网路钓鱼

先前回答了所有有关如何形成网络钓鱼测试电子邮件的问题,我需要选择一种用于创建和发送电子邮件的工具。 经过一番阅读后,我发现了Gophish,这是一种根据MIT许可证发行的开源软件,它负责创建电子邮件模板和登录页面,收件人列表,实际的电子邮件发送和活动管理。 感觉很像电子邮件营销工具。 有了这个和一个友好的SMTP中继,我就可以上路了。

现在,我决定将Gophish部署到AWS中的EC2实例。

我选择使用一个远离伦敦的AWS区域的原因有两个。 首先,为了减少技术同事注意到我的情况并怀疑即将进行测试的机会。 其次,给警惕者增加一点线索,如果他们选择查看标题,这将是一封不寻常的电子邮件。 因此,我选择了圣保罗。

我在圣保罗市中心的景色

深入了解— EC2设置

我登录到EC2控制台,然后选择了SãoPaulo(sa-east-1)区域。

选择圣保罗AWS区域

因为之前我没有在此特定的AWS账户中使用过sa-east-1区域,所以必须将SSH密钥对导入EC2。

将SSH密钥导入EC2

然后,在不同的屏幕上配置实例选项之后,我启动了一个新的EC2实例,可以在其上运行Gophish。

启动EC2实例

第1步:选择AMI —我选择了Amazon Linux 2,带有SSD的HVM

选择EC2 AMI

步骤2:实例类型-t2.micro

(顺便说一句,我发现t2 micro完全够用,所以为什么要多付钱呢?)

配置EC2实例类型

步骤3:实例详细信息-我选择了默认VPC,为实例详细信息选择了所有默认选项,包括分配公共IP(下图中的完整详细信息)。
注意:如果您有现有的非默认VPC,则需要将实例放置在公共子网中,然后选择分配公共IP。

配置EC2实例详细信息

步骤4:存储-存储设置为默认设置; 根设备上有8GB的存储空间。

配置存储

步骤5:标记-我添加了一些适当的标记。

配置EC2标记

步骤6:安全组:我创建了一个新的安全组,允许:
–任意位置的HTTP(TCP / 80)-pingback和承载登录页面所必需
–来自任何地方的HTTPS(TCP / 443)-与上述相同的原因
–我们办公室IP地址的SSH(TCP / 22)
–来自我们办公室IP地址的TCP / 3333-这是Gophish的管理控制台,我将在浏览器中使用该控制台来控制广告系列

配置EC2安全组

步骤7:审阅:我审阅了设置(见下文)并启动了实例—选择我的SSH密钥对并接受条款。

启动前查看EC2实例设置

选择密钥对并启动实例

等待实例启动后,我分配了一个弹性IP地址并将其与我的实例相关联。 如果我出于任何原因需要重新启动实例,这将有所帮助,因为一旦我开始发送包含着陆页和pingback链接的电子邮件,它就必须留在一个地方。

EC2 —关联弹性IP

将Elastic IP与我们的实例相关联

安装Gophish

对于软件安装,我遵循了《 Gophish用户指南》的安装页面。

软件安装

通过ssh登录到实例后,我需要下载Gophish的二进制软件包。 在笔记本电脑的浏览器中,我转到GitHub上的Gophish版本页面,通过右键单击找到了64位Linux发行版的URL(您的浏览器体验可能会略有不同)。

回到我的实例,我创建了一个名为gophish的用户并下载了二进制文件:

  sudo adduser -c“ Gophish用户” gophish 
sudo su —网络钓鱼
curl -L https://github.com/gophish/gophish/releases/download/0.7.1/gophish-v0.7.1-linux-64bit.zip -o gophish-v0.7.1-linux-64bit.zip

请注意:

  • 请勿简单地在上面粘贴我的网址,因为自编写以来可能会有更新的版本
  • 请记住使用-L因为网页上的URL不会直接链接到二进制文件,因此您的curl必须遵循重定向

然后,我为此版本的Gophish创建了一个目录并解压缩:

  mkdir gophish-v0.7.1 
光盘gophish-v0.7.1 /
解压缩../gophish-v0.7.1-linux-64bit.zip
rm ../gophish-v0.7.1-linux-64bit.zip

为了使以后的升级和启动脚本使我的生活更轻松,我建立了指向当前版本的符号链接:

  ln -s /home/gophish/gophish-v0.7.1 / home / gophish / gophish 

Gophish配置

接下来,我使用自己喜欢的编辑器检查了config.json:

  { 
“ admin_server”:{
“ listen_url”:“ 0.0.0.0:3333”,
“ use_tls”:是,
“ cert_path”:“ gophish_admin.crt”,
“ key_path”:“ gophish_admin.key”
},
“网络钓鱼服务器”:{
“ 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_”,
“联系地址”: ””

管理员服务器-> listen_url

为了使管理服务器能够在TCP端口3333上侦听我们的公共IP地址(在上述安全组规则中,访问权限仅限于我们的办公室IP地址),我需要将admin_server -> listen_url更新为0.0.0.0:3333

我选择将其他所有内容保留为默认值。 虽然此配置HTTPS用于我们与管理服务器的交互(Gophish自动创建),但它仍将未加密的HTTP用于电子邮件客户端与Gophish服务器之间的任何通信。 可以将其切换为使用HTTPS,但需要由受信任的证书颁发机构签名的SSL证书,否则收件人的电子邮件客户端将显示警告并放弃游戏。 因此,我选择了现在不启用HTTPS,因为我不会通过表单收集数据,所以我只会使用登录页面来显示一条消息,表明这是网络钓鱼测试。 但是,我将在以后的文章中介绍如何将HTTPS配置为可选步骤。

我还选择将数据库保留为sqlite。 如《 Gophish用户指南》的“安装”页面中所述,可以使用MySQL,如果您认为sqlite可能不足以满足您的需要,则希望使用RDS,或者只是喜欢使用RDS。 同样,我将在以后的故事中介绍如何通过MySQL启用Gophish。

启动脚本

虽然我本可以在交互式外壳中启动Gophish,但我更喜欢将其作为服务启动,这意味着它将在系统启动时启动。 为此,我提到了从安装页面链接的此问题。

我稍微修改了脚本以使其与我的安装位置匹配,因此它变成了:

  #!/ bin / bash 
#/etc/init.d/gophish
#用于停止/启动gophish应用程序服务器的初始化文件

#chkconfig:— 64 36
#说明:停止/启动gophish应用程序服务器
#processname:gophish
#config:/opt/goapps/src/github.com/gophish/gophish/config.json
  #定义脚本变量 
  processName = Gophish 
工艺=糊涂
appDirectory = / home / gophish / gophish
日志文件= / var / log / gophish / gophish.log
errfile = / var / log / gophish / gophish.erro
  start(){ 
回声“开始'$ {processName}'...”
cd $ {appDirectory}
nohup ./$process >> $ logfile 2 >> $ errfile和
睡觉1
}
 停() { 
echo'停止'$ {processName}'...'
pid = $(/ usr / sbin / pidof $ {process})
杀死$ {pid}
睡觉1
}
 状态() { 
pid = $(/ usr / sbin / pidof $ {process})
如果[[“ $ pid”!=“”]]; 然后
echo $ {processName}'正在运行…'
其他
echo $ {processName}'没有运行…'
科幻
}
 案例$ 1 
start | stop | status)“ $ 1” ;;
埃萨克

是的,它作为root用户运行,但是绑定到端口80是必需的。您可以将自己喜欢的Web服务器配置为Gophish前面的代理,但这是读者的练习。

现在,我需要使用sudo权限采取一些步骤,因此退出了以gophish用户身份运行的gophish

 出口 

我将上面的初始化脚本放在/etc/init.d/gophish

 须藤vi /etc/init.d/gophish 

(粘贴并保存)

我将此文件的权限更改为适当的初始化脚本:

 须藤chmod 744 /etc/init.d/gophish 

我让Gophish在启动时启动:

 须藤chkconfig gophish on 

我为启动脚本中引用的Gophish创建了日志目录:

 须藤mkdir / var / log / gophish 

我开始了Gophish:

  sudo服务gophish开始 

我检查了/var/log/gophish ,这似乎很高兴。 我还检查了过程是否仍在:

  ps -ef | grep [g] ophish 

这使我进入了“安装”页面的末尾,因此我切换到了“入门”页面。

使用Gophish入门

在浏览器中,我通过HTTPS连接到端口3333上的弹性IP地址:

https://11.22.33.44:3333/

我必须在浏览器中接受自签名证书。 请记住,这仅是用于管理控制台,我们的电子邮件收件人无需这样做。

我使用默认凭据(admin / gophish)登录

我做的第一件事是通过“设置”更改管理员密码

在这里,我遵循了Gophish用户指南的主要文档页面,并着手创建一个测试组,仅包含我自己的AirWalk电子邮件地址,然后创建一个测试电子邮件模板和登录页面。 我不会在这里重新创建文档,因为除了以下内容,我没有做他们没有涉及的任何事情:

  • 要在目标网页中使用图片,我必须将其上传到服务器并放在/home/gophish/gophish/static-endpoint -该目录在文档中已提及,但不存在,因此必须创建首先。
  • 它在文档中进行了介绍,但是在设置我的电子邮件模板时,模板值{{.URL}}用于表示广告系列的目标网页,因此,在创建HTML电子邮件模板时,单击链接按钮,然后只需输入与{{.URL}}完全相同的网址

实际发送邮件

在Gophish中创建发送配置文件时,我不得不回到sysadmin的思想。 我实际上将如何发送邮件? 我可以使用谁的SMTP中继?

“所以当你靠近我时,亲爱的你听不到我的声音,SES”

当我在AWS中创建电子邮件时,我想尝试使用亚马逊自己的简单电子邮件服务(SES)。 我简短地考虑了AWS支持是否将我的用例认为足够好,可以从SES沙盒中删除(简而言之,当您首次开始使用SES时,您就在“沙盒”中,这不允许您发送电子邮件给您控制的地址以外的任何人。您必须要求AWS支持以允许您向陌生人发送电子邮件)。 我想如果你不问,你就不会。 剧透警报:一切都很好,因此阅读下一部分并不浪费您的时间。

SES在圣保罗不存在,所以我选择了弗吉尼亚北部地区,因为它“很近”( 距离5,000英里 )。

在SES控制台中,我选择验证新域 ,添加我的域并选择生成新的DKIM设置:

验证SES中的新域

然后,SES为我显示了一些值,以作为TXT,MX和CNAME记录添加到我的域的DNS中:

我的域的DNS设置以启用SES

通过我的域名注册商的控制面板,将这些记录添加到我的域中很简单。

当我为假域名编辑DNS时,我决定添加一个A记录,该记录指向我们Gophish服务器的弹性IP地址,以后将很有用。

  www.airwalk-consulting.com A 11.22.33.44 

短时间后,该域显示为“已启用发送”。

我的网域已启用发送功能

然后,我在SES控制台中选择SMTP设置,以获取我需要添加到Gophish中的发送配置文件中的信息。

我还必须单击“ 创建我的发送凭据” (如上面的蓝色所示)以获取一些SMTP身份验证凭据。 这将以带有密钥和秘密密钥的IAM用户的形式创建SMTP用户名和密码。 我记下了这些,以后再放入Gophish。

我仍然在SES沙箱中,因此为了执行一些测试,我需要验证SES的收件人域。 我在SES控制台的“电子邮件地址”中添加了我的真实公司电子邮件地址,并通过单击SES发送给我的电子邮件中的链接对其进行了验证。

验证收件人域以进行SES测试

回到Gophish,我现在拥有创建发送资料所需的一切。

创建一个新的Gophish发送配置文件
  • 发件人:我在新购买的域中选择了任意电子邮件地址
  • 主机:我使用了“ SES SMTP设置”页面上列出的SMTP服务器,端口部分带有:25
  • 用户名/密码:IAM样式的凭据已创建并记下

然后,我选择发送测试电子邮件保存个人资料

测试结束在我的垃圾文件夹中,这使我问自己另一个问题……

更多网络钓鱼方法

我们是否应该在公司邮件服务器中将“狡猾”域列入白名单?

垃圾邮件过滤器可以正常工作-测试电子邮件最终出现在我的垃圾文件夹中,并发出警告,警告它看上去可疑,即使此时它甚至不包含任何链接或附件。 我在较早的故事《网络钓鱼理论》中更详细地讨论了一个主题,即我是否应该故意删除针对网络钓鱼测试领域的这一技术保护层。 我的结论是: 当然可以! 我们知道那里有合理的技术来阻止可疑电子邮件,希望我们都在使用其中的一些技术,但我们在这里要测试的是人员。 因此,我在公司邮件服务器上将我的模仿域列入白名单,然后重新发送测试。 这次它降落在我的收件箱中,没有任何警告。 繁荣。

是时候运动了!

您可以在广告系列中将所有内容组合在一起。 我使用前面创建的模板,着陆页和发送配置文件创建了一个测试广告系列。

我的第一个Gophish广告系列

一切都是不言自明的,并且《用户指南》中的“广告系列”页面对此进行了解释。

对于URL,我使用了我们之前在DNS中设置为A记录的Gophish服务器的主机名。

点击启动广告系列后,我不得不接受几次我真正想立即启动测试广告系列的操作。

我的电子邮件到达了我的工作收件箱。 链接转到我的登录页面,我可以在Gophish仪表板中查看广告系列的状态:

Gophish竞选结果

失去那些训练轮

是时候离开SES沙箱了。 我向AWS发送了一个支持请求,请求将SES服务限制增加到每天100封电子邮件,我认为这并不太贪心,对我打算使用其服务的目的完全诚实。 然后,我不得不等待机票得到答复。

时间流逝

在几天之内,AWS接受了我的请求,并给我每天限制50,000条消息。 远远超出了我的需要,但这很好。

巨型鳟鱼,由我

让我们抓些网络钓鱼

一旦AirWalk的每个人都确认他们已经完成了培训,就该创建一个“真实的”运动了。

我选择了公司内部合适的目标群体。 您如何选择执行此操作将取决于您的组织。 也许您将针对每个人,也许是特定部门,或者可能是各个部门的一部分。

在Gophish管理界面中,我创建了一个新组,并使用“ 批量导入用户”选项上传了CSV文件,而不必手动输入每个人的详细信息。

在Gophish中创建一个新组

如您所见,如果您下载示例CSV模板,则格式非常简单:

 名,姓,电子邮件,职位 

我将工作职位留空,因为我不会使用它,此外,它是帮助人们准确地收集信息的工具。 我花了一段时间的一件事是意识到我必须将列标题(如上,来自模板)留在文件的第一行中,否则它将不会从文件中获取任何数据。

接下来,我创建了一个更加“现实”的电子邮件模板,邀请我的同事通过与我们的Intranet有关的链接阅读有关AirWalk的英国脱欧计划的全部信息。 这不是最初的想法,因为网络钓鱼者以从时事中选择受欢迎的话题来激起人们的兴趣并使他们从考虑发送者的有效性上分散注意力而闻名。

我还创建了一个更有趣的着陆页,其中明确指出读者已参加了AirWalk网络钓鱼测试,但我仍然忍不住让Matrix风格的绿色雨水落在背景上。

我的网络钓鱼测试登录页面

然后,我创建了一个新的发送配置文件,作为我之前创建的测试副本的副本创建,这意味着SMTP服务器和身份验证详细信息都已预先填充。 我唯一更改的是发件人地址和友好的名称,以便更适合电子邮件的内容。

完成这些操作后,我可以创建一个新的广告系列,在其中选择新的电子邮件模板,登录页面和发送配置文件。

在Gophish中发起新的战役

然后,我单击了Launch Campaign,确认了我的意图,然后开始了乐趣。

然后,我可以在广告系列结果页面中监视广告系列的状态。 如我们所见,一个人已经单击了电子邮件中的链接。 糟糕:

Gophish竞选活动状态

发送电子邮件后,我很快就在广告系列结果仪表板中花了很多时间。 这是一个测试活动的结果页面的示例。 如果您在登录页面上放置了表格,它会在发送/打开/单击的电子邮件以及人们是否提交数据的上方显示一个线性时间轴。

Gophish广告系列结果示例

使用仪表板上的数据,当每个人打开电子邮件时,我将他们拉到一个专用的Slack频道中。 在该渠道中,我要求他们将有关电子邮件的任何对话都发送到该特定地点,而不是在更一般的渠道或办公室中公开进行。

跟进

在我进行了第一次公司范围内的网络钓鱼测试之后不久,在一次全体会议上,我们进行了一次建设性的会议,向我介绍了结果。 我们讨论了单击不良链接并打开恶意附件的各种后果,然后我就如何避免成为网络钓鱼或其他类型的网络攻击的受害者提供了实用建议。 我们同意提供进一步的培训并进行更多的测试,以保持现有和将来员工的网络钓鱼意识。

结论

我喜欢Gophish,它很容易为您自己的公司进行网络钓鱼测试。 我们最初的主张是正确的,即我们不需要聘请第三方公司来这样做,并且当然也不会花费大量时间。 我仍然可以理解为什么较大的公司可能将整个事情外包,但是如果您具有足够的技术和权限,则一定要看看Gophish,尤其是如果您目前根本没有任何形式的网络钓鱼测试。

网络钓鱼教育,吉姆式