通过伪造Tor隐藏服务实现网络钓鱼的技术分析

写在前面的话

SMS Privacy(一个使用比特币购买匿名手机号的服务)现在已经成为了一种Tor隐藏服务,但现在大约只有不到10%的用户会以这种隐藏服务的方式来使用它。在这篇文章中,我将跟大家分析一下攻击者如何使用Tor隐藏服务来创建一个钓鱼网站。

概述

今天故事的主人公是Charlie,当时他用Google搜索了“site:*.onion.to smsprivacy”的相关信息,并且得到了意想不到的结果。

smspriv6fynj23u6.onion是一个合法的隐藏服务名称,但是在搜索结果中却出现了另一个看起来非常相似的网站:smsprivyevs6xn6z.onion。

经过简单的分析调查之后,他发现该网站只是一个简单的代理:页面请求首先会发送给一个钓鱼网站,然后最终被转发到真正的隐藏服务,最终返回响应数据。但是,这里还存在一些奇怪的地方。

缺少Content-Length 头

Content-Length 头可以告诉HTTP客户端需要接收多少个字节的内容。对于一个配置不当的代理服务器,如果传递的内容没有改变的话,那么Content-Length 头就不会发生变化。因为它知道内容不变的话数据的长度肯定不会变。

这也就意味着,如果代理服务器认为内容的长度可能会发生变化的话,那么就说明在某些情况下,服务器已经准备好去修改数据包的内容了。

但是为什么不可以根据修改版的数据包内容来写入相应的Content-Length呢?

原因很可能是为了降低页面的加载时间:如果代理不需要事先知道数据包的长度,那么它就可以在修改完数据包的内容之后直接将内容发送给客户端了。如果它还要读取所有的内容,然后进行修改,最后再将所有数据进行转发的话,这样就会增加页面的加载时间并引起不必要的怀疑。

Connection 头错误

下面给出的是合法网站与钓鱼网站响应头之间的对比:

合法网站:

钓鱼网站:

Connection 头会从keep-alive被重写成[objectObject]。当你将一个对象(如果这个对象没有实现toString()方法)转换成字符串的时候,你将会在JavaScript中看到这种转换的发生,这对于我们分析代理服务器运行的是哪一种软件提供了非常有帮助的线索。

经过分析之后,我认为它很有可能使用的是NodeJS。我在node-http-proxy或Harmon(用于修改响应信息的中间件)中都没有发现任何可以触发该漏洞的地方,所以这很有可能是攻击者自己实现的。如果你知道有哪一款软件中的漏洞可以允许将Connection头修改为[object Object]的话,请一定要告诉我。

除此之外,我还添加了一些Javascript脚本来对这个钓鱼网站进行了进一步的分析,并且发现该网站采用了一种额外的缓存机制,其目的应该还是为了降低页面的加载时间。

隐藏服务的地址发生了改变

代理似乎会将smspriv6fynj23u6.onion的所有实例全部重写到smsprivyevs6xn6z.onion,但有意思的是大小写会发生变化。

比特币地址发生了改变

比特币是这个钓鱼网站真正的目的,一般来说,钓鱼网站的目标是为了窃取用户的帐号凭证,但是这个网站的目的似乎更加直接,它就是要骗用户的比特币。(注:其中的一个比特币地址:1GM6Awv28kSfzak2Y7Pj1NRdWiXshMwdGW)

当用户首次访问支付页面的时候,页面的加载会有一定的延迟,这很可能是后台正在生成新的比特币地址。所有新生成的比特币地址会以文本形式显示出来,但支付页面上的二维码却没有发生变化,扫描之后出来的仍然是原本合法的地址。

网站如何分发给用户

我在分析的过程中还发现了另外两个隐藏服务:

1. 7cbqhjnpcgixggts.onion:”The onion crate”:这是一个Tor隐藏服务列表,类似于以前的“Web目录”,但这是针对Tor的。其中的钓鱼版本会被专门标记为“钓鱼链接”。 2. hss3uro2hsxfogfq.onion:”not Evil”:这是一个针对Tor隐藏服务的搜索引擎。搜索“sms privacy”后,返回的第一条结果是合法网站,而第二条结果就是钓鱼网站。我点击了钓鱼网站下面的“report abuse”按钮,但是现在这个网站还是没有被移除。

这跟我想的完全不一样,我一开始以为攻击者可能会在Twitter、博客或者其他诸如此类的地方放置一条钓鱼链接的,而不是直接通过搜索引擎显示给用户。如果我想让用户去访问我的钓鱼网站,我肯定不会将其标记为“钓鱼链接”。我不认为“The onion crate”的管理人员与此事件有关,我感觉“not Evil”搜索引擎的运营者会是此次事件背后的始作俑者,不过我现在也无法确定。因为如果我要开发一个专门给用户发送钓鱼链接的搜索引擎,那我根本不会给用户返回非钓鱼网站的链接,尤其是第一个结果就是合法网站。

还有一种可能,就是这一网络钓鱼活动并没有正式开始,但“The onion crate”在2017年5月17日就将其标记为了钓鱼链接,说明它的存在已经有一定的时间了。

用户如何保护自己

SMS Privacy的用户首先要确保自己在浏览smsprivacy.org时使用的是HTTPS,或者说如果用户使用的是Tor,那么smspriv6fynj23u6.onion是唯一的合法隐藏服务地址,其他所有类似的地址都是钓鱼网站。

进一步研究

我猜测,运行这个代理的软件同时还代理了很多其他的隐藏服务。当你想自己编写一些代码来代理一个隐藏服务时,你只需要重写域名和比特币地址,基本上就可以搞定了。

接下来,我又进行了一些深入研究。我查看了“The onion crate”并寻找其他的钓鱼链接,然后我找到了一个在响应头中给出了Connection: [object Object]并将网络数据转发给伪造的SMS Privacy隐藏服务地址的钓鱼网站。分析后发现,这个隐藏服务与SMS Privacy合法服务毫不相关,但它能够给用户提供伪造的SMS Privacy内容!这也就意味着,这两个钓鱼网站很可能是跟同一个黑客或黑客组织有关的。HTTP数据如下所示:

总结

实际上,攻击者可以轻而易举地利用这项技术来发动大规模攻击,因为只需要一个周末的时间就可以开发出一个可以正常使用的版本。而且我相信在不久的将来,会有更多的攻击者使用其他的Tor隐藏服务来制作钓鱼网站。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-10-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏架构师之路

微信为啥不丢“离线消息”?

需求缘起 当发送方用户A发送消息给接收方用户B时,如果用户B在线,之前的文章《微信为啥不丢“在线消息”?》聊过,可以通过应用层的确认,发送方的超时重传,接收方...

4276
来自专栏IT技术精选文摘

带着问题学习分布式系统之中心化复制集

假若我说有三个节点(计算机)要维护同一分数据,如果你对分布式系统并不了解,那么你可能会有什么问题呢,我想可能有两个最基本的问题:   为什么同一份数据要保存多...

2079
来自专栏后端技术探索

确保nginx安全的10个技巧

Nginx是当今最流行的Web服务器之一。它为世界上7%的web流量提供服务而且正在以惊人的速度增长。它是个让人惊奇的服务器,我愿意部署它。 下面是一个常见安全...

682
来自专栏枕边书

linux的“自动化”

linux的“自动化” linux系统的web网站在运营状态时,我们常需要对网站进行维护,例如查看资源剩余并做出响应、日志分割、数据整理,在特定状态执行特定任务...

2279
来自专栏HTML5学堂

移动端及时调试工具 - weinre使用方法

HTML5学堂:在前一篇文章当中,我们借着weinre讲解了NodeJS中的一些简单命令,也讲解了weinre的安装方法,今天我们把weinre的使用“完结”掉...

2903
来自专栏编程

自己打造Android Studio插件,提升开发效率

如果能够让重复工作变得自动化,比如我通过打造一个插件,提升了5%的工作效率。节省下来的时间,干点什么不好呢?

1.2K10
来自专栏飞雪无情的博客

便捷自动的访问Google 开发者资源网站

Google IO 2016年的大会在北京召开的时候,Google公布了一批Google中国的开发者资源网站,方便中国的开发者访问以及进行软件网站等开发,为了纪...

1043
来自专栏编程微刊

[慕课笔记] node+mongodb建站攻略

2455
来自专栏EAWorld

微服务系统之认证管理详解

微服务大行其道,微服务安全也是非常热门的话题。本文向大家分享微服务系统中认证管理相关技术。其中包括用户认证、网关和 API 认证、系统间和系统内的认证,以及我们...

3011
来自专栏Netkiller

网站静态内容出版解决方案

目录 1. 架构总览 2. cdn 3. www 服务器 4. cms 服务器 5. img 6. Ajax 局部更新与缓存 1. 架构总览 www 负责静态文...

3355

扫码关注云+社区

领取腾讯云代金券