CobaltStrike学习笔记

CS官方教程的学习笔记,目前进度到Weaponization。

CobaltStrike 学习笔记

1、Operations

操作

  • /sc // show channel
  • neo: xxxxxxx //对neo说话
  • /msg neo xxxx //给neo发私信

思路

  • 多个teamserver各司其职:
    • staginig
    • post-ex
    • longhaul
  • 红队单元
    • AccessManagementCell
    • TargetCell
  • 团队角色
    • Access
      • Get in and expand foothold
    • Post Exploitation
      • Data mining,monitor users,key log,etc.
    • Local Access Manager
      • Manage Callbacks
      • Setup Infrastructure
      • Persistence
      • Pass sessions to and from global access manager

2、Infrastructure

概念

三种payload

  • egress //出网口payload
  • p2p //通过父payload通信
  • alias //对其它payload handler的引用

也就是说,只要egress Beacon可以出网,p2p Beacon可以通过egress Beacon和teamserver通信

Payload Staging

  • Stageless

    • 稳定
  • Stager

    • 体积小、适用于资源有限的情况
    • 较不安全
    • 不稳定
    • 更容易被AV发现

名词

  • Payload controller
    • MSF
    • CS //兼容MSF
  • Staging protocal
    • http
    • https
    • 其它

过程

  1. Stager向Paylod controller发送http/https GET请求,并且URI的cheksum是一个固定值。
  2. Payload controller校验请求后,响应一个位置独立的blob,在父程序内存中运行
    • MSF:meterpreter payload
    • CS:beacon payload
  • CS exp可以下载meterpreter payload,meterpreter exp也可以下载beacon payload

payload的行为

  • 间隔固定时间给teamserver发get请求,获取指令。
  • 如果有指令,发送加密的指令。
  • 如果是生成报告的指令,需要发送数据到teamserver,beacon会发送一个带有加密数据的post请求到。
  • 以上只是默认设置,可以自己进行配置。

生成HTTPBeacon的参数

  • HTTP Hosts //home,域名,ip,ipv6都可以
  • HTTP Hosts(Stager) //Stager hosts(参考前面多个teamserver的思路)
  • HTTP Port(C2) //beacon发请求的端口
  • HTTP Proxy //beacon用的代理,甚至可以让beacon不用系统代理

HTTPS Beacon

Redirectors

  • 可以迷惑对手,也可以负载均衡

  • 可以用iptables,socat,apache或nginx反向代理,amazon cloudflare或者其他流量转发工具

    • socat TCP4-LISTEN:80,fork TCP4:[team server]:80

思路

  • 用Redirector作为beacon的home host,和stager host
  • 用CDN作为redirector(绝了,真没想到- -)

操作

用Socat作为转发器

  • 操作见教程,比较简单实用
  • 实用screen,退出ssh的时候不会退出socat

用CDN作为转发器

  • 注意

    • 需要用有效的SSL证书
    • 启用POST、GET
    • 如果出现问题,可以在mellable C2 Profile改为 HTTP-GET only C2,即用GET请求回传数据
    • 关闭CDN的缓存功能
    • 注意有些CDN会修改请求,比如cloud front会改cookie里面的值的顺序,如果我们设置用cookie回传数据,就会出现问题。
  • 域前置 domain fronting //太6了- -,不过好像一些CDN已经开始避免这种现象

    • 大概就是beacon请求a.com,HOST头写成b.com(CDN同时为a.com和b.com提供服务)
    • 查DNS的时候查的是a.com,然后请求发到CDN
    • CDN收到http请求,会根据HOST头去请求b.com
    • 防御方法就是检查URL和HOST,然后把HOST头改成URL里面的域
    • 所以绕过防御的方法,就是用https(虽然CDN是MITM,也可以防御。但有个思路是,有些行业是不希望有MITM的,可以尝试)
    • 还有一种防御方式,用SNI.也就是https在ssl层会提供的一个东西。

    Server Consolidation

    • HTTP Port(Bind)
      • beacon的http请求先发到redirector的HTTP Port(C2)端口,再被转发到teamserver的HTTP Port(Bind)端口

DNS Beacon

  • 三种Channel
    • dns
      • A record (4 bytes/request)
    • dns6
      • AAAA record (16 bytes/request)
    • dns-txt
      • TXT record (189 bytes/request)
  • 有些dns服务器会拒绝超长的域名查询,所以DNS Beacon作为备选的尝试

SMB Beacon

  • named pip beacon

  • 在windows上使用命名管道的时候,消息会自动封装在SMB协议中(445端口),所以叫SMB Beacon

  • 可以通过 link [host name] [pip],unlink [host] [pid]来主动连接,断开

TCP Beacon

  • 和SMB Beacon类似

External C2

  • 自己写程序,从beacon 获取数据,然后发给teamserver,反之亦然,其中可以自己进行处理。这个程序可以写多个,只要最终达成beacon和teamserver的通信就可以。
  • 可以通过这个功能适配一些特殊环境
    • 比如可以通过与另一台电脑上的文件共享,来读写信息.
    • 另一种用法

3、C2

Malleable C2

修改各种配置,包括

  • Network traffic
  • In-memory content,characteristics,and behavior
  • Process injection behavior

Profile Components

  • Options

    • set key “value”
      • value 要用双引号
  • Blocks

    • http-get{ indicators here }
      • download tasks
    • http-post{ indicators here }
      • upload outputs
    • http-stager{ indicators here }
  • Extraneous Indicators

  • Transforms

    • 自定义如何处理,自定义如何传输(放在uri,post体,header等),作者称之为基于用户定义和储存的加密通信

    • 主要有以下几个部分

      • http-get
        • Client:metadata
        • Server:output
      • http-post
        • Client:id,output
      • http-stager
      • http-config
      • https-certificate
      • stage
      • post-ex
      • process-inject
      • code-signer

Chunked Output

  • 当不用print的时候,比如uri-append,parameter,header.会自动分块传输,以适应这些位置的大小。
  • http-post{ set verb “GET”},http-get{set verb “post”}

Profile Variants

  • http-get “variant naame”{ }

Testing Profiles

  • 写好profile之后,用c2lint 进行单元测试
  • ./c2lint [profile]

The C2 Problem Set

  • 不能出网
  • IOC(indicator of compromise)检测
  • 我们的基础设施被标记为teamserver

HTTP/S Proxy Details

  • 使用WinINet AIP

    • 自动使用用户代理(与IE相同),就算代理有用户名密码
    • 如果代理失败,会自动提权
  • 我们自定义的代理信息会被存到beacon的某个位置,有暴露风险

Egress&Network Evasion

  • Profile Tips:
    • Don’t use public malleable C2 profile examples in production
    • 默认情况下的心跳是get请求,响应200,长度0 //非常可疑,尽量避免
    • http-stager //也非常重要,改变stager流量的样子
      • 推荐Header 改成不是 Content-type:application/octet-stream//因为这是默认项
      • 推荐output 进行处理,因为stage数据开头的decoder有指定字节是固定的
        • prepend一些数据
    • http-config,也改一改- -不然前功尽弃
    • Use plausible set useragent value for target network
    • if you are in a tough egress situation,可以考虑get-only C2

Network Security Monitoring

  • Use an Apache,Nginx,or a CDN as a redirector
    • other benefits:
      • smooths CS-specific indicators,better JA3S fingerprint
      • header的顺序,内容,更没有teamserver 的fingerprint
    • Invest in your infrastructure
      • Host redirectors on different providers
      • Domains are better with age and categorization
      • do not use IPv4 addresses for C2
      • Have a valid SSL certificate
    • Operate “low and slow”
      • High Beacon sleep interval

JA3

  • A way of looking at the handshake process of tls traffic and generating a hash on the algorithms that both sides present to each other as potential key lenght and ciphers they can use to communicate.
  • And it turns out that these presented ciphers and key lengths aere agreat way to fingerprint the applications on each side of communication.
  • 简单来说就是通过https双方协商好的cipher suite判断双方的程序,如果用Apache或Ngingx服务器作为redirector,jar3看起来就不是在和jdkxxx通信,而是apache或nginx

DNS C2 Tracdecraft

  • Split-Split DNS
    • Don’t use DNS C2
  • Volume of requests
    • Use DNS C2 as low&slow fallback option only
  • Bogon IP addresses
    • Change dns idle in profile
    • Avoid ‘mode dns’ as this will send bogon responses
  • Length of request hostnames and responses
    • Set dns max txt to limit TXT length
    • Set maxdns to limit hostname length

Infrastructure OPSEC

  • How to find team servers on the internet
    • Default(self-signed!)SSL certificate
      • Use a valid SSL certificate
      • Use Apache,Nginx,or a CDN as a redirector
      • Only allow HTTP/S connections from redirectors
    • 0.0.0.0 DNS response
      • Set dns_idle in Malleable C2 to aviod 0.0.0.0
    • Port 50050 open
      • Firewalll port 50050 and access via SSH tunnel
    • Empty index page,404,text/plain Content-Type
      • Host content on your redirectors
    • Don’t want your payload fconfig available to all?
      • Set host_stage to false in Malleable C2
      • (disables hosted payload for staging purposes)
  • How to verify team server
    • Connect to it and ask for a payload(staging)
    • wget -U “Internet Explorer” http://[server]/vl6D
      • vl6D这个地方的checksum必须是某个固定的值

4、Weaponization

  • 执行自己想要执行的artifact:exe、dll、ps1
  • Static Analysis
    • heuristics
      • Compile time
      • Compiler
      • import table
      • metadata resources
        • clone 其它程序的
      • signed?
      • entropy
    • correlation
      • 与样本库中的程序对比相似性
  • Dynamic Analysis
    • sandbox
      • TIME
      • INCOMPLETE
  • Artifact Kit
    • Source code Framework to generate EXEs,DLLs and Serevice EXEs
    • Obfuscate known bad in unknown executable
    • Fool AV product to stop emulating executable
    • De-obfuscate known bad execute it
  • Application Whitelisting
    • prevent execution of unapproved applications
    • Run payload via whitelisted program
      • MS Office Macro
      • PowerShell
      • LOLbins
      • DLL Sideloading
  • Resource Kit
    • 混淆web delivery后在victim上执行的命令
  • In-memory Detections
    • 1:16s