吳建軍
摘要:Web安全實(shí)驗(yàn)體現(xiàn)了網(wǎng)絡(luò)空間安全的特色,作者圍繞網(wǎng)絡(luò)安全的教學(xué)思維,以多門軟件開發(fā)課程為基礎(chǔ),結(jié)合互聯(lián)網(wǎng)主流安全漏洞的攻防技術(shù),綜合成熟的安全攻防實(shí)驗(yàn)平臺(tái)和學(xué)生自有的代碼項(xiàng)目,實(shí)現(xiàn)了進(jìn)行安全測(cè)試與防御,舉例解析了實(shí)驗(yàn)課程項(xiàng)目。
關(guān)鍵詞:Web安全;實(shí)驗(yàn)項(xiàng)目;漏洞;攻擊;防御
中圖分類號(hào):G434 文獻(xiàn)標(biāo)識(shí)碼:A 論文編號(hào):1674-2117(2019)08-0103-04
引言
“Web安全基礎(chǔ)”(Web Security foundation)是網(wǎng)絡(luò)空間安全專業(yè)的主要專業(yè)課程之一,筆者所在學(xué)校該本科專業(yè)的開課時(shí)間為第五學(xué)期。通過(guò)對(duì)Web應(yīng)用系統(tǒng)各層次存在的安全隱患和安全威脅的教學(xué),讓學(xué)生建立Web安全總體概念,熟悉相關(guān)技術(shù)的基本原理,掌握相應(yīng)的方法手段,提高Web安全應(yīng)用意識(shí)和安全開發(fā)能力。作為應(yīng)用型本科專業(yè)的培養(yǎng),該課程配套的實(shí)驗(yàn)教學(xué),應(yīng)注重將Web安全領(lǐng)域的針對(duì)主要安全漏洞的攻擊技能應(yīng)用和對(duì)應(yīng)預(yù)防安全威脅的安全開發(fā)能力培養(yǎng)相結(jié)合,也就是既具有一定的Web安全滲透測(cè)試能力,也具有較好的安全開發(fā)技能,以體現(xiàn)本專業(yè)的人才培養(yǎng)特色。
教學(xué)資源準(zhǔn)備
Web安全實(shí)驗(yàn)不同于傳統(tǒng)的計(jì)算機(jī)軟件開發(fā)類實(shí)驗(yàn),它直接與當(dāng)前互聯(lián)網(wǎng)應(yīng)用的各類安全問(wèn)題緊密相連,是多門專業(yè)課程的綜合應(yīng)用。為此,筆者所在學(xué)校首先從教師自身的網(wǎng)絡(luò)安全實(shí)踐應(yīng)用能力培養(yǎng)與提高入手,專門安排該課程相關(guān)教師進(jìn)入國(guó)內(nèi)知名的網(wǎng)絡(luò)安全公司開展為期半年到一年的實(shí)踐學(xué)習(xí)與研究。
同時(shí),與國(guó)內(nèi)多家網(wǎng)絡(luò)安全公司及安全教育公司密切合作,簽署教育部產(chǎn)學(xué)研合作協(xié)同育人項(xiàng)目,引入多個(gè)安全攻防教學(xué)平臺(tái),為網(wǎng)絡(luò)安全實(shí)踐教學(xué)提供了較豐富的校內(nèi)在線資源。
實(shí)驗(yàn)課程設(shè)計(jì)
本課程的主要預(yù)修課程包括操作系統(tǒng)、數(shù)據(jù)庫(kù)應(yīng)用、Web系統(tǒng)開發(fā)等,基于合作引入的網(wǎng)絡(luò)安全攻防平臺(tái),合理地組織現(xiàn)有資源,并針對(duì)本校學(xué)生特點(diǎn),設(shè)計(jì)具有系統(tǒng)性和開放性的實(shí)驗(yàn)課程內(nèi)容。
“Web安全基礎(chǔ)”課程的理論課主要講述了客戶端腳本安全、Web服務(wù)端應(yīng)用安全以及安全運(yùn)營(yíng)等內(nèi)容[1],可供參考的思維導(dǎo)圖如下頁(yè)圖1所示。
配套的實(shí)驗(yàn)課以上述理論課為線索,參照國(guó)際主流的OWASP(Open Web Application Security Project,開放式Web應(yīng)用程序安全項(xiàng)目)組織公布的Web安全應(yīng)用Top10文檔[2],同步關(guān)注Web安全領(lǐng)域的十大威脅,力爭(zhēng)構(gòu)建能激發(fā)學(xué)生興趣、培養(yǎng)其安全應(yīng)用思維和安全開發(fā)方法。具體實(shí)驗(yàn)內(nèi)容如下頁(yè)表所示,每次實(shí)驗(yàn)為2課時(shí),共18課時(shí)。
實(shí)驗(yàn)項(xiàng)目示例
本課程實(shí)驗(yàn)的基本過(guò)程主要包括如下內(nèi)容:漏洞現(xiàn)象驗(yàn)證及相關(guān)工具應(yīng)用、安全漏洞利用、漏洞防御、進(jìn)階應(yīng)用。根據(jù)理論課已講述的內(nèi)容,配合必要的工具軟件,完成漏洞現(xiàn)象驗(yàn)證,實(shí)現(xiàn)基本的感性認(rèn)識(shí),結(jié)合相關(guān)安全事件,認(rèn)識(shí)到漏洞帶來(lái)的威脅。在配套的安全實(shí)驗(yàn)平臺(tái),可以完成進(jìn)一步的漏洞利用(攻擊)過(guò)程,在模擬的目標(biāo)平臺(tái),實(shí)現(xiàn)漏洞利用,如獲取Web應(yīng)用的賬戶信息。漏洞防御主要與程序開發(fā)相關(guān),結(jié)合以往專業(yè)課,對(duì)之前不安全代碼進(jìn)行改進(jìn),實(shí)現(xiàn)防御目標(biāo)。進(jìn)階應(yīng)用環(huán)節(jié)可以在課后繼續(xù)學(xué)習(xí)中完成。下面,列舉兩個(gè)實(shí)驗(yàn)項(xiàng)目給予分析。
1.XSS漏洞的危害、攻擊與防御
(1)XSS漏洞現(xiàn)象驗(yàn)證
①?gòu)木W(wǎng)絡(luò)安全實(shí)驗(yàn)平臺(tái)驗(yàn)證。通過(guò)平臺(tái)提供的基礎(chǔ)案例,很快能從中驗(yàn)證XSS(Cross-site Scripting)跨站腳本攻擊現(xiàn)象,如反射型XSS被執(zhí)行時(shí)的彈窗現(xiàn)象。
②從學(xué)生以往課程實(shí)驗(yàn)中驗(yàn)證。如前文所述,Web系統(tǒng)開發(fā)是前驅(qū)課程,學(xué)生重新打開之前的實(shí)驗(yàn)項(xiàng)目,在調(diào)試中輸入XSS代碼測(cè)試,可以更顯著地發(fā)現(xiàn)跨站腳本執(zhí)行的結(jié)果。例如,一個(gè)基于JSP開發(fā)的數(shù)據(jù)庫(kù)存取實(shí)驗(yàn)項(xiàng)目,在提交數(shù)據(jù)的表單中,填寫包含如下腳本:
new Image().src="http://
192.168.0.169:8007/XSS_savecookie.asp?xcookie="+document.cookie;
原代碼并未做XSS防御處理,將上述腳本直接保存至數(shù)據(jù)庫(kù)。而后,在數(shù)據(jù)庫(kù)讀取顯示的頁(yè)面中,當(dāng)訪問(wèn)上述記錄時(shí),直接把當(dāng)前瀏覽用戶的cookie信息發(fā)送到了攻擊者的指定地址http://192.168.0.169:8007/XSS_savecookie.asp,從而發(fā)生了存儲(chǔ)型跨站腳本攻擊。特意設(shè)計(jì)了攻擊者收集cookie信息的網(wǎng)站使用asp技術(shù),以示接收信息的平臺(tái)類型不受限制。學(xué)生從自己以往的實(shí)驗(yàn)項(xiàng)目中發(fā)現(xiàn)了Web安全漏洞,體會(huì)更加深刻。
(2)利用XSS的攻擊
攻擊過(guò)程可以根據(jù)需要,使用合作公司的實(shí)驗(yàn)平臺(tái)或OWASP開放的WebGoat安全測(cè)試項(xiàng)目,也可以在學(xué)生自建虛擬機(jī)環(huán)境中測(cè)試。通過(guò)XSS漏洞利用,獲取受害者cookie信息后,攻擊者可以無(wú)需賬號(hào)密碼直接登錄到相關(guān)網(wǎng)站。如果該賬戶權(quán)限是管理員,那么攻擊者就獲取了該網(wǎng)站的最高權(quán)限,危害很大。
(3)XSS防御
防御環(huán)節(jié)是最重要的,發(fā)現(xiàn)安全漏洞后,要通過(guò)適當(dāng)?shù)姆婪督o予防御,這是本專業(yè)的主要培養(yǎng)方向。例如,在該實(shí)驗(yàn)項(xiàng)目中,學(xué)生對(duì)帶有存儲(chǔ)型XSS漏洞的Web項(xiàng)目進(jìn)行了HTTP only設(shè)置。之后,在攻擊者獲取的信息中,就無(wú)法讀取cookie信息,從而對(duì)該項(xiàng)目實(shí)現(xiàn)了有效的加固。當(dāng)然,也讓學(xué)生意識(shí)到防范的措施并不是單一的,也不是不計(jì)成本的。
(4)XSS進(jìn)階
進(jìn)階學(xué)習(xí)既有攻擊方面的內(nèi)容,也有防御方面的內(nèi)容。給學(xué)生提供適當(dāng)?shù)倪M(jìn)階學(xué)習(xí)方向,如構(gòu)建更隱蔽的XSS代碼實(shí)現(xiàn)攻擊,或采用更先進(jìn)的Web框架開發(fā)技術(shù),都可以有進(jìn)一步的攻防學(xué)習(xí)進(jìn)階。進(jìn)階學(xué)習(xí)成果可以安排學(xué)生在課堂中討論。
2.SQL注入的危害、攻擊與防御
(1)SQL注入現(xiàn)象驗(yàn)證
①?gòu)木W(wǎng)絡(luò)安全實(shí)驗(yàn)平臺(tái)驗(yàn)證。通過(guò)平臺(tái)提供的基礎(chǔ)案例,可以提供快速驗(yàn)證。例如,可以通過(guò)SQL注入,獲取數(shù)據(jù)庫(kù)中更多的信息顯示。
②從學(xué)生以往課程實(shí)驗(yàn)中驗(yàn)證。與XSS相似,以往Web開發(fā)課程中的SQL存取并未注意防范注入問(wèn)題。如圖2所示,結(jié)合使用WebScarab攔截工具,對(duì)用戶登錄的密碼進(jìn)行SQL注入,修改password字段內(nèi)容為“a' or 1=1 --”后提交請(qǐng)求,登錄成功。它不僅繞過(guò)了用戶密碼,還避開了網(wǎng)頁(yè)前端使用JavaScript腳本檢測(cè)密碼字符串規(guī)則。
(2)SQL注入的危害分析與注入語(yǔ)句設(shè)計(jì)
SQL注入直接發(fā)生在Web服務(wù)器上,可以篡改數(shù)據(jù)庫(kù)以及提權(quán)等攻擊,危害巨大。在學(xué)生構(gòu)建SQL注入語(yǔ)句時(shí),借用SSMS(SQL Server Management Studio)是一個(gè)直觀的方法。使用SQL Server數(shù)據(jù)庫(kù)管理平臺(tái),構(gòu)建實(shí)驗(yàn)數(shù)據(jù)庫(kù),在其“新建查詢”窗口,可以給予SQL語(yǔ)法,構(gòu)建各類注入語(yǔ)句,并在實(shí)驗(yàn)數(shù)據(jù)庫(kù)中完成測(cè)試。
在傳統(tǒng)的數(shù)據(jù)庫(kù)課程學(xué)習(xí)中,并未構(gòu)建包含諸如“a' or 1=1 --”的SQL語(yǔ)句,而在當(dāng)前的SQL注入實(shí)驗(yàn)中,需要配合Web頁(yè)面中的場(chǎng)景,實(shí)現(xiàn)注入攻擊。在SSMS中調(diào)試成功的注入語(yǔ)句,可以更好地讓學(xué)生理解其中的原理。
(3)SQL注入的防御
同樣,SQL注入的防御,也可以在學(xué)生自有項(xiàng)目中進(jìn)行調(diào)試,實(shí)現(xiàn)加固。例如,在JSP中使用預(yù)編譯語(yǔ)句:
String name=request.getParameter("curname");
String query="SELECT addr FROM userInfo WHERE username=?";
PreparedStatement pdst=
connection.prepareStatement(query);
pdst.setString(1, name);
ResultSet results=pdst.executeQuery();
使用預(yù)編譯SQL語(yǔ)句,語(yǔ)義不會(huì)發(fā)生改變。上述代碼中,字段值的變量用“?”表示,攻擊者無(wú)法改變SQL的結(jié)構(gòu),即使插入類似于上文“a' or 1=1”的字符串,也只會(huì)把該字符串作為username的值進(jìn)行查詢,而不會(huì)發(fā)生注入攻擊。
(4)SQL注入的進(jìn)階
SQL注入的基本原理在于開發(fā)者違背了“數(shù)據(jù)與代碼分離原則”,在需要“拼接”的地方必須進(jìn)行安全檢查。[3]在進(jìn)階攻擊中,攻擊者可以構(gòu)建功能更多的SQL語(yǔ)句,實(shí)現(xiàn)數(shù)據(jù)庫(kù)數(shù)據(jù)的下載或篡改;還可以通過(guò)SQL注入在數(shù)據(jù)庫(kù)中創(chuàng)建觸發(fā)器,實(shí)現(xiàn)持續(xù)性攻擊;還可以通過(guò)進(jìn)一步的手段實(shí)現(xiàn)提權(quán),控制整個(gè)Web服務(wù)器。理解攻擊者更多的手段,是安全開發(fā)的必要準(zhǔn)備。
結(jié)語(yǔ)
實(shí)驗(yàn)教學(xué)是培養(yǎng)學(xué)生掌握發(fā)現(xiàn)、分析和解決問(wèn)題能力的重要環(huán)節(jié)。[4]筆者所在學(xué)校的Web安全實(shí)驗(yàn)整理了多方面的教學(xué)資源,從通用性的網(wǎng)絡(luò)安全實(shí)驗(yàn)平臺(tái)學(xué)習(xí)驗(yàn)證問(wèn)題的現(xiàn)象,結(jié)合自身開發(fā)的項(xiàng)目代碼分析問(wèn)題的原因與適當(dāng)?shù)慕鉀Q方法,進(jìn)而綜合各種資源提升學(xué)生的學(xué)習(xí)興趣與成效。同時(shí),結(jié)合《中華人民共和國(guó)網(wǎng)絡(luò)安全法》的教育,培養(yǎng)有技術(shù)、知法守法的專業(yè)人才,通過(guò)幾屆學(xué)生的教學(xué)實(shí)踐,教學(xué)效果良好。
參考文獻(xiàn):
[1][3]吳翰清.白帽子講Web安全[M].北京:電子工業(yè)出版社,2014.
[2]OWASP.OWASP Top 10 2017[EB/OL].http://www.owasp.org.cn/owasp-project/OWASPTop102017v1.3.pdf.
[4]杜曄,陳賀男,黎妹紅,等.Web應(yīng)用安全實(shí)驗(yàn)教學(xué)探討與案例評(píng)析[J].計(jì)算機(jī)教育,2015(19):17-19.
基金項(xiàng)目:本文獲得浙江師范大學(xué)“《軟件安全》課程仿真實(shí)驗(yàn)項(xiàng)目建設(shè)”(SJ201823)資助。