前言
随着容器技术的广泛应用,容器环境下的电子数据取证技术已成为现代网络安全和司法鉴定中的重要工具。本文通过实际案例,为大家介绍docker环境下的取证流程,包括从容器列表获取、文件系统访问到端口映射分析等多个关键步骤。掌握该技术能够帮助取证人员重构架构复杂的网站。
01
容器技术简介
01
docker核心三要素:
1.镜像(Image)
定义:镜像是只读的模板,包含运行容器所需的文件系统、依赖和配置(如操作系统、应用程序、环境变量等)。镜像采用分层存储(Layer)结构,每一层代表一组文件变更,这种设计使得镜像可以复用。
特点:
-
不可变性:镜像一旦构建完成便不可修改,任何变更都会生成新镜像。
-
分层机制:通过联合文件系统(如 Overlay2)合并多层,提升存储效率,降低镜像占用的存储空间。
-
轻量化:相比虚拟机镜像,docker镜像在构建时可设置为仅包含必要依赖,体积更小。
2.容器(Container)
定义:容器是镜像的运行实例,具有独立的进程空间、网络和文件系统。容器基于镜像创建,但包含一个可写的容器层(Container Layer),所有运行时修改都保存在此层。
特点:
-
隔离性:通过Linux命名空间(Namespaces)和控制组(cgroups)实现资源隔离。
-
临时性:容器可以随时启动、停止、删除,数据默认不持久化(需挂载卷)。
-
快速启停:秒级启动,资源占用远低于虚拟机。
3.仓库(Registry)
定义:仓库是集中存储和分发镜像的服务,分为公共仓库(如 Docker Hub)和私有仓库(如 Harbor、AWS ECR)。仓库通过标签(Tag)管理镜像版本。
特点:
-
版本控制:支持镜像的推送(Push)、拉取(Pull)和版本回退。
-
权限管理:私有仓库可限制访问权限,保障安全性。
02
docker容器端口映射原理
docker容器默认运行在独立的网络命名空间中,具有自己的IP和端口。docker容器是通过docker默认的网桥docker0对docker容器分配IP,确保容器间可以相互通信,但是外部网络无法访问docker容器内的IP,所以需要通过映射IP和端口到宿主机,才能实现外部设备与docker容器间的通信。
02
docker常用命令
01
容器生命周期管理
02
容器信息查看
03
容器操作与维护
04
网络管理
05
数据卷管理
06
镜像管理
07
实用组合命令
#启动所有容器包括已停止的
docker start $(docker ps -aq)
# 清理所有已停止的容器
docker container prune
# 批量停止并删除所有容器
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)
# 带资源限制启动容器
docker run -it --cpus=2 --memory=1g <镜像>
# 查看容器资源使用情况
docker stats --format "table {{.Name}}t{{.CPUPerc}}t{{.MemUsage}}"
03
容器取证
01
案例背景
某电商平台“XX商城”因涉嫌组织、领导传销活动被委托方立案调查。委托方在调查平台服务器时,发现其技术架构基于docker容器化部署。为了提取关键证据,需要还原平台运营模式对其后台服务进行重构,委托方委托我单位对服务器镜像中涉案平台的部分功能进行重构,并提取其中关键数据。
02
镜像仿真
镜像文件:m-xxx1_system.raw和m-xxx2_system.raw
使用盘古石计算机仿真系统加载检材“m-xxx1_system.raw”和“m-xxx2_system.raw”。
检材“m-xxx1_system.raw”的用户名为“trade”,IP为10.0.0.111。
检材“m-xxx2_system.raw”的用户名为“web”,IP为10.0.0.110。
03
业务逻辑梳理
04
容器分析
使用MobaXterm连接虚拟机“10.0.0.111”。使用“docker ps”命令查看已运行的docker容器列表。
以容器id“251f2db62274”(镜像名rabbitmq:3.7.4-management)为例分析。
使用命令“docker inspect rabbitmq | grep -A 10 Mounts”查看容器挂载目录。
由上图可知,挂载类型为bind,该挂载类型的特点是 bind mount会将宿主机目录直接映射到容器内,所有文件变更会永久保存在宿主机上,即使容器被删除也不会丢失数据。宿主机和容器内部的挂载目录均为“/etc/localtime”,即将容器将宿主机中的路径映射到容器内部,该容器做了目录持久化部署。
该容器是基于rabbitmq镜像实例化创建的,rabbitmq是一个开源的消息代理(Message Broker),实现了AMQP(高级消息队列协议),用于处理异步消息。management是一个附加的标签,表示这个RabbitMQ镜像包含了RabbitMQ Management Plugin(管理插件)。该插件为RabbitMQ提供了一个Web界面,允许通过浏览器管理和监控RabbitMQ服务。
容器端口映射关系入下表所示:
容器端口可映射至宿主机任意网络的上述端口中。
使用命令“docker exec -it rabbitmq /bin/bash ”进入容器内部。使用“cat /etc/hosts”命令查看hosts文件中的映射关系。部分内容如下图所示:
“hosts”文件中显示容器“rabbitmq”映射到的IP地址为“10.0.0.111”,容器“rabbitmq3”映射到的IP地址为“10.0.0.110”,如下图所示:
05
网站重构
使用MobaXterm连接虚拟机“10.0.0.110”。使用命令“ps auxwwf |grep nginx”显示有nginx进程在运行,如下图所示:
在“/etc/nginx/conf.d/”目录下存在2个nginx配置文件,如下图所示:
其中,“web_default.conf”文件中存在的端口监听有“80”、“81”、“82”和“83”等,部分信息如下图所示:
使用浏览器访问地址“10.0.0.110:80”,显示页面标题为“机构管理后台”,页面内容为“XXX”及登录界面等信息,如下图所示:
使用浏览器访问地址“10.0.0.110:82”,显示页面标题为“系统管理后台”,页面内容为“系统管理后台”及登录界面等信息,如下图所示:
在浏览器中使用任意账号密码登录网站时,在浏览器的开发者模式中存在报错信息,并返回“Network error”。
发现10.10.0.110:8004请求报错,在IP为“10.0.0.111”的nginx配置文件中发现将8004端口映射到本地18004端口的配置信息。
因此,我们需要配置“10.0.0.110:8004”的nginx配置。新建文件“8004.conf”,将10.0.0.110:8804的请求映射到10.0.0.111:8004中。
此时,网站实际访问的服务器地址为“10.0.0.111:18004”中,在IP“10.0.0.111”的终端中输入“sudo netstat –tulnp |grep 18004”查看映射端口为18004的容器。发现容器名“ml_sysmgr_api”的端口映射。
在“/home/ml_sysmgr_api”目录下存在配置文件。部分内容如下图所示:
发现数据库配置信息,将对应的数据库配置信息修改为镜像文件中的数据库配置信息即可正常进入网站。
进入网站后,根据委托方提供的需求对网站中的会员信息、层级关系、收入、支出明细进行系统化分析。通过分析的数据,帮助委托方认定了网站的不合法性以及嫌疑人的犯罪事实。
总结
在未来的网络安全和司法鉴定中,容器取证技术将继续发挥重要作用。随着容器技术的不断发展和进步,取证技术也需要不断更新和完善,以应对日益复杂的网络环境。我们相信,通过不断的技术创新和实践积累,容器取证技术将为维护网络安全和司法公正提供更加有力的支持。
奇安信集团旗下有北京、上海、西安三家司法鉴定所:北京网神洞鉴科技有限公司司法鉴定所、盘石软件(上海)有限公司计算机司法鉴定所与陕西西安洞鉴云侦声像资料司法鉴定所。其中,上海所是上海第一家通过 CNAS 认证认可的民营计算机类司法鉴定机构。三所均通过了CMA资质认定,是目前国内少数能够通过自主研发软件进行取证与分析的电子数据司法鉴定机构,具有独立的实验室场所,其中包括:案件受理区、数据恢复区、手机取证区、计算机取证区、屏蔽室、无尘工作间和物证室,并配备多种国内外先进的技术检验及辅助设备。经过多年的时间积累和发展,现拥有一批胜任鉴定工作的专业技术人员,以专业的技能和丰富的经验,来开展声像资料和电子数据司法鉴定工作。开展的鉴定服务范围包括:声像资料鉴定、电子数据司法鉴定、计算机证据固定和获取、手机终端取证与分析、数据恢复、密码破解以及涉及电子设备的民事调查等。
鉴定热线&地址:
010-56509288(北京)
北京市西城区西直门外南路26号院1号-奇安信安全中心B1
021-52658848(上海)
上海市闵行区合川路2555号科技绿洲三期五-3号楼4层
029-86196688(西安)
陕西省西安市经济技术开发区凤城二路1幢经发大厦B座10607室
原文始发于微信公众号(网络安全与取证研究):docker容器也藏不住传销平台的秘密!一文读懂容器取证全流程
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论