近期360互联网安全中心监控到一款GarrantyDecrypt勒索病毒的新变种开始在国内传播。该勒索病毒通过RSA结合salsa20对文件进行加密,被加密的文件后缀会被修改为NOSTRO,加密过程也非常规范,密钥使用完成会被马上销毁,加密文件实行“一次一密“。该勒索病毒也是我们见到的最丧心病狂的勒索病毒之一——不区分文件类型,加密几乎所有类型的文件。根据360互联网安全中心的监测,该勒索病毒主要通过爆破远程桌面弱口令,登录远程后手动投毒进行传播。
该勒索病毒在加密文件之前,会先做下面4项准备:
图1. 前期准备
该勒索病毒采用的微软提供的Crypto系列函数,随机生成一对当前客户端使用的RSA密钥对,在获取到该密钥对后,立即销毁了内存中密钥对。
图2. RSA密钥对
在获取到RSA密钥对后,又对私钥进行了一些处理,之后使用样本内嵌的作者的RSA公钥对这个处理后的密钥进行了加密,最后连同生成的RSA公钥一并写入到%appdata%/_uninstalling_.png文件中。
图3. 密钥处理
在处理好密钥数据后,该勒索病毒创建了两个线程来加密文件:其中一个线程用来遍历网络资源文件,而另一个线程用来遍历本地文件。
图4. 加密文件线程
常见的勒索病毒,通常会指定一个文件类型的范围,只对范围内的文件进行加密。而该勒索病毒则没有做这个判断——它会将所有类型的普通文件都进行加密。排除列表只包括5个目录和病毒自己产生的一些文件,同时还排除了一些被占用的和系统属性的文件:
图5. 排除在外的目录和文件
该勒索病毒制造者在加密文件这块做的也非常用心,每次加密一个文件之前,都会使用CryptGenRandom接口生成一个随机数做为密钥,这样就保证了一个文件一个密钥。同时在加密文件后该勒索病毒会立即销毁内存中的密钥信息,避免用户在中毒后通过从内存中dump出密钥信息来解密文件。
图6. 获取随机数
此外,在这一阶段,勒索病毒还会检查被加密文件的扩展名,如果扩展名在指定的列表范围内,则会对其进行全文加密,否则在后续的加密过程中只会进行一轮的加密循环——即只加密文件的头部1024字节内容。该逻辑我们认为是作者希望在保证勒索病毒破坏力的前提下,尽可能的对加密速度进行优化,这一点在文件加密算法的选择上也得到了印证。
图7. 判断文件是否需要被全文加密
而当前,该勒索病毒所定义的“需要被全文加密”的文件扩展名,则仅有“.txt”一个。即,只有.txt文件需要被全文加密,其他扩展名的文件则均只加密前1024个字节的内容:
图8. 需要被全文加密的文件扩展名列表
该勒索病毒在加密文件时,是用CryptGenRandom函数产生的随机数作为salsa20加密算法的密钥来加密文件。并在加密完文件后,将0xD3ADBE3F标记和被用RSA加密后的文件加密密钥添加到被加密文件的末尾。
图9. 加密文件
以下是被加密文件末尾的格式。有4个字节是写入的标记0xD3ADBE3F,最末尾的48个字节是写入的被RSA加密的当前文件的加密密钥。
图10. 被加密文件格式
在完成一个文件夹的加密之后,会在这个文件夹下创建#RECOVERY_FILES#.txt文件,留下勒索信息,要求用户联系对方。
图11. 勒索信息
针对服务器的勒索病毒攻击依然是当下勒索病毒的一个主要方向,企业需要加强自身的信息安全管理能力——尤其是弱口令、漏洞、文件共享和远程桌面的管理,以应对勒索病毒的威胁,在此我们给各位管理员一些建议: