🔍 登录 注册

ElasticSearch之EQL操作

大 大苹果 2023-12-27 linux 👁 115 ⏱ 9min

前述

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]          
    """                                   
}

读完了?给作者一点支持

本文采用 CC BY 4.0 协议转载 · © 大苹果

评论(0)

登录 后参与评论。

  • 还没有评论,来抢沙发。

🔗 相关文章

Mysql 表被标记为崩溃,最后一次自动化修复失败

当 MySQL 日志中出现“表被标记为崩溃且自动修复失败”的提示时,通常表示 MySQL 在启动过程中检测到某个表的文件系统或存储引擎层出现了问题。这种情况通常会导致表无法正常使用,需要手动进行修复。以下是处理这种情况的一些步骤和方法: ### 1. **查看具体错误信息** 首先,需要查看 MySQL 错误日志以获取更多的错误信息。这可以帮助确定崩溃的表和具体的问题。 ```bash # 查看 MySQL 错误日志 tail -f /var/log/mysql/error.log ``` ### 2. **修复表** 不同的存储引擎有不同的修复工具,以下是常用的修复方法: #### **使用 `myisamchk` 修复 MyISAM 表** 如果崩溃的表使用的是 MyISAM 存储引擎,可以使用 `myisamchk` 工具来修复表。 1. 停止 MySQL 服务: ```bash sudo systemctl stop mysql ``` 2. 使用 `myisamchk` 修复表:

2024/8/11👍 0

mermaid.min.js的使用及介绍

`mermaid.min.js` 是一个 JavaScript 库,用于在浏览器中轻松绘制复杂的图表和流程图。Mermaid 通过使用简单的标记语言来描述图表,使得用户无需深入学习图表绘制的底层技术即可创建专业的图形。 在这篇文章中,我们将介绍 `mermaid.min.js` 的功能、应用场景、如何在项目中使用,以及一些常用的示例。 ## Mermaid 的功能 Mermaid 支持多种类型的图表,包括但不限于: 1. **流程图(Flowchart)**: - 用于表示流程或过程中的步骤。 - 支持各种节点和连线风格。 2. **序列图(Sequence Diagram)**: - 用于表示对象之间的交互。 - 展示消息的发送和接收过程。 3. **类图(Class Diagram)**: - 用于表示类及其关系。 - 支持类的属性和方法定义。 4. **状态图(State Diagram)**: - 用于描述系统状态及其转换。 - 适用于复杂的状态机建模。 5. **甘

2024/8/9👍 0

docker之Dockerfile及docker compose配置文件的说明及使用

Docker 的配置文件对于镜像构建和容器化应用的管理至关重要。在 Docker 中,主要的配置文件是 Dockerfile 和 docker-compose.yml。Dockerfile 用于构建镜像,而 docker-compose.yml 用于定义多容器应用。下面将详细介绍这两个文件的配置选项和用法。 ## Dockerfile 配置详解 **Dockerfile** 是一个文本文件,其中包含一组指令,用于定义如何构建 Docker 镜像。以下是 Dockerfile 中常用的指令及其用法: ### FROM `FROM` 指令用于指定基础镜像,是 Dockerfile 中的第一条指令。 ```dockerfile FROM node:14 ``` 上例中,`node:14` 是官方的 Node.js 版本 14 的镜像。 ### LABEL `LABEL` 用于为镜像添加元数据,以键值对形式存在。 ```dockerfile LABEL maintainer="your-email@example.com" LABE

2024/8/9👍 0