内联汇编支持:Rust通过asm!宏支持x64内联汇编,允许开发者直接嵌入汇编指令,从而实现对硬件的精细控制。 直接操作内存:Rust的unsafe关键字允许开发者绕过编译器的安全检查,直接操作内存,这为恶意软件编写者提供了更大的灵活性和控制权。 反编译难度高:Rust的编译器优化和代码生成特性使得恶意软件的反编译和分析变得更加困难,从而增加了恶意软件的隐蔽性和防御难度。
随着技术的持续发展,Rust生态系统日益成熟,新的恶意软件样本类型和攻击手法也不断涌现。因此,应对和分析Rust样本是有必要的。 接下来,本文将从多个角度剖析Rust在恶意软件中的具体应用,并对最新捕获的Rust样本进行详细分析。 Rust在恶意软件中的应用场景 Rust通过asm!宏支持内联汇编(Inline Assembly),允许开发者直接在代码中嵌入特定架构的机器指令。这一特性使病毒开发者在编写Shellcode时,能够更加灵活且具有更强的控制力。 Cobalt Strike通过Rust重写的核心部分在于其通信协议的实现,主要包括RSA加解密、AES加解密、Base64编解码及配置文件的加密与解析。其具体流程为:首先提取配置信息,然后利用RSA对这些信息进行加密,其中加密过程涉及用于AES解密协商的密钥。 RSA公钥 RSA加密 随后,对回传的数据进行AES加解密。 AES-CBC加解密 Rootkit功能图 断链隐藏驱动 断链隐藏进程 内核结束进程 内核APC Shellcode注入 getAsyncKeyState获取键盘数据 摘除进程回调、线程回调、模块加载回调、注册表回调。 摘除进程回调、线程回调、模块加载回调、注册表回调 最新样本分析 查杀图 执行流程图如下: main函数 管理员权限执行 计划任务 通过PowerShell命令创建计划任务。 User-Agent(UA) 随后,样本会在https://fanciful-gelato-78b95c.netlify.app/15429b.bin中下载恶意Shellcode代码,并将其加载执行。 下载恶意Shellcode代码 接下来,样本通过申请内存空间、复制恶意代码并修改内存属性(设置为可执行权限)的方式,加载并执行Shellcode。 分配内存 最后,样本通过创建新线程来实现执行恶意代码。 线程执行use std::arch::asm;//Linuxfn main() {unsafe{asm!("mov rax, 60","mov rdi, 42","syscall", );}}
对其恶意代码进行分析,其通过CLR(Common Language Runtime公共语言运行库)内存加载PE的方式执行后门功能。
对提取的PE文件进行分析后,确认其为Xworm 5.6远控木马,后门通信地址为154.197.33.29:7000。该变种版本已将所有与"Xworm"相关的字段抹去,以规避检测。
修改版Xworm 5.6
huhu7.26.msi安装:
在初始版本中通过MSI安装程序释放并执行恶意代码,释放的文件包括:
protector.exe(基于Rust编写的恶意代码加载器)。 Firefoxlatest.exe(合法的火狐浏览器安装程序,用于伪装)。 JPG文件。
MSI释放文件 通过对MSI安装包的CustomAction进行分析,可以发现protector.exe是由aicustact.dll的导出函数LaunchAPP启动执行的。而火狐浏览器安装程序则是通过viewer.exe以命令行方式进行安装的。 MSI主行为 AI_APP_FILE 初始版本的Rust加载器附带了PDB符号文件。经分析发现,其行为与变种版本基本一致:均通过添加计划任务实现持久化,并从网络地址http://107.167.2.178/15429.bin下载并执行恶意代码。 下载恶意代码 后续加载过程与变种版本相同,具体步骤如下:先开辟一块内存空间,再将内存的权限修改为可执行,最后创建线程来执行下载的恶意代码。 对网络获取的恶意代码Shellcode进行分析后,发现其执行方式同样是通过内存加载PE文件。该版本与变种版本的主要区别在于,其中的Xworm后门为未修改的5.6版本。