清香白莲 发表于 2017-9-2 17:40

狮鹫勒索者分析(样本来自于坛友)

本帖最后由 清香白莲 于 2017-9-3 09:06 编辑

GRYPHON RANSOMWARE分析报告
2017.0830-2017.09.02
样本来源:32469.js:https://www.52pojie.cn/thread-632863-1-1.html;   328522.exe:https://www.52pojie.cn/thread-632904-1-1.html
参考文献:http ://blogs.quickheal.com/technical-analysis-globeimposter-ransomware-quick-heal-security-labs/
1.介绍
1.1样本信息
32469_js_sha1:1f253b33f962aa657fc2ec3c79af1607fb4dcdb1
328522_exe_sha1:36efc4f101134f1c527d409fa37c2fde11d15583
exe图标:

图1.1 exe图标
1.2样本介绍
该样本属于GlobeImposter Ransomware的变种,攻击者诱骗用户运行js文件,js下载exe并执行,exe执行后加密所有用户文件(系统文件不加密),并感染网络资源。用户中毒,所有文件后缀名被改为“.gryphon”,同时弹出勒索信息:

图1.2 勒索信息
该样本,采用AES-256加密文件,密钥生成与GetTickCount有关,所以用户每次运行生成的密钥都不同。图1.2中”Your ID”就是经过RSA和Basse64加密的AES密钥信息,RSA公钥:
-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrgpPA8RXwHnCUCVqWjVznhVq/OKp/um9WkKnb4vyaT++nqBDck88GTpMpqKl/fvQ+TC/7WzS+CeVjZ8hdoNotTJ0AMQiZG6yQsg+An4gCyXH3o9jhha+v1HWOOpDXKmQvrpjE/eIzaKvyw82ElFqufpH8ja9Y3EsYZ88inFYiYQIDAQAB
-----END PUBLIC KEY-----
只有获取RSA私钥,才能对加密文件进行解密。
1.3样本流程




图1.3 样本流程2.下载模块分析—32469.js
32469.js的功能是下载328522.exe。
2.1运行环境
32469.js需要在IE浏览器上运行,因为:
①js中使用getYear()函数获取系统年份,判断运行时间是不是2017年。但是大多数浏览器调用getYear()返回的值是当前距离1900年的年份,而不是当前年份;而IE浏览器返回的则就是当前年份。

图2.1 getYear
②js中使用ActiveXObject对象,需要在支持ActiveXObject的浏览器上才能运行。
2.2代码分析
用文本编辑器打开32469.js,是一段经过混淆的js:

图2.2 js代码(这图盗用坛友的)
定位eval,找到js真正执行的js。一共有两个eval,第一段eval执行的js脚本,仍然是混淆的代码,第二个eval才是js“真正”执行的部分。将js代码中的第二个eval替换为document.write,打印出真正执行的代码:

图2.3去混淆后js代码
分析这段js,发现js使用了异常处理,js首先尝试使用Windows Script Host从”http://foolerpolwer.info/admin.php?f=3”下载可执行程序并调用ShellExecute执行,如果出现异常,则使用Powershell下载可执行程序并执行。有趣的是,WSH下载的文件:C:\ Users \ <user> \ AppData \ Roaming Microsoft \ Windows \ Templates \ {6_RandomNumbers} .exe;Powershell下载的文件(js中是”%appdata%rnd.exe”,而不是”%appdata%\rnd.exe”):C :\ Users \ <user> \ AppData \ Roamingrnd.exe 。
3.加载模块分析—328522.exe
328522.exe包含了大量加密的附加数据,程序首先解密第一段附加数据,生成并释放System.dll,调用System.dll解密第二段附加数据,生成加密程序。利用ExeInfo分析328522.exe,发现328522.exe极有可能是NSIS封装的软件安装包,但在运行时,加密程序并没有被释放到磁盘,而是直接在内存中执行。

图3.1 exeinfo信息
328522.exe一共27564字节数据,peid查看节信息,发现真正的PE数据只有9400字节,从偏移0x9400开始的数据,都附加数据。

图3.2 节信息
程序运行后,首先进行CRC32校验,校验前0x9400字节(真正的PE数据部分)的数据。之后会解密第一部分附加数据,经过计算生成System.dll;328522.exe加载System.dll,并调用导出函数System.dll.call,解密第二段附加数据,在栈空间中执行解密后的附加数据,这段附加数据会对自身的一部分数据再次解密。执行经过两次解密后的数据,这部分数据会解密出真正的加密程序,并保存在栈空间中。

图3.3 解密部分伪代码
将解密出的加密程序dump下来,生成样本sha1:a3f90f7d2f4eb2a94a203bd8e9c78ffc38911ff3。
之后程序创建自身子进程,并注入子进程,将真正的加密程序写入子进程内存空间,

图3.4 注入子进程
但是这里并不是使用的WriteProcessMemory进行注入,而是调用了ntdll.dll里的一些API,猜测是ZwUnmapViewOfSection,然后利用sysenter,注入了进程,笔者能力有限,这里的情况不会分析,请高手指点。

图3.5 唤醒子进程
4.加密模块分析
4.1密钥生成
加密模块首先生成加密密钥:

图4.1 生成AES密钥
加密密钥中唯一的变量从操作系统启动所经过的毫秒数是,利用GetTickCount获得,也正是这个变量导致了每次启动加密密钥都不相同。
4.2密钥加密
导入RSA公钥,利用RSA加密4.1中生成的密钥:

图4.2 加密AES密钥
4.3 创建子线程
创建子线程,子线程进行加密工作。

图4.3 创建子线程
4.4加密文件
4.4.1加密本地文件
在进行加密前,首先判断文件夹和文件后缀名,如果遇到下列情况则不进行文件加密:

图4.4 不进行加密的文件夹和文件后缀名
其他情况都会加密文件,加密文件时对文件前0xF400字节的数据进行加密,加密文件的伪代码:

图4.5 加密过程伪代码
4.4.2加密网络文件
枚举网络文件并加密

图4.6 枚举网络资源
4.5删除卷影显示勒索画面

图4.7 删除卷影
4.6开机启动显示勒索信息
将勒索信息文本(!## DECRYPT FILES ##!.txt)加入注册表开机启动:

图4.8 设置注册表开机启动项
5.总结
该勒索软件会加密所有用户文件,由于AES密钥的生成过程不可逆,在没有RSA私钥的情况下,用户无法获得AES密钥,也就无法恢复已经被加密的文件。根据勒索信息可知,该病毒编写组织是一个活跃在暗网的组织。

IOCs(据说写上这个就可以显得很专业):
Network Connections
      http://foolerpolwer.info/admin.php?f=3
      http://cr7icbfqm64hixta.onion   
      http://cr7icbfqm64hixta.onion.to
      http://cr7icbfqm64hixta.onion.link   
hash:
   1f253b33f962aa657fc2ec3c79af1607fb4dcdb1
   36efc4f101134f1c527d409fa37c2fde11d15583
   a3f90f7d2f4eb2a94a203bd8e9c78ffc38911ff3

阿呆哥 发表于 2017-9-4 22:40

欢迎分析讨论交流,吾爱破解论坛有你更精彩!

绿色的可乐 发表于 2017-9-7 09:37

吓的我赶快装了个XP

许许又几十 发表于 2017-9-4 13:29

厉害,占个前排

Python大法好 发表于 2017-9-4 14:08

萌新表示看不懂,先来学一下{:1_937:}看看思路

猫十三 发表于 2017-9-4 15:44

这。。。。膜拜大佬

km852753951 发表于 2017-9-4 16:46

厉害啊 哥 学习了

xiawan 发表于 2017-9-4 18:02

下载好多下载站一不注意就是下载下来了下载者的exe,大家要注意了

1071515411 发表于 2017-9-4 21:06

谢谢分享

li6893 发表于 2017-9-4 22:09

谢谢分享,虽然不怎么懂,感觉受益不少
页: [1] 2
查看完整版本: 狮鹫勒索者分析(样本来自于坛友)