連線端及標記
ip位址和埠被稱作套接字,它代表乙個tcp連線的乙個連線端。為了獲得tcp服務,必須在傳送機的乙個埠上和接收機的乙個埠上建立連線。tcp連線用兩個連線端來區別,也就是(連線端1,連線端2)。連線端互相傳送資料報。
乙個tcp資料報包括乙個tcp頭,後面是選項和資料。乙個tcp頭包含6個標誌位。它們的意義分別為:
syn: 標誌位用來建立連線,讓連線雙方同步序列號。如果syn=1而ack=0,則表示該資料報為連線請求,如果syn=1而ack=1則表示接受連線。
fin: 表示傳送端已經沒有資料要求傳輸了,希望釋放連線。
rst: 用來復位乙個連線。rst標誌置位的資料報稱為復位包。一般情況下,如果tcp收到的乙個分段明顯不是屬於該主機上的任何乙個連線,則向遠端傳送乙個復位包。
urg: 為緊急資料標誌。如果它為1,表示本資料報中包含緊急資料。此時緊急資料指標有效。
ack: 為確認標誌位。如果為1,表示包中的確認號時有效的。否則,包中的確認號無效。
psh: 如果置位,接收端應盡快把資料傳送給應用層。
tcp連線的建立
tcp是乙個面向連線的可靠傳輸協議。面向連線表示兩個應用端在利用tcp傳送資料前必須先建立tcp連線。 tcp的可靠性通過校驗和,定時器,資料序號和應答來提供。通過給每個傳送的位元組分配乙個序號,接收端接收到資料後傳送應答,tcp協議保證了資料的可靠傳輸。資料序號用來保證資料的順序,剔除重複的資料。在乙個tcp會話中,有兩個資料流(每個連線端從另外一端接收資料,同時向對方傳送資料),因此在建立連線時,必須要為每乙個資料流分配isn(初始序號)。為了了解實現過程,我們假設客戶端c希望跟伺服器端s建立連線,然後分析連線建立的過程(通常稱作三階段握手):
1: c --syn xxà s
2: c ?-syn yy/ack xx+1------- s
3: c ----ack yy+1--à s
1:c傳送乙個tcp包(syn 請求)給s,其中標記syn(同步序號)要開啟。syn請求指明了客戶端希望連線的伺服器端埠號和客戶端的isn(xx是乙個例子)。
2:伺服器端發回應答,包含自己的syn資訊isn(yy)和對c的syn應答,應答時返回下乙個希望得到的位元組序號(yy+1)。
3:c 對從s 來的syn進行應答,資料傳送開始。
一些實現細節
大部分tcp/ip實現遵循以下原則:
1:當乙個syn或者fin資料報到達乙個關閉的埠,tcp丟棄資料報同時傳送乙個rst資料報。
2:當乙個rst資料報到達乙個監聽埠,rst被丟棄。
3:當乙個rst資料報到達乙個關閉的埠,rst被丟棄。
4:當乙個包含ack的資料報到達乙個監聽埠時,資料報被丟棄,同時傳送乙個rst資料報。
5:當乙個syn位關閉的資料報到達乙個監聽埠時,資料報被丟棄。
6:當乙個syn資料報到達乙個監聽埠時,正常的三階段握手繼續,回答乙個syn ack資料報。
7:當乙個fin資料報到達乙個監聽埠時,資料報被丟棄。"fin行為"(關閉得埠返回rst,監聽埠丟棄包),在urg和psh標誌位置位時同樣要發生。所有的urg,psh和fin,或者沒有任何標記的tcp資料報都會引起"fin行為"。
全tcp連線
全tcp連線是長期以來tcp埠掃瞄的基礎。掃瞄主機嘗試(使用三次握手)與目的機指定埠建立建立正規的連線。連線由系統呼叫connect()開始。對於每乙個監聽埠,connect()會獲得成功,否則返回-1,表示埠不可訪問。由於通常情況下,這不需要什麼特權,所以幾乎所有的使用者(包括多使用者環境下)都可以通過connect來實現這個技術。
tcp syn掃瞄
在這種技術中,掃瞄主機向目標主機的選擇埠傳送syn資料段。如果應答是rst,那麼說明埠是關閉的,按照設定就探聽其它埠;如果應答中包含syn和ack,說明目標埠處於監聽狀態。由於所有的掃瞄主機都需要知道這個資訊,傳送乙個rst給目標機從而停止建立連線。由於在syn掃瞄時,全連線尚未建立,所以這種技術通常被稱為半開啟掃瞄。syn掃瞄的優點在於即使日誌中對掃瞄有所記錄,但是嘗試進行連線的記錄也要比全掃瞄少得多。缺點是在大部分作業系統下,傳送主機需要構造適用於這種掃瞄的ip包,通常情況下,構造syn資料報需要超級使用者或者授權使用者訪問專門的系統呼叫。
秘密掃瞄技術
由於這種技術不包含標準的tcp三次握手協議的任何部分,所以無法被記錄下來,從而必syn掃瞄隱蔽得多。另外,fin資料報能夠通過只監測syn包的包過濾器。
秘密掃瞄技術使用fin資料報來探聽埠。當乙個fin資料報到達乙個關閉的埠,資料報會被丟掉,並且回返回乙個rst資料報。否則,當乙個fin資料報到達乙個開啟的埠,資料報只是簡單的丟掉(不返回rst)。
xmas和null掃瞄是秘密掃瞄的兩個變種。xmas掃瞄開啟fin,urg和push標記,而null掃瞄關閉所有標記。這些組合的目的是為了通過所謂的fin標記監測器的過濾。
秘密掃瞄通常適用於unix目標主機,除過少量的應當丟棄資料報卻傳送reset訊號的作業系統(包括cisco,bsdi,hp/ux,mvs和irix)。在windows95/nt環境下,該方法無效,因為不論目標埠是否開啟,作業系統都傳送rst。
跟syn掃瞄類似,秘密掃瞄也需要自己構造ip 包。
間接掃瞄
間接掃瞄的思想是利用第三方的ip(欺騙主機)來隱藏真正掃瞄者的ip。由於掃瞄主機會對欺騙主機傳送回應資訊,所以必須監控欺騙主機的ip行為,從而獲得原始掃瞄的結果。間接掃瞄的工作過程如下:
假定參與掃瞄過程的主機為掃瞄機,隱藏機,目標機。掃瞄機和目標記的角色非常明顯。隱藏機是乙個非常特殊的角色,在掃瞄機掃瞄目的機的時候,它不能傳送任何資料報(除了與掃瞄有關的包)。
認證掃瞄
到目前為止,我們分析的掃瞄器在設計時都只有乙個目的:判斷乙個主機中哪個埠上有程序在監聽。然而,最近的幾個新掃瞄器增加了其它的功能,能夠獲取監聽埠的程序的特徵和行為。
認證掃瞄是乙個非常有趣的例子。利用認證協議,這種掃瞄器能夠獲取執行在某個埠上程序的使用者名稱(userid)。認證掃瞄嘗試與乙個tcp埠建立連線,如果連線成功,掃瞄器傳送認證請求到目的主機的113tcp埠。認證掃瞄同時也被成為反向認證掃瞄,因為即使最初的rfc建議了一種幫助伺服器認證客戶端的協議,然而在實際的實現中也考慮了反向應用(即客戶端認證伺服器)。
**掃瞄
檔案傳輸協議(ftp)支援乙個非常有意思的選項:**ftp連線。這個選項最初的目的(rfc959)是允許乙個客戶端同時跟兩個ftp伺服器建立連線,然後在伺服器之間直接傳輸資料。然而,在大部分實現中,實際上能夠使得ftp伺服器傳送檔案到internet的任何地方。許多攻擊正是利用了這個缺陷。最近的許多掃瞄器利用這個弱點實現ftp**掃瞄。
ftp埠掃瞄主要使用ftp**伺服器來掃瞄tcp埠。掃瞄步驟如下:
1:假定s是掃瞄機,t是掃瞄目標,f是乙個ftp伺服器,這個伺服器支援**選項,能夠跟s和t建立連線。
2:s與f建立乙個ftp會話,使用port命令宣告乙個選擇的埠(稱之為p-t)作為**傳輸所需要的被動埠。
3:然後s使用乙個list命令嘗試啟動乙個到p-t的資料傳輸。
4:如果埠p-t確實在監聽,傳輸就會成功(返回碼150和226被傳送回給s)。否則s**到"425無法開啟資料連線"的應答。
5:s持續使用port和list命令,直到t上所有的選擇埠掃瞄完畢。
ftp**掃瞄不但難以跟蹤,而且當ftp伺服器在防火牆後面的時候
ping掃瞄
如果需要掃瞄乙個主機上甚至整個子網上的成千上萬個埠,首先判斷乙個主機是否開機就非常重要了。這就是ping掃瞄器的目的。主要由兩種方法用來實現ping掃瞄。
1:真實掃瞄:例如傳送icmp請求包給目標ip位址,有相應的表示主機開機。
2:tcp ping:例如傳送特殊的tcp包給通常都開啟且沒有過濾的埠(例如80埠)。對於沒有root許可權的掃瞄者,使用標準的connect來實現。否則,ack資料報傳送給每乙個需要探測的主機ip。每乙個返回的rst表明相應主機開機了。另外,一種類似於syn掃瞄埠80(或者類似的)也被經常使用。
安全掃瞄器
安全掃瞄器是用來自動檢查乙個本地或者遠端主機的安全漏洞的程式。象其它埠掃瞄器一樣,它們查詢埠並記錄返回結果。但是它們。它們主要要解決以下問題:
1:是否允許匿名登入。
2:是否某種網路服務需要認證。
3:是否存在已知安全漏洞。
可能satan是最著名的安全掃瞄器。2023年四月satan最初發布的時候,人們都認為這就是它的最終版本,認為它不但能夠發現相當多的已知漏洞,而且能夠針對任何很難發現的漏洞提供資訊。但是,從它發布以來,安全掃瞄器一直在不斷地發展,其實現機制也越來越複雜。
棧指紋絕大部分安全漏洞與缺陷都與作業系統相關,因此遠端作業系統探測是系統管理員關心的乙個問題。
遠端作業系統探測不是乙個新問題。近年來,tcp/ip實現提供了主機作業系統資訊服務。ftp,telnet,http和dns伺服器就是很好的例子。然而,實際上提供的資訊都是不完整的,甚至有可能是錯誤的。最初的掃瞄器,依靠檢測不同作業系統對tcp/ip的不同實現來識別作業系統。由於差別的有限性,現在只能最多只能識別出10餘種作業系統。
最近出現的兩個掃瞄器,queso和nmap,在指紋掃瞄中引入了新的技術。 queso第乙個實現了使用分離的資料庫於指紋。nmap包含了很多的作業系統探測技術,定義了乙個模板資料結構來描述指紋。由於新的指紋可以很容易地以模板的形式加入,nmap指紋資料庫是不斷增長的,它能識別的作業系統也越來越多。
這種使用掃瞄器判斷遠端作業系統的技術稱為(tcp/ip)棧指紋技術。
另外有一種技術稱為活動探測。活動探測把tcp的實現看作乙個黑盒子。通過研究tcp對探測的回應,就可以發現 tcp實現的特點。tcp/ip 棧指紋技術是活動探測的乙個變種,它適用於整個tcp/ip協議的實現和作業系統。棧指紋使用好幾種技術來探測tcp/ip協議棧和作業系統的細微區別。這些資訊用來建立乙個指紋,然後跟已知的指紋進行比較,就可以判斷出當前被掃瞄的作業系統。
棧指紋掃瞄包含了相當多的技術。下面是乙個不太完整的清單:
1:fin探測
2:bogus標記探測
3:tcp isn 取樣
4:tcp 初始視窗
5:ack值
6:icmp錯誤資訊
7:icmp資訊
8:服務型別
9:tcp選項
埠掃瞄技術
目前主要的埠掃瞄技術有以下幾種 1 tcp connect scan tcp連線掃瞄 這種方法也稱之為 tcp全連線掃瞄 它是最簡單的一種掃瞄技術,所利用的是tcp協議的3次握手過程。它直接連到目標埠並完成乙個完整的3次握手過 程 syn syn ack和ack 作業系統提供的 connect 函式...
埠掃瞄技術與分析(四)
埠掃瞄分析 三 乙個簡單的掃瞄程式 下面是乙個埠掃瞄器的源程式,功能相當的簡單,乙個典型的tcpconnect 掃瞄。沒有對返回的資料進行分析。include include include include include include int main intargc,char argv for...
埠掃瞄原理
埠掃瞄原理分類 1 全tcp連線 這種掃瞄方法使用三次握手,與目標計算機建立標準的tcp連線。但是這種掃瞄方式很容易被目標主機記錄,不推薦使用。2 半開啟式掃瞄 syn掃瞄 在這種掃瞄技術中,掃瞄主機自動向目標計算機的指定埠傳送syn資料段,表示傳送建立連線請求。a,如果目標計算機的回應tcp報文中...