Creates a TheHive case when monitored artifacts complete with results.
Adds the ClientId, FlowId, and FQDN as tags to the case. Adds FQDN as an observable.
The artifact uses Server Metadata to store credentials, instead of storing these directly in the artifact.
name: Server.Alerts.TheHive.Case
description: |
Creates a TheHive case when monitored artifacts complete with results.
Adds the ClientId, FlowId, and FQDN as tags to the case. Adds FQDN as an
observable.
The artifact uses Server Metadata to store credentials, instead of storing
these directly in the artifact.
type: SERVER_EVENT
author: Wes Lambert - @therealwlambert
reference:
- https://gist.github.com/scudette/3a32abd19350c8fe3368661c4278869d
parameters:
- name: TheHiveURL
default: https://mythehive
- name: VeloServerURL
default: https://myvelo
- name: ArtifactsToAlertOn
default: .
type: regex
- name: DisableSSLVerify
type: bool
default: true
sources:
- query: |
LET thehive_key = if(
condition=TheHiveKey,
then=TheHiveKey,
else=server_metadata().TheHiveKey)
LET flow_info = SELECT timestamp(epoch=Timestamp) AS Timestamp,
client_info(client_id=ClientId).os_info.fqdn AS FQDN,
ClientId, FlowId, Flow.artifacts_with_results[0] AS FlowResults
FROM watch_monitoring(artifact="System.Flow.Completion")
WHERE Flow.artifacts_with_results =~ ArtifactsToAlertOn
LET cases = SELECT * FROM foreach(row=flow_info,
query={
SELECT FQDN, parse_json(data=Content)._id AS CaseID FROM http_client(
data=serialize(item=dict(
title=format(format="Hit on %v for %v", args=[FlowResults, FQDN]), description=format(format="ClientId: %v\n\nFlowID: %v\n\nURL: %v//app/index.html?#/collected/%v/%v", args=[ClientId, FlowId, VeloServerURL, ClientId, FlowId,]), tags=[ClientId,FlowId, FQDN]), format="json"),
headers=dict(`Content-Type`="application/json", `Authorization`=format(format="Bearer %v", args=[thehive_key])),
disable_ssl_security=DisableSSLVerify,
method="POST",
url=format(format="%v/api/case", args=[TheHiveURL]))
})
SELECT * from foreach(row=cases,
query={
SELECT * FROM http_client(
data=serialize(item=dict(data=FQDN, dataType="fqdn", message=FQDN)),
headers=dict(`Content-Type`="application/json", `Authorization`=format(format="Bearer %v", args=[thehive_key])),
disable_ssl_security=DisableSSLVerify,
method="POST",
url=format(format="%v/api/case/%v/artifact", args=[TheHiveURL, CaseID]))
})