常用的傳統(tǒng)掃描手段有:
1. ICMP Echo掃描 精度相對(duì)較高。通過(guò)簡(jiǎn)單地向目標(biāo)主機(jī)發(fā)送ICMP Echo Request 數(shù)據(jù)包,并等待回復(fù)的ICMP Echo Reply 包,如Ping。
2. ICMP Sweep 掃描:sweep這個(gè)詞的動(dòng)作很像機(jī)槍掃射,icmp進(jìn)行掃射式的掃描,就是并發(fā)性掃描,使用ICMP Echo Request一次探測(cè)多個(gè)目標(biāo)主機(jī)。通常這種探測(cè)包會(huì)并行發(fā)送,以提高探測(cè)效率,適用于大范圍的評(píng)估。
3. Broadcast ICMP掃描:廣播型icmp掃描,利用了一些主機(jī)在icmp實(shí)現(xiàn)上的差異,設(shè)置ICMP請(qǐng)求包的目標(biāo)地址為廣播地址或網(wǎng)絡(luò)地址,則可以探測(cè)廣播域或整個(gè)網(wǎng)絡(luò)范圍內(nèi)的主機(jī),子網(wǎng)內(nèi)所有存活主機(jī)都會(huì)給以回應(yīng)。但這種情況只適合于UNIX/Linux系統(tǒng)。
4. Non-Echo ICMP掃描:在ICMP協(xié)議中不光光只有ICMP ECHO的ICMP查詢信息類型,在ICMP掃描 技術(shù)中也用到Non-ECHO ICMP技術(shù)(不僅僅能探測(cè)主機(jī),也可以探測(cè)網(wǎng)絡(luò)設(shè)備如路由)。利用了ICMP的服務(wù)類型(Timestamp和Timestamp Reply 、Information Request和Information Reply 、Address Mask Request 和Address Mask Reply)。
3.2 規(guī)避技術(shù)
為到達(dá)規(guī)避防火墻和入侵檢測(cè)設(shè)備的目的, ICMP協(xié)議提供網(wǎng)絡(luò)間傳送錯(cuò)誤信息的功能也成為了主要的掃非常規(guī)描手段。其主要原理就是利用被探測(cè)主機(jī)產(chǎn)生的ICMP錯(cuò)誤報(bào)文來(lái)進(jìn)行復(fù)雜的主機(jī)探測(cè)。
常用的規(guī)避技術(shù)大致分為4類:
1. 異常的IP包頭 :向目標(biāo)主機(jī)發(fā)送包頭錯(cuò)誤的IP包,目標(biāo)主機(jī)或過(guò)濾設(shè)備會(huì)反饋ICMP Parameter Problem Error信息。常見(jiàn)的偽造錯(cuò)誤字段為Header Length 和IP Options。不同廠家的路由器和操作系統(tǒng)對(duì)這些錯(cuò)誤的處理方式不同,返回的結(jié)果也不同。
2. 在IP頭中設(shè)置無(wú)效的字段值:向目標(biāo)主機(jī)發(fā)送的IP包中填充錯(cuò)誤的字段值,目標(biāo)主機(jī)或過(guò)濾設(shè)備會(huì)反饋ICMP Destination Unreachable信息。這種方法同樣可以探測(cè)目標(biāo)主機(jī)和網(wǎng)絡(luò)設(shè)備。
3. 通過(guò)超長(zhǎng)包探測(cè)內(nèi)部路由器:若構(gòu)造的數(shù)據(jù)包長(zhǎng)度超過(guò)目標(biāo)系統(tǒng)所在路由器的PMTU且設(shè)置禁止分片標(biāo)志, 該路由器會(huì)反饋 Fragmentation Needed and Don’t Fragment Bit was Set差錯(cuò)報(bào)文。
4. 反向映射探測(cè):用于探測(cè)被過(guò)濾設(shè)備或防火墻保護(hù)的網(wǎng)絡(luò)和主機(jī)。構(gòu)造可能的內(nèi)部IP地址列表,并向這些地址發(fā)送數(shù)據(jù)包。當(dāng)對(duì)方路由器接收到這些數(shù)據(jù)包時(shí),會(huì)進(jìn)行IP識(shí)別并路由,對(duì)不在其服務(wù)的范圍的IP包發(fā)送ICMP Host Unreachable或ICMP Time Exceeded 錯(cuò)誤報(bào)文,沒(méi)有接收到相應(yīng)錯(cuò)誤報(bào)文的IP地址可被認(rèn)為在該網(wǎng)絡(luò)中。
舉例來(lái)看:
![]() |
圖1 |
當(dāng)發(fā)送一個(gè)數(shù)據(jù)包的時(shí)候,數(shù)據(jù)包頭部會(huì)顯示其封裝類型,這里顯示的是tcp協(xié)議。其編號(hào)是06,看到06就可以知道這是一個(gè)tcp報(bào)文。如果把報(bào)文標(biāo)識(shí)成不可識(shí)別的協(xié)議,例如:
![]() |
圖2 |
協(xié)議字段里顯示是unknown,編號(hào)是b2,這個(gè)協(xié)議是未知的,那嗅探器也會(huì)返回給一個(gè)unknown。就是這樣發(fā)送一個(gè)不可識(shí)別的協(xié)議給其他主機(jī)的時(shí)候,對(duì)方主機(jī)也無(wú)法識(shí)別。當(dāng)不可識(shí)別的時(shí)候:
![]() |
圖3 |
對(duì)方認(rèn)為自己的協(xié)議棧上無(wú)法識(shí)別,第一個(gè)動(dòng)作就是先把數(shù)據(jù)包丟棄,丟掉報(bào)文之后去通知對(duì)方,返回了這條icmp的信息。類型為3,目標(biāo)不可達(dá),其code是2,告訴你目標(biāo)不可達(dá)的原因是協(xié)議不可達(dá)。當(dāng)你發(fā)送一個(gè)錯(cuò)誤的數(shù)據(jù)包,對(duì)方不可識(shí)別就返回給你一個(gè)icmp信息,達(dá)到了探測(cè)對(duì)方的目的。
3.3 端口掃描技術(shù)
在完成主機(jī)存活性判斷之后,就應(yīng)該去判定主機(jī)開(kāi)放信道的狀態(tài),端口就是在主機(jī)上面開(kāi)放的信道,0-1024為知名端口,端口總數(shù)是65535。端口實(shí)際上就是從網(wǎng)絡(luò)層映射到進(jìn)程的通道。通過(guò)這個(gè)關(guān)系就可以掌握什么樣的進(jìn)程使用了什么樣的通信,在這個(gè)過(guò)程里面,能夠通過(guò)進(jìn)程取得的信息,就為查找后門、了解系統(tǒng)狀態(tài)提供了有力的支撐。常見(jiàn)流行的端口掃描技術(shù)通常有:
3.3.1 TCP掃描:
利用三次握手過(guò)程與目標(biāo)主機(jī)建立完整或不完整的TCP連接。
TCP connect()掃描: tcp的報(bào)頭里,有6個(gè)連接標(biāo)記,分別是urg、ack、psh、rst、syn、fin。通過(guò)這些連接標(biāo)記不同的組合方式,可以獲得不同的返回報(bào)文。例如,發(fā)送一個(gè)syn置位的報(bào)文,如果syn置位瞄準(zhǔn)的端口是開(kāi)放的,syn置位的報(bào)文到達(dá)的端口開(kāi)放的時(shí)候,他就會(huì)返回syn+ack,代表其能夠提供相應(yīng)的服務(wù)。我收到syn+ack后,返回給對(duì)方一個(gè)ack。這個(gè)過(guò)程就是著名的三次握手。這種掃描的速度和精度都是令人滿意的。
Reverse-ident掃描:這種技術(shù)利用了Ident協(xié)議(RFC1413),tcp端口113.很多主機(jī)都會(huì)運(yùn)行的協(xié)議,用于鑒別TCP連接的用戶。
identd 的操作原理是查找特定 TCP/IP 連接并返回?fù)碛写诉B接的進(jìn)程的用戶名。它也可以返回主機(jī)的其他信息。但這種掃描方式只能在tcp全連接之后才有效,并且實(shí)際上很多主機(jī)都會(huì)關(guān)閉ident服務(wù)。
Tcp syn掃描:向目標(biāo)主機(jī)的特定端口發(fā)送一個(gè)SYN包,如果端口沒(méi)開(kāi)放就不會(huì)返回syn+ack,這時(shí)會(huì)給你一個(gè)rst,停止建立連接。由于連接沒(méi)有完全建立,所以稱為半開(kāi)放掃描。但由于syn flood作為一種ddos攻擊手段被大量采用,因此很多防火墻都會(huì)對(duì)syn報(bào)文進(jìn)行過(guò)濾,所以這種方法并不能總是有用。
其他還有fin、NULL、Xmas等掃描方式。
3.3.2 UDP掃描
由于現(xiàn)在防火墻設(shè)備的流行,tcp端口的管理狀態(tài)越來(lái)越嚴(yán)格,不會(huì)輕易開(kāi)放,并且通信監(jiān)視嚴(yán)格。為了避免這種監(jiān)視,達(dá)到評(píng)估的目的,就出現(xiàn)了秘密掃描。這種掃描方式的特點(diǎn)是利用UDP端口關(guān)閉時(shí)返回的ICMP信息,不包含標(biāo)準(zhǔn)的TCP三次握手協(xié)議的任何部分,隱蔽性好,但這種掃描使用的數(shù)據(jù)包在通過(guò)網(wǎng)絡(luò)時(shí)容易被丟棄從而產(chǎn)生錯(cuò)誤的探測(cè)信息。
但是,UDP掃描方式的缺陷很明顯,速度慢、精度低。UDP的掃描方法比較單一,基礎(chǔ)原理是:當(dāng)你發(fā)送一個(gè)報(bào)文給udp端口,該端口是關(guān)閉狀態(tài)時(shí),端口會(huì)返回給一個(gè)icmp信息,所有的判定都是基于這個(gè)原理。如果關(guān)閉的話,什么信息都不發(fā)。
Traceroute掃描:tracert 向30000以上的高端口(一般認(rèn)為,主機(jī)的30000以上高端口利用率非常低,任何主機(jī)都不會(huì)輕易開(kāi)放這種高端口,默認(rèn)都是關(guān)閉的)。如果對(duì)方端口關(guān)閉,會(huì)返回給icmp信息,根據(jù)這個(gè)往返時(shí)間,計(jì)算跳數(shù)、路徑信息,了解延時(shí)情況。這是tracerote原理,也是從這個(gè)原理上演變出來(lái)udp掃描技術(shù)。
使用udp掃描要注意的是1、udp狀態(tài)、精度比較差,因?yàn)閡dp是不面向連接的,所以整個(gè)精度會(huì)比較低。2、udp掃描速度比較慢,tcp掃描開(kāi)放1秒的延時(shí),在udp里可能就需要2秒,這是由于不同操作系統(tǒng)在實(shí)現(xiàn)icmp協(xié)議的時(shí)候?yàn)榱吮苊鈴V播風(fēng)暴都會(huì)有峰值速率的限制(因?yàn)閕cmp信息本身并不是傳輸載荷信息,不會(huì)有人拿他去傳輸一些有價(jià)值信息。操作系統(tǒng)在實(shí)現(xiàn)的時(shí)候是不希望icmp報(bào)文過(guò)多的。為了避免產(chǎn)生廣播風(fēng)暴,操作系統(tǒng)對(duì)icmp報(bào)文規(guī)定了峰值速率,不同操作系統(tǒng)的速率不同) 利用udp作為掃描的基礎(chǔ)協(xié)議,就會(huì)對(duì)精度、延時(shí)產(chǎn)生較大影響。
當(dāng)前在滲透測(cè)試過(guò)程中對(duì)于端口的掃描是非常靈活的,06年的黑帽大會(huì)上,就有人利用了開(kāi)發(fā)了工具探測(cè)網(wǎng)內(nèi)哪臺(tái)主機(jī)打開(kāi)了80端口,這樣的技術(shù)在當(dāng)前的互聯(lián)網(wǎng)上利用的非常普遍。
![]() |
圖4 |
3.4 服務(wù)及系統(tǒng)指紋
在判定完端口情況之后,繼而就要判定服務(wù)。
3.4.1 根據(jù)端口判定
這種判定服務(wù)的方式就是根據(jù)端口,直接利用端口與服務(wù)對(duì)應(yīng)的關(guān)系,比如23端口對(duì)應(yīng)telnet,21對(duì)應(yīng)ftp,80對(duì)應(yīng)http。這種方式判定服務(wù)是較早的一種方式,對(duì)于大范圍評(píng)估是有一定價(jià)值的,但其精度較低。例如使用nc這樣的工具在80端口上監(jiān)聽(tīng),這樣掃描時(shí)會(huì)以為80在開(kāi)放,但實(shí)際上80并沒(méi)有提供http服務(wù),由于這種關(guān)系只是簡(jiǎn)單對(duì)應(yīng),并沒(méi)有去判斷端口運(yùn)行的協(xié)議,這就產(chǎn)生了誤判,認(rèn)為只要開(kāi)放了80端口就是開(kāi)放了http協(xié)議。但實(shí)際并非如此,這就是端口掃描技術(shù)在服務(wù)判定上的根本缺陷。
3.4.2 BANNER
Banner的方式相對(duì)精確,獲取服務(wù)的banner,是一種比較成熟的技術(shù),可以用來(lái)判定當(dāng)前運(yùn)行的服務(wù),對(duì)服務(wù)的判定較為準(zhǔn)確。而且不僅能判定服務(wù),還能夠判定具體的服務(wù)版本信息。例如下圖,根據(jù)頭部信息發(fā)現(xiàn)對(duì)方是redhat linux,基本上可以鎖定服務(wù)的真實(shí)性。
![]() |
圖5 |
這種技術(shù)比較靈活。像http,ftp,telnet都能夠獲取一些banner信息。為了判斷服務(wù)類型、應(yīng)用版本、OS平臺(tái),通過(guò)模擬各種協(xié)議初始化握手,就可以獲取信息 。
但是在安全意識(shí)普遍提升的今天, 對(duì)Banner的偽裝導(dǎo)致精度大幅降低。例如IIS&Apache:修改存放Banner信息的文件字段進(jìn)行修改,這種修改的開(kāi)銷很低。現(xiàn)在流行的一個(gè)偽裝工具Servermask ,不僅能夠偽造多種主流Web服務(wù)器Banner,還能偽造Http應(yīng)答頭信息里的項(xiàng)的序列。
使用前
![]() |
圖6 |
使用后
![]() |
圖7 |
變的不僅是紅色的部分,而且整個(gè)返回序列都變化了。這個(gè)變化是手工難已修改的。如果不能成功的修改序列,那就可能給有經(jīng)驗(yàn)的滲透者提供依據(jù)。
3.4.3 指紋技術(shù)
指紋技術(shù)利用TCP/IP協(xié)議棧實(shí)現(xiàn)上的特點(diǎn)來(lái)辨識(shí)一個(gè)操作系統(tǒng)??杀孀R(shí)的OS的種類,包括哪些操作系統(tǒng),甚至小版本號(hào)。指紋技術(shù)有主動(dòng)和被動(dòng)兩種。
主動(dòng)識(shí)別技術(shù):采用主動(dòng)發(fā)包,利用多次的試探,去一次一次篩選不同信息,比如根據(jù)ACK值判斷,有些系統(tǒng)會(huì)發(fā)送回所確認(rèn)的TCP分組的序列號(hào),有些會(huì)發(fā)回序列號(hào)加1。還有一些操作系統(tǒng)會(huì)使用一些固定的tcp窗口。某些操作系統(tǒng)還會(huì)設(shè)置IP頭的DF位來(lái)改善性能。這些都成為判斷的依據(jù)。這種技術(shù)判定windows的精度比較差,只能夠判定一個(gè)大致區(qū)間,很難判定出其精確版本,但是在unix,網(wǎng)絡(luò)設(shè)備時(shí)甚至可以判定出小版本號(hào),比較精確。如果目標(biāo)主機(jī)與源主機(jī)跳數(shù)越多,精度越差。因?yàn)閿?shù)據(jù)包里的很多特征值在傳輸過(guò)程中都已經(jīng)被修改或模糊化,會(huì)影響到探測(cè)的精度。nmap –O參數(shù)就是其代表。
被動(dòng)識(shí)別技術(shù):不是向目標(biāo)系統(tǒng)發(fā)送分組,而是被動(dòng)監(jiān)測(cè)網(wǎng)絡(luò)通信,以確定所用的操作系統(tǒng)。利用對(duì)報(bào)頭內(nèi)DF位,TOS位,窗口大小,TTL的嗅探判斷。因?yàn)椴⒉恍枰l(fā)送數(shù)據(jù)包,只需要抓取其中的報(bào)文,所以叫做被動(dòng)識(shí)別技術(shù)。例如telnet對(duì)方,并用snort監(jiān)聽(tīng)數(shù)據(jù)包:
TCP TTL:255 TOS:0x0 ID:58955 DF |
得到這些信息后,熟悉系統(tǒng)的人可猜測(cè)到操作系統(tǒng)是Solaris 2.6-2.7。在nmap中,也有操作系統(tǒng)的指紋庫(kù),可以從指紋庫(kù)中去匹配。其代表掃描工具有 Siphon,天眼。
ICMP指紋識(shí)別技術(shù) :這種工具的出現(xiàn)較晚,大概在2001-2002年,在黑帽大會(huì)上提出,并開(kāi)發(fā)出相應(yīng)的工具xprobe,其優(yōu)勢(shì)是只需要通過(guò)icmp,發(fā)送一批UDP包給高端關(guān)閉的端口,然后計(jì)算返回來(lái)的不可達(dá)錯(cuò)誤消息。通常情況下送回IP頭+8個(gè)字節(jié),但是個(gè)別系統(tǒng)送回的數(shù)據(jù)更多一些。根據(jù)ICMP回應(yīng)的TOS、TTL值、校驗(yàn)和等信息,通過(guò)這些信息以樹狀的形式去過(guò)濾,最終精確鎖定。下圖只是整個(gè)判定過(guò)程中的一小量部分,類似的圖還有很多張。
![]() |
圖8 |
例如TTL值,當(dāng)你發(fā)送icmp 的echo請(qǐng)求,對(duì)方回應(yīng)的ttl值是有一定規(guī)律可循的,一般是4個(gè)數(shù)值,32(win95,唯一值為32的操作系統(tǒng)),64,128(windows家族,只有win95例外),256。64和256比較難以分辨,大多數(shù)的unix和linux都可能是。 代表性掃描工具 Xprobe。