PowerShell是网络攻击者广泛使用的攻击方法,被广泛用于安装后门、执行恶意代码和进行其他恶意行为。安全是攻击者、研究人员和蓝队之间的对抗。PowerShell因其能力和灵活性使常规检测变得很难,但同时也非常重要。本文讲述FireEye如何利用人工智能和机器学习技术增加攻击者使用PowerShell进行恶意活动的门槛。
本文将介绍:
PowerShell是实施网络攻击最流行的工具之一。图1是FireEye收集的2017年恶意PowerShell攻击数据。
图1: FireEye收集的2017年恶意PowerShell攻击数据(蓝色表示检测到的攻击数量,红色表示平滑指数增长曲线)
过去几年里,FireEye一直在关注PowerShell的恶意使用。2016年,研究人员发表了一篇博客讲述如何改善PowerShell日志记录,这可以让一些潜在的攻击者活动变得可视化。2018年,研究人员对APT 32组织使用PowerShell进行攻击的恶意活动进行了深入分析,如图2。
图2: APT32攻击生命周期,Kill chain中使用了PowerShell attack
下面是一个PowerShell命令的例子,如图3所示。
图3:恶意PowerShell命令的例子
下面的一些参数的解释:
那么解码后的命令中隐藏着什么呢?图4是Base64解码的命令。
图4: 前面例子中解码的命令
解码的命令显示是静默的无文件网络访问和远程代码执行。
值得一提的是近期利用CVE-2017-10271 漏洞分发加密货币挖矿机的攻击中就使用了类似的恶意PowerShell技巧。该攻击利用PowerShell脚本而不是直接下载可执行文件。PowerShell命令是静默的,因为使用了无文件技术,不会在主机上留下任何残留,这让传统的反病毒技术很难检测。
下面是一些恶意攻击者选择PowerShell的原因:
从经济成本考虑:
可以用机器学习技术来预测PowerShell是不是恶意的吗?
FireEye的优势在于有许多高质量的PowerShell样本,通过与专家写作,研究人员构建了一个企业网络中常见的恶意命令和善意命令的训练集。
研究人员发现这个问题可以归结为NLP领域,因此构建了一个可以翻译PowerShell 命令文本的NLP模型,这与智能影响翻译声音命令是相似的。
其中一个技术上的难题是同义词问题。比如,在PowerShell语法中,NOL、NOLO和NOLOGO的意义是相同的。在NLP中,有一种stemming算法可以将单词变回原始形式,比如将Innovating变回Innovate。
因此,研究人员用一种高效的数据结构trie创建了一个基于前缀树的stemmer,用于分析PowerShell命令的语法,如图5所示。
注:stemmer是从英文单词中获得符合语法的(前缀)词干的极其便利的工具。
图5: PowerShell语法中的同义词(左)和trie stemmer获取的同义词(右)
整个NLP模块和功能如下表:
下面是通过NLP模型对前面例子进行分析的关键步骤:
图6: 预测PowerShell命令恶意可能性的NLP pipeline
研究人员还建立了生产环境下的端对端机器学习工作流,如图7所示。这样就可以通过不断的标记和训练来更新模型。
图7: PowerShell机器学习的端对端机器学习生产工作流
研究人员应用并不断优化了机器学习模型来适应研究中的终端代理,代理在主机上可以几毫秒内完成预测。2018年,研究人员已将PowerShell机器学习检测引擎用于应急响应中。早期的验证确认检测到了一些恶意PowerShell攻击,包括:
PowerShell机器学习检测引擎: