陳 辰,張 睿,韓偉力
(復旦大學 計算機國家級實驗教學示范中心,上海 200433)
當前飛速發展的信息安全技術和嚴峻的網絡安全形勢,都對高校的信息安全人才培養提出了非常高的挑戰和要求。為了落實“新工科”建設[1]的教學指導,培養出卓越的信息安全專業人才,必須改革當前本科生實驗課程的教學理念和方法,科學設計更加合理、更具挑戰性的實驗內容以提高實驗質量,成為當前教學改革的重點[2]。
在一般的傳統安全實驗教學中(如全球應用范圍較廣的安全實驗平臺Seed Labs[3]),平臺給學生提供了較完備的攻擊場景,學生在平臺上根據預設的漏洞,構建攻擊向量,當攻破預設的系統時,分析實驗過程和數據,實驗過程結束。
傳統實驗方式的優點是實驗過程易于把控,實驗內容較為基礎,在引導入門型的學習階段更加適合。但是,在實踐中也體現出幾點問題:①缺乏正向的防御能力培養,信息系統安全實驗側重培養攻擊手段,但學生沒有將對攻擊方法知識的掌握轉化為對正確防御方法的掌握,這些知識體系的培養對于安全技術人員是極為重要的;②限定場景,攻擊數據形式受限,在限定好的場景中實驗,學生對惡意攻擊數據的模式和常見形態了解不足,知識掌握不夠全面;③難以調動學生積極性,當面對求知欲強烈、勇于探索的學生時,由于實驗過程受限,不易于發揮學生的主觀能動性,難以激發學生的求知欲和求勝心理,抑制了人才培養的效果。
對抗式實驗教學的特點主要有幾點:①能力培養全面完整,實驗需要同時鍛煉學生的攻擊與防御能力,真正做到攻防結合,以攻促防;②鍛煉學生團隊能力,實驗以小組形式完成,鍛煉了學生團隊協作能力,使學生能夠以團隊形式完成更大規模的實驗;③激發學生動力性,通過引入學生小組之間的對抗攻擊和競爭,有利于激發學習熱情和動力性,形成以學習者為中心的教學模式;④開放的實驗場景,淡化實驗內容邊界,學生可以在開放的實驗場景中主動拓展知識空間。
對抗式實驗教學側重對學生攻防能力兼顧的均衡培養,實驗內容豐富且挑戰性較高。筆者在實踐中,要求學生以3~4 人為一個實驗小組,互相配合完成實驗任務。實驗實施主要分為4 個階段:①系統構建,各小組按照實驗要求在服務器上設計一個預定功能程序,然后對系統做必要的安全防御,教師在軟件設計時,可預設一些漏洞,以達到驗證攻擊有效性的目的;②攻擊測試,分析其他小組設計應用,探索可能存在的漏洞,并針對性地來構造攻擊向量發起攻擊;③系統加固,學生監控、分析自己小組的服務器所受到的攻擊流量,對程序進行加固;④交流總結,各組公開設計源碼和攻擊方法,交流總結實驗心得。對抗式實驗教學步驟如圖1 所示。

圖1 對抗式實驗教學步驟
在一般的攻防比賽中,往往會預置多個類型漏洞。在實際教學實驗中,根據課程要求,可以簡單地將漏洞類型限制為某個單一類型,以達到簡化實驗場景,聚焦實驗內容的目的。
對抗式實驗的選題非常重要。由于實驗教學方式的特殊性,所選的主題需要控制好難易程度,主題內容要聚焦考核的知識點,這都對實驗設計提出了較高的要求。SQL 注入攻擊在現實網絡環境中的重要性和常見性,使其成為信息系統安全實驗課程的重要組成部分。筆者以SQL 注入實驗為原型,詳細介紹基于對抗的實驗方案設計。
SQL 注入是一種代碼注入技術,在Web 服務中,如果在發送到后端數據庫服務器的數據訪問中未正確檢查用戶的輸入,則會出現此漏洞[4]。
通過所設計的實驗環節,指導學生掌握信息系統安全中的SQL 攻擊與防御的理論與實踐。按照實驗設計步驟,學生依次掌握SQL 注入防御系統構建(正向設計)、惡意注入數據構造(反向攻擊)、系統防御補強(正向防御)等知識。
1)系統構建。
對抗式實驗教學鍛煉學生正向系統設計能力,合理的設計Web 系統中對于數據庫訪問的方法,設計SQL 操作接口,以及適當的防御措施確保系統安全,如非法字符處理等。
學生小組根據預設場景要求,設計完成一個簡單的Web 服務作為靶標系統,該系統可通過Web 頁面提供用戶訪問后臺數據庫,并實現基本的增加、刪除、修改和查詢等訪問操作。在本實驗中,后臺數據庫包含2 張數據表:用戶名和商品信息列表。
數據庫中必須要預先存儲有指定的數據條目。靶標系統構建結束后,所有源代碼需要提交并進行代碼凍結。實驗環境中,操作系統為Linux、數據庫采用MySQL,構建Web 服務的靶標系統設計語言可根據各個學校的實際情況進行選擇。
有學生選擇在對輸入存在有數據庫關鍵字進行過濾的操作中存在的漏洞,如發現有保留字僅刪除一次導致的過濾方法不嚴謹,或對轉義字符未做判斷造成漏洞存在。預設一個漏洞的目的是構造攻擊的得分點。在實驗中,各小組可根據課堂講授的理論知識自由選擇漏洞設計方案,一般要求留有的漏洞難度中等、漏洞涉及的知識范圍大致在授課范圍內。
2)攻擊測試。
鍛煉學生探索系統漏洞、利用漏洞對Web系統發起攻擊的能力。在充分理解的基礎上,各組學生針對性地構造惡意輸入數據,完成SQL注入攻擊。成功注入后,對測試用例進行記錄存檔,并作為實驗文檔的組成部分進行提交。將所有的攻擊記錄進行整理,形成一個檢查器,用于系統測試。在圖2 中,A、B、C 3 個學生小組通過構造惡意數據,在不同小組之間開展攻擊。

圖2 實驗環境:小組之間發起互相攻擊
3)系統加固。
此階段是為了培養學生通過分析系統受到的攻擊數據來加強防御的能力,完成知識的迭代擴展、查漏補缺。收集自己靶標環境實例所受到的攻擊數據和記錄,發現自己所構建并維護系統的問題與缺陷,修復加固系統,從而實現系統更好的防御SQL 注入攻擊的能力,然后使用上一階段收集到的全部攻擊數據進行測試。如果實驗課時數充裕,可以做一次攻擊迭代,即各小組重新設計攻擊向量,對其他小組優化后的系統再做一次攻擊測試,以觀察攻擊和防御的效果。
在實驗中,除了預設的漏洞之外,學生經常會發現一些因自己系統設計漏洞而引發的有效攻擊,此時就需要對代碼進行加固設計。
4)交流總結。
本階段會開放所有小組提交的程序源代碼,學生通過閱讀其他小組的源代碼理解各種防御機制。通過交流總結,將不同小組的知識和經驗分享,從而達到迭代式的學習目的。學生在本組學習經驗的基礎上,通過學習其他組的漏洞設計思路、攻擊方法、安全防御措施,拓寬了思路,全面鍛煉了攻防能力。
在實驗中,學生可以通過分析系統受到的攻擊數據來加強防御能力,從而完成知識的查漏補缺和擴展。學生根據受到的攻擊,有針對性地進行系統補強,一方面,掌握了更扎實的攻擊方法,另一方面,提高了系統防御SQL 注入攻擊能力,這對以后從事正向的系統設計具有很好的幫助。
課后總結對提高實驗質量具有重要作用。學生在實驗過程中有了許多經驗和心得,同時也探索掌握了許多新的知識,這些都需要課后總結來進行交流討論。課后總結一方面是知識的分享傳遞,另一方面使學生了解互相之間的能力水平,獲得自我激勵和被他人認同的成就感,體現了對抗式實驗中包含的合作分享精神。教學實踐中發現,學生對此環節的技術交流非常積極,討論熱烈。
由于對抗式實驗的解法具有開放性,各小組在直接對抗競爭的激勵下,會積極探索嘗試,發揮空間較大,所以對實驗效果的評估需要特別設計。所以,筆者為對抗式實驗教學設計了針對性的成績評定方案,實踐表明,該評定方法能夠準確表達學生的學習程度,對學生也有很好的激勵作用。
每個小組最終實驗成績由攻擊有效分、攻擊方法分和防御分組成:①基礎攻擊分(20%),攻擊測試階段,獲得預設漏洞的分數;②進階攻擊分(20%),系統強化階段,重跑所有攻擊向量后的有效攻擊得分,將各小組所提交攻擊數據攻擊成功的次數作為進階攻擊得分;③攻擊方法分(20%),每個小組提交攻擊數據樣本,標明每條攻擊數據的設計思路和知識點,并根據攻擊數據的質量和涉及的知識點進行評分;④系統防御分(40%),對各小組實現的抗攻擊的防御方法進行綜合評價給分。
以往學生在SQL 注入實驗中,能夠掌握基礎的SQL 攻擊向量構造方法。對于系統防御設計方法僅限于理解,并不需要實際動手實踐。
改革實驗前,教學方法類似于Seed Labs[3]中的SQL 注入實驗,學生對于一般的攻擊方法能夠達到中級掌握程度,對于復雜一些的如盲注利用和自動化注入攻擊方法不作要求;在防御方法中,對于過濾器的設計有初步的理解,對于通過使用參數化查詢和對象關系映射、轉義字符等防御手段,由于不做實踐要求,所以學生掌握并不深入。
改革實驗后,學生對于攻擊方法的掌握有了全面的提升,甚至有約75%的學生主動學習了使用SQLmap 進行自動化攻擊的方法;在防御方法建設中,學生在熟練掌握過濾器設計方法的同時,對于數據庫系統安全配置(訪問控制)、關閉數據庫錯誤提示等也進行了較全面的學習。表1 對筆者所帶班級的32 名學生成績取算術平均值進行統計(滿分為5 分),
從表1 可以看出,采用新的實驗方法以后,攻擊能力中5 項指標的算術平均分從2.4 提升為4.2,成績提升幅度為72.6%,防御能力的平均分更是從以前的1.9 提升為4.35。學生成績統計表明了對抗式實驗教學方法的有效性,不但在攻擊能力上提升明顯,對以前薄弱的防御能力也得到了很好的鍛煉。

表1 學生掌握知識點比較
1)實驗內容準備。
在課程教學中,筆者還設計了文件上傳漏洞攻擊、棧溢出攻擊、弱口令攻擊和數據隱寫等若干典型的安全實驗。在實驗設計中發現,已有的實驗內容并不能簡單地移植到對抗式實驗教學模式來完成。開放的實驗過程,注重學生自我激勵、主動探索的教學理念,小組間競爭對抗的方法,迭代式的知識發現,這些因素都對教師的實驗選題、過程把控、實驗結果分析總結等能力提出了更高的要求。
在實驗中,筆者體會到必要的正向開發環節對學生的學習至關重要。為了啟發學生思路,減少不必要的工作量,可以提供事先準備好的若干代碼模板、數據記錄器、效果驗證器等一些必要,但是非核心功能組件供學生參考使用,由學生完成在模板基礎上的二次開發,提高開發效率。
2)教師指導的重要性。
在實驗結束后筆者對學生進行了實驗效果匿名問卷調查,其中在“影響實驗效果的外部因素”一題中,81%的同學選擇了指導教師的專業輔導,19%的同學選擇了實驗平臺與環境。此外,學生普遍反饋在自我激勵學習過程中,同樣非常需要教師的幫助和專業指導。調研數據顯示,由于實驗的開放性,對指導教師的業務能力提出了更高的要求,教師需要在熟悉基本實驗內容情況下,對學生提出一些以往認為“超綱”的問題也能做出及時、準確的指導。
由于信息安全類課程自身特點,傳統實驗對于攻擊方法非常重視,容易將攻擊方法與正向安全防御設計割裂開,對安全防御設計的方法無法得到實踐鍛煉。通過本文的對抗式實驗設計,一是有效地將攻擊方法和防御設計的學習統一起來,重點培養了學生安全系統設計能力,并極大地鍛煉了攻擊能力;二是通過小組間對抗方法的引入,激發了學習熱情和動力性,培養了主動探索知識的能力,促進了團隊協作能力。在對抗式實驗教學中,明顯觀察到學生較以往具有更高的主動性和探索性,為了達到更好的實驗效果,學生自我驅動,自發投入更多的時間和精力。在完成基本的實驗功能以后,會主動學習更多更復雜的攻擊方法,再針對這些攻擊方法,加強系統的防御設計,迭代發展。對抗式實驗教學有助于形成以學習者為中心的工程教育模式,更利于培養出高質量的信息安全人才。