技术分享|Docker取证分析的一些方法

技术分享|Docker取证分析的一些方法
针对Docker容器的取证分析主要涉及几个方面:容器的配置、运行状态、文件系统、网络通信、进程等方面。下面本文将以上述几个方面详细介绍如何对Docker容器进行取证分析。
技术分享|Docker取证分析的一些方法

1. 基本信息收集

1.1 获取容器列表

  • 运行中的容器:docker ps

技术分享|Docker取证分析的一些方法

  • 所有容器(包括停止的):docker ps -a

技术分享|Docker取证分析的一些方法

  • 根据条件筛选:docker ps –filter <筛选条件>

技术分享|Docker取证分析的一些方法


1.2查看容器详细信息

  • 容器详情docker inspect <container_id>

技术分享|Docker取证分析的一些方法

  • 容器日志docker logs <container_id>

技术分享|Docker取证分析的一些方法

  • 容器实时状态docker stats <container_id>

  • 实时显示容器资源使用情况

技术分享|Docker取证分析的一些方法


1.3 镜像信息

  • 列出所有镜像docker images

技术分享|Docker取证分析的一些方法

  • 镜像详细信息docker inspect <image_id>


1.4 检查docker环境

  • 显示系统范围的信息docker info <image_id>

  • 显示的信息包括内核版本、容器和映像的数量等

  • 显示磁盘使用情况docker system df  -v显示详细使用情况)

技术分享|Docker取证分析的一些方法


1.5 日志收集

  • 容器日志:使用docker logs <container_id>获取特定容器的日志。比如,Ubuntu下可使用如下bash脚本获取全部容器日志:

#!/bin/bash

# 获取当前日期时间

export_date_time=$(date +“%Y%m%d_%H%M%S”)

# 获取所有运行中的 Docker 容器的 ID 和名称

containers=$(docker ps –format “{{.ID}} {{.Names}}”)

# 创建一个目录来保存日志文件

mkdir -p docker_logs

# 遍历每个容器

while read -r container_id container_name; do

  # 导出容器日志,并保存为文件

  log_filename=“${container_name}_${export_date_time}.log”

  log_path=“docker_logs/${log_filename}”

  docker logs $container_id > “$log_path”

  echo “Exported logs for container ${container_name} to $log_path”

done <<< “$containers”

echo “All logs have been exported.”

  • 守护进程日志:通常位于/var/log/docker.log。(docker desktop for windows默认:C:Users用户名AppDataLocalDockerlog

  • 系统日志:/var/log/syslog/var/log/messages等。

技术分享|Docker取证分析的一些方法

2. 文件系统分析

2.1 备份容器文件系统

  • 导出容器文件系统docker export <container_id> > container_bak.tar

随后可对导出的container_bak.tar进行分析,可使用x-ways、法证通等取证工具解析。


2.2 分析文件系统

  • 进入容器docker exec -it <container_id> /bin/bash sh

技术分享|Docker取证分析的一些方法

技术分享|Docker取证分析的一些方法

  • 查看文件和目录ls -la, cat <file_path>, grep <pattern> <file_path>


2.3 查看文件系统更改

  • Docker diff:显示docker容器文件系统的变更。A: 表示新增的文件或目录。D: 表示删除的文件或目录。C: 表示修改过的文件或目录。

技术分享|Docker取证分析的一些方法


2.4 Docker 文件结构解析

Docker 使用一种称为联合文件系统(Union File System, UnionFS)的技术来高效地管理容器的文件系统。在当前版本中,Docker 大多使用 overlay2 存储驱动。下面将详细介绍 Docker 容器文件结构及其各个组成部分,并以 overlay2 存储驱动为例进行说明。


2.4.1 主目录结构

Docker 的主目录通常位于 /var/lib/docker。在这个目录下,你可以找到与 Docker 相关的所有数据文件。

1/var/lib/docker

这是 Docker 守护进程的主要存储目录,其中包含了 Docker 镜像、容器和其他组件的数据。


2.4.2 镜像存储

1/var/lib/docker/containers

这个目录包含了所有容器的数据。每个容器都有一个对应的子目录,其中包括容器的日志文件、配置文件以及其他与容器相关的数据。

  • 日志文件:通常位于 <container_id>/json.log 或其他日志驱动指定的位置。

  • 配置文件:每个容器都有一个配置文件,如 <container_id>/config.v2.json,其中包含了容器的配置信息。

2/var/lib/docker/image

这是 Docker 镜像的存储目录。镜像以层的形式存储,每一层代表了镜像的一部分。

  • 镜像元数据:镜像的元数据存储在这个目录中,包括镜像的标签、创建时间等信息。

3/var/lib/docker/overlay2

假设容器 ID 9086213335250608234049945854659426557966195238968291234567890,并且它基于一个包含三个镜像层的 Docker 镜像构建而成。

/var/lib/docker/

└── overlay2/

├── 9086213335250608234049945854659426557966195238968291234567890  

# 容器目录

├── 9086213335250608234049945854659426557966195238968291234567891  

# 镜像层目录

├── 9086213335250608234049945854659426557966195238968291234567892  

# 镜像层目录

└── 9086213335250608234049945854659426557966195238968291234567893  

# 镜像层目录

  • 容器层:每个容器都有一个对应的目录,这些目录包含了容器的文件系统信息。例如:

/var/lib/docker/overlay2/9086213335250608234049945854659426557966195238968291234567890/

├── id      # 容器的 ID 文件

├── init    # 初始化文件

├── links   # 链接信息

├── merged  # 文件系统视图

├── upper   # 可写层

└── work    # 工作目录

² id:容器的 ID 文件。

#cat id

#9086213335250608234049945854659426557966195238968291234567890

² init:初始化文件,包含有关容器初始化的信息。

² links:包含容器与其他容器的链接信息。

² merged:这是容器的文件系统视图,包含了所有只读层和可写层的合并结果。

#ls merged

#bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var

² upper:这是容器的可写层,包含了容器运行时所做的所有更改。

#ls upper

#etc  home  root  tmp  var

² work:这是一个工作目录,用于存储临时文件,如正在进行中的写操作。

ls work

bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var

  • 镜像层:每个镜像层都有一个对应的目录,这些目录包含该层的文件系统变更。例如:

/var/lib/docker/overlay2/9086213335250608234049945854659426557966195238968291234567891/

├── diff  # 镜像层的文件系统变更

└── link  # 引用计数

²diff:包含该镜像层的文件系统变更。

²link:指向该层的引用计数。


2.4.3 容器存储

1/var/lib/docker/containers/<container_id>

每个容器都有一个唯一的 ID,容器的所有数据都被存储在与之对应的子目录中。

  • 文件系统:容器的文件系统通常是通过 overlay2 存储的,位于 /var/lib/docker/overlay2/<container_id>/merged

  • 日志文件:容器的日志文件通常位于 <container_id>/json.log 或其他日志驱动(docker run daemon.json配置)指定的位置。

  • 配置文件:容器的配置文件,如 <container_id>/config.v2.json。这个文件包含了容器的配置信息,如容器的名称、镜像ID、命令行参数、环境变量等。


2.4.4 网络配置

1/var/lib/docker/networks

这个目录包含了 Docker 网络的信息,每个网络都有一个对应的子目录,其中包含了网络的配置信息。

  • 网络配置文件:每个网络都有一个配置文件,如 <network_id>/config.json

  • 网络插件信息:如果有使用网络插件,相关信息也会存储在这里。


2.4.5 其他文件和目录

1/var/lib/docker/swarm

如果 Docker Swarm 模式被启用,这里会存储集群相关的数据,比如证书。

2/var/lib/docker/bundles

这个目录用于存储 Docker Swarm 模式下的服务信息。

3/var/lib/docker/buildkit

如果启用了 BuildKit 构建功能,那么这个目录将用于存储 BuildKit 的数据。

4/var/lib/docker/tmp

临时文件存储目录,用于存放 Docker 运行过程中产生的临时文件。

技术分享|Docker取证分析的一些方法

3. 网络分析

3.1 网络连接信息

  • 查看容器网络连接

docker exec -it CONTAINER_ID netstat -tuln

docker exec -it CONTAINER_ID ss -tuln

  • 查看网络接口信息

docker inspect CONTAINER_ID | jq ‘.[0].NetworkSettings’

如果没有jq 则在整个inspect输出中查找网络接口信息

docker inspect CONTAINER_ID

  • 使用 docker stats 查看容器的网络 I/O 统计

docker stats CONTAINER_ID

  • 使用 ipconfig  ifconfig 查看网络接口配置

docker exec -it CONTAINER_ID ifconfig

  • 使用 iptables 查看容器的防火墙规则

  • 捕获网络流量:使用tcpdumpwireshark等工具。

docker exec -it CONTAINER_ID tcpdump -i any


3.2 DNS查询记录

  • DNS查询记录docker exec -it <container_id> cat /var/log/dmesg (对于某些容器)

技术分享|Docker取证分析的一些方法

4. 进程分析

4.1 查看容器内进程

  • 列出容器内的进程docker exec -it <container_id> ps aux


4.2 进程详细信息

  • 查看进程详细信息docker exec -it <container_id> ps -ef


通过对 Docker 容器的基本信息收集、日志收集、文件系统分析以及网络配置分析等方面的详细介绍,我们希望能够帮助读者更好地进行docker容器取证分析工作。我们将继续关注容器技术的发展动态,如果您在进行docker容器取证时有任何疑问或需要进一步的帮助,欢迎随时联系我们。




技术分享|Docker取证分析的一些方法

产品咨询

技术工程师

贺   佳:13908073212

王高阳:18513400125

微信助手

 技术分享|Docker取证分析的一些方法


技术分享|Docker取证分析的一些方法

技术分享|Telegram取证分享

技术分享|微信小程序 Burp+proxifier 抓包详细教程

技术分享|【译】安卓14取证技术初探

技术分享|涉网犯罪信息侦察思路分享

关于我们

北京天宇宁达科技有限公司创建于 2016 年,前身为 2009 年的北京天宇宁科技有限公司。历经十余年的发展与积累,天宇宁达已成为国内电子数据取证行业卓越领先的产品与解决方案供应商,同时也是国内知名的电子数据专业取证服务与培训机构。

技术分享|Docker取证分析的一些方法

原文始发于微信公众号(CFlab):技术分享|Docker取证分析的一些方法

版权声明:admin 发表于 2024年8月29日 上午9:01。
转载请注明:技术分享|Docker取证分析的一些方法 | CTF导航

相关文章