田曉玲 楊曉凱
(1.北京工業(yè)職業(yè)技術(shù)學(xué)院 信息工程學(xué)院,北京100042;2.北京歐非科技有限公司,北京100010)
隨著移動互聯(lián)網(wǎng)的新興和快速發(fā)展,人們的工作、學(xué)習(xí)、生活方式發(fā)生了深刻變化,可以足不出戶就能完成想做的事情,如在線學(xué)習(xí)、在線購物、視頻娛樂、各行業(yè)APP小程序等等,特別是融入HTML5移動技術(shù)以來,這些APP的廣泛使用已成為人們個人生活、辦公和業(yè)務(wù)構(gòu)成的重要組成部分,在為人們帶來方便的同時,也面臨著來自各方面的安全考驗。這些考驗不僅僅來自于病毒,還包含移動平臺本身的安全風(fēng)險,另外更重要的考驗來自于惡意的攻擊、篡改和釣魚行為。
因此,HTML5頁面的安全測試在移動WEB應(yīng)用中的地位越來越重要,利用滲透技術(shù)對HTML5頁面和其業(yè)務(wù)邏輯功能進(jìn)行安全測試成為開發(fā)者需要考慮的一項非常重要的內(nèi)容。
滲透測試是通過模擬攻擊者的方法探尋被測信息系統(tǒng)的安全隱患,進(jìn)而評估其潛在的風(fēng)險。測試人員不僅要挖掘攻擊者可以利用的安全漏洞,而且還要盡力利用這些漏洞,從而評估網(wǎng)絡(luò)攻擊可能造成的實質(zhì)危害[1]1。對于WEB應(yīng)用的滲透測試是利用滲透知識,對一個網(wǎng)站進(jìn)行一步一步的滲透,發(fā)現(xiàn)其中存在的漏洞和隱藏的風(fēng)險,然后撰寫測試報告并提供給客戶??蛻舾鶕?jù)測試報告對網(wǎng)站進(jìn)行漏洞修補,以防止黑客的入侵[2]。
滲透測試是出于保護(hù)系統(tǒng)的目的,對目標(biāo)系統(tǒng)進(jìn)行的一系列測試。該測試模擬黑客入侵的常見行為,從而尋找系統(tǒng)存在的漏洞。滲透測試的基本流程分為8個步驟:明確目標(biāo)、信息收集、漏洞發(fā)現(xiàn)、漏洞利用、信息分析、獲取所需信息、信息整理、報告形成。在WEB應(yīng)用中,主要是指信息收集、漏洞發(fā)現(xiàn)、漏洞利用這3個階段,如圖1所示[1]5-6。
圖1 滲透測試的基本流程
WEB滲透測試屬于黑盒測試,按照修復(fù)方式,可將WEB滲透測試分為認(rèn)證授權(quán)類測試、命令執(zhí)行類測試、注入攻擊類測試、客戶端和服務(wù)端攻擊類測試、信息泄露類測試等。
按照測試漏洞的等級,可以劃分為低危漏洞測試、中危漏洞測試和高危漏洞測試。認(rèn)證授權(quán)類中的暴力破解屬于中危漏洞,而越權(quán)訪問就屬于高危漏洞。
認(rèn)證授權(quán)類是WEB中最為常見的一種漏洞,也是WEB滲透測試人員測試中必不可少的基礎(chǔ)環(huán)節(jié),這種測試主要包含對未授權(quán)的訪問、暴力攻擊、用戶名可枚舉、越權(quán)訪問、弱口令和文件上傳漏洞的測試。(1)未授權(quán)的訪問是指攻擊者在沒有獲取到登陸權(quán)限或者未經(jīng)授權(quán)的情況下進(jìn)行訪問和操作;(2)暴力攻擊,即暴力破解,是在某一范圍內(nèi)對所有可能的情況進(jìn)行逐一驗證,直到所有情況都驗證完畢為止,主要是對登陸口令的大批量嘗試;(3)用戶名可枚舉,主要利用登陸時輸入不存在的用戶名和錯誤密碼或者是存在的用戶名和錯誤密碼,返回不同的出錯信息,以此枚舉出系統(tǒng)中真實存在的賬號信息;(4)越權(quán)訪問,主要是指攻擊者可以在獲得低權(quán)限用戶賬號以后,利用手段繞過權(quán)限檢查去獲取原本無權(quán)訪問的高權(quán)限功能;(5)弱口令,主要是指攻擊者檢查網(wǎng)站管理員、客服人員等是否使用了弱口令作為賬號和密碼,第三方組件如遠(yuǎn)程管理軟件、數(shù)據(jù)庫等是否含有弱口令等;(6)文件上傳漏洞,即文件上傳是WEB中最為常見的一種功能需求,但是攻擊者有可能通過上傳可執(zhí)行腳本獲得執(zhí)行服務(wù)器端命令的能力[3]。
HTML5是構(gòu)建WEB內(nèi)容的一種語言描述方式。HTML5是互聯(lián)網(wǎng)的下一代標(biāo)準(zhǔn),是構(gòu)建以及呈現(xiàn)互聯(lián)網(wǎng)內(nèi)容的一種語言方式,被認(rèn)為是互聯(lián)網(wǎng)的核心技術(shù)之一[4]。它是HTML第5次重大修改,引入了新的標(biāo)簽、屬性和方法,將WEB帶入了一個更成熟的應(yīng)用平臺,擁有更強(qiáng)大的圖形繪制,包含更豐富的多媒體內(nèi)容,展現(xiàn)更為合理流暢的頁面結(jié)構(gòu)和形式處理。
伴隨著這些新功能的出現(xiàn),不可避免地會出現(xiàn)一些可以被利用的安全問題,甚至原來的某些攻擊方法的攻擊點和攻擊面都會有不同程度的擴(kuò)大。
常見的HTML5安全漏洞主要包含了輸入輸出驗證不充分、設(shè)計缺陷和環(huán)境缺陷3個方面,如圖2所示。
圖2 HTML5安全漏洞圖
圖2中,輸入輸出驗證不充分主要是指當(dāng)用戶的輸入不合規(guī)從而不能執(zhí)行預(yù)期的目標(biāo)而導(dǎo)致的WEB應(yīng)用方面的漏洞;設(shè)計缺陷主要是指由于系統(tǒng)在開發(fā)過程中編碼邏輯上的處理不當(dāng)造成的缺陷而引發(fā)的漏洞;環(huán)境缺陷主要是指系統(tǒng)在引用第三方的框架或者庫之類的代碼,而這些第三方的程序隨著時間的推移沒有進(jìn)一步更新維護(hù)而產(chǎn)生的漏洞[5]。
隨著網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,移動應(yīng)用越來越廣泛與深入,數(shù)據(jù)安全越來越重要。據(jù)數(shù)據(jù)顯示,我國平均每年由于網(wǎng)絡(luò)安全問題造成的損失高達(dá)600 億美元[6]。根據(jù)中華人民共和國金融行業(yè)標(biāo)準(zhǔn)《金融數(shù)據(jù)安全 數(shù)據(jù)安全分級指南》規(guī)定,HTML5應(yīng)用在傳輸過程中應(yīng)進(jìn)行加密處理,若要進(jìn)行滲透測試,首先需要先解決數(shù)據(jù)加密的問題。
筆者以某次某行業(yè)的漏洞挖掘過程為例,從發(fā)現(xiàn)請求和返回數(shù)據(jù)包的加密方式,到如何突破加密方式進(jìn)而破解加密算法,進(jìn)行深度挖掘,分析確定是否存在越權(quán)漏洞的問題。
在破解加密算法過程中,主要借助Burp Suite工具,它是一款可以用于攻擊WEB 應(yīng)用程序的集成平臺,常用的功能包含了抓包、重放和爆破[7]。
首先,訪問該行業(yè)的HTML5登陸頁面。進(jìn)入登陸界面,在該登陸界面輸入手機(jī)號碼和密碼進(jìn)行登陸。在登陸過程中,借助Burp Suite進(jìn)行抓包,查看Request請求數(shù)據(jù)包和Response響應(yīng)數(shù)據(jù)包發(fā)現(xiàn)請求和響應(yīng)全程加密。
其次,進(jìn)一步尋找加密方法。借助瀏覽器查看網(wǎng)頁源代碼,獲取ajax請求函數(shù),進(jìn)而找到對應(yīng)的JS文件,發(fā)現(xiàn)加密函數(shù)和解密函數(shù),通過查看代碼獲得相應(yīng)的加密算法——AES加密算法。
在項目中,經(jīng)常用到的加密算法有MD5,RSA,M2/M4,RES和AES/DES,而 AES(高級加密標(biāo)準(zhǔn))是最常見的對稱加密算法,可以借助Python,編寫腳本解密登陸Request數(shù)據(jù)包,獲取明文Request數(shù)據(jù)包,部分腳本代碼如下:
def encrypt_AES(text):
key = "73AR723706A547CB"
key_bytes =bytes(key,encoding='utf-8')
cipher = AES.new(key_bytes,AES.MODE_ECB)
content_padding = pkcs7padding(text)
encrypt_bytes =cipher.encrypt(bytes(content_padding,encoding='utf-8'))
entrypted_text =str(base64.b64encode(encrypt_bytes),encoding='utf-8')
return(entrypted_text)
def encrypt(str,key,iv):
cipher = AES.new(key,AES.MODE_CBC,iv)
x = AESUtil.__BLOCK_SIZE_16 - (len(str) % AESUtil.__BLOCK_SIZE_16)
if x != 0:
str = str + chr(x)*x
msg = cipher.encrypt(str)
msg = base64.b64encode(msg)
return msg
網(wǎng)站需要用戶訪問,且用戶多數(shù)都要進(jìn)行等級劃分,也就是說用戶具有不同的權(quán)限。如高權(quán)限的用戶可以操作低權(quán)限的用戶,高權(quán)限的用戶可以享有比低權(quán)限用戶更多的功能。如果權(quán)限功能設(shè)計存在缺陷的話,攻擊者很有可能利用這些缺陷進(jìn)行越權(quán)操作。如更換ID使同級用戶1獲取同級用戶2的數(shù)據(jù),進(jìn)行修改、刪除等一系列非法操作,使用低權(quán)限身份的賬號發(fā)送高權(quán)限才能發(fā)送的請求,獲得更高權(quán)限的操作,達(dá)到權(quán)限提升的目的,這就是越權(quán)漏洞[8]。
越權(quán)漏洞根據(jù)維度又可分為平行越權(quán)、垂直越權(quán)、交叉越權(quán)。平行越權(quán)即權(quán)限繞過,指的是權(quán)限類型不變,權(quán)限 ID 改變;垂直越權(quán)即權(quán)限提升,指的是權(quán)限 ID 不變,權(quán)限類型改變;交叉越權(quán)即交叉越權(quán)是垂直越權(quán)和水平越權(quán)的交集,指的是權(quán)限類型和權(quán)限ID都發(fā)生改變[9]。
在分析挖掘Request數(shù)據(jù)包的過程中,發(fā)現(xiàn)修改mobilephone參數(shù)可以越權(quán)查看他人敏感信息,包括銀行卡ID、額度等,使普通用戶獲取了管理員用戶的權(quán)限。
所以為了預(yù)防此類漏洞,要做到:前后端同時對用戶輸入信息進(jìn)行校驗,執(zhí)行雙重驗證機(jī)制;執(zhí)行關(guān)鍵操作或重要功能前必須驗證用戶身份;用戶敏感信息操作需要增加身份驗證;從cookie會話中獲取當(dāng)前用戶的會話ID,防止攻擊者對其修改,或在session,cookie中加入不可預(yù)測、不可猜解的user 信息;對象中直接引用加密資源ID,防止攻擊者枚舉ID,敏感數(shù)據(jù)特殊化處理;永遠(yuǎn)不要相信來自用戶的輸入,對于可控參數(shù)進(jìn)行嚴(yán)格的檢查與過濾[10]。
(1)未授權(quán)訪問。是一種中危漏洞,可以通過2種方式進(jìn)行測試。一是通過對登錄后的頁面進(jìn)行抓包,將抓取到的鏈接在其他瀏覽器中打開;二是通過掃描工具、爬蟲等得到相關(guān)的鏈接,然后進(jìn)行訪問。在修復(fù)此類漏洞的時候建議用戶在打開頁面時增加權(quán)限判斷,即判斷當(dāng)前用戶是否有權(quán)限訪問該頁面,在進(jìn)行開發(fā)的時候使用更成熟的框架如spring security處理權(quán)限問題[11]。
(2)用戶名可枚舉。是一種中危漏洞,測試方式比較簡潔,即在WEB登錄頁面,利用系統(tǒng)中存在的用戶名和不存在的用戶名進(jìn)行檢測,輸入存在或不存在的用戶名,密碼隨意,嘗試登錄,查看其回顯內(nèi)容,如:輸入存在的用戶名test,回顯如下:密碼錯誤;輸入不存在的用戶名txl,回顯如下:用戶不存在。在修復(fù)此類漏洞時,建議對網(wǎng)站登錄頁面的判斷回顯信息修改為一致,并且對于連續(xù)失敗達(dá)到一定次數(shù)的賬戶,如3次以上的賬戶進(jìn)行鎖定[12]。
(3)弱口令。是一種高危漏洞,常用的測試方式有3種。一是嘗試使用常見密碼,如:password,123456等;二是使用默認(rèn)口令進(jìn)行登陸,如設(shè)備的初始密碼,身份證后6位等嘗試登陸;三是借助Burp Suite工具進(jìn)行暴力破解。在修復(fù)此類漏洞時建議修改弱口令為強(qiáng)口令并限制用戶最大登陸次數(shù),若超過一定次數(shù)禁止用戶登錄,還可以限制可訪問登錄接口的用戶IP[13]。
(4)文件上傳漏洞。是一種高危漏洞,根據(jù)不同的WEB語言,檢測方法也不盡相同。在前端開發(fā)中最常使用的是JS腳本語言,幾種基于JS驗證的常見文件上傳的繞過方法有刪除JS代碼及onsubmit事件,使用本地提交表單;刪除代碼onsubmit事件中關(guān)于文件上傳時驗證上傳文件的相關(guān)代碼;直接更改文件上傳JS代碼中允許上傳的文件擴(kuò)展名;使用Burp Suite或是fiddle等代理工具提交上傳。在修復(fù)此類漏洞時,建議將文件上傳目錄直接設(shè)置為不可執(zhí)行,或者進(jìn)行文件類型檢查,結(jié)合MIME Type、后綴檢查等方式 ,只允許允許的文件類型進(jìn)行上傳;對于圖片的處理可以使用壓縮函數(shù);使用隨機(jī)數(shù)改寫文件名和文件路徑,使得用戶不能輕易訪問自己上傳的文件;單獨設(shè)置文件服務(wù)器的域名,使存儲文件服務(wù)器跟WEB網(wǎng)站服務(wù)器不在同一個根目錄下[14]。
筆者從滲透測試的概述、基本流程出發(fā),進(jìn)一步描述了WEB滲透測試的分類,初步探討了滲透測試在HTML5網(wǎng)站中的應(yīng)用。并以某行業(yè)HTML5網(wǎng)站滲透測試為例,講述了滲透測試的過程,從加密算法和越權(quán)漏洞入手,闡述了保證HTML5安全性的重要性,總結(jié)了常見的幾個漏洞的測試方法和修復(fù)建議,以期幫助學(xué)習(xí)者和滲透測試人員有針對性地進(jìn)行滲透測試。