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