前言
在企业⽹络安全建设的道路上,随着防⽕墙、WAF、抗DDoS等安全设施的部署, 企业⽹络边界逐渐稳固直至难以攻破;企业在部署零信任等安全接⼊设施后,模糊化的企业边界也让外部攻击者难以发现攻击⼊⼝。虽然企业安全建设逐渐完善,但仍存在薄弱点,“人为因素”便是其中之一,企业员⼯安全意识成为影响企业安全的最⼤隐患,未授权访问、弱密码等问题则成为了企业中常⻅的安全漏洞。
钓⻥邮件就是针对“人为因素”进行的攻击⼿段之一,通过内部钓⻥邮件演练则是提⾼员⼯安全意识的有效途径,可以通过实战演练让员⼯亲身体验安全攻击,以达到提前遏制潜在安全⻛险的目的。
近期天翼云安全实验室就实践了内部钓鱼邮件演练,并从演练中总结了一些技术经验。
一、明确钓鱼邮件发送类型
常见的邮箱类型有以下几种,首先进行分析,明确最适合发送钓鱼邮件的邮箱类型:
公共邮箱:通过如163邮箱、qq邮箱等类型的公共邮箱发送钓⻥邮件。被钓⻥者看到企业邮箱收到来⾃外部公共邮箱的邮件,极易产⽣不信任感,这样的钓⻥邮件是很容易识破的。
企业内部邮箱:通过使用企业内部邮箱发送钓鱼邮件可以直接让被钓鱼者产生信任,但是实际情况下钓鱼邮件攻击来自企业外部,而外部攻击者通常难以获取企业内部邮箱用于钓鱼,所以这种方法实战意义较低。
与企业内部邮箱相似的外部邮箱:例如针对apple公司的钓⻥邮件攻击,使⽤@app1e.com或者@apple.net的邮箱,这些邮箱类型极易迷惑安全防范意识不高的内部员⼯。所以本⽂将采⽤该⽅法进⾏钓⻥邮件演练。
二、进行域名注册
要使用特定@后缀的邮箱,就需要注册对应的域名,例如要使用@app1e.com这个邮箱,就需要先注册app1e.com这个域名。注册域名是个很容易的事情,基本上只要钱到位就可以。其实除了com、cn等热门域名后缀之外,如.xyz、.me之类的域名都挺便宜,但作为钓鱼邮件效果稍有所折扣。
三、配置邮箱服务器
拥有了自己域名就可以基于这个域名去搭建邮箱服务了,从而拥有属于自己的@邮箱。
⼀种⽅法是⾃⼰搭建邮箱服务器,优势是没有发件限制,⽽缺点是费时费⼒。
第二种方法是使⽤企业邮箱服务映射到⾃⼰的域名上,例如注册网易企业邮箱或者注册企业微信会附送企业邮箱服务,优势是使用便捷,缺点是是存在⼀些限制。⽐如⽹易的企业邮箱会限制邮箱每⽇发件数,企业微信邮箱会在发件环节进行垃圾邮件监测。除了⽹易和腾讯之外,还有zoho等企业邮箱可以作为选择, 简单且免费。
综上所述,本次演练不考虑⾃⼰搭建邮箱服务器,使用免费企业邮箱即可满⾜需求。何况连发件垃圾邮件监测都不能绕过,还怎么指望能钓到⻥?
在上述网站完成注册之后,最重要的一个步骤就是通过DNS解析把自己域名的MX记录解析到其对应的邮箱服务器上,这样才能通过自己的域名使用企业邮箱服务。例如使用163企业邮箱的话,需要配置如下的DNS记录:
mx.ym.163.com 优先级5
使用企业微信邮箱的话,需要配置的有2条:
mxbiz2.qq.com 优先级10
mxbiz1.qq.com 优先级5
最后就是在邮箱管理平台上添加企业邮箱帐号,完成一系列操作之后,就得到了钓鱼专属的邮箱,例如admin@app1e.com。
四、明确钓⻥⽹站平台类型
钓鱼网站一般使用一个伪造的登录页,用于骗取企业员工的帐号密码,例如伪造的公司OA登录页、Gitlab登录页等。但通常情况下外部攻击者并不知道内部OA长什么样,所以使用伪造Gitlab这种公开平台的登录页会比较具有实战价值。不过Gitlab只能针对开发人员进行钓鱼,所以本文使用Confluence这个应用广泛的文档平台进行钓鱼网站的搭建。
五、钓鱼⽹站搭建
因为钓鱼网站只需要一个登录页,所以没必要真的搭建一个Confluence,可以通过zoomeye等控件测绘工具,寻找一个互联网上开放的Confluence站点并获取登录页。
以Chrome为例,只要Command + S
就能把网页静态数据存储到本地。
不过直接打开Chrome存储下来的index文件,会发现一些元素缺失,例如左上角的LOGO没有了。可以通过浏览器调试网络请求发现缺失的元素(一般是绝对路径访问,所以发生了CORS),需要一些手工操作去下载这些确实的元素,来完善整个登录页面的展示。
在正经的钓⻥攻击中,⽤户点击登录按键之后,⼀般会跳转到真正的confluence⻚⾯,这样被钓鱼者会以为⾃⼰只是输错了密码,⽽不会意识到被钓⻥。但在钓⻥演练中就不⽤这么麻烦了,⼤可以直接提醒被钓鱼的内部员⼯,以提⾼他们的安全防范意识。
接下来需要在代码上进行一些修改,以符合钓鱼演练的需求:
- 把表单提交的HTTP方法由
POST
改为GET
,这是为了方便后续的日志分析; - 把表单提交的地址改为
phish.html
,这是一个提醒员工被钓鱼的页面; - 创建
phish.html
,并写入警示语句。
<form name="loginform" method="GET" action="phish.html" class="aui login-form-container">
就绪之后,通过伪造的confluence登录页进行登录操作后,用户会进入phish.html
页面。由于使用了GET提交表单,因此用户输入的用户名和密码都明文传输在URL中,这样后续分析日志会比较方便。
六、钓鱼⽹站发布
钓⻥⽹站设计完成后即可部署在公⽹上,这样才能让其他⼈访问到。可以⾃⼰购买⼀个具备公⽹IP的服务器进⾏搭建,也可以搜索⽹站搭建服务来使⽤(有⼀些网站搭建服务是免费的)。
在第二步注册完成钓⻥邮箱域名可以⽤作钓⻥⽹站的域名,⽐如confluence.app1e.com,使⽤域名的DNS解析A记录到搭建钓⻥⽹站的服务器IP上即可。
七、gophish简介
gophish是一个开源用于钓鱼邮件的管理平台,方便对钓鱼邮件的模板、发件邮箱、钓鱼进程等进行管理。
八、发件配置
配置上述注册的企业邮箱admin@app1e.com作为钓鱼邮件的发件邮箱,以使用163企业邮箱为例,需要配置Host为163企业邮箱的SMTP服务地址与端口smtp.ym.163.com:25
。
企业微信邮箱使用的SMTP服务端口为smtp.exmail.qq.com:25
。
九、钓⻥邮件模板编写
接下来编写钓鱼邮件内容,gophish提供了HTML格式编写邮件,这样可以编写炫酷的钓鱼邮件,比那些纯文本的邮件要正式得多。
这里需要注意,钓⻥邮件内容中一定要放置钓鱼网站的链接。得力于HTML的加持,使用<a>
标签创建的链接,让用户以为点击了apple.com,实际上却点击了app1e.com。
而URL中的参数{{.Rid}}
则在gophish真正发送邮件时,替换为用户的唯一标识,用于后续定位是哪个内部员工点击了钓鱼链接。
十、⽬标配置
通过User & Groups模块可以使用csv文件导入内部员工的邮箱。
十一、发起钓⻥
万事俱备,通过Campaigns模块来最终发送钓鱼邮件。选择发件邮箱配置、选择钓鱼邮件模板、选择目标邮箱组,点击Launch Campaign就完成了钓鱼邮件的发送。在Campaigns模块下可以查看钓鱼邮件发送的详情。
十二、收获
本次演练采用查询日志的方式来监控钓鱼的结果,以得知哪位内部员工点击了钓鱼邮件、甚至输入了用户名密码。由于把表单的提交方式改为了GET,所以通过访问日志(access.log)就可以。
例如使用Nginx服务器搭载的钓鱼网站,则可以在/var/log/nginx
目录下,执行命令sudo cat access.log | grep trid=
过滤得到钓鱼邮件的点击结果;执行命令sudo cat access.log | grep phish.html
可以过滤得到在钓鱼网站输入了用户名密码的信息。
(此处本想贴图,但是需要打码太多,就省略了)
参数trid
的值为每个用户的标识,通过该值就可以在gophish中查询得知点击了钓鱼邮件的员工邮箱,从而对其开展精准的安全意识培训。例如通过上述命令过滤得到字段trid=5V6PL8R
,可以在Campaigns模块中进行对应查找:
声明
本⽂内容仅限企业进⾏内部钓⻥邮件演练学习参考,请勿⽤于钓⻥攻击,否则后果⾃负。请大家遵纪守法,共同维护网络安全绿色环境。