區域網聊天軟體攻防戰
*本文原創作者:追影人,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載
0×00 前言
筆者發現不少甲方公司的辦公網路依靠五花八門的區域網聊天軟體進行辦公通信,而這些軟體中同樣存在各種安全風險。本文就帶大家利用協議分析技術來還原一款區域網聊天軟體的通信協議,並對其進行簡易攻擊。
0×01 協議分析
網路協議是指計算機網路中通信雙方必須共同遵守的一組約定,這些約定包括數據傳輸格式和順序等內容,它最終體現為在網路上傳輸的數據包的格式,只有雙方遵守相關約定才能確保正常通信交流。
人類社會使用自然語言進行溝通交流,計算機則使用網路協議來進行通信,只有使用同一語言或協議才能進行有效溝通交流。兩者有諸多相似性,包含語法、語義、時序三大要素。
1、語法:數據或命令控制信息在傳輸時的形態結構或格式;
2、語義:在約定的格式下,每一塊數據所對應的具體含義,例如在信息中指明控制信息屬於哪種,需要完成什麼任務,需要得到什麼回應等。
3、時序:時間序列,在約定好的語法語義框架下,相關數據需要按照一定的時間順序才能構成連貫完整的通訊數據。
協議也可以說是連入網路的計算機遵循的一定技術規範,包含硬體、軟體和埠等的技術規範。另外,協議還必須遵守以下幾點:
1、 協議中的每個人都充分知曉協議,掌握所有需要完成的步驟;
2、 協議中的每個人都必須同意並遵循它;
3、 協議的每一步必須明確定義,無二義性,不會引起誤解。
為了增強兼容性和迭代性能,協議採用分層定義進行管理,設計者將網路通信過程劃分為多層,每一層都有自己的協議,某一層協議的改變並不影響其他層次的協議。國際標準化組織(ISO)為了規範協議層次的劃分制定了ISO/OSI參考模型,該模型根據網路功能制定出7層網路協議結構,分別為物理層、數據鏈路層、網路層、傳輸層、會話層、表示層和應用層。在日常中,大家更願意使用TCP/IP五層網路模型,該模型與網路數據包更加吻合,容易理解。
協議分析(Protocol analysis)是通過對通訊數據包進行解讀、對比、判定,來確定網路協議的格式、含義等的過程,屬於網路分析的一部分。協議分析大多應用在黑盒場景中,在未知源碼或工作機制的情況下,可通過抓取數據包進行協議分析,以此來確定通訊雙方的具體協議,例如木馬分析、流量檢測時均需要進行協議分析。
紙上得來終覺淺,絕知此事要躬行。接下來我們利用「飛鴿傳書」來進行實踐,看看如何對一款軟體進行協議分析。
0×02 環境準備
Q:
為什麼要構建實驗環境?A:
在生產環境中進行各類測試實驗,是忌諱的。一是不可預知的風險可能會威脅到生產環境的穩定運行;其次便是生產環境中,背景流量比較嘈雜,不利於我們快速定位流量進行協議分析,而在一個較為「純凈」的實驗環境中進行協議分析,可以大大提升分析效率。Q:
如何構建「純凈」的實驗環境?A:
步驟一:構建基礎網路環境。
利用VM虛擬機搭建虛擬網路環境,網路中的機器配置如下
ps:協議分析時,為使信息可對性強,便於對應機器,在配置信息時最好有規律性。
步驟二:下載目標軟體,安裝後配置相關信息。
步驟三:檢查網路通聯性,察看目標軟體是否能夠正常使用。
0×03語法分析
學習一門語言前首先要對基本語法進行了解掌握,協議分析也需要對數據報文的基本格式進行判斷。如果有源碼或者幫助文檔,則比較容易獲取相關格式信息,若沒有這些輔助信息則需要分析者基於經驗和數據進行比對判定。
經過抓取數據包進行數據比對後,發現飛鴿的基礎通信協議為UDP,埠2425,經過多次對比分析後得到格式信息如下圖所示
從數據包可以看出,飛鴿的通訊協議包含6個部分,以冒號(:)分割,附加信息以空格作為分隔符,內容為對應命令的各種參數,例如上圖的附加信息顯示的是發送者的基本信息(MAC地址、IP地址、用戶名、郵箱、分組等)。
0×04 語義與時序分析
在了解協議基本格式後,便可對語義和時序進行分析。同時進行語義和時序的分析工作,是因為時序有助於分析人員確定語義,和自然語言一樣,不同順序的語句所產生的情景有所差異。我們按照飛鴿程序的啟動順序進行操作,產生各功能對應的數據包,進行語義分析。
1、程序啟動
打開wireshark,選定對應的網卡進行截包,雙擊運行「飛鴿傳書」。
程序運行時,會向所在網段以廣播的形式發送兩個報文,內容如下。
這兩個報文命令編號均為1025(0×401),差異在於描述版本號的欄位,前者為1.feige.1,後者為5.1.161212。初步判斷是為了兼容性而採用兩種形式描述。
2、主機探測
在發送完廣播報文後,程序對所在網段進行ARP掃描,確定本網段內的在線主機。
3、報告上線
在利用ARP進行全網探測時,在線主機會進行ARP應答,如下圖所示192.168.1.100主機進行了應答。隨後,飛鴿會向在線主機發送上線報文,如下圖所示。
上線報文的命令編號為3073(0xC01),內容主要包含本機的機器信息和飛鴿賬戶的基本信息。
4、心跳包
通訊軟體為了保持在線狀態,即時上報自身在線信息,通常會採用心跳包的形式來報告自身狀態。如下圖所示,192.168.1.100和192.168.1.200兩台主機相互發送心跳包,中間還夾雜有ARP探測包。
在發送心跳包後,對方會進行回復,同樣報告自身的在線信息,心跳包命令編號為1025(0×401),回復包命令編號為3。
為了進一步觀察心跳包周期,輸入如下圖所示的過濾參數,可以明顯看到周期為60秒(一分鐘)。
經過比對,飛鴿的在線狀態編號所在位置如下圖,含義分別為:10000001(在線)、10000002(忙碌)、10000003(離開)。
5、下線
當用戶關閉飛鴿時,飛鴿會通知其他在線用戶自己要下線。該命令編號為2。
6、抖動窗口
聊天軟體為了提醒對方注意查看消息,通常會有窗口抖動功能,其協議如下圖所示,命令編號229(0xE5)。
7、發送消息
進行文本傳輸時,接收方會反饋回執,如下圖所示。192.168.1.200發出「hello,i am user200」的文本消息,命令編號288(0×120),該條消息的數據包編號為163932。192.168.1.100機器在接收到該消息時,反饋回執,命令編號33(0×21),該回執的附加信息包含著被回執信息的數據包編號,即163932。
8、數據包編號認證
從飛鴿的協議來看,並沒有嚴格的認證過程,且所有信息均為明文,但為了對傳輸信息進行基本的管理,飛鴿程序啟動後,會初始化一個數據包編號,每發送一個消息報文,該編號均會加1。且在收到編號重複的報文時,將會自動忽略,不做任何回應。
0×05 偽造與篡改
在基本確認協議後,我們可以發現,飛鴿的協議存在諸多弱點,很容易被攻擊。本小節就簡單演示幾種攻擊場景。
Attack One:偽造
Python由於其語法簡易,功能強大而頗受喜歡,在本次攻擊場景中我們選用該語言進行。為確保消息數據包編號的唯一性,我們採用時間戳來進行編號。
1、偽造上線
關閉192.168.1.200機器上的飛鴿程序,使用如下py腳本構建user200用戶的上線包發送至192.168.1.100(該機器運行有飛鴿,用戶名user100)。
import socketimport timeport = 2425host = "192.168.1.100"s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.bind(("", 2425))index = str(int(time.time()))
strCheatOnline= "5.1.161212:"+index+":Administrator:PC200:1025:user200x00WorkGroup200x0000-01-00-00-00-02x00x0020000x00user200@feige.comx00x0046x00192.168.1.200x00x0031x0010000001x00x00PC200"s.sendto(strCheatOnline,(host,port))
註:附加消息中的間隔號並非空格,而是空字元(0值),所以用「 ×00」來填充。
發送後,可以看到user100的飛鴿賬戶有上線提示。
User200用戶上線後,user100用戶會周期性發送心跳包。從下圖可以看出心跳包周期為60s(和上一節分析的心跳包一致),但是由於我們是偽造的上線包,192.168.1.200機器上並沒有飛鴿程序運行,所以無法接收和回復該心跳包,所以會看到機器會自動回饋ICMP不可達的報文。經過10分鐘,即發送10個心跳包且不可達時,user100會將user200從上線列表中移除。
2、偽造下線
先正常開啟兩邊的飛鴿程序,兩邊都會周期性發送心跳包,我們利用py腳本向user100發送user200的下線包,包內容如下:
strOffline = "5.1.161212:145692:Administrator:PC200:2:user200"
發送後可以觀察到,user100的好友列表中的user200會下線,user100停止向user200發送心跳包;但是user200的飛鴿依然在運行,周期發送心跳包,等下次心跳包發送後,user100的好友列表中會重新出現user200上線。如何徹底下線?我們可以分別模擬雙方的下線包,發送給對方,這樣便可以在雙發的好友列表中移除對方,避免心跳包重新激活上線。
3、偽造發信
根據協議格式,我們可以構造任意的消息報文進行發送,包內容如下:
strHello = "5.1.161212:145690:Administrator:PC200:288:hello"
該報文發送後,對方會收到一條消息,內容為「hello」。
Attack Two:MITM(Man-in-the-MiddleAttack)
這裡我們利用筆者之前文章《WinPcap開發(三):欺騙與攻擊》提到過的arpspoof進行中間人劫持,在實驗網路中加入中間人機器(192.168.1.150)。(ps:arpspoof只能對TCP協議進行內容替換,所以在實驗前對程序進行修改以適應所有協議)
1、消息篡改
設置arpspoof的內容替換規則如下:
啟動arpspoof程序,命令如下:
arpspoof.exe 192.168.1.100 192.168.1.200 2425 0 1 /r job.txt
此時我們用user200發送消息給user100:
而在user100端看到的內容如下:
2、文件傳輸篡改
在user200端設置共享文件如下:
重新設置arpspoof的替換規則:
啟動程序,在user100端進行該共享文件的下載,下載後的內容如下:
0×06 安全建議
從上面的實驗可以看出,類似於飛鴿這樣的協議存在著諸多脆弱性,很容易收到攻擊,這也為我們使用該類軟體敲響警鐘。
1、加密
協議未加密導致數據均以明文形式傳送,中間人在獲取足夠的數據後,對比明文會很快還原出協議格式,如果使用加密協議,則會一定程度提高協議分析的成本。
2、認證
整個通訊網路屬於分布式網路,無中心伺服器節點,具有較高魯棒性,即不會因伺服器的癱瘓而導致全網的中斷。但是這種去中心化的網路存在身份認證的問題,即兩個節點相互證明彼此身份的合法性。而這也給消息的合法性驗證帶來困難,而較易受到劫持篡改或偽造。
0×07 寫在最後
本文簡要介紹網路協議分析的基本知識,以飛鴿聊天軟體為例,進一步分析其通信協議,並進行針對性攻擊。而在實際網路應用中,大部分應用所使用的協議均比較複雜,具有加解密、消息認證等安全機制,如果想進一步學習相關分析知識,可自己結合資料來對複雜的商業級產品進行協議分析。
*本文原創作者:追影人,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載
TAG:FreeBuf |
※如何在區域網內通過組策略安裝軟體
※淺談軟體供應鏈攻擊與內網防禦
※天津市軟體和信息技術服務業形成三大聚焦區
※聊天防泄密軟體哪家好
※美軍軟體可感知全球戰場指揮前沿部隊
※用區域網共享管理軟體實現區域網文件共享設置
※芯馳半導體項目落戶南京江北新區軟體園
※公司數據防泄漏軟體哪個好?區域網監控軟體有哪些
※雲安幣區塊鏈軟體
※從新型勒索軟體攻擊看區塊鏈安全技術的發展
※軟體定義廣域網有坑 五大安全誤區必知
※頭條:亞特蘭大惡意軟體攻擊凍結城市貿易
※信號:安防龍頭海康威視發布網路安全白皮書,競爭從硬體到軟體升級
※區塊鏈煽動蝴蝶翅膀 東華軟體設立研究院搶灘
※盤點全球社交軟體
※聯想的物聯網和AR混合軟體將引用區塊鏈技術
※美陸軍新軟體可感知全球多個戰場指揮前沿部隊
※區塊鏈板塊集體拉升 科藍軟體封板
※美軍新兵速成大法:玩著遊戲上戰場,《武裝突襲》當訓練軟體
※軟體網一周頭條盤點