文章目录

  • 简化复杂的查询
  • 设计一种语言
  • 应用EQL
    • IOC 检索
    • 时间窗口搜索
    • 管道处理
    • 事件序列
    • 进程祖系 (PROCESS ANCESTRY)
    • 函数调用
    • 阀值排序

随着网络安全攻防双方的技术不断升级,敌方活动不再单纯地用静态的 “入侵指标”(IOCs)来描述。仅仅关注IOCs会导致检测变得脆弱,而且在发现未知攻击时效果不佳,因为对手可以通过简单的修改工具包以轻松逃避基于指标的检测。相反,安全从业者需要基于恶意行为的持续检测。MITRE ATT&CK框架可以帮助从业者将其防御传统技术集中在这些恶意行为上。通过将对手的传统技术和行为组织成一个战术和技术矩阵,ATT&CKTM 是超越IOCs并向基于行为的检测发展的理想选择。

有了一个全面而强大的对抗行为模型,下一步就是建立一个支持捕获和实时检测的事件收集架构,以及一种促进可用性和性能的查询语言。我们创建了用于捕获和实时检测的事件查询语言(EQL),其简单的语法可以帮助从业者表达复杂的查询,而没有很高的入门门槛。本文将讨论 EQL 背后的动机,它如何融入 Elastic Security 整体架构,并提供几个 EQL 的实际案例,以展示其推动捕获和实时检测对抗行为的能力。

简化复杂的查询

许多数据库和搜索平台繁琐且不直观,语法复杂,进入门槛高。检测可疑行为需要对多个数据源进行分析,并具备无缝的数据收集、汇总和分析能力。搜索和探索数据应该是直观和反复的,并能灵活地对问题进行微调,并对可疑行为进行精确定位。

在Elastic Security 平台中,我们创建了克服这些数据分析和检测挑战的功能。我们的目标是增强用户的能力,而不是让他们感到无所适从。我们的解决方案,EQL,平衡了可用性,同时大大扩展了狩猎和检测的能力。它可以用来回答复杂的问题,而不会给用户带来联接(join)、事务(transaction)、聚合(aggregation)或状态管理等内部工作的负担,这些工作伴随着许多数据库解决方案和分析框架。EQL已经被证明是有效的,我们很高兴将它介绍给社区,以推动实时检测。

设计一种语言

我们希望确保EQL在为大家所熟悉的语法中支持复杂的问题,以限制学习曲线并最大化功能。EQL提供了抽象,允许用户执行有状态的查询,识别事件序列,跟踪进程的父子关系,跨多个数据源的连接,并执行堆叠。在设计EQL时,我们首先关注的是暴露底层数据模式。每个收集到的事件都由一个事件类型和一组属性组成。例如,一个进程事件(process event)有诸如 process identifier (PID), name, time, command line, parent等字段,还有一个子类型来区分创建和终止事件。在最基本的层面上,事件查询根据一些布尔逻辑将事件类型与条件匹配,以比较字段。where关键字用于在查询中把这两者联系起来。条件表达式与布尔运算符(andornot)、比较运算符(<<===!=>=>in)以及函数调用相结合。数字和字符串的表达很容易,并且支持通配符(*)。所有这些都导致了一种简单的语法,感觉应该和Python类似。

在搜索单个事件时,用EQL可读性强、精简的语法,可以很容易地表达很多问题。例如,这个问题:

svchost.exe进程的目的端口为1337,IP域为192.168.0.0/16或172.16.0.0/16时,有哪些独特的出站IPv4网络目的地?

用EQL表示:

network where  event_subtype_full == "ipv4_connection_attempt_event" and  process_name == "svchost.exe" and  destination_port == 1337 and (destination_address == "192.168.*" or destination_address == "172.16.*")
| unique destination_address destination_port

EQL支持搜索多个相关事件,这些事件与事件查询序列链在一起,并使用类似于Unix管道(unix-pipes | )的后处理。安全分析人员可以组装这些组件来定义简单或复杂的行为,而不需要了解底层的机制。这些构件被组装起来,在 Elastic Security 平台中构建强大的捕获分析和实时检测。

应用EQL

在 Elastic Security 平台上,当输入有效的EQL时,查询会在数据节点上编译,执行查询并返回结果。这一切都快速、并行地发生,让用户立即看到结果。我们来看看EQL在以下场景中是如何表达的。

IOC 检索

IOC搜索并不是威胁捕获,但它是很多组织日常安全运营的重要一环。Elastic Security 用户可以用EQL表达简单的IOC搜索。

process where sha256=="551d62be381a429bb594c263fc01e8cc9f80bda97ac3787244ef16e3b0c05589"

时间窗口搜索

在事件响应过程中,有很多时候,了解特定时间发生的所有事件是很有用的。使用一种名为any的特殊事件类型,针对所有事件进行匹配,EQL可以匹配五分钟窗口内的每个事件。

在2018年4月1日中午12点UTC到12点05分UTC之间发生了什么事件?

any where timestamp_utc >= "2018-04-01 12:00:0Z" and timestamp_utc <= "2018-04-01 12:05:0Z"

管道处理

EQL 提供了数据管道,它类似于unix管道,但数据管道不是操作输入行,而是接收事件流,执行处理,并输出另一个事件流。支持的管道使您能够:

  • 统计某事发生的次数
| count <expr>,<expr>,...
  • 输出符合布尔条件的事件
| filter <condition>
  • 输出前N个事件
| head <number>
  • 按升序输出事件
| sort <expr>, <expr>, …
  • 输出最近的N个事件
| tail <number>
  • 删除共享属性的重复内容
| unique <expr>,<expr>,...

举例:

哪些用户运行了多个不同的命令?

join by user_name[process where process_name=="whoami.exe"][process where process_name=="hostname.exe"][process where process_name=="tasklist.exe"][process where process_name=="ipconfig.exe"][process where process_name=="net.exe"]
| unique user_name

5月1日之后,哪些网络目的地最先出现?

network where event_subtype_full=="ipv4_connection_attempt_event"
| unique destination_address, destination_port
| filter timestamp_utc >= "2018-05-01"

事件序列

许多行为并不是原子的,而是跨越了多个事件。为了定义一系列有序的事件,大多数查询语言需要精心的连接或事务,但EQL提供了一个Sequence 结构,这也是EQL区别于Elasticsearch DSL最主要的地方。Sequence中的每个item都由方括号[<event query>]之间的事件查询来描述。Sequence可以选择用maxspan=<duration>的语法限制在一个时间范围内,或者用直到[<event query>]的语法过期,或者用by关键字匹配值。

非系统用户创建了什么文件,先是作为非系统进程运行,后来又在一小时内作为系统级进程运行?

sequence with maxspan=1h[file where event_subtype_full=="file_create_event" and user_name!="SYSTEM"] by
file_path[process where user_name!="SYSTEM"] by process_path[process where user_name=="SYSTEM"] by process_path

进程祖系 (PROCESS ANCESTRY)

该语言甚至可以表达进程祖先的关系。这可以用来寻找可能具有正常的父子关系,但以可疑的方式链在一起的异常情况。要检查一个进程是否有某个祖先,可以使用语法descendant of [<ancestor query>]

Word的后继进程是否在system32中创建或修改过任何可执行文件?

file where file_path=="C:\\Windows\\System32\\*" and file_name=="*.exe" and descendant of [process where process_name=="WINWORD.exe"]

进程祖先关系还支持嵌套和布尔逻辑,便于严格查询。这有助于精确定位特定的活动并过滤掉噪音。

net.exe是否从PowerShell实例中运行,该实例进行了网络活动,而不是NoisyService.exe的后裔?

process where process_name=="net.exe" and descendant of [network where process_name=="powershell.exe" andnot descendant of [process where process_name == "NoisyService.exe"]]

函数调用

函数可以通过定义和暴露新的函数来扩展EQL功能,而无需改变任何语法。例如,length()函数对于查找可疑和罕见的PowerShell命令行非常有用。比如:

有哪些独特的长Powershell命令行带有有可疑的参数?

process where process_name in ("powershell.exe", "pwsh.exe") and length(command_line) > 400 and (command_line=="*enc*" or command_line=="*IO.MemoryStream*" or command_line == "*iex*" or command_line=="* -e* *bypass*")
| unique command_line

阀值排序

EQL也可用于执行异常值分析。可以对数据进行排序(sort)和尾部过滤 (tail),因此只返回异常值。通过这种方式构建的搜索,对于一个搜索返回多少结果有一个明确的上限。这意味着使用的带宽更少,不需要事后进行数字计算,筛选结果的时间也更少。换句话说,你不必获取和搜索你不需要的数据。

外发网络连接传输了超过100MB的数据的Top 5?

network where total_out_bytes > 100000000
| sort total_out_bytes
| tail 5

Elastic安全分析新利器 —— Event Query Language (EQL) 介绍相关推荐

  1. 组合式应用新利器?SaaS新时代事件网格如何解决集成标准化问题

    在SaaS新时代下,业务适应性需求引导企业转向支持快速.安全和高效应用变化的技术架构.组合式应用作为加速数字化的关键技术,是Gartner提出的在2022年重要战略技术之一,它由以业务为中心的模块化组 ...

  2. 组合式应用新利器,事件网格“出圈”

    作者 | Alex Luo.钟鸣拓.吕广林 出品 | CSDN(ID:CSDNnews) 在SaaS新时代下,业务适应性需求引导企业向快速.安全和高效应用的技术架构转变.组合式应用作为加速数字化的关键 ...

  3. SparkR:数据科学家的新利器

    from:http://www.csdn.net/article/2015-10-23/2826010 摘要:R是数据科学家中最流行的编程语言和环境之一,在Spark中加入对R的支持是社区中较受关注的 ...

  4. 07--MySQL自学教程:DQL(Data Query Language:数据库查询语言)简介、基础查询、条件查询、模糊查询以及排序(一)

    1. DQL(Data Query Language:数据库查询语言)知识点概览 DQL(Data Query Language:数据库查询语言): 用来查询数据(记录),不会对数据进行改变,而是让数 ...

  5. 结构化查询语言(Structured Query Language)

    2019独角兽企业重金招聘Python工程师标准>>> 结构化查询语言(Structured Query Language)简称SQL(发音:/ˈɛs kjuː ˈɛl/ " ...

  6. 新基建新动力已来,RPA 成为数字化转型新利器!

    被首次写进政府工作报告的"新基建",无疑成为了当下最强劲的产业风口之一.随着云计算.人工智能.5G.物联网等数字化技术不断赋能产业转型,人们对数字基础设施的需求更加迫切," ...

  7. Kibana:Kibana Query Language - KQL

    Kibana Query Language (KQL) 是一种使用自由文本搜索或基于字段的搜索过滤 Elasticsearch 数据的简单语法. KQL 仅用于过滤数据,并没有对数据进行排序或聚合的作 ...

  8. M001: MongoDB Basics chapter 2 The MongoDB Query Language + Atlas学习记录

    M001: MongoDB Basics chapter 2 The MongoDB Query Language + Atlas学习记录 运行环境 操作系统:windows 10 家庭中文版 Mon ...

  9. SQL:结构化查询语言(Structured Query Language)。

    SQL:结构化查询语言(Structured Query Language). 是关系型数据库标准语言. 特点:简单,灵活,功能强大. -------------------------------- ...

最新文章

  1. C/C++实现如下 根据Merge Sort原理, 自己实现的归并排序算法+详细注释+代码(C#,C/C++)...
  2. Web前端饱和了?还能学Web前端吗?
  3. 从后端获取数据然后在页面处理技巧
  4. 深入了解EntityFramework——Lazy Loading与Eager Loading
  5. E9启动后无法打印日志
  6. [面试] C/C++ 语法(七)—— C++ 类型转换
  7. android自定义多按钮点击事件监听事件吗,安卓(Android)动态创建多个按钮并添加监听事件...
  8. 工作六年后,对软件开发的一些新观点
  9. vba教程视频,VBA(基础篇+提高篇+实战篇)Excel数据处理教学视频
  10. 吴昂雄回应Arm中国控制权争夺:Arm罢免我无效
  11. python实现zip分卷压缩与解压
  12. python pipe_python pipe模块用法
  13. MzTreeView节点树(梅花雪)
  14. C++11版本后的一写新语法及使用方法for、vector、map
  15. 开源项目——小Q聊天机器人V1.4
  16. Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement
  17. (转载)最值得看的一维傅里叶分析(时域如何转频域)
  18. 超过100w条数据表的分页查询优化
  19. 工业视觉检测入门——如何设计一个合适的检测方案?(需求分析+光学设计+检测算法+UI交互+后端数据)
  20. Unity优化 详谈GetComponent

热门文章

  1. VisualStudio2019,基于.NET Framework的单元测试
  2. 趣题:奇怪的自然数集划分
  3. 微机原理及故障的维修(BIOS)
  4. 【每日一个GitHub项目】GitHub中文排行榜
  5. 全景软件:探索数据基因,提升企业数据效能
  6. 新博客, 新方向, 新动力, 心坚持
  7. Jira的安装、使用与集成
  8. 盘一盘 Python 特别篇 19 - 天数计数|年限
  9. r8169驱动源码阅读记录
  10. 微服务网关soul,这篇值得你拥有