亚洲成精品动漫久久精久,九九在线精品视频播放,黄色成人免费观看,三级成人影院,久碰久,四虎成人欧美精品在永久在线

掃一掃
關注微信公眾號

網絡流量分析(一)
2007-01-22   

以往關于入侵分析的文章都把注意力集中在可疑的數據包(TCP包或者保留的IP地址)上.但是弄清楚什么是正常的網絡數據流也是非常重要的.知道什么是正常數據流最好的辦法就是先產生一些正常的數據流,然后攔截數據包進行分析.在本文中,本人介紹一些截獲數據包的工具并對截獲數據進行一些分析,順帶說一下非正常的數據流.學習本文的前提在于你已經有TCP/IP的基礎.

現在已經有了 很多截獲數據包的工具,最有名的是UNIX下的TCPDUMP和WINDOWS下面的WINDUMP.我在自己家98的機器上用過WINDUMP2.1,用CABLE MODEM上網攔截數據包,不過需要指出的是:未經授權而攔截數據包時你可千萬要小心啊.
WINDUMP基礎
WINDUMP使用起來很簡單,在它的站點上你可以找到使用文件.我經常用的命令是WINDUMP –N –S,或者WINDUMP –n –S –v 或者WINDUMP –n-S-vv.-N是不顯示計算機名而直接顯示IP地址;-S是顯示TCP/IP的實際進程數,如果不選擇這個選項,可能出現的就是近似值,比如:如果現在的進程數是87334271,下一秒變成了多了一個,就會顯示出來是87334272.-V和-VV是讓機器顯示更加全面的信息,顯示諸如存活時間/IP的ID等信息.
在開始剖析例子之前,我們先看一下WINDUMP記錄的不同種類的數據包,這里有一個TCP的例子,
13:45:19.184932 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: P 4138420250:4138420282(32) ack
87334272 win 32120 (DF)

13:45:19.184932 [timestamp]??sshserver.xx.yy.zz.22 [source address and port]??>
mypc.xx.yy.zz.3164: [destination address and port]??P [TCP flags]??4138420250:4138420282
[sequence numbers]??(32) [bytes of data]??ack 87334272 [acknowledgment flag and number]??win
32120 [window size]??(DF) [don't fragment flag is set]

and then gives the number of data bytes in the packet:
下一個是UDP的例子,里面也是該有的全有了:時戳/數據源地址和端口/目的地地址和端口,最后還招供了使用的協議(UDP)和數據包里面的數據數
15:19:14.490029 208.148.96.68.23079 > mypc.xx.yy.zz.6976:?udp 401

ICMP包格式也是類似的,只是注意一下最后,出現了存活時間和IP的ID,當然,你要使用-V選項
18:33:45.649204 mypc.xx.yy.zz > 64.208.34.100: icmp: echo request (ttl 4, id 56693)

最后,WINDUMP也抓獲ARP請求和回復.我們來看看:第一行是ARP請求;在這個例子里,MYPC把MAC地址為24.167.235.1的機器信息發送MYPC.XX.YY.ZZ(MYPC的IP地址),第二行則顯示了ARP回復,包含著24.167.235.1這個MAC地址.
13:45:13.836036 arp who-has 24.167.235.1 tell mypc.xx.yy.zz
13:45:13.841823 arp reply 24.167.235.1 is-at 0:xx:xx:xx:xx:xx

UDP和ICMP例子
上面我們已經看過了WINDUMP的記錄格式,接下來我們看看數據包:MYPC使用DHCP來獲得IP地址,而DHCP租用是定時更新的,這個過程是從MYPC的68端口到DHCP機器的67端口,然后由DHCP服務器回送到MYPC
18:47:02.667860 mypc.xx.yy.zz.68 > dnsserver.xx.yy.zz.67:?xid:0x8d716e0f C:mypc.xx.yy.zz [|bootp]
18:47:03.509471 dnsserver.xx.yy.zz.67 > mypc.xx.yy.zz.68:?xid:0x8d716e0f C:mypc.xx.yy.zz
Y:mypc.xx.yy.zz [|bootp]
WINDUMP的一個好處就在于它可以自動識別協議和記錄的其他信息,在這個例子里,他就識別出這是一個BOOTP,所以它不僅記錄了標準的UDP記錄,而且記錄了BOOTP的特定信息:XID,C,Y.
現在我們來看看一些ICMP數據:一個例子就是你在98機器上使用TRACERT命令時出現的數據流,WINDOWS使用ICMP來識別系統之間的跳(UNIX則使用UDP).
WINDOWS在執行路由追蹤時先向目的主機發送3個ICMP包,將存活時間設為1,這意味著當數據包到達第一跳時,數值會降為0.此時.第一跳的機器會將ICMP超時錯的信息回送到主機,主機就再發出3個ICMP包,將跳數設為2,所以這會就可以在時延結束前到達第二跳的機器,第二跳的機器就又將時延錯回送到主機,主機重新再發ICMP包,如此這般,直到找到目標機或者中間有一關將數據流截斷為止.
which is one of the intermediate network devices between mypc and 64.208.34.100.
這里就有一個路由追蹤的例子,ICMP的時延值已經被設為1,2,3而且都已經過期,由于尚未到達最終目的機,WINDOWS開始發送時延設為4的ICMP包,這里是第一個數據包和回復 ,請注意雖然第一個數據包的目的地址是64.208.34.100,回復卻來自于24.95.80.133,這是MYPC和64.208.34.100之間的一個網絡設施的地址.
18:33:45.649204 mypc.xx.yy.zz > 64.208.34.100: icmp: echo request (ttl 4, id 56693)
18:33:45.668638 24.95.80.133 > mypc.xx.yy.zz: icmp: time exceeded in-transit (ttl 252, id 0)

在收到時延錯誤信息的千分之一秒內,MYPC發出后續的ICMP包,在收到數據包的錯誤信息時,機器立即發送出第三個ICMP包:
18:33:45.669968 mypc.xx.yy.zz > 64.208.34.100: icmp: echo request (ttl 4, id 56949)
18:33:45.690719 24.95.80.133 > mypc.xx.yy.zz: icmp: time exceeded in-transit (ttl 252, id 0)
18:33:45.691863 mypc.xx.yy.zz > 64.208.34.100: icmp: echo request (ttl 4, id 57205)
18:33:45.710787 24.95.80.133 > mypc.xx.yy.zz: icmp: time exceeded in-transit (ttl 252, id 0)

請注意這些數據相當近似,只是每一個ICMP回應請求中IP的ID號不同,這點很重要,我們應該對IP的ID號雷同的現象引起高度的重視.

檢測SSH進程
SSH是一個更加典型的數據流.我在工作站上裝了個SSH的客戶并連接到一個開了俺帳戶的機器上.
我有用于連接到SSH服務器上的SSH的客戶端軟件.我的機器并不直到SSH服務器的IP地址,所以他需要DNS的服務,不幸的是,我的機器上又使不了DNS,所以沒辦法的辦法之一就是先使ARP取得默認網關的MAC地址.
13:45:13.836036 arp who-has gateway.xx.yy.zz tell mypc.xx.yy.zz
13:45:13.841823 arp reply gateway.xx.yy.zz is-at 0:xx:xx:xx:xx:xx

would expect with a DNS query:
現在可以連接到網關上了,MYPC可以發出如下所示的DNS請求,請注意MYPC使用了大于1023的端口,要求建立到DNS的53端口的連接,這種請求使用的是UDP協議
13:45:13.841920 mypc.xx.yy.zz.3163 > dnsserver.xx.yy.zz.53:?1+ A? sshserver. (32)

DNS請求的結果是”1+A SSHSERVER”,我們可以認為這是一個IP地址的進程,因為A和+證明我們要求的是一個循環進程,1是DNS請求數,用于匹配DNS的請求和回復,SSHSERVER則是我們要解析的名字
以下是DNS服務器的回應:
13:45:13.947208 dnsserver.xx.yy.zz.53 > mypc.xx.yy.zz.3163:?1 q: sshserver. 3/4/6 sshserver. CNAME
ssh2server., ssh2server. CNAME ssh3server., ssh3server. A sshserver.xx.yy.zz (283)

回復情況由"1 q: sshserver. 3/4/6"體現,1是DNS的進程序號, "q: sshserver."是顯示我們的請求,3/4/6是顯示有3個回復,4個標準記錄和6個額外記錄,和SSHSERVER連接的IP地址方在A后面
現在我們知道了SSH服務器的IP地址,就可以連上去了,MYPC開始三次握手:


13:45:13.956853 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: S 87334271:87334271(0) win 65535?(DF)
13:45:14.059243 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: S 4138420249:4138420249(0) ack 87334272
win 32120?(DF)
13:45:14.059475 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: . 87334272:87334272(0) ack 4138420250
win 65535 (DF)

三次握手完成,記住:即使2臺機器在SSH端口建立了連接,我也沒有登錄到SSH服務器上去,在3次握手完成前機器間并沒有數據交流.SSH客戶和服務器是建立了SSH進程,通過下面的數據包進行交流:
13:45:19.184932 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: P 4138420250:4138420282(32) ack
87334272 win 32120 (DF)
13:45:19.201814 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: P 87334272:87334314(42) ack 4138420282
win 65503 (DF)
13:45:19.300401 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: . 4138420282:4138420282(0) ack 87334314
win 32120 (DF)
13:45:19.300616 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: P 87334314:87334690(376) ack 4138420282
win 65503 (DF)
13:45:19.303977 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: P 4138420282:4138421210(928) ack
87334314 win 32120 (DF)
13:45:19.422141 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: . 4138421210:4138421210(0) ack 87334690
win 32120 (DF)
13:45:19.488282 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: . 87334690:87334690(0) ack 4138421210
win 64575 (DF)

sshserver's port 22.
我敲了密碼,正式作為用戶登錄了進去,所有我使用SSH服務器所產生的數據流都很類似,在MYPC的3136端口和SERVER的22端口之間,有PSH/ACK和ACK包.
我從SSHSERVER注銷的時候,服務器和客戶機之間也有數據流產生,客戶機收到來自服務器的最后數據:
13:45:33.791528 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: P 87335442:87335474(32) ack 4138426586
win 64359 (DF)
13:45:33.902690 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: . 4138426586:4138426586(0) ack 87335474
win 32120 (DF)

一旦收到這個數據,客戶機就自動斷開連接,服務器確認斷開:
13:45:33.902909 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: F 87335474:87335474(0) ack 4138426586
win 64359 (DF)
13:45:34.002179 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: . 4138426586:4138426586(0) ack 87335475
win 32120 (DF)
13:45:34.003336 sshserver.xx.yy.zz.22 > mypc.xx.yy.zz.3164: F 4138426586:4138426586(0) ack 87335475
win 32120 (DF)
13:45:34.003492 mypc.xx.yy.zz.3164 > sshserver.xx.yy.zz.22: . 87335475:87335475(0) ack 4138426587
win 64359 (DF)

所以,我們可以歸納出SSH連接的5個步驟:
(1)使用ARP確認MYPC的默認網關的MAC地址
(2)發出DNS請求確認SSH服務器的IP地址
(3)MYPC的高端口和SSHSERVER低端口間的三次TCP握手
(4)MYPC和SSHSERVER之間的數據交流,包括建立SSH連接,用戶認證和數據傳輸.
(5)MYPC和服務器間的TCP連接斷開
在這個例子里,SSH客戶機使用的是高端口(高于1023).在一般連接里,客戶機使用的高端口而服務器使用的是低端口,但是需要引起注意的是很多SSH的客戶機也使用低端口,所以千萬別讓一個和本文例子不同的情況把你給弄糊涂了

在和SSH類似的連接里,有更多的如TELNET等協議
結論
對例行的網絡流量進行分析是好好了解TCP/IP和我們環境的好辦法,每次我攔截數據包時,我總能學到點新東西,如果你對本文有了興趣, 我強烈建議你生產/攔截并分析你自己的數據包, 我只是稍微進行 了一些介紹,后面將繼續介紹更多的數據流分析,尤其是FTP和HTTP.


以下為作者簡介:
Karen Frederick is a senior security engineer for NFR Security. Karen has a B.S. in Computer Science and is completing her Master's thesis in intrusion detection through the University of Idaho's Engineering Outreach program. She holds several certifications, including Microsoft Certified Systems Engineer + Internet, Check Point Certified Security Administrator, and SANS GIAC Certified Intrusion Analyst. Karen is one of the authors and editors of "Intrusion Signatures and Analysis", a new book on intrusion detection that was published in January 2001.

[1]

熱詞搜索:

上一篇:鏈接廣泛度全攻略(二)
下一篇:網絡流量分析(二)

分享到: 收藏