danielbohannon/Revoke-Obfuscation

GitHub: danielbohannon/Revoke-Obfuscation

一款基于 AST 语法树与统计特征分析的 PowerShell 混淆检测框架,旨在帮助企业从海量日志中高效识别混淆恶意脚本。

Stars: 750 | Forks: 123

# Revoke-Obfuscation v1.0 ![Revoke-Obfuscation 演示](https://github.com/danielbohannon/danielbohannon.github.io/blob/master/Revoke-Obfuscation%20Demo.gif) ![Revoke-Obfuscation 截图](https://github.com/danielbohannon/danielbohannon.github.io/blob/master/Revoke-Obfuscation%20Screenshot.png) ## 介绍 Revoke-Obfuscation 是一个兼容 PowerShell v3.0+ 的 PowerShell 混淆检测框架。 ## 作者 Daniel Bohannon ([@danielhbohannon](https://twitter.com/danielhbohannon)) Lee Holmes ([@Lee_Homes](https://twitter.com/Lee_Holmes)) ## 研究 博客文章: [https://www.fireeye.com/blog/threat-research/2017/07/revoke-obfuscation-powershell.html](https://www.fireeye.com/blog/threat-research/2017/07/revoke-obfuscation-powershell.html) 白皮书: [https://www.fireeye.com/content/dam/fireeye-www/blog/pdfs/revoke-obfuscation-report.pdf](https://www.fireeye.com/content/dam/fireeye-www/blog/pdfs/revoke-obfuscation-report.pdf) ## 背景 在 2016 年秋季和 2017 年春季,Daniel Bohannon ([@danielhbohannon](https://twitter.com/danielhbohannon)) 发布了 [Invoke-Obfuscation](https://github.com/danielbohannon/Invoke-Obfuscation) 和 [Invoke-CradleCrafter](https://github.com/danielbohannon/Invoke-CradleCrafter),这是两个开源的 PowerShell 混淆框架。这项研究及这些框架的目标是强调单纯基于签名的检测方法在应对攻击者使用 PowerShell 方面的局限性。传递给防御者的核心信息是,除了已知的可疑语法外,还应专注于检测**混淆指标 (Indicators of Obfuscation)**。 然而,Invoke-Obfuscation 和 Invoke-CradleCrafter 中极高的随机化程度,再加上 PowerShell 脚本块日志记录 (script block logging) 中未进行反混淆的 token 层混淆选项,促使防御者寻找一种新的、可扩展的方法来通用地检测已知和未知的混淆技术。 在 Invoke-Obfuscation 发布几周后,Lee Holmes ([@Lee_Homes](https://twitter.com/Lee_Holmes)) 撰写了一篇题为 [More Detecting Obfuscated PowerShell](http://www.leeholmes.com/blog/2016/10/22/more-detecting-obfuscated-powershell) 的博客文章,他在其中强调了统计分析技术,用于检测在高度混淆的脚本(特别是由 Invoke-Obfuscation 生成的脚本)中发现的异常特征。 自从这次交流以来,Daniel 和 Lee 成为了好朋友,并分享了许多共同的兴趣/痴迷——即对精品咖啡的热爱,以及寻求创造新方法来彻底检测混淆 PowerShell 的追求。 这两位蓝队成员花在研究和 POC 代码上的时间,假设按照正确的 4 分钟目标冲煮时间计算,相当于喝了数千杯 Chemex 冲煮的咖啡(假设至少有另一位咖啡爱好者领会了这个“pour over”[倾注/手冲] 的双关语)。 Revoke-Obfuscation 就是这些努力的最终手工成果。 ## 目的 Revoke-Obfuscation 是一个开源的 PowerShell v3.0+ 框架,用于大规模检测混淆的 PowerShell 命令和脚本。它依赖于 PowerShell 的 AST(抽象语法树)从任何输入的 PowerShell 脚本中快速提取数千个特征,并将此特征向量与几个预定义的加权特征向量之一进行比较,这些向量是通过对包含 408K+ 个 PowerShell 脚本的语料库进行自动学习过程计算得出的。完整的语料库可以从 ([https://aka.ms/PowerShellCorpus](https://aka.ms/PowerShellCorpus)) 下载。您可以在仓库的 'DataScience' 子目录中找到这项工作中数据科学方面的详细信息。 由于 Revoke-Obfuscation 依赖于特征提取和比较,而不是纯粹的 IOC 或 RegEx 匹配,因此即使在攻击者试图通过填充未混淆的脚本内容来抑制其混淆以推翻诸如字符频率分析之类的基本检查时,它在识别未知混淆技术方面也更具鲁棒性。 Revoke-Obfuscation 可以轻松在 100-300 毫秒内测量大多数输入的 PowerShell 脚本。这种性能水平允许组织(在最坏的情况下)每小时测量 12K+ 个 PowerShell 脚本,而无需在 SIEM 中索引冗长的 PowerShell 脚本块日志。 最后,Revoke-Obfuscation 支持简单的白名单功能,以及摄取 PowerShell Operational 事件日志记录并重组记录在众多脚本块 EID 4104 记录中的脚本块的能力。它可以轻松成为一站式服务,用于摄取环境的 PowerShell Operational 事件日志,重组并去重这些日志中的所有脚本,然后识别值得人工检查的混淆 PowerShell 脚本。 ## 安装 Revoke-Obfuscation 的源代码托管在 Github 上,您可以从此仓库 下载、分叉和查看它。请通过与此项目关联的 Github bug 跟踪器报告问题或功能请求。 安装(从 Github): ``` Import-Module .\Revoke-Obfuscation.psd1 ``` 也可以通过以下命令直接从 PowerShell Gallery 安装源代码: 安装(从 PowerShell Gallery): ``` Install-Module Revoke-Obfuscation Import-Module Revoke-Obfuscation ``` ## 用法 `Revoke-Obfuscation` 将提供详细的教程以及一些其他有趣的惊喜。但如果您不喜欢这些乐趣,您可以简单地运行 `Get-Help Measure-RvoObfuscation` 来查看用法语法,或者继续阅读。 此框架中使用了两个主要函数: * **Get-RvoScriptBlock** -- 从 EID 4104 脚本块日志中重组脚本 * **Measure-RvoObfuscation** -- 测量输入脚本并返回混淆分数 如果您需要从 PowerShell Operational 日志中重组和提取脚本块日志,那么 `Get-RvoScriptBlock` 是您的首选函数。它仅自动返回唯一的脚本块,并排除某些被视为非恶意的默认脚本块值。可以使用 -Deep 开关覆盖此行为。 * `Get-RvoScriptBlock -Path 'C:\Windows\System32\Winevt\Logs\Microsoft-Windows-PowerShell%4Operational.evtx' -Verbose` * `Get-ChildItem .\Demo\demo.evtx | Get-RvoScriptBlock -Verbose` * `Get-WinEvent -LogName Microsoft-Windows-PowerShell/Operational | Get-RvoScriptBlock -Verbose` `Get-RvoScriptBlock` 还支持 MIR/HX 审计结果以及通过 Matt Graeber 的 (@mattifestation) CimSweep 项目 (https://github.com/PowerShellMafia/CimSweep) 检索的 PowerShell Operational 日志。对于 CimSweep,需要进行微小的注册表调整以欺骗 WMI 查询非经典事件日志。详细信息可以在 `Get-RvoScriptBlock` 的 NOTES 部分找到。 * `Get-ChildItem C:\MirOrHxAuditFiles\*_w32eventlogs.xml | Get-RvoScriptBlock -Verbose` * `Get-CSEventLogEntry -LogName Microsoft-Windows-PowerShell/Operational | Get-RvoScriptBlock` 针对记录在 demo.evtx 中的测试数据的完整示例如下: ``` $obfResults = Get-WinEvent -Path .\Demo\demo.evtx | Get-RvoScriptBlock | Measure-RvoObfuscation -OutputToDisk -Verbose ``` 针对本地和远程托管的测试脚本的完整示例如下: * `Measure-RvoObfuscation -Url 'http://bit.ly/DBOdemo1' -Verbose -OutputToDisk` * `Get-Content .\Demo\DBOdemo*.ps1 | Measure-RvoObfuscation -Verbose -OutputToDisk` * `Get-ChildItem .\Demo\DBOdemo*.ps1 | Measure-RvoObfuscation -Verbose -OutputToDisk` `-OutputToDisk` 开关将自动将所有混淆脚本输出到 .\Results\Obfuscated\。无论如何,所有结果都将作为 PSCustomObjects 返回,其中包含脚本内容以及元数据,如混淆分数、测量时间、白名单结果、所有提取的脚本特征等。 Revoke-Obfuscation 的两个位置存在三个白名单选项: 1. 磁盘上(如果存在则自动应用): 1. **.\Whitelist\Scripts_To_Whitelist\\** -- 放置在此目录中的所有脚本都将被计算哈希值,任何相同的脚本都将被列入白名单。这种白名单方法优于后两个选项。 2. **.\Whitelist\Strings_To_Whitelist.txt** -- 包含此文件中任何字符串的脚本将被列入白名单。*语法:Rule_Name,string_to_whitelist* 3. **.\Whitelist\Regex_To_Whitelist.txt** -- 包含此文件中任何正则表达式的脚本将被列入白名单。*语法:Rule_Name,regex_to_whitelist* 2. Measure-RvoObfuscation 的参数(除上述白名单选项外应用): 1. **-WhitelistFile** -- `-WhitelistFile .\files\*.ps1,.\more_files\*.ps1,.\one_more_file.ps1` 2. **-WhitelistContent** -- `-WhitelistContent 'string 1 to whitelist','string 2 to whitelist'` 3. **-WhitelistRegex** -- `-WhitelistRegex 'regex 1 to whitelist','regex 2 to whitelist'` 如果有兴趣创建自己的训练数据集并为 Measure-Vector 函数生成加权向量,则可以针对标记的数据集执行 ModelTrainer.cs/ModelTrainer.exe。以下命令将从所有输入脚本中提取特征向量,并将它们聚合到一个用于此训练阶段的单个 CSV 中: ``` Get-ChildItem .\*.ps1 | ForEach-Object { [PSCustomObject](Get-RvoFeatureVector -Path $_.FullName) | Export-Csv .\all_features.csv -Append } ``` 最后,如果正在寻找一个利用 PowerShell AST(抽象语法树)的强大功能来创建指标 的平台——我们强烈建议用于识别未混淆的恶意 PowerShell 活动——那么 [PS Script Analyzer](https://github.com/PowerShell/PSScriptAnalyzer) 是一个专为处理此类任务而设计的优秀框架。 ## 许可证 Revoke-Obfuscation 是在 Apache 2.0 许可证下发布的。 ## 发布说明 v1.0 - 2017-07-27 Black Hat USA & 2017-07-30 DEF CON: Revoke-Obfuscation 公开发布。
标签:AIM, AI合规, BurpSuite集成, Caido项目解析, DNS 反向解析, FireEye, IPv6, Libemu, Libemu, OpenCanary, PowerShell, URL发现, 安全检测, 恶意代码分析, 混淆检测, 网络安全, 脚本安全, 自动化payload嵌入, 配置文件, 防御规避检测, 隐私保护