第一部分,我們講述TCP連接的建立過程(通常稱作三階段握手),然后討論與掃描程序有關(guān)的一些實現(xiàn)細(xì)節(jié)。
然后,簡單介紹一下經(jīng)典的掃描器(全連接)以及所謂的SYN(半連接)掃描器。
第三部分主要討論間接掃描和秘密掃描,還有隱藏攻擊源的技術(shù)。
秘密掃描基于FIN段的使用。在大多數(shù)實現(xiàn)中,關(guān)閉的端口對一個FIN 段返回一個RST,但是打開的端口通常丟棄這個段,不作任何回答。間接掃描,就像它的名字,是用一個欺騙主機(jī)來幫助實施,這臺主機(jī)通常不是自愿的。
第四部分介紹了一種與應(yīng)用協(xié)議有關(guān)掃描。這些掃描器通常利用協(xié)議實現(xiàn)中的一些缺陷或者錯誤。認(rèn)證掃描(ident scanning)也被成為代理掃描(proxy scanning)。
最后一部分,介紹了另外一些掃描技術(shù)??紤]了一些不是基于TCP端口和主要用來進(jìn)行安全掃描的掃描工具(例如SATAN)。另外分析了使用掃描器的棧指紋。棧指紋通過檢測主機(jī)TCP并將應(yīng)答跟已知操作系統(tǒng)TCP/IP協(xié)議棧應(yīng)答相比較,解決了識別操作系統(tǒng)的問題。
一:TCP/IP相關(guān)問題
連接端及標(biāo)記
IP地址和端口被稱作套接字,它代表一個TCP連接的一個連接端。為了獲得TCP服務(wù),必須在發(fā)送機(jī)的一個端口上和接收機(jī)的一個端口上建立連接。TCP連接用兩個連接端來區(qū)別,也就是(連接端1,連接端2)。連接端互相發(fā)送數(shù)據(jù)包。
一個TCP數(shù)據(jù)包包括一個TCP頭,后面是選項和數(shù)據(jù)。一個TCP頭包含6個標(biāo)志位。它們的意義分別為:
SYN: 標(biāo)志位用來建立連接,讓連接雙方同步序列號。如果SYN=1而ACK=0,則表示該數(shù)據(jù)包為連接請求,如果SYN=1而ACK=1則表示接受連接。
FIN: 表示發(fā)送端已經(jīng)沒有數(shù)據(jù)要求傳輸了,希望釋放連接。
RST: 用來復(fù)位一個連接。RST標(biāo)志置位的數(shù)據(jù)包稱為復(fù)位包。一般情況下,如果TCP收到的一個分段明顯不是屬于該主機(jī)上的任何一個連接,則向遠(yuǎn)端發(fā)送一個復(fù)位包。
URG: 為緊急數(shù)據(jù)標(biāo)志。如果它為1,表示本數(shù)據(jù)包中包含緊急數(shù)據(jù)。此時緊急數(shù)據(jù)指針有效。
ACK: 為確認(rèn)標(biāo)志位。如果為1,表示包中的確認(rèn)號時有效的。否則,包中的確認(rèn)號無效。
PSH: 如果置位,接收端應(yīng)盡快把數(shù)據(jù)傳送給應(yīng)用層。
TCP連接的建立
TCP是一個面向連接的可靠傳輸協(xié)議。面向連接表示兩個應(yīng)用端在利用TCP傳送數(shù)據(jù)前必須先建立TCP連接。 TCP的可靠性通過校驗和,定時器,數(shù)據(jù)序號和應(yīng)答來提供。通過給每個發(fā)送的字節(jié)分配一個序號,接收端接收到數(shù)據(jù)后發(fā)送應(yīng)答,TCP協(xié)議保證了數(shù)據(jù)的可靠傳輸。數(shù)據(jù)序號用來保證數(shù)據(jù)的順序,剔除重復(fù)的數(shù)據(jù)。在一個TCP會話中,有兩個數(shù)據(jù)流(每個連接端從另外一端接收數(shù)據(jù),同時向?qū)Ψ桨l(fā)送數(shù)據(jù)),因此在建立連接時,必須要為每一個數(shù)據(jù)流分配ISN(初始序號)。為了了解實現(xiàn)過程,我們假設(shè)客戶端C希望跟服務(wù)器端S建立連接,然后分析連接建立的過程(通常稱作三階段握手):
1: C --SYN XXà S
2: C ?-SYN YY/ACK XX+1------- S
3: C ----ACK YY+1--à S
1:C發(fā)送一個TCP包(SYN 請求)給S,其中標(biāo)記SYN(同步序號)要打開。SYN請求指明了客戶端希望連接的服務(wù)器端端口號和客戶端的ISN(XX是一個例子)。
2:服務(wù)器端發(fā)回應(yīng)答,包含自己的SYN信息ISN(YY)和對C的SYN應(yīng)答,應(yīng)答時返回下一個希望得到的字節(jié)序號(YY+1)。
3:C 對從S 來的SYN進(jìn)行應(yīng)答,數(shù)據(jù)發(fā)送開始。
一些實現(xiàn)細(xì)節(jié)
大部分TCP/IP實現(xiàn)遵循以下原則:
1:當(dāng)一個SYN或者FIN數(shù)據(jù)包到達(dá)一個關(guān)閉的端口,TCP丟棄數(shù)據(jù)包同時發(fā)送一個RST數(shù)據(jù)包。
2:當(dāng)一個RST數(shù)據(jù)包到達(dá)一個監(jiān)聽端口,RST被丟棄。
3:當(dāng)一個RST數(shù)據(jù)包到達(dá)一個關(guān)閉的端口,RST被丟棄。
4:當(dāng)一個包含ACK的數(shù)據(jù)包到達(dá)一個監(jiān)聽端口時,數(shù)據(jù)包被丟棄,同時發(fā)送一個RST數(shù)據(jù)包。
5:當(dāng)一個SYN位關(guān)閉的數(shù)據(jù)包到達(dá)一個監(jiān)聽端口時,數(shù)據(jù)包被丟棄。
6:當(dāng)一個SYN數(shù)據(jù)包到達(dá)一個監(jiān)聽端口時,正常的三階段握手繼續(xù),回答一個SYN ACK數(shù)據(jù)包。
7:當(dāng)一個FIN數(shù)據(jù)包到達(dá)一個監(jiān)聽端口時,數(shù)據(jù)包被丟棄。"FIN行為"(關(guān)閉得端口返回RST,監(jiān)聽端口丟棄包),在URG和PSH標(biāo)志位置位時同樣要發(fā)生。所有的URG,PSH和FIN,或者沒有任何標(biāo)記的TCP數(shù)據(jù)包都會引起"FIN行為"。//本文來自武林網(wǎng)www.survivalescaperooms.com轉(zhuǎn)載請注明
二:全TCP連接和SYN掃描器
全TCP連接
全TCP連接是長期以來TCP端口掃描的基礎(chǔ)。掃描主機(jī)嘗試(使用三次握手)與目的機(jī)指定端口建立建立正規(guī)的連接。連接由系統(tǒng)調(diào)用connect()開始。對于每一個監(jiān)聽端口,connect()會獲得成功,否則返回-1,表示端口不可訪問。由于通常情況下,這不需要什么特權(quán),所以幾乎所有的用戶(包括多用戶環(huán)境下)都可以通過connect來實現(xiàn)這個技術(shù)。
這種掃描方法很容易檢測出來(在日志文件中會有大量密集的連接和錯誤記錄) 主站蜘蛛池模板: 寻甸| 长宁县| 乌鲁木齐县| 霸州市| 铁力市| 黑河市| 罗平县| 巴楚县| 炎陵县| 随州市| 平凉市| 成都市| 正宁县| 平塘县| 独山县| 景德镇市| 天等县| 修文县| 怀集县| 武胜县| 多伦县| 沐川县| 广德县| 石棉县| 石泉县| 出国| 宁远县| 湘西| 桦川县| 沈丘县| 上思县| 福鼎市| 石台县| 和平区| 沙雅县| 蒲城县| 方正县| 博爱县| 盈江县| 彩票| 广平县|