



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