测验依据字符频度检测Powershell混杂

在我从前的文章中,从前描述过运用ObfuscatedEmpire来自动化C2通道中的PowerShell混杂,以躲避杀毒软件的签名,在那篇文章中,我也提到了其他人提出的用于检测歹意PowerShell脚本的技能。该技能...

在我从前的文章中,从前描述过运用ObfuscatedEmpire来自动化C2通道中的PowerShell混杂,以躲避杀毒软件的签名,在那篇文章中,我也提到了其他人提出的用于检测歹意PowerShell脚本的技能。该技能开始由微软的李•霍尔姆斯(Lee Holmes)提出的,是为了搜索混杂发作的一些头绪。
例如,Invoke-Obfuscation运用的令牌混杂技巧是将撇号,行将`刺进到函数称号和其他登录凭证中。Invoke-Empire可能会成为iN`v`OK`e-`eM`p`IR`e,不过这些功用在PowerShell中的效果和Invoke-Empire是类似的,但会损坏与文字字符串“Invoke-Empire”匹配的杀软签名。可是,我真的期望脚本中的一半字符是由撇号组成吗? Lee早在2019年11月就对这一类型的检测办法进行过介绍。不过,在这篇文章中,我将首要参阅他最近的一篇文章,该文为咱们供给了一些十分棒的PowerShell功用,并运用Measure-CharacterFrequency和Measure-VectorSimilarity完成一些含糊检测技能。
本文基本上仅仅我重现Lee在他这篇文章中的一些检测技能,其中就包括一个可用于检测含糊化脚本的封装脚本。
这个脚本就是Invoke-ObfuscationDetection,首要的效果就是用作函数的封装器,可用于操作依据字符剖析的混杂检测功用。Invoke-ObfuscationDetection会把PowerShell脚本界说为“正常”字符散布的基线,经过核算给定的PowerShell脚本的字符散布,界说给定脚本有必要满意的字符散布的向量类似度,然后依据回来的布尔值是True或False来判别脚本是否被含糊化。
Invoke-ObfuscationDetection会回来一个“IsObfuscated”这样的布尔成果,给定一个包括脚本的字符串:
PS> Invoke-ObfuscationDetection -Script 'iN`v`OK`e-`eM`p`IR`e'
Obfuscated
----------
      True
Invoke-ObfuscationDetection还承受包括脚本的文件名作为输入的-ScriptPath参数:
PS /opt/ObfuscatedEmpire/data/obfuscated_module_source/> Get-ChildItem -Recurse -Include *.ps1 | Invoke-ObfuscationDetection | % { $_.Obfuscated } | Group-Object
Count Name                      Group
----- ----                      -----
   72 True                      {True, True, True, True...}
    2 False                     {False, False}
该指令显现Invoke-Obfuscation的TokenAll1指令混杂的Empire模块上的Invoke-ObfuscationDetection的成果,我还能够经过Invoke-ObfuscationDetection(启用ScriptBlock日志记载)来供给ScriptBlock日志:
PS> Get-WinEvent -FilterHashtable @{ProviderName="Microsoft-Windows-PowerShell"; Id = 4104} | % { [PSCustomObject] @{ ScriptName = $_.Properties[3].Value; Script = $_.Properties[2].Value } } | Invoke-ObfuscationDetection | Select -First 2
Name                                 Obfuscated
----                                 ----------
2980cef2-ed31-4146-870a-a395b2d3debf       True
431be04f-98a5-47cf-8e47-e565ccf6e520      False
在评论Invoke-ObfuscationDetection的有效性之前,我认为有必要解释一下测验办法, Invoke-ObfuscationDetection在完成时,其最大的应战就是要确认什么才干构成“正常”的PowerShell脚本。能够经过下载poshcode.org上的每个脚本,删去Windows Defender中有意混杂的脚本和辨认为歹意软件的脚本(一共5552个脚本),并运用Measure-CharacterFrequency功用得到均匀字符散布。
接下来的应战就是确认均匀字符散布时可承受的差异,由于并不是每个脚本都完全符合均匀字符散布。尽管我会运用Measure-VectorSimilarity函数来丈量每个脚本与均匀字符散布的差异,但我怎么决议哪些差异是能承受的,哪些是不能承受的?经过测验,我发现仍是运用多年来的经历比较靠谱。我对5552个脚本中的一半进行了测验(以防止过度拟合),发现有一半会经过我供给的Measure-CharacterFrequency来确认均匀字符散布。
检测的有效性验证
现在敞开杀软环境,当我将一个含糊化的脚本供给给Invoke-ObfuscationDetection时,会发作假阴性过错,可是它没有被检测为混杂。当我向Invoke-ObfuscationDetection供给一个没有含糊化的脚本时,会发作假阳性过错,但它被检测为混杂。
在这样的情况下,确认假阳性或假阴性率发作的概率便十分重要,为此运用我多年的测验经历,我在测验过的脚本中确认了一些类似性较高的混杂脚本,以便把假阳性和假阴性的概率降到最低。我会对测验的脚本运用Invoke-Obfuscation的TokenAll1指令进行混杂,而将未混杂的那一半脚本提交给Invoke-ObfuscationDetection以确认假阳性发作的概率,然后我会将这些脚本提交到Invoke-ObfuscationDetection以确认假阴性发作的概率。
下图中,X轴代表类似度要求,Y轴代表发作的概率。

[1] [2]  黑客接单网

  • 发表于 2021-04-09 12:54
  • 阅读 ( 169 )
  • 分类:互联网

0 条评论

请先 登录 后评论
陈华除嘿
陈华除嘿

652 篇文章

你可能感兴趣的文章

相关问题