分析恶意程序样本中的字符及数字签名

分析恶意程序样本中的字符及数字签名

简介

本次学习通过Strings分析样本字符、通过Sigcheck分析样本的数字签名

本次实验所需工具及样本存放在笔者github仓库 天问之路下的week33-34中

一、环境配置及工具介绍

1.环境配置

为了便于通过命令行使用工具,可以新建Tools文件夹,将工具放入文件夹中,保存基于命令行分析的工具。

在高级系统设置里选择环境变量并配置路径

image-20240402160657974

设置好之后,就可以通过命令行来使用这些工具了。

2.工具

2.1 Strings

通过前面的学习,可以知道判断目标样本是否为可以样本可以通过其是否含有敏感字符串来进行判断,比如杀毒软件进程,不相关的其他程序等。如果目标样本含有这些字符串,可以合理猜测其可能会搜索杀软进程将其关闭或者伪装成不相关的进程等操作。因此当我们分析PE程序时,先了解其包含哪些字符串是非常有利于下一步的分析工作的。

这里使用Strings来分析PE文件中的字符串。

2.2 Sigcheck

伪装成正规程序的恶意程序是没有数字签名的,虽然目前依然存在着大量的没有经过数字签名的软件,但是经过数字签名对比可以识别出伪装成有数字签名软件的恶意程序。利用sigcheck可以查看文件的数字签名信息,从而可以实现文件真假的辨别工作。

二、分析样本

1.利用Strings分析样本中的字符串

使用方式:选中样本,在TC的命令行一栏输入如下命令

1
strings 样本名称(选中Ctrl+C获取) >输出名称

image-20240402164233575

注意:

  • 若是输出文件大小为0,则可能是没有正确配置好环境变量。
  • 若是出现不能打开文件的报错,则很可能是防火墙拦截,需要关闭防火墙或在威胁选项里允许该文件。

然后按F3打开文件

image-20240402164416609

Strings同样会输出一些与分析工作无关的字符,所以我们需要按F7来查找我们需要的字符串信息:

比如这里查找360:

image-20240402164649237

image-20240402164701760

向下翻一下,可以发现很多敏感字符串:

image-20240402164748955

向上翻一下,可以看到很多键盘相关操作

image-20240402164857878

看到这些我们有理由怀疑,这个程序有可能还有键盘记录之类的功能,来获取用户的输入,根据这些字符串,我们很多时候就能够基本弄清楚一个程序的行为了。

静态启发查杀

按道理这些字符串是不应该出现在一个正常的程序里面的,那么其实我们就可以将这些字符串提取出来,编写成特征,只要发现某一个程序中有大量的类似于[ESC]、[Enter]以及[BackSpace]之类和键盘按键相关的字符,以及多种杀毒软件的进程名称的话,那么我们就有理由相信,这是一个恶意程序了。

注意

  • Strings分析字符串并不适用于所有样本:比如我们前面分析过的将字符串拆开一个个放到内存中或者是程序加壳混淆之后难以看到原本字符串的样子,这类程序是难以仅仅通过strings分析的。
  • 分析字符串的时候遇到不认识的字符要善于运用搜索引擎识别其含义。

2.利用Sigcheck分析样本的数字签名

数字签名

在软件的分发下载和安装过程中,数字签名扮演着非常重要的角色。 数字签名可以验证软件的来源、完整性以及可信度,有效避免了恶意软件的攻击和非法修改。 然而,现在依然存在着大量的没有经过数字签名的软件在被下载和使用。因此,此方法只能识别那些伪装成有数字签名软件的恶意程序。

下图摘自知乎,可以对数字签名有个更直观的了解

image-20240402165849097

软件数字签名的应用

为确保用户下载的应用软件安全可信,软件数字签名应用到了各个层面:

  • 操作系统层面:如Windows、iOS、Android等操作系统,都支持软件数字签名。
  • 应用商店层面:如苹果APP、谷歌play等各大应用商店上架APP软件都要求进行软件数字签名。

总而言之,软件数字签名是保障软件安全的重要手段,它能够保证软件的完整性和真实性,为用户提供更安全可靠的软件。通过软件数字签名,用户可以确认软件的来源和安全性,避免下载到被篡改或恶意软件。

所以通过数字签名主要是来辨别程序真伪。

首先来回忆一下之前分析的伪装成Kugou的dll样本(16d6b0e2c77da2776a88dd88c7cfc672)

image-20240402172800535

它的第四个导出函数的名称是KugouMain,于是就有理由怀疑,它是将自身伪装成了酷狗的文件,以混淆视听,因此可以将其归类为“白加黑”或者DLL劫持类的恶意程序。

为什么恶意程序可以使用这样的名字呢?因为一般来说酷狗的主程序,即kugou.exe在调用dll文件时,并不会对文件的哈希值进行匹配,而是仅仅通过文件名进行调用。所以恶意程序作者将程序名称伪装成kugou.dll,然后再和正常的酷狗程序一起打包,这样用户在不知情的情况下,在安装了这个伪造的安装包之后,只要一启动酷狗程序,那么就会直接调用这个DLL文件了,于是恶意程序的作者就达到了它的目的。这种恶意软件被称为”白加黑”恶意软件,即利用白名单的kugou.exe来调用黑名单的kugou.dll程序,这种方式可以有效逃过杀软的查杀。

下面在TC的命令行输入如下命令,使用Sigcheck查看其数字签名信息:

1
sigcheck -a 文件名(选中后Ctrl+J) >输出文件名

image-20240402205151760

可以看到该文件没有数字签名,其他的一些相关信息如产品公司版本等都是空着的

下面提取从酷狗官方网站下载下来的酷狗安装包(文件kugou)的数字签名:

image-20240402210340212

可以看到真正的酷狗文件的签名等信息是比较全的。

为了和前面我们分析过的那个虚假的kugou.dll作对比,我们来看一下该真实酷狗程序的导出表:

image-20240402210557741

可以看到不同函数的导出地址是不同的(区别于前面虚假程序的三个函数对应一个地址)

如果真实文件有任何一处被修改,则数字签名处则会显示未签名状态。

3.利用sigcheck辨别Windows系统文件

值得注意的是,早期的Windows版本的系统软件是没有数字签名的,比如样本中的kernel32

image-20240402213907664

而Win10之后的系统,微软都给文件加上了数字签名,如kernel32_64

image-20240402214021317

鉴于现在Win10之前的系统越来越少,此处就简单提一下:

在实际的样本分析中,有很多不严谨的黑客会伪造Windows系统软件,而在伪造系统软件的过程中,一些相关信息很有可能会写错。如果需要分辨该样本是否为为系统软件时,不确定的情况下最好拿真正的Windows系统文件来做一下对比就好。

各个安全公司的内部都会有一个庞大的白名单数据库,里面一定会有微软各个版本的操作系统的文件,目的就是为了避免分析师不小心将微软文件判定为是恶意程序,因为数据库中的微软白名单文件是绝对不可以报毒的,否则一定会引发全球规模的大面积误报。基于这一点,当我们遇到一个所谓的微软文件,而我们又拿不准它到底是真是假的时候,就直接看我们的白名单数据库里面有没有这个文件,如果没有,那么可以直接拉黑。但前提是,你一定要保证这个白名单的数据库是随着微软的脚步实时更新的,否则,我们还是要对文件进行深入分析才能够做出判断。

Reference

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

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

请我喝杯咖啡吧~

支付宝
微信