MedusaLocker是一种自2019年9月开始活跃的勒索软件,主要针对Windows系统。该恶意软件通过加密受害者的文件,要求支付赎金以恢复访问权限。
一个32位的可执行文件。
在开头,可以看到恶意软件最常用的一个技术之一,创建互斥体,确保单一实例的运行。
一个函数是一个简单的打印子程序,上面写着"[LOCKER] Is running\n"。不过,打印功能被禁用了。第二个函数是字符串格式化函数,用于格式化唯一的互斥体,然后将其传递给创建互斥体的函数。
创建互斥体的函数是sub_405630
勒索软件要想进行任何操作,都需要先提升权限。往下进入else分支:
sub_420AE0
函数的一个逻辑如下:
Start
↓
获取当前进程句柄
↓
尝试打开进程访问令牌 (OpenProcessToken)
↓
┌──────────────┬─────────────┐
│失败 │成功 │
│返回false ↓ │
│ 查询令牌提升状态(GetTokenInformation)
│ ↓
│ 是否提升(TokenInformation != 0)?
│ ↓
│ 是 否
│ 返回true 返回false
如果这里没有提升权限成功,返回了false,就会进入下面的sub_420C80
中,如下:
这里涉及权限提升的关键组件(Elevation:Administrator!new:
),它通过滥用 COM 对象来绕过 UAC(用户账户控制)这一内置安全措施。CMSTPLUA COM 接口存在一个已知的 UAC 旁路。
具体来说它通过初始化COM (CoInitialize),获取了相应的CLSID和IID,通过这个来构造一个Elevation字符串路径,尝试获取管理员权限的COM对象。构造的 Elevation:Administrator!new:
表明目标是提升当前进程的权限为管理员权限。
接着向下分析,在提权后的下个函数sub_420BB0
中,勒索软件对注册表进行了某些操作,如下:
一开始以外是通过注册表实现持久化,实际发现这里再禁用UAC,它修改了系统与 UAC(用户账户控制)相关的注册表项。
操作如下:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
。EnableLUA
:
0
会完全禁用 UAC。ConsentPromptBehaviorAdmin
:
0
表示禁用所有提示。向下,函数sub_405680
内。
注册表键值的路径是 "HKEY_CURRENT_USER/SOFTWARE MDSLK/Self"。MDSLK 的缩写可能是 medusa locker。这里的操作是该勒索软件的一个独特行为,即它会在注册表中添加一个标记键值,用于表示系统已被感染。
勒索软件使用不同的方式,即无限期地调度重复15分钟的任务来实现持久性。
恶意软件会在系统的 %APPDATA% 中创建一个名称为 "svhost.exe "的自身副本,并在任务调度程序中注册,每隔 15 分钟无限期执行一次。这时就需要使用互斥,当再次执行时,它会首先检查系统中是否已经运行了另一个实例。如果有,恶意软件就会退出,让前一个实例继续运行。
它会停止并删除一组预定义的服务和进程,以避免其加密过程受到任何干扰。通过对二进制文件中的字符串进行简单的静态分析,就能发现这些服务集。
上面函数通过服务管理器控制指定的服务,尝试停止运行中的服务并监控服务状态的变化。
OpenSCManagerW
以获取服务控制管理器的句柄 hSCManager
。权限标志 0xF003F
表示请求所有访问权限(读、写、启动、停止等)。sub_407A40
从 a1
获取服务名称(v2
),调用 OpenServiceW
以打开指定的服务句柄,权限标志 0x2C
包含查询状态和控制服务的权限。QueryServiceStatusEx
获取服务的当前状态ControlService
尝试停止服务而要关闭的服务被硬编码进内存中,可以在ida中直接观察到:
与大多数勒索软件一样,MedusaLocker也试图删除受害者系统中的数据恢复方式。不过,与大多数勒索软件不同的是,它是通过删除多个恢复选项来实现这一目的的,而不仅仅是删除卷影副本。
它使用vssadmin
和wbadmin
从系统中删除卷影副本。它还使用bcdedit.exe
删除其他恢复选项,以防止系统重新启动进入恢复模式。作为额外步骤,它还会清空回收站以确保万无一失。
上面列出的每一条命令都是由CreateProcessW
执行的,它将第一个空格作为进程名称的指示符,其余部分作为该进程的参数。sub_41E9A0
的子程序创建这些进程的过程如下:
总的来说,它启动外部进程并等待其结束。
勒索软件也使用对称加密来对文件进行加密,它使用AES-256算法。不过,又不同于一般的AES,它在过程中添加了RSA算法,加密密钥使用嵌入恶意软件的预定义公钥加密,只有使用攻击者的私钥才能解密。恶意软件作者在编写代码时,会使用随机生成的 AES 密钥对每个文件进行加密,然后再使用 RSA 公钥进行加密,并与多份赎金说明一起保存在系统中。
公钥经过base64编码后也是硬编码进了内存,
使用CryptStringToBinaryA
应用程序接口将 base64 编码的密钥转换为二进制格式,以便在加密函数中使用,如下:
最后,使用CryptGenKey
生成对称密钥,使用公钥对其进行加密,并保存在html赎金说明中。之后,加密器启动,加密过程中会跳过重要的文件夹和扩展名,如提取的字符串,如下:
勒索软件还具有一个网络模块:
sub_41DB40
是一个用于执行 ICMP echo 请求(即 ping 操作)的函数。它通过发送 ICMP 请求并等待响应来检查目标主机的可达性。函数内部使用了 IcmpCreateFile
和 IcmpSendEcho
来执行 ICMP 请求,并返回响应结果。
通过这个函数,它能够与本地网络中的远程系统建立连接,并扫描SMB共享。第一步是按顺序向每个系统发送 ICMP "Ping",并验证是否收到响应。之后,恶意软件会继续检查系统中是否有任何打开的 SMB 共享,但不包括名称中带有 " "的共享,这表示隐藏共享。然后,恶意软件会将剩余的共享累加到一个列表中,并在稍后阶段进行加密。
5 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!