■ 上海 陳峻
編者按: 對網絡安全的防護工作需要系統有序進行,否則將會被攻擊者有機可乘,本文是筆者單位針對自身情況建立的系統性的網站安全防護,實現了標準化和流程化工作。
長期以來,在對各類目標網站系統進行日常滲透測試的過程中,筆者單位安全部門的各位同事往往處于守口相傳、各自為政的狀態。因此大家產生和提交的報告,時常也是參差不齊、因人而異。
近期,我們在內部對此進行了“專項整治”。大家在一起經過集思廣益和反復討論,整理出了一整套關鍵性檢測要點與方法的集合。
作為階段性交付成果,這是一張既參考了業界常用實踐工具,又融合了部門過往經驗總結的“體檢項目表”。如圖1所示,它一份較為全面的、且具備標準化和流程化的遞進式清單。下面我們根據此表來進行詳細解讀。
1.通過使用Wget或一些在線工具對目標網站上的robots.txt文件進行檢索和分析,重點考察以下內容。(1)Disallow:是否羅列了不允許外部用戶登錄的頁面。
(2)Allow:是否僅允許sitemap.xml。
(3)Crawl-Delay:是 否明確了允許訪問目錄數量,包括子目錄。
2.通過請求非法/無效的頁面,審查后臺應用、組件或數據庫所反饋的錯誤代碼,以及所包含的軟件名稱、或版本之類的詳細信息。
3.使用代碼審查工具,查找頁面上那些為了存儲信息而隱藏的字段、被注釋掉但尚存的信息、以及默認標識性的內容。
4.使 用Viewdns.info和Whois之類工具,對目標網站進行反向 IP、NS、MX、DNS的查詢,針對DNS域的傳送(DNS zone Transfer)、以及基于Web的DNS進行搜索,檢查是否能夠獲取網站相關信息。
5.運用指紋之類的工具對目標網站進行各種掃描。例如:
(1)使用 Nmap(Zenmap)來判斷后臺在線的活躍主機,推測相應的操作系統與網絡服務的種類。
(2)使用Amap來偵測對應的應用類型。
(3)使用Nessus來掃描和分析系統上敞開的端口漏洞。
6.掃描外部防火墻上是否開啟了數據庫服務端口。如已開啟,則可利用經典的SQL查詢分析器(如Isqlw.exe)和數據庫命令行工具(如 Osql.exe),同數據庫的偵聽端口(TNS)建立連接,進而發送控制命令。

圖1 網站安全的“體檢項目表”
1.通過自查的方式,確認是否存在曾用于測試用途、備份目的、以及過時無用的文件,以免泄露網站的任何特有信息。
2.鑒于JSP和ASP之類的文件擴展名,不但能夠被識別出目標應用程序所使用的技術,而且可能暴露與該應用相連接的其他系統特征。因此,可以使用curl和Wget等工具,來進行有針對性的檢測。
3.檢查是否已對目標網站的管理后臺(Console)、以及管理接口進行了安全加固。
1.使 用John the Ripper(針對 Unix/Linux)、L0phtcrack(針對 Windows)和Hydra之類的暴力破解工具、以及其他“撞庫”工具,對賬號與密碼進行如下測試:
(1)枚舉與遍歷各種賬號,特別是那些常見的默認與測試性賬號。
(2)檢查各類賬號在系統及數據庫中的唯一性。
(3)考察用戶界面,是否存在默認顯示上一次登錄賬號信息的漏洞。
(4)測試對各種(特別是已禁用)賬號的恢復功能。
(5)檢查密碼的設定規則與復雜程度。
(6)核驗“忘記密碼”和“記住密碼”兩種不同的流程與機制。
(7)測試是否有密碼輸入出錯次數的限制,以及能否以鎖定的方式抵御密碼猜測的攻擊。
1.使用Kali Linux之類的集成工具,測試目標網站如下的基本認證與授權服務:
(1)是否配置并啟用了包括驗證碼(Captcha)、外發短信等服務在內的多因素認證(MFA)方式。
(2)是否啟用了SSL和TLS之類的安全信道協議,能否對傳輸信息以及證書提供加密保護。
(3)檢查證書的分發與交換過程是否安全。
(4)是否存在認證機制被繞過的可能,以及在認證失效之后是否會出現安全防范的缺失(即 :fail-open,應滿足fail-secure的邏輯)。
(5)檢查認證交互的邏輯與功能,確保用戶不能采用特權提升的方式修改自己在網站內部的特權與角色。
在用戶與目標網站進行相互驗證的過程中,雙方會用到令牌(token)、并建立會話(session),因此有必要通過 JWT、SessionUtil、以 及Cookie Editor等工具進行如下方面的檢查:
(1)通過編寫專有程序,對令牌的可預測性、傳輸中的安全性、以及日志中可能留下的泄密信息進行獲取與檢查。
(2)在用戶關閉瀏覽器、更新密碼、或出現違規事件的情況下,分別對會話ID的產生、是否有哈希的執行、保持時長的設定、存儲的環境、以及終止的條件進行檢驗。
(3)對cookie實 施 反向工程,進而嘗試通過篡改cookie的屬性來劫持目標會話。
1.針對常見的開源框架與平臺,進行如下滲透測試:
(1)使 用 struts-scan來掃描Struts2。
(2)檢查Spring MVC的過濾器與攔截器的相關代碼。
(3)對 ThinkPHP進 行getshell等相關測試。
(4)利用WPScan來掃描Wordpress的潛在漏洞。
2.針對不同的中間件與應用,進行如下核查:
(1)IIS:WebDAV是否已禁用,或是否已配有權限驗證。
(2)WebLogic:是否刪除了遠程部署文件、并限制了登錄IP地址。
(3)Jboss:是否存在反序列化漏洞,是否關閉了控制管理頁面、以及Servlet調用。
(4)Tomcat:是否刪除了遠程部署頁面,以及關閉了控制管理臺。
3.使用AppScan和AWVS之類的工具,對目標網站上所有與用戶交互有關的功能,包括:留言、登入、下單、退出、退貨、以及付款等操作,進行真實業務邏輯的極端測試。
4.使 用TamperIE和Webscarab,以代理的方式截獲并修改Web請求、調試會話、模擬產生注入攻擊,以確定目標應用的切入點。
1.運用測試程序,通過操縱產生特殊的應用輸入參數,觀察目標系統在各種惡意攻擊下的狀態,并檢驗后臺應用的輸出與后續行為。如果應用程序對輸入數據的過濾或驗證不到位,那么我們就能發現并判定網站自身存在的各種漏洞。下面是需要模擬和測試的攻擊類型:
(1)使用OWASP ZAP和Burpsuite Proxy,通過截斷代理和主動掃描,來查找目標應用的安全漏洞。
(2)使用WFuzz之類的工具,通過隨機產生的數據,進行模糊輸入測試(Fuzz testing)。
(3)使用Sqlmap之類的工具,通過創建和拼裝SQL語句,利用數據庫管理系統(DBMS)在驗證上的脆弱性,進行SQL注入測試。
(4)同理,檢查后臺應用對于LDAP查詢語句的過濾、以及正則替換等LDAP類注入攻擊的防御能力。
(5)運用DVWA等工具,通過在正常輸入中夾雜調用命令、函數或代碼,以模擬產生命令注入(Command injection)、路 徑 遍 歷(Path traversal)、文件包含(File Inclusion)、以 及郵件頭注入(SMTP header injection)攻擊。
(6)通過模擬緩存污染和密碼重置的攻擊方式,來對HTTP host頭進行漏洞測試。
(7)使用Metasploit之類的框架(MSF),對目標網站所用到的第三方應用、以及操作系統上那些未及時更新補丁的漏洞,開展以獲取Webshell為目的的攻擊。
(8)通過發送變形的SOAP消息請求,以插入可執行代碼的方式篡改后臺數據庫,從而測試XML注入。
(9)使 用 Beef-XSS和XSSer等工具,來發起對目標網站構造的重定向式跨站腳本攻擊(XSS)。
(10)使用BurpSuite生成某個CSRF類型的PoC,或直接利用CSRFTester抓取瀏覽器中訪問過的目標網站鏈接、及相關的表單信息。通過修改,進而提交偽造的客戶端請求。倘若網站服務器成功接受,則說明存在著CSRF漏洞。
(11)試著對目標網站發送經過特殊構造的、符合XPath語法的查詢請求,以獲取目標網站所使用的XML文檔數據及結構,進而繞過認證機制實現提權。
(12)利用動態和靜態應用安全測試(DAST/SAST)工具,查找并定位目標網站潛在的緩沖區溢出(buffer overflow),進而定位泄露敏感與控制信息的風險。
上面和大家逐條探究的這張“體檢項目表”。雖談不上疏而不漏毫不留死角,且并未用到那些高深莫測的滲透技巧,但是它的確能夠在一定程度上,消除我們過去全憑單打獨斗和個人經驗主義的窘境。如今,整個部門都能夠針對各種不同類型的目標網站,有條不紊地開展系統性、且較為精準的滲透測試了。