快速识别虚拟主机、Docker和K8s集群环境

随笔1个月前发布 乱室英雄
30 0 0

一、基础

随着云原生应用不断普及,我们在针对linux操作系统getshell之后,我们还需要判断该shell是否处于虚拟环境中,并判断该虚拟环境的类型,通常情况下,shell的虚拟环境可能有如下三个类型:

虚拟主机

虚拟主机是指在一台物理服务器上运行的多个虚拟主机实例,每个虚拟主机实例都拥有自己的环境和资源,通常用于提供Web托管服务

注意:虚拟主机(Virtual Hosting)和虚拟机(Virtual Machine)是两个不同的概念,虚拟机是一个完整的虚拟化系统,包括操作系统、软件和硬件,可以在单个物理服务器上运行多个操作系统实例

Docker

Docker是一种虚拟化技术,利用容器化的方式将应用程序及其依赖项打包成独立、轻量级的环境,实现快速部署、高效运行和跨平台运行的功能

K8s

Kubernetes(通常简写为K8s)是一个开源的容器编排平台,通过自动化部署、扩展和管理容器化应用,实现高可用性、弹性和灵活性。它提供了集群管理、服务发现、负载均衡等功能,让用户可以更轻松地管理容器化应用的生命周期

二、思路

如果shell处于虚拟主机、Docker或K8s集群环境中,我们需要对环境进行识别,并采取针对性的措施,比如:

虚拟主机:通常考虑横向移动来扩大攻击效果

Docker:通常先进行容器逃逸,再进行内网横向移动

K8s:通常先尝试接管集群,以获取对容器和集群资源的完全控制

三、识别

首先判断当前shell是否采用了虚拟化技术:

systemd-detect-virt		#识别系统虚拟机(VM)、容器还是裸机上运行

在确认采用了虚拟化技术后,常有如下检测方法可以快速识别当前所处环境类型

查看主机名和进程

容器的主机名默认随机生成的字符串,PID1非系统进程,可初步判断当前为容器环境

hostname	#查看主机名

ps aux		#显示系统上所有用户的详细进程信息

通过利用cgroup信息的差异

通过查看cgroup信息,可以判断当前环是否是虚拟机、Docker容器或K8s集群:

cat /proc/1/cgroup	#用于查看进程ID为1的系统进程(通常是Init进程)所属的cgroup信息,即用于控制和管理进程资源使用的容器技术

也可以针对性的查找关键词,例如针对Docker字符串:

grep 'docker' /proc/1/cgroup	#查找是否存在‘Docker’字符串

检查根目录下.dockerenv文件

通过判断根目录下的.dockerenv文件是否存在,确认当前环是否为容器环境:

ls -alh/dockerenv	#列出/dockerenv目录下的所有文件和目录,并显示详细信息以及人类可读的文件大小

通过检查挂载信息

通过检查挂载信息,推测当前环境是虚拟机、Docker容器还是K8s集群:

mount lgrep '/type'	#从当前系统中列出所有已挂载的文件系统,并使用grep命令筛选出包含/type路径的挂载信息

查看硬盘信息

通过查看硬盘信息,推断当前环境是否为容器环境:

fdisk -l #列出系统上所有磁盘的分区信息

获取当前环境的文件系统和挂载点信息

获取当前环境的文件系统和挂载点信息,用来判断是否容器环境:

df -h	#显示文件系统的磁盘使用情况和挂载点信息

通过了解环境变量包含的信息

通过检查环境变量,了解特定环境的信息:

env 	#显示当前系统环境中的所有环境变量

四、反制

对于防守者而言,通过了解攻击者在云原生环境中可能采取的这些信息探测行为,可以建立有效的告警机制,以便及早发现潜在的攻击行为

__EOF__

快速识别虚拟主机、Docker和K8s集群环境
本文作者:Yuy0ung
本文链接:https://www.cnblogs.com/yuy0ung/articles/18220591.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!

© 版权声明

相关文章

暂无评论

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