vlambda博客
学习文章列表

【云攻防系列】Linux下的免杀测试与研究




序言


近年来,随着云计算与基于 Linux 的国产操作系统的发展,Linux 平台下的免杀在攻防对抗中愈发重要。


在一些测试中发现,如今在 Linux 服务器上反弹 shell 的命令渐渐不能满足测试的要求。因为如今各大云平台都已经针对反弹 shell 做出了很多防御方法,其中包括 shell 审计、流量识别等等。而且如今网上各漏洞的 EXP,包括 POC 都已经被各大云平台标识,想继续利用只能进行免杀处理。


本文将从在 Linux 下的现状国产操作系统上的免杀测试容器逃逸中的免杀应用三个模块介绍 Linux 下的免杀测试与研究。


图1 container security


 






Linux下免杀现状









以往,免杀只是针对 Windows 平台的一些杀软,但是随着云计算,以及 Linux 国产操作系统的发展,Linux 平台的免杀也具有了很大的应用场景。

例如:

  • 针对某基于 Linux 的国产操作系统上的数字安全软件以及别的杀毒软件。

  • 在进行容器逃逸的时候,很多逃逸方法需要宿主机反弹 shell,但是平台的 shell 审计能监控到常见的反弹 shell 方法,想要拿到宿主机 shell 只能调用免杀的远控木马来获取。

  • 当前网络上面很多漏洞的 EXP、POC 也已经被各平台标记识别,一旦下载就会告警,在使用过程中需要进行免杀处理。

【云攻防系列】Linux下的免杀测试与研究

图2 bash 反弹 shell 时产生的警告


【云攻防系列】Linux下的免杀测试与研究

图3 CVE-2016-5195 脏牛的 POC 文件产生的告警


如上文所说,各平台的防御工具虽然在严格监控,但并非无法绕过。


根据实际的测试,如某工具上的 encoder 模块,几十种编码方式,各平台也没有全部覆盖。虽然几大平台对于病毒扫描的强度不一,有强有弱,但是也无法全部扫描出经过编码混淆的远控木马。像最常见也是最有效的编码方式 x86/shikata_ga_nai,很多平台都可以识别。但是从目前的测试结果来说,各大平台反而对于其他效果弱一些的编码方式无法扫描出来,比如,x86/jmp_call_additive 还有其他编码,都可以不同程度绕过这几个平台的扫描。


【云攻防系列】Linux下的免杀测试与研究

图4 某云平台上的免杀远控木马测试


【云攻防系列】Linux下的免杀测试与研究

图5  免杀技术概览

随着各云平台不断更新,编码混淆这种免杀方式,最终一定会被精准识别。能否在 Linux 上开发出更高效的免杀方法才是至关重要的,例如 LSB 隐写,内存加密,shellcode 拆分等等。


但是,以上都是基于传统的免杀方法。在如今 AI 技术愈加成熟的情况下,利用 AI 产生免杀样本已经成为了可能的途径。目前 Linux 平台 elf 免杀样本研究甚少,从目前的测试结果看,对抗的防御方法也并不出色,那么实现利用 AI 产生 elf 免杀样本,将在未来的对抗中占据优势。









某国产操作系统上的免杀测试 









随着国产操作系统的发展,针对此操作系统的攻击也将愈演愈烈。免杀仍然是其中的重头戏。

在实际的测试中,国产操作系统上的适配杀软效果很不理想,远远没有他们在 Windows 平台上一样的查杀能力。虽然 Linux 系统本身有着各种安全措施,但是仍然不能忽略杀毒软件对系统带来的防护能力。目前来看,国产杀软在国产操作系统上的适配仍任重而道远。


【云攻防系列】Linux下的免杀测试与研究

图6 为 某工具编码后的木马成功上线








容器逃逸中的免杀应用







目前,容器逃逸主要分为以下四个方向:


【云攻防系列】Linux下的免杀测试与研究

图7 容器逃逸方向汇总


本文主要介绍在利用 CVE-2020-27352 进行逃逸时的免杀应用。


1 漏洞原理


Snap 某版本安装 docker 后,没有设置自身管理 docker cgroup。导致 systemdreload之后,由于 systemd 会重新梳理 cgroup 树, systemd 接管了 docker cgroup,造成 docker 容器进程获取到了额外的任意读写 devices 文件权限。而且以上过程都是在系统正常进行中完成的,不需要人为干预。下文主要介绍在当前权限下进行逃逸的方法。


不论传统渗透还是容器渗透,有一个思路是不变的:利用内核的高权限进程执行 payload,拿到高权限的 shell。利用内核的高权限进程执行 payload 拿到高权限的 shell。此时拿到 devices 任意读写权限之后,需要找出一个可执行 payload 的高权限进程。


这里可以使用内核转储文件机制。当有进程崩溃时,内核会去使用这个机制,这个机制写在  /proc/sys/kernel/core_pattern 中。而进程崩溃可以轻易在容器内实现。


【云攻防系列】Linux下的免杀测试与研究

图8 逃逸流程图


2 漏洞利用步骤


(1)使用 lsblk 查看宿主机设备。


【云攻防系列】Linux下的免杀测试与研究


根据宿主机设备信息,创建设备文件。


【云攻防系列】Linux下的免杀测试与研究


(2)将宿主机 apport 文件复制到容器内修改。


进程崩溃时,内核会调用转储文件机制。

这个机制写在在 /proc/sys/kernel/core_pattern 中:


可见默认执行 /usr/sahre/apport/apport 文件

注:如果 core_pattern 文件的第一个字符是管道“|”  ,内核会将后面部分作为命令来执行。

 

使用 debugfs,它支持直接从设备中写入读取文件:


【云攻防系列】Linux下的免杀测试与研究


进入 /usr/share/apport,使用 stat 读取 apport 文件信息:


【云攻防系列】Linux下的免杀测试与研究


使用 d 命令从设备中将文件保存到容器内 /tmp 目录下

 

【云攻防系列】Linux下的免杀测试与研究


注:skip 的大小,由上文 stat 读取的数据中的 EXTENTS 的起始位置 x8


3)添加攻击载荷,使其执行免杀远控木马。


打开保存到容器的 apport 文件,添加攻击载荷。文件是一个 python 脚本。向Python 文件中写入反弹 shell 语句的方法很多,比如使用 os.system()执行 nc ,或者使用其他等等反弹都可以。


但是,这些常规的反弹 shell 都已经被重点监测,一旦直接调用,就会产生告警。而且通过其他的反弹 shell 方法来避开监测是非常低效的,只要平台在监测的匹配规则加入这种反弹 shell 语句,方法就立即失效。免杀的远控木马就有了应用的必要性。


【云攻防系列】Linux下的免杀测试与研究


上图 payload各步骤的内容含义如下:

  • 将远控木马主动下载到本地

  • 赋予执行权限

  • 执行


木马文件是由某工具生成的远控木马,针对不同的平台使用不同的编码方式,各平台对于编码混淆的识别情况并不统一。

将上述过程写入到 apport 文件内,木马文件最终也会由系统执行,反弹回攻击者的主机 root 权限的 shell。


(4)将修改后的 apport 覆盖到宿主机原位置。


加入字符之后,删除文件里相应的字符数,以便文件大小不变。使用dd再次将文件放入到宿主机相应位置。

dd of=/dev/vda1 seek=5174680 count=64 if=/tmp/apport

攻击者在其他主机上打开某工具监听,等待宿主机反的木马上线。


(5)在容器内制造进程崩溃。


使用 C 语言程序造成进程崩溃。

int main(void){char *aaa = 0;*aaa = 0;
return 1;}

攻击者可以在自己的服务器上编译完成,再放入到容器内,以防容器内无法编译。


【云攻防系列】Linux下的免杀测试与研究



至此,逃逸成功,拿到宿主机的 root 权限 shell。







END







随着国产操作系统以及云计算平台的发展,Linux 下的免杀对抗也将愈演愈烈。虽然目前各平台对于 elf 文件的查杀能力不太理想,但是未来也必将快速发展,仅靠目前的 Linux 下各种免杀方法也将逐渐跟不上测试要求。


多年之前,基于人工智能的病毒识别已经初现峥嵘。人工智能的介入,使得病毒与反病毒的对抗进入新的回合。但是通过 AI 生成 elf 恶意样本这块领域仍然是一片空白,未知攻焉知防,通过 AI 去生成免杀,不仅可以赋能蓝军,又能促进病毒与反病毒之间的对抗发展。因此,发展 AI 生成免杀的技术前景可观。我们创新研究院云安全研究团队也将对此持续探索研究。




深信服千里目安全实验室

深信服科技旗下安全实验室,致力于网络安全攻防技术的研究和积累,深度洞察未知网络安全威胁,解读前沿安全技术。