社工技术与双因素验证机制
社会工程学活动对于企业来说一直都是很大的威胁,因为这种攻击手段针对的是整个安全环节中最薄弱的一环:人。在一般的攻击场景中,攻击者会窃取目标用户的用户名和密码,并存储下来以备后续使用,而双因素身份验证(2FA)或者多因素身份验证(MFA)就是专门应对这类威胁的。
2FA相当于在普通的用户名和密码之上又加了一层验证机制,最常见的两种2FA是“一次性密码”和“推送通知”。“一次性密码”是由一种二级设备生成的,比如说密码生成器,这种设备是跟用户绑定的。这种密码一般会在30秒到60秒之后过期,并且不可重复使用。“推送通知”需要给用户的移动设备发送确认请求,用户确认之后便可成功登录。因此,这两种方法可以有效防止传统的钓鱼活动。
虽然安全专家强烈建议个人或商业软件采用2FA,但是这并不是一种可靠的解决方案,因为实时钓鱼技术可以轻松打败2FA。这种钓鱼攻击技术需要涉及攻击者跟目标用户之间的实时交互,比如说在钓鱼网站会提示用户输入用户名、密码和一次性密码,点击登录之后会显示一个“登录成功”页面,但是这个一次性密码并没有被使用,而是发送到了攻击者手中。此时,攻击者就会有一个非常短的时间窗口并在用户凭证过期之前去使用它了。
很多攻击者在社工活动中都会使用这些技术,而且早在2010年就已经出现了实时钓鱼攻击了。但是这种类型的攻击在很大程度上却被人们忽略了,因为这种攻击的实施难度非常大。本文的目的就是让人们改变这种观念,并让人们意识到这个问题,然后鼓励安全社区去研发新的解决方案。
为了提升社工技术评估的能力,我们研发了一款名叫ReelPhish的工具,而这款工具可以简单演示实时钓鱼技术。该工具的主要组件运行在攻击者的系统中,它运行了一个Python脚本并实时监听攻击者所搭建的钓鱼网站,并使用了Selenium框架来驱动Web端。该工具能够控制攻击者的Web浏览器并访问特定Web页面、跟HTML对象交互、以及爬取内容。
ReelPhish的二级组件就是钓鱼网站本身,嵌入在钓鱼网站中的代码可以将捕捉到的用户凭证发送到攻击者的设备中。当钓鱼工具收到凭证之后,它会使用Selenium来启动浏览器,并在合法网站上使用凭证完成登录。钓鱼网站服务器跟攻击者系统之间的所有通信都是通过加密SSH信道完成的。
下图显示的是ReelPhish的工作流程:
工具下载
https://github.com/fireeye/ReelPhish
1. 安装最新版本的Python 2.7.x;
2. 安装Selenium;
3. 下载Web驱动器:
IE:http://www.seleniumhq.org/download/
Firefox:http://www.github.com/mozilla/geckodriver/releases/
Chrome:https://chromedriver.storage.googleapis.com/index.html?path=2.35/
ReelPhish由两部分组成:钓鱼网站处理代码以及Python脚本。钓鱼网站可以根据需求来设计,PHP样本代码在GitHub代码库的/examplesitecode目录中,样本代码的功能是将用户名和密码从HTTP POST请求中提取出来并发送给Python钓鱼脚本。钓鱼脚本会监听一个本地端口,并等到包含凭证的数据包抵达。抵达之后,钓鱼脚本会打开一个新的浏览器窗口实例,然后访问特定的URL地址,并使用浏览器提交收集到的凭证。
我们建议大家使用反向SSH信道来处理钓鱼网站和Python脚本之间的通信,因此我们的样本PHP钓鱼网站代码会将凭证提交到localhost:2135。
1. 你必须在–browser参数中指定你所要使用的浏览器。可支持的浏览器包括InternetExplorer (“–browser IE”)、Firefox(“–browser FF”)和Chrome (“–browserChrome”),支持的操作系统包括Windows和Linux,Chrome的配置比较麻烦,具体请参考。
2. 你必须指定URL地址,脚本将会自动访问这个URL并提交凭证数据。
3. 其他可选的参数包括:
-设置用于调试的日志参数(–loggingdebug),观察并记录事件日志;
-设置提交参数(–submit)来自定义浏览器的提交元素;
-设置覆盖参数(–override)来忽略丢失的表单元素;
-设置页面数量参数(–numpages)来增加认证页面的数量;
文章出处:FreeBuf
你可能喜欢