引言
多年来,网络安全经销商和研究人员都有报道过网络威胁分子如何利用PowerShell安装后门,运行恶意代码,或者在企业中达成他们的目的。安全是攻击者、研究人员和蓝队(译者注:防守方)之间的一个猫捉老鼠的游戏。PowerShell的灵活性和性能让传统的检测无法应用到这里。本文会详细描述FireEye如何利用人工智能和机器学习检测恶意PowerShell。
在本文中,你将看到如下内容:
为什么传统的“基于签名的”和“基于规则”的检测引擎无法恶意PowerShell检测。
如何使用自然语言处理(Nature Language Processing,NLP)技术解决这个问题。
我们的NLP模型是如何检测恶意PowerShell命令的,即使这些命令被混淆过。
在缩短检测引擎的安全内容的发布时间的同时提高攻击者绕过安全方案的经济代价。
背景知识
PowerShell是用来实施攻击的众多流行工具中的一款。根据FireEye 动态威胁智能云(Dynamic Threat Intelligence ,DTI)收集到的数据,2017年整年的恶意PowerShell攻击如下所示(Figure 1):
FireEye多年来一直跟踪恶意PowerShell的使用情况。在2014年,Mandiant的应急响应人员发表了一篇Black Hat论文,文中包括了PowerShell攻击的策略、技术和过程,还包括如何从恶意PowerShell使用过的磁盘、日志和内存中取证。2016年,我们就如何改进PowerShell日志发表了一篇博文,通过日志记录可以更清晰地知道攻击者的潜在行为。最近,我们针对APT32的深入报道再一次强调了攻击者使用PowerShell进行侦查和进行后续操作这一威胁,如Figure 2 所示:
让我们来看看恶意PowerShell长什么样(Figure 3)
对其参数的解释如下:
-NoProfile,意味着当前用户的安装脚本不会在PowerShell引起启动时运行。
-Nonl,是-NonInteracive的缩写,意味着不会和用户进行交互
-W Hidden,是“-WindowStyle Hidden”的缩写,意味着PowerShell的session窗口将以一种隐藏的方式启动。
-Exec Bypass,是“-ExecutionPolicy Bypass”的缩写,意味着禁用当前PowerShell session的执行策略(默认不允许)。需注意,设置了执行策略并不意味着就安全了。
-encodedcommand,意味着接下来的文本是一个base64加密的命令。
在Base64加密部分的是什么?Figure 4是该命令解密后的样子:
有趣的是,这个命令的功能是偷偷访问无文件网络和远程内容执行。
IEX是Invoke-Expression cmdlet的别名,将在本地运行提供给它的命令。
new-object cmdlet新建一个.NET框架或一个COM对象,这里是一个net.webclient对象
downloadstring将下载<url>的内容到内存缓冲区(最后将被IEX执行)
值得一提的是,类似的恶意PowerShell近期被用于一起Cryptojacking攻击,它利用CVE-2017-10271漏洞进行挖矿。该攻击的exploit是用PowerShell脚本发送的,而不是直接下载可执行文件。该PowerShell命令非常的隐蔽,因为它没有在主机上留下任何文件,这样传统的杀软很难将其检测出来。
出于以下原因,攻击者更乐意使用PowerShell:
PowerShell作为一种非常有用的系统管理员脚本工具在微软的Windows中广泛使用。
攻击者的攻击逻辑可以写在PowerShell中,无需安装任何恶意二进制文件,这样可以减少在终端上所占的内存。
PowerShell语法的灵活性让传统的基于签名的检测规则很难检测到它。
还有,从经济角度:
下一步,我们将介绍FireEye如何将大数据技术与PowerShell威胁研究结合起来以抵御此种威胁,从而提高攻击者的攻击成本。
用自然语言处理检测恶意PowerShell
我们是否可以使用机器学习预测某个PowerShell是否恶意?
FireEye的一大优点就是我们拥有高质量的PowerShell用例仓库,这些PowerShell来源于FireEye 解决方案和服务的全球部署。我们和公司的PowerShell专家合作,使用恶意命令和在网络中搜集的良性命令构建了一个庞大的训练集。
之后,我们检查PowerShell语料库,发现它适用于NLP问题。我们建立了一个用于解析PowerShell命令文本的NLP模型,类似于亚马逊用于解析你的语音命令的Alexa模型。
我们要解决的一个技术难题是同义词,这也是语言学研究的一个问题。例如,“NOL”,“NOLO”,和“NOLOGO”在PowerShell语法中是同一语义。在NLP中,可使用词根算法将一个词恢复到它初始的样子,例如“innovating”取词根后将变成“innovate”。
我们基于词根,利用trie数据结构,如Figure 5 所示,为PowerShell命令语法创建了一个前缀树。即使复杂如PowerShell,trie也可以在纳秒内为某个命令取词根。
我们创建的所有NLP 管道如下表所示:
NLP关键模块 |
功能 |
Decoder |
检测并解密所有的加密文本 |
Named Entity Recognition (NER) |
检测并识别诸如IP,URL,Email,注册密钥等实体. |
Tokenizer |
将PowerShell命令转化为一系列句柄 |
Stemmer |
使用trie将句柄取词根为语义一致的句柄 |
Vocabulary Vectorizer |
将句柄向量化为机器学习可以处理的格式 |
Supervised classifier |
二分算法: 支持向量机 梯度提升树 深度神经网络 |
Reasoning |
解释预测是如何实现的,帮助分析人员修正预测. |
接下来的内容是利用NLP 管道对上述例子取词根的关键步骤:
更重要的是,我们建立了一个端对端机器学习管道(Figure 7),这样我们就可以通过重新标记和重新训练,并将机器学习模型发布到我们的产品中,应对敌手的不断进化。
##验证字段中的值
我们成功地实现并优化了这个机器学习模型缩减占用内存将其部署到我们的研究终端代理上,这个代理在主机上可以在毫秒内进行预测。2018年,我们将这个机器学习模型应用到事件响应中。早期字段验证已经证实了恶意PowerShell攻击检测,包括:
这个PowerShell机器学习检测引擎产生的唯一值包括:
这一思想最重要的部分是,扩大威胁边界,让对手更难绕过。
致谢
我们想要感谢:
Daniel Bohannon, Christopher Glyer 和Nick Carr 对威胁分析的支持
Alex Rivlin, HeeJong Lee, 和来自FireEye实验室的Benjamin Chang 提供DTI数据
Caleb Madrigal提供研究终端.
FireEye ICE-DS 团队
原文链接:https://www.fireeye.com/blog/threat-research/2018/07/malicious-powershell-detection-via-machine-learning.html
编译:看雪翻译小组 lumou
校对:看雪翻译小组 梦野间
[课程]FART 脱壳王!加量不加价!FART作者讲授!