我是如何诱骗你的-高级钓鱼技术

经常有人问我如何进行钓鱼。email钓鱼是种很吸引人的攻击。成功实施一次email钓鱼需要有非常系统的方法。其中,前期准备阶段占用了整个攻击的大部分时间。

一个安全的邮件收发系统建立在多层次的架构之上,因此我们的钓鱼邮件有可能会被不同层次的安全层过滤掉。其中包括Email网关垃圾邮件过滤器、Outlook的“Junk Email”过滤器、杀毒软件、PS(入侵防御系统)、Web代理服务器、外出过滤等等。

现在我们已经了解了一些邮件系统安全层面常见的过滤, 下面我们讨论一下如何绕过他们。这些方法是从Brav0Hax和purehate对钓鱼攻击的讨论中总结而来。详情可以点击这里

枚举email地址

      我们首先要做的就是要找到一些email地址以作为攻击的目标。可以借助Jigsaw这个ruby脚本来快速的列举email地址目标。现在它已经支持数据库了,能够将结果输出为CSV文件。最新版本的Jigsaw地址为https://github.com/pentestgeek/jigsaw

 

jigsaw.com注册一个免费帐号,然后在命令行中输入你的用户名密码会使Jigsaw更好的运行。

 

email枚举的另一个较好的工具就是theHarvestertheHarvester是BT5中的一个python脚本,位于/pentest/enumeration/theharvester。该脚本能够利用不同的搜索引擎来找出一些email地址。

 


 

绕过杀毒软件

      因为已经有很多人已经讨论过如何绕过杀毒软件,所以我们不会花费过多精力来介绍它。想了解更多可以查看metasploit的evading antivirus 
      所谓知彼知己,百战不殆。如果你了解你所要对付的杀毒软件,那么肯定可以更好的进行钓鱼。我们可以通过DNS缓存窥探来获知目标主机上运行的是什么杀毒软件,这已有很多文章介绍过了。
      发送钓鱼邮件之前先在虚拟机上装个杀毒软件来看看是否会过滤我们的邮件。理想情况下我们需要安装与目标主机一个版本的杀毒软件,但是这不太可能。所以至少要安装Microsoft Security Essentials, AVG, Comodo等等。如果你的邮件连这些杀毒软件都不能通过,那你怎么能希望它会通过目标主机杀毒软件的检测呢。所以多花点时间测试一下是必要的。
     文件加过壳会被杀毒软件重点监控,但是文件保护会被多数杀毒扫描引擎忽略。如果你想保证你的payload能起到作用,可以购买一个证书,然后用SDK中的signtool.exe给你的软件加上签名,这样会使得你的程序更加可信。

外出过滤

我们有两种方式来绕过外出过滤:reverse_https或者reverse_tcp_all_ports

不了解reverse_tcp_all_ports?它实际上是一个实现反向TCP管理并监控“所有端口”的模块。事实上它只监听一个端口,我们需要把所有端口重定向到它监控的端口。这就需要用到iptables或者其他的软件来实现。

使用iptables举例,该命令将所有端口重定向到443端口(该端口上有multi/handler监听处理)。技巧之一就是把SSH监听的端口设为一个比65535大的值。

iptables -t nat -A PREROUTING -p tcp –dport 1:65534 -j REDIRECT –to-ports 443

reverse_https是另外一个payload,因为其通过metasploit建立一个加密隧道,所以IPS就很难知道传输的是什么内容了,从而无法监控恶意流量。它不仅能够压缩payload,而且能够自动使用IE设置的代理。总之,rev_https更像https,除非有能监控SSL的网关,否则就难以检测到恶意流量。

使用reverse_https时,我们可以设置LHOST=X.X.X.X , LPORT=443。因为多数公司不会限制https(443端口),所以多数情况下(除非有深层的包内容检测)reverse_https就能正常工作了。

钓鱼方案

 

在整个钓鱼过程中,这步应该最简单了。经验告诉我们无论怎样,总会有些2B青年喜欢点各种链接,嘿嘿,你懂的啦。

我最喜欢的方式就是伪装成某些IT公司的员工告诉别人要安装新的补丁,每个人都要安装更新,然后通过超链接把用户引至界面如下的网站。

phishing-website2-1024x796

个人而言,我喜欢使用社会工程学工具箱SET来快速克隆一个要伪造的网站。克隆之后可以在set/src/program_junk中找到这些HTML文件。

 

Web代理服务器

许多公司运行代理服务器来防止员工访问一些特定网站,这其中还有的带有杀毒功能用来检测web访问中的恶意流量,还有可能阻止员工下载可执行文件。

你也许会想怎么才能把我们的payload从钓鱼站点发送至无法下载可执行文件的用户那里。这时你需要花费些精力,可以给网站买个SSL证书。这样当用户访问你的网站的时候,两者之间就建立了SSL隧道连接。因为隧道是加密的,所以web代理服务器无法得知并阻止用户下载可执行文件了。

发送邮件

谈到发送邮件,有很多方式。首先要考虑的是发送欺骗邮件还是买个域名。本文重点讨论购买域名来发送邮件。

我是在GoDaddy上买的域名,因为买域名会带个免费的邮件地址,而这个邮件地址是非常适合用来钓鱼。其他服务商可能也会提供这种服务,但是我对GoDaddy很熟悉,所以就买了他们的域名。

在GoDaddy买域名之后登录,选择“email”旁边的 [+],点击绿色的launch按钮,之后打开email控制面板。

godaddy1-1024x925

然后选择 ‘create’按钮来创建email账户

godaddy2

通过像GoDaddy这样的服务商创建的email账户最大的优点就是会自动设置MX记录,这样就不需要你设置DNS来让邮件显得更正规。

之所以提到这个是因为很多Email网关会反向查询邮件来源的域名。如果该域名没有设置MX,许多网关就会丢弃该邮件。

mx-record

有些SMTP服务器有Whois功能,来判断邮件内容和邮箱对应域名提供的业务是否相匹配。我们可以登录GoDaddy,然后编辑Whois信息来伪装。如果想伪装成example.com,就需要编辑Whois信息使其看起来符合example.com的特征。

GoDaddy’s 修改whois信息的界面

Whois-926x1024

 

现在我们已经有了邮箱账户,接下来就要通过邮件客户端(如:Thunderbird)来收发邮件。用客户端发送邮件是挺好,但是我们还有更好的方式,那就是通过脚本来发送邮件。我写了一个ruby脚本sendmail.rb能够群发邮件。

经常有人问我是否能够追踪每个访问钓鱼网站的用户的信息。追踪执行payload或者输入信息的用户容易,但是追踪所有的用户就难了。

sendmail.rb能够追踪每个用户的点击,当然前提是邮件是通过它发送的。该脚本发送邮件之前会在钓鱼链接后加上经过base64编码的邮件地址。比如,如果钓鱼链接是http://example.com,sendmail.rb就会修改该地址为:

http://example.com/index.php?dXNlckBleGFtcGxlLmNvbQ==

一旦用户点击就会记录在Apache的access_logs中,显示有个index.php?dXNlckBleGFtcGxlLmNvbQ==请求,我们通过解码我们就知道哪个用户进入了该网站。我们可以编写脚本从access_logs中提取这些信息。

下面是用sendmail.rb 发送邮件给两个用户:

Screen-Shot-2013-01-29-at-1.43.41-PM

如果对sendmail.rb的实现方式感兴趣,可以留言评论告诉我,我会另写一篇文章来介绍下。

Metasploit Multi/Handler

通过Metasploit设置 multi/handler没有什么高深之处,不过我会介绍一下常用的设置。首先要创建一个资源脚本以防multi/handler死掉。

下面是我在启动一个reverse_https multi/handler之前设置的资源脚本

 

      我希望包含在multi/handler中的另外payload是修改后的Meterpreter脚本scraper.rb。该脚本默认情况下会列举系统信息,hash值,和其他有用的信息。个人而言我不喜欢获取hash值,这有可能导致杀毒软件杀死该会话。 所以我修改了scraper.rb让它仅仅使用ipconfig, net group “Administrators”和一些其他不会引起杀毒软件注意的命令。另外,还增加了每建立一个会话就给我发邮件的功能。
      下面是用ruby实现的发送邮件的代码:

下面是使用资源文件和msfconsole的截图:

multi-handler

总结:

我们已经介绍了如何绕过各种安全层的过滤来进行钓鱼攻击。希望对你有用。
原文链接:http://www.pentestgeek.com/2013/01/30/how-do-i-phish-advanced-email-phishing-tactics/

本文由网络安全攻防研究室(www.91ri.org)信息安全原创翻译并修改,转载请注明出处。