網站首頁 編程語言 正文
前述
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)中的 @timestamp
和 event.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"] """ }
安全檢測
EQL
在 Elastic 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] """ }
原文鏈接:https://juejin.cn/post/7148244473510625316
相關推薦
- 2022-11-22 Rust?Struct結構體詳解_Rust語言
- 2022-03-29 python語法?range()?序列類型range_python
- 2023-01-28 一文詳解Go語言fmt標準庫的常用占位符使用_Golang
- 2022-05-12 Kotlin generateSequence 迭代器 從1開始產生1000個素數 take 得介紹
- 2022-05-26 pandas進行數據輸入和輸出的方法詳解_python
- 2022-11-13 kvm?透傳顯卡至win10虛擬機的方法_Kvm
- 2022-05-29 簡單聊聊Golang中defer預計算參數_Golang
- 2022-05-06 SQLite3+Qt開發:SQLite3簡要介紹+在Qt5中使用步驟
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支