范 晶,焦運良,戴貽康
(華北計算機系統(tǒng)工程研究所,北京100083)
互聯(lián)網中Web 應用所產生的漏洞數(shù)量越來越多, 使得每年發(fā)生的黑客攻擊案件也在逐年增長[1]。為了保障網絡或系統(tǒng)的信息安全,在系統(tǒng)投入應用之前都會對其進行滲透測試。滲透測試模擬黑客或者入侵者的攻擊行為,繞過或破壞目標系統(tǒng)的安全防護并獲得一定的系統(tǒng)權限,在此過程中檢測系統(tǒng)漏洞或病毒并給出修復建議,從而分析與評估系統(tǒng)的安全等級。 通常使用的滲透測試工具有WVS、AppScan、Nessus 等, 這些工具測試時存在自動化水平低、 測試流量太大以及漏洞發(fā)現(xiàn)率較低等缺點。基于此,本文設計一個基于TrackRay 的滲透測試平臺,功能強大,便于搭建,并且可以靈活地編寫插件快速實現(xiàn)Web 安全漏洞檢測。
Web 服務器概念較為廣泛,一般是指網站服務器,運行于計算機上的服務程序,可以向Web 客戶端(如瀏覽器)提供文檔或者信息瀏覽服務[2]。 Web服務器主要是以HTTP 協(xié)議(請求-響應協(xié)議)進行通信,所以也被稱為HTTP 服務器[3]。
Web 服務器的工作過程主要分為建立連接、發(fā)送請求、應答和關閉連接四個步驟。 客戶端(包括瀏覽器和其他應用程序)通過TCP/IP 協(xié)議(傳輸控制協(xié)議/網絡協(xié)議)建立和服務器的TCP 連接,通過打開虛擬文件socket 可以確認是否連接成功;當成功建立起連接后,客戶端向服務器發(fā)送基于HTTP 協(xié)議的用戶請求;服務器接收到請求后,經過查詢與處理, 向客戶機發(fā)送基于HTTP 協(xié)議的回應, 如果請求的網絡地址中包含有動態(tài)語言(如ASP,PHP,JSP等語言)的內容,那么服務器端將會使用相應動態(tài)語言的解釋引擎處理內容,并將處理后的數(shù)據(jù)發(fā)送給客戶端,客戶端接收到服務器發(fā)回的數(shù)據(jù)后將信息顯示在窗口中;最后,當發(fā)出的響應結束后,Web服務器便與客戶端斷開,關閉連接。 具體的工作原理圖如圖1 所示。
一般來說,如果在一個信息系統(tǒng)中存在某種問題,這種問題可能存在于設計、實現(xiàn)、運維等過程中,使得系統(tǒng)發(fā)生某種安全風險, 如對系統(tǒng)的機密性、完整性、可用性產生泄露和破壞,那么此問題就可以統(tǒng)稱為漏洞[4]。 從目前存在的系統(tǒng)漏洞來看,操作系統(tǒng)漏洞是遠遠少于應用程序漏洞的,絕大多數(shù)的漏洞類型屬于Web 服務器中的應用程序漏洞[5]。其中Web 應用程序漏洞又可以劃分為SQL 注入漏洞、文件上傳漏洞、跨站腳本攻擊等。
1.2.1 SQL 注入漏洞
SQL(結構化查詢語言)注入攻擊是黑客針對數(shù)據(jù)庫進行攻擊的常見方式,通過在Web 表單或Web鏈接中插入SQL 查詢語句,欺騙服務器執(zhí)行攻擊者所插入的SQL 查詢語句[6]。 具體來說,SQL 注入攻擊利用服務器中運行的Web 應用程序,將攻擊者編寫的SQL 查詢語句提交到到網站后臺執(zhí)行,然后返回給前臺頁面被SQL 注入攻擊的查詢結果。如果網站存在SQL 注入漏洞,攻擊者就可以通過輸入惡意SQL 查詢語句改變原先SQL 查詢語句的結構,從而改變用戶真正所需的查詢結果。
有兩種情況可以產生SQL 注入漏洞,一種是平臺層的配置錯誤或數(shù)據(jù)庫本身存在漏洞所導致的,還有一種是由于程序編寫者對輸入未進行過濾,或者在拼接SQL 注入字符串時沒有采用固定的結構,從而執(zhí)行了非法的數(shù)據(jù)查詢。 因此,可以采用預編譯語句固定SQL 語句結構,預先對外部輸入進行檢測、過濾等操作,以確保數(shù)據(jù)庫引擎所執(zhí)行的邏輯是未被篡改的。
1.2.2 文件上傳漏洞
在現(xiàn)代的Web 應用程序中, 為了提高業(yè)務效率, 共享文件,Web 應用程序一般都擁有允許用戶上傳文件的入口,雖然這種入口為用戶提供了很大的便利,但也給惡意用戶打開一扇門。 Web 應用程序中這種上傳入口越多,服務器所面臨的風險也就越大。 如果Web 程序對上傳的文件沒有進行仔細的過濾和轉化,惡意用戶就有可能上傳對服務器有危害的腳本文件,執(zhí)行違法操作,如獲得服務器目錄和文件、獲得服務器數(shù)據(jù)庫訪問權限、對企業(yè)內網進行掃描操作等[7]。 這些操作將會導致整個網站癱瘓和安全信息泄露,使用戶遭受嚴重的損失。
造成文件上傳漏洞的原因有多種情況,包括未對上傳文件的后綴名(擴展名)做嚴格檢查與限制;未對上傳文件的用戶權限進行限制; 以及Web 服務器對于上傳文件或者指定目錄的行為未做一定的限制等。 因此,對上傳文件的擴展名的合法性進行檢查,分析文件內容、檢測文件類型的合法性和限制Web 服務器對于特定類型文件的操作, 可以減少發(fā)生文件上傳漏洞的可能性。
1.2.3 跨站腳本攻擊
圖1 Web 服務器工作原理
跨站腳本攻擊(Cross Site Scripting,XSS),是指攻擊者利用網站漏洞惡意盜取用戶私人信息的行為。攻擊者一般通過XSS 漏洞將惡意腳本代碼注入到網站頁面鏈接中,并很好地偽裝成合法鏈接,當用戶不小心點開鏈接后,信息便被泄露出去[8]。 XSS漏洞曾在安全領域中未受到足夠的重視,認為其危害小可以忽略,但是隨著Web 應用的普及和復雜性的提升,以及在擁有大量用戶的企業(yè)或網站受到越來越多的XSS 攻擊之后,XSS 漏洞也被重視起來。攻擊者可以通過XSS 漏洞規(guī)避網站的訪問控制權限,從而控制用戶在瀏覽器上的行為,記錄和讀取用戶的網站密碼等私人信息。
跨站腳本攻擊主要分為持久性跨站腳本攻擊和非持久性跨站腳本攻擊。持久性跨站腳本攻擊所依賴的數(shù)據(jù)會存儲在服務器數(shù)據(jù)庫或文件中,在數(shù)據(jù)被清除或漏洞被修復之前會一直存在。而非持久性跨站腳本攻擊是一次性的,僅在當前訪問的鏈接或頁面中發(fā)揮作用, 如果頁面被關閉或者鏈接跳轉,那么這次攻擊的數(shù)據(jù)就會消失。 防御XSS 的關鍵就是在輸入不可信數(shù)據(jù)的時候進行合法編碼,對外部數(shù)據(jù)進行檢查、過濾等操作,并且考慮到不同瀏覽器之間的兼容情況應設置不同的過濾規(guī)則;在將來自外部的數(shù)據(jù)插入到網站頁面中時,對外部數(shù)據(jù)進行超文本標記語言實體編碼,以規(guī)避不合法的腳本在瀏覽器中解析運行。
TrackRay 是一個開源的插件化滲透測試平臺,集成有Metasploit、Nmap、SQLmap、AWVS 等知名安全工具,并內置漏洞掃描器,可實現(xiàn)安全漏洞掃描功能。 主體使用Java 編寫,支持Java、Python、JSON 等多種方式編寫插件,從而可以方便靈活地根據(jù)自己的需求來編寫和調用不同類型的插件,實現(xiàn)快速安全漏洞檢測。
首先安裝TrackRay 依賴環(huán)境,JDK1.8 和Maven是必須安裝的, 保證系統(tǒng)能夠執(zhí)行java-version 和mvn-verson。 同時安裝Metasploit、AWVS、Python 2.7和Nmap 等安全檢測工具,以實現(xiàn)Web 安全漏洞檢測。
整個平臺的搭建步驟如下所示。
(1)手動啟動AWVS 服務,登錄后臺生成一個安全的API 密碼。 復制此密鑰和AWVS 地址,以便進行密鑰和地址修改。
(2) 找到Python 的數(shù)據(jù)庫目錄, 修改python.package.path 參數(shù),如圖2 所示。
圖2 修改Python 參數(shù)
(3)安裝Maven 后找到倉庫位置,一般在settings.xml 里配置指定倉庫目錄,并在當前目錄下生成一個.m2 的目錄,并修改相應參數(shù),如圖3 所示。
圖3 修改Maven 參數(shù)
(4)Ceye.io 下注冊一個賬號, 記錄下分配到的域名和TOKEN,并修改配置文件,這是為DNSLOG回顯檢測漏洞時使用的,注冊頁面如圖4 所示。
圖4 注冊賬號
(5)啟動msf 和sqlmapapi 控制臺函數(shù),以便進行插件調用。 在相應的metasploit 和sqlmap 目錄下分別執(zhí)行,成功執(zhí)行后修改配置文件,如圖5 所示。
圖5 配置文件修改
(6)編譯打包程序,不同系統(tǒng)下的執(zhí)行命令不一樣:Windows 下運行package.bat;Linux 下運行package.sh。等待下載完成和程序編譯完成,若是此過程中未出現(xiàn)問題則會提示BUILD SUCESS,如圖6 所示。
(7)編譯成功后在當前目錄下打包一個trackray.jar程序, 也就是TrackRay 的主程序, 接著直接執(zhí)行start.bat 或者startup.sh,就可以啟動該項服務。 沒有拋出異常或ERROR 日志,則表示訪問8080 端口正常。 服務列表如圖7 所示。
圖6 編譯成功
至此,整個平臺搭建完成。 接下來通過調用服務或者調用相應編寫好的插件, 便可以實現(xiàn)Web安全漏洞檢測。 本平臺支持多種語言編寫插件,并且插件類型豐富,可根據(jù)自己的需要靈活編寫。
本平臺支持多種插件類型,包括:爬蟲插件、內部插件、獨立應用插件、漏洞掃描插件、交互式插件等。 其中漏洞掃描插件是本文研究的重點。
在創(chuàng)建掃描任務時,勾選“漏洞攻擊模塊”,便可以調用漏洞掃描插件,主要有獨立插件、漏洞規(guī)則和kunpeng JSON 插件三種。
獨立插件可以根據(jù)自己的需要進行編寫,給定requests、target 和task 參數(shù),再調用check()和attack()等抽象方法重寫漏洞插件規(guī)則,以檢測出漏洞。 本平臺采用簡單的判斷響應體就能夠識別出大多數(shù)漏洞, 因而相較于其他檢測工具的方法效率更高。kunpeng JSON 是一個Go 語言編寫的poc 測試平臺,只需按照該插件的格式規(guī)范創(chuàng)建一個JSON 文件到/resources/json 目錄下,便可以進行插件的調用。
圖7 服務列表
在進行插件調用時,本平臺提供一個簡單友好的MSF 控制臺界面,只需簡單地輸入命令行,便可以有效地執(zhí)行命令,調用插件,以及直觀地觀察執(zhí)行后的結果。 MSF 控制臺如圖8 所示。
圖8 MSF 控制臺
在圖8 中的首行msf>>后面輸入下面的第一行插件服務命令后,平臺便開始調用和執(zhí)行相應的插件,并將結果直接反饋回控制臺,運行的結果如圖9所示,可以直觀形象地觀察到檢測結果。
對一臺主機的端口和Web 瀏覽器作為測試對象, 提供該主機的IP 或域名作為測試對象輸入,圖10 是本平臺進行滲透測試實驗的流程圖。
圖9 MSF 執(zhí)行結果
圖10 試驗測試流程圖
首先進行TrackRay 的系統(tǒng)平臺環(huán)境搭建,即設置各種參數(shù);接著輸入目標的IP 或者域名,即輸入測試對象;對此IP 或域名進行端口掃描操作,掃描操作默認為收集目標的詳細信息,包括各個端口的開放情況、 開放的端口所使用的服務以及服務版本、目標主機所運行的操作系統(tǒng)類型以及可能的版本。 在掃描結束之后,此模塊會將掃描結果存儲在一個XML 文件中,以供后續(xù)步驟的分析。 在判斷調用插件的規(guī)則后,若目標運行了Web 服務,便進行漏洞檢測, 同樣是只需在MSF 控制臺輸入相應的調用命令,便可以記住相應的插件操作。 同時將漏洞檢測結果以報告的形式直觀地顯示出來。若是目標并沒有運行Web 服務, 則跳過此漏洞檢測步驟而報告端口的掃描結果。
為了測試本文基于TrackRay 的滲透測試平臺對于檢測Web 服務網站的安全漏洞效果,搭建起一個帶有漏洞的網站站點(192.168.1.21),使用較為流行的開源博客系統(tǒng)WordPress 搭建,在搭建過程中,放入兩個漏洞弱點,其一是后臺弱口令弱點,另一個弱點是文件內容讀取漏洞。使用Nessus 掃描工具和本文設計的滲透測試平臺對網站的安全性進行驗證,實驗結果如圖11 所示。
圖11 Nessus 掃描結果
首先搭建起Nessus 的掃描環(huán)境,雖然花費的時間并不是很久(半小時左右),但是從Nessus 的掃描結果中可以看出:Nessus 只報告了關于中間版本和PHP 版本的漏洞,而預先放置的兩個漏洞都沒有檢測出來。
圖12 是對本文設計的滲透測試平臺進行測試試驗得出的結果。
圖12 基于TrackRay 的滲透測試平臺的測試結果
首先搭建本文的滲透測試平臺,只需二十分鐘左右便可以搭建完成,而進行整個試驗的運行時間也是在十分鐘以內,故相對而言本文的滲透測試平臺簡單易用。 再看檢測結果可知: 使用poc_2014_0216 驗證子程序對目標系統(tǒng)進行漏洞驗證,最終檢測出弱口令和文件內容讀取漏洞,優(yōu)于Nessus 掃描工具檢測結果。
Web 網頁或者信息系統(tǒng)的安全漏洞的驗證與修復一直是網絡安全研究中的重要問題。本文重點介紹如何搭建起基于TrackRay 的滲透測試平臺,并且重點說明了該平臺的簡便實用性,以及漏洞檢測與插件的編寫支持多樣性和可移植性高。通過對主機的端口和Web 服務進行試驗測試, 最后的試驗結果也表明:本文設計的滲透測試平臺搭建簡單快捷,可以進行靈活的編寫插件,以及實現(xiàn)了快速的Web 安全漏洞檢測。