Docker 容器技术在网络安全实验室的应用研究
2020-07-17吴栋淦
吴栋淦
(福建信息职业技术学院 计算机工程系,福建 福州 350003)
随着网络安全技术的兴起,为适应日益增长的网络安全专业需求,一些知名企业在网络安全行业投注了不少的资金,各大高校也纷纷开设网络安全相关专业课程.在培养网络安全专业人才的过程中,建设专业实验室起到非常重要的作用.众所周知,网络安全专业的人才培养注重实战能力,而网络安全特殊的专业性质不允许学生随便上网络“实战”,必须守持法律底线,这就要求建设模拟网络实战环境.当前行业中模拟网络实战环境正处于百花齐放的状态,产品标准不统一,互不兼容,尚不存在一个产品能满足所有网络安全实战.针对现有的网络安全实验室现状,提出一种基于docker 容器技术的网络安全实验环境建设方案,能结合现有的网络安全实验设备,为师生提供一个比较完整的网络安全实战环境.
1 存在问题
1.1 硬件环境
目前福建信息职业技术学院的网络安全实验室由防火墙、WAF、Netlog、DCST 信息安全实训平台和360 安全实训平台构成,能提供网络安全设备配置管理、网络协议分析、安全渗透等实践项目.现有的实训平台主要以VM 虚拟化技术为依托模拟靶机环境,对资源的消耗较大,能同时在线的客户端受到制约,难以满足专业教学的需求.此外,实训平台依赖于特定厂商,实训环境与外网完全隔离,用户无法扩展或开发新的实验场景,厂商升级周期长,造成实训平台采购后很容易落后.
1.2 软件环境
福建信息职业技术学院自2011 年起开设信息安全工作室,开始招收少量学生参加信息安全培训和各类竞赛.由于教师都来自原网络技术专业,专业师资缺乏,同时师资普遍存在实战经验少、实战能力弱的问题.
1.3 解决方案
要解决这些问题,一般的做法有两种:一是采购在线实训平台,由于其场景更新快,且按数量收费,可以为每位学生及时提供实训环境,并在采购后对师资进行培训,使其快速掌握实训平台资源的使用;二是结合现有的平台资源自行搭建实训平台(即靶场),在搭建的过程中既能让教师专业能力得到提升,又能根据实际教学要求复现实战环境.
比较两种方案,方案一周期短(取决于采购周期),费用高;方案二费用低廉(只需准备服务器硬件设备),周期较长.根据福建信息职业技术学院当前的情况,选择了方案二进行建设.
2 容器技术
2.1 虚拟化概述
当前网络安全实训平台普遍利用云平台虚拟化技术[1],当前主流的虚拟化架构有两种:Hypervisors 和容器.Hypervisors 也被称为虚拟机监视器(VMM),用于在多个虚拟机(VM)或Guest OS 之间共享物理机的硬件资源[2].Hypervisors 有两种类型,分别是KVM 和Xen. 其 中KVM 是Kernel-based Virtual Machine 的 简称,是一种开源虚拟化模块,目前国内不少主流的实训平台采用KVM 类型,通过搭配QEMU 在虚拟机中运行目标操作系统,QEMU 本身可以在Windows、Linux和Mac OS X 等几种主机操作系统上运行[3].另一种Xen 则是一个高性能资源管理的虚拟机监视器,可提供托管主机设施、服务器整合、分布式Web 服务、安全计算平台等应用程序,Xen 可以提供完全虚拟化和半虚拟化[4].
容器与Hypervisors 不同之处在于,容器虚拟化操作系统本身,与主机和其他容器共享主机操作系统核心与资源,Hypervisors 与容器的结构见图1.
从最早的BSD jails 和chroot 开始,到现在的LXC、OpenVZ,容器经过了较长时间的发展,越来越成熟.由于容器非常的轻量级,提供了接近裸机的性能,因此容器在云计算平台受到越来越多的关注[5].Docker 作为一种容器的操作系统,由于其共享操作系统核心的特性,能够减少系统开销.
2.2 容器的应用现状
容器技术首先在商业领域上得到了广泛应用. 2004 年开始,Google 公司就开始使用容器技术,2014年Google 所有的服务其实都封装以及运行在 Linux 容器中,此外IBM、微软、Red Hat 等厂商 ,都开始支持 Docker.
2015 年618 大促中,京东部署了Docker 弹性云承载关键业务,经受了大流量的考验.2016 年,阿里将双11 全链路所有核心应用部署在AliDocker,撑起了交易17.5 万笔/s 的下单峰值.
图1 Hypervisors 与容器结构对比图
3 基于Docker 容器技术的实验室建设方案
3.1 建设方案
由于Docker 容器能够满足用户按需分配,因此非常适用于教学实验环境的搭建[6].实践证明,通过部署Docker 容器可以有效降低实验室建设成本、降低运维工作量[7].在建设网络安全实验室过程中,通过运用Docker 技术能够满足建设需求,高度仿真实验环境.
考虑到与原有的实训平台兼容,建设方案见图2,其中教务平台、DCST 实训平台、360 实训平台和在线教学平台是已有平台,Docker 平台是拟建设平台.
Docker 平台通过部署Docker 容器来提供各种安全攻防环境和CTF 平台.学生机可以直接在机房和校园WiFi 连接到各平台,由于现有实训平台的封闭性,各实训平台与教务平台采用独立的账号系统,不能通用,管理上比较麻烦.在线教学平台通过插件与教务平台实现账号统一管理,并对网络安全实验环境进行组织管理.
图2 实验室建设结构图
建设完成之后,学生可以通过两种方式使用网络安全实验环境:一是访问在线教学平台,完成身份认证,阅读教师发布的实验任务,对Docker 容器上部署的靶机进行扫描、渗透攻击,获得所需的信息获得所需的信息,在教学平台上提交本次的实验结果数据,完成本次实验;二是访问CTF 平台,登录后完成教师发布的各种挑战,提交Flag 值以获得分数.方式一主要用于常规教学和集训,可以进行组题训练,弥补CTF 平台的不足;方式二CTF 夺旗战主要用于兴趣培养和选拔队员,适合校内技能竞赛.
3.2 部署
3.2.1 环境初始化
Docker 容器部署在网络安全服务器上,该服务器运行CentOS 7 64 位操作系统,首先通过以下方法安装Docker 引擎.
#yum install -y yum-utils
device-mapper-persistent-data
lvm2
#yum-config-manager --add-repo
https://download.docker.com/linux/centos/docker-ce.repo
#yum install docker-ce docker-ce-cli containerd.io
然后通过配置加速镜像来提高下载镜像速度,在国内可以选择阿里云、清华等镜像源,这可以通过修改配置文件来完成.
#vi /etc/docker/daemon.json
{“registry-mirrors”:[“https://registry.docker-cn.com”,https://kxv08zer.mirror.aliyuncs.com]}
为了方便对Docker 容器进行管理,可以安装Docker 容器管理平台shipyard.
#curl -sSL https://shipyard-project.com/deploy | bash -s 3.2.2 靶机部署
在网络安全攻防实验环境中,大部分的困难来自于靶机环境的搭建,高质量的靶机是核心资源[8].由于Docker 技术的广泛使用,互联网络上可以找到不少高品质靶机如dvwa、juiceshop 等,下面以著名的dvwa 为例说明靶机环境的构建.
#docker pull citizenstig/dvwa
#docker run -itd--name dvwa -p 8000:80 -restart=always citizenstig/dvwa
通过部署dvwa 靶机并映射到本地8000 端口,用户就可以直接通过8000 端口访问.
网络上公共发布的靶机种类有限,难以完全满足教学需要,因此在很多时候需要定制靶机.定制靶机环境的一个特点是“一题一机”,往往是一道攻防题就需要搭建一台靶机,Docker 容器的轻量级和高性能的特点正好解决了这个问题,即使在普通服务器上也能部署几十上百种靶机.
Docker 定制靶机部署可以有两种方式,一种是直接从Docker 仓库拉取镜像,对镜像进行定制修改后提交此镜像;另一种是通过Dockerfile 来构建靶机镜像.两种方式可交替使用,相对来说,前一种方式生成的镜像较大,占用空间一般在数百兆左右,后一种方式由于只有代码文件,占用空间小得多,比较适合存档和交流,下文以Dockerfile 部署Web 渗透靶机为例进行说明.
Web 渗透靶机主要以练习php 漏洞为主,需要安装配置httpd、php 为主的软件,其中httpd 服务器一般使用常见的apache httpd,靶机Dockerfile 主要内容为:
#cat Dockerfile
FROM phusion/baseimage:0.10.2#指定使用的基础镜像
MAINTAINER Zhangsan#维护者信息
RUN sed -i‘s/archive.ubuntu.com/mirrors.aliyun.com/g’ /etc/apt/sources.list &&
sed -i‘s/security.ubuntu.com/mirrors.aliyun.com/g’ /etc/apt/sources.list &&
apt-get update && apt-get install -y apache2 libapache2-mod-php &&
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /var/www/html/*
#更新源并安装apache2 及相关php 模块,清空目录文件
RUN mkdir -p /etc/service/apache2/ && #创建apache2 目录
printf“#!/bin/sh exec /usr/sbin/apachectl -D FOREGROUND ”> /etc/service/apache2/run && #后台运行apache 进程
chmod 700 /etc/service/apache2/run &修改进程权限
ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load &创建链接
sed -i‘s/AllowOverride[ ]*None/AllowOverride All/g’ /etc/apache2/apache2.conf &修改重写规则
sed -i‘s/Options Indexes FollowSymLinks/Options FollowSymLinks/g’ /etc/apache2/apache2.conf & 禁用目录浏览
sed -i‘s/allow_url_include = Off/allow_url_include = On/g’ /etc/php/7.0/apache2/php.ini & 远 程 文 件包含漏洞需开启该功能
sed -i‘s/disable_functions = /disable_functions = system,popen,shell_exec,exec,passthru,proc_open,ignore_user_abort/g’ /etc/php/7.0/apache2/php.ini#禁用system、popen、passthru 等php 函数
ADD src/000-default.conf /etc/apache2/sites-enabled/000-default.conf#复制apache 配置文件到相应目录
ADD src/html /var/www/html#复制有漏洞的web 文件到目标文件夹
RUN chmod a-w /var/www/html -R #设置文件夹权限
EXPOSE 80#将80 端口映射到宿主机
此Dockerfile 文件内容功能分为4 部分:(1)指定基础镜像和镜像创建者信息、更新源、安装apache软件和模块;(2)设置apache 运行环境;(3)复制配置文件和网页文件;(4)设置权限,指定容器映射到宿主机器的端口.
Dockerfile 编写完成后通过docker 指令创建镜像,然后运行容器在本地8080 端口打开监听.
#docker build -t web_vuln .
#docker run -itd -name web_vuln -p 8080:80 --restart=always web_vuln
最后对靶机页面进行渗透测试有效性,容器运行期间可以通过docker stats 命令查看资源占用率,见图3.
#docker stats --format “table {{.Name}} {{.CPUPerc}} {{.MemUsage}}”
图3 自定义输出docker 资源占用率
3.2.3 教学平台
靶机部署完成之后,还需要将这些靶机资源进行整合利用,这可以通过在线教学平台来实现.本方案利用原有的Moodle 在线平台对资源进行整合,实现实践平台和理论教学的连接.Moodle 主要用于理论学习,可通过VPL 插件支持在线编程实践,但不适合作为主流的实践教学平台,可充分利用Moodle 丰富的题库类型对实践进行扩展,实现网络安全理论学习和实战技能一体化评估.
实现思路是利用Moodle 的“内嵌答案完形填空”题型组织题库,随后学生通过身份验证进入Moodle平台相应课程,开启练习或作业,获得靶机地址和相关信息,在Moodle 平台获取必要的工具软件对靶机进行渗透,并将渗透后获得的结果值提交到平台,完成自动评分.
其他的CTF 平台可以完成类似功能,但使用Moodle 平台拥有CTF 平台不具备的两点优势:一是Moodle 平台可以通过插件与教务系统实现账号对接,利用教务系统账号即可登录Moodle 平台;二是Moodle 平台可以对题库随机组卷,非常适用于常规教学.
3.2.4 CTF 平台
CTF 即夺旗赛,常用于国际和国内各类安全赛项中,CTF 独特的挑战性和趣味性,特别适合作为教学辅助平台[9],用于组队竞赛、队员选拔,可提高学生兴趣和实战能力.本方案选用比较成熟的开源CTF 平台ctfd,采用Docker 容器方式部署,部署方式如下.
#docker pull ctfd/ctfd
#docker run -itd --name ctfd -p 80:8000 --restart=always ctfd/ctfd
#下载汉化包themes.zip
#unzip themes.zip
# docker cp themes ctfd:/opt/CTFd/
学生可以采取组队或个人的形式登录CTF 平台地址进行解题,解题获得的分数也会实时显示在scoreboard 界面中(见图4).
3.3 实施成效
网络安全攻防实验环境部署至今已两年,已应用于PHP安全编程、Web 应用安全课程的常规教学和信息安全各类竞赛训练,为信息安全团队培养出优秀的学员.2017 年至今,信息安全团队共获得国赛一等奖2 次、二等奖1次,省赛一等奖3 次的好成绩.
攻防实验室仍然还存在一些问题,比如靶机需要一个稳定的团队持续开发,尤其是漏洞复现的时效性很强,此外各个平台之间尚不能实现无缝连接,比如CTF 平台的账号系统与教务系统分离,不利于教学管理.
图4 CTF 夺旗赛Top10
4 结语
针对传统网络安全实验室提出了改良方案,经过实践证明,改良后的实验环境已基本满足教学和集训需求.未来的研究方向主要在两点:一是通过制度建设一个稳定的研发团队;二是考虑与异种平台的接洽.