側錄.NET程式網路傳輸內容
| | 1 | | ![]() |
前幾天偵查NuGet Server無法上傳問題時,我用了個有趣的小技巧觀察nuget.exe程式與Server間的網路傳輸內容。
一般來說,提到監聽網路傳輸,大多人想到的是Microsoft Network Monitor、Wireshark之類的Sniffer工具,但.NET有個網路追蹤(Network Tracing)功能,就鮮為人知了。
MSDN文章上對於網路追蹤的各參數解說得很清楚,而且,即便不是自己寫的.NET程式,只要加上*.exe.config就可開啟追蹤記錄功能。於是在nuget.exe的茶包實例中,就順道演練了這個特殊偵錯技巧,做法是新增一個nuget.exe.config放在nuget.exe所在目錄:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<sources>
<source name="System.Net">
<listeners>
<add name="MyNetTrace"/>
</listeners>
</source>
<source name="System.Net.HttpListener">
<listeners>
<add name="MyNetTrace"/>
</listeners>
</source>
<source name="System.Net.Sockets">
<listeners>
<add name="MyNetTrace"/>
</listeners>
</source>
<source name="System.Net.Cache">
<listeners>
<add name="MyNetTrace"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add name="MyNetTrace"
type="System.Diagnostics.TextWriterTraceListener"
initializeData ="D:\SocketEx.log" />
</sharedListeners>
<switches>
<add name="System.Net" value="Verbose" />
<add name="System.Net.Sockets" value="Information" />
<add name="System.Net.Cache" value="Information" />
<add name="System.Net.HttpListener" value="Information" />
</switches>
</system.diagnostics>
</configuration>
加入config檔後,nuget.exe執行時會將網路傳輸過程的記錄資訊(甚至包含傳輸內容)寫入D:\SocketEx.log檔案。重新執行nuget.exe push將程式包上傳至NuGet Server 1.7版,在SocketEx.log中可以看到詳盡的傳送歷程,包含了nuget.exe利用HTTP PUT Request將程式包內容(連.nupkg的二進位內容也被一併記錄下來)傳送到網站。
上傳後Web Server回應HTTP Status 201, Created。(新增資料後傳回HTTP 201符合Restful API風格) 由來往封包判讀一切正常,但Server端就是沒有寫入程式包,ProcMon也抓不到任何嘗試寫入.nupkg的行為,直到換成NuGet Server 1.9版後問題才消失。
展示完畢,順便也在此叮嚀,若程式必須透過網路傳送敏感資訊,請務必SSL或加密演算法加上保護。除了.NET的網路追蹤功能,有心人士還有很多手段可以偷取傳輸內容(也不限定.NET程式,任何語言的程式都有風險)。藉由加密,才能在被竊聽時,提高破解難度,提供最基本的資安防護。
Comments
# by 貓咪圓滾滾
請黑大參考 Flame: Massive cyber-attack discovered, researchers say http://www.bbc.co.uk/news/technology-18238326 Web War II: What a future cyberwar will look like http://www.bbc.co.uk/news/magazine-17868789