两年前正值Wannacry爆发不久,笔者发表了《“数”说Wannacry的比特币钱包》一文,受到很多小伙伴的关注。文章从比特币基本特性、交易数据采集、交易记录分析、资金流可视化等多个方面介绍了Wannacry事件所涉及的三个比特币账户。由于“涉案”账户并未转移“赃款”,所以当时只分析了资金的来源,并没有就去向开展研究。
有热心小伙伴提示,账户在2017年8月3日对资金进行了转移操作,那么我们一起来看看账户里的钱去了哪?这两年来账户发生了什么?
Tip:为简化描述,文中分别将wannacry的三个比特币钱包重命名为如下:
经过对三个钱包所有交易记录进行筛查,共有397笔交易,其中6笔转出,每个钱包分别对应2笔,具体如下图:
图1 11钱包转出记录
图2 12钱包转出记录
图3 13钱包转出记录
6笔交易分别发生在20170803日的11:39:15、12:28:20、12:41:34这三个时刻,需要说明的是交易时间相同的交易记录都记载在同一块上,所以出块时间都是一样的。据此可以推断出,有人在北京时间2017年8月3日(距离5.12共83天)12点左右对三个账户进行了操作,转走了里面的钱。
三个钱包的转入交易笔数分别为:11钱包119笔, 12钱包136笔, 13钱包138笔,从分布情况看无明显差异,也符合《“数”说wannacry的比特币钱包》里面提到的wannacry病毒程序对付款账户的随机化。
图4 各钱包转入交易占比图
截至2017.8.3日,各钱包收到的比特币数额分别为:14.41067602btc、17.77113037btc、19.74510304btc,共计51.92690943btc。
图5 各钱包转入金额占比图
为了回答这个问题,我们需要对2017.8.3日的转出数据进行收集追踪,我们依旧使用scrapy框架进行爬取,由于数据来源网站使用了js脚本,所以urllib获取到的内容并非是真实展现的数据,因此引入selenium+phantomjs的方式调用无界面浏览器对网页进行爬取。(高版本的selenium已经放弃了对phantomjs的支持,可以选用chrome或Firefox浏览器进行,通常为了减少资源消耗选用headless无头模式)
Step1:确定爬虫入口
为了追踪钱包里钱财去向,需要紧盯转出交易顺藤摸瓜,所以3个钱包在8.3日的6笔转出记录是重点,爬虫的入口即为6笔转出记录,6条转出交易的id如下:
d17829f8097ed86fa2e961b5ccefc51877673f649196621bf90e03f42f1e9ab8 ef0ac1c130740138805bfb7cd605456e440266db1fd85ae5b4a852a7172fcf2f 35e5d5fe8c8128cfa6884f56be5817e4138c58c91b79d78d3e78a8d365b9d8a7 409803bb5e124fd028c0482027c7722e84ce55b78204b279d3a44aba5e7c1698 8def6458a46234ab0e040602e7852ff5cf58650f3f1102803b1d4bca4cc293a1 a028bb2d4c795cb8a8fd2f03285934fba8747fa84296fb7711dcda179b21cc4c
根据数据特点,我们制作如下的两张表来分别记录交易概况和交易详情。
表1:交易概况。记录每笔交易的id、块高度、确认数、出块时间、rawtx、虚拟大小、权重、输入、输出、Sigops、矿工费、矿工费率。
图6 交易记录要素
表2:交易详情。记录每一笔资金流详情,包括交易Id、钱包地址、流入流出类型、btc数量、上一笔或下一笔交易id。下图所示本笔交易共包含3条资金流信息,1笔输入资金,2笔输出资金。
图7 交易详情要素
Step2:开始爬取
由于爬虫是以6个入口地址为起点爬取,顺着资金流追踪,只有完成一个交易记录的爬取才能获取到下一个交易的页面地址,所以同时爬取的最大请求数只能是6,这极大限制了爬虫的工作效率。为了简化爬取过程,这里只爬取了部分数据进行分析。
Step3:可视化分析
我们对11钱包的两条转出记录进行追踪,共收集到593笔交易,涉及40756条资金流。将数据进行格式化处理后,导入gephi中进行可视化展示。
图8 钱包11的交易可视化
我去~~~~密集恐惧症都犯了。。。。。可以看到图中共36409个节点和37247条边。
这些节点和边都代表了什么?根据比特币交易的特点,很多交易记录都不是单个账户对单个账户,而是一对多、多对一和多对多的资金流关系,所以我们在绘制资金流时无法将账户直接关联到另一个账户,而是需要以交易块为中介进行关联,所以图中的节点包含两种类型:钱包和交易块;图中的连线连接了钱包与交易块,代表着资金流,连线的箭头方向代表了资金流向。
为了使上面的图更加清晰直观,我们对数据进行一下处理,按照节点的类型对其进行标色。红色代表钱包,绿色代表交易块,可以看出图中被密密麻麻的钱包所笼罩。
图9 钱包11的交易可视化图(标色)
根据交易特性,交易块肯定连接输入和输出账户,所以图上交易块节点的度必定大于1,利用k-核心算法对图中度为1的节点进行过滤。
图10 钱包11的交易可视化图(标色)k-核心>1
可以看到图中的点和边均锐减到1163(3.19%)和2003(5.38%),除去593个交易块节点,有570个钱包节点被保留了下来,说明这些钱包与不止一个交易块发生了关系,参与了多笔交易。我们利用节点的出度值调整节点大小,得到如下图。
图11 钱包11的交易可视化图(标色)出度调整
可以看到其中有一个钱包格外的大,说明其资金流出的笔数非常多。为了验证我们查看该钱包的交易信息,可以看到交易210650笔,总接收2,096,890.53333999 BTC,2017年4月有几笔交易,从5月底开始交易数激增。从该钱包的流水来看很像是用来提供洗钱服务的账户。
图12 关键钱包交易统计
当把k-核心过滤条件调整为3,将边的宽度也按资金流大小进行等比例缩放,可以看到下图中剩下的钱包均可视为核心节点,从该图的线条就可以看出上图所得到的钱包的交易量确实非常大。
图13 钱包11的交易可视化图(标色)边调整
以上的分析只是11钱包的资金流去向情况,就已经非常复杂了。为了简化问题,我们对三个钱包的分析只采用2017年12月31日之前的交易数据进行,将数据导入gephi后,形成16万个节点近10万条边,选用k-核心算法过滤3度以下节点,得到下图。
图14 涉案钱包交易可视化图(标色)k-核心>3
使用加权出入度对节点大小进行调整得到如下图所示
图15 涉案钱包交易可视化图(标色)加权出入度
可以看出图中有部分节点调整后变得异常大,随便选中其中一个点查询后可看到,31比交易的流水资金高达11,777.56150534BTC,不禁为这个账户增添神秘色彩。
根据以上图像显示,三个账户的资金去向异常复杂,还经过了很多Mix账户,这些账户专门用于洗钱。
2017年8月3日三个账户同时转出“赃款”后,依旧有资金络绎不绝得转到账户里。
图16 钱包11“转脏”后的交易记录
图17钱包12“转脏”后的交易记录
图18钱包13“转脏”后的交易记录
Question:为什么还有钱转入?
A:可以看到最近转入得时间竟然是2019年5月,可以猜测或许很多不知情得人还在中招wannacry,或者这些账户又在进行其他不可告人得勾当。
毕竟笔者也是局外人,所以只能脑洞大开的来回答这个问题啦。
图19 按月统计交易笔数
上图是2017.5月以来各月接收到的交易笔数,可以看出5月分交易异常活跃,只用了18天就拿下33笔交易,6月就骤降到17笔,7月更是可怜的2笔。由此可见,交易活跃度的极具下降使得账户所有者不再有耐心等待下去,选择了在8.3日转出了比特币。
众所周知,比特币在2017年开始进入疯狂,走势如下:
图20 比特币2017-2019价格走势图
短短半年时间,比特币从5.12日的近7千刀涨到近2万刀,三个账户收到的51.92690943btc如果在最高点变现,将获利100.4552万美元。
加密货币比特币以其匿名性深受非法交易喜欢,已经成为许多在线地下交易的首选付款方式。虽然比特币账户是匿名的,但其交易并非匿名,即比特币账户的注册无需实名认证,但是比特币全网的交易记录都基于区块链技术进行,其整个支付网络中所发生的每一笔交易都会被记录在“区块链”,这是比特币货币体系用以追踪谁何时拥有哪些比特币,以及防止欺诈和伪造的分散化交易记录机制。但这些交易只是按照比特币地址记录下来的,这些地址未必与任何人的身份相绑定,因此光从这些公开的交易记录是无法追踪到使用者身份。
如果针对流量数据来进行监控识别比特币交易,从而确定交易者位置,是不是就可以获取其身份,首先需要说明的是,为了提升追踪难度,交易者往往配合“暗网”来进行比特币交易,这也正如wannary利用tor来构建C&C通道一样,同样是为了达到链路匿名话。针对比特币交易的研究,一些学者利用大数据来关联分析各个账户的彼此关系,来从中发现蛛丝马迹,但交易如果通过诸如Bitlaundry、Bitmix或Bitcoinlaundry等“比特币洗钱服务”平台支付比特币的话,那么对这些比特币进行跟踪就会变得更加困难,甚至是不可能的。
本文只是对比特币交易分析做了浅显的介绍,有关其追踪的研究还是非常复杂繁琐,涉及到很多很多的知识,笔者还是需要多多学习,趁着高考结束的日子多加努力。
*本文原创作者:追影人,本文属FreeBuf原创奖励计划,未经许可禁止转载