TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

渗透技巧 2年前 (2023) admin
673 0 0

         TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

         

TripleCross是一个Linux eBPF rootkit,演示了eBPF技术的攻击性功能。

TripleCross的灵感来自于该领域之前的植入物设计,特别是Jeff Dileo在DEFCON 271、Pat Hogan在DEFCON 292、Guillaume Fournier和Sylvain Afchain也在DEFCON 293以及Kris Nóva的Boopkit4的作品。我们重用和扩展了eBPF技术攻击能力的这些先前探索中所开创的一些技术。

这个rootkit是为我在UC3M的学士论文而创建的。有关其设计的更多详细信息,请参见 论文文件

免责声明

这个新手纯粹是为了教育和学术目的。本软件按“原样”提供,作者对使用过程中可能发生的任何损坏或事故概不负责。

不要试图使用TripleCross违反法律。滥用所提供的软件和信息可能会导致刑事指控。

特点

1.一个库注入模块,通过写入进程的虚拟内存来执行恶意代码。

2.一个执行劫持模块,修改传递给内核的数据以执行恶意程序。

3.允许以 root 权限运行恶意程序的本地权限提升模块。

4.具有 C2 功能的后门,可以监控网络并执行从远程 Rootkit 客户端发送的命令。它结合了多个激活触发器,以便这些操作被秘密传输。

5.一个Rootkit 客户端,允许攻击者建立 3 种不同类型的类似 shell 的连接,以发送远程控制 Rootkit 状态的命令和操作。

6.一个持久性模块,确保 rootkit 保持安装状态,即使在重新启动事件后也能保持完全特权。

7.向用户隐藏与 rootkit 相关的文件和目录的隐形模块。

TripleCross概述

下图显示了TripleCross及其模块的体系结构。

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

           

用于rootkit传输的原始套接字库RawTCP_Lib是我的著作,并有自己的存储库

下表介绍了主要的源代码文件和目录,以便于其导航:

目录

命令

src/client

rootkit客户端的源代码

src/client/lib

RawTCP_Lib共享库

src/common

rootkit的常量和配置。它还包括eBPF和rootkit的用户空间端所共有的元素的实现,例如环形缓冲区

src/ebpf

rootkit使用的eBPF程序的源代码

src/helpers

包括用于测试几个rootkit模块功能的程序,以及分别用于执行劫持和库注入模块的恶意程序和库

src/libbpf

包含与rootkit集成的libbpf库

src/user

rootkit使用的用户级程序的源代码

src/vmlinux

包含内核数据结构定义的标头(这是使用libbpf时推荐的方法)

构建和安装

所需资源

研究项目在以下环境下进行了测试:

                       

VERSION

我们建议使用Ubuntu 21.04,默认情况下,它将包含此处显示的软件版本。否则,您可能会遇到一些问题 这里

汇编

使用两个Makefile编译rootkit源代码。

# Build rootkit                
cd src                
make all                
# Build rootkit client                
cd client                
make

下表详细描述了每个Makefile的用途:

生成文件

命令

描述

结果文件

src/client/Makefile

make

rootkit客户端的编译

src/client/injector

src/Makefile

make help

编写测试rootkit功能的程序,以及恶意程序和库的执行劫持和库注入模块

src/helpers/simple_timer, src/helpers/simple_open, src/helpers/simple_execve, src/helpers/lib_injection.so, src/helpers/execve_hijack

src/Makefile

make kit

使用libbpf库编译rootkit

src/bin/kit

src/Makefile

make tckit

rootkit TC出口程序的编译

src/bin/tc.o

安装

在src/bin/下生成rootkit文件后,必须按顺序加载tc.okit程序。在以下示例中,rootkit后门将在网络接口enp0s3中运行

// TC egress program              
sudo tc qdisc add dev enp0s3 clsact              
sudo tc filter add dev enp0s3 egress bpf direct-action obj bin/tc.o sec classifier/egress              
// Libbpf-powered rootkit              
sudo ./bin/kit -t enp0s3

攻击场景脚本

有两个脚本 packager.shdeployer.sh可自动编译和安装rootkit,就像攻击者在真实的攻击场景中所做的那样。

执行packager.sh 将生成下的所有rootkit文件应用程序/目录。

执行 deployer.sh 将安装rootkit并创建持久性文件。

为了使持久性模块正常工作,必须首先使用以下参数配置这些脚本:

脚本

常数

描述

src/helpers/deployer.sh

病例持续

重新启动后要执行的Cron作业

src/helpers/deployer.sh

SUDO_持续

授予无密码权限的Sudo条目

库注入模块

rootkit可以劫持调用sys_timerfd_settimesys_openat系统调用的进程的执行。这是通过在进行调用的进程的虚拟存储器中重写全局偏移表(GOT)部分来实现的。这会导致执行恶意库(src/helpers/injection_lib. c)。该库将为攻击者的机器生成一个反向shell,然后将执行流返回到原始函数,而不会使进程崩溃。

TripleCross准备绕过常见的ELF强化技术,包括:

ASLR

Stack canaries

DEP/NX

PIE

Full RELRO

它还可以使用英特尔CET兼容代码。

可使用两个测试程序检查模块功能 src/helpers/simple_timer.c 以及 src/helpers/simple_open.c。或者,您可能会尝试劫持任何系统进程(已测试并使用systemd)。

模块组态通过以下常量设置:

文件名

常数

描述

src/common/constants.h

任务通信名称进样 目标定时器FD设置时间

要在系统调用sys_timerfd_settime时劫持的进程的名称

src/common/constants.h

任务通信名称进样 目标_打开

要在syscall sys_openat上劫持的进程的名称

src/helpers/injection_lib.c

攻击者IP和攻击者端口

攻击者计算机的IP地址和端口

可以使用netcat从攻击者计算机接收反向shell:

nc -nlvp

基于GOT劫持技术的库注入

TripleCross采用的技术包括5个阶段:

查找GOT和返回地址

rootkit使用跟踪点程序来挂钩系统调用。从那里,它在GOT段定位PLT存根用来调用负责系统调用的glibc函数的地址。

为了到达GOT段,eBPF程序使用存储在堆栈中的返回地址。请注意:

.text 调用 .plt,因此 rip 在堆栈中保存为 ret

.plt 使用 .got 跳转至 glibc,因此不会保存其他 rip。它也不会修改或保存 rbp 的值。

Glibc 进行 syscall ,它不会将 rip 保存在堆栈中,而是将其保存在 rcx 中。

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

               

因此,为了从eBPF检查堆栈中的地址是将我们引导到正确GOT的返回地址,我们必须检查它是PLT存根的返回地址,该PLT存根使用跳转到glibc函数的GOT地址,该glibc函数进行我们从eBPF钩住的系统调用。

已经合并了两种用于查找返回地址的技术:

使用 sys_timerfd_settime,eBPF 程序使用系统调用参数在扫描中向前扫描。

使用 sys_openat,eBPF 程序扫描使用跟踪点的 pt_regs 结构中的数据来扫描返回地址。

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

               

查找外壳代码的键函数

必须动态生成 shellcode 以绕过 ASLR 和 PIE,它们会在每次程序执行时更改 dlopen() 等函数的地址。

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

               

在代码洞穴中注入 shellcode

如果 ASLR 和 PIE 关闭,可以通过对 ELF 进行逆向工程找到代码洞,但通常情况并非如此。eBPF 程序向用户空间 rootkit 程序发出请求,该程序使用 /proc 文件系统定位并写入 .text(可执行)部分的代码洞穴。

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

               

覆盖GOT部分

根据可执行文件上激活的是部分RELRO还是完全RELRO,eBPF程序直接或使用/proc文件系统覆盖GOT部分。

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

               

正在等待下一个系统调用

当在被劫持的程序中发出下一个系统调用时,PLT 部分使用修改后的 GOT 部分,劫持被重定向到代码洞穴中的 shellcode 的执行流。shellcode准备防止程序崩溃,并调用恶意库(src/helpers/lib_injection.so)。该库发出一个 fork() 并使用攻击者机器生成一个反向 shell。之后执行流程恢复。

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

               

后门和C2

后门程序可以开箱即用,不需要任何配置。可以使用rootkit客户端程序远程控制后门:

客户论据

行动描述

./injector -c 

使用执行劫持模块生成纯文本伪shell

./injector -e

通过使用基于模式的触发器命令后门来生成加密的伪shell

./injector -s

通过使用多数据包触发器(两种类型)命令后门来生成加密的伪shell

./injector -p

通过使用基于模式的触发器命令后门来生成幻像shell

./injector -a

命令rootkit激活所有eBPF程序

./injector -u

命令rootkit分离其所有eBPF程序

./injector -S

展示后门如何隐藏消息不让内核看到(简单PoC)

./injector -h

显示帮助

后门触发器

使用后门触发器将操作发送到后门,后门触发器根据属性值指示要执行的操作 K3

K3值

行动

0x1F29

请求启动加密的伪shell连接

0x4E14

请求启动幻像shell连接

0x1D25

请求加载和附加所有rootkit eBPF程序

0x1D24

请求分离所有rootkit eBPF程序(后门程序除外)

基于模式的触发器

这个触发器隐藏了命令和客户端信息,以便它可以被后门识别,但同时对于外部网络管理员来说似乎足够随机。它基于最近发现的 NSA rootkit Bvp47 使用的触发器。

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

               

多包触发

此触发器由多个 TCP 数据包组成,后门负载隐藏在数据包标头中。该设计基于Vault 7 泄漏中描述的CIA Hive植入物。使用以下有效负载:

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

               

然后根据 rootkit 客户端选择的模式,对上述有效负载计算滚动 XOR,并将其分为多个部分。TripleCross 支持隐藏在 TCP 序列号上的有效载荷:

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

               

在 TCP 源端口上:

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

               

后门伪壳

客户端可以建立 rootkit 伪 shell,一种模拟 shell 程序的特殊 rootkit 到 rootkit 客户端连接,使攻击者能够远程执行 Linux 命令并获得结果,就像直接在受感染的机器上执行它们一样。我们的 rootkit 中包含多个伪外壳:

明文伪壳

该shell是执行劫持模块成功运行后生成的,执行劫持模块会执行一个恶意文件,该文件与rootkit客户端建立连接,如下所示:

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

               

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

               

加密伪壳

rootkit 客户端可以随时请求一个加密的伪外壳,它由 rootkit 和 rootkit 客户端之间的 TLS 连接组成。在加密连接内部,遵循一种传输协议来传达命令和信息,类似于明文伪外壳中的传输协议。

产生一个加密的伪 shell 需要后门来监听触发器,它接受基于模式的触发器或两种类型的多数据包触发器:

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

               

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

               

phantom shell

phantom shell 使用 XDP 和 TC 程序的组合来克服网络上的 eBPF 限制,特别是它不能生成新数据包。为此,后门修改现有流量,用 C2 传输的数据覆盖有效载荷。原始数据包不会丢失,因为 TCP 重传会在短时间后再次发送原始数据包(未修改)。

以下协议说明了使用虚拟 shell 执行命令期间的流量:

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

               

rootkit 客户端请求一个 phantom shell,它发出一个由后门执行的命令:

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

               

受感染的机器发送任何 TCP 数据包后,后门会覆盖它,客户端显示响应:

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

               

执行劫持模块

原则上,eBPF 程序不能自行启动程序的执行。该模块展示了恶意 rootkit 如何利用良性程序在用户空间执行恶意代码。该模块实现了两个目标:

利用其他程序的执行执行恶意用户程序。

对用户空间是透明的,也就是说,如果我们劫持一个程序的执行以便另一个程序运行,那么原始程序也应该以最少的延迟执行。

该模块的工作原理是劫持 sys_execve() 系统调用,修改其参数,以便运行恶意程序 ( src/helpers/execve_hijack.c )。进行此修改的方式使得恶意程序可以使用原始参数执行原始程序,以避免在用户空间引起关注。下图总结了整体功能:

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

           

原始 sys_execve() 调用的参数以不丢失原始参数的方式进行修改(使用 argv[0]),以便可以在恶意程序之后执行原始程序:

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

           

我们已经合并了一个示例测试程序(src/helpers/simple_execve.c)来测试执行劫持模块。该模块还可以劫持系统中的任何调用,具体取决于配置:

文件名

src/common/constants.h

src/common/constants.h

src/common/constants.h

src/common/constants.h

成功劫持后,该模块将自行停止。恶意程序execve_hijack会监听来自rootkit 客户端的明文伪shell 请求。

Rootkit 持久性

受感染机器重启后,所有的eBPF程序将从内核中卸载,userland rootkit程序将被杀死。而且,即使rootkit可以自动再次运行,它也不再享有再次附加eBPF程序所需的root权限。Rootkit 持久性模块旨在应对这两个挑战:

在机器重启事件后自动执行 rootkit,无需用户交互。

一旦 rootkit 在机器中第一次执行时获得了 root 权限,即使在重新启动后它也必须保留这些权限。

TripleCross 使用在cron.dsudoers.d下创建的两个秘密文件来实现此功能。这些条目确保 rootkit 在重新启动后自动加载并具有完全权限。这些文件由deployer.sh脚本创建和管理:

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

           

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

           

该脚本包含两个常量,用户必须配置这些常量才能感染目标系统:

脚本

src/helpers/deployer.sh

src/helpers/deployer.sh

Rootkit隐身

持久化模块基于创建附加文件,但它们最终可能会被系统所有者或某些软件工具找到,因此存在将它们留在系统中的风险。此外,rootkit 文件需要存储在某个位置,它们可能会被发现。

考虑到上述情况,隐形模块提供以下功能:

对用户完全隐藏一个目录(这样我们就可以隐藏里面的所有rootkit文件)。

隐藏目录中的特定文件(我们需要隐藏持久化文件,但我们不能完全隐藏sudoers.dcron.d目录,因为它们属于正常的系统功能)。

rootkit 隐藏的文件和目录可以通过以下配置常量进行自定义:

文件名

src/common/constants.h

src/common/constants.h

默认情况下,TripleCross 将隐藏任何名为“ ebpfbackdoor ”的文件和名为“ SECRETDIR ”的目录。此模块在安装 rootkit 后自动激活。

用于实现此功能的技术包括篡改 sys_getdents() 系统调用的参数:

TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

           翻译自网络

原文始发于微信公众号(闲聊知识铺):TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能

版权声明:admin 发表于 2023年3月10日 下午8:25。
转载请注明:TripleCross -具有后门、C2、库注入、执行劫持、持久性和隐身功能 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...