如何緩解易受攻擊的wireshark?
攻擊wireshark
每隔一段時間就會有訊息稱wireshark易受攻擊,易受利用或者易於破解,意思就是人們有方法在pcap和pcapng檔案中構造幀訊息或資料包來造成wireshark崩潰並且執行惡意程式碼。今天我們來看看具體情況以及我們可以採取哪些措施。
我幾乎每天都在用wireshark,不僅是工作日,週末也在用,已經用了15年了。從技術上來講,那會兒它還叫Ethereal(網路除錯和資料包嗅探軟體),有時候我以 ofollow,noindex">packetyzer 的形式來執行,這種形式人們早已忘記,我之所以還用它是因為它在Windows平臺上使用還不錯,介面簡潔清晰。這款軟體可以實時抓取資料包中的流量並進行分析,儘管有時候顯示的內容並不是完全正確,但它依然是一款流量分析神器。不過,要提醒大家的是,解析和診斷所有這些協議是一項非常艱鉅複雜的任務。而且據我所知,任何協議分析器都沒有wireshark出色,很多其他工具簡直爛的不行。
蓄意破壞wireshark
現在,當我們談到蓄意破壞wireshark時,我們主要是想找到wireshark崩潰的原因並且編寫一份漏洞報告。這個過程本身很簡單,但是可能需要一些時間。我通常都是使用editcap工具將崩潰的pcap檔案拆分成更小的檔案,要麼通過 -c引數來指定每個檔案中資料包的編號,要麼通過-A和-B引數來指定檔案的起始時間戳。然後不斷重複,直到獲得可能的最小檔案來複現崩潰場景(通常一個數據包就足夠了)。有一次我發現一個特定的資料包會導致“顏色編碼”程式碼崩潰,我的一個朋友讓我不要馬上就開始寫漏洞報告,他想看看他是不是能夠先利用這個漏洞。不過一番測試之後,發現這次崩潰還不足以利用,不過好在,他發現了另一種攻擊wireshark的方式。向wireshark提供一些內容造成反應異常,這種異常讓你可以執行你的程式碼。
Wireshark作為攻擊介面的主要問題是,當你去審計一行一行程式碼和功能時,它會有很多問題。
以下來自傑拉爾德舉辦的2018年Sharkfest US Wireshark會議的幻燈片,讓您瞭解它有多複雜:
Sharkfest 2018美國主題演講( 點選此處觀看 )
重點是:wireshark由1400位作者共同編寫完成,2400個協議,總共至少250萬行程式碼,具體多少行取決於你的計算方式。正如有人在Twitter上所說,第一個想到的跟這個類似的開源專案是Linux核心開發。
攻擊面
正如我們大家都知道的那樣,並不是每個編寫程式碼的人都會像Dan J. Bernstein一樣在安全方面做得一絲不苟。大多數開發人員需要完成任務,因此程式碼編寫得很匆忙,而且他們中的許多人甚至都不關心安全性。
為什麼有人會攻擊我的資料包解析器?我剛剛花了大把的時間寫了一堆程式碼來分析我們的協議正在做什麼,所以,我不會花太多時間來保證它的安全,太累了。只要它與我們的pcaps檔案一起執行就不會有問題。
如果你問所有1400位作者,絕大部分人都會這樣回答你。甚至還有一些程式碼是你不知道的,因為有很多公司為其專有協議進行內部解析器開發,並且從來不釋出程式碼。這並不意味著它無法被攻擊並被用作攻擊向量,但是,當然了,相對於那些程式碼開源的解析器來說,攻擊起來相對沒有那麼容易。
有趣的事實: 至少有一個專有供應商協議的解析器程式碼塊,它錯誤的將其作為公共Wireshark程式碼庫。當有人問我是否可以將協議規範在TraceWrangler中實現時,我找到了其中一個,但是卻被告知
對不起 – 它不應該首先出現在公共Wireshark構建中……
Wireshark和攻擊面的主要問題非常龐大。你無法修復所有解析器中的所有錯誤,因為人們沒有時間去這麼做。因此,有些解析器的程式碼就再也沒有人去維護了。而且發現哪些程式碼沒人維護也不是那麼容易。Wireshark核心開發人員盡最大努力解決所有問題,並且他們夜以繼日的使用大量有效且損壞的pcap檔案對程式碼進行模糊測試。但是仍然沒有發現所有問題。一個安全研究員(不管是善意還是惡意)想要找到一種方法來攻擊程式碼庫,他總是會花大量的時間和精力來研究。
評估風險
現在我們已經認同Wireshark提供了龐大的攻擊面。那麼讓我們看看我們能做些什麼。在風險評估方面,我們需要考慮兩個主要方面:
1.概率 – 利用攻擊向量來攻擊目標的概率。
2.影響 – 如果攻擊發生,會造成何種後果。
這可能是風險評估的簡化檢視,但對於這篇文章,我會盡量不去複雜化。
如果你感興趣,可以檢視 這篇文章 ,講的非常詳細。
直言不諱的說,我們需要找出在Wireshark中開啟惡意pcap檔案的可能性,以及如果攻擊者的程式碼得以執行導致了崩潰,可能會發生最糟糕的事情是什麼。可能你以前從未編寫過漏洞利用程式碼,我想告訴你,程式碼並不總是能夠完美執行。實際上,很多漏洞利用程式碼在大多數情況下都不奏效。真正非常好的程式碼是那些幾乎每次都能成功執行的,不過這種程式碼非常罕見(例如Eternal Blue就是一個非常成功的例子)。談談最壞的情況–如果你還沒有閱讀它,請閱讀這篇 關於NotPetya的文章 ,你就會感嘆道 “我去,這**也太悲催了吧!”
據稱一臺伺服器執行一個小的(可能還是不相關的)會計應用程式導致該公司全球企業IT領域的徹底失敗。
那麼,在wireshark中開啟惡意pcap檔案的可能性有多大呢?這很大程度上取決於你的工作:
1.如果你正在為你自己的應用程式或一個眾所周知的應用程式排除TCP故障,那麼在pcap中突然出現一些惡意資料包的可能性很小,假設你只過濾了捕獲期間所需的流量。
2.如果你在內部網路上進行批量捕獲(“捕獲所有內容,稍後篩選”),你就更容易發現惡意檔案。但是要發現它,需要確保惡意檔案已經存在於你正在捕獲的網路上,因此風險再次降低。為什麼?因為如果攻擊者已經可以訪問你的網路並且注入惡意檔案,那麼他可能會做更容易更隱蔽的事情,而不是注入惡意檔案,隨時都有可能被發現。像其他人一樣,攻擊者也是懶惰的,所以很少有人做額外的事情,所以Wireshark被利用是所有問題中最不用擔心的問題。根據我的經驗,幾乎不會有人在網路中捕獲資料包,除非他們需要修復問題(這是一種被動反應性而非主動性)。如果他們這樣做,他們的主動捕獲解決方案通常是商業裝置,而不是Wireshark。不過,他們可能會在後臺執行tshark。
3.正常檔案,惡意檔案,畸形檔案:如果你在網際網路上行鏈路上執行捕獲,或者其他一些你根本不知道什麼樣的流量到達的網路連結時,你應該更加細心。問題是你無法控制資料包的來源,因此可能有人偷偷注入惡意資料包。而且,只要一個惡意資料包就可能足以成功攻擊Wireshark並且對你的計算機造成損壞。
4.惡意軟體分析–這可能是風險最高的兩個中的一個。因為一些惡意軟體作者可能會將惡意資料包新增到他的命令和控制通訊中以擾亂Wireshark,要麼延遲你的逆向進度,要麼甚至直接進行破解。在這種情況下,你應該格外小心。
5.對正在進行的攻擊進行取證(大家知道,有一種攻擊人們稱之為“APT”,這種攻擊,在絕大多數例項中都不會使用如此簡單的攻擊向量)–如果你正在調查網路漏洞,你不確定攻擊者是否仍然能夠訪問你的網路,應該假設他們可以將惡意資料包注入捕獲的檔案中。如此一來,我可以在沒有任何網路連線的工作站上進行分析資料包,然後重新映像。我考慮使用air-gap(空氣隙)來劃定界限來防禦阻擋一些東西,如聽不見的聲音,硬碟噪音,鍵盤嗅探(我不使用無線鍵盤),以及所有其他高階實驗室級別的“我仍然可以通過空氣隙來交流”之類的東西。
現在,對於可能發生的最壞的事情–我可以肯定的說,如果你在域控制器上執行具有管理員許可權的Wireshark來開啟一個帶有可疑來源的pcap檔案,這是以最不負責任的態度,幹了所有你能幹的事情。所以不要這樣做。除了能產生一些小的影響之外,成功的Wireshark攻擊還能夠對你的PC進行一些破壞,例如加密一些本地檔案等。當然,攻擊者也有可能進行提權,這樣危害可就大了。
場景與對策
警告大型企業客戶Wireshark的攻擊向量可能會導致一些問題,因為它們通常採取的應對方案是完全禁止使用Wireshark,在這一點上,我有過慘痛的教訓。想象一下在一個SOC分析師的環境下,在調查過程中不允許使用wireshark,這將讓他們的工作變得更加艱難。值得慶幸的是,這種情況已經得以解決,目前現在還有一點問題。
現在讓我們來看看你可以採取的四大行動來降低wireshark被破解的風險:
#4隔離分析環境
如果你正在處理很有可能包含惡意內容(惡意軟體樣本,C&C流量,已遭破壞的協議)的pcap檔案,你需要在受控網路環境中的物理工作站上執行Wireshark,這種環境無法逃逸,或者是一個根本沒有網路的環境。這種方式處理資料包通常很痛苦,因為當你遇到問題時不能上網查詢解決方法,但話又說回來,這是最初的基本原則,安全性高,必然會帶來不方便。在大多數情況下,我都會有兩個或更多工作站環境彼此相鄰,一個是air-gap(或至少在一個孤立的惡意軟體實驗室網路上),並且至少有一個上網來進行搜尋和查詢。對於取證調查,在每個案例後重塑分析工作站。
#3在VM中執行wireshark
這是#4的一個更方便的版本,因為你在同一硬體上執行隔離環境和正常環境。這種工作方式也是很好的,假如沒有VM逃逸攻擊向量(但是這種情況非常少見,甚至不太可能被連結到Wireshark漏洞利用中),但無論何時你需要分析一些東西時它都需要你啟動虛擬機器。儘管如此,假如你的Wireshark是 – 或者甚至可能是 – 一個攻擊目標,這是減輕大部分風險的最常見方式。
#2禁用不相關的協議解析器
可能有人並不知道這一點,其實你可以在Wireshark中禁用協議解析器。比如,如果你知道你只是通過IPv4 / IPv6和乙太網檢視TCP和UDP協議,則可以禁用其他所有內容,我在 Pcap檔案拆分和合並的部落格 中演示瞭如何操作,我在其中建立了一個額外的tshark配置檔案以便更快的解析(更安全更快):
通過禁用所有其他協議,你可以大大減少攻擊面。你可以為其建立配置檔案並輕鬆地來回切換。即使你正在啟用更復雜但非常常見的協議(如HTTP和HTTPS),他們的解析器遭受攻擊的可能性遠遠低於一些人們從未聽說過的模糊協議(wireshark有對應的解析器)。如果你看一下最近提交的關於Wireshark的CVE,你會立刻發現他們的某些協議,使用者甚至需要解碼,比如CVE-2018-16056,CVE-2018-16057和CVE-2018-16058。其中WiFi的radiotap頭利用指令碼可能是問題最大的(使用WiFi的人,請不要有想法,因為大多數使用者嗅探的都是有線資料,而不是無線)。我認為人們在wireshark中看到的資料98%以上都是乙太網幀,與之相比,藍芽資料是非常罕見的。有意思的是,思科甚至沒有提到禁用協議解析器作為對策,這可能是因為人們發現的漏洞都是來自那些特定的解析器的使用者,所以對於那些你不需要的協議,你可能不會想到去禁用它們。
#1非特權使用者執行wireshark
在非特權使用者下,你是可以執行惡意檔案的,即使在這個過程中可能需要進行提權。但每當我看到有人以root或管理員身份執行Wireshark時,我真的很頭疼。絕大多數人都是以root身份執行的,因為如果不這麼做的話,他們無法訪問他們的網絡卡來捕獲資料,這表明他們的Wireshark捕獲許可權設定得不對。如何進行正確設定,請檢視 這篇文章 。如果你們是以root或管理員身份執行wireshark的話,下面這個圖片送給你,自己體會:
總結
我幹資料包捕獲工作已經超過了15年了,在這15年中,我從未遇到過包含任何旨在攻擊Wireshark自身的檔案。我看到過Wireshark崩潰了無數次,我都數不清楚了,特別是糟糕的1.0版本,但據我所知,這些崩潰都不是由攻擊資料包引起的。我甚至無法通過數十億個資料包來判斷我在那個時間到底載入了多少TB的資料。當然,我可能遭到攻擊而沒有注意到,但我不這麼認為。每次我的計算機執行出現異常時,我就會以一種攻擊者無法阻止的方式來徹底調查它的通訊模式。到目前為止,我從未發現任何被入侵現象,只有損壞的驅動程式或其他正常軟體的行為異常。當然,Wireshark的崩潰也可能是因為本身的問題。
最後,我並不是說在載入Pcap檔案時沒有能夠成功攻擊Wireshark的東西。但有可能普通的Wireshark使用者(開發人員,網路工程師,故障排除人員)永遠不會遇到這樣的檔案。無論如何,數字取證/事件響應專業人員應該謹慎行事,在任何時候看到的任何證據都要格外小心。