Sebek

Sebek是一個數據捕獲工具。這種捕獲工具是不容易被攻擊者發現的。所有數據捕獲工具的目的都是用捕獲的數據準確的給我們重現蜜罐上的事件。

基本介紹

  • 軟體名稱:Sebek 
  • 軟體平台:Sebek蜜罐 
  • 軟體語言:數據捕獲工具 
  • 軟體版本:2 
簡介,結構,客戶端數據捕獲,客戶端模組隱藏,

簡介

我們需要通過這些信息來確定入侵者是什麼時候攻破系統的,他們是怎么做的,以及在獲得訪問許可權後又做了什麼。這些信息還可能告訴我們誰是入侵者,他們的動機是什麼,以及他們和誰一起工作。為了確定入侵者獲得訪問許可權後所作的事情,我們需要捕獲的數據能夠提供入侵者的擊鍵記錄和攻擊的影響。
Sebek現在還沒有對TCP會話重組,只是用來對付加密。相比以前的黑盒子技術,Sebek使得對蜜罐內部工作的監視變得透明。比如入侵者安裝了一個惡意軟體,然後退出,現在我們還可以繼續追蹤惡意程式的本地行為,即使它沒有訪問網路。

結構

Sebek有兩個組成部分:客戶端和服務端。客戶端從蜜罐捕獲數據並且輸出到網路讓服務端收集(參考圖1所示)。服務端有兩種方式收集數據:第一種是直接從網路活動的數據包捕獲,第二種是從tcpdump格式保存的數據包檔案。當數據收集後既可以上傳到相關資料庫,也可以馬上顯示擊鍵記錄。Sebek使用無連線、不可靠的UDP協定進行通信。
客戶端完全在蜜罐的核心空間,根據Linux版本的情況以可載入核心模組(LKM)的方式執行。客戶端可以記錄用戶通過read系統調用的所有數據,運行Sebek的蜜罐以難以檢測的方式把這些數據輸出到服務端所在的網路,然後服務端收集所有蜜罐傳送的數據。因為這些數據都有一個統一的標準格式,所以服務端可以收集各種不同作業系統蜜罐的數據。

客戶端數據捕獲

數據捕獲是由核心模組來完成的,使用這個模組獲得蜜罐核心空間的訪問,從而捕獲所有read的數據。Sebek替換系統調用表的read函式來實現這個功能,這個替換的新函式只是簡單的調用老read函式,並且把內容拷貝到一個數據包快取,然後加上一個頭,再把這個數據包傳送到服務端。替換原來的函式就是改變系統調用表的函式指針。
當用戶空間的進程調用標準的read函式的時候會產生一個系統調用,這個調用映射到系統調用表數組的索引偏移。因為Sebek把read索引的函式指針修改指向到它自己的函式實現,所以當執行到核心的read實現時就會執行Sebek修改後的read調用,Sebek通過這個系統調用看到所有訪問的數據。可以用同樣的技術來修改我們想要監視的任意系統調用。
數據在使用的時候一般都是解密的。比如有動作發生的時候,SSH會話的擊鍵顯示在shell上的數據肯定不是加密的。這個動作一般會產生一個系統調用,在核心空間收集數據,我們能截獲這個系統調用訪問進程解密後但還沒有處理的數據,通過這種方法就可以在加密環境捕獲擊鍵、檔案傳輸、Burneye的口令等。

客戶端模組隱藏

為了使Sebek模組更加隱蔽,使用了一些如Adore等基於LKM的rootkit的技術。由於Sebek完全駐留在核心空間中,那么我們可以通過安裝第二個cleaner模組來隱藏Sebek模組,這個模組把Sebek從安裝模組鍊表中刪除記錄。雖然這是一種不錯的隱藏模組的技術,但是在第61期的phrack雜誌上有一篇文章描述了通過查看所有出現的關鍵模組結構,以暴力的方式檢測隱藏的核心模組。
移除模組有兩方面的效果。首先,用戶將看不見Sebek被安裝了。第二,如果已經安裝,用戶將無法卸載Sebek模組。安裝腳本sbk_install.·sh的”Testing”變數如果設定成”1”,那么就禁止了隱藏功能。
客戶端數據包輸出
當Sebek客戶端捕獲數據,那么它需要在入侵者沒有察覺的情況下把數據傳送到服務端。一般情況下蜜罐都是布置了一個區域網路內,如果Sebek只是簡單使用UDP流來給服務端傳送數據,入侵者只需監聽網路上的數據傳輸就可以判斷是否安裝了Sebek。不過Sebek還是使用UDP來給服務端傳送數據,但是它修改核心使用戶無法看到這些數據包,包括其它主機傳送的該類型使用相同配置的數據包。而且當Sebek把這些數據傳送到網路的時候,系統也無法阻止這些數據包的傳輸。
如果一個區域網路上每個蜜罐安裝了Sebek,它們都不能發現任何Sebek數據,然而服務端能夠完全訪問這些由客戶端捕獲的數據。每個read( )調用請求Sebek都會產生一個或多個日誌數據包,每個數據包都包含了一點關於這個調用內容的信息和這個調用訪問的數據。每個包還包含了一個Sebek記錄,這個記錄包含一些產生調用的進程描述、調用產生的時間和記錄數據的大小。這些報完全由Sebek產生,而不是使用TCP/IP協定棧來產生或傳送數據包,所以系統無法看到或阻斷這些數據包。當數據包創建好的時候就直接傳送給驅動設備,這就繞過了原始套接字代碼和包過濾代碼。由於嗅探器是基於libpcap的,而libpcap使用原始套接字接口來收集數據包,所以嗅探器不能看到運行Sebek主機上由Sebek產生的數據包。
因為Sebek產生自己的數據包並且直接通過設備驅動傳送它們,所以用戶無法使用IPTABLES來阻斷數據包,也無法用網路嗅探器來監視它們,這也防止了蜜罐上的入侵者通過檢查區域網路數據傳輸來檢測是否有Sebek。第二個要解決的問題是需要阻止蜜罐A檢測到蜜罐B的Sebek數據包。使用以太交換不能解決這個問題。因為Sebek不是通過ARP獲取目標IP位址對應的目標MAC地址,所以它對ARP欺騙有自然免疫能力。但是在有些情況下,A可以看到B的數據包,這樣入侵者就可以在蜜罐A運行嗅探器來看到區域網路上來自蜜罐B的Sebek數據包。
為了解決這個問題,Sebek安裝了自己的原始套接字實現。這個新版本編程實現安靜的忽略Sebek數據包。在Sebek數據包頭定義了預先設定的目標UDP連線埠和固有的魔術數字,如果這兩個值都匹配了,那么這個數據包就會被忽略。這個簡單的實現不會對Sebek數據包有影響,只是丟棄它們並且移到佇列里的下一個數據包,這使得入侵者即使使用嗅探器也無法捕獲Sebek數據包。

相關詞條

熱門詞條

聯絡我們