YARA-L 2.0 是一種電腦語言,用於在企業記錄檔資料中擷取您的企業記錄檔資料,供使用者搜尋。YARA-L 語法衍生自 VirusTotal 開發的 YARA 語言。該語言與 Chronicle Detection Engine 搭配使用,可讓你在大量資料中搜尋威脅和其他事件。另請參閱 YARA-L 2.0 語言語法
規則結構
對於 YARA-L 2,您必須指定下列順序的變數宣告、定義和用法:
- 中繼
- 事件
- 比對 (選用)
- 條件
下列說明規則的一般結構:
rule <rule Name>
{
meta:
// Stores arbitrary key-value pairs of rule details, such as who wrote
// it, what it detects on, version control, etc.
// Identical to the meta section in YARA-L.
//
// For example:
// author = "Analyst #2112"
// date = "08/09/2020"
// description = "suspicious domain detected"
events:
// Conditions to filter events and the relationship between events.
match:
// Values to return when matches are found.
condition:
// Condition to check events and the variables used to find matches.
}
YARA-L 2.0 範例規則
以下範例顯示以 YARA-L 2.0 編寫的規則。每個規則都會示範如何在規則語言中建立事件的關聯。
來自不同城市的登入資訊
下列規則會搜尋在 5 分鐘內,從兩個以上的城市登入您的企業的使用者:
rule DifferentCityLogin {
meta:
events:
$udm.metadata.event_type = "USER_LOGIN"
$udm.principal.user.userid = $user
$udm.principal.location.city = $city
match:
$user over 5m
condition:
#city > 1
}
比對變數:$user
事件變數:$udm
預留位置變數:$city $user
以下說明這項規則的運作方式:
- 找出具有使用者名稱 (
$user
) 的群組,並在找到相符項目時傳回活動 ($user
)。 - 時間範圍為 5 分鐘,也就是說,只有不到 5 分鐘的事件才會建立關聯。
- 搜尋事件類型為「USER_LOGIN」的事件群組 (
$udm
)。 - 而對於這個事件群組,規則會將使用者 ID 顯示為
$user
,並將登入城市 ID 顯示為$city.
- 如果事件群組 (
$udm
) 中的$city
值數量超過 5 分鐘,則傳回相符項目。
快速建立和刪除
以下規則會搜尋已建立 4 小時,之後又在 4 小時內刪除的使用者:
rule UserCreationThenDeletion {
meta:
events:
$create.target.user.userid = $user
$create.metadata.event_type = "USER_CREATION"
$delete.target.user.userid = $user
$delete.metadata.event_type = "USER_DELETION"
$create.metadata.event_timestamp.seconds <=
$delete.metadata.event_timestamp.seconds
match:
$user over 4h
condition:
$create and $delete
}
事件變數:$create
和 $delete
比對變數:$user
預留位置變數:不適用
以下說明這項規則的運作方式:
- 找出具有使用者名稱 (
$user
) 的群組,並在找到相符項目時傳回活動 ($user
)。 - 時間範圍為 4 小時,表示系統只會將小於 4 小時的事件建立關聯。
- 搜尋兩個事件群組 (
$create
和$delete
,其中$create
等於#create >= 1
)。 $create
對應至USER_CREATION
事件,並呼叫使用者 ID 為$user
。$user
可用來同時使用兩個群組。$delete
對應至USER_DELETION
事件,並呼叫使用者 ID 為$user
。這項規則會找出兩個事件群組中的使用者 ID 是否相同。- 這項規則會找出「
$delete
」的活動發生時間晚於「$create
」的活動,並於發現時傳回相符項目。
單一事件或多重事件
以下規則範例說明如何建立規則來搜尋單一事件,並依規則修改適用於多個活動。
規則的單一事件版本如下:
rule SingleEventRule {
meta:
author = "noone@altostrat.com"
events:
$e.metadata.event_type = "USER_LOGIN"
condition:
$e
}
這項規則只是搜尋使用者登入事件,將會傳回儲存在 Chronicle 帳戶中的企業資料中的第一個事件。
以下是規則的多重事件版本:
rule MultiEventRule {
meta:
author = "noone@altostrat.com"
events:
$e.metadata.event_type = "USER_LOGIN"
$e.principal.user.userid = $user
match:
$user over 10m
condition:
#e >= 10
}
規則會搜尋至少 10 分鐘內登入至少 10 次的使用者。
IP 位址範圍內的單一事件
以下範例顯示的單一事件規則會在兩個特定使用者與特定 IP 位址範圍之間進行比對:
rule OrsAndNetworkRange {
meta:
author = "noone@altostrat.com"
events:
// Checks CIDR ranges.
net.ip_in_range_cidr($e.principal.ip, "203.0.113.0/24")
// Detection when the hostname field matches either value using or.
$e.principal.hostname = /pbateman/ or $e.principal.hostname = /sspade/
condition:
$e
}
重複欄位
以下範例說明重複欄位的概念。udm.principal.ip
欄位通常以陣列表示。
舉例來說,主機可以有多個 IP 位址:
principal.ip [192.0.2.5, 198.51.100.10, 192.0.2.16]
如果您在規則中加入以下聲明:
$e.principal.ip = "192.0.2.16"
Chronicle 在陣列中搜尋這個 IP 位址 (這個範例中會顯示此位址)。這個陳述式不表示主機只有一個 IP 位址。
以下規則會搜尋來源 IP 位址已連線至目標 IP 位址的事件,同時會在不到一分鐘內對超過 50 個不同目標通訊埠提出要求。這通常是惡意網路搜尋服務中的惡意實體。
rule RepeatedFieldsRuleExample {
meta:
author = "noone@altostrat.com"
events:
$e.principal.ip = $source_ip
$e.target.ip = $target_ip
$e.target.port = $target_port
match:
$source_ip, $target_ip over 1m
condition:
#target_port > 50
}
規則中的規則運算式
以下 YARA-L 2.0 規則運算式範例會搜尋從 altostrat.com 網域收到的電子郵件。由於 nocase
已新增至 $host
變數 regex
比較和 regex
函式,因此兩者比較不會區分大小寫。
rule RegexRuleExample {
meta:
author = "noone@altostrat.com"
events:
$e.principal.hostname = $host
$host = /.*HoSt.*/ nocase
re.regex($e.network.email.from, `.*altostrat\.com`) nocase
match:
$host over 10m
condition:
#e > 10
}
YARA-L 滑動視窗
根據預設,YLAA-L 2.0 規則會使用躍點視窗來進行評估。企業事件資料範圍會分成一組重疊的重疊時間區間,每個時間區間都位於「match
」區段中指定的持續時間。接著,各個躍躍期期間的相關事件就會建立關聯。使用躍躍期視窗,則無法搜尋依特定順序發生的事件 (例如,e1
在 e2
分鐘後發生 2 分鐘)。事件 e1
和發生次數為 e2
的事件,前提是兩者的時間長度都間隔在一起。
此外,您也可以利用滑動視窗評估規則。透過滑動窗口,在開始或結束指定的資料透視表事件變數時,就會產生 match
區段中指定的時間區間。然後,每個滑動窗體內的事件相互關聯。讓使用者搜尋依照特定順序發生的事件 (例如e1
都是在e2
)。事件發生次數e1
事件發生次數e2
與事件相關e1
發生在活動結束後e2
,才能使用 Android 手機或平板電腦尋找另一部裝置。
滑動時間區間規則語法
在規則的「符合」部分中指定滑動時間區間,如下所示:
<match-variable-name-1>
、<match-variable-name-2>
、... over
<sliding-window-
duration>
before|after
<pivot-event-variable-name>
資料透視表事件變數是滑動時間區間依據的事件變數。如果您使用 before
關鍵字,系統會產生滑動時間區間,並在發生資料透視表事件每次發生時結束。如果使用 after
關鍵字,系統會在每次資料透視表事件發生時產生滑動視窗。
滑動時間區間規則範例
以下 YARA-L 2.0 滑動視窗範例會搜尋 firewall_1
事件之後沒有 firewall_2
事件。after
關鍵字會搭配資料透視表事件變數 $e1
使用,藉此指定在對應事件時,每 firewall_1
個事件都至少要經過 10 分鐘。
rule SlidingWindowRuleExample {
meta:
author = "noone@google.com"
events:
$e1.metadata.product_name = "firewall_1"
$e1.principal.hostname = $host
$e2.metadata.product_name = "firewall_2"
$e2.principal.hostname = $host
match:
$host over 10m after $e1
condition:
$e1 and !$e2
}