前 言
5月12日一场互联网领域的“巨震”席卷全球,wannacry蠕虫式勒索软件已惊人的速度席卷上百国家,所到之处,哀鸿遍野,寸草不生(词穷编不下去了),上一张来自malwaretech的全球感染地图自己感受。
各安全公司的大牛们从感染初期便开始进行样本分析,发表诸多技术分析文章,其中均提到了wannacry使用的三个比特币账户,本文便是利用比特币交易明细公开化的特性,从数据的角度扒一扒这三个账户的秘密。
为什么会是比特币
当中招者绝望,想花钱买平安时,才发现对方只支持比特币支付,这让日常用惯快捷支付的客户们情何以堪。选择如此小众的支付方式使得门槛提升,用户体验太差,让不少到手的鸭子飞了,这也一定程度上影响了病毒制作者的收益。Why???!!!为什么会选择比特币进行支付?
比特币已不是新鲜事物,自诞生以来,便凭借去中心化、高匿名性的优势快速发展,也因匿名性吸引了不少犯罪力量关注,给比特币的发展带来不少争议。勒索软件使用比特币已经由来已久,安全公司曝光的诸多勒索软件,为了反追踪溯源绝大部分均使用该支付手段。
A:与以银行为代表的中心化交易体系相比,比特币采用分布式结构将所有交易记录分布存储在不同的区块链中,没有统一的中心节点,且所有交易记录均公开。同时用户可无需实名认证,随意生成若干个比特币钱包地址,且钱包之间的转帐可随意进行,无需中间机构认证,这些因素共同确保了比特币钱包的高匿名性。由于比特币的使用模式与银行相比较为复杂,一定程度上屏蔽了很多潜在客户,为了降低使用门槛,满足市场需求,一些投资者成立比特币交易所,来提供货币兑换、交易等服务。但是交易所会以一些制度强制力或者帐户安全性为名,让客户提供更多的个人资料,这在一定程度上降低了比特币钱包的匿名性。这也导致勒索软件这样的专业化团伙会尽量避免去交易所进行交易,而选择地下市场交易。
A:银行的交易记录只能由交易参与者查看,而比特币的交易记录则是全网公开,至于为什么要这样做,感兴趣的童鞋可以查阅比特币的交易原理。有很多网站提供比特币交易记录的查询功能,在这推荐btc.com,在该网站上可以查看任何钱包、区块、矿产等基本信息。在交易记录上,我们可以很容易获取与本次交易相关联的前后交易记录,这样我们沿着上下游一直追溯就可以获取完整的比特币流向。
A:与银行转账一样,比特币账户的转账次数也是无限制的,且转账额度无限。通常电信诈骗集团为了逃避打击,常将大笔交易化整为零,分转入多个账户,然后跨境转出;而比特币账户无国籍属性,且每个人都可以注册N个账户,这更加降低了成本,犯罪集团会使用大量账户进行转账操作,从而提升分析者挖掘有价值信息的成本。需要强调的是,比特币的交易记录以区块的形式进行存储,而不是一对一存储,这就会导致如下图形式的记录出现。
从这条记录上我们只能看到输入\输出,无法精确到是哪一个账户转给哪一个账户,所以这也给分析工作带来一定干扰。在下一节中就可以体会到分析过程的复杂性,其交易资金流并非简单的链条关系就能描述清楚,而是复杂的树型结构,甚至是庞大的图。
准备数据源
巧妇难为无米之炊。在对数据分析前首先要做的就是数据采集,曾经有人在我评论下称我为“freebuf爬虫帝”,这次依旧老套路上python爬虫来扒数据,具体的技术细节就不再重复。
针对py爬虫的编写大体分两个路子:
1、基于url2、bs4等python库的爬虫;
2、基于scrapy等框架的爬虫。
推荐新手使用方法一进行编写,这样可以通过一次次的碰壁更清楚的了解爬虫的架构和底层技术细节;而老司机便可选用效率更高中间件更加完善的各类框架来进行数据采集。在本次爬取中为了去重引入redis来处理重复数据,使用mysql数据库进行本地化存储数据,数据分析则由sql语句直接完成。
本次分析的交易记录均来自于逆向获取的wannacry硬编码的三个比特币账户:
115p7UMMngoj1pMvkpHijcRdfJNXj6LrLn
12t9YDPgwueZ9NyMgw519p7AA8isjr6SMw
13AM4VW2dhxYgXeQepoHkHSQuy6NgaEb94
另外有部分安全厂商分析显示,wannacry在连接TOR网络后,会动态为每个用户获取一个比特币收款账户,这样每台受害者的电脑都会得到不同的付款地址,分析人员也无法统计攻击者使用了多少个付款地址,牵扯到的勒索金额也无法确切统计。显然这已经超出本次分析的能力,所以本文只对上面的三个账户进行分析。
选取btc.com网站作为交易记录的数据源,对相关数据进行爬取分析,爬虫爬取数据的路线大致如下:
由钱包地址,可获取该钱包的所有交易明细。
由钱包页面的交易明细可以进入某次交易的详情页面。
交易信息都记录在区块上,而与本次交易相关联的区块(即比特币的上/下次交易信息)的链接,同样可在本页面获取(上图红色区域)。
由此可知,我们只要不断去迭代追溯交易的上下游,就可以获得整个比特币的运动轨迹,即资金流向。这样岂不是可以查到这三个账户的资金去向吗?很遗憾,截至发稿前,这三个账户没有资金流出,即没有构成下游来供分析者追查。
A:我们不妨大开脑洞猜测一下:
maybe1:这次事情波及范围太广,远超作案者预期,导致心怯不敢用钱; maybe2:这三个钱包只是掩护,从tor网络动态获取的钱包地址才是作案者真实使用的; maybe3:作案者根本就不是为了钱而来的。maybe4:.......(欢迎大家一起在评论区大开脑洞)
至此,我们无法对资金的去向进行分析,但是既然上游是可以查的,不妨让我们一起看看汇入这三个账户的钱都是怎么来的吧!!!
“数”说wannacry交易记录
爬虫主要收集两类信息:
由于交易区块中记录的账户并非一对一,往往出现多对多的形式,所以在存储时按条存储,分输入、输出两类。
对三个账户进行收集,三个账户共有300次交易,共532个输入账户,3790个输出账户。
从交易次数可以看出,12日wannacry爆发后,13日迎来了第一个交易高峰,共61次。随着15日(星期一)的到来,许多公司可能出于恢复业务的需要,选择花钱买平安,迎来了最高峰84次。
三个账户余额分布图可以看出金额基本均分,从一定程度上可以看出程序内部对各账户的选择是随机的。
其账户具体金额为
三个账户的第一笔交易id为cce780ee91f0eda86d733f8fa93e23eb676ea1dd43c0822353501de61414ece9,转入13AM4VW2dhxYgXeQepoHkHSQuy6NgaEb94账户。图11.png
其中最大的交易发生在下图,有1.999BTC。最小的则只有0.00000563BTC。
我们提取账户13AM4VW2dhxYgXeQepoHkHSQuy6NgaEb94的所有交易记录,画出资金关系图。
PS:红色点:交易区块;绿色点:比特币钱包账户;蓝色线:资金由钱包输入;橙色线:资金输出到钱包。
该图很明显看出位于中心的节点便是账户13AM4VW2dhxYgXeQepoHkHSQuy6NgaEb94,局部放大图。
然后顺着这个账户的所有交易记录向上追溯(由于数据量太大,只追溯一部分),得到的关系图如下。
如此复杂的图已经很难从中找到关系了。。。。希望大牛给出一个解决方案
为了降低难度,简化问题。现只对id为f25d1ab85c889d601f3981c7bd3d33c55e91ec549cf46d69104bbef30361c81e的交易记录进行追溯,并且只沿第一个输入账户向上追溯,即只把第一个输入账户的前一个交易块作为追溯路径,而不对其他输入项进行追溯,这样会减少节点规模。共提取184笔交易,涉及账户5446个,有一笔交易是来源于挖矿3437518aef70276e2b0101d7556e436a4cb00fc4dda6b5db9822b9aafb91be52。
上图为根据上述数据绘制的交易关系全局图,可以看到虽然经过了一定的简化,依旧形成了复杂的图。
局部放大图可以看到很多绿点连接同一个红点形成树状结构,这代表同一笔交易由多个账户共同完成。
红点为交易记录块,绿点为钱包,蓝线为转出,橙线的转入,这样我们就可以得到一条如上图所示的资金流向图。
写在最后
由于wannacry的三个账户并没有发生任何的转出行为,所以不能顺着资金的下游流向来进行分析,这是本文的遗憾之处。而对于比特币账户的匿名性,并不能确保在任何时候均有效,在本次勒索软件事件发生后,一些数据分析师则表示比特币在一定情况下是可以追溯的,只是需要更多的数据和成本来完成。大数据时代,只要有行为发生就会被记录,通过不同渠道来源的数据汇合分析后,也许就会破除数据的匿名性。