在滲透測試過程中,我們的起始攻擊點可能在一臺虛擬機里或是一個Docker環境里,甚至可能是在K8s集群環境的一個pod里,我們應該如何快速判斷當前是否在容器環境中運行呢?
當拿到shell權限,看到數字和字母隨機生成的主機名大概率猜到在容器里了,查看進程,進程數很少,PID為1的進程為業務進程,這也是容器環境的典型特征。當然,以上這兩種都是比較主觀的判斷。接下來,我們再來盤點下比較常用的幾種檢測方式。
方式一:查詢cgroup信息
最簡單精準的方式就是查詢系統進程的cgroup信息,通過響應的內容可以識別當前進程所處的運行環境,就可以知道是在虛擬機、docker還是kubepods里。
cat /proc/1/cgroup
docker 環境下:

K8s環境下:

虛擬機環境下:

方式二:檢查/.dockerenv文件
通過判斷根目錄下的 .dockerenv文件是否存在,可以簡單的識別docker環境。
K8s&docker環境下:ls -alh /.dockerenv 可以找到文件。

虛擬機環境下:是沒有這個.dockerenv文件的。

方式三:檢查mount信息
利用mount查看掛載磁盤是否存在docker相關信息。
K8s&docker環境下:

虛擬機環境下:

方式四:查看硬盤信息
fdisk -l 容器輸出為空,非容器有內容輸出。
K8s&docker環境下:

虛擬機環境下:

方式五:查看文件系統以及掛載點
df -h 檢查文件系統掛載的目錄,也能夠簡單判斷是否為docker環境。
K8s&docker環境下:

虛擬機環境:

方式六:環境變量
docker容器和虛擬機的環境變量也有點區別,但不好判斷,但pod里面的環境變量其實是很明顯的。
K8s環境下:

一顆小胡椒
一顆小胡椒
一顆小胡椒
FreeBuf
FreeBuf
虹科網絡安全
GoUpSec
一顆小胡椒
系統安全運維
Bypass
Bypass