目錄
前言
找出漏洞是安全性評估裡不可或缺的一環,針對軟體、系統或者網路嘗試探索攻擊層面的流程就稱作漏洞掃描(Vulnerability Scanning),市面上有許多的漏洞掃描工具,從基本單一腳本搜索單獨的漏洞,到能夠複雜搜索大範圍的商業工具
自動化掃描工具對於滲透測試時非常有價值,畢竟能夠快速找出目標網路裡基本存在的漏洞,之後再手動分析將範圍漸漸縮小,常見的漏洞掃描工具有像針對網頁應用服務以及網路漏洞偵察的,讓我們先從理論基礎開始介紹
漏洞掃描背景知識
在介紹工具之前,我們需要先了解整個漏洞掃描工具的流程以及如何發現漏洞的,不同的工具有自己的流程,但基本流程是獨立開發出來的套件,基本裡面包含
- 機器探索
- Port掃描
- 偵測目標作業系統、服務以及版本資訊
- 將找到的資訊比對漏洞資料庫
機器探索會透漏給掃描工具說目標是否正在運作中,接著使用一些技巧來檢查開了哪些port,以及偵測遠端存取服務的版本,找出作業系統的版本資訊,基於上述的資訊,漏洞掃描工具比對漏洞資料庫裡的特徵是否吻合,常見的資料庫會用美國漏洞資料庫(National Vulnerability Database)或者通用漏洞揭露資料庫(Common Vulnerabilities and Exposures, CVE)[2]等程序
大部分的商業漏洞掃描工具會嘗試利用漏洞來驗證找到的漏洞,可以有效降低誤判率,但也會讓目標服務或系統受到影響,畢竟他們利用CVE系統識別出來的漏洞,通常都需要二次驗證,不過這些資料庫並不會說明該漏洞有多危險,而是透過另一種分數來評比,這分數的系統叫做通用漏洞評分系統(Common Vulnerability Scoring System, CVSS),這個框架說明漏洞的特徵以及危害程度
每一個CVE都存在一組CVSS分數,主要有兩種版本:CVSS v2以及CVSS v3,兩套版本的框架使用0到10分作為漏洞危害程度的標示,NIST有特別針對v2及v3版本標示出不同的範圍代表的危害程度
CVSS v2.0評分 | CVSS v3.0評分 | ||
---|---|---|---|
危害程度 | 分數範圍 | 危害程度 | 分數範圍 |
低 | 0.0~3.9 | 無 | 0.0 |
中 | 4.0~6.9 | 低 | 0.1~3.9 |
高 | 7.0~10.0 | 中 | 4.0~6.9 |
高 | 7.0~8.9 | ||
最危險 | 9.0~10.0 |
想要獲得CVSS分數我們可以檢查CVE漏洞資料庫,或者如果CVE沒有被賦予分數的話,則可另外使用CVSS計算機,2019年CVSS還推出了v3.1版本改善了一些內容的判斷,但常見的還是v2跟v3版,如果是還沒有建立CVE的漏洞可能會造成掃描出來的結果不完整或出現誤判的狀況
常見的偽陽性(False Positive)是掃描工具說目標存在該漏洞,但實際驗證是不存在該漏洞的,有時就是會發生偵測到錯誤的服務或版本,或者目標機器設置一些防護機制讓掃描阻礙重重,甚至說昨天掃描還挺正常的,但今天卻有新的修補或更新導致版本變更,最後造成誤判
偽陰性(False Negative)則是另一項很嚴重的問題,掃描工具認為該目標不存在漏洞,事後驗證卻發現有,或者更慘的情況明明做了弱點掃描的服務報告上說沒事,之後卻還是被漏洞利用攻擊打進來,所以在滲透測試時,我們必須時刻注意手動的檢查與自動化工具之間平衡需要出多少力氣來找出漏洞
手動漏洞檢查不免俗的需要耗費大量的人力與時間,如果需要檢查的機器及服務眾多,在人手有限的情況下有可能忽略某些極為重要的關鍵,但有時惡意組織就是會使用非常複雜的手段,只有聘請紅隊公司進行滲透測試服務時才能找出那些複雜且極為邏輯的漏洞
另一方面,在某些情況下採用自動化的漏洞掃描工具是更好的選擇,例如在有時間限制下,想要把所有常見的漏洞都比對一次,如果今天讀者是在大型企業裡想要掃描內網裡所有機器與系統,就不太可能手動一台一台看,更不用說是想找出較新穎或複雜的漏洞,而工具找出來的常見漏洞已經有一些公司提出修補方法,網管人員可以快速排除
網管人員應該花點時間了解安全評估時應該採用哪些工具來檢查公司內部的網路,這不只能協助我們正確的設置工具,對於紅隊人員來說更能理解使用的工具會帶來什麼效果,知道自動化工具的極限能夠使我們克服何時可以只用工具,而何時我們應該找來專家做人工檢查
漏洞掃描種類
漏洞檢測有分成內部與外部的搜尋,代表著有些服務是未授權就可以進行掃描,而某些則必須授權過才可以接觸,漏洞掃描的位置由目標機器對外開放的程度來決定,如果企業委託的是內部網路的漏洞掃描,幾乎就是能存取內網來分析一套或多套內部系統,而如果是針對外部掃描目標的系統,通常都是針對網頁應用服務、放在DMZ網路中的服務或者對外公開的應用服務
委託掃描的客戶希望所有能被外部攻擊者存取到的系統,可以整合性的統整所有系統的安全性報告,尤其是他們幾乎只會提供一連串的IP目標,至於裡面有哪些系統就得靠讀者自己分析出來,中小企業應該都要了解自己上線的系統都是能夠公開存取的,但人造的東西有時就是會有疏忽,我們進行滲透測試時必須找到企業端沒發現的隱密系統或服務來彌補這塊缺口
如果是掃描內部網路的服務時,則會順路測試從外部連進內部的設置,委託方給予VPN的管道給測試員連進去做滲透測試,同樣是想預期得到內部系統或服務的安全性彙整報告,同時還能當作假設被入侵時會造成的影響評估,通常漏洞掃描還有分兩種形式
- 有授權身份給測試員而進行滲透測試
- 無授權身份給測試員而進行滲透測試
無授權的用意在於發現可以針對目標進行遠端存取的漏洞,通常這一類的漏洞危害程度非常高,所以掃描工具會針對所有公開的port進行調查,比對看看是否出現在NVD或CVE資料庫內,然而測試時我們無法得知目標系統是否存在任何安全性的缺失,例如修補程式沒有更新、過舊的軟體版本以及系統本身設置上的漏洞
例如在Windows目標上使用未授權身份的漏洞掃描時,我們無法得知是否有針對HiveNightmare(CVE-2021-36934)漏洞進行修補了嗎,這個漏洞允許低權限的使用者讀隱密的系統檔案,但有授權的掃描卻可以知道,大部分的掃描工具可以設置成授權的掃描,這種條件下掃描器會使用一組有效的身份驗證資訊進行註冊
大部分的情況下,授權的掃描可以用高權限的使用者身份看到目標系統幾乎所有東西,這麼方便是為了確保內部網路裡是否存在有問題的套件、修補程式缺失以及設置上的漏洞
漏洞掃描須知
上一節我們提到授權與無授權的掃描方法,這代表著我們必須規劃何時使用哪一種掃描,如果要掃描的範圍非常廣大,就必須仔細考量只掃出有意義以及有關聯的結果出來才行
首先要考量的是掃描的時間,取決於掃描的形式以及目標的數量,如果什麼都想查看就會讓自動化掃描的時間變得非常長,由於外部掃描的任務還需要多花時間在內部網路進行跳轉,而系統與系統之間也需要查看route來轉請求,如果我們有大量的IP位址要進行檢查勢必得好好規劃一番
另一個要考量的是目標的可存取程度,即便我們可以簡單的輸入IP到漏洞掃描工具裡放著讓它執行,還是必須時常考量目標適當的處理方法,如果目標系統或服務不需要任何VPN或沒有任何防火牆的阻礙,就可以直接在裡面看到所有想看的,這是非常美妙的情況,如果都是這種case那根本不用找測試團隊來
大部分的情況都很棘手,委託方給了大量的IP位址,我們模擬外部攻擊者時必須靠一己之力找出目標公開設備所有可攻擊的層面,在這期間必須不斷地調查(通靈)已安裝的防火牆以及其他存取控管機制的設計,如果沒有找出正確的路徑就沒辦法順利存取到系統或服務
舉例來說如果委託方的設備存放在多個國家,每套系統都會限制不同國家IP來源進行存取,這代表我們的IP僅能存取本國的系統,而無法對其他國家的設備出手,以及如果目標的可存取程度只限縮於內部網路範圍該如何?我們的網路位置是否能得到任何有意義的結果?
更不用說我們進入到內部網路後結果必須掃描其他網段,考量到防火牆、入侵防禦系統以及其他種間接網路設備(例如Router)都可以過濾或阻擋我們的掃描流量,例如掃描工具送出ICMP封包查找有效的主機時,間接網路設備卻決定不處理ICMP封包,最終掃描工具沒有搜到任何目標判斷為沒有上線的誤判情況
另外我們的工具還可能被流量限制所影響,網路的限制到達吞吐量的上限、封包的數量或者連接數量而成為瓶頸,等等都會劇烈的限制網路的能力,當主機探索以及服務偵測到達流量限制的情形,便會讓執行速度慢下來,這時有可能漏掉上線中的主機或服務,不過大部分的掃描工具開發商為了這點設計了延遲、暫停以及平行化連線等想法來解決這問題
最後考量一下漏洞掃描工具針對網路及系統所帶來的影響,讀者看到這裡,已經知道掃描工具是透過網路封包來檢查目標系統及服務了,這代表著使用掃描後會產生大量的網路流量,更甚者因為有太多目標所以採用平行化的方法掃描,封包生成的速度可不是開玩笑的,最終可能造成雙方的網路都癱瘓,也算得上是另類的DDOS攻擊了
為了解決這點,我們可以減少平行化開出來的thread數量,以及減緩掃描的速度,另一項更嚴重的問題是掃描工具對於目標系統的穩定度會造成多少影響?我們必須事先顧慮到每次漏洞掃描都有機率讓目標系統變得不穩定