导语:犯罪分子正在使用比特币和其他加密货币作为销售被盗数据、黑客服务(如DDoS)和勒索软件支付付款渠道。如果你想更多的了解这个黑产,你需要深入了解比特币以及懂得如何分析交易。
犯罪分子正在使用比特币和其他加密货币作为销售被盗数据、黑客服务(如DDoS)和勒索软件支付付款渠道。如果你想更多的了解这个黑产,你需要深入了解比特币以及懂得如何分析交易。
跟随上犯罪分子使用的技术的脚步是非常重要的,这样你就能更好的了解新的变化和发展趋势。此外,随着越来越多的人在分析比特币和区块链,因此也有更多的机会开发出新的工具和技术来防御犯罪分子。
犯罪分子历来是最早使用新技术的人,因为创新的东西往往被人们倾向于首先用在有冲突且有动机的方面。犯罪分子是最早发现汽车(相同时期大多数警察使用的是自行车或马匹)、手机和蜂鸣器的创造性用途的一部分人。现如今,他们已成为攻击互联网、利用洋葱网络、使用加密和现在流行的比特币的先锋人群。如果犯罪首先采用了某种技术,那些试图了解和挫败罪犯的人,应该需要深入了解犯罪分子所使用的技术。
比特币术语介绍
在谈到比特币恶意软件分析之前,我想确保你熟悉比特币中的一些术语和基本概念。如果你已熟悉常见的信息安全概念(如公钥加密和散列),那么理解比特币就非常容易了。本节仅仅是个概述。如果你想要更深刻的理解这方面的只是,我鼓励你阅读原始的比特币论文(论文只有9页!)。
比特币本质上是一个公共分类账。分类帐本身称为区块链。区块链很特殊,因为与公开共享的电子表格不同,如果你遵守规则,则只能添加区块链。这些规则是在对游戏理论的理解的基础上创建的,这些理论通过数学严格执行来确保公平性。此外,它是分散的,意味着没有中央机构控制网络,并且不可能通过强制单个实体来破坏网络。区块链使用公钥的哈希而不是人名来记录所有权。通过这种方式,尽管存在关联地址的方法以及将地址映射到实际身份的一些有限方式,但它依旧是匿名的。
挖矿
新比特币的产生被称为“挖矿”。这往往是一个最有趣也最神秘的过程。毕竟,通过挖掘区块,矿工将获得25比特币奖励。按照目前的市场价格,这个价值超过25,000美元。这个价格通常会引起人们的广泛关注。
块是比特币交易的集合(发送比特币的人的记录),前一个块的哈希,以及随机数(随机数),当进行哈希时会产生一个以0 bit初始化的值。例如,假设你有一个看起来像下面这样的块:
caleb sends joe 1.2 btc udi sends joe 0.3 btc joe sends aidan 1.5 btc nonce: 0
如果要将其保存到文件中(最后没有换行符)然后计算SHA256哈希值,则哈希值为:b5b6ee30fae42aa131a84f705e5d7cf59133b3954e53c79b05c13a328b8d6f8a。你可以使用shasum -a 256 block.txt在自己的电脑上(在Mac上)检查一下。这个示例块的第一个字节是0xb5二进制的0b10110101。这具有零个前导0位。如果将nonce递增到4,则块的散列变为:01bdf748aeb6443595d1d29fc348418f4b4b2bbe5287c53e892735f467702308并且第一个字节00000001具有7个前导0位。
如果0位数非常高,比如说50位,那么你是没有办法知道随机数是多少!你必须使用递增的随机数将很多很多块进行哈希,直到你找到前导0位数是50位的随机数。当比特币的矿工们产生了一个有效的块(哈希有足够多的前导0位)时,他们就会向网络宣布这个块,由此也证明了矿工们在非常努力的挖矿。这就是为什么挖矿被称为使用“工作验证”的原因,因为找到一个有效的块需要大量的哈希,如果你有一个有效的哈希,那么就证明了你做了一些工作。
一旦交易包含在有效块中,它就成为区块链的一部分。在任何特定时刻,都有成千上万的未经确认的交易等待包含在新挖掘到的区块中。你可以在此处查看此列表:未确认的交易。比特币协议会自动调整目标难度,平均每10分钟可以产生一个新的区块。
如果你想自己体验一下挖矿的过程,这里有一个模拟挖矿的Python脚本。你可以通过增加TARGET值来调整挖矿的难度。
#!/usr/bin/env python import sys import hashlib # Difficulty target (number of leading 0 bits) TARGET = 16 def generate_blocks(transactions): block_base = '\n'.join(transactions) nonce = 0 while nonce < sys.maxint: yield '{}\nnonce: {}'.format(block_base, nonce) nonce += 1 def hash_block(block): h = hashlib.sha256() h.update(block) return h.digest() def digest_to_binstr(digest): return ''.join(map(lambda o: format(o, '08b'), map(ord, digest))) transactions = [ 'caleb sends joe 1.2 btc', 'udi sends joe 0.3 btc', 'joe sends aidan 1.5 btc', ] target_str = '0' * TARGET attempts = 0 for block in generate_blocks(transactions): attempts += 1 digest = hash_block(block) binstr = digest_to_binstr(digest) if binstr[0:TARGET] == target_str: print("Mined block with {} difficulty after {} attempts!\n{}\nHash: {}".format(TARGET, attempts, block, binstr, binstr)) break
执行后的输出内容如下:
$ ./fake-mine.py Successfully mined block with 16 difficulty after 78169 attempts! caleb sends joe 1.2 btc udi sends joe 0.3 btc joe sends aidan 1.5 btc nonce: 78168 Hash: 0000000000000000000100011000110010001011110101011000101000011000101000101101001000100010110110000011010001000110101101110111110100110001100100011001000111001011111100111110111100101110010001110101100000000110001101101111101001101110011000000001101100110000
在目标难度系数为16的情况下,在发现指定了nonce后产生有效区块之前,已经尝试了78,000次。
交易
比特币全部归属于公钥地址。发送比特币实际上只是意味着将它们重新分配给另一个公钥,这是通过交易广播完成的。交易包括目标公钥和你所拥有的一个或多个比特币(前一个交易)的哈希。这两项会使用你的私钥签名加密,证明你拥有这些比特币。
安全研究人员需要注意的一个重要细节是交易通过互联网进行广播。如果你想将身份映射到公共密钥消费虚拟货币,拥有发送虚拟货币的客户端的IP地址可以提供非常丰富的信息。像Blockchain.info这样的站点就包括了在对等网络中中继交易的IP地址,但这只是实际客户端IP的粗略的代理地址,甚至可能与客户端所在的国家或地区无关。有关实际获取IP地址的研究,请查看比特币P2P网络中客户端的匿名化。
挖矿池
针对比特币进行单独挖矿是很困难的,因为除非你在设备上投入了大量资金,否则你可能永远都不会挖到比特币,而你所做的所有努力都会被浪费掉。挖矿池已经发展到将较小的分散的矿工们的散列能力结合起来。如果挖到了一个区块,通常会按每个矿工贡献的比例分配比特币来作为奖励。通过记录每个矿工解决比比特币更小的目标难度的区块的次数来计算每个矿工的贡献。
挖掘比特币的恶意软件通常通过为挖矿池提供资金来实现攻击。然而,挖掘比特币远比挖掘其他一些加密货币(如Monero)更少见,因为比特币挖掘太难大并且难以盈利。此外,Monero的优势在于它比比特币更具匿名性。
如果恶意软件连接到挖矿池,你应该能够识别挖矿池的Web地址和worker凭据。挖矿池使用worker凭证来了解哪个地址应该接收支出。每个挖矿池都有一点不同,但有些会使用worker的用户名作为支付地址。。如果可能的话,你应该获取恶意软件正在使用的地址,因为针对地址你可以进行一些额外的分析。
分析比特币地址
如果你可以获得与恶意软件活动相关联的比特币地址,则可以观看其中的活动。如果恶意软件有新的活动,那你就知道还有机器被感染了。如果地址长时间没有活动然后再次开始活动,则意味着恶意软件又有了新的活动,你应该开始根据资源寻找新的样本。地址的活动量还可以让你了解恶意软件攻击成功的程度以及受感染的计算机数量。
在我们的CryptXXX:New CryptXXX Variant Discovered分析报告中,描述了一个与勒索软件相关的地址的真实案例。勒索软件的付款地址是18e372GNwjGG5SYeHucuD1yLEWh7a6dWf1。根据恶意软件的赎金记录,付款必须是1.2比特币或是1.2的倍数,具体取决于受害者支付的时间。通过了解这一点,我们可以查看赎金地址的交易,并查看该地址的付款数量和金额。如果我们一直监控交易的IP地址,我们也可以了解受害者的地理位置分布情况,这可以让你深入了解目标对象。通过更好的了解攻击者的目标和原因,然后配置和部署蜜罐会更容易收集到新样本。
由于此地址的所有付款记录都是在大约两个月内发生的,因此可以假设该地址适用于单个攻击活动,并且一定还存在与本次攻击活动之前和之后相关联的其他地址。如果你监控区块链并且聚类关联的地址,你可能会在找到样本之前就找到新的付款地址。这将有助于你缩小搜索范围然后收集新样本进行分析并确保检测范围。目前没有任何免费的地址聚类工具,但这应该会成为一个活跃的研究领域。有关更多信息,请查看地址聚合的不合理有效性 和BitSniffer 。
通过使用tumblers跟踪比特币的流动变得更加困难。这些服务从许多用户那里获取比特币,将它们多次放到许多不同的地址上,然后将它们重新分配给原始的所有者。同样,目前没有解决由 tumblers 所造成的混乱的相关工具,不过已经有了关于该主题的一些研究。有关更多信息,请阅读比特币混合服务调查:追踪匿名比特币。
我个人发现了一些有趣的与比特币相关的恶意软件,只需搜索看起来像挖矿地址或挖矿池连接字符串的关键字。当这些类型的搜索结果与其他类型的静态分析相结合时,其结果就可以成为潜在恶意软件的来源。这个演示文稿提供了一些很好的搜索比特币相关字符串和特征的例子,甚至还有Yara规则:跟踪磁盘和内存中的比特币。
总结
希望在阅读本文之后,你可以更好的了解比特币的工作原理,并且你可以使用一些新的分析技术来处理你发现的下一个勒索软件或加密货币相关的恶意软件。我也希望这篇文章能激发你创造一些新的分析工具和技术,帮助业内人士跟上犯罪分子的节奏。