专栏首页安恒网络空间安全讲武堂一种 Au3 远控木马变种样本分析

一种 Au3 远控木马变种样本分析

一种 Au3 远控木马变种样本分析

0x01 Au3 简介

AutoIt3 (简称 Au3)是一种能够在Windows GUI 或 DOS 上实现一系列自动化任务的脚本语言,其语法类似BASIC。

使用 Au3 开发的程序,能够具有以下功能:

  • 模拟击键和鼠标移动操作;
  • 对窗口和进程进行操作;
  • 与所有标准的 Windows 控件进行交互。
  • 编译的独立可执行文件无需安装任何运行环境。
  • 可创建图形用户界面( GUI );
  • 支持 COM ;
  • 支持正则表达式;
  • 可直接调用外部 DLL 和 Windows API 函数;
  • 可实现 RunAs 功能;
  • 兼容大多数 Windows 版本;
  • 支持 Unicode 和 64 位操作系统。
  • 支持数字签名。
  • 支持用户账户控制( UAC )。

0x02 变种木马简介

近期,本人通过在网上部署的各个 VPS 节点蜜罐,捕获到一种新型的 Au3 脚本木马变种。在以往,大多数以 Au3 编码的恶意程序攻击中,主要都是以窃取键盘输入的木马为主,比如,2016 年腾讯电脑管家在 FreeBuf 上报道的 《异次元窃贼:使用AutoIt脚本进行键盘记录窃取的“新奇玩法”》 所述。

本次所捕获的新型变种,保留了以往的利用代码框架,但功能上明显增强,甚至还有部分神秘的功能模块可能还处于测试阶段,没有被攻击程序调用。可以认为,该新型木马变种的作者在原有的利用代码框架上,进行了增配和强化,使其完全具备远控木马的功能。甚至利用了 Au3 脚本自身的优越姿势,模拟人的键鼠操作,“手动” 退出了某厂商的些杀软进程(比如国际著名的 Avast杀毒软件)。

0x03变种木马分析

3.1 可疑文件

可疑文件被嵌入在某文档中,以邮件的方式进行传播:

提取出可执行程序样本后,发现该样本为 RAR 自解压程序:

使用 RAR 打开后,发现攻击者在解压配置中加入了某国语言的热门小说内容来逃避杀软检测:

清理解压配置中无用信息后得到配置信息如图:

分析自解压的配置信息发现,当用户双击文档中嵌入的 exe 程序时会触发自解压程序,将压缩包文件尽数解压到 %temp%\xxxx 目录下,该解压过程中的进度条被隐藏。且在解压过程中,如果遇到文件已存在的情况,则会直接覆盖(不会提示用户)。

分析解压后的文件发现,压缩包内存在各种类型的文件共二十多个, 其后缀名包括:bmp、mp3、dat、icm、jpg、ppt、docx、pdf、xl、ico、txt、exe 等。其中,除了 file1.exe 和 file2、file3 文件之外,其他的文件皆为文本文件:

任意打开压缩包内的文本文件发现,这些文本文件的内容都是一些字符串,此处推测这些文件存在的目的可能是为了欺骗杀软对压缩包内容的检测:

分析 file1.exe、 file2、file3 三个文件后发现:file1.exe 是 Au3 脚本的解释器,file2 是 Au3 脚本,file3 为 ini 配置文件。

对可执行程序 file1.exe 进行查杀发现,全球 63 款主流杀软对该文件的检出率为 0 。这种情况只有两种可能,一种可能是该程序确实为 Au3 官方发布的安全程序;另一种可能是该程序经过牛逼的免杀处理后,对全球主流杀软都具有免杀能力。这里唯一可以确定的一点是,该程序确实是 Au3 脚本的解释器,确实能够运行 Au3 脚本。

file1.exe 文件的签名情况如下:

直接双击运行 file1.exe 时,会提示选择用户手动一个 Au3 脚本(来编译并执行):

3.2 脚本分析

对 file2 进行分析发现,该脚本文件的源码通过大量增加无用注释(; 号开头的行都是单行注释)和无用代码(#-d-d-d 开头的大多是无用代码,且不干扰程序正常运行)的方式来增加内容和文件体积,此处推测目的是用于提高静态检测的难度以及使用大文件来逃避多数杀软的云查杀功能。

删除无用行后得到 6 KB 的代码:

从代码可知,file2 脚本运行时会加载 file3 的的内容,那么 file3 是不是程序的配置文件呢?我们载入 file3 来看看:

file3 中出现了熟悉的 [Setting],没错,经过分析发现 file3 就是一个 ini 配置文件。为了后续的分析更加直观,我们接下来将 file1.exe 改名为 AutoIt3.exe,将 file2 改名为 main.au3,将 file3 改名为 config.ini。

研究发现,该脚本执行过程的简述如下:

  1. 当解压操作完成时,程序会自动以当前用户的权限运行 AutoIt3.exe ,再由 AutoIt3.exe 编译并执行脚本文件 main.au3。
  2. main.au3 脚本执行后会从配置文件 config.ini 中加载加密的代码段,以及解密所需的密钥和其他配置参数。
  3. 紧接着进行解密操作,在当前目录下生成一个临时文件,文件名为五位随机大写字母且每次运行生成的文件名皆不同。该临时文件被用于写入解密之后 Au3 脚本代码,此处我们称生成的新文件为 attack.au3。
  4. attack.au3 生成后,会立即被主程序编译并载入内存执行。新脚本运行之后随即删除自身的临时文件,并再次载入配置文件 config.ini。
  5. 此时,会根据配置文件内的 “定制化配置” 参数,以及当前的运行环境来加载不同的攻击函数模块。为了构造攻击所需的 “payload”,脚本程序会从配置文件中读取新的加密代码段及新的解密密钥。
  6. 当一系列攻击操作完成时,被入侵的主机会主动向 C&C 服务器发起回连请求。

综上所述,整个木马程序的执行流程如下:

分析 config.ini 文件发现,依然是存在混淆信息:

匹配等号行发现,共有 7 个配置参数:

除了常规的配置外,还发现文件中大段大段的十六进制数据块上存在两对标记:

研究发现,标记内的数据为加密的十六进制数据块:

为了方便后续的分析,[Data] 标签和 [eData] 内连续的十六进制数据块 我们命名为HexBlock1,[sData] 和 [esData] 标签内的十六进制数据块我们命名为HexBlock2。

分析脚本文件 main.au3 的源码发现,代码中加入大量双引号和 and 符号 "&" 来逃避杀软的静态检测:

部分数据块也采用了临时替换组装的方式来逃避杀软的静态检测:

解密之后为:

上传到云端后发现仅有2款杀软能够检测出 main.au3 为恶意文件:

由于样本源码不打算公开,此处仅摘取脚本中的一些函数做介绍。需要注意的是,这些函数大部分是 Au3 官方提供的,而具有攻击性的 payload 代码大部分是存储在 DLL 数据里面:

  • #NoTrayIcon:用于隐藏程序的运行状态及任务栏图标
  • ProcessExists:此处用于判断一些杀软进程是否正在运行。
  • IniRead:用于加载配置参数。
  • FileExists:用于判断文件是否存在。
  • FileCopy:用于文件复制操作。
  • FileRead:用于读取配置文件中的加密代码块。
  • FileSetAttrib:用于设置文件属性。
  • FileWrite:用于写入解密后的新脚本到新文件中。
  • StringRegExp:用于匹配正则表达式。
  • StringRegExpReplace:用于处理正则表达式替换操作。
  • DllStructCreate:用于创建 DLL 结构体。
  • DllStructSetData:用于设置 DLL 结构体的数据内容。
  • DllStructGetPtr:用于获取结构体指针。
  • DllStructGetData:用于获取结构体的数据内容。
  • DllStructGetSize:用于获取 DLL&nbsp某指定字节数的数据内容。
  • DllCall:调用一个 DLL。
  • DllOpen:加载一个 DLL 文件到内存,以等待调用。
  • DllClose:关闭一个 DLL 文件。
  • WinExists:检测指定的程序窗口是否存在。
  • Execute:用于执行操作系统命令。
  • ShellExecute:用于执行操作系统命令。
  • FileDelete:用于文件删除操作。
  • ProcessClose:用于关闭进程操作。
  • RegDelete:用于删除注册表项操作。
  • RegWrite:用于注册表写入操作。
  • WinActive:检测指定的程序是否正在运行。
  • WinWaitClose:暂停执行脚本,直到指定的程序退出。
  • RunWait:执行一个外部程序并暂停脚本自身的运行,直到所执行的外部程序完成。
  • WinGetText:检索所有程序界面上的文字。
  • ClipPut:将指定的数据内容写入到系统剪切板。
  • DriveSpaceFree:显示指定磁盘的剩余空间。
  • InetGet:从互联网上下载文件,支持 HTTP、HTTPS、FTP 协议。
  • BitShift:用于数据位移操作。
  • BitAND:用于数据与操作。

3.3 进程注入

考虑到直接拿脚本源码中的解密逻辑去提取 DLL 数据内容比较抽象,此处分析内容主要以逆向为主。分析发现,攻击脚本 attack.au3 执行之后,会启动以下程序(优先使用v4):

C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegSvcs.exe

或者C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegSvcs.exe

先下一波断点(API 断点仅供参考):

bp kernel32.CreateProcessW bp kernel32.MoveFileA bp ws2_32.recv bp ws2_32.send bp Kernel32.WriteFile bp Kernel32.ReadProcessMemory bp Kernel32.WriteProcessMemory bp Kernel32.CreateFileW bp Kernel32.CreateFileA bp Kernel32.SetThreadContext

运行至启动 RegSvcs.exe 程序时,观察堆栈内容:

观察到 CreationFlags = CREATE_SUSPENDED,其作用是程序启动后便立即停止运行,只分配了内存空间。随后观察到注入的 DLL 数据被分成五次写入到新建的 RegSvcs.exe 进程内存:

第一次:

第二次:

第三次:

第四次:

第五次:

提取五次注入的内存块,即得到注入到 RegSvcs.exe 进程的 DLL 完整数据,我们将其命名为 inject.dll。

3.4 远控行为

得到 inject.dll 后,发现该模块为 C# 源码编写,用 dnSpy 载入分析发现,木马运行时,首先建立与远控服务器的心跳包连接,将受害者主机的基本信息回传到木马服务器。在心跳包监听中,如果收到服务器的指令,则按照指令执行相应的代码。可接受的指令部分如下:

指令

作用

kl

开启 KeyLogger 键盘记录模块

nk

使用指定的密码加密通讯流量

~

收集当前进程信息

~

源码中仅声明该指令,未定义具体操作

@

收集本地文件夹目录(只记录到文件夹名称,且排除系统目录)

#

收集指定文件夹内文件名

up

上传指定文件到服务器

dl

下载指定文件到受害者主机

Ex

执行系统命令或运行某程序

rb

在注册表中注册开启自启

mmm

退出自身进程

%_

尝试关闭指定进程

此外,源码中有些函数虽然定义了功能,但没有写调用代码,此处不做详细说明。此外,该远控木马客户端上线时,回传本机基础信息使用的是 BASE64 编码来加密流量.:

0x04 免杀思路总结

  1. 在自解压注释中,通过增加正常的小说文本来干扰杀软的识别。
  2. 解压的文件中,使用了二十多种后缀名,伪装普通的办公文件、图片文件、视频文件和文本文件。
  3. 解压的文件中,唯一的可执行文件是带了数字签名的 Au3 脚本解释器。
  4. 解压的文件中,大多数文件皆为无用的随机字符串。
  5. 主要执行的脚本文件中,增加了大量无用的注释行,以及不影响代码执行的非代码行。
  6. 主要执行的脚本文件自身体积近 3M,多数云查杀对该大小的文件内容不进行在线检测。
  7. 主要执行的脚本文件中,对所用到的 Au3 敏感函数、敏感字符串、二进制数据库都采用了以双引号和 AND 符号构成的 "&" 字符串进行分割。
  8. 在最终攻击代码的生成前,主程序会利用 Au3 脚本自身的优越姿势,模拟人的键鼠操作,“手动” 退出了某厂商的些杀软进程(比如国际著名的 Avast杀毒软件)。

对该木马的免杀思路总结大概就是这几条,当程序开始往进程注入 DLL 时,已是赤裸裸的进攻,不再具备免杀特性。

0x05 攻击来源分析

攻击者使用的远控服务的 IP 地址为 192.68.x.x ,所在地为瑞典,使用的通讯协议为 tcp ,端口 7771:

根据第三方情报数据显示,该远控端 IP 早在 2016 年就被捕获过可疑行为:

本文分享自微信公众号 - 安恒网络空间安全讲武堂(gh_fa1e45032807),作者:王小龍

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-12-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 听说thinkphp又出事了?

    0x01 前言 听说thinkphp又出事了,之前看过一次tp5的源码,不过只看了查询(select)的过程,这次问题出在update和insert中,但是归根...

    安恒网络空间安全讲武堂
  • 专题 | Python编写渗透工具学习笔记一

    目录&基础知识 0x00 Python编程中一些模块的简单介绍(基础知识) 0x01web目录扫描程序 --脚本代码的实现和分析 --优化脚本 0x02实现一个...

    安恒网络空间安全讲武堂
  • SUSCTF 2nd Web Wrtie Up

    好的编辑器开发真的很快!!http://sus.njnet6.edu.cn:11002

    安恒网络空间安全讲武堂
  • 聊聊eureka server的response cache

    eureka-core-1.8.8-sources.jar!/com/netflix/eureka/resources/ApplicationResource....

    codecraft
  • 为什么linux这么火?

    linux自从诞生之初,就受到编程爱好的热宠,到现在也是如此,前段时间linux创始人骂人的一句话,都成了互联网传播的热词,这从侧面说明了linux的火热程度。...

    程序员互动联盟
  • Datawallet发布新网站

    我们非常高兴与大家分享我们的新网站 (详情请见:https://datawallet.com ),新网站旨在让Datawallet更容易被用户所理解和接受。我们...

    区块链领域
  • 分离链接的散列散列代码实现

    散列 散列为一种用于以常数平均时间执行插入,删除和查找的技术。一般的实现方法是使通过数据的关键字可以计算出该数据所在散列中的位置,类似于Python中的字典。关...

    月见樽
  • 这家无人车公司专注货运,获新浪投资,有望全球最早商用

    百度投资上百亿做无人车,并宣称将在三年内商用、五年内量产,如果这一目标实现,百度有望成为全球最早实现自动驾驶技术商用的公司。不过,现在有一家不起眼的中国公司正在...

    罗超频道
  • 机器之心专访腾讯AI Lab姚星&张潼,独家揭秘腾讯低调的人工智能研究

    机器之心原创 作者:吴攀、李亚洲 2017 年 3 月 23 日,腾讯 AI Lab 在深圳举办了首届学术论坛,同时也正式宣布顶级机器学习专家、前新泽西大学终身...

    机器之心
  • 为什么linux这么火?

    linux自从诞生之初,就受到编程爱好的热宠,到现在也是如此,前段时间linux创始人骂人的一句话,都成了互联网传播的热词,这从侧面说明了linux...

    zhisheng

扫码关注云+社区

领取腾讯云代金券