2375, 2376 Pentesting Docker

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

支持HackTricks的其他方式:

WhiteIntel是一个由暗网支持的搜索引擎,提供免费功能,用于检查公司或其客户是否受到窃取恶意软件侵害

WhiteIntel的主要目标是打击由信息窃取恶意软件导致的账户劫持和勒索软件攻击。

您可以访问他们的网站并免费尝试他们的引擎:


Docker基础知识

什么是Docker

Docker是容器化行业中的前沿平台,引领持续创新。它便于创建和分发应用程序,涵盖传统到未来的范围,并确保它们在不同环境中的安全部署

基本Docker架构

  • containerd:这是容器的核心运行时,负责全面管理容器的生命周期。这包括处理镜像传输和存储,以及监视和网络容器的执行。对containerd的更详细见解进一步探讨

  • container-shim在处理无头容器时发挥关键作用,它在容器初始化后无缝接管runc的工作。

  • runc:以其轻量级和通用容器运行时功能而闻名,runc符合OCI标准。它由containerd用于根据OCI指南启动和管理容器,从最初的libcontainer发展而来。

  • grpc对于在containerd和docker-engine之间促进通信至关重要,确保高效互动

  • OCI在维护运行时和镜像的OCI规范方面至关重要,最新的Docker版本符合OCI镜像和运行时标准。

基本命令

Containerd

Containerd是专门为像Docker和Kubernetes等容器平台开发的。它旨在通过抽象操作系统特定功能和系统调用,简化在各种操作系统(包括Linux、Windows、Solaris等)上执行容器的过程。Containerd的目标是仅包含其用户所需的基本功能,力求省略不必要的组件。然而,完全实现这一目标被认为是具有挑战性的。

一个关键的设计决策是Containerd不处理网络。网络被认为是分布式系统中的一个关键元素,具有诸如软件定义网络(SDN)和服务发现等复杂性,这些复杂性在不同平台之间差异很大。因此,Containerd将网络方面的管理留给了它支持的平台。

虽然Docker利用Containerd来运行容器,但重要的是要注意,Containerd仅支持Docker功能的子集。具体来说,Containerd缺乏Docker中存在的网络管理功能,并且不直接支持创建Docker swarms。这种区别突显了Containerd作为容器运行时环境的专注角色,将更专业的功能委托给其集成的平台。

Podman

Podman 是一个遵循开放容器倡议(OCI)标准的开源容器引擎,由 Red Hat 开发和维护。它与 Docker 有几个明显的特点不同,尤其是其无守护程序架构和对无根权限容器的支持,使用户能够在无需 root 权限的情况下运行容器。

Podman 的设计旨在与 Docker 的 API 兼容,允许使用 Docker CLI 命令。这种兼容性延伸到其生态系统,其中包括诸如Buildah(用于构建容器镜像)和Skopeo(用于推送、拉取和检查镜像等操作)等工具。有关这些工具的更多详细信息,请参阅它们的GitHub 页面

主要区别

  • 架构:与 Docker 的客户端-服务器模型及后台守护程序不同,Podman 无需守护程序运行。这种设计意味着容器以启动它们的用户的权限运行,通过消除对 root 访问权限的需求来增强安全性。

  • Systemd 集成:Podman 与 systemd 集成以管理容器,允许通过 systemd 单元进行容器管理。这与 Docker 主要用于管理 Docker 守护程序进程的 systemd 的用法形成对比。

  • 无根权限容器:Podman 的一个关键特点是能够以启动用户的权限运行容器。这种方法通过确保攻击者仅获得受损用户的权限而非 root 访问权限,最小化了与容器入侵相关的风险。

Podman 的方法为 Docker 提供了一个安全灵活的替代方案,强调用户权限管理和与现有 Docker 工作流的兼容性。

请注意,由于 Podman 旨在支持与 Docker 相同的 API,您可以像在 Docker 中一样使用 Podman,例如:

基本信息

当启用时,默认情况下远程 API 在 2375 端口上运行。默认情况下,该服务不需要身份验证,允许攻击者启动一个特权的 Docker 容器。通过使用远程 API,可以将主机/(根目录)附加到容器,并读取/写入主机环墶的文件。

默认端口: 2375

枚举

手动

请注意,要枚举docker API,您可以使用docker命令或curl,就像以下示例中所示:

如果您可以使用docker命令联系远程docker API,您可以执行任何在之前评论过的docker命令来与服务进行交互。

您可以export DOCKER_HOST="tcp://localhost:2375"避免在docker命令中使用-H参数

快速提权

Curl

有时你会看到 2376 开放在 TLS 端点上。我无法用 docker 客户端连接到它,但可以使用 curl 连接。

如果您想获取更多信息,请查看我复制命令的地方:https://securityboulevard.com/2019/02/abusing-docker-api-socket/

自动化

Compromising

在以下页面,您可以找到从 Docker 容器中逃脱的方法:

Docker Security

滥用这一点,可以从容器中逃脱,您可以在远程机器上运行一个弱容器,从中逃脱,并威胁到机器:

提权

如果您在使用 Docker 的主机内部,您可以阅读此信息尝试提升权限

在运行中的 Docker 容器中发现秘密

检查 env(环境变量部分)以查找秘密信息,可能会发现:

  • 密码。

  • IP 地址。

  • 端口。

  • 路径。

  • 其他… .

如果要提取文件:

保护您的Docker

保护Docker安装和使用

  • 您可以使用工具https://github.com/docker/docker-bench-security来检查您当前的Docker安装。

  • ./docker-bench-security.sh

  • 您可以使用工具https://github.com/kost/dockscan来检查您当前的Docker安装。

  • dockscan -v unix:///var/run/docker.sock

  • 您可以使用工具https://github.com/genuinetools/amicontained来查看以不同安全选项运行时容器将具有的特权。这对于了解使用某些安全选项运行容器的影响很有用:

  • docker run --rm -it r.j3ss.co/amicontained

  • docker run --rm -it --pid host r.j3ss.co/amicontained

  • docker run --rm -it --security-opt "apparmor=unconfined" r.j3ss.co/amicontained

保护Docker镜像

  • 您可以使用https://github.com/quay/clair的Docker镜像来扫描您的其他Docker镜像并查找漏洞。

  • docker run --rm -v /root/clair_config/:/config -p 6060-6061:6060-6061 -d clair -config="/config/config.yaml"

  • clair-scanner -c http://172.17.0.3:6060 --ip 172.17.0.1 ubuntu-image

保护Dockerfiles

记录可疑活动

  • 您可以使用工具https://github.com/falcosecurity/falco来检测运行容器中的可疑行为

  • 请注意下面的代码块中Falco如何编译内核模块并插入。之后,它加载规则并开始记录可疑活动。在这种情况下,它检测到启动了2个特权容器,其中一个带有敏感挂载点,几秒钟后检测到一个容器内打开了一个shell。

监控 Docker

您可以使用 auditd 来监控 Docker。

参考

WhiteIntel 是一个由 暗网 提供动力的搜索引擎,提供免费功能,用于检查公司或其客户是否已受到 窃取恶意软件损害

WhiteIntel 的主要目标是打击由信息窃取恶意软件导致的账户劫持和勒索软件攻击。

您可以访问他们的网站并免费尝试他们的引擎:

从零开始学习 AWS 黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)!

支持 HackTricks 的其他方式:

最后更新于