我談網路掃描–之二

科技小能手發表於2017-11-13
在本系列文章的第一部分(我談網路掃描 — 之一),我們討論了網路掃描基本和埠掃描技術,接下來,我們繼續討論漏洞掃描。
 
三. 常規漏洞掃描

1.漏洞(vulnerability)掃描原理分析

1)漏洞定義:
      軟體程式碼中存在的缺陷(flaw),這種漏洞是開放人員的失誤導致的,比如常見的快取溢位(buffer overflow)這種漏洞,在程式碼上就表現為開發人員使用了諸如 C 語言的 strcopy 函式,但是又沒有進行引數字串長度檢查;

      軟體配置錯誤(misconfiguring),這種漏洞是維護人員的失誤導致的,比如常見的盜鏈這種漏洞,在配置上就表現為維護人員沒有在 WEB 伺服器軟體配置檔案裡面配置防盜鏈;

2)漏洞掃描目的:在黑客發現我們的系統漏洞之前,我們去發現自己系統的漏洞,並修復這些漏洞,從而使黑客無機可乘。

3)漏洞掃描過程:
      第一步,檢查目標是否存在(alive);

      第二步,檢查目標的作業系統類別和版本;

      第三步,檢查目標開放的埠,和這些埠所對應的服務的細節:比如是什麼軟體開放的埠,軟體的版本號,軟體的補丁情況,相關配置等;

      第四步,將第二步和第三步的檢查結果跟自己的漏洞特徵庫裡面的特徵進行比較,找出目標的漏洞;

      第五步,使用自己的攻擊程式碼去驗證第四步找出來的漏洞;

      第六步,給出掃描報告:其中包含目標的漏洞及相應的參考網址和修復建議;

4)幾個術語的關聯:漏洞,完全披露(full disclosure),CVE(通用漏洞披露),通過隱瞞實現安全(Security Through Obscurity),漏洞利用(exploit),概念證明(proof of concept), pen-test/bugtraq 郵件列表,漏洞掃描軟體;

     如果我們關注過資訊保安,這些術語我們肯定接觸過,怎樣把它們關聯起來呢?

     a. 漏洞一旦被發現,往往會被發現者釋出到 pen-test/bugtraq 郵件列表(
[url]www.securityfocus.com[/url]),而且,往往都附帶了漏洞利用程式碼,  被稱之為概念證明;

     b. 完全披露是一種漏洞披露的方法,就是一旦發現漏洞,就將其公佈於眾,讓每人都知道這些漏洞,讓廠家迫於壓力而快速修復這些漏洞,讓管理員和程式設計師能夠學習到這些漏洞而不再製造同樣的漏洞,但是也會讓更多的“壞人”知道並利用這些漏洞。pen-test/bugtraq 在披露漏洞方面就是用的完全披露方法;

    c. 通過隱瞞實現安全:不讓公眾知道系統的細節將會更安全,漏洞的詳細資訊應該只限於廠商和少量安全專家知曉。事實證明,這種思想和做法並不能實現真正的安全; 

    d. 對於發現的漏洞,CVE(cve.mitre.org)對其進行編碼,以便統一各個安全廠商和團體對該漏洞的引用;

    e. 漏洞掃描軟體使用 pen-test/bugtraq 郵件列表裡面披露的漏洞特徵(和漏洞掃描軟體開發商自己發現的漏洞特徵)及漏洞利用程式碼(或開發自己的漏洞利用程式碼)來檢查目標的漏洞,並且,其漏洞掃描報告中往往會包含對發現的漏洞的 CVE 參考;

5)推論:如果我們確實很關注系統的漏洞,那麼不要太過於依賴漏洞掃描軟體,應該訂閱 pen-test 和 bugtraq 郵件列表,以便第一時間得知我們系統的漏洞(這兩個郵件列表量都比較大,建議訂閱每天一份的彙總郵件);

        如果不喜歡加入郵件列表,可以每天早晨花5分鐘檢視 
[url]www.securityfocus.com[/url] 報告的前一天的漏洞,或每週一查花30分鐘檢視 [url]www.us-cert.gov[/url] 報告的上一週的漏洞;

        如果可以,配置我們的漏洞掃描軟體自動更新特徵庫,如果漏洞掃描軟體不支援自動更新,那麼記得在掃描前先更新特徵庫;

        如果我們得知自己的系統存在漏洞,應該關注上述郵件列表或網站釋出的修復措施(一般在報告漏洞的時候,往往都附帶了修復措施;

            或者相關軟體開發商或第三方安全人士隨後會發布相關的修復措施)或者密切關注相關軟體開發商的主頁,檢視修復措施;

        如果我們得知自己的系統存在嚴重的漏洞,並且風險很高,而暫時又沒有修復措施,那麼可以考慮升級軟體,

            如果升級軟體不可行,只有暫時採取措施限制公網對該服務的訪問了;
        閒話:風險高 = 漏洞多而且嚴重 x 威脅多而且強大 x 威脅利用漏洞的可能性高 x 威脅利用漏洞成功後造成的損失嚴重

      

2.我鍾愛的 nessus(
[url]www.nessus.org[/url])  

1)簡述:作為最優秀的免費漏洞掃描器,它安裝配置簡單,掃描速度快,外掛豐富而且更新頻繁,使用者介面友好,可定製性強(提供專門的指令碼語言NASL,方便使用者自定義外掛),掃描效率高(C/S 結構),具有比大多數商業漏洞掃描軟體更強大的功能;

2)安裝和配置:

   第一步:安裝,# rpm -ivh Nessus-x.x.x-xxx.i386.rpm ;

   第二步:註冊,# /opt/nessus/bin/nessus-fetch –register <註冊碼> (nessus.org 會發一封郵件到你在下載 nessus 時輸入的 E-MAIL 地址,裡面包含了給你的註冊碼;一旦註冊了,而且你的系統能夠訪問 INTERNET, 那麼 nessus 會自動更新自己的外掛);

   第三步:新增一個 nessus 管理使用者,# /opt/nessus//sbin/nessus-add-first-user,按照提示輸入使用者名稱,密碼,提示輸入“user rules”時,直接 Ctrl + D;

   第四步:啟動 nessus,# /etc/init.d/nessusd start(nessus 已經配置為隨系統啟動而自動啟動);

   第五步:驗證
          # ps -ef | grep ness   

          root      3101     1  0 19:48 ?   00:00:00 nessusd: waiting for 
          # netstat -lnp | grep :1241

         tcp        0      0 0.0.0.0:1241  0.0.0.0:*      LISTEN      3101/nessusd: 

   第六步:安裝 windows 客戶端,如果打算使用 windows GUI 客戶端,則需要安裝 Nessus client;

3)使用體會:   

   a. 如果習慣在 Linux 下的 nessus 伺服器端進行漏洞掃描,那麼可以寫一個簡單的腳步來方便操作,畢竟 nessus 的語法不好記:

      # cat scan.sh 

      #!/bin/bash

      #

      nessus -xq -T html localhost 1241 <username> <password> target.txt report.html

      # ll scan.sh

      -rwx——  1 root root 116 Jan 27 20:57 scan.sh

      # cat target.txt

      192.168.0.0/28

      192.168.0.20

      (如果使用 secureCRT, 那麼可以使用 sz report.html 命令把 report.html 檔案傳送到 secureCRT 的 download 目錄,

        以方便用瀏覽器檢視掃描報告)

   b. 如果在 Linux 下的 nessus 伺服器端執行掃描,預設情況下只能執行安全檢查,如果想執行可能會導致目標崩潰的掃描,建議使用 windows 下的 nessus GUI 客戶端。如果有興趣,也可是嘗試在 Linux 下 使用 update-nessusrc PERL 指令碼來載入非安全的外掛;

   c. 建議為我們維護的每一類系統都定義一個掃描策略,然後為每個掃描策略選擇適當的外掛,以節省掃描時間並提供掃描結果的準確度;

   d. 如果我們的系統已經禁 ping 了,那麼就需要使用 TCP ping 來判斷出我們需要掃描的線上伺服器(這是 nessus 的預設配置);


   e. 對於我們新配置的還沒有上線的系統,建議進行非安全檢查(可能會導致系統崩潰的測試);


   f. 對於我們的目標很大的系統(比如有名的網站),建議選擇某個維護時間(比如凌晨5點,取決於我們的具體應用)進行非安全檢查;

   g. 對於我們的一般的系統,使用 nessus 預設的掃描測量 default policy ,進行安全檢查就可以了;
 
四. WEB 應用漏洞掃描

1.常見的 WEB 漏洞

1)跨站指令碼(CSS,XSS): 一個使用者提交了含有惡意 JS 的內容,而 WEB 應用沒有過濾或編碼這些惡意 JS,就直接把這些內容傳送給了其他使用者的瀏覽器,如果其他使用者的瀏覽器沒有配置為拒絕執行 JS ,那麼就會執行這些惡意的 JS 指令碼,從而導致對 WEB 站點或其他使用者的損害;

2)注入漏洞:通常包括 SQL 注入和命令注入兩類,SQL 注入指的是惡意使用者提交了含有 SQL 關鍵字(比如 OR, AND, UPDATE, DELETE 等)的資訊,而 WEB 應用沒有對這些惡意資訊進行過濾和編碼,就直接使用這些資訊來動態構造自己的 SQL 語句(稱之為動態 SQL),常常用在動態構造的 SQL 語句的 WHERE 部分,從而導致 WEB 應用返回給了惡意使用者不該看到的資訊(比如表結構),或者執行了破壞性的資料庫操作(比如刪掉了使用者表);命令注入往往指的是使用者提交了惡意的 SHELL 命令,比如 rm -rf /,而 WEB 應用沒有對這些惡意的指令碼命令進行過濾,就直接交給相應的命令直譯器解釋執行了,從而導致對 WEB 應用伺服器的損害;            

3)惡意檔案執行:WEB 應該在使用檔案和流函式的程式碼部分,沒有對這些函式的引數進行安全檢查,以至於惡意使用者可以隨心所欲地為這些函式提供檔名,而這些檔名可能指向的是遠端站點的惡意檔案(遠端檔案包含),從而致使 WEB 應用執行惡意檔案,也可能指向本地不希望被使用者訪問的檔案,從而導致 WEB 伺服器上重要敏感資訊的洩漏,PHP 最容易出現這種漏洞;

4)不安全的直接物件引用:WEB 應用引用了內部物件,比如檔案,目錄,資料庫記錄等,而且把引用的方法暴露在了 URL 裡面或者 表格(form)的引數裡,從而導致聰明的使用者明白了其中的引用規律,加上又沒有配置嚴格的授權,以至於“聰明”的使用者可以通過修改引用的目標,訪問自己本不應該訪問的資訊。經典的例子是在網上銀行應用中,登入後,通過篡改帳號,訪問其它人的帳戶資訊;

5)跨站請求偽裝(CSRF,XSFR):某些 WEB 應用,一旦使用者登入了,就僅僅依靠在使用者登入時寫入到使用者瀏覽器的 Cookie 資訊,來驗證使用者執行某些關鍵動作(比如轉賬,改密碼)的許可權,不再需要使用者輸入身份驗證資訊和對將執行動作進行確認。由於這些表明使用者身份的 Cookie 資訊,會自動被瀏覽器傳送給 WEB 應用,所以對於已經登入的使用者來說,就有可能點選惡意使用者(通常很熟悉被害者的操作細節)製造的連結,在完全不知覺的情況下執行了對自己有害的動作(比如把自己帳上的資金轉給了別人,把自己的密碼修改為惡意使用者選擇的祕密);

6)資訊洩漏和有缺陷的錯誤處理:由於 WEB 伺服器的配置錯誤或者應用的程式碼問題,導致了有關 WEB 伺服器配置,目錄結構,環境變數等資訊或其他的隱私資訊的洩漏;WEB 伺服器的錯誤輸出中,包含了過於詳細的資訊,比如對於不同的錯誤顯示了不同的錯誤程式碼,向使用者指出是使用者名稱錯誤還是密碼錯誤;從而使得惡意使用者可以獲得 WEB 伺服器和應用的更準確的資訊,方便其發動攻擊;

7)有問題的身份驗證和會話管理:WEB 應用沒有保護好帳戶憑據和會話令牌,或者使用了不安全的身份驗證方式,從而導致了使用者帳戶或管理員帳戶被劫持,授權和記賬控制被破壞,隱私被暴露;比如讓使用者在在非安全頁面輸入使用者帳戶資訊,在 URL 裡面暴露使用者的帳戶資訊,在已經登入的使用者修改密碼之前不對其當前密碼進行驗證;

8)不安全的加密儲存:該加密儲存的資料沒有加密,使用的加密演算法不夠強悍,使用自己發明的加密演算法,加密了的資料存放到了容易被解密的儲存上,沒有對 IT 基礎設施的憑據(比如資料庫密碼,expect 指令碼里面的祕密)進行保護;

9)不安全的通訊方式:在沒有加密的網路通道上傳輸敏感資料,比如使用者帳戶資訊; WEB 應用通常的加密通道是 SSL;

10)未限制 URL 訪問:對於不希望某些使用者訪問的 URL 或配置檔案,並沒有使用訪問控制來限制這些使用者對這些 資源 的訪問,唯有的保護就是不把這些資源顯示在這些使用者能夠看到的頁面上,實際上這些使用者可以通過所謂的“強制瀏覽”(猜連結)來瀏覽這些 URL 或配置檔案;或者在客戶端用 JS 來實現對這些資源訪問的控制,但是這些使用者可以通過定製 HTTP 請求的方式來避開這些 JS 實現的訪問控制;

上述標題來自 OWASP top ten 2007(
[url]http://www.owasp.org/index.php/Top_10_2007[/url]),解釋來自自己對這些漏洞的理解。

如果翻譯或理解有誤,歡迎大家指出來。

如果我們對研究 WEB 漏洞有興趣,那麼很有必要熟悉 firefox 的 tamper data 外掛。


2.我鍾愛的 nikto(
[url]http://www.cirt.net/code/nikto.shtml[/url])

1)簡述:一款用 PERL 寫的開源 WEB 伺服器和應用漏洞掃描器,能夠檢查出 WEB 伺服器的程式碼漏洞,配置漏洞,預設檔案及 WEB 應用中的各種漏洞。

2)安裝配置: 

   第一步:驗證系統安裝了基本的 PERL 支援,# rpm -qa | grep perl;

   第二步:下載並解壓 nikto;

   第三步:更新漏洞特徵資料庫,# ./nikto.pl -update   

3)使用體會:

   a. 典型的使用例子:# ./nikto.pl -h target.txt -Format htm -o result.html

                     # cat target.txt

                       172.17.18.13,80,6280 

                       172.17.18.14,80

   b. 選擇掃描型別:如果只想檢查是否存在某類或某幾類漏洞,可以用 -Tuning 選項來選擇掃描型別;

   c. 如果 WEB 伺服器已經配置了禁止使用 IP 地址訪問 WEB 頁面(通常的做法),那麼應該使用 -vhost 選項來指定虛擬主機名;

   d. 如果配置了防止惡意使用者代理(User Agent)訪問,那麼記得在掃描之前,允許 Nikto 訪問;

   e. nikto 在做測試的時候,可能會向資料庫寫入大量的測試資料,導致資料混亂,所以,在測試之前,要備份好資料;

   f. 有些 WEB 應用有發郵件的功能,在測試的時候,nikto 可能會導致這樣的 WEB 應用傳送巨量的郵件,導致相關人員的郵箱爆滿,

      所以,在掃描之前,一定要得到自己主管的授權後再執行;

   g. 為了防止 nikto 掃描產生的日誌擾亂了網站的日誌統計,應該在掃描之前,配置 WEB 伺服器禁止對 nikto 訪問記錄日誌;
切記:為了得到儘可能準確的漏洞資訊,對於通用漏洞和特殊應用漏洞,建議各使用兩種掃描軟體進行掃描,一種免費漏洞掃描軟體,比如 nessus,nikto,一種商業漏洞掃描軟體,比如 GFI LANguard, Appscan。
 
 
下面的內容,將在“我談網路掃描 — 之三”講述

五. 如何應對網路掃描

1. 檢查網路掃描

2. 防護網路掃描

六. 結語


本文轉自zkjian517 51CTO部落格,原文連結:http://blog.51cto.com/zoukejian/61149


相關文章