diff --git a/pillar/data/addtotab.sh b/pillar/data/addtotab.sh
old mode 100755
new mode 100644
diff --git a/pillar/firewall/addfirewall.sh b/pillar/firewall/addfirewall.sh
old mode 100755
new mode 100644
diff --git a/pillar/masters/example.sls b/pillar/masters/example.sls
new file mode 100644
index 000000000..28c9ed139
--- /dev/null
+++ b/pillar/masters/example.sls
@@ -0,0 +1,10 @@
+# Example Pillar file for a master
+master:
+ esaccessip: 127.0.0.1
+ esheap: CHANGEME
+ esclustername: {{ grains.host }}
+ freq: 0
+ domainstats: 0
+ lsheap: 1500m
+ lsaccessip: 127.0.0.1
+ elastalert: 1
\ No newline at end of file
diff --git a/pillar/nodes/example.sls b/pillar/nodes/example.sls
new file mode 100644
index 000000000..5516e7052
--- /dev/null
+++ b/pillar/nodes/example.sls
@@ -0,0 +1,5 @@
+# Example Pillar file for a sensor
+node:
+ ls_heapsize: CHANGEME
+ es_heapsize: CHANGEME
+ node_type: CHANGEME
diff --git a/pillar/sensors/example.sls b/pillar/sensors/example.sls
new file mode 100644
index 000000000..753acf1de
--- /dev/null
+++ b/pillar/sensors/example.sls
@@ -0,0 +1,14 @@
+# Example Pillar file for a sensor
+sensor:
+ interface: CHANGEME
+ bro_pins:
+ - 1
+ - 2
+ - 3
+ - 4
+ brobpf:
+ pcapbpf:
+ nidsbpf:
+ s3bucket:
+ s3key:
+
diff --git a/salt/auth/init.sls b/salt/auth/init.sls
new file mode 100644
index 000000000..abbe514d3
--- /dev/null
+++ b/salt/auth/init.sls
@@ -0,0 +1,30 @@
+{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.1.4') %}
+{% set MASTER = salt['grains.get']('master') %}
+
+so-auth-api-dir:
+ file.directory:
+ - name: /opt/so/conf/auth/api
+ - user: 939
+ - group: 939
+ - makedirs: True
+
+so-auth-api:
+ docker_container.running:
+ - image: {{ MASTER }}:5000/soshybridhunter/so-auth-api:{{ VERSION }}
+ - hostname: so-auth-api
+ - name: so-auth-api
+ - environment:
+ - BASE_PATH: "/so-auth/api"
+ - AUTH_TOKEN_TIMEOUT: 32400
+ - binds:
+ - /opt/so/conf/auth/api:/data
+ - port_bindings:
+ - 0.0.0.0:5656:5656
+
+so-auth-ui:
+ docker_container.running:
+ - image: {{ MASTER }}:5000/soshybridhunter/so-auth-ui:{{ VERSION }}
+ - hostname: so-auth-ui
+ - name: so-auth-ui
+ - port_bindings:
+ - 0.0.0.0:4242:80
diff --git a/salt/common/grafana/grafana_dashboards/forward_nodes/sensor.json b/salt/common/grafana/grafana_dashboards/forward_nodes/sensor.json
new file mode 100644
index 000000000..8e35246eb
--- /dev/null
+++ b/salt/common/grafana/grafana_dashboards/forward_nodes/sensor.json
@@ -0,0 +1,3937 @@
+{
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": "-- Grafana --",
+ "enable": true,
+ "hide": true,
+ "iconColor": "rgba(0, 211, 255, 1)",
+ "name": "Annotations & Alerts",
+ "type": "dashboard"
+ }
+ ]
+ },
+ "description": "This Dashboard provides a general overview of Sensors",
+ "editable": true,
+ "gnetId": 2381,
+ "graphTooltip": 0,
+ "id": 9,
+ "iteration": 1543542047346,
+ "links": [],
+ "panels": [
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": true,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": true,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 4,
+ "x": 0,
+ "y": 0
+ },
+ "id": 2,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": true,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": true
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "cpu",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "usage_idle"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ },
+ {
+ "params": [
+ "* -1 + 100"
+ ],
+ "type": "math"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "cpu",
+ "operator": "=",
+ "value": "cpu-total"
+ }
+ ]
+ }
+ ],
+ "thresholds": "60,80,90",
+ "title": "{{ SERVERNAME }} - CPU",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": true,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "format": "bytes",
+ "gauge": {
+ "maxValue": "{{ ROOTFS }}",
+ "minValue": 0,
+ "show": true,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 4,
+ "x": 4,
+ "y": 0
+ },
+ "id": 12,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "disk",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "used"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "path",
+ "operator": "=",
+ "value": "/"
+ }
+ ]
+ }
+ ],
+ "thresholds": "{{ ROOTFS * '.80'|float }},{{ ROOTFS * '.90'|float }}",
+ "title": "{{ SERVERNAME }} - Disk Used(/)",
+ "transparent": false,
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": true,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "format": "bytes",
+ "gauge": {
+ "maxValue": "{{ NSMFS }}",
+ "minValue": 0,
+ "show": true,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 4,
+ "x": 8,
+ "y": 0
+ },
+ "id": 31,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": false
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "disk",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "used"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "path",
+ "operator": "=",
+ "value": "/nsm"
+ }
+ ]
+ }
+ ],
+ "thresholds": "{{ NSMFS * '.80'|float }},{{ NSMFS * '.90'|float }}",
+ "title": "{{ SERVERNAME }} - Disk Used(/nsm)",
+ "transparent": false,
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": true,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": true,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 4,
+ "x": 12,
+ "y": 0
+ },
+ "id": 20,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": true
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "brodrop",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "drop"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ },
+ {
+ "params": [
+ "* 100"
+ ],
+ "type": "math"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ }
+ ],
+ "thresholds": "5,10",
+ "title": "{{ SERVERNAME }} -Zeek Packet Loss",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": true,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": true,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 4,
+ "x": 16,
+ "y": 0
+ },
+ "id": 21,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": true
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "suridrop",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "drop"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ },
+ {
+ "params": [
+ "* 100"
+ ],
+ "type": "math"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ }
+ ],
+ "thresholds": "5,10",
+ "title": "{{ SERVERNAME }} - Suricata Packet Loss",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": true,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": true,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 4,
+ "x": 20,
+ "y": 0
+ },
+ "id": 19,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": true
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "stenodrop",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "drop"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ }
+ ],
+ "thresholds": "5,10",
+ "title": "{{ SERVERNAME }} - PCAP Packet Loss",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "aliasColors": {
+ "Interrupt": "#70DBED",
+ "Nice": "#629E51",
+ "SoftIRQ": "#EA6460",
+ "System": "#BF1B00",
+ "User": "#1F78C1",
+ "Wait": "#F2C96D",
+ "cpu.mean": "#629E51"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "fill": 4,
+ "grid": {},
+ "gridPos": {
+ "h": 6,
+ "w": 8,
+ "x": 0,
+ "y": 5
+ },
+ "id": 4,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 2,
+ "links": [],
+ "nullPointMode": "connected",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "alias": "System",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "cpu",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "usage_system"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "cpu",
+ "operator": "=",
+ "value": "cpu-total"
+ }
+ ]
+ },
+ {
+ "alias": "User",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "cpu",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "B",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "usage_user"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "cpu",
+ "operator": "=",
+ "value": "cpu-total"
+ }
+ ]
+ },
+ {
+ "alias": "Nice",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "cpu",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "C",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "usage_nice"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "cpu",
+ "operator": "=",
+ "value": "cpu-total"
+ }
+ ]
+ },
+ {
+ "alias": "Interrupt",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "cpu",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "D",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "usage_irq"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "cpu",
+ "operator": "=",
+ "value": "cpu-total"
+ }
+ ]
+ },
+ {
+ "alias": "Wait",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "cpu",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "E",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "usage_iowait"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "cpu",
+ "operator": "=",
+ "value": "cpu-total"
+ }
+ ]
+ },
+ {
+ "alias": "SoftIRQ",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "cpu",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "F",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "usage_softirq"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "cpu",
+ "operator": "=",
+ "value": "cpu-total"
+ }
+ ]
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeRegions": [],
+ "timeShift": null,
+ "title": "{{ SERVERNAME }} - CPU Usage",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "percent",
+ "label": "Percent(%)",
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": true,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "format": "s",
+ "gauge": {
+ "maxValue": 1209600,
+ "minValue": 0,
+ "show": true,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 4,
+ "x": 8,
+ "y": 5
+ },
+ "id": 22,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": true
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "pcapage",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "seconds"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ }
+ ],
+ "thresholds": "259200,432000",
+ "title": "{{ SERVERNAME }} - PCAP Retention",
+ "type": "singlestat",
+ "valueFontSize": "70%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current",
+ "decimals": 1
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": false,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 4,
+ "x": 12,
+ "y": 5
+ },
+ "id": 26,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": true,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": true
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "docker_container_cpu",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "usage_percent"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ },
+ {
+ "params": [
+ " / {{ CPUS }}"
+ ],
+ "type": "math"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "container_name",
+ "operator": "=",
+ "value": "so-zeek"
+ }
+ ]
+ }
+ ],
+ "thresholds": "",
+ "title": "{{ SERVERNAME }} - Zeek CPU Usage",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": false,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 4,
+ "x": 16,
+ "y": 5
+ },
+ "id": 27,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": true,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": true
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "docker_container_cpu",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "usage_percent"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ },
+ {
+ "params": [
+ " / {{ CPUS }}"
+ ],
+ "type": "math"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "container_name",
+ "operator": "=",
+ "value": "so-suricata"
+ }
+ ]
+ }
+ ],
+ "thresholds": "",
+ "title": "{{ SERVERNAME }} - Suri CPU Usage",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": false,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "format": "percent",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 4,
+ "x": 20,
+ "y": 5
+ },
+ "id": 28,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": true,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": true
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "docker_container_cpu",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "usage_percent"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ },
+ {
+ "params": [
+ " / {{ CPUS }}"
+ ],
+ "type": "math"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "container_name",
+ "operator": "=",
+ "value": "so-steno"
+ }
+ ]
+ }
+ ],
+ "thresholds": "",
+ "title": "{{ SERVERNAME }} - Steno CPU Usage",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": false,
+ "colors": [
+ "rgba(245, 54, 54, 0.9)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(50, 172, 45, 0.97)"
+ ],
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "format": "bits",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 4,
+ "x": 8,
+ "y": 10
+ },
+ "id": 3,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": false,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": true
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "mem",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "active"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ }
+ ],
+ "thresholds": "",
+ "title": "{{ SERVERNAME }} - Memory(Used)",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": false,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "format": "decbytes",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 4,
+ "x": 12,
+ "y": 10
+ },
+ "id": 23,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": true,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": true
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "docker_container_mem",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "usage"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "container_name",
+ "operator": "=",
+ "value": "so-zeek"
+ }
+ ]
+ }
+ ],
+ "thresholds": "",
+ "title": "{{ SERVERNAME }} - Zeek Memory Usage",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": false,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "format": "decbytes",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 4,
+ "x": 16,
+ "y": 10
+ },
+ "id": 24,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": true,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": true
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "docker_container_mem",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "usage"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "container_name",
+ "operator": "=",
+ "value": "so-suricata"
+ }
+ ]
+ }
+ ],
+ "thresholds": "",
+ "title": "{{ SERVERNAME }} - Suri Memory Usage",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "cacheTimeout": null,
+ "colorBackground": false,
+ "colorValue": false,
+ "colors": [
+ "rgba(50, 172, 45, 0.97)",
+ "rgba(237, 129, 40, 0.89)",
+ "rgba(245, 54, 54, 0.9)"
+ ],
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "format": "decbytes",
+ "gauge": {
+ "maxValue": 100,
+ "minValue": 0,
+ "show": false,
+ "thresholdLabels": false,
+ "thresholdMarkers": true
+ },
+ "gridPos": {
+ "h": 5,
+ "w": 4,
+ "x": 20,
+ "y": 10
+ },
+ "id": 25,
+ "interval": null,
+ "links": [],
+ "mappingType": 1,
+ "mappingTypes": [
+ {
+ "name": "value to text",
+ "value": 1
+ },
+ {
+ "name": "range to text",
+ "value": 2
+ }
+ ],
+ "maxDataPoints": 100,
+ "nullPointMode": "connected",
+ "nullText": null,
+ "postfix": "",
+ "postfixFontSize": "50%",
+ "prefix": "",
+ "prefixFontSize": "50%",
+ "rangeMaps": [
+ {
+ "from": "null",
+ "text": "N/A",
+ "to": "null"
+ }
+ ],
+ "sparkline": {
+ "fillColor": "rgba(31, 118, 189, 0.18)",
+ "full": true,
+ "lineColor": "rgb(31, 120, 193)",
+ "show": true
+ },
+ "tableColumn": "",
+ "targets": [
+ {
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "docker_container_mem",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "usage"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "container_name",
+ "operator": "=",
+ "value": "so-steno"
+ }
+ ]
+ }
+ ],
+ "thresholds": "",
+ "title": "{{ SERVERNAME }} - Steno Memory Usage",
+ "type": "singlestat",
+ "valueFontSize": "80%",
+ "valueMaps": [
+ {
+ "op": "=",
+ "text": "N/A",
+ "value": "null"
+ }
+ ],
+ "valueName": "current"
+ },
+ {
+ "aliasColors": {
+ "Buffered": "#6ED0E0",
+ "Cached": "#F9934E",
+ "Free": "#629E51",
+ "Used": "#58140C"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "InfluxDB",
+ "decimals": null,
+ "editable": true,
+ "error": false,
+ "fill": 6,
+ "grid": {},
+ "gridPos": {
+ "h": 10,
+ "w": 8,
+ "x": 0,
+ "y": 11
+ },
+ "id": 5,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "hideEmpty": false,
+ "hideZero": false,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 0,
+ "links": [],
+ "nullPointMode": "connected",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "alias": "Used",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "mem",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "used"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ },
+ {
+ "alias": "Buffered",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "mem",
+ "policy": "default",
+ "refId": "B",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "buffered"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ },
+ {
+ "alias": "Cached",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "mem",
+ "policy": "default",
+ "refId": "C",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "cached"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ },
+ {
+ "alias": "Free",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "mem",
+ "policy": "default",
+ "refId": "D",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "free"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeRegions": [],
+ "timeShift": null,
+ "title": "{{ SERVERNAME }} - Memory",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "individual"
+ },
+ "transparent": false,
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "Bytes",
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "aliasColors": {
+ "InBound": "#629E51",
+ "OutBound": "#5195CE",
+ "net.derivative": "#1F78C1"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "fill": 1,
+ "grid": {},
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 8,
+ "y": 15
+ },
+ "id": 18,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 2,
+ "links": [],
+ "nullPointMode": "connected",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "alias": "InBound",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "net",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "query": "SELECT 8 * derivative(mean(\"bytes_recv\"),1s) FROM \"net\" WHERE \"host\" = 'JumpHost' AND \"interface\" = 'eth0' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "bytes_recv"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ },
+ {
+ "params": [
+ "1s"
+ ],
+ "type": "derivative"
+ },
+ {
+ "params": [
+ "*8"
+ ],
+ "type": "math"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "interface",
+ "operator": "=",
+ "value": "{{ MONINT }}"
+ }
+ ]
+ },
+ {
+ "alias": "OutBound",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "net",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "query": "SELECT 8 * derivative(mean(\"bytes_sent\"),1s) FROM \"net\" WHERE \"host\" = 'JumpHost' AND \"interface\" = 'eth0' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "B",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "bytes_sent"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ },
+ {
+ "params": [
+ "1s"
+ ],
+ "type": "derivative"
+ },
+ {
+ "params": [
+ "*8"
+ ],
+ "type": "math"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "interface",
+ "operator": "=",
+ "value": "{{ MONINT }}"
+ }
+ ]
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeRegions": [],
+ "timeShift": null,
+ "title": "{{ SERVERNAME }} - Monitor Traffic",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bps",
+ "label": "Bits/Sec",
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "fill": 1,
+ "grid": {},
+ "gridPos": {
+ "h": 6,
+ "w": 8,
+ "x": 16,
+ "y": 15
+ },
+ "id": 13,
+ "legend": {
+ "avg": false,
+ "current": true,
+ "max": false,
+ "min": false,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 2,
+ "links": [],
+ "nullPointMode": "connected",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "alias": "Read",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "diskio",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "read_bytes"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ },
+ {
+ "params": [],
+ "type": "difference"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ },
+ {
+ "alias": "Write",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "diskio",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "refId": "B",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "write_bytes"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ },
+ {
+ "params": [],
+ "type": "difference"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeRegions": [],
+ "timeShift": null,
+ "title": "{{ SERVERNAME }} - Disk I/O",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bytes",
+ "label": "",
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "aliasColors": {
+ "1 Minute Average": "#EAB839",
+ "15 Minute Average": "#BF1B00",
+ "5 Minute Average": "#E0752D"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "fill": 1,
+ "grid": {},
+ "gridPos": {
+ "h": 8,
+ "w": 8,
+ "x": 0,
+ "y": 21
+ },
+ "id": 6,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 2,
+ "links": [],
+ "nullPointMode": "connected",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "alias": "1 Minute Average",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "system",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "load1"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ },
+ {
+ "alias": "5 Minute Average",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "system",
+ "policy": "default",
+ "refId": "B",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "load5"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ },
+ {
+ "alias": "15 Minute Average",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "system",
+ "policy": "default",
+ "refId": "C",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "load15"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeRegions": [],
+ "timeShift": null,
+ "title": "{{ SERVERNAME }} - Load Average",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "aliasColors": {
+ "Blocked": "#BF1B00",
+ "Running": "#7EB26D"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "fill": 7,
+ "grid": {},
+ "gridPos": {
+ "h": 8,
+ "w": 8,
+ "x": 16,
+ "y": 21
+ },
+ "id": 14,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 0,
+ "links": [],
+ "nullPointMode": "connected",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": true,
+ "steppedLine": false,
+ "targets": [
+ {
+ "alias": "Blocked",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "hide": false,
+ "measurement": "processes",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "blocked"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ },
+ {
+ "alias": "Running",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "processes",
+ "policy": "default",
+ "refId": "B",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "running"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ },
+ {
+ "alias": "Sleep",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "processes",
+ "policy": "default",
+ "refId": "C",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "sleeping"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeRegions": [],
+ "timeShift": null,
+ "title": "{{ SERVERNAME }} - Processes",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "aliasColors": {
+ "InBound": "#629E51",
+ "OutBound": "#5195CE",
+ "net.derivative": "#1F78C1"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "fill": 1,
+ "grid": {},
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 8,
+ "y": 22
+ },
+ "id": 10,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 2,
+ "links": [],
+ "nullPointMode": "connected",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "alias": "InBound",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "net",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "query": "SELECT 8 * derivative(mean(\"bytes_recv\"),1s) FROM \"net\" WHERE \"host\" = 'JumpHost' AND \"interface\" = 'eth0' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "bytes_recv"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ },
+ {
+ "params": [
+ "1s"
+ ],
+ "type": "derivative"
+ },
+ {
+ "params": [
+ "*8"
+ ],
+ "type": "math"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "interface",
+ "operator": "=",
+ "value": "{{ MANINT }}"
+ }
+ ]
+ },
+ {
+ "alias": "OutBound",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "net",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "query": "SELECT 8 * derivative(mean(\"bytes_sent\"),1s) FROM \"net\" WHERE \"host\" = 'JumpHost' AND \"interface\" = 'eth0' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "B",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "bytes_sent"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ },
+ {
+ "params": [
+ "1s"
+ ],
+ "type": "derivative"
+ },
+ {
+ "params": [
+ "*8"
+ ],
+ "type": "math"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "interface",
+ "operator": "=",
+ "value": "{{ MANINT }}"
+ }
+ ]
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeRegions": [],
+ "timeShift": null,
+ "title": "{{ SERVERNAME }} - Management Traffic",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bps",
+ "label": "Bits/Sec",
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "aliasColors": {},
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "fill": 1,
+ "grid": {},
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 0,
+ "y": 29
+ },
+ "id": 15,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 2,
+ "links": [],
+ "nullPointMode": "connected",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "alias": "Threads",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "processes",
+ "policy": "default",
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "total_threads"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ }
+ ]
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeRegions": [],
+ "timeShift": null,
+ "title": "{{ SERVERNAME }} - Total Threads",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ },
+ {
+ "aliasColors": {
+ "InBound": "#629E51",
+ "OutBound": "#5195CE",
+ "net.derivative": "#1F78C1"
+ },
+ "bars": false,
+ "dashLength": 10,
+ "dashes": false,
+ "datasource": "InfluxDB",
+ "editable": true,
+ "error": false,
+ "fill": 1,
+ "grid": {},
+ "gridPos": {
+ "h": 7,
+ "w": 8,
+ "x": 8,
+ "y": 29
+ },
+ "id": 29,
+ "legend": {
+ "alignAsTable": true,
+ "avg": true,
+ "current": true,
+ "max": true,
+ "min": true,
+ "show": true,
+ "total": false,
+ "values": true
+ },
+ "lines": true,
+ "linewidth": 2,
+ "links": [],
+ "nullPointMode": "connected",
+ "percentage": false,
+ "pointradius": 5,
+ "points": false,
+ "renderer": "flot",
+ "seriesOverrides": [],
+ "spaceLength": 10,
+ "stack": false,
+ "steppedLine": false,
+ "targets": [
+ {
+ "alias": "InBound",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "docker_container_net",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "query": "SELECT 8 * derivative(mean(\"bytes_recv\"),1s) FROM \"net\" WHERE \"host\" = 'JumpHost' AND \"interface\" = 'eth0' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "A",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "rx_bytes"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ },
+ {
+ "params": [
+ "1s"
+ ],
+ "type": "derivative"
+ },
+ {
+ "params": [
+ "*8"
+ ],
+ "type": "math"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "container_name",
+ "operator": "=",
+ "value": "so-filebeat"
+ }
+ ]
+ },
+ {
+ "alias": "OutBound",
+ "dsType": "influxdb",
+ "groupBy": [
+ {
+ "params": [
+ "$Interval"
+ ],
+ "type": "time"
+ },
+ {
+ "params": [
+ "null"
+ ],
+ "type": "fill"
+ }
+ ],
+ "measurement": "docker_container_net",
+ "orderByTime": "ASC",
+ "policy": "default",
+ "query": "SELECT 8 * derivative(mean(\"bytes_sent\"),1s) FROM \"net\" WHERE \"host\" = 'JumpHost' AND \"interface\" = 'eth0' AND $timeFilter GROUP BY time($interval) fill(null)",
+ "rawQuery": false,
+ "refId": "B",
+ "resultFormat": "time_series",
+ "select": [
+ [
+ {
+ "params": [
+ "tx_bytes"
+ ],
+ "type": "field"
+ },
+ {
+ "params": [],
+ "type": "mean"
+ },
+ {
+ "params": [
+ "1s"
+ ],
+ "type": "derivative"
+ },
+ {
+ "params": [
+ "*8"
+ ],
+ "type": "math"
+ }
+ ]
+ ],
+ "tags": [
+ {
+ "key": "host",
+ "operator": "=",
+ "value": "{{ SERVERNAME }}"
+ },
+ {
+ "condition": "AND",
+ "key": "container_name",
+ "operator": "=",
+ "value": "so-filebeat"
+ }
+ ]
+ }
+ ],
+ "thresholds": [],
+ "timeFrom": null,
+ "timeRegions": [],
+ "timeShift": null,
+ "title": "{{ SERVERNAME }} - Filebeat Traffic",
+ "tooltip": {
+ "msResolution": true,
+ "shared": true,
+ "sort": 0,
+ "value_type": "cumulative"
+ },
+ "type": "graph",
+ "xaxis": {
+ "buckets": null,
+ "mode": "time",
+ "name": null,
+ "show": true,
+ "values": []
+ },
+ "yaxes": [
+ {
+ "format": "bps",
+ "label": "Bits/Sec",
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ },
+ {
+ "format": "short",
+ "label": null,
+ "logBase": 1,
+ "max": null,
+ "min": null,
+ "show": true
+ }
+ ],
+ "yaxis": {
+ "align": false,
+ "alignLevel": null
+ }
+ }
+ ],
+ "refresh": false,
+ "schemaVersion": 16,
+ "style": "dark",
+ "tags": [],
+ "templating": {
+ "list": [
+ {
+ "auto": true,
+ "auto_count": 30,
+ "auto_min": "10s",
+ "current": {
+ "text": "10s",
+ "value": "10s"
+ },
+ "hide": 0,
+ "label": null,
+ "name": "Interval",
+ "options": [
+ {
+ "selected": false,
+ "text": "auto",
+ "value": "$__auto_interval_Interval"
+ },
+ {
+ "selected": true,
+ "text": "10s",
+ "value": "10s"
+ },
+ {
+ "selected": false,
+ "text": "1m",
+ "value": "1m"
+ },
+ {
+ "selected": false,
+ "text": "10m",
+ "value": "10m"
+ },
+ {
+ "selected": false,
+ "text": "30m",
+ "value": "30m"
+ },
+ {
+ "selected": false,
+ "text": "1h",
+ "value": "1h"
+ },
+ {
+ "selected": false,
+ "text": "6h",
+ "value": "6h"
+ },
+ {
+ "selected": false,
+ "text": "12h",
+ "value": "12h"
+ },
+ {
+ "selected": false,
+ "text": "1d",
+ "value": "1d"
+ },
+ {
+ "selected": false,
+ "text": "7d",
+ "value": "7d"
+ },
+ {
+ "selected": false,
+ "text": "14d",
+ "value": "14d"
+ },
+ {
+ "selected": false,
+ "text": "30d",
+ "value": "30d"
+ }
+ ],
+ "query": "10s, 1m,10m,30m,1h,6h,12h,1d,7d,14d,30d",
+ "refresh": 2,
+ "skipUrlSync": false,
+ "type": "interval"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-30m",
+ "to": "now"
+ },
+ "timepicker": {
+ "refresh_intervals": [
+ "5s",
+ "10s",
+ "30s",
+ "1m",
+ "5m",
+ "15m",
+ "30m",
+ "1h",
+ "2h",
+ "1d"
+ ],
+ "time_options": [
+ "5m",
+ "15m",
+ "1h",
+ "6h",
+ "12h",
+ "24h",
+ "2d",
+ "7d",
+ "30d"
+ ]
+ },
+ "timezone": "browser",
+ "title": "Forward Node - {{ SERVERNAME }} Overview",
+ "uid": "{{ UID }}",
+ "version": 12
+}
diff --git a/salt/common/nginx/index.html b/salt/common/nginx/index.html
new file mode 100644
index 000000000..2f832e2c0
--- /dev/null
+++ b/salt/common/nginx/index.html
@@ -0,0 +1,130 @@
+
+
+
+Security Onion - Hybrid Hunter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Hybrid Hunter Alpha 1.1.4 - Feature Parity Release
+
Changes:
+
+ Added new in-house auth method [Security Onion Auth](https://github.com/Security-Onion-Solutions/securityonion-auth).
+ Web user creation is done via the browser now instead of so-user-add.
+ New Logstash pipeline setup. Now uses multiple pipelines.
+ New Master + Search node type and well as a Heavy Node type in the install.
+ Change all nodes to point to the docker registry on the Master. This cuts down on the calls to dockerhub.
+ Zeek 3.0.1
+ Elastic 6.8.6
+ New SO Start | Stop | Restart scripts for all components (eg. `so-playbook-restart`).
+ BPF support for Suricata (NIDS), Steno (PCAP) & Zeek ([Docs](https://github.com/Security-Onion-Solutions/securityonion-saltstack/wiki/BPF)).
+ Updated Domain Stats & Frequency Server containers to Python3 & created new Salt states for them.
+ Added so-status script which gives an easy to read look at container status.
+ Manage threshold.conf for Suricata using the thresholding pillar.
+ The ISO now includes all the docker containers for faster install speeds.
+ You now set the password for the onion account during the iso install. This account is temporary and will be removed after so-setup.
+ Updated Helix parsers for better compatibility.
+ Updated telegraf docker to include curl and jq.
+ CVE-2020-0601 Zeek Detection Script.
+ ISO Install now prompts you to create a password for the onion user during imaging. This account gets disabled during setup.
+ Check out the Hybrid Hunter Quick Start Guide .
+
+
+
+
+
+
+
+
diff --git a/salt/common/tools/sbin/so-auth-restart b/salt/common/tools/sbin/so-auth-restart
new file mode 100644
index 000000000..8659b1e3a
--- /dev/null
+++ b/salt/common/tools/sbin/so-auth-restart
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+# Copyright 2014,2015,2016,2017,2018,2019,2020 Security Onion Solutions, LLC
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+. /usr/sbin/so-common
+
+/usr/sbin/so-restart auth $1
+
diff --git a/salt/common/tools/sbin/so-auth-start b/salt/common/tools/sbin/so-auth-start
new file mode 100644
index 000000000..5330f662d
--- /dev/null
+++ b/salt/common/tools/sbin/so-auth-start
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+# Copyright 2014,2015,2016,2017,2018,2019,2020 Security Onion Solutions, LLC
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+. /usr/sbin/so-common
+
+/usr/sbin/so-start auth $1
diff --git a/salt/common/tools/sbin/so-auth-stop b/salt/common/tools/sbin/so-auth-stop
new file mode 100644
index 000000000..5ca6db7e2
--- /dev/null
+++ b/salt/common/tools/sbin/so-auth-stop
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+# Copyright 2014,2015,2016,2017,2018,2019,2020 Security Onion Solutions, LLC
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+. /usr/sbin/so-common
+
+/usr/sbin/so-stop auth $1
diff --git a/salt/elasticsearch/files/ingest/bro_common b/salt/elasticsearch/files/ingest/bro_common
new file mode 100644
index 000000000..98618ce56
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_common
@@ -0,0 +1,9 @@
+{
+ "description" : "bro_common",
+ "processors" : [
+ { "rename": { "field": "@timestamp", "target_field": "timestamp", "ignore_missing": true } },
+ { "date": { "field": "message2.ts", "target_field": "@timestamp", "formats": ["ISO8601", "UNIX"], "ignore_failure": true } },
+ { "remove": { "field": "message2.ts", "ignore_failure": true } },
+ { "pipeline": { "name": "common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_common_ssl b/salt/elasticsearch/files/ingest/bro_common_ssl
new file mode 100644
index 000000000..faf1666ac
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_common_ssl
@@ -0,0 +1,58 @@
+{
+ "description" : "bro_common_ssl",
+ "processors" : [
+ {
+ "kv": {
+ "field": "certificate_issuer",
+ "field_split": ",",
+ "value_split": "=",
+ "ignore_missing": true,
+ "ignore_failure": true,
+ "include_keys": [ "CN", "C", "O", "OU", "ST", "SN", "L", "DC", "GN", "pseudonym", "serialNumber", "title", "initials" ]
+ }
+ },
+ { "rename":{ "field": "CN", "target_field": "issuer_common_name", "ignore_failure": true } },
+ { "rename":{ "field": "C", "target_field": "issuer_country_code", "ignore_failure": true } },
+ { "rename":{ "field": "O", "target_field": "issuer_organization", "ignore_failure": true } },
+ { "rename":{ "field": "OU", "target_field": "issuer_organization_unit", "ignore_failure": true } },
+ { "rename":{ "field": "ST", "target_field": "issuer_state", "ignore_failure": true } },
+ { "rename":{ "field": "SN", "target_field": "issuer_surname", "ignore_failure": true } },
+ { "rename":{ "field": "L", "target_field": "issuer_locality", "ignore_failure": true } },
+ { "rename":{ "field": "DC", "target_field": "issuer_distinguised_name", "ignore_failure": true } },
+ { "rename":{ "field": "GN", "target_field": "issuer_given_name", "ignore_failure": true } },
+ { "rename":{ "field": "pseudonym", "target_field": "issuer_pseudonym", "ignore_failure": true } },
+ { "rename":{ "field": "serialNumber", "target_field": "issuer_serial_number", "ignore_failure": true } },
+ { "rename":{ "field": "title", "target_field": "issuer_title", "ignore_failure": true } },
+ { "rename":{ "field": "initials", "target_field": "issuer_initials", "ignore_failure": true } },
+ {
+ "kv": {
+ "field": "certificate_subject",
+ "field_split": ",",
+ "value_split": "=",
+ "ignore_missing": true,
+ "ignore_failure": true,
+ "include_keys": [ "CN", "C", "O", "OU", "ST", "SN", "L", "GN", "pseudonym", "serialNumber", "title", "initials" ]
+ }
+ },
+ { "rename":{ "field": "CN", "target_field": "certificate_common_name", "ignore_failure": true } },
+ { "rename":{ "field": "C", "target_field": "certificate_country_code", "ignore_failure": true } },
+ { "rename":{ "field": "O", "target_field": "certificate_organization", "ignore_failure": true } },
+ { "rename":{ "field": "OU", "target_field": "certificate_organization_unit","ignore_failure": true } },
+ { "rename":{ "field": "ST", "target_field": "certificate_state", "ignore_failure": true } },
+ { "rename":{ "field": "SN", "target_field": "certificate_surname", "ignore_failure": true } },
+ { "rename":{ "field": "L", "target_field": "certificate_locality", "ignore_failure": true } },
+ { "rename":{ "field": "GN", "target_field": "certificate_given_name", "ignore_failure": true } },
+ { "rename":{ "field": "pseudonym", "target_field": "certificate_pseudonym", "ignore_failure": true } },
+ { "rename":{ "field": "serialNumber", "target_field": "certificate_serial_number", "ignore_failure": true } },
+ { "rename":{ "field": "title", "target_field": "certificate_title", "ignore_failure": true } },
+ { "rename":{ "field": "initials", "target_field": "certificate_initials", "ignore_failure": true } },
+ { "script":{ "lang": "painless", "source": "ctx.certificate_common_name_length = ctx.certificate_common_name.length()", "ignore_failure": true } },
+ { "script":{ "lang": "painless", "source": "ctx.issuer_common_name_length = ctx.issuer_common_name.length()", "ignore_failure": true } },
+ { "script":{ "lang": "painless", "source": "ctx.server_name_length = ctx.server_name.length()", "ignore_failure": true } },
+ {
+ "pipeline": {
+ "name": "bro_common"
+ }
+ }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_conn b/salt/elasticsearch/files/ingest/bro_conn
new file mode 100644
index 000000000..b12be156e
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_conn
@@ -0,0 +1,48 @@
+{
+ "description" : "bro_conn",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.proto", "target_field": "protocol", "ignore_missing": true } },
+ { "rename": { "field": "message2.service", "target_field": "service", "ignore_missing": true } },
+ { "rename": { "field": "message2.duration", "target_field": "duration", "ignore_missing": true } },
+ { "rename": { "field": "message2.orig_bytes", "target_field": "original_bytes", "ignore_missing": true } },
+ { "rename": { "field": "message2.resp_bytes", "target_field": "respond_bytes", "ignore_missing": true } },
+ { "rename": { "field": "message2.conn_state", "target_field": "connection_state", "ignore_missing": true } },
+ { "rename": { "field": "message2.local_orig", "target_field": "local_orig", "ignore_missing": true } },
+ { "rename": { "field": "message2.local_resp", "target_field": "local_respond", "ignore_missing": true } },
+ { "rename": { "field": "message2.missed_bytes", "target_field": "missed_bytes", "ignore_missing": true } },
+ { "rename": { "field": "message2.history", "target_field": "history", "ignore_missing": true } },
+ { "rename": { "field": "message2.orig_pkts", "target_field": "original_packets", "ignore_missing": true } },
+ { "rename": { "field": "message2.orig_ip_bytes", "target_field": "original_ip_bytes", "ignore_missing": true } },
+ { "rename": { "field": "message2.resp_pkts", "target_field": "respond_packets", "ignore_missing": true } },
+ { "rename": { "field": "message2.resp_ip_bytes", "target_field": "respond_ip_bytes", "ignore_missing": true } },
+ { "rename": { "field": "message2.tunnel_parents", "target_field": "tunnel_parents", "ignore_missing": true } },
+ { "rename": { "field": "message2.orig_cc", "target_field": "original_country_code","ignore_missing": true } },
+ { "rename": { "field": "message2.resp_cc", "target_field": "respond_country_code", "ignore_missing": true } },
+ { "rename": { "field": "message2.sensorname", "target_field": "sensor_name", "ignore_missing": true } },
+ { "script": { "lang": "painless", "source": "ctx.total_bytes = (ctx.original_bytes + ctx.respond_bytes)", "ignore_failure": true } },
+ { "set": { "if": "ctx.connection_state == 'S0'", "field": "connection_state_description", "value": "Connection attempt seen, no reply" } },
+ { "set": { "if": "ctx.connection_state == 'S1'", "field": "connection_state_description", "value": "Connection established, not terminated" } },
+ { "set": { "if": "ctx.connection_state == 'S2'", "field": "connection_state_description", "value": "Connection established and close attempt by originator seen (but no reply from responder)" } },
+ { "set": { "if": "ctx.connection_state == 'S3'", "field": "connection_state_description", "value": "Connection established and close attempt by responder seen (but no reply from originator)" } },
+ { "set": { "if": "ctx.connection_state == 'SF'", "field": "connection_state_description", "value": "Normal SYN/FIN completion" } },
+ { "set": { "if": "ctx.connection_state == 'REJ'", "field": "connection_state_description", "value": "Connection attempt rejected" } },
+ { "set": { "if": "ctx.connection_state == 'RSTO'", "field": "connection_state_description", "value": "Connection established, originator aborted (sent a RST)" } },
+ { "set": { "if": "ctx.connection_state == 'RSTR'", "field": "connection_state_description", "value": "Established, responder aborted" } },
+ { "set": { "if": "ctx.connection_state == 'RSTOS0'","field": "connection_state_description", "value": "Originator sent a SYN followed by a RST, we never saw a SYN-ACK from the responder" } },
+ { "set": { "if": "ctx.connection_state == 'RSTRH'", "field": "connection_state_description", "value": "Responder sent a SYN ACK followed by a RST, we never saw a SYN from the (purported) originator" } },
+ { "set": { "if": "ctx.connection_state == 'SH'", "field": "connection_state_description", "value": "Originator sent a SYN followed by a FIN, we never saw a SYN ACK from the responder (hence the connection was 'half' open)" } },
+ { "set": { "if": "ctx.connection_state == 'SHR'", "field": "connection_state_description", "value": "Responder sent a SYN ACK followed by a FIN, we never saw a SYN from the originator" } },
+ { "set": { "if": "ctx.connection_state == 'OTH'", "field": "connection_state_description", "value": "No SYN seen, just midstream traffic (a 'partial connection' that was not later closed)" } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_dce_rpc b/salt/elasticsearch/files/ingest/bro_dce_rpc
new file mode 100644
index 000000000..105905245
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_dce_rpc
@@ -0,0 +1,20 @@
+{
+ "description" : "bro_dce_rpc",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.rtt", "target_field": "rtt", "ignore_missing": true } },
+ { "rename": { "field": "message2.named_pipe", "target_field": "named_pipe", "ignore_missing": true } },
+ { "rename": { "field": "message2.endpoint", "target_field": "endpoint", "ignore_missing": true } },
+ { "rename": { "field": "message2.operation", "target_field": "operation", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_dhcp b/salt/elasticsearch/files/ingest/bro_dhcp
new file mode 100644
index 000000000..010d0f85b
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_dhcp
@@ -0,0 +1,20 @@
+{
+ "description" : "bro_dhcp",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uids", "target_field": "uid", "ignore_missing": true } },
+ { "rename": { "field": "message2.mac", "target_field": "mac", "ignore_missing": true } },
+ { "rename": { "field": "message2.assigned_ip", "target_field": "assigned_ip", "ignore_missing": true } },
+ { "rename": { "field": "message2.lease_time", "target_field": "lease_time", "ignore_missing": true } },
+ { "rename": { "field": "message2.trans_id", "target_field": "transaction_id", "ignore_missing": true } },
+ { "rename": { "field": "message2.assigned_addr", "target_field": "assigned_ip", "ignore_missing": true } },
+ { "rename": { "field": "message2.client_addr", "target_field": "source_ip", "ignore_missing": true } },
+ { "rename": { "field": "message2.server_addr", "target_field": "destination_ip", "ignore_missing": true } },
+ { "rename": { "field": "message2.requested_addr", "target_field": "requested_ip", "ignore_missing": true } },
+ { "rename": { "field": "message2.domain", "target_field": "domain_name", "ignore_missing": true } },
+ { "rename": { "field": "message2.host_name", "target_field": "hostname", "ignore_missing": true } },
+ { "rename": { "field": "message2.duration", "target_field": "duration", "ignore_missing": true } },
+ { "rename": { "field": "message2.msg_types", "target_field": "message_types", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_dnp3 b/salt/elasticsearch/files/ingest/bro_dnp3
new file mode 100644
index 000000000..bebb85ecb
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_dnp3
@@ -0,0 +1,19 @@
+{
+ "description" : "bro_dnp3",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.fc_request", "target_field": "fc_request", "ignore_missing": true } },
+ { "rename": { "field": "message2.fc_reply", "target_field": "fc_reply", "ignore_missing": true } },
+ { "rename": { "field": "message2.iin", "target_field": "iin", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_dns b/salt/elasticsearch/files/ingest/bro_dns
new file mode 100644
index 000000000..be8d59294
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_dns
@@ -0,0 +1,35 @@
+{
+ "description" : "bro_dns",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.proto", "target_field": "protocol", "ignore_missing": true } },
+ { "rename": { "field": "message2.trans_id", "target_field": "transaction_id", "ignore_missing": true } },
+ { "rename": { "field": "message2.rtt", "target_field": "rtt", "ignore_missing": true } },
+ { "rename": { "field": "message2.query", "target_field": "query", "ignore_missing": true } },
+ { "rename": { "field": "message2.qclass", "target_field": "query_class", "ignore_missing": true } },
+ { "rename": { "field": "message2.qclass_name", "target_field": "query_class_name", "ignore_missing": true } },
+ { "rename": { "field": "message2.qtype", "target_field": "query_type", "ignore_missing": true } },
+ { "rename": { "field": "message2.qtype_name", "target_field": "query_type_name", "ignore_missing": true } },
+ { "rename": { "field": "message2.rcode", "target_field": "rcode", "ignore_missing": true } },
+ { "rename": { "field": "message2.rcode_name", "target_field": "rcode_name", "ignore_missing": true } },
+ { "rename": { "field": "message2.AA", "target_field": "aa", "ignore_missing": true } },
+ { "rename": { "field": "message2.TC", "target_field": "tc", "ignore_missing": true } },
+ { "rename": { "field": "message2.RD", "target_field": "rd", "ignore_missing": true } },
+ { "rename": { "field": "message2.RA", "target_field": "ra", "ignore_missing": true } },
+ { "rename": { "field": "message2.Z", "target_field": "z", "ignore_missing": true } },
+ { "rename": { "field": "message2.answers", "target_field": "answers", "ignore_missing": true } },
+ { "rename": { "field": "message2.TTLs", "target_field": "ttls", "ignore_missing": true } },
+ { "rename": { "field": "message2.rejected", "target_field": "rejected", "ignore_missing": true } },
+ { "script": { "lang": "painless", "source": "ctx.query_length = ctx.query.length()", "ignore_failure": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_dpd b/salt/elasticsearch/files/ingest/bro_dpd
new file mode 100644
index 000000000..caf66d39e
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_dpd
@@ -0,0 +1,19 @@
+{
+ "description" : "bro_dpd",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.proto", "target_field": "protocol", "ignore_missing": true } },
+ { "rename": { "field": "message2.analyzer", "target_field": "analyzer", "ignore_missing": true } },
+ { "rename": { "field": "message2.failure_reason", "target_field": "failure_reason", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_files b/salt/elasticsearch/files/ingest/bro_files
new file mode 100644
index 000000000..4337b75f2
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_files
@@ -0,0 +1,32 @@
+{
+ "description" : "bro_files",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.fuid", "target_field": "fuid", "ignore_missing": true } },
+ { "rename": { "field": "message2.tx_hosts", "target_field": "file_ip", "ignore_missing": true } },
+ { "rename": { "field": "message2.rx_hosts.0", "target_field": "destination_ip", "ignore_missing": true } },
+ { "remove": { "field": "message2.rx_hosts", "ignore_missing": true } },
+ { "rename": { "field": "message2.conn_uids", "target_field": "uid", "ignore_missing": true } },
+ { "remove": { "field": "source", "ignore_missing": true } },
+ { "rename": { "field": "message2.source", "target_field": "source", "ignore_missing": true } },
+ { "rename": { "field": "message2.depth", "target_field": "depth", "ignore_missing": true } },
+ { "rename": { "field": "message2.analyzers", "target_field": "analyzer", "ignore_missing": true } },
+ { "rename": { "field": "message2.mime_type", "target_field": "mimetype", "ignore_missing": true } },
+ { "rename": { "field": "message2.filename", "target_field": "file_name", "ignore_missing": true } },
+ { "rename": { "field": "message2.duration", "target_field": "duration", "ignore_missing": true } },
+ { "rename": { "field": "message2.local_orig", "target_field": "local_orig", "ignore_missing": true } },
+ { "rename": { "field": "message2.is_orig", "target_field": "is_orig", "ignore_missing": true } },
+ { "rename": { "field": "message2.seen_bytes", "target_field": "seen_bytes", "ignore_missing": true } },
+ { "rename": { "field": "message2.total_bytes", "target_field": "total_bytes", "ignore_missing": true } },
+ { "rename": { "field": "message2.missing_bytes", "target_field": "missing_bytes", "ignore_missing": true } },
+ { "rename": { "field": "message2.overflow_bytes", "target_field": "overflow_bytes", "ignore_missing": true } },
+ { "rename": { "field": "message2.timedout", "target_field": "timed_out", "ignore_missing": true } },
+ { "rename": { "field": "message2.parent_fuid", "target_field": "parent_fuid", "ignore_missing": true } },
+ { "rename": { "field": "message2.md5", "target_field": "md5", "ignore_missing": true } },
+ { "rename": { "field": "message2.sha1", "target_field": "sha1", "ignore_missing": true } },
+ { "rename": { "field": "message2.extracted", "target_field": "extracted", "ignore_missing": true } },
+ { "rename": { "field": "message2.extracted_cutoff", "target_field": "extracted_cutoff", "ignore_missing": true } },
+ { "rename": { "field": "message2.extracted_size", "target_field": "extracted_size", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_ftp b/salt/elasticsearch/files/ingest/bro_ftp
new file mode 100644
index 000000000..34775072d
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_ftp
@@ -0,0 +1,33 @@
+{
+ "description" : "bro_http",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.user", "target_field": "username", "ignore_missing": true } },
+ { "rename": { "field": "message2.password", "target_field": "password", "ignore_missing": true } },
+ { "rename": { "field": "message2.command", "target_field": "ftp_command", "ignore_missing": true } },
+ { "rename": { "field": "message2.arg", "target_field": "ftp_argument", "ignore_missing": true } },
+ { "rename": { "field": "message2.mime_type", "target_field": "mimetype", "ignore_missing": true } },
+ { "rename": { "field": "message2.file_size", "target_field": "file_size", "ignore_missing": true } },
+ { "rename": { "field": "message2.reply_code", "target_field": "reply_code", "ignore_missing": true } },
+ { "rename": { "field": "message2.reply_msg", "target_field": "reply_message", "ignore_missing": true } },
+ { "dot_expander": { "field": "data_channel.passive", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.data_channel.passive","target_field": "data_channel_passive", "ignore_missing": true } },
+ { "dot_expander": { "field": "data_channel.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.data_channel.orig_h","target_field": "data_channel_source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "data_channel.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.data_channel.resp_h","target_field": "data_channel_destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "data_channel.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.data_channel.resp_p","target_field": "data_channel_destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.fuid", "target_field": "fuid", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_http b/salt/elasticsearch/files/ingest/bro_http
new file mode 100644
index 000000000..842a12bc9
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_http
@@ -0,0 +1,42 @@
+{
+ "description" : "bro_http",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.trans_depth", "target_field": "trans_depth", "ignore_missing": true } },
+ { "rename": { "field": "message2.method", "target_field": "method", "ignore_missing": true } },
+ { "rename": { "field": "message2.host", "target_field": "virtual_host", "ignore_missing": true } },
+ { "rename": { "field": "message2.uri", "target_field": "uri", "ignore_missing": true } },
+ { "rename": { "field": "message2.referrer", "target_field": "referrer", "ignore_missing": true } },
+ { "rename": { "field": "message2.version", "target_field": "version", "ignore_missing": true } },
+ { "rename": { "field": "message2.user_agent", "target_field": "useragent", "ignore_missing": true } },
+ { "rename": { "field": "message2.request_body_len", "target_field": "request_body_length", "ignore_missing": true } },
+ { "rename": { "field": "message2.response_body_len","target_field": "response_body_length", "ignore_missing": true } },
+ { "rename": { "field": "message2.status_code", "target_field": "status_code", "ignore_missing": true } },
+ { "rename": { "field": "message2.status_msg", "target_field": "status_message", "ignore_missing": true } },
+ { "rename": { "field": "message2.info_code", "target_field": "info_code", "ignore_missing": true } },
+ { "rename": { "field": "message2.info_msg", "target_field": "info_message", "ignore_missing": true } },
+ { "remove": { "field": "message2.tags", "ignore_failure": true } },
+ { "rename": { "field": "message2.username", "target_field": "user", "ignore_missing": true } },
+ { "rename": { "field": "message2.password", "target_field": "password", "ignore_missing": true } },
+ { "rename": { "field": "message2.proxied", "target_field": "proxied", "ignore_missing": true } },
+ { "rename": { "field": "message2.orig_fuids", "target_field": "orig_fuids", "ignore_missing": true } },
+ { "rename": { "field": "message2.orig_filenames", "target_field": "orig_filenames", "ignore_missing": true } },
+ { "rename": { "field": "message2.orig_mime_types", "target_field": "orig_mime_types", "ignore_missing": true } },
+ { "rename": { "field": "message2.resp_fuids", "target_field": "resp_fuids", "ignore_missing": true } },
+ { "rename": { "field": "message2.resp_filenames", "target_field": "resp_filenames", "ignore_missing": true } },
+ { "rename": { "field": "message2.resp_mime_types", "target_field": "resp_mime_types", "ignore_missing": true } },
+ { "script": { "lang": "painless", "source": "ctx.uri_length = ctx.uri.length()", "ignore_failure": true } },
+ { "script": { "lang": "painless", "source": "ctx.useragent_length = ctx.useragent.length()", "ignore_failure": true } },
+ { "script": { "lang": "painless", "source": "ctx.virtual_host_length = ctx.virtual_host.length()", "ignore_failure": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_intel b/salt/elasticsearch/files/ingest/bro_intel
new file mode 100644
index 000000000..20bf90c5a
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_intel
@@ -0,0 +1,29 @@
+{
+ "description" : "bro_intel",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "seen.indicator", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.seen.indicator", "target_field": "indicator", "ignore_missing": true } },
+ { "dot_expander": { "field": "seen.indicator_type", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.seen.indicator_type", "target_field": "indicator_type", "ignore_missing": true } },
+ { "dot_expander": { "field": "seen.where", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.seen.where", "target_field": "seen_where", "ignore_missing": true } },
+ { "dot_expander": { "field": "seen.node", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.seen.node", "target_field": "seen_node", "ignore_missing": true } },
+ { "rename": { "field": "message2.matched", "target_field": "matched", "ignore_missing": true } },
+ { "rename": { "field": "message2.sources", "target_field": "sources", "ignore_missing": true } },
+ { "rename": { "field": "message2.fuid", "target_field": "fuid", "ignore_missing": true } },
+ { "rename": { "field": "message2.file_mime_type", "target_field": "mimetype", "ignore_missing": true } },
+ { "rename": { "field": "message2.file_desc", "target_field": "file_description", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_irc b/salt/elasticsearch/files/ingest/bro_irc
new file mode 100644
index 000000000..c2a5ba22d
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_irc
@@ -0,0 +1,25 @@
+{
+ "description" : "bro_irc",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.nick", "target_field": "nick", "ignore_missing": true } },
+ { "rename": { "field": "message2.user", "target_field": "irc_username", "ignore_missing": true } },
+ { "rename": { "field": "message2.command", "target_field": "irc_command", "ignore_missing": true } },
+ { "rename": { "field": "message2.value", "target_field": "value", "ignore_missing": true } },
+ { "rename": { "field": "message2.addl", "target_field": "additional_info", "ignore_missing": true } },
+ { "rename": { "field": "message2.dcc_file_name", "target_field": "dcc_file_name", "ignore_missing": true } },
+ { "rename": { "field": "message2.dcc_file_size", "target_field": "dcc_file_size", "ignore_missing": true } },
+ { "rename": { "field": "message2.dcc_mime_type", "target_field": "dcc_mime_type", "ignore_missing": true } },
+ { "rename": { "field": "message2.fuid", "target_field": "fuid", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_kerberos b/salt/elasticsearch/files/ingest/bro_kerberos
new file mode 100644
index 000000000..b338b5c96
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_kerberos
@@ -0,0 +1,30 @@
+{
+ "description" : "bro_kerberos",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.request_type", "target_field": "request_type", "ignore_missing": true } },
+ { "rename": { "field": "message2.client", "target_field": "client", "ignore_missing": true } },
+ { "rename": { "field": "message2.service", "target_field": "service", "ignore_missing": true } },
+ { "rename": { "field": "message2.success", "target_field": "kerberos_success", "ignore_missing": true } },
+ { "rename": { "field": "message2.error_msg", "target_field": "error_message", "ignore_missing": true } },
+ { "rename": { "field": "message2.from", "target_field": "valid_from", "ignore_missing": true } },
+ { "rename": { "field": "message2.till", "target_field": "valid_till", "ignore_missing": true } },
+ { "rename": { "field": "message2.cipher", "target_field": "cipher", "ignore_missing": true } },
+ { "rename": { "field": "message2.forwardable", "target_field": "forwardable", "ignore_missing": true } },
+ { "rename": { "field": "message2.renewable", "target_field": "renewable", "ignore_missing": true } },
+ { "rename": { "field": "message2.client_cert_subject", "target_field": "client_certificate_subject", "ignore_missing": true } },
+ { "rename": { "field": "message2.client_cert_fuid", "target_field": "client_certificate_fuid", "ignore_missing": true } },
+ { "rename": { "field": "message2.server_cert_subject", "target_field": "server_certificate_subject", "ignore_missing": true } },
+ { "rename": { "field": "message2.server_cert_fuid", "target_field": "server_certificate_fuid", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_modbus b/salt/elasticsearch/files/ingest/bro_modbus
new file mode 100644
index 000000000..10e7c271a
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_modbus
@@ -0,0 +1,18 @@
+{
+ "description" : "bro_modbus",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.func", "target_field": "function", "ignore_missing": true } },
+ { "rename": { "field": "message2.exception", "target_field": "exception", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_mysql b/salt/elasticsearch/files/ingest/bro_mysql
new file mode 100644
index 000000000..a01d57da2
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_mysql
@@ -0,0 +1,21 @@
+{
+ "description" : "bro_mysql",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.cmd", "target_field": "mysql_command", "ignore_missing": true } },
+ { "rename": { "field": "message2.arg", "target_field": "mysql_argument", "ignore_missing": true } },
+ { "rename": { "field": "message2.success", "target_field": "mysql_success", "ignore_missing": true } },
+ { "rename": { "field": "message2.rows", "target_field": "rows", "ignore_missing": true } },
+ { "rename": { "field": "message2.response", "target_field": "response", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_notice b/salt/elasticsearch/files/ingest/bro_notice
new file mode 100644
index 000000000..6e43448d5
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_notice
@@ -0,0 +1,36 @@
+{
+ "description" : "bro_notice",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "remove": { "field": "message2.dst", "ignore_failure": true } },
+ { "remove": { "field": "message2.src", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.fuid", "target_field": "fuid", "ignore_missing": true } },
+ { "rename": { "field": "message2.mime", "target_field": "file_mime_type", "ignore_missing": true } },
+ { "rename": { "field": "message2.desc", "target_field": "file_description", "ignore_missing": true } },
+ { "rename": { "field": "message2.proto", "target_field": "protocol", "ignore_missing": true } },
+ { "rename": { "field": "message2.note", "target_field": "note", "ignore_missing": true } },
+ { "rename": { "field": "message2.msg", "target_field": "msg", "ignore_missing": true } },
+ { "rename": { "field": "message2.sub", "target_field": "sub_msg", "ignore_missing": true } },
+ { "rename": { "field": "message2.p", "target_field": "p", "ignore_missing": true } },
+ { "rename": { "field": "message2.n", "target_field": "n", "ignore_missing": true } },
+ { "rename": { "field": "message2.peer_descr", "target_field": "peer_description", "ignore_missing": true } },
+ { "rename": { "field": "message2.actions", "target_field": "action", "ignore_missing": true } },
+ { "rename": { "field": "message2.suppress_for", "target_field": "suppress_for", "ignore_missing": true } },
+ { "rename": { "field": "message2.dropped", "target_field": "dropped", "ignore_missing": true } },
+ { "rename": { "field": "message2.destination_country_code", "target_field": "destination_country_code", "ignore_missing": true } },
+ { "rename": { "field": "message2.destination_region", "target_field": "destination_region", "ignore_missing": true } },
+ { "rename": { "field": "message2.destination_city", "target_field": "destination_city", "ignore_missing": true } },
+ { "rename": { "field": "message2.destination_latitude", "target_field": "destination_latitude", "ignore_missing": true } },
+ { "rename": { "field": "message2.destination_longitude", "target_field": "destination_longitude", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_ntlm b/salt/elasticsearch/files/ingest/bro_ntlm
new file mode 100644
index 000000000..a3d130343
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_ntlm
@@ -0,0 +1,24 @@
+{
+ "description" : "bro_ntlm",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.hostname", "target_field": "hostname", "ignore_missing": true } },
+ { "rename": { "field": "message2.domainname", "target_field": "domain_name", "ignore_missing": true } },
+ { "rename": { "field": "message2.success", "target_field": "ntlm_success", "ignore_missing": true } },
+ { "rename": { "field": "message2.status", "target_field": "status", "ignore_missing": true } },
+ { "rename": { "field": "message2.username", "target_field": "username", "ignore_missing": true } },
+ { "rename": { "field": "message2.server_dns_computer_name", "target_field": "server_dns_computer_name", "ignore_missing": true } },
+ { "rename": { "field": "message2.server_nb_computer_name", "target_field": "server_nb_computer_name", "ignore_missing": true } },
+ { "rename": { "field": "message2.server_tree_name", "target_field": "server_tree_name", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_pe b/salt/elasticsearch/files/ingest/bro_pe
new file mode 100644
index 000000000..2597d3e26
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_pe
@@ -0,0 +1,23 @@
+{
+ "description" : "bro_pe",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id", "target_field": "fuid", "ignore_missing": true } },
+ { "rename": { "field": "message2.machine", "target_field": "machine", "ignore_missing": true } },
+ { "rename": { "field": "message2.compile_ts", "target_field": "compile_ts", "ignore_missing": true } },
+ { "rename": { "field": "message2.os", "target_field": "os", "ignore_missing": true } },
+ { "rename": { "field": "message2.subsystem", "target_field": "subsystem", "ignore_missing": true } },
+ { "rename": { "field": "message2.is_exe", "target_field": "is_exe", "ignore_missing": true } },
+ { "rename": { "field": "message2.is_64bit", "target_field": "is_64bit", "ignore_missing": true } },
+ { "rename": { "field": "message2.uses_aslr", "target_field": "uses_aslr", "ignore_missing": true } },
+ { "rename": { "field": "message2.uses_dep", "target_field": "uses_dep", "ignore_missing": true } },
+ { "rename": { "field": "message2.uses_code_integrity","target_field": "uses_code_integrity","ignore_missing": true } },
+ { "rename": { "field": "message2.uses_seh", "target_field": "uses_seh", "ignore_missing": true } },
+ { "rename": { "field": "message2.has_import_table", "target_field": "has_import_table", "ignore_missing": true } },
+ { "rename": { "field": "message2.has_export_table", "target_field": "has_export_table", "ignore_missing": true } },
+ { "rename": { "field": "message2.has_cert_table", "target_field": "has_cert_table", "ignore_missing": true } },
+ { "rename": { "field": "message2.has_debug_data", "target_field": "has_debug_data", "ignore_missing": true } },
+ { "rename": { "field": "message2.section_names", "target_field": "section_names", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_radius b/salt/elasticsearch/files/ingest/bro_radius
new file mode 100644
index 000000000..c333711d6
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_radius
@@ -0,0 +1,25 @@
+{
+ "description" : "bro_radius",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.username", "target_field": "username", "ignore_missing": true } },
+ { "rename": { "field": "message2.mac", "target_field": "mac", "ignore_missing": true } },
+ { "rename": { "field": "message2.framed_addr", "target_field": "framed_addr", "ignore_missing": true } },
+ { "rename": { "field": "message2.remote_ip", "target_field": "remote_ip", "ignore_missing": true } },
+ { "rename": { "field": "message2.connect_info", "target_field": "connect_info", "ignore_missing": true } },
+ { "rename": { "field": "message2.reply_msg", "target_field": "reply_message", "ignore_missing": true } },
+ { "rename": { "field": "message2.result", "target_field": "result", "ignore_missing": true } },
+ { "remove": { "field": "message2.ttl", "ignore_failure": true } },
+ { "rename": { "field": "message2.logged", "target_field": "logged", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_rdp b/salt/elasticsearch/files/ingest/bro_rdp
new file mode 100644
index 000000000..b3cf206a5
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_rdp
@@ -0,0 +1,31 @@
+{
+ "description" : "bro_rdp",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.cookie", "target_field": "cookie", "ignore_missing": true } },
+ { "rename": { "field": "message2.result", "target_field": "result", "ignore_missing": true } },
+ { "rename": { "field": "message2.security_protocol","target_field": "security_protocol", "ignore_missing": true } },
+ { "rename": { "field": "message2.keyboard_layout", "target_field": "keyboard_layout", "ignore_missing": true } },
+ { "rename": { "field": "message2.client_build", "target_field": "client_build", "ignore_missing": true } },
+ { "rename": { "field": "message2.client_name", "target_field": "client_name", "ignore_missing": true } },
+ { "rename": { "field": "message2.client_dig_product_id", "target_field": "client_digital_product_id", "ignore_missing": true } },
+ { "rename": { "field": "message2.desktop_width", "target_field": "desktop_width", "ignore_missing": true } },
+ { "rename": { "field": "message2.desktop_height", "target_field": "desktop_height", "ignore_missing": true } },
+ { "rename": { "field": "message2.requested_color_depth", "target_field": "requested_color_depth", "ignore_missing": true } },
+ { "rename": { "field": "message2.cert_type", "target_field": "certificate_type", "ignore_missing": true } },
+ { "rename": { "field": "message2.cert_count", "target_field": "certificate_count", "ignore_missing": true } },
+ { "rename": { "field": "message2.cert_permanent", "target_field": "certificate_permanent","ignore_missing": true } },
+ { "rename": { "field": "message2.encryption_level", "target_field": "encryption_level", "ignore_missing": true } },
+ { "rename": { "field": "message2.encryption_method","target_field": "encryption_method", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_rfb b/salt/elasticsearch/files/ingest/bro_rfb
new file mode 100644
index 000000000..8f3cc86e7
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_rfb
@@ -0,0 +1,26 @@
+{
+ "description" : "bro_rfb",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.client_major_version", "target_field": "client_major_version", "ignore_missing": true } },
+ { "rename": { "field": "message2.client_minor_version", "target_field": "client_minor_version", "ignore_missing": true } },
+ { "rename": { "field": "message2.server_major_version", "target_field": "server_major_version", "ignore_missing": true } },
+ { "rename": { "field": "message2.server_minor_version", "target_field": "server_minor_version", "ignore_missing": true } },
+ { "rename": { "field": "message2.authentication_method", "target_field": "authentication_method","ignore_missing": true } },
+ { "rename": { "field": "message2.auth", "target_field": "auth", "ignore_missing": true } },
+ { "rename": { "field": "message2.share_flag", "target_field": "share_flag", "ignore_missing": true } },
+ { "rename": { "field": "message2.desktop_name", "target_field": "desktop_name", "ignore_missing": true } },
+ { "rename": { "field": "message2.width", "target_field": "width", "ignore_missing": true } },
+ { "rename": { "field": "message2.height", "target_field": "height", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_signatures b/salt/elasticsearch/files/ingest/bro_signatures
new file mode 100644
index 000000000..5dd3d9924
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_signatures
@@ -0,0 +1,22 @@
+{
+ "description" : "bro_signatures",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.note", "target_field": "note", "ignore_missing": true } },
+ { "rename": { "field": "message2.sig_id", "target_field": "signature_id", "ignore_missing": true } },
+ { "rename": { "field": "message2.event_msg", "target_field": "event_message", "ignore_missing": true } },
+ { "rename": { "field": "message2.sub_msg", "target_field": "sub_message", "ignore_missing": true } },
+ { "rename": { "field": "message2.sig_count", "target_field": "signature_count", "ignore_missing": true } },
+ { "rename": { "field": "message2.host_count", "target_field": "host_count", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_sip b/salt/elasticsearch/files/ingest/bro_sip
new file mode 100644
index 000000000..3a8b00d62
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_sip
@@ -0,0 +1,37 @@
+{
+ "description" : "bro_sip",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.trans_depth", "target_field": "trans_depth", "ignore_missing": true } },
+ { "rename": { "field": "message2.method", "target_field": "method", "ignore_missing": true } },
+ { "rename": { "field": "message2.uri", "target_field": "uri", "ignore_missing": true } },
+ { "rename": { "field": "message2.date", "target_field": "date", "ignore_missing": true } },
+ { "rename": { "field": "message2.request_from", "target_field": "request_from", "ignore_missing": true } },
+ { "rename": { "field": "message2.request_to", "target_field": "request_to", "ignore_missing": true } },
+ { "rename": { "field": "message2.response_from", "target_field": "response_from", "ignore_missing": true } },
+ { "rename": { "field": "message2.response_to", "target_field": "response_to", "ignore_missing": true } },
+ { "rename": { "field": "message2.reply_to", "target_field": "reply_to", "ignore_missing": true } },
+ { "rename": { "field": "message2.call_id", "target_field": "call_id", "ignore_missing": true } },
+ { "rename": { "field": "message2.seq", "target_field": "seq", "ignore_missing": true } },
+ { "rename": { "field": "message2.subject", "target_field": "subject", "ignore_missing": true } },
+ { "rename": { "field": "message2.request_path", "target_field": "request_path", "ignore_missing": true } },
+ { "rename": { "field": "message2.response_path", "target_field": "response_path", "ignore_missing": true } },
+ { "rename": { "field": "message2.user_agent", "target_field": "user_agent", "ignore_missing": true } },
+ { "rename": { "field": "message2.status_code", "target_field": "status_code", "ignore_missing": true } },
+ { "rename": { "field": "message2.status_msg", "target_field": "status_msg", "ignore_missing": true } },
+ { "rename": { "field": "message2.warning", "target_field": "warning", "ignore_missing": true } },
+ { "rename": { "field": "message2.request_body_len", "target_field": "request_body_length", "ignore_missing": true } },
+ { "rename": { "field": "message2.response_body_len","target_field": "response_body_length", "ignore_missing": true } },
+ { "rename": { "field": "message2.content_type", "target_field": "content_type", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_smb_files b/salt/elasticsearch/files/ingest/bro_smb_files
new file mode 100644
index 000000000..83ba8bd67
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_smb_files
@@ -0,0 +1,31 @@
+{
+ "description" : "bro_smb_files",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.fuid", "target_field": "fuid", "ignore_missing": true } },
+ { "rename": { "field": "message2.action", "target_field": "action", "ignore_missing": true } },
+ { "remove": { "field": "path", "ignore_failure": true } },
+ { "rename": { "field": "message2.path", "target_field": "path", "ignore_missing": true } },
+ { "rename": { "field": "message2.name", "target_field": "name", "ignore_missing": true } },
+ { "rename": { "field": "message2.size", "target_field": "size", "ignore_missing": true } },
+ { "rename": { "field": "message2.prev_name", "target_field": "prev_name", "ignore_missing": true } },
+ { "dot_expander": { "field": "times.modified", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.times.modified", "target_field": "times_modified", "ignore_missing": true } },
+ { "dot_expander": { "field": "times.accessed", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.times.accessed", "target_field": "times_accessed", "ignore_missing": true } },
+ { "dot_expander": { "field": "times.created", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.times.created", "target_field": "times_created", "ignore_missing": true } },
+ { "dot_expander": { "field": "times.changed", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.times.changed", "target_field": "times_changed", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_smb_mapping b/salt/elasticsearch/files/ingest/bro_smb_mapping
new file mode 100644
index 000000000..e1b6b5dfb
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_smb_mapping
@@ -0,0 +1,21 @@
+{
+ "description" : "bro_smb_files",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "remove": { "field": "path", "ignore_failure": true } },
+ { "rename": { "field": "message2.path", "target_field": "path", "ignore_missing": true } },
+ { "rename": { "field": "message2.service", "target_field": "service", "ignore_missing": true } },
+ { "rename": { "field": "message2.native_file_system", "target_field": "native_file_system", "ignore_missing": true } },
+ { "rename": { "field": "message2.share_type", "target_field": "share_type", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_smtp b/salt/elasticsearch/files/ingest/bro_smtp
new file mode 100644
index 000000000..4bd85a293
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_smtp
@@ -0,0 +1,38 @@
+{
+ "description" : "bro_smtp",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "remove": { "field": "path", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.trans_depth", "target_field": "trans_depth", "ignore_missing": true } },
+ { "rename": { "field": "message2.helo", "target_field": "helo", "ignore_missing": true } },
+ { "rename": { "field": "message2.mailfrom", "target_field": "mail_from", "ignore_missing": true } },
+ { "rename": { "field": "message2.rcptto", "target_field": "recipient_to", "ignore_missing": true } },
+ { "rename": { "field": "message2.date", "target_field": "mail_date", "ignore_missing": true } },
+ { "rename": { "field": "message2.from", "target_field": "from", "ignore_missing": true } },
+ { "rename": { "field": "message2.to", "target_field": "to", "ignore_missing": true } },
+ { "rename": { "field": "message2.cc", "target_field": "cc", "ignore_missing": true } },
+ { "rename": { "field": "message2.reply_to", "target_field": "reply_to", "ignore_missing": true } },
+ { "rename": { "field": "message2.msg_id", "target_field": "message_id", "ignore_missing": true } },
+ { "rename": { "field": "message2.in_reply_to", "target_field": "in_reply_to", "ignore_missing": true } },
+ { "rename": { "field": "message2.subject", "target_field": "subject", "ignore_missing": true } },
+ { "rename": { "field": "message2.x_originating_ip", "target_field": "x_originating_ip", "ignore_missing": true } },
+ { "rename": { "field": "message2.first_received", "target_field": "first_received", "ignore_missing": true } },
+ { "rename": { "field": "message2.second_received", "target_field": "second_received", "ignore_missing": true } },
+ { "rename": { "field": "message2.last_reply", "target_field": "last_reply", "ignore_missing": true } },
+ { "rename": { "field": "message2.path", "target_field": "path", "ignore_missing": true } },
+ { "rename": { "field": "message2.user_agent", "target_field": "useragent", "ignore_missing": true } },
+ { "rename": { "field": "message2.tls", "target_field": "tls", "ignore_missing": true } },
+ { "rename": { "field": "message2.fuids", "target_field": "fuids", "ignore_missing": true } },
+ { "rename": { "field": "message2.is_webmail", "target_field": "is_webmail", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_snmp b/salt/elasticsearch/files/ingest/bro_snmp
new file mode 100644
index 000000000..bec88c1af
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_snmp
@@ -0,0 +1,25 @@
+{
+ "description" : "bro_snmp",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.duration", "target_field": "duration", "ignore_missing": true } },
+ { "rename": { "field": "message2.version", "target_field": "version", "ignore_missing": true } },
+ { "rename": { "field": "message2.community", "target_field": "community", "ignore_missing": true } },
+ { "rename": { "field": "message2.get_requests", "target_field": "get_requests", "ignore_missing": true } },
+ { "rename": { "field": "message2.get_bulk_requests","target_field": "get_bulk_requests", "ignore_missing": true } },
+ { "rename": { "field": "message2.get_responses", "target_field": "get_responses", "ignore_missing": true } },
+ { "rename": { "field": "message2.set_requests", "target_field": "set_requests", "ignore_missing": true } },
+ { "rename": { "field": "message2.display_string", "target_field": "display_string", "ignore_missing": true } },
+ { "rename": { "field": "message2.up_since", "target_field": "up_since", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_socks b/salt/elasticsearch/files/ingest/bro_socks
new file mode 100644
index 000000000..38c5dd528
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_socks
@@ -0,0 +1,28 @@
+{
+ "description" : "bro_socks",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.version", "target_field": "version", "ignore_missing": true } },
+ { "rename": { "field": "message2.user", "target_field": "user", "ignore_missing": true } },
+ { "rename": { "field": "message2.password", "target_field": "password", "ignore_missing": true } },
+ { "rename": { "field": "message2.status", "target_field": "status", "ignore_missing": true } },
+ { "rename": { "field": "message2.request_host", "target_field": "request_host", "ignore_missing": true } },
+ { "dot_expander": { "field": "request.name", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.request.name", "target_field": "request_name", "ignore_missing": true } },
+ { "rename": { "field": "message2.request_p", "target_field": "request_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "bound.host", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.bound.host", "target_field": "bound_host", "ignore_missing": true } },
+ { "rename": { "field": "message2.bound_name", "target_field": "bound_name", "ignore_missing": true } },
+ { "rename": { "field": "message2.bound_p", "target_field": "bound_port", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_software b/salt/elasticsearch/files/ingest/bro_software
new file mode 100644
index 000000000..e742fda9e
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_software
@@ -0,0 +1,23 @@
+{
+ "description" : "bro_software",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "version.major", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.version.major", "target_field": "version_major", "ignore_missing": true } },
+ { "dot_expander": { "field": "version.minor", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.version.minor", "target_field": "version_minor", "ignore_missing": true } },
+ { "dot_expander": { "field": "version.minor2", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.version.minor2", "target_field": "version_minor2", "ignore_missing": true } },
+ { "dot_expander": { "field": "version.minor3", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.version.minor3", "target_field": "version_minor3", "ignore_missing": true } },
+ { "dot_expander": { "field": "version.addl", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.version.addl", "target_field": "version_additional_info", "ignore_missing": true } },
+ { "rename": { "field": "message2.host", "target_field": "source_ip", "ignore_missing": true } },
+ { "rename": { "field": "message2.host_p", "target_field": "source_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.software_type", "target_field": "software_type", "ignore_missing": true } },
+ { "rename": { "field": "message2.name", "target_field": "name", "ignore_missing": true } },
+ { "rename": { "field": "message2.unparsed_version", "target_field": "unparsed_version", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_ssh b/salt/elasticsearch/files/ingest/bro_ssh
new file mode 100644
index 000000000..7df949503
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_ssh
@@ -0,0 +1,40 @@
+{
+ "description" : "bro_conn",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.version", "target_field": "version", "ignore_missing": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "rename": { "field": "message2.hassh", "target_field": "hassh", "ignore_missing": true } },
+ { "rename": { "field": "message2.auth_success", "target_field": "authentication_success", "ignore_missing": true } },
+ { "rename": { "field": "message2.auth_attempts", "target_field": "authentication_attempts", "ignore_missing": true } },
+ { "rename": { "field": "message2.direction", "target_field": "direction", "ignore_missing": true } },
+ { "rename": { "field": "message2.client", "target_field": "client", "ignore_missing": true } },
+ { "rename": { "field": "message2.server", "target_field": "server", "ignore_missing": true } },
+ { "rename": { "field": "message2.cipher_alg", "target_field": "cipher_algorithm", "ignore_missing": true } },
+ { "rename": { "field": "message2.compression_alg", "target_field": "compression_algorithm", "ignore_missing": true } },
+ { "rename": { "field": "message2.cshka", "target_field": "client_host_key_algorithms", "ignore_missing": true } },
+ { "rename": { "field": "message2.host_key_alg", "target_field": "host_key_algorithm", "ignore_missing": true } },
+ { "rename": { "field": "message2.hasshAlgorithms", "target_field": "hassh_algorithms", "ignore_missing": true } },
+ { "rename": { "field": "message2.hasshServer", "target_field": "hassh_server", "ignore_missing": true } },
+ { "rename": { "field": "message2.hasshVersion", "target_field": "hassh_version", "ignore_missing": true } },
+ { "rename": { "field": "message2.kex_alg", "target_field": "kex_algorithm", "ignore_missing": true } },
+ { "rename": { "field": "message2.mac_alg", "target_field": "mac_algorithm", "ignore_missing": true } },
+ { "rename": { "field": "message2.sshka", "target_field": "server_host_key_algorithms", "ignore_missing": true } },
+ { "rename": { "field": "message2.host_key", "target_field": "host_key", "ignore_missing": true } },
+ { "rename": { "field": "message2.destination_region", "target_field": "destination_region", "ignore_missing": true } },
+ { "rename": { "field": "message2.destination_city", "target_field": "destination_city", "ignore_missing": true } },
+ { "rename": { "field": "message2.destination_latitude", "target_field": "destination_latitude", "ignore_missing": true } },
+ { "rename": { "field": "message2.destination_longitude", "target_field": "destination_longitude", "ignore_missing": true } },
+ { "rename": { "field": "message2.destination_country_code", "target_field": "destination_country_code", "ignore_missing": true } },
+ { "rename": { "field": "message2.hasshServerAlgorithms", "target_field": "hassh_server_algorithms", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_ssl b/salt/elasticsearch/files/ingest/bro_ssl
new file mode 100644
index 000000000..04d0fc8ec
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_ssl
@@ -0,0 +1,33 @@
+{
+ "description" : "bro_ssl",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.version", "target_field": "version", "ignore_missing": true } },
+ { "rename": { "field": "message2.cipher", "target_field": "cipher", "ignore_missing": true } },
+ { "rename": { "field": "message2.curve", "target_field": "curve", "ignore_missing": true } },
+ { "rename": { "field": "message2.server_name", "target_field": "server_name", "ignore_missing": true } },
+ { "rename": { "field": "message2.resumed", "target_field": "resumed", "ignore_missing": true } },
+ { "rename": { "field": "message2.last_alert", "target_field": "last_alert", "ignore_missing": true } },
+ { "rename": { "field": "message2.next_protocol", "target_field": "next_protocol", "ignore_missing": true } },
+ { "rename": { "field": "message2.established", "target_field": "established", "ignore_missing": true } },
+ { "rename": { "field": "message2.cert_chain_fuids", "target_field": "certificate_chain_fuids", "ignore_missing": true } },
+ { "rename": { "field": "message2.client_cert_chain_fuids", "target_field": "client_certificate_chain_fuids", "ignore_missing": true } },
+ { "rename": { "field": "message2.subject", "target_field": "certificate_subject", "ignore_missing": true } },
+ { "rename": { "field": "message2.issuer", "target_field": "certificate_issuer", "ignore_missing": true } },
+ { "rename": { "field": "message2.client_subject", "target_field": "client_subject", "ignore_missing": true } },
+ { "rename": { "field": "message2.client_issuer", "target_field": "client_issuer", "ignore_missing": true } },
+ { "rename": { "field": "message2.validation_status","target_field": "validation_status", "ignore_missing": true } },
+ { "rename": { "field": "message2.ja3", "target_field": "ja3", "ignore_missing": true } },
+ { "rename": { "field": "message2.ja3s", "target_field": "ja3s", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common_ssl" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_syslog b/salt/elasticsearch/files/ingest/bro_syslog
new file mode 100644
index 000000000..9599b435c
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_syslog
@@ -0,0 +1,21 @@
+{
+ "description" : "bro_syslog",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.proto", "target_field": "protocol", "ignore_missing": true } },
+ { "rename": { "field": "message2.facility", "target_field": "facility", "ignore_missing": true } },
+ { "rename": { "field": "message2.severity", "target_field": "severity", "ignore_missing": true } },
+ { "remove": { "field": "message", "ignore_failure": true } },
+ { "rename": { "field": "message2.message", "target_field": "message", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_tunnel b/salt/elasticsearch/files/ingest/bro_tunnel
new file mode 100644
index 000000000..21fa06deb
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_tunnel
@@ -0,0 +1,7 @@
+{
+ "description" : "bro_tunnel",
+ "processors" : [
+ { "set": { "field": "event_type", "value": "bro_tunnels" } },
+ { "pipeline": { "name": "bro_tunnels" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_tunnels b/salt/elasticsearch/files/ingest/bro_tunnels
new file mode 100644
index 000000000..50c12518f
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_tunnels
@@ -0,0 +1,18 @@
+{
+ "description" : "bro_tunnels",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.tunnel_type", "target_field": "tunnel_type", "ignore_missing": true } },
+ { "rename": { "field": "message2.action", "target_field": "action", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_weird b/salt/elasticsearch/files/ingest/bro_weird
new file mode 100644
index 000000000..b471f5e75
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_weird
@@ -0,0 +1,20 @@
+{
+ "description" : "bro_weird",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.uid", "target_field": "uid", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_h", "target_field": "source_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.orig_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.orig_p", "target_field": "source_port", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_h", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_h", "target_field": "destination_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "id.resp_p", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id.resp_p", "target_field": "destination_port", "ignore_missing": true } },
+ { "rename": { "field": "message2.name", "target_field": "name", "ignore_missing": true } },
+ { "rename": { "field": "message2.addl", "target_field": "additional_info", "ignore_missing": true } },
+ { "rename": { "field": "message2.notice", "target_field": "notice", "ignore_missing": true } },
+ { "rename": { "field": "message2.peer", "target_field": "peer", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common" } }
+ ]
+}
diff --git a/salt/elasticsearch/files/ingest/bro_x509 b/salt/elasticsearch/files/ingest/bro_x509
new file mode 100644
index 000000000..56e905347
--- /dev/null
+++ b/salt/elasticsearch/files/ingest/bro_x509
@@ -0,0 +1,44 @@
+{
+ "description" : "bro_x509",
+ "processors" : [
+ { "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.id", "target_field": "id", "ignore_missing": true } },
+ { "dot_expander": { "field": "certificate.version", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.certificate.version", "target_field": "certificate_version", "ignore_missing": true } },
+ { "dot_expander": { "field": "certificate.serial", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.certificate.serial", "target_field": "certificate_serial", "ignore_missing": true } },
+ { "dot_expander": { "field": "certificate.subject", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.certificate.subject", "target_field": "certificate_subject", "ignore_missing": true } },
+ { "dot_expander": { "field": "certificate.issuer", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.certificate.issuer", "target_field": "certificate_issuer", "ignore_missing": true } },
+ { "dot_expander": { "field": "certificate.not_valid_before", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.certificate.not_valid_before", "target_field": "certificate_not_valid_before", "ignore_missing": true } },
+ { "dot_expander": { "field": "certificate.not_valid_after", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.certificate.not_valid_after", "target_field": "certificate_not_valid_after", "ignore_missing": true } },
+ { "dot_expander": { "field": "certificate.key_alg", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.certificate.key_alg", "target_field": "certificate_key_algorithm", "ignore_missing": true } },
+ { "dot_expander": { "field": "certificate.sig_alg", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.certificate.sig_alg", "target_field": "certificate_signing_algorithm", "ignore_missing": true } },
+ { "dot_expander": { "field": "certificate.key_type", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.certificate.key_type", "target_field": "certificate_key_type", "ignore_missing": true } },
+ { "dot_expander": { "field": "certificate.key_length", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.certificate.key_length", "target_field": "certificate_key_length", "ignore_missing": true } },
+ { "dot_expander": { "field": "certificate.exponent", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.certificate.exponent", "target_field": "certificate_exponent", "ignore_missing": true } },
+ { "dot_expander": { "field": "certificate.curve", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.certificate.curve", "target_field": "certificate_curve", "ignore_missing": true } },
+ { "dot_expander": { "field": "san.dns", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.san.dns", "target_field": "san_dns", "ignore_missing": true } },
+ { "dot_expander": { "field": "san.uri", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.san.uri", "target_field": "san_uri", "ignore_missing": true } },
+ { "dot_expander": { "field": "san.email", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.san.email", "target_field": "san_email", "ignore_missing": true } },
+ { "dot_expander": { "field": "san.ip", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.san.ip", "target_field": "san_ip", "ignore_missing": true } },
+ { "dot_expander": { "field": "basic_constraints.ca", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.basic_constraints.ca", "target_field": "basic_constraints_ca", "ignore_missing": true } },
+ { "dot_expander": { "field": "basic_constraints.path_length", "path": "message2", "ignore_failure": true } },
+ { "rename": { "field": "message2.basic_constraints.path_length", "target_field": "basic_constraints_path_length", "ignore_missing": true } },
+ { "pipeline": { "name": "bro_common_ssl" } }
+ ]
+}
diff --git a/salt/fleet/init.sls b/salt/fleet/init.sls
index 6859a015b..5dcc7e202 100644
--- a/salt/fleet/init.sls
+++ b/salt/fleet/init.sls
@@ -21,9 +21,6 @@
# hostname: {{ grains.host }}
#{% endif %}
-include:
- - mysql
-
# Fleet Setup
fleetcdir:
file.directory:
@@ -82,7 +79,6 @@ osquerypackageswebpage:
- source: salt://fleet/files/dedicated-index.html
- template: jinja
-
fleetdb:
mysql_database.present:
- name: fleet
@@ -90,8 +86,6 @@ fleetdb:
- connection_port: 3306
- connection_user: root
- connection_pass: {{ MYSQLPASS }}
- - require:
- - sls: mysql
fleetdbuser:
mysql_user.present:
@@ -101,8 +95,6 @@ fleetdbuser:
- connection_port: 3306
- connection_user: root
- connection_pass: {{ MYSQLPASS }}
- - require:
- - fleetdb
fleetdbpriv:
mysql_grants.present:
@@ -114,9 +106,8 @@ fleetdbpriv:
- connection_port: 3306
- connection_user: root
- connection_pass: {{ MYSQLPASS }}
- - require:
- - fleetdb
-
+
+
{% if FLEETPASS == None or FLEETJWT == None %}
fleet_password_none:
diff --git a/salt/fleet/osquery-packages.html b/salt/fleet/osquery-packages.html
new file mode 100644
index 000000000..c94ba89b9
--- /dev/null
+++ b/salt/fleet/osquery-packages.html
@@ -0,0 +1,113 @@
+
+
+
+Security Onion - Hybrid Hunter
+
+
+
+
+
+
+
+
+
+
+
+
+
Osquery Packages
+
+
Notes
+
+ These packages are customized for this specific Fleet install and will only be generated after the Fleet setup script has been run. If you want vanilla osquery packages, you can get them directly from osquery.io
+ Packages are not signed.
+
+
Downloads
+
+
+
Known Issues
+
+
+
+
+
+
+
diff --git a/salt/fleet/packs/PUT.PACKS.IN.HERE b/salt/fleet/packs/PUT.PACKS.IN.HERE
new file mode 100644
index 000000000..e69de29bb
diff --git a/salt/fleet/packs/hh/hh-post-login.sh b/salt/fleet/packs/hh/hh-post-login.sh
new file mode 100644
index 000000000..cc787decf
--- /dev/null
+++ b/salt/fleet/packs/hh/hh-post-login.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+echo "Applying Post Configuration for Osquery"
+#fleetctl apply -f /packs/hh/osquery.conf
+fleetctl apply -f /packs/palantir/Fleet/Endpoints/options.yaml
+fleetctl apply -f /packs/palantir/Fleet/Endpoints/MacOS/osquery.yaml
+fleetctl apply -f /packs/palantir/Fleet/Endpoints/Windows/osquery.yaml
+fleetctl apply -f /packs/hh/hhdefault.yml
+
+for pack in /packs/palantir/Fleet/Endpoints/packs/*.yaml;
+ do fleetctl apply -f "$pack"
+done
+echo ""
+echo "You can now exit the container by typing exit"
diff --git a/salt/fleet/packs/hh/hhdefault.yml b/salt/fleet/packs/hh/hhdefault.yml
new file mode 100644
index 000000000..b0a9d97b1
--- /dev/null
+++ b/salt/fleet/packs/hh/hhdefault.yml
@@ -0,0 +1,28 @@
+apiVersion: v1
+kind: query
+spec:
+ name: users
+ description: Users on the system
+ query: select * from users;
+---
+apiVersion: v1
+kind: query
+spec:
+ name: chrome-extensions
+ description: Chrome extensions for all users on the system
+ query: select users.username,chrome_extensions.*,chrome_extensions.path from users cross join chrome_extensions using (uid) where identifier not in ('aapocclcgogkmnckokdopfmhonfmgoek', 'aohghmighlieiainnegkcijnfilokake', 'apdfllckaahabafndbhieahigkjlhalf','felcaaldnbdncclmgdcncolpebgiejap','pjkljhegncpnkpknbcohdijeoejaedia','pkedcjkdefgpdelpbcmbmeomcjbeemfm','blpcfgokakmgnkcojhhkbfbldkacnbeo','ghbmnnjooekpmoecnnnilnnbdlolhkhi','nmmhkkegccagdldgiimedpiccmgmieda');
+---
+apiVersion: v1
+kind: pack
+spec:
+ name: examples
+ targets:
+ labels:
+ - All Hosts
+ queries:
+ - query: users
+ interval: 180
+ removed: false
+ - query: chrome-extensions
+ interval: 180
+ removed: false
diff --git a/salt/fleet/packs/hh/osquery.conf b/salt/fleet/packs/hh/osquery.conf
new file mode 100644
index 000000000..232c8419c
--- /dev/null
+++ b/salt/fleet/packs/hh/osquery.conf
@@ -0,0 +1,29 @@
+apiVersion: v1
+kind: options
+spec:
+ config:
+ decorators:
+ always:
+ - SELECT codename FROM os_version;
+ - SELECT uuid AS LiveQuery FROM system_info;
+ - SELECT address AS EndpointIP1 FROM interface_addresses where address not
+ like '%:%' and address not like '127%' and address not like '169%' order by
+ interface desc limit 1;
+ - SELECT address AS EndpointIP2 FROM interface_addresses where address not
+ like '%:%' and address not like '127%' and address not like '169%' order by
+ interface asc limit 1;
+ - SELECT hardware_serial FROM system_info;
+ - SELECT hostname AS hostname FROM system_info;
+ options:
+ decorations_top_level: true
+ disable_distributed: false
+ distributed_interval: 10
+ distributed_plugin: tls
+ distributed_tls_max_attempts: 3
+ distributed_tls_read_endpoint: /api/v1/osquery/distributed/read
+ distributed_tls_write_endpoint: /api/v1/osquery/distributed/write
+ logger_plugin: tls
+ logger_tls_endpoint: /api/v1/osquery/log
+ logger_tls_period: 10
+ pack_delimiter: _
+ overrides: {}
diff --git a/salt/fleet/packs/palantir/Fleet/Endpoints/MacOS/osquery.yaml b/salt/fleet/packs/palantir/Fleet/Endpoints/MacOS/osquery.yaml
new file mode 100644
index 000000000..f6e32d0d5
--- /dev/null
+++ b/salt/fleet/packs/palantir/Fleet/Endpoints/MacOS/osquery.yaml
@@ -0,0 +1,694 @@
+---
+apiVersion: v1
+kind: pack
+spec:
+ name: mac-pack
+ queries:
+ - description: 'Query to monitor files for changes inside of /etc/emon.d/ or /private/var/db/emondClients/
+ which can be used for persistence: (https://www.xorrior.com/emond-persistence/)'
+ interval: 3600
+ name: emond
+ platform: darwin
+ query: emond
+ - description: 'Snapshot query to monitor files for changes inside of /etc/emon.d/
+ or /private/var/db/emondClients/ which can be used for persistence: (https://www.xorrior.com/emond-persistence/)'
+ interval: 28800
+ name: emond_snapshot
+ platform: darwin
+ query: emond_snapshot
+ snapshot: true
+ - description: Track time/action changes to files specified in configuration data.
+ interval: 300
+ name: file_events
+ platform: darwin
+ query: file_events
+ removed: false
+ - description: The installed homebrew package database.
+ interval: 28800
+ name: homebrew_packages_snapshot
+ platform: darwin
+ query: homebrew_packages_snapshot
+ snapshot: true
+ - description: List kernel extensions, their signing status, and their hashes (excluding
+ extensions signed by Apple)
+ interval: 3600
+ name: macosx_kextstat
+ platform: darwin
+ query: macosx_kextstat
+ - description: Checks the MD5 hash of /etc/rc.common and records the results if
+ the hash differs from the default value. /etc/rc.common can be used for persistence.
+ interval: 3600
+ name: rc.common
+ platform: darwin
+ query: rc.common
+ - description: Returns information about installed event taps. Can be used to detect
+ keyloggers
+ interval: 300
+ name: event_taps
+ platform: darwin
+ query: event_taps
+ - description: LaunchAgents and LaunchDaemons from default search paths.
+ interval: 3600
+ name: launchd
+ platform: darwin
+ query: launchd
+ - description: Snapshot query for launchd
+ interval: 28800
+ name: launchd_snapshot
+ platform: darwin
+ query: launchd_snapshot
+ snapshot: true
+ - description: Detect the presence of the LD_PRELOAD environment variable
+ interval: 60
+ name: ld_preload
+ platform: darwin
+ query: ld_preload
+ removed: false
+ - description: USB devices that are actively plugged into the host system.
+ interval: 300
+ name: usb_devices
+ platform: darwin
+ query: usb_devices
+ - description: System mounted devices and filesystems (not process specific).
+ interval: 3600
+ name: mounts
+ platform: darwin
+ query: mounts
+ removed: false
+ - description: Apple NVRAM variable listing.
+ interval: 3600
+ name: nvram
+ platform: darwin
+ query: nvram
+ removed: false
+ - description: Line parsed values from system and user cron/tab.
+ interval: 3600
+ name: crontab
+ platform: darwin
+ query: crontab
+ - description: Hardware (PCI/USB/HID) events from UDEV or IOKit.
+ interval: 300
+ name: hardware_events
+ platform: darwin
+ query: hardware_events
+ removed: false
+ - description: The installed homebrew package database.
+ interval: 3600
+ name: homebrew_packages
+ platform: darwin
+ query: homebrew_packages
+ - description: OS X applications installed in known search paths (e.g., /Applications).
+ interval: 3600
+ name: installed_applications
+ platform: darwin
+ query: installed_applications
+ - description: System logins and logouts.
+ interval: 3600
+ name: last
+ platform: darwin
+ query: last
+ removed: false
+ - description: Snapshot query for macosx_kextstat
+ interval: 28800
+ name: macosx_kextstat_snapshot
+ platform: darwin
+ query: macosx_kextstat_snapshot
+ snapshot: true
+ - description: Checks the MD5 hash of /etc/rc.common and records the results if
+ the hash differs from the default value. /etc/rc.common can be used for persistence.
+ interval: 28800
+ name: rc.common_snapshot
+ platform: darwin
+ query: rc.common_snapshot
+ snapshot: true
+ - description: Safari browser extension details for all users.
+ interval: 3600
+ name: safari_extensions
+ platform: darwin
+ query: safari_extensions
+ - description: suid binaries in common locations.
+ interval: 28800
+ name: suid_bin
+ platform: darwin
+ query: suid_bin
+ removed: false
+ - description: Local system users.
+ interval: 28800
+ name: users
+ platform: darwin
+ query: users
+ - description: List authorized_keys for each user on the system
+ interval: 28800
+ name: authorized_keys
+ platform: darwin
+ query: authorized_keys
+ - description: Application, System, and Mobile App crash logs.
+ interval: 3600
+ name: crashes
+ platform: darwin
+ query: crashes
+ removed: false
+ - description: Displays the percentage of free space available on the primary disk
+ partition
+ interval: 3600
+ name: disk_free_space_pct
+ platform: darwin
+ query: disk_free_space_pct
+ snapshot: true
+ - description: Retrieve the interface name, IP address, and MAC address for all
+ interfaces on the host.
+ interval: 600
+ name: network_interfaces_snapshot
+ platform: darwin
+ query: network_interfaces_snapshot
+ snapshot: true
+ - description: Information about EFI/UEFI/ROM and platform/boot.
+ interval: 28800
+ name: platform_info
+ platform: darwin
+ query: platform_info
+ removed: false
+ - description: System uptime
+ interval: 1800
+ name: uptime
+ platform: darwin
+ query: uptime
+ snapshot: true
+ - description: MD5 hash of boot.efi
+ interval: 28800
+ name: boot_efi_hash
+ platform: darwin
+ query: boot_efi_hash
+ - description: Snapshot query for Chrome extensions
+ interval: 28800
+ name: chrome_extensions_snapshot
+ platform: darwin
+ query: chrome_extensions_snapshot
+ - description: Snapshot query for installed_applications
+ interval: 28800
+ name: installed_applications_snapshot
+ platform: darwin
+ query: installed_applications_snapshot
+ snapshot: true
+ - description: NFS shares exported by the host.
+ interval: 3600
+ name: nfs_shares
+ platform: darwin
+ query: nfs_shares
+ removed: false
+ - description: List the version of the resident operating system
+ interval: 28800
+ name: os_version
+ platform: darwin
+ query: os_version
+ - description: Applications and binaries set as user/login startup items.
+ interval: 3600
+ name: startup_items
+ platform: darwin
+ query: startup_items
+ - description: All C/NPAPI browser plugin details for all users.
+ interval: 3600
+ name: browser_plugins
+ platform: darwin
+ query: browser_plugins
+ - description: List installed Firefox addons for all users
+ interval: 3600
+ name: firefox_addons
+ platform: darwin
+ query: firefox_addons
+ - description: Discover hosts that have IP forwarding enabled
+ interval: 28800
+ name: ip_forwarding_enabled
+ platform: darwin
+ query: ip_forwarding_enabled
+ removed: false
+ - description: Platform info snapshot query
+ interval: 28800
+ name: platform_info_snapshot
+ platform: darwin
+ query: platform_info_snapshot
+ - description: Python packages installed in a system.
+ interval: 3600
+ name: python_packages
+ platform: darwin
+ query: python_packages
+ - description: List installed Chrome Extensions for all users
+ interval: 3600
+ name: chrome_extensions
+ platform: darwin
+ query: chrome_extensions
+ - description: Disk encryption status and information.
+ interval: 3600
+ name: disk_encryption
+ platform: darwin
+ query: disk_encryption
+ - description: Local system users.
+ interval: 28800
+ name: users_snapshot
+ platform: darwin
+ query: users_snapshot
+ - description: OS X known/remembered Wi-Fi networks list.
+ interval: 28800
+ name: wireless_networks
+ platform: darwin
+ query: wireless_networks
+ removed: false
+ - description: Determine if the host is running the expected EFI firmware version
+ given their Mac hardware and OS build version (https://github.com/duo-labs/EFIgy)
+ interval: 28800
+ name: efigy
+ platform: darwin
+ query: efigy
+ snapshot: true
+ - description: List the contents of /etc/hosts
+ interval: 28800
+ name: etc_hosts
+ platform: darwin
+ query: etc_hosts
+ - description: Operating system version snapshot query
+ interval: 28800
+ name: os_version_snapshot
+ platform: darwin
+ query: os_version_snapshot
+ snapshot: true
+ - description: Information about the resident osquery process
+ interval: 28800
+ name: osquery_info
+ platform: darwin
+ query: osquery_info
+ snapshot: true
+ - description: Apple's System Integrity Protection (rootless) status.
+ interval: 3600
+ name: sip_config
+ platform: darwin
+ query: sip_config
+ - description: Returns the private keys in the users ~/.ssh directory and whether
+ or not they are encrypted.
+ interval: 3600
+ name: user_ssh_keys
+ platform: darwin
+ query: user_ssh_keys
+ removed: false
+ targets:
+ labels: null
+---
+apiVersion: v1
+kind: query
+spec:
+ description: 'Query to monitor files for changes inside of /etc/emon.d/ or /private/var/db/emondClients/
+ which can be used for persistence: (https://www.xorrior.com/emond-persistence/)'
+ name: emond
+ query: SELECT * FROM file JOIN hash USING (path) WHERE (path LIKE '/etc/emond.d/%%'
+ AND sha256!='f19f881084f599fa261243918d922373eab14623e78d23c41fcc031aa21ca7b6'
+ AND sha256!='20909c75c14c9f5360a48c889d06a0d6cfbfa28080348940fc077761744f2aa5'
+ AND sha256!='36a9e7f1c95b82ffb99743e0c5c4ce95d83c9a430aac59f84ef3cbfab6145068'AND
+ sha256!='2aafb4238cbdd40c66591c01798da942f62c7f06bb84c9328a40581fc22c4af8'AND
+ sha256!='590192452963fdddc1990cd42c3bf77b3532b3e4a2c13e14e42c0d6a4c881ac4'AND
+ sha256!='69f416293592c0a96733498788b79d6516ed1ad5327ac7cafd6d12e8b231519f'AND
+ sha256!='') OR (path LIKE '/private/var/db/emondClients/%');
+---
+apiVersion: v1
+kind: query
+spec:
+ description: 'Snapshot query to monitor files for changes inside of /etc/emon.d/
+ or /private/var/db/emondClients/ which can be used for persistence: (https://www.xorrior.com/emond-persistence/)'
+ name: emond_snapshot
+ query: SELECT * FROM file JOIN hash USING (path) WHERE (path LIKE '/etc/emond.d/%%'
+ AND sha256!='f19f881084f599fa261243918d922373eab14623e78d23c41fcc031aa21ca7b6'
+ AND sha256!='20909c75c14c9f5360a48c889d06a0d6cfbfa28080348940fc077761744f2aa5'
+ AND sha256!='36a9e7f1c95b82ffb99743e0c5c4ce95d83c9a430aac59f84ef3cbfab6145068'AND
+ sha256!='2aafb4238cbdd40c66591c01798da942f62c7f06bb84c9328a40581fc22c4af8'AND
+ sha256!='590192452963fdddc1990cd42c3bf77b3532b3e4a2c13e14e42c0d6a4c881ac4'AND
+ sha256!='69f416293592c0a96733498788b79d6516ed1ad5327ac7cafd6d12e8b231519f'AND
+ sha256!='') OR (path LIKE '/private/var/db/emondClients/%');
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Track time/action changes to files specified in configuration data.
+ name: file_events
+ query: SELECT * FROM file_events;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: The installed homebrew package database.
+ name: homebrew_packages_snapshot
+ query: SELECT name, version FROM homebrew_packages;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: List kernel extensions, their signing status, and their hashes (excluding
+ extensions signed by Apple)
+ name: macosx_kextstat
+ query: SELECT kernel_extensions.idx, kernel_extensions.refs, kernel_extensions.size,
+ kernel_extensions.name, kernel_extensions.version, kernel_extensions.linked_against,
+ kernel_extensions.path, signature.signed, signature.identifier, signature.cdhash,
+ signature.team_identifier, signature.authority, hash.md5 FROM hash JOIN kernel_extensions
+ ON hash.path LIKE printf('%s/Contents/MacOS/%', kernel_extensions.path) JOIN signature
+ ON signature.path LIKE printf('%s/Contents/MacOS/%', kernel_extensions.path) WHERE
+ signature.authority!='Software Signing';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Checks the MD5 hash of /etc/rc.common and records the results if the
+ hash differs from the default value. /etc/rc.common can be used for persistence.
+ name: rc.common
+ query: SELECT * FROM hash WHERE path='/etc/rc.common' AND md5!='28ce428faefe6168618867f3ff5527f9'
+ and md5!='';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns information about installed event taps. Can be used to detect
+ keyloggers
+ name: event_taps
+ query: SELECT * FROM event_taps INNER JOIN processes ON event_taps.tapping_process
+ = processes.pid WHERE event_tapped NOT LIKE '%mouse%' AND processes.path NOT LIKE
+ '%.app%' AND processes.path!='/Library/Application Support/org.pqrs/Karabiner-Elements/bin/karabiner_grabber'
+ AND processes.path NOT LIKE '/Users/%/bin/kwm' AND processes.path!='/Library/Rapport/bin/rooksd'
+ AND processes.path!='/usr/sbin/universalaccessd' AND processes.path NOT LIKE '/usr/local/Cellar/%'
+ AND processes.path NOT LIKE '/System/Library/%' AND processes.path NOT LIKE '%/steamapps/%'
+ AND event_taps.enabled=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: LaunchAgents and LaunchDaemons from default search paths.
+ name: launchd
+ query: SELECT * FROM launchd;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Snapshot query for launchd
+ name: launchd_snapshot
+ query: SELECT path, name, label, program, run_at_load, program_arguments FROM launchd
+ WHERE run_at_load=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Detect the presence of the LD_PRELOAD environment variable
+ name: ld_preload
+ query: SELECT process_envs.pid, process_envs.key, process_envs.value, processes.name,
+ processes.path, processes.cmdline, processes.cwd FROM process_envs join processes
+ USING (pid) WHERE key = 'LD_PRELOAD';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: USB devices that are actively plugged into the host system.
+ name: usb_devices
+ query: SELECT * FROM usb_devices;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: System mounted devices and filesystems (not process specific).
+ name: mounts
+ query: SELECT device, device_alias, path, type, blocks_size FROM mounts;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Apple NVRAM variable listing.
+ name: nvram
+ query: SELECT * FROM nvram;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Line parsed values from system and user cron/tab.
+ name: crontab
+ query: SELECT * FROM crontab;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Hardware (PCI/USB/HID) events from UDEV or IOKit.
+ name: hardware_events
+ query: SELECT * FROM hardware_events;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: The installed homebrew package database.
+ name: homebrew_packages
+ query: SELECT * FROM homebrew_packages;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: OS X applications installed in known search paths (e.g., /Applications).
+ name: installed_applications
+ query: SELECT * FROM apps;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: System logins and logouts.
+ name: last
+ query: SELECT * FROM last;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Snapshot query for macosx_kextstat
+ name: macosx_kextstat_snapshot
+ query: SELECT kernel_extensions.name, kernel_extensions.version, kernel_extensions.path,
+ signature.signed, signature.identifier, signature.cdhash, signature.team_identifier,
+ signature.authority, hash.md5 FROM hash JOIN kernel_extensions ON hash.path LIKE
+ printf('%s/Contents/MacOS/%', kernel_extensions.path) JOIN signature ON signature.path
+ LIKE printf('%s/Contents/MacOS/%', kernel_extensions.path) WHERE signature.authority!='Software
+ Signing';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Checks the MD5 hash of /etc/rc.common and records the results if the
+ hash differs from the default value. /etc/rc.common can be used for persistence.
+ name: rc.common_snapshot
+ query: SELECT * FROM hash WHERE path='/etc/rc.common' AND md5!='28ce428faefe6168618867f3ff5527f9'
+ and md5!='';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Safari browser extension details for all users.
+ name: safari_extensions
+ query: SELECT * FROM users JOIN safari_extensions USING (uid);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: suid binaries in common locations.
+ name: suid_bin
+ query: SELECT * FROM suid_bin;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Local system users.
+ name: users
+ query: SELECT * FROM users;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: List authorized_keys for each user on the system
+ name: authorized_keys
+ query: SELECT * FROM users JOIN authorized_keys USING (uid);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Application, System, and Mobile App crash logs.
+ name: crashes
+ query: SELECT uid, datetime, responsible, exception_type, identifier, version, crash_path
+ FROM users JOIN crashes USING (uid);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Displays the percentage of free space available on the primary disk
+ partition
+ name: disk_free_space_pct
+ query: SELECT (blocks_available * 100 / blocks) AS pct FROM mounts WHERE device='/dev/disk1';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Retrieve the interface name, IP address, and MAC address for all interfaces
+ on the host.
+ name: network_interfaces_snapshot
+ query: SELECT a.interface, a.address, d.mac FROM interface_addresses a JOIN interface_details
+ d USING (interface);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Information about EFI/UEFI/ROM and platform/boot.
+ name: platform_info
+ query: SELECT * FROM platform_info;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: System uptime
+ name: uptime
+ query: SELECT * FROM uptime;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: MD5 hash of boot.efi
+ name: boot_efi_hash
+ query: SELECT path, md5 FROM hash WHERE path='/System/Library/CoreServices/boot.efi';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Snapshot query for Chrome extensions
+ name: chrome_extensions_snapshot
+ query: SELECT * FROM users JOIN chrome_extensions USING (uid);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Snapshot query for installed_applications
+ name: installed_applications_snapshot
+ query: SELECT name, path, bundle_short_version, bundle_version, display_name FROM
+ apps;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: NFS shares exported by the host.
+ name: nfs_shares
+ query: SELECT * FROM nfs_shares;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: List the version of the resident operating system
+ name: os_version
+ query: SELECT * FROM os_version;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Applications and binaries set as user/login startup items.
+ name: startup_items
+ query: SELECT * FROM startup_items;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: All C/NPAPI browser plugin details for all users.
+ name: browser_plugins
+ query: SELECT * FROM users JOIN browser_plugins USING (uid);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: List installed Firefox addons for all users
+ name: firefox_addons
+ query: SELECT * FROM users JOIN firefox_addons USING (uid);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Discover hosts that have IP forwarding enabled
+ name: ip_forwarding_enabled
+ query: SELECT * FROM system_controls WHERE name LIKE '%forwarding%' AND name LIKE
+ '%ip%' AND current_value=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Platform info snapshot query
+ name: platform_info_snapshot
+ query: SELECT vendor, version, date, revision from platform_info;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Python packages installed in a system.
+ name: python_packages
+ query: SELECT * FROM python_packages;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: List installed Chrome Extensions for all users
+ name: chrome_extensions
+ query: SELECT * FROM users JOIN chrome_extensions USING (uid);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Disk encryption status and information.
+ name: disk_encryption
+ query: SELECT * FROM disk_encryption;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Local system users.
+ name: users_snapshot
+ query: SELECT * FROM users;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: OS X known/remembered Wi-Fi networks list.
+ name: wireless_networks
+ query: SELECT ssid, network_name, security_type, last_connected, captive_portal,
+ possibly_hidden, roaming, roaming_profile FROM wifi_networks;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Determine if the host is running the expected EFI firmware version
+ given their Mac hardware and OS build version (https://github.com/duo-labs/EFIgy)
+ name: efigy
+ query: SELECT * FROM efigy;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: List the contents of /etc/hosts
+ name: etc_hosts
+ query: SELECT * FROM etc_hosts;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Operating system version snapshot query
+ name: os_version_snapshot
+ query: SELECT * FROM os_version;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Information about the resident osquery process
+ name: osquery_info
+ query: SELECT * FROM osquery_info;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Apple's System Integrity Protection (rootless) status.
+ name: sip_config
+ query: SELECT * FROM sip_config;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns the private keys in the users ~/.ssh directory and whether
+ or not they are encrypted.
+ name: user_ssh_keys
+ query: SELECT * FROM users JOIN user_ssh_keys USING (uid);
diff --git a/salt/fleet/packs/palantir/Fleet/Endpoints/Windows/osquery.yaml b/salt/fleet/packs/palantir/Fleet/Endpoints/Windows/osquery.yaml
new file mode 100644
index 000000000..5e6ea4168
--- /dev/null
+++ b/salt/fleet/packs/palantir/Fleet/Endpoints/Windows/osquery.yaml
@@ -0,0 +1,511 @@
+---
+apiVersion: v1
+kind: pack
+spec:
+ name: windows-pack
+ queries:
+ - description: System info snapshot query
+ interval: 28800
+ name: system_info_snapshot
+ platform: windows
+ query: system_info_snapshot
+ snapshot: true
+ - description: List in-use Windows drivers
+ interval: 3600
+ name: drivers
+ platform: windows
+ query: drivers
+ - description: Displays shared resources on a computer system running Windows. This
+ may be a disk drive, printer, interprocess communication, or other sharable
+ device.
+ interval: 3600
+ name: shared_resources
+ platform: windows
+ query: shared_resources
+ - description: Lists all the patches applied
+ interval: 3600
+ name: patches
+ platform: windows
+ query: patches
+ removed: false
+ - description: Pipes snapshot query
+ interval: 28800
+ name: pipes_snapshot
+ platform: windows
+ query: pipes_snapshot
+ snapshot: true
+ - description: Programs snapshot query
+ interval: 28800
+ name: programs_snapshot
+ platform: windows
+ query: programs_snapshot
+ snapshot: true
+ - description: Services snapshot query
+ interval: 28800
+ name: services_snapshot
+ platform: windows
+ query: services_snapshot
+ snapshot: true
+ - description: WMI CommandLineEventConsumer, which can be used for persistence on
+ Windows. See https://www.blackhat.com/docs/us-15/materials/us-15-Graeber-Abusing-Windows-Management-Instrumentation-WMI-To-Build-A-Persistent%20Asynchronous-And-Fileless-Backdoor-wp.pdf
+ for more details.
+ interval: 3600
+ name: wmi_cli_event_consumers
+ platform: windows
+ query: wmi_cli_event_consumers
+ - description: Lists the relationship between event consumers and filters.
+ interval: 3600
+ name: wmi_filter_consumer_binding
+ platform: windows
+ query: wmi_filter_consumer_binding
+ - description: Snapshot query for Chrome extensions
+ interval: 3600
+ name: chrome_extensions_snapshot
+ platform: windows
+ query: chrome_extensions_snapshot
+ - description: Retrieve the interface name, IP address, and MAC address for all
+ interfaces on the host.
+ interval: 600
+ name: network_interfaces_snapshot
+ platform: windows
+ query: network_interfaces_snapshot
+ snapshot: true
+ - description: Local system users.
+ interval: 3600
+ name: users
+ platform: windows
+ query: users
+ - description: Snapshot query for WMI event consumers.
+ interval: 28800
+ name: wmi_cli_event_consumers_snapshot
+ platform: windows
+ query: wmi_cli_event_consumers_snapshot
+ snapshot: true
+ - description: List all certificates in the trust store
+ interval: 3600
+ name: certificates
+ platform: windows
+ query: certificates
+ removed: false
+ - description: Drivers snapshot query
+ interval: 28800
+ name: drivers_snapshot
+ platform: windows
+ query: drivers_snapshot
+ snapshot: true
+ - description: Lists WMI event filters.
+ interval: 3600
+ name: wmi_event_filters
+ platform: windows
+ query: wmi_event_filters
+ - description: List installed Internet Explorer extensions
+ interval: 3600
+ name: ie_extensions
+ platform: windows
+ query: ie_extensions
+ - description: List the kernel path, version, etc.
+ interval: 3600
+ name: kernel_info
+ platform: windows
+ query: kernel_info
+ - description: List the version of the resident operating system
+ interval: 3600
+ name: os_version
+ platform: windows
+ query: os_version
+ - description: Patches snapshot query
+ interval: 28800
+ name: patches_snapshot
+ platform: windows
+ query: patches_snapshot
+ snapshot: true
+ - description: Named and Anonymous pipes.
+ interval: 3600
+ name: pipes
+ platform: windows
+ query: pipes
+ removed: false
+ - description: Lists installed programs
+ interval: 0
+ name: programs
+ platform: windows
+ query: programs
+ - description: List all certificates in the trust store (snapshot query)
+ interval: 0
+ name: certificates_snapshot
+ platform: windows
+ query: certificates_snapshot
+ snapshot: true
+ - description: List the contents of the Windows hosts file
+ interval: 3600
+ name: etc_hosts
+ platform: windows
+ query: etc_hosts
+ - description: Lists all of the tasks in the Windows task scheduler
+ interval: 3600
+ name: scheduled_tasks
+ platform: windows
+ query: scheduled_tasks
+ - description: Extracted information from Windows crash logs (Minidumps).
+ interval: 3600
+ name: windows_crashes
+ platform: windows
+ query: windows_crashes
+ removed: false
+ - description: System uptime
+ interval: 3600
+ name: uptime
+ platform: windows
+ query: uptime
+ snapshot: true
+ - description: Snapshot query for WMI script event consumers.
+ interval: 3600
+ name: wmi_script_event_consumers
+ platform: windows
+ query: wmi_script_event_consumers
+ snapshot: true
+ - description: List installed Chocolatey packages
+ interval: 3600
+ name: chocolatey_packages
+ platform: windows
+ query: chocolatey_packages
+ - description: Shared resources snapshot query
+ interval: 28800
+ name: shared_resources_snapshot
+ platform: windows
+ query: shared_resources_snapshot
+ snapshot: true
+ - description: Lists all installed services configured to start automatically at
+ boot
+ interval: 3600
+ name: services
+ platform: windows
+ query: services
+ - description: Users snapshot query
+ interval: 28800
+ name: users_snapshot
+ platform: windows
+ query: users_snapshot
+ snapshot: true
+ - description: List installed Chrome Extensions for all users
+ interval: 3600
+ name: chrome_extensions
+ platform: windows
+ query: chrome_extensions
+ - description: Operating system version snapshot query
+ interval: 28800
+ name: os_version_snapshot
+ platform: windows
+ query: os_version_snapshot
+ snapshot: true
+ - description: System information for identification.
+ interval: 3600
+ name: system_info
+ platform: windows
+ query: system_info
+ - description: Snapshot query for WMI event filters.
+ interval: 28800
+ name: wmi_event_filters_snapshot
+ platform: windows
+ query: wmi_event_filters_snapshot
+ snapshot: true
+ - description: Snapshot query for WMI filter consumer bindings.
+ interval: 28800
+ name: wmi_filter_consumer_binding_snapshot
+ platform: windows
+ query: wmi_filter_consumer_binding_snapshot
+ snapshot: true
+ - description: Information about the resident osquery process
+ interval: 28800
+ name: osquery_info
+ platform: windows
+ query: osquery_info
+ snapshot: true
+ - description: Scheduled Tasks snapshot query
+ interval: 28800
+ name: scheduled_tasks_snapshot
+ platform: windows
+ query: scheduled_tasks_snapshot
+ snapshot: true
+ targets:
+ labels: null
+---
+apiVersion: v1
+kind: query
+spec:
+ description: System info snapshot query
+ name: system_info_snapshot
+ query: SELECT * FROM system_info;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: List in-use Windows drivers
+ name: drivers
+ query: SELECT * FROM drivers;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Displays shared resources on a computer system running Windows. This
+ may be a disk drive, printer, interprocess communication, or other sharable device.
+ name: shared_resources
+ query: SELECT * FROM shared_resources;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Lists all the patches applied
+ name: patches
+ query: SELECT * FROM patches;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Pipes snapshot query
+ name: pipes_snapshot
+ query: SELECT processes.path, processes.cmdline, processes.uid, processes.on_disk,
+ pipes.name, pid FROM pipes JOIN processes USING (pid);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Programs snapshot query
+ name: programs_snapshot
+ query: SELECT * FROM programs;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Services snapshot query
+ name: services_snapshot
+ query: SELECT * FROM services;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: WMI CommandLineEventConsumer, which can be used for persistence on
+ Windows. See https://www.blackhat.com/docs/us-15/materials/us-15-Graeber-Abusing-Windows-Management-Instrumentation-WMI-To-Build-A-Persistent%20Asynchronous-And-Fileless-Backdoor-wp.pdf
+ for more details.
+ name: wmi_cli_event_consumers
+ query: SELECT * FROM wmi_cli_event_consumers;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Lists the relationship between event consumers and filters.
+ name: wmi_filter_consumer_binding
+ query: SELECT * FROM wmi_filter_consumer_binding;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Snapshot query for Chrome extensions
+ name: chrome_extensions_snapshot
+ query: SELECT * FROM users JOIN chrome_extensions USING (uid);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Retrieve the interface name, IP address, and MAC address for all interfaces
+ on the host.
+ name: network_interfaces_snapshot
+ query: SELECT a.interface, a.address, d.mac FROM interface_addresses a JOIN interface_details
+ d USING (interface);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Local system users.
+ name: users
+ query: SELECT * FROM users;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Snapshot query for WMI event consumers.
+ name: wmi_cli_event_consumers_snapshot
+ query: SELECT * FROM wmi_cli_event_consumers;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: List all certificates in the trust store
+ name: certificates
+ query: SELECT * FROM certificates WHERE path != 'Other People';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Drivers snapshot query
+ name: drivers_snapshot
+ query: SELECT * FROM drivers;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Lists WMI event filters.
+ name: wmi_event_filters
+ query: SELECT * FROM wmi_event_filters;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: List installed Internet Explorer extensions
+ name: ie_extensions
+ query: SELECT * FROM ie_extensions;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: List the kernel path, version, etc.
+ name: kernel_info
+ query: SELECT * FROM kernel_info;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: List the version of the resident operating system
+ name: os_version
+ query: SELECT * FROM os_version;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Patches snapshot query
+ name: patches_snapshot
+ query: SELECT * FROM patches;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Named and Anonymous pipes.
+ name: pipes
+ query: SELECT processes.path, processes.cmdline, processes.uid, processes.on_disk,
+ pipes.name, pid FROM pipes JOIN processes USING (pid);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Lists installed programs
+ name: programs
+ query: SELECT * FROM programs;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: List all certificates in the trust store (snapshot query)
+ name: certificates_snapshot
+ query: SELECT * FROM certificates WHERE path != 'Other People';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: List the contents of the Windows hosts file
+ name: etc_hosts
+ query: SELECT * FROM etc_hosts;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Lists all of the tasks in the Windows task scheduler
+ name: scheduled_tasks
+ query: SELECT * FROM scheduled_tasks;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Extracted information from Windows crash logs (Minidumps).
+ name: windows_crashes
+ query: SELECT * FROM windows_crashes;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: System uptime
+ name: uptime
+ query: SELECT * FROM uptime;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Snapshot query for WMI script event consumers.
+ name: wmi_script_event_consumers
+ query: SELECT * FROM wmi_script_event_consumers;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: List installed Chocolatey packages
+ name: chocolatey_packages
+ query: SELECT * FROM chocolatey_packages;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Shared resources snapshot query
+ name: shared_resources_snapshot
+ query: SELECT * FROM shared_resources;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Lists all installed services configured to start automatically at boot
+ name: services
+ query: SELECT * FROM services WHERE start_type='DEMAND_START' OR start_type='AUTO_START';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Users snapshot query
+ name: users_snapshot
+ query: SELECT * FROM users;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: List installed Chrome Extensions for all users
+ name: chrome_extensions
+ query: SELECT * FROM users JOIN chrome_extensions USING (uid);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Operating system version snapshot query
+ name: os_version_snapshot
+ query: SELECT * FROM os_version;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: System information for identification.
+ name: system_info
+ query: SELECT * FROM system_info;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Snapshot query for WMI event filters.
+ name: wmi_event_filters_snapshot
+ query: SELECT * FROM wmi_event_filters;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Snapshot query for WMI filter consumer bindings.
+ name: wmi_filter_consumer_binding_snapshot
+ query: SELECT * FROM wmi_filter_consumer_binding;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Information about the resident osquery process
+ name: osquery_info
+ query: SELECT * FROM osquery_info;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Scheduled Tasks snapshot query
+ name: scheduled_tasks_snapshot
+ query: SELECT * FROM scheduled_tasks;
diff --git a/salt/fleet/packs/palantir/Fleet/Endpoints/options.yaml b/salt/fleet/packs/palantir/Fleet/Endpoints/options.yaml
new file mode 100644
index 000000000..dd53bae81
--- /dev/null
+++ b/salt/fleet/packs/palantir/Fleet/Endpoints/options.yaml
@@ -0,0 +1,46 @@
+apiVersion: v1
+kind: options
+spec:
+ config:
+ decorators:
+ always:
+ - SELECT hostname AS hostname FROM system_info;
+ - SELECT codename FROM os_version;
+ - SELECT uuid AS LiveQuery FROM system_info;
+ - SELECT address AS EndpointIP1 FROM interface_addresses where address not
+ like '%:%' and address not like '127%' and address not like '169%' order by
+ interface desc limit 1;
+ - SELECT address AS EndpointIP2 FROM interface_addresses where address not
+ like '%:%' and address not like '127%' and address not like '169%' order by
+ interface asc limit 1;
+ - SELECT hardware_serial FROM system_info;
+ file_paths:
+ binaries:
+ - /usr/bin/%%
+ - /usr/sbin/%%
+ - /bin/%%
+ - /sbin/%%
+ - /usr/local/bin/%%
+ - /usr/local/sbin/%%
+ - /opt/bin/%%
+ - /opt/sbin/%%
+ configuration:
+ - /etc/%%
+ efi:
+ - /System/Library/CoreServices/boot.efi
+ options:
+ decorations_top_level: true
+ disable_distributed: false
+ disable_tables: windows_events
+ distributed_interval: 10
+ distributed_plugin: tls
+ distributed_tls_max_attempts: 3
+ distributed_tls_read_endpoint: /api/v1/osquery/distributed/read
+ distributed_tls_write_endpoint: /api/v1/osquery/distributed/write
+ logger_plugin: tls
+ logger_snapshot_event_type: true
+ logger_tls_endpoint: /api/v1/osquery/log
+ logger_tls_period: 10
+ pack_delimiter: /
+ schedule_splay_percent: 10
+ overrides: {}
diff --git a/salt/fleet/packs/palantir/Fleet/Endpoints/packs/performance-metrics.yaml b/salt/fleet/packs/palantir/Fleet/Endpoints/packs/performance-metrics.yaml
new file mode 100644
index 000000000..25c6a5fbd
--- /dev/null
+++ b/salt/fleet/packs/palantir/Fleet/Endpoints/packs/performance-metrics.yaml
@@ -0,0 +1,69 @@
+---
+apiVersion: v1
+kind: pack
+spec:
+ name: performance-metrics
+ queries:
+ - description: Records the CPU time and memory usage for each individual query.
+ Helpful for identifying queries that may impact performance.
+ interval: 1800
+ name: per_query_perf
+ query: per_query_perf
+ snapshot: true
+ - description: Track the amount of CPU time used by osquery.
+ interval: 1800
+ name: runtime_perf
+ query: runtime_perf
+ snapshot: true
+ - description: Track the percentage of total CPU time utilized by $endpoint_security_tool
+ interval: 1800
+ name: endpoint_security_tool_perf
+ query: endpoint_security_tool_perf
+ snapshot: true
+ - description: Track the percentage of total CPU time utilized by $backup_tool
+ interval: 1800
+ name: backup_tool_perf
+ query: backup_tool_perf
+ snapshot: true
+ targets:
+ labels: null
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Records the CPU time and memory usage for each individual query. Helpful
+ for identifying queries that may impact performance.
+ name: per_query_perf
+ query: SELECT name, interval, executions, output_size, wall_time, (user_time/executions)
+ AS avg_user_time, (system_time/executions) AS avg_system_time, average_memory
+ FROM osquery_schedule;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Track the amount of CPU time used by osquery.
+ name: runtime_perf
+ query: SELECT ov.version AS os_version, ov.platform AS os_platform, ov.codename
+ AS os_codename, i.*, p.resident_size, p.user_time, p.system_time, time.minutes
+ AS counter, db.db_size_mb AS database_size FROM osquery_info i, os_version ov,
+ processes p, time, (SELECT (sum(size) / 1024) / 1024.0 AS db_size_mb FROM (SELECT
+ value FROM osquery_flags WHERE name = 'database_path' LIMIT 1) flags, file WHERE
+ path LIKE flags.value || '%%' AND type = 'regular') db WHERE p.pid = i.pid;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Track the percentage of total CPU time utilized by $endpoint_security_tool
+ name: endpoint_security_tool_perf
+ query: SELECT ((tool_time*100)/(SUM(system_time) + SUM(user_time))) AS pct FROM
+ processes, (SELECT (SUM(processes.system_time)+SUM(processes.user_time)) AS tool_time
+ FROM processes WHERE name='endpoint_security_tool');
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Track the percentage of total CPU time utilized by $backup_tool
+ name: backup_tool_perf
+ query: SELECT ((backuptool_time*100)/(SUM(system_time) + SUM(user_time))) AS pct
+ FROM processes, (SELECT (SUM(processes.system_time)+SUM(processes.user_time))
+ AS backuptool_time FROM processes WHERE name='backup_tool');
diff --git a/salt/fleet/packs/palantir/Fleet/Endpoints/packs/security-tooling-checks.yaml b/salt/fleet/packs/palantir/Fleet/Endpoints/packs/security-tooling-checks.yaml
new file mode 100644
index 000000000..a65f59dd4
--- /dev/null
+++ b/salt/fleet/packs/palantir/Fleet/Endpoints/packs/security-tooling-checks.yaml
@@ -0,0 +1,59 @@
+---
+apiVersion: v1
+kind: pack
+spec:
+ name: security-tooling-checks
+ queries:
+ - description: Returns an event if a EndpointSecurityTool process is not found running
+ from /Applications/EndpointSecurityTool' (OSX) or 'c:\endpointsecuritytool.exe'
+ (Windows)
+ interval: 28800
+ name: endpoint_security_tool_not_running
+ platform: windows,darwin
+ query: endpoint_security_tool_not_running
+ snapshot: true
+ - description: "Returns an event if a BackupTool process is not found running from
+ '/Applications/BackupTool' (OSX) or 'c:\backuptool.exe' (Windows)"
+ interval: 28800
+ name: backup_tool_not_running
+ platform: windows,darwin
+ query: backup_tool_not_running
+ snapshot: true
+ - description: Returns the content of the key if the backend server does not match
+ the expected value
+ interval: 3600
+ name: endpoint_security_tool_backend_server_registry_misconfigured
+ platform: windows
+ query: endpoint_security_tool_backend_server_registry_misconfigured
+ targets:
+ labels: null
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns an event if a EndpointSecurityTool process is not found running
+ from /Applications/EndpointSecurityTool' (OSX) or 'c:\endpointsecuritytool.exe'
+ (Windows)
+ name: endpoint_security_tool_not_running
+ query: SELECT IFNULL(process_count,0) as process_exists FROM (SELECT count(*) as
+ process_count from processes where path='/Applications/EndpointSecurityTool' OR
+ lower(path)='c:\endpointsecuritytool.exe') where process_exists!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: "Returns an event if a BackupTool process is not found running from
+ '/Applications/BackupTool' (OSX) or 'c:\backuptool.exe' (Windows)"
+ name: backup_tool_not_running
+ query: SELECT IFNULL(process_count,0) as process_exists FROM (SELECT count(*) as
+ process_count from processes where path='/Applications/BackupTool' OR lower(path)
+ LIKE 'c:\backuptool.exe') where process_exists!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns the content of the key if the backend server does not match
+ the expected value
+ name: endpoint_security_tool_backend_server_registry_misconfigured
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\Software\EndpointSecurityTool\BackendServerLocation'
+ AND data!='https://expected_endpoint.local';
diff --git a/salt/fleet/packs/palantir/Fleet/Endpoints/packs/windows-application-security.yaml b/salt/fleet/packs/palantir/Fleet/Endpoints/packs/windows-application-security.yaml
new file mode 100644
index 000000000..43c034a52
--- /dev/null
+++ b/salt/fleet/packs/palantir/Fleet/Endpoints/packs/windows-application-security.yaml
@@ -0,0 +1,93 @@
+---
+apiVersion: v1
+kind: pack
+spec:
+ name: windows-application-security
+ queries:
+ - description: Controls Bitlocker full-disk encryption settings.
+ interval: 3600
+ name: bitlocker_autoencrypt_settings_registry
+ platform: windows
+ query: bitlocker_autoencrypt_settings_registry
+ - description: Controls Bitlocker full-disk encryption settings.
+ interval: 3600
+ name: bitlocker_fde_settings_registry
+ platform: windows
+ query: bitlocker_fde_settings_registry
+ - description: Controls Google Chrome plugins that are forcibly installed.
+ interval: 3600
+ name: chrome_extension_force_list_registry
+ platform: windows
+ query: chrome_extension_force_list_registry
+ - description: Controls EMET-protected applications and system settings.
+ interval: 3600
+ name: emet_settings_registry
+ platform: windows
+ query: emet_settings_registry
+ - description: Controls Local Administrative Password Solution (LAPS) settings.
+ interval: 3600
+ name: microsoft_laps_settings_registry
+ platform: windows
+ query: microsoft_laps_settings_registry
+ - description: Controls Windows Passport for Work (Hello) settings.
+ interval: 3600
+ name: passport_for_work_settings_registry
+ platform: windows
+ query: passport_for_work_settings_registry
+ - description: Controls UAC. A setting of 0 indicates that UAC is disabled.
+ interval: 3600
+ name: uac_settings_registry
+ platform: windows
+ query: uac_settings_registry
+ targets:
+ labels: null
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls Bitlocker full-disk encryption settings.
+ name: bitlocker_autoencrypt_settings_registry
+ query: SELECT * FROM registry WHERE key LIKE 'HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Bitlocker\%%';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls Bitlocker full-disk encryption settings.
+ name: bitlocker_fde_settings_registry
+ query: SELECT * FROM registry WHERE key LIKE 'HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\FVE\%%';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls Google Chrome plugins that are forcibly installed.
+ name: chrome_extension_force_list_registry
+ query: SELECT * FROM registry WHERE key='HKEY_LOCAL_MACHINE\Software\Policies\Google\Chrome\ExtensionInstallForcelist';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls EMET-protected applications and system settings.
+ name: emet_settings_registry
+ query: SELECT * FROM registry WHERE key LIKE 'HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\EMET\%%';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls Local Administrative Password Solution (LAPS) settings.
+ name: microsoft_laps_settings_registry
+ query: SELECT * FROM registry WHERE key='HKEY_LOCAL_MACHINE\Software\Policies\Microsoft
+ Services\AdmPwd';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls Windows Passport for Work (Hello) settings.
+ name: passport_for_work_settings_registry
+ query: SELECT * FROM registry WHERE path LIKE 'HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\PassportForWork\%%';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls UAC. A setting of 0 indicates that UAC is disabled.
+ name: uac_settings_registry
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA';
diff --git a/salt/fleet/packs/palantir/Fleet/Endpoints/packs/windows-compliance.yaml b/salt/fleet/packs/palantir/Fleet/Endpoints/packs/windows-compliance.yaml
new file mode 100644
index 000000000..eef5f3fcc
--- /dev/null
+++ b/salt/fleet/packs/palantir/Fleet/Endpoints/packs/windows-compliance.yaml
@@ -0,0 +1,321 @@
+---
+apiVersion: v1
+kind: pack
+spec:
+ name: windows-compliance
+ queries:
+ - description: 'This key does not exist by default and controls enabling/disabling
+ error reporting display. Some malware creates this key and sets the value to
+ 0. See: https://www.documentcloud.org/documents/3477047-Document-07-Neel-Mehta-Billy-Leonard-and-Shane.html'
+ interval: 3600
+ name: error_display_ui_registry
+ platform: windows
+ query: error_display_ui_registry
+ - description: Entries for the FileRenameOperation support the MoveFileEx delayed-rename
+ and delayed-delete capabilities. Sometimes used as a self-deletion technique
+ for malware.
+ interval: 3600
+ name: filerenameoperations_registry
+ platform: windows
+ query: filerenameoperations_registry
+ - description: Controls which security packages store credentials in LSA memory,
+ secure boot, etc.
+ interval: 3600
+ name: local_security_authority_registry
+ platform: windows
+ query: local_security_authority_registry
+ - description: 'This key exists by default and has a default value of 1. Setting
+ this key to 0 disables logging errors/crashes to the System event channel. Some
+ malware sets this value to 0. See: https://www.documentcloud.org/documents/3477047-Document-07-Neel-Mehta-Billy-Leonard-and-Shane.html'
+ interval: 3600
+ name: log_errors_registry
+ platform: windows
+ query: log_errors_registry
+ - description: Controls Windows security provider configurations
+ interval: 3600
+ name: security_providers_registry
+ platform: windows
+ query: security_providers_registry
+ - description: Controls Windows Update server location and installation behavior.
+ interval: 3600
+ name: windows_update_settings_registry
+ platform: windows
+ query: windows_update_settings_registry
+ - description: 'Controls enabling/disabling crash dumps. This key has a default
+ value of 7, but some malware sets this value to 0. See: https://www.documentcloud.org/documents/3477047-Document-07-Neel-Mehta-Billy-Leonard-and-Shane.html'
+ interval: 3600
+ name: crash_dump_registry
+ platform: windows
+ query: crash_dump_registry
+ - description: 'This registry key specifies the path to a DLL to be loaded by a
+ Windows DNS server. This key does not exist by default. Can allow privesc: https://medium.com/@esnesenon/feature-not-bug-dnsadmin-to-dc-compromise-in-one-line-a0f779b8dc83'
+ interval: 3600
+ name: dns_plugin_dll_registry
+ platform: windows
+ query: dns_plugin_dll_registry
+ - description: The KnownDlls key defines the set of DLLs that are first searched
+ during system startup.
+ interval: 3600
+ name: knowndlls_registry
+ platform: windows
+ query: knowndlls_registry
+ - description: This key exists by default and has a default value of 1. Terminal
+ service connections are allowed to the host when the key value is set to 0
+ interval: 3600
+ name: terminal_service_deny_registry
+ platform: windows
+ query: terminal_service_deny_registry
+ - description: Controls Windows command-line auditing
+ interval: 3600
+ name: command_line_auditing_registry
+ platform: windows
+ query: command_line_auditing_registry
+ - description: 'This key (and subkeys) exist by default and are required to allow
+ post-mortem debuggers like Dr. Watson. Some malware deletes this key. See: https://www.documentcloud.org/documents/3477047-Document-07-Neel-Mehta-Billy-Leonard-and-Shane.html'
+ interval: 3600
+ name: dr_watson_registry
+ platform: windows
+ query: dr_watson_registry
+ - description: Controls how many simultaneous terminal services sessions can use
+ the same account
+ interval: 3600
+ name: per_user_ts_session_registry
+ platform: windows
+ query: per_user_ts_session_registry
+ - description: Controls Powershell execution policy, script execution, logging,
+ and more.
+ interval: 3600
+ name: powershell_settings_registry
+ platform: windows
+ query: powershell_settings_registry
+ - description: Controls enabling/disabling SMBv1. Setting this key to 0 disables
+ the SMBv1 protocol on the host.
+ interval: 3600
+ name: smbv1_registry
+ platform: windows
+ query: smbv1_registry
+ - description: Lists information about SecureBoot status.
+ interval: 3600
+ name: secure_boot_registry
+ platform: windows
+ query: secure_boot_registry
+ - description: This key does not exist by default and controls enabling/disabling
+ error reporting. Some malware creates this key sets the value to 0 (disables
+ error reports). See https://msdn.microsoft.com/en-us/library/aa939342(v=winembedded.5).aspx
+ and https://www.documentcloud.org/documents/3477047-Document-07-Neel-Mehta-Billy-Leonard-and-Shane.html
+ interval: 3600
+ name: error_report_registry
+ platform: windows
+ query: error_report_registry
+ - description: Controls behavior, size, and rotation strategy for primary windows
+ event log files.
+ interval: 3600
+ name: event_log_settings_registry
+ platform: windows
+ query: event_log_settings_registry
+ - description: Controls system TPM settings
+ interval: 3600
+ name: tpm_registry
+ platform: windows
+ query: tpm_registry
+ - description: Controls local WinRM client configuration and security.
+ interval: 3600
+ name: winrm_settings_registry
+ platform: windows
+ query: winrm_settings_registry
+ - description: 'Controls the suppression of error dialog boxes. The default value
+ is 0 (all messages are visible), but some malware sets this value to 2 (all
+ messages are invisible). See: https://www.documentcloud.org/documents/3477047-Document-07-Neel-Mehta-Billy-Leonard-and-Shane.html'
+ interval: 3600
+ name: error_mode_registry
+ platform: windows
+ query: error_mode_registry
+ - description: Controls sending administrative notifications after a crash. Some
+ malware sets this value to 0
+ interval: 3600
+ name: send_error_alert_registry
+ platform: windows
+ query: send_error_alert_registry
+ targets:
+ labels: null
+---
+apiVersion: v1
+kind: query
+spec:
+ description: 'This key does not exist by default and controls enabling/disabling
+ error reporting display. Some malware creates this key and sets the value to 0.
+ See: https://www.documentcloud.org/documents/3477047-Document-07-Neel-Mehta-Billy-Leonard-and-Shane.html'
+ name: error_display_ui_registry
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\Software\Microsoft\PCHealth\ErrorReporting\ShowUI';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Entries for the FileRenameOperation support the MoveFileEx delayed-rename
+ and delayed-delete capabilities. Sometimes used as a self-deletion technique for
+ malware.
+ name: filerenameoperations_registry
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
+ Manager\FileRenameOperations';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls which security packages store credentials in LSA memory, secure
+ boot, etc.
+ name: local_security_authority_registry
+ query: SELECT * FROM registry WHERE key LIKE 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\%%';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: 'This key exists by default and has a default value of 1. Setting this
+ key to 0 disables logging errors/crashes to the System event channel. Some malware
+ sets this value to 0. See: https://www.documentcloud.org/documents/3477047-Document-07-Neel-Mehta-Billy-Leonard-and-Shane.html'
+ name: log_errors_registry
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl\LogEvent';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls Windows security provider configurations
+ name: security_providers_registry
+ query: SELECT * FROM registry WHERE key LIKE 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\%%';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls Windows Update server location and installation behavior.
+ name: windows_update_settings_registry
+ query: SELECT * FROM registry WHERE key LIKE 'HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate\%%';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: 'Controls enabling/disabling crash dumps. This key has a default value
+ of 7, but some malware sets this value to 0. See: https://www.documentcloud.org/documents/3477047-Document-07-Neel-Mehta-Billy-Leonard-and-Shane.html'
+ name: crash_dump_registry
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl\CrashDumpEnabled';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: 'This registry key specifies the path to a DLL to be loaded by a Windows
+ DNS server. This key does not exist by default. Can allow privesc: https://medium.com/@esnesenon/feature-not-bug-dnsadmin-to-dc-compromise-in-one-line-a0f779b8dc83'
+ name: dns_plugin_dll_registry
+ query: SELECT * FROM registry WHERE key='HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\ServerLevelPluginDll';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: The KnownDlls key defines the set of DLLs that are first searched during
+ system startup.
+ name: knowndlls_registry
+ query: SELECT * FROM registry WHERE path LIKE 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
+ Manager\KnownDLLs\%%';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: This key exists by default and has a default value of 1. Terminal service
+ connections are allowed to the host when the key value is set to 0
+ name: terminal_service_deny_registry
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
+ Server\fDenyTSConnections';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls Windows command-line auditing
+ name: command_line_auditing_registry
+ query: SELECT * FROM registry WHERE key='HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: 'This key (and subkeys) exist by default and are required to allow
+ post-mortem debuggers like Dr. Watson. Some malware deletes this key. See: https://www.documentcloud.org/documents/3477047-Document-07-Neel-Mehta-Billy-Leonard-and-Shane.html'
+ name: dr_watson_registry
+ query: SELECT * FROM registry WHERE key='HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
+ NT\CurrentVersion\AeDebug';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls how many simultaneous terminal services sessions can use the
+ same account
+ name: per_user_ts_session_registry
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
+ Server\fSingleSessionPerUser';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls Powershell execution policy, script execution, logging, and
+ more.
+ name: powershell_settings_registry
+ query: SELECT * FROM registry WHERE key LIKE 'HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Powershell\%%';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls enabling/disabling SMBv1. Setting this key to 0 disables the
+ SMBv1 protocol on the host.
+ name: smbv1_registry
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB1';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Lists information about SecureBoot status.
+ name: secure_boot_registry
+ query: SELECT * FROM registry WHERE key='HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecureBoot';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: This key does not exist by default and controls enabling/disabling
+ error reporting. Some malware creates this key sets the value to 0 (disables error
+ reports). See https://msdn.microsoft.com/en-us/library/aa939342(v=winembedded.5).aspx
+ and https://www.documentcloud.org/documents/3477047-Document-07-Neel-Mehta-Billy-Leonard-and-Shane.html
+ name: error_report_registry
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\Software\Microsoft\PCHealth\ErrorReporting\DoReport';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls behavior, size, and rotation strategy for primary windows
+ event log files.
+ name: event_log_settings_registry
+ query: SELECT * FROM registry WHERE key LIKE 'HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\EventLog\%%';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls system TPM settings
+ name: tpm_registry
+ query: SELECT * FROM registry WHERE key='HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\TPM';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls local WinRM client configuration and security.
+ name: winrm_settings_registry
+ query: SELECT * FROM registry WHERE key LIKE 'HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WinRM\%%';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: 'Controls the suppression of error dialog boxes. The default value
+ is 0 (all messages are visible), but some malware sets this value to 2 (all messages
+ are invisible). See: https://www.documentcloud.org/documents/3477047-Document-07-Neel-Mehta-Billy-Leonard-and-Shane.html'
+ name: error_mode_registry
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Windows\ErrorMode';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls sending administrative notifications after a crash. Some malware
+ sets this value to 0
+ name: send_error_alert_registry
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl\SendAlert';
diff --git a/salt/fleet/packs/palantir/Fleet/Endpoints/packs/windows-registry-monitoring.yaml b/salt/fleet/packs/palantir/Fleet/Endpoints/packs/windows-registry-monitoring.yaml
new file mode 100644
index 000000000..123ec1a6e
--- /dev/null
+++ b/salt/fleet/packs/palantir/Fleet/Endpoints/packs/windows-registry-monitoring.yaml
@@ -0,0 +1,475 @@
+---
+apiVersion: v1
+kind: pack
+spec:
+ name: windows-registry-monitoring
+ queries:
+ - description: Technique used by attackers to prevent computer accounts from changing
+ their password, thus extending the life of Kerberos silver tickets (https://adsecurity.org/?p=2011)
+ interval: 3600
+ name: computer_password_change_disabled_registry
+ platform: windows
+ query: computer_password_change_disabled_registry
+ - description: Returns 0 as a result if the registry key does not exist
+ interval: 3600
+ name: error_mode_registry_missing
+ platform: windows
+ query: error_mode_registry_missing
+ - description: Returns 0 as a result if the registry key does not exist
+ interval: 3600
+ name: per_user_ts_session_registry_missing
+ platform: windows
+ query: per_user_ts_session_registry_missing
+ - description: Returns 0 as a result if the registry key does not exist
+ interval: 3600
+ name: powershell_invocationheader_registry_missing
+ platform: windows
+ query: powershell_invocationheader_registry_missing
+ - description: Returns the content of the key if it does not match the expected
+ value
+ interval: 3600
+ name: bitlocker_encryption_settings_registry_misconfigured
+ platform: windows
+ query: bitlocker_encryption_settings_registry_misconfigured
+ - description: Returns the content of the key if it does not match the expected
+ value
+ interval: 3600
+ name: bitlocker_mbam_registry_misconfigured
+ platform: windows
+ query: bitlocker_mbam_registry_misconfigured
+ - description: Returns the content of this key if it exists, which it shouldn't
+ by default
+ interval: 3600
+ name: dns_plugin_dll_registry_exists
+ platform: windows
+ query: dns_plugin_dll_registry_exists
+ - description: Returns the content of this key if it exists, which it shouldn't
+ by default
+ interval: 3600
+ name: error_display_ui_registry_exists
+ platform: windows
+ query: error_display_ui_registry_exists
+ - description: Returns the content of the key if it does not match the expected
+ value
+ interval: 3600
+ name: log_errors_registry_misconfigured
+ platform: windows
+ query: log_errors_registry_misconfigured
+ - description: Returns the content of the key if it does not match the expected
+ value
+ interval: 3600
+ name: subscription_manager_registry_misconfigured
+ platform: windows
+ query: subscription_manager_registry_misconfigured
+ - description: Returns 0 as a result if the registry key does not exist
+ interval: 3600
+ name: subscription_manager_registry_missing
+ platform: windows
+ query: subscription_manager_registry_missing
+ - description: Returns the content of the key if it does not match the expected
+ value
+ interval: 3600
+ name: command_line_auditing_registry_misconfigured
+ platform: windows
+ query: command_line_auditing_registry_misconfigured
+ - description: Returns 0 as a result if the registry key does not exist
+ interval: 3600
+ name: crash_dump_registry_missing
+ platform: windows
+ query: crash_dump_registry_missing
+ - description: Returns the content of the key if it does not match the expected
+ value
+ interval: 3600
+ name: error_mode_registry_misconfigured
+ platform: windows
+ query: error_mode_registry_misconfigured
+ - description: Returns 0 as a result if the registry key does not exist
+ interval: 3600
+ name: log_errors_registry_missing
+ platform: windows
+ query: log_errors_registry_missing
+ - description: Returns the content of the key if it does not match the expected
+ value
+ interval: 3600
+ name: winrm_settings_registry_misconfigured
+ platform: windows
+ query: winrm_settings_registry_misconfigured
+ - description: Returns the content of the key if it does not match the expected
+ value
+ interval: 3600
+ name: crash_dump_registry_misconfigured
+ platform: windows
+ query: crash_dump_registry_misconfigured
+ - description: Detect a registry based persistence mechanism that allows an attacker
+ to specify a DLL to be loaded when cryptographic libraries are called (https://twitter.com/PsiDragon/status/978367732793135105)
+ interval: 3600
+ name: physicalstore_dll_registry_persistence
+ platform: windows
+ query: physicalstore_dll_registry_persistence
+ - description: Returns the content of the key if it does not match the expected
+ value
+ interval: 3600
+ name: powershell_logging_registry_misconfigured
+ platform: windows
+ query: powershell_logging_registry_misconfigured
+ - description: 'A registry key can be created to disable AMSI on Windows: (https://twitter.com/Moriarty_Meng/status/1011568060883333120)'
+ interval: 3600
+ name: amsi_disabled_registry
+ platform: windows
+ query: amsi_disabled_registry
+ - description: Controls how often to rotate the local computer password (defaults
+ to 30 days). A modification of this value may be an indicator of attacker activity.
+ interval: 3600
+ name: computer_maximum_password_age_changed_registry
+ platform: windows
+ query: computer_maximum_password_age_changed_registry
+ - description: Returns 0 as a result if the registry key does not exist
+ interval: 3600
+ name: dr_watson_registry_missing
+ platform: windows
+ query: dr_watson_registry_missing
+ - description: Returns the content of the key if it does not match the expected
+ value
+ interval: 3600
+ name: per_user_ts_session_registry_misconfigured
+ platform: windows
+ query: per_user_ts_session_registry_misconfigured
+ - description: Registry based persistence mechanism to load DLLs at reboot time
+ and avoids detection by Autoruns (https://oddvar.moe/2018/03/21/persistence-using-runonceex-hidden-from-autoruns-exe/).
+ Subkeys will be deleted after they run, thus (RunOnce). The RunOnceEx key will
+ remain.
+ interval: 3600
+ name: runonceex_persistence_registry
+ platform: windows
+ query: runonceex_persistence_registry
+ - description: Returns 0 as a result if the registry key does not exist
+ interval: 3600
+ name: smbv1_registry_missing
+ platform: windows
+ query: smbv1_registry_missing
+ - description: Returns 0 as a result if the registry key does not exist
+ interval: 3600
+ name: powershell_transcription_logging_registry_missing
+ platform: windows
+ query: powershell_transcription_logging_registry_missing
+ - description: Returns 0 as a result if the registry key does not exist
+ interval: 3600
+ name: powershell_module_logging_registry_missing
+ platform: windows
+ query: powershell_module_logging_registry_missing
+ - description: Returns 0 as a result if the registry key does not exist
+ interval: 3600
+ name: powershell_scriptblock_logging_registry_missing
+ platform: windows
+ query: powershell_scriptblock_logging_registry_missing
+ - description: Returns the content of the key if it does not match the expected
+ value
+ interval: 3600
+ name: bitlocker_mbam_endpoint_registry_misconfigured
+ platform: windows
+ query: bitlocker_mbam_endpoint_registry_misconfigured
+ - description: Returns 0 as a result if the registry key does not exist
+ interval: 3600
+ name: command_line_auditing_registry_missing
+ platform: windows
+ query: command_line_auditing_registry_missing
+ - description: ""
+ interval: 3600
+ name: smbv1_registry_misconfigured
+ platform: windows
+ query: smbv1_registry_misconfigured
+ - description: Returns the content of this key if it exists, which it shouldn't
+ by default
+ interval: 3600
+ name: send_error_alert_registry_exists
+ platform: windows
+ query: send_error_alert_registry_exists
+ targets:
+ labels: null
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Technique used by attackers to prevent computer accounts from changing
+ their password, thus extending the life of Kerberos silver tickets (https://adsecurity.org/?p=2011)
+ name: computer_password_change_disabled_registry
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange'
+ AND data!=0;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns 0 as a result if the registry key does not exist
+ name: error_mode_registry_missing
+ query: SELECT IFNULL(key_count,0) AS key_exists FROM (SELECT COUNT(*) AS key_count
+ FROM registry WHERE path='HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Windows\ErrorMode')
+ WHERE key_exists!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns 0 as a result if the registry key does not exist
+ name: per_user_ts_session_registry_missing
+ query: SELECT IFNULL(key_count,0) AS key_exists FROM (SELECT COUNT(*) AS key_count
+ FROM registry WHERE path='HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
+ Server\fSingleSessionPerUser') WHERE key_exists!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns 0 as a result if the registry key does not exist
+ name: powershell_invocationheader_registry_missing
+ query: SELECT IFNULL(key_count,0) AS key_exists FROM (SELECT COUNT(*) AS key_count
+ FROM registry WHERE path='HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Powershell\Transcription\EnableInvocationHeader')
+ WHERE key_exists!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns the content of the key if it does not match the expected value
+ name: bitlocker_encryption_settings_registry_misconfigured
+ query: SELECT * FROM registry WHERE (path='HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\FVE\MDOPBitLockerManagement\ShouldEncryptOSDrive'
+ OR path='HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\FVE\MDOPBitLockerManagement\OSDriveProtector')
+ AND data!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns the content of the key if it does not match the expected value
+ name: bitlocker_mbam_registry_misconfigured
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\FVE\MDOPBitLockerManagement\UseMBAMServices'
+ AND data!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns the content of this key if it exists, which it shouldn't by
+ default
+ name: dns_plugin_dll_registry_exists
+ query: SELECT * FROM registry WHERE key='HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\DNS\Parameters\ServerLevelPluginDll';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns the content of this key if it exists, which it shouldn't by
+ default
+ name: error_display_ui_registry_exists
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\Software\Microsoft\PCHealth\ErrorReporting\ShowUI';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns the content of the key if it does not match the expected value
+ name: log_errors_registry_misconfigured
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl\LogEvent'
+ AND data!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns the content of the key if it does not match the expected value
+ name: subscription_manager_registry_misconfigured
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager\1'
+ AND (data!='Server=http://subdomain.domain.com:5985/wsman/SubscriptionManager/WEC'
+ AND data!='Server=http://subdomain.domain.com:5985/wsman/SubscriptionManager/WEC');
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns 0 as a result if the registry key does not exist
+ name: subscription_manager_registry_missing
+ query: SELECT IFNULL(key_count,0) AS key_exists FROM (SELECT COUNT(*) AS key_count
+ FROM registry WHERE path='HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager\1')
+ WHERE key_exists!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns the content of the key if it does not match the expected value
+ name: command_line_auditing_registry_misconfigured
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit\ProcessCreationIncludeCmdLine_Enabled'
+ AND data!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns 0 as a result if the registry key does not exist
+ name: crash_dump_registry_missing
+ query: SELECT IFNULL(key_count,0) AS key_exists FROM (SELECT COUNT(*) AS key_count
+ FROM registry WHERE path='HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl\CrashDumpEnabled')
+ WHERE key_exists!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns the content of the key if it does not match the expected value
+ name: error_mode_registry_misconfigured
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Windows\ErrorMode'
+ AND data=2;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns 0 as a result if the registry key does not exist
+ name: log_errors_registry_missing
+ query: SELECT IFNULL(key_count,0) AS key_exists FROM (SELECT COUNT(*) AS key_count
+ FROM registry WHERE path='HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl\LogEvent')
+ WHERE key_exists!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns the content of the key if it does not match the expected value
+ name: winrm_settings_registry_misconfigured
+ query: 'SELECT * FROM registry WHERE (path=''HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WinRM\Client\AllowBasic''
+ OR path=''HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WinRM\Client\AllowCredSSP''
+ OR path=''HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WinRM\Client\AllowUnencryptedTraffic''
+ OR path=''HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WinRM\Client\AllowDigest''
+ OR path=''HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WinRM\Service\AllowBasic''
+ OR path=''HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WinRM\Service\AllowCredSSP''
+ OR path=''HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WinRM\Service\AllowUnencryptedTraffic''
+ OR path=''HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WinRM\Service\WinRS\AllowRemoteShellAccess'')
+ AND data!=0; '
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns the content of the key if it does not match the expected value
+ name: crash_dump_registry_misconfigured
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl\CrashDumpEnabled'
+ AND data=0;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Detect a registry based persistence mechanism that allows an attacker
+ to specify a DLL to be loaded when cryptographic libraries are called (https://twitter.com/PsiDragon/status/978367732793135105)
+ name: physicalstore_dll_registry_persistence
+ query: SELECT key, path, name, mtime, username FROM registry r, users WHERE path
+ LIKE 'HKEY_USERS\'||uuid||'\Software\Microsoft\SystemCertificates\CA\PhysicalStores\%%'
+ OR path LIKE 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\OID\EncodingType
+ 0\CertDllOpenStoreProv\%%' AND name!='#16' AND name!='Ldap';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns the content of the key if it does not match the expected value
+ name: powershell_logging_registry_misconfigured
+ query: SELECT * FROM registry WHERE (path='HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Powershell\ModuleLogging\EnableModuleLogging'
+ OR path='HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Powershell\ScriptBlockLogging\EnableScriptBlockLogging'
+ OR path='HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Powershell\Transcription\EnableTranscripting'
+ OR path='HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Powershell\Transcription\EnableInvocationHeader')
+ AND data!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: 'A registry key can be created to disable AMSI on Windows: (https://twitter.com/Moriarty_Meng/status/1011568060883333120)'
+ name: amsi_disabled_registry
+ query: SELECT key, r.path, r.name, r.mtime, r.data, username from registry r, users
+ WHERE path = 'HKEY_USERS\'||uuid||'\Software\Microsoft\Windows Script\Settings\AmsiEnable'
+ AND data=0;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Controls how often to rotate the local computer password (defaults
+ to 30 days). A modification of this value may be an indicator of attacker activity.
+ name: computer_maximum_password_age_changed_registry
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\MaximumPasswordAge'
+ and data!=30;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns 0 as a result if the registry key does not exist
+ name: dr_watson_registry_missing
+ query: SELECT IFNULL(key_count,0) AS key_exists FROM (SELECT COUNT(*) AS key_count
+ FROM registry where key='HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug')
+ WHERE key_exists!=2;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns the content of the key if it does not match the expected value
+ name: per_user_ts_session_registry_misconfigured
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
+ Server\fSingleSessionPerUser' AND data!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Registry based persistence mechanism to load DLLs at reboot time and
+ avoids detection by Autoruns (https://oddvar.moe/2018/03/21/persistence-using-runonceex-hidden-from-autoruns-exe/).
+ Subkeys will be deleted after they run, thus (RunOnce). The RunOnceEx key will
+ remain.
+ name: runonceex_persistence_registry
+ query: SELECT * FROM registry WHERE path = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns 0 as a result if the registry key does not exist
+ name: smbv1_registry_missing
+ query: SELECT IFNULL(key_count,0) AS key_exists FROM (SELECT COUNT(*) AS key_count
+ FROM registry WHERE path='HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB1')
+ WHERE key_exists!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns 0 as a result if the registry key does not exist
+ name: powershell_transcription_logging_registry_missing
+ query: SELECT IFNULL(key_count,0) AS key_exists FROM (SELECT COUNT(*) AS key_count
+ FROM registry WHERE path='HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Powershell\Transcription\EnableTranscripting')
+ WHERE key_exists!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns 0 as a result if the registry key does not exist
+ name: powershell_module_logging_registry_missing
+ query: SELECT IFNULL(key_count,0) AS key_exists FROM (SELECT COUNT(*) AS key_count
+ FROM registry WHERE path='HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Powershell\ModuleLogging\EnableModuleLogging')
+ WHERE key_exists!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns 0 as a result if the registry key does not exist
+ name: powershell_scriptblock_logging_registry_missing
+ query: SELECT IFNULL(key_count,0) AS key_exists FROM (SELECT COUNT(*) AS key_count
+ FROM registry WHERE path='HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Powershell\ScriptBlockLogging\EnableScriptBlockLogging')
+ WHERE key_exists!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns the content of the key if it does not match the expected value
+ name: bitlocker_mbam_endpoint_registry_misconfigured
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\FVE\MDOPBitLockerManagement\KeyRecoveryServiceEndPoint'
+ AND data!='https://mbam.server.com/MBAMRecoveryAndHardwareService/CoreService.svc';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns 0 as a result if the registry key does not exist
+ name: command_line_auditing_registry_missing
+ query: SELECT IFNULL(key_count,0) AS key_exists FROM (SELECT COUNT(*) AS key_count
+ FROM registry WHERE path='HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit\ProcessCreationIncludeCmdLine_Enabled')
+ WHERE key_exists!=1;
+---
+apiVersion: v1
+kind: query
+spec:
+ name: smbv1_registry_misconfigured
+ query: SELECT * FROM registry WHERE path='HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\SMB1'
+ AND data!=0;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns the content of this key if it exists, which it shouldn't by
+ default
+ name: send_error_alert_registry_exists
+ query: SELECT * FROM registry WHERE key='HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl\SendAlert';
diff --git a/salt/fleet/packs/palantir/Fleet/Servers/Linux/osquery.yaml b/salt/fleet/packs/palantir/Fleet/Servers/Linux/osquery.yaml
new file mode 100644
index 000000000..5f98fa75b
--- /dev/null
+++ b/salt/fleet/packs/palantir/Fleet/Servers/Linux/osquery.yaml
@@ -0,0 +1,596 @@
+---
+apiVersion: v1
+kind: pack
+spec:
+ name: LinuxPack
+ queries:
+ - description: Retrieves all the jobs scheduled in crontab in the target system.
+ interval: 0
+ name: crontab_snapshot
+ platform: linux
+ query: crontab_snapshot
+ snapshot: true
+ - description: Various Linux kernel integrity checked attributes.
+ interval: 0
+ name: kernel_integrity
+ platform: linux
+ query: kernel_integrity
+ - description: Linux kernel modules both loaded and within the load search path.
+ interval: 0
+ name: kernel_modules
+ platform: linux
+ query: kernel_modules
+ - description: Retrieves the current list of mounted drives in the target system.
+ interval: 0
+ name: mounts
+ platform: linux
+ query: mounts
+ - description: The percentage of total CPU time (system+user) consumed by osqueryd
+ interval: 0
+ name: osquery_cpu_pct
+ platform: linux
+ query: osquery_cpu_pct
+ snapshot: true
+ - description: Socket events collected from the audit framework
+ interval: 0
+ name: socket_events
+ platform: linux
+ query: socket_events
+ - description: Record the network interfaces and their associated IP and MAC addresses
+ interval: 0
+ name: network_interfaces_snapshot
+ platform: linux
+ query: network_interfaces_snapshot
+ snapshot: true
+ version: 1.4.5
+ - description: Information about the running osquery configuration
+ interval: 0
+ name: osquery_info
+ platform: linux
+ query: osquery_info
+ snapshot: true
+ - description: Display all installed RPM packages
+ interval: 0
+ name: rpm_packages
+ platform: centos
+ query: rpm_packages
+ snapshot: true
+ - description: Record shell history for all users on system (instead of just root)
+ interval: 0
+ name: shell_history
+ platform: linux
+ query: shell_history
+ - description: File events collected from file integrity monitoring
+ interval: 0
+ name: file_events
+ platform: linux
+ query: file_events
+ removed: false
+ - description: Retrieve the EC2 metadata for this endpoint
+ interval: 0
+ name: ec2_instance_metadata
+ platform: linux
+ query: ec2_instance_metadata
+ - description: Retrieve the EC2 tags for this endpoint
+ interval: 0
+ name: ec2_instance_tags
+ platform: linux
+ query: ec2_instance_tags
+ - description: Snapshot query to retrieve the EC2 tags for this instance
+ interval: 0
+ name: ec2_instance_tags_snapshot
+ platform: linux
+ query: ec2_instance_tags_snapshot
+ snapshot: true
+ - description: Retrieves the current filters and chains per filter in the target
+ system.
+ interval: 0
+ name: iptables
+ platform: linux
+ query: iptables
+ - description: Display any SUID binaries that are owned by root
+ interval: 0
+ name: suid_bin
+ platform: linux
+ query: suid_bin
+ - description: Display all installed DEB packages
+ interval: 0
+ name: deb_packages
+ platform: ubuntu
+ query: deb_packages
+ snapshot: true
+ - description: Find shell processes that have open sockets
+ interval: 0
+ name: behavioral_reverse_shell
+ platform: linux
+ query: behavioral_reverse_shell
+ - description: Retrieves all the jobs scheduled in crontab in the target system.
+ interval: 0
+ name: crontab
+ platform: linux
+ query: crontab
+ - description: Records the system resources used by each query
+ interval: 0
+ name: per_query_perf
+ platform: linux
+ query: per_query_perf
+ - description: Records avg rate of socket events since daemon started
+ interval: 0
+ name: socket_rates
+ platform: linux
+ query: socket_rates
+ snapshot: true
+ - description: Local system users.
+ interval: 0
+ name: users
+ platform: linux
+ query: users
+ - description: Process events collected from the audit framework
+ interval: 0
+ name: process_events
+ platform: linux
+ query: process_events
+ - description: Retrieves the list of the latest logins with PID, username and timestamp.
+ interval: 0
+ name: last
+ platform: linux
+ query: last
+ - description: Any processes that run with an LD_PRELOAD environment variable
+ interval: 0
+ name: ld_preload
+ platform: linux
+ query: ld_preload
+ - description: Records avg rate of process events since daemon started
+ interval: 0
+ name: process_rates
+ platform: linux
+ query: process_rates
+ snapshot: true
+ - description: Information about the system hardware and name
+ interval: 0
+ name: system_info
+ platform: linux
+ query: system_info
+ snapshot: true
+ - description: Returns the private keys in the users ~/.ssh directory and whether
+ or not they are encrypted
+ interval: 0
+ name: user_ssh_keys
+ platform: linux
+ query: user_ssh_keys
+ - description: Local system users.
+ interval: 0
+ name: users_snapshot
+ platform: linux
+ query: users_snapshot
+ snapshot: true
+ - description: DNS resolvers used by the host
+ interval: 0
+ name: dns_resolvers
+ platform: linux
+ query: dns_resolvers
+ - description: Retrieves information from the current kernel in the target system.
+ interval: 0
+ name: kernel_info
+ platform: linux
+ query: kernel_info
+ snapshot: true
+ - description: Linux kernel modules both loaded and within the load search path.
+ interval: 0
+ name: kernel_modules_snapshot
+ platform: linux
+ query: kernel_modules_snapshot
+ snapshot: true
+ - description: Generates an event if ld.so.preload is present - used by rootkits
+ such as Jynx
+ interval: 0
+ name: ld_so_preload_exists
+ platform: linux
+ query: ld_so_preload_exists
+ snapshot: true
+ - description: Records system/user time, db size, and many other system metrics
+ interval: 0
+ name: runtime_perf
+ platform: linux
+ query: runtime_perf
+ - description: Retrieves all the entries in the target system /etc/hosts file.
+ interval: 0
+ name: etc_hosts_snapshot
+ platform: linux
+ query: etc_hosts_snapshot
+ snapshot: true
+ - description: Snapshot query to retrieve the EC2 metadata for this endpoint
+ interval: 0
+ name: ec2_instance_metadata_snapshot
+ platform: linux
+ query: ec2_instance_metadata_snapshot
+ snapshot: true
+ - description: ""
+ interval: 0
+ name: hardware_events
+ platform: linux
+ query: hardware_events
+ removed: false
+ - description: Information about memory usage on the system
+ interval: 0
+ name: memory_info
+ platform: linux
+ query: memory_info
+ - description: Displays information from /proc/stat file about the time the CPU
+ cores spent in different parts of the system
+ interval: 0
+ name: cpu_time
+ platform: linux
+ query: cpu_time
+ - description: Retrieves all the entries in the target system /etc/hosts file.
+ interval: 0
+ name: etc_hosts
+ platform: linux
+ query: etc_hosts
+ - description: Retrieves information from the Operating System where osquery is
+ currently running.
+ interval: 0
+ name: os_version
+ platform: linux
+ query: os_version
+ snapshot: true
+ - description: A snapshot of all processes running on the host. Useful for outlier
+ analysis.
+ interval: 0
+ name: processes_snapshot
+ platform: linux
+ query: processes_snapshot
+ snapshot: true
+ - description: Retrieves the current list of USB devices in the target system.
+ interval: 0
+ name: usb_devices
+ platform: linux
+ query: usb_devices
+ - description: A line-delimited authorized_keys table.
+ interval: 0
+ name: authorized_keys
+ platform: linux
+ query: authorized_keys
+ targets:
+ labels: null
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Retrieves all the jobs scheduled in crontab in the target system.
+ name: crontab_snapshot
+ query: SELECT * FROM crontab;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Various Linux kernel integrity checked attributes.
+ name: kernel_integrity
+ query: SELECT * FROM kernel_integrity;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Linux kernel modules both loaded and within the load search path.
+ name: kernel_modules
+ query: SELECT * FROM kernel_modules;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Retrieves the current list of mounted drives in the target system.
+ name: mounts
+ query: SELECT device, device_alias, path, type, blocks_size, flags FROM mounts;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: The percentage of total CPU time (system+user) consumed by osqueryd
+ name: osquery_cpu_pct
+ query: SELECT ((osqueryd_time*100)/(SUM(system_time) + SUM(user_time))) AS pct FROM
+ processes, (SELECT (SUM(processes.system_time)+SUM(processes.user_time)) AS osqueryd_time
+ FROM processes WHERE name='osqueryd');
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Socket events collected from the audit framework
+ name: socket_events
+ query: SELECT action, auid, family, local_address, local_port, path, pid, remote_address,
+ remote_port, success, time FROM socket_events WHERE success=1 AND path NOT IN
+ ('/usr/bin/hostname') AND remote_address NOT IN ('127.0.0.1', '169.254.169.254',
+ '', '0000:0000:0000:0000:0000:0000:0000:0001', '::1', '0000:0000:0000:0000:0000:ffff:7f00:0001',
+ 'unknown', '0.0.0.0', '0000:0000:0000:0000:0000:0000:0000:0000');
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Record the network interfaces and their associated IP and MAC addresses
+ name: network_interfaces_snapshot
+ query: SELECT a.interface, a.address, d.mac FROM interface_addresses a JOIN interface_details
+ d USING (interface);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Information about the running osquery configuration
+ name: osquery_info
+ query: SELECT * FROM osquery_info;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Display all installed RPM packages
+ name: rpm_packages
+ query: SELECT name, version, release, arch FROM rpm_packages;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Record shell history for all users on system (instead of just root)
+ name: shell_history
+ query: SELECT * FROM users JOIN shell_history USING (uid);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: File events collected from file integrity monitoring
+ name: file_events
+ query: SELECT * FROM file_events;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Retrieve the EC2 metadata for this endpoint
+ name: ec2_instance_metadata
+ query: SELECT * FROM ec2_instance_metadata;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Retrieve the EC2 tags for this endpoint
+ name: ec2_instance_tags
+ query: SELECT * FROM ec2_instance_tags;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Snapshot query to retrieve the EC2 tags for this instance
+ name: ec2_instance_tags_snapshot
+ query: SELECT * FROM ec2_instance_tags;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Retrieves the current filters and chains per filter in the target system.
+ name: iptables
+ query: SELECT * FROM iptables;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Display any SUID binaries that are owned by root
+ name: suid_bin
+ query: SELECT * FROM suid_bin;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Display all installed DEB packages
+ name: deb_packages
+ query: SELECT * FROM deb_packages;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Find shell processes that have open sockets
+ name: behavioral_reverse_shell
+ query: SELECT DISTINCT(processes.pid), processes.parent, processes.name, processes.path,
+ processes.cmdline, processes.cwd, processes.root, processes.uid, processes.gid,
+ processes.start_time, process_open_sockets.remote_address, process_open_sockets.remote_port,
+ (SELECT cmdline FROM processes AS parent_cmdline WHERE pid=processes.parent) AS
+ parent_cmdline FROM processes JOIN process_open_sockets USING (pid) LEFT OUTER
+ JOIN process_open_files ON processes.pid = process_open_files.pid WHERE (name='sh'
+ OR name='bash') AND remote_address NOT IN ('0.0.0.0', '::', '') AND remote_address
+ NOT LIKE '10.%' AND remote_address NOT LIKE '192.168.%';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Retrieves all the jobs scheduled in crontab in the target system.
+ name: crontab
+ query: SELECT * FROM crontab;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Records the system resources used by each query
+ name: per_query_perf
+ query: SELECT name, interval, executions, output_size, wall_time, (user_time/executions)
+ AS avg_user_time, (system_time/executions) AS avg_system_time, average_memory
+ FROM osquery_schedule;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Records avg rate of socket events since daemon started
+ name: socket_rates
+ query: SELECT COUNT(1) AS num, count(1)/s AS rate FROM socket_events, (SELECT (julianday('now')
+ - 2440587.5)*86400.0 - start_time AS s FROM osquery_info LIMIT 1);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Local system users.
+ name: users
+ query: SELECT * FROM users;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Process events collected from the audit framework
+ name: process_events
+ query: SELECT auid, cmdline, ctime, cwd, egid, euid, gid, parent, path, pid, time,
+ uid FROM process_events WHERE path NOT IN ('/bin/sed', '/usr/bin/tr', '/bin/gawk',
+ '/bin/date', '/bin/mktemp', '/usr/bin/dirname', '/usr/bin/head', '/usr/bin/jq',
+ '/bin/cut', '/bin/uname', '/bin/basename') and cmdline NOT LIKE '%_key%' AND cmdline
+ NOT LIKE '%secret%';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Retrieves the list of the latest logins with PID, username and timestamp.
+ name: last
+ query: SELECT * FROM last;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Any processes that run with an LD_PRELOAD environment variable
+ name: ld_preload
+ query: SELECT process_envs.pid, process_envs.key, process_envs.value, processes.name,
+ processes.path, processes.cmdline, processes.cwd FROM process_envs join processes
+ USING (pid) WHERE key = 'LD_PRELOAD';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Records avg rate of process events since daemon started
+ name: process_rates
+ query: SELECT COUNT(1) AS num, count(1)/s AS rate FROM process_events, (SELECT (julianday('now')
+ - 2440587.5)*86400.0 - start_time AS s FROM osquery_info LIMIT 1);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Information about the system hardware and name
+ name: system_info
+ query: SELECT * FROM system_info;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Returns the private keys in the users ~/.ssh directory and whether
+ or not they are encrypted
+ name: user_ssh_keys
+ query: SELECT * FROM users JOIN user_ssh_keys USING (uid);
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Local system users.
+ name: users_snapshot
+ query: SELECT * FROM users;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: DNS resolvers used by the host
+ name: dns_resolvers
+ query: SELECT * FROM dns_resolvers;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Retrieves information from the current kernel in the target system.
+ name: kernel_info
+ query: SELECT * FROM kernel_info;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Linux kernel modules both loaded and within the load search path.
+ name: kernel_modules_snapshot
+ query: SELECT * FROM kernel_modules;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Generates an event if ld.so.preload is present - used by rootkits such
+ as Jynx
+ name: ld_so_preload_exists
+ query: SELECT * FROM file WHERE path='/etc/ld.so.preload' AND path!='';
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Records system/user time, db size, and many other system metrics
+ name: runtime_perf
+ query: SELECT ov.version AS os_version, ov.platform AS os_platform, ov.codename
+ AS os_codename, i.*, p.resident_size, p.user_time, p.system_time, time.minutes
+ AS counter, db.db_size_mb AS database_size from osquery_info i, os_version ov,
+ processes p, time, (SELECT (SUM(size) / 1024) / 1024.0 AS db_size_mb FROM (SELECT
+ value FROM osquery_flags WHERE name = 'database_path' LIMIT 1) flags, file WHERE
+ path LIKE flags.value || '%%' AND type = 'regular') db WHERE p.pid = i.pid;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Retrieves all the entries in the target system /etc/hosts file.
+ name: etc_hosts_snapshot
+ query: SELECT * FROM etc_hosts;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Snapshot query to retrieve the EC2 metadata for this endpoint
+ name: ec2_instance_metadata_snapshot
+ query: SELECT * FROM ec2_instance_metadata;
+---
+apiVersion: v1
+kind: query
+spec:
+ name: hardware_events
+ query: SELECT * FROM hardware_events;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Information about memory usage on the system
+ name: memory_info
+ query: SELECT * FROM memory_info;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Displays information from /proc/stat file about the time the CPU cores
+ spent in different parts of the system
+ name: cpu_time
+ query: SELECT * FROM cpu_time;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Retrieves all the entries in the target system /etc/hosts file.
+ name: etc_hosts
+ query: SELECT * FROM etc_hosts;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Retrieves information from the Operating System where osquery is currently
+ running.
+ name: os_version
+ query: SELECT * FROM os_version;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: A snapshot of all processes running on the host. Useful for outlier
+ analysis.
+ name: processes_snapshot
+ query: select name, path, cmdline, cwd, on_disk from processes;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: Retrieves the current list of USB devices in the target system.
+ name: usb_devices
+ query: SELECT * FROM usb_devices;
+---
+apiVersion: v1
+kind: query
+spec:
+ description: A line-delimited authorized_keys table.
+ name: authorized_keys
+ query: SELECT * FROM users JOIN authorized_keys USING (uid);
diff --git a/salt/fleet/packs/palantir/Fleet/Servers/options.yaml b/salt/fleet/packs/palantir/Fleet/Servers/options.yaml
new file mode 100644
index 000000000..d1733f5b6
--- /dev/null
+++ b/salt/fleet/packs/palantir/Fleet/Servers/options.yaml
@@ -0,0 +1,57 @@
+apiVersion: v1
+kind: options
+spec:
+ config:
+ decorators:
+ load:
+ - SELECT uuid AS host_uuid FROM system_info;
+ - SELECT hostname AS hostname FROM system_info;
+ file_paths:
+ binaries:
+ - /usr/bin/%%
+ - /usr/sbin/%%
+ - /bin/%%
+ - /sbin/%%
+ - /usr/local/bin/%%
+ - /usr/local/sbin/%%
+ configuration:
+ - /etc/passwd
+ - /etc/shadow
+ - /etc/ld.so.conf
+ - /etc/ld.so.conf.d/%%
+ - /etc/pam.d/%%
+ - /etc/resolv.conf
+ - /etc/rc%/%%
+ - /etc/my.cnf
+ - /etc/modules
+ - /etc/hosts
+ - /etc/hostname
+ - /etc/fstab
+ - /etc/crontab
+ - /etc/cron%/%%
+ - /etc/init/%%
+ - /etc/rsyslog.conf
+ options:
+ audit_allow_config: true
+ audit_allow_sockets: true
+ audit_persist: true
+ disable_audit: false
+ events_expiry: 1
+ events_max: 500000
+ disable_distributed: false
+ disable_subscribers: user_events
+ distributed_interval: 10
+ distributed_plugin: tls
+ distributed_tls_max_attempts: 3
+ distributed_tls_read_endpoint: /api/v1/osquery/distributed/read
+ distributed_tls_write_endpoint: /api/v1/osquery/distributed/write
+ logger_min_status: 1
+ logger_plugin: tls
+ logger_snapshot_event_type: true
+ logger_tls_endpoint: /api/v1/osquery/log
+ logger_tls_period: 10
+ pack_delimiter: /
+ schedule_splay_percent: 10
+ watchdog_memory_limit: 350
+ watchdog_utilization_limit: 130
+ overrides: {}
diff --git a/salt/fleet/packs/palantir/LICENSE.md b/salt/fleet/packs/palantir/LICENSE.md
new file mode 100755
index 000000000..e9a9bab22
--- /dev/null
+++ b/salt/fleet/packs/palantir/LICENSE.md
@@ -0,0 +1,22 @@
+# License
+MIT License
+
+Copyright (c) 2017 Palantir Technologies Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/salt/fleet/packs/palantir/README.md b/salt/fleet/packs/palantir/README.md
new file mode 100755
index 000000000..cade6dde4
--- /dev/null
+++ b/salt/fleet/packs/palantir/README.md
@@ -0,0 +1,164 @@
+# Palantir osquery Configuration
+
+## About This Repository
+This repository is the companion to the [osquery Across the Enterprise](https://medium.com/@palantir/osquery-across-the-enterprise-3c3c9d13ec55) blog post.
+
+The goal of this project is to provide a baseline template for any organization considering a deployment of osquery in a production environment. It is
+our belief that queries which are likely to have a high level of utility for a large percentage of users should be committed directly to the osquery project, which is
+exactly what we have done with our [unwanted-chrome-extensions](https://github.com/facebook/osquery/pull/3889) query pack and [additions](https://github.com/facebook/osquery/pull/3922) to the windows-attacks pack.
+
+However, we have included additional query packs
+that are more tailored to our specific environment that may be useful to some or at least serve as a reference to other organizations. osquery operates best when
+operators have carefully considered the datasets to be collected and the potential use-cases for that data.
+* [performance-metrics.conf](https://github.com/palantir/osquery-configuration/blob/master/Endpoints/packs/performance-metrics.conf)
+* [security-tooling-checks.conf](https://github.com/palantir/osquery-configuration/blob/master/Endpoints/packs/security-tooling-checks.conf)
+* [windows-application-security.conf](https://github.com/palantir/osquery-configuration/blob/master/Endpoints/packs/windows-application-security.conf)
+* [windows-compliance.conf](https://github.com/palantir/osquery-configuration/blob/master/Endpoints/packs/windows-compliance.conf)
+* [windows-registry-monitoring.conf](https://github.com/palantir/osquery-configuration/blob/master/Endpoints/packs/windows-registry-monitoring.conf)
+
+
+**Note**: We also utilize packs that are maintained in the official osquery project. In order to ensure you receive the most up to date version of the pack, please view them using the links below:
+* [ossec-rootkit.conf](https://github.com/facebook/osquery/blob/master/packs/ossec-rootkit.conf)
+* [osx-attacks.conf](https://github.com/facebook/osquery/blob/master/packs/osx-attacks.conf)
+* [unwanted-chrome-extensions.conf](https://github.com/facebook/osquery/blob/master/packs/unwanted-chrome-extensions.conf)
+* [windows-attacks.conf](https://github.com/facebook/osquery/blob/master/packs/windows-attacks.conf)
+
+## Repository Layout
+This repository is organized as follows:
+* At the top level, there are two directories titled "Classic" and "Fleet"
+ * The [Classic](./Classic/) directory contains configuration files for a standard osquery deployment
+ * The [Fleet](./Fleet/) directory contains YAML files to be imported into Kolide's [Fleet](https://github.com/kolide/fleet) osquery management tool
+
+Within each of those folders, you will find the following subdirectories:
+* **Endpoints**: The contents of this folder are tailored towards monitoring MacOS and Windows endpoints that are not expected to be online at all times. You may notice the interval of many queries in this folder set to 28800. We purposely set the interval to this value because the interval timer only moves forward when a host is online and we would only expect an endpoint to be online for about 8 hours, or 28800 seconds, per day.
+* **Servers**: The contents of this folder are tailored towards monitoring Linux servers. This configuration has process and network auditing enabled, so expect an exponentially higher volume of logs to be returned from the agent.
+
+
+## Using This Repository
+**Note**: We recommend that you spin up a lab environment before deploying any of these configurations to a production
+environment.
+
+**Endpoints Configuration Overview**
+* The configurations in this folder are meant for MacOS and Windows and the interval timings assume that these hosts are only online for ~8 hours per day
+* The flags included in this configuration enable TLS client mode in osquery and assume it will be connected to a TLS server. We have also included non-TLS flagfiles for local testing.
+* File integrity monitoring on MacOS is enabled for specific files and directories defined in [osquery.conf](./Endpoints/MacOS/osquery.conf)
+* Events are disabled on Windows via the `--disable_events` flag in [osquery.flags](./Endpoints/Windows/osquery.flags). We use [Windows Event Forwarding](https://github.com/palantir/windows-event-forwarding) and don't have a need for osquery to process Windows event logs.
+* These configuration files utilize packs within the [packs](./Endpoints/packs) folder and may generate errors if started without them
+
+**Servers Configuration Overview**
+* This configuration assumes the destination operating system is Linux-based and that the hosts are online at all times
+* Auditing mode is enabled for processes and network events. Ensure auditd is disabled or removed from the system where this will be running as it may conflict with osqueryd.
+* File integrity monitoring is enabled for specific files and directories defined in [osquery.conf](./Servers/Linux/osquery.conf)
+* Requires the [ossec-rootkit.conf](./Servers/Linux/packs/ossec-rootkit.conf) pack found to be located at `/etc/osquery/packs/ossec-rootkit.conf`
+* The subscriber for `user_events` is disabled
+
+## Quickstart - Classic
+1. [Install osquery](https://osquery.io/downloads/)
+2. Copy the osquery.conf and osquery.flags files from this repository onto the system and match the directory structure shown below
+3. Start osquery via `sudo osqueryctl start` on Linux/MacOS or `Start-Process osqueryd` on Windows
+4. Logs are located in `/var/log/osquery` (Linux/MacOS) and `c:\ProgramData\osquery\logs` (Windows)
+
+## Quickstart - Fleet
+1. Install Fleet version 2.0.0 or higher
+2. [Enroll hosts to your Fleet server](https://github.com/kolide/fleet/blob/master/docs/infrastructure/adding-hosts-to-fleet.md) by configuring the appropriate [flags](https://github.com/kolide/fleet/blob/master/tools/osquery/example_osquery.flags)
+2. [Configure the fleetctl utility](https://github.com/kolide/fleet/blob/master/docs/cli/setup-guide.md#fleetctl-setup) to communicate with your Fleet server
+3. Assuming you'd like to use the endpoint configs, you can use the commands below to apply them:
+
+```
+git clone https://github.com/palantir/osquery-configuration.git
+fleetctl apply -f osquery-configuration/Fleet/Endpoints/options.yaml
+fleetctl apply -f osquery-configuration/Fleet/Endpoints/MacOS/osquery.yaml
+fleetctl apply -f osquery-configuration/Fleet/Endpoints/Windows/osquery.yaml
+for pack in osquery-configuration/Fleet/Endpoints/packs/*.yaml;
+ do fleetctl apply -f "$pack"
+done
+```
+
+The desired osquery directory structure for Linux, MacOS, and Windows is outlined below:
+
+**Linux**
+```
+$ git clone https://github.com/palantir/osquery-configuration.git
+$ cp -R osquery-configuration/Servers/Linux/* /etc/osquery
+$ sudo osqueryctl start
+
+/etc/osquery
+├── osquery.conf
+├── osquery.db
+├── osquery.flags
+└── packs
+ └── ossec-rootkit.conf
+
+```
+**MacOS**
+```
+$ git clone https://github.com/palantir/osquery-configuration.git
+$ cp osquery-configuration/Endpoints/MacOS/* /var/osquery
+$ cp osquery-configuration/Endpoints/packs/* /var/osquery/packs
+$ mv /var/osquery/osquery_no_tls.flags /var/osquery/osquery.flags ## Non-TLS server testing
+$ sudo osqueryctl start
+
+/var/osquery
+├── certfile.crt [if using TLS endpoint]
+├── osquery.conf
+├── osquery.db
+├── osquery.flags
+└── packs
+ ├── performance-metrics.conf
+ ├── security-tooling-checks.conf
+ ├── unwanted-chrome-extensions.conf
+ └── osx-attacks.conf
+```
+
+**Windows**
+```
+PS> git clone https://github.com/palantir/osquery-configuration.git
+PS> copy-item osquery-configuration/Endpoints/Windows/* c:\ProgramData\osquery
+PS> copy-item osquery-configuration/Endpoints/packs/* c:\ProgramData\osquery\packs
+PS> copy-item c:\ProgramData\osquery\osquery_no_tls.flags c:\ProgramData\osquery\osquery.flags -force ## Non-TLS server testing
+PS> start-service osqueryd
+
+c:\ProgramData\osquery
+├── certfile.crt [if using TLS endpoint]
+├── log
+├── osquery.conf
+├── osquery.db
+├── osquery.flags
+├── osqueryi.exe
+├─── osqueryd
+| └── osqueryd.exe
+└── packs
+ ├── performance-metrics.conf
+ ├── security-tooling-checks.conf
+ ├── unwanted-chrome-extensions.conf
+ ├── windows-application-security.conf
+ ├── windows-compliance.conf
+ ├── windows-registry-monitoring.conf
+ └── windows-attacks.conf
+```
+
+## Contributing
+Contributions, fixes, and improvements can be submitted directly against this project as a GitHub issue or pull request.
+
+## License
+MIT License
+
+Copyright (c) 2017 Palantir Technologies Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/salt/fleet/so-fleet-setup.sh b/salt/fleet/so-fleet-setup.sh
new file mode 100644
index 000000000..cd082ff03
--- /dev/null
+++ b/salt/fleet/so-fleet-setup.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+#so-fleet-setup.sh $MasterIP $FleetEmail
+
+if [ ! "$(docker ps -q -f name=so-fleet)" ]; then
+ echo "so-fleet container not running... Exiting..."
+ exit 1
+fi
+
+initpw=$(date +%s | sha256sum | base64 | head -c 16 ; echo)
+
+docker exec so-fleet fleetctl config set --address https://$1:443 --tls-skip-verify --url-prefix /fleet
+docker exec so-fleet fleetctl setup --email $2 --password $initpw
+
+docker exec so-fleet fleetctl apply -f /packs/palantir/Fleet/Endpoints/options.yaml
+docker exec so-fleet fleetctl apply -f /packs/palantir/Fleet/Endpoints/MacOS/osquery.yaml
+docker exec so-fleet fleetctl apply -f /packs/palantir/Fleet/Endpoints/Windows/osquery.yaml
+docker exec so-fleet fleetctl apply -f /packs/hh/hhdefault.yml
+docker exec so-fleet /bin/sh -c 'for pack in /packs/palantir/Fleet/Endpoints/packs/*.yaml; do fleetctl apply -f "$pack"; done'
+
+esecret=$(docker exec so-fleet fleetctl get enroll-secret)
+
+#Concat fleet.crt & ca.crt - this is required for launcher connectivity
+cat /etc/pki/fleet.crt /etc/pki/ca.crt > /etc/pki/launcher.crt
+
+#Create the output directory
+mkdir /opt/so/conf/fleet/packages
+
+#At some point we should version launcher `latest` to avoid hard pinning here
+docker run \
+ --rm \
+ --mount type=bind,source=/opt/so/conf/fleet/packages,target=/output \
+ --mount type=bind,source=/etc/pki/launcher.crt,target=/var/launcher/launcher.crt \
+ docker.io/soshybridhunter/so-fleet-launcher:HH1.1.0 "$esecret" "$1":8080
+
+cp /opt/so/conf/fleet/packages/launcher.* /opt/so/saltstack/salt/launcher/packages/
+#Update timestamp on packages webpage
+sed -i "s@.*Generated.*@Generated: $(date '+%m%d%Y')@g" /opt/so/conf/fleet/packages/index.html
+sed -i "s@.*Generated.*@Generated: $(date '+%m%d%Y')@g" /opt/so/saltstack/salt/fleet/osquery-packages.html
+
+# Enable Fleet on all the other parts of the infrastructure
+sed -i 's/fleetsetup: 0/fleetsetup: 1/g' /opt/so/saltstack/pillar/static.sls
+
+# Install osquery locally
+#if cat /etc/os-release | grep -q 'debian'; then
+# dpkg -i /opt/so/conf/fleet/packages/launcher.deb
+#else
+# rpm -i /opt/so/conf/fleet/packages/launcher.rpm
+#fi
+echo "Installing launcher via salt"
+salt-call state.apply launcher queue=True > /root/launcher.log
+echo "Fleet Setup Complete - Login here: https://$1"
+echo "Your username is $2 and your password is $initpw"
diff --git a/salt/launcher/init.sls b/salt/launcher/init.sls
new file mode 100644
index 000000000..3ba9ad3a6
--- /dev/null
+++ b/salt/launcher/init.sls
@@ -0,0 +1,12 @@
+{%- set FLEETSETUP = salt['pillar.get']('static:fleetsetup', '0') -%}
+
+{%- if FLEETSETUP != 0 %}
+launcherpkg:
+ pkg.installed:
+ - sources:
+ {% if grains['os'] == 'CentOS' %}
+ - launcher-final: salt://launcher/packages/launcher.rpm
+ {% elif grains['os'] == 'Ubuntu' %}
+ - launcher-final: salt://launcher/packages/launcher.deb
+ {% endif %}
+{%- endif %}
diff --git a/salt/launcher/packages/info.txt b/salt/launcher/packages/info.txt
new file mode 100644
index 000000000..5529d123c
--- /dev/null
+++ b/salt/launcher/packages/info.txt
@@ -0,0 +1 @@
+Fleet Packages will be copied to this folder
diff --git a/salt/logstash/conf/conf.enabled.txt b/salt/logstash/conf/conf.enabled.txt
new file mode 100644
index 000000000..a4da29cad
--- /dev/null
+++ b/salt/logstash/conf/conf.enabled.txt
@@ -0,0 +1,17 @@
+# This is where can specify which LogStash configs get loaded.
+#
+# The custom folder on the master gets automatically synced to each logstash
+# node.
+#
+# To enable a custom configuration see the following example and uncomment:
+# /usr/share/logstash/pipeline.custom/1234_input_custom.conf
+##
+# All of the defaults are loaded.
+/usr/share/logstash/pipeline.so/0000_input_syslogng.conf
+/usr/share/logstash/pipeline.so/0001_input_json.conf
+/usr/share/logstash/pipeline.so/0002_input_windows_json.conf
+/usr/share/logstash/pipeline.so/0003_input_syslog.conf
+/usr/share/logstash/pipeline.so/0005_input_suricata.conf
+/usr/share/logstash/pipeline.so/0006_input_beats.conf
+/usr/share/logstash/pipeline.so/0007_input_import.conf
+/usr/share/logstash/pipeline.dynamic/9999_output_redis.conf
diff --git a/salt/logstash/conf/conf.enabled.txt.forward b/salt/logstash/conf/conf.enabled.txt.forward
new file mode 100644
index 000000000..a4da29cad
--- /dev/null
+++ b/salt/logstash/conf/conf.enabled.txt.forward
@@ -0,0 +1,17 @@
+# This is where can specify which LogStash configs get loaded.
+#
+# The custom folder on the master gets automatically synced to each logstash
+# node.
+#
+# To enable a custom configuration see the following example and uncomment:
+# /usr/share/logstash/pipeline.custom/1234_input_custom.conf
+##
+# All of the defaults are loaded.
+/usr/share/logstash/pipeline.so/0000_input_syslogng.conf
+/usr/share/logstash/pipeline.so/0001_input_json.conf
+/usr/share/logstash/pipeline.so/0002_input_windows_json.conf
+/usr/share/logstash/pipeline.so/0003_input_syslog.conf
+/usr/share/logstash/pipeline.so/0005_input_suricata.conf
+/usr/share/logstash/pipeline.so/0006_input_beats.conf
+/usr/share/logstash/pipeline.so/0007_input_import.conf
+/usr/share/logstash/pipeline.dynamic/9999_output_redis.conf
diff --git a/salt/logstash/conf/conf.enabled.txt.parser b/salt/logstash/conf/conf.enabled.txt.parser
new file mode 100644
index 000000000..6fbf3ba45
--- /dev/null
+++ b/salt/logstash/conf/conf.enabled.txt.parser
@@ -0,0 +1,85 @@
+# This is where can specify which LogStash configs get loaded.
+#
+# The custom folder on the master gets automatically synced to each logstash
+# node.
+#
+# To enable a custom configuration see the following example and uncomment:
+# /usr/share/logstash/pipeline.custom/1234_input_custom.conf
+##
+# All of the defaults are loaded.
+# Please note that Bro config is commented out because we're moving that parsing to Elasticsearch ingest.
+/usr/share/logstash/pipeline.dynamic/0900_input_redis.conf
+/usr/share/logstash/pipeline.so/1000_preprocess_log_elapsed.conf
+/usr/share/logstash/pipeline.so/1001_preprocess_syslogng.conf
+/usr/share/logstash/pipeline.so/1002_preprocess_json.conf
+#/usr/share/logstash/pipeline.so/1003_preprocess_bro.conf
+/usr/share/logstash/pipeline.so/1004_preprocess_syslog_types.conf
+/usr/share/logstash/pipeline.so/1026_preprocess_dhcp.conf
+/usr/share/logstash/pipeline.so/1029_preprocess_esxi.conf
+/usr/share/logstash/pipeline.so/1030_preprocess_greensql.conf
+/usr/share/logstash/pipeline.so/1031_preprocess_iis.conf
+/usr/share/logstash/pipeline.so/1032_preprocess_mcafee.conf
+/usr/share/logstash/pipeline.so/1033_preprocess_snort.conf
+/usr/share/logstash/pipeline.so/1034_preprocess_syslog.conf
+#/usr/share/logstash/pipeline.so/1100_preprocess_bro_conn.conf
+#/usr/share/logstash/pipeline.so/1101_preprocess_bro_dhcp.conf
+#/usr/share/logstash/pipeline.so/1102_preprocess_bro_dns.conf
+#/usr/share/logstash/pipeline.so/1103_preprocess_bro_dpd.conf
+#/usr/share/logstash/pipeline.so/1104_preprocess_bro_files.conf
+#/usr/share/logstash/pipeline.so/1105_preprocess_bro_ftp.conf
+#/usr/share/logstash/pipeline.so/1106_preprocess_bro_http.conf
+#/usr/share/logstash/pipeline.so/1107_preprocess_bro_irc.conf
+#/usr/share/logstash/pipeline.so/1108_preprocess_bro_kerberos.conf
+#/usr/share/logstash/pipeline.so/1109_preprocess_bro_notice.conf
+#/usr/share/logstash/pipeline.so/1110_preprocess_bro_rdp.conf
+#/usr/share/logstash/pipeline.so/1111_preprocess_bro_signatures.conf
+#/usr/share/logstash/pipeline.so/1112_preprocess_bro_smtp.conf
+#/usr/share/logstash/pipeline.so/1113_preprocess_bro_snmp.conf
+#/usr/share/logstash/pipeline.so/1114_preprocess_bro_software.conf
+#/usr/share/logstash/pipeline.so/1115_preprocess_bro_ssh.conf
+#/usr/share/logstash/pipeline.so/1116_preprocess_bro_ssl.conf
+#/usr/share/logstash/pipeline.so/1117_preprocess_bro_syslog.conf
+#/usr/share/logstash/pipeline.so/1118_preprocess_bro_tunnel.conf
+#/usr/share/logstash/pipeline.so/1119_preprocess_bro_weird.conf
+#/usr/share/logstash/pipeline.so/1121_preprocess_bro_mysql.conf
+#/usr/share/logstash/pipeline.so/1122_preprocess_bro_socks.conf
+#/usr/share/logstash/pipeline.so/1123_preprocess_bro_x509.conf
+#/usr/share/logstash/pipeline.so/1124_preprocess_bro_intel.conf
+#/usr/share/logstash/pipeline.so/1125_preprocess_bro_modbus.conf
+#/usr/share/logstash/pipeline.so/1126_preprocess_bro_sip.conf
+#/usr/share/logstash/pipeline.so/1127_preprocess_bro_radius.conf
+#/usr/share/logstash/pipeline.so/1128_preprocess_bro_pe.conf
+#/usr/share/logstash/pipeline.so/1129_preprocess_bro_rfb.conf
+#/usr/share/logstash/pipeline.so/1130_preprocess_bro_dnp3.conf
+#/usr/share/logstash/pipeline.so/1131_preprocess_bro_smb_files.conf
+#/usr/share/logstash/pipeline.so/1132_preprocess_bro_smb_mapping.conf
+#/usr/share/logstash/pipeline.so/1133_preprocess_bro_ntlm.conf
+#/usr/share/logstash/pipeline.so/1134_preprocess_bro_dce_rpc.conf
+/usr/share/logstash/pipeline.so/1998_test_data.conf
+/usr/share/logstash/pipeline.so/2000_network_flow.conf
+#/usr/share/logstash/pipeline.so/6000_bro.conf
+#/usr/share/logstash/pipeline.so/6001_bro_import.conf
+/usr/share/logstash/pipeline.so/6002_syslog.conf
+/usr/share/logstash/pipeline.so/6101_switch_brocade.conf
+/usr/share/logstash/pipeline.so/6200_firewall_fortinet.conf
+/usr/share/logstash/pipeline.so/6201_firewall_pfsense.conf
+/usr/share/logstash/pipeline.so/6300_windows.conf
+/usr/share/logstash/pipeline.so/6301_dns_windows.conf
+/usr/share/logstash/pipeline.so/6400_suricata.conf
+/usr/share/logstash/pipeline.so/6500_ossec.conf
+/usr/share/logstash/pipeline.so/6501_ossec_sysmon.conf
+/usr/share/logstash/pipeline.so/6502_ossec_autoruns.conf
+#/usr/share/logstash/pipeline.so/8000_postprocess_bro_cleanup.conf
+/usr/share/logstash/pipeline.so/8001_postprocess_common_ip_augmentation.conf
+/usr/share/logstash/pipeline.so/8006_postprocess_dns.conf
+/usr/share/logstash/pipeline.so/8007_postprocess_dns_top1m_tagging.conf
+/usr/share/logstash/pipeline.so/8007_postprocess_http.conf
+/usr/share/logstash/pipeline.so/8008_postprocess_dns_whois_age.conf
+/usr/share/logstash/pipeline.so/8200_postprocess_tagging.conf
+#/usr/share/logstash/pipeline.so/8502_postprocess_freq_analysis_bro_dns.conf
+#/usr/share/logstash/pipeline.so/8503_postprocess_freq_analysis_bro_http.conf
+#/usr/share/logstash/pipeline.so/8504_postprocess_freq_analysis_bro_ssl.conf
+#/usr/share/logstash/pipeline.so/8505_postprocess_freq_analysis_bro_x509.conf
+/usr/share/logstash/pipeline.so/8998_postprocess_log_elapsed.conf
+/usr/share/logstash/pipeline.so/8999_postprocess_rename_type.conf
+/usr/share/logstash/pipeline.dynamic/9999_output_redis.conf
diff --git a/salt/logstash/conf/conf.enabled.txt.search b/salt/logstash/conf/conf.enabled.txt.search
new file mode 100644
index 000000000..470f19c55
--- /dev/null
+++ b/salt/logstash/conf/conf.enabled.txt.search
@@ -0,0 +1,106 @@
+# This is where can specify which LogStash configs get loaded.
+#
+# The custom folder on the master gets automatically synced to each logstash
+# node.
+#
+# To enable a custom configuration see the following example and uncomment:
+# /usr/share/logstash/pipeline.custom/1234_input_custom.conf
+##
+# All of the defaults are loaded.
+# Please note that Bro config is commented out because we're moving that parsing to Elasticsearch ingest.
+/usr/share/logstash/pipeline.dynamic/0900_input_redis.conf
+/usr/share/logstash/pipeline.so/1000_preprocess_log_elapsed.conf
+/usr/share/logstash/pipeline.so/1001_preprocess_syslogng.conf
+/usr/share/logstash/pipeline.so/1002_preprocess_json.conf
+#/usr/share/logstash/pipeline.so/1003_preprocess_bro.conf
+/usr/share/logstash/pipeline.so/1004_preprocess_syslog_types.conf
+/usr/share/logstash/pipeline.so/1026_preprocess_dhcp.conf
+/usr/share/logstash/pipeline.so/1029_preprocess_esxi.conf
+/usr/share/logstash/pipeline.so/1030_preprocess_greensql.conf
+/usr/share/logstash/pipeline.so/1031_preprocess_iis.conf
+/usr/share/logstash/pipeline.so/1032_preprocess_mcafee.conf
+/usr/share/logstash/pipeline.so/1033_preprocess_snort.conf
+/usr/share/logstash/pipeline.so/1034_preprocess_syslog.conf
+#/usr/share/logstash/pipeline.so/1100_preprocess_bro_conn.conf
+#/usr/share/logstash/pipeline.so/1101_preprocess_bro_dhcp.conf
+#/usr/share/logstash/pipeline.so/1102_preprocess_bro_dns.conf
+#/usr/share/logstash/pipeline.so/1103_preprocess_bro_dpd.conf
+#/usr/share/logstash/pipeline.so/1104_preprocess_bro_files.conf
+#/usr/share/logstash/pipeline.so/1105_preprocess_bro_ftp.conf
+#/usr/share/logstash/pipeline.so/1106_preprocess_bro_http.conf
+#/usr/share/logstash/pipeline.so/1107_preprocess_bro_irc.conf
+#/usr/share/logstash/pipeline.so/1108_preprocess_bro_kerberos.conf
+#/usr/share/logstash/pipeline.so/1109_preprocess_bro_notice.conf
+#/usr/share/logstash/pipeline.so/1110_preprocess_bro_rdp.conf
+#/usr/share/logstash/pipeline.so/1111_preprocess_bro_signatures.conf
+#/usr/share/logstash/pipeline.so/1112_preprocess_bro_smtp.conf
+#/usr/share/logstash/pipeline.so/1113_preprocess_bro_snmp.conf
+#/usr/share/logstash/pipeline.so/1114_preprocess_bro_software.conf
+#/usr/share/logstash/pipeline.so/1115_preprocess_bro_ssh.conf
+#/usr/share/logstash/pipeline.so/1116_preprocess_bro_ssl.conf
+#/usr/share/logstash/pipeline.so/1117_preprocess_bro_syslog.conf
+#/usr/share/logstash/pipeline.so/1118_preprocess_bro_tunnel.conf
+#/usr/share/logstash/pipeline.so/1119_preprocess_bro_weird.conf
+#/usr/share/logstash/pipeline.so/1121_preprocess_bro_mysql.conf
+#/usr/share/logstash/pipeline.so/1122_preprocess_bro_socks.conf
+#/usr/share/logstash/pipeline.so/1123_preprocess_bro_x509.conf
+#/usr/share/logstash/pipeline.so/1124_preprocess_bro_intel.conf
+#/usr/share/logstash/pipeline.so/1125_preprocess_bro_modbus.conf
+#/usr/share/logstash/pipeline.so/1126_preprocess_bro_sip.conf
+#/usr/share/logstash/pipeline.so/1127_preprocess_bro_radius.conf
+#/usr/share/logstash/pipeline.so/1128_preprocess_bro_pe.conf
+#/usr/share/logstash/pipeline.so/1129_preprocess_bro_rfb.conf
+#/usr/share/logstash/pipeline.so/1130_preprocess_bro_dnp3.conf
+#/usr/share/logstash/pipeline.so/1131_preprocess_bro_smb_files.conf
+#/usr/share/logstash/pipeline.so/1132_preprocess_bro_smb_mapping.conf
+#/usr/share/logstash/pipeline.so/1133_preprocess_bro_ntlm.conf
+#/usr/share/logstash/pipeline.so/1134_preprocess_bro_dce_rpc.conf
+/usr/share/logstash/pipeline.so/1998_test_data.conf
+/usr/share/logstash/pipeline.so/2000_network_flow.conf
+#/usr/share/logstash/pipeline.so/6000_bro.conf
+#/usr/share/logstash/pipeline.so/6001_bro_import.conf
+/usr/share/logstash/pipeline.so/6002_syslog.conf
+/usr/share/logstash/pipeline.so/6101_switch_brocade.conf
+/usr/share/logstash/pipeline.so/6200_firewall_fortinet.conf
+/usr/share/logstash/pipeline.so/6201_firewall_pfsense.conf
+/usr/share/logstash/pipeline.so/6300_windows.conf
+/usr/share/logstash/pipeline.so/6301_dns_windows.conf
+/usr/share/logstash/pipeline.so/6400_suricata.conf
+/usr/share/logstash/pipeline.so/6500_ossec.conf
+/usr/share/logstash/pipeline.so/6501_ossec_sysmon.conf
+/usr/share/logstash/pipeline.so/6502_ossec_autoruns.conf
+/usr/share/logstash/pipeline.so/6600_winlogbeat_sysmon.conf
+/usr/share/logstash/pipeline.so/6700_winlogbeat.conf
+#/usr/share/logstash/pipeline.so/8000_postprocess_bro_cleanup.conf
+/usr/share/logstash/pipeline.so/8001_postprocess_common_ip_augmentation.conf
+#/usr/share/logstash/pipeline.so/8006_postprocess_dns.conf
+#/usr/share/logstash/pipeline.so/8007_postprocess_dns_top1m_tagging.conf
+/usr/share/logstash/pipeline.so/8007_postprocess_http.conf
+#/usr/share/logstash/pipeline.so/8008_postprocess_dns_whois_age.conf
+/usr/share/logstash/pipeline.so/8200_postprocess_tagging.conf
+#/usr/share/logstash/pipeline.so/8502_postprocess_freq_analysis_bro_dns.conf
+#/usr/share/logstash/pipeline.so/8503_postprocess_freq_analysis_bro_http.conf
+#/usr/share/logstash/pipeline.so/8504_postprocess_freq_analysis_bro_ssl.conf
+#/usr/share/logstash/pipeline.so/8505_postprocess_freq_analysis_bro_x509.conf
+/usr/share/logstash/pipeline.so/8998_postprocess_log_elapsed.conf
+/usr/share/logstash/pipeline.so/8999_postprocess_rename_type.conf
+/usr/share/logstash/pipeline.dynamic/9000_output_bro.conf
+/usr/share/logstash/pipeline.dynamic/9001_output_switch.conf
+/usr/share/logstash/pipeline.dynamic/9002_output_import.conf
+/usr/share/logstash/pipeline.dynamic/9004_output_flow.conf
+/usr/share/logstash/pipeline.dynamic/9026_output_dhcp.conf
+/usr/share/logstash/pipeline.dynamic/9029_output_esxi.conf
+/usr/share/logstash/pipeline.dynamic/9030_output_greensql.conf
+/usr/share/logstash/pipeline.dynamic/9031_output_iis.conf
+/usr/share/logstash/pipeline.dynamic/9032_output_mcafee.conf
+/usr/share/logstash/pipeline.dynamic/9033_output_snort.conf
+/usr/share/logstash/pipeline.dynamic/9034_output_syslog.conf
+/usr/share/logstash/pipeline.dynamic/9200_output_firewall.conf
+/usr/share/logstash/pipeline.dynamic/9300_output_windows.conf
+/usr/share/logstash/pipeline.dynamic/9301_output_dns_windows.conf
+/usr/share/logstash/pipeline.dynamic/9400_output_suricata.conf
+/usr/share/logstash/pipeline.dynamic/9500_output_beats.conf
+/usr/share/logstash/pipeline.dynamic/9600_output_ossec.conf
+/usr/share/logstash/pipeline.dynamic/9998_output_test_data.conf
+/usr/share/logstash/pipeline.dynamic/7100_osquery_wel.conf
+/usr/share/logstash/pipeline.dynamic/9100_output_osquery.conf
diff --git a/salt/logstash/conf/conf.enabled.txt.so-eval b/salt/logstash/conf/conf.enabled.txt.so-eval
new file mode 100644
index 000000000..d125fc829
--- /dev/null
+++ b/salt/logstash/conf/conf.enabled.txt.so-eval
@@ -0,0 +1,113 @@
+# This is where can specify which LogStash configs get loaded.
+#
+# The custom folder on the master gets automatically synced to each logstash
+# node.
+#
+# To enable a custom configuration see the following example and uncomment:
+# /usr/share/logstash/pipeline.custom/1234_input_custom.conf
+##
+# All of the defaults are loaded.
+# Please note that Bro config is commented out because we're moving that parsing to Elasticsearch ingest.
+#/usr/share/logstash/pipeline.so/0000_input_syslogng.conf
+#/usr/share/logstash/pipeline.so/0001_input_json.conf
+#/usr/share/logstash/pipeline.so/0002_input_windows_json.conf
+#/usr/share/logstash/pipeline.so/0003_input_syslog.conf
+#/usr/share/logstash/pipeline.so/0005_input_suricata.conf
+#/usr/share/logstash/pipeline.dynamic/0006_input_beats.conf
+/usr/share/logstash/pipeline.so/0007_input_import.conf
+/usr/share/logstash/pipeline.dynamic/0010_input_hhbeats.conf
+#/usr/share/logstash/pipeline.so/1000_preprocess_log_elapsed.conf
+#/usr/share/logstash/pipeline.so/1001_preprocess_syslogng.conf
+#/usr/share/logstash/pipeline.so/1002_preprocess_json.conf
+#/usr/share/logstash/pipeline.so/1003_preprocess_bro.conf
+#/usr/share/logstash/pipeline.so/1004_preprocess_syslog_types.conf
+/usr/share/logstash/pipeline.so/1026_preprocess_dhcp.conf
+#/usr/share/logstash/pipeline.so/1029_preprocess_esxi.conf
+#/usr/share/logstash/pipeline.so/1030_preprocess_greensql.conf
+#/usr/share/logstash/pipeline.so/1031_preprocess_iis.conf
+#/usr/share/logstash/pipeline.so/1032_preprocess_mcafee.conf
+/usr/share/logstash/pipeline.so/1033_preprocess_snort.conf
+#/usr/share/logstash/pipeline.so/1034_preprocess_syslog.conf
+#/usr/share/logstash/pipeline.so/1100_preprocess_bro_conn.conf
+#/usr/share/logstash/pipeline.so/1101_preprocess_bro_dhcp.conf
+#/usr/share/logstash/pipeline.so/1102_preprocess_bro_dns.conf
+#/usr/share/logstash/pipeline.so/1103_preprocess_bro_dpd.conf
+#/usr/share/logstash/pipeline.so/1104_preprocess_bro_files.conf
+#/usr/share/logstash/pipeline.so/1105_preprocess_bro_ftp.conf
+#/usr/share/logstash/pipeline.so/1106_preprocess_bro_http.conf
+#/usr/share/logstash/pipeline.so/1107_preprocess_bro_irc.conf
+#/usr/share/logstash/pipeline.so/1108_preprocess_bro_kerberos.conf
+#/usr/share/logstash/pipeline.so/1109_preprocess_bro_notice.conf
+#/usr/share/logstash/pipeline.so/1110_preprocess_bro_rdp.conf
+#/usr/share/logstash/pipeline.so/1111_preprocess_bro_signatures.conf
+#/usr/share/logstash/pipeline.so/1112_preprocess_bro_smtp.conf
+#/usr/share/logstash/pipeline.so/1113_preprocess_bro_snmp.conf
+#/usr/share/logstash/pipeline.so/1114_preprocess_bro_software.conf
+#/usr/share/logstash/pipeline.so/1115_preprocess_bro_ssh.conf
+#/usr/share/logstash/pipeline.so/1116_preprocess_bro_ssl.conf
+#/usr/share/logstash/pipeline.so/1117_preprocess_bro_syslog.conf
+#/usr/share/logstash/pipeline.so/1118_preprocess_bro_tunnel.conf
+#/usr/share/logstash/pipeline.so/1119_preprocess_bro_weird.conf
+#/usr/share/logstash/pipeline.so/1121_preprocess_bro_mysql.conf
+#/usr/share/logstash/pipeline.so/1122_preprocess_bro_socks.conf
+#/usr/share/logstash/pipeline.so/1123_preprocess_bro_x509.conf
+#/usr/share/logstash/pipeline.so/1124_preprocess_bro_intel.conf
+#/usr/share/logstash/pipeline.so/1125_preprocess_bro_modbus.conf
+#/usr/share/logstash/pipeline.so/1126_preprocess_bro_sip.conf
+#/usr/share/logstash/pipeline.so/1127_preprocess_bro_radius.conf
+#/usr/share/logstash/pipeline.so/1128_preprocess_bro_pe.conf
+#/usr/share/logstash/pipeline.so/1129_preprocess_bro_rfb.conf
+#/usr/share/logstash/pipeline.so/1130_preprocess_bro_dnp3.conf
+#/usr/share/logstash/pipeline.so/1131_preprocess_bro_smb_files.conf
+#/usr/share/logstash/pipeline.so/1132_preprocess_bro_smb_mapping.conf
+#/usr/share/logstash/pipeline.so/1133_preprocess_bro_ntlm.conf
+#/usr/share/logstash/pipeline.so/1134_preprocess_bro_dce_rpc.conf
+#/usr/share/logstash/pipeline.so/1998_test_data.conf
+#/usr/share/logstash/pipeline.so/2000_network_flow.conf
+#/usr/share/logstash/pipeline.so/6000_bro.conf
+#/usr/share/logstash/pipeline.so/6001_bro_import.conf
+#/usr/share/logstash/pipeline.so/6002_syslog.conf
+#/usr/share/logstash/pipeline.so/6101_switch_brocade.conf
+#/usr/share/logstash/pipeline.so/6200_firewall_fortinet.conf
+#/usr/share/logstash/pipeline.so/6201_firewall_pfsense.conf
+#/usr/share/logstash/pipeline.so/6300_windows.conf
+#/usr/share/logstash/pipeline.so/6301_dns_windows.conf
+#/usr/share/logstash/pipeline.so/6400_suricata.conf
+/usr/share/logstash/pipeline.so/6500_ossec.conf
+/usr/share/logstash/pipeline.so/6501_ossec_sysmon.conf
+/usr/share/logstash/pipeline.so/6502_ossec_autoruns.conf
+/usr/share/logstash/pipeline.so/6600_winlogbeat_sysmon.conf
+/usr/share/logstash/pipeline.so/6700_winlogbeat.conf
+#/usr/share/logstash/pipeline.so/8000_postprocess_bro_cleanup.conf
+/usr/share/logstash/pipeline.so/8001_postprocess_common_ip_augmentation.conf
+#/usr/share/logstash/pipeline.so/8006_postprocess_dns.conf
+#/usr/share/logstash/pipeline.so/8007_postprocess_dns_top1m_tagging.conf
+/usr/share/logstash/pipeline.so/8007_postprocess_http.conf
+#/usr/share/logstash/pipeline.so/8008_postprocess_dns_whois_age.conf
+/usr/share/logstash/pipeline.so/8200_postprocess_tagging.conf
+#/usr/share/logstash/pipeline.so/8502_postprocess_freq_analysis_bro_dns.conf
+#/usr/share/logstash/pipeline.so/8503_postprocess_freq_analysis_bro_http.conf
+#/usr/share/logstash/pipeline.so/8504_postprocess_freq_analysis_bro_ssl.conf
+#/usr/share/logstash/pipeline.so/8505_postprocess_freq_analysis_bro_x509.conf
+#/usr/share/logstash/pipeline.so/8998_postprocess_log_elapsed.conf
+/usr/share/logstash/pipeline.so/8999_postprocess_rename_type.conf
+/usr/share/logstash/pipeline.dynamic/9000_output_bro.conf
+#/usr/share/logstash/pipeline.dynamic/9001_output_switch.conf
+/usr/share/logstash/pipeline.dynamic/9002_output_import.conf
+#/usr/share/logstash/pipeline.dynamic/9004_output_flow.conf
+#/usr/share/logstash/pipeline.dynamic/9026_output_dhcp.conf
+#/usr/share/logstash/pipeline.dynamic/9029_output_esxi.conf
+#/usr/share/logstash/pipeline.dynamic/9030_output_greensql.conf
+#/usr/share/logstash/pipeline.dynamic/9031_output_iis.conf
+#/usr/share/logstash/pipeline.dynamic/9032_output_mcafee.conf
+/usr/share/logstash/pipeline.dynamic/9033_output_snort.conf
+#/usr/share/logstash/pipeline.dynamic/9034_output_syslog.conf
+#/usr/share/logstash/pipeline.dynamic/9200_output_firewall.conf
+#/usr/share/logstash/pipeline.dynamic/9300_output_windows.conf
+#/usr/share/logstash/pipeline.dynamic/9301_output_dns_windows.conf
+/usr/share/logstash/pipeline.dynamic/9400_output_suricata.conf
+/usr/share/logstash/pipeline.dynamic/9500_output_beats.conf
+/usr/share/logstash/pipeline.dynamic/9600_output_ossec.conf
+#/usr/share/logstash/pipeline.dynamic/9998_output_test_data.conf
+/usr/share/logstash/pipeline.dynamic/7100_osquery_wel.conf
+/usr/share/logstash/pipeline.dynamic/9100_output_osquery.conf
diff --git a/salt/logstash/conf/conf.enabled.txt.so-eval.old b/salt/logstash/conf/conf.enabled.txt.so-eval.old
new file mode 100644
index 000000000..e5ce9c803
--- /dev/null
+++ b/salt/logstash/conf/conf.enabled.txt.so-eval.old
@@ -0,0 +1,109 @@
+# This is where can specify which LogStash configs get loaded.
+#
+# The custom folder on the master gets automatically synced to each logstash
+# node.
+#
+# To enable a custom configuration see the following example and uncomment:
+# /usr/share/logstash/pipeline.custom/1234_input_custom.conf
+##
+# All of the defaults are loaded.
+/usr/share/logstash/pipeline.so/0000_input_syslogng.conf
+/usr/share/logstash/pipeline.so/0001_input_json.conf
+/usr/share/logstash/pipeline.so/0002_input_windows_json.conf
+/usr/share/logstash/pipeline.so/0003_input_syslog.conf
+/usr/share/logstash/pipeline.so/0005_input_suricata.conf
+/usr/share/logstash/pipeline.so/0007_input_import.conf
+/usr/share/logstash/pipeline.so/0008_input_eval.conf
+/usr/share/logstash/pipeline.so/1000_preprocess_log_elapsed.conf
+/usr/share/logstash/pipeline.so/1001_preprocess_syslogng.conf
+/usr/share/logstash/pipeline.so/1002_preprocess_json.conf
+/usr/share/logstash/pipeline.so/1003_preprocess_bro.conf
+/usr/share/logstash/pipeline.so/1004_preprocess_syslog_types.conf
+/usr/share/logstash/pipeline.so/1026_preprocess_dhcp.conf
+/usr/share/logstash/pipeline.so/1029_preprocess_esxi.conf
+/usr/share/logstash/pipeline.so/1030_preprocess_greensql.conf
+/usr/share/logstash/pipeline.so/1031_preprocess_iis.conf
+/usr/share/logstash/pipeline.so/1032_preprocess_mcafee.conf
+/usr/share/logstash/pipeline.so/1033_preprocess_snort.conf
+/usr/share/logstash/pipeline.so/1034_preprocess_syslog.conf
+/usr/share/logstash/pipeline.so/1100_preprocess_bro_conn.conf
+/usr/share/logstash/pipeline.so/1101_preprocess_bro_dhcp.conf
+/usr/share/logstash/pipeline.so/1102_preprocess_bro_dns.conf
+/usr/share/logstash/pipeline.so/1103_preprocess_bro_dpd.conf
+/usr/share/logstash/pipeline.so/1104_preprocess_bro_files.conf
+/usr/share/logstash/pipeline.so/1105_preprocess_bro_ftp.conf
+/usr/share/logstash/pipeline.so/1106_preprocess_bro_http.conf
+/usr/share/logstash/pipeline.so/1107_preprocess_bro_irc.conf
+/usr/share/logstash/pipeline.so/1108_preprocess_bro_kerberos.conf
+/usr/share/logstash/pipeline.so/1109_preprocess_bro_notice.conf
+/usr/share/logstash/pipeline.so/1110_preprocess_bro_rdp.conf
+/usr/share/logstash/pipeline.so/1111_preprocess_bro_signatures.conf
+/usr/share/logstash/pipeline.so/1112_preprocess_bro_smtp.conf
+/usr/share/logstash/pipeline.so/1113_preprocess_bro_snmp.conf
+/usr/share/logstash/pipeline.so/1114_preprocess_bro_software.conf
+/usr/share/logstash/pipeline.so/1115_preprocess_bro_ssh.conf
+/usr/share/logstash/pipeline.so/1116_preprocess_bro_ssl.conf
+/usr/share/logstash/pipeline.so/1117_preprocess_bro_syslog.conf
+/usr/share/logstash/pipeline.so/1118_preprocess_bro_tunnel.conf
+/usr/share/logstash/pipeline.so/1119_preprocess_bro_weird.conf
+/usr/share/logstash/pipeline.so/1121_preprocess_bro_mysql.conf
+/usr/share/logstash/pipeline.so/1122_preprocess_bro_socks.conf
+/usr/share/logstash/pipeline.so/1123_preprocess_bro_x509.conf
+/usr/share/logstash/pipeline.so/1124_preprocess_bro_intel.conf
+/usr/share/logstash/pipeline.so/1125_preprocess_bro_modbus.conf
+/usr/share/logstash/pipeline.so/1126_preprocess_bro_sip.conf
+/usr/share/logstash/pipeline.so/1127_preprocess_bro_radius.conf
+/usr/share/logstash/pipeline.so/1128_preprocess_bro_pe.conf
+/usr/share/logstash/pipeline.so/1129_preprocess_bro_rfb.conf
+/usr/share/logstash/pipeline.so/1130_preprocess_bro_dnp3.conf
+/usr/share/logstash/pipeline.so/1131_preprocess_bro_smb_files.conf
+/usr/share/logstash/pipeline.so/1132_preprocess_bro_smb_mapping.conf
+/usr/share/logstash/pipeline.so/1133_preprocess_bro_ntlm.conf
+/usr/share/logstash/pipeline.so/1134_preprocess_bro_dce_rpc.conf
+/usr/share/logstash/pipeline.so/1998_test_data.conf
+/usr/share/logstash/pipeline.so/2000_network_flow.conf
+/usr/share/logstash/pipeline.so/6000_bro.conf
+/usr/share/logstash/pipeline.so/6001_bro_import.conf
+/usr/share/logstash/pipeline.so/6002_syslog.conf
+/usr/share/logstash/pipeline.so/6101_switch_brocade.conf
+/usr/share/logstash/pipeline.so/6200_firewall_fortinet.conf
+/usr/share/logstash/pipeline.so/6201_firewall_pfsense.conf
+/usr/share/logstash/pipeline.so/6300_windows.conf
+/usr/share/logstash/pipeline.so/6301_dns_windows.conf
+/usr/share/logstash/pipeline.so/6400_suricata.conf
+/usr/share/logstash/pipeline.so/6500_ossec.conf
+/usr/share/logstash/pipeline.so/6501_ossec_sysmon.conf
+/usr/share/logstash/pipeline.so/6502_ossec_autoruns.conf
+/usr/share/logstash/pipeline.so/6600_winlogbeat_sysmon.conf
+/usr/share/logstash/pipeline.so/6700_winlogbeat.conf
+/usr/share/logstash/pipeline.so/8000_postprocess_bro_cleanup.conf
+/usr/share/logstash/pipeline.so/8001_postprocess_common_ip_augmentation.conf
+#/usr/share/logstash/pipeline.so/8006_postprocess_dns.conf
+#/usr/share/logstash/pipeline.so/8007_postprocess_dns_top1m_tagging.conf
+/usr/share/logstash/pipeline.so/8007_postprocess_http.conf
+#/usr/share/logstash/pipeline.so/8008_postprocess_dns_whois_age.conf
+/usr/share/logstash/pipeline.so/8200_postprocess_tagging.conf
+#/usr/share/logstash/pipeline.so/8502_postprocess_freq_analysis_bro_dns.conf
+#/usr/share/logstash/pipeline.so/8503_postprocess_freq_analysis_bro_http.conf
+#/usr/share/logstash/pipeline.so/8504_postprocess_freq_analysis_bro_ssl.conf
+#/usr/share/logstash/pipeline.so/8505_postprocess_freq_analysis_bro_x509.conf
+/usr/share/logstash/pipeline.so/8998_postprocess_log_elapsed.conf
+/usr/share/logstash/pipeline.so/8999_postprocess_rename_type.conf
+/usr/share/logstash/pipeline.dynamic/9000_output_bro.conf
+/usr/share/logstash/pipeline.dynamic/9001_output_switch.conf
+/usr/share/logstash/pipeline.dynamic/9002_output_import.conf
+/usr/share/logstash/pipeline.dynamic/9004_output_flow.conf
+/usr/share/logstash/pipeline.dynamic/9026_output_dhcp.conf
+/usr/share/logstash/pipeline.dynamic/9029_output_esxi.conf
+/usr/share/logstash/pipeline.dynamic/9030_output_greensql.conf
+/usr/share/logstash/pipeline.dynamic/9031_output_iis.conf
+/usr/share/logstash/pipeline.dynamic/9032_output_mcafee.conf
+/usr/share/logstash/pipeline.dynamic/9033_output_snort.conf
+/usr/share/logstash/pipeline.dynamic/9034_output_syslog.conf
+/usr/share/logstash/pipeline.dynamic/9200_output_firewall.conf
+/usr/share/logstash/pipeline.dynamic/9300_output_windows.conf
+/usr/share/logstash/pipeline.dynamic/9301_output_dns_windows.conf
+/usr/share/logstash/pipeline.dynamic/9400_output_suricata.conf
+/usr/share/logstash/pipeline.dynamic/9500_output_beats.conf
+/usr/share/logstash/pipeline.dynamic/9600_output_ossec.conf
+/usr/share/logstash/pipeline.dynamic/9998_output_test_data.conf
diff --git a/salt/logstash/conf/conf.enabled.txt.so-helix b/salt/logstash/conf/conf.enabled.txt.so-helix
new file mode 100644
index 000000000..ec07b5a90
--- /dev/null
+++ b/salt/logstash/conf/conf.enabled.txt.so-helix
@@ -0,0 +1,47 @@
+# This is where can specify which LogStash configs get loaded.
+#
+# The custom folder on the master gets automatically synced to each logstash
+# node.
+#
+# To enable a custom configuration see the following example and uncomment:
+# /usr/share/logstash/pipeline.custom/1234_input_custom.conf
+##
+# All of the defaults are loaded.
+/usr/share/logstash/pipeline.dynamic/0010_input_hhbeats.conf
+/usr/share/logstash/pipeline.so/1033_preprocess_snort.conf
+/usr/share/logstash/pipeline.so/1100_preprocess_bro_conn.conf
+/usr/share/logstash/pipeline.so/1101_preprocess_bro_dhcp.conf
+/usr/share/logstash/pipeline.so/1102_preprocess_bro_dns.conf
+/usr/share/logstash/pipeline.so/1103_preprocess_bro_dpd.conf
+/usr/share/logstash/pipeline.so/1104_preprocess_bro_files.conf
+/usr/share/logstash/pipeline.so/1105_preprocess_bro_ftp.conf
+/usr/share/logstash/pipeline.so/1106_preprocess_bro_http.conf
+/usr/share/logstash/pipeline.so/1107_preprocess_bro_irc.conf
+/usr/share/logstash/pipeline.so/1108_preprocess_bro_kerberos.conf
+/usr/share/logstash/pipeline.so/1109_preprocess_bro_notice.conf
+/usr/share/logstash/pipeline.so/1110_preprocess_bro_rdp.conf
+/usr/share/logstash/pipeline.so/1111_preprocess_bro_signatures.conf
+/usr/share/logstash/pipeline.so/1112_preprocess_bro_smtp.conf
+/usr/share/logstash/pipeline.so/1113_preprocess_bro_snmp.conf
+/usr/share/logstash/pipeline.so/1114_preprocess_bro_software.conf
+/usr/share/logstash/pipeline.so/1115_preprocess_bro_ssh.conf
+/usr/share/logstash/pipeline.so/1116_preprocess_bro_ssl.conf
+/usr/share/logstash/pipeline.so/1117_preprocess_bro_syslog.conf
+/usr/share/logstash/pipeline.so/1118_preprocess_bro_tunnel.conf
+/usr/share/logstash/pipeline.so/1119_preprocess_bro_weird.conf
+/usr/share/logstash/pipeline.so/1121_preprocess_bro_mysql.conf
+/usr/share/logstash/pipeline.so/1122_preprocess_bro_socks.conf
+/usr/share/logstash/pipeline.so/1123_preprocess_bro_x509.conf
+/usr/share/logstash/pipeline.so/1124_preprocess_bro_intel.conf
+/usr/share/logstash/pipeline.so/1125_preprocess_bro_modbus.conf
+/usr/share/logstash/pipeline.so/1126_preprocess_bro_sip.conf
+/usr/share/logstash/pipeline.so/1127_preprocess_bro_radius.conf
+/usr/share/logstash/pipeline.so/1128_preprocess_bro_pe.conf
+/usr/share/logstash/pipeline.so/1129_preprocess_bro_rfb.conf
+/usr/share/logstash/pipeline.so/1130_preprocess_bro_dnp3.conf
+/usr/share/logstash/pipeline.so/1131_preprocess_bro_smb_files.conf
+/usr/share/logstash/pipeline.so/1132_preprocess_bro_smb_mapping.conf
+/usr/share/logstash/pipeline.so/1133_preprocess_bro_ntlm.conf
+/usr/share/logstash/pipeline.so/1134_preprocess_bro_dce_rpc.conf
+/usr/share/logstash/pipeline.so/8001_postprocess_common_ip_augmentation.conf
+/usr/share/logstash/pipeline.dynamic/9997_output_helix.conf
diff --git a/salt/logstash/conf/conf.enabled.txt.so-master b/salt/logstash/conf/conf.enabled.txt.so-master
new file mode 100644
index 000000000..6464496fa
--- /dev/null
+++ b/salt/logstash/conf/conf.enabled.txt.so-master
@@ -0,0 +1,18 @@
+# This is where can specify which LogStash configs get loaded.
+#
+# The custom folder on the master gets automatically synced to each logstash
+# node.
+#
+# To enable a custom configuration see the following example and uncomment:
+# /usr/share/logstash/pipeline.custom/1234_input_custom.conf
+##
+# All of the defaults are loaded.
+/usr/share/logstash/pipeline.so/0000_input_syslogng.conf
+/usr/share/logstash/pipeline.so/0001_input_json.conf
+/usr/share/logstash/pipeline.so/0002_input_windows_json.conf
+/usr/share/logstash/pipeline.so/0003_input_syslog.conf
+/usr/share/logstash/pipeline.so/0005_input_suricata.conf
+#/usr/share/logstash/pipeline.dynamic/0006_input_beats.conf
+/usr/share/logstash/pipeline.dynamic/0010_input_hhbeats.conf
+/usr/share/logstash/pipeline.so/0007_input_import.conf
+/usr/share/logstash/pipeline.dynamic/9999_output_redis.conf
diff --git a/salt/logstash/conf/conf.enabled.txt.so-mastersearch b/salt/logstash/conf/conf.enabled.txt.so-mastersearch
new file mode 100644
index 000000000..6464496fa
--- /dev/null
+++ b/salt/logstash/conf/conf.enabled.txt.so-mastersearch
@@ -0,0 +1,18 @@
+# This is where can specify which LogStash configs get loaded.
+#
+# The custom folder on the master gets automatically synced to each logstash
+# node.
+#
+# To enable a custom configuration see the following example and uncomment:
+# /usr/share/logstash/pipeline.custom/1234_input_custom.conf
+##
+# All of the defaults are loaded.
+/usr/share/logstash/pipeline.so/0000_input_syslogng.conf
+/usr/share/logstash/pipeline.so/0001_input_json.conf
+/usr/share/logstash/pipeline.so/0002_input_windows_json.conf
+/usr/share/logstash/pipeline.so/0003_input_syslog.conf
+/usr/share/logstash/pipeline.so/0005_input_suricata.conf
+#/usr/share/logstash/pipeline.dynamic/0006_input_beats.conf
+/usr/share/logstash/pipeline.dynamic/0010_input_hhbeats.conf
+/usr/share/logstash/pipeline.so/0007_input_import.conf
+/usr/share/logstash/pipeline.dynamic/9999_output_redis.conf
diff --git a/salt/logstash/conf/pipelines/6000_bro.conf b/salt/logstash/conf/pipelines/6000_bro.conf
new file mode 100644
index 000000000..4ba3d3989
--- /dev/null
+++ b/salt/logstash/conf/pipelines/6000_bro.conf
@@ -0,0 +1,228 @@
+# Original Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/10/2018
+#
+filter {
+ if "bro" in [tags] {
+
+ # Bro logs have a high quality timestamp, so let's copy that to @timestamp.
+ # Before we do, let's copy the existing logstash @timestamp to timestamp.
+ mutate {
+ add_field => { "logstash_timestamp" => "%{@timestamp}" }
+ }
+ mutate {
+ convert => { "logstash_timestamp" => "string" }
+ }
+ mutate {
+ convert => { "timestamp" => "string" }
+ }
+ # New Bro JSON logs use ISO8601 timestamps.
+ # Old Bro TSV logs use UNIX timestamps.
+ date {
+ match => [ "timestamp", "ISO8601", "UNIX" ]
+ }
+ mutate {
+ rename => { "logstash_timestamp" => "timestamp" }
+ }
+
+ if [duration] == "-" {
+ mutate {
+ replace => [ "duration", "0" ]
+ }
+ }
+ if [original_bytes] == "-" {
+ mutate {
+ replace => [ "original_bytes", "0" ]
+ }
+ }
+ # If MissedBytes is unspecified set it to zero so it is an integer
+ if [missed_bytes] == "-" {
+ mutate {
+ replace => [ "missed_bytes", "0" ]
+ }
+ }
+ # If OriginalIPBytes is unspecified set it to zero so it is an integer
+ if [original_ip_bytes] == "-" {
+ mutate {
+ replace => [ "original_ip_bytes", "0" ]
+ }
+ }
+ # If RespondBytes is unspecified set it to zero so it is an integer
+ if [respond_bytes] == "-" {
+ mutate {
+ replace => [ "respond_bytes", "0" ]
+ }
+ }
+ # If RespondIPBytes is unspecified set it to zero so it is an integer
+ if [respond_ip_bytes] == "-" {
+ mutate {
+ replace => [ "respond_ip_bytes", "0" ]
+ }
+ }
+ if [request_body_length] == "-" {
+ mutate {
+ replace => [ "request_body_length", "0" ]
+ }
+ }
+ if [response_body_length] == "-" {
+ mutate {
+ replace => [ "response_body_length", "0" ]
+ }
+ }
+ if [source_port] == "-" {
+ mutate {
+ remove_field => ["source_port"]
+ }
+ }
+ if [destination_port] == "-" {
+ mutate {
+ remove_field => ["destination_port"]
+ }
+ }
+ if [virtual_host] == "-" {
+ mutate {
+ remove_field => ["virtual_host"]
+ }
+ }
+ if [x_originating_ip] == "-" {
+ mutate {
+ remove_field => ["x_originating_ip"]
+ }
+ }
+ if [basic_constraints_path_length] == "-" {
+ mutate {
+ remove_field => ["basic_constraints_path_length"]
+ }
+ }
+ if [data_channel_source_ip] == "-" {
+ mutate {
+ remove_field => ["data_channel_source_ip"]
+ }
+ }
+ if [data_channel_destination_ip] == "-" {
+ mutate {
+ remove_field => ["data_channel_destination_ip"]
+ }
+ }
+ if [desktop_width] == "-" {
+ mutate {
+ remove_field => ["desktop_width"]
+ }
+ }
+ if [desktop_height] == "-" {
+ mutate {
+ remove_field => ["desktop_height"]
+ }
+ }
+ if [height] == "-" {
+ mutate {
+ remove_field => ["height"]
+ }
+ }
+
+
+ # I renamed conn_uids to uid so that it is easy to pivot to all things tied to a connection
+ mutate {
+ rename => [ "connection_uids", "uid" ]
+ }
+ # If total_bytes is set to "-" change it to 0 so it is an integer
+ if [total_bytes] == "-" {
+ mutate {
+ replace => [ "total_bytes", "0" ]
+ }
+ }
+ # If seen_bytes is set to "-" change it to 0 so it is an integer
+ if [seen_bytes] == "-" {
+ mutate {
+ replace => [ "seen_bytes", "0" ]
+ }
+ }
+ # If missing_bytes is set to "-" change it to 0 so it is an integer
+ if [missing_bytes] == "-" {
+ mutate {
+ replace => [ "missing_bytes", "0" ]
+ }
+ }
+ # If overflow_bytes is set to "-" change it to 0 so it is an integer
+ if [overflow_bytes] == "-" {
+ mutate {
+ replace => [ "overflow_bytes", "0" ]
+ }
+ }
+ if [dcc_file_size] == "-" {
+ mutate {
+ replace => [ "dcc_file_size", "0" ]
+ }
+ }
+ if [authentication_attempts] == "-" {
+ mutate {
+ replace => [ "authentication_attempts", "0" ]
+ }
+ }
+ if [file_size] == "-" {
+ mutate {
+ replace => [ "file_size", "0" ]
+ }
+ }
+ if [original_ip_bytes] == "-" {
+ mutate {
+ replace => [ "original_ip_bytes", "0" ]
+ }
+ }
+
+ # I recommend changing the field types below to integer or floats so searches can do greater than or less than
+ # and also so math functions can be ran against them
+ mutate {
+ convert => [ "bound_port", "integer" ]
+ convert => [ "data_channel_destination_port", "integer" ]
+ convert => [ "destination_port", "integer" ]
+ convert => [ "depth", "integer" ]
+ #convert => [ "duration", "float" ]
+ convert => [ "info_code", "integer" ]
+ convert => [ "missed_bytes", "integer" ]
+ convert => [ "missing_bytes", "integer" ]
+ convert => [ "n", "integer" ]
+ convert => [ "original_bytes", "integer" ]
+ convert => [ "original_packets", "integer" ]
+ convert => [ "original_ip_bytes", "integer" ]
+ convert => [ "overflow_bytes", "integer" ]
+ convert => [ "p", "integer" ]
+ convert => [ "query_class", "integer" ]
+ convert => [ "query_type", "integer" ]
+ convert => [ "rcode", "integer" ]
+ convert => [ "request_body_length", "integer" ]
+ convert => [ "request_port", "integer" ]
+ convert => [ "respond_bytes", "integer" ]
+ convert => [ "respond_packets", "integer" ]
+ convert => [ "respond_ip_bytes", "integer" ]
+ convert => [ "response_body_length", "integer" ]
+ convert => [ "seen_bytes", "integer" ]
+ convert => [ "source_port", "integer" ]
+ convert => [ "status_code", "integer" ]
+ #convert => [ "suppress_for", "float" ]
+ convert => [ "total_bytes", "integer" ]
+ convert => [ "trans_depth", "integer" ]
+ convert => [ "transaction_id", "integer" ]
+ # convert the following boolean to text for now
+ convert => [ "local_respond", "string" ]
+ convert => [ "tc", "string" ]
+ convert => [ "is_orig", "string" ]
+ convert => [ "local_orig", "string" ]
+ lowercase => [ "query" ]
+ #remove_field => [ "timestamp" ]
+ }
+
+ # Combine OriginalBytes and RespondBytes and save the value to total_bytes
+ if [original_bytes] {
+ if [respond_bytes] {
+ ruby {
+ code => "event.set('total_bytes', event.get('original_bytes') + event.get('respond_bytes'))"
+ }
+ }
+ }
+ mutate {
+ #add_tag => [ "conf_file_6000"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/6001_bro_import.conf b/salt/logstash/conf/pipelines/6001_bro_import.conf
new file mode 100644
index 000000000..34c43f6ae
--- /dev/null
+++ b/salt/logstash/conf/pipelines/6001_bro_import.conf
@@ -0,0 +1,16 @@
+# Updated by: Doug Burks
+# Last Update: 2/10/2018
+#
+filter {
+ if "import" in [tags] and "bro" in [tags] {
+
+ # we're setting timestamp in 6000 now
+ #date {
+ # match => [ "timestamp", "UNIX" ]
+ #}
+
+ mutate {
+ #add_tag => [ "conf_file_6001"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/8000_postprocess_bro_cleanup.conf b/salt/logstash/conf/pipelines/8000_postprocess_bro_cleanup.conf
new file mode 100644
index 000000000..3998df8a4
--- /dev/null
+++ b/salt/logstash/conf/pipelines/8000_postprocess_bro_cleanup.conf
@@ -0,0 +1,17 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if "bro" in [tags] {
+ if "_grokparsefailure" not in [tags] and "_csvparsefailure" not in [tags] and "_jsonparsefailure" not in [tags] {
+ #mutate {
+ # remove_field => [ "message" ]
+ #}
+ }
+ mutate {
+ #add_tag => [ "conf_file_8000"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/8006_postprocess_dns.conf b/salt/logstash/conf/pipelines/8006_postprocess_dns.conf
new file mode 100644
index 000000000..a1520e6dc
--- /dev/null
+++ b/salt/logstash/conf/pipelines/8006_postprocess_dns.conf
@@ -0,0 +1,47 @@
+# Original Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 5/13/2017
+
+filter {
+ if [type] == "bro_dns" or "dns" in [tags] {
+ # Used for whois lookups - can create log loop
+ if [query] =~ "^whois\." {
+ drop { }
+ }
+ # REPLACE test.int with your internal domain
+ if [query] and [query] !~ "\.test\.int$" {
+ mutate {
+ lowercase => [ "query" ]
+ }
+ if [query_type_name] != "NB" and [query_type_name] != "TKEY" and [query_type_name] != "NBSTAT" and [query_type_name] != "PTR" {
+ tld {
+ source => "query"
+ }
+ ruby {
+ code => "event.set('query_length', event.get('query').length)"
+ }
+ mutate {
+ rename => { "[SubLog][sessionid]" => "sub_session_id" }
+ rename => { "[tld][domain]" => "highest_registered_domain" }
+ rename => { "[tld][trd]" => "subdomain" }
+ rename => { "[tld][tld]" => "top_level_domain" }
+ rename => { "[tld][sld]" => "parent_domain" }
+ }
+ if [parent_domain] {
+ ruby {
+ code => "event.set('parent_domain_length', event.get('parent_domain').length)"
+ }
+ }
+ if [subdomain] {
+ ruby {
+ code => "event.set('subdomain_length', event.get('subdomain').length)"
+ }
+ }
+ }
+ }
+ mutate {
+ #add_tag => [ "conf_file_8006"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/0800_input_eval.conf b/salt/logstash/conf/pipelines/eval/0800_input_eval.conf
new file mode 100644
index 000000000..b499c3b0f
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/0800_input_eval.conf
@@ -0,0 +1,204 @@
+# Updated by: Mike Reeves
+# Last Update: 11/1/2018
+
+input {
+ file {
+ path => "/suricata/eve.json"
+ type => "ids"
+ add_field => { "engine" => "suricata" }
+ }
+ file {
+ path => "/nsm/zeek/logs/current/conn*.log"
+ type => "bro_conn"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/dce_rpc*.log"
+ type => "bro_dce_rpc"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/dhcp*.log"
+ type => "bro_dhcp"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/dnp3*.log"
+ type => "bro_dnp3"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/dns*.log"
+ type => "bro_dns"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/dpd*.log"
+ type => "bro_dpd"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/files*.log"
+ type => "bro_files"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/ftp*.log"
+ type => "bro_ftp"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/http*.log"
+ type => "bro_http"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/intel*.log"
+ type => "bro_intel"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/irc*.log"
+ type => "bro_irc"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/kerberos*.log"
+ type => "bro_kerberos"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/modbus*.log"
+ type => "bro_modbus"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/mysql*.log"
+ type => "bro_mysql"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/notice*.log"
+ type => "bro_notice"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/ntlm*.log"
+ type => "bro_ntlm"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/pe*.log"
+ type => "bro_pe"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/radius*.log"
+ type => "bro_radius"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/rdp*.log"
+ type => "bro_rdp"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/rfb*.log"
+ type => "bro_rfb"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/signatures*.log"
+ type => "bro_signatures"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/sip*.log"
+ type => "bro_sip"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/smb_files*.log"
+ type => "bro_smb_files"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/smb_mapping*.log"
+ type => "bro_smb_mapping"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/smtp*.log"
+ type => "bro_smtp"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/snmp*.log"
+ type => "bro_snmp"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/socks*.log"
+ type => "bro_socks"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/software*.log"
+ type => "bro_software"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/ssh*.log"
+ type => "bro_ssh"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/ssl*.log"
+ type => "bro_ssl"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/syslog*.log"
+ type => "bro_syslog"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/tunnel*.log"
+ type => "bro_tunnels"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/weird*.log"
+ type => "bro_weird"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/zeek/logs/current/x509*.log"
+ type => "bro_x509"
+ tags => ["bro"]
+ }
+ file {
+ path => "/wazuh/alerts/alerts.json"
+ type => "ossec"
+ }
+ file {
+ path => "/wazuh/archives/archives.json"
+ type => "ossec_archive"
+ }
+ file {
+ path => "/osquery/logs/result.log"
+ type => "osquery"
+ tags => ["osquery"]
+ }
+ file {
+ path => "/strelka/strelka.log"
+ type => "strelka"
+ }
+}
+filter {
+ if "import" in [tags] {
+ mutate {
+ #add_tag => [ "conf_file_0007"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/1000_preprocess_log_elapsed.conf b/salt/logstash/conf/pipelines/eval/1000_preprocess_log_elapsed.conf
new file mode 100644
index 000000000..d098eb11a
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/1000_preprocess_log_elapsed.conf
@@ -0,0 +1,13 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ ruby {
+ code => "event.set('task_start', Time.now.to_f)"
+ }
+ mutate {
+ #add_tag => [ "conf_file_1000"]
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/1001_preprocess_syslogng.conf b/salt/logstash/conf/pipelines/eval/1001_preprocess_syslogng.conf
new file mode 100644
index 000000000..84bce8802
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/1001_preprocess_syslogng.conf
@@ -0,0 +1,33 @@
+# Updated by: Doug Burks and Wes Lambert
+# Last Update: 10/30/2018
+
+filter {
+ if "syslogng" in [tags] {
+ mutate {
+ rename => { "MESSAGE" => "message" }
+ rename => { "PROGRAM" => "type" }
+ rename => { "FACILITY" => "syslog-facility" }
+ rename => { "FILE_NAME" => "syslog-file_name" }
+ rename => { "HOST" => "syslog-host" }
+ rename => { "HOST_FROM" => "syslog-host_from" }
+ rename => { "LEGACY_MSGHDR" => "syslog-legacy_msghdr" }
+ rename => { "PID" => "syslog-pid" }
+ rename => { "PRIORITY" => "syslog-priority" }
+ rename => { "SOURCEIP" => "syslog-sourceip" }
+ rename => { "TAGS" => "syslog-tags" }
+ lowercase => [ "syslog-host_from" ]
+ remove_field => [ "ISODATE" ]
+ remove_field => [ "SEQNUM" ]
+ #add_tag => [ "conf_file_1001"]
+ }
+ if "bro_" in [type] {
+ mutate {
+ add_tag => [ "bro" ]
+ }
+ } else if [type] !~ /ossec.*|snort/ and "firewall" not in [tags] {
+ mutate {
+ add_tag => [ "syslog" ]
+ }
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/1002_preprocess_json.conf b/salt/logstash/conf/pipelines/eval/1002_preprocess_json.conf
new file mode 100644
index 000000000..ea7c677da
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/1002_preprocess_json.conf
@@ -0,0 +1,18 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if "json" in [tags]{
+ json {
+ source => "message"
+ }
+ mutate {
+ remove_tag => [ "json" ]
+ }
+ mutate {
+ #add_tag => [ "conf_file_1002"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/1004_preprocess_syslog_types.conf b/salt/logstash/conf/pipelines/eval/1004_preprocess_syslog_types.conf
new file mode 100644
index 000000000..243abcc15
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/1004_preprocess_syslog_types.conf
@@ -0,0 +1,19 @@
+filter {
+ if "syslog" in [tags] {
+ if [host] == "172.16.1.1" {
+ mutate {
+ add_field => { "type" => "fortinet" }
+ add_tag => [ "firewall" ]
+ }
+ }
+ if [host] == "10.0.0.101" {
+ mutate {
+ add_field => { "type" => "brocade" }
+ add_tag => [ "switch" ]
+ }
+ }
+ mutate {
+ #add_tag => [ "conf_file_1004"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/1026_preprocess_dhcp.conf b/salt/logstash/conf/pipelines/eval/1026_preprocess_dhcp.conf
new file mode 100644
index 000000000..2f893cf7a
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/1026_preprocess_dhcp.conf
@@ -0,0 +1,140 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolutions.com
+# Last Update: 12/9/2016
+# This conf file is based on accepting logs for DHCP. It is currently based on Windows DHCP only.
+filter {
+ if [type] == "dhcp" {
+ mutate {
+ add_field => { "Hostname" => "%{host}" }
+ }
+ mutate {
+ strip => "message"
+ }
+ # This is the initial parsing of the log
+ grok {
+ # Server 2008+
+ match => { "message" => "%{DATA:id},%{DATE_US:date},(?%{HOUR}:%{MINUTE}:%{SECOND}),%{DATA:description},%{IPV4:ip},%{DATA:Hostname},%{DATA:mac},%{DATA:Username},%{INT:TransactionID},%{INT:QResult},%{DATA:ProbationTime},%{DATA:CorrelationID}"}
+ # Server 2003
+ match => { "message" => "%{DATA:id},%{DATE_US:date},(?%{HOUR}:%{MINUTE}:%{SECOND}),%{DATA:description},%{IPV4:ip},%{DATA:Hostname},%{DATA:mac},"}
+ match => { "message" => "%{DATA:id},%{DATA:date},(?%{HOUR}:%{MINUTE}:%{SECOND}),%{DATA:description},%{DATA:ip},%{DATA:Hostname},%{DATA:mac},"}
+ }
+ # This section below translates the message ID into something humans can understand.
+ if [id] == "00" {
+ mutate {
+ add_field => [ "event", "The log was started"]
+ }
+ }
+ if [id] == "01" {
+ mutate {
+ add_field => [ "event", "The log was stopped"]
+ }
+ }
+ if [id] == "02" {
+ mutate {
+ add_field => [ "event", "The log was temporarily paused due to low disk space"]
+ }
+ }
+ if [id] == "10" {
+ mutate {
+ add_field => [ "event", "A new IP address was leased to a client"]
+ }
+ }
+ if [id] == "11" {
+ mutate {
+ add_field => [ "event", "A lease was renewed by a client"]
+ }
+ }
+ if [id] == "12" {
+ mutate {
+ add_field => [ "event", "A lease was released by a client"]
+ }
+ }
+ if [id] == "13" {
+ mutate {
+ add_field => [ "event", "An IP address was found to be in use on the network"]
+ }
+ }
+ if [id] == "14" {
+ mutate {
+ add_field => [ "event", "A lease request could not be satisfied because the scope's address pool was exhausted"]
+ }
+ }
+ if [id] == "15" {
+ mutate {
+ add_field => [ "event", "A lease was denied"]
+ }
+ }
+ if [id] == "16" {
+ mutate {
+ add_field => [ "event", "A lease was deleted"]
+ }
+ }
+ if [id] == "17" {
+ mutate {
+ add_field => [ "event", "A lease was expired and DNS records for an expired leases have not been deleted"]
+ }
+ }
+ if [id] == "18" {
+ mutate {
+ add_field => [ "event", "A lease was expired and DNS records were deleted"]
+ }
+ }
+ if [id] == "20" {
+ mutate {
+ add_field => [ "event", "A BOOTP address was leased to a client"]
+ }
+ }
+ if [id] == "21" {
+ mutate {
+ add_field => [ "event", "A dynamic BOOTP address was leased to a client"]
+ }
+ }
+ if [id] == "22" {
+ mutate {
+ add_field => [ "event", "A BOOTP request could not be satisfied because the scope's address pool for BOOTP was exhausted"]
+ }
+ }
+ if [id] == "23" {
+ mutate {
+ add_field => [ "event", "A BOOTP IP address was deleted after checking to see it was not in use"]
+ }
+ }
+ if [id] == "24" {
+ mutate {
+ add_field => [ "event", "IP address cleanup operation has began"]
+ }
+ }
+ if [id] == "25" {
+ mutate {
+ add_field => [ "event", "IP address cleanup statistics"]
+ }
+ }
+ if [id] == "30" {
+ mutate {
+ add_field => [ "event", "DNS update request to the named DNS server"]
+ }
+ }
+ if [id] == "31" {
+ mutate {
+ add_field => [ "event", "DNS update failed"]
+ }
+ }
+ if [id] == "32" {
+ mutate {
+ add_field => [ "event", "DNS update successful"]
+ }
+ }
+ if [id] == "33" {
+ mutate {
+ add_field => [ "event", "Packet dropped due to NAP policy"]
+ }
+ }
+ # If the message failed to parse correctly keep the message for debugging. Otherwise, drop it.
+ #if "_grokparsefailure" not in [tags] {
+ # mutate {
+ # remove_field => [ "message"]
+ # }
+ #}
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/1029_preprocess_esxi.conf b/salt/logstash/conf/pipelines/eval/1029_preprocess_esxi.conf
new file mode 100644
index 000000000..18120d00d
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/1029_preprocess_esxi.conf
@@ -0,0 +1,31 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+#
+# This configuration file takes ESXi syslog messages and filters them. There is no input as the logs would have came in via syslog
+filter {
+ # This is an example of using an IP address range to classify a syslog message to a specific type of log
+ # This is helpful as so many devices only send logs via syslog
+ if [host] =~ "10\.[0-1]\.9\." {
+ mutate {
+ replace => ["type", "esxi"]
+ }
+ }
+ if [host] =~ "\.234$" {
+ mutate {
+ replace => ["type", "esxi"]
+ }
+ }
+ if [type] == "esxi" {
+ grok {
+ match => { "message" => "(?:%{SYSLOGTIMESTAMP:timestamp}|%{TIMESTAMP_ISO8601:timestamp8601}) (?:%{SYSLOGHOST:logsource}) (?:%{SYSLOGPROG}): (?(?:\[(?[0-9A-Z]{8,8}) %{DATA:esxi_loglevel} \'%{DATA:esxi_service}\'\] %{GREEDYDATA:esxi_message}|%{GREEDYDATA}))"}
+
+# pattern => ['(?:%{SYSLOGTIMESTAMP:timestamp}|%{TIMESTAMP_ISO8601:timestamp8601}) (?:%{SYSLOGHOST:logsource}) (?:%{SYSLOGPROG}): (?(?:\[(?[0-9A-Z]{8,8}) %{DATA:esxi_loglevel} \'%{DATA:esxi_service}\'\] %{GREEDYDATA:esxi_message}|%{GREEDYDATA}))']
+ }
+ mutate {
+ #add_tag => [ "conf_file_1029"]
+ }
+ }
+}
+
diff --git a/salt/logstash/conf/pipelines/eval/1030_preprocess_greensql.conf b/salt/logstash/conf/pipelines/eval/1030_preprocess_greensql.conf
new file mode 100644
index 000000000..adea86053
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/1030_preprocess_greensql.conf
@@ -0,0 +1,21 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [type] == "greensql" {
+ # This section is parsing out the fields for GreenSQL syslog data
+ grok {
+ match => { "message" => "<%{INT:Code}>%{DATA:Category}\[%{INT:Transcation}\]:\s*Database=%{DATA:Database}\sUser=%{DATA:UserName}\sApplication Name=%{DATA:Application}\sSource IP=%{IPV4:SrcIp}\sSource Port=%{INT:SrcPort}\sTarget IP=?%{IPV4:DstIp}\sTarget Port=%{DATA:DstPort}\sQuery=%{GREEDYDATA:Query}"}
+ match => { "message" => "<%{INT:Code}>%{DATA:Category}\[%{INT:Transcation}\]:\sAdmin_Name=%{DATA:UserName}\sIP_Address=%{IPV4:SrcIp}\sUser_Agent=%{DATA:UserAgent}\sMessage=%{DATA:StatusMessage}\sDescription=%{DATA:Description}\sSeverity=%{GREEDYDATA:Severity}"}
+ }
+ # Remove the message field as it is unnecessary
+ #mutate {
+ # remove_field => [ "message"]
+ #}
+ mutate {
+ #add_tag => [ "conf_file_1030"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/1031_preprocess_iis.conf b/salt/logstash/conf/pipelines/eval/1031_preprocess_iis.conf
new file mode 100644
index 000000000..9bcd33a3e
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/1031_preprocess_iis.conf
@@ -0,0 +1,21 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [type] == "iis" {
+ # The log is expected to have come from NXLog and in JSON format. This allows for automatic parsing of fields
+ json {
+ source => "message"
+ }
+ # This removes the message field as it is unneccesary and tags the packet as web
+ mutate {
+ # remove_field => [ "message"]
+ add_tag => [ "web" ]
+ }
+ mutate {
+ #add_tag => [ "conf_file_1031"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/1032_preprocess_mcafee.conf b/salt/logstash/conf/pipelines/eval/1032_preprocess_mcafee.conf
new file mode 100644
index 000000000..de5466288
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/1032_preprocess_mcafee.conf
@@ -0,0 +1,26 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+#
+# This file looks for McAfee EPO logs
+filter {
+ if [type] == "mcafee" {
+ # NXLog should be sending the logs in JSON format so they auto parse
+ json {
+ source => "message"
+ }
+ # This section converts the UTC fields to the proper time format
+ date {
+ match => [ "ReceivedUTC", "YYYY-MM-dd HH:mm:ss" ]
+ target => [ "ReceivedUTC" ]
+ }
+ date {
+ match => [ "DetectedUTC", "YYYY-MM-dd HH:mm:ss" ]
+ target => [ "DetectedUTC" ]
+ }
+ mutate {
+ #add_tag => [ "conf_file_1032"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/1033_preprocess_snort.conf b/salt/logstash/conf/pipelines/eval/1033_preprocess_snort.conf
new file mode 100644
index 000000000..897a8ae4b
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/1033_preprocess_snort.conf
@@ -0,0 +1,181 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 3/15/2018
+
+filter {
+ if [type] == "ids" {
+ # This is the initial parsing of the log
+ if [engine] == "suricata" {
+ json {
+ source => "message"
+ }
+ mutate {
+ rename => { "alert" => "orig_alert" }
+ rename => { "[orig_alert][gid]" => "gid" }
+ rename => { "[orig_alert][signature_id]" => "sid" }
+ rename => { "[orig_alert][rev]" => "rev" }
+ rename => { "[orig_alert][signature]" => "alert" }
+ rename => { "[orig_alert][category]" => "classification" }
+ rename => { "[orig_alert][severity]" => "priority" }
+ rename => { "[orig_alert][rule]" => "rule_signature" }
+ rename => { "app_proto" => "application_protocol" }
+ rename => { "dest_ip" => "destination_ip" }
+ rename => { "dest_port" => "destination_port" }
+ rename => { "in_iface" => "interface" }
+ rename => { "proto" => "protocol" }
+ rename => { "src_ip" => "source_ip" }
+ rename => { "src_port" => "source_port" }
+ #rename => { "[fileinfo][filename]" => "filename" }
+ #rename => { "[fileinfo][gaps]" => "gaps" }
+ #rename => { "[fileinfo][size]" => "size" }
+ #rename => { "[fileinfo][state]" => "state" }
+ #rename => { "[fileinfo][stored]" => "stored" }
+ #rename => { "[fileinfo][tx_id]" => "tx_id" }
+ #rename => { "[flow][age]" => "duration" }
+ #rename => { "[flow][alerted]" => "flow_alerted" }
+ #rename => { "[flow][bytes_toclient]" => "bytes_to_client" }
+ #rename => { "[flow][bytes_toserver]" => "bytes_to_server" }
+ #rename => { "[flow][end]" => "flow_end" }
+ #rename => { "[flow][pkts_toclient]" => "packets_to_client" }
+ #rename => { "[flow][pkts_toserver]" => "packets_to_server" }
+ #rename => { "[flow][reason]" => "reason" }
+ #rename => { "[flow][start]" => "flow_start" }
+ #rename => { "[flow][state]" => "state" }
+ #rename => { "[netflow][age]" => "duration" }
+ #rename => { "[netflow][bytes]" => "bytes" }
+ #rename => { "[netflow][end]" => "netflow_end" }
+ #rename => { "[netflow][start]" => "netflow_start" }
+ #rename => { "[netflow][pkts]" => "packets" }
+ rename => { "[alert][action]" => "action" }
+ rename => { "[alert][category]" => "category" }
+ rename => { "[alert][gid]" => "gid" }
+ rename => { "[alert][rev]" => "rev" }
+ rename => { "[alert][severity]" => "severity" }
+ rename => { "[alert][signature]" => "signature" }
+ rename => { "[alert][signature_id]" => "sid" }
+ #rename => { "[dns][aa]" => "aa" }
+ #rename => { "[dns][flags]" => "flags" }
+ #rename => { "[dns][id]" => "id" }
+ #rename => { "[dns][qr]" => "qr" }
+ #rename => { "[dns][rcode]" => "rcode_name" }
+ #rename => { "[dns][rrname]" => "rrname" }
+ #rename => { "[dns][rrtype]" => "rrtype" }
+ #rename => { "[dns][tx_id]" => "tx_id" }
+ #rename => { "[dns][type]" => "record_type" }
+ #rename => { "[dns][version]" => "version" }
+ rename => { "[http][hostname]" => "virtual_host" }
+ rename => { "[http][http_content_type]" => "content_type" }
+ rename => { "[http][http_port]" => "http_port" }
+ rename => { "[http][http_method]" => "method" }
+ rename => { "[http][http_user_agent]" => "useragent" }
+ #rename => { "[http][length]" => "payload_length" }
+ #rename => { "[http][protocol]" => "http_version" }
+ rename => { "[http][status]" => "status_message" }
+ rename => { "[http][url]" => "url" }
+ #rename => { "[metadata][flowbits]" => "flowbits" }
+ rename => { "[tls][fingerprint]" => "certificate_serial_number" }
+ rename => { "[tls][issuerdn]" => "issuer_distinguished_name" }
+ rename => { "[tls][notafter]" => "certificate_not_valid_after" }
+ rename => { "[tls][notbefore]" => "certificate_not_valid_before" }
+ rename => { "[tls][subject]" => "certificate_common_name" }
+ rename => { "[tls][version]" => "tls_version" }
+ rename => { "event_type" => "ids_event_type" }
+ remove_field => [ "offset", "orig_alert", "beat", "input", "prospector" ]
+ remove_tag => [ "beats_input_codec_plain_applied" ]
+ add_tag => [ "eve" ]
+
+ }
+ } else {
+ grok {
+ match => ["message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+<%{DATA:interface}>\s+{%{DATA:protocol}}\s+(?:%{IPV4:source_ip}|%{IPV6:source_ip}):%{INT:source_port}\s+->\s+(?:%{IPV4:destination_ip}|%{IPV6:destination_ip}):%{INT:destination_port}",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+<%{DATA:interface}>\s+{%{DATA:protocol}}\s(?:%{IPV4:source_ip}|%{IPV6:source_ip})\s+->\s+(?:%{IPV4:destination_ip}|%{IPV6:destination_ip})",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+{%{DATA:protocol}}\s+(?:%{IPV4:source_ip}|%{IPV6:source_ip}):%{INT:source_port}\s+->\s+%{IPV4:destination_ip}:%{INT:destination_port}",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+{%{DATA:protocol}}\s(?:%{IPV4:source_ip}|%{IPV6:source_ip})\s+->\s+(?:%{IPV4:destination_ip}|%{IPV6:destination_ip})",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+{%{DATA:protocol}}\s+(?:%{IPV4:source_ip}|%{IPV6:source_ip}):%{INT:source_port}\s+->\s+(?:%{IPV4:destination_ip}|%{IPV6:destination_ip}):%{INT:destination_port}",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+{%{DATA:protocol}}\s(?:%{IPV4:source_ip}|%{IPV6:source_ip})\s+->\s+(?:%{IPV4:source_ip}|%{IPV6:source_ip})",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+{%{DATA:protocol}}",
+ "message", "\A%{TIME} pid\(%{INT}\) Alert Received: %{INT} %{INT:priority} %{DATA:classification} %{DATA:interface} \{%{DATA:timestamp}} %{INT} %{INT} \{%{DATA:alert}} %{IP:source_ip} %{IP:destination_ip} %{INT:protocol} %{INT:source_port} %{INT:destination_port} %{INT:gid} %{INT:sid} %{INT:rev} %{INT} %{INT}\Z",
+ "message", "%{GREEDYDATA:alert}"]
+ }
+ }
+ if [timestamp] {
+ mutate {
+ add_field => { "logstash_timestamp" => "%{@timestamp}" }
+ }
+ mutate {
+ convert => { "logstash_timestamp" => "string" }
+ }
+ date {
+ match => [ "timestamp", "ISO8601" ]
+ }
+ mutate {
+ rename => { "logstash_timestamp" => "timestamp" }
+ }
+ }
+
+ # If the alert is a Snort GPL alert break it apart for easier reading and categorization
+ if [alert] =~ "GPL " {
+ # This will parse out the category type from the alert
+ grok {
+ match => { "alert" => "GPL\s+%{DATA:category}\s" }
+ }
+ # This will store the category
+ mutate {
+ add_field => { "rule_type" => "Snort GPL" }
+ lowercase => [ "category"]
+ }
+ }
+ # If the alert is an Emerging Threat alert break it apart for easier reading and categorization
+ if [alert] =~ "ET " {
+ # This will parse out the category type from the alert
+ grok {
+ match => { "alert" => "ET\s+%{DATA:category}\s" }
+ }
+ # This will store the category
+ mutate {
+ add_field => { "rule_type" => "Emerging Threats" }
+ lowercase => [ "category"]
+ }
+ }
+ # I recommend changing the field types below to integer so searches can do greater than or less than
+ # and also so math functions can be ran against them
+ mutate {
+ convert => [ "source_port", "integer" ]
+ convert => [ "destination_port", "integer" ]
+ convert => [ "gid", "integer" ]
+ convert => [ "sid", "integer" ]
+ # remove_field => [ "message"]
+ }
+ # This will translate the priority field into a severity field of either High, Medium, or Low
+ if [priority] == 1 {
+ mutate {
+ add_field => { "severity" => "High" }
+ }
+ }
+ if [priority] == 2 {
+ mutate {
+ add_field => { "severity" => "Medium" }
+ }
+ }
+ if [priority] == 3 {
+ mutate {
+ add_field => { "severity" => "Low" }
+ }
+ }
+ # This section adds URLs to lookup information about a rule online
+ if [sid] and [sid] > 0 and [sid] < 1000000 {
+ mutate {
+ add_field => [ "signature_info", "https://www.snort.org/search?query=%{gid}-%{sid}" ]
+ }
+ }
+ if [sid] and [sid] > 1999999 and [sid] < 2999999 {
+ mutate {
+ add_field => [ "signature_info", "http://doc.emergingthreats.net/%{sid}" ]
+ }
+ }
+# mutate {
+ #add_tag => [ "conf_file_1033"]
+# }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/1034_preprocess_syslog.conf b/salt/logstash/conf/pipelines/eval/1034_preprocess_syslog.conf
new file mode 100644
index 000000000..998109685
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/1034_preprocess_syslog.conf
@@ -0,0 +1,16 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 5/22/2017
+
+filter {
+ if [type] == "syslog" {
+ # This drops syslog messages regarding license messages. You may want to comment it out.
+ #if [message] =~ "license" {
+ # drop { }
+ #}
+ mutate {
+ #convert => [ "status_code", "integer" ]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/2000_network_flow.conf b/salt/logstash/conf/pipelines/eval/2000_network_flow.conf
new file mode 100644
index 000000000..40a060955
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/2000_network_flow.conf
@@ -0,0 +1,59 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [type] == "sflow" {
+ if [message] =~ /CNTR/ {
+ drop { }
+ }
+
+ grok {
+ match => { "message" => "%{WORD:sample_type},%{IP:sflow_source_ip},%{WORD:in_port:int},%{WORD:out_port:int},%{WORD:source_mac},%{WORD:destination_mac},%{WORD:ether_type},%{NUMBER:in_vlan:int},%{NUMBER:out_vlan:int},%{IP:source_ip},%{IP:destination_ip},%{NUMBER:protocol:int},%{WORD:type_of_service},%{WORD:ttl:int},%{NUMBER:source_port:int},%{NUMBER:destination_port:int},%{DATA:tcp_flags},%{NUMBER:packet_size:int},%{NUMBER:ip_size:int},%{NUMBER:sample_rate:int}" }
+ }
+
+ if "_grokparsefailure" in [tags] {
+ drop { }
+ }
+
+ mutate {
+ add_field => {
+ "[source_hostname]" => "%{source_ip}"
+ "[destination_hostname]" => "%{destination_ip}"
+ "[sflow_source_hostname]" => "%{sflow_source_ip}"
+ }
+ }
+
+ translate {
+ field => "[source_port]"
+ destination => "[source_service]"
+ dictionary_path => "/lib/dictionaries/iana_services.yaml"
+ }
+
+ translate {
+ field => "[destination_port]"
+ destination => "[destination_service]"
+ dictionary_path => "/lib/dictionaries/iana_services.yaml"
+ }
+
+ translate {
+ field => "[protocol]"
+ destination => "[protocol_name]"
+ dictionary_path => "/lib/dictionaries/iana_protocols.yaml"
+ }
+
+ translate {
+ field => "[tcp_flags]"
+ destination => "[tcp_flag]"
+ dictionary_path => "/lib/dictionaries/tcp_flags.yaml"
+ }
+
+ mutate {
+ add_field => { "ips" => [ "%{sflow_source_ip}" ] }
+ }
+ mutate {
+ #add_tag => [ "conf_file_2000"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/6002_syslog.conf b/salt/logstash/conf/pipelines/eval/6002_syslog.conf
new file mode 100644
index 000000000..f82f81a25
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/6002_syslog.conf
@@ -0,0 +1,11 @@
+# Updated by: Doug Burks
+# Last Update: 5/16/2017
+#
+filter {
+ if "syslog" in [tags] {
+ mutate {
+ #convert => [ "status_code", "integer" ]
+ #add_tag => [ "conf_file_6002"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/6101_switch_brocade.conf b/salt/logstash/conf/pipelines/eval/6101_switch_brocade.conf
new file mode 100644
index 000000000..dd2f3126c
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/6101_switch_brocade.conf
@@ -0,0 +1,33 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [type] == "brocade" {
+ grok {
+ match => ["message", "<%{DATA}>%{GREEDYDATA:sys_message}"]
+ }
+ grok {
+ match => { "sys_message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid:int}\])?: %{GREEDYDATA:syslog_message}" }
+ add_field => [ "received_at", "%{@timestamp}" ]
+ }
+ if [syslog_message] =~ "Interface ethernet" or [syslog_program] == "PORT" {
+ grok {
+ match => { "syslog_message" => "%{DATA}%{INT:unit}\/%{INT:interface_type}\/%{INT:interface:int}" }
+ }
+ mutate {
+ add_field => { "interface_port" => "%{unit}/%{interface_type}/%{interface}" }
+ }
+ }
+ date {
+ match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
+ timezone => "America/Chicago"
+ remove_field => "syslog_timestamp"
+ remove_field => "received_at"
+ }
+ mutate {
+ #add_tag => [ "conf_file_6101"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/6200_firewall_fortinet.conf b/salt/logstash/conf/pipelines/eval/6200_firewall_fortinet.conf
new file mode 100644
index 000000000..b33c89bb8
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/6200_firewall_fortinet.conf
@@ -0,0 +1,281 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [type] == "fortinet" {
+ mutate {
+ gsub => [ "message", "= ", "=NA " ]
+ }
+
+ grok {
+ match => ["message", "type=%{DATA:event_type}\s+"]
+ tag_on_failure => []
+ }
+ grok {
+ match => ["message", "<%{DATA}>%{GREEDYDATA:kv}"]
+ tag_on_failure => []
+ }
+ kv {
+ source => "kv"
+ exclude_keys => [ "type" ]
+ }
+ mutate {
+ gsub => [ "log", "= ", "=NA " ]
+ }
+ kv {
+ source => "log"
+ target => "SubLog"
+ }
+ grok {
+ match => ["message", "custom: DOM-ALL, dns_query=%{DATA:dns_query};"]
+ tag_on_failure => [ "" ]
+ }
+ mutate {
+ rename => { "action" => "action" }
+ rename => { "addr" => "addr_ip" }
+ rename => { "age" => "age" }
+ rename => { "assigned" => "assigned_ip" }
+ rename => { "assignip" => "assign_ip" }
+ rename => { "ap" => "access_point" }
+ rename => { "app" => "application" }
+ rename => { "appcat" => "application_category" }
+ rename => { "applist" => "application_list" }
+ rename => { "apprisk" => "application_risk" }
+ rename => { "approfile" => "accessPoint_profile" }
+ rename => { "apscan" => "access_point_scan" }
+ rename => { "apstatus" => "acces_point_status" }
+ rename => { "aptype" => "access_point_type" }
+ rename => { "authproto" => "authentication_protocol" }
+ rename => { "bandwidth" => "bandwidth" }
+ rename => { "banned_src" => "banned_source" }
+ rename => { "cat" => "category" }
+ rename => { "catdesc" => "category_description" }
+ rename => { "cfgattr" => "configuration_attribute" }
+ rename => { "cfgobj" => "configuration_object" }
+ rename => { "cfgpath" => "configuration_path" }
+ rename => { "cfgtid" => "configuration_transaction_id" }
+ rename => { "channel" => "channel" }
+ rename => { "community" => "community" }
+ rename => { "cookies" => "cookies" }
+ rename => { "craction" => "cr_action" }
+ rename => { "crlevel" => "cr_level" }
+ rename => { "crscore" => "cr_score" }
+ rename => { "datarange" => "data_range" }
+ rename => { "desc" => "description" }
+ rename => { "detectionmethod" => "detection_method" }
+ rename => { "devid" => "device_id" }
+ rename => { "devname" => "device_name" }
+ rename => { "devtype" => "device_type" }
+ rename => { "dhcp_msg" => "dhcp_message" }
+ rename => { "disklograte" => "disk_lograte" }
+ rename => { "dstcountry" => "destination_country" }
+ rename => { "dstintf" => "destination_interface" }
+ rename => { "dstip" => "destination_ip" }
+ rename => { "dstport" => "destination_port" }
+ rename => { "duration" => "elapsed_time" }
+ rename => { "error_num" => "error_number" }
+ rename => { "espauth" => "esp_authentication" }
+ rename => { "esptransform" => "esp_transform" }
+ rename => { "eventid" => "event_id" }
+ rename => { "eventtype" => "event_type" }
+ rename => { "fazlograte" => "faz_lograte" }
+ rename => { "filename" => "file_name" }
+ rename => { "filesize" => "file_size" }
+ rename => { "filetype" => "file_type" }
+ rename => { "hostname" => "hostname" }
+ rename => { "ip" => "source_ip" }
+ rename => { "localip" => "source_ip" }
+ rename => { "locip" => "local_ip" }
+ rename => { "locport" => "source_port" }
+ rename => { "logid" => "log_id" }
+ rename => { "logver" => "log_version" }
+ rename => { "manuf" => "manufacturer" }
+ rename => { "mem" => "memory" }
+ rename => { "meshmode" => "mesh_mode" }
+ rename => { "msg" => "message" }
+ rename => { "nextstat" => "next_stat" }
+ rename => { "onwire" => "on_wire" }
+ rename => { "osname" => "os_name" }
+ rename => { "osversion" => "unauthenticated_user" }
+ rename => { "outintf" => "outbound_interface" }
+ rename => { "peer_notif" => "peer_notification" }
+ rename => { "phase2_name" => "phase2_name" }
+ rename => { "policyid" => "policy_id" }
+ rename => { "policytype" => "policy_type" }
+ rename => { "port" => "port" }
+ rename => { "probeproto" => "probe_protocol" }
+ rename => { "proto" => "protocol_number" }
+ rename => { "radioband" => "radio_band" }
+ rename => { "radioidclosest" => "radio_id_closest" }
+ rename => { "radioiddetected" => "radio_id_detected" }
+ rename => { "rcvd" => "bytes_received" }
+ rename => { "rcvdbyte" => "bytes_received" }
+ rename => { "rcvdpkt" => "packets_received" }
+ rename => { "remip" => "destination_ip" }
+ rename => { "remport" => "remote_port" }
+ rename => { "reqtype" => "request_type" }
+ rename => { "scantime" => "scan_time" }
+ rename => { "securitymode" => "security_mode" }
+ rename => { "sent" => "bytes_sent" }
+ rename => { "sentbyte" => "bytes_sent" }
+ rename => { "sentpkt" => "packets_sent" }
+ rename => { "session_id" => "session_id" }
+ rename => { "setuprate" => "setup_rate" }
+ rename => { "sn" => "serial" }
+ rename => { "snclosest" => "serial_closest_access_point" }
+ rename => { "sndetected" => "serial_access_point_that_detected_rogue_ap" }
+ rename => { "snmeshparent" => "serial_mesh_parent" }
+ rename => { "srccountry" => "source_country" }
+ rename => { "srcip" => "source_ip" }
+ rename => { "srcmac" => "source_mac" }
+ rename => { "srcname" => "source_name" }
+ rename => { "srcintf" => "source_interface" }
+ rename => { "srcport" => "source_port" }
+ rename => { "stacount" => "station_count" }
+ rename => { "stamac" => "static_mac" }
+ rename => { "srccountry" => "source_country" }
+ rename => { "srcip" => "source_ip" }
+ rename => { "srcmac" => "source_mac" }
+ rename => { "srcname" => "source_name" }
+ rename => { "sn" => "serial" }
+ rename => { "srcintf" => "source_interface" }
+ rename => { "srcport" => "source_port" }
+ rename => { "total" => "total_bytes" }
+ rename => { "totalsession" => "total_sessions" }
+ rename => { "trandisp" => "nat_translation_type" }
+ rename => { "tranip" => "nat_destination_ip" }
+ rename => { "tranport" => "nat_destination_port" }
+ rename => { "transip" => "nat_source_ip" }
+ rename => { "transport" => "nat_source_port" }
+ rename => { "tunnelid" => "tunnel_id" }
+ rename => { "tunnelip" => "tunnel_ip" }
+ rename => { "tunneltype" => "tunnel_type" }
+ rename => { "unauthuser" => "unauthenticated_user_source" }
+ rename => { "unauthusersource" => "os_version" }
+ rename => { "vendorurl" => "vendor_url" }
+ rename => { "vpntunnel" => "vpn_tunnel" }
+ rename => { "vulncat" => "vulnerability_category" }
+ rename => { "vulncmt" => "vulnerability_count" }
+ rename => { "vulnid" => "vulnerability_id" }
+ rename => { "vulnname" => "vulnerability_name" }
+ rename => { "vulnref" => "vulnerability_reference" }
+ rename => { "vulnscore" => "vulnerability_score" }
+ rename => { "xauthgroup" => "x_authentication_group" }
+ rename => { "xauthuser" => "x_authentication_user" }
+ rename => { "[SubLog][appid]" => "sub_application_id" }
+ rename => { "[SubLog][devid]" => "sub_device_id" }
+ rename => { "[SubLog][dstip]" => "sub_destination_ip" }
+ rename => { "[SubLog][srcip]" => "sub_source_ip" }
+ rename => { "[SubLog][dstport]" => "sub_destination_port" }
+ rename => { "[SubLog][eventtype]" => "sub_event_type" }
+ rename => { "[SubLog][proto]" => "sub_protocol_number" }
+ rename => { "[SubLog][date]" => "sub_date" }
+ rename => { "[SubLog][time]" => "sub_time" }
+ rename => { "[SubLog][srcport]" => "sub_source_port" }
+ rename => { "[SubLog][subtype]" => "sub_subtype" }
+ rename => { "[SubLog][devname]" => "sub_device_name" }
+ rename => { "[SubLog][itime]" => "sub_itime" }
+ rename => { "[SubLog][level]" => "sub_level" }
+ rename => { "[SubLog][logid]" => "sub_log_id" }
+ rename => { "[SubLog][logver]" => "sub_log_version" }
+ rename => { "[SubLog][type]" => "sub_event_type" }
+ rename => { "[SubLog][vd]" => "sub_vd" }
+ rename => { "[SubLog][action]" => "sub_action" }
+ rename => { "[SubLog][logdesc]" => "sub_destination_ip" }
+ rename => { "[SubLog][policyid]" => "sub_olicy_id" }
+ rename => { "[SubLog][reason]" => "sub_reason" }
+ rename => { "[SubLog][service]" => "sub_service" }
+ rename => { "[SubLog][sessionid]" => "sub_session_id" }
+ rename => { "[SubLog][src]" => "sub_source_ip" }
+ rename => { "[SubLog][status]" => "sub_status" }
+ rename => { "[SubLog][ui]" => "sub_ui" }
+ rename => { "[SubLog][urlfilteridx]" => "sub_url_filter_idx" }
+ strip => [ "bytes_sent", "bytes_received" ]
+ convert => [ "bytes_sent", "integer" ]
+ convert => [ "bytes_received", "integer" ]
+ convert => [ "cr_score", "integer" ]
+ convert => [ "cr_action", "integer" ]
+ convert => [ "elapsed_time", "integer" ]
+ convert => [ "destination_port", "integer" ]
+ convert => [ "source_port", "integer" ]
+ convert => [ "local_port", "integer" ]
+ convert => [ "remote_port", "integer" ]
+ convert => [ "packets_sent", "integer" ]
+ convert => [ "packets_received", "integer" ]
+ convert => [ "port", "integer" ]
+ convert => [ "ProtocolNumber", "integer" ]
+ convert => [ "XAuthUser", "string" ]
+ remove_field => [ "kv", "log" ]
+ }
+ if [tunnel_ip] == "N/A" {
+ mutate {
+ remove_field => [ "tunnel_ip" ]
+ }
+ }
+ if [nat_destination_ip] {
+ mutate {
+ add_field => { "ips" => [ "%{nat_destination_ip}" ] }
+ add_field => { "destination_ips" => [ "%{nat_destination_ip}" ] }
+ }
+ }
+ if [sub_destination_ip] {
+ mutate {
+ add_field => { "ips" => [ "%{sub_destination_ip}" ] }
+ add_field => { "destination_ips" => [ "%{sub_destination_ip}" ] }
+ }
+ }
+ if [nat_source_ip] {
+ mutate {
+ add_field => { "ips" => [ "%{nat_source_ip}" ] }
+ add_field => { "source_ips" => [ "%{nat_source_ip}" ] }
+ }
+ }
+ if [sub_source_ip] {
+ mutate {
+ add_field => { "ips" => [ "%{sub_source_ip}" ] }
+ add_field => { "source_ips" => [ "%{sub_source_ip}" ] }
+ }
+ }
+ if [addr_ip] {
+ mutate {
+ add_field => { "ips" => [ "%{addr_ip}" ] }
+ }
+ }
+ if [assign_ip] {
+ mutate {
+ add_field => { "ips" => [ "%{assign_ip}" ] }
+ }
+ }
+ if [assigned_ip] {
+ mutate {
+ add_field => { "ips" => [ "%{assigned_ip}" ] }
+ }
+ }
+ grok {
+ match => ["message", "type=%{DATA:event_type}\s+"]
+ }
+ if [date] and [time] {
+ mutate {
+ add_field => { "receive_time" => "%{date} %{time}" }
+ remove_field => [ "date", "time" ]
+ }
+ date {
+ timezone => "America/Chicago"
+ match => [ "receive_time", "YYYY-MM-dd HH:mm:ss" ]
+ target => "receive_time"
+ }
+ mutate {
+ rename => { "receive_time" => "@timestamp" }
+ }
+ } else {
+ mutate {
+ add_tag => [ "missing_date" ]
+ }
+ }
+ mutate {
+ #add_tag => [ "conf_file_6200"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/6201_firewall_pfsense.conf b/salt/logstash/conf/pipelines/eval/6201_firewall_pfsense.conf
new file mode 100644
index 000000000..acd08eba0
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/6201_firewall_pfsense.conf
@@ -0,0 +1,56 @@
+# Author: Wes Lambert
+# Updated by: Doug Burks
+
+filter {
+ if [type] == "filterlog" {
+ dissect {
+ mapping => {
+ "message" => "%{rule_number},%{sub_rule_number},%{anchor},%{tracker_id},%{interface},%{reason},%{action},%{direction},%{ip_version},%{sub_msg}"
+ }
+ }
+ if [ip_version] == "4" {
+ dissect {
+ mapping => {
+ "sub_msg" => "%{ipv4_tos},%{ipv4_ecn},%{ipv4_ttl},%{ipv4_id},%{ipv4_offset},%{ipv4_flags},%{protocol_id},%{protocol},%{protocol_length},%{source_ip},%{destination_ip},%{ip_sub_msg}"
+ }
+ }
+ }
+ if [ip_version] == "6" {
+ dissect {
+ mapping => {
+ "sub_msg" => "%{class},%{flow_label},%{hop_limit},%{protocol},%{protocol_id},%{length},%{source_ip},%{destination_ip},%{ip_sub_msg}"
+ }
+ }
+ }
+ if [protocol] == "tcp" {
+ dissect {
+ mapping => {
+ "ip_sub_msg" => "%{source_port},%{destination_port},%{data_length},%{tcp_flags},"
+ }
+ }
+ }
+ if [protocol] == "udp" {
+ dissect {
+ mapping => {
+ "ip_sub_msg" => "%{source_port},%{destination_port},%{data_length}"
+ }
+ }
+ }
+ if [protocol] == "Options" {
+ mutate {
+ copy => { "ip_sub_msg" => "options" }
+ }
+ mutate {
+ split => { "options" => "," }
+ }
+ }
+ mutate {
+ convert => [ "destination_port", "integer" ]
+ convert => [ "source_port", "integer" ]
+ convert => [ "ip_version", "integer" ]
+ replace => { "type" => "firewall" }
+ add_tag => [ "pfsense","firewall" ]
+ remove_field => [ "sub_msg", "ip_sub_msg" ]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/6300_windows.conf b/salt/logstash/conf/pipelines/eval/6300_windows.conf
new file mode 100644
index 000000000..34450af2b
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/6300_windows.conf
@@ -0,0 +1,161 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [type] == "windows" {
+# json {
+# source => "message"
+# }
+ date {
+ match => ["EventTime", "YYYY-MM-dd HH:mm:ss"]
+ remove_field => [ "EventTime" ]
+ }
+ if [EventID] == 4634 {
+ mutate {
+ add_tag => [ "logoff" ]
+ }
+ }
+ if [EventID] == 4624 or [EventID] == 528 or [EventID] == 540 or [EventID] == 552 or [EventID] == 682 or [EventID] == 4648 or [EventID] == 4778 {
+ mutate {
+ add_tag => [ "logon" ]
+ add_tag => [ "alert_data" ]
+ }
+ }
+ if [EventID] == 529 or [EventID] == 4625 or [EventID] == 530 or [EventID] == 531 or [EventID] == 532 or [EventID] == 533 or [EventID] == 534 or [EventID] == 535 or [EventID] == 536 or [EventID] == 536 or [EventID] == 537 or [EventID] == 538 or [EventID] == 539 or [EventID] == 4625 or [EventID] == 4771 {
+ mutate {
+ add_tag => [ "logon_failure" ]
+ add_tag => [ "alert_data" ]
+ }
+ }
+ # Critical event IDs to monitor
+ if [EventID] == 7030 or [EventID] == 4720 or [EventID] == 4722 or [EventID] == 4724 or [EventID] == 4738 or [EventID] == 4732 or [EventID] == 1102 or [EventID] == 1056 or [EventID] == 2003 or [EventID] == 2005 or [EventID] == 8003 or [EventID] == 8004 or [EventID] == 8006 or [EventID] == 8007 {
+ mutate {
+ add_tag => [ "alert_data" ]
+ }
+ }
+ # Critical event IDs to monitor
+ if [EventID] == 5152 { drop {} }
+ if [EventID] == 4688 { drop {} }
+ if [EventID] == 4689 { drop {} } # Process Termination:Not needed due to Sysmon
+ if [Channel] == "Microsoft-Windows-Known Folders API Service" { drop {} }
+ if [EventID] == 3 and [SourceIp] =~ "255$" { drop {} }
+ if [EventID] == 3 and [DestinationIp] =~ "255$" { drop {} }
+ # Whitelist/Blacklist check
+ if [EventID] == 7045 {
+ translate {
+ field => "ServiceName"
+ destination => "ServiceCheck"
+ dictionary_path => "/lib/dictionaries/services.yaml"
+ }
+ }
+ if [EventID] == 7045 and !([ServiceCheck]) {
+ mutate {
+ add_tag => [ "alert_data","new_service" ]
+ }
+ }
+ if [ServiceCheck] == 'whitelist' {
+ mutate {
+ remove_field => [ "ServiceCheck" ]
+ add_tag => [ "whitelist" ]
+ }
+ }
+ if [ServiceCheck] == 'blacklist' {
+ mutate {
+ remove_field => [ "ServiceCheck" ]
+ add_tag => [ "blacklist" ]
+ }
+ }
+ if [EventID] == 5158 {
+ if [Application] == "System" { drop {} }
+ if [Application] =~ "\\windows\\system32\\spoolsv\.exe" { drop {} }
+ if [Application] =~ "\\windows\\system32\\wbem\\wmiprvse\.exe" { drop {} }
+ if [Application] =~ "mcafee" { drop {} }
+ if [Application] =~ "carestream" { drop {} }
+ if [Application] =~ "Softdent" { drop {} }
+ }
+ if [ProcessName] == "C:\\Windows\\System32\\wbem\\WmiPrvSE\.exe" and [SubjectUserName] == "SolarwindsHO" { drop {} }
+ if [EventID] == 4690 { drop {} }
+ if [EventID] == 861 and [AccountName] == "ntp" { drop {} }
+ if [EventID] == 5158 and [Application] =~ "\\windows\\system32\\lsass\.exe$" { drop {} }
+ if [EventID] == 5158 and [Application] =~ "\\windows\\system32\\svchost\.exe$" { drop {} }
+ if [EventID] == 5158 and [Application] =~ "\\windows\\system32\\dfsrs\.exe$" { drop {} }
+ if [EventID] == 5447 { drop {} }
+
+ mutate {
+ rename => [ "AccountName", "user" ]
+ rename => [ "AccountType", "account_type" ]
+ rename => [ "ActivityID", "activity_id" ]
+ rename => [ "Category", "category" ]
+ rename => [ "ClientAddress", "client_ip" ]
+ rename => [ "Channel", "channel" ]
+ rename => [ "DCIPAddress", "domain_controller_ip" ]
+ rename => [ "DCName", "domain_controller_name" ]
+ rename => [ "EventID", "event_id" ]
+ rename => [ "EventReceivedTime", "event_received_time" ]
+ rename => [ "EventType", "event_type" ]
+ rename => [ "GatewayIPAddress", "gateway_ip" ]
+ rename => [ "IPAddress", "client_ip" ]
+ rename => [ "Ipaddress", "client_ip" ]
+ rename => [ "IpAddress", "client_ip" ]
+ rename => [ "IPPort", "source_port" ]
+ rename => [ "OpcodeValue", "opcode_value" ]
+ rename => [ "PreAuthType", "preauthentication_type" ]
+ rename => [ "PrincipleSAMName", "user" ]
+ rename => [ "ProcessID", "process_id" ]
+ rename => [ "ProviderGUID", "providerguid" ]
+ rename => [ "RecordNumber", "record_number" ]
+ rename => [ "RemoteAddress", "destination_ip" ]
+ rename => [ "ServiceName", "service_name" ]
+ rename => [ "ServiceID", "service_id" ]
+ rename => [ "SeverityValue", "severity_value" ]
+ rename => [ "SourceAddress", "client_ip" ]
+ rename => [ "SourceModuleName", "source_module_name" ]
+ rename => [ "SourceModuleType", "source_module_type" ]
+ rename => [ "SourceName", "source_name" ]
+ rename => [ "SubjectUserName", "user" ]
+ rename => [ "TaskName", "task_name" ]
+ rename => [ "TargetDomainName", "target_domain_name" ]
+ rename => [ "TargetUserName", "user" ]
+ rename => [ "ThreadID", "thread_id" ]
+ rename => [ "User_ID", "user" ]
+ rename => [ "UserID", "user" ]
+ rename => [ "username", "user" ]
+ }
+ # For any accounts that are service accounts or special accounts add the tag of service_account
+ # This example applies the tag to any username that starts with SVC_. If you use a different
+ # standard change this.
+ if [user] =~ "^DWM-*" or [user] == "SYSTEM" or [user] == "NETWORK SERVICE" or [user] == "LOCAL SERVICE" or [user] =~ "^SVC_*" {
+ mutate {
+ add_tag => [ "service_account" ]
+ }
+ }
+ # This looks for events that are typically noisy but may be of use for deep dive investigations
+ # A tag of noise is added to quickly filter out noise
+ if [event_id] == 7036 or [source_name] == "Desktop Window Manager" or [category] == "Engine Lifecycle" or [category] == "Provider Lifecycle" {
+ mutate {
+ add_tag => [ "noise" ]
+ }
+ }
+ #Identify machine accounts
+ if [user] =~ /\$/ {
+ mutate {
+ add_tag => [ "machine", "noise" ]
+ }
+ }
+ # Lower case all field names
+ ruby {
+ code => "
+ event_hash = event.to_hash
+ new_event = {}
+ event_hash.keys.each do |key|
+ new_event[key.downcase] = event[key]
+ end
+ event.instance_variable_set(:@data, new_event)"
+ }
+ mutate {
+ #add_tag => [ "conf_file_6300"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/6301_dns_windows.conf b/salt/logstash/conf/pipelines/eval/6301_dns_windows.conf
new file mode 100644
index 000000000..1ef5077a6
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/6301_dns_windows.conf
@@ -0,0 +1,49 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [type] == "dns" and "bro" not in [tags] {
+ json {
+ source => "message"
+ }
+ # strip whitespace from message field
+ mutate {
+ strip => "message"
+ }
+ # If the message is blank, drop the log
+ if [Message] =~ /^$/ {
+ drop { }
+ } else {
+ if [type] == "dns" {
+ # This section is lookup for a match against the log and parsing out the fields
+ grok {
+ match => { "Message" => "(?%{DATE_US} %{TIME} (?:AM|PM))\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{DATA:response}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:flags}\s+ %{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ match => { "Message" => "(?%{DATE_US} %{TIME} (?:AM|PM))\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{DATA:response}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:flags}\s+%{WORD:recursion}\s+%{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ match => { "Message" => "(?%{DATE_US} %{TIME} (?:AM|PM))\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{DATA:response}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:recursion}\s+%{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ match => { "Message" => "(?%{DATE_US} %{TIME} (?:AM|PM))\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{DATA:response}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ match => { "Message" => "(?%{DATE_US} %{TIME} (?:AM|PM))\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:flags}\s+ %{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ # Server 2003 DNS logs do not include slashes or AM/PM in timestamp
+ match => { "Message" => "(?%{YEAR}%{MONTHNUM}%{MONTHDAY} %{TIME})\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{DATA:response}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:flags}\s+ %{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ match => { "Message" => "(?%{YEAR}%{MONTHNUM}%{MONTHDAY} %{TIME})\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{DATA:response}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:flags}\s+%{WORD:recursion}\s+%{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ match => { "Message" => "(?%{YEAR}%{MONTHNUM}%{MONTHDAY} %{TIME})\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{DATA:response}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:recursion}\s+%{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ match => { "Message" => "(?%{YEAR}%{MONTHNUM}%{MONTHDAY} %{TIME})\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{DATA:response}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ match => { "Message" => "(?%{YEAR}%{MONTHNUM}%{MONTHDAY} %{TIME})\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:flags}\s+ %{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ remove_field => [ "Message" ]
+ }
+ # This section attempts to convert the dns_domain into the traditional domain.com format
+ mutate {
+ gsub => [ "dns_domain", "(\(\d+\))", "." ]
+ }
+ grok {
+ match => { "dns_domain" => "\.%{DATA:query}\.$" }
+ remove_field => [ "dns_domain" ]
+ }
+ }
+ }
+ mutate {
+ #add_tag => [ "conf_file_6301"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/6400_suricata.conf b/salt/logstash/conf/pipelines/eval/6400_suricata.conf
new file mode 100644
index 000000000..11f185ddf
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/6400_suricata.conf
@@ -0,0 +1,92 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+#
+# This conf file is based on accepting logs for suricata json events
+filter {
+ if [type] == "suricata" {
+ if "test_data" not in [tags] {
+ date {
+ match => [ "timestamp", "ISO8601" ]
+ }
+ } else {
+ mutate {
+ remove_field => [ "netflow.start","netflow.end","timestamp" ]
+ }
+ }
+ if [event_type] == "fileinfo" {
+ ruby {
+ code => "if event['event_type'] == 'fileinfo'; event['fileinfo']['type']=event['fileinfo']['magic'].to_s.split(',')[0]; end;"
+ }
+ }
+ # I recommend renaming the fields below to be consistent with other log sources. This makes it easy to "pivot" between logs
+ mutate {
+ rename => [ "src_ip", "source_ip" ]
+ rename => [ "dest_ip", "destination_ip" ]
+ rename => [ "src_port", "source_port" ]
+ rename => [ "dest_port", "destination_port" ]
+ }
+ # This will translate the alert.severity field into a severity field of either High, Medium, or Low
+ if [event_type] == "alert" {
+ if [alert][severity] == 1 {
+ mutate {
+ add_field => { "severity" => "High" }
+ }
+ }
+ if [alert][severity] == 2 {
+ mutate {
+ add_field => { "severity" => "Medium" }
+ }
+ }
+ if [alert][severity] == 3 {
+ mutate {
+ add_field => { "severity" => "Low" }
+ }
+ }
+ # If the alert is a Snort GPL alert break it apart for easier reading and categorization
+ if [alert][signature] =~ "GPL " {
+ # This will parse out the category type from the alert
+ grok {
+ match => { "[alert][signature]" => "GPL\s+%{DATA:category}\s" }
+ }
+ # This will store the category
+ mutate {
+ add_field => { "rule_type" => "Snort GPL" }
+ lowercase => [ "category" ]
+ }
+ }
+ # If the alert is an Emerging Threat alert break it apart for easier reading and categorization
+ if [alert][signature] =~ "ET " {
+ # This will parse out the category type from the alert
+ grok {
+ match => { "[alert][signature]" => "ET\s+%{DATA:category}\s" }
+ }
+ # This will store the category
+ mutate {
+ add_field => { "rule_type" => "Emerging Threats" }
+ lowercase => [ "category" ]
+ }
+ }
+ # This section adds URLs to lookup information about a rule online
+ if [rule_type] == "Snort GPL" {
+ mutate {
+ add_field => [ "signature_info", "https://www.snort.org/search?query=%{[alert][gid]}-%{[alert][signature_id]}" ]
+ }
+ }
+ if [rule_type] == "Emerging Threats" {
+ mutate {
+ add_field => [ "signature_info", "http://doc.emergingthreats.net/%{[alert][signature_id]}" ]
+ }
+ }
+ }
+ if "_grokparsefailure" not in [tags] and "_csvparsefailure" not in [tags] and "_jsonparsefailure" not in [tags] {
+ # mutate {
+ # remove_field => [ "message" ]
+ # }
+ }
+ mutate {
+ #add_tag => [ "conf_file_6400"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/6500_ossec.conf b/salt/logstash/conf/pipelines/eval/6500_ossec.conf
new file mode 100644
index 000000000..292fea49b
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/6500_ossec.conf
@@ -0,0 +1,160 @@
+# Author: Wes Lambert
+#
+# Last Update: 09/19/2018
+#
+# This conf file is based on accepting logs from OSSEC
+
+filter {
+ # OSSEC Alerts
+ if [type] == "ossec" {
+
+ # Sysmon/Autoruns logs transported by OSSEC
+ if [message] =~ "Microsoft-Windows-Sysmon" {
+ mutate {
+ replace => { "type" => "sysmon" }
+ add_tag => [ "ossec" ]
+ }
+ }
+ if [message] =~ "AR-LOG" {
+ mutate {
+ replace => { "type" => "autoruns" }
+ add_tag => [ "ossec" ]
+ }
+ }
+
+ # If message looks like json, try to parse it as such. Otherwise, grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+ mutate {
+ rename => { "rule" => "wazuh-rule" }
+ rename => { "[wazuh-rule][level]" => "alert_level" }
+ rename => { "[wazuh-rule][description]" => "description" }
+ rename => { "[data][srcuser]" => "username" }
+ rename => { "[data][dstuser]" => "escalated_user" }
+ rename => { "[data][command]" => "command" }
+ rename => { "[predecoder][program_name]" => "process" }
+
+ }
+ # Wazuh 3.8.2
+ if [data][EventChannel] {
+ mutate {
+ rename => { "[data][EventChannel][EventData][User]" => "username" }
+ rename => { "[data][EventChannel][System][EventID]" => "event_id" }
+ rename => { "[data][EventChannel][EventData][DestinationPort]" => "destination_port" }
+ rename => { "[data][EventChannel][EventData][DestinationIp]" => "destination_ip" }
+ rename => { "[data][EventChannel][EventData][SourcePort]" => "source_port" }
+ rename => { "[data][EventChannel][EventData][SourceIp]" => "source_ip" }
+ rename => { "[data][EventChannel][EventData][SourceHostname]" => "source_hostname" }
+ rename => { "[data][EventChannel][EventData][DestinationHostname]" => "destination_hostname" }
+ }
+ }
+ # Wazuh 3.9.2
+ if [data][win] {
+ mutate {
+ rename => { "[data][win][eventdata][user]" => "username" }
+ rename => { "[data][win][system][eventID]" => "event_id" }
+ rename => { "[data][win][eventdata][destinationPort]" => "destination_port" }
+ rename => { "[data][win][eventdata][destinationIp]" => "destination_ip" }
+ rename => { "[data][win][eventdata][sourcePort]" => "source_port" }
+ rename => { "[data][win][eventdata][sourceIp]" => "source_ip" }
+ rename => { "[data][win][eventdata][sourceHostname]" => "source_hostname" }
+ rename => { "[data][win][eventdata][destinationHostname]" => "destination_hostname" }
+ }
+ }
+ } else {
+ grok {
+ match => ["message", "Alert Level: %{NONNEGINT;alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; user: +%{DATA:username}; %{SYSLOGTIMESTAMP} %{DATA:host} %{DATA:process}\[%{INT:pid}]: %{GREEDYDATA:details}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{SYSLOGTIMESTAMP:timestamp} %{DATA:host} %{DATA:process}\[%{NONNEGINT:pid}]: %{GREEDYDATA:details}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{SYSLOGTIMESTAMP} %{DATA:host} %{DATA:process}\[%{NONNEGINT:pid}]: %{GREEDYDATA:details}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{SYSLOGTIMESTAMP:timestamp} %{DATA:host} %{DATA:program}: +%{DATA:username} : TTY=%{DATA:tty} ; PWD=%{DATA:dir} ; USER=%{DATA:escalated_user} ; COMMAND=%{GREEDYDATA:command}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{SYSLOGTIMESTAMP:timestamp} %{DATA:host} %{DATA:program}: %{GREEDYDATA:details}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{SYSLOGTIMESTAMP:timestamp} %{DATA:host} %{DATA:program}: +%{DATA:username} : %{GREEDYDATA:details}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; srcip: %{IP:source_ip};%{GREEDYDATA:details}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{DATA:username}: %{DATA}: \'%{DATA}': %{DATA:interface}: %{INT:num_packets}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{DATA:username}: %{GREEDYDATA:details}.",
+ "message", "Alert Level: %{NONNEGINT:alert_Level}; Rule: %{NONNEGINT:Rule} - %{DATA:Description}; Location: %{DATA:location}; user: +%{DATA:username};",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{DATA}: %{DATA}: \'%{DATA}': %{DATA:interface}: %{NONNEGINT:num_packets}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{GREEDYDATA:details}"]
+ }
+ }
+
+ # Add tag for OSSEC alerts
+ if [alert_level] {
+ mutate {
+ add_tag => [ "alert" ]
+ }
+ }
+
+ translate {
+ field => "alert_level"
+
+ destination => "classification"
+
+ dictionary => [
+ "1", "None",
+ "2", "System low priority notification",
+ "3", "Successful/authorized event",
+ "4", "System low priority error",
+ "5", "User generated error",
+ "6", "Low relevance attack",
+ "7", '"Bad word" matching',
+ "8", "First time seen",
+ "9", "Error from invalid source",
+ "10", "Multiple user generated errors",
+ "11", "Integrity checking warning",
+ "12", "High importance event",
+ "13", "Unusal error (high importance)",
+ "14", "High importance security event",
+ "15", "Severe attack"
+ ]
+ }
+ }
+
+ # OSSEC Archive Logs
+ if [type] == "ossec_archive" {
+
+ # Sysmon/Autoruns logs transported by OSSEC
+ if [message] =~ "Microsoft-Windows-Sysmon" {
+ mutate {
+ replace => { "type" => "sysmon" }
+ add_tag => [ "ossec" ]
+ }
+ }
+ if [message] =~ "AR-LOG" {
+ mutate {
+ replace => { "type" => "autoruns" }
+ add_tag => [ "ossec" ]
+ }
+ }
+
+ # If message looks like json, try to parse it as such. Otherwise, grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+ mutate {
+ rename => [ "rule", "wazuh-rule" ]
+ rename => [ "[wazuh-rule][level]", "alert_level" ]
+ rename => [ "[wazuh-rule][description]", "description" ]
+ rename => [ "[data][srcuser]", "username" ]
+ rename => [ "[data][dstuser]", "escalated_user" ]
+ rename => [ "[data][command]", "command" ]
+ rename => [ "[predecoder][program_name]", "process" ]
+ }
+ } else {
+ grok {
+ match => ["message",'%{YEAR:year} %{SYSLOGTIMESTAMP:timestamp} %{DATA:location} %{IP:source_ip} - %{DATA:username} \[%{DATA:request_timestamp}] "%{DATA:method} %{DATA:requested_resource} %{DATA:protocol}\/%{DATA:protocol_version}" %{NONNEGINT:status_code} %{NONNEGINT:object_size} "%{DATA:referrer}" "%{DATA:user_agent}"',
+ "message","%{YEAR:year} %{SYSLOGTIMESTAMP:timestamp} %{DATA:location} %{SYSLOGTIMESTAMP:ossec_timestamp} %{DATA:host} %{DATA:process}\[%{NONNEGINT:pid}]: \(%{DATA:username}\) CMD \(%{DATA:command}\)",
+ "message", "%{YEAR:year} %{SYSLOGTIMESTAMP:timestamp} %{DATA:location} %{GREEDYDATA:details}","message","%{YEAR:year} %{SYSLOGTIMESTAMP:timestamp} %{DATA:location} %{SYSLOGTIMESTAMP:ossec_timestamp} %{DATA:ossec_host} %{DATA:process}\[%{NONNEGINT:pid}]: %{GREEDYDATA:details}",
+ "message","%{DATA:age} %{DATA:program} %{DATA} '%{DATA:checksum}'",
+ "message", "%{DATA:username} : TTY=%{DATA:tty} ; PWD=%{DATA:dir} ; USER=%{DATA:escalated_user} ; COMMAND=%{GREEDYDATA:command}"]
+ remove_field => [ "ossec_timestamp" ]
+ }
+ mutate {
+ convert => [ "status_code", "integer" ]
+ }
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/6501_ossec_sysmon.conf b/salt/logstash/conf/pipelines/eval/6501_ossec_sysmon.conf
new file mode 100644
index 000000000..6ebf10487
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/6501_ossec_sysmon.conf
@@ -0,0 +1,118 @@
+# Author: Wes Lambert
+# wlambertts@gmail.com
+#
+# This conf file is based on accepting Sysmon logs from OSSEC
+#
+# Parse using grok
+filter {
+ # OSSEC Logs and Alerts
+ if [type] == "sysmon" or "sysmon" in [tags] {
+ if [message] !~ /^{.*}$/ {
+ #mutate { replace => { "type" => "sysmon" } }
+ grok {
+ # match => ["message","%{YEAR:year} %{SYSLOGTIMESTAMP:timestamp} %{DATA:location} %{IP:source_ip}->WinEvtLog %{YEAR:year} %{SYSLOGTIMESTAMP:ossec_timestamp} WinEvtLog: Microsoft-Windows-Sysmon/Operational: INFORMATION\(%{INT:sysmon_event_id}\):"]
+ match => ["message", "%{YEAR:year}%{SPACE}%{SYSLOGTIMESTAMP:timestamp}%{SPACE}%{DATA:location}%{SPACE}(any|%{IP:source_ip})->WinEvtLog%{SPACE}%{YEAR:year}%{SPACE}%{SYSLOGTIMESTAMP:ossec_timestamp}%{SPACE}WinEvtLog:%{SPACE}Microsoft-Windows-Sysmon/Operational:%{SPACE}INFORMATION\(%{INT:event_id}\):%{SPACE}%{GREEDYDATA:rest_of_msg}"]
+ }
+ mutate {
+ convert => ["event_id", "integer"]
+ remove_field => ["timestamp"]
+ remove_field => ["year"]
+ }
+ if [event_id] == 1 {
+ grok {
+ match => ["rest_of_msg", "Microsoft-Windows-Sysmon:%{SPACE}SYSTEM:%{SPACE}NT%{SPACE}AUTHORITY:%{SPACE}%{DATA:hostname}:%{SPACE}%{DATA:event_type}:%{SPACE}UtcTime:%{SPACE}%{DATA:sysmon_timestamp}%{SPACE}ProcessGuid:%{SPACE}\{%{DATA:process_guid}\}%{SPACE}ProcessId:%{SPACE}%{INT:process_id}%{SPACE}Image:%{SPACE}%{DATA:image_path}%{SPACE}CommandLine:%{SPACE}%{DATA:process_name} %{DATA:process_arguments}%{SPACE}CurrentDirectory:%{SPACE}%{DATA:current_directory}%{SPACE}User:%{SPACE}%{DATA:username}%{SPACE}LogonGuid:%{SPACE}\{%{DATA:logon_guid}\}%{SPACE}LogonId:%{SPACE}%{DATA:logon_id}%{SPACE}TerminalSessionId:%{SPACE}%{INT:terminal_id}%{SPACE}IntegrityLevel:%{SPACE}%{DATA:integrity_level}%{SPACE}Hashes:%{SPACE}MD5=%{DATA:md5},SHA256=%{DATA:sha256}%{SPACE}ParentProcessGuid:%{SPACE}\{%{DATA:parent_process_guid}\}%{SPACE}ParentProcessId:%{SPACE}%{NONNEGINT:parent_process_id}%{SPACE}ParentImage:%{SPACE}%{DATA:parent_image_path}%{SPACE}ParentCommandLine:%{SPACE}%{GREEDYDATA:parent_process_name}",
+ "rest_of_msg", 'Microsoft-Windows-Sysmon:%{SPACE}SYSTEM:%{SPACE}NT%{SPACE}AUTHORITY:%{SPACE}%{DATA:hostname}:%{SPACE}%{DATA:event_type}:%{SPACE}UtcTime:%{SPACE}%{DATA:sysmon_timestamp}%{SPACE}ProcessGuid:%{SPACE}\{%{DATA:process_guid}\}%{SPACE}ProcessId:%{SPACE}%{INT:process_id}%{SPACE}Image:%{SPACE}%{DATA:image_path}%{SPACE}CommandLine:%{SPACE}"%{DATA:process_name}"%{SPACE}%{DATA:process_arguments}%{SPACE}CurrentDirectory:%{SPACE}%{DATA:current_directory}%{SPACE}User:%{SPACE}%{DATA:username}%{SPACE}LogonGuid:%{SPACE}\{%{DATA:logon_guid}\}%{SPACE}LogonId:%{SPACE}%{DATA:logon_id}%{SPACE}TerminalSessionId:%{SPACE}%{INT:terminal_id}%{SPACE}IntegrityLevel:%{DATA:integrity_level}',
+ "rest_of_msg", "Microsoft-Windows-Sysmon/Operational:%{SPACE}INFORMATION(%{INT:event_id}):%{SPACE}Microsoft-Windows-Sysmon:%{SPACE}SYSTEM:%{SPACE}NT AUTHORITY:%{SPACE}%{DATA:hostname}:%{SPACE}%{DATA:event_type}:%{SPACE}UtcTime:%{SPACE}%{DATA:sysmon_timestamp}%{SPACE}ProcessGuid:%{SPACE}{%{DATA:process_guid}}%{SPACE}ProcessId:%{SPACE}%{INT:process_id}%{SPACE}Image:%{SPACE}%{DATA:image_path}%{SPACE}CommandLine:%{SPACE}%{DATA:process_name}%{SPACE}%{DATA:process_arguments}CurrentDirectory:%{SPACE}%{DATA:current_directory}%{SPACE}User:%{SPACE}%{DATA:username}%{SPACE}LogonGuid:%{SPACE}{%{DATA:logon_guid}}%{SPACE}LogonId:%{SPACE}%{DATA:logon_id}%{SPACE}TerminalSessionId:%{SPACE}%{INT:terminal_id}%{SPACE}IntegrityLevel:%{SPACE}%{DATA:integrity_level}%{SPACE}Hashes:%{SPACE}MD5=%{DATA:md5},SHA256=%{DATA:sha256}%{SPACE}ParentProcessGuid:%{SPACE}{%{DATA:parent_process_guid}}%{SPACE}ParentProcessId:%{SPACE}%{NONNEGINT:parent_process_id}%{SPACE}ParentImage:%{SPACE}%{DATA:parent_image_path}%{SPACE}ParentCommandLine:%{SPACE}%{GREEDYDATA:parent_process_name}"]
+ }
+ mutate {
+ convert => ["process_guid", "integer"]
+ convert => ["process_id", "integer"]
+ add_tag => ["process_creation"]
+ }
+ }
+ if [event_id] == 3 {
+ mutate {
+ remove_field => ["source_ip"]
+ }
+ grok {
+ match => ["rest_of_msg", "Microsoft-Windows-Sysmon:%{SPACE}SYSTEM:%{SPACE}NT%{SPACE}AUTHORITY:%{SPACE}%{DATA:hostname}:%{SPACE}%{DATA:event_type}:%{SPACE}UtcTime:%{SPACE}%{DATA:sysmon_timestamp}%{SPACE}ProcessGuid:%{SPACE}\{%{DATA:process_guid}\}%{SPACE}ProcessId:%{SPACE}%{NONNEGINT:process_id}%{SPACE}Image:%{SPACE}%{DATA:image_path}%{SPACE}User:%{SPACE}%{DATA:username}%{SPACE}Protocol:%{SPACE}%{DATA:protocol}%{SPACE}Initiated:%{SPACE}%{DATA:initiated}%{SPACE}SourceIsIpv6:%{SPACE}%{DATA:is_source_ipv6}%{SPACE}SourceIp:%{SPACE}%{IP:source_ip}%{SPACE}SourceHostname:%{SPACE}%{DATA:source_hostname}%{SPACE}SourcePort:%{SPACE}%{NONNEGINT:source_port}%{SPACE}SourcePortName:%{SPACE}%{DATA:source_port_name}%{SPACE}DestinationIsIpv6:%{SPACE}%{DATA:dest_is_ipv6}%{SPACE}DestinationIp:%{SPACE}%{IP:destination_ip}%{SPACE}DestinationHostname:%{SPACE}%{DATA:destination_hostname}%{SPACE}DestinationPort:%{SPACE}%{NONNEGINT:destination_port}%{SPACE}DestinationPortName:%{SPACE}%{GREEDYDATA:destination_port_name}"]
+ }
+ mutate {
+ convert => ["process_guid", "integer"]
+ convert => ["process_id", "integer"]
+ convert => ["source_port", "integer"]
+ convert => ["destination_port", "integer"]
+ add_tag => ["network_connection"]
+ }
+ }
+ if [event_id] == 5 {
+ grok {
+ match => ["rest_of_msg", "Microsoft-Windows-Sysmon:%{SPACE}SYSTEM:%{SPACE}NT%{SPACE}AUTHORITY:%{SPACE}%{DATA:hostname}:%{SPACE}%{DATA:event_type}:%{SPACE}UtcTime:%{SPACE}%{DATA:sysmon_timestamp}%{SPACE}ProcessGuid:%{SPACE}\{%{DATA:process_guid}\}%{SPACE}ProcessId:%{SPACE}%{NONNEGINT:process_id}%{SPACE}Image:%{SPACE}%{GREEDYDATA:image_path}"]
+ }
+ mutate {
+ convert => ["process_guid", "integer"]
+ convert => ["process_id", "integer"]
+ add_tag => ["process_termination"]
+ }
+ }
+ if [event_id] == 11 {
+ grok {
+ match => ["rest_of_msg","Microsoft-Windows-Sysmon:%{SPACE}SYSTEM:%{SPACE}NT%{SPACE}AUTHORITY:%{SPACE}%{DATA:hostname}:%{SPACE}%{DATA:event_type}:%{SPACE}UtcTime:%{SPACE}%{DATA:sysmon_timestamp}%{SPACE}ProcessGuid:%{SPACE}\{%{DATA:process_guid}\}%{SPACE}ProcessId:%{SPACE}%{NONNEGINT:process_id}%{SPACE}Image:%{SPACE}%{DATA:image_path}%{SPACE}TargetFilename:%{SPACE}%{DATA:target_filename}%{SPACE}CreationUtcTime:%{SPACE}%{DATA:creation_time}%{SPACE}"]
+ }
+ mutate {
+ convert => ["process_guid", "integer"]
+ convert => ["process_id", "integer"]
+ add_tag => ["file_created"]
+ }
+ }
+ mutate {
+ remove_field => ["rest_of_msg"]
+ }
+ } else {
+ mutate {
+ rename => { "[data][srcuser]" => "username" }
+ rename => { "[data][id]" => "event_id" }
+ rename => { "[data][dstport]" => "destination_port" }
+ rename => { "[data][dstip]" => "destination_ip" }
+ rename => { "[data][srcip]" => "source_ip" }
+ rename => { "[data][sysmon][image]" => "image_path" }
+ rename => { "[data][sysmon][parentImage]" => "parent_image_path" }
+ rename => { "[data][sysmon][targetfilename]" => "target_filename" }
+ rename => { "[data][sysmon][sourceHostname]" => "source_hostname" }
+ rename => { "[data][sysmon][destinationHostname]" => "destination_hostname" }
+ }
+ # Wazuh 3.8.2
+ if [data][EventChannel] {
+ mutate {
+ rename => { "[data][EventChannel][EventData][User]" => "username" }
+ rename => { "[data][EventChannel][System][EventID]" => "event_id" }
+ rename => { "[data][EventChannel][EventData][DestinationPort]" => "destination_port" }
+ rename => { "[data][EventChannel][EventData][DestinationIp]" => "destination_ip" }
+ rename => { "[data][EventChannel][EventData][SourcePort]" => "source_port" }
+ rename => { "[data][EventChannel][EventData][SourceIp]" => "source_ip" }
+ rename => { "[data][EventChannel][EventData][Image]" => "image_path" }
+ rename => { "[data][EventChannel][EventData][ParentImage]" => "parent_image_path" }
+ rename => { "[data][EventChannel][EventData][TargetFilename]" => "target_filename" }
+ rename => { "[data][EventChannel][EventData][SourceHostname]" => "source_hostname" }
+ rename => { "[data][EventChannel][EventData][DestinationHostname]" => "destination_hostname" }
+ }
+ }
+ # Wazuh 3.9.2
+ if [data][win] {
+ mutate {
+ rename => { "[data][win][eventdata][user]" => "username" }
+ rename => { "[data][win][system][eventID]" => "event_id" }
+ rename => { "[data][win][eventdata][destinationPort]" => "destination_port" }
+ rename => { "[data][win][eventdata][destinationIp]" => "destination_ip" }
+ rename => { "[data][win][eventdata][sourcePort]" => "source_port" }
+ rename => { "[data][win][eventdata][sourceIp]" => "source_ip" }
+ rename => { "[data][win][eventdata][image]" => "image_path" }
+ rename => { "[data][win][eventdata][parentImage]" => "parent_image_path" }
+ rename => { "[data][win][eventdata][targetFilename]" => "target_filename" }
+ rename => { "[data][win][eventdata][sourceHostname]" => "source_hostname" }
+ rename => { "[data][win][eventdata][destinationHostname]" => "destination_hostname" }
+ }
+ }
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/6502_ossec_autoruns.conf b/salt/logstash/conf/pipelines/eval/6502_ossec_autoruns.conf
new file mode 100644
index 000000000..5d7207891
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/6502_ossec_autoruns.conf
@@ -0,0 +1,43 @@
+# Author: Wes Lambert
+# wlambertts@gmail.com
+#
+# Updated by: Dustin Lee
+# Last Update: 06/13/2019
+#
+# This conf file is based on accepting Autoruns logs from OSSEC
+#
+# Parse using grok
+filter {
+ if [type] == "autoruns" or "autoruns" in [tags] {
+ if [message] !~ /^{.*}$/ {
+ grok {
+ match => [
+ "message", "%{YEAR:year} %{SYSLOGTIMESTAMP:ossec_timestamp} \(%{DATA:ossec_agent_name}\) %{IP:source_ip}->%{DATA:location} %{DATA:log_name}\|%{DATA:hostname}\|%{DATESTAMP:log_timestamp}\|%{DATA:event_timestamp}\|%{DATA:image_timestamp}\|%{DATA:entry_location}\|%{DATA:entry}\|%{DATA:enabled}\|%{DATA:category}\|%{DATA:profile}\|%{DATA:description}\|%{DATA:signer}\|%{DATA:company}\|%{DATA:image_path}\|%{DATA:version}\|%{DATA:launch_string}\|%{DATA:md5}\|%{DATA:sha1}\|%{DATA:pesha1}\|%{DATA:pesha256}\|%{DATA:sha256}\|%{DATA:imphash}",
+ "message", "%{YEAR:year} %{SYSLOGTIMESTAMP:ossec_timestamp} \(%{DATA:ossec_agent_name}\) %{IP:source_ip}->%{DATA:location} %{DATA:log_name}\|%{DATA:hostname}\|%{DATESTAMP:log_timestamp}\|%{DATA:event_timestamp}\|%{DATA:entry_location}\|%{DATA:entry}\|%{DATA:enabled}\|%{DATA:category}\|%{DATA:profile}\|%{DATA:description}\|%{DATA:signer}\|%{DATA:company}\|%{DATA:image_path}\|%{DATA:version}\|%{DATA:launch_string}\|%{DATA:md5}\|%{DATA:sha1}\|%{DATA:pesha1}\|%{DATA:pesha256}\|%{DATA:sha256}\|%{DATA:imphash}"
+ ]
+ }
+ #csv {
+# columns => ["log_name","entry_location","entry","enabled","category","autoruns_description","signer","company","image_path","version","launch_string","md5","sha1","pesha1","pesha256","sha256","imphash"]
+# separator => "|"
+# }
+ mutate {
+ remove_field => [ "year" ]
+ remove_field => [ "timestamp" ]
+ }
+ } else {
+ grok {
+ match => [
+ "full_log", "AR-LOG\|%{DATA:hostname}\|%{DATA:event_timestamp}\|%{DATA:image_timestamp}\|%{DATA:entry_location}\|%{DATA:entry}\|%{DATA:enabled}\|%{DATA:category}\|%{DATA:profile}\|%{DATA:description}\|%{DATA:signer}\|%{DATA:company}\|%{DATA:image_path}\|%{DATA:version}\|%{DATA:launch_string}\|%{DATA:md5}\|%{DATA:sha1}\|%{DATA:pesha1}\|%{DATA:pesha256}\|%{DATA:sha256}\|%{DATA:imphash}",
+ "full_log", "AR-LOG\|%{DATA:hostname}\|%{DATA:event_timestamp}\|%{DATA:entry_location}\|%{DATA:entry}\|%{DATA:enabled}\|%{DATA:category}\|%{DATA:profile}\|%{DATA:description}\|%{DATA:signer}\|%{DATA:company}\|%{DATA:image_path}\|%{DATA:version}\|%{DATA:launch_string}\|%{DATA:md5}\|%{DATA:sha1}\|%{DATA:pesha1}\|%{DATA:pesha256}\|%{DATA:sha256}\|%{DATA:imphash}"
+ ]
+ }
+ mutate {
+ # Rename fields
+ }
+ }
+ date {
+ match => [ "image_timestamp", "yyyyMMdd-HHmmss" ]
+ target => "image_timestamp"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/6600_winlogbeat_sysmon.conf b/salt/logstash/conf/pipelines/eval/6600_winlogbeat_sysmon.conf
new file mode 100644
index 000000000..200b58497
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/6600_winlogbeat_sysmon.conf
@@ -0,0 +1,23 @@
+# Author: Wes Lambert
+#
+# Last Update: 09/24/2018
+#
+# This conf file is based on accepting Sysmon logs from winlogbeat
+
+filter {
+ if "beat" in [tags] and [source_name] =~ "Microsoft-Windows-Sysmon" {
+ mutate {
+ replace => { "type" => "sysmon" }
+ rename => { "[event_data][User]" => "username" }
+ rename => { "[event_data][DestinationPort]" => "destination_port" }
+ rename => { "[event_data][DestinationIp]" => "destination_ip" }
+ rename => { "[event_data][SourceIp]" => "source_ip" }
+ rename => { "[event_data][Image]" => "image_path" }
+ rename => { "[event_data][ParentImage]" => "parent_image_path" }
+ rename => { "[data][sysmon][targetfilename]" => "target_filename" }
+ rename => { "[event_data][SourceHostname]" => "source_hostname" }
+ rename => { "[event_data][DestinationHostname]" => "destination_hostname" }
+ rename => { "[event_data][TargetFilename]" => "target_filename" }
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/6700_winlogbeat.conf b/salt/logstash/conf/pipelines/eval/6700_winlogbeat.conf
new file mode 100644
index 000000000..222757956
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/6700_winlogbeat.conf
@@ -0,0 +1,17 @@
+# Author: Doug Burks
+#
+# Last Update: 09/24/2018
+#
+# This conf file is for beat data
+
+filter {
+ if "beat" in [tags] {
+ mutate {
+ # As of beats 6.3.0, host is now an object:
+ # https://www.elastic.co/guide/en/beats/libbeat/current/release-notes-6.3.0.html
+ # This creates a conflict with our existing host string.
+ # So let's rename the host object to beat_host.
+ rename => { "host" => "beat_host" }
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/7100_osquery_wel.conf b/salt/logstash/conf/pipelines/eval/7100_osquery_wel.conf
new file mode 100644
index 000000000..b4d77d83f
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/7100_osquery_wel.conf
@@ -0,0 +1,23 @@
+# Author: Josh Brower
+# Last Update: 12/28/2018
+# If log is tagged osquery and there is an eventid column - then cleanup and parse out the EventData column
+
+filter {
+ if "osquery" in [tags] and [osquery][columns][eventid] {
+
+ mutate {
+ gsub => ["[osquery][columns][data]", "\\x0A", ""]
+ }
+
+ json {
+ source => "[osquery][columns][data]"
+ target => "[osquery][columns][data]"
+ }
+
+ mutate {
+ merge => { "[osquery][columns]" => "[osquery][columns][data]" }
+ remove_field => ["[osquery][columns][data]"]
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/salt/logstash/conf/pipelines/eval/8001_postprocess_common_ip_augmentation.conf b/salt/logstash/conf/pipelines/eval/8001_postprocess_common_ip_augmentation.conf
new file mode 100644
index 000000000..d28449da6
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/8001_postprocess_common_ip_augmentation.conf
@@ -0,0 +1,58 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 5/20/2017
+
+filter {
+ if [source_ip] {
+ if [source_ip] == "-" {
+ mutate {
+ replace => { "source_ip" => "0.0.0.0" }
+ }
+ }
+ if [source_ip] =~ "10\." or [source_ip] =~ "192\.168\." or [source_ip] =~ "172\.(1[6-9]|2[0-9]|3[0-1])\." or [source_ip] =~ "fe80::20c:29ff:fe19:f7d" or [source_ip] =~ "::1" {
+ mutate {
+ }
+ } else {
+ geoip {
+ source => "[source_ip]"
+ target => "source_geo"
+ }
+ }
+ if [source_ip] {
+ mutate {
+ add_field => { "ips" => "%{source_ip}" }
+ add_field => { "source_ips" => [ "%{source_ip}" ] }
+ }
+ }
+ }
+ if [destination_ip] {
+ if [destination_ip] == "-" {
+ mutate {
+ replace => { "destination_ip" => "0.0.0.0" }
+ }
+ }
+ if [destination_ip] =~ "10\." or [destination_ip] =~ "192\.168\." or [destination_ip] =~ "172\.(1[6-9]|2[0-9]|3[0-1])\." or [destination_ip] =~ "239.255.255.250" or [destination_ip] =~ "224\.0\.0\." or [destination_ip] =~ "255.255.255.255" or [destination_ip] =~ "ff02::fb" or [destination_ip] =~ "fe80::20c:29ff:fe19:f7d" or [destination_ip] =~ "224\.0\.1\." {
+ mutate {
+ }
+ }
+ else {
+ geoip {
+ source => "[destination_ip]"
+ target => "destination_geo"
+ }
+ }
+ }
+ if [destination_ip] {
+ mutate {
+ add_field => { "ips" => "%{destination_ip}" }
+ add_field => { "destination_ips" => [ "%{destination_ip}" ] }
+ }
+ }
+}
+ #if [source_ip] or [destination_ip] {
+ # mutate {
+ #add_tag => [ "conf_file_8001"]
+ # }
+ #}
+
diff --git a/salt/logstash/conf/pipelines/eval/8007_postprocess_http.conf b/salt/logstash/conf/pipelines/eval/8007_postprocess_http.conf
new file mode 100644
index 000000000..b9c9d224b
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/8007_postprocess_http.conf
@@ -0,0 +1,27 @@
+# Original Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 5/13/2017
+
+filter {
+ if [type] == "bro_http" {
+ if [uri] {
+ ruby {
+ code => "event.set('uri_length', event.get('uri').length)"
+ }
+ }
+ if [virtual_host] {
+ ruby {
+ code => "event.set('virtual_host_length', event.get('virtual_host').length)"
+ }
+ }
+ if [useragent] {
+ ruby {
+ code => "event.set('useragent_length', event.get('useragent').length)"
+ }
+ }
+ mutate {
+ ##add_tag => [ "conf_file_8007"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/8200_postprocess_tagging.conf b/salt/logstash/conf/pipelines/eval/8200_postprocess_tagging.conf
new file mode 100644
index 000000000..e698b3ce3
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/8200_postprocess_tagging.conf
@@ -0,0 +1,63 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [destination_ip] {
+ if [destination_ip] =~ "10\." or [destination_ip] =~ "192\.168\." or [destination_ip] =~ "172\.(1[6-9]|2[0-9]|3[0-1])\." {
+ mutate {
+ add_tag => [ "internal_destination" ]
+ }
+ } else {
+ mutate {
+ add_tag => [ "external_destination" ]
+ }
+ }
+ if "internal_destination" not in [tags] {
+ if [destination_ip] == "198.41.0.4" or [destination_ip] == "192.228.79.201" or [destination_ip] == "192.33.4.12" or [destination_ip] == "199.7.91.13" or [destination_ip] == "192.203.230.10" or [destination_ip] == "192.5.5.241" or [destination_ip] == "192.112.36.4" or [destination_ip] == "198.97.190.53" or [destination_ip] == "192.36.148.17" or [destination_ip] == "192.58.128.30" or [destination_ip] == "193.0.14.129" or [destination_ip] == "199.7.83.42" or [destination_ip] == "202.12.27.33" {
+ mutate {
+ add_tag => [ "root_dns_server" ]
+ }
+ }
+ }
+ # Customize this section to your environment
+ if [destination_ip] == "74.40.74.40" or [destination_ip] == "74.40.74.41" {
+ mutate {
+ add_tag => [ "authorized_dns_server" ]
+ }
+ }
+ }
+ if [source_ip] {
+ if [source_ip] =~ "10\." or [source_ip] =~ "192\.168\." or [source_ip] =~ "172\.(1[6-9]|2[0-9]|3[0-1])\." {
+ mutate {
+ add_tag => [ "internal_source" ]
+ }
+ } else {
+ mutate {
+ add_tag => [ "external_source" ]
+ }
+ }
+ if "internal_source" not in [tags] {
+ if [source_ip] == "198.41.0.4" or [source_ip] == "192.228.79.201" or [source_ip] == "192.33.4.12" or [source_ip] == "199.7.91.13" or [source_ip] == "192.203.230.10" or [source_ip] == "192.5.5.241" or [source_ip] == "192.112.36.4" or [source_ip] == "198.97.190.53" or [source_ip] == "192.36.148.17" or [source_ip] == "192.58.128.30" or [source_ip] == "193.0.14.129" or [source_ip] == "199.7.83.42" or [source_ip] == "202.12.27.33" {
+ mutate {
+ add_tag => [ "root_dns_server" ]
+ }
+ }
+ }
+ # Customize this section to your environment
+ if [destination_ip] == "74.40.74.40" and "authorized_dns_server" not in [tags] or [destination_ip] == "74.40.74.41" and "authorized_dns_server" not in [tags] {
+ mutate {
+ add_tag => [ "authorized_dns_server" ]
+ }
+ }
+ mutate {
+ ##add_tag => [ "conf_file_8200"]
+ }
+ }
+ if [type] =~ /ossec|snort|firewall/ or "firewall" in [tags] {
+ mutate {
+ remove_tag => [ "syslog" ]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/8998_postprocess_log_elapsed.conf b/salt/logstash/conf/pipelines/eval/8998_postprocess_log_elapsed.conf
new file mode 100644
index 000000000..478c6b0e0
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/8998_postprocess_log_elapsed.conf
@@ -0,0 +1,19 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ ruby {
+ code => "event.set('task_end', Time.now.to_f)"
+ }
+ ruby {
+ code => "event.set('logstash_time', event.get('task_end') - event.get('task_start'))"
+ }
+ mutate {
+ remove_field => [ 'task_start', 'task_end' ]
+ }
+ mutate {
+ #add_tag => [ "conf_file_8998"]
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/8999_postprocess_rename_type.conf b/salt/logstash/conf/pipelines/eval/8999_postprocess_rename_type.conf
new file mode 100644
index 000000000..383fd9827
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/8999_postprocess_rename_type.conf
@@ -0,0 +1,8 @@
+# Author: Doug Burks
+# Last Update: 12/10/2017
+
+filter {
+ mutate {
+ rename => [ "type", "event_type" ]
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9000_output_bro.conf b/salt/logstash/conf/pipelines/eval/templates/9000_output_bro.conf
new file mode 100644
index 000000000..2beafc8be
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9000_output_bro.conf
@@ -0,0 +1,32 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- set NAME = grains.host -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+
+filter {
+ if "bro" in [tags] and "test_data" not in [tags] and "import" not in [tags] {
+ mutate {
+ add_field => { "sensor_name" => "{{ NAME }}" }
+ }
+ }
+}
+output {
+ if "bro" in [tags] and "test_data" not in [tags] and "import" not in [tags] {
+# stdout { codec => rubydebug }
+ elasticsearch {
+ pipeline => "%{event_type}"
+ hosts => "{{ ES }}"
+ index => "logstash-bro-%{+YYYY.MM.dd}"
+ template_name => "logstash"
+ template => "/logstash-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9001_output_switch.conf b/salt/logstash/conf/pipelines/eval/templates/9001_output_switch.conf
new file mode 100644
index 000000000..949a738ab
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9001_output_switch.conf
@@ -0,0 +1,27 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if "switch" in [tags] and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9001"]
+ }
+ }
+}
+output {
+ if "switch" in [tags] and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-switch-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9002_output_import.conf b/salt/logstash/conf/pipelines/eval/templates/9002_output_import.conf
new file mode 100644
index 000000000..88fbc7551
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9002_output_import.conf
@@ -0,0 +1,27 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Updated by: Doug Burks
+# Last Update: 5/16/2017
+
+filter {
+ if "import" in [tags] and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9002"]
+ }
+ }
+}
+output {
+ if "import" in [tags] and "test_data" not in [tags] {
+# stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-import-%{+YYYY.MM.dd}"
+ template_name => "logstash-*"
+ template => "/logstash-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9004_output_flow.conf b/salt/logstash/conf/pipelines/eval/templates/9004_output_flow.conf
new file mode 100644
index 000000000..3dbd34f16
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9004_output_flow.conf
@@ -0,0 +1,27 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "sflow" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9004"]
+ }
+ }
+}
+output {
+ if [event_type] == "sflow" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-flow-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9026_output_dhcp.conf b/salt/logstash/conf/pipelines/eval/templates/9026_output_dhcp.conf
new file mode 100644
index 000000000..a63ac5f98
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9026_output_dhcp.conf
@@ -0,0 +1,26 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "dhcp" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9026"]
+ }
+ }
+}
+output {
+ if [event_type] == "dhcp" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9029_output_esxi.conf b/salt/logstash/conf/pipelines/eval/templates/9029_output_esxi.conf
new file mode 100644
index 000000000..229de6b9c
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9029_output_esxi.conf
@@ -0,0 +1,25 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "esxi" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9029"]
+ }
+ }
+}
+output {
+ if [event_type] == "esxi" and "test_data" not in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9030_output_greensql.conf b/salt/logstash/conf/pipelines/eval/templates/9030_output_greensql.conf
new file mode 100644
index 000000000..a6d16b95d
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9030_output_greensql.conf
@@ -0,0 +1,25 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "greensql" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9030"]
+ }
+ }
+}
+output {
+ if [event_type] == "greensql" and "test_data" not in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9031_output_iis.conf b/salt/logstash/conf/pipelines/eval/templates/9031_output_iis.conf
new file mode 100644
index 000000000..6650d8a7d
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9031_output_iis.conf
@@ -0,0 +1,26 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "iis" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9031"]
+ }
+ }
+}
+output {
+ if [event_type] == "iis" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9032_output_mcafee.conf b/salt/logstash/conf/pipelines/eval/templates/9032_output_mcafee.conf
new file mode 100644
index 000000000..ca982967d
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9032_output_mcafee.conf
@@ -0,0 +1,26 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "mcafee" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9032"]
+ }
+ }
+}
+output {
+ if [event_type] == "mcafee" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9033_output_snort.conf b/salt/logstash/conf/pipelines/eval/templates/9033_output_snort.conf
new file mode 100644
index 000000000..6c310b91e
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9033_output_snort.conf
@@ -0,0 +1,29 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "ids" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9033"]
+ }
+ }
+}
+output {
+ if [event_type] == "ids" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-ids-%{+YYYY.MM.dd}"
+ template_name => "logstash"
+ template => "/logstash-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9034_output_syslog.conf b/salt/logstash/conf/pipelines/eval/templates/9034_output_syslog.conf
new file mode 100644
index 000000000..56a6527b8
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9034_output_syslog.conf
@@ -0,0 +1,28 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 5/15/2017
+
+filter {
+ if "syslog" in [tags] and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9034"]
+ }
+ }
+}
+output {
+ if "syslog" in [tags] and "test_data" not in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-syslog-%{+YYYY.MM.dd}"
+ template_name => "logstash"
+ template => "/logstash-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9100_output_osquery.conf b/salt/logstash/conf/pipelines/eval/templates/9100_output_osquery.conf
new file mode 100644
index 000000000..132f0eb66
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9100_output_osquery.conf
@@ -0,0 +1,32 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Security Onion Solutions
+# Last Update: 2/3/2020
+# Output to ES for osquery tagged logs - EVAL install
+
+
+filter {
+ if "osquery" in [tags] {
+ mutate {
+ rename => { "host" => "beat_host" }
+ remove_tag => ["beat"]
+ }
+ json {
+ source => "message"
+ target => "osquery"
+ }
+ }
+}
+
+output {
+ if "osquery" in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-osquery-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9200_output_firewall.conf b/salt/logstash/conf/pipelines/eval/templates/9200_output_firewall.conf
new file mode 100644
index 000000000..b2ad43963
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9200_output_firewall.conf
@@ -0,0 +1,29 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if "firewall" in [tags] and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9200"]
+ }
+ }
+}
+output {
+ if "firewall" in [tags] and "test_data" not in [tags] {
+# stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-firewall-%{+YYYY.MM.dd}"
+ template_name => "logstash"
+ template => "/logstash-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9300_output_windows.conf b/salt/logstash/conf/pipelines/eval/templates/9300_output_windows.conf
new file mode 100644
index 000000000..d3f9d1919
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9300_output_windows.conf
@@ -0,0 +1,27 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "windows" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9300"]
+ }
+ }
+}
+output {
+ if [event_type] == "windows" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-windows-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9301_output_dns_windows.conf b/salt/logstash/conf/pipelines/eval/templates/9301_output_dns_windows.conf
new file mode 100644
index 000000000..8a56b7044
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9301_output_dns_windows.conf
@@ -0,0 +1,27 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "dns" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9301"]
+ }
+ }
+}
+output {
+ if [event_type] == "dns" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9400_output_suricata.conf b/salt/logstash/conf/pipelines/eval/templates/9400_output_suricata.conf
new file mode 100644
index 000000000..1de235444
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9400_output_suricata.conf
@@ -0,0 +1,28 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- set NAME = grains.host -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "suricata" and "test_data" not in [tags] {
+ mutate {
+ add_field => { "sensor_name" => "{{ NAME }}" }
+ }
+ }
+}
+output {
+ if [event_type] == "suricata" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-ids-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9500_output_beats.conf b/salt/logstash/conf/pipelines/eval/templates/9500_output_beats.conf
new file mode 100644
index 000000000..30900cb93
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9500_output_beats.conf
@@ -0,0 +1,25 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Wes Lambert
+# Last Update: 09/14/2018
+filter {
+ if "beat" in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9500"]
+ }
+ }
+}
+output {
+ if "beat" in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-beats-%{+YYYY.MM.dd}"
+ template_name => "logstash-beats"
+ template => "/beats-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/eval/templates/9600_output_ossec.conf b/salt/logstash/conf/pipelines/eval/templates/9600_output_ossec.conf
new file mode 100644
index 000000000..71d0c28aa
--- /dev/null
+++ b/salt/logstash/conf/pipelines/eval/templates/9600_output_ossec.conf
@@ -0,0 +1,29 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 9/19/2018
+
+filter {
+ if [event_type] =~ "ossec" {
+ mutate {
+ ##add_tag => [ "conf_file_9600"]
+ }
+ }
+}
+
+output {
+ if [event_type] =~ "ossec" or "ossec" in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-ossec-%{+YYYY.MM.dd}"
+ template_name => "logstash-ossec"
+ template => "/logstash-ossec-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/0010_input_hhbeats.conf b/salt/logstash/conf/pipelines/helix/0010_input_hhbeats.conf
new file mode 100644
index 000000000..6b7667f5c
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/0010_input_hhbeats.conf
@@ -0,0 +1,40 @@
+input {
+ beats {
+ port => "5644"
+ ssl => true
+ ssl_certificate_authorities => ["/usr/share/filebeat/ca.crt"]
+ ssl_certificate => "/usr/share/logstash/filebeat.crt"
+ ssl_key => "/usr/share/logstash/filebeat.key"
+ tags => [ "beat" ]
+ }
+}
+filter {
+ if [type] == "ids" or [type] =~ "bro" {
+ mutate {
+ rename => { "host" => "beat_host" }
+ remove_tag => ["beat"]
+ add_field => { "sensor_name" => "%{[beat][name]}" }
+ add_field => { "syslog-host_from" => "%{[beat][name]}" }
+ remove_field => [ "beat", "prospector", "input", "offset" ]
+ }
+ }
+ if [type] =~ "ossec" {
+ mutate {
+ rename => { "host" => "beat_host" }
+ remove_tag => ["beat"]
+ add_field => { "syslog-host_from" => "%{[beat][name]}" }
+ remove_field => [ "beat", "prospector", "input", "offset" ]
+ }
+ }
+ if [type] == "osquery" {
+ mutate {
+ rename => { "host" => "beat_host" }
+ remove_tag => ["beat"]
+ add_tag => ["osquery"]
+ }
+ json {
+ source => "message"
+ target => "osquery"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1033_preprocess_snort.conf b/salt/logstash/conf/pipelines/helix/1033_preprocess_snort.conf
new file mode 100644
index 000000000..897a8ae4b
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1033_preprocess_snort.conf
@@ -0,0 +1,181 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 3/15/2018
+
+filter {
+ if [type] == "ids" {
+ # This is the initial parsing of the log
+ if [engine] == "suricata" {
+ json {
+ source => "message"
+ }
+ mutate {
+ rename => { "alert" => "orig_alert" }
+ rename => { "[orig_alert][gid]" => "gid" }
+ rename => { "[orig_alert][signature_id]" => "sid" }
+ rename => { "[orig_alert][rev]" => "rev" }
+ rename => { "[orig_alert][signature]" => "alert" }
+ rename => { "[orig_alert][category]" => "classification" }
+ rename => { "[orig_alert][severity]" => "priority" }
+ rename => { "[orig_alert][rule]" => "rule_signature" }
+ rename => { "app_proto" => "application_protocol" }
+ rename => { "dest_ip" => "destination_ip" }
+ rename => { "dest_port" => "destination_port" }
+ rename => { "in_iface" => "interface" }
+ rename => { "proto" => "protocol" }
+ rename => { "src_ip" => "source_ip" }
+ rename => { "src_port" => "source_port" }
+ #rename => { "[fileinfo][filename]" => "filename" }
+ #rename => { "[fileinfo][gaps]" => "gaps" }
+ #rename => { "[fileinfo][size]" => "size" }
+ #rename => { "[fileinfo][state]" => "state" }
+ #rename => { "[fileinfo][stored]" => "stored" }
+ #rename => { "[fileinfo][tx_id]" => "tx_id" }
+ #rename => { "[flow][age]" => "duration" }
+ #rename => { "[flow][alerted]" => "flow_alerted" }
+ #rename => { "[flow][bytes_toclient]" => "bytes_to_client" }
+ #rename => { "[flow][bytes_toserver]" => "bytes_to_server" }
+ #rename => { "[flow][end]" => "flow_end" }
+ #rename => { "[flow][pkts_toclient]" => "packets_to_client" }
+ #rename => { "[flow][pkts_toserver]" => "packets_to_server" }
+ #rename => { "[flow][reason]" => "reason" }
+ #rename => { "[flow][start]" => "flow_start" }
+ #rename => { "[flow][state]" => "state" }
+ #rename => { "[netflow][age]" => "duration" }
+ #rename => { "[netflow][bytes]" => "bytes" }
+ #rename => { "[netflow][end]" => "netflow_end" }
+ #rename => { "[netflow][start]" => "netflow_start" }
+ #rename => { "[netflow][pkts]" => "packets" }
+ rename => { "[alert][action]" => "action" }
+ rename => { "[alert][category]" => "category" }
+ rename => { "[alert][gid]" => "gid" }
+ rename => { "[alert][rev]" => "rev" }
+ rename => { "[alert][severity]" => "severity" }
+ rename => { "[alert][signature]" => "signature" }
+ rename => { "[alert][signature_id]" => "sid" }
+ #rename => { "[dns][aa]" => "aa" }
+ #rename => { "[dns][flags]" => "flags" }
+ #rename => { "[dns][id]" => "id" }
+ #rename => { "[dns][qr]" => "qr" }
+ #rename => { "[dns][rcode]" => "rcode_name" }
+ #rename => { "[dns][rrname]" => "rrname" }
+ #rename => { "[dns][rrtype]" => "rrtype" }
+ #rename => { "[dns][tx_id]" => "tx_id" }
+ #rename => { "[dns][type]" => "record_type" }
+ #rename => { "[dns][version]" => "version" }
+ rename => { "[http][hostname]" => "virtual_host" }
+ rename => { "[http][http_content_type]" => "content_type" }
+ rename => { "[http][http_port]" => "http_port" }
+ rename => { "[http][http_method]" => "method" }
+ rename => { "[http][http_user_agent]" => "useragent" }
+ #rename => { "[http][length]" => "payload_length" }
+ #rename => { "[http][protocol]" => "http_version" }
+ rename => { "[http][status]" => "status_message" }
+ rename => { "[http][url]" => "url" }
+ #rename => { "[metadata][flowbits]" => "flowbits" }
+ rename => { "[tls][fingerprint]" => "certificate_serial_number" }
+ rename => { "[tls][issuerdn]" => "issuer_distinguished_name" }
+ rename => { "[tls][notafter]" => "certificate_not_valid_after" }
+ rename => { "[tls][notbefore]" => "certificate_not_valid_before" }
+ rename => { "[tls][subject]" => "certificate_common_name" }
+ rename => { "[tls][version]" => "tls_version" }
+ rename => { "event_type" => "ids_event_type" }
+ remove_field => [ "offset", "orig_alert", "beat", "input", "prospector" ]
+ remove_tag => [ "beats_input_codec_plain_applied" ]
+ add_tag => [ "eve" ]
+
+ }
+ } else {
+ grok {
+ match => ["message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+<%{DATA:interface}>\s+{%{DATA:protocol}}\s+(?:%{IPV4:source_ip}|%{IPV6:source_ip}):%{INT:source_port}\s+->\s+(?:%{IPV4:destination_ip}|%{IPV6:destination_ip}):%{INT:destination_port}",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+<%{DATA:interface}>\s+{%{DATA:protocol}}\s(?:%{IPV4:source_ip}|%{IPV6:source_ip})\s+->\s+(?:%{IPV4:destination_ip}|%{IPV6:destination_ip})",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+{%{DATA:protocol}}\s+(?:%{IPV4:source_ip}|%{IPV6:source_ip}):%{INT:source_port}\s+->\s+%{IPV4:destination_ip}:%{INT:destination_port}",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+{%{DATA:protocol}}\s(?:%{IPV4:source_ip}|%{IPV6:source_ip})\s+->\s+(?:%{IPV4:destination_ip}|%{IPV6:destination_ip})",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+{%{DATA:protocol}}\s+(?:%{IPV4:source_ip}|%{IPV6:source_ip}):%{INT:source_port}\s+->\s+(?:%{IPV4:destination_ip}|%{IPV6:destination_ip}):%{INT:destination_port}",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+{%{DATA:protocol}}\s(?:%{IPV4:source_ip}|%{IPV6:source_ip})\s+->\s+(?:%{IPV4:source_ip}|%{IPV6:source_ip})",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+{%{DATA:protocol}}",
+ "message", "\A%{TIME} pid\(%{INT}\) Alert Received: %{INT} %{INT:priority} %{DATA:classification} %{DATA:interface} \{%{DATA:timestamp}} %{INT} %{INT} \{%{DATA:alert}} %{IP:source_ip} %{IP:destination_ip} %{INT:protocol} %{INT:source_port} %{INT:destination_port} %{INT:gid} %{INT:sid} %{INT:rev} %{INT} %{INT}\Z",
+ "message", "%{GREEDYDATA:alert}"]
+ }
+ }
+ if [timestamp] {
+ mutate {
+ add_field => { "logstash_timestamp" => "%{@timestamp}" }
+ }
+ mutate {
+ convert => { "logstash_timestamp" => "string" }
+ }
+ date {
+ match => [ "timestamp", "ISO8601" ]
+ }
+ mutate {
+ rename => { "logstash_timestamp" => "timestamp" }
+ }
+ }
+
+ # If the alert is a Snort GPL alert break it apart for easier reading and categorization
+ if [alert] =~ "GPL " {
+ # This will parse out the category type from the alert
+ grok {
+ match => { "alert" => "GPL\s+%{DATA:category}\s" }
+ }
+ # This will store the category
+ mutate {
+ add_field => { "rule_type" => "Snort GPL" }
+ lowercase => [ "category"]
+ }
+ }
+ # If the alert is an Emerging Threat alert break it apart for easier reading and categorization
+ if [alert] =~ "ET " {
+ # This will parse out the category type from the alert
+ grok {
+ match => { "alert" => "ET\s+%{DATA:category}\s" }
+ }
+ # This will store the category
+ mutate {
+ add_field => { "rule_type" => "Emerging Threats" }
+ lowercase => [ "category"]
+ }
+ }
+ # I recommend changing the field types below to integer so searches can do greater than or less than
+ # and also so math functions can be ran against them
+ mutate {
+ convert => [ "source_port", "integer" ]
+ convert => [ "destination_port", "integer" ]
+ convert => [ "gid", "integer" ]
+ convert => [ "sid", "integer" ]
+ # remove_field => [ "message"]
+ }
+ # This will translate the priority field into a severity field of either High, Medium, or Low
+ if [priority] == 1 {
+ mutate {
+ add_field => { "severity" => "High" }
+ }
+ }
+ if [priority] == 2 {
+ mutate {
+ add_field => { "severity" => "Medium" }
+ }
+ }
+ if [priority] == 3 {
+ mutate {
+ add_field => { "severity" => "Low" }
+ }
+ }
+ # This section adds URLs to lookup information about a rule online
+ if [sid] and [sid] > 0 and [sid] < 1000000 {
+ mutate {
+ add_field => [ "signature_info", "https://www.snort.org/search?query=%{gid}-%{sid}" ]
+ }
+ }
+ if [sid] and [sid] > 1999999 and [sid] < 2999999 {
+ mutate {
+ add_field => [ "signature_info", "http://doc.emergingthreats.net/%{sid}" ]
+ }
+ }
+# mutate {
+ #add_tag => [ "conf_file_1033"]
+# }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1100_preprocess_bro_conn.conf b/salt/logstash/conf/pipelines/helix/1100_preprocess_bro_conn.conf
new file mode 100644
index 000000000..b64b56bbe
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1100_preprocess_bro_conn.conf
@@ -0,0 +1,77 @@
+# Original Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+#
+# This conf file is based on accepting logs for conn.log from Bro systems
+filter {
+ if [type] == "bro_conn" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ rename => { "proto" => "protocol" }
+ #service
+ #duration
+ rename => { "orig_bytes" => "original_bytes" }
+ rename => { "resp_bytes" => "respond_bytes" }
+ rename => { "conn_state" => "connection_state" }
+ #local_orig
+ rename => { "local_resp" => "local_respond" }
+ #missed_bytes
+ #history
+ rename => { "orig_pkts" => "original_packets" }
+ rename => { "orig_ip_bytes" => "original_ip_bytes" }
+ rename => { "resp_pkts" => "respond_packets" }
+ rename => { "resp_ip_bytes" => "respond_ip_bytes" }
+ #tunnel_parents
+ rename => { "orig_cc" => "original_country_code" }
+ rename => { "resp_cc" => "respond_country_code" }
+ rename => { "sensorname" => "sensor_name" }
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","protocol","service","duration","original_bytes","respond_bytes","connection_state","local_orig","local_respond","missed_bytes","history","original_packets","original_ip_bytes","respond_packets","respond_ip_bytes","tunnel_parents","sensor_name"]
+
+ # If you use a custom delimiter, change the following value in between the quotes to your delimiter. Otherwise, insert a literal in between the two quotes on your logstash system, use a text editor like nano that doesn't convert tabs to spaces.
+ separator => " "
+ }
+ }
+
+ translate {
+ field => "connection_state"
+
+ destination => "connection_state_description"
+
+ dictionary => [
+ "S0", "Connection attempt seen, no reply",
+ "S1", "Connection established, not terminated",
+ "S2", "Connection established and close attempt by originator seen (but no reply from responder)",
+ "S3", "Connection established and close attempt by responder seen (but no reply from originator)",
+ "SF", "Normal SYN/FIN completion",
+ "REJ", "Connection attempt rejected",
+ "RSTO", "Connection established, originator aborted (sent a RST)",
+ "RSTR", "Established, responder aborted",
+ "RSTOS0", "Originator sent a SYN followed by a RST, we never saw a SYN-ACK from the responder",
+ "RSTRH", "Responder sent a SYN ACK followed by a RST, we never saw a SYN from the (purported) originator",
+ "SH", "Originator sent a SYN followed by a FIN, we never saw a SYN ACK from the responder (hence the connection was 'half' open)",
+ "SHR", "Responder sent a SYN ACK followed by a FIN, we never saw a SYN from the originator",
+ "OTH", "No SYN seen, just midstream traffic (a 'partial connection' that was not later closed)"
+ ]
+ }
+ mutate {
+ #add_tag => [ "conf_file_1100"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1101_preprocess_bro_dhcp.conf b/salt/logstash/conf/pipelines/helix/1101_preprocess_bro_dhcp.conf
new file mode 100644
index 000000000..e7e7f12c0
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1101_preprocess_bro_dhcp.conf
@@ -0,0 +1,56 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks and Wes Lambert
+# Last Update: 1/3/2019
+#
+# This conf file is based on accepting logs for dhcp.log from Bro systems
+filter {
+ if [type] == "bro_dhcp" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #mac
+ #assigned_ip
+ #lease_time
+ rename => { "trans_id" => "transaction_id" }
+ # new dhcp log format
+ rename => { "assigned_addr" => "assigned_ip" }
+ rename => { "client_addr" => "source_ip" }
+ rename => { "server_addr" => "destination_ip" }
+ rename => { "requested_addr" => "requested_ip" }
+ rename => { "domain" => "domain_name" }
+ rename => { "host_name" => "hostname" }
+ rename => { "msg_types" => "message_types" }
+ rename => { "uids" => "uid" }
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ # Bro logs in TSV format
+ csv {
+ columns => [ "timestamp", "uid", "source_ip", "destination_ip", "mac", "hostname", "client_fqdn", "domain_name", "requested_ip", "assigned_ip", "lease_time","client_message", "server_message", "message_types", "duration" ]
+ separator => " "
+ }
+ # Remove fields with empty values (-) to prevent field data type conflict
+ ruby {
+ code =>"
+ hash = event.to_hash.each do |key,value|
+ if value == '-'
+ event.remove(key)
+ end
+ end"
+ }
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1102_preprocess_bro_dns.conf b/salt/logstash/conf/pipelines/helix/1102_preprocess_bro_dns.conf
new file mode 100644
index 000000000..340cdafbc
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1102_preprocess_bro_dns.conf
@@ -0,0 +1,74 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for dns.log from Bro systems
+filter {
+ if [type] == "bro_dns" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ rename => { "proto" => "protocol" }
+ rename => { "trans_id" => "transaction_id" }
+ #rtt field
+ #query field
+ rename => { "qclass" => "query_class" }
+ rename => { "qclass_name" => "query_class_name" }
+ rename => { "qtype" => "query_type" }
+ rename => { "qtype_name" => "query_type_name" }
+ #rcode
+ #rcode_name
+ rename => { "AA" => "aa" }
+ rename => { "TC" => "tc" }
+ rename => { "RD" => "rd" }
+ rename => { "RA" => "ra" }
+ rename => { "Z" => "z" }
+ #answers
+ rename => { "TTLs" => "ttls" }
+ #rejected
+ }
+ } else {
+
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","protocol","transaction_id","rtt","query","query_class","query_class_name","query_type","query_type_name","rcode","rcode_name","aa","tc","rd","ra","z","answers","ttls","rejected"]
+
+ #If you use a custom delimiter, change the following value in between the quotes to your delimiter. Otherwise, insert a literal in between the two quotes on your logstash system, use a text editor like nano that doesn't convert tabs to spaces.
+ separator => " "
+ }
+ }
+
+ mutate {
+ add_tag => [ "dns" ]
+ }
+ if [ttls] == "-" {
+ mutate {
+ remove_field => [ "ttls" ]
+ }
+ }
+ if [rtt] == "-" {
+ mutate {
+ remove_field => [ "rtt" ]
+ }
+ }
+ #mutate {
+ #convert => [ "rtt", "float" ]
+ #}
+ mutate {
+ #add_tag => [ "conf_file_1102"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1103_preprocess_bro_dpd.conf b/salt/logstash/conf/pipelines/helix/1103_preprocess_bro_dpd.conf
new file mode 100644
index 000000000..cc3b6ad39
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1103_preprocess_bro_dpd.conf
@@ -0,0 +1,42 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for dpd.log from Bro systems
+filter {
+ if [type] == "bro_dpd" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ rename => { "proto" => "protocol" }
+ #analyzer
+ #failure_reason
+ }
+ } else {
+
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","protocol","analyzer","failure_reason"]
+ separator => " "
+ }
+ }
+
+ mutate {
+ #add_tag => [ "conf_file_1103"]
+ }
+
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1104_preprocess_bro_files.conf b/salt/logstash/conf/pipelines/helix/1104_preprocess_bro_files.conf
new file mode 100644
index 000000000..88c524ea5
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1104_preprocess_bro_files.conf
@@ -0,0 +1,64 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for files.log from Bro systems
+filter {
+ if [type] == "bro_files" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #fuid
+ rename => { "tx_hosts" => "file_ip" }
+ rename => { "rx_hosts" => "destination_ip" }
+ rename => { "conn_uids" => "connection_uids" }
+ #source field
+ #depth field
+ rename => { "analyzers" => "analyzer" }
+ rename => { "mime_type" => "mimetype" }
+ rename => { "filename" => "file_name" }
+ #duration
+ #local_orig
+ #is_orig
+ #seen_bytes
+ #total_bytes
+ #missing_bytes
+ #overflow_bytes
+ rename => { "timedout" => "timed_out" }
+ #parent_fuid
+ #md5
+ #sha1
+ #sha256
+ #extracted
+ #extracted_cutoff
+ #extracted_size
+ }
+ } else {
+
+ csv {
+ columns => ["timestamp","fuid","file_ip","destination_ip","connection_uids","source","depth","analyzer","mimetype","file_name","duration","local_orig","is_orig","seen_bytes","total_bytes","missing_bytes","overflow_bytes","timed_out","parent_fuid","md5","sha1","sha256","extracted","extracted_cutoff","extracted_size"]
+ separator => " "
+ }
+ if [destination_ip] =~ /,/ {
+ mutate {
+ split => { "destination_ip" => "," }
+ }
+ }
+ if [file_ip] =~ /,/ {
+ mutate {
+ split => { "file_ip" => "," }
+ }
+ }
+ }
+
+ mutate {
+ #add_tag => [ "conf_file_1104"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1105_preprocess_bro_ftp.conf b/salt/logstash/conf/pipelines/helix/1105_preprocess_bro_ftp.conf
new file mode 100644
index 000000000..c37ac71a0
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1105_preprocess_bro_ftp.conf
@@ -0,0 +1,56 @@
+# Original Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for ftp.log from Bro systems
+filter {
+ if [type] == "bro_ftp" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ rename => { "user" => "username" }
+ #password
+ rename => { "command" => "ftp_command" }
+ rename => { "arg" => "ftp_argument" }
+ rename => { "mime_type" => "mimetype" }
+ #file_size
+ #reply_code
+ rename => { "reply_msg" => "reply_message" }
+ rename => { "data_channel.passive" => "data_channel_passive" }
+ rename => { "data_channel.orig_h" => "data_channel_source_ip" }
+ rename => { "data_channel.resp_h" => "data_channel_destination_ip" }
+ rename => { "data_channel.resp_p" => "data_channel_destination_port" }
+ #fuid
+ }
+
+ mutate {
+ convert => { "reply" => "string" }
+ }
+
+ } else {
+
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","username","password","ftp_command","ftp_argument","mimetype","file_size","reply_code","reply_message","data_channel_passive","data_channel_source_ip","data_channel_destination_ip","data_channel_destination_port","fuid"]
+ separator => " "
+ }
+ }
+
+ mutate {
+ #add_tag => [ "conf_file_1105"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1106_preprocess_bro_http.conf b/salt/logstash/conf/pipelines/helix/1106_preprocess_bro_http.conf
new file mode 100644
index 000000000..3cff8faa7
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1106_preprocess_bro_http.conf
@@ -0,0 +1,77 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+#
+# This conf file is based on accepting logs for http.log from Bro systems
+filter {
+ if [type] == "bro_http" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+
+ # Rename logstash tags field to avoid being overwritten by Bro's http tags field
+ mutate {
+ rename => { "tags" => "tags-orig" }
+ }
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #trans_depth
+ #method
+ rename => { "host" => "virtual_host" }
+ #uri
+ #referrer
+ #version
+ #convert => { "version" => "string" }
+ rename => { "user_agent" => "useragent" }
+ #origin
+ rename => { "request_body_len" => "request_body_length" }
+ rename => { "response_body_len" => "response_body_length" }
+ #status_code
+ #status_message
+ rename => { "status_msg" => "status_message" }
+ #info_code
+ rename => { "info_msg" => "info_message" }
+ #tags
+ # Rename http tags field to http-tags
+ rename => { "tags" => "http-tags" }
+ # Rename logstash tags field to tags
+ rename => { "tags-orig" => "tags" }
+ #username
+ #password
+ #proxied
+ #orig_fuids
+ #orig_filenames
+ #orig_mime_types
+ #resp_fuids
+ #resp_filenames
+ #resp_mime_types
+ }
+ if [http-tags] {
+ mutate {
+ remove_field => [ "http-tags" ]
+ }
+ }
+ } else {
+ grok {
+ match => [ "message", "(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*?))\t(?(.*))\t(?(.*))\t(?(.*?))\t(?(.*))" ]
+ }
+ }
+
+ if [useragent] == "-" {
+ mutate {
+ remove_field => [ "useragent" ]
+ }
+ }
+ mutate {
+ #add_tag => [ "conf_file_1106"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1107_preprocess_bro_irc.conf b/salt/logstash/conf/pipelines/helix/1107_preprocess_bro_irc.conf
new file mode 100644
index 000000000..841c4aa44
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1107_preprocess_bro_irc.conf
@@ -0,0 +1,46 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for irc.log from Bro systems
+filter {
+ if [type] == "bro_irc" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #nick
+ rename => { "user" => "irc_username" }
+ rename => { "command" => "irc_command" }
+ #value
+ rename => { "addl" => "additional_info" }
+ #dcc_file_name
+ #dcc_file_size
+ #dcc_mime_type
+ #fuid
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","nick","irc_username","irc_command","value","additional_info","dcc_file_name","dcc_file_size","dcc_mime_type","fuid"]
+ separator => " "
+ }
+ }
+
+ mutate {
+ #add_tag => [ "conf_file_1107"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1108_preprocess_bro_kerberos.conf b/salt/logstash/conf/pipelines/helix/1108_preprocess_bro_kerberos.conf
new file mode 100644
index 000000000..89754126a
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1108_preprocess_bro_kerberos.conf
@@ -0,0 +1,56 @@
+# Original Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for kerberos.log from Bro systems
+filter {
+ if [type] == "bro_kerberos" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #request_type
+ #client
+ #service
+ rename => { "success" => "kerberos_success" }
+ rename => { "error_msg" => "error_message" }
+ rename => { "from" => "valid_from" }
+ rename => { "till" => "valid_till" }
+ #cipher
+ #forwardable
+ #renewable
+ rename => { "client_cert_subject" => "client_certificate_subject" }
+ rename => { "client_cert_fuid" => "client_certificate_fuid" }
+ rename => { "server_cert_subject" => "server_certificate_subject" }
+ rename => { "server_cert_fuid" => "server_certificate_fuid" }
+ }
+
+ mutate {
+ convert => { "kerberos_success" => "string" }
+ convert => { "renewable" => "string" }
+ }
+
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","request_type","client","service","kerberos_success","error_message","valid_from","valid_till","cipher","forwardable","renewable","client_certificate_subject","client_certificate_fuid","server_certificate_subject","server_certificate_fuid"]
+ separator => " "
+ }
+ }
+ mutate {
+ #add_tag => [ "conf_file_1108"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1109_preprocess_bro_notice.conf b/salt/logstash/conf/pipelines/helix/1109_preprocess_bro_notice.conf
new file mode 100644
index 000000000..2c22896d8
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1109_preprocess_bro_notice.conf
@@ -0,0 +1,56 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for notice.log from Bro systems
+filter {
+ if [type] == "bro_notice" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #fuid
+ rename => { "mime" => "file_mime_type" }
+ rename => { "desc" => "file_description" }
+ rename => { "proto" => "protocol" }
+ rename => { "note" => "note" }
+ rename => { "msg" => "msg" }
+ rename => { "sub" => "sub_msg" }
+ rename => { "src" => "source_ip" }
+ rename => { "dst" => "destination_ip" }
+ #p
+ #n
+ rename => { "peer_descr" => "peer_description" }
+ rename => { "actions" => "action" }
+ #suppress_for
+ #destination_country_code
+ #destination_region
+ #destination_city
+ #destination_latitude
+ #destination_longitude
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","fuid","file_mime_type","file_description","protocol","note","msg","sub_msg","source_ip","destination_ip","p","n","peer_description","action","suppress_for","destination_country_code","destination_region","destination_city","destination_latitude","destination_longitude"]
+ separator => " "
+ }
+ }
+
+ mutate {
+ #add_tag => [ "conf_file_1109"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1110_preprocess_bro_rdp.conf b/salt/logstash/conf/pipelines/helix/1110_preprocess_bro_rdp.conf
new file mode 100644
index 000000000..435a2ca3e
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1110_preprocess_bro_rdp.conf
@@ -0,0 +1,52 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+#
+# This conf file is based on accepting logs for rdp.log from Bro systems
+filter {
+ if [type] == "bro_rdp" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #cookie
+ #result
+ #security_protocol
+ #client_channels
+ #keyboard_layout
+ #client_build
+ #client_name
+ rename => { "client_dig_product_id" => "client_digital_product_id" }
+ #desktop_width
+ #desktop_height
+ #requested_color_depth
+ rename => { "cert_type" => "certificate_type" }
+ rename => { "cert_count" => "certificate_count" }
+ rename => { "cert_permanent" => "certificate_permanent" }
+ #encryption_level
+ #encryption_method
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","cookie","result","security_protocol","client_channels","keyboard_layout","client_build","client_name","client_digital_product_id","desktop_width","desktop_height","requested_color_depth","certificate_type","certificate_count","certificate_permanent","encryption_level","encryption_method"]
+ separator => " "
+ }
+ }
+
+ mutate {
+ #add_tag => [ "conf_file_1110"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1111_preprocess_bro_signatures.conf b/salt/logstash/conf/pipelines/helix/1111_preprocess_bro_signatures.conf
new file mode 100644
index 000000000..0d3c1dc57
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1111_preprocess_bro_signatures.conf
@@ -0,0 +1,43 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for signatures.log from Bro systems
+filter {
+ if [type] == "bro_signatures" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #note
+ rename => { "sig_id" => "signature_id" }
+ rename => { "event_msg" => "event_message" }
+ rename => { "sub_msg" => "sub_message" }
+ rename => { "sig_count" => "signature_count" }
+ #host_count
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","note","signature_id","event_message","sub_message","signature_count","host_count"]
+ separator => " "
+ }
+ }
+
+ mutate {
+ #add_tag => [ "conf_file_1111"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1112_preprocess_bro_smtp.conf b/salt/logstash/conf/pipelines/helix/1112_preprocess_bro_smtp.conf
new file mode 100644
index 000000000..743bd5716
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1112_preprocess_bro_smtp.conf
@@ -0,0 +1,65 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for smtp.log from Bro systems
+filter {
+ if [type] == "bro_smtp" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #trans_depth
+ #helo
+ rename => { "mailfrom" => "mail_from" }
+ rename => { "rcptto" => "recipient_to" }
+ rename => { "date" => "mail_date" }
+ #from
+ #to
+ #cc
+ #reply_to
+ rename => { "msg_id" => "message_id" }
+ #in_reply_to
+ #subject
+ #x_originating_ip
+ #first_received
+ #second_received
+ #last_reply
+ #path
+ rename => { "user_agent" => "useragent" }
+ #tls
+ #fuids
+ #is_webmail
+ }
+
+ mutate {
+ convert => { "tls" => "string" }
+ convert => { "is_webmail" => "string" }
+ }
+
+ } else {
+ grok {
+ match => [ "message", "(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))" ]
+ }
+ }
+
+ if [useragent] == "-" {
+ mutate {
+ remove_field => [ "useragent" ]
+ }
+ }
+ mutate {
+ #add_tag => [ "conf_file_1112"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1113_preprocess_bro_snmp.conf b/salt/logstash/conf/pipelines/helix/1113_preprocess_bro_snmp.conf
new file mode 100644
index 000000000..6a00a5244
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1113_preprocess_bro_snmp.conf
@@ -0,0 +1,47 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for snmp.log from Bro systems
+filter {
+ if [type] == "bro_snmp" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #duration
+ #version
+ #convert => { "version" => "string" }
+ #community
+ #get_requests
+ #get_bulk_requests
+ #get_responses
+ #set_requests
+ #display_string
+ #up_since
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","duration","version","community","get_requests","get_bulk_requests","get_responses","set_requests","display_string","up_since"]
+ separator => " "
+ }
+ }
+
+ mutate {
+ #add_tag => [ "conf_file_1113"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1114_preprocess_bro_software.conf b/salt/logstash/conf/pipelines/helix/1114_preprocess_bro_software.conf
new file mode 100644
index 000000000..ef7eded01
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1114_preprocess_bro_software.conf
@@ -0,0 +1,49 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for software.log from Bro systems
+filter {
+ if [type] == "bro_software" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "host" => "source_ip" }
+ rename => { "host_p" => "source_port" }
+ #software_type
+ #name
+ rename => { "version.major" => "version_major" }
+ rename => { "version.minor" => "version_minor" }
+ rename => { "version.minor2" => "version_minor2" }
+ rename => { "version.minor3" => "version_minor3" }
+ rename => { "version.addl" => "version_additional_info" }
+ #unparsed_version
+ }
+
+ mutate {
+ convert => { "version_major" => "string" }
+ convert => { "version_minor" => "string" }
+ }
+
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","source_ip","source_port","software_type","name","version_major","version_minor","version_minor2","version_minor3","version_additional_info","unparsed_version"]
+ separator => " "
+ }
+ }
+
+ mutate {
+ #add_tag => [ "conf_file_1114"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1115_preprocess_bro_ssh.conf b/salt/logstash/conf/pipelines/helix/1115_preprocess_bro_ssh.conf
new file mode 100644
index 000000000..a08d11e66
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1115_preprocess_bro_ssh.conf
@@ -0,0 +1,66 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks and Wes Lambert
+# Last Update: 10/30/2018
+#
+# This conf file is based on accepting logs for ssh.log from Bro systems
+filter {
+ if [type] == "bro_ssh" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #version
+ #convert => { "version" => "string" }
+ rename => { "auth_success" => "authentication_success" }
+ rename => { "auth_attempts" => "authentication_attempts" }
+ #direction
+ #client
+ #server
+ rename => { "cipher_alg" => "cipher_algorithm" }
+ rename => { "compression_alg" => "compression_algorithm" }
+ rename => { "cshka" => "client_host_key_algorithms" }
+ rename => { "host_key_alg" => "host_key_algorithm" }
+ rename => { "hasshAlgorithms" => "hassh_algorithms" }
+ rename => { "hasshServer" => "hassh_server" }
+ rename => { "hasshServerAlgorithms" => "hassh_server_algorithms" }
+ rename => { "hasshVersion" => "hassh_version" }
+ rename => { "kex_alg" => "kex_algorithm" }
+ rename => { "mac_alg" => "mac_algorithm" }
+ rename => { "sshka" => "server_host_key_algorithms" }
+ #host_key
+ #destination_country_code
+ #destination_region
+ #destination_city
+ #destination_latitude
+ #destination_longitude
+ }
+
+ mutate {
+ convert => { "authentication_success" => "string" }
+ }
+
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","version","authentication_success","authentication_attempts","direction","client","server","cipher_algorithm","mac_algorithm","compression_algorithm","kex_algorithm","host_key_algorithm","host_key","destination_country_code","destination_region","destination_city","destination_latitude","destination_longitude","hassh_version","hassh","hassh_server","client_host_key_algorithms","hassh_algorithms","server_host_key_algorithms","hassh_server_algorithms"]
+ separator => " "
+ }
+ }
+
+ mutate {
+ #add_tag => [ "conf_file_1115"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1116_preprocess_bro_ssl.conf b/salt/logstash/conf/pipelines/helix/1116_preprocess_bro_ssl.conf
new file mode 100644
index 000000000..930a670e9
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1116_preprocess_bro_ssl.conf
@@ -0,0 +1,186 @@
+# Original Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 10/30/2018
+#
+# This conf file is based on accepting logs for ssl.log from Bro systems
+filter {
+ if [type] == "bro_ssl" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #version
+ #convert => { "version" => "string" }
+ #cipher
+ #curve
+ #server_name
+ #resumed
+ #last_alert
+ #next_protocol
+ #established
+ rename => { "cert_chain_fuids" => "certificate_chain_fuids" }
+ rename => { "client_cert_chain_fuids" => "client_certificate_chain_fuids" }
+ rename => { "subject" => "certificate_subject" }
+ rename => { "issuer" => "certificate_issuer" }
+ #client_subject
+ #client_issuer
+ #validation_status
+ #ja3
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","version","cipher","curve","server_name","resumed","last_alert","next_protocol","established","certificate_chain_fuids","client_certificate_chain_fuids","certificate_subject","certificate_issuer","client_subject","client_issuer","validation_status","ja3","ja3s"]
+ separator => " "
+ }
+ }
+
+ mutate {
+ gsub => [ "subject", "\\\\,", "|" ]
+ }
+ kv {
+ include_keys => [ "CN", "C", "O", "OU", "ST", "SN", "L", "DC", "GN", "pseudonym", "serialNumber", "title", "initials" ]
+ field_split => ","
+ source => "certificate_issuer"
+ }
+ mutate {
+ rename => { "CN" => "issuer_common_name"}
+ rename => { "C" => "issuer_country_code"}
+ rename => { "O" => "issuer_organization"}
+ rename => { "OU" => "issuer_organization_unit"}
+ rename => { "ST" => "issuer_state"}
+ rename => { "SN" => "issuer_surname"}
+ rename => { "L" => "issuer_locality"}
+ rename => { "DC" => "issuer_distinguished_name"}
+ rename => { "GN" => "issuer_given_name"}
+ rename => { "pseudonym" => "issuer_pseudonym"}
+ rename => { "serialNumber" => "issuer_serial_number"}
+ rename => { "title" => "issuer_title"}
+ rename => { "initials" => "issuer_initials"}
+ }
+ kv {
+ include_keys => [ "CN", "C", "O", "OU", "ST", "SN", "L", "GN", "pseudonym", "serialNumber", "title", "initials" ]
+ field_split => ","
+ source => "certificate_subject"
+ }
+ mutate {
+ rename => { "CN" => "certificate_common_name"}
+ rename => { "C" => "certificate_country_code"}
+ rename => { "O" => "certificate_organization"}
+ rename => { "OU" => "certificate_organization_unit"}
+ rename => { "ST" => "certificate_state"}
+ rename => { "SN" => "certificate_surname"}
+ rename => { "L" => "certificate_locality"}
+ rename => { "GN" => "certificate_given_name"}
+ rename => { "pseudonym" => "certificate_pseudonym"}
+ rename => { "serialNumber" => "certificate_serial_number"}
+ rename => { "title" => "certificate_title"}
+ rename => { "initials" => "certificate_initials"}
+ }
+ if [certificate_subject] == "-" {
+ mutate {
+ remove_field => [ "certificate_subject" ]
+ }
+ }
+ if [certificate_issuer] == "-" {
+ mutate {
+ remove_field => [ "certificate_issuer" ]
+ }
+ }
+ if [certificate_common_name] {
+ ruby {
+ code => "event.set('certificate_common_name_length', event.get('certificate_common_name').length)"
+ }
+ }
+ if [issuer_common_name] {
+ ruby {
+ code => "event.set('issuer_common_name_length', event.get('issuer_common_name').length)"
+ }
+ }
+ if [server_name] {
+ if [server_name] == "-" {
+ mutate {
+ remove_field => [ "server_name" ]
+ }
+ } else {
+ ruby {
+ code => "event.set('server_name_length', event.get('server_name').length)"
+ }
+ }
+ }
+ if [certificate_chain_fuids] {
+ if [certificate_chain_fuids] == "-" {
+ mutate {
+ remove_field => [ "certificate_chain_fuids" ]
+ }
+ } else {
+ ruby {
+ code => "event.set('certificate_chain_count', event.get('certificate_chain_fuids').count(',') + 1)"
+ }
+ mutate {
+ convert => [ "certificate_chain_length", "integer" ]
+ }
+ }
+ }
+ if [client_certificate_chain_fuids] == "-" {
+ mutate {
+ remove_field => [ "client_certificate_chain_fuids" ]
+ }
+ }
+ if [client_issuer] == "-" {
+ mutate {
+ remove_field => [ "client_issuer" ]
+ }
+ }
+ if [client_subject] == "-" {
+ mutate {
+ remove_field => [ "client_subject" ]
+ }
+ }
+ if [curve] == "-" {
+ mutate {
+ remove_field => [ "curve" ]
+ }
+ }
+ if [issuer] == "-" {
+ mutate {
+ remove_field => [ "issuer" ]
+ }
+ }
+ if [query] == "-" {
+ mutate {
+ remove_field => [ "query" ]
+ }
+ }
+ if [subject] == "-" {
+ mutate {
+ remove_field => [ "subject" ]
+ }
+ }
+ if [validation_status] == "-" {
+ mutate {
+ remove_field => [ "validation_status" ]
+ }
+ }
+ if [ja3] == "-" {
+ mutate {
+ remove_field => [ "ja3" ]
+ }
+ }
+ mutate {
+ #add_tag => [ "conf_file_1116"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1117_preprocess_bro_syslog.conf b/salt/logstash/conf/pipelines/helix/1117_preprocess_bro_syslog.conf
new file mode 100644
index 000000000..c9e52df0f
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1117_preprocess_bro_syslog.conf
@@ -0,0 +1,41 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for syslog.log from Bro systems
+filter {
+ if [type] == "bro_syslog" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ rename => { "proto" => "protocol" }
+ #facility
+ #severity
+ #message
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","protocol","facility","severity","message"]
+ separator => " "
+ }
+ }
+
+ mutate {
+ #add_tag => [ "conf_file_1117"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1118_preprocess_bro_tunnel.conf b/salt/logstash/conf/pipelines/helix/1118_preprocess_bro_tunnel.conf
new file mode 100644
index 000000000..5ae07508c
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1118_preprocess_bro_tunnel.conf
@@ -0,0 +1,40 @@
+# Original Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for tunnel.log from Bro systems
+# Security Onion syslog-ng.conf sets type to "bro_tunnels"
+filter {
+ if [type] == "bro_tunnels" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #tunnel_type
+ #action
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","tunnel_type","action"]
+ separator => " "
+ }
+ }
+
+ mutate {
+ #add_tag => [ "conf_file_1118"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1119_preprocess_bro_weird.conf b/salt/logstash/conf/pipelines/helix/1119_preprocess_bro_weird.conf
new file mode 100644
index 000000000..156a25786
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1119_preprocess_bro_weird.conf
@@ -0,0 +1,42 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for weird.log from Bro systems
+filter {
+ if [type] == "bro_weird" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #name
+ rename => { "addl" => "additional_info" }
+ #notice
+ #peer
+ }
+
+ mutate {
+ convert => { "notice" => "string" }
+ }
+
+ } else {
+ grok {
+ match => [ "message", "(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*))" ]
+ }
+ }
+
+ mutate {
+ #add_tag => [ "conf_file_1119"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1121_preprocess_bro_mysql.conf b/salt/logstash/conf/pipelines/helix/1121_preprocess_bro_mysql.conf
new file mode 100644
index 000000000..97f0d6e28
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1121_preprocess_bro_mysql.conf
@@ -0,0 +1,57 @@
+# Original Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for mysql.log from Bro systems
+#
+# Parse using grok
+filter {
+ if [type] == "bro_mysql" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ rename => { "cmd" => "mysql_command" }
+ rename => { "arg" => "mysql_argument" }
+ rename => { "success" => "mysql_success" }
+ #rows
+ #response
+ }
+
+ mutate {
+ convert => { "mysql_success" => "string" }
+ }
+
+ } else {
+ grok {
+ match => [ "message", "(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*))" ]
+ }
+ }
+
+ mutate {
+ #add_tag => [ "conf_file_1121"]
+ }
+ }
+}
+
+# Reverting to grok for now, due to double-quoted values in log file
+# Parse using csv filter
+#filter {
+# if [type] == "bro_mysql" {
+# csv {
+# columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","mysql_command","mysql_argument","mysql_success","rows","response"]
+# separator => " "
+# quote_char=
+# }
+# }
+#}
diff --git a/salt/logstash/conf/pipelines/helix/1122_preprocess_bro_socks.conf b/salt/logstash/conf/pipelines/helix/1122_preprocess_bro_socks.conf
new file mode 100644
index 000000000..1b2876eb4
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1122_preprocess_bro_socks.conf
@@ -0,0 +1,62 @@
+# Original Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for socks.log from Bro systems
+
+# Parse using csv
+filter {
+ if [type] == "bro_socks" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #version
+ #convert => { "version" => "string" }
+ rename => { "user" => "username" }
+ #password
+ rename => { "status" => "server_status" }
+ rename => { "request.host" => "request_host" }
+ rename => { "request.name" => "request_name" }
+ rename => { "request_p" => "request_port" }
+ rename => { "bound.host" => "bound_host" }
+ rename => { "bound.name" => "bound_name" }
+ rename => { "bound_p" => "bound_port" }
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","version","username","password","server_status","request_host","request_name","request_port","bound_host","bound_name","bound_port"]
+ separator => " "
+ }
+ }
+
+ mutate {
+ #add_tag => [ "conf_file_1122"]
+ }
+ }
+}
+# Parse using grok
+#filter {
+# if [type] == "bro_socks" {
+# # This is the initial parsing of the log
+# grok {
+# match => [ "message", "(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))" ]
+# }
+# mutate {
+# #add_tag => [ "conf_file_1122"]
+# }
+# }
+#}
diff --git a/salt/logstash/conf/pipelines/helix/1123_preprocess_bro_x509.conf b/salt/logstash/conf/pipelines/helix/1123_preprocess_bro_x509.conf
new file mode 100644
index 000000000..37d4393e7
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1123_preprocess_bro_x509.conf
@@ -0,0 +1,154 @@
+# Original Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for x509.log from Bro systems
+
+filter {
+ if [type] == "bro_x509" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #id
+ rename => { "certificate.version" => "certificate_version" }
+ rename => { "certificate.serial" => "certificate_serial" }
+ rename => { "certificate.subject" => "certificate_subject" }
+ rename => { "certificate.issuer" => "certificate_issuer" }
+ rename => { "certificate.not_valid_before" => "certificate_not_valid_before" }
+ rename => { "certificate.not_valid_after" => "certificate_not_valid_after" }
+ rename => { "certificate.key_alg" => "certificate_key_algorithm" }
+ rename => { "certificate.sig_alg" => "certificate_signing_algorithm" }
+ rename => { "certificate.key_type" => "certificate_key_type" }
+ rename => { "certificate.key_length" => "certificate_key_length" }
+ rename => { "certificate.exponent" => "certificate_exponent" }
+ rename => { "certificate.curve" => "certificate_curve" }
+ rename => { "id" => "fuid" }
+ rename => { "san.dns" => "san_dns" }
+ rename => { "san.uri" => "san_uri" }
+ rename => { "san.email" => "san_email" }
+ rename => { "san.ip" => "san_ip" }
+ rename => { "basic_constraints.ca" => "basic_constraints_ca" }
+ rename => { "basic_constraints.path_length" => "basic_constraints_path_length" }
+ }
+ } else {
+ grok {
+ match => [ "message", "(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))\t(?(.*))" ]
+ }
+ }
+
+ mutate {
+ gsub => [ "certificate_issuer", "\\\\,", "|" ]
+ gsub => [ "certificate_subject", "\\\\,", "|" ]
+ }
+
+ kv {
+ include_keys => [ "CN", "C", "O", "OU", "ST", "SN", "L", "DC", "GN", "pseudonym", "serialNumber", "title", "initials" ]
+ field_split => ","
+ source => "certificate_issuer"
+ }
+ mutate {
+ rename => { "CN" => "issuer_common_name"}
+ rename => { "C" => "issuer_country_code"}
+ rename => { "O" => "issuer_organization"}
+ rename => { "OU" => "issuer_organization_unit"}
+ rename => { "ST" => "issuer_state"}
+ rename => { "SN" => "issuer_surname"}
+ rename => { "L" => "issuer_locality"}
+ rename => { "DC" => "issuer_distinguished_name"}
+ rename => { "GN" => "issuer_given_name"}
+ rename => { "pseudonym" => "issuer_pseudonym"}
+ rename => { "serialNumber" => "issuer_serial_number"}
+ rename => { "title" => "issuer_title"}
+ rename => { "initials" => "issuer_initials"}
+ }
+ kv {
+ include_keys => [ "CN", "C", "O", "OU", "ST", "SN", "L", "GN", "pseudonym", "serialNumber", "title", "initials" ]
+ field_split => ","
+ source => "certificate_subject"
+ }
+ mutate {
+ rename => { "CN" => "certificate_common_name"}
+ rename => { "C" => "certificate_country_code"}
+ rename => { "O" => "certificate_organization"}
+ rename => { "OU" => "certificate_organization_unit"}
+ rename => { "ST" => "certificate_state"}
+ rename => { "SN" => "certificate_surname"}
+ rename => { "L" => "certificate_locality"}
+ rename => { "GN" => "certificate_given_name"}
+ rename => { "pseudonym" => "certificate_pseudonym"}
+ rename => { "serialNumber" => "certificate_serial_number"}
+ rename => { "title" => "certificate_title"}
+ rename => { "initials" => "certificate_initials"}
+ convert => [ "certificate_key_length", "integer" ]
+ convert => [ "certificate_not_valid_after", "integer" ]
+ convert => [ "certificate_not_valid_before", "integer" ]
+ }
+ if [query] == "-" {
+ mutate {
+ remove_field => [ "query" ]
+ }
+ }
+ if [san_dns] == "-" {
+ mutate {
+ remove_field => [ "san_dns" ]
+ }
+ }
+ if [san_email] == "-" {
+ mutate {
+ remove_field => [ "san_email" ]
+ }
+ }
+ if [san_uri] == "-" {
+ mutate {
+ remove_field => [ "san_uri" ]
+ }
+ }
+ if [san_ip] == "-" {
+ mutate {
+ remove_field => [ "san_ip" ]
+ }
+ }
+ if [certificate_common_name] {
+ ruby {
+ code => "event.set('certificate_common_name_length', event.get('certificate_common_name').length)"
+ }
+ }
+ if [issuer_common_name] {
+ ruby {
+ code => "event.set('issuer_common_name_length', event.get('issuer_common_name').length)"
+ }
+ }
+ if [certificate_not_valid_after] == "-" {
+ mutate {
+ remove_field => [ "certificate_not_valid_after" ]
+ }
+ }
+ if [certificate_not_valid_before] == "-" {
+ mutate {
+ remove_field => [ "certificate_not_valid_before" ]
+ }
+ }
+ if [certificate_not_valid_after] and [certificate_not_valid_before] {
+ ruby {
+ code => "event.set('certificate_number_days_valid', ((event.get('certificate_not_valid_after') - event.get('certificate_not_valid_before')) / 86400).ceil)"
+ }
+ date {
+ match => [ "certificate_not_valid_after", "UNIX" ]
+ target => "certificate_not_valid_after"
+ }
+ date {
+ match => [ "certificate_not_valid_before", "UNIX" ]
+ target => "certificate_not_valid_before"
+ }
+ }
+ mutate {
+ #add_tag => [ "conf_file_1123"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1124_preprocess_bro_intel.conf b/salt/logstash/conf/pipelines/helix/1124_preprocess_bro_intel.conf
new file mode 100644
index 000000000..0f1c53134
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1124_preprocess_bro_intel.conf
@@ -0,0 +1,46 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for intel.log from Bro systems
+filter {
+ if [type] == "bro_intel" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ rename => { "seen.indicator" => "indicator" }
+ rename => { "seen.indicator_type" => "indicator_type" }
+ rename => { "seen.where" => "seen_where" }
+ rename => { "seen.node" => "seen_node" }
+ #matched
+ #sources
+ #fuid
+ rename => { "file_mime_type" => "mimetype" }
+ rename => { "file_desc" => "file_description" }
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","indicator","indicator_type","seen_where","seen_node","matched","sources","fuid","mimetype","file_description"]
+ separator => " "
+ }
+ }
+
+ mutate {
+ #add_tag => [ "conf_file_1124"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1125_preprocess_bro_modbus.conf b/salt/logstash/conf/pipelines/helix/1125_preprocess_bro_modbus.conf
new file mode 100644
index 000000000..6d6d48ad2
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1125_preprocess_bro_modbus.conf
@@ -0,0 +1,49 @@
+# Author: Wes Lambert
+# Adapted from existing filters provided by Justin Henderson
+#
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for modbus.log from Bro systems
+#
+filter {
+ if [type] == "bro_modbus" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ rename => { "func" => "function" }
+ #exception
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","function","exception"]
+ separator => " "
+ }
+ }
+ }
+}
+
+# Parse using grok
+#filter {
+# if [type] == "bro_modbus" {
+# grok {
+# match => [ "message", "(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))$" ]
+# }
+ #mutate {
+ #add_tag => [ "conf_file_1125"]
+ #}
+# }
+#}
diff --git a/salt/logstash/conf/pipelines/helix/1126_preprocess_bro_sip.conf b/salt/logstash/conf/pipelines/helix/1126_preprocess_bro_sip.conf
new file mode 100644
index 000000000..0f1cf4c46
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1126_preprocess_bro_sip.conf
@@ -0,0 +1,66 @@
+# Author: Wes Lambert
+#
+# Adapted from existing filters provided by Justin Henderson
+#
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for sip.log from Bro systems
+#
+filter {
+ if [type] == "bro_sip" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #trans_depth
+ #method
+ #uri
+ #date
+ #request_from
+ #request_to
+ #response_from
+ #response_to
+ #reply_to
+ #call_id
+ #seq
+ #subject
+ #request_path
+ #response_path
+ #user_agent
+ #status_code
+ #status_msg
+ #warning
+ rename => { "request_body_len" => "request_body_length" }
+ rename => { "response_body_len" => "response_body_length" }
+ #content_type
+ }
+ } else {
+ grok {
+ match => [ "message", "(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))$" ]
+ }
+ }
+
+ mutate {
+ add_tag => [ "conf_file_1126"]
+ }
+ }
+}
+# Parse using csv filter
+#filter {
+# if [type] == "bro_sip" {
+# csv {
+# columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","trans_depth","method","uri","date","request_from","request_to","response_from","response_to","reply_to","call_id","seq","subject","request_path","response_path","user_agent","status_code","status_msg","warning","request_body_len","response_body_len","content_type"]
+# separator => " "
+# }
+# }
+#}
diff --git a/salt/logstash/conf/pipelines/helix/1127_preprocess_bro_radius.conf b/salt/logstash/conf/pipelines/helix/1127_preprocess_bro_radius.conf
new file mode 100644
index 000000000..732efb23c
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1127_preprocess_bro_radius.conf
@@ -0,0 +1,73 @@
+# Author: Wes Lambert
+#
+# Adapted from existing filters provided by Justin Henderson
+#
+# Updated by: Doug Burks
+#
+# This conf file is based on accepting logs for radius.log from Bro systems
+#
+filter {
+ if [type] == "bro_radius" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #username
+ #mac
+ #framed_addr
+ #tunnel_client
+ #connect_info
+ rename => { "reply_msg" => "reply_message" }
+ #result
+ #ttl
+ #logged
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","username","mac","framed_addr","tunnel_client","connect_info","reply_message","result","ttl","logged"]
+ separator => " "
+ }
+ if [tunnel_client] == "-" {
+ mutate {
+ remove_field => [ "tunnel_client" ]
+ }
+ }
+
+ }
+ # Remove the ttl and framed_addr fields
+ if [ttl] {
+ mutate {
+ remove_field => [ "ttl" ]
+ }
+ }
+ if [framed_addr] {
+ mutate {
+ remove_field => [ "framed_addr" ]
+ }
+ }
+ }
+}
+
+# Parse using grok
+#filter {
+# if [type] == "bro_radius" {
+# grok {
+# match => [ "message", "(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))$" ]
+# }
+# mutate {
+# #add_tag => [ "conf_file_1127"]
+# }
+# }
+#}
diff --git a/salt/logstash/conf/pipelines/helix/1128_preprocess_bro_pe.conf b/salt/logstash/conf/pipelines/helix/1128_preprocess_bro_pe.conf
new file mode 100644
index 000000000..7770de12d
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1128_preprocess_bro_pe.conf
@@ -0,0 +1,46 @@
+# Author: Wes Lambert
+#
+# Adapted from existing filters provided by Justin Henderson
+#
+# Updated by: Doug Burks
+#
+# This conf file is based on accepting logs for pe.log from Bro systems
+#
+filter {
+ if [type] == "bro_pe" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ rename => { "id" => "fuid" }
+ #machine
+ #compile_ts
+ #os
+ #subsystem
+ #is_exe
+ #is_64bit
+ #uses_aslr
+ #uses_dep
+ #uses_code_integrity
+ #uses_seh
+ #has_import_table
+ #has_export_table
+ #has_cert_table
+ #has_debug_data
+ #section_names
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","fuid","machine","compile_ts","os","subsystem","is_exe","is_64bit","uses_aslr","uses_dep","uses_code_integrity","uses_seh","has_import_table","has_export_table","has_cert_table","has_debug_data","section_names"]
+ separator => " "
+ }
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1129_preprocess_bro_rfb.conf b/salt/logstash/conf/pipelines/helix/1129_preprocess_bro_rfb.conf
new file mode 100644
index 000000000..21ecac78f
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1129_preprocess_bro_rfb.conf
@@ -0,0 +1,65 @@
+# Author: Wes Lambert
+#
+# Adapted from existing filters provided by Justin Henderson
+#
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for rfb.log from Bro systems
+#
+# Parse using csv filter
+filter {
+ if [type] == "bro_rfb" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #client_major_version
+ #client_minor_version
+ #server_major_version
+ #server_minor_version
+ #authentication_method
+ #auth
+ #share_flag
+ #desktop_name
+ #width
+ #height
+ }
+
+ mutate {
+ convert => { "auth" => "string" }
+ convert => { "share_flag" => "string" }
+ }
+
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","client_major_version","client_minor_version","server_major_version","server_minor_version","authentication_method","auth","share_flag","desktop_name","width","height"]
+ separator => " "
+ }
+ }
+ }
+}
+
+# Parse using grok
+#filter {
+# if [type] == "bro_rfb" {
+# grok {
+# match => [ "message", "(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))$" ]
+# }
+# mutate {
+# #add_tag => [ "conf_file_1129"]
+# }
+# }
+#}
diff --git a/salt/logstash/conf/pipelines/helix/1130_preprocess_bro_dnp3.conf b/salt/logstash/conf/pipelines/helix/1130_preprocess_bro_dnp3.conf
new file mode 100644
index 000000000..a2c10babf
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1130_preprocess_bro_dnp3.conf
@@ -0,0 +1,51 @@
+# Author: Wes Lambert
+#
+# Adapted from existing filters provided by Justin Henderson
+#
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for dnp3.log from Bro systems
+#
+filter {
+ if [type] == "bro_dnp3" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #fc_request
+ #fc_reply
+ #iin
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","fc_request","fc_reply","iin"]
+ separator => " "
+ }
+ }
+ }
+}
+
+# Parse using grok
+#filter {
+# if [type] == "bro_dnp3" {
+# grok {
+# match => [ "message", "(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))\t(?(.*?))$" ]
+# }
+# mutate {
+# #add_tag => [ "conf_file_1130"]
+# }
+# }
+#}
diff --git a/salt/logstash/conf/pipelines/helix/1131_preprocess_bro_smb_files.conf b/salt/logstash/conf/pipelines/helix/1131_preprocess_bro_smb_files.conf
new file mode 100644
index 000000000..ca6cfe8db
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1131_preprocess_bro_smb_files.conf
@@ -0,0 +1,46 @@
+# Author: Wes Lambert
+#
+# Adapted from existing filters provided by Justin Henderson
+#
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for smb_files.log from Bro systems
+#
+filter {
+ if [type] == "bro_smb_files" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #fuid
+ #action
+ #path
+ #name
+ #size
+ #prev_name
+ rename => { "times.modified" => "times_modified" }
+ rename => { "times.accessed" => "times_accessed" }
+ rename => { "times.created" => "times_created" }
+ rename => { "times.changed" => "times_changed" }
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","fuid","action","path","name","size","prev_name","times_modified","times_accessed","times_created","times_changed"]
+ separator => " "
+ }
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1132_preprocess_bro_smb_mapping.conf b/salt/logstash/conf/pipelines/helix/1132_preprocess_bro_smb_mapping.conf
new file mode 100644
index 000000000..84256ed0e
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1132_preprocess_bro_smb_mapping.conf
@@ -0,0 +1,40 @@
+# Author: Wes Lambert
+#
+# Adapted from existing filters provided by Justin Henderson
+#
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for smb_mapping.log from Bro systems
+#
+filter {
+ if [type] == "bro_smb_mapping" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #path
+ #service
+ #native_file_system
+ #share_type
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","path","service","native_file_system","share_type"]
+ separator => " "
+ }
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1133_preprocess_bro_ntlm.conf b/salt/logstash/conf/pipelines/helix/1133_preprocess_bro_ntlm.conf
new file mode 100644
index 000000000..3b5fd6384
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1133_preprocess_bro_ntlm.conf
@@ -0,0 +1,50 @@
+# Author: Wes Lambert
+#
+# Adapted from existing filters provided by Justin Henderson
+#
+# Updated by: Doug Burks and Wes Lambert
+# Last Update: 1/2/2019
+#
+# This conf file is based on accepting logs for ntlm.log from Bro systems
+#
+filter {
+ if [type] == "bro_ntlm" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #hostname
+ rename => { "domainname" => "domain_name" }
+ rename => { "success" => "ntlm_success" }
+ #status
+ }
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => [ "timestamp", "uid", "source_ip", "source_port", "destination_ip", "destination_port", "username", "hostname", "domain_name", "server_nb_computer_name", "server_dns_computer_name", "server_tree_name", "ntlm_success"]
+ separator => " "
+ }
+ ruby {
+ code =>"
+ hash = event.to_hash.each do |key,value|
+ if value == '-'
+ event.remove(key)
+ end
+ end"
+ }
+
+
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/1134_preprocess_bro_dce_rpc.conf b/salt/logstash/conf/pipelines/helix/1134_preprocess_bro_dce_rpc.conf
new file mode 100644
index 000000000..1b0e56a67
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/1134_preprocess_bro_dce_rpc.conf
@@ -0,0 +1,54 @@
+# Author: Wes Lambert
+#
+# Adapted from existing filters provided by Justin Henderson
+#
+# Updated by: Doug Burks
+# Last Update: 2/7/2018
+#
+# This conf file is based on accepting logs for dce_rpc.log from Bro systems
+#
+filter {
+ if [type] == "bro_dce_rpc" {
+ # If message looks like json, try to parse it as such. Otherwise, fall back to csv or grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+
+ mutate {
+ rename => { "ts" => "timestamp" }
+ #uid
+ rename => { "id.orig_h" => "source_ip" }
+ rename => { "id.orig_p" => "source_port" }
+ rename => { "id.resp_h" => "destination_ip" }
+ rename => { "id.resp_p" => "destination_port" }
+ #rtt
+ #named_pipe
+ #endpoint
+ #operation
+ }
+
+ #mutate {
+ #convert => { "rtt" => "float" }
+ #}
+ } else {
+ mutate {
+ gsub => [ "message", "[\"']", "" ]
+ }
+ csv {
+ columns => ["timestamp","uid","source_ip","source_port","destination_ip","destination_port","rtt","named_pipe","endpoint","operation"]
+ separator => " "
+ }
+
+ if [rtt] == "-" {
+ mutate {
+ remove_field => [ "rtt" ]
+ }
+ }
+
+ #mutate {
+ #convert => [ "rtt", "float" ]
+ #}
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/helix/8001_postprocess_common_ip_augmentation.conf b/salt/logstash/conf/pipelines/helix/8001_postprocess_common_ip_augmentation.conf
new file mode 100644
index 000000000..d28449da6
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/8001_postprocess_common_ip_augmentation.conf
@@ -0,0 +1,58 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 5/20/2017
+
+filter {
+ if [source_ip] {
+ if [source_ip] == "-" {
+ mutate {
+ replace => { "source_ip" => "0.0.0.0" }
+ }
+ }
+ if [source_ip] =~ "10\." or [source_ip] =~ "192\.168\." or [source_ip] =~ "172\.(1[6-9]|2[0-9]|3[0-1])\." or [source_ip] =~ "fe80::20c:29ff:fe19:f7d" or [source_ip] =~ "::1" {
+ mutate {
+ }
+ } else {
+ geoip {
+ source => "[source_ip]"
+ target => "source_geo"
+ }
+ }
+ if [source_ip] {
+ mutate {
+ add_field => { "ips" => "%{source_ip}" }
+ add_field => { "source_ips" => [ "%{source_ip}" ] }
+ }
+ }
+ }
+ if [destination_ip] {
+ if [destination_ip] == "-" {
+ mutate {
+ replace => { "destination_ip" => "0.0.0.0" }
+ }
+ }
+ if [destination_ip] =~ "10\." or [destination_ip] =~ "192\.168\." or [destination_ip] =~ "172\.(1[6-9]|2[0-9]|3[0-1])\." or [destination_ip] =~ "239.255.255.250" or [destination_ip] =~ "224\.0\.0\." or [destination_ip] =~ "255.255.255.255" or [destination_ip] =~ "ff02::fb" or [destination_ip] =~ "fe80::20c:29ff:fe19:f7d" or [destination_ip] =~ "224\.0\.1\." {
+ mutate {
+ }
+ }
+ else {
+ geoip {
+ source => "[destination_ip]"
+ target => "destination_geo"
+ }
+ }
+ }
+ if [destination_ip] {
+ mutate {
+ add_field => { "ips" => "%{destination_ip}" }
+ add_field => { "destination_ips" => [ "%{destination_ip}" ] }
+ }
+ }
+}
+ #if [source_ip] or [destination_ip] {
+ # mutate {
+ #add_tag => [ "conf_file_8001"]
+ # }
+ #}
+
diff --git a/salt/logstash/conf/pipelines/helix/templates/9997_output_helix.conf b/salt/logstash/conf/pipelines/helix/templates/9997_output_helix.conf
new file mode 100644
index 000000000..aa586d3b6
--- /dev/null
+++ b/salt/logstash/conf/pipelines/helix/templates/9997_output_helix.conf
@@ -0,0 +1,160 @@
+{% set HELIX_API_KEY = salt['pillar.get']('fireeye:helix:api_key', '') %}
+{% set UNIQUEID = salt['pillar.get']('sensor:uniqueid', '') %}
+{% set CBNAME = grains.host %}
+
+filter {
+ if [type] =~ /^bro_conn|bro_dns|bro_http|bro_files|bro_ssl|bro_dhcp|bro_x509|suricata$/ {
+ grok {
+ match => [
+ "source_ip", "^%{IPV4:srcipv4}$",
+ "source_ip", "(?^([0-9A-Fa-f]{0,4}:){2,7}([0-9A-Fa-f]{1,4}$|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4})$)"
+ ]
+ }
+ grok {
+ match => [
+ "destination_ip", "(?^([0-9A-Fa-f]{0,4}:){2,7}([0-9A-Fa-f]{1,4}$|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4})$)",
+ "destination_ip", "^%{IPV4:dstipv4}$"
+ ]
+ }
+
+ #geoip {
+ # source => "[source_ip]"
+ # target => "source_geo"
+ #}
+ #geoip {
+ # source => "[destination_ip]"
+ # target => "destination_geo"
+ #}
+ mutate {
+ rename => { "[beat_host][name]" => "sensor" }
+ copy => { "sensor" => "rawmsghostname" }
+ rename => { "message" => "rawmsg" }
+ copy => { "type" => "class" }
+ copy => { "class" => "program"}
+ rename => { "source_port" => "srcport" }
+ rename => { "destination_port" => "dstport" }
+ rename => { "[log][file][path]" => "filepath" }
+ add_field => { "meta_cbid" => "{{ UNIQUEID }}" }
+ add_field => { "meta_cbname" => "{{ CBNAME }}" }
+ remove_field => ["source_ip", "destination_ip", "syslog-host_from"]
+ remove_field => ["beat_host", "timestamp", "type", "log", "@version", "@timestamp"]
+ remove_field => ["sensorname", "sensor_name", "service", "source", "tags", "syslog-host"]
+ remove_field => ["sensor_name", "source_ips", "ips", "destination_ips", "syslog-priority", "syslog-file_name", "syslog-facility"]
+ }
+ if "bro_conn" in [class] {
+ mutate {
+ #add_field => { "metaclass" => "connection" }
+ rename => { "original_bytes" => "sentbytes" }
+ rename => { "respond_bytes" => "rcvdbytes" }
+ rename => { "connection_state" => "connstate" }
+ rename => { "uid" => "connectionid" }
+ rename => { "respond_packets" => "rcvdpackets" }
+ rename => { "original_packets" => "sentpackets" }
+ rename => { "respond_ip_bytes" => "rcvdipbytes" }
+ rename => { "original_ip_bytes" => "sentipbytes" }
+ rename => { "local_respond" => "local_resp" }
+ rename => { "local_orig" => "localorig" }
+ rename => { "missed_bytes" => "missingbytes" }
+ rename => { "connection_state_description" => "description" }
+ }
+ }
+ if "bro_dns" in [class] {
+ mutate{
+ #add_field = { "metaclass" => "dns"}
+ rename => { "answers" => "answer" }
+ rename => { "query" => "domain" }
+ rename => { "query_class" => "queryclass" }
+ rename => { "query_class_name" => "queryclassname" }
+ rename => { "query_type" => "querytype" }
+ rename => { "query_type_name" => "querytypename" }
+ rename => { "ra" => "recursionavailable" }
+ rename => { "rd" => "recursiondesired" }
+ rename => { "uid" => "connectionid" }
+ rename => { "ttls" => "ttl" }
+ rename => { "transaction_id" => "transactionid" }
+ }
+ }
+ if "bro_dhcp" in [class] {
+ mutate{
+ #add_field = { "metaclass" => "dhcp"}
+ rename => { "message_types" => "direction" }
+ rename => { "uid" => "connectionid" }
+ rename => { "lease_time" => "duration" }
+ }
+ }
+ if "bro_files" in [class] {
+ mutate{
+ #add_field = { "metaclass" => "dns"}
+ rename => { "missing_bytes" => "missingbytes" }
+ rename => { "seen_bytes" => "seenbytes" }
+ rename => { "overflow_bytes" => "overflowbytes" }
+ rename => { "fuid" => "fileid" }
+ rename => { "conn_uids" => "connectionid" }
+ rename => { "is_orig" => "isorig" }
+ rename => { "timed_out" => "timedout" }
+ rename => { "local_orig" => "localorig" }
+ rename => { "file_ip" => "tx_host" }
+ }
+ }
+ if "bro_http" in [class] {
+ mutate{
+ #add_field = { "metaclass" => "dns"}
+ rename => { "virtual_host" => "hostname" }
+ rename => { "status_code" => "statuscode" }
+ rename => { "status_message" => "statusmsg" }
+ rename => { "resp_mime_types" => "rcvdmimetype" }
+ rename => { "resp_fuids" => "rcvdfileid" }
+ rename => { "response_body_len" => "rcvdbodybytes" }
+ rename => { "request_body_len" => "sentbodybytes" }
+ rename => { "uid" => "connectionid" }
+ rename => { "ts"=> "eventtime" }
+ rename => { "@timestamp"=> "eventtime" }
+ rename => { "trans_depth" => "depth" }
+ rename => { "request_body_length" => "sentbodybytes" }
+ rename => { "response_body_length" => "rcvdbodybytes" }
+ }
+ }
+ if "bro_ssl" in [class] {
+ mutate{
+ #add_field = { "metaclass" => "dns"}
+ rename => { "status_code" => "statuscode" }
+ rename => { "status_message" => "statusmsg" }
+ rename => { "resp_mime_types" => "rcvdmimetype" }
+ rename => { "resp_fuids" => "rcvdfileid" }
+ rename => { "response_body_len" => "rcvdbodybytes" }
+ rename => { "request_body_len" => "sentbodybytes" }
+ rename => { "uid" => "connectionid" }
+ }
+ }
+ if "bro_weird" in [class] {
+ mutate{
+ #add_field = { "metaclass" => "dns"}
+ rename => { "name" => "eventname" }
+ }
+ }
+ if "bro_x509" in [class] {
+ mutate{
+ #add_field = { "metaclass" => "dns"}
+ rename => { "certificate_common_name" => "certname" }
+ rename => { "certificate_subject" => "certsubject" }
+ rename => { "issuer_common_name" => "issuer" }
+ rename => { "certificate_issuer" => "issuersubject" }
+ rename => { "certificate_not_valid_before" => "issuetime" }
+ rename => { "certificate_key_type" => "cert_type" }
+ }
+ }
+ }
+}
+
+output {
+ if [class] =~ /^bro_conn|bro_dns|bro_http|bro_files|bro_ssl|bro_dhcp|bro_x509|suricata$/ {
+ http {
+ url => "https://helix-integrations.cloud.aws.apps.fireeye.com/api/upload"
+ http_method => post
+ http_compression => true
+ socket_timeout => 60
+ headers => ["Authorization","{{ HELIX_API_KEY }}"]
+ format => json_batch
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/master/0010_input_hhbeats.conf b/salt/logstash/conf/pipelines/master/0010_input_hhbeats.conf
new file mode 100644
index 000000000..6b7667f5c
--- /dev/null
+++ b/salt/logstash/conf/pipelines/master/0010_input_hhbeats.conf
@@ -0,0 +1,40 @@
+input {
+ beats {
+ port => "5644"
+ ssl => true
+ ssl_certificate_authorities => ["/usr/share/filebeat/ca.crt"]
+ ssl_certificate => "/usr/share/logstash/filebeat.crt"
+ ssl_key => "/usr/share/logstash/filebeat.key"
+ tags => [ "beat" ]
+ }
+}
+filter {
+ if [type] == "ids" or [type] =~ "bro" {
+ mutate {
+ rename => { "host" => "beat_host" }
+ remove_tag => ["beat"]
+ add_field => { "sensor_name" => "%{[beat][name]}" }
+ add_field => { "syslog-host_from" => "%{[beat][name]}" }
+ remove_field => [ "beat", "prospector", "input", "offset" ]
+ }
+ }
+ if [type] =~ "ossec" {
+ mutate {
+ rename => { "host" => "beat_host" }
+ remove_tag => ["beat"]
+ add_field => { "syslog-host_from" => "%{[beat][name]}" }
+ remove_field => [ "beat", "prospector", "input", "offset" ]
+ }
+ }
+ if [type] == "osquery" {
+ mutate {
+ rename => { "host" => "beat_host" }
+ remove_tag => ["beat"]
+ add_tag => ["osquery"]
+ }
+ json {
+ source => "message"
+ target => "osquery"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/master/templates/9999_output_redis.conf b/salt/logstash/conf/pipelines/master/templates/9999_output_redis.conf
new file mode 100644
index 000000000..f176e0b94
--- /dev/null
+++ b/salt/logstash/conf/pipelines/master/templates/9999_output_redis.conf
@@ -0,0 +1,26 @@
+{%- if salt['grains.get']('role') == 'so-master' %}
+{% set master = salt['pillar.get']('static:masterip', '') %}
+{%- set nodetype = 'master' %}
+{% elif grains.role == 'so-heavynode' %}
+{% set master = salt['pillar.get']('node:mainip', '') %}
+{%- set nodetype = salt['pillar.get']('node:node_type', 'search') %}
+{%- else %}
+{%- set nodetype = salt['pillar.get']('node:node_type', 'storage') %}
+{% set master = salt['pillar.get']('static:masterip', '') %}
+{%- endif %}
+
+
+output {
+ redis {
+ host => '{{ master }}'
+ data_type => 'list'
+ {%- if nodetype == 'parser' %}
+ key => 'logstash:parsed'
+ {%- else %}
+ key => 'logstash:unparsed'
+ {%- endif %}
+ congestion_interval => 1
+ congestion_threshold => 50000000
+ # batch_events => 500
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/1000_preprocess_log_elapsed.conf b/salt/logstash/conf/pipelines/search/1000_preprocess_log_elapsed.conf
new file mode 100644
index 000000000..d098eb11a
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/1000_preprocess_log_elapsed.conf
@@ -0,0 +1,13 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ ruby {
+ code => "event.set('task_start', Time.now.to_f)"
+ }
+ mutate {
+ #add_tag => [ "conf_file_1000"]
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/1001_preprocess_syslogng.conf b/salt/logstash/conf/pipelines/search/1001_preprocess_syslogng.conf
new file mode 100644
index 000000000..84bce8802
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/1001_preprocess_syslogng.conf
@@ -0,0 +1,33 @@
+# Updated by: Doug Burks and Wes Lambert
+# Last Update: 10/30/2018
+
+filter {
+ if "syslogng" in [tags] {
+ mutate {
+ rename => { "MESSAGE" => "message" }
+ rename => { "PROGRAM" => "type" }
+ rename => { "FACILITY" => "syslog-facility" }
+ rename => { "FILE_NAME" => "syslog-file_name" }
+ rename => { "HOST" => "syslog-host" }
+ rename => { "HOST_FROM" => "syslog-host_from" }
+ rename => { "LEGACY_MSGHDR" => "syslog-legacy_msghdr" }
+ rename => { "PID" => "syslog-pid" }
+ rename => { "PRIORITY" => "syslog-priority" }
+ rename => { "SOURCEIP" => "syslog-sourceip" }
+ rename => { "TAGS" => "syslog-tags" }
+ lowercase => [ "syslog-host_from" ]
+ remove_field => [ "ISODATE" ]
+ remove_field => [ "SEQNUM" ]
+ #add_tag => [ "conf_file_1001"]
+ }
+ if "bro_" in [type] {
+ mutate {
+ add_tag => [ "bro" ]
+ }
+ } else if [type] !~ /ossec.*|snort/ and "firewall" not in [tags] {
+ mutate {
+ add_tag => [ "syslog" ]
+ }
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/1002_preprocess_json.conf b/salt/logstash/conf/pipelines/search/1002_preprocess_json.conf
new file mode 100644
index 000000000..ea7c677da
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/1002_preprocess_json.conf
@@ -0,0 +1,18 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if "json" in [tags]{
+ json {
+ source => "message"
+ }
+ mutate {
+ remove_tag => [ "json" ]
+ }
+ mutate {
+ #add_tag => [ "conf_file_1002"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/1004_preprocess_syslog_types.conf b/salt/logstash/conf/pipelines/search/1004_preprocess_syslog_types.conf
new file mode 100644
index 000000000..243abcc15
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/1004_preprocess_syslog_types.conf
@@ -0,0 +1,19 @@
+filter {
+ if "syslog" in [tags] {
+ if [host] == "172.16.1.1" {
+ mutate {
+ add_field => { "type" => "fortinet" }
+ add_tag => [ "firewall" ]
+ }
+ }
+ if [host] == "10.0.0.101" {
+ mutate {
+ add_field => { "type" => "brocade" }
+ add_tag => [ "switch" ]
+ }
+ }
+ mutate {
+ #add_tag => [ "conf_file_1004"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/1026_preprocess_dhcp.conf b/salt/logstash/conf/pipelines/search/1026_preprocess_dhcp.conf
new file mode 100644
index 000000000..2f893cf7a
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/1026_preprocess_dhcp.conf
@@ -0,0 +1,140 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolutions.com
+# Last Update: 12/9/2016
+# This conf file is based on accepting logs for DHCP. It is currently based on Windows DHCP only.
+filter {
+ if [type] == "dhcp" {
+ mutate {
+ add_field => { "Hostname" => "%{host}" }
+ }
+ mutate {
+ strip => "message"
+ }
+ # This is the initial parsing of the log
+ grok {
+ # Server 2008+
+ match => { "message" => "%{DATA:id},%{DATE_US:date},(?%{HOUR}:%{MINUTE}:%{SECOND}),%{DATA:description},%{IPV4:ip},%{DATA:Hostname},%{DATA:mac},%{DATA:Username},%{INT:TransactionID},%{INT:QResult},%{DATA:ProbationTime},%{DATA:CorrelationID}"}
+ # Server 2003
+ match => { "message" => "%{DATA:id},%{DATE_US:date},(?%{HOUR}:%{MINUTE}:%{SECOND}),%{DATA:description},%{IPV4:ip},%{DATA:Hostname},%{DATA:mac},"}
+ match => { "message" => "%{DATA:id},%{DATA:date},(?%{HOUR}:%{MINUTE}:%{SECOND}),%{DATA:description},%{DATA:ip},%{DATA:Hostname},%{DATA:mac},"}
+ }
+ # This section below translates the message ID into something humans can understand.
+ if [id] == "00" {
+ mutate {
+ add_field => [ "event", "The log was started"]
+ }
+ }
+ if [id] == "01" {
+ mutate {
+ add_field => [ "event", "The log was stopped"]
+ }
+ }
+ if [id] == "02" {
+ mutate {
+ add_field => [ "event", "The log was temporarily paused due to low disk space"]
+ }
+ }
+ if [id] == "10" {
+ mutate {
+ add_field => [ "event", "A new IP address was leased to a client"]
+ }
+ }
+ if [id] == "11" {
+ mutate {
+ add_field => [ "event", "A lease was renewed by a client"]
+ }
+ }
+ if [id] == "12" {
+ mutate {
+ add_field => [ "event", "A lease was released by a client"]
+ }
+ }
+ if [id] == "13" {
+ mutate {
+ add_field => [ "event", "An IP address was found to be in use on the network"]
+ }
+ }
+ if [id] == "14" {
+ mutate {
+ add_field => [ "event", "A lease request could not be satisfied because the scope's address pool was exhausted"]
+ }
+ }
+ if [id] == "15" {
+ mutate {
+ add_field => [ "event", "A lease was denied"]
+ }
+ }
+ if [id] == "16" {
+ mutate {
+ add_field => [ "event", "A lease was deleted"]
+ }
+ }
+ if [id] == "17" {
+ mutate {
+ add_field => [ "event", "A lease was expired and DNS records for an expired leases have not been deleted"]
+ }
+ }
+ if [id] == "18" {
+ mutate {
+ add_field => [ "event", "A lease was expired and DNS records were deleted"]
+ }
+ }
+ if [id] == "20" {
+ mutate {
+ add_field => [ "event", "A BOOTP address was leased to a client"]
+ }
+ }
+ if [id] == "21" {
+ mutate {
+ add_field => [ "event", "A dynamic BOOTP address was leased to a client"]
+ }
+ }
+ if [id] == "22" {
+ mutate {
+ add_field => [ "event", "A BOOTP request could not be satisfied because the scope's address pool for BOOTP was exhausted"]
+ }
+ }
+ if [id] == "23" {
+ mutate {
+ add_field => [ "event", "A BOOTP IP address was deleted after checking to see it was not in use"]
+ }
+ }
+ if [id] == "24" {
+ mutate {
+ add_field => [ "event", "IP address cleanup operation has began"]
+ }
+ }
+ if [id] == "25" {
+ mutate {
+ add_field => [ "event", "IP address cleanup statistics"]
+ }
+ }
+ if [id] == "30" {
+ mutate {
+ add_field => [ "event", "DNS update request to the named DNS server"]
+ }
+ }
+ if [id] == "31" {
+ mutate {
+ add_field => [ "event", "DNS update failed"]
+ }
+ }
+ if [id] == "32" {
+ mutate {
+ add_field => [ "event", "DNS update successful"]
+ }
+ }
+ if [id] == "33" {
+ mutate {
+ add_field => [ "event", "Packet dropped due to NAP policy"]
+ }
+ }
+ # If the message failed to parse correctly keep the message for debugging. Otherwise, drop it.
+ #if "_grokparsefailure" not in [tags] {
+ # mutate {
+ # remove_field => [ "message"]
+ # }
+ #}
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/1029_preprocess_esxi.conf b/salt/logstash/conf/pipelines/search/1029_preprocess_esxi.conf
new file mode 100644
index 000000000..18120d00d
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/1029_preprocess_esxi.conf
@@ -0,0 +1,31 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+#
+# This configuration file takes ESXi syslog messages and filters them. There is no input as the logs would have came in via syslog
+filter {
+ # This is an example of using an IP address range to classify a syslog message to a specific type of log
+ # This is helpful as so many devices only send logs via syslog
+ if [host] =~ "10\.[0-1]\.9\." {
+ mutate {
+ replace => ["type", "esxi"]
+ }
+ }
+ if [host] =~ "\.234$" {
+ mutate {
+ replace => ["type", "esxi"]
+ }
+ }
+ if [type] == "esxi" {
+ grok {
+ match => { "message" => "(?:%{SYSLOGTIMESTAMP:timestamp}|%{TIMESTAMP_ISO8601:timestamp8601}) (?:%{SYSLOGHOST:logsource}) (?:%{SYSLOGPROG}): (?(?:\[(?[0-9A-Z]{8,8}) %{DATA:esxi_loglevel} \'%{DATA:esxi_service}\'\] %{GREEDYDATA:esxi_message}|%{GREEDYDATA}))"}
+
+# pattern => ['(?:%{SYSLOGTIMESTAMP:timestamp}|%{TIMESTAMP_ISO8601:timestamp8601}) (?:%{SYSLOGHOST:logsource}) (?:%{SYSLOGPROG}): (?(?:\[(?[0-9A-Z]{8,8}) %{DATA:esxi_loglevel} \'%{DATA:esxi_service}\'\] %{GREEDYDATA:esxi_message}|%{GREEDYDATA}))']
+ }
+ mutate {
+ #add_tag => [ "conf_file_1029"]
+ }
+ }
+}
+
diff --git a/salt/logstash/conf/pipelines/search/1030_preprocess_greensql.conf b/salt/logstash/conf/pipelines/search/1030_preprocess_greensql.conf
new file mode 100644
index 000000000..adea86053
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/1030_preprocess_greensql.conf
@@ -0,0 +1,21 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [type] == "greensql" {
+ # This section is parsing out the fields for GreenSQL syslog data
+ grok {
+ match => { "message" => "<%{INT:Code}>%{DATA:Category}\[%{INT:Transcation}\]:\s*Database=%{DATA:Database}\sUser=%{DATA:UserName}\sApplication Name=%{DATA:Application}\sSource IP=%{IPV4:SrcIp}\sSource Port=%{INT:SrcPort}\sTarget IP=?%{IPV4:DstIp}\sTarget Port=%{DATA:DstPort}\sQuery=%{GREEDYDATA:Query}"}
+ match => { "message" => "<%{INT:Code}>%{DATA:Category}\[%{INT:Transcation}\]:\sAdmin_Name=%{DATA:UserName}\sIP_Address=%{IPV4:SrcIp}\sUser_Agent=%{DATA:UserAgent}\sMessage=%{DATA:StatusMessage}\sDescription=%{DATA:Description}\sSeverity=%{GREEDYDATA:Severity}"}
+ }
+ # Remove the message field as it is unnecessary
+ #mutate {
+ # remove_field => [ "message"]
+ #}
+ mutate {
+ #add_tag => [ "conf_file_1030"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/1031_preprocess_iis.conf b/salt/logstash/conf/pipelines/search/1031_preprocess_iis.conf
new file mode 100644
index 000000000..9bcd33a3e
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/1031_preprocess_iis.conf
@@ -0,0 +1,21 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [type] == "iis" {
+ # The log is expected to have come from NXLog and in JSON format. This allows for automatic parsing of fields
+ json {
+ source => "message"
+ }
+ # This removes the message field as it is unneccesary and tags the packet as web
+ mutate {
+ # remove_field => [ "message"]
+ add_tag => [ "web" ]
+ }
+ mutate {
+ #add_tag => [ "conf_file_1031"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/1032_preprocess_mcafee.conf b/salt/logstash/conf/pipelines/search/1032_preprocess_mcafee.conf
new file mode 100644
index 000000000..de5466288
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/1032_preprocess_mcafee.conf
@@ -0,0 +1,26 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+#
+# This file looks for McAfee EPO logs
+filter {
+ if [type] == "mcafee" {
+ # NXLog should be sending the logs in JSON format so they auto parse
+ json {
+ source => "message"
+ }
+ # This section converts the UTC fields to the proper time format
+ date {
+ match => [ "ReceivedUTC", "YYYY-MM-dd HH:mm:ss" ]
+ target => [ "ReceivedUTC" ]
+ }
+ date {
+ match => [ "DetectedUTC", "YYYY-MM-dd HH:mm:ss" ]
+ target => [ "DetectedUTC" ]
+ }
+ mutate {
+ #add_tag => [ "conf_file_1032"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/1033_preprocess_snort.conf b/salt/logstash/conf/pipelines/search/1033_preprocess_snort.conf
new file mode 100644
index 000000000..897a8ae4b
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/1033_preprocess_snort.conf
@@ -0,0 +1,181 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 3/15/2018
+
+filter {
+ if [type] == "ids" {
+ # This is the initial parsing of the log
+ if [engine] == "suricata" {
+ json {
+ source => "message"
+ }
+ mutate {
+ rename => { "alert" => "orig_alert" }
+ rename => { "[orig_alert][gid]" => "gid" }
+ rename => { "[orig_alert][signature_id]" => "sid" }
+ rename => { "[orig_alert][rev]" => "rev" }
+ rename => { "[orig_alert][signature]" => "alert" }
+ rename => { "[orig_alert][category]" => "classification" }
+ rename => { "[orig_alert][severity]" => "priority" }
+ rename => { "[orig_alert][rule]" => "rule_signature" }
+ rename => { "app_proto" => "application_protocol" }
+ rename => { "dest_ip" => "destination_ip" }
+ rename => { "dest_port" => "destination_port" }
+ rename => { "in_iface" => "interface" }
+ rename => { "proto" => "protocol" }
+ rename => { "src_ip" => "source_ip" }
+ rename => { "src_port" => "source_port" }
+ #rename => { "[fileinfo][filename]" => "filename" }
+ #rename => { "[fileinfo][gaps]" => "gaps" }
+ #rename => { "[fileinfo][size]" => "size" }
+ #rename => { "[fileinfo][state]" => "state" }
+ #rename => { "[fileinfo][stored]" => "stored" }
+ #rename => { "[fileinfo][tx_id]" => "tx_id" }
+ #rename => { "[flow][age]" => "duration" }
+ #rename => { "[flow][alerted]" => "flow_alerted" }
+ #rename => { "[flow][bytes_toclient]" => "bytes_to_client" }
+ #rename => { "[flow][bytes_toserver]" => "bytes_to_server" }
+ #rename => { "[flow][end]" => "flow_end" }
+ #rename => { "[flow][pkts_toclient]" => "packets_to_client" }
+ #rename => { "[flow][pkts_toserver]" => "packets_to_server" }
+ #rename => { "[flow][reason]" => "reason" }
+ #rename => { "[flow][start]" => "flow_start" }
+ #rename => { "[flow][state]" => "state" }
+ #rename => { "[netflow][age]" => "duration" }
+ #rename => { "[netflow][bytes]" => "bytes" }
+ #rename => { "[netflow][end]" => "netflow_end" }
+ #rename => { "[netflow][start]" => "netflow_start" }
+ #rename => { "[netflow][pkts]" => "packets" }
+ rename => { "[alert][action]" => "action" }
+ rename => { "[alert][category]" => "category" }
+ rename => { "[alert][gid]" => "gid" }
+ rename => { "[alert][rev]" => "rev" }
+ rename => { "[alert][severity]" => "severity" }
+ rename => { "[alert][signature]" => "signature" }
+ rename => { "[alert][signature_id]" => "sid" }
+ #rename => { "[dns][aa]" => "aa" }
+ #rename => { "[dns][flags]" => "flags" }
+ #rename => { "[dns][id]" => "id" }
+ #rename => { "[dns][qr]" => "qr" }
+ #rename => { "[dns][rcode]" => "rcode_name" }
+ #rename => { "[dns][rrname]" => "rrname" }
+ #rename => { "[dns][rrtype]" => "rrtype" }
+ #rename => { "[dns][tx_id]" => "tx_id" }
+ #rename => { "[dns][type]" => "record_type" }
+ #rename => { "[dns][version]" => "version" }
+ rename => { "[http][hostname]" => "virtual_host" }
+ rename => { "[http][http_content_type]" => "content_type" }
+ rename => { "[http][http_port]" => "http_port" }
+ rename => { "[http][http_method]" => "method" }
+ rename => { "[http][http_user_agent]" => "useragent" }
+ #rename => { "[http][length]" => "payload_length" }
+ #rename => { "[http][protocol]" => "http_version" }
+ rename => { "[http][status]" => "status_message" }
+ rename => { "[http][url]" => "url" }
+ #rename => { "[metadata][flowbits]" => "flowbits" }
+ rename => { "[tls][fingerprint]" => "certificate_serial_number" }
+ rename => { "[tls][issuerdn]" => "issuer_distinguished_name" }
+ rename => { "[tls][notafter]" => "certificate_not_valid_after" }
+ rename => { "[tls][notbefore]" => "certificate_not_valid_before" }
+ rename => { "[tls][subject]" => "certificate_common_name" }
+ rename => { "[tls][version]" => "tls_version" }
+ rename => { "event_type" => "ids_event_type" }
+ remove_field => [ "offset", "orig_alert", "beat", "input", "prospector" ]
+ remove_tag => [ "beats_input_codec_plain_applied" ]
+ add_tag => [ "eve" ]
+
+ }
+ } else {
+ grok {
+ match => ["message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+<%{DATA:interface}>\s+{%{DATA:protocol}}\s+(?:%{IPV4:source_ip}|%{IPV6:source_ip}):%{INT:source_port}\s+->\s+(?:%{IPV4:destination_ip}|%{IPV6:destination_ip}):%{INT:destination_port}",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+<%{DATA:interface}>\s+{%{DATA:protocol}}\s(?:%{IPV4:source_ip}|%{IPV6:source_ip})\s+->\s+(?:%{IPV4:destination_ip}|%{IPV6:destination_ip})",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+{%{DATA:protocol}}\s+(?:%{IPV4:source_ip}|%{IPV6:source_ip}):%{INT:source_port}\s+->\s+%{IPV4:destination_ip}:%{INT:destination_port}",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+{%{DATA:protocol}}\s(?:%{IPV4:source_ip}|%{IPV6:source_ip})\s+->\s+(?:%{IPV4:destination_ip}|%{IPV6:destination_ip})",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+{%{DATA:protocol}}\s+(?:%{IPV4:source_ip}|%{IPV6:source_ip}):%{INT:source_port}\s+->\s+(?:%{IPV4:destination_ip}|%{IPV6:destination_ip}):%{INT:destination_port}",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+{%{DATA:protocol}}\s(?:%{IPV4:source_ip}|%{IPV6:source_ip})\s+->\s+(?:%{IPV4:source_ip}|%{IPV6:source_ip})",
+ "message", "\[%{INT:gid}:%{INT:sid}:%{INT:rev}\]\s%{DATA:alert}\[Classification:\s+%{DATA:classification}\]\s+\[Priority:\s+%{INT:priority}\]:\s+{%{DATA:protocol}}",
+ "message", "\A%{TIME} pid\(%{INT}\) Alert Received: %{INT} %{INT:priority} %{DATA:classification} %{DATA:interface} \{%{DATA:timestamp}} %{INT} %{INT} \{%{DATA:alert}} %{IP:source_ip} %{IP:destination_ip} %{INT:protocol} %{INT:source_port} %{INT:destination_port} %{INT:gid} %{INT:sid} %{INT:rev} %{INT} %{INT}\Z",
+ "message", "%{GREEDYDATA:alert}"]
+ }
+ }
+ if [timestamp] {
+ mutate {
+ add_field => { "logstash_timestamp" => "%{@timestamp}" }
+ }
+ mutate {
+ convert => { "logstash_timestamp" => "string" }
+ }
+ date {
+ match => [ "timestamp", "ISO8601" ]
+ }
+ mutate {
+ rename => { "logstash_timestamp" => "timestamp" }
+ }
+ }
+
+ # If the alert is a Snort GPL alert break it apart for easier reading and categorization
+ if [alert] =~ "GPL " {
+ # This will parse out the category type from the alert
+ grok {
+ match => { "alert" => "GPL\s+%{DATA:category}\s" }
+ }
+ # This will store the category
+ mutate {
+ add_field => { "rule_type" => "Snort GPL" }
+ lowercase => [ "category"]
+ }
+ }
+ # If the alert is an Emerging Threat alert break it apart for easier reading and categorization
+ if [alert] =~ "ET " {
+ # This will parse out the category type from the alert
+ grok {
+ match => { "alert" => "ET\s+%{DATA:category}\s" }
+ }
+ # This will store the category
+ mutate {
+ add_field => { "rule_type" => "Emerging Threats" }
+ lowercase => [ "category"]
+ }
+ }
+ # I recommend changing the field types below to integer so searches can do greater than or less than
+ # and also so math functions can be ran against them
+ mutate {
+ convert => [ "source_port", "integer" ]
+ convert => [ "destination_port", "integer" ]
+ convert => [ "gid", "integer" ]
+ convert => [ "sid", "integer" ]
+ # remove_field => [ "message"]
+ }
+ # This will translate the priority field into a severity field of either High, Medium, or Low
+ if [priority] == 1 {
+ mutate {
+ add_field => { "severity" => "High" }
+ }
+ }
+ if [priority] == 2 {
+ mutate {
+ add_field => { "severity" => "Medium" }
+ }
+ }
+ if [priority] == 3 {
+ mutate {
+ add_field => { "severity" => "Low" }
+ }
+ }
+ # This section adds URLs to lookup information about a rule online
+ if [sid] and [sid] > 0 and [sid] < 1000000 {
+ mutate {
+ add_field => [ "signature_info", "https://www.snort.org/search?query=%{gid}-%{sid}" ]
+ }
+ }
+ if [sid] and [sid] > 1999999 and [sid] < 2999999 {
+ mutate {
+ add_field => [ "signature_info", "http://doc.emergingthreats.net/%{sid}" ]
+ }
+ }
+# mutate {
+ #add_tag => [ "conf_file_1033"]
+# }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/1034_preprocess_syslog.conf b/salt/logstash/conf/pipelines/search/1034_preprocess_syslog.conf
new file mode 100644
index 000000000..998109685
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/1034_preprocess_syslog.conf
@@ -0,0 +1,16 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 5/22/2017
+
+filter {
+ if [type] == "syslog" {
+ # This drops syslog messages regarding license messages. You may want to comment it out.
+ #if [message] =~ "license" {
+ # drop { }
+ #}
+ mutate {
+ #convert => [ "status_code", "integer" ]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/2000_network_flow.conf b/salt/logstash/conf/pipelines/search/2000_network_flow.conf
new file mode 100644
index 000000000..40a060955
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/2000_network_flow.conf
@@ -0,0 +1,59 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [type] == "sflow" {
+ if [message] =~ /CNTR/ {
+ drop { }
+ }
+
+ grok {
+ match => { "message" => "%{WORD:sample_type},%{IP:sflow_source_ip},%{WORD:in_port:int},%{WORD:out_port:int},%{WORD:source_mac},%{WORD:destination_mac},%{WORD:ether_type},%{NUMBER:in_vlan:int},%{NUMBER:out_vlan:int},%{IP:source_ip},%{IP:destination_ip},%{NUMBER:protocol:int},%{WORD:type_of_service},%{WORD:ttl:int},%{NUMBER:source_port:int},%{NUMBER:destination_port:int},%{DATA:tcp_flags},%{NUMBER:packet_size:int},%{NUMBER:ip_size:int},%{NUMBER:sample_rate:int}" }
+ }
+
+ if "_grokparsefailure" in [tags] {
+ drop { }
+ }
+
+ mutate {
+ add_field => {
+ "[source_hostname]" => "%{source_ip}"
+ "[destination_hostname]" => "%{destination_ip}"
+ "[sflow_source_hostname]" => "%{sflow_source_ip}"
+ }
+ }
+
+ translate {
+ field => "[source_port]"
+ destination => "[source_service]"
+ dictionary_path => "/lib/dictionaries/iana_services.yaml"
+ }
+
+ translate {
+ field => "[destination_port]"
+ destination => "[destination_service]"
+ dictionary_path => "/lib/dictionaries/iana_services.yaml"
+ }
+
+ translate {
+ field => "[protocol]"
+ destination => "[protocol_name]"
+ dictionary_path => "/lib/dictionaries/iana_protocols.yaml"
+ }
+
+ translate {
+ field => "[tcp_flags]"
+ destination => "[tcp_flag]"
+ dictionary_path => "/lib/dictionaries/tcp_flags.yaml"
+ }
+
+ mutate {
+ add_field => { "ips" => [ "%{sflow_source_ip}" ] }
+ }
+ mutate {
+ #add_tag => [ "conf_file_2000"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/6002_syslog.conf b/salt/logstash/conf/pipelines/search/6002_syslog.conf
new file mode 100644
index 000000000..f82f81a25
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/6002_syslog.conf
@@ -0,0 +1,11 @@
+# Updated by: Doug Burks
+# Last Update: 5/16/2017
+#
+filter {
+ if "syslog" in [tags] {
+ mutate {
+ #convert => [ "status_code", "integer" ]
+ #add_tag => [ "conf_file_6002"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/6101_switch_brocade.conf b/salt/logstash/conf/pipelines/search/6101_switch_brocade.conf
new file mode 100644
index 000000000..dd2f3126c
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/6101_switch_brocade.conf
@@ -0,0 +1,33 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [type] == "brocade" {
+ grok {
+ match => ["message", "<%{DATA}>%{GREEDYDATA:sys_message}"]
+ }
+ grok {
+ match => { "sys_message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid:int}\])?: %{GREEDYDATA:syslog_message}" }
+ add_field => [ "received_at", "%{@timestamp}" ]
+ }
+ if [syslog_message] =~ "Interface ethernet" or [syslog_program] == "PORT" {
+ grok {
+ match => { "syslog_message" => "%{DATA}%{INT:unit}\/%{INT:interface_type}\/%{INT:interface:int}" }
+ }
+ mutate {
+ add_field => { "interface_port" => "%{unit}/%{interface_type}/%{interface}" }
+ }
+ }
+ date {
+ match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
+ timezone => "America/Chicago"
+ remove_field => "syslog_timestamp"
+ remove_field => "received_at"
+ }
+ mutate {
+ #add_tag => [ "conf_file_6101"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/6200_firewall_fortinet.conf b/salt/logstash/conf/pipelines/search/6200_firewall_fortinet.conf
new file mode 100644
index 000000000..b33c89bb8
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/6200_firewall_fortinet.conf
@@ -0,0 +1,281 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [type] == "fortinet" {
+ mutate {
+ gsub => [ "message", "= ", "=NA " ]
+ }
+
+ grok {
+ match => ["message", "type=%{DATA:event_type}\s+"]
+ tag_on_failure => []
+ }
+ grok {
+ match => ["message", "<%{DATA}>%{GREEDYDATA:kv}"]
+ tag_on_failure => []
+ }
+ kv {
+ source => "kv"
+ exclude_keys => [ "type" ]
+ }
+ mutate {
+ gsub => [ "log", "= ", "=NA " ]
+ }
+ kv {
+ source => "log"
+ target => "SubLog"
+ }
+ grok {
+ match => ["message", "custom: DOM-ALL, dns_query=%{DATA:dns_query};"]
+ tag_on_failure => [ "" ]
+ }
+ mutate {
+ rename => { "action" => "action" }
+ rename => { "addr" => "addr_ip" }
+ rename => { "age" => "age" }
+ rename => { "assigned" => "assigned_ip" }
+ rename => { "assignip" => "assign_ip" }
+ rename => { "ap" => "access_point" }
+ rename => { "app" => "application" }
+ rename => { "appcat" => "application_category" }
+ rename => { "applist" => "application_list" }
+ rename => { "apprisk" => "application_risk" }
+ rename => { "approfile" => "accessPoint_profile" }
+ rename => { "apscan" => "access_point_scan" }
+ rename => { "apstatus" => "acces_point_status" }
+ rename => { "aptype" => "access_point_type" }
+ rename => { "authproto" => "authentication_protocol" }
+ rename => { "bandwidth" => "bandwidth" }
+ rename => { "banned_src" => "banned_source" }
+ rename => { "cat" => "category" }
+ rename => { "catdesc" => "category_description" }
+ rename => { "cfgattr" => "configuration_attribute" }
+ rename => { "cfgobj" => "configuration_object" }
+ rename => { "cfgpath" => "configuration_path" }
+ rename => { "cfgtid" => "configuration_transaction_id" }
+ rename => { "channel" => "channel" }
+ rename => { "community" => "community" }
+ rename => { "cookies" => "cookies" }
+ rename => { "craction" => "cr_action" }
+ rename => { "crlevel" => "cr_level" }
+ rename => { "crscore" => "cr_score" }
+ rename => { "datarange" => "data_range" }
+ rename => { "desc" => "description" }
+ rename => { "detectionmethod" => "detection_method" }
+ rename => { "devid" => "device_id" }
+ rename => { "devname" => "device_name" }
+ rename => { "devtype" => "device_type" }
+ rename => { "dhcp_msg" => "dhcp_message" }
+ rename => { "disklograte" => "disk_lograte" }
+ rename => { "dstcountry" => "destination_country" }
+ rename => { "dstintf" => "destination_interface" }
+ rename => { "dstip" => "destination_ip" }
+ rename => { "dstport" => "destination_port" }
+ rename => { "duration" => "elapsed_time" }
+ rename => { "error_num" => "error_number" }
+ rename => { "espauth" => "esp_authentication" }
+ rename => { "esptransform" => "esp_transform" }
+ rename => { "eventid" => "event_id" }
+ rename => { "eventtype" => "event_type" }
+ rename => { "fazlograte" => "faz_lograte" }
+ rename => { "filename" => "file_name" }
+ rename => { "filesize" => "file_size" }
+ rename => { "filetype" => "file_type" }
+ rename => { "hostname" => "hostname" }
+ rename => { "ip" => "source_ip" }
+ rename => { "localip" => "source_ip" }
+ rename => { "locip" => "local_ip" }
+ rename => { "locport" => "source_port" }
+ rename => { "logid" => "log_id" }
+ rename => { "logver" => "log_version" }
+ rename => { "manuf" => "manufacturer" }
+ rename => { "mem" => "memory" }
+ rename => { "meshmode" => "mesh_mode" }
+ rename => { "msg" => "message" }
+ rename => { "nextstat" => "next_stat" }
+ rename => { "onwire" => "on_wire" }
+ rename => { "osname" => "os_name" }
+ rename => { "osversion" => "unauthenticated_user" }
+ rename => { "outintf" => "outbound_interface" }
+ rename => { "peer_notif" => "peer_notification" }
+ rename => { "phase2_name" => "phase2_name" }
+ rename => { "policyid" => "policy_id" }
+ rename => { "policytype" => "policy_type" }
+ rename => { "port" => "port" }
+ rename => { "probeproto" => "probe_protocol" }
+ rename => { "proto" => "protocol_number" }
+ rename => { "radioband" => "radio_band" }
+ rename => { "radioidclosest" => "radio_id_closest" }
+ rename => { "radioiddetected" => "radio_id_detected" }
+ rename => { "rcvd" => "bytes_received" }
+ rename => { "rcvdbyte" => "bytes_received" }
+ rename => { "rcvdpkt" => "packets_received" }
+ rename => { "remip" => "destination_ip" }
+ rename => { "remport" => "remote_port" }
+ rename => { "reqtype" => "request_type" }
+ rename => { "scantime" => "scan_time" }
+ rename => { "securitymode" => "security_mode" }
+ rename => { "sent" => "bytes_sent" }
+ rename => { "sentbyte" => "bytes_sent" }
+ rename => { "sentpkt" => "packets_sent" }
+ rename => { "session_id" => "session_id" }
+ rename => { "setuprate" => "setup_rate" }
+ rename => { "sn" => "serial" }
+ rename => { "snclosest" => "serial_closest_access_point" }
+ rename => { "sndetected" => "serial_access_point_that_detected_rogue_ap" }
+ rename => { "snmeshparent" => "serial_mesh_parent" }
+ rename => { "srccountry" => "source_country" }
+ rename => { "srcip" => "source_ip" }
+ rename => { "srcmac" => "source_mac" }
+ rename => { "srcname" => "source_name" }
+ rename => { "srcintf" => "source_interface" }
+ rename => { "srcport" => "source_port" }
+ rename => { "stacount" => "station_count" }
+ rename => { "stamac" => "static_mac" }
+ rename => { "srccountry" => "source_country" }
+ rename => { "srcip" => "source_ip" }
+ rename => { "srcmac" => "source_mac" }
+ rename => { "srcname" => "source_name" }
+ rename => { "sn" => "serial" }
+ rename => { "srcintf" => "source_interface" }
+ rename => { "srcport" => "source_port" }
+ rename => { "total" => "total_bytes" }
+ rename => { "totalsession" => "total_sessions" }
+ rename => { "trandisp" => "nat_translation_type" }
+ rename => { "tranip" => "nat_destination_ip" }
+ rename => { "tranport" => "nat_destination_port" }
+ rename => { "transip" => "nat_source_ip" }
+ rename => { "transport" => "nat_source_port" }
+ rename => { "tunnelid" => "tunnel_id" }
+ rename => { "tunnelip" => "tunnel_ip" }
+ rename => { "tunneltype" => "tunnel_type" }
+ rename => { "unauthuser" => "unauthenticated_user_source" }
+ rename => { "unauthusersource" => "os_version" }
+ rename => { "vendorurl" => "vendor_url" }
+ rename => { "vpntunnel" => "vpn_tunnel" }
+ rename => { "vulncat" => "vulnerability_category" }
+ rename => { "vulncmt" => "vulnerability_count" }
+ rename => { "vulnid" => "vulnerability_id" }
+ rename => { "vulnname" => "vulnerability_name" }
+ rename => { "vulnref" => "vulnerability_reference" }
+ rename => { "vulnscore" => "vulnerability_score" }
+ rename => { "xauthgroup" => "x_authentication_group" }
+ rename => { "xauthuser" => "x_authentication_user" }
+ rename => { "[SubLog][appid]" => "sub_application_id" }
+ rename => { "[SubLog][devid]" => "sub_device_id" }
+ rename => { "[SubLog][dstip]" => "sub_destination_ip" }
+ rename => { "[SubLog][srcip]" => "sub_source_ip" }
+ rename => { "[SubLog][dstport]" => "sub_destination_port" }
+ rename => { "[SubLog][eventtype]" => "sub_event_type" }
+ rename => { "[SubLog][proto]" => "sub_protocol_number" }
+ rename => { "[SubLog][date]" => "sub_date" }
+ rename => { "[SubLog][time]" => "sub_time" }
+ rename => { "[SubLog][srcport]" => "sub_source_port" }
+ rename => { "[SubLog][subtype]" => "sub_subtype" }
+ rename => { "[SubLog][devname]" => "sub_device_name" }
+ rename => { "[SubLog][itime]" => "sub_itime" }
+ rename => { "[SubLog][level]" => "sub_level" }
+ rename => { "[SubLog][logid]" => "sub_log_id" }
+ rename => { "[SubLog][logver]" => "sub_log_version" }
+ rename => { "[SubLog][type]" => "sub_event_type" }
+ rename => { "[SubLog][vd]" => "sub_vd" }
+ rename => { "[SubLog][action]" => "sub_action" }
+ rename => { "[SubLog][logdesc]" => "sub_destination_ip" }
+ rename => { "[SubLog][policyid]" => "sub_olicy_id" }
+ rename => { "[SubLog][reason]" => "sub_reason" }
+ rename => { "[SubLog][service]" => "sub_service" }
+ rename => { "[SubLog][sessionid]" => "sub_session_id" }
+ rename => { "[SubLog][src]" => "sub_source_ip" }
+ rename => { "[SubLog][status]" => "sub_status" }
+ rename => { "[SubLog][ui]" => "sub_ui" }
+ rename => { "[SubLog][urlfilteridx]" => "sub_url_filter_idx" }
+ strip => [ "bytes_sent", "bytes_received" ]
+ convert => [ "bytes_sent", "integer" ]
+ convert => [ "bytes_received", "integer" ]
+ convert => [ "cr_score", "integer" ]
+ convert => [ "cr_action", "integer" ]
+ convert => [ "elapsed_time", "integer" ]
+ convert => [ "destination_port", "integer" ]
+ convert => [ "source_port", "integer" ]
+ convert => [ "local_port", "integer" ]
+ convert => [ "remote_port", "integer" ]
+ convert => [ "packets_sent", "integer" ]
+ convert => [ "packets_received", "integer" ]
+ convert => [ "port", "integer" ]
+ convert => [ "ProtocolNumber", "integer" ]
+ convert => [ "XAuthUser", "string" ]
+ remove_field => [ "kv", "log" ]
+ }
+ if [tunnel_ip] == "N/A" {
+ mutate {
+ remove_field => [ "tunnel_ip" ]
+ }
+ }
+ if [nat_destination_ip] {
+ mutate {
+ add_field => { "ips" => [ "%{nat_destination_ip}" ] }
+ add_field => { "destination_ips" => [ "%{nat_destination_ip}" ] }
+ }
+ }
+ if [sub_destination_ip] {
+ mutate {
+ add_field => { "ips" => [ "%{sub_destination_ip}" ] }
+ add_field => { "destination_ips" => [ "%{sub_destination_ip}" ] }
+ }
+ }
+ if [nat_source_ip] {
+ mutate {
+ add_field => { "ips" => [ "%{nat_source_ip}" ] }
+ add_field => { "source_ips" => [ "%{nat_source_ip}" ] }
+ }
+ }
+ if [sub_source_ip] {
+ mutate {
+ add_field => { "ips" => [ "%{sub_source_ip}" ] }
+ add_field => { "source_ips" => [ "%{sub_source_ip}" ] }
+ }
+ }
+ if [addr_ip] {
+ mutate {
+ add_field => { "ips" => [ "%{addr_ip}" ] }
+ }
+ }
+ if [assign_ip] {
+ mutate {
+ add_field => { "ips" => [ "%{assign_ip}" ] }
+ }
+ }
+ if [assigned_ip] {
+ mutate {
+ add_field => { "ips" => [ "%{assigned_ip}" ] }
+ }
+ }
+ grok {
+ match => ["message", "type=%{DATA:event_type}\s+"]
+ }
+ if [date] and [time] {
+ mutate {
+ add_field => { "receive_time" => "%{date} %{time}" }
+ remove_field => [ "date", "time" ]
+ }
+ date {
+ timezone => "America/Chicago"
+ match => [ "receive_time", "YYYY-MM-dd HH:mm:ss" ]
+ target => "receive_time"
+ }
+ mutate {
+ rename => { "receive_time" => "@timestamp" }
+ }
+ } else {
+ mutate {
+ add_tag => [ "missing_date" ]
+ }
+ }
+ mutate {
+ #add_tag => [ "conf_file_6200"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/6201_firewall_pfsense.conf b/salt/logstash/conf/pipelines/search/6201_firewall_pfsense.conf
new file mode 100644
index 000000000..acd08eba0
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/6201_firewall_pfsense.conf
@@ -0,0 +1,56 @@
+# Author: Wes Lambert
+# Updated by: Doug Burks
+
+filter {
+ if [type] == "filterlog" {
+ dissect {
+ mapping => {
+ "message" => "%{rule_number},%{sub_rule_number},%{anchor},%{tracker_id},%{interface},%{reason},%{action},%{direction},%{ip_version},%{sub_msg}"
+ }
+ }
+ if [ip_version] == "4" {
+ dissect {
+ mapping => {
+ "sub_msg" => "%{ipv4_tos},%{ipv4_ecn},%{ipv4_ttl},%{ipv4_id},%{ipv4_offset},%{ipv4_flags},%{protocol_id},%{protocol},%{protocol_length},%{source_ip},%{destination_ip},%{ip_sub_msg}"
+ }
+ }
+ }
+ if [ip_version] == "6" {
+ dissect {
+ mapping => {
+ "sub_msg" => "%{class},%{flow_label},%{hop_limit},%{protocol},%{protocol_id},%{length},%{source_ip},%{destination_ip},%{ip_sub_msg}"
+ }
+ }
+ }
+ if [protocol] == "tcp" {
+ dissect {
+ mapping => {
+ "ip_sub_msg" => "%{source_port},%{destination_port},%{data_length},%{tcp_flags},"
+ }
+ }
+ }
+ if [protocol] == "udp" {
+ dissect {
+ mapping => {
+ "ip_sub_msg" => "%{source_port},%{destination_port},%{data_length}"
+ }
+ }
+ }
+ if [protocol] == "Options" {
+ mutate {
+ copy => { "ip_sub_msg" => "options" }
+ }
+ mutate {
+ split => { "options" => "," }
+ }
+ }
+ mutate {
+ convert => [ "destination_port", "integer" ]
+ convert => [ "source_port", "integer" ]
+ convert => [ "ip_version", "integer" ]
+ replace => { "type" => "firewall" }
+ add_tag => [ "pfsense","firewall" ]
+ remove_field => [ "sub_msg", "ip_sub_msg" ]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/6300_windows.conf b/salt/logstash/conf/pipelines/search/6300_windows.conf
new file mode 100644
index 000000000..34450af2b
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/6300_windows.conf
@@ -0,0 +1,161 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [type] == "windows" {
+# json {
+# source => "message"
+# }
+ date {
+ match => ["EventTime", "YYYY-MM-dd HH:mm:ss"]
+ remove_field => [ "EventTime" ]
+ }
+ if [EventID] == 4634 {
+ mutate {
+ add_tag => [ "logoff" ]
+ }
+ }
+ if [EventID] == 4624 or [EventID] == 528 or [EventID] == 540 or [EventID] == 552 or [EventID] == 682 or [EventID] == 4648 or [EventID] == 4778 {
+ mutate {
+ add_tag => [ "logon" ]
+ add_tag => [ "alert_data" ]
+ }
+ }
+ if [EventID] == 529 or [EventID] == 4625 or [EventID] == 530 or [EventID] == 531 or [EventID] == 532 or [EventID] == 533 or [EventID] == 534 or [EventID] == 535 or [EventID] == 536 or [EventID] == 536 or [EventID] == 537 or [EventID] == 538 or [EventID] == 539 or [EventID] == 4625 or [EventID] == 4771 {
+ mutate {
+ add_tag => [ "logon_failure" ]
+ add_tag => [ "alert_data" ]
+ }
+ }
+ # Critical event IDs to monitor
+ if [EventID] == 7030 or [EventID] == 4720 or [EventID] == 4722 or [EventID] == 4724 or [EventID] == 4738 or [EventID] == 4732 or [EventID] == 1102 or [EventID] == 1056 or [EventID] == 2003 or [EventID] == 2005 or [EventID] == 8003 or [EventID] == 8004 or [EventID] == 8006 or [EventID] == 8007 {
+ mutate {
+ add_tag => [ "alert_data" ]
+ }
+ }
+ # Critical event IDs to monitor
+ if [EventID] == 5152 { drop {} }
+ if [EventID] == 4688 { drop {} }
+ if [EventID] == 4689 { drop {} } # Process Termination:Not needed due to Sysmon
+ if [Channel] == "Microsoft-Windows-Known Folders API Service" { drop {} }
+ if [EventID] == 3 and [SourceIp] =~ "255$" { drop {} }
+ if [EventID] == 3 and [DestinationIp] =~ "255$" { drop {} }
+ # Whitelist/Blacklist check
+ if [EventID] == 7045 {
+ translate {
+ field => "ServiceName"
+ destination => "ServiceCheck"
+ dictionary_path => "/lib/dictionaries/services.yaml"
+ }
+ }
+ if [EventID] == 7045 and !([ServiceCheck]) {
+ mutate {
+ add_tag => [ "alert_data","new_service" ]
+ }
+ }
+ if [ServiceCheck] == 'whitelist' {
+ mutate {
+ remove_field => [ "ServiceCheck" ]
+ add_tag => [ "whitelist" ]
+ }
+ }
+ if [ServiceCheck] == 'blacklist' {
+ mutate {
+ remove_field => [ "ServiceCheck" ]
+ add_tag => [ "blacklist" ]
+ }
+ }
+ if [EventID] == 5158 {
+ if [Application] == "System" { drop {} }
+ if [Application] =~ "\\windows\\system32\\spoolsv\.exe" { drop {} }
+ if [Application] =~ "\\windows\\system32\\wbem\\wmiprvse\.exe" { drop {} }
+ if [Application] =~ "mcafee" { drop {} }
+ if [Application] =~ "carestream" { drop {} }
+ if [Application] =~ "Softdent" { drop {} }
+ }
+ if [ProcessName] == "C:\\Windows\\System32\\wbem\\WmiPrvSE\.exe" and [SubjectUserName] == "SolarwindsHO" { drop {} }
+ if [EventID] == 4690 { drop {} }
+ if [EventID] == 861 and [AccountName] == "ntp" { drop {} }
+ if [EventID] == 5158 and [Application] =~ "\\windows\\system32\\lsass\.exe$" { drop {} }
+ if [EventID] == 5158 and [Application] =~ "\\windows\\system32\\svchost\.exe$" { drop {} }
+ if [EventID] == 5158 and [Application] =~ "\\windows\\system32\\dfsrs\.exe$" { drop {} }
+ if [EventID] == 5447 { drop {} }
+
+ mutate {
+ rename => [ "AccountName", "user" ]
+ rename => [ "AccountType", "account_type" ]
+ rename => [ "ActivityID", "activity_id" ]
+ rename => [ "Category", "category" ]
+ rename => [ "ClientAddress", "client_ip" ]
+ rename => [ "Channel", "channel" ]
+ rename => [ "DCIPAddress", "domain_controller_ip" ]
+ rename => [ "DCName", "domain_controller_name" ]
+ rename => [ "EventID", "event_id" ]
+ rename => [ "EventReceivedTime", "event_received_time" ]
+ rename => [ "EventType", "event_type" ]
+ rename => [ "GatewayIPAddress", "gateway_ip" ]
+ rename => [ "IPAddress", "client_ip" ]
+ rename => [ "Ipaddress", "client_ip" ]
+ rename => [ "IpAddress", "client_ip" ]
+ rename => [ "IPPort", "source_port" ]
+ rename => [ "OpcodeValue", "opcode_value" ]
+ rename => [ "PreAuthType", "preauthentication_type" ]
+ rename => [ "PrincipleSAMName", "user" ]
+ rename => [ "ProcessID", "process_id" ]
+ rename => [ "ProviderGUID", "providerguid" ]
+ rename => [ "RecordNumber", "record_number" ]
+ rename => [ "RemoteAddress", "destination_ip" ]
+ rename => [ "ServiceName", "service_name" ]
+ rename => [ "ServiceID", "service_id" ]
+ rename => [ "SeverityValue", "severity_value" ]
+ rename => [ "SourceAddress", "client_ip" ]
+ rename => [ "SourceModuleName", "source_module_name" ]
+ rename => [ "SourceModuleType", "source_module_type" ]
+ rename => [ "SourceName", "source_name" ]
+ rename => [ "SubjectUserName", "user" ]
+ rename => [ "TaskName", "task_name" ]
+ rename => [ "TargetDomainName", "target_domain_name" ]
+ rename => [ "TargetUserName", "user" ]
+ rename => [ "ThreadID", "thread_id" ]
+ rename => [ "User_ID", "user" ]
+ rename => [ "UserID", "user" ]
+ rename => [ "username", "user" ]
+ }
+ # For any accounts that are service accounts or special accounts add the tag of service_account
+ # This example applies the tag to any username that starts with SVC_. If you use a different
+ # standard change this.
+ if [user] =~ "^DWM-*" or [user] == "SYSTEM" or [user] == "NETWORK SERVICE" or [user] == "LOCAL SERVICE" or [user] =~ "^SVC_*" {
+ mutate {
+ add_tag => [ "service_account" ]
+ }
+ }
+ # This looks for events that are typically noisy but may be of use for deep dive investigations
+ # A tag of noise is added to quickly filter out noise
+ if [event_id] == 7036 or [source_name] == "Desktop Window Manager" or [category] == "Engine Lifecycle" or [category] == "Provider Lifecycle" {
+ mutate {
+ add_tag => [ "noise" ]
+ }
+ }
+ #Identify machine accounts
+ if [user] =~ /\$/ {
+ mutate {
+ add_tag => [ "machine", "noise" ]
+ }
+ }
+ # Lower case all field names
+ ruby {
+ code => "
+ event_hash = event.to_hash
+ new_event = {}
+ event_hash.keys.each do |key|
+ new_event[key.downcase] = event[key]
+ end
+ event.instance_variable_set(:@data, new_event)"
+ }
+ mutate {
+ #add_tag => [ "conf_file_6300"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/6301_dns_windows.conf b/salt/logstash/conf/pipelines/search/6301_dns_windows.conf
new file mode 100644
index 000000000..1ef5077a6
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/6301_dns_windows.conf
@@ -0,0 +1,49 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [type] == "dns" and "bro" not in [tags] {
+ json {
+ source => "message"
+ }
+ # strip whitespace from message field
+ mutate {
+ strip => "message"
+ }
+ # If the message is blank, drop the log
+ if [Message] =~ /^$/ {
+ drop { }
+ } else {
+ if [type] == "dns" {
+ # This section is lookup for a match against the log and parsing out the fields
+ grok {
+ match => { "Message" => "(?%{DATE_US} %{TIME} (?:AM|PM))\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{DATA:response}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:flags}\s+ %{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ match => { "Message" => "(?%{DATE_US} %{TIME} (?:AM|PM))\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{DATA:response}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:flags}\s+%{WORD:recursion}\s+%{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ match => { "Message" => "(?%{DATE_US} %{TIME} (?:AM|PM))\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{DATA:response}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:recursion}\s+%{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ match => { "Message" => "(?%{DATE_US} %{TIME} (?:AM|PM))\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{DATA:response}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ match => { "Message" => "(?%{DATE_US} %{TIME} (?:AM|PM))\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:flags}\s+ %{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ # Server 2003 DNS logs do not include slashes or AM/PM in timestamp
+ match => { "Message" => "(?%{YEAR}%{MONTHNUM}%{MONTHDAY} %{TIME})\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{DATA:response}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:flags}\s+ %{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ match => { "Message" => "(?%{YEAR}%{MONTHNUM}%{MONTHDAY} %{TIME})\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{DATA:response}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:flags}\s+%{WORD:recursion}\s+%{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ match => { "Message" => "(?%{YEAR}%{MONTHNUM}%{MONTHDAY} %{TIME})\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{DATA:response}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:recursion}\s+%{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ match => { "Message" => "(?%{YEAR}%{MONTHNUM}%{MONTHDAY} %{TIME})\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{DATA:response}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ match => { "Message" => "(?%{YEAR}%{MONTHNUM}%{MONTHDAY} %{TIME})\s+%{DATA:thread_id}\s+%{WORD:dns_type}\s+ %{BASE16NUM:packet_id}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+ %{BASE16NUM:xid}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM:hex_flags}\s+%{WORD:flags}\s+ %{WORD:rcode_name}\]\s+%{WORD:query_type_name}\s+%{GREEDYDATA:dns_domain}"}
+ remove_field => [ "Message" ]
+ }
+ # This section attempts to convert the dns_domain into the traditional domain.com format
+ mutate {
+ gsub => [ "dns_domain", "(\(\d+\))", "." ]
+ }
+ grok {
+ match => { "dns_domain" => "\.%{DATA:query}\.$" }
+ remove_field => [ "dns_domain" ]
+ }
+ }
+ }
+ mutate {
+ #add_tag => [ "conf_file_6301"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/6400_suricata.conf b/salt/logstash/conf/pipelines/search/6400_suricata.conf
new file mode 100644
index 000000000..11f185ddf
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/6400_suricata.conf
@@ -0,0 +1,92 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+#
+# This conf file is based on accepting logs for suricata json events
+filter {
+ if [type] == "suricata" {
+ if "test_data" not in [tags] {
+ date {
+ match => [ "timestamp", "ISO8601" ]
+ }
+ } else {
+ mutate {
+ remove_field => [ "netflow.start","netflow.end","timestamp" ]
+ }
+ }
+ if [event_type] == "fileinfo" {
+ ruby {
+ code => "if event['event_type'] == 'fileinfo'; event['fileinfo']['type']=event['fileinfo']['magic'].to_s.split(',')[0]; end;"
+ }
+ }
+ # I recommend renaming the fields below to be consistent with other log sources. This makes it easy to "pivot" between logs
+ mutate {
+ rename => [ "src_ip", "source_ip" ]
+ rename => [ "dest_ip", "destination_ip" ]
+ rename => [ "src_port", "source_port" ]
+ rename => [ "dest_port", "destination_port" ]
+ }
+ # This will translate the alert.severity field into a severity field of either High, Medium, or Low
+ if [event_type] == "alert" {
+ if [alert][severity] == 1 {
+ mutate {
+ add_field => { "severity" => "High" }
+ }
+ }
+ if [alert][severity] == 2 {
+ mutate {
+ add_field => { "severity" => "Medium" }
+ }
+ }
+ if [alert][severity] == 3 {
+ mutate {
+ add_field => { "severity" => "Low" }
+ }
+ }
+ # If the alert is a Snort GPL alert break it apart for easier reading and categorization
+ if [alert][signature] =~ "GPL " {
+ # This will parse out the category type from the alert
+ grok {
+ match => { "[alert][signature]" => "GPL\s+%{DATA:category}\s" }
+ }
+ # This will store the category
+ mutate {
+ add_field => { "rule_type" => "Snort GPL" }
+ lowercase => [ "category" ]
+ }
+ }
+ # If the alert is an Emerging Threat alert break it apart for easier reading and categorization
+ if [alert][signature] =~ "ET " {
+ # This will parse out the category type from the alert
+ grok {
+ match => { "[alert][signature]" => "ET\s+%{DATA:category}\s" }
+ }
+ # This will store the category
+ mutate {
+ add_field => { "rule_type" => "Emerging Threats" }
+ lowercase => [ "category" ]
+ }
+ }
+ # This section adds URLs to lookup information about a rule online
+ if [rule_type] == "Snort GPL" {
+ mutate {
+ add_field => [ "signature_info", "https://www.snort.org/search?query=%{[alert][gid]}-%{[alert][signature_id]}" ]
+ }
+ }
+ if [rule_type] == "Emerging Threats" {
+ mutate {
+ add_field => [ "signature_info", "http://doc.emergingthreats.net/%{[alert][signature_id]}" ]
+ }
+ }
+ }
+ if "_grokparsefailure" not in [tags] and "_csvparsefailure" not in [tags] and "_jsonparsefailure" not in [tags] {
+ # mutate {
+ # remove_field => [ "message" ]
+ # }
+ }
+ mutate {
+ #add_tag => [ "conf_file_6400"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/6500_ossec.conf b/salt/logstash/conf/pipelines/search/6500_ossec.conf
new file mode 100644
index 000000000..292fea49b
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/6500_ossec.conf
@@ -0,0 +1,160 @@
+# Author: Wes Lambert
+#
+# Last Update: 09/19/2018
+#
+# This conf file is based on accepting logs from OSSEC
+
+filter {
+ # OSSEC Alerts
+ if [type] == "ossec" {
+
+ # Sysmon/Autoruns logs transported by OSSEC
+ if [message] =~ "Microsoft-Windows-Sysmon" {
+ mutate {
+ replace => { "type" => "sysmon" }
+ add_tag => [ "ossec" ]
+ }
+ }
+ if [message] =~ "AR-LOG" {
+ mutate {
+ replace => { "type" => "autoruns" }
+ add_tag => [ "ossec" ]
+ }
+ }
+
+ # If message looks like json, try to parse it as such. Otherwise, grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+ mutate {
+ rename => { "rule" => "wazuh-rule" }
+ rename => { "[wazuh-rule][level]" => "alert_level" }
+ rename => { "[wazuh-rule][description]" => "description" }
+ rename => { "[data][srcuser]" => "username" }
+ rename => { "[data][dstuser]" => "escalated_user" }
+ rename => { "[data][command]" => "command" }
+ rename => { "[predecoder][program_name]" => "process" }
+
+ }
+ # Wazuh 3.8.2
+ if [data][EventChannel] {
+ mutate {
+ rename => { "[data][EventChannel][EventData][User]" => "username" }
+ rename => { "[data][EventChannel][System][EventID]" => "event_id" }
+ rename => { "[data][EventChannel][EventData][DestinationPort]" => "destination_port" }
+ rename => { "[data][EventChannel][EventData][DestinationIp]" => "destination_ip" }
+ rename => { "[data][EventChannel][EventData][SourcePort]" => "source_port" }
+ rename => { "[data][EventChannel][EventData][SourceIp]" => "source_ip" }
+ rename => { "[data][EventChannel][EventData][SourceHostname]" => "source_hostname" }
+ rename => { "[data][EventChannel][EventData][DestinationHostname]" => "destination_hostname" }
+ }
+ }
+ # Wazuh 3.9.2
+ if [data][win] {
+ mutate {
+ rename => { "[data][win][eventdata][user]" => "username" }
+ rename => { "[data][win][system][eventID]" => "event_id" }
+ rename => { "[data][win][eventdata][destinationPort]" => "destination_port" }
+ rename => { "[data][win][eventdata][destinationIp]" => "destination_ip" }
+ rename => { "[data][win][eventdata][sourcePort]" => "source_port" }
+ rename => { "[data][win][eventdata][sourceIp]" => "source_ip" }
+ rename => { "[data][win][eventdata][sourceHostname]" => "source_hostname" }
+ rename => { "[data][win][eventdata][destinationHostname]" => "destination_hostname" }
+ }
+ }
+ } else {
+ grok {
+ match => ["message", "Alert Level: %{NONNEGINT;alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; user: +%{DATA:username}; %{SYSLOGTIMESTAMP} %{DATA:host} %{DATA:process}\[%{INT:pid}]: %{GREEDYDATA:details}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{SYSLOGTIMESTAMP:timestamp} %{DATA:host} %{DATA:process}\[%{NONNEGINT:pid}]: %{GREEDYDATA:details}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{SYSLOGTIMESTAMP} %{DATA:host} %{DATA:process}\[%{NONNEGINT:pid}]: %{GREEDYDATA:details}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{SYSLOGTIMESTAMP:timestamp} %{DATA:host} %{DATA:program}: +%{DATA:username} : TTY=%{DATA:tty} ; PWD=%{DATA:dir} ; USER=%{DATA:escalated_user} ; COMMAND=%{GREEDYDATA:command}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{SYSLOGTIMESTAMP:timestamp} %{DATA:host} %{DATA:program}: %{GREEDYDATA:details}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{SYSLOGTIMESTAMP:timestamp} %{DATA:host} %{DATA:program}: +%{DATA:username} : %{GREEDYDATA:details}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; srcip: %{IP:source_ip};%{GREEDYDATA:details}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{DATA:username}: %{DATA}: \'%{DATA}': %{DATA:interface}: %{INT:num_packets}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{DATA:username}: %{GREEDYDATA:details}.",
+ "message", "Alert Level: %{NONNEGINT:alert_Level}; Rule: %{NONNEGINT:Rule} - %{DATA:Description}; Location: %{DATA:location}; user: +%{DATA:username};",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{DATA}: %{DATA}: \'%{DATA}': %{DATA:interface}: %{NONNEGINT:num_packets}",
+ "message", "Alert Level: %{NONNEGINT:alert_level}; Rule: %{NONNEGINT:rule} - %{DATA:description}; Location: %{DATA:location}; %{GREEDYDATA:details}"]
+ }
+ }
+
+ # Add tag for OSSEC alerts
+ if [alert_level] {
+ mutate {
+ add_tag => [ "alert" ]
+ }
+ }
+
+ translate {
+ field => "alert_level"
+
+ destination => "classification"
+
+ dictionary => [
+ "1", "None",
+ "2", "System low priority notification",
+ "3", "Successful/authorized event",
+ "4", "System low priority error",
+ "5", "User generated error",
+ "6", "Low relevance attack",
+ "7", '"Bad word" matching',
+ "8", "First time seen",
+ "9", "Error from invalid source",
+ "10", "Multiple user generated errors",
+ "11", "Integrity checking warning",
+ "12", "High importance event",
+ "13", "Unusal error (high importance)",
+ "14", "High importance security event",
+ "15", "Severe attack"
+ ]
+ }
+ }
+
+ # OSSEC Archive Logs
+ if [type] == "ossec_archive" {
+
+ # Sysmon/Autoruns logs transported by OSSEC
+ if [message] =~ "Microsoft-Windows-Sysmon" {
+ mutate {
+ replace => { "type" => "sysmon" }
+ add_tag => [ "ossec" ]
+ }
+ }
+ if [message] =~ "AR-LOG" {
+ mutate {
+ replace => { "type" => "autoruns" }
+ add_tag => [ "ossec" ]
+ }
+ }
+
+ # If message looks like json, try to parse it as such. Otherwise, grok.
+ if [message] =~ /^{.*}$/ {
+ json {
+ source => "message"
+ }
+ mutate {
+ rename => [ "rule", "wazuh-rule" ]
+ rename => [ "[wazuh-rule][level]", "alert_level" ]
+ rename => [ "[wazuh-rule][description]", "description" ]
+ rename => [ "[data][srcuser]", "username" ]
+ rename => [ "[data][dstuser]", "escalated_user" ]
+ rename => [ "[data][command]", "command" ]
+ rename => [ "[predecoder][program_name]", "process" ]
+ }
+ } else {
+ grok {
+ match => ["message",'%{YEAR:year} %{SYSLOGTIMESTAMP:timestamp} %{DATA:location} %{IP:source_ip} - %{DATA:username} \[%{DATA:request_timestamp}] "%{DATA:method} %{DATA:requested_resource} %{DATA:protocol}\/%{DATA:protocol_version}" %{NONNEGINT:status_code} %{NONNEGINT:object_size} "%{DATA:referrer}" "%{DATA:user_agent}"',
+ "message","%{YEAR:year} %{SYSLOGTIMESTAMP:timestamp} %{DATA:location} %{SYSLOGTIMESTAMP:ossec_timestamp} %{DATA:host} %{DATA:process}\[%{NONNEGINT:pid}]: \(%{DATA:username}\) CMD \(%{DATA:command}\)",
+ "message", "%{YEAR:year} %{SYSLOGTIMESTAMP:timestamp} %{DATA:location} %{GREEDYDATA:details}","message","%{YEAR:year} %{SYSLOGTIMESTAMP:timestamp} %{DATA:location} %{SYSLOGTIMESTAMP:ossec_timestamp} %{DATA:ossec_host} %{DATA:process}\[%{NONNEGINT:pid}]: %{GREEDYDATA:details}",
+ "message","%{DATA:age} %{DATA:program} %{DATA} '%{DATA:checksum}'",
+ "message", "%{DATA:username} : TTY=%{DATA:tty} ; PWD=%{DATA:dir} ; USER=%{DATA:escalated_user} ; COMMAND=%{GREEDYDATA:command}"]
+ remove_field => [ "ossec_timestamp" ]
+ }
+ mutate {
+ convert => [ "status_code", "integer" ]
+ }
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/6501_ossec_sysmon.conf b/salt/logstash/conf/pipelines/search/6501_ossec_sysmon.conf
new file mode 100644
index 000000000..6ebf10487
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/6501_ossec_sysmon.conf
@@ -0,0 +1,118 @@
+# Author: Wes Lambert
+# wlambertts@gmail.com
+#
+# This conf file is based on accepting Sysmon logs from OSSEC
+#
+# Parse using grok
+filter {
+ # OSSEC Logs and Alerts
+ if [type] == "sysmon" or "sysmon" in [tags] {
+ if [message] !~ /^{.*}$/ {
+ #mutate { replace => { "type" => "sysmon" } }
+ grok {
+ # match => ["message","%{YEAR:year} %{SYSLOGTIMESTAMP:timestamp} %{DATA:location} %{IP:source_ip}->WinEvtLog %{YEAR:year} %{SYSLOGTIMESTAMP:ossec_timestamp} WinEvtLog: Microsoft-Windows-Sysmon/Operational: INFORMATION\(%{INT:sysmon_event_id}\):"]
+ match => ["message", "%{YEAR:year}%{SPACE}%{SYSLOGTIMESTAMP:timestamp}%{SPACE}%{DATA:location}%{SPACE}(any|%{IP:source_ip})->WinEvtLog%{SPACE}%{YEAR:year}%{SPACE}%{SYSLOGTIMESTAMP:ossec_timestamp}%{SPACE}WinEvtLog:%{SPACE}Microsoft-Windows-Sysmon/Operational:%{SPACE}INFORMATION\(%{INT:event_id}\):%{SPACE}%{GREEDYDATA:rest_of_msg}"]
+ }
+ mutate {
+ convert => ["event_id", "integer"]
+ remove_field => ["timestamp"]
+ remove_field => ["year"]
+ }
+ if [event_id] == 1 {
+ grok {
+ match => ["rest_of_msg", "Microsoft-Windows-Sysmon:%{SPACE}SYSTEM:%{SPACE}NT%{SPACE}AUTHORITY:%{SPACE}%{DATA:hostname}:%{SPACE}%{DATA:event_type}:%{SPACE}UtcTime:%{SPACE}%{DATA:sysmon_timestamp}%{SPACE}ProcessGuid:%{SPACE}\{%{DATA:process_guid}\}%{SPACE}ProcessId:%{SPACE}%{INT:process_id}%{SPACE}Image:%{SPACE}%{DATA:image_path}%{SPACE}CommandLine:%{SPACE}%{DATA:process_name} %{DATA:process_arguments}%{SPACE}CurrentDirectory:%{SPACE}%{DATA:current_directory}%{SPACE}User:%{SPACE}%{DATA:username}%{SPACE}LogonGuid:%{SPACE}\{%{DATA:logon_guid}\}%{SPACE}LogonId:%{SPACE}%{DATA:logon_id}%{SPACE}TerminalSessionId:%{SPACE}%{INT:terminal_id}%{SPACE}IntegrityLevel:%{SPACE}%{DATA:integrity_level}%{SPACE}Hashes:%{SPACE}MD5=%{DATA:md5},SHA256=%{DATA:sha256}%{SPACE}ParentProcessGuid:%{SPACE}\{%{DATA:parent_process_guid}\}%{SPACE}ParentProcessId:%{SPACE}%{NONNEGINT:parent_process_id}%{SPACE}ParentImage:%{SPACE}%{DATA:parent_image_path}%{SPACE}ParentCommandLine:%{SPACE}%{GREEDYDATA:parent_process_name}",
+ "rest_of_msg", 'Microsoft-Windows-Sysmon:%{SPACE}SYSTEM:%{SPACE}NT%{SPACE}AUTHORITY:%{SPACE}%{DATA:hostname}:%{SPACE}%{DATA:event_type}:%{SPACE}UtcTime:%{SPACE}%{DATA:sysmon_timestamp}%{SPACE}ProcessGuid:%{SPACE}\{%{DATA:process_guid}\}%{SPACE}ProcessId:%{SPACE}%{INT:process_id}%{SPACE}Image:%{SPACE}%{DATA:image_path}%{SPACE}CommandLine:%{SPACE}"%{DATA:process_name}"%{SPACE}%{DATA:process_arguments}%{SPACE}CurrentDirectory:%{SPACE}%{DATA:current_directory}%{SPACE}User:%{SPACE}%{DATA:username}%{SPACE}LogonGuid:%{SPACE}\{%{DATA:logon_guid}\}%{SPACE}LogonId:%{SPACE}%{DATA:logon_id}%{SPACE}TerminalSessionId:%{SPACE}%{INT:terminal_id}%{SPACE}IntegrityLevel:%{DATA:integrity_level}',
+ "rest_of_msg", "Microsoft-Windows-Sysmon/Operational:%{SPACE}INFORMATION(%{INT:event_id}):%{SPACE}Microsoft-Windows-Sysmon:%{SPACE}SYSTEM:%{SPACE}NT AUTHORITY:%{SPACE}%{DATA:hostname}:%{SPACE}%{DATA:event_type}:%{SPACE}UtcTime:%{SPACE}%{DATA:sysmon_timestamp}%{SPACE}ProcessGuid:%{SPACE}{%{DATA:process_guid}}%{SPACE}ProcessId:%{SPACE}%{INT:process_id}%{SPACE}Image:%{SPACE}%{DATA:image_path}%{SPACE}CommandLine:%{SPACE}%{DATA:process_name}%{SPACE}%{DATA:process_arguments}CurrentDirectory:%{SPACE}%{DATA:current_directory}%{SPACE}User:%{SPACE}%{DATA:username}%{SPACE}LogonGuid:%{SPACE}{%{DATA:logon_guid}}%{SPACE}LogonId:%{SPACE}%{DATA:logon_id}%{SPACE}TerminalSessionId:%{SPACE}%{INT:terminal_id}%{SPACE}IntegrityLevel:%{SPACE}%{DATA:integrity_level}%{SPACE}Hashes:%{SPACE}MD5=%{DATA:md5},SHA256=%{DATA:sha256}%{SPACE}ParentProcessGuid:%{SPACE}{%{DATA:parent_process_guid}}%{SPACE}ParentProcessId:%{SPACE}%{NONNEGINT:parent_process_id}%{SPACE}ParentImage:%{SPACE}%{DATA:parent_image_path}%{SPACE}ParentCommandLine:%{SPACE}%{GREEDYDATA:parent_process_name}"]
+ }
+ mutate {
+ convert => ["process_guid", "integer"]
+ convert => ["process_id", "integer"]
+ add_tag => ["process_creation"]
+ }
+ }
+ if [event_id] == 3 {
+ mutate {
+ remove_field => ["source_ip"]
+ }
+ grok {
+ match => ["rest_of_msg", "Microsoft-Windows-Sysmon:%{SPACE}SYSTEM:%{SPACE}NT%{SPACE}AUTHORITY:%{SPACE}%{DATA:hostname}:%{SPACE}%{DATA:event_type}:%{SPACE}UtcTime:%{SPACE}%{DATA:sysmon_timestamp}%{SPACE}ProcessGuid:%{SPACE}\{%{DATA:process_guid}\}%{SPACE}ProcessId:%{SPACE}%{NONNEGINT:process_id}%{SPACE}Image:%{SPACE}%{DATA:image_path}%{SPACE}User:%{SPACE}%{DATA:username}%{SPACE}Protocol:%{SPACE}%{DATA:protocol}%{SPACE}Initiated:%{SPACE}%{DATA:initiated}%{SPACE}SourceIsIpv6:%{SPACE}%{DATA:is_source_ipv6}%{SPACE}SourceIp:%{SPACE}%{IP:source_ip}%{SPACE}SourceHostname:%{SPACE}%{DATA:source_hostname}%{SPACE}SourcePort:%{SPACE}%{NONNEGINT:source_port}%{SPACE}SourcePortName:%{SPACE}%{DATA:source_port_name}%{SPACE}DestinationIsIpv6:%{SPACE}%{DATA:dest_is_ipv6}%{SPACE}DestinationIp:%{SPACE}%{IP:destination_ip}%{SPACE}DestinationHostname:%{SPACE}%{DATA:destination_hostname}%{SPACE}DestinationPort:%{SPACE}%{NONNEGINT:destination_port}%{SPACE}DestinationPortName:%{SPACE}%{GREEDYDATA:destination_port_name}"]
+ }
+ mutate {
+ convert => ["process_guid", "integer"]
+ convert => ["process_id", "integer"]
+ convert => ["source_port", "integer"]
+ convert => ["destination_port", "integer"]
+ add_tag => ["network_connection"]
+ }
+ }
+ if [event_id] == 5 {
+ grok {
+ match => ["rest_of_msg", "Microsoft-Windows-Sysmon:%{SPACE}SYSTEM:%{SPACE}NT%{SPACE}AUTHORITY:%{SPACE}%{DATA:hostname}:%{SPACE}%{DATA:event_type}:%{SPACE}UtcTime:%{SPACE}%{DATA:sysmon_timestamp}%{SPACE}ProcessGuid:%{SPACE}\{%{DATA:process_guid}\}%{SPACE}ProcessId:%{SPACE}%{NONNEGINT:process_id}%{SPACE}Image:%{SPACE}%{GREEDYDATA:image_path}"]
+ }
+ mutate {
+ convert => ["process_guid", "integer"]
+ convert => ["process_id", "integer"]
+ add_tag => ["process_termination"]
+ }
+ }
+ if [event_id] == 11 {
+ grok {
+ match => ["rest_of_msg","Microsoft-Windows-Sysmon:%{SPACE}SYSTEM:%{SPACE}NT%{SPACE}AUTHORITY:%{SPACE}%{DATA:hostname}:%{SPACE}%{DATA:event_type}:%{SPACE}UtcTime:%{SPACE}%{DATA:sysmon_timestamp}%{SPACE}ProcessGuid:%{SPACE}\{%{DATA:process_guid}\}%{SPACE}ProcessId:%{SPACE}%{NONNEGINT:process_id}%{SPACE}Image:%{SPACE}%{DATA:image_path}%{SPACE}TargetFilename:%{SPACE}%{DATA:target_filename}%{SPACE}CreationUtcTime:%{SPACE}%{DATA:creation_time}%{SPACE}"]
+ }
+ mutate {
+ convert => ["process_guid", "integer"]
+ convert => ["process_id", "integer"]
+ add_tag => ["file_created"]
+ }
+ }
+ mutate {
+ remove_field => ["rest_of_msg"]
+ }
+ } else {
+ mutate {
+ rename => { "[data][srcuser]" => "username" }
+ rename => { "[data][id]" => "event_id" }
+ rename => { "[data][dstport]" => "destination_port" }
+ rename => { "[data][dstip]" => "destination_ip" }
+ rename => { "[data][srcip]" => "source_ip" }
+ rename => { "[data][sysmon][image]" => "image_path" }
+ rename => { "[data][sysmon][parentImage]" => "parent_image_path" }
+ rename => { "[data][sysmon][targetfilename]" => "target_filename" }
+ rename => { "[data][sysmon][sourceHostname]" => "source_hostname" }
+ rename => { "[data][sysmon][destinationHostname]" => "destination_hostname" }
+ }
+ # Wazuh 3.8.2
+ if [data][EventChannel] {
+ mutate {
+ rename => { "[data][EventChannel][EventData][User]" => "username" }
+ rename => { "[data][EventChannel][System][EventID]" => "event_id" }
+ rename => { "[data][EventChannel][EventData][DestinationPort]" => "destination_port" }
+ rename => { "[data][EventChannel][EventData][DestinationIp]" => "destination_ip" }
+ rename => { "[data][EventChannel][EventData][SourcePort]" => "source_port" }
+ rename => { "[data][EventChannel][EventData][SourceIp]" => "source_ip" }
+ rename => { "[data][EventChannel][EventData][Image]" => "image_path" }
+ rename => { "[data][EventChannel][EventData][ParentImage]" => "parent_image_path" }
+ rename => { "[data][EventChannel][EventData][TargetFilename]" => "target_filename" }
+ rename => { "[data][EventChannel][EventData][SourceHostname]" => "source_hostname" }
+ rename => { "[data][EventChannel][EventData][DestinationHostname]" => "destination_hostname" }
+ }
+ }
+ # Wazuh 3.9.2
+ if [data][win] {
+ mutate {
+ rename => { "[data][win][eventdata][user]" => "username" }
+ rename => { "[data][win][system][eventID]" => "event_id" }
+ rename => { "[data][win][eventdata][destinationPort]" => "destination_port" }
+ rename => { "[data][win][eventdata][destinationIp]" => "destination_ip" }
+ rename => { "[data][win][eventdata][sourcePort]" => "source_port" }
+ rename => { "[data][win][eventdata][sourceIp]" => "source_ip" }
+ rename => { "[data][win][eventdata][image]" => "image_path" }
+ rename => { "[data][win][eventdata][parentImage]" => "parent_image_path" }
+ rename => { "[data][win][eventdata][targetFilename]" => "target_filename" }
+ rename => { "[data][win][eventdata][sourceHostname]" => "source_hostname" }
+ rename => { "[data][win][eventdata][destinationHostname]" => "destination_hostname" }
+ }
+ }
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/6502_ossec_autoruns.conf b/salt/logstash/conf/pipelines/search/6502_ossec_autoruns.conf
new file mode 100644
index 000000000..5d7207891
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/6502_ossec_autoruns.conf
@@ -0,0 +1,43 @@
+# Author: Wes Lambert
+# wlambertts@gmail.com
+#
+# Updated by: Dustin Lee
+# Last Update: 06/13/2019
+#
+# This conf file is based on accepting Autoruns logs from OSSEC
+#
+# Parse using grok
+filter {
+ if [type] == "autoruns" or "autoruns" in [tags] {
+ if [message] !~ /^{.*}$/ {
+ grok {
+ match => [
+ "message", "%{YEAR:year} %{SYSLOGTIMESTAMP:ossec_timestamp} \(%{DATA:ossec_agent_name}\) %{IP:source_ip}->%{DATA:location} %{DATA:log_name}\|%{DATA:hostname}\|%{DATESTAMP:log_timestamp}\|%{DATA:event_timestamp}\|%{DATA:image_timestamp}\|%{DATA:entry_location}\|%{DATA:entry}\|%{DATA:enabled}\|%{DATA:category}\|%{DATA:profile}\|%{DATA:description}\|%{DATA:signer}\|%{DATA:company}\|%{DATA:image_path}\|%{DATA:version}\|%{DATA:launch_string}\|%{DATA:md5}\|%{DATA:sha1}\|%{DATA:pesha1}\|%{DATA:pesha256}\|%{DATA:sha256}\|%{DATA:imphash}",
+ "message", "%{YEAR:year} %{SYSLOGTIMESTAMP:ossec_timestamp} \(%{DATA:ossec_agent_name}\) %{IP:source_ip}->%{DATA:location} %{DATA:log_name}\|%{DATA:hostname}\|%{DATESTAMP:log_timestamp}\|%{DATA:event_timestamp}\|%{DATA:entry_location}\|%{DATA:entry}\|%{DATA:enabled}\|%{DATA:category}\|%{DATA:profile}\|%{DATA:description}\|%{DATA:signer}\|%{DATA:company}\|%{DATA:image_path}\|%{DATA:version}\|%{DATA:launch_string}\|%{DATA:md5}\|%{DATA:sha1}\|%{DATA:pesha1}\|%{DATA:pesha256}\|%{DATA:sha256}\|%{DATA:imphash}"
+ ]
+ }
+ #csv {
+# columns => ["log_name","entry_location","entry","enabled","category","autoruns_description","signer","company","image_path","version","launch_string","md5","sha1","pesha1","pesha256","sha256","imphash"]
+# separator => "|"
+# }
+ mutate {
+ remove_field => [ "year" ]
+ remove_field => [ "timestamp" ]
+ }
+ } else {
+ grok {
+ match => [
+ "full_log", "AR-LOG\|%{DATA:hostname}\|%{DATA:event_timestamp}\|%{DATA:image_timestamp}\|%{DATA:entry_location}\|%{DATA:entry}\|%{DATA:enabled}\|%{DATA:category}\|%{DATA:profile}\|%{DATA:description}\|%{DATA:signer}\|%{DATA:company}\|%{DATA:image_path}\|%{DATA:version}\|%{DATA:launch_string}\|%{DATA:md5}\|%{DATA:sha1}\|%{DATA:pesha1}\|%{DATA:pesha256}\|%{DATA:sha256}\|%{DATA:imphash}",
+ "full_log", "AR-LOG\|%{DATA:hostname}\|%{DATA:event_timestamp}\|%{DATA:entry_location}\|%{DATA:entry}\|%{DATA:enabled}\|%{DATA:category}\|%{DATA:profile}\|%{DATA:description}\|%{DATA:signer}\|%{DATA:company}\|%{DATA:image_path}\|%{DATA:version}\|%{DATA:launch_string}\|%{DATA:md5}\|%{DATA:sha1}\|%{DATA:pesha1}\|%{DATA:pesha256}\|%{DATA:sha256}\|%{DATA:imphash}"
+ ]
+ }
+ mutate {
+ # Rename fields
+ }
+ }
+ date {
+ match => [ "image_timestamp", "yyyyMMdd-HHmmss" ]
+ target => "image_timestamp"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/6600_winlogbeat_sysmon.conf b/salt/logstash/conf/pipelines/search/6600_winlogbeat_sysmon.conf
new file mode 100644
index 000000000..200b58497
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/6600_winlogbeat_sysmon.conf
@@ -0,0 +1,23 @@
+# Author: Wes Lambert
+#
+# Last Update: 09/24/2018
+#
+# This conf file is based on accepting Sysmon logs from winlogbeat
+
+filter {
+ if "beat" in [tags] and [source_name] =~ "Microsoft-Windows-Sysmon" {
+ mutate {
+ replace => { "type" => "sysmon" }
+ rename => { "[event_data][User]" => "username" }
+ rename => { "[event_data][DestinationPort]" => "destination_port" }
+ rename => { "[event_data][DestinationIp]" => "destination_ip" }
+ rename => { "[event_data][SourceIp]" => "source_ip" }
+ rename => { "[event_data][Image]" => "image_path" }
+ rename => { "[event_data][ParentImage]" => "parent_image_path" }
+ rename => { "[data][sysmon][targetfilename]" => "target_filename" }
+ rename => { "[event_data][SourceHostname]" => "source_hostname" }
+ rename => { "[event_data][DestinationHostname]" => "destination_hostname" }
+ rename => { "[event_data][TargetFilename]" => "target_filename" }
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/6700_winlogbeat.conf b/salt/logstash/conf/pipelines/search/6700_winlogbeat.conf
new file mode 100644
index 000000000..222757956
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/6700_winlogbeat.conf
@@ -0,0 +1,17 @@
+# Author: Doug Burks
+#
+# Last Update: 09/24/2018
+#
+# This conf file is for beat data
+
+filter {
+ if "beat" in [tags] {
+ mutate {
+ # As of beats 6.3.0, host is now an object:
+ # https://www.elastic.co/guide/en/beats/libbeat/current/release-notes-6.3.0.html
+ # This creates a conflict with our existing host string.
+ # So let's rename the host object to beat_host.
+ rename => { "host" => "beat_host" }
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/7100_osquery_wel.conf b/salt/logstash/conf/pipelines/search/7100_osquery_wel.conf
new file mode 100644
index 000000000..b4d77d83f
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/7100_osquery_wel.conf
@@ -0,0 +1,23 @@
+# Author: Josh Brower
+# Last Update: 12/28/2018
+# If log is tagged osquery and there is an eventid column - then cleanup and parse out the EventData column
+
+filter {
+ if "osquery" in [tags] and [osquery][columns][eventid] {
+
+ mutate {
+ gsub => ["[osquery][columns][data]", "\\x0A", ""]
+ }
+
+ json {
+ source => "[osquery][columns][data]"
+ target => "[osquery][columns][data]"
+ }
+
+ mutate {
+ merge => { "[osquery][columns]" => "[osquery][columns][data]" }
+ remove_field => ["[osquery][columns][data]"]
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/salt/logstash/conf/pipelines/search/8001_postprocess_common_ip_augmentation.conf b/salt/logstash/conf/pipelines/search/8001_postprocess_common_ip_augmentation.conf
new file mode 100644
index 000000000..d28449da6
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/8001_postprocess_common_ip_augmentation.conf
@@ -0,0 +1,58 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 5/20/2017
+
+filter {
+ if [source_ip] {
+ if [source_ip] == "-" {
+ mutate {
+ replace => { "source_ip" => "0.0.0.0" }
+ }
+ }
+ if [source_ip] =~ "10\." or [source_ip] =~ "192\.168\." or [source_ip] =~ "172\.(1[6-9]|2[0-9]|3[0-1])\." or [source_ip] =~ "fe80::20c:29ff:fe19:f7d" or [source_ip] =~ "::1" {
+ mutate {
+ }
+ } else {
+ geoip {
+ source => "[source_ip]"
+ target => "source_geo"
+ }
+ }
+ if [source_ip] {
+ mutate {
+ add_field => { "ips" => "%{source_ip}" }
+ add_field => { "source_ips" => [ "%{source_ip}" ] }
+ }
+ }
+ }
+ if [destination_ip] {
+ if [destination_ip] == "-" {
+ mutate {
+ replace => { "destination_ip" => "0.0.0.0" }
+ }
+ }
+ if [destination_ip] =~ "10\." or [destination_ip] =~ "192\.168\." or [destination_ip] =~ "172\.(1[6-9]|2[0-9]|3[0-1])\." or [destination_ip] =~ "239.255.255.250" or [destination_ip] =~ "224\.0\.0\." or [destination_ip] =~ "255.255.255.255" or [destination_ip] =~ "ff02::fb" or [destination_ip] =~ "fe80::20c:29ff:fe19:f7d" or [destination_ip] =~ "224\.0\.1\." {
+ mutate {
+ }
+ }
+ else {
+ geoip {
+ source => "[destination_ip]"
+ target => "destination_geo"
+ }
+ }
+ }
+ if [destination_ip] {
+ mutate {
+ add_field => { "ips" => "%{destination_ip}" }
+ add_field => { "destination_ips" => [ "%{destination_ip}" ] }
+ }
+ }
+}
+ #if [source_ip] or [destination_ip] {
+ # mutate {
+ #add_tag => [ "conf_file_8001"]
+ # }
+ #}
+
diff --git a/salt/logstash/conf/pipelines/search/8007_postprocess_http.conf b/salt/logstash/conf/pipelines/search/8007_postprocess_http.conf
new file mode 100644
index 000000000..b9c9d224b
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/8007_postprocess_http.conf
@@ -0,0 +1,27 @@
+# Original Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 5/13/2017
+
+filter {
+ if [type] == "bro_http" {
+ if [uri] {
+ ruby {
+ code => "event.set('uri_length', event.get('uri').length)"
+ }
+ }
+ if [virtual_host] {
+ ruby {
+ code => "event.set('virtual_host_length', event.get('virtual_host').length)"
+ }
+ }
+ if [useragent] {
+ ruby {
+ code => "event.set('useragent_length', event.get('useragent').length)"
+ }
+ }
+ mutate {
+ ##add_tag => [ "conf_file_8007"]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/8200_postprocess_tagging.conf b/salt/logstash/conf/pipelines/search/8200_postprocess_tagging.conf
new file mode 100644
index 000000000..e698b3ce3
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/8200_postprocess_tagging.conf
@@ -0,0 +1,63 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [destination_ip] {
+ if [destination_ip] =~ "10\." or [destination_ip] =~ "192\.168\." or [destination_ip] =~ "172\.(1[6-9]|2[0-9]|3[0-1])\." {
+ mutate {
+ add_tag => [ "internal_destination" ]
+ }
+ } else {
+ mutate {
+ add_tag => [ "external_destination" ]
+ }
+ }
+ if "internal_destination" not in [tags] {
+ if [destination_ip] == "198.41.0.4" or [destination_ip] == "192.228.79.201" or [destination_ip] == "192.33.4.12" or [destination_ip] == "199.7.91.13" or [destination_ip] == "192.203.230.10" or [destination_ip] == "192.5.5.241" or [destination_ip] == "192.112.36.4" or [destination_ip] == "198.97.190.53" or [destination_ip] == "192.36.148.17" or [destination_ip] == "192.58.128.30" or [destination_ip] == "193.0.14.129" or [destination_ip] == "199.7.83.42" or [destination_ip] == "202.12.27.33" {
+ mutate {
+ add_tag => [ "root_dns_server" ]
+ }
+ }
+ }
+ # Customize this section to your environment
+ if [destination_ip] == "74.40.74.40" or [destination_ip] == "74.40.74.41" {
+ mutate {
+ add_tag => [ "authorized_dns_server" ]
+ }
+ }
+ }
+ if [source_ip] {
+ if [source_ip] =~ "10\." or [source_ip] =~ "192\.168\." or [source_ip] =~ "172\.(1[6-9]|2[0-9]|3[0-1])\." {
+ mutate {
+ add_tag => [ "internal_source" ]
+ }
+ } else {
+ mutate {
+ add_tag => [ "external_source" ]
+ }
+ }
+ if "internal_source" not in [tags] {
+ if [source_ip] == "198.41.0.4" or [source_ip] == "192.228.79.201" or [source_ip] == "192.33.4.12" or [source_ip] == "199.7.91.13" or [source_ip] == "192.203.230.10" or [source_ip] == "192.5.5.241" or [source_ip] == "192.112.36.4" or [source_ip] == "198.97.190.53" or [source_ip] == "192.36.148.17" or [source_ip] == "192.58.128.30" or [source_ip] == "193.0.14.129" or [source_ip] == "199.7.83.42" or [source_ip] == "202.12.27.33" {
+ mutate {
+ add_tag => [ "root_dns_server" ]
+ }
+ }
+ }
+ # Customize this section to your environment
+ if [destination_ip] == "74.40.74.40" and "authorized_dns_server" not in [tags] or [destination_ip] == "74.40.74.41" and "authorized_dns_server" not in [tags] {
+ mutate {
+ add_tag => [ "authorized_dns_server" ]
+ }
+ }
+ mutate {
+ ##add_tag => [ "conf_file_8200"]
+ }
+ }
+ if [type] =~ /ossec|snort|firewall/ or "firewall" in [tags] {
+ mutate {
+ remove_tag => [ "syslog" ]
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/8998_postprocess_log_elapsed.conf b/salt/logstash/conf/pipelines/search/8998_postprocess_log_elapsed.conf
new file mode 100644
index 000000000..478c6b0e0
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/8998_postprocess_log_elapsed.conf
@@ -0,0 +1,19 @@
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ ruby {
+ code => "event.set('task_end', Time.now.to_f)"
+ }
+ ruby {
+ code => "event.set('logstash_time', event.get('task_end') - event.get('task_start'))"
+ }
+ mutate {
+ remove_field => [ 'task_start', 'task_end' ]
+ }
+ mutate {
+ #add_tag => [ "conf_file_8998"]
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/8999_postprocess_rename_type.conf b/salt/logstash/conf/pipelines/search/8999_postprocess_rename_type.conf
new file mode 100644
index 000000000..383fd9827
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/8999_postprocess_rename_type.conf
@@ -0,0 +1,8 @@
+# Author: Doug Burks
+# Last Update: 12/10/2017
+
+filter {
+ mutate {
+ rename => [ "type", "event_type" ]
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/0900_input_redis.conf b/salt/logstash/conf/pipelines/search/templates/0900_input_redis.conf
new file mode 100644
index 000000000..ede940367
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/0900_input_redis.conf
@@ -0,0 +1,14 @@
+{%- if grains.role == 'so-heavynode' %}
+{%- set master = salt['pillar.get']('node:mainip', '') %}
+{%- else %}
+{%- set master = salt['pillar.get']('static:masterip', '') %}
+{% endif -%}
+input {
+ redis {
+ host => '{{ master }}'
+ data_type => 'list'
+ key => 'logstash:unparsed'
+ type => 'redis-input'
+ # threads => 1
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/9000_output_bro.conf b/salt/logstash/conf/pipelines/search/templates/9000_output_bro.conf
new file mode 100644
index 000000000..553500281
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9000_output_bro.conf
@@ -0,0 +1,31 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+
+filter {
+ if "bro" in [tags] and "test_data" not in [tags] and "import" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9000"]
+ }
+ }
+}
+output {
+ if "bro" in [tags] and "test_data" not in [tags] and "import" not in [tags] {
+# stdout { codec => rubydebug }
+ elasticsearch {
+ pipeline => "%{event_type}"
+ hosts => "{{ ES }}"
+ index => "logstash-bro-%{+YYYY.MM.dd}"
+ template_name => "logstash"
+ template => "/logstash-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/9001_output_switch.conf b/salt/logstash/conf/pipelines/search/templates/9001_output_switch.conf
new file mode 100644
index 000000000..949a738ab
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9001_output_switch.conf
@@ -0,0 +1,27 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if "switch" in [tags] and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9001"]
+ }
+ }
+}
+output {
+ if "switch" in [tags] and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-switch-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/9002_output_import.conf b/salt/logstash/conf/pipelines/search/templates/9002_output_import.conf
new file mode 100644
index 000000000..88fbc7551
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9002_output_import.conf
@@ -0,0 +1,27 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Updated by: Doug Burks
+# Last Update: 5/16/2017
+
+filter {
+ if "import" in [tags] and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9002"]
+ }
+ }
+}
+output {
+ if "import" in [tags] and "test_data" not in [tags] {
+# stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-import-%{+YYYY.MM.dd}"
+ template_name => "logstash-*"
+ template => "/logstash-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/9004_output_flow.conf b/salt/logstash/conf/pipelines/search/templates/9004_output_flow.conf
new file mode 100644
index 000000000..3dbd34f16
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9004_output_flow.conf
@@ -0,0 +1,27 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "sflow" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9004"]
+ }
+ }
+}
+output {
+ if [event_type] == "sflow" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-flow-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/9026_output_dhcp.conf b/salt/logstash/conf/pipelines/search/templates/9026_output_dhcp.conf
new file mode 100644
index 000000000..a63ac5f98
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9026_output_dhcp.conf
@@ -0,0 +1,26 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "dhcp" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9026"]
+ }
+ }
+}
+output {
+ if [event_type] == "dhcp" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/9029_output_esxi.conf b/salt/logstash/conf/pipelines/search/templates/9029_output_esxi.conf
new file mode 100644
index 000000000..229de6b9c
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9029_output_esxi.conf
@@ -0,0 +1,25 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "esxi" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9029"]
+ }
+ }
+}
+output {
+ if [event_type] == "esxi" and "test_data" not in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/9030_output_greensql.conf b/salt/logstash/conf/pipelines/search/templates/9030_output_greensql.conf
new file mode 100644
index 000000000..a6d16b95d
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9030_output_greensql.conf
@@ -0,0 +1,25 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "greensql" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9030"]
+ }
+ }
+}
+output {
+ if [event_type] == "greensql" and "test_data" not in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/9031_output_iis.conf b/salt/logstash/conf/pipelines/search/templates/9031_output_iis.conf
new file mode 100644
index 000000000..6650d8a7d
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9031_output_iis.conf
@@ -0,0 +1,26 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "iis" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9031"]
+ }
+ }
+}
+output {
+ if [event_type] == "iis" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/9032_output_mcafee.conf b/salt/logstash/conf/pipelines/search/templates/9032_output_mcafee.conf
new file mode 100644
index 000000000..ca982967d
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9032_output_mcafee.conf
@@ -0,0 +1,26 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "mcafee" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9032"]
+ }
+ }
+}
+output {
+ if [event_type] == "mcafee" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/9033_output_snort.conf b/salt/logstash/conf/pipelines/search/templates/9033_output_snort.conf
new file mode 100644
index 000000000..6c310b91e
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9033_output_snort.conf
@@ -0,0 +1,29 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "ids" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9033"]
+ }
+ }
+}
+output {
+ if [event_type] == "ids" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-ids-%{+YYYY.MM.dd}"
+ template_name => "logstash"
+ template => "/logstash-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/9034_output_syslog.conf b/salt/logstash/conf/pipelines/search/templates/9034_output_syslog.conf
new file mode 100644
index 000000000..56a6527b8
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9034_output_syslog.conf
@@ -0,0 +1,28 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 5/15/2017
+
+filter {
+ if "syslog" in [tags] and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9034"]
+ }
+ }
+}
+output {
+ if "syslog" in [tags] and "test_data" not in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-syslog-%{+YYYY.MM.dd}"
+ template_name => "logstash"
+ template => "/logstash-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/9100_output_osquery.conf b/salt/logstash/conf/pipelines/search/templates/9100_output_osquery.conf
new file mode 100644
index 000000000..e95119562
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9100_output_osquery.conf
@@ -0,0 +1,19 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Josh Brower
+# Last Update: 12/29/2018
+# Output to ES for osquery tagged logs
+
+
+output {
+ if "osquery" in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-osquery-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
\ No newline at end of file
diff --git a/salt/logstash/conf/pipelines/search/templates/9200_output_firewall.conf b/salt/logstash/conf/pipelines/search/templates/9200_output_firewall.conf
new file mode 100644
index 000000000..b2ad43963
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9200_output_firewall.conf
@@ -0,0 +1,29 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if "firewall" in [tags] and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9200"]
+ }
+ }
+}
+output {
+ if "firewall" in [tags] and "test_data" not in [tags] {
+# stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-firewall-%{+YYYY.MM.dd}"
+ template_name => "logstash"
+ template => "/logstash-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/9300_output_windows.conf b/salt/logstash/conf/pipelines/search/templates/9300_output_windows.conf
new file mode 100644
index 000000000..d3f9d1919
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9300_output_windows.conf
@@ -0,0 +1,27 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "windows" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9300"]
+ }
+ }
+}
+output {
+ if [event_type] == "windows" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-windows-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/9301_output_dns_windows.conf b/salt/logstash/conf/pipelines/search/templates/9301_output_dns_windows.conf
new file mode 100644
index 000000000..8a56b7044
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9301_output_dns_windows.conf
@@ -0,0 +1,27 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "dns" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9301"]
+ }
+ }
+}
+output {
+ if [event_type] == "dns" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/9400_output_suricata.conf b/salt/logstash/conf/pipelines/search/templates/9400_output_suricata.conf
new file mode 100644
index 000000000..4bffd7f0a
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9400_output_suricata.conf
@@ -0,0 +1,27 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "suricata" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9400"]
+ }
+ }
+}
+output {
+ if [event_type] == "suricata" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-ids-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/9500_output_beats.conf b/salt/logstash/conf/pipelines/search/templates/9500_output_beats.conf
new file mode 100644
index 000000000..30900cb93
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9500_output_beats.conf
@@ -0,0 +1,25 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Wes Lambert
+# Last Update: 09/14/2018
+filter {
+ if "beat" in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9500"]
+ }
+ }
+}
+output {
+ if "beat" in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-beats-%{+YYYY.MM.dd}"
+ template_name => "logstash-beats"
+ template => "/beats-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/conf/pipelines/search/templates/9600_output_ossec.conf b/salt/logstash/conf/pipelines/search/templates/9600_output_ossec.conf
new file mode 100644
index 000000000..71d0c28aa
--- /dev/null
+++ b/salt/logstash/conf/pipelines/search/templates/9600_output_ossec.conf
@@ -0,0 +1,29 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 9/19/2018
+
+filter {
+ if [event_type] =~ "ossec" {
+ mutate {
+ ##add_tag => [ "conf_file_9600"]
+ }
+ }
+}
+
+output {
+ if [event_type] =~ "ossec" or "ossec" in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-ossec-%{+YYYY.MM.dd}"
+ template_name => "logstash-ossec"
+ template => "/logstash-ossec-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/defaults.yml b/salt/logstash/defaults.yml
new file mode 100644
index 000000000..ba6d19534
--- /dev/null
+++ b/salt/logstash/defaults.yml
@@ -0,0 +1,6 @@
+logstash:
+ pipelines:
+ master:
+ config: "/usr/share/logstash/pipelines/master/*.conf"
+ search:
+ config: "/usr/share/logstash/pipelines/search/*.conf"
diff --git a/salt/logstash/etc/beats-template.json b/salt/logstash/etc/beats-template.json
new file mode 100644
index 000000000..0e831aa52
--- /dev/null
+++ b/salt/logstash/etc/beats-template.json
@@ -0,0 +1,1292 @@
+{
+ "index_patterns": [
+ "logstash-beats-*"
+ ],
+ "mappings": {
+ "doc": {
+ "_meta": {
+ "version": "6.1.3"
+ },
+ "date_detection": false,
+ "dynamic_templates": [
+ {
+ "fields": {
+ "mapping": {
+ "type": "keyword"
+ },
+ "match_mapping_type": "string",
+ "path_match": "fields.*"
+ }
+ },
+ {
+ "docker.container.labels": {
+ "mapping": {
+ "type": "keyword"
+ },
+ "match_mapping_type": "string",
+ "path_match": "docker.container.labels.*"
+ }
+ },
+ {
+ "strings_as_keyword": {
+ "mapping": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "match_mapping_type": "string"
+ }
+ }
+ ],
+ "properties": {
+ "@timestamp": {
+ "type": "date"
+ },
+ "event_data": {
+ "type":"object",
+ "dynamic": true
+ },
+ "beat_host": {
+ "type":"object",
+ "dynamic": true
+ },
+ "activity_id": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "beat": {
+ "properties": {
+ "hostname": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "timezone": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "version": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "username":{
+ "type":"text",
+ "fields": {
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "computer_name": {
+ "type": "text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "docker": {
+ "properties": {
+ "container": {
+ "properties": {
+ "id": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "image": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "labels": {
+ "type": "object"
+ },
+ "name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "error": {
+ "properties": {
+ "code": {
+ "type": "long"
+ },
+ "message": {
+ "norms": false,
+ "type": "text"
+ },
+ "type": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "event_id": {
+ "type": "long"
+ },
+ "fields": {
+ "type": "object"
+ },
+ "keywords": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "kubernetes": {
+ "properties": {
+ "annotations": {
+ "type": "object"
+ },
+ "container": {
+ "properties": {
+ "image": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "labels": {
+ "type": "object"
+ },
+ "namespace": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "pod": {
+ "properties": {
+ "name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "level": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "log_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "message": {
+ "norms": false,
+ "type": "text"
+ },
+ "message_error": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "meta": {
+ "properties": {
+ "cloud": {
+ "properties": {
+ "availability_zone": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "instance_id": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "instance_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "machine_type": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "project_id": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "provider": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "region": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "opcode": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "process_id": {
+ "type": "long"
+ },
+ "provider_guid": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "record_number": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "related_activity_id": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "source_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "tags": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "task": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "thread_id": {
+ "type": "long"
+ },
+ "type": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "user": {
+ "properties": {
+ "domain": {
+ "type": "keyword"
+ },
+ "identifier": {
+ "type": "keyword"
+ },
+ "name": {
+ "type": "keyword"
+ },
+ "type": {
+ "type": "keyword"
+ }
+ }
+ },
+ "user_data": {
+ "type": "object",
+ "dynamic": "true"
+ },
+ "version": {
+ "type": "keyword"
+ },
+ "xml": {
+ "norms": false,
+ "type": "text"
+ },
+ "apache2": {
+ "properties": {
+ "access": {
+ "properties": {
+ "agent": {
+ "norms": false,
+ "type": "text"
+ },
+ "body_sent": {
+ "properties": {
+ "bytes": {
+ "type": "long"
+ }
+ }
+ },
+ "geoip": {
+ "properties": {
+ "city_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "continent_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "country_iso_code": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "location": {
+ "type": "geo_point"
+ },
+ "region_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "http_version": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "method": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "referrer": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "remote_ip": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "response_code": {
+ "type": "long"
+ },
+ "url": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "user_agent": {
+ "properties": {
+ "device": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "major": {
+ "type": "long"
+ },
+ "minor": {
+ "type": "long"
+ },
+ "name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "os": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "os_major": {
+ "type": "long"
+ },
+ "os_minor": {
+ "type": "long"
+ },
+ "os_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "patch": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "user_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "error": {
+ "properties": {
+ "client": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "code": {
+ "type": "long"
+ },
+ "level": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "message": {
+ "norms": false,
+ "type": "text"
+ },
+ "module": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "pid": {
+ "type": "long"
+ },
+ "tid": {
+ "type": "long"
+ },
+ "type": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "auditd": {
+ "properties": {
+ "log": {
+ "properties": {
+ "a0": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "acct": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "geoip": {
+ "properties": {
+ "city_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "continent_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "country_iso_code": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "location": {
+ "type": "geo_point"
+ },
+ "region_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "item": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "items": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "new_auid": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "new_ses": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "old_auid": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "old_ses": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "pid": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "ppid": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "record_type": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "res": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "sequence": {
+ "type": "long"
+ }
+ }
+ }
+ }
+ },
+ "fileset": {
+ "properties": {
+ "module": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "icinga": {
+ "properties": {
+ "debug": {
+ "properties": {
+ "facility": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "message": {
+ "norms": false,
+ "type": "text"
+ },
+ "severity": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "main": {
+ "properties": {
+ "facility": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "message": {
+ "norms": false,
+ "type": "text"
+ },
+ "severity": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "startup": {
+ "properties": {
+ "facility": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "message": {
+ "norms": false,
+ "type": "text"
+ },
+ "severity": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "kafka": {
+ "properties": {
+ "log": {
+ "properties": {
+ "class": {
+ "norms": false,
+ "type": "text"
+ },
+ "component": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "level": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "message": {
+ "norms": false,
+ "type": "text"
+ },
+ "timestamp": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "trace": {
+ "properties": {
+ "class": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "full": {
+ "norms": false,
+ "type": "text"
+ },
+ "message": {
+ "norms": false,
+ "type": "text"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "logstash": {
+ "properties": {
+ "log": {
+ "properties": {
+ "level": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "log_event": {
+ "type": "object"
+ },
+ "message": {
+ "norms": false,
+ "type": "text"
+ },
+ "module": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "thread": {
+ "norms": false,
+ "type": "text"
+ }
+ }
+ },
+ "slowlog": {
+ "properties": {
+ "event": {
+ "norms": false,
+ "type": "text"
+ },
+ "level": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "message": {
+ "norms": false,
+ "type": "text"
+ },
+ "module": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "plugin_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "plugin_params": {
+ "norms": false,
+ "type": "text"
+ },
+ "plugin_params_object": {
+ "type": "object"
+ },
+ "plugin_type": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "thread": {
+ "norms": false,
+ "type": "text"
+ },
+ "took_in_millis": {
+ "type": "long"
+ },
+ "took_in_nanos": {
+ "type": "long"
+ }
+ }
+ }
+ }
+ },
+ "mysql": {
+ "properties": {
+ "error": {
+ "properties": {
+ "level": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "message": {
+ "norms": false,
+ "type": "text"
+ },
+ "thread_id": {
+ "type": "long"
+ },
+ "timestamp": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "slowlog": {
+ "properties": {
+ "host": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "id": {
+ "type": "long"
+ },
+ "ip": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "lock_time": {
+ "properties": {
+ "sec": {
+ "type": "float"
+ }
+ }
+ },
+ "query": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "query_time": {
+ "properties": {
+ "sec": {
+ "type": "float"
+ }
+ }
+ },
+ "rows_examined": {
+ "type": "long"
+ },
+ "rows_sent": {
+ "type": "long"
+ },
+ "timestamp": {
+ "type": "long"
+ },
+ "user": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "nginx": {
+ "properties": {
+ "access": {
+ "properties": {
+ "agent": {
+ "norms": false,
+ "type": "text"
+ },
+ "body_sent": {
+ "properties": {
+ "bytes": {
+ "type": "long"
+ }
+ }
+ },
+ "geoip": {
+ "properties": {
+ "city_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "continent_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "country_iso_code": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "location": {
+ "type": "geo_point"
+ },
+ "region_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "http_version": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "method": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "referrer": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "remote_ip": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "response_code": {
+ "type": "long"
+ },
+ "url": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "user_agent": {
+ "properties": {
+ "device": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "major": {
+ "type": "long"
+ },
+ "minor": {
+ "type": "long"
+ },
+ "name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "os": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "os_major": {
+ "type": "long"
+ },
+ "os_minor": {
+ "type": "long"
+ },
+ "os_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "patch": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "user_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "error": {
+ "properties": {
+ "connection_id": {
+ "type": "long"
+ },
+ "level": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "message": {
+ "norms": false,
+ "type": "text"
+ },
+ "pid": {
+ "type": "long"
+ },
+ "tid": {
+ "type": "long"
+ }
+ }
+ }
+ }
+ },
+ "offset": {
+ "type": "long"
+ },
+ "postgresql": {
+ "properties": {
+ "log": {
+ "properties": {
+ "database": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "duration": {
+ "type": "float"
+ },
+ "level": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "message": {
+ "norms": false,
+ "type": "text"
+ },
+ "query": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "thread_id": {
+ "type": "long"
+ },
+ "timestamp": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "timezone": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "user": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "prospector": {
+ "properties": {
+ "type": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "read_timestamp": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "redis": {
+ "properties": {
+ "log": {
+ "properties": {
+ "level": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "message": {
+ "norms": false,
+ "type": "text"
+ },
+ "pid": {
+ "type": "long"
+ },
+ "role": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "slowlog": {
+ "properties": {
+ "args": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "cmd": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "duration": {
+ "properties": {
+ "us": {
+ "type": "long"
+ }
+ }
+ },
+ "id": {
+ "type": "long"
+ },
+ "key": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "source": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "stream": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "system": {
+ "properties": {
+ "auth": {
+ "properties": {
+ "groupadd": {
+ "properties": {
+ "gid": {
+ "type": "long"
+ },
+ "name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "hostname": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "message": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "pid": {
+ "type": "long"
+ },
+ "program": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "ssh": {
+ "properties": {
+ "dropped_ip": {
+ "type": "ip"
+ },
+ "event": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "geoip": {
+ "properties": {
+ "city_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "continent_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "country_iso_code": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "location": {
+ "type": "geo_point"
+ },
+ "region_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "ip": {
+ "type": "ip"
+ },
+ "method": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "port": {
+ "type": "long"
+ },
+ "signature": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "sudo": {
+ "properties": {
+ "command": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "error": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "pwd": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "tty": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "user": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "timestamp": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "user": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "useradd": {
+ "properties": {
+ "gid": {
+ "type": "long"
+ },
+ "home": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "shell": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "uid": {
+ "type": "long"
+ }
+ }
+ }
+ }
+ },
+ "syslog": {
+ "properties": {
+ "hostname": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "message": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "pid": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "program": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "timestamp": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ },
+ "traefik": {
+ "properties": {
+ "access": {
+ "properties": {
+ "agent": {
+ "norms": false,
+ "type": "text"
+ },
+ "backend_url": {
+ "norms": false,
+ "type": "text"
+ },
+ "body_sent": {
+ "properties": {
+ "bytes": {
+ "type": "long"
+ }
+ }
+ },
+ "frontend_name": {
+ "norms": false,
+ "type": "text"
+ },
+ "geoip": {
+ "properties": {
+ "city_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "continent_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "country_iso_code": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "location": {
+ "type": "geo_point"
+ },
+ "region_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "http_version": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "method": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "referrer": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "remote_ip": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "request_count": {
+ "type": "long"
+ },
+ "response_code": {
+ "type": "long"
+ },
+ "url": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "user_agent": {
+ "properties": {
+ "device": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "major": {
+ "type": "long"
+ },
+ "minor": {
+ "type": "long"
+ },
+ "name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "os": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "os_major": {
+ "type": "long"
+ },
+ "os_minor": {
+ "type": "long"
+ },
+ "os_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ },
+ "patch": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ },
+ "user_name": {
+ "ignore_above": 1024,
+ "type": "keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "order": 1,
+ "settings": {
+ "index": {
+ "mapping": {
+ "total_fields": {
+ "limit": 10000
+ }
+ },
+ "number_of_replicas": 0,
+ "number_of_shards": 1,
+ "refresh_interval": "30s"
+ }
+ }
+}
diff --git a/salt/logstash/etc/logstash-ossec-template.json b/salt/logstash/etc/logstash-ossec-template.json
new file mode 100644
index 000000000..ab3a14a93
--- /dev/null
+++ b/salt/logstash/etc/logstash-ossec-template.json
@@ -0,0 +1,3494 @@
+{
+ "index_patterns": ["logstash-ossec*"],
+ "version":50001,
+ "order" : 1,
+ "settings":{
+ "index": {
+ "mapping": {
+ "total_fields": {
+ "limit": 10000
+ }
+ }
+ },
+ "number_of_replicas":0,
+ "number_of_shards":1,
+ "index.refresh_interval":"30s"
+ },
+ "mappings":{
+ "doc":{
+ "dynamic": false,
+ "date_detection": false,
+ "properties":{
+ "@timestamp":{
+ "type":"date"
+ },
+ "@version":{
+ "type":"keyword"
+ },
+ "geoip":{
+ "dynamic":true,
+ "properties":{
+ "ip":{
+ "type":"ip"
+ },
+ "location":{
+ "type":"geo_point"
+ },
+ "latitude":{
+ "type":"half_float"
+ },
+ "longitude":{
+ "type":"half_float"
+ }
+ }
+ },
+ "destination_geo":{
+ "dynamic":true,
+ "properties":{
+ "ip":{
+ "type":"ip"
+ },
+ "location":{
+ "type":"geo_point"
+ },
+ "latitude":{
+ "type":"half_float"
+ },
+ "longitude":{
+ "type":"half_float"
+ }
+ }
+ },
+ "source_geo":{
+ "dynamic":true,
+ "properties":{
+ "ip":{
+ "type":"ip"
+ },
+ "location":{
+ "type":"geo_point"
+ },
+ "latitude":{
+ "type":"half_float"
+ },
+ "longitude":{
+ "type":"half_float"
+ }
+ }
+ },
+ "signature_info":{
+ "type":"keyword"
+ },
+ "aa":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ack":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "action":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "additional_info":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "age":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "agent":{
+ "type":"object",
+ "dynamic": true
+ },
+ "alert":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "alert_level":{
+ "type":"long",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "analyzer":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "answers":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "assigned_ip":{
+ "type":"ip",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "auth":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "authentication_attempts":{
+ "type":"long"
+ },
+ "authentication_method":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "authentication_success":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "basic_constraints":{
+ "type":"object",
+ "properties":{
+ "path_len": {
+ "type": "text"
+ }
+ }
+ },
+ "basic_constraints_ca":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "basic_constraints_path_length":{
+ "type":"long"
+ },
+ "bound_port":{
+ "type":"long"
+ },
+ "call_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "category":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "cc":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_chain_count":{
+ "type":"long"
+ },
+ "certificate_chain_fuids":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_common_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_common_name_frequency_score":{
+ "type":"long"
+ },
+ "certificate_common_name_length":{
+ "type":"long"
+ },
+ "certificate_count":{
+ "type":"long"
+ },
+ "certificate_country_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_curve":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_exponent":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_issuer":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_key_algorithm":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_key_length":{
+ "type":"long"
+ },
+ "certificate_key_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_locality":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_not_valid_after":{
+ "type":"date"
+ },
+ "certificate_not_valid_before":{
+ "type":"date"
+ },
+ "certificate_number_days_valid":{
+ "type":"long"
+ },
+ "certificate_organization":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_organization_unit":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_permanent":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_serial":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_serial_number":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_signing_algorithm":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_state":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_subject":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_version":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "checksum":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "cipher":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "cipher_algorithm":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "class":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "classification":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_build":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_certificate_chain_fuids":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_certificate_subject":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_certificate_fuid":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_digital_product_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_issuer":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_major_version":{
+ "type":"long",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_minor_version":{
+ "type":"long",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_subject":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "command":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "community":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "company":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "compile_ts":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "compression_algorithm":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "connect_info":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "connection_state":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "connection_state_description":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "content_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "cookie":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "creation_date":{
+ "type":"date"
+ },
+ "creation_time":{
+ "type":"date"
+ },
+ "current_directory":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "curve":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "data":{
+ "type":"object",
+ "dynamic": true
+ },
+ "data_channel_destination_ip":{
+ "type":"ip"
+ },
+ "data_channel_destination_port":{
+ "type":"long"
+ },
+ "data_channel_passive":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "data_channel_source_ip":{
+ "type":"ip"
+ },
+ "data_length":{
+ "type":"long"
+ },
+ "date":{
+ "type":"text"
+ },
+ "dcc_file_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "dcc_file_size":{
+ "type":"long"
+ },
+ "dcc_mime_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "decoder":{
+ "type":"object",
+ "dynamic": true
+ },
+ "depth":{
+ "type":"long"
+ },
+ "description":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "desktop_height":{
+ "type":"long"
+ },
+ "desktop_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "desktop_width":{
+ "type":"long"
+ },
+ "dest_is_ipv6":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_city":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_geo.city_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_geo.continent_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_geo.dma_code":{
+ "type":"long"
+ },
+ "destination_geo.ip":{
+ "type":"ip"
+ },
+ "destination_geo.latitude":{
+ "type":"long"
+ },
+ "destination_geo.location":{
+ "type":"geo_point"
+ },
+ "destination_geo.longitude":{
+ "type":"long",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_geo.postal_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_geo.region_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_geo.country_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_geo.region_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_geo.timezone":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_hostname":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_ip":{
+ "type":"ip"
+ },
+ "destination_ips":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_latitude":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_longitude":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_port":{
+ "type":"long"
+ },
+ "destination_port_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_region":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "details":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "dir":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "direction":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "display_string":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "domain_age":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "domain_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "dropped":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "duration":{
+ "type":"long"
+ },
+ "valid_from":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "enabled":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "encryption_level":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "encryption_method":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "endpoint":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "entry":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "entry_location":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "error_message":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "escalated_user":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "established":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "event_id":{
+ "type":"long"
+ },
+ "event_timestamp":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "event_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "exception":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "extracted":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "extracted_cutoff":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "facility":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "fc_reply":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "fc_request":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "file_description":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "file_ip":{
+ "type":"ip",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "file_mime_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "file_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "file_size":{
+ "type":"long"
+ },
+ "first_received":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "flow_label":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "forwardable":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "framed_addr":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "freq_virtual_host":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "frequency_scores":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "from":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ftp_argument":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ftp_command":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "fuid":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "fuids":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "full_log":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "function":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "geoip.ip":{
+ "type":"ip"
+ },
+ "geoip.latitude":{
+ "type":"long"
+ },
+ "geoip.location":{
+ "type":"geo_point"
+ },
+ "geoip.longitude":{
+ "type":"long"
+ },
+ "get_bulk_requests":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "get_requests":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "get_responses":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "gid":{
+ "type":"long"
+ },
+ "has_cert_table":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "has_debug_data":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "has_export_table":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "has_import_table":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "height":{
+ "type":"long"
+ },
+ "helo":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "highest_registered_domain":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "highest_registered_domain_frequency_score":{
+ "type":"long"
+ },
+ "history":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "hop_limit":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "host":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "host_key":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "host_key_algorithm":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "hostname":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "iin":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "image_path":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "in_reply_to":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "indicator":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "indicator_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "info_code":{
+ "type":"long"
+ },
+ "info_message":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "initiated":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "integrity_level":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "interface":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ip_version":{
+ "type":"long"
+ },
+ "ipv4_ecn":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ips":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ipv4_flags":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ipv4_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ipv4_offset":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ipv4_protocol":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ipv4_protocol_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ipv4_protocol_length":{
+ "type":"long"
+ },
+ "ipv4_tos":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ipv4_ttl":{
+ "type":"long"
+ },
+ "irc_command":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "irc_username":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "is_64bit":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "is_exe":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "is_orig":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "is_source_ipv6":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "is_webmail":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "issuer_common_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "issuer_common_name_frequency_score":{
+ "type":"long"
+ },
+ "issuer_common_name_length":{
+ "type":"long"
+ },
+ "issuer_country_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "issuer_distinguished_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "issuer_locality":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "issuer_organization":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "issuer_organization_frequency_score":{
+ "type":"long"
+ },
+ "issuer_organization_unit":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "issuer_serial_number":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "issuer_state":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "kerberos_success":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "kex_algorithm":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "keyboard_layout":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "last_alert":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "last_reply":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "launch_string":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "lease_time":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "length":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "local_orig":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "local_respond":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "location":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "log_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "log_timestamp":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "logged":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "logon_guid":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "logon_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "logstash_time":{
+ "type":"long"
+ },
+ "mac":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "mac_algorithm":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "machine":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "mail_date":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "mail_from":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "manager":{
+ "type":"object",
+ "dynamic": true
+ },
+ "matched":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "md5":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "message":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "message_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "method":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "mimetype":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "missed_bytes":{
+ "type":"long"
+ },
+ "missing_bytes":{
+ "type":"long"
+ },
+ "msg":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "mysql_argument":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "mysql_command":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "mysql_success":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "n":{
+ "type":"long"
+ },
+ "name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "named_pipe":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "native_file_system":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "next_protocol":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "nick":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "note":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "notice":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ntlm_success":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "num_packets":{
+ "type":"long"
+ },
+ "object_size":{
+ "type":"long"
+ },
+ "operation":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "options":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "orig_filenames":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "orig_fuids":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "orig_mime_types":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "original_bytes":{
+ "type":"long"
+ },
+ "original_country_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "original_ip_bytes":{
+ "type":"long"
+ },
+ "original_packets":{
+ "type":"long"
+ },
+ "os":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ossec_agent_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ossec_timestamp":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "overflow_bytes":{
+ "type":"long"
+ },
+ "p":{
+ "type":"long"
+ },
+ "parent_domain":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "parent_domain_frequency_score":{
+ "type":"long"
+ },
+ "parent_domain_length":{
+ "type":"long"
+ },
+ "parent_image_path":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "parent_process_guid":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "parent_process_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "parent_process_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "password":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "path":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "peer":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "peer_description":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "pesha1":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "pesha256":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "pid":{
+ "type":"long",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "port":{
+ "type":"long",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "predecoder":{
+ "type":"object",
+ "dynamic": true
+ },
+ "prev_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "priority":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "process":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "process_arguments":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "process_guid":{
+ "type":"long"
+ },
+ "process_id":{
+ "type":"long",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "process_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "profile":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "program":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "protocol":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "protocol_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "protocol_version":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "proxied":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "query":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "query_class":{
+ "type":"long"
+ },
+ "query_class_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "query_length":{
+ "type":"long"
+ },
+ "query_type":{
+ "type":"long"
+ },
+ "query_type_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ra":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "rcode":{
+ "type":"long"
+ },
+ "rcode_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "rd":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "reason":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "recipient_to":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "referrer":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "rejected":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "remote_ip":{
+ "type":"ip"
+ },
+ "remote_location":{
+ "type":"object",
+ "properties":{
+ "country_code": {
+ "type": "text"
+ }
+ }
+ },
+ "renewable":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "reply_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "reply_message":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "reply_to":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "request_body_len":{
+ "type":"long"
+ },
+ "request_body_length":{
+ "type":"long"
+ },
+ "request_from":{
+ "type":"text"
+ },
+ "request_path":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "request_port":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "request_timestamp":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "request_to":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "request_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "requested_color_depth":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "requested_resource":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "resp_filenames":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "resp_fuids":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "resp_mime_types":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "respond_bytes":{
+ "type":"long"
+ },
+ "respond_country_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "respond_ip_bytes":{
+ "type":"long"
+ },
+ "respond_packets":{
+ "type":"long"
+ },
+ "response":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "response_body_len":{
+ "type":"long"
+ },
+ "response_body_length":{
+ "type":"long"
+ },
+ "response_from":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "response_path":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "response_to":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "result":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "resumed":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "rev":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "rig":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "rows":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "rtt":{
+ "type":"float",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "wazuh-rule":{
+ "type":"object",
+ "dynamic": true
+ },
+ "rule_number":{
+ "type":"long"
+ },
+ "rule_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "san_dns":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "second_received":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "section_names":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "security_protocol":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "seen_bytes":{
+ "type":"long"
+ },
+ "seen_node":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "seen_where":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sensor_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "seq":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sequence_number":{
+ "type":"long"
+ },
+ "server":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "server_certificate_fuid":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "server_certificate_subject":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "server_major_version":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "server_minor_version":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "server_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "server_name_frequency_score":{
+ "type":"long"
+ },
+ "server_name_length":{
+ "type":"long"
+ },
+ "service":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "set_requests":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "severity":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sha1":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sha256":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "share_flag":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "share_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sid":{
+ "type":"long"
+ },
+ "signer":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "site":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "size":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "software_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_geo.city_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_geo.continent_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_geo.dma_code":{
+ "type":"long"
+ },
+ "source_geo.ip":{
+ "type":"ip"
+ },
+ "source_geo.latitude":{
+ "type":"long"
+ },
+ "source_geo.location":{
+ "type":"geo_point"
+ },
+ "source_geo.longitude":{
+ "type":"long"
+ },
+ "source_geo.postal_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_geo.region_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_geo.region_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_geo.timezone":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_hostname":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_ip":{
+ "type":"ip"
+ },
+ "source_ips":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_port":{
+ "type":"long"
+ },
+ "source_port_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sources":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "status":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "status_code":{
+ "type":"long"
+ },
+ "status_message":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "status_msg":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sub_msg":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sub_rule_number":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "subdomain":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "subdomain_frequency_score":{
+ "type":"long"
+ },
+ "subdomain_length":{
+ "type":"long"
+ },
+ "subject":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "subsystem":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "suppress_for":{
+ "type":"long"
+ },
+ "syscheck":{
+ "type":"object",
+ "dynamic": true
+ },
+ "syslog-facility":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "syslog-file_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "syslog-host":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "syslog-host_from":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "syslog-legacy_msghdr":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "syslog-pid":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "syslog-priority":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "syslog-sourceip":{
+ "type":"ip"
+ },
+ "syslog-tags":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sysmon_timestamp":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "tags":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "target_filename":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "tc":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "tcp_flags":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "terminal_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "valid_till":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+
+ "timed_out":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "times_accessed":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "times_changed":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "times_created":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "times_modified":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "timestamp":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "tld.subdomain":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "tls":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "to":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "top_level_domain":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "total_bytes":{
+ "type":"long"
+ },
+ "tracker_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "trans_depth":{
+ "type":"long"
+ },
+ "transaction_id":{
+ "type":"long"
+ },
+ "ttls":{
+ "type":"text"
+ },
+ "tty":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "tunnel_parents":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "tunnel_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "uid":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "unparsed_version":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "up_since":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "urg":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "uri":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "uri_length":{
+ "type":"long"
+ },
+ "username":{
+ "type":"text",
+ "fields": {
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "user_agent":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "useragent":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "useragent_length":{
+ "type":"long"
+ },
+ "uses_aslr":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "uses_code_integrity":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "uses_dep":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "uses_seh":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "validation_status":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "value":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "version":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "version_additional_info":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "version_major":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "version_minor":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "version_minor2":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "version_minor3":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "virtual_host":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "virtual_host_frequency_score":{
+ "type":"long"
+ },
+ "virtual_host_length":{
+ "type":"long"
+ },
+ "warning":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "width":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "window":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "x_originating_ip":{
+ "type":"ip"
+ },
+ "year":{
+ "type":"long"
+ },
+ "z":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/salt/logstash/etc/logstash-template.json b/salt/logstash/etc/logstash-template.json
new file mode 100644
index 000000000..44e519842
--- /dev/null
+++ b/salt/logstash/etc/logstash-template.json
@@ -0,0 +1,3619 @@
+{
+ "index_patterns": ["logstash-ids-*", "logstash-firewall-*", "logstash-syslog-*", "logstash-bro-*", "logstash-import-*", "logstash-beats-*"],
+ "version":50001,
+ "order" : 0,
+ "settings":{
+ "number_of_replicas":0,
+ "number_of_shards":1,
+ "index.refresh_interval":"30s"
+ },
+ "mappings":{
+ "doc":{
+ "dynamic": false,
+ "date_detection": false,
+ "properties":{
+ "@timestamp":{
+ "type":"date"
+ },
+ "@version":{
+ "type":"keyword"
+ },
+ "geoip":{
+ "dynamic":true,
+ "properties":{
+ "ip":{
+ "type":"ip"
+ },
+ "location":{
+ "type":"geo_point"
+ },
+ "latitude":{
+ "type":"half_float"
+ },
+ "longitude":{
+ "type":"half_float"
+ }
+ }
+ },
+ "destination_geo":{
+ "dynamic":true,
+ "properties":{
+ "ip":{
+ "type":"ip"
+ },
+ "location":{
+ "type":"geo_point"
+ },
+ "latitude":{
+ "type":"half_float"
+ },
+ "longitude":{
+ "type":"half_float"
+ }
+ }
+ },
+ "source_geo":{
+ "dynamic":true,
+ "properties":{
+ "ip":{
+ "type":"ip"
+ },
+ "location":{
+ "type":"geo_point"
+ },
+ "latitude":{
+ "type":"half_float"
+ },
+ "longitude":{
+ "type":"half_float"
+ }
+ }
+ },
+ "signature_info":{
+ "type":"keyword"
+ },
+ "aa":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ack":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "action":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "additional_info":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "age":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "alert":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "alert_level":{
+ "type":"long",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "analyzer":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "answers":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "assigned_ip":{
+ "type":"ip",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "auth":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "authentication_attempts":{
+ "type":"long"
+ },
+ "authentication_method":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "authentication_success":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "basic_constraints":{
+ "type":"object",
+ "properties":{
+ "path_len": {
+ "type": "text"
+ }
+ }
+ },
+ "basic_constraints_ca":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "basic_constraints_path_length":{
+ "type":"long"
+ },
+ "bound_port":{
+ "type":"long"
+ },
+ "call_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "category":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "cc":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_chain_count":{
+ "type":"long"
+ },
+ "certificate_chain_fuids":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_common_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_common_name_frequency_score":{
+ "type":"long"
+ },
+ "certificate_common_name_length":{
+ "type":"long"
+ },
+ "certificate_count":{
+ "type":"long"
+ },
+ "certificate_country_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_curve":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_exponent":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_issuer":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_key_algorithm":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_key_length":{
+ "type":"long"
+ },
+ "certificate_key_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_locality":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_not_valid_after":{
+ "type":"date"
+ },
+ "certificate_not_valid_before":{
+ "type":"date"
+ },
+ "certificate_number_days_valid":{
+ "type":"long"
+ },
+ "certificate_organization":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_organization_unit":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_permanent":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_serial":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_serial_number":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_signing_algorithm":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_state":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_subject":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "certificate_version":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "checksum":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "cipher":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "cipher_algorithm":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "class":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "classification":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_build":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_certificate_chain_fuids":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_certificate_subject":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_certificate_fuid":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_digital_product_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_fqdn":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_issuer":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_ip": {
+ "type":"ip",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_major_version":{
+ "type":"long",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_message":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_minor_version":{
+ "type":"long",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "client_subject":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "command":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "community":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "company":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "compile_ts":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "compression_algorithm":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "connect_info":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "connection_state":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "connection_state_description":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "content_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "cookie":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "creation_date":{
+ "type":"date"
+ },
+ "creation_time":{
+ "type":"date"
+ },
+ "client_host_key_algorithms":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "current_directory":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "curve":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "data_channel_destination_ip":{
+ "type":"ip"
+ },
+ "data_channel_destination_port":{
+ "type":"long"
+ },
+ "data_channel_passive":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "data_channel_source_ip":{
+ "type":"ip"
+ },
+ "data_length":{
+ "type":"long"
+ },
+ "date":{
+ "type":"text"
+ },
+ "dcc_file_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "dcc_file_size":{
+ "type":"long"
+ },
+ "dcc_mime_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "depth":{
+ "type":"long"
+ },
+ "description":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "desktop_height":{
+ "type":"long"
+ },
+ "desktop_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "desktop_width":{
+ "type":"long"
+ },
+ "dest_is_ipv6":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_city":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_geo.city_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_geo.continent_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_geo.dma_code":{
+ "type":"long"
+ },
+ "destination_geo.ip":{
+ "type":"ip"
+ },
+ "destination_geo.latitude":{
+ "type":"long"
+ },
+ "destination_geo.location":{
+ "type":"geo_point"
+ },
+ "destination_geo.longitude":{
+ "type":"long",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_geo.postal_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_geo.region_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_geo.country_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_geo.region_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_geo.timezone":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_hostname":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_ip":{
+ "type":"ip"
+ },
+ "destination_ips":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_latitude":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_longitude":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_port":{
+ "type":"long"
+ },
+ "destination_port_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "destination_region":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "details":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "dir":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "direction":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "display_string":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "domain_age":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "domain_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "dropped":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "duration":{
+ "type":"long"
+ },
+ "valid_from":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "enabled":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "encryption_level":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "encryption_method":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "endpoint":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "entry":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "entry_location":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "error_message":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "escalated_user":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "established":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "event_id":{
+ "type":"long"
+ },
+ "event_timestamp":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "event_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "exception":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "extracted":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "extracted_cutoff":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "facility":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "fc_reply":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "fc_request":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "file_description":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "file_ip":{
+ "type":"ip",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "file_mime_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "file_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "file_size":{
+ "type":"long"
+ },
+ "first_received":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "flow_label":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "forwardable":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "framed_addr":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "freq_virtual_host":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "frequency_scores":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "from":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ftp_argument":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ftp_command":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "fuid":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "fuids":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "function":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "geoip.ip":{
+ "type":"ip"
+ },
+ "geoip.latitude":{
+ "type":"long"
+ },
+ "geoip.location":{
+ "type":"geo_point"
+ },
+ "geoip.longitude":{
+ "type":"long"
+ },
+ "get_bulk_requests":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "get_requests":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "get_responses":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "gid":{
+ "type":"long"
+ },
+ "has_cert_table":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "has_debug_data":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "has_export_table":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "has_import_table":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "hassh":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "hassh_algorithms":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "hassh_server":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "hassh_server_algorithms":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "hassh_version":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "height":{
+ "type":"long"
+ },
+ "helo":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "highest_registered_domain":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "highest_registered_domain_frequency_score":{
+ "type":"long"
+ },
+ "history":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "hop_limit":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "host":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "host_key":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "host_key_algorithm":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "hostname":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "iin":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "image_path":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "in_reply_to":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "indicator":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "indicator_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "info_code":{
+ "type":"long"
+ },
+ "info_message":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "initiated":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "integrity_level":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "interface":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ip_version":{
+ "type":"long"
+ },
+ "ipv4_ecn":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ips":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ipv4_flags":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ipv4_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ipv4_offset":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ipv4_protocol":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ipv4_protocol_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ipv4_protocol_length":{
+ "type":"long"
+ },
+ "ipv4_tos":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ipv4_ttl":{
+ "type":"long"
+ },
+ "irc_command":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "irc_username":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "is_64bit":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "is_exe":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "is_orig":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "is_source_ipv6":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "is_webmail":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "issuer_common_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "issuer_common_name_frequency_score":{
+ "type":"long"
+ },
+ "issuer_common_name_length":{
+ "type":"long"
+ },
+ "issuer_country_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "issuer_distinguished_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "issuer_locality":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "issuer_organization":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "issuer_organization_frequency_score":{
+ "type":"long"
+ },
+ "issuer_organization_unit":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "issuer_serial_number":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "issuer_state":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ja3":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ja3s":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "kerberos_success":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "kex_algorithm":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "keyboard_layout":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "last_alert":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "last_reply":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "launch_string":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "lease_time":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "length":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "local_orig":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "local_respond":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "location":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "log_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "log_timestamp":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "logged":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "logon_guid":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "logon_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "logstash_time":{
+ "type":"long"
+ },
+ "mac":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "mac_algorithm":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "machine":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "mail_date":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "mail_from":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "matched":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "md5":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "message":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "message_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "message_types":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "method":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "mimetype":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "missed_bytes":{
+ "type":"long"
+ },
+ "missing_bytes":{
+ "type":"long"
+ },
+ "msg":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "mysql_argument":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "mysql_command":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "mysql_success":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "n":{
+ "type":"long"
+ },
+ "name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "named_pipe":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "native_file_system":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "next_protocol":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "nick":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "note":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "notice":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ntlm_success":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "num_packets":{
+ "type":"long"
+ },
+ "object_size":{
+ "type":"long"
+ },
+ "operation":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "options":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "orig_filenames":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "orig_fuids":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "orig_mime_types":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "original_bytes":{
+ "type":"long"
+ },
+ "original_country_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "original_ip_bytes":{
+ "type":"long"
+ },
+ "original_packets":{
+ "type":"long"
+ },
+ "os":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ossec_agent_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ossec_timestamp":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "overflow_bytes":{
+ "type":"long"
+ },
+ "p":{
+ "type":"long"
+ },
+ "parent_domain":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "parent_domain_frequency_score":{
+ "type":"long"
+ },
+ "parent_domain_length":{
+ "type":"long"
+ },
+ "parent_image_path":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "parent_process_guid":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "parent_process_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "parent_process_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "password":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "path":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "peer":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "peer_description":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "pesha1":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "pesha256":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "pid":{
+ "type":"long",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "port":{
+ "type":"long",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "prev_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "priority":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "process":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "process_arguments":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "process_guid":{
+ "type":"long"
+ },
+ "process_id":{
+ "type":"long",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "process_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "profile":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "program":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "protocol":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "protocol_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "protocol_version":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "proxied":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "query":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "query_class":{
+ "type":"long"
+ },
+ "query_class_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "query_length":{
+ "type":"long"
+ },
+ "query_type":{
+ "type":"long"
+ },
+ "query_type_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "ra":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "rcode":{
+ "type":"long"
+ },
+ "rcode_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "rd":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "reason":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "recipient_to":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "referrer":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "rejected":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "remote_ip":{
+ "type":"ip"
+ },
+ "remote_location":{
+ "type":"object",
+ "properties":{
+ "country_code": {
+ "type": "text"
+ }
+ }
+ },
+ "renewable":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "reply_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "reply_message":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "reply_to":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "request_body_len":{
+ "type":"long"
+ },
+ "request_body_length":{
+ "type":"long"
+ },
+ "request_from":{
+ "type":"text"
+ },
+ "request_path":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "request_port":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "request_timestamp":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "request_to":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "request_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "requested_color_depth":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "requested_resource":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "requested_ip": {
+ "type":"ip",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "resp_filenames":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "resp_fuids":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "resp_mime_types":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "respond_bytes":{
+ "type":"long"
+ },
+ "respond_country_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "respond_ip_bytes":{
+ "type":"long"
+ },
+ "respond_packets":{
+ "type":"long"
+ },
+ "response":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "response_body_len":{
+ "type":"long"
+ },
+ "response_body_length":{
+ "type":"long"
+ },
+ "response_from":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "response_path":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "response_to":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "result":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "resumed":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "rev":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "rig":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "rows":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "rtt":{
+ "type":"float",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "rule":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "rule_number":{
+ "type":"long"
+ },
+ "rule_signature":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "rule_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "san_dns":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "second_received":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "section_names":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "security_protocol":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "seen_bytes":{
+ "type":"long"
+ },
+ "seen_node":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "seen_where":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sensor_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "seq":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sequence_number":{
+ "type":"long"
+ },
+ "server":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "server_certificate_fuid":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "server_certificate_subject":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "server_dns_computer_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "server_ip": {
+ "type":"ip",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "server_major_version":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "server_message":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "server_minor_version":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "server_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "server_name_frequency_score":{
+ "type":"long"
+ },
+ "server_name_length":{
+ "type":"long"
+ },
+ "server_nb_computer_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "server_tree_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "service":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "set_requests":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "severity":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sha1":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sha256":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "share_flag":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "share_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sid":{
+ "type":"long"
+ },
+ "signer":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "site":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "size":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "software_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_geo.city_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_geo.continent_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_geo.dma_code":{
+ "type":"long"
+ },
+ "source_geo.ip":{
+ "type":"ip"
+ },
+ "source_geo.latitude":{
+ "type":"long"
+ },
+ "source_geo.location":{
+ "type":"geo_point"
+ },
+ "source_geo.longitude":{
+ "type":"long"
+ },
+ "source_geo.postal_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_geo.region_code":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_geo.region_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_geo.timezone":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_hostname":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_ip":{
+ "type":"ip"
+ },
+ "source_ips":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "source_port":{
+ "type":"long"
+ },
+ "source_port_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sources":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "server_host_key_algorithms":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "status":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "status_code":{
+ "type":"long"
+ },
+ "status_message":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "status_msg":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sub_msg":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sub_rule_number":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "subdomain":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "subdomain_frequency_score":{
+ "type":"long"
+ },
+ "subdomain_length":{
+ "type":"long"
+ },
+ "subject":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "subsystem":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "suppress_for":{
+ "type":"long"
+ },
+ "syslog-facility":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "syslog-file_name":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "syslog-host":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "syslog-host_from":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "syslog-legacy_msghdr":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "syslog-pid":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "syslog-priority":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "syslog-sourceip":{
+ "type":"ip"
+ },
+ "syslog-tags":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "sysmon_timestamp":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "tags":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "target_filename":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "tc":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "tcp_flags":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "terminal_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "valid_till":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+
+ "timed_out":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "times_accessed":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "times_changed":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "times_created":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "times_modified":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "timestamp":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "tld.subdomain":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "tls":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "to":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "top_level_domain":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "total_bytes":{
+ "type":"long"
+ },
+ "tracker_id":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "trans_depth":{
+ "type":"long"
+ },
+ "transaction_id":{
+ "type":"long"
+ },
+ "ttls":{
+ "type":"text"
+ },
+ "tty":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "tunnel_parents":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "tunnel_type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "type":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "uid":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "unparsed_version":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "up_since":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "urg":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "uri":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "uri_length":{
+ "type":"long"
+ },
+ "username":{
+ "type":"text",
+ "fields": {
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "user_agent":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "useragent":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "useragent_length":{
+ "type":"long"
+ },
+ "uses_aslr":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "uses_code_integrity":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "uses_dep":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "uses_seh":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "validation_status":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "value":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "version":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "version_additional_info":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "version_major":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "version_minor":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "version_minor2":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "version_minor3":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "virtual_host":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "virtual_host_frequency_score":{
+ "type":"long"
+ },
+ "virtual_host_length":{
+ "type":"long"
+ },
+ "warning":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "width":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "window":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ },
+ "x_originating_ip":{
+ "type":"ip"
+ },
+ "year":{
+ "type":"long"
+ },
+ "z":{
+ "type":"text",
+ "fields":{
+ "keyword":{
+ "type":"keyword"
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/salt/logstash/files/custom/parsers/Drop.Your.Custom.Parsers.Here.conf b/salt/logstash/files/custom/parsers/Drop.Your.Custom.Parsers.Here.conf
new file mode 100644
index 000000000..6e9bbe36f
--- /dev/null
+++ b/salt/logstash/files/custom/parsers/Drop.Your.Custom.Parsers.Here.conf
@@ -0,0 +1,2 @@
+#
+#
diff --git a/salt/logstash/files/custom/templates/Drop.Your.Custom.Templates.Here.conf b/salt/logstash/files/custom/templates/Drop.Your.Custom.Templates.Here.conf
new file mode 100644
index 000000000..9ee9e27b5
--- /dev/null
+++ b/salt/logstash/files/custom/templates/Drop.Your.Custom.Templates.Here.conf
@@ -0,0 +1,2 @@
+# Reference /usr/share/logstash/pipeline.custom/templates/YOURTEMPLATE.json
+#
diff --git a/salt/logstash/files/dynamic/0006_input_beats.conf b/salt/logstash/files/dynamic/0006_input_beats.conf
new file mode 100644
index 000000000..a7140f859
--- /dev/null
+++ b/salt/logstash/files/dynamic/0006_input_beats.conf
@@ -0,0 +1,23 @@
+input {
+ beats {
+ port => "5044"
+ ssl => false
+ ssl_certificate_authorities => ["/usr/share/filebeat/ca.crt"]
+ ssl_certificate => "/usr/share/logstash/filebeat.crt"
+ ssl_key => "/usr/share/logstash/filebeat.key"
+ tags => [ "beat" ]
+ }
+}
+filter {
+ if [type] == "osquery" {
+ mutate {
+ rename => { "host" => "beat_host" }
+ remove_tag => ["beat"]
+ add_tag => ["osquery"]
+ }
+ json {
+ source => "message"
+ target => "osquery"
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/0008_input_eval.conf b/salt/logstash/files/dynamic/0008_input_eval.conf
new file mode 100644
index 000000000..b02f9d516
--- /dev/null
+++ b/salt/logstash/files/dynamic/0008_input_eval.conf
@@ -0,0 +1,203 @@
+# Updated by: Mike Reeves
+# Last Update: 11/1/2018
+
+input {
+ file {
+ path => "/suricata/eve.json"
+ type => "ids"
+ add_field => { "engine" => "suricata" }
+ }
+ file {
+ path => "/nsm/bro/logs/current/conn*.log"
+ type => "bro_conn"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/dce_rpc*.log"
+ type => "bro_dce_rpc"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/dhcp*.log"
+ type => "bro_dhcp"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/dnp3*.log"
+ type => "bro_dnp3"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/dns*.log"
+ type => "bro_dns"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/dpd*.log"
+ type => "bro_dpd"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/files*.log"
+ type => "bro_files"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/ftp*.log"
+ type => "bro_ftp"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/http*.log"
+ type => "bro_http"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/intel*.log"
+ type => "bro_intel"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/irc*.log"
+ type => "bro_irc"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/kerberos*.log"
+ type => "bro_kerberos"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/modbus*.log"
+ type => "bro_modbus"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/mysql*.log"
+ type => "bro_mysql"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/notice*.log"
+ type => "bro_notice"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/ntlm*.log"
+ type => "bro_ntlm"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/pe*.log"
+ type => "bro_pe"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/radius*.log"
+ type => "bro_radius"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/rdp*.log"
+ type => "bro_rdp"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/rfb*.log"
+ type => "bro_rfb"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/signatures*.log"
+ type => "bro_signatures"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/sip*.log"
+ type => "bro_sip"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/smb_files*.log"
+ type => "bro_smb_files"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/smb_mapping*.log"
+ type => "bro_smb_mapping"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/smtp*.log"
+ type => "bro_smtp"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/snmp*.log"
+ type => "bro_snmp"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/socks*.log"
+ type => "bro_socks"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/software*.log"
+ type => "bro_software"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/ssh*.log"
+ type => "bro_ssh"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/ssl*.log"
+ type => "bro_ssl"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/syslog*.log"
+ type => "bro_syslog"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/tunnel*.log"
+ type => "bro_tunnels"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/weird*.log"
+ type => "bro_weird"
+ tags => ["bro"]
+ }
+ file {
+ path => "/nsm/bro/logs/current/x509*.log"
+ type => "bro_x509"
+ tags => ["bro"]
+ }
+ file {
+ path => "/wazuh/alerts/alerts.json"
+ type => "ossec"
+ }
+ file {
+ path => "/wazuh/archives/archive.json"
+ type => "ossec_archive"
+ }
+ file {
+ path => "/osquery/logs/result.log"
+ type => "osquery"
+ }
+ file {
+ path => "/strelka/strelka.log"
+ type => "strelka"
+ }
+}
+filter {
+ if "import" in [tags] {
+ mutate {
+ #add_tag => [ "conf_file_0007"]
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/7100_osquery_wel.conf b/salt/logstash/files/dynamic/7100_osquery_wel.conf
new file mode 100644
index 000000000..b4d77d83f
--- /dev/null
+++ b/salt/logstash/files/dynamic/7100_osquery_wel.conf
@@ -0,0 +1,23 @@
+# Author: Josh Brower
+# Last Update: 12/28/2018
+# If log is tagged osquery and there is an eventid column - then cleanup and parse out the EventData column
+
+filter {
+ if "osquery" in [tags] and [osquery][columns][eventid] {
+
+ mutate {
+ gsub => ["[osquery][columns][data]", "\\x0A", ""]
+ }
+
+ json {
+ source => "[osquery][columns][data]"
+ target => "[osquery][columns][data]"
+ }
+
+ mutate {
+ merge => { "[osquery][columns]" => "[osquery][columns][data]" }
+ remove_field => ["[osquery][columns][data]"]
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/salt/logstash/files/dynamic/9000_output_bro.conf b/salt/logstash/files/dynamic/9000_output_bro.conf
new file mode 100644
index 000000000..553500281
--- /dev/null
+++ b/salt/logstash/files/dynamic/9000_output_bro.conf
@@ -0,0 +1,31 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+
+filter {
+ if "bro" in [tags] and "test_data" not in [tags] and "import" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9000"]
+ }
+ }
+}
+output {
+ if "bro" in [tags] and "test_data" not in [tags] and "import" not in [tags] {
+# stdout { codec => rubydebug }
+ elasticsearch {
+ pipeline => "%{event_type}"
+ hosts => "{{ ES }}"
+ index => "logstash-bro-%{+YYYY.MM.dd}"
+ template_name => "logstash"
+ template => "/logstash-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9001_output_switch.conf b/salt/logstash/files/dynamic/9001_output_switch.conf
new file mode 100644
index 000000000..949a738ab
--- /dev/null
+++ b/salt/logstash/files/dynamic/9001_output_switch.conf
@@ -0,0 +1,27 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if "switch" in [tags] and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9001"]
+ }
+ }
+}
+output {
+ if "switch" in [tags] and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-switch-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9002_output_import.conf b/salt/logstash/files/dynamic/9002_output_import.conf
new file mode 100644
index 000000000..88fbc7551
--- /dev/null
+++ b/salt/logstash/files/dynamic/9002_output_import.conf
@@ -0,0 +1,27 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Updated by: Doug Burks
+# Last Update: 5/16/2017
+
+filter {
+ if "import" in [tags] and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9002"]
+ }
+ }
+}
+output {
+ if "import" in [tags] and "test_data" not in [tags] {
+# stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-import-%{+YYYY.MM.dd}"
+ template_name => "logstash-*"
+ template => "/logstash-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9004_output_flow.conf b/salt/logstash/files/dynamic/9004_output_flow.conf
new file mode 100644
index 000000000..3dbd34f16
--- /dev/null
+++ b/salt/logstash/files/dynamic/9004_output_flow.conf
@@ -0,0 +1,27 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "sflow" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9004"]
+ }
+ }
+}
+output {
+ if [event_type] == "sflow" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-flow-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9026_output_dhcp.conf b/salt/logstash/files/dynamic/9026_output_dhcp.conf
new file mode 100644
index 000000000..a63ac5f98
--- /dev/null
+++ b/salt/logstash/files/dynamic/9026_output_dhcp.conf
@@ -0,0 +1,26 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "dhcp" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9026"]
+ }
+ }
+}
+output {
+ if [event_type] == "dhcp" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9029_output_esxi.conf b/salt/logstash/files/dynamic/9029_output_esxi.conf
new file mode 100644
index 000000000..229de6b9c
--- /dev/null
+++ b/salt/logstash/files/dynamic/9029_output_esxi.conf
@@ -0,0 +1,25 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "esxi" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9029"]
+ }
+ }
+}
+output {
+ if [event_type] == "esxi" and "test_data" not in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9030_output_greensql.conf b/salt/logstash/files/dynamic/9030_output_greensql.conf
new file mode 100644
index 000000000..a6d16b95d
--- /dev/null
+++ b/salt/logstash/files/dynamic/9030_output_greensql.conf
@@ -0,0 +1,25 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "greensql" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9030"]
+ }
+ }
+}
+output {
+ if [event_type] == "greensql" and "test_data" not in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9031_output_iis.conf b/salt/logstash/files/dynamic/9031_output_iis.conf
new file mode 100644
index 000000000..6650d8a7d
--- /dev/null
+++ b/salt/logstash/files/dynamic/9031_output_iis.conf
@@ -0,0 +1,26 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "iis" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9031"]
+ }
+ }
+}
+output {
+ if [event_type] == "iis" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9032_output_mcafee.conf b/salt/logstash/files/dynamic/9032_output_mcafee.conf
new file mode 100644
index 000000000..ca982967d
--- /dev/null
+++ b/salt/logstash/files/dynamic/9032_output_mcafee.conf
@@ -0,0 +1,26 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "mcafee" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9032"]
+ }
+ }
+}
+output {
+ if [event_type] == "mcafee" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9033_output_snort.conf b/salt/logstash/files/dynamic/9033_output_snort.conf
new file mode 100644
index 000000000..6c310b91e
--- /dev/null
+++ b/salt/logstash/files/dynamic/9033_output_snort.conf
@@ -0,0 +1,29 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "ids" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9033"]
+ }
+ }
+}
+output {
+ if [event_type] == "ids" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-ids-%{+YYYY.MM.dd}"
+ template_name => "logstash"
+ template => "/logstash-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9034_output_syslog.conf b/salt/logstash/files/dynamic/9034_output_syslog.conf
new file mode 100644
index 000000000..56a6527b8
--- /dev/null
+++ b/salt/logstash/files/dynamic/9034_output_syslog.conf
@@ -0,0 +1,28 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 5/15/2017
+
+filter {
+ if "syslog" in [tags] and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9034"]
+ }
+ }
+}
+output {
+ if "syslog" in [tags] and "test_data" not in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-syslog-%{+YYYY.MM.dd}"
+ template_name => "logstash"
+ template => "/logstash-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9100_output_osquery.conf b/salt/logstash/files/dynamic/9100_output_osquery.conf
new file mode 100644
index 000000000..e95119562
--- /dev/null
+++ b/salt/logstash/files/dynamic/9100_output_osquery.conf
@@ -0,0 +1,19 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Josh Brower
+# Last Update: 12/29/2018
+# Output to ES for osquery tagged logs
+
+
+output {
+ if "osquery" in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-osquery-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
\ No newline at end of file
diff --git a/salt/logstash/files/dynamic/9200_output_firewall.conf b/salt/logstash/files/dynamic/9200_output_firewall.conf
new file mode 100644
index 000000000..b2ad43963
--- /dev/null
+++ b/salt/logstash/files/dynamic/9200_output_firewall.conf
@@ -0,0 +1,29 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if "firewall" in [tags] and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9200"]
+ }
+ }
+}
+output {
+ if "firewall" in [tags] and "test_data" not in [tags] {
+# stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-firewall-%{+YYYY.MM.dd}"
+ template_name => "logstash"
+ template => "/logstash-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9300_output_windows.conf b/salt/logstash/files/dynamic/9300_output_windows.conf
new file mode 100644
index 000000000..d3f9d1919
--- /dev/null
+++ b/salt/logstash/files/dynamic/9300_output_windows.conf
@@ -0,0 +1,27 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "windows" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9300"]
+ }
+ }
+}
+output {
+ if [event_type] == "windows" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-windows-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9301_output_dns_windows.conf b/salt/logstash/files/dynamic/9301_output_dns_windows.conf
new file mode 100644
index 000000000..8a56b7044
--- /dev/null
+++ b/salt/logstash/files/dynamic/9301_output_dns_windows.conf
@@ -0,0 +1,27 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "dns" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9301"]
+ }
+ }
+}
+output {
+ if [event_type] == "dns" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9400_output_suricata.conf b/salt/logstash/files/dynamic/9400_output_suricata.conf
new file mode 100644
index 000000000..4bffd7f0a
--- /dev/null
+++ b/salt/logstash/files/dynamic/9400_output_suricata.conf
@@ -0,0 +1,27 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if [event_type] == "suricata" and "test_data" not in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9400"]
+ }
+ }
+}
+output {
+ if [event_type] == "suricata" and "test_data" not in [tags] {
+ #stdout { codec => rubydebug }
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-ids-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9500_output_beats.conf b/salt/logstash/files/dynamic/9500_output_beats.conf
new file mode 100644
index 000000000..30900cb93
--- /dev/null
+++ b/salt/logstash/files/dynamic/9500_output_beats.conf
@@ -0,0 +1,25 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Wes Lambert
+# Last Update: 09/14/2018
+filter {
+ if "beat" in [tags] {
+ mutate {
+ ##add_tag => [ "conf_file_9500"]
+ }
+ }
+}
+output {
+ if "beat" in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-beats-%{+YYYY.MM.dd}"
+ template_name => "logstash-beats"
+ template => "/beats-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9600_output_ossec.conf b/salt/logstash/files/dynamic/9600_output_ossec.conf
new file mode 100644
index 000000000..71d0c28aa
--- /dev/null
+++ b/salt/logstash/files/dynamic/9600_output_ossec.conf
@@ -0,0 +1,29 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Updated by: Doug Burks
+# Last Update: 9/19/2018
+
+filter {
+ if [event_type] =~ "ossec" {
+ mutate {
+ ##add_tag => [ "conf_file_9600"]
+ }
+ }
+}
+
+output {
+ if [event_type] =~ "ossec" or "ossec" in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-ossec-%{+YYYY.MM.dd}"
+ template_name => "logstash-ossec"
+ template => "/logstash-ossec-template.json"
+ template_overwrite => true
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9997_output_helix.conf b/salt/logstash/files/dynamic/9997_output_helix.conf
new file mode 100644
index 000000000..5dd0036fe
--- /dev/null
+++ b/salt/logstash/files/dynamic/9997_output_helix.conf
@@ -0,0 +1,142 @@
+{% set HELIX_API_KEY = salt['pillar.get']('fireeye:helix:api_key', '') %}
+
+filter {
+ if [type] =~ /^bro_conn|bro_dns|bro_http|bro_files|bro_ssl|bro_dhcp|bro_x509$/ {
+ grok {
+ match => [
+ "source_ip", "^%{IPV4:srcipv4}$",
+ "source_ip", "(?^([0-9A-Fa-f]{0,4}:){2,7}([0-9A-Fa-f]{1,4}$|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4})$)"
+ ]
+ }
+ grok {
+ match => [
+ "destination_ip", "(?^([0-9A-Fa-f]{0,4}:){2,7}([0-9A-Fa-f]{1,4}$|((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4})$)",
+ "destination_ip", "^%{IPV4:dstipv4}$"
+ ]
+ }
+
+ geoip {
+ source => "[source_ip]"
+ target => "source_geo"
+ }
+ geoip {
+ source => "[destination_ip]"
+ target => "destination_geo"
+ }
+ mutate {
+ #rename => { "%{[source_geo][country_code]}" => "srccountrycode" }
+ #rename => { "%{[destination_geo][country_code]}" => "dstcountrycode" }
+ rename => { "[beat_host][name]" => "sensor" }
+ copy => { "sensor" => "rawmsghostname" }
+ rename => { "message" => "rawmsg" }
+ #rename => { "event_type" => "program" }
+ copy => { "type" => "class" }
+ copy => { "class" => "program"}
+ rename => { "source_port" => "srcport" }
+ rename => { "destination_port" => "dstport" }
+ remove_field => ["source_ip", "destination_ip"]
+ remove_field => ["sensorname", "sensor_name", "service", "source", "tags", "syslog-host"]
+ remove_field => ["sensor_name", "source_ips", "ips", "destination_ips", "syslog-priority", "syslog-file_name", "syslog-facility"]
+ }
+ if "bro_conn" in [class] {
+ mutate {
+ #add_field => { "metaclass" => "connection" }
+ rename => { "original_bytes" => "sentbytes" }
+ rename => { "respond_bytes" => "rcvdbytes" }
+ rename => { "connection_state" => "connstate" }
+ rename => { "uid" => "connectionid" }
+ rename => { "respond_packets" => "rcvdpackets" }
+ rename => { "original_packets" => "sentpackets" }
+ rename => { "respond_ip_bytes" => "rcvdipbytes" }
+ rename => { "original_ip_bytes" => "sentipbytes" }
+ rename => { "local_respond" => "local_resp" }
+ rename => { "local_orig" => "localorig" }
+ rename => { "missed_bytes" => "missingbytes" }
+ }
+ }
+ if "bro_dns" in [class] {
+ mutate{
+ #add_field = { "metaclass" => "dns"}
+ rename => { "answers" => "answer" }
+ rename => { "query" => "domain" }
+ rename => { "query_class" => "queryclass" }
+ rename => { "query_class_name" => "queryclassname" }
+ rename => { "query_type" => "querytype" }
+ rename => { "query_type_name" => "querytypename" }
+ rename => { "ra" => "recursionavailable" }
+ rename => { "rd" => "recursiondesired" }
+ }
+ }
+ if "bro_dhcp" in [class] {
+ mutate{
+ #add_field = { "metaclass" => "dhcp"}
+ rename => { "message_types" => "direction" }
+ rename => { "lease_time" => "duration" }
+ }
+ }
+ if "bro_files" in [class] {
+ mutate{
+ #add_field = { "metaclass" => "dns"}
+ rename => { "missing_bytes" => "missingbytes" }
+ rename => { "fuid" => "fileid" }
+ rename => { "uid" => "connectionid" }
+ }
+ }
+ if "bro_http" in [class] {
+ mutate{
+ #add_field = { "metaclass" => "dns"}
+ rename => { "virtual_host" => "hostname" }
+ rename => { "status_code" => "statuscode" }
+ rename => { "status_message" => "statusmsg" }
+ rename => { "resp_mime_types" => "rcvdmimetype" }
+ rename => { "resp_fuids" => "rcvdfileid" }
+ rename => { "response_body_len" => "rcvdbodybytes" }
+ rename => { "request_body_len" => "sentbodybytes" }
+ rename => { "uid" => "connectionid" }
+ rename => { "ts"=> "eventtime" }
+ rename => { "@timestamp"=> "eventtime" }
+ }
+ }
+ if "bro_ssl" in [class] {
+ mutate{
+ #add_field = { "metaclass" => "dns"}
+ rename => { "status_code" => "statuscode" }
+ rename => { "status_message" => "statusmsg" }
+ rename => { "resp_mime_types" => "rcvdmimetype" }
+ rename => { "resp_fuids" => "rcvdfileid" }
+ rename => { "response_body_len" => "rcvdbodybytes" }
+ rename => { "request_body_len" => "sentbodybytes" }
+ }
+ }
+ if "bro_weird" in [class] {
+ mutate{
+ #add_field = { "metaclass" => "dns"}
+ rename => { "name" => "eventname" }
+ }
+ }
+ if "bro_x509" in [class] {
+ mutate{
+ #add_field = { "metaclass" => "dns"}
+ rename => { "certificate_common_name" => "certname" }
+ rename => { "certificate_subject" => "certsubject" }
+ rename => { "issuer_common_name" => "issuer" }
+ rename => { "certificate_issuer" => "issuersubject" }
+ rename => { "certificate_not_valid_before" => "issuetime" }
+ rename => { "certificate_key_type" => "cert_type" }
+ }
+ }
+ }
+}
+
+output {
+ if [type] =~ /^bro_conn|bro_dns|bro_http|bro_files|bro_ssl|bro_dhcp|bro_x509$/ {
+ http {
+ url => "https://helix-integrations.cloud.aws.apps.fireeye.com/api/upload"
+ http_method => post
+ http_compression => true
+ socket_timeout => 60
+ headers => ["Authorization","{{ HELIX_API_KEY }}"]
+ format => json_batch
+ }
+ }
+}
diff --git a/salt/logstash/files/dynamic/9998_output_test_data.conf b/salt/logstash/files/dynamic/9998_output_test_data.conf
new file mode 100644
index 000000000..4e83aa185
--- /dev/null
+++ b/salt/logstash/files/dynamic/9998_output_test_data.conf
@@ -0,0 +1,26 @@
+{%- if grains['role'] == 'so-eval' -%}
+{%- set ES = salt['pillar.get']('master:mainip', '') -%}
+{%- else %}
+{%- set ES = salt['pillar.get']('node:mainip', '') -%}
+{%- endif %}
+# Author: Justin Henderson
+# SANS Instructor and author of SANS SEC555: SIEM and Tactical Analytics
+# Email: justin@hasecuritysolution.com
+# Last Update: 12/9/2016
+
+filter {
+ if "test_data" in [tags] {
+ mutate {
+ #add_tag => [ "conf_file_9998"]
+ }
+ }
+}
+output {
+ if "test_data" in [tags] {
+ elasticsearch {
+ hosts => "{{ ES }}"
+ index => "logstash-test-%{+YYYY.MM.dd}"
+ template => "/logstash-template.json"
+ }
+ }
+}
diff --git a/salt/mysql/init.sls b/salt/mysql/init.sls
index 8d25a4247..a8e47ca5b 100644
--- a/salt/mysql/init.sls
+++ b/salt/mysql/init.sls
@@ -85,9 +85,4 @@ so-mysql:
- /opt/so/log/mysql:/var/log/mysql:rw
- watch:
- /opt/so/conf/mysql/etc
- cmd.run:
- - name: until nc -z localhost 3306; do sleep 1; done
- - timeout: 10
- - onchanges:
- - docker_container: so-mysql
{% endif %}
\ No newline at end of file
diff --git a/salt/registry/etc/config.yml b/salt/registry/etc/config.yml
index d25a034b0..ccd64aa25 100644
--- a/salt/registry/etc/config.yml
+++ b/salt/registry/etc/config.yml
@@ -19,5 +19,4 @@ health:
enabled: true
interval: 10s
threshold: 3
-proxy:
- remoteurl: https://registry-1.docker.io
+
diff --git a/setup/so-functions b/setup/so-functions
index 88d4ccdf1..eb3a34a97 100755
--- a/setup/so-functions
+++ b/setup/so-functions
@@ -21,14 +21,9 @@ source ./so-common-functions
so_version=1.2.1
-accept_salt_key_local() {
- echo "Accept the key locally on the master" >> "$setup_log" 2>&1
- # Accept the key locally on the master
- salt-key -ya "$MINION_ID"
-
-}
-
accept_salt_key_remote() {
+ systemctl restart salt-minion
+
echo "Accept the key remotely on the master" >> "$setup_log" 2>&1
# Delete the key just in case.
ssh -i /root/.ssh/so.key soremote@"$MSRV" sudo salt-key -d "$MINION_ID" -y
@@ -185,6 +180,9 @@ bro_logs_enabled() {
" - socks"\
" - x509" >> "$brologs_pillar"
fi
+
+ printf '%s\n' '----' >> "$setup_log" 2>&1
+ cat "$brologs_pillar" >> "$setup_log" 2>&1
}
check_admin_pass() {
@@ -351,12 +349,15 @@ configure_minion() {
echo "Enabling checkin at boot" >> "$setup_log" 2>&1
echo "startup_states: highstate" >> "$minion_config"
+
+ printf '%s\n' '----' >> "$setup_log" 2>&1
+ cat "$minion_config" >> "$setup_log" 2>&1
}
copy_master_config() {
# Copy the master config template to the proper directory
- if [ "$INSTALLMETHOD" = 'iso' ]; then
+ if [ "$setup_type" = 'iso' ]; then
cp /root/SecurityOnion/files/master /etc/salt/master >> "$setup_log" 2>&1
else
cp "../files/master" /etc/salt/master >> "$setup_log" 2>&1
@@ -625,11 +626,11 @@ docker_seed_registry() {
"so-strelka-filestream:$VERSION"
)
fi
- local initial_percent=30
+ local percent=25
for i in "${TRUSTED_CONTAINERS[@]}"; do
- if [ "$install_type" != 'HELIXSENSOR' ]; then ((intial_percent++)); else ((initial_percent+=6)); fi
+ if [ "$install_type" != 'HELIXSENSOR' ]; then ((percent=percent+1)); else ((percent=percent+6)); fi
# Pull down the trusted docker image
- set_progress_str "$initial_percent" "Downloading $i"
+ set_progress_str "$percent" "Downloading $i"
{
docker pull --disable-content-trust=false docker.io/soshybridhunter/"$i"
# Tag it with the new registry destination
@@ -800,7 +801,8 @@ master_pillar() {
" redirect: $REDIRECTIT"\
"" >> "$pillar_file"
-
+ printf '%s\n' '----' >> "$setup_log" 2>&1
+ cat "$pillar_file" >> "$setup_log" 2>&1
}
master_static() {
@@ -892,6 +894,8 @@ node_pillar() {
" cur_close_days: $CURCLOSEDAYS"\
"" >> "$pillar_file"
+ printf '%s\n' '----' >> "$setup_log" 2>&1
+ cat "$pillar_file" >> "$setup_log" 2>&1
}
patch_pillar() {
@@ -899,7 +903,6 @@ patch_pillar() {
local pillar_file=$temp_install_dir/pillar/minions/$MINION_ID.sls
printf '%s\n'\
- ""\
"patch:"\
" os:"\
" schedule_name: $PATCHSCHEDULENAME"\
@@ -907,6 +910,9 @@ patch_pillar() {
" splay: 300"\
"" >> "$pillar_file"
+ printf '%s\n' '----' >> "$setup_log" 2>&1
+ cat "$pillar_file" >> "$setup_log" 2>&1
+
}
patch_schedule_os_new() {
@@ -929,6 +935,8 @@ patch_schedule_os_new() {
done
done
+ printf '%s\n' '----' >> "$setup_log" 2>&1
+ cat "$OSPATCHSCHEDULE" >> "$setup_log" 2>&1
}
print_salt_state_apply() {
@@ -980,10 +988,10 @@ saltify() {
if [ "$MASTERUPDATES" = '1' ]; then
{
# Create the GPG Public Key for the Salt Repo
- cp "./public_keys/salt.pem" /etc/pki/rpm-gpg/saltstack-signing-key;
+ cp ./public_keys/salt.pem /etc/pki/rpm-gpg/saltstack-signing-key;
# Add the Wazuh Key
- cp "./public_keys/wazuh.pem" /etc/pki/rpm-gpg/GPG-KEY-WAZUH;
+ cp ./public_keys/wazuh.pem /etc/pki/rpm-gpg/GPG-KEY-WAZUH;
# Copy repo files over
cp "./yum_repos/salt-latest.repo" /etc/yum.repos.d/salt-latest.repo;
@@ -1099,9 +1107,9 @@ salt_checkin() {
echo "Building Certificate Authority";
salt-call state.apply ca;
echo " *** Restarting Salt to fix any SSL errors. ***";
- service salt-master restart;
+ systemctl restart salt-master;
sleep 5;
- service salt-minion restart;
+ systemctl restart salt-minion;
sleep 15;
echo " Applyng a mine hack";
salt '*' mine.send x509.get_pem_entries glob_path=/etc/pki/ca.crt;
@@ -1129,7 +1137,7 @@ setup_salt_master_dirs() {
mkdir -p /opt/so/saltstack/pillar
# Copy over the salt code and templates
- if [ "$INSTALLMETHOD" = 'iso' ]; then
+ if [ "$setup_type" = 'iso' ]; then
rsync -avh --exclude 'TRANS.TBL' /home/onion/SecurityOnion/pillar/* /opt/so/saltstack/pillar/ >> "$setup_log" 2>&1
rsync -avh --exclude 'TRANS.TBL' /home/onion/SecurityOnion/salt/* /opt/so/saltstack/salt/ >> "$setup_log" 2>&1
else
@@ -1152,7 +1160,11 @@ set_progress_str() {
fi
percentage_str="XXX\n${percentage}\n${progress_bar_text}\nXXX"
+
echo -e "$percentage_str"
+
+ printf '%s\n' '----' "${progress_bar_text^^}" "----" >> "$setup_log" 2>&1
+
sleep 5
}
@@ -1162,19 +1174,19 @@ sensor_pillar() {
# Create the sensor pillar
printf '%s\n'\
- "sensor"\
+ "sensor:"\
" interface: bond0"\
" mainip: $MAINIP"\
- " mainint: $MNIC" > "$pillar_file"
+ " mainint: $MNIC" >> "$pillar_file"
if [ "$NSMSETUP" = 'ADVANCED' ]; then
echo " bro_pins:" >> "$pillar_file"
- for PIN in $BROPINS; do
+ for PIN in "${BROPINS[@]}"; do
PIN=$(echo "$PIN" | cut -d\" -f2)
echo " - $PIN" >> "$pillar_file"
done
echo " suripins:" >> "$pillar_file"
- for SPIN in $SURIPINS; do
+ for SPIN in "${SURIPINS[@]}"; do
SPIN=$(echo "$SPIN" | cut -d\" -f2)
echo " - $SPIN" >> "$pillar_file"
done
@@ -1199,6 +1211,9 @@ sensor_pillar() {
" access_key: $ACCESS_KEY"\
" access_secret: $ACCESS_SECRET"\
"" >> "$pillar_file"
+
+ printf '%s\n' '----' >> "$setup_log" 2>&1
+ cat "$pillar_file" >> "$setup_log" 2>&1
}
set_hostname() {
@@ -1223,22 +1238,20 @@ set_hostname_iso() {
echo "::1 $HOSTNAME $HOSTNAME localhost localhost.localdomain localhost6 localhost6.localdomain6" >> /etc/hosts
echo "$HOSTNAME" > /etc/hostname
+
}
set_initial_firewall_policy() {
set_main_ip
- mkdir -p /opt/so/saltstack/pillar/firewall
- mkdir -p /opt/so/saltstack/pillar/data
-
case "$install_type" in
'MASTER')
- printf " - %s\n" "$MAINIP" | tee /opt/so/saltstack/pillar/firewall/minions.sls /opt/so/saltstack/pillar/firewall/masterfw.sls
+ printf " - %s\n" "$MAINIP" | tee -a /opt/so/saltstack/pillar/firewall/minions.sls /opt/so/saltstack/pillar/firewall/masterfw.sls
/opt/so/saltstack/pillar/data/addtotab.sh mastertab "$MINION_ID" "$MAINIP" "$num_cpu_cores" "$random_uid" "$MNIC" "$FSROOT" "$FSNSM"
;;
'EVAL' | 'MASTERSEARCH')
- printf " - %s\n" "$MAINIP" | tee /opt/so/saltstack/pillar/firewall/minions.sls\
+ printf " - %s\n" "$MAINIP" | tee -a /opt/so/saltstack/pillar/firewall/minions.sls\
/opt/so/saltstack/pillar/firewall/masterfw.sls\
/opt/so/saltstack/pillar/firewall/forward_nodes.sls\
/opt/so/saltstack/pillar/firewall/search_nodes.sls
@@ -1252,7 +1265,7 @@ set_initial_firewall_policy() {
esac
;;
'HELIXSENSOR')
- printf " - %s\n" "$MAINIP" | tee /opt/so/saltstack/pillar/firewall/minions.sls\
+ printf " - %s\n" "$MAINIP" | tee -a /opt/so/saltstack/pillar/firewall/minions.sls\
/opt/so/saltstack/pillar/firewall/masterfw.sls\
/opt/so/saltstack/pillar/firewall/forward_nodes.sls
;;
diff --git a/setup/so-setup b/setup/so-setup
index ec4ca82b3..288d046f0 100755
--- a/setup/so-setup
+++ b/setup/so-setup
@@ -22,6 +22,7 @@ source ./so-whiptail
source ./so-variables
setup_type=$1
+export setup_type
case "$setup_type" in
iso | network) # Accepted values
@@ -232,27 +233,27 @@ if [[ $is_node && ! $is_eval ]]; then
fi
whiptail_make_changes
-set_hostname
-set_version
-clear_master
+set_hostname 2>> "$setup_log"
+set_version 2>> "$setup_log"
+clear_master 2>> "$setup_log"
if [[ $is_master ]]; then
- generate_passwords
- secrets_pillar
- add_socore_user_master
+ generate_passwords 2>> "$setup_log"
+ secrets_pillar 2>> "$setup_log"
+ add_socore_user_master 2>> "$setup_log"
fi
if [[ $is_master && ! $is_eval ]]; then
- add_soremote_user_master
+ add_soremote_user_master 2>> "$setup_log"
fi
if [[ $is_helix || $is_master ]]; then
- set_main_ip
+ set_main_ip 2>> "$setup_log"
fi
if [[ $is_minion ]]; then
- set_updates
- copy_ssh_key
+ set_updates 2>> "$setup_log"
+ copy_ssh_key 2>> "$setup_log"
fi
# Begin install
@@ -262,92 +263,97 @@ fi
set_progress_str 1 'Creating bond interface'
create_sensor_bond >> "$setup_log" 2>&1
- set_progress_str 2 'Generating the sensor pillar'
+ set_progress_str 2 'Generating sensor pillar'
sensor_pillar >> "$setup_log" 2>&1
fi
set_progress_str 3 'Installing Salt and dependencies'
- saltify
+ saltify 2>> "$setup_log"
+
+ set_progress_str 7 'Installing Docker and dependencies'
+ docker_install 2>> "$setup_log"
- set_progress_str 8 'Installing Docker and dependencies'
- docker_install
+ set_progress_str 8 'Generating patch pillar'
+ patch_pillar 2>> "$setup_log"
- set_progress_str 9 'Configuring firewall'
- set_initial_firewall_policy
+ set_progress_str 9 'Initializing Salt minion'
+ configure_minion "$minion_type" 2>> "$setup_log"
- set_progress_str 10 "$(print_salt_state_apply 'firewall')"
- salt-call state.apply -l info firewall >> $setup_log 2>&1
-
- set_progress_str 11 'Initializing Salt minion'
- configure_minion "$minion_type"
-
- set_progress_str 12 'Generating CA'
- gen_ca
if [[ $is_master || $is_helix ]]; then
- set_progress_str 13 'Configuring Salt master'
- copy_master_config
- setup_salt_master_dirs
+ set_progress_str 10 'Configuring Salt master'
+ copy_master_config 2>> "$setup_log"
+ setup_salt_master_dirs 2>> "$setup_log"
- set_progress_str 15 'Updating sudoers file for soremote user'
- update_sudoers
+ set_progress_str 11 'Updating sudoers file for soremote user'
+ update_sudoers 2>> "$setup_log"
- set_progress_str 16 'Generating master static pillar'
- master_static
+ set_progress_str 12 'Generating master static pillar'
+ master_static 2>> "$setup_log"
- set_progress_str 17 'Generating master pillar'
- master_pillar
-
- set_progress_str 18 'Accepting Salt key'
- salt-key -ya "$MINION_ID" >> "$setup_log" 2>&1
+ set_progress_str 13 'Generating master pillar'
+ master_pillar 2>> "$setup_log"
fi
if [[ $is_helix ]]; then
- set_progress_str 19 'Generating the FireEye pillar'
- fireeye_pillar
+ set_progress_str 15 'Generating the FireEye pillar'
+ fireeye_pillar 2>> "$setup_log"
fi
+ set_progress_str 16 'Copying minion pillars to master'
+ copy_minion_tmp_files 2>> "$setup_log"
+
if [[ $is_minion ]]; then
- set_progress_str 20 'Accepting salt key on master'
- accept_salt_key_remote
+ set_progress_str 17 'Accepting Salt key on master'
+ accept_salt_key_remote 2>> "$setup_log"
fi
- set_progress_str 20 'Copying minion pillars to master'
- copy_minion_tmp_files
-
- set_progress_str 21 'Running intial Salt highstate'
- salt-call state.highstate -l info >> "$setup_log" 2>&1
+ if [[ $is_master ]]; then
+ set_progress_str 17 'Accepting Salt key'
+ salt-key -ya "$MINION_ID" >> "$setup_log" 2>&1
+ fi
if [[ $is_node ]]; then
- set_progress_str 25 'Setting node type'
- set_node_type
+ set_progress_str 18 'Setting node type'
+ set_node_type 2>> "$setup_log"
- set_progress_str 26 'Generating search node pillar'
- node_pillar
-
- set_progress_str 27 "$(print_salt_state_apply 'curator')"
- salt-call state.apply -l info curator >> $setup_log 2>&1
+ set_progress_str 19 'Generating search node pillar'
+ node_pillar 2>> "$setup_log"
fi
- if [[ $is_sensor ]]; then
- set_progress_str 28 "$(print_salt_state_apply 'pcap')"
+ set_progress_str 20 'Generating CA'
+ gen_ca 2>> "$setup_log"
+
+ if [[ $is_master || $is_helix ]]; then
+ set_progress_str 25 'Downloading containers from the internet'
+ salt-call state.apply -l info registry >> "$setup_log" 2>&1
+ docker_seed_registry 2>> "$setup_log" # ~ 60% when finished
+ fi
+
+ set_progress_str 59 'Configuring firewall'
+ set_initial_firewall_policy 2>> "$setup_log"
+
+ set_progress_str 60 "$(print_salt_state_apply 'firewall')"
+ salt-call state.apply -l info firewall >> $setup_log 2>&1
+
+ set_progress_str 61 "$(print_salt_state_apply 'common')"
+ salt-call state.apply -l info common >> $setup_log 2>&1
+
+ if [[ $is_sensor ]]; then
+ set_progress_str 62 "$(print_salt_state_apply 'pcap')"
salt-call state.apply -l info pcap >> $setup_log 2>&1
- set_progress_str 29 "$(print_salt_state_apply 'suricata')"
+ set_progress_str 63 "$(print_salt_state_apply 'suricata')"
salt-call state.apply -l info suricata >> $setup_log 2>&1
- set_progress_str 30 "$(print_salt_state_apply 'zeek')"
+ set_progress_str 64 "$(print_salt_state_apply 'zeek')"
salt-call state.apply -l info zeek >> $setup_log 2>&1
fi
- if [[ $is_master || $is_helix ]]; then
- set_progress_str 30 'Downloading containers from the internet'
- salt-call state.apply -l info registry >> "$setup_log" 2>&1
- docker_seed_registry # ~ 65% when finished
+ if [[ $is_node ]]; then
+ set_progress_str 65 "$(print_salt_state_apply 'curator')"
+ salt-call state.apply -l info curator >> $setup_log 2>&1
fi
-
- set_progress_str 65 "$(print_salt_state_apply 'common')"
- salt-call state.apply -l info common >> $setup_log 2>&1
if [[ "$OSQUERY" = 1 ]]; then
set_progress_str 66 "$(print_salt_state_apply 'fleet')"
@@ -419,8 +425,8 @@ fi
salt-call state.apply -l info schedule >> $setup_log 2>&1
set_progress_str 90 'Applying finishing touches'
- filter_unused_nics
- network_setup
+ filter_unused_nics 2>> "$setup_log"
+ network_setup 2>> "$setup_log"
set_progress_str 91 'Verifying setup'
salt-call -l info state.highstate >> $setup_log 2>&1
@@ -430,7 +436,7 @@ fi
success=$(tail -10 $setup_log | grep Failed | awk '{ print $2}')
if [[ "$success" = 0 ]]; then
whiptail_setup_complete
- if [[ $THEHIVE == '1' ]]; then
+ if [[ $THEHIVE == 1 ]]; then
check_hive_init_then_reboot
else
shutdown -r now
diff --git a/test.log b/test.log
new file mode 100644
index 000000000..a2e5d9148
--- /dev/null
+++ b/test.log
@@ -0,0 +1,2 @@
+Configuring minion type as eval
+Enabling checkin at boot