



摘要:Web安全技術(shù)課程實(shí)踐性強(qiáng),對(duì)學(xué)生漏洞檢測(cè)和修復(fù)能力要求高。為提升學(xué)生實(shí)踐能力,傳統(tǒng)實(shí)驗(yàn)教學(xué)模式需安排大量實(shí)驗(yàn)任務(wù),以幫助學(xué)生理解Web攻擊原理和漏洞成因。文章研究并構(gòu)建了基于“公有云+容器云”技術(shù)的Web安全攻防仿真平臺(tái),該平臺(tái)可快速部署、靈活配置,具有低成本、高并發(fā)等優(yōu)勢(shì),為實(shí)踐教學(xué)提供有力支撐。
關(guān)鍵詞:公有云;Docker;容器云;網(wǎng)絡(luò)安全;仿真平臺(tái)
中圖分類號(hào):TP393" " " " 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2025)17-0084-03
開(kāi)放科學(xué)(資源服務(wù)) 標(biāo)識(shí)碼(OSID)
0 引言
傳統(tǒng)網(wǎng)絡(luò)安全實(shí)踐教學(xué)環(huán)境基本以封閉環(huán)境為主,存在場(chǎng)地受限、規(guī)模受限、時(shí)間受限等問(wèn)題,此外,設(shè)備管理復(fù)雜,教學(xué)成本往往較高[1]。現(xiàn)階段,國(guó)內(nèi)各個(gè)高校的網(wǎng)絡(luò)安全實(shí)驗(yàn)仿真平臺(tái)主要基于以下兩種方式搭建:1) 利用KVM、VMware等虛擬化技術(shù)搭建虛擬的網(wǎng)絡(luò)安全實(shí)驗(yàn)環(huán)境[2-3];2) 基于Docker的網(wǎng)絡(luò)安全實(shí)驗(yàn)平臺(tái)[4-5]。
KVM、VMware等虛擬化技術(shù)是在物理主機(jī)的基礎(chǔ)上,虛擬出若干臺(tái)虛擬機(jī)。每臺(tái)虛擬機(jī)運(yùn)行在虛擬機(jī)管理系統(tǒng)(Hypervisor) 上,擁有獨(dú)立的CPU、內(nèi)存、硬盤、操作系統(tǒng)等,能夠像真實(shí)計(jì)算機(jī)一樣進(jìn)行各種操作。但是,其缺點(diǎn)也非常明顯,主要是服務(wù)器配置要求較高,因?yàn)樘摂M機(jī)運(yùn)行需要較大的硬件資源。虛擬機(jī)占用磁盤空間非常大,可達(dá)數(shù)GB;啟動(dòng)速度慢,需幾分鐘;最多只能運(yùn)行幾十個(gè)虛擬機(jī),并發(fā)性小;性能遜于宿主機(jī);資源利用率低[6]。
基于Docker的平臺(tái)是將應(yīng)用程序及其依賴打包生成一個(gè)鏡像文件,運(yùn)行該鏡像文件即可生成一個(gè)容器。容器之間互相隔離,互不影響,能夠快速重建和銷毀。Docker容器提供了一種輕量化的虛擬化方式,程序在容器里運(yùn)行,如同運(yùn)行在真實(shí)的物理機(jī)上。與虛擬機(jī)相比,Docker具有諸多優(yōu)勢(shì),如圖1所示。Docker啟動(dòng)速度快,基本屬于秒級(jí);占用空間小,一般為MB級(jí)別,甚至小至幾十KB;在單一機(jī)器上能啟動(dòng)更多數(shù)量的容器,一臺(tái)宿主機(jī)可以啟動(dòng)成百上千個(gè)容器;直接運(yùn)行在宿主機(jī)的內(nèi)核上,不同容器共享一個(gè)Linux內(nèi)核,性能接近宿主機(jī)本地進(jìn)程;資源利用率高[7]。
然而,與虛擬機(jī)相比,Docker的隔離性較弱。Docker屬于進(jìn)程之間的隔離,而虛擬機(jī)可實(shí)現(xiàn)系統(tǒng)級(jí)別隔離。由于Docker無(wú)法實(shí)現(xiàn)與宿主機(jī)的高安全隔離,因此相比KVM等虛擬化方案,其安全性較差[8]。Docker的租戶root和宿主機(jī)root等同,一旦容器內(nèi)的用戶從普通用戶權(quán)限提升為root權(quán)限,它就直接具備了宿主機(jī)的root權(quán)限,進(jìn)而可進(jìn)行無(wú)限制的操作。
Web安全技術(shù)課程實(shí)踐教學(xué)如果只使用虛擬機(jī)技術(shù),會(huì)存在資源利用率低等局限。如果只使用Docker技術(shù),則學(xué)生需要自行安裝Linux操作系統(tǒng)、搭建Docker相關(guān)的實(shí)驗(yàn)環(huán)境。針對(duì)此問(wèn)題,基于公有云可以在很大程度上有效解決。本文提出了一種基于“公有云+容器云”技術(shù)的Web安全攻防仿真平臺(tái)構(gòu)建方案,旨在利用Docker技術(shù)輕量化、快速部署、資源利用率高的特性以及公有云的配置靈活、成本低、可擴(kuò)展性高、使用便捷等優(yōu)勢(shì)[9-10],更好地提高實(shí)踐教學(xué)質(zhì)量。
1 公有云與云服務(wù)器概述
公有云的核心屬性是共享資源服務(wù),通常指第三方提供商為用戶提供的云服務(wù),具有可通過(guò)Internet使用、使用成本較低、可拓展性高的特點(diǎn)。目前,國(guó)內(nèi)公有云服務(wù)提供商主要有騰訊云、華為云、阿里云、百度云等。云服務(wù)器(Elastic Compute Service, ECS) 是一種簡(jiǎn)單高效、安全可靠、處理能力可彈性伸縮的計(jì)算服務(wù)。購(gòu)買云服務(wù)器時(shí),可按需定制并快速部署。使用云服務(wù)器時(shí),與操作自己的本地計(jì)算機(jī)沒(méi)有區(qū)別[11]。
2 基于“公有云+容器云”技術(shù)的Web安全攻防仿真平臺(tái)構(gòu)建
從騰訊云購(gòu)買云服務(wù)器用于部署靶機(jī),容器云基于Docker容器技術(shù)。
2.1 配置云服務(wù)器
1) 從騰訊云公有云平臺(tái)購(gòu)買云服務(wù)器,選擇合適的自定義配置(例如騰訊云SA2.MEDIUM2、按量計(jì)費(fèi)、50G 硬盤、預(yù)裝公共鏡像 CentOS7.5 64) ,并開(kāi)啟必要的端口(22, 80, 8080, 443, 3389) ,如圖2所示。
2) 為云服務(wù)器安裝docker-ce,在etc/docker/daemon.json中設(shè)置Docker國(guó)內(nèi)騰訊云鏡像加速網(wǎng)址https://ccr.ccs.tencentyun.com/。
2.2 部署靶機(jī)
遠(yuǎn)程登錄購(gòu)買的云服務(wù)器,在服務(wù)器上部署Web安全漏洞實(shí)驗(yàn)環(huán)境。
1) 基于鏡像部署,下面以著名的dvwa為例說(shuō)明靶機(jī)環(huán)境的構(gòu)建。執(zhí)行命令docker search dvwa搜索鏡像倉(cāng)庫(kù)中的相關(guān)鏡像,比如返回citizenstig/dvwa。先用命令docker pull拉取鏡像到本地,再用docker images命令查看已下載鏡像。用docker run -d --name dvwa -p 8080:80 citizenstig/dvwa命令啟動(dòng)鏡像生成新的容器,-d表示后臺(tái)運(yùn)行,--name 為容器命名為 dvwa,-p將容器80號(hào)端口映射到主機(jī)的8080號(hào)端口。
在瀏覽器中輸入云服務(wù)器提供的公網(wǎng)IP及端口號(hào)8080,可訪問(wèn)dvwa漏洞系統(tǒng),接著初始化數(shù)據(jù)庫(kù),即可完成dvwa部署,如圖3所示。
2) 基于源碼部署,下面仍以著名的dvwa為例說(shuō)明靶機(jī)環(huán)境的構(gòu)建。用命令docker pull 拉取鏡像nginx:1.9、mysql:5.7.25、php:7.3-fpm到本地。
執(zhí)行docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7.25,docker run --name php7 --privileged=true -v ~/nginx/www:/www -d php:7.3-fpm,docker run --name nginx --privileged=true -p 80:80 -v ~/nginx/www:/usr/share/nginx/html -v ~/nginx/conf:/etc/nginx/conf.d -v ~/nginx/logs:/var/log/nginx --link php7:php -d nginx:1.9三條命令分別創(chuàng)建mysql、php7、nginx容器。其中,目錄~/nginx/www、~/nginx/logs、~/nginx/conf是容器nginx映射到主機(jī)的目錄,運(yùn)行鏡像前需要先創(chuàng)建。在~/nginx/conf目錄下新建test-php.conf文件并配置,以使nginx支持php,內(nèi)容如下:
server {
listen" 80;
server_name" localhost;
location / {
root" "/usr/share/nginx/html;
index" index.html index.htm index.php;}
error_page" "500 502 503 504" /50x.html;
location = /50x.html {
root" "/usr/share/nginx/html;}
location ~ \.php$ {
fastcgi_pass" "php:9000;
fastcgi_index" index.php;
fastcgi_param" SCRIPT_FILENAME" "/www/$fastcgi_ script_name;
include" " " " fastcgi_params;}
}
執(zhí)行命令docker exec -it mysql /usr/bin/mysql -uroot -p123456,進(jìn)入容器mysql內(nèi),通過(guò)命令create database dvwa創(chuàng)建數(shù)據(jù)庫(kù)dvwa。執(zhí)行命令docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql查詢?nèi)萜鱩ysql的IP,比如查詢結(jié)果返回172.17.0.2。上傳應(yīng)用源碼dvwa到~/nginx/www下,修改配置文件~/nginx/www/dvwa/config.inc.php中的數(shù)據(jù)庫(kù)連接參數(shù)DVWA['db_server'] = '172.17.0.2'。
一開(kāi)始在瀏覽器中,通過(guò)云服務(wù)器IP/dvwa訪問(wèn)dvwa漏洞系統(tǒng),可能出現(xiàn)php連接mysql報(bào)錯(cuò)。問(wèn)題解決方法:進(jìn)入容器php的目錄/usr/local/bin,執(zhí)行命令docker-php-ext-install mysqli安裝mysqli擴(kuò)展,修改PHP function allow_url_include: Disabled的狀態(tài)為Enabled,編輯容器php的配置文件php.ini,把a(bǔ)llow_url_include的值修改為On。如果運(yùn)行時(shí)報(bào)錯(cuò)could not find driver,則進(jìn)入容器php的目錄/usr/local/bin,執(zhí)行命令docker-php-ext-install pdo pdo_mysql安裝pdo和pdo_mysql擴(kuò)展,編輯容器php的配置文件php.ini,開(kāi)啟擴(kuò)展extension=mysqli及extension=pdo_mysq。dvwa部署結(jié)果如圖3所示。
3) 靶機(jī)兩種部署方式的對(duì)比。所舉例子的共同點(diǎn)在于,靶機(jī)以Web程序的形式為學(xué)生提供實(shí)驗(yàn)操作環(huán)境。基于鏡像的部署方式更為簡(jiǎn)單,只需一個(gè)鏡像即可,但前提是需要搜索或制作漏洞平臺(tái)鏡像。許多開(kāi)源漏洞平臺(tái)鏡像已存在于倉(cāng)庫(kù)中,例如sqli-labs是一個(gè)專業(yè)的SQL注入練習(xí)平臺(tái)。執(zhí)行命令docker search sqli-labs即可查找到對(duì)應(yīng)的鏡像,然后基于該鏡像部署靶機(jī)。基于源碼的部署方式則需要拉取mysql、php7、nginx三個(gè)鏡像并啟動(dòng)為容器,然后將Web漏洞平臺(tái)應(yīng)用源碼部署到容器中運(yùn)行。此方式的配置過(guò)程相對(duì)復(fù)雜,且容易出錯(cuò)。許多Web漏洞平臺(tái)應(yīng)用源碼可以在國(guó)外開(kāi)源倉(cāng)庫(kù)(如https://github.com) 或國(guó)內(nèi)開(kāi)源倉(cāng)庫(kù)(如https://gitee.com/) 中找到并下載。基于源碼的部署方式相對(duì)更靈活,無(wú)需制作鏡像,修改也更為方便,因?yàn)樵趯eb應(yīng)用部署到容器的過(guò)程中是分步進(jìn)行的,出現(xiàn)錯(cuò)誤時(shí)更容易解決。同時(shí),只要任何Web應(yīng)用存在Web漏洞,都可以部署成靶機(jī),從而拓展了靶機(jī)的來(lái)源。基于源碼的部署方式經(jīng)測(cè)試無(wú)誤后,可通過(guò)Dockerfile構(gòu)建新鏡像,然后使用新鏡像基于鏡像進(jìn)行部署。
4) 利用騰訊容器鏡像服務(wù)可以優(yōu)化鏡像的拉取與推送,并且還可以將鏡像分享給他人。在騰訊云控制臺(tái)中,選擇云產(chǎn)品,然后選擇容器鏡像服務(wù),進(jìn)入容器鏡像服務(wù)控制臺(tái),按照界面提示開(kāi)通容器鏡像服務(wù)并為其授權(quán)。創(chuàng)建命名空間及鏡像倉(cāng)庫(kù)后,即可向鏡像倉(cāng)庫(kù)內(nèi)推送及拉取鏡像。在容器鏡像服務(wù)控制臺(tái)中,還可以利用騰訊云提供的公有鏡像進(jìn)行下載。圖4為已成功推送的鏡像。
2.3 使用靶機(jī)
1) 為云服務(wù)器創(chuàng)建自定義鏡像,作為基礎(chǔ)鏡像。在面向班級(jí)的實(shí)驗(yàn)教學(xué)過(guò)程中,可以基于該基礎(chǔ)鏡像共享給學(xué)生,讓學(xué)生自主部署Web安全漏洞實(shí)驗(yàn)環(huán)境;也可以由教師直接基于該基礎(chǔ)鏡像創(chuàng)建50臺(tái)云服務(wù)器供學(xué)生使用(開(kāi)通完成后,將云服務(wù)器的公網(wǎng)IP分配給學(xué)生) 。通過(guò)自定義鏡像,可以快速部署大規(guī)模相同配置的云服務(wù)器,既減輕了教師準(zhǔn)備實(shí)驗(yàn)環(huán)境的負(fù)擔(dān),又為學(xué)生提供了一致的線上實(shí)踐環(huán)境。教師也可以在完成靶機(jī)環(huán)境部署后,再次創(chuàng)建新的自定義鏡像,學(xué)生端只需基于此鏡像重裝系統(tǒng)即可,既快捷又方便。
2) 學(xué)生端連接至云服務(wù)器后,可遠(yuǎn)程進(jìn)行WEB安全類實(shí)驗(yàn)、漏洞滲透類實(shí)驗(yàn)。
3) 連接至云服務(wù)器,學(xué)生端僅需一個(gè)可登錄的終端軟件,一臺(tái)能上網(wǎng)的電腦即可滿足實(shí)驗(yàn)要求,實(shí)驗(yàn)教學(xué)環(huán)境要求較低。
4) 使用云服務(wù)器不受時(shí)間及空間限制,學(xué)生可以反復(fù)、高效地完成實(shí)驗(yàn),直至實(shí)驗(yàn)結(jié)果滿意為止。
5) 為了節(jié)省使用云服務(wù)器的費(fèi)用,學(xué)生在完成實(shí)驗(yàn)后,可以銷毀云服務(wù)器。若想再次使用,只需基于教師提供的靶機(jī)自定義鏡像為新購(gòu)買的云服務(wù)器安裝系統(tǒng)即可。
3 結(jié)束語(yǔ)
本文探討了Docker與傳統(tǒng)虛擬機(jī)技術(shù)的區(qū)別,并基于“公有云+容器云”技術(shù),通過(guò)鏡像部署和源碼部署兩種方式實(shí)現(xiàn)了Web安全攻防仿真平臺(tái)的自主構(gòu)建。相較傳統(tǒng)基于Docker的方案,改進(jìn)之處在于充分利用了公有云服務(wù)器可公網(wǎng)訪問(wèn)、成本低、快速部署、維護(hù)簡(jiǎn)單等特性。自主構(gòu)建的Web安全攻防仿真平臺(tái)已應(yīng)用于實(shí)踐教學(xué)中,效果良好。根據(jù)教學(xué)需求,可靈活部署不同的靶機(jī)。后期可進(jìn)一步測(cè)試更多開(kāi)源的靶機(jī)鏡像和CTF平臺(tái)資源。
參考文獻(xiàn):
[1] 萬(wàn)國(guó)根,鐵玲,陳勇.基于Web的網(wǎng)絡(luò)安全在線實(shí)訓(xùn)平臺(tái)設(shè)計(jì)[J].教育教學(xué)論壇,2020(20):385-387.
[2] 李維.基于VMware的網(wǎng)絡(luò)攻防仿真實(shí)驗(yàn)平臺(tái)的建立[J].現(xiàn)代信息科技,2020,4(10):157-158,161.
[3] 冷濤,王衡.Docker網(wǎng)絡(luò)靶場(chǎng)平臺(tái)的設(shè)計(jì)與構(gòu)建:對(duì)標(biāo)警務(wù)實(shí)戰(zhàn)化大練兵[J].四川警察學(xué)院學(xué)報(bào),2021,33(3):41-46.
[4] 畢曉東.網(wǎng)絡(luò)安全虛擬仿真靶場(chǎng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)時(shí)代,2022(10):29-32.
[5] 劉坤.網(wǎng)絡(luò)攻防與滲透實(shí)驗(yàn)教學(xué)平臺(tái)研究與實(shí)現(xiàn)[J].江蘇科技信息,2021,38(34):61-63.
[6] 李春林,劉正軍,王冶,等.一種改進(jìn)的基于Docker的網(wǎng)絡(luò)安全實(shí)驗(yàn)平臺(tái)構(gòu)建方法[J].通信技術(shù),2019,52(4):927-932.
[7] 鮑洪生.Docker技術(shù)在網(wǎng)絡(luò)安全教學(xué)中的應(yīng)用與研究[J].信息記錄材料,2019,20(9):91-93.
[8] 徐錦韜.虛擬機(jī)、容器與 Docker 技術(shù)對(duì)比[J].科學(xué)與財(cái)富,2016,8(10):364.
[9] 曹敏,蔡博勤.云計(jì)算環(huán)境下《空間數(shù)據(jù)庫(kù)》實(shí)驗(yàn)教學(xué)探討[J].現(xiàn)代測(cè)繪,2019,42(1):62-64.
[10] 傅東亮,謝鋒,楊海洪,等.基于商用公有云的Linux系統(tǒng)管理與應(yīng)用教學(xué)實(shí)踐[J].電子技術(shù)(上海),2022,51(7):38-39.
[11] 吳欽淵,錢裕杰,李元杰,等.Linux教學(xué)仿真實(shí)驗(yàn)平臺(tái)設(shè)計(jì)[J].福建電腦,2021,37(7):164-165.
【通聯(lián)編輯:代影】