微软是机器学习方法应用的先锋,已经将机器学习应用应用于情报、实时保护等方面。本文介绍一个如何用于自然语言处理的方法应用于检测恶意PowerShell脚本。
将词语(word)转化为向量(vector)的重要步骤之一就是机器学习算法。其中一个基本的方法就是one-hot encoding,它对词汇表中的每个词都会分配一个唯一的数字,然后以0s向量的方式来表示每个词,1表示某个词的索引。虽然成功应用到很多例子中了,one-hot encoding也有它的缺点,就是每个词都是等距的,并且每个词之间的语义关系不会反映在相应向量之间的几何关系中。
因此就产生了Contextual embedding (上下文嵌入)方法,通过学习紧凑表示来克服one-hot encoding方法的缺点。这种方法的假设是相似语境下单词的意思相近,整个学习是在Wikipedia这样的大型数据库中学习。Word2vec算法就是这种技术的一种应用,不仅能将单词的语义相近性转变成向量的几何关系中,也可以表示单词之间的极化关系。比如,
Madrid – Spain + Italy ≈ Rome
因为要训练好嵌入需要很大的数据量,研究人员使用了386k不同的未标记的PowerShell脚本。Word2vec algorithm算法在应用于PowerShell语言时给出了类似的结果。为此,研究人员将PowerShell脚本分割为token,然后用Word2vec算法来为每个token分配向量化的表示。
图1是大约5000个随机选择的token的向量化表示的2唯视觉效果图。向量表示的-eq,-ne,-gt
与PowerShell的equal, not-equal,和greater than
对应。类似的,所有PowerShell中执行策略设置的有效值都是聚类表示的。
图1.使用Word2vec将5000个token 2D视觉表示
通过分析token的向量化表示,研究人员发现了一些有趣的关系。
通过使用token的Word2vec表示,研究人员识别了PowerShell中有别名的命令。在许多情况下,与给定命令最接近的token就是其别名。比如,Invoke-Expression的token表示就和别名IEX最接近。再比如,Invoke-WebRequest和IWR,Get-ChildItemcommand和GCI。
研究人员还分析了不同token的距离。比如,图2中右侧的4个token$i, $j, $k 和 $true
。前3个用来表示数字变量,最后一个表示布尔常量。因此,$true token
与其他token不匹配,因此距离是最远的。PowerShell在网络安全应用中,研究人员检查了bypass, normal, minimized, maximized, hidden等的token表示,如图2左侧所示。第一个token是PowerShell的ExecutionPolicy flag的合法值,剩下的是WindowStyle flag的合法值。因此,bypass的向量表示就是与其他4个token距离最远的。
图2. 部分token的3D视觉表示
因为Word2vec保留了线性关系,计算向量表示的线性结合会产生一些语义上有意义的结果。比如下面的例子:
high – $false + $true ≈’ low
‘-eq’ – $false + $true ‘≈ ‘-neq’
DownloadFile – $destfile + $str ≈’ DownloadString ‘
Export-CSV’ – $csv + $html ‘≈ ‘ConvertTo-html’
‘Get-Process’-$processes+$services ‘≈ ‘Get-Service’
通过上面的表达式,≈
表示右侧的向量是与左侧计算结果最接近的向量。
研究人员用Word2vec嵌入了PowerShell语言的方法来训练深度学习模型以检测恶意PowerShell脚本。分类模型是用大量与clean或malicious相关标记的PowerShell脚本来进行训练和验证的,而嵌入使用未标记的数据来进行训练。如图3所示:
图3 模型生成过程概览
研究人员用微软Azure的GPU资源对深度学习和传统机器学习模型进行了实验。深度学习模型的最佳性能与传统机器学习方法相比提升了22个百分点。如图4所示的模型中融合了多个深度学习模块,比如CNN和LSTM-RNN。
图4 最佳执行模型的网络架构
因为是第一次部署,性能最佳的深度学习模型检测到了许多恶意的和红队的PowerShell活动,其中一些甚至没有被其他方法发现。这表明可以将PowerShell和机器学习模型融合来检测网络攻击活动。
下面是深度学习检测到的,但是其他检测模型无法检测到的一些恶意PowerShell脚本示例:
图5. 严重混淆的恶意脚本
图6. 下载和运行payload的混淆的脚本
图7. 解密和执行恶意代码的脚本