網上講網絡掃描的文章很多,但是大多數都沒有多少實際意義,不是相關軟體 README 的摘要,就是 INSTALL 檔案的重複, 要不然就是文法解釋。本文試圖提出一些實用的東西。
一. 概述
當我們讨論網絡掃描的時候,經常會關注三個問題:
1. 什麼時候需要進行網絡掃描?
1) 修改了網絡防火牆和系統防火牆後:需要對網絡進行掃描,以便檢查配置是否有錯誤;
2)新裝置(伺服器和網絡裝置)投入到産品網絡之前:需要對将要投産的新裝置進行掃描,以便檢查新裝置的安全措施是否恰當;
3)按照本公司網絡安全規範的規定,到了應該對網絡進行例行掃描的時候:根據安全規範的規定,進行相關掃描,以便發現平常維護中不經意“制造”出的漏洞;
2. 應該進行什麼層面的網絡掃描?
按照網絡掃描所希望達到的目的,可以将其初略地分為三個層面:端口掃描,正常漏洞(我将其定義為應用本身的漏洞,不包括與該應用 相關的配置和(或)存放于該應用中的代碼相關的漏洞)掃描和特殊應用的漏洞(我将其定義為跟應用相關的配置和存放于該應用中的代碼相關的漏洞)掃描。
1)如果你希望知道你的網絡防火牆和系統防火牆是否隻開放了你的應用所必需的最少的端口,那麼進行端口掃描就足夠了;
2)如果你還希望知道你的網絡上是否存在正常漏洞,那麼你需要使用能夠發現網絡上的一般漏洞的正常漏洞掃描工具進行正常漏洞掃描;
3)如果你還希望進一步知道你的某個(些)應用的配置和(或)存放于該應用中的相關代碼是否存在漏洞,那麼就需要使用專門針對該特殊應用的漏洞掃描工具,進行特殊應用的漏洞掃描了;
3. 應該從哪裡執行掃描?
我相信,有不少的系統/網絡管理者,會從自己管理的網絡上的某台機器去掃描自己管理的網絡,因為我當年也這樣幹過。
這樣幹,可能有兩種原因,一是自己還沒有意識到這樣作的弊端;二是除了從自己管理的網絡節點上執行掃描外,别無選擇,因為很可能,我們手頭隻有一條到達公網的線路。
由于我們在配置防火牆(網絡和系統)的時候,對來自屬于自己網絡的資料包,總是采取一種較為信任的态度,限制相對于其它網絡要寬松;同樣地,在 IDS/IPS 裡面定義的告警事件,及每個事件的伐值,對來自自己網絡的資料包相對于其它網絡同樣的資料包,也要寬松些。
于是,當從自己網絡的節點上去掃描自己網絡的時候,就會發現,怎麼開放了那麼多不應該開放給公網的端口啊,怎麼 IDS/IPS 象傻了一樣,不告警了。
是以,如果有條件(比如有兩條到達網際網路的線路,ADSL 也可以哦)一定要從公網去掃描自己管理的網絡,那樣才能檢查出自己管理的網絡的真實安全狀況。
如果公司确實隻有一條線路,如果你對公司負責,對自己負責(希望每晚能睡安穩覺),就從自己家裡的電腦去“攻擊”自己管理的網絡吧。
二. 端口掃描
1. TCP 三次握手簡述
我本來不想說這個問題的,因為對于大多數系統/網絡管理者來說,太簡單了。但是,由于下一個話題涉及到了,還是簡述一下,權當作是溫習吧。
首先提醒一下,三次握手僅對于 TCP 協定而已,不要任何時候都想到進行三次握手分析,^_^。
1)用戶端向伺服器端發送一個 SYN 資料包,請求跟伺服器同步;
2)伺服器端向用戶端響應一個 ACK + SYN 資料包,表明自己接收用戶端的同步請求,同時請求跟用戶端同步;
3)用戶端向伺服器端相應一個 ACK 資料包,表明自己接收伺服器端的同步請求;
如果這三個步驟都正常發生,那麼一個 TCP 全連接配接(full connection)就形成了;
如果隻發生了1)和2),那麼就叫做半開連接配接(half-open connection),順便提一句,DDOS 攻擊,用的就是這種招式;
如果用戶端不按規則出牌,首先向伺服器端發送非 SYN 資料包,那麼,很可能是有人在用該用戶端進行端口掃描(偷偷掃描)。
2. 各種端口掃描方式的比較
1)全連接配接端口掃描:試圖跟目标建立全連接配接;
如果全連接配接能建立起來,說明該能夠通路該端口,如果發出去的 SYN 資料包沒有收到回應,那麼該端口被過濾掉了,如果收到了 RST 回應包(由核心發送),那麼該端口沒有服務監聽;
其優點是不受狀态防火牆幹擾,對端口上運作的服務的判斷較準确;
缺點是動作太大,容易被 IDS 發現;
例子:nmap -sT
2)半開連接配接掃描:試圖跟目标建立半開連接配接;
如果收到了來自目标的 ACK + SYN 資料包,說明該能夠通路該端口,如果發出去的 SYN 資料包沒有收到回應,那麼該端口被過濾掉了,如果收到了 RST 回應包,那麼該端口沒有服務監聽;
其優點是不受狀态防火牆幹擾;
缺點是對端口上運作的服務的判斷不太準确,而且容易被IDS發現;
例子:nmap -sA
3)偷偷掃描:發送異常标志的資料包給目标;
如果發出去的資料包沒有收到回應,那麼可以通路該端口(異常資料包被對應服務忽略了)或者發出去的資料包被過濾掉了,如果收到了 RST 回應包,那麼該端口沒有服務監聽;
其優點是容易躲開IDS;
缺點是易受狀态防火牆幹擾,對端口是否可以通路及端口上運作的服務的判斷也不太準确;
例子:nmap -sF; nmap -sX ; nmap -sN
新一代的端口掃描工具,基本上都能執行上述任何一種掃描方式。
3. 我所鐘愛的 nmap
作為開源安全工具,沒有什麼比能夠一直受到 NSA,FBI,CIA 的關注更值得驕傲的了,nmap 就是這樣的寵兒。nmap 能夠執行多種方式的端口掃描,能夠較準确猜測出目标的作業系統類别和版本,能夠較準确猜測出在可以通路的端口上監聽的服務,而且能夠智能地根據目标的反應适當地調整發包速率,另外,它是 Linux 系統自帶的。
下面是我使用 nmap 的一些體會:
1)自己維護的某台機器的登入服務沒有使用預設端口,而且禁ping了。現在想上去維護,可是不記得該機器的登入服務使用的端口号了,而維護手冊又不在手頭(常常都會遇到的事情),怎麼辦?
nmap 一下那台機器吧,根據掃描的結果,一般都能很快想起該機器的登入端口号(畢竟,是你自己維護的機器嘛);
2)由于定期的網絡端口掃描,都是針對一個範圍的IP位址,是以要記得 nmap 指定IP範圍的方法:使用CIDR就可以了,比如 61.144.122.64/27;
3)對于将服務的端口修改為非預設的高位端口(比如 SSH 運作于 22222 端口)的情況,在使用 nmap 的時候,記得加 -p 選項來指定端口範圍,比如 -p 1-65535。因為預設情況下,高位端口掃描不到。
4) 對于使用了狀态防火牆的情況,不要使用 -sA 這種掃描方式,因為直接向目标發送的 ACK 資料包會被狀态防火牆 DROP 掉。
5)如果禁ping了(禁止公網ping,一般都應該這樣做),記得用 -P0 選項;
6)如果你希望知道某個防火牆是狀态防火牆還是簡單的包過濾器,用 -sA 掃描,如果掃描結果表明某台機器的狀态為 UP, 但是又沒有開放任何端口,很可能有狀态防火牆保護着該機器;
7) 不要同時使用 -sV 和 -O 選項來一次就檢測服務和OS,因為結果會不準确,最好是分開進行服務和 OS 檢測。
8)如果想跟 amap 聯合使用,那麼請使用 -oM <filename> 選項,把 nmap 掃描的結果儲存為 amap 能夠使用的格式;
為什麼要把 nmap 跟 amap 聯合起來使用?
amap 是 THC(黑客選擇)開發的一個掃描軟體,據說在識别目标運作的服務方面優于 nmap(但我感受到的是 nmap 在識别服務方面不比 amap 差)。
但是呢,amap 在掃描目标的時候太放肆了,動作太大,很容易被 IDS/IPS 檢測,而 nmap 在逃避 IDS/IPS 方面做得很好。是以,就有了這種将他們聯合起來使用的掃描技術。amap 調用 nmap 掃描結果檔案的方式是:amap -i <result.nmap> -A 。
9)兩個例子:nmap -P0 -sV -O -v -p 1-65535 -oM result.nmap <target> 主要是檢測服務
nmap -P0 -sS -O -v -p 1-65535 -oM result.nmap <target> 主要是檢測OS
如果希望得到更準确的作業系統版本和服務資訊,請記得使用最新版的 nmap。
4. 黑客精英的傑作--scanrand
我使用 scanrand 的時候并不多,也沒有什麼經驗可言,但是在這裡我要提提它。
如果我們想掃描一個B類網絡,如果使用 nmap 之類的掃描工具,肯定要很長一段時間。但是,如果我們用 scanrand,很快就可以掃完。
作為 Dan 開發的 Paketto Keiretsu 工具集裡面最優秀的工具,scanrand 使用了極具創意的“反向 SYN Cookie”技術。正是這個天才般的設想,使得 scanrand 的掃描速度奇快無比。
對于這樣的精英黑客,我們除了尊敬他和向他學習之外,還能說什麼呢?
下面的内容,将在“我談網絡掃描 -- 之二”講述
三. 正常漏洞掃描
1. 漏洞掃描的原理分析
2. 我所鐘愛的 nessus
四. WEB 應用漏洞掃描
1. 常見的 WEB 漏洞
2. 我所鐘愛的 nikto
五. 如何應對網絡掃描
1. 檢查網絡掃描
2. 防護網絡掃描
六. 結語
本文轉自zkjian517 51CTO部落格,原文連結:http://blog.51cto.com/zoukejian/60710