在攻防对抗过程中,使用云函数来隐藏C2是一种常见的手法,互联网也有很多教程来指导如何配置,但目前公开的文章中都是介绍如何在CobaltStrike中使用云函数,还没有文章介绍如何在metasploit-framework中使用.
本文详细介绍在metasploit-framework中云函数的使用方法及相关技巧,希望通过本文能够对红队同学在红蓝对抗过程中有所帮助。
此处使用Viper的操作方法进行说明,在metasploit-framework中参考对应配置参数即可
https://ctstack-oss.oss-cn-beijing.aliyuncs.com/blog/202112141359562.png
windows/meterpreter/reverse_https需要网络传输stager,stager内容在经过云函数的转发过程中会进行编码转换,导致加载失败,而windows/meterpreter_reverse_https已经将stager内置在exe文件中.
效果如下:
公网
类型
通用api
,配置如下图
上文中使用云函数上线在原理上并不复杂,可以理解为将云函数作为https的反向代理使用.
相比于CDN,域前置等老派隐藏C2的方法,云函数在方便性及速度上都有优势,所以在最近几次HW行动中很多红队人员都在使用,防守方对此也格外关注.
其中防守方最常见的方法就是在HW期间直接封禁类似*.apigw.tencentcs.com这种域名,禁止解析访问.
或者设置对应告警,一旦红队人员使用云函数上线,防守方马上就能定位到哪台机器已经失陷,然后修复漏洞.
接下来介绍如何对抗蓝队的域名封禁.
### 原理解析
这种方式上线与原始配置方法的区别在于载荷(payload)并不会访问域名*.apigw.tencentcs.com,也不会在目标网络产生相关的DNS记录,也就绕过了针对域名的封禁.
因为云函数网关在转发https请求时是根据http消息头中Host字段进行转发,所以我们将云函数域名直接填写在http消息头的host字段中,然后将http请求通过IP地址方式直接发送到云函数网关,同样可以达到反向代理的效果.
在使用云函数隐藏C2时都会遇到一个问题,就是无法获取到目标机的网络出口IP地址.
上图中session 3是直接上线时的效果,可以看到我们可以通过目标主机的互联网出口IP进行地理位置定位.
session 1是使用云函数上线时的效果,只能获取到云函数的网关IP.
如果在HW或红队评估过程中,红队人员是通过广撒网钓鱼的方式投递载荷,C2服务可能会收到很多来自云沙箱的Session,因为Session的IP地址固定为云函数网关IP,红队人员就无法确定该Session是否有效.
互联网有很多在线接口可以查询自己的公网ip地址,比如https://ifconfig.io/ip
通过session访问https://ifconfig.io/ip,我们就可以获取到session真实的ip地址.
poweshell代码
$WebRequest = [System.Net.WebRequest]::Create("http://ifconfig.io/ip")
$WebRequest.Method = "GET"
$WebRequest.ContentType = "application/json"
$Response = $WebRequest.GetResponse()
$ResponseStream = $Response.GetResponseStream()
$ReadStream = New-Object System.IO.StreamReader $ResponseStream
$Data = $ReadStream.ReadToEnd()
Write-Host $Data
执行效果
在攻防对抗中,如果使用鱼叉钓鱼的方式投递载荷,红队人员想要在获取到session后第一时间得到通知,然后判断session是不是有效的,那自动化通知的方式就必不可少.
大致的流程如下:
我们来看一下最终效果:
攻防对抗过程中很多红队技术并不复杂,但是在提升技术的可用性和工程化落地方面也是很有必要且很有挑战的一件事.希望本文对各位红队同学在使用云函数时有所帮助.