冷涛,王衡
(1.四川警察学院 四川泸州 646000;2.南部县公安局 四川南部 637300)
当前网络犯罪态势严峻,APT 攻击层出不穷。网络警察作为维护网络空间生态安全的执法人员,需要较高的专业素质和实践能力,许多公安院校为培养网络安全人才,都建设了网络靶场实验室支撑课程教学[1-3]。部分地方公安机关也通过建设实验室或购买服务的形式培养内部人才,但这些实验室投入较为昂贵,而且网络技术翻新较快,已建设靶场资源有限,不能满足实战日益变化的需要。从学术研究来看,程静等[4]分析了美国、英国和国内网络靶场的建设情况,对靶场技术和发展进行分析。李秋香等[5]对美、英、澳、俄、德、韩、伊朗等国家对建设网络靶场的态度和情况,提出了建设的必要性和建议。杨路提出基于docker技术在AWS云搭建网络靶场[6],该靶场主要包括CTF和AWD两种竞赛模式,可服务学生培养。国内学术研究者在网络靶场建设方面做了较多优秀的研究,但在结合公安实战练兵,服务在职民警方面的网络靶场还少有研究。
另外,以往实验室靶场多采用虚拟机构建,主要存在以下不足:一是当实验环境需要重新部署或者小部分修改的时候,会表现出虚拟机部署迟缓,修改繁琐等问题;二是因为虚拟机运行需要占用较大的硬件资源,导致服务器配置要求较高;三是在虚拟机同时部署大量业务的时候,很可能由于资源分配问题直接导致部署失败等情况出现。而docker虚拟化技术,由于其轻量、便捷、开源资源多、可自定义等特性,根据业务需要自定义docker 网络靶场,无需投入新的软硬件设备,可快速满足公安院校和地方公安机关实战大练兵需求。
Docker 是一个开放源代码软件项目,可将任何应用以轻量级容器形式进行打包部署。Docker主要由三大部件构建,镜像(Image)、容器(Container)和仓库(Repository)。容器和镜像、数据之间存在一定的联系。图1 展示了其构架。Docker 采用server/client 交互,它使用远程API 来管理和创建Docker 容器。Docker Compose 的主要功能是可以同时管理多个Docker 容器,并且可以将多个容器组成一个项目,为命令行键入工作提供一个一键执行的脚本工具。此外,可以根据个人配置的yml文件创建或者管理多个容器。
图1 Docker构架
Docker daemon 是docker 的守护进程,是运行在操作系统上的一款应用程序,docker 支持win⁃dows,linux,mac等多种平台。从图2,图3体系结构[7]看,虚拟机依赖虚拟化技术(Hypervisor),拥有独立的操作系统,而docker 容器利用内核技术,没有hypervisor 层和guest os,更轻量化。从硬件资源看,虚拟机运行时获取了主机的实际资源(包括cpu,内存),需要预先分配,占用资源较高。例如8G 主机内存,1 台虚拟机分配2G 内存,则剩下6G 内存。如果部署启动2 个虚拟机,系统负载就很吃力。Docker 容器则按进程占用分配,耗费资源较少。从程序运行看,虚拟机是隔离于主机的一个操作系统,程序运行后,主机无法知道虚拟机运行了什么程序,而Docker容器利用了主机的内核技术,程序执行者还是主机。从启动时间看,虚拟机启动是分钟级(约1 分钟),而docker 容器启动是毫秒级(约50ms)。
图2 docker体系架构
图3 虚拟机体系架构
结合实战大练兵要求,搭建适合公安院校和公安机关在职民警的网络靶场平台。以网络警察培养和训练为例,构造图4 的靶场。具体包括竞赛平台,以竞赛或个人练习模式训练专项基础,覆盖网络安全、电子数据取证、网络安全法律、数据分析等知识模块;综合漏洞靶场平台以提升综合能力为目标,设计web漏洞和系统漏洞等综合漏洞靶场,提升漏洞利用,提权,持久化攻击等高级能力。实战案例靶场以公安实际打击案例为背景,脱敏处理后做成实战资源,锻炼攻防对抗,取证实战,综合数据分析的能力。
图4 基于docker的网络靶场练兵平台
考虑在每个民警的电脑终端都可使用本系统,选择ubuntu 搭建docker服务器。个人环境选择kali linux 和windows 作为客户端进行答题或攻击测试。下面为模拟实验,服务器使用内网IP:192.168.31.179,windows 客户端使用IP:192.168.31.141,kali 客户端使用IP:192.168.31.119。服务器搭建靶场资源,windows 客户端和kali 作为攻击平台,攻击平台和服务器处于同一网段。拓扑结构如图5所示。
图5 网络拓扑图
1.安装依赖模块。在Ubuntu服务器中分别执行apt-get install pip,apt-get install git,apt-get in⁃stall flask 安装pip,git,flask 框架。执行curl-fsSL https://download.docker.com/linux/ubuntu/gpg|su⁃do apt-key add -添加Docker 官方GPG key,然后执行命令:sudo add-apt-repository "deb[arch=amd64]https://download.docker.com/linux/ubuntu $(lsb_release -cs)stable"设定docker 仓库为最新的稳定版,以保障运行稳定。安装最新版本docker CE(社区版)执行命令:apt-get install dockerce,安装完docker并启动服务。
2.搭建基于docker的开源竞赛平台CTFd。开源CTF比赛平台CTFd是一个Capture The Flag框架,主要关注易用性和可定制性。它提供了运行CTF 所需的一切,并且可以使用插件和主题进行自定义。CTFd是储存于github上的开源代码,可使用git clone命令下载至本机。下载到本机后,进入CTFd 文件夹内,然后使用命令“docker-compose up–d”启动内容拉取与站点搭建,完成后显示运行PID号即可访问竞赛平台。浏览器访问本机IP:8000进入竞赛平台,使用admin账户对平台名称、logo、简介、主题与用户模式进行设定。进入challenges 板块添加竞赛题目、题目类型、题目描述、设定Flag 值、题目分值与是否可视化等信息。返回用户界面查看题目是否出现在challenges 板块进行验证,发现有题目且能正常访问,CTFd开源竞赛平台搭建成功。
图6 CTFd竞赛平台搭建成功
3.搭建vulhub 网络靶场。Vulhub 是一个支持docker 和docker-compose 的漏洞环境集合,包含许多开源漏洞复现靶场。用户进入Vulhub 相应的目录并执行一条命令语句就可以启动一个全新的漏洞环境,从而更轻松地重现该漏洞,学习者可以将更多精力放在漏洞原理本身上。使用Git clone 命令将Vulhub 下载至Ubuntu 服务器/home/vulhub/目录下。若需要启动一个XSS 跨站脚本注入漏洞的练习靶场,这里选择drupal编号cve-2019-6341漏洞为例,进入该文件夹查看docker-com⁃pose.yml文件,对其使用端口进行自定义设置为8080,方便访问且防止端口占用冲突。在docker容器的/root/vulhub/drupal/CVE-2019-6341 路径下执行命令“docker-compose up–d”启动靶场环境。该靶场位于Ubuntu 服务器的8080 端口,访问localhost:8080 验证靶场开启成功且显示无误,如图7所示。接下来继续开启不同类型漏洞靶场,进行压力测试以保障多用户访问。
图7 靶场成功访问
4.基于docker的实战案例靶场搭建。实战案例靶场采集素材来源于实战或仿真案例,用户可通过实战获得的网站镜像(含源码和数据库)制作dockerfile,并在docker容器中部署,重建实战环境。
(1)Dockerfile制作。首先在网站根目录,编写dockerfile文件,内容如下:
其中,FROM 表示本镜像基于mattrayner,构建好lamp 架构(linux,apache,mysql,php),COPY 表示拷贝当前网站源码到镜像的/app/目录下,CMD 表示运行run.sh 脚本启动。注意启动前确保网站数据库密码和镜像中mysql密码一致。
(2)启动Docker File。进入网站目录,启动docker 服务后,运行docker build–t dubo,编译镜像,利用docker run-it-d-p 80:80 5a074861b263 运行镜像(5a074861b263 为实例名,根据实际情况调整),运行成功后如图8所示。
图8 实战案例靶场
分别在windows 和kali 两个客户端对CTFd 竞赛平台进行用户注册、challenges 板块查看、题目描述查看、提交Flag 等方面进行测试。在windows 客户端中访问CTFd 平台地址:192.168.31.179:8000 进入注册,用户名为test1。进入challenges 板块,查看某一题题目描述。题目名字:SQLinjiec⁃tion,分值:50,靶场地址:http://192.168.31.179/index.php?ids[]=1&ids[]=2 与后台设置一致。在Kali 客户端中访问CTFd 平台地址:192.168.31.179:8000 进入注册,用户名为test2。依据管理员后台设置的Flag值“xxx”进行提交,测试Flag是否能够成功提交。提交后回显Correct(正确),solves由0变为1。测试成功。
使用windows客户端与kali客户端对vulhub漏洞复现靶场进行测试,打开windows的powershell执行命令:python cve-2016-5734.py -c 'system(id);' -u root -p root -d test http://192.168.31.179:8082/获得回显“result:33(www-data)gid=33(www-data)groups=33(www-data)。”即显示表“prgp⁃wn”已经创建成功,漏洞成功复现。
通过kali客户端成功访问,开始进行漏洞复现测试。访问http://192.168.31.179/index.php?ids[]=1&ids[]=2,可看到用户名被显示了出来,说明环境运行成功。采用手工注入方式,直接访问http://192.168.31.179/index.php?ids[0,updatexml(0,concat(0xa,user()),0)]=1 成功报错,并在报错信息中发现数据库帐号和密码,说明漏洞复现成功,如图9所示。
图9 报错信息中发现敏感信息
应全警实战大化练兵的需求,本项研究根据业务需要进行自定义设置,通过自建基于Docker的网络靶场,构建网络靶场实战平台。测试结果表明:所构建靶场具有部署轻量化、易于启动、响应速度高等特点。笔者在四川警察学院开展竞赛培训、四川省部分公安局网安民警培训中进行了应用,结果显示,其能很好地帮助用户快速构建环境,聚焦于专业知识实战化练兵,提高对象的相关核心能力素质,具有进一步推广应用价值。