Cobalt Strike----(5)

Payload Artifact 和反病毒规避

     Strategic Cyber 责任有限公司会定期回答有关规避的问题。 Cobalt Strike 是否能够绕过 AV 产品?它能绕过哪些 AV 产品?它多久检查一次? Cobalt Strike 默认的 Artifact 可能会被大多数终端安全解决方案拦截。规避不是 Cobalt Strike 默认产品的目的。但是 Cobalt Strike 确实提供了灵活性。
    作为操作员可以改变 Cobalt Strike 在它的工作流中使用的可执行文件、 DLL applet 和脚本模板。 你也可以以多种不同的格式导出 Cobalt Strike Beacon payload ,这样可以与用于帮助规避的第三方工具一起工作。
       传统的反病毒产品使用签名来识别已知的恶意程序。如果我们把一些被标记的恶意 shellcode 注入一个 可执行文件,那么反病毒产品会识别 shellcode 并把此可执行文件标为恶意。 为了打败这种检测,攻击者通常会以某种方式混淆 shellcode 并将其放入二进制文件中。这种混淆过程
会打败使用简单的字符串搜索来识别恶意代码的反病毒产品。很多反病毒产品会进行更严苛的检测。这些反病毒产品模拟一个可执行程序在一个虚拟沙盒中的执行。 在执行的每个模拟步骤中,这个反病毒产品会检测在模拟的进程空间中的已知的恶意部分。如果已知的 恶意部分出现,反病毒产品会把这个可执行文件或 DLL 标记为恶意的。这项技术打败了许多编码器和程序包,它们试图去从基于签名的反 AV 产品中隐藏已知的恶意部分。
     Cobalt Strike 对此的应对策略是很简单的。这个反病毒沙盒有一些限制。这不是完整的虚拟机。有一些反病毒沙盒不会模拟的系统行为。这个 Artifact 工件集是一些可执行文件和 DLL 模板的集合,这些可执行文件和 DLL 模板依赖于一些反病毒产品不会模拟来还原二进制中的 shellcode 的行为。
      一些技术 生成可执行文件和 DLL ,这些可执行文件和 DLL 通过命名管道为 shellcode 服务,通过命名管道传输 shellcode 。如果反病毒沙箱不模拟命名管道,就发现不了那些已知的恶意 shellcode

Veil 规避框架

     Veil 是一个流行的框架,用于生成可以通过某些防病毒产品的可执行文件。你可以使用 Veil 来为 Cobalt Strike 的 payload 生成可执行文件。通过 Attacks Packages Payload Generator
选择你想要为其生成可执行文件的监听器。选择 Veil 作为输出类型,按 Generate 按钮来保存输出
文件。
     启动 Veil 规避框架并选择你想要使用的技术。 Veil 最终会询问关于 shellcode 的生成选项。选择 Veil的“ 使用自定义 shellcode” 的选项,把 shellcode 粘贴在 Cobalt Strike payload 生成器使用的文件内容中。按 Enter 键然后你就会获得一个新鲜出炉的 Veil 制作的可执行文件。

后渗透

Beacon 控制台

     在一个 Beacon 会话上单击右键并选择 interact (交互)来打开 Beacon 的控制台。这个控制台是你的Beacon 会话的主用户接口。这个 Beacon 控制台允许你看哪个任务被发送到了 Beacon Beacon何时下载任务。这个 Beacon 控制台也是命令输出和展示其他信息的地方。
  在 Beacon 控制台的输入和输出之间是一个状态栏。这个状态栏包含关于当前会话的信息。在它的默认 配置中,这个状态栏显示目标的 NetBIOS 名称,用户名和 当前会话的 PID ,以及 Beacon 最近一次连到团队服务器的时间。
   向 Beacon 发出的每个命令,无论是通过 GUI 还是控制台,都会在此窗口中显示出来。如果一个队友发送了一个命令,Cobalt Strike 会在命令前显示他们的昵称。

Beacon 菜单

在一个 Beacon 上或在一个 Beacon 的控制台内单击右键来获取 Beacon 菜单。这和与用来打开
Beacon 控制台(点击菜单中的 Interact )相同的菜单.
  • Access 子菜单包含对凭据的操作和提权在内的一些选项。
  • Explore 子菜单包含信息探测和与目标系统交互的一些选项。
  • 通过 Pivoting 子菜单你可以通过一个 Beacon 来配置工具来搭建流量隧道。
  • 通过 Session 菜单你可以管理当前 Beacon 会话。

 异步和交互式操作

      请注意, Beacon 是一个异步的 payload 。命令不会立即执行。每个命令都会先进入队列。当 Beacon 连接到你的时候。它会下载这些命令并挨个执行它们。此时,Beacon 会将所有的输出报告给你。如果 输入有误,使用 clear 命令来清理当前 Beacon 的命令队列。默认情况下,Beacon 60 秒连接到你一次。你可以使用 Beacon sleep 命令修改这个时间设置。 使用 sleep 接着一个秒数来指定 Beacon 连接到你的频率。你也可以指定第二个参数,这个参数必须 是一个0 99 之间的数字。这个数字就是抖动因子。 Beacon 会根据你指定的抖动因子的百分比随机变 化下次连接到你的时间。比如, sleep 300 20 这条命令,会使得 Beacon 睡眠 300 秒,另外有 20% 的抖动因子。这意味着 Beacon 在每次连接到你之后会随机睡眠 240 - 300

会话传递

    Cobalt Strike Beacon 最初是一个稳定的生命线,让你可以保持对受害主机的访问权限。从一开始, Beacon 的主要目的就是向其他的 Cobalt Strike 监听器传递权限。 使用 spawn 命令来为一个监听器派生一个会话。此 spawn 命令接受一个架构(如: x86 x64 )和一 个监听器作为其参数。 默认情况下, spawn 命令会在 rundll32.exe 中派生一个会话。管理员通过查看告警可能会发现rundll32.exe 定期与 Internet 建立连接这种异常现象。为了更好的隐蔽性,你可以找到更合适的程序 (如 Internet Explorer ) 并使用 spawnto 命令来说明在派生新会话时候会使用 Beacon 中的哪个程 序。
    spawnto 命令会要求你指明架构( x86 还是 x64 )和用于派生会话的程序的完整路径。单独输入
spawnto 命令然后按 enter 会指示 Beacon 恢复至其默认行为。
    输入 inject + 进程 id + 监听器名来把一个会话注入一个特定的进程中。使用 ps 命令来获取一个当前系统上的进程列表。使用 inject [pid] x64 来将一个 64 Beacon 注入一个 64 位进程中.spawn 和 inject 命令都将一个 payload stage 注入进内存中。如果 payload stage HTTP 、 HTTPS 或 DNS Beacon 并且它无法连接到你,那么你将看不到一个会话。如果 payload stage 是一个
绑定的 TCP SMB Beacon ,这些命令会自动地尝试连接到并控制这些 payload
         使用 dllinject [pid] 来将一个反射性 DLL 注入到一个进程中。
         使用 shinject [pid] [ 架构 ] [/ 路径 /.../file.bin] 命令来从一个本地文件中注入 shellcode 到一
个目标上的进程中。
         使用 shspawn [ 架构 ] [/ 路径 /.../file.bin] 命令会先派生一个新进程(这个新进程是 spawn to 命令指定的可执行文件),然后把指定的 shellcode 文件( file.bin )注入到这个进程中。
         使用 dllload [pid] [c:\ 路径 \...\file.dll] 来在另一个进程中加载磁盘上的 DLL 文件。

备用父进程

    使用 ppid [pid] 命令来为你的 Beacon 会话运行的程序分配一个备用父进程。这是一种使你的活动 目标上的正常行为融合的方法。当前 Beacon 会话必须有调用备用父进程的权限并且最好是备用父进程和你的 Beacon 存在相同的桌面会话中。输入单独一个不带任何参数的 ppid 命令,会让 Beacon 使用其本身的进程作为父进程、不使用伪造的父进程。
   runu 命令将使用另一个进程作为父进程来执行命令,这个命令将以其备用父进程的权限和桌面会话来执行命令。当前的 Beacon 会话必须有到备用父进程的完整权限。 spawnu 命令会派生一个临时的进程,作为一个特定进程的子进程,并将一个 Beacon payload stage 注入进此进程。 spawnto 的值控制用哪一个程序来作为临时进程。

伪造进程参数

       不是所有的命令都能做参数伪造,每个会话都有一个内部列表,里面存着可以用来做参数伪造的命令。 当 Beacon 运行一个匹配列表的命令时, Beacon 会:
  • 1. 以挂起状态启动匹配的进程(使用伪参数)
  • 2. 使用实参更新进程内存
  • 3. 恢复进程
    这样做的结果是,记录进程启动的主机检测程序将看到假参数。这有助于掩盖你的真实活动。
使用
argue [ 命令 ] [ 假参数 ] 来将命令加入到此内部列表中。
[ 命令 ] 部分可能会包含环境变量
argue [command] 命令来从此内部列表中移除一个命令,
单独的 argue 命令会在列出这个内部列表中的命令。 进程匹配逻辑是精确的。如果 Beacon 尝试启动 net.exe 程序,它不会从它的内部列表中匹配 net 、 NET.EXE,或           c:\windows\system32\net.exe 。它将仅仅匹配 net.exe 。 x86 Beacon 只能伪造 x86 子进程中的参数。同样的, x64 Beacon 仅仅能伪造 x64 子进程中的参数。 实际参数被写入保存着伪参数的内存空间。如果实际参数比伪参数长,命令启动就会失败

子进程中阻止(非微软签名的)DLL 加载

使用 blockdlls start 来请求 Beacon 使用一个二进制签名策略启动子进程,该策略会从进程空间中
阻止所有非微软的 DLL 。使用 blockdlls stop 来禁用此行为。这个特性要求 Windows 10

上传和下载文件

     download 命令会下载请求的文件。你不需要在一个带有空格的文件名前后打引号。 Beacon 被设计为低速提取数据。在每次连接到团队服务器时,Beacon 会下载它的任务要求获取的每一个文件的固定大小的块。这个块的大小取决于 Beacon 当前的数据通道。 HTTP HTTPS 通道会拉取 512kb 的数据块.
    输入 downloads 命令来查看当前 Beacon 正在进行的文件下载列表。使用 cancel 命令加一个文件名 来取消正在进行的一个下载任务。你可以在你的 cancel 命令中使用通配符来一次取消多个文件下载任务.
     Cobalt Strike 中通过 View Downloads 来查看你的团队迄今为止已下载的文件 。此选项卡中仅显示完成的下载内容。下载的文件被存储在团队服务器中。要把文件传回到你的系统上,先高亮选中这些文件,然后点击 Sync Files (同步文件)。 Cobalt Strike 会将选择的文件下载到你的系统上你指定的文件夹下。
    upload 命令将上传一个文件到目标主机上。
当你上传一个文件时,有时你会想改变此文件的时间戳来使其混入同一文件夹下的其他文件中。使用 timestomp 命令来完成此工作。 timestomp 命令会将一个文件的修改属性访问属性和创建时间数据与另一个文件相匹配

文件浏览器

     Beacon 的文件浏览器为你提供了一个探索受害系统上的文件的机会。通过 [Beacon] Explore → File Browser 来打开文件浏览器。 文件浏览器会请求 Beacon 的当前工作目录列表,当结果返回之后,文件浏览器就会显示具体的文件目 录。 文件浏览器的左侧是一棵文件树,该树将已知的驱动器和文件夹组织到一个视图中,文件浏览器的右侧展示了当前文件夹的内容。

     每个文件浏览器都会缓存接收到的文件夹列表。彩色文件夹表示该文件夹的内容位于此文件浏览器的缓 存中。你可以导航到缓存的文件夹而不生成一个新的文件列表请求。按 Refresh 会要求 Beacon 更新当 前内容夹。
一个深灰色的文件夹表示该文件夹的内容不在此文件浏览器缓存中。点击树中的一个文件夹来使
Beacon 生成一个任务来列出此文件夹下的内容(并更新它的缓存)。双击右侧当前文件夹视图中的深灰色文件夹可以执行相同操作。 要转到一个文件夹,点击右侧详细文件视图中的文件夹按钮,该按钮在文件路径旁边。如果父文件夹在 该文件浏览器的缓存中,你就会立刻看到结果。如果父文件夹不在文件浏览器的缓存中,浏览器就会生 成一个任务来列出父文件夹的内容。 在一个文件上单击右键来下载或删除它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值