ElasticSearch事件查詢語言EQL操作
前述
EQL
的全名是 Event Query Language (EQL)
。事件查詢語言(EQL)是一種用于基于事件的時間序列數(shù)據(jù)(例如日志,指標和跟蹤)的查詢語言。在 Elastic Security
平臺上,當輸入有效的 EQL
時,查詢會在數(shù)據(jù)節(jié)點上編譯,執(zhí)行查詢并返回結(jié)果。這一切都快速、并行地發(fā)生,讓用戶立即看到結(jié)果。
EQL優(yōu)點
- EQL 使你可以表達事件之間的關(guān)系:許多查詢語言允許您匹配單個事件。EQL 使你可以匹配不同事件類別和時間跨度的一系列事件
- EQL 的學(xué)習曲線很低:EQL 語法看起來像其他常見查詢語言,例如 SQL。 EQL 使你可以直觀地編寫和讀取查 詢,從而可以進行快速,迭代的搜索。
- EQL 設(shè)計用于安全用例:盡管你可以將其用于任何基于事件的數(shù)據(jù),但我們創(chuàng)建了 EQL 來進行威脅搜尋。 EQL 不僅支持危害指標(IOC)搜索,而且可以描述超出 IOC 范圍的活動
基礎(chǔ)語法
數(shù)據(jù)準備
要運行 EQL
搜索,搜索到的數(shù)據(jù)流或索引必須包含時間戳和事件類別字段。默認情況下,EQL
使用 Elastic
通用模式(ECS)中的 @timestamp
和 event.category
字段。 @timestamp
表示時間戳,event.category
表示事件分類。
# 創(chuàng)建索引 PUT /gmall # 批量增加數(shù)據(jù) 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" } }
數(shù)據(jù)窗口搜索
在事件響應(yīng)過程中,有很多時候,了解特定時間發(fā)生的所有事件是很有用的。使用一種名為any
的特殊事件類型,針對所有事件進行匹配,如果想要匹配特定事件,就需要指明事件分類名稱
# GET /gmall/_eql/search { "query" : """ any where page.user_id == "1" """ }
統(tǒng)計符合條件的事件
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"] """ }
安全檢測
EQL
在 Elastic Securit
中被廣泛使用。實際應(yīng)用時,我們可以使用 EQL
語言來進行檢測安全威脅和其他可疑行為。
數(shù)據(jù)準備
regsvr32.exe
是一個內(nèi)置的命令行實用程序,用于在Windows
中注冊.dll
庫。作為本機工具,regsvr32.exe
具有受信任的狀態(tài),從而使它可以繞過大多數(shù)允許列表軟件和腳本阻止 程序。有權(quán)訪問用戶命令行的攻擊者可以使用 regsvr32.exe
通過.dll
庫運行惡意腳本,即使在其他情況下也不允許這些腳本運行。
regsvr32
濫用的一種常見變體是Squfullydoo
攻擊。在 Squfullydoo
攻擊中,regsvr32.exe
命令使用 scrobj.dll
庫注冊并運行遠程腳本。
測試數(shù)據(jù)來自 Atomic Red Team
的測試數(shù)據(jù)集,其中包括模仿Squibledoo
攻擊的事件。 數(shù)據(jù)已映射到Elastic
通用架構(gòu)(ECS)字段:normalized-T1117-AtomicRed-regsvr32.json
將文件內(nèi)容導(dǎo)入到ES
軟件中:
# 創(chuàng)建索引 PUT my-eql-index # 導(dǎo)入數(shù)據(jù) POST my-eql-index/_bulk?pretty&refresh {"index":{}} { ...... }
- 查看數(shù)據(jù)導(dǎo)入情況
GET /_cat/indices/my-eql-index?v=true&h=health,status,index,docs.count
獲取regsvr32事件的計數(shù)
- 獲取與
regsvr32.exe
進程關(guān)聯(lián)的事件數(shù)
# 查詢數(shù)據(jù) # ?filter_path=-hits.events 從響應(yīng)中排除hits.events 屬性。此搜索僅用于獲取事件計數(shù),而不是匹配事件的列表 # query : 匹配任何進程名稱為regsvr32.exe的事件 # size : 最多返回200個匹配事件的匹配,實際查詢結(jié)果為143個 GET my-eql-index/_eql/search?filter_path=-hits.events { "query": """ any where process.name == "regsvr32.exe" """, "size": 200 }
檢查命令行參數(shù)
該查詢將一個事件與創(chuàng)建的event.type
相匹配,指示regsvr32.exe
進程的開始。根據(jù)事件的 process.command_line
值,regsvr32.exe
使用 scrobj.dll
注冊了腳本 RegSvr32.sct
.這符合Squibledoo
攻擊的行為
# 增加過濾條件查詢數(shù)據(jù) GET my-eql-index/_eql/search { "query": """ process where process.name == "regsvr32.exe" and process.command_line.keyword != null """ }
檢查惡意腳本加載
- 檢查
regsvr32.exe
以后是否加載scrobj.dll
庫
# 增加過濾條件查詢數(shù)據(jù) GET my-eql-index/_eql/search { "query": """ library where process.name == "regsvr32.exe" and dll.name == "scrobj.dll" """ }
檢查攻擊成功可能性
在許多情況下,攻擊者使用惡意腳本連接到遠程服務(wù)器或下載其他文件。 使用EQL
序列查詢來檢查以下一系列事件:
regsvr32.exe
進程- 通過相同的進程加載
scrobj.dll
庫 - 同一過程中的任何網(wǎng)絡(luò)事件
# 增加過濾條件查詢數(shù)據(jù) 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操作的詳細內(nèi)容,更多關(guān)于ElasticSearch EQL操作的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
網(wǎng)站加速之CDN、SCDN、DCDN區(qū)別在哪?如何選擇?
阿里云CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))是用戶比較熟悉的,那么什么是SCDN?SCDN和CDN有什么區(qū)別?2020-01-01使用?Koa?+?TS?+?ESLlint?搭建node服務(wù)器的過程詳解
這篇文章主要介紹了使用?Koa?+?TS?+?ESLlint?搭建node服務(wù)器,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05