閆 梅
(山西機(jī)電職業(yè)技術(shù)學(xué)院信息工程系 山西 長(zhǎng)治 046001)
隨著新技術(shù)的快速發(fā)展,網(wǎng)絡(luò)作為現(xiàn)代社會(huì)信息傳播的重要途徑,遍布于人們?nèi)粘I畹姆椒矫婷妗H藗冊(cè)谙硎苤W(wǎng)絡(luò)帶給我們方便快捷的同時(shí),網(wǎng)絡(luò)欺詐、隱私泄露等網(wǎng)絡(luò)安全事件時(shí)有發(fā)生,給個(gè)人、公司、國(guó)家的財(cái)產(chǎn)造成損失,網(wǎng)絡(luò)安全越來(lái)越成為不可忽視的問(wèn)題。網(wǎng)絡(luò)安全技術(shù)的快速更新對(duì)人才需求提出更多新的挑戰(zhàn),目前對(duì)網(wǎng)絡(luò)安全從業(yè)人員培養(yǎng)主要依賴于理論課程的學(xué)習(xí),缺乏對(duì)實(shí)際場(chǎng)景下攻防歷練的實(shí)操練習(xí)。在學(xué)習(xí)過(guò)程中,為幫助學(xué)習(xí)者真正理解漏洞形成的原因,需要在真實(shí)的滲透測(cè)試演練系統(tǒng)下展開(kāi)實(shí)操[1]。不同系統(tǒng)環(huán)境下遷移成本高、部署過(guò)程繁瑣、對(duì)本機(jī)系統(tǒng)的影響等問(wèn)題,是搭建滲透測(cè)試平臺(tái)過(guò)程中經(jīng)常遇到的問(wèn)題,Docker作為一種新興的虛擬化技術(shù),其快速的啟動(dòng)時(shí)間、一致的運(yùn)行環(huán)境、快速的交付和部署、輕松的遷移等特點(diǎn)可以較好地解決上述問(wèn)題,為學(xué)習(xí)者提供方便快捷的學(xué)習(xí)環(huán)境。
Docker是一個(gè)開(kāi)源的應(yīng)用容器引擎,開(kāi)發(fā)者可以打包需要的應(yīng)用以及依賴包到一個(gè)可移植的鏡像中,發(fā)布到任何Linux或Windows機(jī)器上。與傳統(tǒng)虛擬技術(shù)最大的不同在于,Docker是在操作系統(tǒng)的基礎(chǔ)上實(shí)現(xiàn)的虛擬技術(shù),相當(dāng)于是宿主機(jī)上一個(gè)普通的進(jìn)程,能夠保證運(yùn)行環(huán)境的一致性,一次配置多次運(yùn)行,不會(huì)出現(xiàn)由于環(huán)境配置不一致引起的開(kāi)發(fā)、測(cè)試問(wèn)題[2]。Docker容器與傳統(tǒng)虛擬機(jī)對(duì)比,見(jiàn)圖1。
圖1 Docker容器與傳統(tǒng)虛擬機(jī)對(duì)比
Docker采用C/S的系統(tǒng)架構(gòu),主要由客戶端、守護(hù)進(jìn)程、容器、鏡像、倉(cāng)庫(kù)組成,見(jiàn)圖2。Docker客戶端作為Docker用戶與Docker交互的主要方式;守護(hù)進(jìn)程運(yùn)行于服務(wù)器端后臺(tái),用于接收客戶端的請(qǐng)求;容器是通過(guò)鏡像來(lái)創(chuàng)建應(yīng)用運(yùn)行的實(shí)例,容器之間相互隔離,互不影響,保證安全的平臺(tái)[3];鏡像是一個(gè)只讀文件,提供了運(yùn)行程序完整的軟硬件資源,可以將鏡像看作是容器的模板,同一個(gè)鏡像文件,可以生成多個(gè)同時(shí)運(yùn)行的容器實(shí)例。
圖2 Docker組成結(jié)構(gòu)圖
Docker的運(yùn)行過(guò)程具體如下。
(1)客戶端通過(guò)執(zhí)行終端命令調(diào)用服務(wù)器端的daemon守護(hù)進(jìn)程。
(2)守護(hù)進(jìn)程向Linux OS請(qǐng)求建立容器。
(3)Linux創(chuàng)建一個(gè)空的容器。
(4)守護(hù)進(jìn)程檢查本機(jī)是否有Docker鏡像文件,若有,加載到容器并完成安裝;若本機(jī)無(wú)Docker鏡像文件,則去倉(cāng)庫(kù)聯(lián)網(wǎng)下載,下載回來(lái)后再進(jìn)行裝載到容器的動(dòng)作[4]。
(5)形成安裝好鏡像文件的容器。
網(wǎng)絡(luò)安全從業(yè)人員在學(xué)習(xí)Web滲透測(cè)試的過(guò)程中,通常會(huì)利用Windows系統(tǒng)下可用的DVWA平臺(tái)進(jìn)行學(xué)習(xí)或者在自己的PC端借助于虛擬機(jī),在虛擬機(jī)上安裝Centos并部署操作環(huán)境[1]。在統(tǒng)一進(jìn)行學(xué)習(xí)或培訓(xùn)的過(guò)程中,機(jī)房電腦帶有還原系統(tǒng),每次課前部署學(xué)習(xí)環(huán)境的過(guò)程比較麻煩,采用Docker技術(shù)實(shí)現(xiàn)的學(xué)習(xí)平臺(tái)搭建具有部署啟動(dòng)速度快,占用空間小的優(yōu)點(diǎn)。如圖3所示,基于Docker的Web滲透測(cè)試平臺(tái)采用B/S的系統(tǒng)架構(gòu),教室機(jī)作為服務(wù)器安裝虛擬機(jī),在虛擬機(jī)上安裝centos的Linux操作系統(tǒng)并利用Docker部署Web滲透測(cè)試平臺(tái),學(xué)生機(jī)通過(guò)瀏覽器打開(kāi)部署好的Web滲透測(cè)試平臺(tái)。
圖3 基于Docker的Web滲透測(cè)試平臺(tái)的設(shè)計(jì)
3.2.1 宿主機(jī)與虛擬機(jī)上Linux系統(tǒng)的連通性配置
使用VMware Workstation 15版本的虛擬機(jī),在新建的虛擬機(jī)上安裝完成Centos 7 64位操作系統(tǒng),為了實(shí)現(xiàn)宿主機(jī)與centos系統(tǒng)之間的通信,需進(jìn)行如下的網(wǎng)絡(luò)配置。
(1)宿主機(jī)的操作。在宿主機(jī)下通過(guò)在命令行窗口中輸入ipconfig命令,查看本機(jī)的IP地址為:172.18.16.200、子網(wǎng)掩碼:255.255.255.0、網(wǎng)關(guān):172.18.16.1。
(2)centos上的操作。默認(rèn)情況下虛擬機(jī)上的系統(tǒng)采用dhcp的方式獲取IP地址,通過(guò)輸入ip a命令查看centos上自動(dòng)獲取的IP地址為192.168.157.131。為了實(shí)現(xiàn)宿主機(jī)與Linux操作系統(tǒng)的連通性,兩者的網(wǎng)段需要保持一致,切換目錄到/etc/sysconfig/network-scripts目錄下,輸入l s命令查看該目錄下存在哪些文件和目錄,見(jiàn)圖4。
圖4 network-scripts目錄下文件
其中,ifcfg-ens33為L(zhǎng)inux操作系統(tǒng)下的網(wǎng)卡配置文件,通過(guò)vim編輯器打開(kāi),修改BOOTPROTO=”static”,同時(shí)在文件后手動(dòng)添加TCP/IP信息,IP地址設(shè)置為IPADDR=172.18.16.222,子網(wǎng)掩碼設(shè)置為NETMASK=255.255.255.0,網(wǎng)關(guān)設(shè)置為GATEWAY=172.18.16.1,保存并退出文件編輯,見(jiàn)圖5。
圖5 網(wǎng)卡配置文件內(nèi)容
(3)vm虛擬機(jī)的配置。打卡虛擬機(jī)下的“虛擬網(wǎng)絡(luò)編輯器”,通過(guò)“更改設(shè)置”,設(shè)置橋接模式橋接至Realtek PCIe GBE Family Controller。
(4)測(cè)試Linux與宿主機(jī)的連通性。Linux操作系統(tǒng)與宿主機(jī)之間相互ping測(cè)試,實(shí)現(xiàn)Linux與宿主機(jī)的連通,見(jiàn)圖6。
圖6 Linux與宿主機(jī)之間的相互測(cè)試
3.2.2 Docker容器的配置
(1)repo文件的定位。選擇國(guó)內(nèi)的源地址http://download.Docker.com/Linux/centos/Docker-ce.repo作為Docker的安裝源,切換目錄到/etc/yum.repos.d目錄下,通過(guò)l s命令可以看到”/etc/yum.repo.d”目錄下的眾多repo文件,見(jiàn)圖7,執(zhí)行yum命令時(shí),會(huì)首先從中取得軟件倉(cāng)庫(kù)的地址并下載“元數(shù)據(jù)”。
圖7 眾多repo文件
(2)使用yum下載并安裝Docker。為避免repo文件的丟失,通過(guò)執(zhí)行 cp ./* /home/back完成對(duì)repo文件的備份。通過(guò)輸入命令#wget https://download.Docker.com/Linux/centos/Docker-ce.repo,在阿里源下載Docker,見(jiàn)圖8。
圖8 Docker源的下載
yum會(huì)把下載的軟件包和header存儲(chǔ)在cache中,使用yum clean命令刪除,然后通過(guò)yum makecache命令將服務(wù)器上的軟件包信息在本地緩存,以提高搜索安裝軟件的速度,見(jiàn)圖9。
圖9 創(chuàng)建本地緩存
(3)Docker的啟用。通過(guò)執(zhí)行#systemctl start Docker #sysrtem status Docker命令,啟用Docker并查看運(yùn)行的狀態(tài),見(jiàn)圖10。
圖10 Docker運(yùn)行狀態(tài)
在查看運(yùn)行狀態(tài)過(guò)程中發(fā)現(xiàn)有一行標(biāo)紅的提示,為了解決此問(wèn)題,我們?cè)?etc/sysconfig/Docker文件設(shè)置-enabled=false關(guān)閉SELinux,重新啟動(dòng)Docker后再次查看運(yùn)行狀態(tài),發(fā)現(xiàn)問(wèn)題得到解決。
3.2.3 Web滲透測(cè)試平臺(tái)的部署
(1)Web滲透測(cè)試平臺(tái)的上傳。通過(guò)xftp軟件連接到目標(biāo)的centos,將Web滲透測(cè)試平臺(tái)環(huán)境的tar包導(dǎo)入到centos系統(tǒng)下的/root目錄下,見(jiàn)圖11。
圖11 Web滲透測(cè)試平臺(tái)環(huán)境的上傳
切換到centos系統(tǒng)下的/root目錄下,查看文件是否上傳成功,通過(guò)ls命令驗(yàn)證文件是否上傳成功。
(2)利用Docker導(dǎo)入平臺(tái)環(huán)境。通過(guò)執(zhí)行#dokcer load
圖12 平臺(tái)環(huán)境的導(dǎo)入
(3)利用Docker啟用Web滲透測(cè)試環(huán)境。通過(guò)執(zhí)行#Docker run -d -p 8001:80 dcn-anhui命令,在后臺(tái)運(yùn)行Docker容器通過(guò)參數(shù)-p映射端口號(hào)8001,滲透平臺(tái)環(huán)境啟動(dòng)成功,見(jiàn)圖13。
圖13 平臺(tái)的啟動(dòng)
教師機(jī)打開(kāi)本地瀏覽器,在地址欄中輸入centso的IP地址及映射的容器端口號(hào),http://172.18.16.222:8001,成功訪問(wèn)Web滲透測(cè)試平臺(tái),見(jiàn)圖14。
圖14 訪問(wèn)Web滲透測(cè)試平臺(tái)
學(xué)生機(jī)在局域網(wǎng)內(nèi)訪問(wèn)教師機(jī)上的Web滲透測(cè)試平臺(tái)時(shí)出現(xiàn)無(wú)法訪問(wèn)的情況,需要在教師機(jī)虛擬機(jī)下Linux操作系統(tǒng)/etc/sysctl.conf文件中添加net.ipv4.ip_forward=1開(kāi)啟centos7 ip轉(zhuǎn)發(fā),見(jiàn)圖15,學(xué)生機(jī)成功訪問(wèn)Web滲透測(cè)試平臺(tái)。
圖15 開(kāi)啟centos ip轉(zhuǎn)發(fā)
針對(duì)學(xué)習(xí)者在搭建學(xué)習(xí)環(huán)境平臺(tái)中遇到的問(wèn)題,基于Docker技術(shù)搭建Web滲透測(cè)試平臺(tái),簡(jiǎn)化了學(xué)習(xí)者的操作難度,學(xué)習(xí)者只要通過(guò)瀏覽器即可訪問(wèn)服務(wù)器端的資源,提高了學(xué)習(xí)的效率。