Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Invoke-DOSfuscation — Cmd.exe 命令混淆生成器与检测测试框架 | Kitploit
工具/GitHubGitHub/danielbohannon/invoke-dosfuscation
防御工具模糊测试渗透测试命令与控制红队事件响应
GitHubdanielbohannon/invoke-dosfuscation

Invoke-DOSfuscation

Cmd.exe 命令混淆生成器与检测测试框架

查看仓库
9481408年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Invoke-DOSfuscation v1.0

Invoke-DOSfuscation 截图

介绍

Invoke-DOSfuscation 是一个兼容 PowerShell v2.0+ 的 cmd.exe 命令混淆框架。(白皮书:https://www.fireeye.com/blog/threat-research/2018/03/dosfuscation-exploring-obfuscation-and-detection-techniques.html)

背景

过去几年作为事件响应顾问,我目睹了多个威胁行为者采用的众多混淆和逃避技术。其中一些技术极其复杂,而另一些则巧妙简单,但这两类技术都被用来逃避检测。根据我的经验,我发现 APT32 和 FIN7 使用了最诱人的混淆技术,其创意值得关注。

2017年6月,在经历了一系列增量式命令行混淆技术之后,FIN7 使用了 cmd.exe 本地支持的环境变量字符串替换功能,而当时我甚至不知道这个功能的存在。受此发现启发,我与 Nick Carr(@ItsReallyNick)合著了一篇博客文章,题为《实战中的混淆:针对性攻击者在逃避技术方面领先一步》(https://www.fireeye.com/blog/threat-research/2017/06/obfuscation-in-the-wild.html),其中我们重点介绍了多个我们在实际环境中识别到的混淆技术。

接下来的周末,我探索了 cmd.exe 的这个本地替换功能,并构建并发布了一个简单的概念验证工具,名为 Out-FINcodedCommand。发布这个 POC 后,我退后一步想:“也许 cmd.exe 中还有更多混淆能力需要我去探索并构建检测机制,以免我们后来才发现它们被用于实战。”

这就是我这项研究的起点,最终促使我开发了这个 Invoke-DOSfuscation 框架。

目的

攻击者越来越多地使用混淆技术来逃避基于命令行参数值的检测。为了应对这一点,我花了五个月时间研究并开发 cmd.exe 原生的混淆和编码技术,以便为这些我尚未在实战中见过的核心技术创建强大的检测能力。

这个框架的唯一目的是让防御者能够随机生成数千个唯一混淆的样本命令,以测试和调整其针对这些技术的检测能力。我在此版本中包含了完整的测试工具集,以自动化这一检测测试过程。

在许多方面,这个框架使防御者能够对 cmd.exe 的混淆技术进行模糊测试,而在构建此工具的过程中,我发现了我最初研究中未发现的许多额外混淆机会。

我还于2017年11月与微软分享了这些信息,并询问了增加对 cmd.exe 使用这些核心技术(该框架中所有混淆功能的基础构建块)的内部工作方式的可见性的机会。

作为防御者,这项研究和开发的最终目标是提高认知并推动变革,帮助最终用户更好地保护自己免受攻击者不断变化的 TTP(工具、技术和程序)的侵害。

用法

尽管所有混淆组件都已构建成独立的正式函数,但大多数用户会发现 Invoke-DOSfuscation 函数是最容易探索和可视化此框架支持的混淆技术的方法。然而,对于模糊测试和深入探索每个混淆类别的大量调优选项,建议直接在 Invoke-DOSfuscation 函数包装之外使用各个独立函数。

为了使防御者能够轻松开始模糊测试和测试检测思路,此框架还包括一个额外的模块 Invoke-DOSfuscationTestHarness.psm1,该模块随项目一起自动导入。该模块中针对防御者的两个关键函数是:

  1. Invoke-DosTestHarness - 从测试命令列表中生成(使用默认参数设置)超过 1000 个随机混淆的命令,用于有效载荷完整性和检测目的。每次测试工具迭代都会随机化所有可用的函数参数,并直接调用四个混淆函数,而不是使用 Invoke-DOSfuscation 菜单驱动函数默认使用的更标准化的 -ObfuscationLevel 值(1-3)。这会产生更广泛范围的混淆输出,从而可以构建更全面的检测。每个混淆的命令随后会与第二个函数进行比对:
  2. Get-DosDetectionMatch - 将输入命令(字符串)与函数中 $regexDetectionTerms 数组中的所有正则表达式检测值进行比对。该函数由 Invoke-DosTestHarness 自动调用,但也可以独立调用。

每次测试工具调用结束后,将显示命令正确执行和检测的统计信息,以便防御者快速识别哪些命令有 0 或仅有 1-2 个检测匹配,以及哪些可能需要更全面的覆盖。

最后,为了避免防御者必须运行测试工具才能入门,我在 Samples 目录中提供了 1000 个样本命令,按四个混淆函数分别分开。格式包括 .txt 文件,以及 Security 和 Sysmon 的 .evtx 文件。我在 Invoke-DOSfuscationTestHarness.psm1 的 $regexDetectionTerms 数组中包含了一些示例检测规则,但您需要在测试样本混淆命令时添加并测试更多规则)。除了包含原始命令的 .txt 文件外,还有包含每个样本命令的进程执行日志(Sysmon EID 1 事件)的 .evtx 文件。这些事件日志对于构建基于细微子进程执行(这些执行是 Invoke-DOSfuscation 所基于的几个构建块技术的副产品)的指标非常有帮助。

要开始使用,显示当前检测规则未匹配的样本混淆命令,只需运行:

(Get-Content .\Samples\STATIC_1-of-4_Out-DosConcatenatedCommand.txt) | where-object { -not (Get-DosDetectionMatch -Command $_).Detected }

要同时测试来自 Security EID 4688 执行事件日志中记录的混淆命令和子进程,只需运行:

(Get-WinEvent -Path .\Samples\DYNAMIC_SECURITY_EID4688_1-of-4_Out-DosConcatenatedCommand.evtx) | where-object { $_.Message } | foreach-object { ($_.Message.Split("`n") | select-string '^\tProcess Command Line:\t') -replace '^\tProcess Command Line:\t','' } | where-object { -not (Get-DosDetectionMatch -Command $_).Detected }

安装

Invoke-DOSfuscation 的源代码托管在 Github 上,您可以从此仓库(https://github.com/danielbohannon/Invoke-DOSfuscation)下载、分叉和审查。请通过与此项目关联的 Github 问题跟踪器报告问题或功能请求。

要安装:

root@kitploit:~
Import-Module .\Invoke-DOSfuscation.psd1
Invoke-DOSfuscation

许可证

Invoke-DOSfuscation 根据 Apache 2.0 许可证发布。

发布说明

v1.0 - 2018-03-23 Black Hat Asia(新加坡):Invoke-DOSfuscation 公开发布。

下载工具