前幾天偵查NuGet Server無法上傳問題時,我用了個有趣的小技巧觀察nuget.exe程式與Server間的網路傳輸內容。

一般來說,提到監聽網路傳輸,大多人想到的是Microsoft Network MonitorWireshark之類的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

Post a comment