前言
云函数,顾名思义,就是云厂商基于SaaS化服务,提供给用户的一种云端编程能力。
用户无需担心操作系统的运维、资源的调度、软件的环境等一系列事情,只需要部署代码,云厂商按调用次数收费。其本质是“无服务器(Serverless)”理念的一种实践,旨在降低程序员部署的工作量。
然而,在攻防场景下, 攻击者却可以基于此方法来转发恶意流量,达到隐藏C2的目的。
本文将详细介绍此手法的攻击细节,并实际复现该攻击的攻击方式和流程。
上一篇文章我们讲到,攻击方为了隐藏自己的C2(攻击资产),使用CDN服务器作为转发服务器,同时分析了从隐藏C2手法的演变历史。
云函数攻击与域前置类似,域前置是中间增加了一个CDN服务器进行中转,避免受害者直连攻击者C2,导致攻击资产暴露及溯源。
而云函数攻击中,充当转发器功能的,则是云厂商提供给用户的自定义函数功能。
以x讯云为例,其内部就支持 Python、Node、PHP、Go四种语言用于编写函数。
用户可编写如下伪代码,从而实现流量的转发。
def redirect(传入流量):
response=send 传入流量 to 'http://c2.com'
return response
同时,云厂商还会根据云函数生成唯一的路径url,攻击者将木马上线地址改为函数url,即可完成流量的转发和隐匿。
本文以x讯云为例,其他云提供商大同小异,此处不再累述。
首先新建云函数,使用helloworld模板。
填写写好的函数代码,这里测试地址使用测试域名进行测试。
访问测试域名,记录原始返回结果。
进入管理界面,点击函数URL,创建访问函数的URL地址。
部署完成后,测试函数url。
可以看到,正常转发返回了自己的域名结果。
我们测试成功了一个既可以根据get请求进行对应转发,也可以根据返回结果判定是否为下载文件返回,返回对应的文件功能的云函数部署代码。
。
有心的同学应该已经发现,云函数只能实现对攻击者C2资产的隐藏,本质上只是承担了一个转发器的作用。
然而,在攻防演练场景下,云函数既不能做到像域前置攻击一样,伪装成高信誉网站,避免防守方进行封禁;
也无法做到,像域前置一样的,从CDN到攻击者资产链路全黑盒,很难溯源。
实际上,以x讯云云函数的触发url为例,其构成就是
http://{用户id} -{随机字符}.ap-guangzhou.tencentscf.com
域名的构成包含攻击者的用户ID,这对溯源攻击者无疑起到了极大的帮助。
最致命的是,云函数功能目前还未广泛普及。这就导致大部分防守方可能自身业务并没有云函数相关功能,防守方完全可以直接封禁与云函数相关的主域名,待攻防演练结束后再放行。
这样理论来讲,以云函数作为转发的恶意样本即使被攻击方投递并运行,也会被防火墙拦截相关流量,从而导致此种攻击手法失效,并在防守方产生告警。白白丢失自己的一阶段入侵的漏洞。
我们也在附录中收集了常见云服务厂商对应的云函数域名,供防守方结合自身实际进行参考。
。
。 。
。
。 。
。 。
。 。
。