吳棟淦
(福建信息職業(yè)技術(shù)學(xué)院 計(jì)算機(jī)工程系,福建 福州 350003)
隨著網(wǎng)絡(luò)安全技術(shù)的興起,為適應(yīng)日益增長的網(wǎng)絡(luò)安全專業(yè)需求,一些知名企業(yè)在網(wǎng)絡(luò)安全行業(yè)投注了不少的資金,各大高校也紛紛開設(shè)網(wǎng)絡(luò)安全相關(guān)專業(yè)課程.在培養(yǎng)網(wǎng)絡(luò)安全專業(yè)人才的過程中,建設(shè)專業(yè)實(shí)驗(yàn)室起到非常重要的作用.眾所周知,網(wǎng)絡(luò)安全專業(yè)的人才培養(yǎng)注重實(shí)戰(zhàn)能力,而網(wǎng)絡(luò)安全特殊的專業(yè)性質(zhì)不允許學(xué)生隨便上網(wǎng)絡(luò)“實(shí)戰(zhàn)”,必須守持法律底線,這就要求建設(shè)模擬網(wǎng)絡(luò)實(shí)戰(zhàn)環(huán)境.當(dāng)前行業(yè)中模擬網(wǎng)絡(luò)實(shí)戰(zhàn)環(huán)境正處于百花齊放的狀態(tài),產(chǎn)品標(biāo)準(zhǔn)不統(tǒng)一,互不兼容,尚不存在一個(gè)產(chǎn)品能滿足所有網(wǎng)絡(luò)安全實(shí)戰(zhàn).針對(duì)現(xiàn)有的網(wǎng)絡(luò)安全實(shí)驗(yàn)室現(xiàn)狀,提出一種基于docker 容器技術(shù)的網(wǎng)絡(luò)安全實(shí)驗(yàn)環(huán)境建設(shè)方案,能結(jié)合現(xiàn)有的網(wǎng)絡(luò)安全實(shí)驗(yàn)設(shè)備,為師生提供一個(gè)比較完整的網(wǎng)絡(luò)安全實(shí)戰(zhàn)環(huán)境.
目前福建信息職業(yè)技術(shù)學(xué)院的網(wǎng)絡(luò)安全實(shí)驗(yàn)室由防火墻、WAF、Netlog、DCST 信息安全實(shí)訓(xùn)平臺(tái)和360 安全實(shí)訓(xùn)平臺(tái)構(gòu)成,能提供網(wǎng)絡(luò)安全設(shè)備配置管理、網(wǎng)絡(luò)協(xié)議分析、安全滲透等實(shí)踐項(xiàng)目.現(xiàn)有的實(shí)訓(xùn)平臺(tái)主要以VM 虛擬化技術(shù)為依托模擬靶機(jī)環(huán)境,對(duì)資源的消耗較大,能同時(shí)在線的客戶端受到制約,難以滿足專業(yè)教學(xué)的需求.此外,實(shí)訓(xùn)平臺(tái)依賴于特定廠商,實(shí)訓(xùn)環(huán)境與外網(wǎng)完全隔離,用戶無法擴(kuò)展或開發(fā)新的實(shí)驗(yàn)場景,廠商升級(jí)周期長,造成實(shí)訓(xùn)平臺(tái)采購后很容易落后.
福建信息職業(yè)技術(shù)學(xué)院自2011 年起開設(shè)信息安全工作室,開始招收少量學(xué)生參加信息安全培訓(xùn)和各類競賽.由于教師都來自原網(wǎng)絡(luò)技術(shù)專業(yè),專業(yè)師資缺乏,同時(shí)師資普遍存在實(shí)戰(zhàn)經(jīng)驗(yàn)少、實(shí)戰(zhàn)能力弱的問題.
要解決這些問題,一般的做法有兩種:一是采購在線實(shí)訓(xùn)平臺(tái),由于其場景更新快,且按數(shù)量收費(fèi),可以為每位學(xué)生及時(shí)提供實(shí)訓(xùn)環(huán)境,并在采購后對(duì)師資進(jìn)行培訓(xùn),使其快速掌握實(shí)訓(xùn)平臺(tái)資源的使用;二是結(jié)合現(xiàn)有的平臺(tái)資源自行搭建實(shí)訓(xùn)平臺(tái)(即靶場),在搭建的過程中既能讓教師專業(yè)能力得到提升,又能根據(jù)實(shí)際教學(xué)要求復(fù)現(xiàn)實(shí)戰(zhàn)環(huán)境.
比較兩種方案,方案一周期短(取決于采購周期),費(fèi)用高;方案二費(fèi)用低廉(只需準(zhǔn)備服務(wù)器硬件設(shè)備),周期較長.根據(jù)福建信息職業(yè)技術(shù)學(xué)院當(dāng)前的情況,選擇了方案二進(jìn)行建設(shè).
當(dāng)前網(wǎng)絡(luò)安全實(shí)訓(xùn)平臺(tái)普遍利用云平臺(tái)虛擬化技術(shù)[1],當(dāng)前主流的虛擬化架構(gòu)有兩種:Hypervisors 和容器.Hypervisors 也被稱為虛擬機(jī)監(jiān)視器(VMM),用于在多個(gè)虛擬機(jī)(VM)或Guest OS 之間共享物理機(jī)的硬件資源[2].Hypervisors 有兩種類型,分別是KVM 和Xen. 其 中KVM 是Kernel-based Virtual Machine 的 簡稱,是一種開源虛擬化模塊,目前國內(nèi)不少主流的實(shí)訓(xùn)平臺(tái)采用KVM 類型,通過搭配QEMU 在虛擬機(jī)中運(yùn)行目標(biāo)操作系統(tǒng),QEMU 本身可以在Windows、Linux和Mac OS X 等幾種主機(jī)操作系統(tǒng)上運(yùn)行[3].另一種Xen 則是一個(gè)高性能資源管理的虛擬機(jī)監(jiān)視器,可提供托管主機(jī)設(shè)施、服務(wù)器整合、分布式Web 服務(wù)、安全計(jì)算平臺(tái)等應(yīng)用程序,Xen 可以提供完全虛擬化和半虛擬化[4].
容器與Hypervisors 不同之處在于,容器虛擬化操作系統(tǒng)本身,與主機(jī)和其他容器共享主機(jī)操作系統(tǒng)核心與資源,Hypervisors 與容器的結(jié)構(gòu)見圖1.
從最早的BSD jails 和chroot 開始,到現(xiàn)在的LXC、OpenVZ,容器經(jīng)過了較長時(shí)間的發(fā)展,越來越成熟.由于容器非常的輕量級(jí),提供了接近裸機(jī)的性能,因此容器在云計(jì)算平臺(tái)受到越來越多的關(guān)注[5].Docker 作為一種容器的操作系統(tǒng),由于其共享操作系統(tǒng)核心的特性,能夠減少系統(tǒng)開銷.
容器技術(shù)首先在商業(yè)領(lǐng)域上得到了廣泛應(yīng)用. 2004 年開始,Google 公司就開始使用容器技術(shù),2014年Google 所有的服務(wù)其實(shí)都封裝以及運(yùn)行在 Linux 容器中,此外IBM、微軟、Red Hat 等廠商 ,都開始支持 Docker.
2015 年618 大促中,京東部署了Docker 彈性云承載關(guān)鍵業(yè)務(wù),經(jīng)受了大流量的考驗(yàn).2016 年,阿里將雙11 全鏈路所有核心應(yīng)用部署在AliDocker,撐起了交易17.5 萬筆/s 的下單峰值.
圖1 Hypervisors 與容器結(jié)構(gòu)對(duì)比圖
由于Docker 容器能夠滿足用戶按需分配,因此非常適用于教學(xué)實(shí)驗(yàn)環(huán)境的搭建[6].實(shí)踐證明,通過部署Docker 容器可以有效降低實(shí)驗(yàn)室建設(shè)成本、降低運(yùn)維工作量[7].在建設(shè)網(wǎng)絡(luò)安全實(shí)驗(yàn)室過程中,通過運(yùn)用Docker 技術(shù)能夠滿足建設(shè)需求,高度仿真實(shí)驗(yàn)環(huán)境.
考慮到與原有的實(shí)訓(xùn)平臺(tái)兼容,建設(shè)方案見圖2,其中教務(wù)平臺(tái)、DCST 實(shí)訓(xùn)平臺(tái)、360 實(shí)訓(xùn)平臺(tái)和在線教學(xué)平臺(tái)是已有平臺(tái),Docker 平臺(tái)是擬建設(shè)平臺(tái).
Docker 平臺(tái)通過部署Docker 容器來提供各種安全攻防環(huán)境和CTF 平臺(tái).學(xué)生機(jī)可以直接在機(jī)房和校園WiFi 連接到各平臺(tái),由于現(xiàn)有實(shí)訓(xùn)平臺(tái)的封閉性,各實(shí)訓(xùn)平臺(tái)與教務(wù)平臺(tái)采用獨(dú)立的賬號(hào)系統(tǒng),不能通用,管理上比較麻煩.在線教學(xué)平臺(tái)通過插件與教務(wù)平臺(tái)實(shí)現(xiàn)賬號(hào)統(tǒng)一管理,并對(duì)網(wǎng)絡(luò)安全實(shí)驗(yàn)環(huán)境進(jìn)行組織管理.
圖2 實(shí)驗(yàn)室建設(shè)結(jié)構(gòu)圖
建設(shè)完成之后,學(xué)生可以通過兩種方式使用網(wǎng)絡(luò)安全實(shí)驗(yàn)環(huán)境:一是訪問在線教學(xué)平臺(tái),完成身份認(rèn)證,閱讀教師發(fā)布的實(shí)驗(yàn)任務(wù),對(duì)Docker 容器上部署的靶機(jī)進(jìn)行掃描、滲透攻擊,獲得所需的信息獲得所需的信息,在教學(xué)平臺(tái)上提交本次的實(shí)驗(yàn)結(jié)果數(shù)據(jù),完成本次實(shí)驗(yàn);二是訪問CTF 平臺(tái),登錄后完成教師發(fā)布的各種挑戰(zhàn),提交Flag 值以獲得分?jǐn)?shù).方式一主要用于常規(guī)教學(xué)和集訓(xùn),可以進(jìn)行組題訓(xùn)練,彌補(bǔ)CTF 平臺(tái)的不足;方式二CTF 奪旗戰(zhàn)主要用于興趣培養(yǎng)和選拔隊(duì)員,適合校內(nèi)技能競賽.
3.2.1 環(huán)境初始化
Docker 容器部署在網(wǎng)絡(luò)安全服務(wù)器上,該服務(wù)器運(yùn)行CentOS 7 64 位操作系統(tǒng),首先通過以下方法安裝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
然后通過配置加速鏡像來提高下載鏡像速度,在國內(nèi)可以選擇阿里云、清華等鏡像源,這可以通過修改配置文件來完成.
#vi /etc/docker/daemon.json
{“registry-mirrors”:[“https://registry.docker-cn.com”,https://kxv08zer.mirror.aliyuncs.com]}
為了方便對(duì)Docker 容器進(jìn)行管理,可以安裝Docker 容器管理平臺(tái)shipyard.
#curl -sSL https://shipyard-project.com/deploy | bash -s 3.2.2 靶機(jī)部署
在網(wǎng)絡(luò)安全攻防實(shí)驗(yàn)環(huán)境中,大部分的困難來自于靶機(jī)環(huán)境的搭建,高質(zhì)量的靶機(jī)是核心資源[8].由于Docker 技術(shù)的廣泛使用,互聯(lián)網(wǎng)絡(luò)上可以找到不少高品質(zhì)靶機(jī)如dvwa、juiceshop 等,下面以著名的dvwa 為例說明靶機(jī)環(huán)境的構(gòu)建.
#docker pull citizenstig/dvwa
#docker run -itd--name dvwa -p 8000:80 -restart=always citizenstig/dvwa
通過部署dvwa 靶機(jī)并映射到本地8000 端口,用戶就可以直接通過8000 端口訪問.
網(wǎng)絡(luò)上公共發(fā)布的靶機(jī)種類有限,難以完全滿足教學(xué)需要,因此在很多時(shí)候需要定制靶機(jī).定制靶機(jī)環(huán)境的一個(gè)特點(diǎn)是“一題一機(jī)”,往往是一道攻防題就需要搭建一臺(tái)靶機(jī),Docker 容器的輕量級(jí)和高性能的特點(diǎn)正好解決了這個(gè)問題,即使在普通服務(wù)器上也能部署幾十上百種靶機(jī).
Docker 定制靶機(jī)部署可以有兩種方式,一種是直接從Docker 倉庫拉取鏡像,對(duì)鏡像進(jìn)行定制修改后提交此鏡像;另一種是通過Dockerfile 來構(gòu)建靶機(jī)鏡像.兩種方式可交替使用,相對(duì)來說,前一種方式生成的鏡像較大,占用空間一般在數(shù)百兆左右,后一種方式由于只有代碼文件,占用空間小得多,比較適合存檔和交流,下文以Dockerfile 部署Web 滲透靶機(jī)為例進(jìn)行說明.
Web 滲透靶機(jī)主要以練習(xí)php 漏洞為主,需要安裝配置httpd、php 為主的軟件,其中httpd 服務(wù)器一般使用常見的apache httpd,靶機(jī)Dockerfile 主要內(nèi)容為:
#cat Dockerfile
FROM phusion/baseimage:0.10.2#指定使用的基礎(chǔ)鏡像
MAINTAINER Zhangsan#維護(hù)者信息
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 及相關(guān)php 模塊,清空目錄文件
RUN mkdir -p /etc/service/apache2/ && #創(chuàng)建apache2 目錄
printf“#!/bin/sh exec /usr/sbin/apachectl -D FOREGROUND ”> /etc/service/apache2/run && #后臺(tái)運(yùn)行apache 進(jìn)程
chmod 700 /etc/service/apache2/run &修改進(jìn)程權(quán)限
ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load &創(chuàng)建鏈接
sed -i‘s/AllowOverride[ ]*None/AllowOverride All/g’ /etc/apache2/apache2.conf &修改重寫規(guī)則
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 & 遠(yuǎn) 程 文 件包含漏洞需開啟該功能
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 函數(shù)
ADD src/000-default.conf /etc/apache2/sites-enabled/000-default.conf#復(fù)制apache 配置文件到相應(yīng)目錄
ADD src/html /var/www/html#復(fù)制有漏洞的web 文件到目標(biāo)文件夾
RUN chmod a-w /var/www/html -R #設(shè)置文件夾權(quán)限
EXPOSE 80#將80 端口映射到宿主機(jī)
此Dockerfile 文件內(nèi)容功能分為4 部分:(1)指定基礎(chǔ)鏡像和鏡像創(chuàng)建者信息、更新源、安裝apache軟件和模塊;(2)設(shè)置apache 運(yùn)行環(huán)境;(3)復(fù)制配置文件和網(wǎng)頁文件;(4)設(shè)置權(quán)限,指定容器映射到宿主機(jī)器的端口.
Dockerfile 編寫完成后通過docker 指令創(chuàng)建鏡像,然后運(yùn)行容器在本地8080 端口打開監(jiān)聽.
#docker build -t web_vuln .
#docker run -itd -name web_vuln -p 8080:80 --restart=always web_vuln
最后對(duì)靶機(jī)頁面進(jìn)行滲透測試有效性,容器運(yùn)行期間可以通過docker stats 命令查看資源占用率,見圖3.
#docker stats --format “table {{.Name}} {{.CPUPerc}} {{.MemUsage}}”
圖3 自定義輸出docker 資源占用率
3.2.3 教學(xué)平臺(tái)
靶機(jī)部署完成之后,還需要將這些靶機(jī)資源進(jìn)行整合利用,這可以通過在線教學(xué)平臺(tái)來實(shí)現(xiàn).本方案利用原有的Moodle 在線平臺(tái)對(duì)資源進(jìn)行整合,實(shí)現(xiàn)實(shí)踐平臺(tái)和理論教學(xué)的連接.Moodle 主要用于理論學(xué)習(xí),可通過VPL 插件支持在線編程實(shí)踐,但不適合作為主流的實(shí)踐教學(xué)平臺(tái),可充分利用Moodle 豐富的題庫類型對(duì)實(shí)踐進(jìn)行擴(kuò)展,實(shí)現(xiàn)網(wǎng)絡(luò)安全理論學(xué)習(xí)和實(shí)戰(zhàn)技能一體化評(píng)估.
實(shí)現(xiàn)思路是利用Moodle 的“內(nèi)嵌答案完形填空”題型組織題庫,隨后學(xué)生通過身份驗(yàn)證進(jìn)入Moodle平臺(tái)相應(yīng)課程,開啟練習(xí)或作業(yè),獲得靶機(jī)地址和相關(guān)信息,在Moodle 平臺(tái)獲取必要的工具軟件對(duì)靶機(jī)進(jìn)行滲透,并將滲透后獲得的結(jié)果值提交到平臺(tái),完成自動(dòng)評(píng)分.
其他的CTF 平臺(tái)可以完成類似功能,但使用Moodle 平臺(tái)擁有CTF 平臺(tái)不具備的兩點(diǎn)優(yōu)勢:一是Moodle 平臺(tái)可以通過插件與教務(wù)系統(tǒng)實(shí)現(xiàn)賬號(hào)對(duì)接,利用教務(wù)系統(tǒng)賬號(hào)即可登錄Moodle 平臺(tái);二是Moodle 平臺(tái)可以對(duì)題庫隨機(jī)組卷,非常適用于常規(guī)教學(xué).
3.2.4 CTF 平臺(tái)
CTF 即奪旗賽,常用于國際和國內(nèi)各類安全賽項(xiàng)中,CTF 獨(dú)特的挑戰(zhàn)性和趣味性,特別適合作為教學(xué)輔助平臺(tái)[9],用于組隊(duì)競賽、隊(duì)員選拔,可提高學(xué)生興趣和實(shí)戰(zhàn)能力.本方案選用比較成熟的開源CTF 平臺(tái)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/
學(xué)生可以采取組隊(duì)或個(gè)人的形式登錄CTF 平臺(tái)地址進(jìn)行解題,解題獲得的分?jǐn)?shù)也會(huì)實(shí)時(shí)顯示在scoreboard 界面中(見圖4).
網(wǎng)絡(luò)安全攻防實(shí)驗(yàn)環(huán)境部署至今已兩年,已應(yīng)用于PHP安全編程、Web 應(yīng)用安全課程的常規(guī)教學(xué)和信息安全各類競賽訓(xùn)練,為信息安全團(tuán)隊(duì)培養(yǎng)出優(yōu)秀的學(xué)員.2017 年至今,信息安全團(tuán)隊(duì)共獲得國賽一等獎(jiǎng)2 次、二等獎(jiǎng)1次,省賽一等獎(jiǎng)3 次的好成績.
攻防實(shí)驗(yàn)室仍然還存在一些問題,比如靶機(jī)需要一個(gè)穩(wěn)定的團(tuán)隊(duì)持續(xù)開發(fā),尤其是漏洞復(fù)現(xiàn)的時(shí)效性很強(qiáng),此外各個(gè)平臺(tái)之間尚不能實(shí)現(xiàn)無縫連接,比如CTF 平臺(tái)的賬號(hào)系統(tǒng)與教務(wù)系統(tǒng)分離,不利于教學(xué)管理.
圖4 CTF 奪旗賽Top10
針對(duì)傳統(tǒng)網(wǎng)絡(luò)安全實(shí)驗(yàn)室提出了改良方案,經(jīng)過實(shí)踐證明,改良后的實(shí)驗(yàn)環(huán)境已基本滿足教學(xué)和集訓(xùn)需求.未來的研究方向主要在兩點(diǎn):一是通過制度建設(shè)一個(gè)穩(wěn)定的研發(fā)團(tuán)隊(duì);二是考慮與異種平臺(tái)的接洽.