銘說 | 一次私有協議的流量分析

楓子發表於2021-09-01

什麼是私有協議?

比較著名的網路協議有TCP/IP協議棧中的一些協議,比如IP、TCP、UDP、POP3、SMTP、HTTP等。已知協議都是有RFC規範的,按照規範解碼就可以得到協議。

與之相對的,私有協議是指協議格式不公開的協議。比如我們所知道的QQ、Teamviewer、向日葵,還有一些商用產品的通訊協議,工控類的工控協議,甚至惡意軟體所使用的通訊協議,都可以理解為私有協議。

抽象點來舉例,網路的公開協議就像是我們日常生活中交流所用的語法,只要我們都懂語法,就能透過語言準確傳達我們想表達的資訊。與之相反的,私有協議就相當於創造了一種只有特定目標之間才懂的語法。

現實中還的確發生過這樣的事情,一部名為《波斯語課》的紀實電影就講述了在二戰期間,年輕的比利時猶太人吉爾斯為求活命,假冒波斯人為集中營的軍官科赫教授波斯語,二人之間產生不同尋常的友誼的故事。而吉爾斯所教授的假波斯語其實是他在極度的求生欲中創造出來的。

image.png

《波斯語課》劇照

分析私有協議流量難點

第一個難點是引起協議變化的場景未知。運營商在複雜多變的環境下生存下來,流量傳輸的協議格式必須發生變化,至於如何改變,對於協議分析者是未知的。

第二個難點在於協議格式無明顯規律,不能套用標準格式去分析私有協議。

私有協議分析

遠控程式:Teamviewer15.20.6

抓包工具:Wireshark

作業系統:Win10 64位

網路環境:內部NAT網路

(1)分析DNS資料

先過濾出dns資料,發現剛開始使用時,會向域名請求幾個含有teamviewer的域名,得到一些不同的IP地址響應。

初步判斷請求的域名可能的作用:請求的伺服器用於作為資料中轉或者接收程式的心跳包。

image.png

DNS資料

(2)分析TCP資料

過濾出TCP資料,發現存在與上一步中域名響應的IP(106.14.200.133)進行了資料互動的情況。

進行多次反覆連線抓包後,觀察發現TeamViewer伺服器的網路流量一直是固定在TCP埠5938上執行的自定義協議。同時注意到只要是存在有資料的傳輸的情況下,payload的開頭均為1130,且在teamviewer連線成功前後都出現1130。但是資料內容被編碼,完全無法識別。

image.png

伺服器埠為5938


image.png

TCP的payload部分以1130開頭


(3)分析UDP資料

連線上主機並在通訊的過程中,會夾雜一些UDP的資料,而且從裡面可以發現連線目標主機的資料包。並且在對比了多個UDP資料中還發現了UDP的資料部分必定會出現1724 。

image.png

UDP資料


意外發現

從上面的之後其實我的分析已經告一段落了,單獨從流量層面分析到的有效資訊實在非常有限。分析中發現固定出現的資料如TCP出現的“1130”和UDP出現的“1724”,只能猜想是版本號或者心跳指令之類固定格式的一些資料。

透過之前收集到的一些資料其實已經足以用來證明存在Teamviewer的使用行為,但還是感覺對資料內容知之甚少。直到一段時間後在查資料的時有了意外發現,有人做出了利用Wireshark來對Teamviewer私有協議進行解析的外掛。(而且在他的文章中寫明瞭1130和1724其實是表示兩種不同的命令格式。)


image.png

外掛來源文章


Wireshark載入該lua外掛後,能對Teamviwer私有協議資料進行解析。從資料可以看出來,資料頭部兩個位元組代表了命令格式(他用Magic欄位表示),隨後接的一個位元組表示的是使用的命令名稱,如下圖表示的是路由命令(CMD_ROUTERCMD)。

透過這個外掛,所有的操作一目瞭然了。

image.png

協議解析結果



相關文章