作者:{Anice,XJ,lhy,ljq}@ArkTeam
挖矿型恶意代码是当前网络安全领域的关注热点。挖矿型恶意代码在用户未明确授权的前提下,利用用户设备(如PC、手机、服务器等)的计算能力赚取数字货币(如比特币、门罗币、莱特币)。
为了理解挖矿型恶意代码原理,首先需要理解一个重要概念—矿池。
矿池产生原因:随着数字货币全网的算力不断增加,单台计算设备成功产生Hash碰撞,进而获取区块奖励的概率变得过低。矿工们为了获得稳定的挖矿奖励开始”组团挖矿”,只要矿池获利,矿池会根据矿工们贡献度进行分红。
矿池工作原理:矿工运维的专业挖矿设备称为”矿机”,矿机是矿池的终端节点;而”矿池”则是”组团挖矿体系”的基础平台,可以看作是挖矿机器的集群,矿池上运行的软件主要包括三方面功能:
(1)加入数字货币网络,及时收到网络内其他节点广播的交易信息;
(2)矿机分工,将一个复杂的计算任务(其实就是对广播的交易信息填充上正确的”随机填充值”)分解为N个,交给N个矿工去计算,然后对计算结果进行验证;
(3)抢夺记账权,如果某个矿工反馈的结果是正确的,即可产生正确的Hash值,以填充区块头的”随机填充值”,矿池将会广播这一包含了正确区块头的交易信息,宣称自己可验证这一交易的有效性,一旦超过半数的数字货币网络节点认可该矿池发出的广播消息,则该矿池就成功挖掘出一个新的区块。以比特币网络为例,最初大约每10分钟就可以产生50个比特币报酬,该报酬每4年减半,现在每10分钟可产生不到25个的比特币报酬,随后根据矿工贡献按劳分配。注意,真正计算出正确结果的那个矿工,并不知道自己做出了这么大贡献,他的收益只按照算力来分配。
矿池通信协议:矿池通过Stratum协议与矿机交互(浏览器挖矿使用WebSocket进行通信),实现任务下发、结果提交等,数据均以JSON格式进行传输。矿池通过Getblocktemplate协议与数字货币网络节点交互,掌握区块链上与挖矿有关的所有信息,包括待确认交易池,并自行构造区块进行运算。
示例:
矿池地址示例:stratum+tcp://xmr.f2pool.com:13531
挖矿软件示例:门罗币