傅建明 彭國(guó)軍 嚴(yán)飛
摘 要:從軟件安全的基礎(chǔ)知識(shí)、工具實(shí)踐、編程實(shí)踐3方面介紹課程教學(xué)思路。理論教學(xué)采用循序漸進(jìn)的思路講授軟件安全相關(guān)知識(shí)點(diǎn),同時(shí)配合工具實(shí)踐使學(xué)生加深對(duì)理論知識(shí)的理解,熟練掌握工具,最后學(xué)生通過(guò)編程實(shí)踐提升動(dòng)手實(shí)踐能力,培養(yǎng)軟件安全的攻防博弈思維。近五年的教學(xué)實(shí)踐證實(shí)了該方法的有效性,可提升學(xué)生的代碼逆向分析能力與漏洞機(jī)理驗(yàn)證能力。
關(guān)鍵詞:信息安全;軟件安全;教學(xué)方法;實(shí)踐教學(xué)
DOI:10. 11907/rjdk. 192205 開(kāi)放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
中圖分類(lèi)號(hào):G434 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-7800(2020)002-0226-04
英標(biāo):Research on Teaching Methods of the Course of Software Security
英作:FU Jian-ming, PENG Guo-jun, YAN Fei
英單:(School of Cyber Science and Engineering,Wuhan University,Wuhan 430072,China)
Abstract:This paper introduces the teaching ideas from three aspects including basic knowledge of software security, tool practice and programming practice. The knowledge of the course of software security has been presented from six stages step by step, and deep understanding of software security has been obtained by a way of tool practices. Finally, it is proved that code practice improves assimilation of software security, and students ability of code reverse analysis and vulnerability mechanism verification.
Key Words:information security;software security;teaching method; practice teaching
0 引言
目前,軟件安全正面臨嚴(yán)峻挑戰(zhàn)。一方面,隨著軟件規(guī)模的不斷擴(kuò)大,軟件的開(kāi)發(fā)、集成與演化變得越來(lái)越復(fù)雜,導(dǎo)致軟件產(chǎn)品在推出時(shí)總會(huì)含有很多已知或未知缺陷。另一方面,軟件運(yùn)行與開(kāi)發(fā)環(huán)境已從傳統(tǒng)的靜態(tài)封閉狀態(tài)轉(zhuǎn)變?yōu)榛ヂ?lián)網(wǎng)環(huán)境下的動(dòng)態(tài)開(kāi)放狀態(tài),因此越來(lái)越多軟件漏洞和缺陷被發(fā)現(xiàn)。另外APT(Advanced Persistent Threat)攻擊逐漸利益化、集團(tuán)化與專業(yè)化,觸及國(guó)家各類(lèi)重要的信息系統(tǒng),攻擊手段防不勝防,對(duì)國(guó)家信息安全造成了巨大威脅。習(xí)近平總書(shū)記提出:“沒(méi)有網(wǎng)絡(luò)安全,就沒(méi)有國(guó)家安全”。因此,作為本科階段的軟件安全課程,本科生通過(guò)該課程學(xué)習(xí)可以更好地理解軟件缺陷,及時(shí)應(yīng)對(duì)軟件威脅,如軟件漏洞、惡意代碼、勒索軟件等。
在信息安全專業(yè)建設(shè)初期,計(jì)算機(jī)病毒[1]、網(wǎng)絡(luò)安全是兩門(mén)基礎(chǔ)安全課程。其中,計(jì)算機(jī)病毒課主要講授計(jì)算機(jī)威脅、計(jì)算機(jī)病毒機(jī)理,以及計(jì)算機(jī)病毒防御與檢測(cè)等。在近六年的教學(xué)中,發(fā)現(xiàn)學(xué)生可以基本理解計(jì)算機(jī)病毒機(jī)理,但仍缺乏對(duì)計(jì)算機(jī)病毒的全面認(rèn)識(shí),加上計(jì)算機(jī)病毒植入與遠(yuǎn)程感染沒(méi)有列入教學(xué)規(guī)范中,為此,2012年結(jié)合信息安全教學(xué)指導(dǎo)委員會(huì)制定的信息安全專業(yè)規(guī)范[2],我院將計(jì)算機(jī)病毒課程更名為軟件安全課程[3],同時(shí)對(duì)軟件缺陷與漏洞相關(guān)知識(shí)進(jìn)行了擴(kuò)充。
本文主要從軟件安全基礎(chǔ)知識(shí)、工具實(shí)踐、編程實(shí)踐3方面介紹課程教學(xué)思路,如圖1所示。
1 相關(guān)文獻(xiàn)綜述
針對(duì)信息安全與網(wǎng)絡(luò)空間安全教學(xué)的研究文獻(xiàn)有很多。如文獻(xiàn)[4]概述了國(guó)內(nèi)外信息安全專業(yè)建設(shè)現(xiàn)狀和不足,介紹了網(wǎng)絡(luò)安全管理、系統(tǒng)安全工程、應(yīng)用安全服務(wù)3個(gè)專業(yè)方向及其課程設(shè)置;文獻(xiàn)[5]探索了信息安全專業(yè)的知識(shí)體系和能力體系;文獻(xiàn)[6]討論了網(wǎng)絡(luò)空間安全的內(nèi)涵和外延,比較國(guó)內(nèi)外網(wǎng)絡(luò)空間安全人才培養(yǎng)體系,從國(guó)家統(tǒng)籌規(guī)劃、學(xué)歷教育、職業(yè)培訓(xùn)與認(rèn)證、專才發(fā)現(xiàn)與培養(yǎng)等4個(gè)方面給出了人才培養(yǎng)規(guī)劃建議;文獻(xiàn)[7]從自然語(yǔ)言處理角度分析近20年的網(wǎng)絡(luò)安全教學(xué)相關(guān)論文,并利用共現(xiàn)與頻率構(gòu)建知識(shí)圖譜。以上研究可從整體上為信息安全教學(xué)規(guī)劃提供指導(dǎo)。
針對(duì)單個(gè)課程教學(xué)及其改革的文獻(xiàn)也有很多,包括信息內(nèi)容安全、計(jì)算機(jī)病毒、網(wǎng)絡(luò)安全、操作系統(tǒng)、信息系統(tǒng)安全等課程。如文獻(xiàn)[8]給出信息內(nèi)容的定義,討論了信息內(nèi)容獲取、識(shí)別、控制與阻斷技術(shù);文獻(xiàn)[9]首次從病毒編寫(xiě)角度看待病毒機(jī)理,尋找病毒檢測(cè)與防御方法;文獻(xiàn)[10]對(duì)網(wǎng)絡(luò)安全課程內(nèi)容及教學(xué)方法進(jìn)行優(yōu)化,如將密碼學(xué)、操作系統(tǒng)安全、數(shù)據(jù)庫(kù)安全等內(nèi)容分離為其它課程,實(shí)時(shí)更新教學(xué)內(nèi)容,采用案例教學(xué)、啟發(fā)式教學(xué)等改進(jìn)教學(xué)方法,并取得了較好效果;文獻(xiàn)[11]采用科研課題、互助小組、信息安全競(jìng)賽、系統(tǒng)設(shè)計(jì)等多種方式將學(xué)生與多種教學(xué)內(nèi)容有效組織起來(lái),從而優(yōu)化教學(xué)效果;文獻(xiàn)[12]從計(jì)算機(jī)病毒、木馬、進(jìn)程監(jiān)控等方面對(duì)操作系統(tǒng)教學(xué)內(nèi)容作進(jìn)一步深化,利用課外實(shí)踐和競(jìng)賽提高學(xué)生學(xué)習(xí)興趣;文獻(xiàn)[13]為適應(yīng)軍隊(duì)對(duì)信息安全應(yīng)用型高級(jí)工程人才的需求,采用CDIO工程教育理念,構(gòu)建工程型信息系統(tǒng)安全課程教學(xué)體系。以上文獻(xiàn)可為軟件安全課程教學(xué)規(guī)劃與實(shí)踐提供支持,但尚沒(méi)有單獨(dú)的有關(guān)軟件安全教學(xué)改革相關(guān)研究。因此,本文在計(jì)算機(jī)病毒課程基礎(chǔ)上,闡述軟件安全課程知識(shí)點(diǎn)和實(shí)踐大綱構(gòu)建過(guò)程。
2 軟件安全基礎(chǔ)知識(shí)
高級(jí)語(yǔ)言程序設(shè)計(jì)、編譯原理、操作系統(tǒng)、密碼學(xué)、計(jì)算機(jī)網(wǎng)絡(luò)等都是軟件安全課程的基礎(chǔ),同時(shí)軟件安全課程與網(wǎng)絡(luò)安全、內(nèi)容安全、信息系統(tǒng)安全等課程可以實(shí)現(xiàn)無(wú)縫聯(lián)接。從設(shè)備、數(shù)據(jù)、服務(wù)、用戶的角度看,用戶通過(guò)服務(wù)實(shí)現(xiàn)數(shù)據(jù)操縱,相關(guān)服務(wù)都是通過(guò)軟件實(shí)現(xiàn)的。因此,軟件安全是信息安全的基礎(chǔ)課程。
軟件安全涉及的知識(shí)點(diǎn)非常多,圖2從6個(gè)方面介紹教學(xué)內(nèi)容,每個(gè)板塊序號(hào)表示授課順序。攻擊者利用物理植入、誘騙植入、漏洞植入等方式給計(jì)算機(jī)安裝各種惡意代碼,但不管是惡意代碼還是正常代碼都需遵循基本代碼格式。其中,基本結(jié)構(gòu)部分從系統(tǒng)角度介紹磁盤(pán)分區(qū)、文件系統(tǒng)與內(nèi)存系統(tǒng),接著是可執(zhí)行文件結(jié)構(gòu),如PE結(jié)構(gòu)、ELF結(jié)構(gòu)等,最后是可執(zhí)行代碼在內(nèi)存中操作的棧和堆。網(wǎng)絡(luò)攻防戰(zhàn)場(chǎng)已從過(guò)去的磁盤(pán)逐漸延伸到內(nèi)存,因此需要了解軟件代碼在內(nèi)存的布局以及內(nèi)存頁(yè)管理。教學(xué)時(shí)要注意32位系統(tǒng)和64位系統(tǒng)的差異,包括可執(zhí)行文件結(jié)構(gòu)、寄存器、函數(shù)調(diào)用方式等。
軟件安全威脅主要包括兩種:一種是具有完整格式的惡意代碼,如計(jì)算機(jī)病毒、網(wǎng)絡(luò)蠕蟲(chóng)、特洛伊木馬、后門(mén)、Rootkit、流氓軟件、勒索軟件、廣告軟件等;另一種是因軟件缺陷或漏洞而引入的代碼片斷(Code snippet),如Shellcode、ROP(Returned-Oriented Programming)等。惡意代碼威脅如今已從地下隱藏方式發(fā)展為公開(kāi)方式,如勒索軟件。惡意代碼部分主要講授惡意代碼的功能實(shí)現(xiàn)、威脅持續(xù)保持、安全檢測(cè)對(duì)抗、安全工具兼容及用戶免打擾等內(nèi)容,相關(guān)檢測(cè)技術(shù)包括特征值檢測(cè)、啟發(fā)式掃描、主動(dòng)防御、虛擬機(jī)檢測(cè)、云查殺、蜜罐等。講授時(shí)需要區(qū)分檢測(cè)技術(shù)動(dòng)態(tài)性與靜態(tài)性、誤報(bào)與漏報(bào)以及對(duì)不同未知惡意代碼的檢測(cè)能力等。
漏洞威脅是目前網(wǎng)絡(luò)攻防的焦點(diǎn),攻擊者利用未知漏洞可以在對(duì)方不知情的情況下安裝惡意代碼,而防御者可以提前發(fā)現(xiàn)漏洞,做到未雨綢繆。該部分主要介紹棧溢出、堆溢出、空指針、釋放后引用、整數(shù)/浮點(diǎn)數(shù)溢出、競(jìng)爭(zhēng)條件缺陷、格式化輸出缺陷等安全缺陷引發(fā)的數(shù)據(jù)劫持與控制劫持,并講授缺陷與漏洞原理、可能的代碼模式,以及漏洞危害、緩解措施等。講授時(shí)可以結(jié)合文獻(xiàn)[14]、[15]中的源碼進(jìn)行,以增強(qiáng)學(xué)生的感性認(rèn)識(shí)。由于攻擊者會(huì)利用這些缺陷和漏洞設(shè)計(jì)用于攻擊的POC(Proof of Code),其典型代碼包括Shellcode和ROP兩類(lèi),講授這類(lèi)代碼的特征以及可能的檢測(cè)點(diǎn)。
漏洞防御是目前學(xué)術(shù)界研究的熱點(diǎn),企業(yè)界稱為黑客攻擊防御。在主要采用的防御方法中,混淆加殼主要是對(duì)抗代碼分析,而訪問(wèn)控制是從資源角度約束用戶訪問(wèn),降低攻擊危害。其它防御方法包括DEP(Data Execution Prevention)、GS、ASLR(Address Space Layout Randomization)、safeSEH(safe Structured Exception Handling)、CFG(Control Flow Guard)、CIG(Code Integrity Guard)、ACG(Arbitrary Code Guard)等,其主要目的是阻止非授權(quán)的外部模塊、外部代碼、內(nèi)部重構(gòu)代碼執(zhí)行等。
漏洞分析包括源代碼設(shè)計(jì)、靜態(tài)分析、動(dòng)態(tài)分析、逆向分析、Fuzzing、代碼切片、符號(hào)執(zhí)行、污點(diǎn)傳播等。另外,Web安全內(nèi)容建議在網(wǎng)絡(luò)安全課程中進(jìn)行講授,包括SQL注入、XSS、CSRF、點(diǎn)擊劫持、目錄遍歷、文件上傳等。
3 軟件安全工具實(shí)踐
軟件安全課程具有很強(qiáng)的實(shí)踐性,通過(guò)掌握相關(guān)軟件安全工具,便于理解上述基礎(chǔ)知識(shí)。微軟工具套件[16]提供對(duì)磁盤(pán)、文件、進(jìn)程、注冊(cè)表與網(wǎng)絡(luò)的監(jiān)視,表1給出了課程教學(xué)中的常用工具。
為了更好地理解基礎(chǔ)知識(shí),本文設(shè)計(jì)了一組實(shí)驗(yàn)驗(yàn)證上述知識(shí)點(diǎn),實(shí)驗(yàn)課程見(jiàn)表2。其中,實(shí)驗(yàn)1考查學(xué)生利用工具查看程序加載的模塊鏈,了解數(shù)字簽名對(duì)軟件的保護(hù)作用;實(shí)驗(yàn)2考查學(xué)生利用Winhex對(duì)磁盤(pán)分區(qū),以及文件系統(tǒng)結(jié)構(gòu)的理解程度;實(shí)驗(yàn)3利用OD等工具查看軟件調(diào)用外部模塊的方式,重點(diǎn)是IAT與EAT的關(guān)聯(lián);實(shí)驗(yàn)4利用Winhex等工具學(xué)習(xí)內(nèi)存頁(yè)管理與頁(yè)權(quán)限分配;實(shí)驗(yàn)5考查學(xué)生手工注入代碼的能力;實(shí)驗(yàn)6、7考查學(xué)生手動(dòng)分析木馬與安全軟件的能力;實(shí)驗(yàn)8使學(xué)生加深對(duì)堆和棧的認(rèn)識(shí);實(shí)驗(yàn)9認(rèn)識(shí)編譯器安全指示的作用及其對(duì)軟件的影響;實(shí)驗(yàn)10是metasploit測(cè)試。
4 軟件安全編程實(shí)踐
軟件安全編程實(shí)踐重在將軟件安全知識(shí)融入到編程中,以提高學(xué)生的編程能力,并使其更好地理解安全威脅,增強(qiáng)安全防御能力。表3給出了軟件安全編程實(shí)例。其中,實(shí)驗(yàn)1考查學(xué)生對(duì)磁盤(pán)分區(qū)以及文件系統(tǒng)關(guān)聯(lián)數(shù)據(jù)結(jié)構(gòu)的應(yīng)用能力;實(shí)驗(yàn)2對(duì)給定文件進(jìn)行感染;實(shí)驗(yàn)3學(xué)習(xí)Hooking的實(shí)現(xiàn),并培養(yǎng)學(xué)生跨進(jìn)程的內(nèi)存訪問(wèn)能力;實(shí)驗(yàn)4模仿木馬對(duì)系統(tǒng)資源的訪問(wèn)與網(wǎng)絡(luò)交互;實(shí)驗(yàn)5模仿安全工具對(duì)系統(tǒng)資源的訪問(wèn)監(jiān)視與訪問(wèn)控制,鍛煉學(xué)生設(shè)計(jì)訪問(wèn)控制策略的能力;實(shí)驗(yàn)6模仿對(duì)棧(堆)的利用;實(shí)驗(yàn)7模仿安全工具對(duì)黑客攻擊的檢測(cè)。編程實(shí)踐通過(guò)模擬攻擊者的漏洞利用過(guò)程以及防御者的資源監(jiān)管過(guò)程,提高學(xué)生的攻防博弈思維能力。
5 結(jié)語(yǔ)
本文主要從軟件安全的基礎(chǔ)知識(shí)、工具實(shí)踐、編程實(shí)踐3方面介紹課程教學(xué)思路。理論教學(xué)分為基本結(jié)構(gòu)、惡意代碼解析、惡意代碼檢測(cè)、漏洞實(shí)例分析、漏洞攻擊檢測(cè)、漏洞分析技術(shù)6個(gè)階段,采用循序漸進(jìn)的思路講授軟件安全相關(guān)知識(shí)點(diǎn),同時(shí)配合工具實(shí)踐使學(xué)生加深對(duì)理論知識(shí)的理解,熟練掌握工具,最后通過(guò)編程實(shí)踐提高動(dòng)手能力。近五年的教學(xué)實(shí)踐證實(shí)了該方法的有效性,通過(guò)對(duì)軟件運(yùn)行環(huán)境、代碼文件結(jié)構(gòu)與內(nèi)存結(jié)構(gòu)、代碼與操作系統(tǒng)接口等內(nèi)容的綜合學(xué)習(xí)及實(shí)踐,提升學(xué)生的代碼逆向分析能力和漏洞機(jī)理驗(yàn)證能力,為培養(yǎng)其軟件安全的攻防博弈思維奠定了堅(jiān)實(shí)基礎(chǔ)。如何將軟件安全課程知識(shí)拓寬到多平臺(tái)、多系統(tǒng)上,將是未來(lái)的研究方向。
參考文獻(xiàn):
[1] 傅建明. 計(jì)算機(jī)病毒分析與對(duì)抗[M]. 武漢:武漢大學(xué)出版社, 2009.
[2] 教育部高等學(xué)校. 高等學(xué)校信息安全專業(yè)指導(dǎo)性專業(yè)規(guī)范[M]. 北京:清華大學(xué)出版社,2014.
[3] 彭國(guó)軍,傅建明,梁玉. 軟件安全[M]. 武漢:武漢大學(xué)出版社, 2015.
[4] 王練,陳龍. 信息安全專業(yè)課程體系設(shè)置的探討[J]. 計(jì)算機(jī)教育,2009(24):108-110.
[5] 杜瑞穎,張煥國(guó),王麗娜,等. 本科信息安全專業(yè)課程體系研究[J].? 計(jì)算機(jī)教育,2011,150(18):1-3.
[6] 張宏莉,于海寧,翟健宏,等. 網(wǎng)絡(luò)空間安全人才培養(yǎng)的規(guī)劃建議[J]. 網(wǎng)絡(luò)與信息安全學(xué)報(bào),2016, 2(3):1-9.
[7] 努爾布力. 國(guó)內(nèi)網(wǎng)絡(luò)安全教學(xué)研究脈絡(luò)和現(xiàn)狀的知識(shí)圖譜分析(1997~2016)[J]. 伊犁師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2016,10(3):86-92.
[8] 張宏莉,翟健宏,胡銘曾. 信息內(nèi)容安全的主要技術(shù)及國(guó)內(nèi)外對(duì)比[J]. 計(jì)算機(jī)教育,2005(1):74-76.
[9] 彭國(guó)軍,張煥國(guó). 關(guān)于計(jì)算機(jī)病毒教學(xué)的幾點(diǎn)建議[J]. 計(jì)算機(jī)教育,2006(7):30-31.
[10] 周由勝,羅文俊,陳龍.? 《網(wǎng)絡(luò)安全》課程教學(xué)創(chuàng)新初探[J]. 現(xiàn)代計(jì)算機(jī),2012(3):35-37.
[11] 周藝華,楊宇光,侍偉敏. 基于融合機(jī)制的計(jì)算機(jī)網(wǎng)絡(luò)安全教學(xué)模式探索[J]. 計(jì)算機(jī)教育,2016(11):20-23.
[12] 唐作其,葉潔,武彤,等. 面向信息安全專業(yè)的操作系統(tǒng)教學(xué)改革[J].? 計(jì)算機(jī)教育,2012(1):83-85.
[13] 陳萍,于晗,趙敏. 面向卓越工程師培養(yǎng)的“信息系統(tǒng)安全”課程建設(shè)[J]. 計(jì)算機(jī)工程與科學(xué),2014,36(s2):49-51.
[14] 塞克德盧濤. C和C++安全編碼 :Secure coding in C and C++[M]. 北京:機(jī)械工業(yè)出版社,2014.
[15] CWE. 2011 CWE/SANS top 25 most dangerous software errors[EB/OL]. http://cwe.mitre.org/top25/index.html.
[16] MICROSOFT. Windows sysinternals[EB/OL]. https://technet.microsoft.com/en-us/sysinternals/bb842062.aspx.
(責(zé)任編輯:黃 ?。?/p>