標籤:

數字取證調查中如何獲取網路連接的時間戳?

在數字取證調查過程中檢查Windows系統的網路連接時間,是一種查找異常可疑進程的重要做法。在本文中,我會介紹如何提取每次網路連接的時間戳。

尋找時間戳的重要意義

在我看來,幾乎所有的惡意軟體都具有某種利用網路才能實施的需求,比如黑客必須通過網路向惡意軟體發布命令或控制遠程伺服器,以進行攻擊或在受害者的系統上創建後門。當然,對於非自動化攻擊也是如此,在這些攻擊中,攻擊者會實時的手動控制惡意攻擊進程。

美國系統網路安全協會(SANS Institute)的專家們最近就列出了調查取證人員在取證時應該查看的各種可疑的網路活動:

一些可疑的網路活動

更詳細的介紹請閱讀美國國家標準與技術研究院(National Institute of Standards and Technology,NIST)的《將取證技術融入到事件響應中的指南》以及Corey Harrell的《事件響應進程中的證據提取方法》。

在這些標準方法中,你可以看到尋找時間戳的重要性。只要找到了時間戳就可以了解你要取證的設備何時建立了連接、連接了什麼等,這樣與該時間點相關的信息都能順藤摸瓜的找到。通過將網路連接的相關指標關聯起來,就可以為全面綜合分析攻擊者的活動和簡化事件響應流程創建更好的取證環境。

在取證時,我們要想先掌握一些得手的分析取證工具,以便你調查一些不穩定的易失性數據,無論是通過內存取證分析工具還是實時響應工具。事實上,所有的工具都包括某種與網路連接證據收集相關功能。

幾乎所有可用的工具都會生成類似於Windows的netstat.exe的輸出內容,其中就包括有關每個連接的信息,如本地IP地址和埠,遠程IP地址和埠,狀態和擁有進程ID。

帶有-abno標誌的netstat.exe輸出截圖

現有的網路連接提取工具

在深入介紹取證方法之前,我想先介紹一下現有工具及其功能。

實時響應類的工具

無論是基於代理的(osquery和GRR)工具,還是無代理的(Kansa)工具,此類工具都有能力收集網路連接證據,它們通常會通過解析內置於netstat.exe實用程序中的Windows輸出內容,或利用Windows API函數和結構。比如,osquery支持像SQL語句一樣查詢系統的各項指標,可以用於OSX和Linux操作系統。它使得底層操作系統分析和監控性能更加直觀。

不過,上述工具目前都沒有提取連接的時間戳的功能。

內存取證類的工具

由於內存取證都是關於易失性數據的,因此像Volatility和Rekall這樣的框架也會將網路相關證據作為其插件列表的一部分。Rekall框架是一個完全開放的工具集合,旨在向人們介紹技術以及從RAM中進行數字取證的複雜度,並提供一個平台去對這一領域進行進一步更為深入的研究。Volatility是一款非常強大的內存取證工具,它是由來自全世界的數百位知名安全專家合作開發的一套工具, 可以用於windows,linux,mac osx,android等系統內存取證。

雖然上述工具都是使用內存轉儲或內核驅動程序來提取數據,但是數據是從netstat.exe使用的相同操作系統資源中檢索的,如Michael的(@ iMHLv2)博客中對Volatility的netscan插件所做的介紹。

Volatility的netscan插件可以輸出與netstat相同的信息,但Volatility的優勢在於,它可以綁定套接字或已建立連接的創建時間戳。

Volatility的網路掃描輸出樣本

當我第一次運行與網路相關的Volatility插件時,我發現開放連接的時間戳可能是實時響應的一個很好的證據。

所以我的假設是,由於Volatility會從內核池中提取時間戳,所以從用戶系統(USER-LAND)獲取信息是不可能的,因此我就沒有往下進一步研究Volatility。

另外,我認為,如果netstat和所有其他用戶模式工具沒有顯示時間戳,則可能是不可能的。原來我完全錯了!可以從用戶模式提取網路連接時間戳。

在用戶模式下提取網路連接時間戳

其實該方法還我要求我的開發團隊將取證工具中的netstat輸出修改為易於使用的輸出時發現的。在處理netstat輸出的解析時,大多數工具開發人員要麼為netstat輸出流編寫他們自己的解析器(比如Kansa),要麼調用Windows API(比如psutils)。

而我的一位開發團隊負責人(@Liad Gareh)則花了很短的時間就得出以下結論:使用Windows API提取網路連接時,還可以獲取每個創建連接的時間戳。

例如,獲得所有TCP網路連接的時間戳的步驟如下:

1.GetExtendedTcpTable函數檢索包含可用於應用程序的TCP端點列表(IP和埠組合)的表;

取自MSDN的GetExtendedTcpTable

2.TCP_TABLE_CLASS枚舉參數定義了要檢索的TCP表結構的類型;

3.將TCP_TABLE_OWNER_MODULE_ALL作為GetExtendedTcpTable的表類參數進行檢索將生成一個MIB_TCPTABLE_OWNER_MODULE類型的TCP表。

4.結果TCP表中的每個條目(行)都是MIB_TCPROW_OWNER_MODULE類型,根據MSDN的介紹,這些條目具有「包含描述IPv4 TCP連接的信息,其中包含有所有權數據、IPv4地址、TCP連接使用的埠,以及與連接相關的特定進程ID (PID)」的特點。

取自MSDN的MIB_TCPROW_OWNER_MODULE

5.請你仔細觀察上面的結構和新添加的liCreateTimestamp,這會被記錄為一個SYSTEMTIME結構,該結構會指示創建此TCP鏈接的上下文綁定操作何時發生。

含有時間戳的Get-NetworkConnection

起初,我非常懷疑為什麼沒有取證工具對這些高價值的信息進行分析?為什麼netstat,tcpvcon,psutils都沒有包含這個分析?

帶著這些疑問我檢查了GitHub中具有上述結構的所有代碼,以查看是否有任何工具使用此證據。結果,我發現了許多取證工具實際上都使用了API和相關結構,但我卻無法找到提取時間戳結構的工具。雖然最近,我發現了由Lee Christensen(@tifkin_)編寫的PowerShell代碼,名為Get-NetworkConnection,它就使用了上面提到的Windows API調用,來提取當前TCP和UDP連接,但卻沒有時間戳的證據。

於是我聯繫了Lee,經過他的同意,我可以使用他已經開發的代碼。為了提取我正在尋找的時間戳,我對Get-NetworkConnection進行了簡單的修改,以便進行以下操作:

1.提取CreateTimestamp的值;

2.在輸出內容中包含時間戳;

添加了時間戳的Get-NetworkConnection的運行示例

在對修改後的Get-NetworkConnection運行過程進行驗證後,我可以確保它具有實際的提取時間戳的能力,使用這個簡單的Windows API調用來提取TCP和UDP連接的時間戳,然後在進行以下思考:

1.這真的是一個有價值的取證證據嗎?

2.這是否可以添加到用於取證的時間表(Timeline)中?

為了解決這些疑問,我親自進行了測試。首先我創造了一些類似的取證場景,並試圖查看我擁有的新證據是否可以派上用場。

將提取的時間戳證據納入時間表

我使用了兩種不同的方案測試了連接時間戳的值。在這兩種情況下,我都模擬餓是攻擊者或惡意軟體。我的測試證明,加了時間戳的Get-NetworkConnection可以幫助我們進行高效的取證分析。

方案一:惡意進程

一般情況下,惡意進程會在端點上生成一個惡意進程,並立即打開連接。這種情況可以採取以下兩種形式之一:

1.將後門安裝在系統上並等待攻擊者進行連接;

2.當惡意軟體出現在系統上時,立即建立與C&C的連接;

就我的測試目的而言,我選擇了使用netcat模擬後門示例的選項1,來執行我的取證收集工具並將取證日誌記錄到時間表中。

Netcat監聽器在時間表上的連接以及流程執行證據

我在以前提到過,CreateTimestamp欄位是在套接字被綁定後立即填充的,因此在這種情況下時間戳的證據並沒有帶來很大的價值,其原因是因為在連接的時間點附近創建了其他的證據,例如進程執行證據(Windows事件ID 4688,預取文件,UserAssist等),但是這些證據並不總是有用的。無論如何,所提取的連接時間戳給取證帶來了很大的幫助。

方案二:注入代碼

接下來,我測試了一個惡意代碼注入的場景,其中惡意軟體或攻擊者將代碼注入已運行的進程,然後才啟動連接。例如,如果我檢查與PID 1856的進程相關的這個可疑連接,就可以看到它已通過TCP埠1234建立了與10.0.2.15的輸出連接。

PID 1856屬於explorer.exe:

到目前為止,我可以提取的唯一時間戳只能是以下兩個中的一個:

1.如果進程還在運行,就可以提取該進程的啟動時間;

2.任何包含時間戳的執行證據;

由於缺乏連接時間戳的證據,所以取證的關鍵一步就是得到與創建或執行explorer.exe相關的時間戳。如果是對explorer.exe創建之前和之後幾分鐘的信息進行提取,則得到的有價值的信息就非常少,比如只能得到用戶登錄後的常規引導過程。

在用戶(「boss」)登錄後執行explorer.exe

在我提取新證據後,再把它添加到用於取證的時間表中,就可以揭示explorer.exe的連接時間戳。以下就是連接時間框架(timeframe )的時間表:

explorer.exe的連接時間戳的TCP連接顯示出的其他惡意活動

你可以看到在連接被創建之前,Injector.exe進程已經執行。這可能就是explorer.exe注入惡意代碼的時間點。

儘管我改造的這個工具可能有用,但還是有一些注意事項:

1.由於這些信息是使用Windows API檢索的,因此rootkit(一種特殊的惡意軟體)可以通過掛鉤相關函數來隱藏連接;

2.由於網路連接信息不穩定,因此,在你收集信息時,連接可能會被關閉;

3.測試重點針對Windows 10,由於我在Windows 7中提取時間戳時遇到了一些非確定性結果(在某些情況下,連接時間戳為1/1/1601 2:00:00 AM),所以需要通過進一步的研究來分析這種行為;

總結

關於提取時間戳對取證分析的幫助有多大,目前還不確定,否則怎麼會有那麼多取證工具沒有對著部分證據進行提取,詳細的分析你可以讀Harlan Carvey的博客。

但我覺得提取網路連接的時間戳確實非常有幫助,絕對對得起你的付出。以上測試的情景表明,這些證據可以在調查取證過程中起到關鍵作用,以幫助調查人員更好地了解他們的分析方向。比如你計劃將調查範圍擴大時,就可以使用網路連接時間戳,並將其用與網路防火牆或IDS日誌中的數據相關聯。

目前許多有關事件響應(IR)工具已經在使用Windows API調用來獲取所有網路連接,但它們不會提取每個連接的時間戳。只要少將修改,就可以將時間戳證據包含在這些工具的分析結果中。

我的GitHub存儲庫提供了包含時間戳提取的增強版Get-NetworkConnection,你可以點此參考。

本文翻譯自:blog.illusivenetworks.com ,如若轉載,請註明原文地址: 4hou.com/technology/107 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

雲高防產品模塊之線路質量監控解析
不想讓智能手機泄露定位信息?沒門
HTTPs入門, 圖解SSL從回車到握手
滲透測試中的Bypass技巧(一)
谷歌為Play Store內所有APP買單,發現漏洞就送1000美元

TAG:信息安全 |