ElasticSearch事件查询语言EQL操作

2023-12-02 0 729
目录
  • 前述
    • EQL优点
  • 基础语法
    • 数据准备
    • 数据窗口搜索
    • 统计符合条件的事件
    • 事件序列
  • 安全检测
    • 数据准备
    • 获取regsvr32事件的计数
    • 检查命令行参数
    • 检查恶意脚本加载
    • 检查攻击成功可能性

前述

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]
\”\”\”
}

以上就是ElasticSearch事件查询语言EQL操作的详细内容,更多关于ElasticSearch EQL操作的资料请关注悠久资源其它相关文章!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 服务器其它 ElasticSearch事件查询语言EQL操作 https://www.u-9.cn/server/qita-server/34401.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务