陳 辰,張 睿,韓偉力
(復(fù)旦大學(xué) 計(jì)算機(jī)國(guó)家級(jí)實(shí)驗(yàn)教學(xué)示范中心,上海 200433)
當(dāng)前飛速發(fā)展的信息安全技術(shù)和嚴(yán)峻的網(wǎng)絡(luò)安全形勢(shì),都對(duì)高校的信息安全人才培養(yǎng)提出了非常高的挑戰(zhàn)和要求。為了落實(shí)“新工科”建設(shè)[1]的教學(xué)指導(dǎo),培養(yǎng)出卓越的信息安全專業(yè)人才,必須改革當(dāng)前本科生實(shí)驗(yàn)課程的教學(xué)理念和方法,科學(xué)設(shè)計(jì)更加合理、更具挑戰(zhàn)性的實(shí)驗(yàn)內(nèi)容以提高實(shí)驗(yàn)質(zhì)量,成為當(dāng)前教學(xué)改革的重點(diǎn)[2]。
在一般的傳統(tǒng)安全實(shí)驗(yàn)教學(xué)中(如全球應(yīng)用范圍較廣的安全實(shí)驗(yàn)平臺(tái)Seed Labs[3]),平臺(tái)給學(xué)生提供了較完備的攻擊場(chǎng)景,學(xué)生在平臺(tái)上根據(jù)預(yù)設(shè)的漏洞,構(gòu)建攻擊向量,當(dāng)攻破預(yù)設(shè)的系統(tǒng)時(shí),分析實(shí)驗(yàn)過(guò)程和數(shù)據(jù),實(shí)驗(yàn)過(guò)程結(jié)束。
傳統(tǒng)實(shí)驗(yàn)方式的優(yōu)點(diǎn)是實(shí)驗(yàn)過(guò)程易于把控,實(shí)驗(yàn)內(nèi)容較為基礎(chǔ),在引導(dǎo)入門(mén)型的學(xué)習(xí)階段更加適合。但是,在實(shí)踐中也體現(xiàn)出幾點(diǎn)問(wèn)題:①缺乏正向的防御能力培養(yǎng),信息系統(tǒng)安全實(shí)驗(yàn)側(cè)重培養(yǎng)攻擊手段,但學(xué)生沒(méi)有將對(duì)攻擊方法知識(shí)的掌握轉(zhuǎn)化為對(duì)正確防御方法的掌握,這些知識(shí)體系的培養(yǎng)對(duì)于安全技術(shù)人員是極為重要的;②限定場(chǎng)景,攻擊數(shù)據(jù)形式受限,在限定好的場(chǎng)景中實(shí)驗(yàn),學(xué)生對(duì)惡意攻擊數(shù)據(jù)的模式和常見(jiàn)形態(tài)了解不足,知識(shí)掌握不夠全面;③難以調(diào)動(dòng)學(xué)生積極性,當(dāng)面對(duì)求知欲強(qiáng)烈、勇于探索的學(xué)生時(shí),由于實(shí)驗(yàn)過(guò)程受限,不易于發(fā)揮學(xué)生的主觀能動(dòng)性,難以激發(fā)學(xué)生的求知欲和求勝心理,抑制了人才培養(yǎng)的效果。
對(duì)抗式實(shí)驗(yàn)教學(xué)的特點(diǎn)主要有幾點(diǎn):①能力培養(yǎng)全面完整,實(shí)驗(yàn)需要同時(shí)鍛煉學(xué)生的攻擊與防御能力,真正做到攻防結(jié)合,以攻促防;②鍛煉學(xué)生團(tuán)隊(duì)能力,實(shí)驗(yàn)以小組形式完成,鍛煉了學(xué)生團(tuán)隊(duì)協(xié)作能力,使學(xué)生能夠以團(tuán)隊(duì)形式完成更大規(guī)模的實(shí)驗(yàn);③激發(fā)學(xué)生動(dòng)力性,通過(guò)引入學(xué)生小組之間的對(duì)抗攻擊和競(jìng)爭(zhēng),有利于激發(fā)學(xué)習(xí)熱情和動(dòng)力性,形成以學(xué)習(xí)者為中心的教學(xué)模式;④開(kāi)放的實(shí)驗(yàn)場(chǎng)景,淡化實(shí)驗(yàn)內(nèi)容邊界,學(xué)生可以在開(kāi)放的實(shí)驗(yàn)場(chǎng)景中主動(dòng)拓展知識(shí)空間。
對(duì)抗式實(shí)驗(yàn)教學(xué)側(cè)重對(duì)學(xué)生攻防能力兼顧的均衡培養(yǎng),實(shí)驗(yàn)內(nèi)容豐富且挑戰(zhàn)性較高。筆者在實(shí)踐中,要求學(xué)生以3~4 人為一個(gè)實(shí)驗(yàn)小組,互相配合完成實(shí)驗(yàn)任務(wù)。實(shí)驗(yàn)實(shí)施主要分為4 個(gè)階段:①系統(tǒng)構(gòu)建,各小組按照實(shí)驗(yàn)要求在服務(wù)器上設(shè)計(jì)一個(gè)預(yù)定功能程序,然后對(duì)系統(tǒng)做必要的安全防御,教師在軟件設(shè)計(jì)時(shí),可預(yù)設(shè)一些漏洞,以達(dá)到驗(yàn)證攻擊有效性的目的;②攻擊測(cè)試,分析其他小組設(shè)計(jì)應(yīng)用,探索可能存在的漏洞,并針對(duì)性地來(lái)構(gòu)造攻擊向量發(fā)起攻擊;③系統(tǒng)加固,學(xué)生監(jiān)控、分析自己小組的服務(wù)器所受到的攻擊流量,對(duì)程序進(jìn)行加固;④交流總結(jié),各組公開(kāi)設(shè)計(jì)源碼和攻擊方法,交流總結(jié)實(shí)驗(yàn)心得。對(duì)抗式實(shí)驗(yàn)教學(xué)步驟如圖1 所示。
圖1 對(duì)抗式實(shí)驗(yàn)教學(xué)步驟
在一般的攻防比賽中,往往會(huì)預(yù)置多個(gè)類型漏洞。在實(shí)際教學(xué)實(shí)驗(yàn)中,根據(jù)課程要求,可以簡(jiǎn)單地將漏洞類型限制為某個(gè)單一類型,以達(dá)到簡(jiǎn)化實(shí)驗(yàn)場(chǎng)景,聚焦實(shí)驗(yàn)內(nèi)容的目的。
對(duì)抗式實(shí)驗(yàn)的選題非常重要。由于實(shí)驗(yàn)教學(xué)方式的特殊性,所選的主題需要控制好難易程度,主題內(nèi)容要聚焦考核的知識(shí)點(diǎn),這都對(duì)實(shí)驗(yàn)設(shè)計(jì)提出了較高的要求。SQL 注入攻擊在現(xiàn)實(shí)網(wǎng)絡(luò)環(huán)境中的重要性和常見(jiàn)性,使其成為信息系統(tǒng)安全實(shí)驗(yàn)課程的重要組成部分。筆者以SQL 注入實(shí)驗(yàn)為原型,詳細(xì)介紹基于對(duì)抗的實(shí)驗(yàn)方案設(shè)計(jì)。
SQL 注入是一種代碼注入技術(shù),在Web 服務(wù)中,如果在發(fā)送到后端數(shù)據(jù)庫(kù)服務(wù)器的數(shù)據(jù)訪問(wèn)中未正確檢查用戶的輸入,則會(huì)出現(xiàn)此漏洞[4]。
通過(guò)所設(shè)計(jì)的實(shí)驗(yàn)環(huán)節(jié),指導(dǎo)學(xué)生掌握信息系統(tǒng)安全中的SQL 攻擊與防御的理論與實(shí)踐。按照實(shí)驗(yàn)設(shè)計(jì)步驟,學(xué)生依次掌握SQL 注入防御系統(tǒng)構(gòu)建(正向設(shè)計(jì))、惡意注入數(shù)據(jù)構(gòu)造(反向攻擊)、系統(tǒng)防御補(bǔ)強(qiáng)(正向防御)等知識(shí)。
1)系統(tǒng)構(gòu)建。
對(duì)抗式實(shí)驗(yàn)教學(xué)鍛煉學(xué)生正向系統(tǒng)設(shè)計(jì)能力,合理的設(shè)計(jì)Web 系統(tǒng)中對(duì)于數(shù)據(jù)庫(kù)訪問(wèn)的方法,設(shè)計(jì)SQL 操作接口,以及適當(dāng)?shù)姆烙胧┐_保系統(tǒng)安全,如非法字符處理等。
學(xué)生小組根據(jù)預(yù)設(shè)場(chǎng)景要求,設(shè)計(jì)完成一個(gè)簡(jiǎn)單的Web 服務(wù)作為靶標(biāo)系統(tǒng),該系統(tǒng)可通過(guò)Web 頁(yè)面提供用戶訪問(wèn)后臺(tái)數(shù)據(jù)庫(kù),并實(shí)現(xiàn)基本的增加、刪除、修改和查詢等訪問(wèn)操作。在本實(shí)驗(yàn)中,后臺(tái)數(shù)據(jù)庫(kù)包含2 張數(shù)據(jù)表:用戶名和商品信息列表。
數(shù)據(jù)庫(kù)中必須要預(yù)先存儲(chǔ)有指定的數(shù)據(jù)條目。靶標(biāo)系統(tǒng)構(gòu)建結(jié)束后,所有源代碼需要提交并進(jìn)行代碼凍結(jié)。實(shí)驗(yàn)環(huán)境中,操作系統(tǒng)為L(zhǎng)inux、數(shù)據(jù)庫(kù)采用MySQL,構(gòu)建Web 服務(wù)的靶標(biāo)系統(tǒng)設(shè)計(jì)語(yǔ)言可根據(jù)各個(gè)學(xué)校的實(shí)際情況進(jìn)行選擇。
有學(xué)生選擇在對(duì)輸入存在有數(shù)據(jù)庫(kù)關(guān)鍵字進(jìn)行過(guò)濾的操作中存在的漏洞,如發(fā)現(xiàn)有保留字僅刪除一次導(dǎo)致的過(guò)濾方法不嚴(yán)謹(jǐn),或?qū)D(zhuǎn)義字符未做判斷造成漏洞存在。預(yù)設(shè)一個(gè)漏洞的目的是構(gòu)造攻擊的得分點(diǎn)。在實(shí)驗(yàn)中,各小組可根據(jù)課堂講授的理論知識(shí)自由選擇漏洞設(shè)計(jì)方案,一般要求留有的漏洞難度中等、漏洞涉及的知識(shí)范圍大致在授課范圍內(nèi)。
2)攻擊測(cè)試。
鍛煉學(xué)生探索系統(tǒng)漏洞、利用漏洞對(duì)Web系統(tǒng)發(fā)起攻擊的能力。在充分理解的基礎(chǔ)上,各組學(xué)生針對(duì)性地構(gòu)造惡意輸入數(shù)據(jù),完成SQL注入攻擊。成功注入后,對(duì)測(cè)試用例進(jìn)行記錄存檔,并作為實(shí)驗(yàn)文檔的組成部分進(jìn)行提交。將所有的攻擊記錄進(jìn)行整理,形成一個(gè)檢查器,用于系統(tǒng)測(cè)試。在圖2 中,A、B、C 3 個(gè)學(xué)生小組通過(guò)構(gòu)造惡意數(shù)據(jù),在不同小組之間開(kāi)展攻擊。
圖2 實(shí)驗(yàn)環(huán)境:小組之間發(fā)起互相攻擊
3)系統(tǒng)加固。
此階段是為了培養(yǎng)學(xué)生通過(guò)分析系統(tǒng)受到的攻擊數(shù)據(jù)來(lái)加強(qiáng)防御的能力,完成知識(shí)的迭代擴(kuò)展、查漏補(bǔ)缺。收集自己靶標(biāo)環(huán)境實(shí)例所受到的攻擊數(shù)據(jù)和記錄,發(fā)現(xiàn)自己所構(gòu)建并維護(hù)系統(tǒng)的問(wèn)題與缺陷,修復(fù)加固系統(tǒng),從而實(shí)現(xiàn)系統(tǒng)更好的防御SQL 注入攻擊的能力,然后使用上一階段收集到的全部攻擊數(shù)據(jù)進(jìn)行測(cè)試。如果實(shí)驗(yàn)課時(shí)數(shù)充裕,可以做一次攻擊迭代,即各小組重新設(shè)計(jì)攻擊向量,對(duì)其他小組優(yōu)化后的系統(tǒng)再做一次攻擊測(cè)試,以觀察攻擊和防御的效果。
在實(shí)驗(yàn)中,除了預(yù)設(shè)的漏洞之外,學(xué)生經(jīng)常會(huì)發(fā)現(xiàn)一些因自己系統(tǒng)設(shè)計(jì)漏洞而引發(fā)的有效攻擊,此時(shí)就需要對(duì)代碼進(jìn)行加固設(shè)計(jì)。
4)交流總結(jié)。
本階段會(huì)開(kāi)放所有小組提交的程序源代碼,學(xué)生通過(guò)閱讀其他小組的源代碼理解各種防御機(jī)制。通過(guò)交流總結(jié),將不同小組的知識(shí)和經(jīng)驗(yàn)分享,從而達(dá)到迭代式的學(xué)習(xí)目的。學(xué)生在本組學(xué)習(xí)經(jīng)驗(yàn)的基礎(chǔ)上,通過(guò)學(xué)習(xí)其他組的漏洞設(shè)計(jì)思路、攻擊方法、安全防御措施,拓寬了思路,全面鍛煉了攻防能力。
在實(shí)驗(yàn)中,學(xué)生可以通過(guò)分析系統(tǒng)受到的攻擊數(shù)據(jù)來(lái)加強(qiáng)防御能力,從而完成知識(shí)的查漏補(bǔ)缺和擴(kuò)展。學(xué)生根據(jù)受到的攻擊,有針對(duì)性地進(jìn)行系統(tǒng)補(bǔ)強(qiáng),一方面,掌握了更扎實(shí)的攻擊方法,另一方面,提高了系統(tǒng)防御SQL 注入攻擊能力,這對(duì)以后從事正向的系統(tǒng)設(shè)計(jì)具有很好的幫助。
課后總結(jié)對(duì)提高實(shí)驗(yàn)質(zhì)量具有重要作用。學(xué)生在實(shí)驗(yàn)過(guò)程中有了許多經(jīng)驗(yàn)和心得,同時(shí)也探索掌握了許多新的知識(shí),這些都需要課后總結(jié)來(lái)進(jìn)行交流討論。課后總結(jié)一方面是知識(shí)的分享傳遞,另一方面使學(xué)生了解互相之間的能力水平,獲得自我激勵(lì)和被他人認(rèn)同的成就感,體現(xiàn)了對(duì)抗式實(shí)驗(yàn)中包含的合作分享精神。教學(xué)實(shí)踐中發(fā)現(xiàn),學(xué)生對(duì)此環(huán)節(jié)的技術(shù)交流非常積極,討論熱烈。
由于對(duì)抗式實(shí)驗(yàn)的解法具有開(kāi)放性,各小組在直接對(duì)抗競(jìng)爭(zhēng)的激勵(lì)下,會(huì)積極探索嘗試,發(fā)揮空間較大,所以對(duì)實(shí)驗(yàn)效果的評(píng)估需要特別設(shè)計(jì)。所以,筆者為對(duì)抗式實(shí)驗(yàn)教學(xué)設(shè)計(jì)了針對(duì)性的成績(jī)?cè)u(píng)定方案,實(shí)踐表明,該評(píng)定方法能夠準(zhǔn)確表達(dá)學(xué)生的學(xué)習(xí)程度,對(duì)學(xué)生也有很好的激勵(lì)作用。
每個(gè)小組最終實(shí)驗(yàn)成績(jī)由攻擊有效分、攻擊方法分和防御分組成:①基礎(chǔ)攻擊分(20%),攻擊測(cè)試階段,獲得預(yù)設(shè)漏洞的分?jǐn)?shù);②進(jìn)階攻擊分(20%),系統(tǒng)強(qiáng)化階段,重跑所有攻擊向量后的有效攻擊得分,將各小組所提交攻擊數(shù)據(jù)攻擊成功的次數(shù)作為進(jìn)階攻擊得分;③攻擊方法分(20%),每個(gè)小組提交攻擊數(shù)據(jù)樣本,標(biāo)明每條攻擊數(shù)據(jù)的設(shè)計(jì)思路和知識(shí)點(diǎn),并根據(jù)攻擊數(shù)據(jù)的質(zhì)量和涉及的知識(shí)點(diǎn)進(jìn)行評(píng)分;④系統(tǒng)防御分(40%),對(duì)各小組實(shí)現(xiàn)的抗攻擊的防御方法進(jìn)行綜合評(píng)價(jià)給分。
以往學(xué)生在SQL 注入實(shí)驗(yàn)中,能夠掌握基礎(chǔ)的SQL 攻擊向量構(gòu)造方法。對(duì)于系統(tǒng)防御設(shè)計(jì)方法僅限于理解,并不需要實(shí)際動(dòng)手實(shí)踐。
改革實(shí)驗(yàn)前,教學(xué)方法類似于Seed Labs[3]中的SQL 注入實(shí)驗(yàn),學(xué)生對(duì)于一般的攻擊方法能夠達(dá)到中級(jí)掌握程度,對(duì)于復(fù)雜一些的如盲注利用和自動(dòng)化注入攻擊方法不作要求;在防御方法中,對(duì)于過(guò)濾器的設(shè)計(jì)有初步的理解,對(duì)于通過(guò)使用參數(shù)化查詢和對(duì)象關(guān)系映射、轉(zhuǎn)義字符等防御手段,由于不做實(shí)踐要求,所以學(xué)生掌握并不深入。
改革實(shí)驗(yàn)后,學(xué)生對(duì)于攻擊方法的掌握有了全面的提升,甚至有約75%的學(xué)生主動(dòng)學(xué)習(xí)了使用SQLmap 進(jìn)行自動(dòng)化攻擊的方法;在防御方法建設(shè)中,學(xué)生在熟練掌握過(guò)濾器設(shè)計(jì)方法的同時(shí),對(duì)于數(shù)據(jù)庫(kù)系統(tǒng)安全配置(訪問(wèn)控制)、關(guān)閉數(shù)據(jù)庫(kù)錯(cuò)誤提示等也進(jìn)行了較全面的學(xué)習(xí)。表1 對(duì)筆者所帶班級(jí)的32 名學(xué)生成績(jī)?nèi)∷阈g(shù)平均值進(jìn)行統(tǒng)計(jì)(滿分為5 分),
從表1 可以看出,采用新的實(shí)驗(yàn)方法以后,攻擊能力中5 項(xiàng)指標(biāo)的算術(shù)平均分從2.4 提升為4.2,成績(jī)提升幅度為72.6%,防御能力的平均分更是從以前的1.9 提升為4.35。學(xué)生成績(jī)統(tǒng)計(jì)表明了對(duì)抗式實(shí)驗(yàn)教學(xué)方法的有效性,不但在攻擊能力上提升明顯,對(duì)以前薄弱的防御能力也得到了很好的鍛煉。
表1 學(xué)生掌握知識(shí)點(diǎn)比較
1)實(shí)驗(yàn)內(nèi)容準(zhǔn)備。
在課程教學(xué)中,筆者還設(shè)計(jì)了文件上傳漏洞攻擊、棧溢出攻擊、弱口令攻擊和數(shù)據(jù)隱寫(xiě)等若干典型的安全實(shí)驗(yàn)。在實(shí)驗(yàn)設(shè)計(jì)中發(fā)現(xiàn),已有的實(shí)驗(yàn)內(nèi)容并不能簡(jiǎn)單地移植到對(duì)抗式實(shí)驗(yàn)教學(xué)模式來(lái)完成。開(kāi)放的實(shí)驗(yàn)過(guò)程,注重學(xué)生自我激勵(lì)、主動(dòng)探索的教學(xué)理念,小組間競(jìng)爭(zhēng)對(duì)抗的方法,迭代式的知識(shí)發(fā)現(xiàn),這些因素都對(duì)教師的實(shí)驗(yàn)選題、過(guò)程把控、實(shí)驗(yàn)結(jié)果分析總結(jié)等能力提出了更高的要求。
在實(shí)驗(yàn)中,筆者體會(huì)到必要的正向開(kāi)發(fā)環(huán)節(jié)對(duì)學(xué)生的學(xué)習(xí)至關(guān)重要。為了啟發(fā)學(xué)生思路,減少不必要的工作量,可以提供事先準(zhǔn)備好的若干代碼模板、數(shù)據(jù)記錄器、效果驗(yàn)證器等一些必要,但是非核心功能組件供學(xué)生參考使用,由學(xué)生完成在模板基礎(chǔ)上的二次開(kāi)發(fā),提高開(kāi)發(fā)效率。
2)教師指導(dǎo)的重要性。
在實(shí)驗(yàn)結(jié)束后筆者對(duì)學(xué)生進(jìn)行了實(shí)驗(yàn)效果匿名問(wèn)卷調(diào)查,其中在“影響實(shí)驗(yàn)效果的外部因素”一題中,81%的同學(xué)選擇了指導(dǎo)教師的專業(yè)輔導(dǎo),19%的同學(xué)選擇了實(shí)驗(yàn)平臺(tái)與環(huán)境。此外,學(xué)生普遍反饋在自我激勵(lì)學(xué)習(xí)過(guò)程中,同樣非常需要教師的幫助和專業(yè)指導(dǎo)。調(diào)研數(shù)據(jù)顯示,由于實(shí)驗(yàn)的開(kāi)放性,對(duì)指導(dǎo)教師的業(yè)務(wù)能力提出了更高的要求,教師需要在熟悉基本實(shí)驗(yàn)內(nèi)容情況下,對(duì)學(xué)生提出一些以往認(rèn)為“超綱”的問(wèn)題也能做出及時(shí)、準(zhǔn)確的指導(dǎo)。
由于信息安全類課程自身特點(diǎn),傳統(tǒng)實(shí)驗(yàn)對(duì)于攻擊方法非常重視,容易將攻擊方法與正向安全防御設(shè)計(jì)割裂開(kāi),對(duì)安全防御設(shè)計(jì)的方法無(wú)法得到實(shí)踐鍛煉。通過(guò)本文的對(duì)抗式實(shí)驗(yàn)設(shè)計(jì),一是有效地將攻擊方法和防御設(shè)計(jì)的學(xué)習(xí)統(tǒng)一起來(lái),重點(diǎn)培養(yǎng)了學(xué)生安全系統(tǒng)設(shè)計(jì)能力,并極大地鍛煉了攻擊能力;二是通過(guò)小組間對(duì)抗方法的引入,激發(fā)了學(xué)習(xí)熱情和動(dòng)力性,培養(yǎng)了主動(dòng)探索知識(shí)的能力,促進(jìn)了團(tuán)隊(duì)協(xié)作能力。在對(duì)抗式實(shí)驗(yàn)教學(xué)中,明顯觀察到學(xué)生較以往具有更高的主動(dòng)性和探索性,為了達(dá)到更好的實(shí)驗(yàn)效果,學(xué)生自我驅(qū)動(dòng),自發(fā)投入更多的時(shí)間和精力。在完成基本的實(shí)驗(yàn)功能以后,會(huì)主動(dòng)學(xué)習(xí)更多更復(fù)雜的攻擊方法,再針對(duì)這些攻擊方法,加強(qiáng)系統(tǒng)的防御設(shè)計(jì),迭代發(fā)展。對(duì)抗式實(shí)驗(yàn)教學(xué)有助于形成以學(xué)習(xí)者為中心的工程教育模式,更利于培養(yǎng)出高質(zhì)量的信息安全人才。