- Falco云原生安全:Falco原理、實踐與擴展
- (意)洛里斯·德喬安尼等
- 1552字
- 2024-06-26 16:56:38
2.2 生成事件
生成事件的方法數以萬計。在系統調用的場景中,實際上,只要進程在運行,許多事件就會自然地連續發生。然而,要使Falco發揮作用,我們必須關注能夠觸發警報的事件。你可能還記得,Falco預置了一組開箱即用的規則,涵蓋了最常見的安全場景。Falco使用這些規則來表示異常的行為,因此我們需要選擇一個規則作為目標,然后在系統中通過模擬惡意操作來觸發它。
在本書中,特別是在第13章中,你將看到有關規則的全面解析、如何使用Falco的規則語法解釋和編寫條件,以及在條件和輸出中支持哪些字段。現在,讓我們簡單回顧一下什么是規則,并通過一個實際的例子來解釋它的結構:

規則聲明是一個包含若干鍵的YAML對象。第一個鍵rule作為規則集(包含規則定義的一個或多個YAML文件)中規則的唯一標識。第二個鍵desc允許規則的作者簡要描述規則要檢測的內容。鍵condition是最重要的一個,它允許使用一些簡單的語法來表達安全斷言。各種布爾運算符和比較運算符可以與字段(包含收集到的數據)結合使用,以過濾相關的事件。在上面的示例規則中,evt.dir是一個用于過濾的字段。我們將在第6章中詳細介紹Falco支持的字段和過濾器。
條件為假,什么也不會發生;條件為真,斷言得到滿足,然后立即觸發警報。警報將包含一條消息,由規則作者使用規則聲明的鍵output定義,鍵priority對應的值也將出現在報告中。下一節我們會更詳細地介紹警報的內容。
條件condition的語法還可以使用更多的結構,如列表list和宏marco,這些結構可以在規則集中與規則一起定義。顧名思義,列表是可以跨不同規則重用項的列表。類似地,宏是可重用的條件塊。為了完整說明,下面是在“Write below binary dir”這條規則中鍵condition使用的兩個宏(bin_dir和open_write):

在運行時,當加載規則時,宏會被展開。因此,我們可以想象最終的規則條件將類似于:

條件判斷廣泛地利用了字段。在這個例子中,你可以很容易地識別條件中的字段(例如,evt.type、evt.is_open_write、fd.typechar、evt.dir、fd.num和fd.directory),因為它們后面通常跟著一個比較操作符(例如,=、>=、in)。字段名包含一個點(.),因為具有相似上下文的字段被分組到類中,其中點之前的部分表示類(例如,evt和fd)。
盡管你可能還沒有完全理解條件的語法,但沒有關系,你現在需要知道的是,在條件中列出的目錄之一(如/bin)中創建一個文件(這意味著打開一個文件并進行寫入)就可以觸發規則中的條件,讓我們試試看。
首先,啟動Falco并加載目標規則。規則“Write below binary dir”包含在文件/etc/falco/falco_rules.yaml中,在啟動時默認加載,所以你不需要手動復制它,只需打開一個終端并執行命令:

然后,通過在/bin目錄中創建一個文件來觸發規則,一種直接的方法是打開另一個終端窗口并輸入:

現在,如果回到第一個終端,Falco正在運行,你應該會發現一行日志(即由Falco發出的警報),看起來如下所示:

我們被Falco發現了!幸運的是,這正是我們想要實現的。我們將在下一節更詳細地查看輸出。
規則告訴Falco我們想要執行哪些安全策略(由條件鍵condition指定),以及違反策略時想要接收哪些信息(由輸出鍵output指定)。每當事件滿足規則定義的條件時,Falco就會發出警報(輸出一行文本),因此如果我們再次運行上面創建文件的命令,就會觸發一個新的警報。
在學習了上面這個例子之后,你自己也可以試著驗證一些其他的規則。為了幫助實現這個目標,Falcosecurity組織提供了一種稱為事件生成器event-generator的工具。這是一個簡單的命令行工具,不需要任何特殊的安裝步驟。你可以訪問https://oreil.ly/CZGpM下載最新版本,然后在任何你喜歡的地方解壓并使用它。它提供了一個事件集合,與默認Falco規則集中包含的許多規則相匹配。例如,要生成符合規則“Read sensitive file untrusted”中條件的事件,你可以在終端窗口中執行以下命令:

需要注意的是,這個工具可能會對你的系統做出一些變更。例如,由于該工具的目的是重現真正的惡意行為,因此一些操作會修改/bin、/etc和/dev等文件和目錄。在使用該工具之前,請確保你已經完全理解了其用途及選項。正如在線文檔https://oreil.ly/dL8gV所建議的,在容器中運行事件生成器event-generator更安全。