賀云龍
(海南世紀網安信息技術有限公司,海口 570100)
隨著互聯網技術的快速發展,Web 應用安全事件頻繁發生,黑客利用Web 安全漏洞對客戶端、服務器和數據庫等領域發起攻擊,出現用戶信息丟失、網頁被篡改及數據永久性破壞等安全問題,為用戶帶來嚴重損失。為保證Web 應用系統安全,有必要采用滲透測試技術模擬各種攻擊方法識別Web 安全漏洞,評估系統安全狀態,為完善Web 安全設計方案打下基礎。
滲透測試技術是通過主動模擬攻擊者的思維和攻擊方式,分析評估系統安全漏洞、防御弱點和技術缺陷的檢測方法[1]。滲透測試技術屬于前瞻性的安全防御技術措施,能夠準確識別出信息安全風險事件,滿足系統安全設計需要。
1.2.1 白盒測試
測試者在對系統一無所知的狀態下進行測試,測試人員要與客戶前期溝通,明確測試目標和測試環境,從組織外部完成測試內容。
1.2.2 黑盒測試
測試者通過模擬對被測試系統一無所知的狀態下進行測試,這種測試方法更接近于真正的黑客攻擊,是當前廣泛使用的滲透測試方法。
1.3.1 端口掃描
采用隱身掃描、UDP 掃描和TCP Null 等掃描技術搜集前期信息,鎖定主機開放端口。
1.3.2 操作系統探測
在搜集主機信息中,采用指紋探測技術、ICMP 技術和標識信息探測技術等探測技術,縮小漏洞檢測范圍。
1.3.3 漏洞掃描
采用規則匹配技術掃描應用、網絡和主機中的漏洞,可分為主動掃描與被動掃描2 種方式。
Web 滲透測試流程主要包括信息收集、漏洞挖掘、漏洞利用、內網轉發、內網滲透、痕跡清除和撰寫滲透測試報告7 個環節[2],具體應用如下。
信息收集包括主動信息收集和被動信息收集,主動信息收集是從Web 服務器中獲取信息,被動信息收集是從社交工具、搜索引擎等間接路徑中獲取信息。
2.1.1 獲取域名
從域名開始滲透測試,發現域名對應的目標Web 主機IP、服務器和端口等,根據收集的信息對攻擊面進行分析。
2.1.2 查詢網站所有者
在收集目標網站的IP 時采用Who.is 傳輸協議,在傳輸協議支持下,查出與同一域名注冊匹配的分布式業務網絡(DSN)記錄、域名等信息,當獲取目標網站所有者姓名、電話和電子郵箱等信息后進行滲透測試。
2.1.3 查詢備案信息
在工業和信息化部的信息備案管理系統、企業信用信息公示系統及天眼查等系統中查詢域名的備案信息。
2.1.4 收集Web 服務器信息
使用dig 命令、host、dnstracer 和nslookup 等工具收集DNS 信息。當DNS 配置不當時,會導致DNS 域傳送漏洞,引發Web 網絡拓撲圖泄露風險。
2.1.5 收集子域名
通過搜索引擎、Layer 子域名挖掘機、子域名猜測和Phpinfo.me 等收集子域名,發現安全漏洞[3]。
2.1.6 收集IP
IP 地址查詢要繞過內容分發網絡(CDN),通過網絡命令Ping、歷史解析記錄、二級域名和網站漏洞等途徑收集IP 地址,保證IP 地址的真實性。
2.1.7 查詢旁站和C 段
利用Python 查詢同一Web 服務器上的其他站點和同一網絡端口上的其他服務器。
2.1.8 收集服務端口
端口滲透探測采用Nmap、masscan 工具,通過Web主機開啟的服務器端口發現更多的安全漏洞。
2.1.9 收集網站架構信息
利用Nmap、wappalyzer 和AWVS 工具對中間件、操作系統、腳本語言和數據庫等操作系統信息進行收集;利用access、Oracle 和MySQL 數據庫對數據庫信息進行收集;利用Apache、IIS 和Tomcat 軟件對網站中間件信息進行收集;利用HTTP 消息中的header 工具、網頁默認頁面對網站其他信息進行收集。
2.1.10 收集敏感信息
利用搜索引擎、暴力字典枚舉目錄等工具收集敏感目錄、文件等信息,找到源碼泄露。
2.1.11 收集指紋信息
通過查看網頁代碼,使用云悉、bugscaner 等工具收集內容管理系統指紋,在掌握指紋信息的情況下可對目標網站中的CMA 信息類型進行識別。
以海量信息為依托,判斷網站是否存在漏洞,如SQL 注入、XSS 跨站腳本等,對此要采取具有針對性的探測工具,如AWVS、AppScan 等對漏洞加以探測[4]。漏洞挖掘常用的方法有工具掃描、手工檢測等。
2.2.1 工具掃描
這是一種能夠快速發現Web 站點中是否存在漏洞的方法,使用工具掃描漏洞的過程中,會生成有效載荷(payload),由此為漏洞分析提供便利條件。在各類掃描工具中,帶有集成掃描漏洞模塊越多的工具,其功能就越強大。工具掃描漏洞的具體方案如下:先對待掃描的目標網站系統加以確定,選取適宜的掃描工具,掃描完畢后,對結果做輸出列表。
2.2.2 手工檢測
挖掘Web 站點內的漏洞時,若是服務器裝有防火墻,使用工具掃描,則會在較短的時間內頻繁訪問系統,這樣一來,將會造成IP 遭到攔截限制,進而無法對Web站點內的程序進行訪問。對此,可以通過手工檢測的方法來挖掘漏洞。具體做法如下:①先判斷Web 站點內是否存在SQL 注入,可以采用的判斷方法有id 參數后加單引號,或是and1=1、and1=2 回顯等;②對后臺登錄進行檢測,看是否存在弱口令,可在后臺的登錄地址中,輸入以下指令:admin,也可嘗試使用萬能密碼登錄;③用Google語法,如site:xxx.com inurl:upload 等,查看有無編輯器[5]。
當探測到網站內存在漏洞之后,可以有針對性地對漏洞加以利用。正常情況下,僅憑借單一的漏洞是無法順利獲取到網站的代碼執行環境(Webshell),只有借助多個漏洞,才能獲取到網站的Webshell。在這一過程中,對SQLmap、AWVS 等工具加以利用,能夠達到事半功倍的效果。當Webshell 獲取后,要對其提權,常用的提權方法有以下幾種:溢出漏洞提權、數據庫提權及第三方軟件提權等。其中數據庫提權的效果比較好,可用的數據庫類型包括SQLServer 和MySQL 等[6]。
當順利獲取到Webshell 之后,若是需要開展滲透測試,則還要對內網中主機的相關信息進行探測,此時便需要內網轉發。由于滲透測試的過程無法與內網的主機實時通信,所以要利用Webshell 網站中的服務器,并結合proxychains 代理鏈。
當與內網主機建立起正常的通信之后,便可開展內網滲透。為對在線的內網主機進行有效的探測,要對內網主機開展全面掃描,在這一過程中,可以使用Nmap,并對如下信息加以明確:開放的端口、操作系統等。目前,絕大多數內網用戶使用的都是Windows 系統,在內網滲透時,可以圍繞與該系統有關的漏洞展開,如果發現系統中存在漏洞,則可應用Metasploit 工具完成內網滲透。這樣便能夠找到域控服務器,并從中獲取到相應的權限,進而實現用戶主機的登錄。在應用Metasploit 時,要掌握正確的流程,具體如下:先進入到Web 框架中,選取search 命令,對系統中可能存在的漏洞進行查找,使用use 模塊,并查看其中的信息,設置好攻擊荷載及相關的參數后,開始攻擊[7]。
當內網滲透測試完畢后,要將測試過程殘留的痕跡全部清除,包括網絡痕跡和日志。掩蓋網絡痕跡時,可以使用多層代理,掩蓋真實的IP 地址,或是借助代理鏈工具,如proxychains 進行掩蓋。清除系統日志的過程中,應結合系統選取清除方式,這是因為不同的系統日志清除方式不同,若是選擇不當,則無法達到清除的目的。比如Windows 操作系統應將Log 文件刪除,而Linux 系統則需要將/var/log 下的文件刪除。
當滲透測試完畢,并將所有的痕跡全部清除之后,便可依據測試結果,編寫相關的測試報告,結合實際情況,指出系統存在的漏洞情況,并根據漏洞,提出具有針對性的修補途徑。用戶便可依據報告中給出的方法,對系統漏洞加以修復,從而達到強化Web 信息安全的目的。
在運用滲透測試技術識別出Web 應用安全漏洞后,明確Web 開發面臨的主要安全威脅,進而針對這些安全漏洞設計出一套完整的安全防御方案,有效避免安全漏洞的產生,提高Web 應用的安全性。
在Web 應用中,輸入驗證環節存在惡意輸入、未經驗證輸入及依賴客戶端驗證等安全漏洞,針對這些輸入驗證中的安全漏洞設計以下安全防護方案:①將數據源分為可信數據源、非可信數據源,采用“白名單”策略驗證非可信數據源,去除未經過驗證的數據。②驗證User-Agent、Cookie 和Host 等客戶端請求的參數,獲取每項驗證信息的數據類型、取值范圍和長度等信息,識別驗證數據中是否存在危險字符,采用正則表達式檢測字符,通過檢測的驗證數據列入白名單,未通過檢測的驗證數據列入黑名單。③對危險字符執行過濾程序,包括特殊字符(<、>、%、&、等)、換行符(%0a、 等)及空字節(%00)等[8]。
在Web 應用中,身份驗證存在允許越權賬戶、混合個人設置與身份驗證、保護憑據、使用弱密鑰和會話周期過長等安全漏洞,針對此類安全漏洞設計以下安全防護方案:①設計一次性驗證替代多步驗證,消除身份驗證環節失效風險,并利用日志記錄身份驗證失敗信息。②在服務端進行身份驗證,避免在客戶端設計身份驗證。③身份驗證失敗的信息提示要模糊處理(如“用戶名或密碼不正確”),不能給予精準提示(如“用戶名不正確”“密碼不正確”)。④設置身份驗證失敗上限次數,當用戶連續登陸失敗后設置用戶鎖定時間,合理確定限制登陸時間長短。⑤在用戶成功登陸后,要提示用戶上次登陸的相關信息,以便于用戶做好個人信息安全防護。
在Web 應用中,用戶設置密碼過于簡單會出現賬號信息泄露風險,針對此類安全漏洞設計以下安全防護方案:①設計復雜程度相對較高的用戶密碼設置要求,如密碼長度不小于8 字節,混合使用數字、字母和符號等,不得使用相同單一數字或簡單單詞作為密碼。當用戶設置完密碼后,運用自動檢測算法判定密碼風險高低,對高風險密碼予以提示。②在服務器端加密存儲用戶密碼,采用哈希函數加密用戶密鑰,不得使用MD5 加密。用戶成功登錄后,對訪問數據加密處理,設定合理的加密有效期[1]。③對設置默認密碼的Web 應用網站,當用戶首次登錄后要提示用戶修改密碼,修改后重新登錄,再次進行身份驗證。
在Web 應用中,會話管理存在允許超長會話周期、未加密信息傳遞、不安全會話狀態存儲和放置會話標識符等安全漏洞,針對此類安全漏洞設計以下安全防護方案:①采用復雜設計方法設計會話標識符,避免出現偽造會話標識符的風險。②對Cookie 設置域和路徑,消除固定會話安全漏洞,當用戶登錄后需設置新的Session ID,盡量縮短Session 有效期。③在每個會話請求中設計Token,通過隨機令牌防范CSRF 攻擊。④在用戶注銷賬戶時,需刪除服務器Session 信息和客戶端Cookie 信息,避免出現信息泄露風險。
Web 部署的過程中,未對URL 訪問權限進行有效的控制,致使攻擊者能夠以修改URL 導致的方式,訪問原本需要認證授權后,才能訪問的網站資源,即URL 越權訪問。針對此類安全漏洞,可以通過訪問控制來加以解決,具體方案如下:①經過授權后的用戶才能對相應的資源進行訪問,這是訪問控制實現安全目標的關鍵,具體包括服務、數據屬性信息、程序數據、受保護的URL 及與安全相關的配置信息等。②對于驗證失敗的訪問操作,應當由訪問控制做安全處理,如用戶在某一個時間段內執行的事務頻率要加以限制,這就要求頻率閾值的設置合理可行,一方面能夠使相關的業務需求得到滿足,另一方面還要能夠防止自動攻擊。
在數據庫內存儲有大量的Web 數據,這些數據中,有一部分是用戶隱私,如果丟失,則會造成嚴重的后果。為此確保數據庫安全尤為重要。針對數據庫漏洞,可以設計如下安全防護方案:①開發人員在設計數據庫的過程中,可選用強類型的參數化查詢方式,以此來代替原本的動態SQL 語句。②庫的連接字符做加密處理。③將數據庫中非必要的默認賬戶全部刪除,并將無用的數據庫功能關閉,由此能夠大幅度提升數據庫的安全性。
在Web 應用中,文件上傳存在著安全驗證缺失的隱患,造成文件管理漏洞,黑客通過攻擊漏洞獲取Webshell。針對此類安全漏洞設計以下安全防護方案:①采用白名單策略,對用戶上傳的文件類型進行檢查和過濾,禁止不符合業務需要的文件類型上傳。文件檢查項目包括文件MIME 類型、文件后綴名和文件內容驗證等。②分開保存Web 應用源碼文件與上傳文件,設置文件上傳權限。③借助白名單檢查文件路徑參數,及時禁止黑客利用漏洞執行的攻擊操作。④不允許設置絕對路徑,特別在客戶端中不可以采用絕對路徑。
日志是程序維護與安全管理的重要手段,但是日志中易存在安全漏洞,需采用以下安全防范方案設計:①在應用系統中將常用的調試錯誤頁替換為定制的錯誤頁面,防范錯誤處理中泄露賬號、ID 等私密信息。②設定日志記錄內容,包括安全事件的失敗操作或成功防御。③設定日志禁止記錄的信息類型,如敏感信息等。④查看日志時,禁止代碼解析日志數據,采用哈希算法隨時驗證日志的完整性,及時檢測出日志被篡改的攻擊操作。
綜上所述,Web 應用開發與設計要采用滲透測試技術評估Web 安全性,及時識別Web 存在的安全漏洞,剖析各類漏洞的成因,并提出解決辦法,進而制定出完整的Web 安全防御體系。在Web 安全防御設計中,要重點做好輸入驗證、身份驗證、密碼管理、會話管理、訪問控制和數據庫的安全設計,消除黑客經常發起攻擊的漏洞,保證Web 應用安全。