首頁 > 軟體

ElasticSearch事件查詢語言EQL操作

2022-10-02 14:01:50

前述

EQL 的全名是 Event Query Language (EQL)。事件查詢語言(EQL)是一種用於基於事件的時間序列資料(例如紀錄檔,指標和跟蹤)的查詢語言。在 Elastic Security 平臺上,當輸入有效的 EQL 時,查詢會在資料節點上編譯,執行查詢並返回結果。這一切都快速、並行地發生,讓使用者立即看到結果。

EQL優點

  • EQL 使你可以表達事件之間的關係:許多查詢語言允許您匹配單個事件。EQL 使你可以匹配不同事件類別和時間跨度的一系列事件
  • EQL 的學習曲線很低:EQL 語法看起來像其他常見查詢語言,例如 SQL。 EQL 使你可以直觀地編寫和讀取查 詢,從而可以進行快速,迭代的搜尋。
  • EQL 設計用於安全用例:儘管你可以將其用於任何基於事件的資料,但我們建立了 EQL 來進行威脅搜尋。 EQL 不僅支援危害指標(IOC)搜尋,而且可以描述超出 IOC 範圍的活動

基礎語法

資料準備

要執行 EQL 搜尋,搜尋到的資料流或索引必須包含時間戳和事件類別欄位。預設情況下,EQL 使用 Elastic 通用模式(ECS)中的 @timestampevent.category 欄位。 @timestamp 表示時間戳,event.category 表示事件分類。

# 建立索引
PUT /gmall
# 批次增加資料
PUT _bulk
{"index":{"_index":"gmall"}}
{
    "@timestamp":"2022-08-10T15:00:00.00+08:00",
    "event":{
        "category":"page"
    },
    "page":{
        "session_id":"42FC7E13-CB3E-5C05-0000-0010A0125101",
        "last_page_id":"",
        "page_id":"login",
        "user_id":""
    }
}
{"index":{"_index":"gmall"}}
{
    "@timestamp":"2022-08-10T15:02:00.00+08:00",
    "event":{
        "category":"page"
    },
    "page":{
        "session_id":"42FC7E13-CB3E-5C05-0000-0010A0125101",
        "last_page_id":"login",
        "page_id":"good_list",
        "user_id":"1"
    }
}
{"index":{"_index":"gmall"}}
{
    "@timestamp":"2022-08-10T15:05:00.00+08:00",
    "event":{
        "category":"page"
    },
    "page":{
        "session_id":"42FC7E13-CB3E-5C05-0000-0010A0125101",
        "last_page_id":"good_list",
        "page_id":"good_detail",
        "user_id":"1"
    }
}
{"index":{"_index":"gmall"}}
{
    "@timestamp":"2022-08-10T15:07:00.00+08:00",
    "event":{
        "category":"page"
    },
    "page":{
        "session_id":"42FC7E13-CB3E-5C05-0000-0010A0125101",
        "last_page_id":"good_detail",
        "page_id":"order",
        "user_id":"1"
    }
}
{"index":{"_index":"gmall"}}
{
    "@timestamp":"2022-08-10T15:08:00.00+08:00",
    "event":{
        "category":"page"
    },
    "page":{
        "session_id":"42FC7E13-CB3E-5C05-0000-0010A0125101",
        "last_page_id":"order",
        "page_id":"payment",
        "user_id":"1"
    }
}
{"index":{"_index":"gmall"}}
{
    "@timestamp":"2022-08-10T15:08:00.00+08:00",
    "event":{
        "category":"page"
    },
    "page":{
        "session_id":"42FC7E13-CB3E-5C05-0000-0010A0125102",
        "last_page_id":"",
        "page_id":"login",
        "user_id":"2"
    }
}
{"index":{"_index":"gmall"}}
{
    "@timestamp":"2022-08-10T15:08:00.00+08:00",
    "event":{
        "category":"page"
    },
    "page":{
        "session_id":"42FC7E13-CB3E-5C05-0000-0010A0125102",
        "last_page_id":"login",
        "page_id":"payment",
        "user_id":"2"
    }
}

資料視窗搜尋

在事件響應過程中,有很多時候,瞭解特定時間發生的所有事件是很有用的。使用一種名為any的特殊事件型別,針對所有事件進行匹配,如果想要匹配特定事件,就需要指明事件分類名稱

# 
GET /gmall/_eql/search 
{ 
    "query" : """ 
        any where page.user_id == "1" 
    """ 
}

統計符合條件的事件

GET /gmall/_eql/search 
{ 
    "query" : """ 
        any where true 
    """,
    "filter": { 
        "range": { 
            "@timestamp": { 
                "gte": "1654056000000",
                "lt": "1654056005000" 
            } 
        } 
    }
}

事件序列

  • 頁面先存取 login,後面又存取了 good_detail的頁面
GET /gmall/_eql/search 
{ 
    "query" : """ 
      sequence by page.session_id 
        [page where page.page_id=="login"] 
        [page where page.page_id=="good_detail"] 
    """ 
}

安全檢測

EQLElastic Securit 中被廣泛使用。實際應用時,我們可以使用 EQL 語言來進行檢測安全威脅和其他可疑行為。

資料準備

regsvr32.exe 是一個內建的命令列實用程式,用於在Windows中註冊.dll庫。作為本機工具,regsvr32.exe 具有受信任的狀態,從而使它可以繞過大多數允許列表軟體和指令碼阻止 程式。有權存取使用者命令列的攻擊者可以使用 regsvr32.exe 通過.dll庫執行惡意指令碼,即使在其他情況下也不允許這些指令碼執行。

regsvr32 濫用的一種常見變體是Squfullydoo攻擊。在 Squfullydoo 攻擊中,regsvr32.exe 命令使用 scrobj.dll 庫註冊並執行遠端指令碼。

測試資料來自 Atomic Red Team 的測試資料集,其中包括模仿Squibledoo攻擊的事件。 資料已對映到Elastic通用架構(ECS)欄位:normalized-T1117-AtomicRed-regsvr32.json 將檔案內容匯入到ES軟體中:

# 建立索引 
PUT my-eql-index 
# 匯入資料 
POST my-eql-index/_bulk?pretty&refresh
{"index":{}}
{
    ......
}
  • 檢視資料匯入情況
GET /_cat/indices/my-eql-index?v=true&h=health,status,index,docs.count

獲取regsvr32事件的計數

  • 獲取與regsvr32.exe程序關聯的事件數
# 查詢資料 
# ?filter_path=-hits.events 從響應中排除hits.events 屬性。此搜尋僅用於獲取事件計數,而不是匹配事件的列表 
# query : 匹配任何程序名稱為regsvr32.exe的事件 
# size : 最多返回200個匹配事件的匹配,實際查詢結果為143個 
GET my-eql-index/_eql/search?filter_path=-hits.events 
{ 
    "query": """ 
      any where process.name == "regsvr32.exe"              
    """, 
    "size": 200                                             
}

檢查命令列引數

該查詢將一個事件與建立的event.type相匹配,指示regsvr32.exe程序的開始。根據事件的 process.command_line值,regsvr32.exe 使用 scrobj.dll 註冊了指令碼 RegSvr32.sct.這符合Squibledoo攻擊的行為

# 增加過濾條件查詢資料 
GET my-eql-index/_eql/search 
{ 
    "query": """ 
       process where process.name == "regsvr32.exe" and process.command_line.keyword != null              
    """  
}

檢查惡意指令碼載入

  • 檢查regsvr32.exe以後是否載入scrobj.dll
# 增加過濾條件查詢資料 
GET my-eql-index/_eql/search 
{ 
    "query": """ 
        library where process.name == "regsvr32.exe" and dll.name == "scrobj.dll"
    """                                           
}

檢查攻擊成功可能性

在許多情況下,攻擊者使用惡意指令碼連線到遠端伺服器或下載其他檔案。 使用EQL序列查詢來檢查以下一系列事件:

  • regsvr32.exe程序
  • 通過相同的程序載入scrobj.dll
  • 同一過程中的任何網路事件
# 增加過濾條件查詢資料 
GET my-eql-index/_eql/search 
{ 
    "query": """ 
        sequence by process.pid 
            [process where process.name == "regsvr32.exe"] 
            [library where dll.name == "scrobj.dll"] 
            [network where true]              
    """                                       
}

以上就是ElasticSearch事件查詢語言EQL操作的詳細內容,更多關於ElasticSearch EQL操作的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com