在powershell脚本中隐藏数据的常见混淆方法有哪些
更新:HHH   时间:2023-1-7


这篇文章将为大家详细讲解有关在powershell脚本中隐藏数据的常见混淆方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

在powershell中定义行为

在我们讨论设计和概念之前,我们需要定义这个上下文中的“行为”,powershell是一种Microsoft脚本语言,powershell还解释和执行本机Windows命令行、dotnet代码。例如,powershell脚本中的以下三行都会产生相同的输出,即使它们是三个不同的调用方法。

Get-Date # PowerShell cmdlet
date # Command-line native Windows application
[System.DateTime]::Now # dotNET

这种灵活性使得分析变得更加困难,因为我们需要解释多种表达相同事物的方式。

当描述一个行为时,不一定是任何命令或命令的变体。举例来说,“get-date” cmdlet可能会是“枚举”行为,因为它正在检索运行脚本主机系统相关的数据。类似地,也可以将dotnet类“new object system.net.webclient.downloadfile”分组为“downloader”行为,因为它将用于远程检索文件。

动态与静态分析

脚本行为需要明确识别,但有时它们还不足以确定脚本是良性的还是恶意的。这些行为如何利用是决定的关键因素。那么我们如何推断意图呢?下面两个示例,它们在表面上看起来很相似,并且表现出相同的以下行为:“downloader”、“sleeps”、“enumeration”和“one liner”。

在动态恶意软件分析进入视野之前,静态查看文件是确定样本是否存在恶意行为的主要方法。随着时间的推移和动态分析的发展,越来越多的行业转向工具环境、产品和防御响应策略,围绕恶意文件的动态特性而不是静态属性。动态分析提供了大量的信息,在这个过程中投入的资源、技术和时间大大减少,因此行为分析成为主导力量。

如果一个powershell脚本,该脚本下载并执行另一个脚本,枚举系统信息,使用压缩和大量base64,分析人员第一个想法可能是它是恶意的,因为这些是动态分析恶意软件的日常行为。但在下图示例中,它只是一个powershell脚本,用于显示动画。

确定意图

为了确定意图,需要建立一个“基本事实”,并对脚本进行评分。为此,需要手动分析现实环境中的数千个良性和恶意powershell脚本,分别标记它们良性或恶意。当一个已知的恶意脚本低于设定的阈值时,需要把精力集中在提高其余样本的准确性上。手动分类的过程可以接触到所有可以想象到的脚本——各种各样的管理脚本和引导脚本。

在对样本集进行分类之后,能够更加完美地解决意图问题。在查看脚本并开始分析行为的过程中,还需要考虑行为的权重以及它和脚本的总体意图的关系。

例如,只下载和执行可执行文件的脚本与相同行为但使用模糊处理且完全包含在一行的脚本相比,当它同时生成日志或代码结构良好时,就不太可能是恶意的。类似地,一旦一个行为被识别出来,就可以观察它在良性和恶意脚本中的分布。还需要观察脚本中某些“罕见性”行为,并相应地调整评分权重。

识别重要的行为并找出如何对它们进行适当的评分是这个分析的核心。一旦行为被创建并分配分数,就可以创建一个风险梯度标度,我们可以将每个样本映射到其中,并找到一个“最佳点”,开始进行更精细的调整。下面一个图表描述了powershell脚本中用作静态评分风险的准则等级。

将恶意脚本的得分设定在6.0左右,低于这个临界值,风险会降低。

需要考虑的事情

最后,需要考虑以下几点:

PowerShell是一种非常灵活的语言。它提供了多种方法来调用相同的功能,最终无法静态地捕获所有内容,特别是在恶意脚本作者试图规避检测的情况下。有时会错过一些识别行为指标,在这些情况下,策略上选择了谨慎处理,允许这些恶意脚本得分低于阈值,而不是过分重视某些行为导致良性脚本得分过高。

在分析过程中的另一个现象是良性脚本通常是独立的,因为它们是完全独立的,可以在没有参数或依赖关系的情况下运行;恶意脚本通常是一个大的难题中的一小部分,在拼图中占有较小的一块。

无论在尝试构建行为时脚本行为有多大或多小,当仅基于函数的行为失败时,我仍然可以使用上下文(“invoke dllinjection”)关键字或元数据(如字符频率分析)作为自己的行为模型来影响评分。

此外还需要考虑隐藏行为。因此,如果可以清楚地看到脚本内容中的恶意url,但无法识别它是如何从url下载负载的,那么仍然可以推断该脚本有一个未知的下载行为。这些推断的行为对于进一步的搜索和分析是一个很好的基础。

关于“在powershell脚本中隐藏数据的常见混淆方法有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

返回网络安全教程...