田崢,薛海偉,田建偉,漆文輝
(國網(wǎng)湖南省電力公司電力科學(xué)研究院,湖南長沙410007)
基于網(wǎng)頁靜態(tài)分析的Web應(yīng)用系統(tǒng)弱口令檢測方法
田崢,薛海偉,田建偉,漆文輝
(國網(wǎng)湖南省電力公司電力科學(xué)研究院,湖南長沙410007)
針對現(xiàn)有基于動態(tài)截取方式的Web應(yīng)用賬號弱口令檢測方法操作繁瑣、自動化程度較低,無法滿足信息安全監(jiān)督工作的需要。本文提出一種基于網(wǎng)頁靜態(tài)分析的Web應(yīng)用系統(tǒng)弱口令檢測方法,通過對登錄頁面的表單進行識別與分析,實現(xiàn)對登錄關(guān)鍵信息的自動提取?;诖朔椒?,實現(xiàn)了一個可對Web應(yīng)用賬號進行自動化弱口令檢測的系統(tǒng)原型,并支持常見數(shù)字和字母組合的驗證碼識別。系統(tǒng)自動化程度較高,具有較好的實用性和應(yīng)用前景。
Web應(yīng)用系統(tǒng);弱口令;動態(tài)截取;靜態(tài)分析;驗證碼識別
近年來,隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,以及近期“互聯(lián)網(wǎng)+”概念的提出,越來越多傳統(tǒng)行業(yè)融合互聯(lián)網(wǎng)發(fā)展新形態(tài)、新業(yè)態(tài),如今許多企業(yè)的業(yè)務(wù)開展都離不開Web應(yīng)用系統(tǒng)。以電力行業(yè)為例,國家電網(wǎng)公司管理信息大區(qū)中80%以上的信息系統(tǒng)都是采用B/S模式開發(fā)的,用戶僅需通過瀏覽器即可訪問應(yīng)用系統(tǒng)。然而,Web應(yīng)用系統(tǒng)在提供便捷性的同時,也帶來了不小的安全隱患。正是由于其開放性和訪問的便捷性,Web應(yīng)用一直是黑客的重點攻擊對象,據(jù)Gartner的數(shù)據(jù)表明,當前網(wǎng)絡(luò)75%以上的攻擊都是針對Web應(yīng)用進行的〔1〕。
賬號口令安全是Web應(yīng)用系統(tǒng)的第一道防線,也是Web應(yīng)用安全的基礎(chǔ)。特別是在電力行業(yè),絕大多數(shù)的Web應(yīng)用系統(tǒng)都需要用戶登錄后才能操作,系統(tǒng)的首頁通常就只有一個登錄框,因此口令安全就顯得尤為重要。弱口令問題雖然看起來不起眼,但實際危害卻很大〔2〕。信息安全是一個縱深防御的過程,其防護強度取決于系統(tǒng)中最薄弱的一環(huán)。一旦Web系統(tǒng)存在弱口令漏洞,就等于向入侵者敞開了一扇大門,可能成為系統(tǒng)中那塊最致命的短板。
Web安全的攻與防是密不可分的。只有通過從用戶或入侵者的角度對目標系統(tǒng)進行滲透測試,了解其攻擊的手段和原理,才能更加有的放矢地采取防護措施,取長補短,實現(xiàn)最有效的防御。文中也將沿用這種思路,試圖站在入侵者的角度,研究Web應(yīng)用系統(tǒng)弱口令檢測的關(guān)鍵技術(shù),以此來為Web應(yīng)用的口令安全提供防護思路和解決方案。
從檢測方法來看,Web應(yīng)用系統(tǒng)的弱口令檢測可以分為白盒檢測和黑盒檢測兩類方法〔3〕。白盒檢測最早應(yīng)用在針對軟件源代碼的安全測試中,這種方法通過檢查軟件內(nèi)部的邏輯結(jié)構(gòu),在軟件系統(tǒng)中設(shè)置多個檢查點,在對軟件進行邏輯路徑遍歷的過程中,檢查程序在每個監(jiān)測點的狀態(tài)是否與預(yù)期狀態(tài)一致,進而判斷軟件系統(tǒng)是否存在安全缺陷。對于弱口令檢測來說,白盒檢測是指通過直接查詢數(shù)據(jù)庫的方法,將存放用戶名和口令的表數(shù)據(jù)提取出來,然后將查詢到的用戶口令與事先定義好的弱口令字典進行匹配,檢查是否存在弱口令的情況。這類方法可以對應(yīng)用系統(tǒng)弱口令情況進行全面的排查,做到無遺漏、無死角,且檢測效率高。但由于需要直接連接數(shù)據(jù)庫,因此無法進行遠程操作,且要求測試者對應(yīng)用系統(tǒng)的數(shù)據(jù)庫信息和表結(jié)構(gòu)非常清楚。
黑盒檢測則是一類更為常見的弱口令檢測方法。相對于白盒檢測,黑盒檢測是一種基于數(shù)據(jù)驅(qū)動的測試,這種檢測不需要了解軟件系統(tǒng)的內(nèi)部情況、邏輯結(jié)構(gòu)等,只需知道程序的輸入、輸出接口和主要功能即可。窮舉法(又名暴力破解)是弱口令黑盒檢測的一種主要方法,其原理是利用應(yīng)用系統(tǒng)的登錄接口,對所有符合弱口令條件的用戶口令進行逐一驗證,如果其中某一種情況能夠登錄成功,則說明該賬號存在弱口令情況。這類方法的優(yōu)勢是簡單、方便,可遠程操作,但是缺點是有容易受到應(yīng)用系統(tǒng)的登錄限制,例如,如果應(yīng)用系統(tǒng)具備登錄失敗鎖定功能,則窮舉法將無法實施。目前來說,電力行業(yè)的大多數(shù)Web應(yīng)用系統(tǒng)都不具備登錄失敗鎖定功能,因此對Web應(yīng)用系統(tǒng)的弱口令黑盒檢測方法的研究仍然是有意義的。
對于一個Web應(yīng)用系統(tǒng)而言,其賬號口令分為很多種,包括主機操作系統(tǒng)賬號、Web服務(wù)器管理后臺賬號、應(yīng)用系統(tǒng)賬號等。目前市面上已經(jīng)有很多暴力破解工具可以完成對前面兩類弱口令的黑盒檢測,如綠盟的極光漏掃工具,可以對常見操作系統(tǒng)及Web中間件的弱口令進行探測,類似的工具還有X-Scan、H-Scan等〔4〕。然而對于應(yīng)用系統(tǒng)賬號口令,目前尚無很好用的自動化測試工具。Burpsuite和Hydra雖然可以實現(xiàn)對Web登錄表單的暴力破解,但操作較繁瑣,且對存在驗證碼的登錄表單無能為力。因此,針對Web應(yīng)用賬號的弱口令檢測方法是文中重點關(guān)注的對象。
基于窮舉法對Web賬號弱口令進行檢測的關(guān)鍵是如何獲取登錄過程中向服務(wù)器發(fā)送的HTTP數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)中包含了登錄所需的關(guān)鍵信息,如用戶名、口令、驗證碼等。獲取這些信息后,就可以利用數(shù)據(jù)重放的方式,不斷嘗試不同的用戶名和口令組合,達到暴力破解的目的。目前,獲取登錄HTTP數(shù)據(jù)結(jié)構(gòu)常采用動態(tài)截取的方式,Burpsuit的intruder模塊就是采用這種方式的代表。其原理是通過類似設(shè)置HTTP代理的方式,截取用戶登錄過程中向服務(wù)器發(fā)送的HTTP數(shù)據(jù)包,從而得到登錄所需的關(guān)鍵信息,如登錄url,用戶名和口令字段名稱、是否需要驗證碼等信息。這類方法的優(yōu)點是識別較準確,但操作較繁瑣,自動化程度不高,無法批量操作,且對https的支持不好。
文中設(shè)計了一種基于靜態(tài)分析的登錄HTTP數(shù)據(jù)結(jié)構(gòu)獲取方法,可直接通過解析登錄頁面的HTTP源碼,識別出登錄表單的關(guān)鍵信息。該方法的優(yōu)勢是適用性強,只要能獲取到網(wǎng)頁源碼就可以完成分析,不受限于Web應(yīng)用的類型,無論是http或https都適用,且自動化程度較高,可以進行批量操作。
1.1 靜態(tài)分析處理流程
圖1 登錄表單識別和分析流程
靜態(tài)分析的關(guān)鍵是對登錄表單的識別與分析,處理流程如圖1所示??煞譃楸韱巫R別、表單分析和字段提取3個主要步驟。在獲取了登錄頁面的HTML源碼之后,表單識別模塊開始對源代碼進行分析,找出其中的登錄form表單,然后對form表單進行分析,提取登錄時所指向的URL鏈接,并判斷是否存在驗證碼,如果存在驗證碼,則還需要拿到更新驗證碼的URL。最后是提取登錄所需要的所有參數(shù),包括用戶名、密碼、驗證碼字段和隱藏字段(如果存在)的參數(shù),并進行封裝,便于后續(xù)的暴力破解。
1.2 登錄表單識別
此模塊的主要作用就是分析html的源代碼,并從中找出登錄的form表單。在html的源代碼中,可能存在一個或者是多個form表單。對于只存在一個form表單的情況,則無需判斷,此form表單必定為登錄的form表單。若是多個form的情況,則需要對html源代碼分析。因此,這一步的核心功能就是對于存在多個form表單的情況,找出其中用于登錄的form表單。通過對登錄表單和其他非登陸表單的差異性分析,文中找出了其中的2個關(guān)鍵指標用于對登錄表單進行鑒別,分別為action的值和input的數(shù)量。
1)action值分析:登錄表單中action的值通常為登錄提交的url(全路徑或相對路徑),或者是javascript方法名,而無論是哪一種情況,action的值通常會包含“l(fā)ogin”“check”“validate”等字樣。因此,我們可以通過判斷form表單是否存在action屬性、其內(nèi)容是否存在上述關(guān)鍵字來鑒別是否為登錄表單。
2)input標簽分析:登錄表單中input標簽的數(shù)量通常不會大于3個,分別用于輸入用戶名、密碼和驗證碼(如果有),而且其中有且只有一個類型是“password”的input標簽,用于輸入密碼。網(wǎng)頁中的其他表單通常不具備這樣的特征,以與登錄表單最相似的注冊表單為例,其類型為password的input標簽有2個,且總數(shù)通常大于3。
綜合上述兩種分析方法,可以很精確地定位到登錄表單的位置。接下來就是對表單中的數(shù)據(jù)進行分析和提取。
1.3 登錄表單分析
有3個關(guān)鍵的信息需要通過登錄表單的分析進行提取,分別是登錄提交的url地址、登陸字段名的獲取、以及驗證碼的判斷。由于關(guān)鍵信息都在input標簽中,因此先利用DOM分析樹的方法提取出表單中所有的input標簽,去掉其他的干擾信息,然后對上述3個信息進行逐個提取。
1.3.1 登錄url的提取
在大多數(shù)情況下,登錄的form使用的是POST方法,且登錄的URL為form表單中action屬性的值。但action值可能會有以下幾種情況:
1)action為絕對url地址,action的值是一個完整的URL鏈接。如action的值為:HTTP:// www.example.com/path1/login。那么實際的登錄URL即為action的值。
2)action的值為以‘/’開頭,action的值為一個相對的URL。如action的值為“/path1/path2/ login”。則最后頁面實際提交的URL為host+action。假設(shè)host為www.example.com,則實際登錄的URL為www.example.com/path1/path2/login。
3)action的值直接為一個相對鏈接,action的值為一個相對的URL。如”path5/login”(注意與第2種情況的區(qū)別)。則頁面最后提交的URL為: url.path+‘/’+action。假設(shè)當前頁的URL為www.example.cm/index1/home.html,則頁面實際提交的URL為www.example.com/index1/path5/ login。
4)action的值為javascript方法名,說明提交表單的操作是在javascript方法里完成的,而登錄的url地址一定會在該方法中的某個位置體現(xiàn),因此需要繼續(xù)對該javascript方法進行分析。如果javascript方法的流程較復(fù)雜,或者登錄的url地址不是以完整的形式出現(xiàn)在頁面源碼中,則有可能出現(xiàn)action值識別不成功的情況,這時需要采用其他的方法來獲取登錄url了,比如采用類似burpsuite的動態(tài)抓包的方式。
1.3.2 驗證碼的判斷
驗證碼通常是一張<img>標簽的圖片,且具有src,alt和onclick 3個屬性。
1)src屬性:如果一個img標簽是驗證碼標簽,則此img標簽的src必然會有值,且此值就是生成驗證碼的URL鏈接。但是存在src屬性的img標簽卻不一定是驗證碼的標簽。所以img標簽存在src屬性是此img標簽為驗證碼標簽的必要不充分條件。利用此特征可以過濾很多無用的img標簽。
2)alt屬性:Img標簽的alt屬性主要是一個解釋說明的作用。但是如果alt的屬性中有“驗證碼”或者是“captcha”等字樣,則說明此img標簽必然為驗證碼標簽。
3)onclick屬性:與src屬性類似。如果一個img標簽存在onclick屬性,則此img標簽一定為驗證碼標簽,但是驗證碼不一定存在onclick標簽。所以存在onclick屬性是成為驗證碼標簽的充分不必要條件。
綜合上述特征,可以精確地判斷出表單中是否存在驗證碼。如果存在,則驗證碼所在img標簽的src屬性值即為生成驗證碼的鏈接。由于src的值同樣也有可能是一個相對的URL,要得到一個完整的URL,處理方式與前面獲取登錄URL的方式相同。
1.3.3 登錄參數(shù)名的提取
登錄參數(shù)主要包含2類,一類是主要登錄參數(shù)(用戶需要在界面上輸入),如用戶名、密碼和驗證碼;另一類是次要參數(shù),這些參數(shù)是藏在頁面上的,不需要用戶輸入,部分是固定值,部分是會隨著頁面而改變。當用戶點擊提交按鈕之后,次要參數(shù)也會隨著發(fā)送到后臺。
提取登錄參數(shù)名可以等價于提取對應(yīng)的input標簽,因為input標簽所對應(yīng)的name屬性值即為登錄參數(shù)。
1)提取主要參數(shù):主要參數(shù)包括用戶名、密碼和驗證碼。驗證碼參數(shù)名的提取在前面驗證碼的判斷部分有提到過。密碼字段的參數(shù)名也相對簡單,找到類型為“password”的input標簽即可。而用戶名所在input標簽的查找方式則采用了一些小技巧。用戶名的input標簽和密碼的input標簽一般都會相鄰,且用戶名會位于密碼的上方。所以在找到了密碼的input標簽之后,結(jié)合用戶名的常用字段名如“username”,“user”,“uname”,就不難定位到用戶名的input標簽了。
2)提取次要參數(shù):在去掉了主要參數(shù)的所有的input標簽之后,在登錄表單中剩下的其他的input標簽都是次要參數(shù)。在這些次要參數(shù)的input標簽中,部分input標簽是有value屬性并且是有值的,部分標簽是沒有value屬性的。對于那些value屬性有值的input標簽,此值就是默認值。
基于上述HTTP靜態(tài)分析方法,設(shè)計一個對Web應(yīng)用賬號進行自動化弱口令檢測的系統(tǒng)原型。圖2給出了系統(tǒng)的框架圖。該系統(tǒng)可實現(xiàn)對包含驗證碼的Web登錄表單進行暴力破解。
從圖2可以看出,系統(tǒng)主要包含4個關(guān)鍵流程,分別是:登錄頁面獲取、登錄表單的識別與分析、驗證碼識別和暴力破解。其中:1)登錄頁面獲取是指系統(tǒng)根據(jù)輸入的url鏈接自動向服務(wù)器發(fā)出HTTP請求,并獲取服務(wù)器響應(yīng)數(shù)據(jù),提交給登錄表單識別模塊進行分析;2)登錄表單的識別與分析集成了上述HTTP靜態(tài)分析技術(shù),根據(jù)服務(wù)器的響應(yīng)數(shù)據(jù),自動識別出登錄頁面中的登錄表單關(guān)鍵信息;3)如果登錄表單需要填寫驗證碼,登錄表單識別模塊會把生成驗證碼的鏈接發(fā)送給驗證碼模塊,驗證碼識別模塊通過調(diào)用開源的光學(xué)字符識別引擎tesseract-ocr來對常見的數(shù)字+字符類型的圖片驗證碼進行識別〔6〕;4)暴力破解則是最后的窮舉登錄階段,向服務(wù)器發(fā)送包含不同用戶名、密碼組合的HTTP請求包,并根據(jù)服務(wù)器響應(yīng)數(shù)據(jù)自動判斷是否登錄成功。
圖2 弱口令檢測系統(tǒng)框架
此外,文中提出了一種驗證碼識別的錯誤糾正機制,根據(jù)驗證碼識別的結(jié)果(是否為字符或數(shù)字)以及服務(wù)器反饋的數(shù)據(jù)(是否包含驗證碼、錯誤等關(guān)鍵字)來自動判斷驗證碼是否識別正確,如果識別有誤,則使用相同的用戶名和密碼進行重復(fù)嘗試,直到驗證碼識別正確為止。這樣就保證了弱口令不會被漏檢。圖3展示了系統(tǒng)的運行界面。該系統(tǒng)主要有下列幾個特點:
圖3 弱口令檢測系統(tǒng)運行界面
1)軟件能自動分析出網(wǎng)頁中的登錄表單,提取用戶名和密碼字段并進行自動填充,整個弱口令檢測過程自動化程度較高。
2)軟件能夠?qū)ΤR姅?shù)字加字母的驗證碼進行自動識別,識別過程不需要人工干預(yù)。
3)軟件支持批量化的弱口令探測,使用者可輸入一個IP段或多個url鏈接,軟件可同時對多個目標進行分析,執(zhí)行效率較高。
文中對Web應(yīng)用系統(tǒng)的弱口令檢測技術(shù)進行了探討,重點分析了采用窮舉法對Web應(yīng)用賬號進行弱口令檢測的關(guān)鍵技術(shù)。為解決現(xiàn)有基于動態(tài)截取的弱口令檢測方法的低效率、自動化程度低等問題,文中設(shè)計了一種基于網(wǎng)頁靜態(tài)分析的弱口令檢測方法,并實現(xiàn)了一個可對Web應(yīng)用賬號進行自動化弱口令檢測系統(tǒng)原型。該系統(tǒng)同時對多個Web應(yīng)用系統(tǒng)進行批量的、自動化的弱口令檢測,無需人工干預(yù),具有較好的實用性和應(yīng)用前景。
〔1〕尹海翔.Web賬號管理安全設(shè)計思路〔J〕.無線互聯(lián)科技,2015(12):87-88.
〔2〕txcbg.網(wǎng)站安全的大敵—弱口令〔J〕.電腦愛好者,2011 (15):65.
〔3〕王欣.Web應(yīng)用系統(tǒng)安全檢測關(guān)鍵技術(shù)研究〔D〕.北京郵電大學(xué)博士研究所學(xué)位論文.北京:2011.
〔4〕鄒俊豪,張巖.基于網(wǎng)絡(luò)安全掃描的網(wǎng)絡(luò)信息安全研究〔J〕.計算機與網(wǎng)絡(luò),2013(24):65-67.
〔5〕吳海燕,苗春雨,劉啟新,等.Web應(yīng)用系統(tǒng)安全評測研究〔J〕.計算機安全,2008(4):44-46.
〔6〕聞宏強,周華,陸澄澹,等.驗證碼識別原理探討〔J〕.電子技術(shù)與軟件工程,2014(16):132,172.
Weak password detection of Web application system based on webpage static analysis
TIAN Zheng,XUE Haiwei,TIAN Jianwei,QI Wenhui
(State Grid Hunan Electric Power Corporation Research Institute,Changsha 410007,China)
The existing weak password detection method based on dynamic intercept is of low complexity and low degree of automation,which can not meet the needs of information security supervision.In this paper,a weak password detection method based on the static analysis of webpage is proposed,which automatically extracts the key information of login process by identifying and analyzing the form of the login page.Based on this method,a system prototype which can automatically detect the weak password for Web application and supports captcha recognize of common digital and letter combinations is realized. The system has a high degree of automation,and has good practicability and application prospect.
Web application;weak password;dynamic intercept;static analysis;captcha recognize
TP393.08
B
1008-0198(2016)05-0047-04
10.3969/j.issn.1008-0198.2016.05.012
田崢(1983),男,湖南長沙人,計算機應(yīng)用技術(shù)專業(yè)工學(xué)博士。
2015-11-13 改回日期:2016-03-18