当前位置 博文首页 > Ms08067安全实验室:Cobaltstrike去除特征

    Ms08067安全实验室:Cobaltstrike去除特征

    作者:Ms08067安全实验室 时间:2021-02-02 22:25

    出品|MS08067实验室(www.ms08067.com)

    本文作者:BlackCat(Ms08067实验室内网小组成员)

    前言:

    红蓝对抗的时候,如果未修改CS特征、容易被蓝队溯源。

    去特征的几种方法:

    1、更改默认端口

    方法一、直接编辑teamserver进行启动项修改。

    vi teamserver

    方法二、启动时候指定server_port

    java -XX:ParallelGCThreads=4 -Duser.language=en -Dcobaltstrike.server_port=50505 -Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.keyStorePassword=123456 -server -XX:+AggressiveHeap -XX:+UseParallelGC -Xmx1024m -classpath ./cobaltstrike.jar server.TeamServer xxx.xxx.xx.xx test google.profile

    2、去除证书特征

    (1)、进入CS目录

    查看keytool -list -v -keystore cobaltstrike.store 证书情况,输入默认密码123456回车,可以看到所有者、发布者中Cobalt Strike相关字样。

    然后修改 keytool
    keytool是一个Java 数据证书的管理工具,使用如下:

    • -keytool -keystore cobaltstrike.store -storepass 密码
    • -keypass 密码
    • -genkey -keyalg RSA
    • -alias google.com -dname "CN=(名字与姓氏),
    • OU=(组织单位名称), O=(组织名称),
    • L=(城市或区域名称),
    • ST=(州或省份名称),
    • C=(单位的两字母国家代码)。

    keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias taobao.com -dname "CN=US, OU=”taobao.com“, O=“Sofatest”, L=Beijing, ST=Cyberspace, C=CN"

    然后 在观测keytool。

    这时发现所以关于cobaltstrike的字眼都被替换掉了。

    3、绕过流量审计

    (1)高信誉服务伪造

    传输过程中,把流量伪造成高信誉的网站,比如Google 、bing等 。

    现在的大多数硬件WAF防护设备都能检测出来Cs的流量特征,所以我们必须要修改CS的流量特征,CS的流量由malleable C2配置来掌控的,所以我们需要定向去配置这个C2。
    Malleable C2 是一种特定领域的语言,主要用来控制“Cobalt Strike Beacon”攻击载荷中的网络指针。

    malleable C2详细知识参考:
    https://bluescreenofjeff.com/2017-01-24-how-to-write-malleable-c2-profiles-for-cobalt-strike/
    去配置之前先了解下有关Beacon的通信基础:

    从Cobalt Strike 3.6版开始,可以将HTTP动词从POST更改为GET。Beacon忽略了此POST请求(配置文件中的http-post服务器)的响应。默认情况下,Beacon将HTTP POST请求用于上述步骤#3和#4。根据您的目标环境或您正在模拟的流量,可能会注意到交替的GET和POST请求。在这种情况下,请将http-post部分的动词设置为GET。

    Beacon与teamserver端c2的通信逻辑:
    1.stager的beacon会先下载完整的payload执行
    2.beacon进入睡眠状态,结束睡眠状态后用 http-get方式 发送一个metadata(具体发送细节可以在malleable_profie文件里的http-get模块进行自定义),metadata内容大概是目标系统的版本,当前用户等信息给teamserver端 。如图的 1)
    3.如果存在待执行的任务,则teamserver上的c2会响应这个metadata发布命令。beacon将会收到具体会话内容与一个任务id。
    4.执行完毕后beacon将回显数据与任务id用post方式发送回team server端的C2(细节可以在malleable_profile文件中的http-post部分进行自定义),然后又会回到睡眠状态。

    参考资料:https://www.chabug.org/web/832.html

    许多 Beacon 指标由一个 C2 拓展文件控制。一个 C2 拓展文件由设置和数据转换组成。数据转换是一 个简单的程序,它指定如何转换数据并将其存储在事务中。转换和存储数据的同一程序,向后解释,还 从事务中提取和恢复数据。

    配置文件语言:
    创建配置文件的最佳方法是修改现有的配置文件。
    Malleable配置文件下载:
    git clone https://github.com/rsmudge/Malleable-C2-Profiles.git

    CS中集成了一个包含在Linux平台下的C2lint工具,下面是检测这段代码是否存在问题:
    CD CobaltStrike
    chmod 777 c2lint
    ./c2lint [/path/to/my.profile] #这个路径是Malleable的配置文件路径
    ./c2lint /Users/blackcat/Desktop/资源/CS学习/Malleable-C2-Profiles/APT/havex.profile

    绿色为运行成功,黄色的为警告,红色的error为运行失败。
    这里是运行成功;

    然后我们要修改里面的参数 思路就是,默认值坚决不使用,具体如下:
    set sample_name "AL"; #配置文件名称:
    set sleeptime "50000"; #设置sleep时间,单位是毫秒
    set useragent "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 5.2) Java/1.5.0_08"; #这个一般结合实战环境去配置,从目标机构中捕获一个真实的user-agent值并且插入到真实的流量中。

    例如,可以向目标机构成员发送一封带有web漏洞的电子邮件并监视后续GET请求中发送的user-agent值。如果你使用的是明文的HTTP流量或者是目标环境中存在SSL拦截,那么与环境不匹配的User-Agent值就会被防御者发现。
    再往下的代码是http部分。
    这里分块来说明下。
    http-get模块:

    如上图所示。设定了victim的beacon发送给c2的metadata的相关配置。

    1.在client部分中,先设置了多个http header头,然后在uri中存储一个参数。把Referer伪造成Google
    2.然后又设置了在metadata数据在传输的时候,先base64加密然后将所有的值填写在Cookie字段中。
    3.在server部分,先设置多个header头。然后更改相应内容然后base64编码,然后把数据放在在body里。

    http-post模块:

    先说下Clinet模块:
    这里面的id代表的是task id,任务执行后,beacon需要利用post方式来与c2进行通信,需要传送一个唯一的task id值,还需要传送回显。例如ipconfig命令,就会传送命令的结果等。上面的header头就跟之前的header头的用途一致。
    client中的output代表的是客户端发送给服务端的响应用什么形式发送,
    server部分跟client比较类似所以不做太多讲述。

    此处可以通过定制C2的配置,使得C2的流量混合在目标环境流量中,伪装为正常应用流量,达到欺骗的作用。
    我这里伪造的是Google的流量,

    然后运行这个C2配置文件:
    服务端:
    sudo ./teamserver 192.168.1.55 Malleable-C2-Profiles/APT/havex.profile
    客户端:
    ./start.sh

    然后连接后,点击 Cobalt Strike -- Listeners创建一个监听模块。然后通过这个监听模块创建一个后门文件 ,然后去上线一台机器。

    我这里靶机地址:192.168.93.128
    然后点击 Attacks-- packages -- Windows Executable

    生成一个 Windows后门可执行文件EXE。

    然后把这个后门放到靶机里使其上线。

    然后;
    打开 wireshark,然后开启抓包
    这里要做下筛选:
    http and tcp.port == 80 #我这里CS监听端口是80 可以根据自己需求定制

    然后 进入到被控机的beacon模式下。
    执行命令 shell dir

    然后发现已经抓取到包,查看下包的内容。
    右键选定 --- follow --- TCP Tream

    此时发现Referer为Google 证明实验成功,成功伪造流量。

    下面的是基于JQuery的配置文件作为基础配
    下载:
    git clone https://github.com/threatexpress/malleable-c2.git
    然后运行语法:
    ./c2lint [/path/to/my.profile] #这个路径是Malleable的配置文件路径
    我这里用的是CS4.0,所以选用这个profile

    然后配置文件信息
    参考前面的配置文件名称,sleep时间、用户代理,同上 user-agent还是使用目标机的真实的user-agent值。

    SSL证书设置 :
    此设置控制用于HTTPS通信的SSL证书。如果可能的话,请为你正在使用的域使用真实的,正确发布的SSL证书。LetsEncrypt可以发布所有主要操作系统和浏览器都信任的免费SSL证书,并且会让防御者更难以检查Beacon流量。

    SpawnTo 过程 :
    spawnto设置控制beacon生成的进程以便后渗透利用工作,以及何时使用spawn命令。该命令也可以使用命令行参数。
    set %windir%\sysnative\svchost.exe -k localservice -p -s fdPHost

    svchost.exe是微软Windows操作系统中的系统文件,微软官方对它的解释是:svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。这个程序对系统的正常运行是非常重要,而且是不能被结束的。许多服务通过注入到该程序中启动,所以会有多个该文件的进程。

    如果防御者查看正在运行进程的命令行,额外的参数可以帮助Beacon进一步混淆。但是很难找到与spawnto一起使用的最合适的选项。选择前要进行实验和测试。

    SMB 信标:
    SMB 信标使用命名管道通过父信标进行通信。这允许在同一主机或网络上的信标之间进行点对点通信。可以配置SMB 信标的管道名称。不要使用默认设置,因为一些防御性产品会查找这些默认设置。选择能够混合到目标环境的内容。
    关于SMB信标的更多能容,请访问:
    https://www.cobaltstrike.com/help-smb-beacon

    DNS信标
    DNS信标使用DNS进行全部或部分通信。根据目标环境的防御技术,DNS流量很容易就能被检测到,但通常是防御者的盲点。DNS最适合用作低速和慢速备份通道。更改默认设置以更好地适应你遇到的环境。

    有关DNS信标的更多信息,请访问如下链接:
    https://www.cobaltstrike.com/help-dns-beacon

    分段过程(staging process)
    可以自定义信标分段过程。分段过程是用于完全加载信标的代码存根。
    了解有关Beacon分段过程的更多信息,请阅读这篇文章:
    https://blog.cobaltstrike.com/2013/06/28/staged-payloads-what-pen-testers-should-know/
    幸运的是,可以修改Beacon stager的HTTP特性。更改这些设置以模仿单个合法的HTTP请求/响应。

    在此示例中,请求将发送到
    /jquery-3.3.1.slim.min.js
    或/jquery-3.3.2.slim.min.js
    (取决于目标进程体系结构),以开始分段过程。构建HTTP服务器参数以模仿jQuery请求。Beacon命令和payload被混合到jQuery javascript文本块中。从CDN请求jQuery时,客户端发出一个合理的请求。

    很多网站发出请求的实现方式如下:

    在某些情况下,使用stageless payload可能更好,因为分段过程可能会触发防御产品的报警。

    内存指示器
    一些最新的Malleable C2功能可以修改许多Beacon内存指示器。
    有关控制Beacon内存指示器的详细信息,请参阅下面链接:
    https://blog.cobaltstrike.com/2018/02/08/in-memory-evasion
    https://www.youtube.com/playlist?list=PL9HO6M_MU2nc5Q31qd2CwpZ8J4KFMhgnK

    此示例使用peclone工具从explorer.exe中提取内存元数据,另存为Beaconpayload的一部分,并且采用了Raphael发布的一篇博客“In-Memory Evasion”中的一些建议。

    http-get&http-post
    http-get 和 http-post 修改格式和上面基本类似

    这里 都是伪造成 jquery.com的流量。
    测试验证:
    ./c2lint c2lint jquery-c2.3.11.profile
    Manual Testing(手工测试)

    除了使用c2lint进行测试外,还要在测试系统上手动测试Beacon的所有功能。

    手动测试和验证的快速步骤

    • 启动wireshark
    • 使用测试配置文件启动teamserver

    sudo ./teamserver 192.168.1.10 zaq123 jquery-c2.4.0profile

    • 创建HTTP监听器(名为http)
    • 创建一个Scripted Web Delivery攻击来部署HTTP信标
    • Attacks - > Web Drive-by - >Scripted Web Delivery
    • 在Windows测试系统上以管理员身份运行PowerShell
    • 查看数据包捕获数据以确保http流量符合你的预期

    这里检测没问题 流量特征都已经被修改。

    还有一种 CDN伪造技术 详细参考
    https://paper.seebug.org/1349/

    参考:
    CobalStrike 绕过流量审计:https://paper.seebug.org/1349/
    CobaltStrike」应用攻击手段实例分析:https://zhuanlan.zhihu.com/p/145505228
    cobalt strike malleable C2配置文件编写:https://blog.csdn.net/kongbaijun2000/article/details/109604547
    深入研究cobalt strike malleable C2配置文件:https://xz.aliyun.com/t/2796
    How to Write Malleable C2 Profiles for Cobalt Strike:https://bluescreenofjeff.com/2017-01-24-how-to-write-malleable-c2-profiles-for-cobalt-strike/
    CobaltStrike之Malleable-C2-Profiles配置:https://www.zzhsec.com/544.html

    转载请联系作者并注明出处!

    bk
    下一篇:没有了