近期360互联网安全中心监控到一款GarrantyDecrypt勒索病毒的新变种开始在国内传播。该勒索病毒通过RSA结合salsa20对文件进行加密,被加密的文件后缀会被修改为NOSTRO,加密过程也非常规范,密钥使用完成会被马上销毁,加密文件实行“一次一密“。该勒索病毒也是我们见到的最丧心病狂的勒索病毒之一——不区分文件类型,加密几乎所有类型的文件。根据360互联网安全中心的监测,该勒索病毒主要通过爆破远程桌面弱口令,登录远程后手动投毒进行传播。
样本分析
前期准备
该勒索病毒在加密文件之前,会先做下面4项准备:
- 判断当前进程权限,如果权限较低,则重新提权启动。
- 判断当前系统语言环境,避开斯拉夫语系的环境。这一点和之前很多勒索病毒一样(例如Hermes、Locky等勒索病毒),都避开了俄罗斯、乌克兰、哈萨克斯坦几个地区。
- 删除系统卷影,破坏Windows系统的系统恢复功能。
- 结束系统中运行的一些挖矿程序,由这点也可以看出:勒索病毒和挖矿攻击的目标经常是重叠的。
图1. 前期准备
密钥处理
该勒索病毒采用的微软提供的Crypto系列函数,随机生成一对当前客户端使用的RSA密钥对,在获取到该密钥对后,立即销毁了内存中密钥对。
图2. RSA密钥对
在获取到RSA密钥对后,又对私钥进行了一些处理,之后使用样本内嵌的作者的RSA公钥对这个处理后的密钥进行了加密,最后连同生成的RSA公钥一并写入到%appdata%/_uninstalling_.png文件中。
图3. 密钥处理
文件加密
在处理好密钥数据后,该勒索病毒创建了两个线程来加密文件:其中一个线程用来遍历网络资源文件,而另一个线程用来遍历本地文件。
图4. 加密文件线程
常见的勒索病毒,通常会指定一个文件类型的范围,只对范围内的文件进行加密。而该勒索病毒则没有做这个判断——它会将所有类型的普通文件都进行加密。排除列表只包括5个目录和病毒自己产生的一些文件,同时还排除了一些被占用的和系统属性的文件:
- // Windows
- // Program Files
- // Program Files(x86)
- // $Recycle.bin
- // System Volume Information
- .NOSTRO
- #RECOVERY_FILES#.txt
- _uninstalling_.png
图5. 排除在外的目录和文件
该勒索病毒制造者在加密文件这块做的也非常用心,每次加密一个文件之前,都会使用CryptGenRandom接口生成一个随机数做为密钥,这样就保证了一个文件一个密钥。同时在加密文件后该勒索病毒会立即销毁内存中的密钥信息,避免用户在中毒后通过从内存中dump出密钥信息来解密文件。
图6. 获取随机数
此外,在这一阶段,勒索病毒还会检查被加密文件的扩展名,如果扩展名在指定的列表范围内,则会对其进行全文加密,否则在后续的加密过程中只会进行一轮的加密循环——即只加密文件的头部1024字节内容。该逻辑我们认为是作者希望在保证勒索病毒破坏力的前提下,尽可能的对加密速度进行优化,这一点在文件加密算法的选择上也得到了印证。
图7. 判断文件是否需要被全文加密
而当前,该勒索病毒所定义的“需要被全文加密”的文件扩展名,则仅有“.txt”一个。即,只有.txt文件需要被全文加密,其他扩展名的文件则均只加密前1024个字节的内容:
图8. 需要被全文加密的文件扩展名列表
该勒索病毒在加密文件时,是用CryptGenRandom函数产生的随机数作为salsa20加密算法的密钥来加密文件。并在加密完文件后,将0xD3ADBE3F标记和被用RSA加密后的文件加密密钥添加到被加密文件的末尾。
图9. 加密文件
以下是被加密文件末尾的格式。有4个字节是写入的标记0xD3ADBE3F,最末尾的48个字节是写入的被RSA加密的当前文件的加密密钥。
图10. 被加密文件格式
收尾
在完成一个文件夹的加密之后,会在这个文件夹下创建#RECOVERY_FILES#.txt文件,留下勒索信息,要求用户联系对方。
图11. 勒索信息
总结
针对服务器的勒索病毒攻击依然是当下勒索病毒的一个主要方向,企业需要加强自身的信息安全管理能力——尤其是弱口令、漏洞、文件共享和远程桌面的管理,以应对勒索病毒的威胁,在此我们给各位管理员一些建议:
- 多台机器,不要使用相同的账号和口令
- 登录口令要有足够的长度和复杂性,并定期更换登录口令
- 重要资料的共享文件夹应设置访问权限控制,并进行定期备份
- 定期检测系统和软件中的安全漏洞,及时打上补丁。
- 定期到服务器检查是否存在异常。查看范围包括:
- 是否有新增账户
- Guest是否被启用
- Windows系统日志是否存在异常
- 杀毒软件是否存在异常拦截情况