APP下载

基于区块链技术的僵尸网络命令控制信道研究

2020-04-22李德奇胡大裟刘云霞蒋玉明

现代计算机 2020年8期
关键词:信道僵尸命令

李德奇,胡大裟,刘云霞,蒋玉明

(四川大学计算机学院,成都610065)

0 引言

僵尸网络是当前最主要的网络安全威胁之一,种类主要包括信息窃取、拒绝服务攻击、勒索病毒、垃圾邮件、挖矿病毒等。可控性和协同性是僵尸网络两个基本特性[1],而命令控制信道是两者实现的关键。命令控制信道主要用于控制者与僵尸主机之间的信息传递和交互,其决定了整个僵尸网络的高效性和健壮性。在对抗僵尸网络过程中,破坏与瓦解僵尸网络的命令控制信道是最主要的方式。所以命令控制信道的健壮性决定了僵尸网络的生存能力。

1 传统命令控制信道实现

1.1 基于IRC协议

Gtbot[2]是历史上第一个出现的僵尸网络,该网络基于IRC 协议实现命令控制。IRC 协议具有实现简单,广泛使用的优点。控制者通过公共的IRC 聊天室下发指令,指令传递非常高效。IRC 僵尸网络命令控制实现如下:

(1)僵尸网络控制者在IRC 服务器上创建一个聊天室,并将聊天室地址硬编码到僵尸程序中;

(2)僵尸主机通过硬编码的地址加入聊天室并等待获取控制命令;

(3)控制者将控制指令发布到聊天室公告中或通过一对一或一对多的方式向僵尸主机下发指令。后者要求控制者在线,这也是最为常用的一种方式;

(4)僵尸主机获取指令并完成响应。

由于IRC 服务器通常由公共服务商提供,在网络安全机构和服务提供商的配合下,基于IRC 协议的僵尸网络很容易被瓦解和摧毁,只需服务提供商关闭僵尸网络用于传递指令的聊天室即可。

1.2 基于HTTP协议

Bobax[3]是第一个基于HTTP 协议实现命令控制的僵尸网络,该网络最早出现于2004 年。此外2006 年出现的垃圾邮件僵尸网络Rustock[4]和点击欺诈僵尸网络Clickbot 以及2007 年出现的窃密型僵尸网络ZeuS均采用HTTP 协议作为其命令控制信道实现协议。

HTTP 协议作为最常使用的应用层协议,具有很好的通用性。将僵尸网络的命令控制流量混杂在海量的正常请求中,可实现流量的隐藏,并能穿透IDS 和防火墙等安全设备[5]。HTTP 支持对通信内容进行加密(HTTPS),同时延迟较低可高效传输命令,HTTP 协议的这些优点使得其成为当前最主流的僵尸网络命令控制信道协议之一。HTTP 僵尸网络命令控制实现如下:

(1)僵尸网络控制者利用公共Web 服务器或自建Web 服务器并通过网页发布指令和接收数据,将指定网页的URL 地址硬编码到僵尸程序中;

(2)僵尸主机通过硬编码的URL 地址轮询请求网页内容,向网页提交本机信息(包括ID、主机名、IP 地址、MAC 地址、操作系统、硬件信息等),并从网页中获取控制命令;

(3)控制者将控制指令内容发布到网页中;

(4)僵尸程序轮询从网页中获取指令并完成响应。

早期的HTTP 僵尸网络通常采用静态寻址方式,随着网络安全技术的发展,此方式容易被安全防御人员识别并封锁,造成命令控制信道被阻断。基于此,攻击者尝试对传统的方式进行改进,采用动态寻址机制以增强信道的健壮性,典型的改进协议包括Domain-Flux[6]和Fast-Flux[7]。

(1)Domain-Flux 僵尸网络

Domain-Flux 僵尸网络将多个域名映射到几个或少量的IP 地址,其实现的核心技术是域名生成算法(Domain Generation Algorithm,DGA)。僵尸网络控制者和僵尸主机共享同一套DGA,通过相同的输入(如系统时间、热门话题等)生成大量的域名,控制者将其中的一个域名解析到命令控制(Command & Control,C&C)服务器的IP 地址,僵尸主机依次检测DGA 生成域名的有效性,一旦检测到某个域名有效,即可通过该域名与C&C 服务器进行通信,获取控制指令。由于DGA 算法在短时间内动态生成大量域名并进行查询,安全研究防护人员很难在短时间内查询和检测到C&C 服务器的地址,无法快速切断僵尸网络的命令控制信道。

(2)Fast-Flux 僵尸网络

Fast-Flux 僵尸网络将某个域名动态映射到多个代理节点的IP,映射关系快速变换,将C&C 服务器隐藏在代理节点后面,而代理节点从被感染的僵尸主机中产生。僵尸主机轮询C&C 服务器的域名时,公网DNS 服务器返回代理节点的IP 地址。僵尸主机与C&C 服务器进行通信时,由代理节点将请求转发给Mothership[8],并将Mothership 的请求响应转发给僵尸主机,如图1。将C&C 服务器隐藏于大量代理节点之后,可规避通过屏蔽IP 地址的方法清除僵尸网络。

1.3 基于P2P协议

Slapper 是第一个P2P 僵尸网络,该网络出现于2002 年。区别于在IRC 僵尸网络和HTTP 僵尸网络中所有僵尸主机都通过一个或多个域名连接到一个或多个中心命令控制服务器,P2P 僵尸网络建立在一个相对分散的网络环境,网络中所有主机都相互连接并通信,中心依赖相对较弱,网络健壮性较强,但是P2P 僵尸网络协议实现过程仍然存在不足。

(1)初始化存在中心

僵尸主机初始化时从僵尸程序中读取硬编码的缓存服务器或连接列表中的节点并请求加入到僵尸网络中,该过程通常被称为bootstrap。而bootstrap 中采用静态寻址的资源一旦失效,则新感染的僵尸主机无法加入网络获取控制指令。所以中心化的缓存服务器或连接列表是bootstrap 中脆弱的环节,一旦失效,后续感染的主机无法加入僵尸网络。

(2)命令认证不完备

P2P 协议的实现多种多样,在纯P2P 网络中,每个节点均可充当服务端,基于此构建的P2P 僵尸网络,理论上任何人都可以向网络中注入命令。而基于索引模式的P2P 协议缺乏对索引提供者身份进行有效认证,此时容易受到索引投毒污染。

2 基于区块链技术的命令控制信道实现

2008 年11 月中本聪发表论文《比特币:一种点对点的电子现金系统》[9],阐述了基于P2P 网络技术、加密技术、时间戳等技术构建电子现金系统,比特币就此诞生,区块链技术进入人们的视野。区块链技术是综合了分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式,有效地解决了去中心化问题,具有开放性、数据防篡改和匿名性等特点。链上存储的数据永久存储且不可被任何组织或个人非法篡改。区块链为人们带来改变的同时,也引入新的问题,例如恶意使用者利用区块链存储传播不良信息,攻击者利用区块链来构建僵尸网络命令控制信道。

2.1 基于交易中可控字段

本节主要研究如何在比特币交易过程中利用可控字段实现消息的隐藏和传递。深入研究比特币交易过程和其技术实现可知比特币交易过程中有三个字段可被用户控制,包括交易金额值,未花费的交易输出(Unspent Transaction Output,UTXO)和 交 易 备 注 字 段OP_RETURN。以下就利用三个不同字段分别传递消息进行介绍和对比分析。

(1)通过发送金额值传递信息

由于用户可以自行控制交易金额,故可将僵尸网络命令隐藏到金额值中。假如僵尸网络控制者想要将“DDOS”命令写入到比特币区块链中,首先将“DDOS”编码转换成对应的十进制数值1145327443,然后通过帐户A 将价值1145327443 Satoshi 的比特币转账给帐户B,交易确认之后,帐户B 收到该笔转账,僵尸程序读取区块链对该笔交易金额进行解码即可得到明文消息“DDOS”。

(2)通过UTXO 传递信息

在比特币系统中并没有余额的概念,钱包工具中的余额是将用户所有的UTXO 相加起来得到的。比特币的交易由交易输入和交易输出组成,每一笔交易都要花费(spend)一笔或多笔输入,产生一笔或多笔输出(output),而其所产生的输出,就是“未花费过的交易输出”[13-14],也就是UTXO。Counterparty[10]和Mastercoin[11]均曾使用unspendable outputs 在交易中插入消息。本节参照Mastercoin 的实现思路,通过UTXO 打造一个僵尸网络命令控制信道,僵尸网络的命令协议格式如下:<命令ID><参数1><…><参数n>。根据比特币地址的生成规则,将命令的内容编码成一个或者多个输出地址。由于地址长度的限制,每一个输出地址最多能包含20 字节的命令内容,针对长度大于20 字节的命令,需要将其分段编码。图2 的交易中包含一条僵尸网络控制指令,指令内容为“1 192.168.1.1 443 1547275896 3600”,具体含义为于2019-01-12 14:51:36对目标192.168.1.1 的443 端口开启SYN Flood 攻击,持续时间为3600 秒。交易中转账金额为6000+x 的输出代表这是第x 段指令内容,其对应的输出地址(图2中的黑色字体部分)中包含该段指令的内容,每一段指令包含20 字节的内容,不满20 字节的使用空格填充。

图2 僵尸网络命令解析

单个unspendable outputs 最多可插入20 字节的信息,而一笔交易中可以包含多个输出。大量使用unspendable outputs 传递信息会引起UTXO 膨胀,大量比特币被封存到无法花费的地址中,造成比特币的浪费。

(3)通过OP_RETURN 传递信息

2013 年比特币加入OP_RETURN 脚本命令,它后面可以紧跟80 字节的数据,用于存储和交易逻辑无关的数据,可以起到备注的作用。OP_RETURN 的引入有效解决了UTXO 集合膨胀的问题,同时OP_RETURN 具有操作简单,使用灵活,存储容量相对较大,使用广泛,成本低等优点。图3 所示,2015 年6 月开始,OP_RETURN 的使用频率大幅增长,2018 年9 月开始呈爆发式增长。

图3 OP_RETURN每月使用情况

相比上述两种在区块链上构建命令控制信道的方式,OP_RETURN 更适合用于构建僵尸网络命令控制信道。使用OP_RETURN 传递僵尸网络控制命令几乎不受账户余额的影响,操作更加简单方便;单笔交易最大可以传递80 字节的指令内容,能容纳绝大部分的控制指令;将指令内容加密传输,可使得命令控制信道更加隐蔽和安全;交易不会引起UTXO 集合膨胀而造成货币的浪费,指令传递的成本相对较低。

由于单笔交易最大可以传递80 字节的指令内容,针对超过80 字节的长指令需将其拆分到多笔交易中。为了适配长短指令,设计表1 中的分片格式,将长指令内容进行分段,每一笔交易包含一段指令内容,僵尸主机将多笔交易中的OP_RETURN 提取并组合成完整的指令然后完成相应的操作。如表,超过75 字节的指令将被拆分到不同的交易中传递,而不大于75 字节的指令不再进行拆分,一笔交易即可完成指令传递。

表1 分片协议格式

为了保证僵尸网络控制权不被夺取,僵尸主机需要对接收到的指令进行认证。认证的方式可通过限定交易的双方,因为区块链上账户的地址通常由其公钥计算得到,只有拥有私钥的用户才能使用该账户发起交易,由公钥直接得到相对应的私钥目前几乎不可能实现,从而有效保证了控制命令的可信度。

在比特币区块链上实现僵尸网络控制命令信道步骤如下,图4 展示了僵尸网络控制者通过OP_RETURN 字段下发命令和僵尸主机获取命令的过程:

(1)僵尸网络控制者在区块链上分别创建账户A和账户B,并将账户A 和账户B 的地址硬编码到僵尸程序中;

(2)僵尸主机轮询从区块链上读取从账户A 到账户B 的最新交易,提取并解析OP_RETURN 字段的内容,得到最新的指令;

(3)攻击者创建交易,使用账户A 向账户B 发起一笔或多笔转账,并将控制指令嵌入交易中的OP_RETURN 字段,交易被确认后,控制指令被永久写入比特币区块链中;

(4)僵尸主机轮询从区块链上读取指令并完成响应。

图4 OP_RETURN实现命令传递

2.2 基于智能合约

Nick Szabo 于1996 年第一次提出智能合约的定义:一个智能合约是一套以数字形式定义的承诺,以及合约参与方在其上执行这些承诺的协议[12]。区块链的出现使得智能合约的执行获得了可信的环境,以太坊[17]首先实现了区块链和智能合约的完整契合,标志着区块链进入2.0 时代。智能合约可应用于金融服务、身份认证、物流跟踪、数据存储、资产管理和游戏娱乐等行业,具有良好的应用前景。由于区块链的去中心化、开放性、匿名性和不可篡改性等特性,以及智能合约实现的灵活性,攻击者通过区块链上的智能合约来构建僵尸网络命令控制信道,可使得命令控制信道坚不可摧。

与使用比特币交易中OP_RETURN 字段传递消息相比,利用智能合约来传递信息实现上更为灵活,操作上更简单,单次传递的信息量更大。以太坊上的智能合约可使用Solidity、Serpent 等语言编写,编译后的机器码可以在以太坊虚拟机EVM 上运行,如图5。智能合约部署后,外部用户可通过合约接口调用合约获取信息。通过以下智能合约Demo 可实现命令的传递,将合约编译部署到以太坊上得到合约地址Addr,结合该智能合约的abi 接口,外部用户可以调用该智能合约中的函数获取信息。

图5 智能合约编译、部署、运行

pragma solidity^0.4.24;

contract CMDManager{

string Command; //传递信息的变量

constructor(string_command)public{

if(bytes(_command).length==0){

Command="No Message!";}

else{

Command=_command;}

}

function getCommand()constant public returns(string){//获取信息

return Command;

}

function setCommand(string_command)public{//设置信息

if(bytes(_command).length==0)

{

Command="No Message!";}

else{

Command=_command;}

}

}

僵尸网络使用智能合约实现控制命令信道过程如下,图6 是通过智能合约传递指令的过程:

(1)僵尸网络控制者编写智能合约并部署到以太坊上,得到智能合约地址。将智能合约地址和智能合约abi 接口信息硬编码到僵尸程序中;

(2)僵尸程序第一次运行时,同步区块,在以太坊上创建帐户,并通过硬编码的智能合约地址和接口信息调用智能合约,提交本机信息(帐户地址、主机名、IP地址、MAC 地址、操作系统、硬件信息等)。僵尸主机轮询调用智能合约获取控制命令。

(3)攻击者通过合约创建者调用部署的智能合约,获取僵尸主机信息并下发控制指令。

(4)僵尸主机轮询调用智能合约获取控制指令并完成响应。

图6 智能合约实现命令传递

3 防御建议

3.1 静态特征码检测

通过提取已经获取的僵尸程序样本,提取出其文件特征(如文件hash、代码特征、数据特征等)并签名,并将这些特征签名信息作为检测标准,一旦文件中包含全部或者部分特征,即可判定为某僵尸程序或其变种。该方法可在不运行程序的情况下进行检测,但随着特征码库的不断积累,检测时间会越来越长,对于未知的恶意代码或能自变异的恶意代码检测效果不佳。

3.2 动态行为特征检测

动态分析是在虚拟机环境中运行代码样本,并对样本进行监控,获取样本所有运行时数据,然后分析其运行时数据流、控制流等信息,判断样本的恶意性[18]。通过HOOK 技术拦截程序的系统调用,监控程序的行为,如文件操作、注册表操作、远程注入行为、网络行为、调用区块链的行为等,将监控到的信息提交到监控中心或网络服务器进行分析处理,分析处理模块可以采用改进的攻击树算法来分析判断。改进的攻击树算法是在传统的攻击树[19-20]算法基础上添加程序在区块链上的行为分析,如读取某用户的交易信息,调用某个智能合约的函数等行为。监控中心通过分析程序的行为并对程序的恶意性作出有效判断。动态行为特征检测能有效地检测到已知恶意代码的变种。

3.3 通过区块链社区干预

区块链社区在区块链上添加黑名单功能,通过用户参与的方式将恶意交易地址加入到黑名单中,限制恶意用户的使用。黑名单中的用户无法参与正常的交易,从而限制区块链的恶意使用。

4 结语

经过多年的发展,僵尸网络命令控制信道灵活多样,传统僵尸网络虽然存在或多或少的缺陷,安全人员可以利用这些缺陷接管或瓦解整个僵尸网络,但传统僵尸网络仍然是当前最大的网络威胁之一。区块链技术出现后,有效解决了当前僵尸网络普遍存在的中心化和命令认证不完备的问题,僵尸网络使用区块链技术构建命令控制信道势必将给互联网安全带来更大的威胁。

本文通过分析僵尸网络命令控制信道的发展以及构建方法,分别分析基于IRC 协议、HTTP 协议、P2P 协议构建的僵尸网络存在的缺陷、问题以及对抗方法思路。介绍了两种结合区块链技术构建僵尸网络命令控制信道的方法,并提出自己的防御建议。未来随着区块链技术的发展,公有链的使用门槛会更低,更多的僵尸网络会使用区块链来构建稳固健壮的命令控制信道,安全研究人员应提前对此类僵尸网络进行研究,并预先提出相对应的对策,尽早消除此类僵尸网络的威胁。

猜你喜欢

信道僵尸命令
基于信道分类分析的无线通信改进均衡方法
基于自适应学习的5G通信系统信道估计方法
管理Windows10的PowerShell命令行使用记录
疫情就是命令 防控就是责任
一种基于向量回归的无人机通信信道选择方法
解析Windows10的内部命令
WLAN和LTE交通规则
宝箱4
僵大变尸身
僵尸来袭