歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 網絡流量分析(一)

網絡流量分析(一)

日期:2017/2/27 14:19:08   编辑:更多Linux
  網絡流量分析(一) 原著: Karen Frederick 翻譯:土鱉(ISHTAR [email protected]) 發表日期:2001/01/29 發表地點:www.securityfocus.net 以往關於入侵分析的文章都把注意力集中在可疑的數據包(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包. 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包.
Copyright © Linux教程網 All Rights Reserved