九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)

admin 2022年6月14日07:58:34评论49 views字数 4847阅读16分9秒阅读模式

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)



特别说明及声明

  1. 本文原文为K A, Monnappa. 2018年发表的《Learning Malware Analysis》,本文的相关内容均为笔者对相关内容的翻译及实践记录,仅供各位学术交流使用。另出于易读性考虑,对部分字句有所删改。


  2. 如各位需要引用,请做原文引用,格式如下所示:
    [序号]K A, Monnappa. LearningMalware Analysis[M]. 2018.06. Published by Packt Publishing Ltd. Livery Place 35 Livery Street Birmingham B3 2PB, UK.

  3. 因文章整体内容较长,完整内容将会在本公众号拆分为多篇内容分别发出。本文为该系列的第二篇,上篇内容请参见:

    恶意样本分析之恶意软件的功能和持久化(一)




1.3 键盘记录器




键盘记录器是一种拦截和记录键盘点击的程序。攻击者在其恶意程序中通过使用键盘记录功能来窃取受害者通过键盘输入的机密信息(如用户名、密码、信用卡信息等)。

在本节中,我们将主要关注用户模式的软件键盘记录器。攻击者可以使用各种技术记录击键。最常见的记录击键的方法是使用记录的Windows API函数,用其来:
1)检查钥匙状态(使用GetAsyncKeyState() API);
2)安装钩子(使用SetWindowHookEX() API)。


1.3.1 使用GetAsyncKeyState()的键盘记录器


这种技术会涉及到查询键盘上每个键的状态。而为了能做到这一点,键盘记录器利用GetAsyncKeyState()API函数来确定按键是否被按下。从GetAsyncKeyState()的返回值,可以确定在调用该函数时,该键是向上还是向下,以及该键是否在之前调用GetAsyncKeyState()后被按下。


下面是GetAsyncKeyState()API的函数原型。

SHORT GetAsyncKeyState(int vKey)


GetAsynKeyState()接受一个整数参数vKey,指定256个可能的虚拟键代码之一。


为了确定键盘上单个按键的状态,GetAsyncKeyState() API可以通过传递与所需键相关的虚拟键代码作为参数来调用。


而为了确定键盘上所有按键的状态,一个键盘记录器在一个循环中不断轮询GetAsyncKeyState()API(通过传递每个虚拟按键代码作为参数),以确定哪个按键被按下。


大家可以在MSDN网站上(链接如下)找到与虚拟键代码相关的符号常量名称。

https://msdn.microsoft.com/en-us/ library/windows/desktop/dd375731(v=vs.85).aspx

*左右滑动查看更多


下面的截图显示了一个键盘记录器的代码片段。

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)


该键盘记录器通过调用地址为0x401441的GetKeyState()API来确定Shift键的状态(判断它是向上或向下)。在地址0x401459,键盘记录器调用GetAsyncKeyState(),这是一个循环的一部分,在循环的每个迭代中,虚拟键代码(从键代码数组中读取)被作为参数传递,以确定每个键的状态。


在地址0x401463处,将会执行一个测试操作(与AND操作相同)。在该地址,对GetAsyncKeyState()的返回值进行测试操作(与AND操作相同),以确定最重要的位是否被设置。如果最重要的位被设置了,这就表明按键被按下了。


如果一个特定的键被按下,那么键盘记录器就会调用地址为0x40146c的GetKeyState()来检查Caps Lock键的状态(用以检查它是否被打开)。使用这种技术,恶意软件就可以确定在键盘上输入的是大写字母、小写字母、数字或是特殊字符。


下面的截图则显示了该循环的结束。

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)


从代码中可以看出,该恶意软件在0x5c(92)键代码中进行迭代。在这种情况下,var_4作为索引进入要检查的键代码数组,它在循环结束时被递增,只要var_4的值小于0x5c(92),循环就会继续。


1.3.2 使用SetWindowsHookEx()的键盘记录器


另一种常见的键盘记录器技术是通过安装一个函数(称为钩子程序)来监测键盘事件(如按键)。


在这种方法中,恶意程序注册了一个函数(钩子程序),当键盘事件被触发时,该函数将会被通知。该函数可以将按键记录保存到一个文件里或是通过网络发送。


恶意程序使用SetWindowsHookEx()API来指定要监控的事件类型(如键盘、鼠标等)以及当特定类型的事件发生时应该被通知的钩子程序。钩子程序可以包含在一个DLL或当前模块中。


当恶意软件样本通过调用SetWindowsHookEx()和WH_KEYBOARD_LL参数(恶意软件也可能使用WH_KEYBOARD)为低级别的键盘事件注册了一个钩子时,另一个参数offset hook_proc则显示了挂钩过程的地址。当键盘事件发生时,这个函数将被通知。通过检查这个函数就可以了解到键盘记录器是如何和在哪里记录击键的。


此外,还有两个参数,一个是包含钩子程序的模块(如DLL或当前模块)的句柄。另一个参数0,则与指定钩子程序将与同一桌面上的所有现有线程相关。




1.4 通过可移动媒体复制恶意软件




攻击者可以通过感染可移动媒体(如USB驱动器)来传播其恶意程序。攻击者可通过利用自动运行功能(或利用自动运行中的漏洞)、在被感染的媒体插入时自动感染其他系统。这种技术通常会涉及到文件的复制或修改存储在可移动媒体上的现有文件。


一旦恶意软件将恶意文件复制到可移动媒体上,就可以使用各种技巧使该文件看起来像一个合法文件,以欺骗用户在USB插入不同系统时执行该文件。感染可移动媒体的技术使攻击者能够在断开连接的网络或有空气阻隔的网络上传播他们的恶意软件。


在下面的例子中,恶意软件调用 GetLogicalDriveStringsA() 来获取计算机上有效驱动器的详细信息。调用 GetLogicDriveStringsA() 后,可用驱动器的列表被存储在输出缓冲区RootPathName中,该缓冲区被作为第二个参数传递给GetLogicalDriveStringsA()。


下面的截图显示了调用GetLogicDriveStringsA()后的三个驱动器:C: 、D: 和 E:,其中E:是USB驱动器。一旦它确定了驱动器的列表,它就会遍历每个驱动器以确定辨别该驱动器是否是可移动的。该步骤通过比较GetDriveTypeA()的返回值和DRIVE_REMOVABLE(常量值2)来确定。

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)


如果检测到可移动媒体,恶意软件会使用CopyFileA()API将自己(可执行文件)复制到可移动媒体(USB驱动器)。为了隐藏可移动媒体上的文件,会调用SetFileAttributesA()API并传递给它一个常量值FILE_ATTRIBUTE_HIDDEN。

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)


将恶意文件复制到可移动媒体后,攻击者就可以等待用户双击复制的文件,或是利用自动运行功能。


在Windows Vista之前,恶意软件除了复制可执行文件外,还将包含Autorun命令的autorun.inf文件复制到可移动媒体上。这些自动运行命令允许攻击者在媒体被插入系统时自动启动程序(无需用户干预)。


从Windows Vista开始,默认情况下,要通过Autorun执行恶意二进制文件是不可能的,所以攻击者必须使用不同的技术(如修改注册表项),或利用一个漏洞才可能允许恶意二进制文件自动执行。


一些恶意软件程序依靠欺骗用户来执行恶意二进制文件,而不是利用自动运行功能。Andromeda就是这样一个恶意软件的例子。为了证明Andromeda使用的伎俩,请看下面的截图。


截图显示了将2GB的“干净”USB驱动器插入感染了Andromeda的系统之前的内容。USB的根目录包括一个名为 test.txt 的文件和一个名为 testdir 的文件夹。

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)


一旦干净的USB驱动器被插入被Andromeda感染的计算机,它就会执行以下步骤来感染USB驱动器。

1)通过调用 GetLogicalDriveStrings() 确定系统中所有驱动器的列表。

2)恶意软件迭代每个驱动器,并使用 GetDriveType()API 确定任何驱动器是否为可移动媒体。

3)一旦找到可移动媒体,它就会调用 CreateDirectoryW()API 来创建一个文件夹(目录),并传递一个扩展ASCII码xA0(á)作为第一个参数(目录名称)。这样就在可移动媒体中创建了一个名为E:á的文件夹。


由于使用了扩展ASCII码,该文件夹在显示时会变得没有名称。下面的屏幕截图显示了E:á目录的创建。

从现在开始,我们将把这个由恶意软件创建的目录称为未命名的目录(文件夹)。

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)


下面的屏幕截图显示了未命名的文件夹。这就是在上一步骤中创建的具有xA0扩展ascii代码的文件夹。

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)


4)通过调用SetFileAttributesW()API,将这个未命名的文件夹的属性设置为隐藏,使其成为受保护的操作系统文件夹。这样就隐藏了可移动媒体上的文件夹。

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)


5) 恶意软件从注册表中解密了可执行内容。然后它在未命名的文件夹中创建一个文件。创建的文件名为 惯例.1,并将PE可执行内容(恶意DLL)通过使用CreateFile()和WriteFile()API来写入该文件。


这样做的结果就是,在未命名的文件夹内创建了一个名字为.1的DLL,如图所示。

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)


6) 随后,该恶意软件在未命名的文件夹内会创建一个desktop.ini文件,并写入图标信息,为未命名的文件夹分配一个自定义图标。desktop.ini的内容显示在这里(见下图)。

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)


下面的截图显示了未命名文件夹的图标,已被改变为驱动器图标。另外需要注意的是,未命名的文件夹现在是隐藏的。换句话说,这个文件夹只有在文件夹选项被配置为显示隐藏的和受保护的操作系统文件时才会显示出来。

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)


7)恶意软件开始进一步调用MoveFile()API,并将所有的文件和文件夹(test.txt和testdir)从根目录移动到未命名的隐藏文件夹。在复制了用户的文件和文件夹后,USB驱动器的根目录看起来就像下面的截图所示这样。

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)


8)上述步骤完成后,该恶意软件又创建了一个指向rundll32.exe的快捷链接,而rundll32.exe的参数是.1文件(这就是之前丢在未命名文件夹中的DLL)。


下面的截图显示了快捷方式文件的外观,以及显示通过rundll32.exe加载恶意DLL的方式的属性。换句话说,当快捷方式文件被双击时,恶意DLL会通过rundll32.exe加载,从而执行恶意代码。

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)


利用上述操作,Andromeda可以说是玩了一个心理把戏。


那么现在,让我们了解一下,当用户在一个干净的系统上插入被感染的USB驱动器时会发生什么呢?


下面的截图显示了被感染的USB驱动器的内容,图上是它显示给正常用户(默认的文件夹选项)的样子。这里注意,用户并不能看到未命名的文件夹,用户的文件/文件夹(在我们的例子中为test.txt和testdir)在根驱动器中丢失。即该恶意软件正在欺骗用户,使其相信该快捷方式文件是一个驱动器。

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)


而当用户发现USB根驱动器中的所有重要文件和文件夹丢失时,用户就极有可能会在认为它是一个驱动器的情况下选择双击该快捷方式文件来寻找丢失的文件。而由于用户双击了该快捷方式,rundll32.exe将会从未命名的隐藏文件夹(用户不可见)中加载恶意DLL并感染系统。

(未完待续)





—  往期回顾  —

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)
九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)
九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)




关于安恒信息安全服务团队
安恒信息安全服务团队由九维安全能力专家构成,其职责分别为:红队持续突破、橙队擅于赋能、黄队致力建设、绿队跟踪改进、青队快速处置、蓝队实时防御,紫队不断优化、暗队专注情报和研究、白队运营管理,以体系化的安全人才及技术为客户赋能。

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)
九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)

原文始发于微信公众号(安恒信息安全服务):九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月14日07:58:34
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(二)http://cn-sec.com/archives/1113068.html

发表评论

匿名网友 填写信息