广告位联系
返回顶部
分享到

ElasticSearch事件查询语言EQL操作

服务器其他 来源:互联网 作者:佚名 发布时间:2022-10-01 21:11:35 人浏览
摘要

EQL的全名是Event Query Language (EQL)。事件查询语言(EQL)是一种用于基于事件的时间序列数据(例如日志,指标和跟踪)的查询语言。在Elastic Security平台上,当输入有效的EQL时,查询会在

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 表示事件分类。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

# 创建索引

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的特殊事件类型,针对所有事件进行匹配,如果想要匹配特定事件,就需要指明事件分类名称

1

2

3

4

5

6

7

#

GET /gmall/_eql/search

{

    "query" : """

        any where page.user_id == "1"

    """

}

统计符合条件的事件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

GET /gmall/_eql/search

{

    "query" : """

        any where true

    """,

    "filter": {

        "range": {

            "@timestamp": {

                "gte": "1654056000000",

                "lt": "1654056005000"

            }

        }

    }

}

事件序列

  • 页面先访问 login,后面又访问了 good_detail的页面

1

2

3

4

5

6

7

8

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软件中:

1

2

3

4

5

6

7

8

# 创建索引

PUT my-eql-index

# 导入数据

POST my-eql-index/_bulk?pretty&refresh

{"index":{}}

{

    ......

}

  • 查看数据导入情况

1

GET /_cat/indices/my-eql-index?v=true&h=health,status,index,docs.count

获取regsvr32事件的计数

  • 获取与regsvr32.exe进程关联的事件数

1

2

3

4

5

6

7

8

9

10

11

# 查询数据

# ?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攻击的行为

1

2

3

4

5

6

7

# 增加过滤条件查询数据

GET my-eql-index/_eql/search

{

    "query": """

       process where process.name == "regsvr32.exe" and process.command_line.keyword != null             

    """ 

}

检查恶意脚本加载

  • 检查regsvr32.exe以后是否加载scrobj.dll库

1

2

3

4

5

6

7

# 增加过滤条件查询数据

GET my-eql-index/_eql/search

{

    "query": """

        library where process.name == "regsvr32.exe" and dll.name == "scrobj.dll"

    """                                          

}

检查攻击成功可能性

在许多情况下,攻击者使用恶意脚本连接到远程服务器或下载其他文件。 使用EQL序列查询来检查以下一系列事件:

  • regsvr32.exe进程
  • 通过相同的进程加载scrobj.dll库
  • 同一过程中的任何网络事件

1

2

3

4

5

6

7

8

9

10

# 增加过滤条件查询数据

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]             

    """                                      

}


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://juejin.cn/post/7148244473510625316
相关文章
  • 网站https访问是443端口还是433端口

    网站https访问是443端口还是433端口
    https默认端口号是443 https是以安全为目标的http通道,简单讲是http的安全,即http下加入SSL层,https的安全基础是SSL,因此加密权的详细内容就
  • 关于HTTPS端口443的技术介绍(什么是443端口)
    443端口是用来保证客户和服务器之间的通信安全。 本文将重点介绍HTTPS 443端口,它是如何工作的,它保护什么,以及为什么我们需要它。
  • ElasticSearch事件查询语言EQL操作
    EQL的全名是Event Query Language (EQL)。事件查询语言(EQL)是一种用于基于事件的时间序列数据(例如日志,指标和跟踪)的查询语言。在Elast
  • aarch64服务器部署mysql的流程介绍

    aarch64服务器部署mysql的流程介绍
    aarch64服务器-部署mysql aarch64服务器-部署nacos 1、创建工作目录 1 mkdir -p /apps/mysql/{mydir,datadir,conf,source} 2、编写docker-compose.yaml 1 2 3 4 5 6 7 8 9 1
  • 解决Navicat连接服务器不成功的问题(Access denied

    解决Navicat连接服务器不成功的问题(Access denied
    出现的原因一般是服务器的root用户没有开启访问权限,一般来说值允许本地的访问。 解决方法: 一:第一种方法 1、首先打开xshell连接服务
  • Elasticsearch6.2服务器升配后的bug(避坑指南)

    Elasticsearch6.2服务器升配后的bug(避坑指南)
    本篇文章记录最近一次生产服务器硬件升级之后引起集群不稳定的现象,希望可以帮到有其它人避免采坑。 一、问题描述 升级后出现的异常
  • 使用Ubuntu搭建DNS服务器

    使用Ubuntu搭建DNS服务器
    一、重点说明/etc/bind/named.conf.options配置文件 在进行bind9服务器配置时,/etc/bind/named.conf.options是十分关键的配置文件,它决定着DNS服务器是否
  • Flink 侧流输出源码示例介绍

    Flink 侧流输出源码示例介绍
    Flink 的 side output 为我们提供了侧流(分流)输出的功能,根据条件可以把一条流分为多个不同的流,之后做不同的处理逻辑,下面就来看下
  • Fluentd搭建日志收集服务介绍
    公司需要搭建一个日志收集服务器,用于将公司的项目日志汇总到一台服务器上面,方便查看和减轻各项目服务器压力。但是由于目前资源
  • 游戏服务器中的Netty应用以及源码剖析

    游戏服务器中的Netty应用以及源码剖析
    一、Reactor模式和Netty线程模型 最近因为工作需要,学习了一段时间Netty的源码,并做了一个简单的分享,研究还不是特别深入,继续努力。
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计