天天看點

我談網絡掃描 -- 之二

在本系列文章的第一部分(我談網絡掃描 -- 之一),我們讨論了網絡掃描基本和端口掃描技術,接下來,我們繼續讨論漏洞掃描。

三. 正常漏洞掃描

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 郵件清單,漏洞掃描軟體;

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

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

    c. 通過隐瞞實作安全:不讓公衆知道系統的細節将會更安全,漏洞的詳細資訊應該隻限于廠商和少量安全專家知曉。事實證明,這種思想和做法并不能實作真正的安全; 

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

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

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

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

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

            或者相關軟體開發商或第三方安全人士随後會釋出相關的修複措施)或者密切關注相關軟體開發商的首頁,檢視修複措施;

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

            如果更新軟體不可行,隻有暫時采取措施限制公網對該服務的通路了;

        閑話:風險高 = 漏洞多而且嚴重 x 威脅多而且強大 x 威脅利用漏洞的可能性高 x 威脅利用漏洞成功後造成的損失嚴重

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 實作的通路控制;

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

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

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

繼續閱讀