我談網絡掃描 -- 之二

在本系列文章的第一部分(我談網絡掃描 -- 之一),我們討論了網絡掃描基本和端口掃描技術,接下來,我們繼續討論漏洞掃描。
 
三. 常規漏洞掃描
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. 防護網絡掃描
六. 結語
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章