概述

随着云计算服务的迅速发展,其已经广泛应用于各种业务场景,云计算服务在提高业务开发和运行效率同时,也伴随着出现了各种寄生于合法服务的攻击手段。在过去两年中,攻击者开始利用云CDN服务作为域前置,以实现对C2服务的反溯源防护。此外,攻击者还利用受信任的云服务托管钓鱼页面和钓鱼文件来实施社工钓鱼活动、利用各类云对象存储服务进行隐蔽的敏感数据渗出等攻击,可以看到在多个攻击阶段当中都在研究如何寄生云计算服务实现“高信誉度”的攻击活动。本文将围绕K3S容器编排服务,以及AWS Systems Manager(SSM)系统管理服务,研究探索如何合法利用其资源管理能力,实现可信C2控制。

01 轻量级的K3S编排服务

K3S是一个轻量级且易于部署和管理的Kubernetes服务,其在保持核心Kubernetes功能的同时,通过优化和去除不必要的组件,减小了集群的资源占用,适用于边缘计算、IoT设备和资源有限的环境。K3S将所有的核心组件都封装在了一个二进制文件当中,该文件支持直接启动Server与Agent节点,Agent节点通过k3s agnet进程发起WebSocket连接进行服务端注册,该连接作为agnet进程的一部分由客户端负载均衡组件维护。

参考K3S官方文档中的单服务器架构图[1],攻击者可以利用K3S Server作为C2控制的服务端,利用K3S单文件部署快捷的特性,可快速将目标机器注册为C2 Server的Agent节点,进一步利用K3S完整的资源管理能力,对大规模的目标实施特权容器的部署与控制。

基于K3S实现C2控制

启动K3S Server:

主节点服务仅需一条命令即可启动.

向K3S集群注册新的Agent节点:

TOKEN具备注册新节点的权限,存储于主节点Server的/var/lib/rancher/k3s/server/node-token文件中。

通过K3S的二进制文件可以快速完成Agent节点的注册,完成注册后在K3S Server端调用kubectl命令可查看加入到集群中的节点信息,node name自动使用目标节点的主机名。

在集群指定Agent节点运行定制Pod

Pod作为K8S集群中可调度的最小计算单元,通过nodeSelector指定目标节点的标签实现特定节点的选取。

至此,攻击者已经可以合法的通过K3S服务在任意的控制节点上部署Pod,并通过kubectl exec命令特性进入到目标容器内执行命令,获取交互式的shell。

    $ kubectl exec -it target-name -- /bin/bash

    但上述的这种方式只能获取容器内shell的交互权限,无法操作宿主机上的资源,还是不能满足更进一步后渗透需求的。而nsenter作为一个可以进入到目标进程所在Namespace中的工具,通过给K3S节点上运行具备特权的nsenter Pod并与宿主机共享进程和网络的命名空间,使用--all参数加入所有的Namespace和cgroups,实现权限提升并且不受限制的访问宿主机资源。

    利用这种方式可以在K3S集群内的任何节点上获取root权限的shell,从而实现稳定的远程控制。基于K3S实现远程控制相比于使用CS、Mythic、Sliver,虽然远控功能上不及这些专业的C2框架,但其通过合法的云组件实施攻击活动,可以有效的提高攻击的隐蔽性,降低被AV、EDR等端侧安全产品检测的风险。

    02 AWS SSM系统管理服务

    AWS Systems Manager(SSM)是AWS应用程序和资源的运营管理中心,其提供了统一的管理界面实现对各个云资源实现配置、补丁、监控、操作等多种操作功能,可实现大规模的安全运营管理。Amazon SSM Agent作为支撑SSM服务的核心程序,支持安装在EC2、本地服务器等多种系统环境当中,SSM Agnet为SSM服务提供命令执行、远程会话管理等核心功能,并且默认安装在AWS的系统镜像当中(预装Agent镜像列表[2])。

    基于AWS SSM实现C2控制过程

    AWS SSM服务除了可以管理EC2实例外,其提供的多环境管理特性支持针对混合云以及多云环境下的机器进行注册与管理。

    AWS SSM混合云与多云管理特性激活:

    攻击者通过注册恶意的AWS账户并配置其中的混合激活功能,即可获取该接入该账户SSM服务的激活码与激活ID信息。

    SSM Agent启动:

    攻击者合法利用激活ID、激活码以及区域ID三个关键参数,实现SSM Agent上线注册;在混合激活的管理页面支持查看当前实例的注册情况。

    在成功完成SSM Agent注册后,攻击者可合法利用服务中的管理功能对目标实施C2控制,基于SSM服务的会话管理功能可随时开启一个具备ssm-user权限的远程会话,并实施后续的攻击活动。

    分析被控端机器进程列表可以发现,ssm agent会使用ssm-session-worker程序启动一个具备ssm-user用户权限的sh进程来满足会话管理需求。

    除此之外,SSM控制面板还具备文件、用户等管理工具实现对目标主机的图形化管理,已经具备一些专业C2控制框架的基本功能;另外SSM服务支持针对大规模的控制节点执行特定的命令,并将执行结果统一存放到S3存储桶中进行管理,从命令的下发到结果的回传均利用其合法的服务完成攻击活动,具备极强的隐蔽性与可信度。

    AWS SSM C2 攻击场景

    上文提到了SSM服务的混合管理特性支持在EC2、本地终端(Linux、Windows)以及其他云厂商实例等多种场景使用,并研究探索了该特性在可信C2控制活动上的技术可信性。利用AWS SSM实施C2攻击,这里也总结了3种可能出现的攻击场景。

    利用AWS SSM混合云管理机制控制非云端机器

    该攻击场景主要以上文提到的攻击过程为主,攻击者通过注册恶意的AWS账户并滥用其SSM功能实现对非云端机器的可信控制,整个过程中无需自行搭建基础设施,仅需要SSM服务与SSM Agent即可实现C2控制;

    EC2环境下劫持SSM Agent实施AWS云实例控制

    该攻击场景主要应用于针对特定AWS EC2目标的控制管理,由于一些EC2实例的镜像当中已经包含了SSM Agent并启动了SSM服务进行实例管理,攻击者在无需额外上传Agent的情况下,通过劫持修改目标Agent的注册激活ID以及激活码,即可实现对其的控制;

    缺点:由于修改了原SSM服务的地址,会导致原账户的SSM服务出现节点断连的警告

    EC2环境下基于命名空间特性启动新SSM Agent

    该攻击场景相比较于场景2来说,其具备更强的隐蔽性。由于劫持目标Agent会导致出现告警问题,因此可以在目标机器上启动新的Agent进程来减小对原有服务的干扰,而在目标机器上直接启动额外的Agent是会出现重复启动的问题,这里通过利用Linux系统下命名空间进程间资源隔离的特性,使用unshare命令创建新的命名空间,并挂载Agent运行的必要文件目录,从而实现两个Agent进程的相互隔离,有效的提高了控制过程中的隐蔽性。

    03 K3S && AWS SSM核心组件VT检出情况

    K3s agent [3]

    amazon-ssm-agent [4]

    04 总结

    寄生于云计算服务实现C2控制未来在一些特殊的攻防场景下也是一种发展趋势,随着云服务在各个业务场景当中广泛使用,攻击者在获取目标权限后,其中可能已经安装了具备合法运营管理的服务组件,攻击者在无需安装启动额外服务的情况下即可实现C2控制。基于云服务实施C2控制,在降低部署攻击基础设施成本的同时,云组件程序的合法签名、云服务的可信域名等高信誉云资源为攻击活动加持了“可信”的光环,在未来对防御检测也带来了新的挑战。

    附录 参考文献

    [1]https://docs.k3s.io/zh/architecture#%E5%B8%A6%E6%9C%89%E5%B5%8C%E5%85%A5%E5%BC%8F%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E5%8D%95%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E7%BD%AE

    [2]https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html

    [3]https://github.com/k3s-io/k3s/releases/download/v1.28.2%2Bk3s1/k3s

    [4]https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-managed-linux.html

    声明:本文来自M01N Team,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。