徐國天 中國刑事警察學院

互聯網上存在種類齊全、數量繁多的各類網絡服務器,如存儲文件資源的FTP服務器、存儲電子郵件的SMTP服務器、存放網站的Web服務器,存儲商品信息的數據庫服務器、完成域名轉換任務的DNS服務器等等。這些服務器是互聯網的關鍵組成元素,承擔了重要的職責,也是黑客攻擊的主要目標。攻擊者嘗試通過暴力探測的方式得到遠程服務器的登錄密碼,進而竊取其上存儲的敏感信息、篡改重要數據、種植木馬程序,甚至完全控制目標服務器。因此研究針對遠程服務器的密碼暴力探測攻擊方式及其防御措施對維護信息網絡安全、打擊此類違法犯罪活動有重要意義。
“黑雨”是早期比較知名的一種遠程服務器密碼暴力探測工具,其設計思想如圖1(a)所示。它在一條TCP連接內測試密碼字典中的所有密碼,直至找到正確的密碼或所有密碼測試一遍,未找到匹配密碼。在設計之初這款軟件取得了較大成功,成為最知名的遠程服務器密碼探測工具。但隨著服務器軟件版本升級,目前這種攻擊軟件已經失效,原因如圖1(b)所示。現有服務器軟件不允許在一條TCP連接內測試大量密碼,幾個密碼登錄失敗之后,服務器會發出一個RST報文將這條TCP連接異常中斷。TCP連接中斷之后“黑雨”軟件自動結束運行,再次啟動后仍然是從密碼字典起始密碼開始測試,這導致“黑雨”軟件無法完成密碼探測任務。

目前比較有效的遠程服務器密碼暴力探測工具是Hydra。Hydra一詞原指古希臘神話中的怪物“九頭蛇”,它天生九個頭,傳說哪個頭被砍掉后會立即生長出一個新的頭,因此被看作是不死的怪物。密碼暴力探測工具Hydra與怪物九頭蛇有共同的特征,它使用多條TCP連接進行密碼測試,某條連接被異常中斷之后會自動生成一條新的TCP連接,下文將對基于Hydra的遠程服務器密碼探測技術進行研究。
Hydra運行后會生成多條TCP連接,每條TCP連接只測試幾個密碼,當服務器發出RST報文關閉這條TCP連接后,Hydra會自動生成一條新的TCP連接,從密碼字典中斷位置繼續測試任務,直至所有密碼被測試一遍,或者找出了正確的登錄密碼。Hydra支持幾乎所有協議的在線密碼探測,密碼探測的關鍵在于是否具有一個強大的字典文件。

目前互聯網上各種類型的網站數量眾多、功能齊全,如電子商務站點、OA信息發布站點、網絡游戲站點、政府機關企事業單位的門戶網站等。這些站點均為用戶分配了相應的賬戶信息,只有通過登錄認證之后,才可以瀏覽、使用相應的資源。各類網頁中登錄密碼的探測成為黑客關注的焦點,一些中、小規模站點(如政府機關、企事業單位門戶網站)未設置驗證碼識別,同時未進行登錄次數限制,Hydra可以針對這類站點進行密碼探測。
以HTTP-GET方式提交的參數會出現在客戶主機的瀏覽器地址欄中,一些敏感信息例如賬戶名、密碼等不適合采用這種方式提交。這些敏感信息通常以POST方式提交給Web服務器,下面舉例說明。

如圖3所示,在上面的例子中,客戶首先向服務器發出一個GET請求報文,請求獲取“login.html”。服務器通過一個HTTP應答報文將“login.html”返回給客戶。客戶主機的瀏覽器將“login.html”解釋為一個登錄窗口,包含輸入用戶名、密碼的文本框和確定按鈕。
客戶輸入用戶名、密碼,單擊確定按鈕之后,客戶機以HTTP-POST方式將賬戶信息發送給服務器端的“user.asp”。“user.asp”使用Request.form()方法讀出用戶名(peter)和密碼(2480),然后通過一條Select數據庫查詢語句到User數據表中進行檢索,發現與第一條記錄匹配,于是“user.asp”將“peter”用戶的相關信息通過一個HTTP的應答數據報返回給客戶。
客戶提交給服務器的HTTPPOST請求報文如圖4所示。HTTP首部的第一行表明提交方式為POST,Referer參數表明在這之前客戶訪問了“login.html”,客戶提交的賬戶信息包含在HTTP數據部分。

用戶登錄網站存在成功和失敗兩種情況,這兩種情況下網站返回的應答數據存在差別,Hydra在提交一組賬戶、密碼之后,通過檢測網站的返回數據可以確定登錄是否成功。因此使用Hydra探測網頁密碼的關鍵環節是提取出登錄成功和登錄失敗兩種情況下服務器應答數據的區別,并將這種區別設置到Hydra軟件中,使其能夠識別不同情況。
登錄失敗情況下的通信流程如圖5所示,首先Hydra模擬客戶提交了一組錯誤的賬戶、密碼數據,服務器返回的第一個數據包是響應代碼為100的HTTP-continue類型應答報文。第二個報文是響應代碼為200的HTTP-OK報文,在這個數據包中攜帶了一段Vbscript腳本,它的作用是彈出一個對話框,顯示內容為ERROR,內容長度為32個字節。登錄成功狀態下服務器返回的應答數據中通常不會存在ERROR字符串,并且應答報文的長度也不會是32字節,因此這兩個數值可以嘗試作為區分登錄成功和失敗情況下的采集點。

登錄成功情況下的通信數據如圖6所示,可見服務器返回的應答數據中不存在ERROR字符串,并且應答報文的長度也不是32字節,進一步說明之前確定的采集點正確。Hydra只要識別出應答報文中不存在ERROR或32字符串,即認定登錄成功,否則認定登錄失敗。

并不是所有網頁密碼都可以使用Hydra進行探測,Hydra只能識別響應代碼為200的HTTP-OK報文中攜帶的應答數據,而不能識別其它類型響應代碼中的數據。圖7顯示的例子中,無論登錄成功與否,服務器均返回代碼為302的HTTP-Object moved應答報文,這類網頁密碼就不能使用Hydra進行探測。

使用Hydra探測網頁密碼的執行流程如圖8所示。首先任意輸入一組賬戶信息,登錄網站,捕獲登錄失敗報文。如果應答報文響應代碼為302,則該站點不能進行密碼探測。

如果黑客具有一組正確的登錄賬戶信息,則可以捕獲一組成功登錄數據報,通過比較成功和失敗情況下服務器返回的應答數據,可以準確計算出兩者的區別,獲得采集點。如果沒有合法賬戶信息,則需要估算采集點,例如可以將應答報文的長度值作為采集點。最后使用密碼字典循環探測,直至探測成功,或結束測試。
下面舉例說明使用Hydra探測網頁密碼。準備工作包括以Host-only方式啟動兩臺Windows虛擬機,一臺作為被攻擊的網站服務器,另一臺作為攻擊者使用的計算機,配置IP地址實現網絡通信,在服務器端安裝一個測試用網站。
在黑客主機端訪問網站登錄頁面輸入一個真實存在的用戶名“jack”,密碼隨意輸入,點擊登錄。同時使用wireshark捕獲通信數據。在測試當中Wireshark會捕獲大量通信數據,為了便于分析,可以將特定TCP數據流提取出來。方法如下:首先定位POST數據包,賬戶和密碼就包含在這類數據包中,單擊編輯,選擇查找數據幀,在過濾文本框中輸入POST,選擇在String中查找,單擊確定。在定位到的POST數據包上單擊鼠標右鍵,選擇“follow tcp stream”,可以提取出這條TCP通信流上傳遞的數據。
提取出的TCP流數據如圖9所示,這里顯示的是每個數據包的應用層內容。可以確定登錄頁面URL地址為“/356e/access.asp”,包含登錄用戶名和密碼的POST數據為“username=jack&password=123456&url=login.asp&imageField.x=20&imageField.y=3”,服務器返回的第二個應答報文響應代碼為200,確定數據采集點為95。這些信息主要用于后面的密碼探測。

這里使用名為Superdic的字典生成工具形成一個電話號碼字典文件。選擇基本字符集,由于電話號碼由數字組成,因此字符集選擇數字。
這里使用7.4版Hydra進行密碼探測。如果在Win xp系統上使用8.1版Hydra,需要安裝Vc2005_x86。Hydra軟件的命令格式為:Hydra -l 用戶名-P字典文件-w超時間隔-t線程數-f-v 192.168.0.3 http-post-form “URL:賬戶數據格式:錯誤返回值”。相關參數可以從第一步的Wireshark分析結果中提取。
形成的探測指令如下:hydra -l jack -P c:superdic.txt -f-v192.168.0.3 http-post-form "/356e/access.asp:username=jack&password=^PASS^&url=login.asp&imageField.x=24&imageFie ld.y=2:95"。顯示探測出的密碼為86982480,如圖10所示。

為了防止惡意網絡攻擊和網絡刷單行為,早期采用圖形文字驗證碼或簡單的數學題等方式來識別提出訪問請求的是機器還是人類,理論基礎是“只有人類能識別圖像中的文字,完成數學運算”。但隨著人工智能的快速發展,機器已經能夠準確識別圖像中的文字,完成簡單的算數運算。黑客可以采用人工方式或自動識別方式來獲取驗證碼。人工方式是密碼探測過程中,每測試一組密碼,將獲得的驗證碼圖片發給一個人工解碼員,人工解碼員使用手機等終端識別驗證碼,并將識別結果返回給黑客。這種方式下,黑客需要為人工解碼員支付服務費。人工解碼服務一般由另一伙黑灰產業集團經營。自動解碼服務是黑客將圖片驗證碼發送給自動解碼系統,解碼系統將識別結果返回給黑客主機。上述方式均可繞過圖文驗證碼這道安全屏障。
短信驗證碼在一定程度上克服了圖文驗證碼存在的不足,用戶登錄時輸入手機號碼,只有正確提交平臺發出的短信驗證碼,才允許用戶登錄,這一措施比較有效地防止機器自動批量登錄平臺。但是短信驗證方式也可以人工自動解碼,還面臨著短信被攔截的風險。同時,對于用戶來說,每次登錄都要查看手機短信,也帶來不便捷的體驗。
目前,無感驗證和行為驗證越來越多地應用于網絡平臺的登錄驗證。無感驗證是通過采集用戶的屏幕滑動,鍵盤輸入等行為數據,通過對這些數據進行統計分析來識別提交訪問請求的是機器還是人類,甚至能根據使用習慣識別出具體人員信息,目前已有比較成熟的無感認證產品。行為驗證主要有拖動式和點觸式驗證,拖動式就是提示用戶將滑塊拖動到指定位置,點觸式是根據提示信息,依次點擊圖片中的文字或數字,進而完成人機識別。在實際應用當中,可以將行為驗證和無感驗證結合應用,大量用戶可以通過無感驗證進行識別,對這部分用戶來說感覺不到驗證過程。無感驗證無法有效識別的部分登錄用戶,如新用戶或潛在的惡意用戶,可采用行為驗證方式加以判斷。這種結合的驗證方式在增強網絡防護的同時,也帶來了便捷的用戶體驗。
網絡服務器可以采用限制某一IP地址的登錄失敗次數來防止密碼探測,網上銀行普遍采用這一措施防止密碼探測。這種方法是限制客戶的登錄次數,如客戶連續登錄失敗三次,則將賬戶鎖定24小時。銀行采用的安全限制比較嚴格,一般的Web服務器在用戶連續登錄失敗后,會將賬戶鎖定幾分鐘,之后用戶可以再次嘗試登錄。這樣一個簡單的防御機制可以有效解除密碼探測威脅。
早期的探測技術是在一條TCP連接內測試多組賬戶密碼對,隨著操作系統的升級和漏洞修補,這種方式已經失效。Hydra采用的是在一條TCP連接內只測試一組賬戶信息的方法,當這條TCP連接被異常阻斷之后,立即產生一條新的TCP連接繼續測試。這種方式對一些中小規模Web、FTP、郵件服務器和網站系統比較有效,但當網站采取了圖片驗證碼、錯誤登錄次數限制等措施后,這一技術也將失效。目前互聯網上出現了利用自動解碼平臺和自動代理切換技術來繞過驗證碼和登錄次數的限制,已經出現了這方面的實際案例,并造成較大影響,后續筆者將對這類新型攻擊的檢測和取證技術加以研究。