Bypass FS protections: read-only / no-exec / Distroless
最后更新于
最后更新于
如果您对黑客职业感兴趣并想要黑掉不可能黑掉的东西 - 我们正在招聘!(需要流利的波兰语书面和口头表达能力)。
在以下视频中,您可以找到本页中提到的技术的更深入解释:
在Linux机器上发现只读(ro)文件系统保护变得越来越常见,特别是在容器中。这是因为在容器中运行只读文件系统只需在securitycontext
中设置**readOnlyRootFilesystem: true
**即可:
然而,即使文件系统以只读方式挂载,/dev/shm
仍然是可写的,因此我们可以在磁盘上写入内容。但是,此文件夹将以无执行保护挂载,因此如果您在此处下载二进制文件,则无法执行。
从红队的角度来看,这使得下载和执行不在系统中的二进制文件(如后门或类似kubectl
的枚举器)变得复杂。
请注意,我提到了二进制文件,只要解释器在机器内部,您可以执行任何脚本,比如shell脚本(如果存在sh
)或Python脚本(如果安装了python
)。
然而,这仅仅足以执行您的二进制后门或其他可能需要运行的二进制工具。
如果您想执行一个二进制文件,但文件系统不允许,最好的方法是通过从内存中执行,因为这些保护在内存中不适用。
如果您在机器内部有一些强大的脚本引擎,比如Python、Perl或Ruby,您可以将要执行的二进制文件下载到内存中,将其存储在一个内存文件描述符(create_memfd
系统调用)中,这不会受到这些保护的保护,然后调用**exec
系统调用**,指示将fd作为要执行的文件。
为此,您可以轻松使用项目fileless-elf-exec。您可以将二进制文件传递给它,它将生成一个以指定语言编写的脚本,其中包含使用指令对二进制文件进行压缩和b64编码的说明,以及在调用create_memfd
系统调用创建fd
并调用exec系统调用来运行它。
这在其他脚本语言(如PHP或Node)中不起作用,因为它们没有任何从脚本中调用原始系统调用的默认方法,因此无法调用create_memfd
来创建内存fd以存储二进制文件。
此外,在/dev/shm
中创建一个常规fd中的文件是行不通的,因为您将无法运行它,因为无执行保护将适用。
DDexec / EverythingExec是一种允许您通过覆盖其**/proc/self/mem
来修改自己进程的内存**的技术。
因此,通过控制进程执行的汇编代码,您可以编写一个shellcode并“变异”进程以执行任意代码。
DDexec / EverythingExec将允许您从内存加载和执行您自己的shellcode或任何二进制文件。
Memexec是DDexec的自然下一步。它是一个DDexec shellcode demonised,因此每次您想要运行不同的二进制文件时,您无需重新启动DDexec,只需通过DDexec技术运行memexec shellcode,然后与此守护进程通信以传递要加载和运行的新二进制文件。
您可以在https://github.com/arget13/memexec/blob/main/a.php中找到如何使用memexec从PHP反向shell执行二进制文件的示例。
与DDexec具有类似目的,memdlopen技术允许以更简单的方式将二进制文件加载到内存中以后执行它们。甚至可以加载具有依赖关系的二进制文件。
Distroless容器仅包含运行特定应用程序或服务所需的最少组件,例如库和运行时依赖项,但不包括诸如软件包管理器、shell或系统实用程序等较大的组件。
Distroless容器的目标是通过消除不必要的组件减少容器的攻击面,并最小化可以被利用的漏洞数量。
在distroless容器中,您可能**找不到sh
或bash
**以获取常规shell。您也不会找到诸如ls
、whoami
、id
等二进制文件...通常在系统中运行的所有内容。
因此,您将无法像通常那样获得反向shell或枚举系统。
但是,如果受损的容器例如正在运行flask web,则已安装了python,因此您可以获取Python反向shell。如果正在运行node,则可以获取Node反向shell,大多数任何脚本语言都可以。
使用脚本语言,您可以使用语言功能枚举系统。
如果没有**read-only/no-exec
保护,您可以滥用反向shell在文件系统中写入您的二进制文件并执行**它们。
但是,在这种类型的容器中,这些保护通常存在,但您可以使用先前的内存执行技术来绕过它们。
您可以在https://github.com/carlospolop/DistrolessRCE中找到如何利用一些RCE漏洞获取脚本语言反向shell并从内存中执行二进制文件的示例。
如果您对黑客职业感兴趣并想要黑入不可黑入的 - 我们正在招聘!(需要流利的波兰语书面和口语)。