楊晨霞 涂風(fēng)濤
摘 要: 本文主要基于Web程序安全機(jī)制的實(shí)現(xiàn)方法,探討幾種嚴(yán)重威脅Web程序安全性的漏洞的基本原理,以及相應(yīng)的漏洞挖掘和防御技術(shù),包括驗(yàn)證機(jī)制的安全性、會(huì)話管理機(jī)制的安全性等。
關(guān)鍵詞: Web程序;程序安全;防御機(jī)制
Research on Web Program Security and Defense Mechanism
Yang Chenxia Tu Fengtao
YuZhang Normal University Jiangxi Nanchang 330103
Abstract: This paper is mainly based on the implementation method of Web program security mechanism,discusses the basic principles of several vulnerabilities that seriously threaten the security of Web programs,and the corresponding vulnerability mining and defense technologies,including the security of the authentication mechanism,the security of the session management mechanism,and so on.
Key words: Web program;Program security;Defense mechanism
一、緒論
Web程序安全是網(wǎng)絡(luò)安全研究領(lǐng)域的熱點(diǎn)問題之一。因?yàn)镮nternet上的大多數(shù)Web站點(diǎn)實(shí)際上都是應(yīng)用程序,它們功能強(qiáng)大,在服務(wù)器和瀏覽器之間進(jìn)行雙向信息傳遞。用戶從Web程序中獲取的內(nèi)容大部分屬于私密和高度敏感的信息,因此安全問題至關(guān)重要,如果人們認(rèn)為某個(gè)Web程序不夠安全,他們就會(huì)拒絕使用。
因?yàn)閃eb程序各不相同,所包含的安全問題也不相同,而且許多Web程序常常是由幾位開發(fā)人員獨(dú)立開發(fā),但是他們可能根本不了解所編寫的代碼可能引起的安全問題,這就使得Internet上有相當(dāng)多的Web程序存在各種各樣的安全漏洞。更為嚴(yán)重的是,Web程序?yàn)榱藢?shí)現(xiàn)核心功能,通常需要與內(nèi)部服務(wù)器系統(tǒng)建立各種連接,而這些系統(tǒng)往往保存著高度敏感的信息。因此,一個(gè)潛在的Web程序漏洞可能造成極其嚴(yán)重的后果,帶來巨大的經(jīng)濟(jì)損失。
二、Web程序安全問題
由于Web程序無法控制瀏覽器,用戶幾乎可以向Web程序提交任意惡意信息。攻擊者可以采取的手段包括:
(1)修改瀏覽器與服務(wù)器之間傳遞的數(shù)據(jù),包括請(qǐng)求的參數(shù)、Cookie和HTTP報(bào)文頭部。例如,攻擊者可以更改隱藏在HTML表單中產(chǎn)品價(jià)格字段,從而以較低的價(jià)格購買產(chǎn)品;或是修改在HTTP Cookie中傳送的會(huì)話令牌,劫持其他用戶的會(huì)話。
(2)在多階段交互中,攻擊者可以打亂提交請(qǐng)求的順序,在每個(gè)階段重復(fù)提交請(qǐng)求或者不提交參數(shù)。他們的操作可能與程序預(yù)期的操作完全不同。
(3)攻擊者使用多種瀏覽器訪問Web應(yīng)用程序,或者使用輔助工具協(xié)助攻擊,自動(dòng)提交大量普通瀏覽器無法提交的請(qǐng)求,查找Web程序存在的安全問題。
如果一個(gè)Web程序必須接收并且處理未經(jīng)驗(yàn)證的可疑輸入,就會(huì)產(chǎn)生核心的安全問題。更為嚴(yán)重的是,以下Web程序開發(fā)過程中的各種潛在因素導(dǎo)致該安全問題很難解決。
(1)開發(fā)人員缺少Web程序安全意識(shí)。雖然大多數(shù)IT安全人員掌握了不少網(wǎng)絡(luò)安全知識(shí),但是他們對(duì)Web程序安全有關(guān)的許多核心概念還是不太了解,使得對(duì)所用編程框架的安全性往往做出錯(cuò)誤假設(shè)。
(2)基于應(yīng)用程序框架開發(fā)的模式。Internet中存在許多提供現(xiàn)成代碼組件的應(yīng)用程序框架,可以處理各種常見的功能,包括身份驗(yàn)證,頁面模板和公告牌等,Web程序員基于這些框架可以快速方便地開發(fā)出強(qiáng)大的Web程序。但是這些框架中也可能存在潛在的安全風(fēng)險(xiǎn)。由于許多公司可能會(huì)使用相同的框架,因此,只要框架中存在一個(gè)安全漏洞,就會(huì)影響眾多相關(guān)的Web程序。
(3)Web程序的安全威脅發(fā)展迅速。Web程序的攻擊方法層出不窮,新概念和新威脅出現(xiàn)的速度很快,已有的Web防御技術(shù)在這些新的攻擊面前失去作用。因此,即使在Web程序開發(fā)階段針對(duì)已有威脅已經(jīng)實(shí)現(xiàn)了相應(yīng)的安全防御機(jī)制,也可能到部署階段時(shí)會(huì)面臨許多未知的威脅。
(4)程序開發(fā)時(shí)間和可用資源十分有限。為了按時(shí)完成項(xiàng)目,開發(fā)者往往會(huì)忽略一些安全問題,程序部署時(shí)會(huì)存在安全隱患。
另外,Web程序的安全問題同時(shí)也改變了目標(biāo)系統(tǒng)的安全邊界,傳統(tǒng)的網(wǎng)絡(luò)防御技術(shù)可以在網(wǎng)絡(luò)邊界部署防火墻、IPS、VPN、惡意代碼防范等網(wǎng)絡(luò)安全組件,抵御外部攻擊者發(fā)起的攻擊。但是,當(dāng)用戶訪問Web程序時(shí),防火墻必須允許用戶通過HTTP或HTTPS協(xié)議訪問內(nèi)部服務(wù)器,Web程序需要連接后臺(tái)服務(wù)器通信。因此,當(dāng)Web程序存在漏洞時(shí),Internet的攻擊者只擊需要從瀏覽器提交專門設(shè)計(jì)的輸入數(shù)據(jù),就可以繞過這些防御組件,直接攻擊目標(biāo)系統(tǒng)的核心后端服務(wù)器。例如,攻擊者希望攻擊某個(gè)銀行網(wǎng)絡(luò),在銀行使用Web程序之前,他必須發(fā)現(xiàn)某個(gè)網(wǎng)絡(luò)服務(wù)中存在的安全漏洞,并利用它進(jìn)入銀行內(nèi)部某個(gè)網(wǎng)絡(luò),然后嘗試?yán)@過限制其訪問關(guān)鍵網(wǎng)絡(luò)的防火墻,在關(guān)鍵網(wǎng)絡(luò)上確定重要的服務(wù)器,最后監(jiān)聽或破解關(guān)鍵用戶的口令以進(jìn)行登錄。但是,如果銀行使用存在漏洞的Web程序,那么攻擊者很可能只需要修改隱藏在HTML表單字段中的一個(gè)帳號(hào),就可以達(dá)到相同的目的。
因此,不管是對(duì)部署Web程序的組織,還是對(duì)訪問它們的用戶而言,針對(duì)Web程序的攻擊都是很嚴(yán)重的威脅。
三、核心防御機(jī)制
由于Web用戶的任意輸入都不可信,因此Web程序必須實(shí)施大量的安全機(jī)制來防御可能的Web攻擊。我們主要可以采用以下四個(gè)方面的安全機(jī)制。
(1)處理用戶訪問。每個(gè)用戶只能訪問被授權(quán)訪問的信息。絕大部分Web程序都使用三種相互關(guān)聯(lián)的安全機(jī)制處理用戶訪問,即身份驗(yàn)證、會(huì)話管理和訪問控制。
①身份驗(yàn)證。身份驗(yàn)證機(jī)制是Web程序處理用戶訪問的最基本機(jī)制,絕大部分Web程序程序都采用經(jīng)典的身份驗(yàn)證模型,即要求用戶提交賬號(hào)和口令。在一些安全性要求很高的Web程序中,往往會(huì)結(jié)合其他證書,如客戶端數(shù)字證書、智能卡,或者采取多階段登錄過程來增強(qiáng)身份驗(yàn)證過程。
②會(huì)話管理。會(huì)話管理機(jī)制的安全性取決于令牌的安全性,令牌生成過程中的缺陷有可能使得攻擊者可以猜測(cè)發(fā)布給其他用戶的令牌。如果令牌傳輸過程中沒有加密,令牌就可能被攻擊者監(jiān)聽并截獲。
③訪問控制。當(dāng)Web程序從HTTP請(qǐng)求中正確識(shí)別發(fā)出請(qǐng)求的用戶身份后,訪問控制機(jī)制需要考慮各種相關(guān)領(lǐng)域與不同類型的功能,需要支持各種擁有不同權(quán)限的用戶角色,限制每位用戶只允許訪問Web程序的部分?jǐn)?shù)據(jù)。
(2)處理用戶的輸入,防止錯(cuò)誤輸入造成潛在危險(xiǎn)。必須假設(shè)所有的用戶輸入都是惡意的,大量針對(duì)Web程序的攻擊都與提交惡意輸入有關(guān)。因此,安全處理用戶的輸入是保證Web程序安全的一個(gè)基本要求。輸入確認(rèn)(Input validation)是防御這些攻擊的常用手段。
我們根據(jù)輸入的多樣性,可以采用以下方法。
①白名單。輸入確認(rèn)機(jī)制僅接收與白名單匹配的輸入。例如,程序在查詢用戶的身份證號(hào)碼時(shí),可能會(huì)確認(rèn)其僅包含數(shù)字信息,長(zhǎng)度必須為18,未通過白名單匹配的輸入將會(huì)被拒絕。這種方式是處理惡意輸入的最有效方法。
②凈化。凈化(sanitizing)指Web程序把接收到的各種惡意字符刪除,只留下已知安全的字符,或者在對(duì)輸入進(jìn)行處理之前對(duì)惡意字符進(jìn)行適當(dāng)編碼或轉(zhuǎn)義。例如,對(duì)于試圖執(zhí)行非授權(quán)目錄中的文件操作的惡意輸入串“..\\..\\..\\..\\windows\\system32\\cmd.exe”,可以執(zhí)行凈化操作,刪除所有的“..\\”字符,凈化后的輸入串為“windows\\system32\\cmd.exe”,該輸入串會(huì)因?yàn)椤爸付窂讲淮嬖凇倍痪芙^訪問。凈化方法十分有效,也是處理惡意輸入問題的通用解決辦法。
③完全編程。許多時(shí)候,使用不安全的編程方式處理用戶提交的數(shù)據(jù)是Web程序存在漏洞的根本原因。只要保證處理過程絕對(duì)安全即可避免有關(guān)漏洞。例如:在數(shù)據(jù)庫訪問過程中正確使用參數(shù)化查詢,即可有效避免SQL注入攻擊;再如,禁止向操作系統(tǒng)直接提交用戶輸入作為命令執(zhí)行,即可有效避免命令注入。
④語義檢查。在一些Web攻擊過程中,攻擊者提交的輸入與正常用戶提交的輸入在語法上完全相同,此時(shí)只能執(zhí)行嚴(yán)格的語義檢查。例如,攻擊者可以修改隱藏的表單字段,提交較低的產(chǎn)品價(jià)格,Web程序必須確認(rèn)所提交的產(chǎn)品價(jià)格與存儲(chǔ)在數(shù)據(jù)庫中的產(chǎn)品價(jià)格是否一致。
(3)防范Web攻擊,即使Web程序成為攻擊目標(biāo)時(shí),程序依然可以正常運(yùn)轉(zhuǎn)。當(dāng)Web程序成為攻擊者的直接攻擊目標(biāo)時(shí),應(yīng)該能夠處理并應(yīng)對(duì)這些攻擊,這是Web程序安全機(jī)制的一項(xiàng)主要功能。Web程序?yàn)樘幚砉舳扇〉拇胧┌ㄌ幚礤e(cuò)誤、維護(hù)日志、報(bào)警、主動(dòng)響應(yīng)。
①錯(cuò)誤處理機(jī)制。程序部署后,Web程序不應(yīng)該在頁面響應(yīng)中返回任何系統(tǒng)生成的消息或者其他調(diào)試信息。大多數(shù)Web開發(fā)語言都提供良好的異常處理機(jī)制,Web程序應(yīng)充分利用這些機(jī)制處理各種錯(cuò)誤。
②維護(hù)日志。日志一般會(huì)記錄每件事情的發(fā)生時(shí)間、發(fā)起主機(jī)的IP地址和通過驗(yàn)證的用戶賬號(hào)等。日志文件本身必須受到安全保護(hù),避免被非授權(quán)修改和訪問。一種有效的方法是將日志保存在一個(gè)單獨(dú)的主機(jī)或服務(wù)器上,并且只與Web程序進(jìn)行安全的信息交互。
③報(bào)警。報(bào)警機(jī)制必須即能夠準(zhǔn)確報(bào)告每次真實(shí)的攻擊,又不能產(chǎn)生過多的虛警,需要在兩個(gè)相互矛盾的目標(biāo)之間取得平衡,并且在可能的情況下可以將多個(gè)事件進(jìn)行關(guān)聯(lián),集中到一個(gè)報(bào)警中,確定Web程序正在受到的攻擊。我們的做法是將報(bào)警與Web程序的輸入確認(rèn)機(jī)制和其他訪問控制方法緊密結(jié)合,提供完全自定義的惡意行為報(bào)警,一旦防御機(jī)制對(duì)輸入進(jìn)行檢查后發(fā)現(xiàn)有任何異常,即可產(chǎn)生報(bào)警。
④主動(dòng)響應(yīng)。Web程序可以采取自動(dòng)的響應(yīng)措施阻止攻擊者進(jìn)行攻擊嘗試,例如減緩對(duì)攻擊嘗試的頁面響應(yīng)速度或者終止攻擊者的會(huì)話,這些措施能夠阻止很多Internet中的隨意攻擊行為,并為管理員贏得時(shí)間去采取其他進(jìn)一步的措施。
(4)管理、監(jiān)控和配置Web程序的行為。任何有用的Web程序都需要管理與維護(hù),它是Web程序安全機(jī)制的重要組成部分,用于幫助管理員管理用戶賬戶和角色、應(yīng)用監(jiān)控和審計(jì)功能、配置Web程序等。
四、總結(jié)
幾乎所有的Web程序都存在相似的安全問題,采用相同的核心安全機(jī)制,只是實(shí)現(xiàn)的形式存在巨大的差異。處理用戶訪問和用戶輸入的安全機(jī)制最為重要,它們是攻擊者的主要攻擊對(duì)象,一旦被攻破,攻擊者就可以訪問其他用戶數(shù)據(jù)或者執(zhí)行任意代碼。
參考文獻(xiàn):
[1]沈鑫剡.計(jì)算機(jī)網(wǎng)絡(luò)安全[M].北京:清華大學(xué)出版社,2009.
[2]叮叮.常見十大Web應(yīng)用安全漏洞[J/OL].http://www.evget.com/article/2014/6/20/21209.html.
[3]汪列軍.安全漏洞及分類[J/OL].http://www.2cto.com/article/201405/299140.html.