網路故障了?沒有用網路時網路燈號卻一直閃爍不停?新的網路通訊協定夠不夠完善?種種大大小小的問題充斥在網路世界中,為了解決各種問題,我們常常需要先對網路中的資料進行擷取和分析,以瞭解問題的癥結點並擬對策。Wireshark就是一種網路分析工具,它能夠擷取網路封包,並盡可能顯示出最為詳細的網路封包資料。本文將對Wireshark做一些基本的使用介紹。
Wireshark簡介:
Wireshark的前身叫做Ethereal(2006.06因為商標問題改名),是一開放原始碼軟體,使用者可以免費從官方網站(http://www.wireshark.org/)下載使用。Wireshark支援了多種作業系統,在Windows、UNIX、MAC…etc下都有相對應的版本。藉由此軟體我們可以抓取資料封包,進一步分析封包內的摘要及詳細資訊。一般常用在網路故障排除、監聽異常封包、軟體封包問題檢測等地方。Wireshark的方便強大之處,在於其支援的Protocol多且完整,更因為開放原始碼的關係,更新Protocol相當迅速,不同封包擷取軟體所產生的檔案亦可在這套軟體中讀取檢視。此外,在介面使用上,Wireshark圖形化的介面相當容易上手,豐富的過濾語言,可以輕鬆判別出封包的種類,是一套整合度完整的軟體。
安裝Wireshark:
首先我們必須到官方網頁來下載安裝程式,位置是http://www.wireshark.org/,官方網頁中有不同的作業系統可供選擇,也提供了Portable的版本,在這邊我們將以Windows Installer (.exe) Package來做示範。
安裝的過程相當簡單,跟一般軟體的流程一樣,接受授權、客製化、安裝。現階段我們使用預設的設定即可。
比較需要注意的是在安裝的過程中會要我們安裝WinPcap(Windows Packet Capture),如圖所示。WinPcap 是 Windows 版本的 lippcap 函式庫,Wireshark使用了這個函式庫去抓取網路上的封包,它含有支援抓取網路上封包的驅動程式,所以我們必須要安裝它,若電腦本身已經有安裝WinPcap,建議還是更新到最新的版本。
按下Install開始安裝,若想要瞭解更多關於WinPcap的資訊,點選『What is WinPcap?』的按鈕即可。
在一連串的Next過後,Wireshark安裝完畢如上圖。接下來我們藉由三個小步驟來介紹Wireshark的功能。
步驟1:明碼封包的截取與觀察
目的:透過基本的封包擷取,瞭解Wireshark的使用流程。從實驗中我們必須要知道sniffer的運作原理,習得呈現內容過濾的技巧,並利用stream彙整的功能找到需要的資訊。
流程:
當安裝完畢,點擊開啟Wireshark,看到的程式介面如下。
接著我們想要開始抓取網路的封包,請點選主選單中的Capture → Interfaces會看到類似以下的畫面,此畫面會列出電腦裡所有的網路卡資訊。選擇想要觀察的網路卡,按下Start就開始擷取封包了。[Tips: 進入這個畫面,Wireshark就會開始監測每張網路卡上的封包流動數目,若真的不確定要選哪張網路卡,選擇packets/s數高的,通常會選中,這是比較懶人的作法啦!]
開始監測之後,畫面會一直動態產生所接收到的封包。你可能會發現很多封包的Source和Destination都不是自己,這是因為我們目前所使用的區域網路大部分為乙太網路,係採用廣播為技術基礎,所以在區域網路中我們很容易可以透過sniffer軟體(本文介紹的Wireshark即是)看到別人的封包,甚至知道別人的隱私內容,本實驗就是要強調明碼的危險性。
明碼傳輸的protocol相當多,telnet、FTP、HTTP等常用協定皆在這個範疇裡面,國人熱愛的BBS(Bulletin Board System)就是使用telnet協定運作,透過sniffer的監聽我們很容易知道別人的帳號密碼。
我們拿BBS來做這次的實驗,首先連接到一個BBS站台,以輔大資工謠言報為例,在命令提示字元內鍵入telnet bbs.rumor.tw。
注意:此時Wireshark的還是在Capture狀態。
進入登入介面後,輸入帳號密碼登入。
接下來我們停止Wireshark的擷取動作,執行主選單的Capture → Stop或是直接點選Stop the running live capture圖示。
停止之後介面上的封包將不再增加,不過所擷取到的資料仍舊太多太雜,這時候可以利用Display Filter功能過濾呈現的內容,如下圖點擊Expression挑選過濾語法。
因為我們只是要篩選出Telnet協定的流量,找到TELNET字樣如下,直接按OK。
其實篩選的功能很強大,遵循著語法:[通訊協定][運算元][數值]就可以過濾出很多有用的資訊。
通訊協定這部分在前面有提到,Wireshark幾乎支援目前所有的協定,所以不太會有解析不出來的情況發生。
可以用的運算元就是上圖Relation那個區塊,亦可以用縮寫來替代。如下表:
English C-like Description and example
eq == Equal ex: ip.src==192.168.2.89
ne != Not equal ex: ip.src!= 192.168.2.89
gt > Greater than ex: frame.len > 10
lt <>= Greater than or equal to ex: frame.len ge 0x100
le <= Less than or equal to ex: frame.len <= 0x20 舉幾個例子: 只顯示 IP Address 為 192.168.2.89 語法為ip.addr eq 192.168.2.89 只顯示 IP Address 為 192.168.2.88 且 port 為 23 語法為(ip.addr eq 192.168.2.88) and (tcp.port eq 23) 只顯示通訊協定為 ARP 或 UDP 語法為arp or tcp 詳細的描述可以參考官方wiki:http://wiki.wireshark.org/DisplayFilters
語法確定後點選Apply就過濾出所有包含TELNET協定的封包。介面的中央區塊代表的是封包裡面的內容,關於這個區塊代表的意義我們實驗2會再談到,現階段我們要點開最下面的+號如圖紅色部分,觀看屬於應用層的內容。
經過觀察,發現一些連續的sent封包,內容依序放著s、h、a、o、l、i、n,這不正是我們先前登入的帳號?可是這樣一個封包一個封包看相當沒有效率,沒關係,Wireshark可以節錄整理串流訊息,在相關的封包上面按右鍵找到Follow TCP Stream點選,Wireshark會幫你彙整該stream的內容。
彙整出來如下圖,紅色的部分為我們送出的DATA,藍色的部分是我們收到的DATA。
為了更去蕪存菁,我們再篩選出只有我們送出的DATA,點選下面紅色部分進行篩選。
最後的結果如下,內容中『....』代表的是指令,沒有辦法顯現出來。可以看到我們曾經發出shaolin,然後按下換行,繼續輸入demo1換行,從這邊我們確切的抓到了帳號跟密碼資訊ID:shaolin Password:demo1。除此之外,我們更可以進一步知道別人在看什麼文章,或是得知別人私人信件的內容,隱私將毫無保障。
[註:為了避免被有心人監測到重要資料,有SSH、SSL、HTTPS等加密協定可用就盡量使用,至少別人監聽到的內容是加密過的。]
步驟2:HTTP Protocol的觀察
目的:藉由HTTP Protocol的觀察,練習篩選所要的資訊,並能夠清楚的知道TCP/IP實際的運作模式
流程:這次要看的是自己的HTTP封包。在上一個實驗中我們用到Display Filter,這個實驗也可以透過同樣的方式組合過濾,不過我們來嘗試另一種過濾方式Capture Filter。
同樣的進入選擇網路卡的地方。Capture → Interfaces點選Options。
進入了選項視窗後,有各種參數可以設定,比較主要的功能是在Capture這個區塊,其中:
Interface代表你要使用的網路卡。
IP address代表該網路卡的網路位置。
Buffer size代表抓取網路封包時所用的緩衝區大小。
Capture packets in promiscuous mode代表抓取封包的模式,如果勾選會抓取整個LAN的封包;如果不勾選,則只會抓取從你的電腦進或出的封包。
Limit each packet to n bytes用來指定對於每個封包要抓取的資料大小。
Capture Filter用來指定抓取時的篩選規則。
跟我們相關的功能如下圖紅色的部分,『Capture packets in promiscuous mode』、『Capture Filter』這兩部分,因為我們只要觀察自己的封包,所以『Capture packets in promiscuous mode』不要打勾,另外我們想要的是http相關資訊,所以在剛開始就設定篩選讀取,請點選『Capture Filter』的按鈕開始進行篩選設定。
Capture Filter是使用 libpcap filter 語言,詳細的語法可以參考tcpdump的網頁(http://www.tcpdump.org/tcpdump_man.html)
這裡舉幾個簡單的例子:
只抓取某一個 host(例如 IP 是 10.0.0.5) 的 telnet 封包
語法為:tcp port 23 and host 10.0.0.5
抓取 telnet 的封包但不要抓到從某一 host 的(例如 IP 是 10.0.0.5)
語法為:tcp port 23 and not host 10.0.0.5
更詳細的描述可以參考官方wiki:http://wiki.wireshark.org/CaptureFilters
在這裡我們沒有要用到這麼複雜,直接用Wireshark已經建立好的常用功能HTTP TCP port(80)即可,OK之後點選Start擷取封包
先以連接到Google首頁為例,來看看讀取一個網頁到底中間做了什麼事情?
回到Wireshark主程式,看到已經有很多封包被擷取出來了。
見下圖,右上角紅色的框框,這就是TCP在做三向交握建立連線,有興趣的可以自行察看封包並比對網路相關書籍,這裡就不多著墨了。
接下來看到下面的紅色框框,這是編號四號的封包內容,也就是當三向交握結束,client對server做出request,封包的內容層層分明,讓我們先來複習一下TCP/IP的四層架構:
應用層
(OSI 5 到 7層)
|
例如HTTP、FTP、DNS(如BGP和RIP這樣的路由協定,儘管由於各種各樣的原因它們分別運行在TCP和UDP上,仍然可以將它們看作網路層的一部分)
|
傳輸層
(OSI 4 和 5層)
|
例如TCP、UDP、RTP、SCTP(如OSPF這樣的路由協定,儘管運行在IP上也可以看作是網路層的一部分)
|
網路層
(OSI 3層)
|
對於TCP/IP來說這是網際網路協定(IP)(如ICMP和IGMP這樣的必須協定儘管運行在IP上,也仍然可以看作是網路互連層的一部分;ARP不運行在IP上)
|
連結層
(OSI 1和2層)
|
例如Ethernet、Wi-Fi、MPLS等。
|
以下圖為例,第一條內容是屬於連結層(frame);
第二條內容為MAC address,隸屬於網路層;
第三條內容也是網路層(IP);第四條TCP到了傳輸層;
最後一條HTTP為應用層。
藉由封包的分析,我們可以更清楚瞭解每一層實際運作的情形。
最後,我們開始來分析一下這些HTTP protocol,截取的內容如下,分別的動作是client請求提供服務;server回應OK並傳送網頁。透過這些header,可以從中去思考分析這些資訊分別是做什麼用的,相關的資訊請參考HTTP/1.1: Header Field Definitions (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html)
GET / HTTP/1.1
Host: www.google.com.tw
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: zh-tw,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Big5,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PREF=ID=e60ffeff3ffd6915:TM=1205430311:LM=1205430311:S=J9rJbq4UpUnfR9hl
Cache-Control: max-age=0
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip
Server: gws
Content-Length: 3034
Date: Thu, 13 Mar 2008 01:37:33 GMT
(底下HTML code省略)
步驟3:實戰練習
目的:找一個網站去瞭解其運作模式,藉此分析該網站的安全度、可靠度等細節。
流程:這次實驗挑選的對象是去年新成立的社交網站,該網站提供blog、相簿,並提供房間讓你布置,網站內的功能也持續推陳出新,是一個非常有趣新奇的網站,網址為:http://www.roomi.com.tw/。
流程:這次實驗挑選的對象是去年新成立的社交網站,該網站提供blog、相簿,並提供房間讓你布置,網站內的功能也持續推陳出新,是一個非常有趣新奇的網站,網址為:http://www.roomi.com.tw/。
因為布置房間需要金幣,我們比較有興趣的可能是該網站賺取金幣的模式如何運作,所以開啟Wireshark開始記錄。
首先進入打工中心,隨便找個零工打打看。
打工的成果為111金幣,開始察看封包。
利用前面幾個實驗所用的方法,我們在列表中發現了一個關鍵的封包,負責回傳遊戲的分數。
首先進入打工中心,隨便找個零工打打看。
打工的成果為111金幣,開始察看封包。
利用前面幾個實驗所用的方法,我們在列表中發現了一個關鍵的封包,負責回傳遊戲的分數。
GET
/obj/swf/minigame/php/index.php?type=honeybee&PA=save&score=111
HTTP/1.1Host: http://www.roomi.com.tw/User-Agent:
Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.11) Gecko/20071127
Firefox/2.0.0.11Accept:
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5Accept-Language:
zh-tw,en-us;q=0.7,en;q=0.3Accept-Encoding: gzip,deflateAccept-Charset:
Big5,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Connection: keep-aliveCookie:
PHPSESSID=0c8a8ebd9ffd07114acb6a866417c99b;
__utma=122646152.2093039428.1205467293.1205467293.1205467293.1;
__utmb=122646152; __utmc=122646152;
__utmz=122646152.1205467293.1.1.utmccn=(organic)utmcsr=googleutmctr=roomiutmcmd=organic
資料來源: http://blog.shaolin.tw/2008/03/wireshark.html
軟體來源: http://www.azofreeware.com/2008/06/wireshark-100.html
沒有留言:
張貼留言