zeek指令碼編寫介紹

2022-09-13 20:18:13 字數 3634 閱讀 5573

最近學習了一下zeek,簡單記錄一下

zeek是乙個被動的開源網路流量分析器。它主要是一種安全監視器,可深入檢查鏈結上的所有流量以查詢可疑活動的跡象。使用zeek最直接的好處是生成大量日誌檔案。這些日誌不僅包括對網路上每個連線的全面記錄,還包括應用程式層記錄,例如所有http會話及其請求的uri,金鑰標頭,mime型別和伺服器響應;帶回覆的dns請求;ssl證書;smtp會話的關鍵內容;以及更多。預設情況下,zeek將所有這些資訊寫入結構合理的製表符分隔的日誌檔案中,這些檔案適用於使用外部軟體進行後處理。

另外,在名稱上,3.0版本之前是叫bro,之後改為zeek,相關的命令也都有變動

基本命令

zeek的指令碼語言是事件驅動的,zeek中的指令碼編寫取決於zeek在處理網路流量時生成的事件,通過這些事件更改資料結構的狀態以及對所提供資訊進行決策。

zeek的核心作用是將事件放入有序的「事件佇列」中,從而使事件處理程式可以按照「先到先得」的方式處理事件。實際上,這是zeek的核心功能,因為如果沒有編寫指令碼來對事件執行離散操作,則幾乎沒有可用的輸出。對事件佇列,生成的事件以及事件處理程式處理這些事件的方式的基本了解不僅是學習zeek編寫指令碼的基礎,而且還是了解zeek本身的基礎。

乙個簡單的例子

connection 型別

在zeek定義的所有事件中,絕大多數事件都傳遞了connection資料型別,連線記錄本身是大量的巢狀資料型別,用於跟蹤連線在其生命週期內的狀態。

儘管zeek能夠進行資料報級別的處理,但其優勢在於始發者與響應者之間的連線。因此,為連線生命週期的主要部分定義了一些事件,例如:

new_connection

connection_timeout

connection_state_remove

其中,對連線記錄資料型別有最好的展示的事件是connection_state_remove。zeek會在決定從記憶體中刪除該事件之前生成該事件。

通過抓包來獲取資料,模擬解析網路資料,檢視連線內容

首先,需要通知zeek我們將通過向log::id列舉數新增值來新增另乙個log stream 。在此指令碼中,我們將值log追加到log::id列舉值,但是由於此值位於匯出塊中,log::id因此實際 將值追加到factor::log。

接下來,我們需要定義組成日誌資料的名稱和值對,並規定其格式。該指令碼定義了乙個新的記錄資料型別,稱為info(實際上, factor::info)和四個字段,為addr和port。記錄型別中的每個欄位都包含&log 屬性,在log::write呼叫這些欄位時應將這些字段傳遞給logging framework 。如果有任何不帶&log屬性的名稱/值對,則將在記錄期間僅忽略這些字段,但在變數的生命週期內仍然可用。

下一步是建立log::create_stream,乙個以 log::id和一條記錄及日誌檔案作為其引數的日誌記錄流。在此示例中,我們呼叫 log::create_stream方法並通過factor::log、 factor::info記錄和factor日誌檔名作為引數。

從現在開始,向log::write命令發出log::id且格式正確的factor::info記錄,將生成日誌條目。結果如下:

要在zeek中發出通知,只需要提供特定的notice :: type,然後呼叫notice為其提供適當的notice :: info記錄。通常,對notice的呼叫僅包含notice :: type和簡潔的訊息。但是,在發出通知時,有更多選項,note :: info中唯一必填的字段是note欄位。

會在notice.log檔案中記錄通知資訊

首先,指令碼export塊將lognotice::interesting_hostname_login值新增到列舉常量中, notice::type記錄定義新的通知型別。然後,指令碼將呼叫notice和定義 $note,$msg,$sub,$id,和$uid記錄。

其次,通知加入系統通過notice::policy掛鉤進行管理 。乙個notice::policy鉤其引數notice::info用來存放指令碼在其呼叫時提供的資訊記錄。通過訪問notice::info中特定的記錄,進行邏輯判斷,以更改用於處理系統中的通知的策略。

通知引數

描述action_none

不採取行動

action_log

將通知傳送到notice :: log日誌記錄流。

action_email

傳送帶有通知的電子郵件。

action_alarm

示例中,我們已新增notice:: action_log到 n$actions集合中。該型別本身是可列舉的,

notice::action_log操作將通知寫入 notice::log日誌記錄流,在預設配置中,日誌將寫入notice.log檔案,並且不採取進一步操作。

notice::action_email操作會將電子郵件傳送到notice::mail_dest 變數中定義的乙個或多個位址,並將通知的詳細資訊作為電子郵件的正文。

notice::action_alarm將通知傳送到notice::alarm_log日誌記錄流,然後每小時進行一次輪播,並將其內容以可讀ascii電子郵件傳送到notice::mail_dest

將指令碼以load方式新增到配置

echo 『@load base/**' >> /usr/local/zeek/share/zeek/site/local.zeek
/usr/local/zeek/bin/zeekctl deploy
如果指定目錄名而不是檔名,則zeek將嘗試在該目錄中載入名為" __load __.zeek"的檔案(該檔案將包含其他「 @load」指令)。

將目錄位址以load方式新增到配置

echo 『@load base/**' >> /usr/local/zeek/share/zeek/site/local.zeek
/usr/local/zeek/bin/zeekctl deploy

指令碼編寫 編寫 LLDB 偵錯程式指令碼

lldb 偵錯程式提供對 python 指令碼的支援,可以執行一些自動化的操作,提供工作效率。本文從 helloworld 開始學習如何編寫 lldb 指令碼。編寫第乙個 lldb 指令碼 下面我們來實際操作編寫 lldb 偵錯程式指令碼。在計算機上建立乙個目錄用於存指令碼檔案,比如我們在 user...

windows bat指令碼編寫

獲取當前所在目錄完全路徑 echo off echo 完全路徑 dp0 pause color設定控制台前景和背景顏色 可同時顯示各種顏色 echo off chcp 437 nul graftabl 936 nul if not exist config.nt copy windir system...

secureCRT指令碼編寫

securecrt支援三種指令碼語言 vbs,js,python。三種指令碼分別以一下三種形式開頭 vbs language vbscript inte ce 1.0 js language jscript inte ce 1.0 python language python inte ce 1.0...