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