• 我们在哪一颗星上见过 ,以至如此相互思念 ;我们在哪一颗星上相互思念过,以至如此相互深爱
  • 我们在哪一颗星上分别 ,以至如此相互辉映 ;我们在哪一颗星上入睡 ,以至如此唤醒黎明
  • 认识世界 克服困难 洞悉所有 贴近生活 寻找珍爱 感受彼此

恶意代码技术理论:AutoIT恶意代码分析

基于语言 云涯 3年前 (2021-03-22) 2257次浏览

一 AutoIT概述

AutoIt(读音aw-tow-it)是一个用于Microsoft Windows的免费自动化语言。在它的早期发布版本中,这个软件主要旨在为微软Windows程序创建自动化脚本(有时也称为宏)但现在已经成长为包含了编程语言设计和全面功能的增强的软件。

在版本3中,AutoIt的语法结构调整为接近于BASIC系列的语言。它是使用经典数据模型、利用可以存储多种数据类型包括数组的变量类型的第三代编程语言。它兼容于Windows 95,98,ME,NT4,2000,XP,2003,Vista以及Windows 7。

AutoIt自动化脚本可以编译成压缩、单一的可执行文件,这样的文件可以运行在没有安装AutoIt解释器的计算机上。

AutoIt3官方网站:https://www.autoitscript.com/site/

大神分析文章:https://github.com/V1V1/OffensiveAutoIt

 

二 分析技巧

2.1 反编译

Exe2Aut

可以使用Exe2Aut工具(http://domoticx.com/autoit3-decompiler-exe2aut/)将AutoIT可执行文件反编译回普通的AutoIT脚本。

Exe2Aut官方网站:https://exe2aut.com/

Exe2Aut Github 地址:https://github.com/JacobPimental/exe2aut

云盘下载:https://drive.google.com/file/d/1H9s9y-3LgdEjBayUOeBv88dZzXUIoHwC/view

myAut2Exe

https://github.com/fossabot/myAut2Exe

效果不太好

AutoIt-Ripper

https://github.com/nazywam/AutoIt-Ripper

python脚本,能提取文件,效果不错,但是它不能将原始文件夹分类。比如原始文件调用a/4.dll,它只是把4.dll提取出来,不会提取a目录

Universal AutoIT Extractor and De-obfuscator

https://github.com/Wilenty/Universal-AutoIT-Extractor-and-De-obfuscator

可视化程序,效果非常好,虚拟机使用

2.2 反编译脚本分析

通常,反编译脚本会被大量混淆。根据复杂程度,您可以尝试通过替换变量名称,手动并置值等手动方式处理。

运行AutoIt必须要有编译器:

AutoIt3运行程序(编译器):https://www.autoitscript.com/autoit3/files/archive/autoit/

以下是针对AutoIt的脚本调试器(调试器使用必须提安装以上编译器):

http://www.thefoolonthehill.net/drupal/AutoIt%20Debugger (可视化解密)

AutoIt脚本编辑器SciTE4AutoIt3:https://www.autoitscript.com/site/autoit-script-editor/

 

2.3 常用函数与宏

常用函数查询:

英文版(较全):https://www.autoitscript.com/autoit3/docs/functions/

中文版:https://www.jb51.net/shouce/autoit/AutoIt_CN/html/functions.htm

 

2.4 AutoIT编译

2.4.1 编译选项

AutoIt为用户提供了两个不同的编译选项:编译脚本或独立可执行文件。

2.4.1.1 编译脚本

使用编译后的脚本,恶意有效载荷将至少显示为两个文件:一个是编译后的脚本,另一个是合法的AutoIt解释器。AutoIt解释器本身是良性的。

这是一个这样的恶意样本的示例:

为了方便恶意代码执行,必须为解释器提供脚本。在上文提供的示例中,WinddowsUpdater.zip是脚本,并不是压缩文件。该文件夹中的快捷方式在执行时将运行以下命令:

C:\Windows\system32\cmd.exe /c start ..\WinddowsUpdateCheck\WinddowsUpdater.exe “..\WinddowsUpdateCheck\WinddowsUpdater.zip” & exit

将已编译的AutoIt脚本(WinddowsUpdater.zip)作为参数传递给AutoIt解释器(WinddowsUpdater.exe),来执行恶意代码。

2.4.1.2 独立可执行文件

独立的可执行文件显示为单个.exe文件,该文件实际上是AutoIt解释器,其中将编译后的脚本作为资源嵌入其中。

可以通过使用PeStudio 等进行分析并查找AutoIt覆盖,清单和/或字符串来确定正在处理的可执行文件是否是AutoIt独立可执行文件:

2.5 AutoIt恶意代码分析

2.5.1 严重混淆

样本哈希:

26510f4fb2778e0abaf07613321259db

使用Exe2Aut反编译后的代码被严重混淆,充斥着成百上千变量名,为分析带来非常大的困难。

类似于以下这样,根本无法分清这个函数的作用。

整个反编译文件的开头定义了很多变量,而且都通过a0b00003c30函数对数组cw进行处理。

那就使用调试器AutoIt_Debugger将这些值都打印出来

然后再源代码里进行替换(写py脚本),然后清晰了很多。

然后又发现上文中都是把变量复制了,不如2048字符串,复制给a2b5080445e,这样在代码中又是不能利用起来解密的字符串,那就再替换一步,把这些变量也都替换成字符串,这样在代码中都替换了。

思路就是通过不断把变量进行替换,使用debugger和py脚本把代码尽量通俗易懂化。然后再把函数的调用关系梳理一下。就能根据这处理过的代码看到功能:

样本根据当前时间戳生成字符串,在%Temp%目录创建后,将样本中嵌入的十六进制字符串文件复制到该目录,将该十六进制字符串解码以后续使用,在解码十六机制字符串后删除该文件;

复制自身为~\AppDataDir_\MSDUpdate\MsdUpdate.exe,并在注册表中添加自启项;

通过注册表等获取主机信息,并对获取到的主机信息进行MD5运算;

将主机信息加密后发送到C2:

例如测试机样例t=reg&uid=A5A619F157E62BEB591068B124D8F1E7&hname=ADMIN&gid=3&os=WIN_10|X64|0804&ctid=1&cvid=1&ti=10,然后使用使用对称加密将以上字符串加密,通过POST方式发送到http://simsoshop.com/update.php?c=主机信息MD5,然后接收C2回复;

其中信息传输请求头如下:

Content-Type : application/x-www-form-urlencoded

User-Agent : Mozilla/5.0(Windows NT9;WOW64;rv:38.0)Firefox:40.1

C2的回复命令是以‘##’和‘|’进行隔开。C2命令如下:

DL指令代表下载下一阶段有效载荷并执行;

 

TI指令代表间隔连接(暂无实质作用);

EC指令代表CMD执行命令,并将执行后结果发送给C2,间接实现反向SHELL;

UI指令代表删除程序以及注册表项,清楚痕迹;

AV指令代表检测杀毒软件;

 

 

 

 

 

 


云涯历险记 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:恶意代码技术理论:AutoIT恶意代码分析
喜欢 (0)