在之前的这个系列文章“Solutions:Elastic SIEM - 适用于家庭和企业的安全防护 ( 三)”,我们讲到了SIEM的detections。在今天的这篇文章中,我们来讲述一下如何来创建一个rule。简单地说rule定期运行,并在指定的索引中搜索符合其条件的文档。
注意:针对Load Elastic prebuilt rules及Create new rule,你必须启动https配置。详细请参阅我的文章“Elastic:为Elasticsearch启动https访问”。
我们在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中操作,否则它将被当做index而写入到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 规则已经被成功创建了。
参考:
【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