对于 SIEM 平台来说,好用的查询方式非常重要。之前有体验基于 ELK 搭建的平台,在 kibana 上面是可以通过一些 filter 来做一些过滤并且是支持 lucene 的语法,包括一些简单的逻辑查询以及 wildquery 等等。但是的确是在做一些汇聚之类时不是很方便,一般需要通过 json 来创建查询语句。后来好像也有转 SQL 之类的插件,但我也没有使用过,总的来说体验比较一般。

Qradar

Qradar 是一款比较成熟的商业 SIEM 平台(尽管他们的 BUG 一大堆,但架不住别的更差啊),基本上也是属于业界 TOP 5。商业产品的好处就是不用自己太折腾,搞搞就可以用,缺点就是贵。AQL(Ariel Query Language)是 Qradar 中的一种查询语言,与普通的 SQL 的语句类似,但是阉割了一些高级功能的基础上增加了一些基本功能。以下是 AQL 的基本流程:

可以看出 AQL 是一种非常类似于 SQL 的语言,所以基本上你用过 SQL 学会 AQL 也就分分钟的事情,而且你也不会拿它去做特别复杂的嵌套查询(因为它也不支持。。。)

Tips

虽然 AQL 终于让我们有枪可以搞一搞了,但是还是有一些地方值得吐槽的地方。第一就是很多 ID 不知道其具体的映射,就比如我们想查询一些事件的名称或者规则的名称,AQL 是不存在字段名是事件名称或者规则名称的。不过你可以通过函数来进行转换,比如使用 QIDNAME(qid) 来获取事件名称, RULENAME(123) 来获取规则名称。你没办法知道事件名称或者规则名称到底是对应什么 ID,目前我用的办法就是先去 IBM Develop API 里面先去查询。第二,AQL 查询的结果我发现有某个规则的查询结果和用 filter 查询的结果不一致,不知道这是不是特例。还有其他的,想到再说。

下面就是我在使用过程中一些小经验:

引号的使用

在 AQL 中,单引号和双引号的使用是有区别的。单引号一般可以表示字符串或者作为字段的别名,如果你的字段包含了空格,那么你必须使用单引号。双引号一般用来表示自定义属性的名称。还有一个值得注意的地方就是,当你在使用 WHERE,GROUP BY,ORDER BY 的时候,你必须要使用双引号来使用别名,而不是单引号,是不是有点绕。其实有个好的方法就是不要使用单引号了,直接使用帕斯卡命名或者使用下划线连接,比如 EventName 或者 Event_Name,其实你自己想怎么命名都可以啦。

Rule 的匹配

Qradar 里面有很多内置的规则并且你能够自己定义特定的规则。其实对于某个 rule 来说,也是有特定的 rule ID 的,即 creeventlist,如果某个 rule 的 creeventlist 是 123,那么我们可以通过以下语句来找到这个 rule:

SELECT RULENAME(creaeventlist) FROM events
WHERE creeventlist = 123

场景案例

根据我的理解,Qradar 所有的查询归根到底应该都是通过 AQL 来实现的,但是官方并没有提供将普通的查询转换成 AQL 语句的工具。之前我有一些场景想通过 AQL 来实现,但是 IBM 的人说无法实现(此处应有吐槽),后来还是得靠自己来实现。

特定 IP 特定事件发生的时间大于特定的值

可能听起来有那么一点点绕,但这个场景还是蛮有必要的。因为经常有一些安全事件很长时间都没有及时处置,那我们如何将这些事件捞出来呢。即该事件(sourceip 指定)的第一次出现的时间和最近出现一次的时间的时间间隔大于特定的指,那么我们就可以通过这样的语句来把这样的事件找出来了。

SELECT QIDNAME(qid) AS EventName, MIN(starttime) AS FirstTime, MAX(starttime) AS LastTime
FROM events
WHERE LastTime - FirstTime > xxxx
GROUP BY sourceip,EventName

查询当前月份的事件

IBM 与日期相关的函数主要就是4个,即 LAST,START,STOP,NOW。日期实现的逻辑太单一了,你只能指定具体的起始时间以及终止时间或者是 LAST1DAYS 这种。但是有一个非常普遍的场景就是我需要知道当前月份的情况,这就无法通过这几个关键词直接来实现,因为 CurrentMonthIS NOT LAST30DAYS.那么我们需要介绍一个函数 DATEFORMAT,通过这个函数我们可以将时间转化为字符串类型,结合 NOW 以及 START,STOP 函数,既可以实现。

那么我么就可以写出函数:

CONCAT(SUBSTRING(DATEFORMAT(NOW(), 'yyyy-MM-dd'), 0, 8), 01 00:00)

将这个时间作为起始时间,那么我们就可以获取当前月的事件了。其实,按照这种思路,理论上你可以获取任意时间间隔。

总结

以上,即是我在使用 AQL 过程中一点小小的经验。虽然 AQL 槽点满满,但总的来说对于大数据的分析的确提供了不少便利,尤其是通过 Pulse 我们可以实现比 DashBoard 优美并且灵活的可视化 DashBoard。建议在使用过程中可以多看看官方的文档,以上很多解决方案在官方文档也都有提及。

可以扫描二维码或者搜索 mad_coder 关注微信公众号,点击阅读原文可以获取链接版原文。

Qradar SIEM--查询利器 AQL的更多相关文章

  1. Spotlight--你不得不用的Mac查询利器

    世界上有两种Mac用户:一种是经常使用Spotlight的,另一种是忽略Spotlight的.如果你是第二种用户,那么你需要改变.Mac所有方面的使用场景,都会随着Spotlight而变得更快.你只需 ...

  2. 比hive快10倍的大数据查询利器presto部署

    目前最流行的大数据查询引擎非hive莫属,它是基于MR的类SQL查询工具,会把输入的查询SQL解释为MapReduce,能极大的降低使用大数据查询的门槛, 让一般的业务人员也可以直接对大数据进行查询. ...

  3. SQL从零到迅速精通【查询利器】

    1.[列选取]从fruits表中获取f_name和f_price两列,T-SQL语句如下. SELECT f_name,f_price FROM fruits; 2.[去重]查询fruits表中s_i ...

  4. 几家SIEM

    HP Arcsight Imperva is a HP Business Partner. HP is the world's largest IT company, providing infras ...

  5. SSD报告 - QRadar远程命令执行

    SSD报告 - QRadar远程命令执行 漏洞摘要 QRadar中的多个漏洞允许远程未经身份验证的攻击者使产品执行任意命令.每个漏洞本身并不像链接那么强大 - 这允许用户从未经身份验证的访问更改为经过 ...

  6. Aerospike系列:4:简单的增删改查aql

    [root@localhost bin]# aql --help Usage: aql OPTIONS OPTIONS -h <host> The hostname to the serv ...

  7. Elasticsearch系列---搜索执行过程及scroll游标查询

    概要 本篇主要介绍一下分布式环境中搜索的两阶段执行过程. 两阶段搜索过程 回顾我们之前的CRUD操作,因为只对单个文档进行处理,文档的唯一性很容易确定,并且很容易知道是此文档在哪个node,哪个sha ...

  8. Magic Quadrant for Security Information and Event Management

    https://www.gartner.com/doc/reprints?id=1-4LC8PAW&ct=171130&st=sb Summary Security and risk ...

  9. presto调研和json解析函数的使用

    presto简单介绍 presto是一个分布式的sql交互式查询引擎.可以达到hive查询效率的5到10倍.支持多种数据源的秒级查询. presto是基于内存查询的,这也是它为什么查询快的原因.除了基 ...

随机推荐

  1. tf.InteractiveSession() 和 tf.Session() 的区别

    tf.InteractiveSession():它能让你在运行图的时候,插入一些计算图,这些计算图是由某些操作(operations)构成的.这对于工作在交互式环境中的人们来说非常便利,比如使用IPy ...

  2. 小程序的image图片显示

    最近接触到了一点小程序的东西,跟我们平常的HTML还真不太一样,这里我先大概讲一下图片的显示问题, 小程序的图片用的是<image><image/>标签,他默认的大小是宽300 ...

  3. 《Effective Java》读书笔记 - 9.异常

    Chapter 9 Exceptions Item 57: Use exceptions only for exceptional conditions 这条item的意思就是,千万不要用except ...

  4. Java中String类中常用的方法

    1.字符串与字符数组的转换 用toCharArray()方法将字符串变为字符数组 String str = "abcdef"; char c[] = str.tocharArray ...

  5. C++嵌入lua

    需要在C++程序里面嵌入lua 下面是代码,怕忘记,记录一下 #include <stdio.h> #include <stdlib.h> extern "C&quo ...

  6. ES6 暂时性死区

    在ES6中,声明变量新增了两个关键字:let命令和const命令 如果在区块中存在let或者const命令时,任何变量都必须在声明之前使用,无论是区块外部的全局变量或者是区块内部的变量: /* 区块外 ...

  7. 【Centos7】 中使用Supervisor守护进程

    原文出处: Centos7 中使用Supervisor守护进程 配置supervisor实现进程守护 1.安装supervisor yum install Supervisor   2.启动服务 su ...

  8. Openstack 实现技术分解 (4) 通用技术 — TaskFlow

    目录 目录 前文列表 扩展阅读 简介 基本概念 实现样例 最后 前文列表 Openstack 实现技术分解 (1) 开发环境 - Devstack 部署案例详解 Openstack 实现技术分解 (2 ...

  9. 【汇总】Wireshark 过滤规则

    作者:Bay0net 时间:2019-07-01 14:20:09 更新: 介绍:记录使用过的 wireshark 过滤规则 0x01. 使用介绍 抓包采用 wireshark,提取特征时,要对 se ...

  10. 请求转发、包含、重定向 getAttribute 和 setAttribute POST和GET编码

     一.请求转发  请求包含  请求重定向 Demo5.java   注意:doPost()方法中别忘写doGet(request, response); public void doGet(HttpS ...