7月23日,导航设备和智能设备制造商Garmin遭受了大规模的服务中断,随后官方确认受到了网络攻击。截至7月29日,受影响的线上服务还未完全恢复。研究人员分析后发现,攻击者使用了一个木马WastedLocker,本文对该木马进行技术分析。
研究人员分析发现WastedLocker使用了命令行接口,可以处理多个控制运行方式的参数。
优先处理:木马首先会加密指定的目录,然后将其加入到排除的列表中来避免再次二次处理,然后加密设备上剩余的其他目录。
###-f <directory-path>
只加密指定的目录:
-u username:password \\hostname
使用给定的认证凭证来加密指定网络资源上的文件:
启动的动作序列:
删除;
使用注册表SYSTEM\CurrentControlSet\Control\
子键列表中的随机子字符串复制到%WINDIR%\system32\<rand>.exe
创建一个随机命名的服务。如果该服务名存在,就加上前缀Ms
。该新服务的命令行就是被设置为%WINDIR%\system32\<rand>.exe -s
;
开始该服务直到结束工作;
删除该服务。
开启创建的服务,恶意软件会加密所有发现的文件。
WastedLocker的另一个特征是UAC绕过。木马启动后,会检查运行的完整性级别。如果等级不够高,恶意软件就会尝试用已知的绕过技术来提升其权限。
在%appdata% 中创建一个新的目录,目录名是从注册表SYSTEM\CurrentControlSet\Control\
的子键的子字符串中随机选择的;
从系统目录中复制随机的exe或dll文件到新目录中;
将木马的主体部分写入系统文件的NTFS流:bin
;
创建一个临时目录,并使用AIT函数NtFsControlFile
以及flag IO_REPARSE_TAG_MOUNT_POINT
设置挂载点为C:\Windows
;
在临时目录中创建一个名为system32
的子目录。加上前一步,新的子目录等价于%temp%\<directory_name>\system32
或C:\Windows \system32
;
复制合法的winsat.exe
和 winmm.dll
到子目录中;
修复winmm.dll
: 用恶意代码替换入口点代码,目的是在第2步启动可选的NTFS流内容;
启动winsat.exe
,由于DLL劫持这一步会触发修复的winmm.dll
的加载。
以上步骤会导致WastedLocker在无需显示UAC弹窗的情况下以更高权限从可选的NTFS流启动。
WastedLocker启动过程中的日志部分
为加密受害者的文件,木马开发者使用了AES 和RSA 融合的算法。选择哪些文件加密和哪些文件不加密的搜索屏蔽以及忽略的路径在恶意软件的配置中设置了:
对每个处理的文件, WastedLocker 会生成一个唯一的256 位的初始向量,初始向量会使用CBC 模式的AES-256 算法来加密文件内容。需要注意的是,攻击者必须要最大化木马的性能同时避免被安全解决方案检测到。每个加密的文件都会有一个新的扩展——.garminwasted
。
同时,木马会实现一种完整性控制的方法作为文件加密路径的一部分。恶意软件会计算每个处理文件的原始内容的MD5 哈希值,该哈希值可以用在解密过程中来确保这一过程的正确性。
WastedLocker使用了一种公开的名为rsaref
的RSA算法引用实现。
AES key、IV 和原始内容的MD5值,以及其他的辅助信息都是用嵌入在木马主题中的公开的RSA 密钥来加密的。样本中含有一个4096位的公开的RSA 密钥。
WastedLocker使用的公开的RSA 密钥格式
需要注意的是由于RSA密钥是嵌入在给定的恶意软件样本中的,因此如果WastedLocker 大规模部署的话,这类加密方案存在很大的缺点。受害者的解密器必须含有一个私有的RSA 密钥,允许受害者解密其文件。
RSA加密方案的结果是base64编码的,并保存在扩展为.garminwasted_info
的新文件中。对受害者加密的文件都会创建一个新的info文件。这在之前的BitPaymer 和DoppelPaymer 木马中是很少使用的。
测试机器中加密文件列表示例
木马的勒索信息
本文分析的WastedLocker 样本是针对特定目标的。使用了经典的AES+ RAS加密方案,因此样本加密的文件在没有攻击者的私有RSA密钥的情况下无法解密。
来源:https://securelist.com/wastedlocker-technical-analysis/97944/
本文作者:ang010ela
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/136867.html