引言 原文链接: Windows Command-Line Obfuscation (wietzebeukema.nl) 出于兼容性或易用性的原因,同一命令行可以被不同的windows应用用不同的方法表达出来。由于变量的数量不同,命令行的参数被表达的不一致,使得检测特定命令变得更加困难。这篇文章展示了 40 多个常用的内置 Windows 应用程序如何容易受到命令行混淆形式的攻击,并提供了一种用于分析其他可执行文件的工具。 命令行参数 事实证明,当谈到计算机时,这句 16 世纪的名言仍然非常适用。 毕竟,在大多数操作系统上,进程都有一个“命令行”组件,它允许(启动的)父进程将信息传递给子进程。这个新创建的进程可以访问命令行,它可能会根据在命令行中找到的内容来更改其进程流。这个概念是“计算机”的核心:它能够执行一组指令、程序、接受各种输入。 尽管它在计算中发挥着重要作用,人们对于如何称呼这些命令行的部分并没有达成一致。有些人认为命令行参数、参数、选项、标志、开关是相同的,但对有些人来说它们具有不同的含义。这篇文章中将使用以下术语: 整个行是命令行,它由命令行参数(由空格分隔)组成。尽管它们都是参数,但它们具有不同的作用:例如,第一个参数通常是被调用的进程,或者,如果放在命令提示符中,这将是命令。在上面的图片中,命令的后面跟着更多的参数。更具体地说,前三个是命令行选项,通常以特殊字符开头。在这三个选项中,前两个是开关,因为它们不需要进一步的输入,而第三个是一个标志,因为它后面跟着更多的参数,这些参数是这个参数的“输入”。 选项是用作命令行选项前缀的字符。在 Windows 系统中,这通常是正斜杠 (/),在类 Unix 系统中,主要使用连字符 (-)。这不是惯例,而是规则:因为命令行是由正在执行的程序解析的,所以开发人员可以完全自由地定义应该以什么格式传递参数。 达成约定是一件很难的事。计算机的历史告诉我们,如果没有标准化,事情往往会以混乱告终——这当然适用于命令行。 兼容性 命令行解析实例缺乏标准化导致了许多用户的困惑:很容易混淆不同的实例,导致执行不成功以及产生挫败感。为了帮助用户,一些程序被设计为可以接受多种约定。一个常见的例子是同时接受正斜杠和连字符作为选项字符,这将在下一节中更详细地讨论。 检测的难题 尽管能够以不同的方式表达相同的命令可能对某些用户有所帮助,但它往往会使检测和预防工作变得更加困难。大多数威胁检测软件(AV、EDR 等)都会监控进程执行,并查找可能指示恶意使用的命令行参数。由于攻击者希望不被发现,他们可能会利用命令行的灵活性来逃避检测。他们尝试的范围从小调整到绕过基于关键字的检测,再到全面的命令行混淆以隐藏原始命令。 方法:同义命令行 我们下面将展示五种不同的可以造成同义命令行的方法。 选项(option)符号替代法 字符替代法 事实证明,有更多的unicode编码可以被一些程序所接受。 字符插入法 因为可用于此技术的字符有时在命令行提示符的标准输入中不受支持(例如,因为它们不可打印),您可能必须使用字节表示法(\u)插入字符。从屏幕截图中可以看出,在这种情况下,字符被正确传递给进程。 引号插入法 值得注意的是,在命令提示符CMD中使用引号可能会很棘手,因为它们通常会在将引号传递给底层程序之前自己处理引号。例如,在 cmd 中解决此问题的一种方法是将每个引号加倍,因此要获得如上所示的执行结果,您必须运行 netsh ad''vfi''rewall show currentprofile state。 简写法 也许除了最短的变体 /e 之外,在我看来,几乎没有程序通过接受这些简写而对使用者产生帮助,而它确实使事情变得更加复杂和不可预测。例如,PowerShell 仅在不会导致另一个命令之间产生歧义的情况下才接受缩短的版本。出于这个原因,关键字 /noprofile 的最短变体是 /nop,因为 /no 会与例如/noexit冲突。在这种“通配符方法”旁边,PowerShell 在某些情况下还接受首字母缩略词,因此尽管未在屏幕截图中显示,/ec 也可以用作 /encodedcommand 的简写。 找到可以使用混淆命令行的程序 如前几节所述,程序在处理命令行参数时是没有标准的。有些程序非常严格,而有些程序会非常努力地将用户输入的内容变成它可以理解的东西。找出特定程序的命令行行为也是有困难的:帮助页面通常只指定传递参数的“首选”方式(方法 1 和 5),并且通常从不描述如何处理意外字符(方法 2-4 )。 一些备注: 其他 排版太难了,剩下一部分关于检测的我放到语雀,需要的自取~ https://www./rdzxytfcv/rrsa3t/awbg9u 一部分参考链接: [1]https://github.com/danielbohannon/Invoke-DOSfuscation#/ [2]https://www./content/dam/fireeye-www/blog/pdfs/dosfuscation-report.pdf#/ [3]https:///articles/TaniumotherEDRHIDSbypass [4]https://www./charts/nameslist/n_02B0.html [5]https://www./blog/circumventing-encodedcommand-detection-powershell/ [6]https://github.com/wietze/windows-command-line-obfuscation [7]https://github.com/SigmaHQ/sigma#/ [8]https://github.com/Neo23x0/sigma/wiki/Rule-Creation-Guide#detection [9]https://attack./techniques/T1082/ [10]https://attack./techniques/T1070/001/ 终于艰难决定开始更新了,新的一年总要有新的开始嘛,大家一起加油! |
|