什么是WannaCry
勒索蠕虫的空前影响
永恒之蓝勒索蠕虫(WannaCry)可能是自冲击波病毒以来,影响范围最广、破坏程度最大的一款全球性病毒。特别是在该病毒的攻击过程中,大量隔离的、一向被认为是相对比较安全的企业和机构的内网设备也被感染,这给全球所有的企业和机构都敲响了警钟:没有绝对的隔离,也没有绝对的安全,恶意代码的某些特性可能使隔离网更不安全。
作为一款“破坏性”病毒,WannaCry的传播速度和影响力都是十分惊人的。360互联网安全中心于2017年5月12日中午13点44分,截获了WannaCry的首个攻击样本,是世界上最早截获该病毒的公司。而在随后的短短几个小时内,就有中国、英国、美国、德国、日本、土耳其、西班牙、意大利、葡萄牙、俄罗斯和乌克兰等国家报告遭到了WannaCry的攻击,大量机构的设备陷入瘫痪,引发了一场事实上的数字海啸。
根据360威胁情报中心的数据统计,仅仅20多个小时,截至2017年5月13日20时,360威胁情报中心便已确认,我国政企机构的29372个IP地址受到WannaCry病毒的感染。而从后续国内外媒体披露的情况来看,全球几乎所有连接了互联网的国家都遭受了此次WannaCry病毒的攻击。
WannaCry感染电脑设备后,会将电脑中的办公文档、照片、视频等文件加密,并向用户勒索比特币。
2017年5月12日下午14时许,距发现WannaCry病毒仅仅十几分钟,360互联网安全中心与360威胁情报中心联合启动了针对WannaCry的红色应急响应程序,并于当日下午14:26,通过360安全卫士微博发出全面预警通告。与此同时,各安全厂商、国家互联网应急中心(CNCERT)、各地网信办、公安机关等部门也都先后启动了全国范围内的大规模应急响应预警和处置工作。经过全国安全工作者大约72小时的连续奋战,截至2017年5月15日下午,WannaCry的快速传播得到了有效的抑制,到5月16日,感染数量基本保持稳定,不再上升。
三位一体的新型病毒
从事后分析来看,WannaCry的大规模传播绝非偶然。除了政企机构普遍存在的电脑更新不及时、系统防护能力弱等客观原因外,WannaCry所独有的一些新型特点也是其得以成功传播的关键。WannaCry最主要的特点是:勒索软件+蠕虫病毒+武器级漏洞的利用(NSA EternalBlue工具,永恒之蓝)。也正是由于这一特点,360威胁情报中心将该病毒命名为永恒之蓝勒索蠕虫。
首先,WannaCry是首次被发现的勒索软件与蠕虫病毒的组合体。
勒索软件是最近一两年开始流行起来的一种趋利明显的恶意程序,它会使用加密算法对受害者电脑内的重要文件加密并以此来进行勒索,向受害者索要赎金,除非受害者交出勒索赎金,否则被加密的文件无法被恢复。而以往的勒索软件,大多是通过挂马、邮件以及其他一些社工手段进行撒网式的传播,从未出现过众多用户被自动攻击的场景。
而蠕虫病毒的历史则比较久远,最早可以追溯到1988年著名的莫里斯蠕虫。这类恶意代码主要是利用系统或流行应用系统的漏洞,对联网设备进行扫描,并发起自动攻击。2003年也曾出现过类似“冲击波”这样破坏性明显的蠕虫病毒,这类传统的蠕虫病毒主要被用于构建僵尸网络,之后被用以发动诸如垃圾邮件攻击和分布式拒绝服务(DDoS)攻击等,少量蠕虫会进行数字资产的盗窃等活动。
但WannaCry则是首次将“勒索”与“蠕虫”相结合,从而使勒索软件获得了一种超低成本的传播能力,在现实攻击中表现得异常猖獗。从结果来看,WannaCry破坏了海量的数据,不仅直接导致了信息的损毁,还间接导致依赖文件进行工作的电脑和设备失去服务能力,引发业务的中断,影响从线上波及线下,甚至使很多政府机构对外办事机构都停了摆。
第二,WannaCry是军用武器民用化的产物。
蠕虫病毒的攻击其实每天都在发生。但如果只是一般的蠕虫病毒,也不至于传播得如此广泛。而WannaCry的一个重要特点,就是整合了黑客组织“影子经纪人”(The Shadow Brokers)所公布的NSA数字武器库中最好用的EternalBlue(永恒之蓝) SMB漏洞利用工具。尽管在WannaCry爆发时,永恒之蓝所利用的系统漏洞已经被微软的官方补丁修护,但由于该漏洞补丁仅推出一个月,很多政企机构还未能及时给自己的内网设备全面更新,加之永恒之蓝是NSA研发的军用级网络攻击武器,未打补丁的设备很难有效防护,所以使得WannaCry的攻击异常顺利。
事实上,早在2015年Hacking Team武器库泄漏事件后,军用网络武器的民用化趋势就已经呈现了出来,WannaCry的出现,使这种趋势成为了噩梦。
自杀开关的成败得失
WannaCry在逻辑设计上,有一个非常不可思议的特点,即该病毒启动时,会首先访问一个原本并不存在的网址URL:http://www.ifferfsodp9ifjaposdfjhgosurijfaewrwergwea.com。之后,WannaCry会根据对该URL的访问结果来决定是否再继续执行下去:
1. 如果访问成功,程序会直接退出;
2. 如果访问失败,程序才会继续攻击下去。
这的确是一个非常罕见的病毒设计逻辑。起初我们猜测这个启动逻辑可能是蠕虫作者为了控制蠕虫活跃度而设计的一个云开关,而蠕虫作者最终可能是因为害怕被追踪而放弃了注册这个域名。但在分析该病毒的其他部分代码时,我们发现WannaCry的作者应该是对病毒检测对抗具有丰富经验的人,所以我们又猜测作者可能是出于对抗检测的目的而设计了这个开关。
具体来说,目前的病毒检测分为在线检测和离线检测两种。离线检测能保证病毒检测系统以安全高效的方式工作。但要做“离线病毒分析”,就需要对病毒检测系统做很多特殊处理,比如检测系统需要欺骗病毒程序,使其认为自己是运行在连线的网络环境中。这就需要使用到欺骗响应(Fake Responses)技术,即病毒的所有网络请求都会被病毒检测系统模拟响应。所以,病毒作者可能是想使用这个启动逻辑来识别病毒检测系统是否有网络欺骗行为,以保护病毒在传播初期不被杀毒厂商快速检测封杀,从而错过蠕虫病毒大范围感染传播的最佳时机。而一旦病毒感染的设备达到一定的规模,就会呈现几何级数的快速增长,进而变得不可控。
但从实战情况来看,也恰恰是这个被特殊设计的自杀开关,成为了安全人员追踪和反制WannaCry传播的重要方法。首先,由于英国的一个安全研究人员快速注册了这个本不存在的开关域名并设置了可访问的URL,从而直接避免了大量联网设备感染WannaCry后继续执行包括加密文件在内的主要恶意功能;第二,我们可以通过WannaCry对该URL的访问请求量或DNS解析量进行分析,来实现对WannaCry感染疫情的总体监测。360威胁情报中心也正是基于DNS解析量的分析,快速实现了对WannaCry感染疫情态势的感知。
特别有讽刺意味的是WannaCry的开关域名设计所导致的结果。在域名被安全研究者注册启用以后,一般非隔离网用户只要能解析到开关域名就得到了有效的保护,而在隔离网环境下却会因解析失败导致后续破坏性的加密文件功能触发,反而最终导致隔离网环境下的大批量感染损毁数据影响业务。
在WannaCry后期的各类变种中,有的修改了自杀开关的URL地址,有的则是直接删除了该自杀开关。
WannaCry整体攻击流程
WannaCry整体攻击流程大致如下(见图1)。
图1 WannaCry整体攻击流程
1. 利用永恒之蓝工具,通过MS17-010漏洞,入侵用户电脑;
2. 执行一个dll文件,释放可执行模块mssecsvc.exe;
3. 访问指定URL,即自杀开关;
4. 若指定URL连接不上,则释放mssecsvc2.0;
5. 释放Dropper,对电脑中的文件进行加密及发送勒索消息;
6. 感染其他电脑。
WannaCry的蠕虫攻击
针对445端口的扫描
作为一款蠕虫病毒,WannaCry在感染某台电脑后,便会对周边联网的其他电脑设备发起自动攻击。具体的攻击步骤如下:
1. 根据被感染电脑的IP地址等信息,判断被感染电脑所处的环境是内网还是互联网;
2. 如果被感染的电脑处于内网中,则对整个内网网段进行扫描;
3. 如果被感染的电脑处于外网或互联网上,则同时启动128个线程,循环扫描随机生成的IP地址;
4. 扫描时,首先探测目标IP的445端口是否开启,如果开启,则使用永恒之蓝工具发起远程攻击,向目标IP发送SMB协议的漏洞利用代码。
根据360威胁情报中心研发的全网扫描器实时监测系统(http://scan.netlab.360.com/#/dashboard)显示,在平日,针对445端口进行扫描的扫描源IP数约为3100个左右;而在5月12日WannaCry爆发当日,针对445端口进行扫描的扫描源IP数大幅上升到5600余个,见图2。
图2 平日与WannaCry爆发当日的扫描源IP数
针对内网设备的攻击
针对内网设备的攻击过程分为如下两步:
1. 获取本机IP地址和子网掩码
2. 根据子网掩码生成局域网内其他所有电脑的IP列表,并将它们都列为攻击目标。
针对互联网设备的攻击
由于外网或互联网上的IP地址空间要远远大于内网或局域网,因此,WannaCry对外网的攻击方法要稍微复杂一些。具体来说,WannaCry会以2秒时间为间隔循环启动1个攻击线程,直到保持128个并发攻击,每个线程会循环生成随机的合法IP地址进行攻击,这种攻击方式会在被感染的电脑上持续进行24小时。
特别地,该病毒在选择攻击目标IP地址时,也采用了如下一些特别的处理:
1. IP地址的第一段会排除127和大于等于224的情况;
2.每隔40分钟,病毒会对IP地址中的第一段进行一次随机分配;
3.每隔20分钟,病毒会对IP地址中的第二段进行一次随机分配;
4.如果攻击的IP地址445端口是开放的,会持续对这个IP地址的C段子网(x.x.x.1~x.x.x.254)发起254次攻击。
WannaCry的勒索攻击
作为一款勒索软件,WannaCry的勒索攻击也很有自己的特点,特别是对不同类型文件的分类分级加密,以及某些反病毒技术的使用,让人印象深刻。
WannaCry的文件扫描
对文件进行加密是勒索软件最基本的攻击方式,WannaCry也不例外。WannaCry在感染电脑后,会首先从程序资源中的zip压缩包中解压释放一个敲诈勒索功能相关的程序。
表1列出了WannaCry释放的与敲诈勒索相关的文件和功能详情。
表1 WannaCry释放的与敲诈勒索相关的文件
名称 | 作用 |
b.wnry | 敲诈图片资源 |
c.wnry | 配置文件,包含钱包信息,tor地址 |
r.wnry | Q&A |
s.wnry | 压缩包,包含TOR网络组件 |
t.wnry | 加密的PAYLOAD,用于加密文件 |
u.wnry | 解密程序(@WanaDecryptor@.exe) |
taskdl.exe | 删除临时文件 |
taskse.exe | 在任意的远程桌面的session中运行指定的程序 |
taskhsvc.exe | 网络通讯组件 |
WannaCry的加密程序首先按字母顺序遍历查找硬盘,从Z盘倒序遍历盘符直到C盘,其中会跳过无法加密的光驱盘,还会特别注意移动硬盘设备。我们将WannaCry程序的文件递归函数抽象成了图3的信息图,以方便大家理解。
图3 WannaCry程序的文件递归函数抽象信息图
WannaCry的分级加密
WannaCry会根据要加密文件的大小和类型等信息,对文件进行详细的分类和分级,并使用不同的规则对不同类型的文件进行加密,目的是以最快的速度加密用户最有价值的文件,见表2~4。
程序为了能尽快加密其认为重要的用户文件,设计了一套复杂的优先级队列:
1. 对满足后缀列表1(见表3)的文件进行加密(小于0x400的文件会降低优先级);
2. 对满足后缀列表2(见表4)的文件进行加密(小于0x400的文件会降低优先级);
3. 处理剩下的文件(小于0x400的文件),或者其他一些文件。
表2 文件分级
文件类型 | 级别 |
exe、dll | 1 |
后缀列表1中 | 2 |
后缀列表2中 | 3 |
wncryt | 4 |
wncyr | 5 |
wncry | 6 |
均不符合以上规则 | 0 |
WannaCry的加密算法
在完成了需要加密文件的编辑处理后,程序就开始了最为关键的文件加密流程,整个加密过程使用了标准的RSA和AES加密算法,其中RSA加密功能使用了微软的CryptoAPI函数实现。
值得注意的是,在加密过程中,程序会随机选取一部分文件使用内置的RSA公钥来进行加密,其目的是为解密程序提供免费解密部分文件的功能。在完成加密之后,WannaCry会对其认为重要的文件进行随机数填充,然后将文件移动到指定的临时文件夹目录然后删除。此举用于对抗文件恢复类软件,同时兼顾加密文件的速度。
被随机数填充的文件需要满足以下几点:
1. 文件在特殊目录中(桌面,我的文档,用户文件夹);
2. 文件小于200M;
3. 文件名后缀在后缀列表1。
具体填充的逻辑如下:
1.如果文件小于0x400,直接覆盖对应长度的随机数;
2. 如果文件大于0x400,对文件距离末尾0x400处进行覆盖;
3. 再次重定位文件指针到文件头,以0x40000大小的缓冲区为单位向写随机数直到文件末尾。
WannaCry的文件删除
为了加快加密速度,WannaCry并没有在文件原文上进行加密处理,而是采用了先加密后删除的处理方法。但分析发现,在进行文件删除操作时,病毒作者的处理逻辑不够严谨,因此也就为数据的恢复提供了可能性。
WannaCry删除文件的操作大致过程为:首先尝试将文件移动到临时文件夹,生成一个临时文件,然后再尝试多种方法删除文件。
1.当采用遍历磁盘的方式加密文件的时候,会在当前盘符生成“$RECYCLE”+ 全局自增量+
“.WNCYRT”(例如 “D:\\$RECYCLE\\1.WNCRYT”)路径的临时文件;
2. 当盘符为系统盘(即C盘)时,使用系统临时目录(%temp%);
3. 之后程序以固定时间间隔,来删除临时文件夹下的文件。
文件的解密流程
首先,解密程序通过释放的taskhsvc.exe向服务器查询付款信息,若用户已经支付过,则将eky文件发送给作者,作者解密后获得dky文件,这就是解密之后的密钥(Key)。解密流程与加密流程相反,解密程序将从服务器获取的dky文件中导入Key。可以看到,当不存在dky文件名的时候,使用的是内置的Key,此时是用来解密免费的解密文件使用的。之后,解密程序从文件头读取加密的数据,使用导入的Key调用函数CryptDecrypt进行解密,解密出的数据作为AES加密算法的Key再次进行解密,得到原文件。
WannaCry的对抗技术
从WannaCry的代码来看,病毒作者具有一定反检测对抗能力。这里举两个例子。
1. 静态文件特征查杀的技巧
WannaCry敲诈程序在启动时使用了一个躲避杀毒软件的静态文件特征查杀的技巧。它会释放一个DLL模块到内存中,直接在内存中加载运行该DLL模块,DLL模块中的函数TaskStart用于启动整个加密的流程,动态获取文件系统和加密功能相关的API函数,用内存中的动态行为来和杀毒软件的文件静态扫描特征对抗。
2. 特定目录躲避
WannaCry在文件遍历的过程中会排除和比较一些路径或者文件夹名称,其中有一个很有意思的目录名“This folder protects against ransomware. Modifying it will reduce protection”。我们发现这个目标是国外的一款名为ransomfree的勒索防御软件创建的防御目录,勒索软件如果触碰这个目录下的文件,就会被ransomfree查杀。所以,当WannaCry遇到这个目录时,就会自动跳过去。这说明病毒作者有非常强的杀毒攻防对抗经验。
数据恢复的可行性
通过对WannaCry文件加密流程分析,我们会发现程序在加密线程中会对满足条件的文件进行覆写,从而彻底破坏文件的结构并防止数据被恢复。但是,受害者机器上仍然有很多不满足条件的文件未被覆写,这就为数据恢复提供了可能。
而在删除线程中,我们发现程序是先将源文件通过Windows系统的MoveFileEx函数移动到其创建的临时文件夹下,最后统一进行删除。在这个过程中源文件的文件名会发生改变,常规数据恢复软件不知道这个文件操作逻辑,导致大部分文件无法恢复。如果我们针对改变的文件名调整文件恢复策略,就可能恢复大部分文件。
另一方面,因为删除操作和加密操作在不同的线程中,受用户环境的影响,线程间的条件竞争可能存在问题,从而导致移动源文件的操作失败,使得文件在当前位置被直接删除,在这种情况下被加密的文件有很大概率可以进行直接恢复,但是满足这种情形的文件占少数。
根据以上分析,我们发现了除系统盘外的文件,用我们精细化处理的方法进行数据恢复,被加密的文件有很大概率是可以完全恢复的。据此360公司开发了专门的恢复工具2.0版,以期帮助在此次攻击中广大的受害者恢复加密数据1。
WannaCry与永恒之蓝
WannaCry的攻击力极强,最主要的原因就是使用了NSA泄密的网络武器永恒之蓝。
WannaCry模块对比
通过对WannaCry程序代码和实际发送的攻击数据包进行分析,我们发现程序使用的漏洞攻击代码和开源黑客工具所利用的永恒之蓝漏洞攻击近乎一致。我们再将抓取到的程序的真实攻击网络数据包进行分析对比,发现攻击的关键数据包也完全一致。
军用武器的民用化
诸如永恒之蓝这类军用网络攻击武器被用于民用网络攻击领域的现象令人不安,这也暗示着基于NSA工具的SMB服务漏洞正在积极地被蠕虫式利用传播。在WannaCry勒索蠕虫肆虐期间就出现了很多个去除掉自杀开关的修改版本,之后还发现了几乎捆绑NSA所有可用SMB漏洞攻击工具进行传播的EternalRocks(永恒之石)家族,这些派生的和其他恶意代码家族理论上具备更强的传播力,甚至会逐渐取代WannaCry蠕虫的主流地位。
WannaCry蠕虫的加密勒索行为会促使中招用户尽快进行处置,如重装系统、安装补丁,以减少后续的感染源。但是,如果其他利用SMB漏洞进行传播的蠕虫只是秘密地潜伏控制,不做更多引起用户注意的事情,则可能持续地保持活跃状态。2003年的SQL Slammer蠕虫,就一个400多字节的UDP Payload,只存在于内存中,理论上只要为数不多的受感染的系统同时重启一次,蠕虫就会被消灭,可是就这样一个蠕虫存活了至少十年(也许到现在还存活)。2008年爆发的Conficker蠕虫到现在都还处于活跃状态,从监测到的已感染的源IP数量来看,完全有可能再活跃多年。
此外,影子经纪人还宣称,将会在未来一段时间里,披露更多的NSA利用0day漏洞进行攻击的网络武器。如果此言成真,很可能引起网络安全更大的灾难。
WannaCry的变种分析
就在WannaCry原始版本的蠕虫泛滥成灾之时,360互联网安全中心又监测到了大量基于原始版本进行修改的变种,总量达到数百个,在情报中心的图关联搜索中可以很直观地看到部分关联。见图4。
图4 WannaCry的变种分析
下面对其中几个变种进行分析。
1. MD5值:d5dcd28612f4d6ffca0cfeaefd606bcf
此变种和原始版本蠕虫只有细微的差别,只是通过二进制补丁的方法修改了病毒程序的自杀开关病毒。链接的URL的地址被改为http://www.ifferfsodp9ifjaposdfjhgosurijfaewrwergwea.com。
以后发现的多个类似变种也都采用了这种通过简单二进制Patch的方式修改开关域名的方法,与原始版本相关,整个恶意代码只有域名部分的字节被进行了修改(见图5)。
图5 变种(右)与原版(左)蠕虫恶意代码对比
图6是原始版本WannaCry的开关域名与其中一个修改后域名的解析量对比。其中从对DNS访问量的监测来看,此类样本对整体感染面的影响基本可以忽略不计。
从图6中还可以看出,开关域名对蠕虫的传播影响非常大,在域名被安全研究者注册,形成有效解析和访问以后,初始的指数级感染趋势很快被抑制,之后再也没有超过最早快速上升阶段所形成的高峰。
图6 WannaCry相关域名的解析量对比
至于那些通过简单Patch得到的蠕虫为什么无法流行开来,我们推测其原因倒不是越来越多的系统被及时打上了补丁(这无法解释为什么非WannaCry蠕虫但同样利用NSA SMB系列漏洞的其他恶意代码感染量持续上升的趋势),而是因为主机上的防病毒工具所起的作用。这些简单Patch过的恶意代码与原始版本太像了,基于特征码的病毒查杀引擎就能非常有效地识别并做自动化的处理,如果这类派生蠕虫不像WannaCry那样在活动的早期感染量像链式反应一样迅速突破一个临界值,就很难再流行开来。
2. MD5值:d724d8cc6420f06e8a48752f0da11c66
该变种样本在原版样本的基础上,从二进制Patch直接去除了检查开关域名以停止加密的功能,可以直接进入感染流程。
但是,该样本在勒索模块的部分可能是由于作者疏忽,样本里硬编码用于解压zip的密码还是WNcry@2ol7,这个密码并不能解压成功,导致勒索流程被废掉。接下来的变种可能会修复这个bug,而使攻击的威胁程度大增。事实上,后来也确实出现了完全去除自杀开关并且可工作的版本。
综上,这些基于原始蠕虫简单修改的恶意代码已经不能构成严重威胁,最麻烦的在于那些潜伏下来让用户无感知的恶意代码家族,那才是真正的长久威胁,从Conficker蠕虫的前例来看,我们将与它们长期共存。 ■
脚注:1 360公司提供的恢复工具:中文版下载链接:http://dl.360safe.com/recovery/RansomRecovery.exe?from=360zhuiri
英文版下载链接:https://360totalsecurity.com/s/ransomrecovery/
所有评论仅代表网友意见