黃君陽(yáng),莫永華
(桂林電子科技大學(xué)信息科技學(xué)院,桂林 541004)
互聯(lián)網(wǎng)飛速發(fā)展的同時(shí),信息化安全與國(guó)家安全緊密相連,培養(yǎng)網(wǎng)絡(luò)安全技術(shù)優(yōu)秀人才,滿足互聯(lián)網(wǎng)發(fā)展需要。在網(wǎng)絡(luò)安全人才培養(yǎng)方面,單靠理論學(xué)習(xí)不能滿足實(shí)踐應(yīng)用的需要,一種奪旗賽的實(shí)踐形式適應(yīng)了專業(yè)培養(yǎng)網(wǎng)絡(luò)安全人才發(fā)展。CTF(Capture The Flag)網(wǎng)絡(luò)攻防競(jìng)賽在網(wǎng)絡(luò)安全領(lǐng)域中是網(wǎng)絡(luò)安全技術(shù)人員之間進(jìn)行技術(shù)競(jìng)技的一種比賽形式。其比賽大致流程是,參賽團(tuán)隊(duì)之間通過(guò)進(jìn)行攻防對(duì)抗、程序分析等形式,率先從主辦方給出的比賽環(huán)境中得到一串具有一定格式的字符串或其他內(nèi)容,并將其提交給主辦方,從而奪得分?jǐn)?shù)?,F(xiàn)在CTF比賽培養(yǎng)網(wǎng)絡(luò)安全人才的方式漸漸在國(guó)內(nèi)發(fā)展起來(lái)了,此類比賽能夠發(fā)掘網(wǎng)絡(luò)安全優(yōu)秀人才,并幫助其迅速提高安全技能。
國(guó)外目前對(duì)于CTF競(jìng)賽平臺(tái)的主流研究采取攻防(Attack-Defense)的賽制,這種賽制已經(jīng)日漸成熟,很多國(guó)際比賽都采用這樣的賽制,在比賽日程內(nèi)讓參賽選手相互進(jìn)行漏洞挖掘及利用,采取攻擊來(lái)奪取對(duì)方靶機(jī)的Flag并贏得相應(yīng)的積分,同時(shí)還要采取不違反比賽規(guī)則的各種手段對(duì)自己的靶機(jī)進(jìn)行防御,防止對(duì)方奪取到己方的Flag。國(guó)內(nèi)許多CTF線下賽平臺(tái)被各大安全服務(wù)產(chǎn)商用于商業(yè)意義及人才儲(chǔ)備計(jì)劃所開(kāi)發(fā),雖然已有較為穩(wěn)定的技術(shù),但他們?nèi)杂胁蛔愕姆矫妫?/p>
(1)價(jià)格普遍過(guò)高;
(2)平臺(tái)復(fù)雜程度不利于后期變動(dòng)及維護(hù);
(3)漏洞靶機(jī)不便于還原及維護(hù)。
針對(duì)以上這些問(wèn)題,本文主要任務(wù)有:
(1)控制開(kāi)發(fā)成本,基于網(wǎng)頁(yè)來(lái)開(kāi)發(fā)整個(gè)平臺(tái);
(2)簡(jiǎn)化平臺(tái)復(fù)雜程度,提高平臺(tái)運(yùn)行能力且方便后期管理及維護(hù);
(3)漏洞靶機(jī)采用Docker這類虛擬化技術(shù),使得靶機(jī)在崩潰的情況下方便及時(shí)采取還原措施。根據(jù)需求設(shè)計(jì)網(wǎng)絡(luò)攻防競(jìng)賽需求具體如下圖:
功能需求說(shuō)明如下:
登錄模塊:常規(guī)的登錄功能;
參賽選手操作模塊:用于參賽選手登陸之后的相關(guān)操作頁(yè)面;
管理員操作模塊:用于管理員登陸之后的相關(guān)操作頁(yè)面;
Flag提交模塊:用于參賽選手提交Flag獲取積分;
團(tuán)隊(duì)管理模塊:用于管理員對(duì)參賽團(tuán)隊(duì)進(jìn)行相關(guān)操作;
公告板板模塊:用于管理員在比賽中發(fā)表相關(guān)信息;
積分榜模塊:用于參賽選手在比賽中查看當(dāng)前積分榜;
展示模塊:用于展示頁(yè)面向大眾展示信息。
圖1 系統(tǒng)功能需求
(1)服務(wù)器端環(huán)境:能夠運(yùn)行VMware等虛擬化程序,且在上面安裝能夠運(yùn)行PHP解析程序及支持平臺(tái)系統(tǒng)的Web服務(wù)器軟件的相應(yīng)的服務(wù)器系統(tǒng)的計(jì)算機(jī)或服務(wù)器。
(2)靶機(jī)環(huán)境:對(duì)于靶機(jī)環(huán)境,能夠使用Docker等虛擬化程序及支持其軟件的計(jì)算機(jī)或服務(wù)器。
(3)參賽選手環(huán)境:對(duì)于參賽選手的環(huán)境沒(méi)有限制,由選手自行選擇。
在服務(wù)器端主要采用PHP語(yǔ)言及其中的Laravel框架來(lái)編寫(xiě)相應(yīng)功能模塊,結(jié)合前端HTML5+CSS3技術(shù),引用了JavaScript和其中的jQuery框架,使本系統(tǒng)實(shí)現(xiàn)了一個(gè)良好美觀的操作界面及展示界面。
功能模塊的設(shè)計(jì)主要分為三個(gè)模塊,1.參賽選手相關(guān)操作模塊;2.管理員相關(guān)操作模塊;3.無(wú)需登錄即可使用的展示模塊。
(1)在參賽選手相關(guān)操作模塊中,包含以下功能:
a.查看當(dāng)前輪次得失積分;
b.提交Flag獲取積分;
c.查看己隊(duì)靶機(jī)信息
(2)在管理員相關(guān)操作模塊中,包含以下功能:
a.管理團(tuán)隊(duì):添加新團(tuán)隊(duì);刪除一個(gè)團(tuán)隊(duì);修改團(tuán)隊(duì)密碼;團(tuán)隊(duì)加分減分
b.發(fā)布公告:發(fā)布扣除違規(guī)團(tuán)隊(duì)相應(yīng)積分信息;發(fā)布Tips等公告信息
(3)在展示模塊中,包含以下功能:
a.實(shí)時(shí)積分榜,實(shí)時(shí)更新參賽團(tuán)隊(duì)積分變化
b.顯示當(dāng)前時(shí)間及當(dāng)前輪次
c.實(shí)時(shí)顯示攻擊信息
數(shù)據(jù)庫(kù)設(shè)計(jì)遵循命名規(guī)范化和數(shù)據(jù)標(biāo)準(zhǔn)化的原則。
本課題中,一共有announce,users,points,check,dockers,flags六個(gè)數(shù)據(jù)庫(kù)表。下面主要介紹核心4個(gè)表。
(1)公告表(Announce)
它主要存儲(chǔ)id標(biāo)識(shí)、公告的標(biāo)題(title)、公告內(nèi)容(body)、創(chuàng)建時(shí)間(created_at)。
表1 Announce表
(2)用戶表(users)
它主要存儲(chǔ)id標(biāo)識(shí)、用戶名(name)、參賽團(tuán)隊(duì)密碼(password)、管理員標(biāo)識(shí)(isAdmin)。
表2 Users表
(3)團(tuán)隊(duì)積分表(points)
它主要存儲(chǔ) id標(biāo)識(shí)、團(tuán)隊(duì) id(team_id)、分?jǐn)?shù)(points)信息。
表3 Points表
(4)flags表
它主要存儲(chǔ) id標(biāo)識(shí),靶機(jī) id(docker_id)、flag信息。
表4 Flags表
系統(tǒng)有兩大部分組成:前臺(tái)部分用戶操作模塊和后臺(tái)部分管理模塊。
(1)登錄模塊
團(tuán)隊(duì)賬號(hào)由管理員添加,在平臺(tái)主界面右上角可以看到Login登錄按鈕。管理員與團(tuán)隊(duì)使用同一個(gè)登錄模塊,在用戶登錄之后,用戶表(users)中有isAdmin標(biāo)識(shí),若isAdmin為1,此用戶為管理員,可進(jìn)入后臺(tái)管理頁(yè)面進(jìn)行管理的相關(guān)操作;反之,參賽團(tuán)隊(duì)用戶只能進(jìn)行查看隊(duì)伍信息、公告板、積分板及提交flag操作。
(2)參賽選手登陸后信息模塊
參賽選手用戶登陸后,頁(yè)面將跳轉(zhuǎn)到信息頁(yè)面,此頁(yè)面將輸出己方團(tuán)隊(duì)的總分,包括加分及減分;還有在當(dāng)前輪次中,己方團(tuán)隊(duì)的總分,包括加分及減分;還輸出己方團(tuán)隊(duì)所擁有的靶機(jī)ip、用戶名、密碼信息;最后此頁(yè)面還有提交flag的功能。
(3)公告板頁(yè)面
競(jìng)賽進(jìn)行過(guò)程中,若出現(xiàn)參賽團(tuán)隊(duì)進(jìn)行了違規(guī)的相關(guān)操作,或是遇到需要比賽主辦方發(fā)表相應(yīng)提示或其他相關(guān)信息的情況,則管理員將會(huì)通過(guò)公告板,向參賽選手發(fā)布通知等信息。
管理員輸入公告標(biāo)題(title),內(nèi)容(body),點(diǎn)擊確認(rèn)發(fā)送后,后端獲取當(dāng)前服務(wù)器時(shí)間信息與公告標(biāo)題、公告內(nèi)容一起寫(xiě)入數(shù)據(jù)庫(kù)Announcement表中,最后在公告板頁(yè)面按最新更新時(shí)間排序后輸出。
(4)積分板模塊
積分板模塊是讓參賽選手在比賽進(jìn)行過(guò)程中方便在本機(jī)查看所有參賽團(tuán)隊(duì)積分的同時(shí),還能夠進(jìn)行別的操作。
積分板將取出當(dāng)前數(shù)據(jù)庫(kù)中分?jǐn)?shù)(points)表的數(shù)據(jù),并在后端進(jìn)行排序后輸出給前端與用戶交互。
圖2 參賽選手登錄頁(yè)面
圖3 選手登錄后信息頁(yè)面
圖4 參賽團(tuán)隊(duì)積分展示
由于整個(gè)PHP后端使用了Laravel框架,雖然使得開(kāi)發(fā)效率大大提高,難度降低,但同時(shí)也使得一些模塊的功能代碼嵌入在框架中,較難去閱讀或是修改。
后臺(tái)模塊包括:團(tuán)隊(duì)管理模塊、提交Flag系統(tǒng)自動(dòng)統(tǒng)計(jì)模塊、公告發(fā)布模塊。下面主要介紹團(tuán)隊(duì)管理模塊。
管理員登錄之后,可以在管理頁(yè)面對(duì)參賽團(tuán)隊(duì)進(jìn)行管理操作。管理頁(yè)面首先將讀取數(shù)據(jù)庫(kù)分?jǐn)?shù)表中參賽團(tuán)隊(duì)的分?jǐn)?shù),并定義了一個(gè)teamIndex()函數(shù),用來(lái)顯示所有參賽團(tuán)隊(duì)當(dāng)前的總分。以及給每個(gè)參賽隊(duì)設(shè)立了更改密碼及刪除團(tuán)隊(duì)的按鈕。更改團(tuán)隊(duì)賬號(hào)密碼,定義了一個(gè) teamChpw(Request$request)函數(shù),并且由于基本的安全性考慮,限定方法只能為POST方法。同樣,添加新團(tuán)隊(duì),刪除某個(gè)團(tuán)隊(duì)也是限定POST方法。點(diǎn)擊某支團(tuán)隊(duì)的更改密碼按鈕,將會(huì)直接要求輸入新密碼,函數(shù)先將新密碼Hash后對(duì)數(shù)據(jù)庫(kù)用戶表里的password字段進(jìn)行update更新操作,最后將在管理頁(yè)面輸出修改成功的信息。添加一支新團(tuán)隊(duì),管理頁(yè)面將彈出輸入界面,要求輸入團(tuán)隊(duì)用戶名及密碼,輸入之后,函數(shù)teamAdd(Request$request)將團(tuán)隊(duì)名及密碼寫(xiě)入數(shù)據(jù)庫(kù)users表中存儲(chǔ),最后在管理頁(yè)面同樣會(huì)顯示添加成功的信息。以下給出添加團(tuán)隊(duì)功能核心代碼:
漏洞靶機(jī)采用Docker虛擬化技術(shù),使得靶機(jī)在崩潰的情況下方便及時(shí)采取還原措施。網(wǎng)絡(luò)攻防競(jìng)賽系統(tǒng)開(kāi)發(fā)基于網(wǎng)頁(yè)實(shí)現(xiàn)整個(gè)平臺(tái)功能,簡(jiǎn)化平臺(tái)復(fù)雜程度,提高平臺(tái)運(yùn)行能力且方便后期管理及維護(hù),這樣的輕型網(wǎng)絡(luò)安全技術(shù)人才培養(yǎng)平臺(tái),滿足網(wǎng)絡(luò)安全技術(shù)訓(xùn)練與比賽。
[1]李秋香.國(guó)外網(wǎng)絡(luò)靶場(chǎng)技術(shù)現(xiàn)狀及啟示[A].第29次全國(guó)計(jì)算機(jī)安全學(xué)術(shù)交流會(huì)論文集[C],2014.
[2]曾金龍等著.Docker開(kāi)發(fā)實(shí)踐[M].人民郵電出版社,2015-07-01.
[3]Bartosz Porebski等著.PHP框架高級(jí)編程[M].清華大學(xué)出版社,2012-2.