使用AES加密的勒索类软件分析报告
报告名称: 某勒索类软件分析报告
作者: 李东
报告更新日期:
样本发现日期:
样本类型:
样本文件大小/被感染文件变化长度:
样本文件MD5 校验值: da4ab5e31793181df9bd83f23f132aa4
样本文件SHA1 校验值:
壳信息: 无壳
可能受到威胁的系统:
相关漏洞:
已知检测名称:
简介
[2017.2.3-10.Ransom.India.exe]是一个勒索原件,使用加密技术修改用户硬盘中的重要文件,使用户计算机无法正常使用,并以此为条件索要赎金。
被感染系统及网络症状
(1)自动打开IE浏览器并发布勒索信


(2)链接到IP地址45.76.81.110

文件系统变化
1. 在C:\ProgramData\MicroSoftWare\SmartScreen位置创建了一个SmartScreen,大小为97KB的文件

2.在硬盘每一个目录下创建了两个文件
文件名:[# RESTORING FILES #.HTML] MD5:691AE7C2C077AECFD349A5892EC05FE7
文件名:[# RESTORING FILES #.TXT] MD5:CA26604CE4DED43991CEFC5CF0EDC559
文件名:[OBBGFRPG.ONX.CRYPTOSHIELD] MD5:B25C14913787B6BB5DF7CAA428CFA9DE

3.遍历硬盘的所有目录,每个特定类型的文件都会被加密,而且名称也被修改为xxxx.xxx.CRYPTOSHIELD的形式

注册表变化
(1)修改了Run和RunOnce项,把SmartSreen.exe和病毒自身加入自启动项

(2)修改了ZoneMap项中AutoDetect和UNCAsIntranet的值,关闭了自动检测Intranet网络的功能

详细分析/功能介绍
当此勒索软件被运行后,会进行如下操作:
1.从自身的资源文件中(资源名FPOMZNTEYIIAASDAFASFDSAFASFASNDDFHJF)提取出大小为0xA055h的shellcode,并将其加载到自身进程中,此段shellcode经解密后是一个可执行的PE文件。
我们使用ResourceHacker查看文件的资源,发现PE文件在资源中处于被加密的状态

观察解密后的PE文件在内存中的状态,可以根据下图的一些标志来确定这是一个PE文件

2.程序自动修复解密后的PE文件中的IAT表,并获取入口点后执行,所有的恶意攻击都是这个PE文件中的代码执行的。
3.创建一个目录文件夹”C:\ProgramData\MicroSoftWare\SmartScreen”并把自身复制过去命名为[SmartScreen.exe],并删除[martScreen.exe:Zone.Identifier]文件(这个文件xxx),然后把[SmartScreen.exe]文件和自身加入到注册表的Run和RunOnce项中,以在系统重新启动后自动加载,此行为目的在于通过将自身伪装成IE浏览器的SmartScreen筛选器程序使其在系统文件夹中长期存留。
4.创建网络套接字并连接Ip地址45.76.81.110的站点
5.如果连接成功,则创建一个密钥容器,利用MD2算法产生一个随机的交换密钥,然后把密钥作为加密的私钥导出,导出后经某种加密算法加密,在C:\Users\Administrator\AppData\Roaming\OfficeTab\Favorites目录下创建一个文件[ExcelFavorite.acl],把加密后的私钥写入到文件中并保存在硬盘上,之后删除私钥释放密钥容器。
生成交换密钥源码如下:

生成的私钥(大小是0x114)

加密后的私钥(大小不变)

6. 获取用户名字符串经加密后与获取到的C盘卷标的序列号组合成一个字符串”C6F26321A88712E9”(不同的电脑会生成不同的字符串)。
用户名加密源码如下图:

7.上传公钥:病毒又再次打开刚刚创建的保存私钥的[ExcelFavorite.acl]文件,将其数据读取到内存中来生成如下所示的字符串,然后连接之前的站点45.76.81.110,使用HttpSendRequestA把这段字符串发送到test_site_scripts/moduls/connects/mailsupload.php.
生成的字符串:
“id=C6F26321A88712E9&numbers=----BEGIN PRIVAE KEY-----<br>6FF49A1BD27A9C1B0C9B99CD71EE99479BC0425D08157835DF2E120CB26AC21D5
F993B8BC4EDA020FF34C102BEF39FEAADD2AF8562EF98AA204AF129AF7944485CD66D5C2283<br>BA8B463C7C47E5F55B5A3BFF26347E88407A971AB01E9D4B3EC3B1CCA8AE3C4371DAA5DDD5F2245E943F3279B14337519B4B930FE2E92DED460BBC362BDB5FD3 C7D264867D3<br>5B7D1D82FDC15269C1C9750D5388ED8B640C1F06DD4420C06B23CE934426B795CCA4D939AE84EC729892B900CF66B234F74A3D1C0F6F5CC95232E930137466F2B59B708E2E81<br>06BD7A96BD6647DBD122B2A19F025278DAD2B10B4C644A484424BA4A7D3C4A0CA133F89A2D9A8918DA9A44BE0374BEFF9855198CF2D46DD0277585208DC9F2019CA5<br>-----ENDPRIVATE KEY-----&counts=”
8. 遍历每一个磁盘上的每一个文件,只要符合下图中任意一种类型,且名字中不包含字符串”# RESTORING FILES #”和"CRYPTOSHIELD”的文件,就会修改其属性为存档类型,可以被修改和删除。


9.创建一个密钥容器,使用SHA算法初始化一个哈希对象,并将之前写入到内存中的私钥(这个私钥是之前通过CSP函数获取到的未加密的私钥)作为数据加入到哈希对象中,从这段数据中产生一个对话密钥,然后使用此密钥加密每一个遍历到的符合要求的文件内的所有二进制数据并写入到新创建的文件名为xxxxx.xxx.CRYPTOSHIELD(xxxxx.xxx为原文件名被一个简单的加密算法加密后的字符串),此文件就是原文件的加密版本,最后把文件的的创建时间修改为与原文件相同。

10. 删除遍历到的符合要求的原文件。
11. 遍历每一个磁盘上的所有文件夹,并在每一个文件夹下创建[# RESTORING FILES #.HTML]和[# RESTORING FILES #.TXT]两个文件,里面保存的都是勒索信的文本信息。
12. 反虚拟机功能和反系统还原功能,调用控制台程序执行以下命令
/C vssadmin.exe Delete Shadows /All /Quiet 目的是删除计算机上的卷影副本,防止利用卷影副本来还原系统文件。ps:Windows7系统新增的“卷影副本”是在系统每次创建还原点时,会对启用了系统保护的硬盘分区上的所有文件创建一个副本,这个副本并不是简单的将文件复制备份,而是采用的增量备份原理,在硬盘中只有一个文件,但是该文件保留着修改的痕迹,能够细致地每一个文件夹都进行还原而不用再用“系统还原”来还原整个系统。
/C bcdedit /set {default} recoveryenabled No 禁用系统的启动修复功能(针对win 7 用户)
/C bcdedit /set {default} bootstatuspolicy ignoreallfailu 把启动修复功能策略修改为忽视所有错误;目的是为了防止系统被加锁后出现崩溃,然后自动还原到原始状态。
/C net stop vss 禁用vss服务,防止用户通过vss反追踪到文件的早期版本,来还原文件。
扩展:VSS是一个代码版本管理工具,和CVS是一样的。
它能防止意外的文件丢失、允许反追踪到早期版本、并能对版本进行分支、合并和管理。提供了完善的版本和配置管理功能,以及安全保护和跟踪检查功能。文件一旦被添加进VSS,它的每次改动都会被记录下来,用户可以恢复文件的早期版本,项目组的其他成员也可以看到有关文档的最新版本,并对它们进行修改,VSS也同样会将新的改动记录下来。
13. 最后打开网页文件[# RESTORING FILES #.HTML]和文本文档文件[# RESTORING FILES #.TXT],来显示勒索信息。
预防及修复措施
想要还原文件,我们就需要获取到加密所用到的私钥,这个私钥以被加密的方式保存在[ExcelFavorite.acl]文件中,我们只要破译这个加密方式,能够还原出私钥,就能够把文件都还原了。
第一种最简单的方式就是把这个程序拖进od里运行,因为这个程序自带解密算法,我们跟进去之后,把解密后的数据提取出0x114个字节,就能得到私钥了。
Dump得到的公钥

第二种方法就需要我们仔细研究解密算法了,并还原出源码了。
我们看到他的解密一共分两步,第一个函数生成了256个字节长度的key,第二个函数调用这个key来加密私钥。

关于加密算法的探究
第一个加密函数源码:

第二个加密函数源码,可以通过此源码解密恶意代码所创建的.acl文件,来获取私钥,然后调用CSP函数来执行解密操作。

使用AES加密的勒索类软件分析报告的更多相关文章
- AES加密解密 助手类 CBC加密模式
"; string result1 = AESHelper.AesEncrypt(str); string result2 = AESHelper.AesDecrypt(result1); ...
- AES加密解密工具类封装(AESUtil)
package club.codeapes.common.utils; import org.springframework.util.Base64Utils; import javax.crypto ...
- php的AES加密、解密类
<?php /** * php.ios.Android 通用的AES加密.解密方法 */ namespace Common\Business; class AESCrypt { /** * 初始 ...
- 使用AES加密的帮助类
在开发中经常使用加密/解密对一些内容进行处理,比如密码在存入数据库之前先经过加密处理等等,这里就把一个加密帮助类代码贴出来,供以后查找使用. 这个帮助类主要功能是对字符串和字节数组进行加密解密处理. ...
- 自写AES加密解密工具类
此类主要用于加密与解密,采用128位ECB模式,PKCS5Padding填充补位. 可使用方法为加密返回二进制encryptBin(content, key).加密返回十六进制encryptHex(c ...
- 【Android工具】DES终结者加密时报——AES加密演算法
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的两篇文章中.我们介绍了DES算法,3DES算法以及他们的Android程序实现,并研究了怎样才干实现 ...
- AES加密解密的例子小结
话不多说,先放上代码,一共有两个文件:AES.php(aes算法类文件)和aesDemo.php(应用实例文件),这里只贴出aesDemo.php,其他的看附件吧!aesDemo.php: 例子, ...
- java独立小程序实现AES加密和解密
一.需求: web项目中配置文件配置的密码是明文的, 现在需要修改成密文, 加密方式采用AES, 于是写了个工具类用于加密和解密. 又因为这个密码是由客户来最终确定, 所以为了部署时方便起见, 写了个 ...
- php AES加密解密的例子
一共有两个文件:AES.php(aes算法类文件)和aesDemo.php(应用实例文件) aesDemo.php:例子, <?php require_once('./AES.php'); // ...
随机推荐
- linux准备工具VMware以及ubuntu
链接:https://pan.baidu.com/s/1j7DZCmzOcC2rPAciHtZgkA 密码:et5s
- linux编译链接找不到库文件的解决方法。
今天编译出现ld: 0706-006 Cannot find or open library file: -l xerces-c_static,ld:open(): A file or directo ...
- 271. 杨老师的照相排列【线性DP】
杨老师希望给他的班级拍一张合照. 学生们将站成左端对齐的多排,靠后的排站的人数不能少于靠前的排. 例如,12名学生(从后向前)可以排列成每排5,3,3,1人,如下所示: X X X X X X X X ...
- Kali Linux Xfce版美化虚拟机镜像
起因 这两天来学校把硬盘基本全部清空了,所以以前的虚拟机就需要重新安装了. Kali 一直用的是 xfce 版本,至于为什么用这个版本,是因为我感觉 gnome3 在虚拟机上表现欠佳.当然,默认的 g ...
- 优雅的使用windows
1. 快捷键 win+数字键:打开任务栏对应位置的程序 eg:快捷打开程序,重复该组合键有两个效果,如果只打开了一个窗口,再次按下组合键即可最小化,如果打开了多个窗口,则可以在同一程序的多个窗口中切换 ...
- 【HNOI 2016】网络
Problem Description 一个简单的网络系统可以被描述成一棵无根树.每个节点为一个服务器.连接服务器与服务器的数据线则看做一条树边.两个服务器进行数据的交互时,数据会经过连接这两个服务器 ...
- Qt线程—QThread的使用--run和movetoThread的用法
Qt使用线程主要有两种方法: 方法一:继承QThread,重写run()的方法 QThread是一个非常便利的跨平台的对平台原生线程的抽象.启动一个线程是很简单的.让我们看一个简短的代码:生成一个在线 ...
- WebPack命令执行的时候,其内部处理逻辑是什么
1.首先webpack发现并没有通过命令的形式,给它指定入口和出口 2.向根目录查找“webpack.config.js”配置文件 3.解析这个配置文件,并得到配置文件中导出的配置对象 4.当拿到配置 ...
- Windows 循环根据进程名称 存在则删除该进程
@echo off:Looptasklist | findstr /i "javaw.exe" >nul 2>nul && (taskkill -f / ...
- Linux系统时间, 硬件BIOS时间的校准与同步
#宿主机系统时间: date #宿主机时间校准方法: yum install -y ntpdate ntpdate -u ntp.api.bz #centos查看设置系统时区:(可能没有) cat / ...