目錄
- 前述
- EQL優(yōu)點(diǎn)
- 基礎(chǔ)語(yǔ)法
- 數(shù)據(jù)準(zhǔn)備
- 數(shù)據(jù)窗口搜索
- 統(tǒng)計(jì)符合條件的事件
- 事件序列
- 安全檢測(cè)
- 數(shù)據(jù)準(zhǔn)備
- 獲取regsvr32事件的計(jì)數(shù)
- 檢查命令行參數(shù)
- 檢查惡意腳本加載
- 檢查攻擊成功可能性
前述
EQL
的全名是 Event Query Language (EQL)
。事件查詢語(yǔ)言(EQL)是一種用于基于事件的時(shí)間序列數(shù)據(jù)(例如日志,指標(biāo)和跟蹤)的查詢語(yǔ)言。在 Elastic Security
平臺(tái)上,當(dāng)輸入有效的 EQL
時(shí),查詢會(huì)在數(shù)據(jù)節(jié)點(diǎn)上編譯,執(zhí)行查詢并返回結(jié)果。這一切都快速、并行地發(fā)生,讓用戶立即看到結(jié)果。
EQL優(yōu)點(diǎn)
- EQL 使你可以表達(dá)事件之間的關(guān)系:許多查詢語(yǔ)言允許您匹配單個(gè)事件。EQL 使你可以匹配不同事件類別和時(shí)間跨度的一系列事件
- EQL 的學(xué)習(xí)曲線很低:EQL 語(yǔ)法看起來(lái)像其他常見(jiàn)查詢語(yǔ)言,例如 SQL。 EQL 使你可以直觀地編寫(xiě)和讀取查 詢,從而可以進(jìn)行快速,迭代的搜索。
- EQL 設(shè)計(jì)用于安全用例:盡管你可以將其用于任何基于事件的數(shù)據(jù),但我們創(chuàng)建了 EQL 來(lái)進(jìn)行威脅搜尋。 EQL 不僅支持危害指標(biāo)(IOC)搜索,而且可以描述超出 IOC 范圍的活動(dòng)
基礎(chǔ)語(yǔ)法
數(shù)據(jù)準(zhǔn)備
要運(yùn)行 EQL
搜索,搜索到的數(shù)據(jù)流或索引必須包含時(shí)間戳和事件類別字段。默認(rèn)情況下,EQL
使用 Elastic
通用模式(ECS)中的 @timestamp
和 event.category
字段。 @timestamp
表示時(shí)間戳,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)過(guò)程中,有很多時(shí)候,了解特定時(shí)間發(fā)生的所有事件是很有用的。使用一種名為any
的特殊事件類型,針對(duì)所有事件進(jìn)行匹配,如果想要匹配特定事件,就需要指明事件分類名稱
# GET /gmall/_eql/search { "query" : """ any where page.user_id == "1" """ }
統(tǒng)計(jì)符合條件的事件
GET /gmall/_eql/search { "query" : """ any where true """, "filter": { "range": { "@timestamp": { "gte": "1654056000000", "lt": "1654056005000" } } } }
事件序列
- 頁(yè)面先訪問(wèn) login,后面又訪問(wèn)了 good_detail的頁(yè)面
GET /gmall/_eql/search { "query" : """ sequence by page.session_id [page where page.page_id=="login"] [page where page.page_id=="good_detail"] """ }
安全檢測(cè)
EQL
在 Elastic Securit
中被廣泛使用。實(shí)際應(yīng)用時(shí),我們可以使用 EQL
語(yǔ)言來(lái)進(jìn)行檢測(cè)安全威脅和其他可疑行為。
數(shù)據(jù)準(zhǔn)備
regsvr32.exe
是一個(gè)內(nèi)置的命令行實(shí)用程序,用于在Windows
中注冊(cè).dll
庫(kù)。作為本機(jī)工具,regsvr32.exe
具有受信任的狀態(tài),從而使它可以繞過(guò)大多數(shù)允許列表軟件和腳本阻止 程序。有權(quán)訪問(wèn)用戶命令行的攻擊者可以使用 regsvr32.exe
通過(guò).dll
庫(kù)運(yùn)行惡意腳本,即使在其他情況下也不允許這些腳本運(yùn)行。
regsvr32
濫用的一種常見(jiàn)變體是Squfullydoo
攻擊。在 Squfullydoo
攻擊中,regsvr32.exe
命令使用 scrobj.dll
庫(kù)注冊(cè)并運(yùn)行遠(yuǎn)程腳本。
測(cè)試數(shù)據(jù)來(lái)自 Atomic Red Team
的測(cè)試數(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事件的計(jì)數(shù)
- 獲取與
regsvr32.exe
進(jìn)程關(guān)聯(lián)的事件數(shù)
# 查詢數(shù)據(jù) # ?filter_path=-hits.events 從響應(yīng)中排除hits.events 屬性。此搜索僅用于獲取事件計(jì)數(shù),而不是匹配事件的列表 # query : 匹配任何進(jìn)程名稱為regsvr32.exe的事件 # size : 最多返回200個(gè)匹配事件的匹配,實(shí)際查詢結(jié)果為143個(gè) GET my-eql-index/_eql/search?filter_path=-hits.events { "query": """ any where process.name == "regsvr32.exe" """, "size": 200 }
檢查命令行參數(shù)
該查詢將一個(gè)事件與創(chuàng)建的event.type
相匹配,指示regsvr32.exe
進(jìn)程的開(kāi)始。根據(jù)事件的 process.command_line
值,regsvr32.exe
使用 scrobj.dll
注冊(cè)了腳本 RegSvr32.sct
.這符合Squibledoo
攻擊的行為
# 增加過(guò)濾條件查詢數(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
庫(kù)
# 增加過(guò)濾條件查詢數(shù)據(jù) GET my-eql-index/_eql/search { "query": """ library where process.name == "regsvr32.exe" and dll.name == "scrobj.dll" """ }
檢查攻擊成功可能性
在許多情況下,攻擊者使用惡意腳本連接到遠(yuǎn)程服務(wù)器或下載其他文件。 使用EQL
序列查詢來(lái)檢查以下一系列事件:
regsvr32.exe
進(jìn)程- 通過(guò)相同的進(jìn)程加載
scrobj.dll
庫(kù) - 同一過(guò)程中的任何網(wǎng)絡(luò)事件
# 增加過(guò)濾條件查詢數(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事件查詢語(yǔ)言EQL操作的詳細(xì)內(nèi)容,更多關(guān)于ElasticSearch EQL操作的資料請(qǐng)關(guān)注其它相關(guān)文章!