PowerShell是网络攻击者广泛使用的攻击方法,被广泛用于安装后门、执行恶意代码和进行其他恶意行为。安全是攻击者、研究人员和蓝队之间的对抗。PowerShell因其能力和灵活性使常规检测变得很难,但同时也非常重要。本文讲述FireEye如何利用人工智能和机器学习技术增加攻击者使用PowerShell进行恶意活动的门槛。
本文将介绍:
- 为什么基于签名和规则的传统检测引擎很难成功检测出恶意PowerShell。
- 自然语言处理(Natural Language Processing,NLP)技术如何应用到恶意PowerShell检测中。
- NLP模型如何检测恶意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命令的例子
下面的一些参数的解释:
- -NoProfile – 当PowerShell引擎开启后,当前用户的profile setup脚本不应执行;
- -NonI –“-NonInteractive”的简写,对不在线用户的交互式提醒;
- -W Hidden – “-WindowStyle Hidden” 的简写,PowerShell会话窗口应该以隐藏的方式开始;
- -Exec Bypass – “-ExecutionPolicy Bypass”对简写,这会关闭当前PowerShell会话的执行策略。但执行策略并不等于安全边界;
- -encodedcommand – 表明下面的文本是Base64编码的命令。
那么解码后的命令中隐藏着什么呢?图4是Base64解码的命令。
图4: 前面例子中解码的命令
解码的命令显示是静默的无文件网络访问和远程代码执行。
- IEX 是Invoke-Expression cmdlet的集合,Invoke-Expression cmdlet可以执行本地机器上提供的命令;
- new-object cmdlet会创建一个.NET Framework实例或者COM对象,这里创建的是net.webclient 对象;
- downloadstring 会从\<url>下载内容到内存缓冲区,然后IEX会执行。</url>
值得一提的是近期利用CVE-2017-10271 漏洞分发加密货币挖矿机的攻击中就使用了类似的恶意PowerShell技巧。该攻击利用PowerShell脚本而不是直接下载可执行文件。PowerShell命令是静默的,因为使用了无文件技术,不会在主机上留下任何残留,这让传统的反病毒技术很难检测。
下面是一些恶意攻击者选择PowerShell的原因:
- PowerShell广泛应用于Windows操作系统中,是一款有力的系统管理脚本工具;
- 大多数的攻击逻辑可以在无需安装恶意二进制文件的情况下用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模型对前面例子进行分析的关键步骤:
- 检测并解码Base64命令;
- 用Named Entity Recognition(NER)识别实体,如\<url>;</url>
- 对包括明文文本和混淆命令在内的所有文本进行标记解析(tokenize);
- 找到每个token的根,并基于词汇向量化;
- 使用有监督学习模型预测是恶意命令的可能性。
图6: 预测PowerShell命令恶意可能性的NLP pipeline
研究人员还建立了生产环境下的端对端机器学习工作流,如图7所示。这样就可以通过不断的标记和训练来更新模型。
图7: PowerShell机器学习的端对端机器学习生产工作流
有效性验证
研究人员应用并不断优化了机器学习模型来适应研究中的终端代理,代理在主机上可以几毫秒内完成预测。2018年,研究人员已将PowerShell机器学习检测引擎用于应急响应中。早期的验证确认检测到了一些恶意PowerShell攻击,包括:
- Kovter这样的商业恶意软;
- 红队渗透测试活动;
- 成功绕过遗传签名的新变种,机器学习模型检测的结果为高概率;
PowerShell机器学习检测引擎:
- 自动从训练数据中学习恶意命令的模式。与传统的基于签名的检测规则相比,NLP模型可以降低运营成本,减少安全内容的发布时间。
- 会对未知的PowerShell命令通过学习特定模式的非线性组合来执行概率推理,这会增加攻击者绕过检测的成本。
转自:https://xz.aliyun.com/t/2437