目前主要的端口掃描技術(shù)有以下幾種: 1.TCP connect Scan(TCP連接掃描) 這種方法也稱(chēng)之為“TCP全連接掃描”。它是最簡(jiǎn)單的一種掃描技術(shù),所利用的是TCP協(xié)議的3次握手過(guò)程。它直接連到目標(biāo)端口并完成一個(gè)完整的3次握手過(guò) 程(SYN、SYN/ACK和ACK)。操作系統(tǒng)提供的“connect()”函數(shù)完成系統(tǒng)調(diào)用,用來(lái)與目標(biāo)計(jì)算機(jī)的端口進(jìn)行連接。如果端口處于偵聽(tīng)狀 態(tài),那么“connect()”函數(shù)就能成功。否則,這個(gè)端口是不能用的,即沒(méi)有提供服務(wù)。 TCP連接掃描技術(shù)的一個(gè)最大的優(yōu)點(diǎn)是不需要任何權(quán)限,系統(tǒng)中的任何用戶(hù)都有權(quán)利使用這個(gè)調(diào)用。另一個(gè)好處是速度快。如果對(duì)每個(gè)目標(biāo)端口以線(xiàn)性的方式,使 用單獨(dú)的“connect()”函數(shù)調(diào)用,那么將會(huì)花費(fèi)相當(dāng)長(zhǎng)的時(shí)間,用戶(hù)可以同時(shí)打開(kāi)多個(gè)套接字,從而加速掃描。使用非阻塞I/O允許用戶(hù)設(shè)置一個(gè)低的 時(shí)間以用盡周期,并同時(shí)觀察多個(gè)套接字。但這種方法的缺點(diǎn)是很容易被發(fā)覺(jué),并且很容易被過(guò)濾掉。目標(biāo)計(jì)算機(jī)的日志文件會(huì)顯示一連串的連接和連接出錯(cuò)的服務(wù) 消息,目標(biāo)計(jì)算機(jī)用戶(hù)發(fā)現(xiàn)后就能很快使它關(guān)閉。
2.TCP SYN Scan(TCP同步序列號(hào)掃描) 若端口掃描沒(méi)有完成一個(gè)完整的TCP連接,即在掃描主機(jī)和目標(biāo)主機(jī)的一指定端口建立連接的時(shí)候,只完成前兩次握手,在第三步時(shí),掃描主機(jī)中斷了本次連接, 使連接沒(méi)有完全建立起來(lái),所以這種端口掃描又稱(chēng)為“半連接掃描”,也稱(chēng)為“間接掃描”或“半開(kāi)式掃描”(Half Open Scan)。 SYN掃描,通過(guò)本機(jī)的一個(gè)端口向?qū)Ψ街付ǖ亩丝冢l(fā)送一個(gè)TCP的SYN連接建立請(qǐng)求數(shù)據(jù)報(bào),然后開(kāi)始等待對(duì)方的應(yīng)答。如果應(yīng)答數(shù)據(jù)報(bào)中設(shè)置了SYN位 和ACK位,那么這個(gè)端口是開(kāi)放的;如果應(yīng)答數(shù)據(jù)報(bào)是一個(gè)RST連接復(fù)位數(shù)據(jù)報(bào),則對(duì)方的端口是關(guān)閉的。使用這種方法不需要完成Connect系統(tǒng)調(diào)用所 封裝的建立連接的整個(gè)過(guò)程,而只是完成了其中有效的部分就可以達(dá)到端口掃描的目的。 此種掃描方式的優(yōu)點(diǎn)是不容易被發(fā)現(xiàn),掃描速度也比較快。同時(shí)通過(guò)對(duì)MAC地址的判斷,可以對(duì)一些路由器進(jìn)行端口掃描,缺點(diǎn)是需要系統(tǒng)管理員的權(quán)限,不適合 使用多線(xiàn)程技術(shù)。因?yàn)樵趯?shí)現(xiàn)過(guò)程中需要自己完成對(duì)應(yīng)答數(shù)據(jù)報(bào)的查找、分析,使用多線(xiàn)程容易發(fā)生數(shù)據(jù)報(bào)的串位現(xiàn)象,也就是原來(lái)應(yīng)該這個(gè)線(xiàn)程接收的數(shù)據(jù)報(bào)被另 一個(gè)線(xiàn)程接收,接收后,這個(gè)數(shù)據(jù)報(bào)就會(huì)被丟棄,而等待線(xiàn)程只好在超時(shí)之后再發(fā)送一個(gè)SYN數(shù)據(jù)報(bào),等待應(yīng)答。這樣,所用的時(shí)間反而會(huì)增加。
3.TCP FIN Scan(TCP結(jié)束標(biāo)志掃描) 這種掃描方式不依賴(lài)于TCP的3次握手過(guò)程,而是TCP連接的“FIN”(結(jié)束)位標(biāo)志。原理在于TCP連接結(jié)束時(shí),會(huì)向TCP端口發(fā)送一個(gè)設(shè)置了FIN 位的連接終止數(shù)據(jù)報(bào),關(guān)閉的端口會(huì)回應(yīng)一個(gè)設(shè)置了RST的連接復(fù)位數(shù)據(jù)報(bào);而開(kāi)放的端口則會(huì)對(duì)這種可疑的數(shù)據(jù)報(bào)不加理睬,將它丟棄。可以根據(jù)是否收到 RST數(shù)據(jù)報(bào)來(lái)判斷對(duì)方的端口是否開(kāi)放。 此掃描方式的優(yōu)點(diǎn)比前兩種都要隱秘,不容易被發(fā)現(xiàn)。該方案有兩個(gè)缺點(diǎn):首先,要判斷對(duì)方端口是否開(kāi)放必須等待超時(shí),增加了探測(cè)時(shí)間,而且容易得出錯(cuò)誤的結(jié) 論;其次,一些系統(tǒng)并沒(méi)有遵循規(guī)定,最典型的就是Microsoft公司所開(kāi)發(fā)的操作系統(tǒng)。這些系統(tǒng)一旦收到這樣的數(shù)據(jù)報(bào),無(wú)論端口是否開(kāi)放都會(huì)回應(yīng)一個(gè) RST連接復(fù)位數(shù)據(jù)報(bào),這樣一來(lái),這種掃描方案對(duì)于這類(lèi)操作系統(tǒng)是無(wú)效的。
4.IP Scan(IP協(xié)議掃描) 這種方法并不是直接發(fā)送TCP協(xié)議探測(cè)數(shù)據(jù)包,而是將數(shù)據(jù)包分成兩個(gè)較小的IP協(xié)議段。這樣就將一個(gè)TCP協(xié)議頭分成好幾個(gè)數(shù)據(jù)包,從而過(guò)濾器就很難探測(cè)到。但必須小心,一些程序在處理這些小數(shù)據(jù)包時(shí)會(huì)有些麻煩。
5.TCP Xmas Tree Scan 這種方法向目標(biāo)端口發(fā)送一個(gè)含有FIN(結(jié)束)、URG(緊急)和PUSH(彈出)標(biāo)志的分組。根據(jù)RFC793,對(duì)于所有關(guān)閉的端口,目標(biāo)系統(tǒng)應(yīng)該返回RST標(biāo)志。根據(jù)這一原理就可以判斷哪些端口是開(kāi)放的。
6.TCP Null Scan 這種方法與上一方法原理是一樣,只是發(fā)送的數(shù)據(jù)包不一樣而已。本掃描方案中,是向目標(biāo)端口發(fā)送一個(gè)不包含任何標(biāo)志的分組。根據(jù)RFC793,對(duì)于所有關(guān)閉的端口,目標(biāo)系統(tǒng)也應(yīng)該返回RST標(biāo)志。
7.UDP Scan(UDP協(xié)議掃描) 在UDP掃描中,是往目標(biāo)端口發(fā)送一個(gè)UDP分組。如果目標(biāo)端口是以一個(gè)“ICMP port Unreachable”(ICMP端口不可到達(dá))消息來(lái)作為響應(yīng)的,那么該端口是關(guān)閉的。相反,如果沒(méi)有收到這個(gè)消息那就可以推斷該端口打開(kāi)著。還有就 是一些特殊的UDP回饋,比如SQL Server服務(wù)器,對(duì)其1434號(hào)端口發(fā)送“x02”或者“x03”就能夠探測(cè)得到其連接端口。由于UDP是無(wú)連接的不可靠協(xié)議,因此這種技巧的準(zhǔn)確性 很大程度上取決于與網(wǎng)絡(luò)及系統(tǒng)資源的使用率相關(guān)的多個(gè)因素。另外,當(dāng)試圖掃描一個(gè)大量應(yīng)用分組過(guò)濾功能的設(shè)備時(shí),UDP掃描將是一個(gè)非常緩慢的過(guò)程。如果 要在互聯(lián)網(wǎng)上執(zhí)行UDP掃描,那么結(jié)果就是不可靠的。
8.ICMP echo掃描 其實(shí)這并不能算是真正意義上的掃描。但有時(shí)的確可以通過(guò)支持Ping命令,判斷在一個(gè)網(wǎng)絡(luò)上主機(jī)是否開(kāi)機(jī)。Ping是最常用的,也是最簡(jiǎn)單的探測(cè)手段,用 來(lái)判斷目標(biāo)是否活動(dòng)。實(shí)際上Ping是向目標(biāo)發(fā)送一個(gè)回顯(Type=8)的ICMP數(shù)據(jù)包,當(dāng)主機(jī)得到請(qǐng)求后,再返回一個(gè)回顯(Type=0)的數(shù)據(jù) 包。而且Ping程序一般是直接實(shí)現(xiàn)在系統(tǒng)內(nèi)核中的,而不是一個(gè)用戶(hù)進(jìn)程,更加不易被發(fā)現(xiàn)。
9.高級(jí)ICMP掃描技術(shù) Ping是利用ICMP協(xié)議實(shí)現(xiàn)的,高級(jí)的ICMP掃描技術(shù)主要利用ICMP協(xié)議最基本的用途——報(bào)錯(cuò)。根據(jù)網(wǎng)絡(luò)協(xié)議,如果接收到的數(shù)據(jù)包協(xié)議項(xiàng)出現(xiàn)了錯(cuò) 誤,那么接收端將產(chǎn)生一個(gè)“Destination Unreachable”(目標(biāo)主機(jī)不可達(dá))ICMP的錯(cuò)誤報(bào)文。這些錯(cuò)誤報(bào)文不是主動(dòng)發(fā)送的,而是由于錯(cuò)誤,根據(jù)協(xié)議自動(dòng)產(chǎn)生的。 當(dāng)IP數(shù)據(jù)包出現(xiàn)Checksum(校驗(yàn)和)和版本的錯(cuò)誤的時(shí)候,目標(biāo)主機(jī)將拋棄這個(gè)數(shù)據(jù)包;如果是Checksum出現(xiàn)錯(cuò)誤,那么路由器就直接丟棄這個(gè)數(shù)據(jù)包。有些主機(jī)比如AIX、HP/UX等,是不會(huì)發(fā)送ICMP的Unreachable數(shù)據(jù)包的。 例如,可以向目標(biāo)主機(jī)發(fā)送一個(gè)只有IP頭的IP數(shù)據(jù)包,此時(shí)目標(biāo)主機(jī)將返回“Destination Unreachable”的ICMP錯(cuò)誤報(bào)文。如果向目標(biāo)主機(jī)發(fā)送一個(gè)壞IP數(shù)據(jù)包,比如不正確的IP頭長(zhǎng)度,目標(biāo)主機(jī)將返回“Parameter Problem”(參數(shù)有問(wèn)題)的ICMP錯(cuò)誤報(bào)文。 注意:如果是在目標(biāo)主機(jī)前有一個(gè)防火墻或者一個(gè)其他的過(guò)濾裝置,可能過(guò)濾掉提出的要求,從而接收不到任何的回應(yīng)。這時(shí)可以使用一個(gè)非常大的協(xié)議數(shù)字作為 IP頭部的協(xié)議內(nèi)容,而且這個(gè)協(xié)議數(shù)字至少在今天還沒(méi)有被使用,主機(jī)一定會(huì)返回Unreachable;如果沒(méi)有Unreachable的ICMP數(shù)據(jù)包 返回錯(cuò)誤提示,那么,就說(shuō)明被防火墻或者其他設(shè)備過(guò)濾了,也可以用這個(gè)方法探測(cè)是否有防火墻或者其他過(guò)濾設(shè)備存在。
|