在之前的这个系列文章“Solutions:Elastic SIEM - 适用于家庭和企业的安全防护 ( 三)”,我们讲到了 SIEM 的 detections。在今天的这篇文章中,我们来讲述一下如何来创建一个rule。简单地说 rule 定期运行,并在指定的索引中搜索符合其条件的文档。
注意:针对 Load Elastic prebuilt rules 及 Create new rule,你必须启动 https 配置。详细请参阅我的文章 “Elastic:为Elasticsearch 启动 https 访问”。 或者阅读另外一篇文章 “Security:如何安装 Elastic SIEM 和 EDR”。
我们在 Kibana 中的 SIEM 里打开我们的 Detection tab,我们可以看到:
我们可以点击 Load prebuilt detection rules 来装载在 Elastic 预先设置好的检测规则。如果你已经加载这些规则,那么你会看到如下的画面:
在它的旁边,我们可以看到一个叫做 Create your own rules 的按钮。这个按钮是用来创建我们自己的规则的。那么我们该如何创建一个规则呢?这些规则到底长的是啥个样子呢?
在今天的教程中,我们将以 winlogbeat 所生产的索引来生产一个可以检测当执行 Windows 命令 “vssadmin delete shadows” 而生产的信号。
我们点击 Create your own rules 按钮:
如上图所示,它首先让我们选择我们所需要的 index pattern。针对我们的情况,我们选择 winlogbeat-*。同时,它需要让我们输入一个 custom query。针对我们的需求,我们需要输入:
event.action:"Process Create (rule: ProcessCreate)" and process.name:"vssadmin.exe" and process.args:("delete" and "shadows")
填完后的情况是:
event.action:"Process Create (rule: ProcessCreate)" and process.name:"vssadmin.exe" and process.args:("delete" and "shadows")
我们点击 Contiue 按钮:
按照上面的要求我们填入我们需要的信息,同时我们也设置这个事件的严重程度及 Risk score。等我们配置完后,我们点击 Continue 按钮:
在上面我们可以看出来这个 rule 的总体情况。在这里我们可以配置这个 rule 的运行间隔。等我们配置完后,我们点击 Create & activate rule 按钮:
等过一段时间过后,我们可以看到我们的状态显示 succeeded,表明我们的创建是已经成功的。
在我们 Windows 中,我们可以通过 vssadmin 命令来创建一个 shadow,并删除它。那么在 Elastic SIEM 应用中将会看到一个这个事件的 signal 来供我们分析。
使用 API 来创建 rule
除了我们上面讲的利用 Kibana 的界面来创建所需要的rule之外,我们也可以通过接口的方式来创建一个 rule。在下面我们创建一个 rule,检查被 MS office 启动的进程:
POST api/detection_engine/rules
{
"rule_id": "process_started_by_ms_office_program_possible_payload",
"risk_score": 50,
"description": "Process started by MS Office program - possible payload",
"interval": "1h",
"name": "MS Office child process",
"severity": "low",
"tags": [
"child process",
"ms office"
],
"type": "query",
"from": "now-70m",
"query": "process.parent.name:EXCEL.EXE or process.parent.name:MSPUB.EXE or process.parent.name:OUTLOOK.EXE or process.parent.name:POWERPNT.EXE or process.parent.name:VISIO.EXE or process.parent.name:WINWORD.EXE",
"language": "kuery",
"filters": [
{
"query": {
"match": {
"event.action": {
"query": "Process Create (rule: ProcessCreate)",
"type": "phrase"
}
}
}
}
],
"enabled": true
}
为了能够使得我们把上面的 rule 写入到 Kibana 中,我们可以使用 Postman 来完成。如果大家对 Postman 不是很熟悉的话,你可以参考 “Elastic:使用 Postman 来访问 Elastic Stack”。在这里,请注意:上面的接口时针对 Kibana 而不是 Elasticsearch 的。我们不可以在 Kibana 的 Dev tools 中操作,否则它将被当做i ndex 而写入到 Elasticsearch 的存储中。
我们打开 Postman:
我们需要在 body 里输入我们上面的接口的内容:
等我们设置好后,点击 Send 按钮,我们可以看到如下的输出:
{
"created_at": "2020-03-20T03:52:44.335Z",
"updated_at": "2020-03-20T03:52:44.435Z",
"created_by": "elastic",
"description": "Process started by MS Office program - possible payload",
"enabled": true,
"false_positives": [],
"filters": [
{
"query": {
"match": {
"event.action": {
"query": "Process Create (rule: ProcessCreate)",
"type": "phrase"
}
}
}
}
],
"from": "now-70m",
"id": "7b96b5cb-c732-43e5-9b41-44eb27e7f37f",
"immutable": false,
"interval": "1h",
"rule_id": "process_started_by_ms_office_program_possible_payload",
"language": "kuery",
"output_index": ".siem-signals-default",
"max_signals": 100,
"risk_score": 50,
"name": "MS Office child process",
"query": "process.parent.name:EXCEL.EXE or process.parent.name:MSPUB.EXE or process.parent.name:OUTLOOK.EXE or process.parent.name:POWERPNT.EXE or process.parent.name:VISIO.EXE or process.parent.name:WINWORD.EXE",
"references": [],
"severity": "low",
"updated_by": "elastic",
"tags": [
"child process",
"ms office"
],
"to": "now",
"type": "query",
"threat": [],
"version": 1
}
上面显示我们的调用是成功的。这个时候,我们打开 Kibana SIEM 应用的 Detections,我们可以看到如下的画面:
在上面我们可以看到 MS Office child process 规则已经被成功创建了。
你可以继续阅读这个系里的最后一篇文章 “Solutions:Elastic SIEM - 适用于家庭和企业的安全防护 ( 五)”
参考:
【1】https://www.elastic.co/guide/en/siem/guide/current/rules-ui-create.html
【2】https://www.elastic.co/guide/en/siem/guide/current/rules-api-create.html#rules-api-create
【3】https://www.elastic.co/guide/en/siem/guide/master/rule-api-overview.html
【4】https://www.elastic.co/guide/en/elasticsearch/reference/current/get-started-enable-security.html