Docker容器日志恢复技术研究

2021-03-07 03:52郑袁平贺嘉胡举尹泽华武衢
网络安全技术与应用 2021年12期
关键词:磁盘攻击者日志

◆郑袁平 贺嘉 胡举 尹泽华 武衢

Docker容器日志恢复技术研究

◆郑袁平 贺嘉 胡举 尹泽华 武衢

(中国移动通信集团湖南有限公司 湖南 410000)

随着容器技术的兴起,Docker 容器作为事实上的容器标准也得到了越来越多的关注。容器给用户带来便利的同时也带来了安全上的隐患,例如容器中被植入恶意代码或利用容器攻击主机操作系统。目前涉及容器的研究大多有关如何利用、拓展容器以及容器的漏洞分析,针对 Docker 容器的取证研究比较少,为了弥补这方面的缺失,本文以 Docker 日志为突破口,在详细介绍了 local、json-file、syslog 和 journald 日志记录驱动的对应的日志格式同时,也根据已有的文件恢复方法提出了 Docker 容器日志恢复建议。

Docker;日志;文件恢复;取证

1 介绍

随着近年来互联网的高速发展,云计算得到越来越广泛的应用;而 Docker 容器技术的出现则掀起了云计算的又一轮热潮。 Docker 是一个用于开发、部署和运行应用程序的开放平台,能够将应用程序与基础架构分开,从而实现快速交付软件。容器(Container)作为Docker 中分发和测试应用程序的单元,为 Docker 提供了在松散隔离的环境中打包和运行应用程序的支持。

由于目前尚未出现成熟的 Docker 取证技术[1-3],而日志中通常包含有大量的敏感信息可供取证但又极易被损坏,因此本文尝试以 Dokcer 容器日志为突破点,对现有的日志恢复技术进行归纳总结。

2 Docker现有安全隐患

Combe等人认为 Docker 的安全主要依赖于3个因素:由 Docker 守护进程管理的用户空间级的进程隔离、操作系统内核对于这种隔离的强制执行和网络操作的安全性。

根据以上三个因素,攻击者可分为两类:直接和间接。直接攻击者会采用嗅探、阻塞、注入或修改网络和系统通信等手段,直接针对运行中的机器,并破坏其中的系统组件:

(1)生产中的容器。例如,对于使用面向 Internet 容器服务的容器,攻击者可以先在相关容器上获得 root 权限,然后进一步对位于同一主机操作系统上的容器进行拒绝服务(DoS)攻击。

(2)生产中的主机操作系统。例如,在上面的例子中,攻击者还可以通过已获得 root 权限的容器访问关键的主机操作系统文件,即发起容器逃逸攻击。

(3)生产中的 Docker 守护进程。例如,攻击者在获得访问主机操作系统文件的权限后,可以修改默认的安全参数,从而在该主机上启动新的 Docker 容器。

(4)生产网络。攻击者可以通过修改主机操作系统的相关配置文件,从而实现重定向网络流量等操作。

间接攻击者的目标与直接攻击者相同,不过间接攻击者是利用 Docker 的生态系统(例如代码和镜像库)来进入生产环境中。

综上,用户在日常使用 Docker 的过程中面临了许多威胁。为了能在被攻击时及时发现异常和在被攻击后及时定位异常,无论是用户还是取证人员都需要充分利用容器日志中的信息。

3 Docker日志介绍

日志是 Docker 容器日常运行和积累的海量数据中最有价值的数据之一。默认情况下,对于每一个存在的 Docker 容器都会生成相应的日志文件。 Docker 引擎是 Docker 中用于构建和容器化应用程序的核心组件,它向外提供命令行接口(CLI)客户端,然后根据接收到的命令调用相应的 Dokcer API。Docker 守护进程负责监听 Docker API 请求并管理容器和网络等 Docker 对象。容器由 Docker Daemon 创建和运行,并且根据已有的配置,将指定的信息重定向到标准输出(stdout)和标准错误(stderr)两个输出流中。例如,官方的nginx 镜像便在文件 /var/log/nginx/access.log 和文件 /dev/stdout 之间建立了一条软连接,并且在文件 /var/log/nginx/error.log 和文件 /dev/stderr 之间也建立了一条软连接,从而覆盖原有的日志文件并将日志发送到相关的特殊文件中。而日志记录驱动(logging driver )则从容器的标准输出和标准错误中收集信息,并在指定位置生成指定格式的日志文件。存放日志的位置可以是在当前主机上,也可以是外部主机、数据库或另一个日志记录后端,而日志记录的信息和日志的格式几乎完全取决于来自容器终端的命令。

Docker 支持多种日志记录驱动来帮助用户从运行的容器和服务中收集信息。每个 Docker Daemon 都有一个默认的日志记录驱动,可通过查看 daemon.json 文件中关键词 log-driver 对应的值得到。gelf、fluentd、awslogs、splunk、etwlogs、gcplogs 和 logentries 日志记录驱动主要作为向外部主机传送日志的选项,local、json-file 和 journald 日志记录驱动则只能在本地主机上生成日志,syslog 日志记录驱动的日志既可以路由到当前主机上,也可以路由到外部主机。 Docker 日志记录插件允许用户扩展和自定义 Docker 的日志记录功能,并且日志服务提供商可以实现自己的插件。

本章节接下来的部分将会以 local、json-file 和 journald 日志记录驱动为例,介绍 Docker 日志格式。

3.1 local 日志记录驱动

local 日志记录驱动捕获容器的中标准输出和标准错误中的输出,并将其写到内部存储当中。日志默认位置为:/var/lib/docker/containers/容器id/local-logs/container.log。每个日志都是由若干日志行组成,日志行可分为3个部分:头部,日志消息部分和尾部。头部和尾部都是32位的无符号数,表示中间日志消息部分的大小;而中间的日志消息部分也包含三个部分:日志来源、时间戳和日志内容。磁盘上存储的日志消息对应的数据部分经过了 Protocal Buffer 编码。Protocal Buffer 是由Google公司提出的一种高效的数据压缩编码方式。

3.2 json-file 日志记录驱动

json-file是Docker 容器的默认日志记录驱动。Docker 捕获容器的中标准输出和标准错误中的输出,并使用 JSON 格式写入文件中。每个日志文件仅包含有关一个容器的信息。日志默认位置为:/var/lib/docker/containers/容器id/容器id-json.log。

3.3 syslog 日志记录驱动

syslog日志记录驱动将日志路由到 syslog 服务器上。值得注意的是 Linux 操作系统自带 syslog日志系统,因此也可以直接路由到本地主机上。日志格式遵循 RFC 5424 定义。

3.4 journald 日志记录驱动

journald日志驱动程序发送容器日志到的主机的 system.journald 服务中。

可通过输出主机上的 /var/log/message 文件中的内容查看日志消息,也可以通过 journalctl 命令、journal API 或者 docker logs 命令查看。

4 日志恢复技术介绍

4.1 基于文件系统元数据的文件恢复方法

为了简化基于文件系统元数据的文件恢复过程,Carrier 建立了一个名为 The SleuthKit(TSK)的开源项目。接着,Garfinkel通过封装TSK指令来进一步自动化磁盘分析,结果以XML文件格式存储并用Python 模块进行分析。

该方法的优势在于能够快速提取元数据和对应磁盘区域都尚未被覆写的文件的数据。同时,局限性也很明显:当文件元数据不存在或对应磁盘区域被覆写时,则恢复效果不佳。因此,对于那些元数据和文件内容都还在磁盘上的Docker日志,可以使用基于文件系统元数据的文件恢复方式进行恢复。

通常为了保护证物的完整性,取证人员不会直接对磁盘进行操作,而是制作一个磁盘的镜像文件来进行相应的数据分析。该模型分为四个主要步骤。第一步是媒体分析,负责从镜像文件中获取数据。在此过程中数据仅被视为字节序列且不被解释。第二步是卷分析,通过扫描第一步获取的数据查找卷的结构。卷的类型包括分区、RAID和卷组的逻辑卷。完整的磁盘可以是一个卷,例如直接在设备上建立的文件系统。而且,卷可以以任意的多种方式进行组合。第三步是系统分析,在第二步确定卷的结构后,将储存在每个卷上的数据解释为文件系统。该步骤将收集和恢复检测到的文件系统中的目录、文件及其元数据。第四步是应用程序分析,将数据在内容级别进行解释和分析,例如进行文档的搜索或恶意软件的详细分析。

4.2 文件雕复技术介绍

为了解决元数据不可使用时的文件恢复问题,文件雕复技术应运而生。文件雕复是一种在不需要任何与文件匹配的文件系统元数据的情况下,仅根据文件结构和内容来恢复文件的取证技术。

文件雕复同样基于文件内容仍然保留在磁盘上的假设。文件雕复分模型为三个步骤。第一步是预处理,负责根据残余的文件系统元数据识别对应的簇。第二步是识别,将剩下的没有对应文件系统元数据的簇进行分类。第三步是重组,负责将第二步中属于同一个文件类型的簇进行合并,恢复成对应的文件。

5 总结

Docker 容器为应用程序的开发、测试和使用人员提供了一个轻量级的虚拟化服务,人们在享受容器带来的便利的同时,也不得不面对使用容器时可能面临的安全隐患。而容器日志中包含了大量的宝贵信息,这些信息能够帮助取证人员还原容器被攻击或损毁前的状态。同时容器日志自身也极易被删除,因此本文中根据已有的文件恢复方法,并以不同的日志记录驱动下的日志格式为例,提出了一些可行性较高的日志恢复方案,为之后的容器取证工作提供了一些建议。

[1]任兰芳,庄小君,付俊. Docker 容器安全防护技术研究[J]. 电信工程技术与标准化,2020,033(003):73-78.

[2]李鹏超,周凯. 基于 Docker 容器的电子数据取证方法[J]. 吉林大学学报(理学版),2019, 57(06):1485-1490.

[3]王远征,肖波,齐凌飞. Docker 取证方法研究[C]//第 32 次全国计算机安全学术交流会论文集.2017.

猜你喜欢
磁盘攻击者日志
叶腊石聚合成型及其旋转磁盘的制作方法
机动能力受限的目标-攻击-防御定性微分对策
一名老党员的工作日志
它的好 它的坏 详解动态磁盘
扶贫日志
解决Windows磁盘签名冲突
修改磁盘属性
雅皮的心情日志
正面迎接批判
游学日志