網上講網絡掃描的文章很多,但是大多數都沒有多少實際意義,不是相關軟件 README 的摘要,就是 INSTALL 文件的重複, 要不然就是語法解釋。本文試圖提出一些實用的東西。
一. 概述
當我們討論網絡掃描的時候,經常會關注三個問題:
一. 概述
當我們討論網絡掃描的時候,經常會關注三個問題:
1. 什麼時候需要進行網絡掃描?
1) 修改了網絡防火牆和系統防火牆後:需要對網絡進行掃描,以便檢查配置是否有錯誤;
2)新設備(服務器和網絡設備)投入到產品網絡之前:需要對將要投產的新設備進行掃描,以便檢查新設備的安全措施是否恰當;
3)按照本公司網絡安全規範的規定,到了應該對網絡進行例行掃描的時候:根據安全規範的規定,進行相關掃描,以便發現平常維護中不經意“製造”出的漏洞;
1) 修改了網絡防火牆和系統防火牆後:需要對網絡進行掃描,以便檢查配置是否有錯誤;
2)新設備(服務器和網絡設備)投入到產品網絡之前:需要對將要投產的新設備進行掃描,以便檢查新設備的安全措施是否恰當;
3)按照本公司網絡安全規範的規定,到了應該對網絡進行例行掃描的時候:根據安全規範的規定,進行相關掃描,以便發現平常維護中不經意“製造”出的漏洞;
2. 應該進行什麼層面的網絡掃描?
按照網絡掃描所希望達到的目的,可以將其初略地分爲三個層面:端口掃描,常規漏洞(我將其定義爲應用本身的漏洞,不包括與該應用 相關的配置和(或)存放於該應用中的代碼相關的漏洞)掃描和特殊應用的漏洞(我將其定義爲跟應用相關的配置和存放於該應用中的代碼相關的漏洞)掃描。
1)如果你希望知道你的網絡防火牆和系統防火牆是否只開放了你的應用所必需的最少的端口,那麼進行端口掃描就足夠了;
2)如果你還希望知道你的網絡上是否存在常規漏洞,那麼你需要使用能夠發現網絡上的一般漏洞的常規漏洞掃描工具進行常規漏洞掃描;
3)如果你還希望進一步知道你的某個(些)應用的配置和(或)存放於該應用中的相關代碼是否存在漏洞,那麼就需要使用專門針對該特殊應用的漏洞掃描工具,進行特殊應用的漏洞掃描了;
按照網絡掃描所希望達到的目的,可以將其初略地分爲三個層面:端口掃描,常規漏洞(我將其定義爲應用本身的漏洞,不包括與該應用 相關的配置和(或)存放於該應用中的代碼相關的漏洞)掃描和特殊應用的漏洞(我將其定義爲跟應用相關的配置和存放於該應用中的代碼相關的漏洞)掃描。
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
我相信,有不少的系統/網絡管理員,會從自己管理的網絡上的某臺機器去掃描自己管理的網絡,因爲我當年也這樣幹過。
這樣幹,可能有兩種原因,一是自己還沒有意識到這樣作的弊端;二是除了從自己管理的網絡節點上執行掃描外,別無選擇,因爲很可能,我們手頭只有一條到達公網的線路。
由於我們在配置防火牆(網絡和系統)的時候,對來自屬於自己網絡的數據包,總是採取一種較爲信任的態度,限制相對於其它網絡要寬鬆;同樣地,在 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。
作爲開源安全工具,沒有什麼比能夠一直受到 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 的掃描速度奇快無比。
對於這樣的精英***,我們除了尊敬他和向他學習之外,還能說什麼呢?
我使用 scanrand 的時候並不多,也沒有什麼經驗可言,但是在這裏我要提提它。
如果我們想掃描一個B類網絡,如果使用 nmap 之類的掃描工具,肯定要很長一段時間。但是,如果我們用 scanrand,很快就可以掃完。
作爲 Dan 開發的 Paketto Keiretsu 工具集裏面最優秀的工具,scanrand 使用了極具創意的“反向 SYN Cookie”技術。正是這個天才般的設想,使得 scanrand 的掃描速度奇快無比。
對於這樣的精英***,我們除了尊敬他和向他學習之外,還能說什麼呢?
下面的內容,將在“我談網絡掃描 -- 之二”講述
三. 常規漏洞掃描
1. 漏洞掃描的原理分析
2. 我所鍾愛的 nessus
四. WEB 應用漏洞掃描
1. 常見的 WEB 漏洞
2. 我所鍾愛的 nikto
五. 如何應對網絡掃描
1. 檢查網絡掃描
2. 防護網絡掃描
六. 結語
三. 常規漏洞掃描
1. 漏洞掃描的原理分析
2. 我所鍾愛的 nessus
四. WEB 應用漏洞掃描
1. 常見的 WEB 漏洞
2. 我所鍾愛的 nikto
五. 如何應對網絡掃描
1. 檢查網絡掃描
2. 防護網絡掃描
六. 結語