Compare commits

...

493 Commits
1.2.1 ... 1.3.0

Author SHA1 Message Date
Mike Reeves
9eb4d6c1d5 Merge pull request #745 from Security-Onion-Solutions/dev
1.3.0
2020-05-20 13:51:48 -04:00
Mike Reeves
35646b7945 Merge branch 'master' into dev 2020-05-20 13:49:48 -04:00
Josh Patterson
4e9ccdb6ed Merge pull request #743 from Security-Onion-Solutions/quickfix/wazuh
Quickfix/wazuh
2020-05-20 11:55:26 -04:00
m0duspwnens
4917d88db0 remove wazuh-agent being installed during setup, let salt mage it 2020-05-20 11:45:54 -04:00
m0duspwnens
e07f6af156 remove wazuh-agent exlude being added to repo conf during setup 2020-05-20 11:41:33 -04:00
m0duspwnens
d4840d203c fix version lock for wazuh 2020-05-20 11:23:55 -04:00
Mike Reeves
51250ef751 Update wazuh.repo 2020-05-20 09:56:27 -04:00
Josh Patterson
695930a06e Merge pull request #742 from Security-Onion-Solutions/quickfix/wazuh
ensure wazuh-agent service is enabled and running
2020-05-19 17:01:17 -04:00
m0duspwnens
92c2222879 ensure wazuh-agent service is enabled and running 2020-05-19 16:59:43 -04:00
Mike Reeves
0f2369b5cb Fix permissions due to umask issues in Ubuntu 18 2020-05-19 16:31:39 -04:00
William Wernert
320e9d7432 [fix] Apply nginx state before states that rely on it 2020-05-19 14:20:58 -04:00
Mike Reeves
c045e3f936 remove replicas 2020-05-19 13:57:31 -04:00
Mike Reeves
46762e5ad9 change cortex to 0 replicas 2020-05-19 13:56:59 -04:00
Josh Patterson
07560463de Merge pull request #737 from Security-Onion-Solutions/quickfix/wazuh
https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/695
2020-05-19 13:27:52 -04:00
William Wernert
3959e1cd10 [fix] Update packages before anything else 2020-05-19 13:03:07 -04:00
William Wernert
6d5af5b07a [fix] Revert redirect fix for saltify and docker_seed_registry 2020-05-19 12:41:19 -04:00
William Wernert
7f08324862 [fix] Redirect stdout + stderr for every command in so-setup 2020-05-19 11:53:50 -04:00
Doug Burks
064768d07d Fix dce_rpc hunt query #736
https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/736
2020-05-19 11:27:01 -04:00
William Wernert
3f9d2e44b6 Merge branch 'dev' of github.com:Security-Onion-Solutions/securityonion-saltstack into dev 2020-05-19 11:24:04 -04:00
William Wernert
3b3072b002 [fix] Update filtered nic list before trying to flush unused nics 2020-05-19 11:23:59 -04:00
Mike Reeves
1d072eced2 Update VERSION 2020-05-19 10:47:56 -04:00
Josh Brower
10691036e0 Update hive_init 2020-05-19 10:27:46 -04:00
William Wernert
832d2db3f6 Merge branch 'bugfix/whiptail-percent' into dev 2020-05-19 10:22:27 -04:00
William Wernert
c8be95646c [fix] Remove newline in percentage string to fix printing 2020-05-19 10:22:14 -04:00
m0duspwnens
4f65d17690 https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/695 2020-05-19 10:14:40 -04:00
Doug Burks
29420da565 Only process zeek.dns.tld if dns.query.name contains a dot #734
https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/734
2020-05-19 10:08:30 -04:00
Mike Reeves
fc4afe6767 Fix Curl statement 2020-05-19 09:58:16 -04:00
William Wernert
84952d5aa6 [fix][WIP] Revert parts of2261fe9 2020-05-19 09:56:59 -04:00
Mike Reeves
1d677bb529 Update known issues list 2020-05-19 09:36:36 -04:00
William Wernert
2261fe9b66 [fix][WIP] Changes to set_progress_str to fix percentage dropping to 0 2020-05-19 09:32:10 -04:00
Josh Patterson
8957af0a4d Merge pull request #733 from Security-Onion-Solutions/quickfix/sostatus
removing strelka-backend from strelka so-status map
2020-05-18 17:53:32 -04:00
m0duspwnens
411389b68e removing strelka-backend from strelka so-status map 2020-05-18 17:52:47 -04:00
Josh Patterson
341c70de9e Merge pull request #732 from Security-Onion-Solutions/quickfix/sostatus
add strelka container list for so-status
2020-05-18 17:46:55 -04:00
m0duspwnens
e6bc8f2d26 add strelka container list for so-status 2020-05-18 17:46:14 -04:00
Josh Patterson
d25fbfec84 Merge pull request #731 from Security-Onion-Solutions/quickfix/sostatus
add strelka container list for so-status
2020-05-18 17:39:09 -04:00
m0duspwnens
5638c386db add strelka container list for so-status 2020-05-18 17:36:32 -04:00
Mike Reeves
8202344d01 Fix for Strelka 2020-05-18 17:28:26 -04:00
Doug Burks
def928804f Fix Hunt DHCP message_types query #728
https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/728
2020-05-18 17:12:20 -04:00
Josh Patterson
de2082c0e1 Merge pull request #730 from Security-Onion-Solutions/quickfix/sostatus
remove so-nginx from sensor so-status map
2020-05-18 17:09:35 -04:00
m0duspwnens
492e021fa4 remove so-nginx from sensor so-status map 2020-05-18 17:08:04 -04:00
Josh Patterson
b87ac725a4 Merge pull request #729 from Security-Onion-Solutions/quickfix/wazuh
prevent wazuh-agent from updating
2020-05-18 17:03:29 -04:00
m0duspwnens
a6575e7910 prevent wazuh-agent from updating - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/695 2020-05-18 17:00:18 -04:00
Josh Brower
b951094ea2 Change alert pivot links for MASTER 2020-05-18 14:13:32 -04:00
Josh Patterson
b27b7d2805 Merge pull request #725 from Security-Onion-Solutions/quickfix/standalone
allow utility state to run for so-standalone
2020-05-18 14:02:03 -04:00
m0duspwnens
8a4da01b7f allow utility state to run for so-standalone 2020-05-18 14:01:01 -04:00
Doug Burks
b291b242ee temporarily hardcode radius user.name to user.name.keyword 2020-05-18 13:47:21 -04:00
Mike Reeves
a10617c182 Update nids2hive.yaml 2020-05-18 13:43:25 -04:00
Mike Reeves
a56c776695 Update SOCtopus.conf 2020-05-18 13:41:37 -04:00
Mike Reeves
f144fa241f Change to URL base 2020-05-18 13:36:52 -04:00
Josh Patterson
35cb60b801 Merge pull request #720 from Security-Onion-Solutions/quickfix/strelka
change strelka ip for sensor nodes
2020-05-18 10:56:35 -04:00
m0duspwnens
eebe0eb618 get the first ip for the ip_interfaces:mainint grain 2020-05-18 10:54:07 -04:00
m0duspwnens
037bedb0c0 remove whitespace at top of file 2020-05-18 10:48:02 -04:00
m0duspwnens
15cd0c6b49 change strelka ip for sensor nodes 2020-05-18 10:41:39 -04:00
Doug Burks
00f6e8d61b update geoip country descriptions 2020-05-18 10:27:03 -04:00
Doug Burks
028d84b805 remove commas from groupby segments 2020-05-18 10:25:05 -04:00
Doug Burks
a3323c24ac fix ftp.argument 2020-05-18 09:52:56 -04:00
Doug Burks
2f15c30d9a fix dhcp query 2020-05-18 09:44:49 -04:00
weslambert
43a8ec6f50 Merge pull request #719 from Security-Onion-Solutions/fix/so-kibana-config
Fix/so kibana config
2020-05-18 09:23:17 -04:00
Wes Lambert
ee5937d038 update Kibana config 2020-05-18 13:21:18 +00:00
Wes Lambert
228bbbea5f update config export 2020-05-18 13:16:42 +00:00
Mike Reeves
fbbacd205c Update filebeat.yml 2020-05-18 08:47:03 -04:00
Doug Burks
bd4dfcb351 fix dns domain queries 2020-05-18 08:35:43 -04:00
Doug Burks
9cc750a90f fix dns tld failures 2020-05-18 08:32:37 -04:00
Mike Reeves
b29decb95f Remove Kratos placeholder 2020-05-17 21:23:12 -04:00
William Wernert
f319257f8d [feat] Change kratos:redirect to master:url_base 2020-05-17 13:14:28 -04:00
Josh Brower
b01209457d Merge pull request #718 from Security-Onion-Solutions/bugfix/kibana-fleet
Update Fleet IP placeholder
2020-05-17 12:51:57 -04:00
Josh Brower
8a8970d9ee Update Fleet IP placeholder 2020-05-17 12:51:20 -04:00
Mike Reeves
bc5e86bd4b Merge pull request #717 from Security-Onion-Solutions/issue/140
Issue/140
2020-05-17 11:24:59 -04:00
Mike Reeves
329a030585 Merge remote-tracking branch 'remotes/origin/dev' into issue/140 2020-05-17 09:38:30 -04:00
weslambert
f7de391518 Merge pull request #713 from Security-Onion-Solutions/fix/kibana_config_load
change KRATOS to MASTER
2020-05-16 13:07:24 -04:00
Wes Lambert
23eb73a943 change KRATOS to MASTER 2020-05-16 16:31:06 +00:00
weslambert
907702441f Merge pull request #712 from Security-Onion-Solutions/fix/kibana_config_load_order
Fix load order for PLACEHOLDER
2020-05-16 11:49:58 -04:00
Wes Lambert
047f4e31ad Fix load order for PLACEHOLDER 2020-05-16 15:48:55 +00:00
weslambert
6e9784f68c Merge pull request #711 from Security-Onion-Solutions/fix/kibana_config_placeholder
fix placeholder
2020-05-16 11:46:46 -04:00
Wes Lambert
3363a5a20a fix placeholder 2020-05-16 15:45:52 +00:00
weslambert
9d4397806b Merge pull request #710 from Security-Onion-Solutions/fix/kibana_config_export
Fix/kibana config export
2020-05-16 11:35:43 -04:00
Wes Lambert
9b8cf3845a update Kibana config export 2020-05-16 15:34:33 +00:00
Wes Lambert
89527c533a update Kibana config export 2020-05-16 15:33:20 +00:00
weslambert
5d7c020223 Merge pull request #709 from Security-Onion-Solutions/fix/kibana_config
update Kibana config
2020-05-16 11:09:45 -04:00
Wes Lambert
bd5cc35fc0 update Kibana config 2020-05-16 15:07:33 +00:00
weslambert
95141574d4 Merge pull request #707 from Security-Onion-Solutions/fix/dhcp_parsing
Fix/dhcp parsing
2020-05-16 11:04:13 -04:00
Wes Lambert
4b91ade2e8 fix message_types one more time :) 2020-05-16 15:03:27 +00:00
Wes Lambert
9845ee189c fix message_types for real 2020-05-16 15:02:41 +00:00
Wes Lambert
f0662eed48 remark Beat tag for now 2020-05-16 14:59:41 +00:00
Wes Lambert
6a2ddd4ef6 move to DNS 2020-05-16 14:58:51 +00:00
Wes Lambert
66c89abbc6 Fix DHCP message types 2020-05-16 14:58:06 +00:00
William Wernert
5619768212 [fix] Use hostname or ip in Kibana based on setup
Fixes #603
2020-05-15 20:40:35 -04:00
m0duspwnens
6c7f487a3e Merge remote-tracking branch 'remotes/origin/dev' into issue/140 2020-05-15 19:43:18 -04:00
m0duspwnens
0086f0b71b add redis state to standalone - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/140 2020-05-15 19:43:06 -04:00
m0duspwnens
bb2587aaa0 add standalone to curator conf and scripts as well as other appopriate node types - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/140 2020-05-15 15:42:04 -04:00
Doug Burks
cc7a244d0b Create zeek.dns.tld
https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/599
2020-05-15 15:32:25 -04:00
Doug Burks
60d2a0818b Add to zeek.dns and have it send to zeek.dns.tld
https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/599
2020-05-15 15:31:17 -04:00
m0duspwnens
2bd3a4ddd1 allow curator state to install on so-searchnode, so-eval, so-node, so-mastersearch, so-heavynode, so-standalone - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/140 2020-05-15 15:30:00 -04:00
m0duspwnens
4e63477b98 Merge remote-tracking branch 'remotes/origin/dev' into issue/140 2020-05-15 15:21:03 -04:00
m0duspwnens
e7baca16ef allow grafana and influxdb states to run on standalone mode - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/140 2020-05-15 15:20:36 -04:00
m0duspwnens
330ea0571f fix container list for so-status for standalone mode - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/140 2020-05-15 15:09:40 -04:00
Josh Brower
e02bf2ebb5 Merge branch 'dev' of https://github.com/Security-Onion-Solutions/securityonion-saltstack into dev 2020-05-15 15:05:47 -04:00
Josh Brower
9d4536dcbe osquery ingest parsing update 2020-05-15 15:05:21 -04:00
Doug Burks
fc883745e5 add fields to conn log
https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/599
2020-05-15 15:02:02 -04:00
Doug Burks
58d59c6844 use null safe operator for source.port and destination.port
https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/594
2020-05-15 14:58:21 -04:00
Josh Brower
4737c0da3f Merge pull request #702 from Security-Onion-Solutions/bugfix/fleet-deployment
Fleet Setup - Restart nginx
2020-05-15 14:48:18 -04:00
Josh Brower
6b4822d98d Fleet Setup - Restart nginx 2020-05-15 14:47:19 -04:00
m0duspwnens
c89bc0b51a create nginx conf for standalone - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/140 2020-05-15 14:42:38 -04:00
weslambert
baf1de4b34 Merge pull request #700 from Security-Onion-Solutions/fix/common_type_removal
remove type field
2020-05-15 14:37:44 -04:00
William Wernert
87afedae82 [fix] Menu spelling fixes 2020-05-15 14:33:37 -04:00
Wes Lambert
03805bd6e2 remove type field 2020-05-15 18:29:49 +00:00
weslambert
59ece8fd29 Merge pull request #699 from Security-Onion-Solutions/fix/dce_rpc_parsing
update DCE/RPC parsing
2020-05-15 14:20:37 -04:00
Wes Lambert
5d5f5cf105 update DCE/RPC parsing 2020-05-15 18:19:05 +00:00
Mike Reeves
7e1016ff07 Update firewall rules to allow minions to connect 2020-05-15 13:59:07 -04:00
Mike Reeves
10896c1add Update Release Notes 2020-05-15 13:41:51 -04:00
m0duspwnens
2f566bf6d7 add so-standalone to agent/wazuh-register-agent 2020-05-15 13:25:31 -04:00
m0duspwnens
1a157eb6a5 add so-standalone to agent/ossec.conf 2020-05-15 13:23:58 -04:00
m0duspwnens
9c7481a0c7 add so-status map for standalone 2020-05-15 13:21:05 -04:00
Mike Reeves
d04f58a27e Update README.md 2020-05-15 13:10:52 -04:00
William Wernert
2f4ce40095 [fix] Change verbiage to indicate the master vs open is only for OS packages 2020-05-15 11:40:37 -04:00
William Wernert
692d1d72a3 [fix] Change verbiage to indicate the master vs open is only for OS packages 2020-05-15 11:39:59 -04:00
William Wernert
c9614f9baf [fix] Only add user to SOC on masters 2020-05-15 11:20:33 -04:00
m0duspwnens
74290eca2a change = to in - https://github.com/Security-Onion-Solutions/securityonion-saltstack.git 2020-05-15 11:20:06 -04:00
m0duspwnens
f3a2c1fb4d add missing ] - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/140 2020-05-15 11:08:10 -04:00
m0duspwnens
f4db261baf change elif - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/140 2020-05-15 10:57:25 -04:00
m0duspwnens
fdae84bb74 remove = in - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/140 2020-05-15 10:56:16 -04:00
William Wernert
cfec4eb5a2 Merge branch 'dev' of github.com:Security-Onion-Solutions/securityonion-saltstack into dev 2020-05-15 10:52:33 -04:00
William Wernert
b37b993eea [fix] Don't say we're downloading containers on iso install 2020-05-15 10:43:20 -04:00
William Wernert
eeb0579acb [fix] Don't change settings during whiptail menus on ISO 2020-05-15 10:42:52 -04:00
William Wernert
b9456dcc98 [fix] Set output dir for docker registry untar 2020-05-15 10:42:13 -04:00
Doug Burks
d6d27a2861 avoid duplicate entries in _cluster/settings for mastersearch
https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/696
2020-05-15 10:29:24 -04:00
m0duspwnens
509188092c adding so-standalone state logic, add zeek pillar to so-standalone - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/140 2020-05-15 10:02:25 -04:00
m0duspwnens
e8244cb2f2 add standalone to case statement in configure_minion so-functions - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/140 2020-05-14 17:14:35 -04:00
m0duspwnens
5f1582f39f remove extra space for standalone from pillar/top = https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/140 2020-05-14 16:57:50 -04:00
Doug Burks
e41c1b6755 fix typo 2020-05-14 16:57:34 -04:00
m0duspwnens
fb020f4fcd update so-functions to handle STANDALONE mode - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/140 2020-05-14 16:26:04 -04:00
m0duspwnens
692f04727f add standalone mode to pillar and state top - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/140 2020-05-14 16:06:19 -04:00
m0duspwnens
3064af753b allow STANDALONE mode to install salt-master - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/140 2020-05-14 15:23:53 -04:00
Josh Patterson
09368b05f7 Merge pull request #688 from Security-Onion-Solutions/issue/140
rename PROD to STANDALONE
2020-05-14 15:06:38 -04:00
m0duspwnens
5f4ec41497 rename PROD to STANDALONE 2020-05-14 15:05:37 -04:00
Josh Patterson
989dc418a8 Merge pull request #686 from Security-Onion-Solutions/quickfix/sostatus
rename so-aptcacherng for so-status
2020-05-14 14:12:24 -04:00
m0duspwnens
9667f8b853 rename so-aptcacherng for so-status 2020-05-14 14:11:06 -04:00
Doug Burks
34d9882987 fix Wazuh and Sysmon queries 2020-05-14 13:47:01 -04:00
Josh Patterson
8cd3d0c16c Merge pull request #684 from Security-Onion-Solutions/issue/682
run so-elasticsearch-pipelines only on changes
2020-05-14 13:41:07 -04:00
m0duspwnens
7f464af5fa run so-elasticsearch-pipelines only on changes - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/682 2020-05-14 13:39:19 -04:00
William Wernert
02cd70c2e0 Merge branch 'dev' of github.com:Security-Onion-Solutions/securityonion-saltstack into dev 2020-05-14 12:33:34 -04:00
William Wernert
80cd408821 [fix] Only install nc, not full nmap 2020-05-14 12:33:28 -04:00
Mike Reeves
dbef2e2832 Update soc.json 2020-05-14 11:56:18 -04:00
William Wernert
5078ea8692 Merge branch 'dev' of github.com:Security-Onion-Solutions/securityonion-saltstack into dev 2020-05-14 11:50:22 -04:00
William Wernert
2642968089 [fix] Correct wazuh + suricata pillar placement 2020-05-14 11:50:16 -04:00
Mike Reeves
6991900ceb Update Query for geo 2020-05-14 11:34:10 -04:00
Doug Burks
5c3e7acc6d change resp_mime_types to file.resp_mime_types 2020-05-14 11:21:32 -04:00
Doug Burks
6112322bce change file.path to smb.path 2020-05-14 11:20:11 -04:00
Josh Brower
daf2936635 Merge pull request #680 from Security-Onion-Solutions/bugfix/navigator-top
Navigator top.sls fix
2020-05-14 11:20:00 -04:00
Josh Brower
554612d25f Navigator top.sls fix 2020-05-14 11:19:07 -04:00
Mike Reeves
937f488a8f Update static pillar 2020-05-14 11:13:43 -04:00
Doug Burks
c7b4ab116f fix rfb typo 2020-05-14 10:57:44 -04:00
Josh Brower
9186a553ca Merge pull request #678 from Security-Onion-Solutions/bugfix/nids-and-osquerypackages
osquery packages fix
2020-05-13 20:40:41 -04:00
Josh Brower
3db67de27a osquery packages fix 2020-05-13 20:39:56 -04:00
Josh Brower
a37ce376a7 Merge pull request #676 from Security-Onion-Solutions/bugfix/elastalert-nidsalert
Playbook hivealert fixes
2020-05-13 19:28:19 -04:00
Josh Brower
8a68e6adb3 Playbook hivealert fixes 2020-05-13 19:27:14 -04:00
Josh Patterson
0e43a948b5 Merge pull request #675 from Security-Onion-Solutions/issue/668
add missing install for apt-get
2020-05-13 17:38:44 -04:00
m0duspwnens
367f99bf6e add missing install for apt-get 2020-05-13 17:38:11 -04:00
Josh Patterson
e8778a2ad7 Merge pull request #674 from Security-Onion-Solutions/issue/668
point gpg key to archive/2019.2.5
2020-05-13 17:24:04 -04:00
m0duspwnens
d82c6c34ed Merge branch 'issue/668' of https://github.com/Security-Onion-Solutions/securityonion-saltstack into issue/668 2020-05-13 17:22:34 -04:00
m0duspwnens
f3ff8dc18c add quiet option back to wget 2020-05-13 17:22:24 -04:00
Josh Patterson
5e2a1b9346 Merge branch 'dev' into issue/668 2020-05-13 17:17:53 -04:00
m0duspwnens
1499a0c5fd point gpg key to archive/2019.2.5 2020-05-13 17:16:15 -04:00
Josh Brower
e9deb99d2f Merge pull request #673 from Security-Onion-Solutions/bugfix/elastalert-nidsalert
Elastalert - NIDS fix
2020-05-13 17:04:00 -04:00
Josh Brower
c3627c38e3 Elastalert - NIDS fix 2020-05-13 17:03:14 -04:00
Josh Patterson
1b764f5d90 Merge pull request #672 from Security-Onion-Solutions/issue/668
remove space in package install
2020-05-13 16:43:34 -04:00
m0duspwnens
64cddfeed3 remove space in package install 2020-05-13 16:42:49 -04:00
Josh Brower
48ee1fe016 Merge pull request #671 from Security-Onion-Solutions/bugfix/elastalert
Elastalert --> TheHive fixes
2020-05-13 16:35:22 -04:00
Josh Brower
6e4ee26a58 Elastalert --> TheHive fixes 2020-05-13 16:34:35 -04:00
William Wernert
92bb1499c4 Merge branch 'dev' of github.com:Security-Onion-Solutions/securityonion-saltstack into dev
# Conflicts:
#	setup/so-functions
2020-05-13 16:20:10 -04:00
William Wernert
d7f5246dc4 [feat] Add quiet flag to wget 2020-05-13 16:19:06 -04:00
William Wernert
8c8e0bf0e4 [fix] Set hostname correctly so salt picks it up before reboot 2020-05-13 16:15:41 -04:00
Josh Patterson
c0c173fd71 Merge pull request #670 from Security-Onion-Solutions/issue/668
fix the missed changes for 2019.2.5 salt upgrade
2020-05-13 16:04:58 -04:00
m0duspwnens
c4ba7b3024 fix the missed changes for 2019.2.5 salt upgrade - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/668 2020-05-13 16:03:22 -04:00
Josh Patterson
a06498d8fb Merge pull request #669 from Security-Onion-Solutions/issue/668
pin salt repo to 2019.2.5 for centos7
2020-05-13 15:19:34 -04:00
m0duspwnens
9d33d6ae62 pin salt repo to 2019.2.5 for centos - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/668 2020-05-13 15:18:07 -04:00
Josh Patterson
9c98d7d570 Merge pull request #667 from Security-Onion-Solutions/issue/227
add newline to mastersearch tab
2020-05-13 14:10:07 -04:00
m0duspwnens
5b57c58b84 add newline to mastersearch tab 2020-05-13 14:09:15 -04:00
William Wernert
5623f2e9a4 [fix] INSTALLERTYPE > install_type 2020-05-13 13:25:55 -04:00
William Wernert
c7aac11868 [fix] Don't redirect echo twice 2020-05-13 13:04:39 -04:00
William Wernert
530dd3b82b [fix] Don't redirect echo twice 2020-05-13 12:49:37 -04:00
William Wernert
6cdcda30f4 Merge branch 'dev' of github.com:Security-Onion-Solutions/securityonion-saltstack into dev 2020-05-13 12:43:54 -04:00
William Wernert
8ce520317e [fix] Sensor needs to set up firewall before installing packages 2020-05-13 12:43:50 -04:00
Josh Brower
bb0a89f12b Merge pull request #666 from Security-Onion-Solutions/bugfix/playbook-updateplays
Playbook - update plays
2020-05-13 12:20:30 -04:00
Josh Brower
23b4870ee6 Playbook - update plays 2020-05-13 12:19:37 -04:00
Jason Ertel
db51ab9d45 Adjust elastalert salt setup to match new so-elastalert image 2020-05-13 12:14:18 -04:00
Josh Patterson
e9cf0f8599 Merge pull request #665 from Security-Onion-Solutions/issue/227
Issue/227
2020-05-13 12:11:43 -04:00
m0duspwnens
d94a76a2c7 fix docker_container_cpu calculations for grafana 2020-05-13 12:06:02 -04:00
William Wernert
36b16cd2fe [fix] Remove extra backslash 2020-05-13 11:57:17 -04:00
William Wernert
846a875429 [fix] Install epel before installing argon2 2020-05-13 11:54:57 -04:00
m0duspwnens
581000b920 add grafana dashboard for mastersearch node - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/227 2020-05-13 11:52:10 -04:00
William Wernert
10cd6dd8d9 Merge branch 'dev' of github.com:Security-Onion-Solutions/securityonion-saltstack into dev 2020-05-12 18:07:10 -04:00
William Wernert
24dd4e0489 [fix] Add user to SOC after state has been applied 2020-05-12 18:07:04 -04:00
Mike Reeves
50fc9a4713 Merge pull request #664 from Security-Onion-Solutions/feature/defaultsearch
Remove Keyword
2020-05-12 17:55:32 -04:00
Mike Reeves
0b0c8d8471 Remove Keyword 2020-05-12 17:54:25 -04:00
William Wernert
1230cc57d7 [fix] Correct percentages 2020-05-12 17:54:03 -04:00
William Wernert
75af1e9920 Merge branch 'dev' of github.com:Security-Onion-Solutions/securityonion-saltstack into dev 2020-05-12 17:52:48 -04:00
William Wernert
08007a491f [fix] reboot error fix 2020-05-12 17:52:44 -04:00
William Wernert
cb69edc6dd [fix] Add back call to add_web_user 2020-05-12 17:50:52 -04:00
Mike Reeves
71f99528ae Move idstools and master earlier in the setup 2020-05-12 17:47:55 -04:00
Josh Brower
bc4b4385bf Merge pull request #662 from Security-Onion-Solutions/bugfix/soctopus-config
soctopus config fix
2020-05-12 17:04:22 -04:00
Josh Patterson
81d66207ed Merge pull request #661 from Security-Onion-Solutions/quickfix/common
move statedir and salttmp from salt state to common state
2020-05-12 17:00:13 -04:00
Josh Brower
d270c8f32d soctopus config fix 2020-05-12 16:59:35 -04:00
m0duspwnens
d5b2a6f059 move statedir and salttmp from salt state to common state 2020-05-12 16:58:26 -04:00
m0duspwnens
56b92afb6b fix telegraf.conf for different roles 2020-05-12 16:54:38 -04:00
Josh Brower
6956f14c0d Merge pull request #660 from Security-Onion-Solutions/bugfix/playbook-mysql-final
salt bug workarounds
2020-05-12 16:25:13 -04:00
Josh Brower
4d3d7dc60e salt bug workarounds 2020-05-12 16:24:24 -04:00
William Wernert
6b837f80ff [fix] numeric argument required, return 0 in wait_for_file 2020-05-12 14:26:02 -04:00
William Wernert
01b68e8b6a Merge branch 'dev' of github.com:Security-Onion-Solutions/securityonion-saltstack into dev 2020-05-12 14:20:14 -04:00
William Wernert
f8da001b7c [fix] numeric argument required, unquote var 2020-05-12 14:19:35 -04:00
Josh Brower
abd907fee1 Merge pull request #659 from Security-Onion-Solutions/bugfix/nids-parsing-alerting
suricata parsing
2020-05-12 14:07:51 -04:00
Josh Brower
62bec93190 suricata parsing 2020-05-12 14:04:02 -04:00
Mike Reeves
69bb422fa2 Merge pull request #658 from Security-Onion-Solutions/feature/defaultsearch
Update soc.json with default search info
2020-05-12 13:58:47 -04:00
Mike Reeves
0b7568e08f Update soc.json with default search info 2020-05-12 13:57:40 -04:00
Josh Brower
d1eac195d8 Enable Navigator 2020-05-11 22:41:54 -04:00
Josh Brower
4bd8e136be Enabled playbook 2020-05-11 22:41:02 -04:00
Josh Brower
d3992cb6e1 Merge pull request #657 from Security-Onion-Solutions/bugfix/playbook-mysql
playbook mysql fixes
2020-05-11 22:39:58 -04:00
Josh Brower
09ce3e088a playbook mysql fixes 2020-05-11 22:39:13 -04:00
Josh Brower
b658f7133b Update top.sls 2020-05-11 09:48:24 -04:00
Mike Reeves
09e2413695 Remove version hardcode 2020-05-10 17:31:50 -04:00
Josh Brower
945d50cc13 Merge pull request #649 from Security-Onion-Solutions/bugfix/playbook-mysql
navigator fixes
2020-05-10 11:58:39 -04:00
Josh Brower
20e7331bb9 navigator fixes 2020-05-10 11:57:20 -04:00
Josh Brower
4977a8b17c Merge pull request #648 from Security-Onion-Solutions/bugfix/playbook-mysql
Fix playbook mysql errors
2020-05-10 07:58:39 -04:00
Josh Brower
02160b12ee Fix playbook mysql errors 2020-05-10 07:57:45 -04:00
Josh Brower
170d799470 Merge pull request #647 from Security-Onion-Solutions/bugfix/playbook-mysql
feature/playbook mysql
2020-05-09 16:30:50 -04:00
Mike Reeves
02ea4eb410 Update so-functions 2020-05-09 12:00:57 -04:00
Jason Ertel
47295d42f5 Initial iteration of new SOC Event search module 2020-05-08 17:00:06 -04:00
Josh Brower
e3a3a01ee1 Merge remote-tracking branch 'remotes/origin/dev' into bugfix/playbook-mysql 2020-05-08 16:49:38 -04:00
Josh Brower
9b54a432fc mysql playbook 2020-05-08 16:36:59 -04:00
Mike Reeves
818c5025f9 Merge pull request #644 from Security-Onion-Solutions/issue/140
Change Prod Mode to Standalone
2020-05-07 16:11:40 -04:00
Mike Reeves
34bcfd806d Change Prod Mode to Standalone 2020-05-07 16:10:50 -04:00
Mike Reeves
a883af32e7 change core to nginx 2020-05-06 18:07:26 -04:00
Mike Reeves
f2acf93493 Fix version in so-functions 2020-05-06 17:51:32 -04:00
Mike Reeves
3550248d39 Fix registry unpack for ISO 2020-05-06 17:48:47 -04:00
Josh Patterson
dd96a44c05 Merge pull request #640 from Security-Onion-Solutions/issue/632
Issue/632
2020-05-06 16:50:14 -04:00
m0duspwnens
2e6e474a54 require with onchanges is redundant 2020-05-06 16:48:27 -04:00
m0duspwnens
0662245590 fix for https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/632 2020-05-06 16:38:39 -04:00
Mike Reeves
50b352bfb6 Merge pull request #638 from Security-Onion-Solutions/issue/140
Added Production Mode
2020-05-06 14:37:36 -04:00
Mike Reeves
80aca60477 Added Production Mode 2020-05-06 14:27:34 -04:00
Mike Reeves
72ea577c70 Merge pull request #637 from Security-Onion-Solutions/issue/620
Remove Parsing Node
2020-05-06 14:08:50 -04:00
Mike Reeves
bc6c8c8332 Remove Parsing Node 2020-05-06 14:06:02 -04:00
Mike Reeves
1fa1277e31 Fix for osquery firewall 2020-05-06 11:29:28 -04:00
Mike Reeves
48ad831f9f Merge pull request #636 from Security-Onion-Solutions/feature/firewallupdate
Feature/firewallupdate
2020-05-06 09:38:52 -04:00
Josh Brower
bc34c67f47 Merge remote-tracking branch 'remotes/origin/dev' into bugfix/playbook-mysql 2020-05-06 08:30:45 -04:00
Josh Brower
2e3bcf600f Playbook mysql 2020-05-06 08:29:14 -04:00
Mike Reeves
88df4cc7ae Fix location for files 2020-05-05 23:31:34 -04:00
Mike Reeves
77b07bb6f8 Fix location for files 2020-05-05 23:02:50 -04:00
Mike Reeves
13e067c20a Fix location for files 2020-05-05 17:45:19 -04:00
Mike Reeves
6936bc9c3e Fix file for firewall templates 2020-05-05 14:45:54 -04:00
Mike Reeves
fbbf9dab60 Allow Firewall to update between versions 2020-05-05 13:57:36 -04:00
Josh Patterson
981801f23c Merge pull request #630 from Security-Onion-Solutions/issue/629
remove schedule state from being applied
2020-05-05 11:02:46 -04:00
m0duspwnens
ad7e59794a remove schedule state from being applied 2020-05-05 10:57:14 -04:00
William Wernert
754f3ac537 Merge pull request #608 from Security-Onion-Solutions/feature/setup-testing-flag
Feature/setup testing flag
2020-05-05 09:08:55 -04:00
William Wernert
a20f9e2697 Merge branch 'dev' into feature/setup-testing-flag
# Conflicts:
#	setup/so-functions
#	setup/so-whiptail
2020-05-05 09:08:37 -04:00
William Wernert
aa00309f00 [fix] Add TESTING flag to resolve merge conflicts 2020-05-05 09:06:46 -04:00
William Wernert
fc2de5a384 [fix] Pipe firstcheckin output to /dev/null 2020-05-04 20:43:42 -04:00
William Wernert
1c0a78e8ad Merge pull request #628 from Security-Onion-Solutions/feature/hw-requirements
Feature/hw requirements
2020-05-04 16:57:35 -04:00
William Wernert
0b37437102 [fix] so-setup fixes (function ordering
* Firewall function needs to be run at different times for different install types
* Minion pillars need to be copied before running any salt states
2020-05-04 16:56:23 -04:00
William Wernert
d9a8fa0474 [fix] Hit -> Press 2020-05-04 16:06:02 -04:00
William Wernert
6785b9e4d2 [feat] Add check for hardware requirements 2020-05-04 15:59:07 -04:00
Josh Patterson
d9dff52104 Merge pull request #627 from Security-Onion-Solutions/issue/623
nginx portion of https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/623
2020-05-04 15:45:23 -04:00
m0duspwnens
9adf08522c nginx portion of https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/623 2020-05-04 15:43:09 -04:00
William Wernert
457007c9c7 Merge pull request #626 from Security-Onion-Solutions/feature/gitignore
[feat] Add .gitignore
2020-05-04 14:10:16 -04:00
William Wernert
852c3ced3b [feat] Add .gitignore 2020-05-04 14:09:06 -04:00
William Wernert
398991de0c Merge pull request #625 from Security-Onion-Solutions/feature/setup-refactor
Feature/setup refactor
2020-05-04 14:01:47 -04:00
William Wernert
c42c22dc66 [fix] Correct require in fleet sls 2020-05-04 13:49:27 -04:00
William Wernert
07726de250 [fix] Remove old FIXMEs 2020-05-04 12:15:44 -04:00
William Wernert
80aee06a67 [fix] Remove files that are no longer in dev 2020-05-04 10:57:46 -04:00
William Wernert
5805d68b58 [fix] Fix dev merge issues 2020-05-04 10:55:00 -04:00
William Wernert
a2fbdf644c [fix] Move + rename SOVERSION var for ISO build 2020-05-04 10:43:27 -04:00
William Wernert
714cd522cb Merge branch 'dev' into feature/setup-refactor
# Conflicts:
#	README.md
#	VERSION
#	pillar/top.sls
#	salt/common/grafana/grafana_dashboards/eval/eval.json
#	salt/common/init.sls
#	salt/common/tools/sbin/so-status
#	salt/curator/init.sls
#	salt/elastalert/init.sls
#	salt/elasticsearch/init.sls
#	salt/filebeat/init.sls
#	salt/fleet/files/scripts/so-fleet-setup
#	salt/fleet/init.sls
#	salt/grafana/dashboards/sensor_nodes/sensor.json
#	salt/hive/init.sls
#	salt/idstools/init.sls
#	salt/kibana/bin/so-kibana-config-load
#	salt/logstash/init.sls
#	salt/master/init.sls
#	salt/mysql/init.sls
#	salt/nginx/etc/index.html
#	salt/pcap/init.sls
#	salt/playbook/init.sls
#	salt/reactor/fleet.sls
#	salt/redis/init.sls
#	salt/sensoroni/init.sls
#	salt/soctopus/init.sls
#	salt/strelka/init.sls
#	salt/suricata/init.sls
#	salt/tcpreplay/init.sls
#	salt/wazuh/init.sls
#	salt/zeek/init.sls
#	setup/so-functions
#	setup/so-setup
#	setup/so-whiptail
2020-05-04 10:35:53 -04:00
William Wernert
26e40f433b [fix] Pull docker/config.sls changes from dev 2020-05-04 10:28:44 -04:00
William Wernert
c82f55695c [fix] Docker container list fix 2020-05-04 10:27:07 -04:00
William Wernert
2c307242b1 [fix] Set MAINIP var on all installs 2020-05-04 10:24:47 -04:00
William Wernert
6a4f3a526f [fix] Fix so-setup ordering
Run all salt commands after accepting salt key, and apply firewall state after all pillars generated
2020-05-04 09:43:36 -04:00
William Wernert
eb2c432f22 [fix] Correct ordering of setup commands
Firewall must be updated before checking in to salt,
and schedule state must run before copying minion temp files to master
2020-05-04 09:36:17 -04:00
William Wernert
c4741043e9 [fix] Only chmod files if they exist 2020-05-04 09:34:57 -04:00
William Wernert
6ae91c2ff0 [feat] Use getent instead of hosts in case the hostsfile has already been updated 2020-05-04 09:34:36 -04:00
Josh Patterson
285d74767d Merge pull request #624 from Security-Onion-Solutions/issue/619
Issue/619
2020-05-01 15:44:12 -04:00
m0duspwnens
2dd2289c94 fix some happy mistakes - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/619 2020-05-01 15:37:54 -04:00
m0duspwnens
174b353ce0 salt version pulled due to vuln, update to 2019.2.4 2020-05-01 14:01:10 -04:00
m0duspwnens
e2244bd839 use maps for so-status - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/619 2020-05-01 13:21:11 -04:00
William Wernert
299709108f [fix] Don't run check_exitstatus in whiptail_homenet_sensor 2020-05-01 11:04:35 -04:00
Mike Reeves
cb59d21f5a Merge pull request #622 from Security-Onion-Solutions/fix/1.2.2
Fix/1.2.2
2020-05-01 10:47:33 -04:00
Mike Reeves
aeebc893de Update SOC page 2020-05-01 10:44:05 -04:00
Mike Reeves
a0310b1c2c Update Readme 2020-05-01 10:38:04 -04:00
Mike Reeves
90840f6d00 Update Kratos yaml 2020-04-30 15:21:52 -04:00
William Wernert
a44158261a [fix] Run salt command to check in to master before accepting salt key 2020-04-30 12:45:48 -04:00
William Wernert
6359da0010 [fix] Move salt-key accept to after the ca + ssl states 2020-04-30 11:31:33 -04:00
Mike Reeves
784e2896bd Fix Strelka Versioning 2020-04-30 11:31:07 -04:00
William Wernert
4c6b841b16 [fix] Set minion id after prompting for hostname 2020-04-30 10:06:53 -04:00
Mike Reeves
793b887aea Update vertsion to 1.2.2 2020-04-30 09:44:49 -04:00
William Wernert
a281f59319 [fix] Update packages before setting highstate on salt startup in case it updates 2020-04-30 08:51:38 -04:00
William Wernert
1f030160b0 [feat] Update salt ver to 2019.2.4 2020-04-30 08:49:16 -04:00
William Wernert
93493b204f [fix] Add new whitespace 2020-04-29 18:15:21 -04:00
William Wernert
3d04ab59d5 [fix] Comment template lines in so-status 2020-04-29 18:14:28 -04:00
William Wernert
0ee4aa9eb9 [fix] Move common pillar values to the bottom of the top file 2020-04-29 18:13:22 -04:00
William Wernert
5e18eb6e4d [fix] Use False instead of 0 as default val in docker/config.sls 2020-04-29 18:12:50 -04:00
Mike Reeves
bf6b525359 Update Salt Version 2020-04-29 16:39:41 -04:00
Josh Patterson
cb541ebea2 Merge pull request #614 from Security-Onion-Solutions/issue/613
only do sed if fleet_node is true
2020-04-29 16:02:22 -04:00
m0duspwnens
9833d1754a only do sed if fleet_node is true - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/613 2020-04-29 11:19:28 -04:00
William Wernert
bf41fe838c [fix] Correct order of setup salt states 2020-04-28 22:40:21 -04:00
William Wernert
31f9f31ff2 [fix] Run docker pull once more if the first time fails 2020-04-28 22:39:45 -04:00
William Wernert
fcc15e283a [fix] Remove duplicate salt state 2020-04-28 22:38:52 -04:00
William Wernert
e1a457e445 [fix] Correct mysql port 2020-04-28 22:38:36 -04:00
William Wernert
8afacd9709 [fix] Run elasticsearch state earlier in setup 2020-04-28 16:19:26 -04:00
William Wernert
05c55efe12 [fix] Test for 3306 on MASTERIP, not localhost 2020-04-28 16:19:08 -04:00
William Wernert
3cff145e2d [fix] Verify vm.max_map_count is present before so-thehive-es 2020-04-28 16:18:48 -04:00
Josh Patterson
f8dde1201e Merge pull request #609 from Security-Onion-Solutions/issue/585
Issue/585
2020-04-28 16:11:38 -04:00
m0duspwnens
fdf5450a2e remove stuff.sls 2020-04-28 14:29:44 -04:00
William Wernert
f22cb9aac1 [feat] Add TESTING flag to whiptail menus for automated setup script testing 2020-04-28 14:11:08 -04:00
m0duspwnens
8d2ca003fb change how we populate local.zeek - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/585 2020-04-28 14:10:57 -04:00
Mike Reeves
d5075d68b1 Change Version Files 2020-04-28 14:00:20 -04:00
William Wernert
0ea8c349fb [fix] Fix typo + permissions 2020-04-28 13:34:36 -04:00
William Wernert
fa09a0ef4d [fix] Add back missing containers 2020-04-28 13:19:01 -04:00
William Wernert
e6492d4852 [fix] Don't set startup state until end of setup 2020-04-28 13:02:27 -04:00
m0duspwnens
c46a45f00f LOAD to LOCAL in local.zeek and sort local.zeek and zeekctl.cfg output 2020-04-28 12:08:32 -04:00
m0duspwnens
ca42850a0c add missing ) 2020-04-28 11:31:19 -04:00
William Wernert
7a456c2c6b [fix] Install netcat so nc command works 2020-04-28 10:58:32 -04:00
William Wernert
54127cf77a [fix] Revert changes to collect_webuser_inputs 2020-04-28 10:58:16 -04:00
William Wernert
968e3189e7 [fix] Fix indentation on mysql init.sls + depend on mysql container for fleet 2020-04-28 10:57:14 -04:00
m0duspwnens
b6741daca6 pillarize local.zeek and move zeekctl from defaults.yml to zeek pillar - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/585 2020-04-28 09:44:37 -04:00
William Wernert
34ddc69bfe [refactor][fix] Move so_version to so-variables 2020-04-28 09:01:27 -04:00
William Wernert
1eb387dcdd [fix] Change docker image prune back to docker rmi 2020-04-28 09:01:01 -04:00
William Wernert
af7accd1e9 [fix] Only disable unused nics if the array is not empty 2020-04-28 09:00:22 -04:00
William Wernert
b4f65955fe [fix] Update FS variables to correct names 2020-04-28 02:34:47 -04:00
William Wernert
d88382af12 [refactor] Change fleet sls to depend on mysql 2020-04-28 01:36:57 -04:00
William Wernert
3bfaa6f8de [merge] Merge master into feature/setup-refactor 2020-04-28 01:35:09 -04:00
Josh Patterson
90aabde4c9 Merge pull request #607 from Security-Onion-Solutions/issue/587
remove nginx from unneeded states
2020-04-27 15:10:12 -04:00
m0duspwnens
aff02e1f1c remove nginx from unneeded states 2020-04-27 15:02:30 -04:00
William Wernert
5c5a97ca75 [fix] Change order of ip link parsing 2020-04-27 12:10:59 -04:00
William Wernert
dc8ed1978d [fix] Redirect further lines to setup log, and fix issues with install 2020-04-27 08:48:06 -04:00
Jason Ertel
e4afc20366 Update Kratos config to match latest version of Kratos 2020-04-24 16:27:36 -04:00
Josh Patterson
19a3354aa2 Merge pull request #602 from Security-Onion-Solutions/issue/587
Issue/587
2020-04-24 16:26:46 -04:00
m0duspwnens
8a64ba727f remote html bind for nginx 2020-04-24 16:18:55 -04:00
Mike Reeves
d695514929 Fix Error locations 2020-04-24 14:28:23 -04:00
m0duspwnens
3136affc91 updating nginx index.html - issue/587 2020-04-24 14:24:33 -04:00
Mike Reeves
09abd723d1 Add favicons back 2020-04-24 13:42:08 -04:00
m0duspwnens
00e12d0747 Merge remote-tracking branch 'remotes/origin/dev' into issue/587 2020-04-23 15:46:50 -04:00
Mike Reeves
ad17c18824 Update Version to 1.2.2 for build automation 2020-04-23 13:59:18 -04:00
William Wernert
3f8d063bde [fix] Install wget on CentOS 2020-04-23 12:12:35 -04:00
William Wernert
46fd4cf96e [fix] Move common package install and fix typo 2020-04-23 11:52:21 -04:00
Mike Reeves
4197bfb348 Change tarball location 2020-04-23 10:29:09 -04:00
m0duspwnens
766b56a944 update dockers to 1.2.2 2020-04-23 10:11:26 -04:00
William Wernert
805299bc75 [fix[ Don't repeat whiptail menu 2020-04-22 23:06:46 -04:00
William Wernert
948e6fd20d [fix] Correct conversion ratio for log_size_limit 2020-04-22 22:48:41 -04:00
William Wernert
10e46b6fc3 [fix] Calc log_size_limit more accurately + actually call function 2020-04-22 22:42:24 -04:00
William Wernert
09c22bbe43 [fix] Create arrays for bro_pins and suricata_pins 2020-04-22 16:59:31 -04:00
William Wernert
02cd1a7623 [fix] Provide more feedback about whiptail exit status to user 2020-04-22 16:58:33 -04:00
William Wernert
5b3584d738 [fix] Add check for TESTHOST being blank, only install packages before setup if missing 2020-04-22 15:56:27 -04:00
William Wernert
d011be3faa [fix] Sensor should also set minion flag 2020-04-22 15:35:08 -04:00
William Wernert
4024c9758c [fix] Don't trim double quotes inline, masks whiptail cancel ret code 2020-04-22 15:25:25 -04:00
William Wernert
158f380dac [fix] Change =<(...) to =$(...) 2020-04-22 14:59:46 -04:00
William Wernert
5c9e2f1820 [fix] Blank terminal before whiptail starts 2020-04-22 14:57:37 -04:00
William Wernert
8404453cec [refactor] Use nproc to calculate number of cpu cores 2020-04-22 14:48:52 -04:00
William Wernert
212e57a16c [fix] Correct calculation order in calculate_useable_cores 2020-04-22 14:41:54 -04:00
William Wernert
088e9f1e7d [fix] Propagate variable rename CPUCORES -> num_cpu_cores 2020-04-22 14:37:27 -04:00
William Wernert
7c1bf39ff4 [fix] Don't print hostname in whiptail_set_redirect
* Fixes #598
2020-04-22 14:14:57 -04:00
William Wernert
a3927e2e5a [fix] Move get_redirect to run under any master node 2020-04-22 13:59:57 -04:00
William Wernert
1d55d00caf [fix] Redirect so-user command output to setup log 2020-04-22 13:57:24 -04:00
William Wernert
25432b745d [fix] Export instead of declaring dynamic variables 2020-04-22 13:56:53 -04:00
William Wernert
89674a0697 [fix] Add back web user prompts to setup 2020-04-22 13:27:49 -04:00
William Wernert
39e6f8ecbd [fix] Misc fixes for setup to run properly 2020-04-22 13:15:39 -04:00
William Wernert
3f264163d4 [fix] Test if QUIET var is set, and convert whiptail output to arrays
Also rewrite filter_unused_nics so it is the only source for list of nics
2020-04-22 13:15:08 -04:00
William Wernert
0250bf026a [fix] Redirect command outputs within saltify and docker_install 2020-04-22 13:12:12 -04:00
m0duspwnens
7e34595f99 rename docker container so-core to so-nginx - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/587 2020-04-21 15:16:08 -04:00
m0duspwnens
fd87e7bc1d breakout common state - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/587 2020-04-21 13:01:56 -04:00
Mike Reeves
8b76b30266 Merge pull request #586 from Security-Onion-Solutions/dev
1.2.1-1
2020-04-20 16:12:54 -04:00
Mike Reeves
a0c79f1a4a Merge pull request #581 from joeb1kenobe/patch-1
Update README.md
2020-04-20 16:06:42 -04:00
Mike Reeves
fe2f1f9aa3 Merge branch 'master' into patch-1 2020-04-20 16:05:01 -04:00
Mike Reeves
eaf54781e8 Merge branch 'master' into dev 2020-04-20 16:03:23 -04:00
William Wernert
739989473d [fix] Provide feedback when first running script, and execute whiptail commands 2020-04-20 15:41:01 -04:00
Mike Reeves
c024bdf427 remove proxy declaration 2020-04-20 15:31:13 -04:00
William Wernert
12e87d119b [fix] Reference correct variable when checking for setup type 2020-04-20 15:30:30 -04:00
Mike Reeves
f271fadfec Fix tarball 2020-04-20 15:28:13 -04:00
Mike Reeves
af1a44f479 Merge pull request #580 from Security-Onion-Solutions/dougburks-patch-1
Update README.md to point ISO users to the ISO page
2020-04-19 18:43:48 -04:00
Mike Reeves
c213287e07 Update README.md 2020-04-18 19:15:55 -04:00
Josh Patterson
9f1a4ddf9b Update so-functions 2020-04-18 19:15:55 -04:00
Mike Reeves
a48baf528b Update README.md 2020-04-18 19:12:21 -04:00
m0duspwnens
eca8cf5502 remove logstash pillars from eval in top 2020-04-18 19:12:21 -04:00
Wes Lambert
7ea861650f updated placeholder in saved objects 2020-04-18 19:11:20 -04:00
Wes Lambert
8622dab0d2 update load script 2020-04-18 19:11:19 -04:00
Mike Reeves
977cf8d3d1 Update Notes 2020-04-18 19:11:19 -04:00
Mike Reeves
6798c35728 Update Version File 2020-04-18 19:11:19 -04:00
Mike Reeves
ff29c9741e Update JOSN for release 2020-04-18 19:11:18 -04:00
m0duspwnens
8fd79fb6c8 add missing , 2020-04-18 19:11:18 -04:00
Josh Brower
e660de236a osquery pipeline fix 2020-04-18 19:11:18 -04:00
Mike Reeves
698a0d285c Fix the Strelka redis 2020-04-18 19:11:17 -04:00
m0duspwnens
e2c8bdcd40 remove space - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/571 2020-04-18 19:11:17 -04:00
m0duspwnens
1e8bb8b887 fix bug not allowing grafana to install on mastersearch - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/571 2020-04-18 19:11:16 -04:00
William Wernert
c76ce035a6 [refactor][WIP] Initial main setup script refactor
Untested, probably broken
2020-04-18 19:11:16 -04:00
William Wernert
ceb46c4eca [fix] Revert variable rename (HNSENSOR, HNMASTER) 2020-04-18 19:10:37 -04:00
William Wernert
ae9a7a4b55 [fix] Variable renames 2020-04-18 19:10:37 -04:00
William Wernert
b27efec2ef [refactor][WIP] Add functions for setup refactor 2020-04-18 19:10:37 -04:00
William Wernert
c851ff449b [fix] Redirect all needed commands to setup log 2020-04-18 19:10:36 -04:00
William Wernert
2e0e5c0014 [fix] Correct progress string logic 2020-04-18 19:10:36 -04:00
William Wernert
6ec2a24cbe [refactor] Remove redundant function docs 2020-04-18 19:10:35 -04:00
William Wernert
ef2bc3bfad [refactor][WIP] Delete so-contstants 2020-04-18 19:10:35 -04:00
William Wernert
8083550bb4 [fix] Revert find+replace error in suricata yaml 2020-04-18 19:10:35 -04:00
William Wernert
fcbd22318a [feat] Add dependence on mysql state to fleet state 2020-04-18 19:10:34 -04:00
William Wernert
068672ea12 [feat] Add a port check to the mysql state 2020-04-18 19:10:34 -04:00
William Wernert
3ef3c157f3 [refactor][WIP] Setup changes part 6 2020-04-18 19:10:33 -04:00
m0duspwnens
860e4fcead fix nsm threshold sensor dashboard 2020-04-18 19:04:24 -04:00
Mike Reeves
759204e77b Update Versions 2020-04-18 19:04:23 -04:00
Josh Brower
a9fba05b03 rename kratos config field 2020-04-18 19:04:23 -04:00
Mike Reeves
ea6d78b294 Download Strlka Dockers 2020-04-18 19:04:23 -04:00
Mike Reeves
137ef36f74 Change location of strelka dockers 2020-04-18 19:03:11 -04:00
Wes Lambert
66b4f15a7b replace static value for comm id 2020-04-18 19:03:11 -04:00
m0duspwnens
ff56b0db2b update nsm threshholds for searchnode 2020-04-18 19:03:10 -04:00
m0duspwnens
e6f1d487a9 changes to master dashboard 2020-04-18 19:03:10 -04:00
m0duspwnens
2cca01fdee update master dashboard 2020-04-18 19:03:10 -04:00
m0duspwnens
c95ecac7a3 rename forward node to sensor node for grafana 2020-04-18 19:03:09 -04:00
m0duspwnens
b33eccf929 rename forward node to sensor node for grafana 2020-04-18 19:03:09 -04:00
m0duspwnens
4b35098dfe rename forward node to sensor node for grafana 2020-04-18 19:03:09 -04:00
m0duspwnens
9d04c7fb7c remove graph from uptime eval 2020-04-18 19:03:08 -04:00
m0duspwnens
e8990b4009 zeek restart count red if >= 1 2020-04-18 19:03:08 -04:00
m0duspwnens
70010db77b fix spacing in zeek packet loss grafana panel 2020-04-18 19:03:07 -04:00
m0duspwnens
812e439d85 changes to eval grafana dashboard 2020-04-18 19:03:07 -04:00
m0duspwnens
a738995b09 change healthcheck to send 0 or 1 to telegraf for zeek restart 2020-04-18 19:03:07 -04:00
Josh Brower
8cb94872e6 osquery package versioning bugfix 2020-04-18 19:03:06 -04:00
William Wernert
9f8064563e [fix] Correct placeholder subbing for Kibana 2020-04-18 19:03:06 -04:00
William Wernert
2ca8d4ed9e [fix] Add correct PATH location in so-setup 2020-04-18 19:03:05 -04:00
Josh Brower
8fdc2a59c2 Playbook - automatically set SOCtopus IP 2020-04-18 19:03:05 -04:00
Mike Reeves
4c837c7d15 Apply yum fixes once changes are opk 2020-04-18 19:02:46 -04:00
Wes Lambert
b67229783b update parsing for Zeek files 2020-04-18 18:59:21 -04:00
Josh Brower
4475ebfaa8 Fleet package fixes 2020-04-18 18:59:20 -04:00
Wes Lambert
358d2f74b2 update key name 2020-04-18 18:58:27 -04:00
Josh Brower
9216d92488 osquery ingest ecs 2020-04-18 18:58:27 -04:00
Wes Lambert
0a564a438b update Kibana config 2020-04-18 18:58:27 -04:00
Josh Brower
066f1251a7 NIDS2TheHive Update for ECS 2020-04-18 18:58:26 -04:00
Jason Ertel
b7f50c321b secure config files 2020-04-18 18:58:26 -04:00
Jason Ertel
61ae94b2b3 secure config files 2020-04-18 18:58:25 -04:00
Josh Brower
12af856d00 fleet osquery fixes 2020-04-18 18:58:25 -04:00
Jason Ertel
ad26900a01 Ensure Path=/ is specified for cookie for eval mode 2020-04-18 18:58:24 -04:00
m0duspwnens
cca408e2d8 change log_size_limit logic - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/551 2020-04-18 18:58:24 -04:00
Wes Lambert
5f2fa0fdc5 migrate Zeek clean script from Bro 2020-04-18 18:56:34 -04:00
Jason Ertel
f205d97f26 support auto redirect on login 2020-04-18 18:56:34 -04:00
Jason Ertel
decf2ef022 Added config changes needed for new admin pages in SOC 2020-04-18 18:56:34 -04:00
Jason Ertel
9c2975a546 Continued auth improvements 2020-04-18 18:56:33 -04:00
m0duspwnens
308ef0fc30 move salt logs to /opt/so/logs - https://github.com/Security-Onion-Solutions/securityonion-saltstack/issues/530 2020-04-18 18:56:32 -04:00
Mike Reeves
bd0aaab003 Fix Filebeat Yaml 2020-04-18 18:55:44 -04:00
Mike Reeves
18450815d8 Have templates applied on the master only 2020-04-18 18:55:44 -04:00
Mike Reeves
2d086b7355 Disable Strelka for all things 2020-04-18 18:55:44 -04:00
Mike Reeves
093b6431f2 Fix Wazuh and Strelka 2020-04-18 18:55:43 -04:00
Mike Reeves
d3699cb9e3 Remove ES watch 2020-04-18 18:54:43 -04:00
Mike Reeves
a7c8df7f45 Fix ES Watch 2020-04-18 18:54:43 -04:00
Josh Brower
294fb67007 so-status Fleet node 2020-04-18 18:54:42 -04:00
m0duspwnens
38d4687b78 fix missing telegraf data for /nsm 2020-04-18 18:54:42 -04:00
William Wernert
48549cdd83 [fix] NetworkManager dir should not be string 2020-04-18 18:54:41 -04:00
Mike Reeves
786454c8d4 Make Kibana run faster on checkins 2020-04-18 18:53:50 -04:00
m0duspwnens
8f67056c71 removing path.config 2020-04-18 18:53:49 -04:00
m0duspwnens
ab6e989663 adding searchnode to salt/top 2020-04-18 18:53:49 -04:00
William Wernert
87e6763859 [fix] Change script permissions to allow execution 2020-04-18 18:53:43 -04:00
William Wernert
6a29c81f67 [refactor] Rename variables in suricata yamls 2020-04-18 18:52:34 -04:00
William Wernert
35b5dfd83e [refactor] Move functions used by multiple scripts to separate file 2020-04-18 18:51:58 -04:00
William Wernert
5c3a56a289 [refactor] Start using lower case for variables 2020-04-18 18:50:13 -04:00
William Wernert
ce59019967 [refactor] Move variables to their own file 2020-04-18 18:41:19 -04:00
William Wernert
63fd274106 [Fix] Remove mysql salt dep function calls from so-setup 2020-04-18 18:38:24 -04:00
William Wernert
1ac29c6fbe [refactor] Formatting change to calculate_useable_cores 2020-04-18 18:37:43 -04:00
William Wernert
912fb6d583 [refactor] Generic wait_for_file function 2020-04-18 18:36:52 -04:00
William Wernert
74375fe839 [refactor] More case statements. local vars, and double quoted strings 2020-04-18 18:36:12 -04:00
William Wernert
a7539c111e [refactor] Remove duplicate code in set_hostname 2020-04-18 18:34:04 -04:00
William Wernert
6e4a6ccfeb [refactor] Initial saltify function refactor 2020-04-18 18:32:44 -04:00
William Wernert
b57b1b6689 [refactor] Start using case statements and local vars 2020-04-18 18:29:57 -04:00
William Wernert
f801cbe376 [refactor] Use 0/1 for MASTERUPDATES variable 2020-04-18 18:28:02 -04:00
William Wernert
043f2df7e3 [refactor] Set enabled components in whiptail function 2020-04-18 18:26:27 -04:00
William Wernert
6ca5827ce6 [refactor] Use = instead of ==, more printf changes 2020-04-18 18:23:27 -04:00
William Wernert
076f161c35 [refactor][fix] Cleanup docker_install 2020-04-18 18:19:27 -04:00
William Wernert
2ab1fa75ee [refactor] Rearrange docker_registry seed 2020-04-18 18:18:41 -04:00
William Wernert
a4267fd28b [refactor] Use printf instead of echo to create multiline files 2020-04-18 18:18:08 -04:00
William Wernert
723d8f6f3f [fix] Fix various code formatting issues 2020-04-18 18:17:28 -04:00
William Wernert
b009c2677b [refactor] Generic user create and check password functions 2020-04-18 18:16:11 -04:00
William Wernert
9331ede408 [fix] Double quote variables, fix indents, remove useless cats 2020-04-18 18:14:55 -04:00
Wes Lambert
159799c91d move PL 2020-04-18 18:10:34 -04:00
Wes Lambert
0c658d01ef remark config load section for now 2020-04-18 18:10:33 -04:00
m0duspwnens
a8bd50a0cd adding searchnode to pillar/top 2020-04-18 18:10:33 -04:00
William Wernert
ef550fed2b [fix] Networking fixes 2020-04-18 18:10:32 -04:00
Wes Lambert
19678aa977 fix order 2020-04-18 18:09:38 -04:00
Wes Lambert
40e683d7a6 replace URL template with Label template 2020-04-18 18:09:38 -04:00
Wes Lambert
0e3978b87c Revert "update Kibana config"
This reverts commit 82bd14252c.
2020-04-18 18:09:37 -04:00
Mike Reeves
e1bd8c6d51 Filter out KVM kits so cpu count is correct 2020-04-18 18:09:37 -04:00
Mike Reeves
73f52d69d4 Fix so not executed in tmp 2020-04-18 18:08:41 -04:00
Wes Lambert
f2b3ca8763 add Kibana config export command 2020-04-18 18:08:41 -04:00
Wes Lambert
a7bb014fba update Kibana config 2020-04-18 18:08:40 -04:00
William Wernert
6d3bc4ec1d [refactor] grep file instead of piping cat to grep 2020-04-18 18:08:33 -04:00
William Wernert
789173be98 [refactor] Move collect_webuser_inputs to so-functions 2020-04-18 18:07:50 -04:00
William Wernert
586d231ab1 [refactor] Copy public keys instead of using HEREDOC 2020-04-18 18:07:11 -04:00
William Wernert
2127924066 [fix] Double quote variables + fix indents 2020-04-18 18:06:30 -04:00
Joe Brown
acf9c29c83 Update README.md
You stated in the blog that 16.04 was no longer supported. However in the Readme, it states to use 16.04. Update readme to 18.04.
2020-04-18 07:05:58 -04:00
Doug Burks
ea7dd0763f Update README.md 2020-04-18 06:50:17 -04:00
Doug Burks
eebc75d245 Update README.md 2020-04-18 06:48:12 -04:00
Doug Burks
997cb8f9ae Update README.md 2020-04-18 06:26:12 -04:00
William Wernert
56326026b7 [refactor] Add variable to whiptail functions for quiet install
This is an initial change to allow for automated installs and testing.
The variable `QUIET` is checked in all whiptail functions and they are
skipped if the variable is set.

Closes #526
2020-04-07 15:24:36 -04:00
167 changed files with 12977 additions and 4468 deletions

59
.gitignore vendored
View File

@@ -1,2 +1,59 @@
# Created by https://www.gitignore.io/api/macos,windows
# Edit at https://www.gitignore.io/?templates=macos,windows
### macOS ###
# General
.DS_Store
.idea
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### Windows ###
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
# End of https://www.gitignore.io/api/macos,windows

View File

@@ -1,45 +1,38 @@
## Hybrid Hunter Beta 1.2.1 - Beta 1
## Hybrid Hunter Beta 1.3.0 - Beta 2
### Changes:
- Full support for Ubuntu 18.04. 16.04 is no longer supported for Hybrid Hunter.
- Introduction of the Security Onion Console. Once logged in you are directly taken to the SOC.
- New authentication using Kratos.
- During install you must specify how you would like to access the SOC ui. This is for strict cookie security.
- Ability to list and delete web users from the SOC ui.
- The soremote account is now used to add nodes to the grid vs using socore.
- Community ID support for Zeek, osquery, and Suricata. You can now tie host events to connection logs!
- Elastic 7.6.1 with ECS support.
- New set of Kibana dashboards that align with ECS.
- Eval mode no longer uses Logstash for parsing (Filebeat -> ES Ingest)
- Ingest node parsing for osquery-shipped logs (osquery, WEL, Sysmon).
- Fleet standalone mode with improved Web UI & API access control.
- Improved Fleet integration support.
- Playbook now has full Windows Sigma community ruleset builtin.
- Automatic Sigma community rule updates.
- Playbook stability enhancements.
- Zeek health check. Zeek will now auto restart if a worker crashes.
- zeekctl is now managed by salt.
- Grafana dashboard improvements and cleanup.
- Moved logstash configs to pillars.
- Salt logs moved to /opt/so/log/salt.
- Strelka integrated for file-oriented detection/analysis at scale
### Known issues:
- New Feature: Codename: "Onion Hunt". Select Hunt from the menu and start hunting down your adversaries!
- Improved ECS support.
- Complete refactor of the setup to make it easier to follow.
- Improved setup script logging to better assist on any issues.
- Setup now checks for minimal requirements during install.
- Updated Cyberchef to version 9.20.3.
- Updated Elastalert to version 0.2.4 and switched to alpine to reduce container size.
- Updated Redis to 5.0.9 and switched to alpine to reduce container size.
- Updated Salt to 2019.2.5
- Updated Grafana to 6.7.3.
- Zeek 3.0.6
- Suricata 4.1.8
- Fixes so-status to now display correct containers and status.
- local.zeek is now controlled by a pillar instead of modifying the file directly.
- Renamed so-core to so-nginx and switched to alpine to reduce container size.
- Playbook now uses MySQL instead of SQLite.
- Sigma rules have all been updated.
- Kibana dashboard improvements for ECS.
- Fixed an issue where geoip was not properly parsed.
- ATT&CK Navigator is now it's own state.
- Standlone mode is now supported.
- Mastersearch previously used the same Grafana dashboard as a Search node. It now has its own dashboard that incorporates panels from the Master node and Search node dashboards.
### Known Issues:
- The Hunt feature is currently considered "Preview" and although very useful in its current state, not everything works. We wanted to get this out as soon as possible to get the feedback from you! Let us know what you want to see! Let us know what you think we should call it!
- You cannot pivot to PCAP from Suricata alerts in Kibana or Hunt.
- Updating users via the SOC ui is known to fail. To change a user, delete the user and re-add them.
- Due to the move to ECS, the current Playbook plays may not alert correctly at this time.
- The osquery MacOS package does not install correctly.
## Version 1.2.1 Beta 1 ISO Download
[HH1.2.1-6.ISO](https://download.securityonion.net/file/Hybrid-Hunter/HH-1.2.1-6.iso)
MD5: D7E66CA8AAC37E70E2A2F7BB12EB3C23
SHA1: D91D921896F9ADA600EBA0ADAA548D8630B5341F
SHA256: D69E327597AB429DCE13C1177BCE6C1FAD934E78A09F73D14778C2CAE616557B
### Warnings and Disclaimers
- This BETA release is BLEEDING EDGE and TOTALLY UNSUPPORTED!
@@ -55,33 +48,36 @@ SHA256: D69E327597AB429DCE13C1177BCE6C1FAD934E78A09F73D14778C2CAE616557B
Evaluation Mode:
- ISO or a Single VM running Ubuntu 16.04 or CentOS 7
- ISO or a Single VM running Ubuntu 18.04 or CentOS 7
- Minimum 12GB of RAM
- Minimum 4 CPU cores
- Minimum 2 NICs
Distributed:
- 3 VMs running the ISO or Ubuntu 16.04 or CentOS 7 (You can mix and match)
- 3 VMs running the ISO or Ubuntu 18.04 or CentOS 7 (You can mix and match)
- Minimum 8GB of RAM per VM
- Minimum 4 CPU cores per VM
- Minimum 2 NICs for forward nodes
### Prerequisites for Network Based Install
### Installation
Install git if using a Centos 7 Minimal install:
For most users, we recommend installing using [our ISO image](https://github.com/Security-Onion-Solutions/securityonion-saltstack/wiki/ISO).
If instead you would like to try a manual installation (not using our ISO), you can build from CentOS 7 or Ubuntu 18.04.
If using CentOS 7 Minimal, you will need to install git:
```sudo yum -y install git```
### Installation
Once you resolve those requirements or are using Ubuntu 16.04 do the following:
Once you have git, then do the following:
```
git clone https://github.com/Security-Onion-Solutions/securityonion-saltstack
cd securityonion-saltstack
sudo bash so-setup-network
```
Follow the prompts and reboot if asked to do so.
Then proceed to the [Hybrid Hunter Quick Start Guide](https://github.com/Security-Onion-Solutions/securityonion-saltstack/wiki/Hybrid-Hunter-Quick-Start-Guide).

View File

@@ -1 +1 @@
1.2.1
1.3.0

View File

@@ -0,0 +1 @@
mastersearchtab:

View File

@@ -10,7 +10,7 @@
eval:
containers:
- so-core
- so-nginx
- so-telegraf
{% if GRAFANA == '1' %}
- so-influxdb
@@ -54,7 +54,7 @@ eval:
{% endif %}
heavy_node:
containers:
- so-core
- so-nginx
- so-telegraf
- so-redis
- so-logstash
@@ -69,7 +69,7 @@ heavy_node:
{% endif %}
helix:
containers:
- so-core
- so-nginx
- so-telegraf
- so-idstools
- so-steno
@@ -79,14 +79,14 @@ helix:
- so-filebeat
hot_node:
containers:
- so-core
- so-nginx
- so-telegraf
- so-logstash
- so-elasticsearch
- so-curator
master_search:
containers:
- so-core
- so-nginx
- so-telegraf
- so-soc
- so-kratos
@@ -127,7 +127,7 @@ master_search:
master:
containers:
- so-dockerregistry
- so-core
- so-nginx
- so-telegraf
{% if GRAFANA == '1' %}
- so-influxdb
@@ -169,12 +169,12 @@ master:
{% endif %}
parser_node:
containers:
- so-core
- so-nginx
- so-telegraf
- so-logstash
search_node:
containers:
- so-core
- so-nginx
- so-telegraf
- so-logstash
- so-elasticsearch
@@ -185,7 +185,7 @@ search_node:
{% endif %}
sensor:
containers:
- so-core
- so-nginx
- so-telegraf
- so-steno
- so-suricata
@@ -196,7 +196,7 @@ sensor:
- so-filebeat
warm_node:
containers:
- so-core
- so-nginx
- so-telegraf
- so-elasticsearch
fleet:
@@ -206,6 +206,6 @@ fleet:
- so-fleet
- so-redis
- so-filebeat
- so-core
- so-nginx
- so-telegraf
{% endif %}

View File

@@ -1,3 +0,0 @@
analyst:
- 127.0.0.1

View File

@@ -1,3 +0,0 @@
beats_endpoint:
- 127.0.0.1

View File

@@ -1,3 +0,0 @@
forward_nodes:
- 127.0.0.1

View File

@@ -1,2 +0,0 @@
masterfw:
- 127.0.0.1

View File

@@ -1,3 +0,0 @@
minions:
- 127.0.0.1

View File

@@ -1,3 +0,0 @@
osquery_endpoint:
- 127.0.0.1

View File

@@ -1,2 +0,0 @@
search_nodes:
- 127.0.0.1

View File

@@ -1,2 +0,0 @@
wazuh_endpoint:
- 127.0.0.1

View File

@@ -0,0 +1,5 @@
healthcheck:
enabled: False
schedule: 300
checks:
- zeek

View File

@@ -1,7 +1,10 @@
base:
'*':
- patch.needs_restarting
- docker.config
'*_eval or *_helix or *_heavynode or *_sensor or *_standalone':
- match: compound
- zeek
'*_mastersearch or *_heavynode':
- match: compound
@@ -37,6 +40,18 @@ base:
- healthcheck.eval
- minions.{{ grains.id }}
'*_standalone':
- logstash
- logstash.master
- logstash.search
- firewall.*
- data.*
- brologs
- secrets
- healthcheck.standalone
- static
- minions.{{ grains.id }}
'*_node':
- static
- firewall.*

55
pillar/zeek/init.sls Normal file
View File

@@ -0,0 +1,55 @@
zeek:
zeekctl:
MailTo: root@localhost
MailConnectionSummary: 1
MinDiskSpace: 5
MailHostUpDown: 1
LogRotationInterval: 3600
LogExpireInterval: 0
StatsLogEnable: 1
StatsLogExpireInterval: 0
StatusCmdShowAll: 0
CrashExpireInterval: 0
SitePolicyScripts: local.zeek
LogDir: /nsm/zeek/logs
SpoolDir: /nsm/zeek/spool
CfgDir: /opt/zeek/etc
CompressLogs: 1
local:
'@load':
- misc/loaded-scripts
- tuning/defaults
- misc/capture-loss
- misc/stats
- frameworks/software/vulnerable
- frameworks/software/version-changes
- protocols/ftp/software
- protocols/smtp/software
- protocols/ssh/software
- protocols/http/software
- protocols/dns/detect-external-names
- protocols/ftp/detect
- protocols/conn/known-hosts
- protocols/conn/known-services
- protocols/ssl/known-certs
- protocols/ssl/validate-certs
- protocols/ssl/log-hostcerts-only
- protocols/ssh/geo-data
- protocols/ssh/detect-bruteforcing
- protocols/ssh/interesting-hostnames
- protocols/http/detect-sqli
- frameworks/files/hash-all-files
- frameworks/files/detect-MHR
- policy/frameworks/notice/extend-email/hostnames
- ja3
- hassh
- intel
- cve-2020-0601
- securityonion/bpfconf
- securityonion/communityid
- securityonion/file-extraction
'@load-sigs':
- frameworks/signatures/detect-windows-shells
redef:
- LogAscii::use_json = T;
- LogAscii::json_timestamps = JSON::TS_ISO8601;

View File

@@ -1,8 +1,3 @@
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.1') %}
{% set MASTER = salt['grains.get']('master') %}
{% set GRAFANA = salt['pillar.get']('master:grafana', '0') %}
{% set FLEETMASTER = salt['pillar.get']('static:fleet_master', False) %}
{% set FLEETNODE = salt['pillar.get']('static:fleet_node', False) %}
# Add socore Group
socoregroup:
group.present:
@@ -19,7 +14,6 @@ socore:
- shell: /bin/bash
# Create a state directory
statedir:
file.directory:
- name: /opt/so/state
@@ -35,17 +29,13 @@ salttmp:
- makedirs: True
# Install packages needed for the sensor
sensorpkgs:
pkg.installed:
- skip_suggestions: False
- pkgs:
- docker-ce
- wget
- jq
{% if grains['os'] != 'CentOS' %}
- python-docker
- python-m2crypto
- apache2-utils
{% else %}
- net-tools
@@ -64,7 +54,6 @@ alwaysupdated:
- skip_suggestions: True
# Set time to UTC
Etc/UTC:
timezone.system
@@ -76,340 +65,4 @@ utilsyncscripts:
- group: 0
- file_mode: 755
- template: jinja
- source: salt://common/tools/sbin
# Make sure Docker is running!
docker:
service.running:
- enable: True
# Drop the correct nginx config based on role
nginxconfdir:
file.directory:
- name: /opt/so/conf/nginx
- user: 939
- group: 939
- makedirs: True
nginxconf:
file.managed:
- name: /opt/so/conf/nginx/nginx.conf
- user: 939
- group: 939
- template: jinja
- source: salt://common/nginx/nginx.conf.{{ grains.role }}
nginxlogdir:
file.directory:
- name: /opt/so/log/nginx/
- user: 939
- group: 939
- makedirs: True
nginxtmp:
file.directory:
- name: /opt/so/tmp/nginx/tmp
- user: 939
- group: 939
- makedirs: True
so-core:
docker_container.running:
- image: {{ MASTER }}:5000/soshybridhunter/so-core:{{ VERSION }}
- hostname: so-core
- user: socore
- binds:
- /opt/so:/opt/so:rw
- /opt/so/conf/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- /opt/so/log/nginx/:/var/log/nginx:rw
- /opt/so/tmp/nginx/:/var/lib/nginx:rw
- /opt/so/tmp/nginx/:/run:rw
- /etc/pki/masterssl.crt:/etc/pki/nginx/server.crt:ro
- /etc/pki/masterssl.key:/etc/pki/nginx/server.key:ro
- /opt/so/conf/fleet/packages:/opt/socore/html/packages
- cap_add: NET_BIND_SERVICE
- port_bindings:
- 80:80
- 443:443
{%- if FLEETMASTER or FLEETNODE %}
- 8090:8090
{%- endif %}
- watch:
- file: /opt/so/conf/nginx/nginx.conf
# Add Telegraf to monitor all the things.
tgraflogdir:
file.directory:
- name: /opt/so/log/telegraf
- makedirs: True
tgrafetcdir:
file.directory:
- name: /opt/so/conf/telegraf/etc
- makedirs: True
tgrafetsdir:
file.directory:
- name: /opt/so/conf/telegraf/scripts
- makedirs: True
tgrafsyncscripts:
file.recurse:
- name: /opt/so/conf/telegraf/scripts
- user: 939
- group: 939
- file_mode: 755
- template: jinja
- source: salt://common/telegraf/scripts
tgrafconf:
file.managed:
- name: /opt/so/conf/telegraf/etc/telegraf.conf
- user: 939
- group: 939
- template: jinja
- source: salt://common/telegraf/etc/telegraf.conf
so-telegraf:
docker_container.running:
- image: {{ MASTER }}:5000/soshybridhunter/so-telegraf:{{ VERSION }}
- environment:
- HOST_PROC=/host/proc
- HOST_ETC=/host/etc
- HOST_SYS=/host/sys
- HOST_MOUNT_PREFIX=/host
- network_mode: host
- port_bindings:
- 127.0.0.1:8094:8094
- binds:
- /opt/so/log/telegraf:/var/log/telegraf:rw
- /opt/so/conf/telegraf/etc/telegraf.conf:/etc/telegraf/telegraf.conf:ro
- /var/run/utmp:/var/run/utmp:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- /:/host/root:ro
- /sys:/host/sys:ro
- /proc:/host/proc:ro
- /nsm:/host/nsm:ro
- /etc:/host/etc:ro
{% if grains['role'] == 'so-master' or grains['role'] == 'so-eval' or grains['role'] == 'so-mastersearch' %}
- /etc/pki/ca.crt:/etc/telegraf/ca.crt:ro
{% else %}
- /etc/ssl/certs/intca.crt:/etc/telegraf/ca.crt:ro
{% endif %}
- /etc/pki/influxdb.crt:/etc/telegraf/telegraf.crt:ro
- /etc/pki/influxdb.key:/etc/telegraf/telegraf.key:ro
- /opt/so/conf/telegraf/scripts:/scripts:ro
- /opt/so/log/stenographer:/var/log/stenographer:ro
- /opt/so/log/suricata:/var/log/suricata:ro
- watch:
- /opt/so/conf/telegraf/etc/telegraf.conf
- /opt/so/conf/telegraf/scripts
# If its a master or eval lets install the back end for now
{% if grains['role'] in ['so-master', 'so-mastersearch', 'so-eval'] and GRAFANA == 1 %}
# Influx DB
influxconfdir:
file.directory:
- name: /opt/so/conf/influxdb/etc
- makedirs: True
influxdbdir:
file.directory:
- name: /nsm/influxdb
- makedirs: True
influxdbconf:
file.managed:
- name: /opt/so/conf/influxdb/etc/influxdb.conf
- user: 939
- group: 939
- template: jinja
- source: salt://common/influxdb/etc/influxdb.conf
so-influxdb:
docker_container.running:
- image: {{ MASTER }}:5000/soshybridhunter/so-influxdb:{{ VERSION }}
- hostname: influxdb
- environment:
- INFLUXDB_HTTP_LOG_ENABLED=false
- binds:
- /opt/so/conf/influxdb/etc/influxdb.conf:/etc/influxdb/influxdb.conf:ro
- /nsm/influxdb:/var/lib/influxdb:rw
- /etc/pki/influxdb.crt:/etc/ssl/influxdb.crt:ro
- /etc/pki/influxdb.key:/etc/ssl/influxdb.key:ro
- port_bindings:
- 0.0.0.0:8086:8086
- watch:
- file: /opt/so/conf/influxdb/etc/influxdb.conf
# Grafana all the things
grafanadir:
file.directory:
- name: /nsm/grafana
- user: 939
- group: 939
- makedirs: True
grafanaconfdir:
file.directory:
- name: /opt/so/conf/grafana/etc
- user: 939
- group: 939
- makedirs: True
grafanadashdir:
file.directory:
- name: /opt/so/conf/grafana/grafana_dashboards
- user: 939
- group: 939
- makedirs: True
grafanadashmdir:
file.directory:
- name: /opt/so/conf/grafana/grafana_dashboards/master
- user: 939
- group: 939
- makedirs: True
grafanadashevaldir:
file.directory:
- name: /opt/so/conf/grafana/grafana_dashboards/eval
- user: 939
- group: 939
- makedirs: True
grafanadashfndir:
file.directory:
- name: /opt/so/conf/grafana/grafana_dashboards/sensor_nodes
- user: 939
- group: 939
- makedirs: True
grafanadashsndir:
file.directory:
- name: /opt/so/conf/grafana/grafana_dashboards/search_nodes
- user: 939
- group: 939
- makedirs: True
grafanaconf:
file.recurse:
- name: /opt/so/conf/grafana/etc
- user: 939
- group: 939
- template: jinja
- source: salt://common/grafana/etc
{% if salt['pillar.get']('mastertab', False) %}
{% for SN, SNDATA in salt['pillar.get']('mastertab', {}).items() %}
{% set NODETYPE = SN.split('_')|last %}
{% set SN = SN | regex_replace('_' ~ NODETYPE, '') %}
dashboard-master:
file.managed:
- name: /opt/so/conf/grafana/grafana_dashboards/master/{{ SN }}-Master.json
- user: 939
- group: 939
- template: jinja
- source: salt://common/grafana/grafana_dashboards/master/master.json
- defaults:
SERVERNAME: {{ SN }}
MANINT: {{ SNDATA.manint }}
MONINT: {{ SNDATA.manint }}
CPUS: {{ SNDATA.totalcpus }}
UID: {{ SNDATA.guid }}
ROOTFS: {{ SNDATA.rootfs }}
NSMFS: {{ SNDATA.nsmfs }}
{% endfor %}
{% endif %}
{% if salt['pillar.get']('sensorstab', False) %}
{% for SN, SNDATA in salt['pillar.get']('sensorstab', {}).items() %}
{% set NODETYPE = SN.split('_')|last %}
{% set SN = SN | regex_replace('_' ~ NODETYPE, '') %}
dashboard-{{ SN }}:
file.managed:
- name: /opt/so/conf/grafana/grafana_dashboards/sensor_nodes/{{ SN }}-Sensor.json
- user: 939
- group: 939
- template: jinja
- source: salt://common/grafana/grafana_dashboards/sensor_nodes/sensor.json
- defaults:
SERVERNAME: {{ SN }}
MONINT: {{ SNDATA.monint }}
MANINT: {{ SNDATA.manint }}
CPUS: {{ SNDATA.totalcpus }}
UID: {{ SNDATA.guid }}
ROOTFS: {{ SNDATA.rootfs }}
NSMFS: {{ SNDATA.nsmfs }}
{% endfor %}
{% endif %}
{% if salt['pillar.get']('nodestab', False) %}
{% for SN, SNDATA in salt['pillar.get']('nodestab', {}).items() %}
{% set NODETYPE = SN.split('_')|last %}
{% set SN = SN | regex_replace('_' ~ NODETYPE, '') %}
dashboardsearch-{{ SN }}:
file.managed:
- name: /opt/so/conf/grafana/grafana_dashboards/search_nodes/{{ SN }}-Node.json
- user: 939
- group: 939
- template: jinja
- source: salt://common/grafana/grafana_dashboards/search_nodes/searchnode.json
- defaults:
SERVERNAME: {{ SN }}
MANINT: {{ SNDATA.manint }}
MONINT: {{ SNDATA.manint }}
CPUS: {{ SNDATA.totalcpus }}
UID: {{ SNDATA.guid }}
ROOTFS: {{ SNDATA.rootfs }}
NSMFS: {{ SNDATA.nsmfs }}
{% endfor %}
{% endif %}
{% if salt['pillar.get']('evaltab', False) %}
{% for SN, SNDATA in salt['pillar.get']('evaltab', {}).items() %}
{% set NODETYPE = SN.split('_')|last %}
{% set SN = SN | regex_replace('_' ~ NODETYPE, '') %}
dashboard-{{ SN }}:
file.managed:
- name: /opt/so/conf/grafana/grafana_dashboards/eval/{{ SN }}-Node.json
- user: 939
- group: 939
- template: jinja
- source: salt://common/grafana/grafana_dashboards/eval/eval.json
- defaults:
SERVERNAME: {{ SN }}
MANINT: {{ SNDATA.manint }}
MONINT: {{ SNDATA.monint }}
CPUS: {{ SNDATA.totalcpus }}
UID: {{ SNDATA.guid }}
ROOTFS: {{ SNDATA.rootfs }}
NSMFS: {{ SNDATA.nsmfs }}
{% endfor %}
{% endif %}
so-grafana:
docker_container.running:
- image: {{ MASTER }}:5000/soshybridhunter/so-grafana:{{ VERSION }}
- hostname: grafana
- user: socore
- binds:
- /nsm/grafana:/var/lib/grafana:rw
- /opt/so/conf/grafana/etc/grafana.ini:/etc/grafana/grafana.ini:ro
- /opt/so/conf/grafana/etc/datasources:/etc/grafana/provisioning/datasources:rw
- /opt/so/conf/grafana/etc/dashboards:/etc/grafana/provisioning/dashboards:rw
- /opt/so/conf/grafana/grafana_dashboards:/etc/grafana/grafana_dashboards:rw
- environment:
- GF_SECURITY_ADMIN_PASSWORD=augusta
- port_bindings:
- 0.0.0.0:3000:3000
- watch:
- file: /opt/so/conf/grafana/*
{% endif %}
- source: salt://common/tools/sbin

View File

@@ -0,0 +1,5 @@
{% set docker = {
'containers': [
'so-zeek'
]
} %}

View File

@@ -0,0 +1,5 @@
{% set docker = {
'containers': [
'so-domainstats'
]
} %}

View File

@@ -0,0 +1,18 @@
{% set docker = {
'containers': [
'so-nginx',
'so-telegraf',
'so-dockerregistry',
'so-soc',
'so-kratos',
'so-idstools',
'so-elasticsearch',
'so-kibana',
'so-steno',
'so-suricata',
'so-zeek',
'so-curator',
'so-elastalert',
'so-soctopus'
]
} %}

View File

@@ -0,0 +1,10 @@
{% set docker = {
'containers': [
'so-mysql',
'so-fleet',
'so-redis',
'so-filebeat',
'so-nginx',
'so-telegraf'
]
} %}

View File

@@ -0,0 +1,7 @@
{% set docker = {
'containers': [
'so-mysql',
'so-fleet',
'so-redis'
]
} %}

View File

@@ -0,0 +1,5 @@
{% set docker = {
'containers': [
'so-freqserver'
]
} %}

View File

@@ -0,0 +1,6 @@
{% set docker = {
'containers': [
'so-influxdb',
'so-grafana'
]
} %}

View File

@@ -0,0 +1,14 @@
{% set docker = {
'containers': [
'so-nginx',
'so-telegraf',
'so-redis',
'so-logstash',
'so-elasticsearch',
'so-curator',
'so-steno',
'so-suricata',
'so-wazuh',
'so-filebeat
]
} %}

View File

@@ -0,0 +1,12 @@
{% set docker = {
'containers': [
'so-nginx',
'so-telegraf',
'so-idstools',
'so-steno',
'so-zeek',
'so-redis',
'so-logstash',
'so-filebeat
]
} %}

View File

@@ -0,0 +1,9 @@
{% set docker = {
'containers': [
'so-nginx',
'so-telegraf',
'so-logstash',
'so-elasticsearch',
'so-curator',
]
} %}

View File

@@ -0,0 +1,18 @@
{% set docker = {
'containers': [
'so-dockerregistry',
'so-nginx',
'so-telegraf',
'so-soc',
'so-kratos',
'so-aptcacherng',
'so-idstools',
'so-redis',
'so-elasticsearch',
'so-logstash',
'so-kibana',
'so-elastalert',
'so-filebeat',
'so-soctopus'
]
} %}

View File

@@ -0,0 +1,18 @@
{% set docker = {
'containers': [
'so-nginx',
'so-telegraf',
'so-soc',
'so-kratos',
'so-aptcacherng',
'so-idstools',
'so-redis',
'so-logstash',
'so-elasticsearch',
'so-curator',
'so-kibana',
'so-elastalert',
'so-filebeat',
'so-soctopus'
]
} %}

View File

@@ -0,0 +1,6 @@
{% set docker = {
'containers': [
'so-playbook',
'so-navigator'
]
} %}

View File

@@ -0,0 +1,10 @@
{% set docker = {
'containers': [
'so-nginx',
'so-telegraf',
'so-logstash',
'so-elasticsearch',
'so-curator',
'so-filebeat'
]
} %}

View File

@@ -0,0 +1,8 @@
{% set docker = {
'containers': [
'so-telegraf',
'so-steno',
'so-suricata',
'so-filebeat'
]
} %}

View File

@@ -0,0 +1,45 @@
{% set role = grains.id.split('_') | last %}
{% from 'common/maps/'~ role ~'.map.jinja' import docker with context %}
# Check if the service is enabled and append it's required containers
# to the list predefined by the role / minion id affix
{% macro append_containers(pillar_name, k, compare )%}
{% if salt['pillar.get'](pillar_name~':'~k, {}) != compare %}
{% from 'common/maps/'~k~'.map.jinja' import docker as d with context %}
{% for li in d['containers'] %}
{{ docker['containers'].append(li) }}
{% endfor %}
{% endif %}
{% endmacro %}
{% set docker = salt['grains.filter_by']({
'*_'~role: {
'containers': docker['containers']
}
},grain='id', merge=salt['pillar.get']('docker')) %}
{% if role in ['eval', 'mastersearch', 'master', 'standalone'] %}
{{ append_containers('master', 'grafana', 0) }}
{{ append_containers('static', 'fleet_master', 0) }}
{{ append_containers('master', 'wazuh', 0) }}
{{ append_containers('master', 'thehive', 0) }}
{{ append_containers('master', 'playbook', 0) }}
{{ append_containers('master', 'freq', 0) }}
{{ append_containers('master', 'domainstats', 0) }}
{% endif %}
{% if role in ['eval', 'heavynode', 'sensor', 'standalone'] %}
{{ append_containers('static', 'strelka', 0) }}
{% endif %}
{% if role in ['heavynode', 'standalone'] %}
{{ append_containers('static', 'broversion', 'SURICATA') }}
{% endif %}
{% if role == 'searchnode' %}
{{ append_containers('master', 'wazuh', 0) }}
{% endif %}
{% if role == 'sensor' %}
{{ append_containers('static', 'broversion', 'SURICATA') }}
{% endif %}

View File

@@ -0,0 +1,21 @@
{% set docker = {
'containers': [
'so-nginx',
'so-telegraf',
'so-soc',
'so-kratos',
'so-aptcacherng',
'so-idstools',
'so-redis',
'so-logstash',
'so-elasticsearch',
'so-curator',
'so-kibana',
'so-elastalert',
'so-filebeat',
'so-suricata',
'so-steno',
'so-dockerregistry',
'so-soctopus'
]
} %}

View File

@@ -0,0 +1,9 @@
{% set docker = {
'containers': [
'so-strelka-coordinator',
'so-strelka-gatekeeper',
'so-strelka-manager',
'so-strelka-frontend',
'so-strelka-filestream'
]
} %}

View File

@@ -0,0 +1,7 @@
{% set docker = {
'containers': [
'so-thehive',
'so-thehive-es',
'so-cortex'
]
} %}

View File

@@ -0,0 +1,7 @@
{% set docker = {
'containers': [
'so-nginx',
'so-telegraf',
'so-elasticsearch'
]
} %}

View File

@@ -0,0 +1,5 @@
{% set docker = {
'containers': [
'so-wazuh'
]
} %}

View File

@@ -2,7 +2,7 @@
MASTER=MASTER
VERSION="HH1.1.4"
TRUSTED_CONTAINERS=( \
"so-core:$VERSION" \
"so-nginx:$VERSION" \
"so-thehive-cortex:$VERSION" \
"so-curator:$VERSION" \
"so-domainstats:$VERSION" \

37
salt/common/tools/sbin/so-kibana-config-export Normal file → Executable file
View File

@@ -1,6 +1,35 @@
#!/bin/bash
KIBANA_HOST=10.66.166.141
#
# {%- set FLEET_MASTER = salt['pillar.get']('static:fleet_master', False) -%}
# {%- set FLEET_NODE = salt['pillar.get']('static:fleet_node', False) -%}
# {%- set FLEET_IP = salt['pillar.get']('static:fleet_ip', '') %}
# {%- set MASTER = salt['pillar.get']('master:url_base', '') %}
#
# 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 <http://www.gnu.org/licenses/>.
KIBANA_HOST={{ MASTER }}
KSO_PORT=5601
OUTFILE="saved_objects.json"
curl -s -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -XPOST $KIBANA_HOST:$KSO_PORT/api/saved_objects/_export -d '{ "type": "index-pattern", "type": "config", "type": "dashboard", "type": "query", "type": "search", "type": "url", "type": "visualization" }' -o $OUTFILE
OUTFILE="saved_objects.ndjson"
curl -s -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -XPOST $KIBANA_HOST:$KSO_PORT/api/saved_objects/_export -d '{ "type": [ "index-pattern", "config", "visualization", "dashboard", "search" ], "excludeExportDetails": false }' > $OUTFILE
# Clean up using PLACEHOLDER
sed -i "s/$KIBANA_HOST/PLACEHOLDER/g" $OUTFILE
# Clean up for Fleet, if applicable
# {% if FLEET_NODE or FLEET_MASTER %}
# Fleet IP
sed -i "s/{{ FLEET_IP }}/FLEETPLACEHOLDER/g" $OUTFILE
# {% endif %}

View File

@@ -14,35 +14,8 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
{%- set pillar_suffix = ':containers' -%}
{%- if (salt['grains.get']('role') == 'so-mastersearch') -%}
{%- set pillar_val = 'master_search' -%}
{%- elif (salt['grains.get']('role') == 'so-master') -%}
{%- set pillar_val = 'master' -%}
{%- elif (salt['grains.get']('role') == 'so-heavynode') -%}
{%- set pillar_val = 'heavy_node' -%}
{%- elif (salt['grains.get']('role') == 'so-sensor') -%}
{%- set pillar_val = 'sensor' -%}
{%- elif (salt['grains.get']('role') == 'so-eval') -%}
{%- set pillar_val = 'eval' -%}
{%- elif (salt['grains.get']('role') == 'so-fleet') -%}
{%- set pillar_val = 'fleet' -%}
{%- elif (salt['grains.get']('role') == 'so-helix') -%}
{%- set pillar_val = 'helix' -%}
{%- elif (salt['grains.get']('role') == 'so-node') -%}
{%- if (salt['pillar.get']('node:node_type') == 'parser') -%}
{%- set pillar_val = 'parser_node' -%}
{%- elif (salt['pillar.get']('node:node_type') == 'hot') -%}
{%- set pillar_val = 'hot_node' -%}
{%- elif (salt['pillar.get']('node:node_type') == 'warm') -%}
{%- set pillar_val = 'warm_node' -%}
{%- elif (salt['pillar.get']('node:node_type') == 'search') -%}
{%- set pillar_val = 'search_node' -%}
{%- endif -%}
{%- endif -%}
{%- set pillar_name = pillar_val ~ pillar_suffix -%}
{%- set container_list = salt['pillar.get'](pillar_name) %}
{%- from 'common/maps/so-status.map.jinja' import docker with context %}
{%- set container_list = docker['containers'] %}
if ! [ "$(id -u)" = 0 ]; then
echo "This command must be run as root"

View File

@@ -1,12 +1,8 @@
{% if grains['role'] == 'so-node' %}
{%- set cur_close_days = salt['pillar.get']('node:cur_close_days', '') -%}
{% elif grains['role'] == 'so-eval' %}
{%- set cur_close_days = salt['pillar.get']('master:cur_close_days', '') -%}
{%- endif %}
{%- if grains['role'] in ['so-node', 'so-searchnode', 'so-heavynode'] %}
{%- set cur_close_days = salt['pillar.get']('node:cur_close_days', '') -%}
{%- elif grains['role'] in ['so-eval', 'so-mastersearch', 'so-standalone'] %}
{%- set cur_close_days = salt['pillar.get']('master:cur_close_days', '') -%}
{%- endif -%}
---
# Remember, leave a key empty if there is no value. None will be a string,

View File

@@ -1,11 +1,7 @@
{% if grains['role'] == 'so-node' %}
{%- set log_size_limit = salt['pillar.get']('node:log_size_limit', '') -%}
{% elif grains['role'] == 'so-eval' %}
{%- set log_size_limit = salt['pillar.get']('master:log_size_limit', '') -%}
{%- if grains['role'] in ['so-node', 'so-searchnode', 'so-heavynode'] %}
{%- set log_size_limit = salt['pillar.get']('node:log_size_limit', '') -%}
{%- elif grains['role'] in ['so-eval', 'so-mastersearch', 'so-standalone'] %}
{%- set log_size_limit = salt['pillar.get']('master:log_size_limit', '') -%}
{%- endif %}
---
# Remember, leave a key empty if there is no value. None will be a string,

View File

@@ -1,17 +1,13 @@
{% if grains['role'] == 'so-node' %}
{%- set ELASTICSEARCH_HOST = salt['pillar.get']('node:mainip', '') -%}
{%- set ELASTICSEARCH_PORT = salt['pillar.get']('node:es_port', '') -%}
{%- set LOG_SIZE_LIMIT = salt['pillar.get']('node:log_size_limit', '') -%}
{% elif grains['role'] == 'so-eval' %}
{%- set ELASTICSEARCH_HOST = salt['pillar.get']('master:mainip', '') -%}
{%- set ELASTICSEARCH_PORT = salt['pillar.get']('master:es_port', '') -%}
{%- set LOG_SIZE_LIMIT = salt['pillar.get']('master:log_size_limit', '') -%}
{%- endif %}
{%- if grains['role'] in ['so-node', 'so-searchnode', 'so-heavynode'] %}
{%- set ELASTICSEARCH_HOST = salt['pillar.get']('node:mainip', '') -%}
{%- set ELASTICSEARCH_PORT = salt['pillar.get']('node:es_port', '') -%}
{%- set LOG_SIZE_LIMIT = salt['pillar.get']('node:log_size_limit', '') -%}
{%- elif grains['role'] in ['so-eval', 'so-mastersearch', 'so-standalone'] %}
{%- set ELASTICSEARCH_HOST = salt['pillar.get']('master:mainip', '') -%}
{%- set ELASTICSEARCH_PORT = salt['pillar.get']('master:es_port', '') -%}
{%- set LOG_SIZE_LIMIT = salt['pillar.get']('master:log_size_limit', '') -%}
{%- endif -%}
#!/bin/bash
#

View File

@@ -1,11 +1,7 @@
{% if grains['role'] == 'so-node' %}
{%- set elasticsearch = salt['pillar.get']('node:mainip', '') -%}
{% elif grains['role'] == 'so-eval' %}
{%- set elasticsearch = salt['pillar.get']('master:mainip', '') -%}
{% if grains['role'] in ['so-node', 'so-searchnode', 'so-heavynode'] %}
{%- set elasticsearch = salt['pillar.get']('node:mainip', '') -%}
{% elif grains['role'] in ['so-eval', 'so-mastersearch', 'so-standalone'] %}
{%- set elasticsearch = salt['pillar.get']('master:mainip', '') -%}
{%- endif %}
---

View File

@@ -1,6 +1,6 @@
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.1') %}
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.2') %}
{% set MASTER = salt['grains.get']('master') %}
{% if grains['role'] == 'so-node' or grains['role'] == 'so-eval' %}
{% if grains['role'] in ['so-searchnode', 'so-eval', 'so-node', 'so-mastersearch', 'so-heavynode', 'so-standalone'] %}
# Curator
# Create the group
curatorgroup:

8
salt/docker/init.sls Normal file
View File

@@ -0,0 +1,8 @@
installdocker:
pkg.installed:
- name: docker-ce
# Make sure Docker is running!
docker:
service.running:
- enable: True

View File

@@ -2,7 +2,7 @@
{% set esport = salt['pillar.get']('master:es_port', '') %}
# This is the folder that contains the rule yaml files
# Any .yaml file will be loaded as a rule
rules_folder: /etc/elastalert/rules/
rules_folder: /opt/elastalert/rules/
# Sets whether or not ElastAlert should recursively descend
# the rules directory - true or false

View File

@@ -1,107 +0,0 @@
# -*- coding: utf-8 -*-
# HiveAlerter modified from original at: https://raw.githubusercontent.com/Nclose-ZA/elastalert_hive_alerter/master/elastalert_hive_alerter/hive_alerter.py
import uuid
from elastalert.alerts import Alerter
from thehive4py.api import TheHiveApi
from thehive4py.models import Alert, AlertArtifact, CustomFieldHelper
class TheHiveAlerter(Alerter):
"""
Use matched data to create alerts containing observables in an instance of TheHive
"""
required_options = set(['hive_connection', 'hive_alert_config'])
def get_aggregation_summary_text(self, matches):
text = super(TheHiveAlerter, self).get_aggregation_summary_text(matches)
if text:
text = '```\n{0}```\n'.format(text)
return text
def create_artifacts(self, match):
artifacts = []
context = {'rule': self.rule, 'match': match}
for mapping in self.rule.get('hive_observable_data_mapping', []):
for observable_type, match_data_key in mapping.items():
try:
artifacts.append(AlertArtifact(dataType=observable_type, data=match_data_key.format(**context)))
except KeyError as e:
print(('format string {} fail cause no key {} in {}'.format(e, match_data_key, context)))
return artifacts
def create_alert_config(self, match):
context = {'rule': self.rule, 'match': match}
alert_config = {
'artifacts': self.create_artifacts(match),
'sourceRef': str(uuid.uuid4())[0:6],
'title': '{rule[name]}'.format(**context)
}
alert_config.update(self.rule.get('hive_alert_config', {}))
for alert_config_field, alert_config_value in alert_config.items():
if alert_config_field == 'customFields':
custom_fields = CustomFieldHelper()
for cf_key, cf_value in alert_config_value.items():
try:
func = getattr(custom_fields, 'add_{}'.format(cf_value['type']))
except AttributeError:
raise Exception('unsupported custom field type {}'.format(cf_value['type']))
value = cf_value['value'].format(**context)
func(cf_key, value)
alert_config[alert_config_field] = custom_fields.build()
elif isinstance(alert_config_value, str):
alert_config[alert_config_field] = alert_config_value.format(**context)
elif isinstance(alert_config_value, (list, tuple)):
formatted_list = []
for element in alert_config_value:
try:
formatted_list.append(element.format(**context))
except (AttributeError, KeyError, IndexError):
formatted_list.append(element)
alert_config[alert_config_field] = formatted_list
return alert_config
def send_to_thehive(self, alert_config):
connection_details = self.rule['hive_connection']
api = TheHiveApi(
connection_details.get('hive_host', ''),
connection_details.get('hive_apikey', ''),
proxies=connection_details.get('hive_proxies', {'http': '', 'https': ''}),
cert=connection_details.get('hive_verify', False))
alert = Alert(**alert_config)
response = api.create_alert(alert)
if response.status_code != 201:
raise Exception('alert not successfully created in TheHive\n{}'.format(response.text))
def alert(self, matches):
if self.rule.get('hive_alert_config_type', 'custom') != 'classic':
for match in matches:
alert_config = self.create_alert_config(match)
self.send_to_thehive(alert_config)
else:
alert_config = self.create_alert_config(matches[0])
artifacts = []
for match in matches:
artifacts += self.create_artifacts(match)
if 'related_events' in match:
for related_event in match['related_events']:
artifacts += self.create_artifacts(related_event)
alert_config['artifacts'] = artifacts
alert_config['title'] = self.create_title(matches)
alert_config['description'] = self.create_alert_body(matches)
self.send_to_thehive(alert_config)
def get_info(self):
return {
'type': 'hivealerter',
'hive_host': self.rule.get('hive_connection', {}).get('hive_host', '')
}

View File

@@ -1,6 +1,8 @@
{% set es = salt['pillar.get']('static:masterip', '') %}
{% set hivehost = salt['pillar.get']('static:masterip', '') %}
{% set hivekey = salt['pillar.get']('static:hivekey', '') %}
{% set MASTER = salt['pillar.get']('master:url_base', '') %}
# hive.yaml
# Elastalert rule to forward IDS alerts from Security Onion to a specified TheHive instance.
#
@@ -15,7 +17,7 @@ timeframe:
buffer_time:
minutes: 10
allow_buffer_time_overlap: true
query_key: ["rule.signature_id"]
query_key: ["rule.uuid"]
realert:
days: 1
filter:
@@ -23,12 +25,13 @@ filter:
query_string:
query: "event.module: suricata"
alert: modules.so.thehive.TheHiveAlerter
alert: hivealerter
hive_connection:
hive_host: https://{{hivehost}}/thehive/
hive_host: http://{{hivehost}}
hive_port: 9000/thehive
hive_apikey: {{hivekey}}
hive_proxies:
http: ''
https: ''
@@ -37,9 +40,9 @@ hive_alert_config:
title: '{match[rule][name]}'
type: 'NIDS'
source: 'SecurityOnion'
description: "`NIDS Dashboard:` \n\n <https://{{es}}/kibana/app/kibana#/dashboard/ed6f7e20-e060-11e9-8f0c-2ddbf5ed9290?_g=(refreshInterval:(display:Off,pause:!f,value:0),time:(from:now-24h,mode:quick,to:now))&_a=(columns:!(_source),index:'*:logstash-*',interval:auto,query:(query_string:(analyze_wildcard:!t,query:'sid:')),sort:!('@timestamp',desc))> \n\n `IPs: `{match[source][ip]}:{match[source][port]} --> {match[destination][ip]}:{match[destination][port]} \n\n `Signature:`{match[rule][rule]}"
description: "`Hunting Pivot:` \n\n <https://{{MASTER}}/#/hunt?q=event.module%3A%20suricata%20AND%20rule.uuid%3A{match[rule][uuid]}%20%7C%20groupby%20source.ip%20destination.ip%20rule.name> \n\n `Kibana Dashboard:` \n\n <https://{{MASTER}}/kibana/app/kibana#/dashboard/ed6f7e20-e060-11e9-8f0c-2ddbf5ed9290?_g=(refreshInterval:(display:Off,pause:!f,value:0),time:(from:now-24h,mode:quick,to:now))&_a=(columns:!(_source),index:'*:logstash-*',interval:auto,query:(query_string:(analyze_wildcard:!t,query:'sid:')),sort:!('@timestamp',desc))> \n\n `IPs: `{match[source][ip]}:{match[source][port]} --> {match[destination][ip]}:{match[destination][port]} \n\n `Signature:`{match[rule][rule]}"
severity: 2
tags: ['{match[rule][signature_id]}','{match[source][ip]}','{match[destination][ip]}']
tags: ['{match[rule][uuid]}','{match[source][ip]}','{match[destination][ip]}']
tlp: 3
status: 'New'
follow: True

View File

@@ -12,26 +12,15 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.1') %}
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.2') %}
{% set MASTER = salt['grains.get']('master') %}
{% if grains['role'] == 'so-master' %}
{% set esalert = salt['pillar.get']('master:elastalert', '1') %}
{% set esip = salt['pillar.get']('master:mainip', '') %}
{% set esport = salt['pillar.get']('master:es_port', '') %}
{% elif grains['role'] in ['so-eval','so-mastersearch'] %}
{% set esalert = salt['pillar.get']('master:elastalert', '1') %}
{% set esip = salt['pillar.get']('master:mainip', '') %}
{% set esport = salt['pillar.get']('master:es_port', '') %}
{% if grains['role'] in ['so-eval','so-mastersearch', 'so-master', 'so-standalone'] %}
{% set esalert = salt['pillar.get']('master:elastalert', '1') %}
{% set esip = salt['pillar.get']('master:mainip', '') %}
{% set esport = salt['pillar.get']('master:es_port', '') %}
{% elif grains['role'] == 'so-node' %}
{% set esalert = salt['pillar.get']('node:elastalert', '0') %}
{% set esalert = salt['pillar.get']('node:elastalert', '0') %}
{% endif %}
# Elastalert
@@ -55,35 +44,35 @@ elastalogdir:
file.directory:
- name: /opt/so/log/elastalert
- user: 933
- group: 939
- group: 933
- makedirs: True
elastarules:
file.directory:
- name: /opt/so/rules/elastalert
- user: 933
- group: 939
- group: 933
- makedirs: True
elastaconfdir:
file.directory:
- name: /opt/so/conf/elastalert
- user: 933
- group: 939
- group: 933
- makedirs: True
elastasomodulesdir:
file.directory:
- name: /opt/so/conf/elastalert/modules/so
- user: 933
- group: 939
- group: 933
- makedirs: True
elastacustmodulesdir:
file.directory:
- name: /opt/so/conf/elastalert/modules/custom
- user: 933
- group: 939
- group: 933
- makedirs: True
elastasomodulesync:
@@ -91,7 +80,7 @@ elastasomodulesync:
- name: /opt/so/conf/elastalert/modules/so
- source: salt://elastalert/files/modules/so
- user: 933
- group: 939
- group: 933
- makedirs: True
elastarulesync:
@@ -99,7 +88,7 @@ elastarulesync:
- name: /opt/so/rules/elastalert
- source: salt://elastalert/files/rules/so
- user: 933
- group: 939
- group: 933
- template: jinja
elastaconf:
@@ -107,7 +96,7 @@ elastaconf:
- name: /opt/so/conf/elastalert/elastalert_config.yaml
- source: salt://elastalert/files/elastalert_config.yaml
- user: 933
- group: 939
- group: 933
- template: jinja
so-elastalert:
@@ -118,16 +107,9 @@ so-elastalert:
- user: elastalert
- detach: True
- binds:
- /opt/so/rules/elastalert:/etc/elastalert/rules/:ro
- /opt/so/rules/elastalert:/opt/elastalert/rules/:ro
- /opt/so/log/elastalert:/var/log/elastalert:rw
- /opt/so/conf/elastalert/modules/:/opt/elastalert/modules/:ro
- /opt/so/conf/elastalert/elastalert_config.yaml:/etc/elastalert/conf/elastalert_config.yaml:ro
- environment:
- ELASTICSEARCH_HOST: {{ esip }}
- ELASTICSEARCH_PORT: {{ esport }}
- ELASTALERT_CONFIG: /etc/elastalert/conf/elastalert_config.yaml
- ELASTALERT_SUPERVISOR_CONF: /etc/elastalert/conf/elastalert_supervisord.conf
- RULES_DIRECTORY: /etc/elastalert/rules/
- LOG_DIR: /var/log/elastalert
- /opt/so/conf/elastalert/elastalert_config.yaml:/opt/config/elastalert_config.yaml:ro
{% endif %}

View File

@@ -4,7 +4,7 @@
{
"geoip": {
"field": "destination.ip",
"target_field": "geo",
"target_field": "destination.geo",
"database_file": "GeoLite2-City.mmdb",
"ignore_missing": true,
"properties": ["ip", "country_iso_code", "country_name", "continent_name", "region_iso_code", "region_name", "city_name", "timezone", "location"]
@@ -13,7 +13,7 @@
{
"geoip": {
"field": "source.ip",
"target_field": "geo",
"target_field": "source.geo",
"database_file": "GeoLite2-City.mmdb",
"ignore_missing": true,
"properties": ["ip", "country_iso_code", "country_name", "continent_name", "region_iso_code", "region_name", "city_name", "timezone", "location"]
@@ -40,10 +40,10 @@
{ "rename": { "field": "category", "target_field": "event.category", "ignore_missing": true } },
{ "rename": { "field": "message2.community_id", "target_field": "network.community_id", "ignore_missing": true } },
{
"remove": {
"field": [ "index_name_prefix", "message2"],
"ignore_failure": false
}
"remove": {
"field": [ "index_name_prefix", "message2", "type" ],
"ignore_failure": true
}
}
]
}

View File

@@ -24,8 +24,14 @@
{ "rename": { "field": "message3.columns.pid", "target_field": "process.pid", "ignore_missing": true } },
{ "rename": { "field": "message3.columns.parent", "target_field": "process.ppid", "ignore_missing": true } },
{ "rename": { "field": "message3.columns.cwd", "target_field": "process.working_directory", "ignore_missing": true } },
{ "rename": { "field": "message3.columns.community_id", "target_field": "network.community_id", "ignore_missing": true } },
{ "rename": { "field": "message3.columns.local_address", "target_field": "local.ip", "ignore_missing": true } },
{ "rename": { "field": "message3.columns.local_port", "target_field": "local.port", "ignore_missing": true } },
{ "rename": { "field": "message3.columns.remote_address", "target_field": "remote.ip", "ignore_missing": true } },
{ "rename": { "field": "message3.columns.remote_port", "target_field": "remote.port", "ignore_missing": true } },
{ "rename": { "field": "message3.columns.process_name", "target_field": "process.name", "ignore_missing": true } },
{ "rename": { "field": "message3.columns.eventid", "target_field": "event.code", "ignore_missing": true } },
{ "set": { "if": "ctx.message3.columns.data != null", "field": "dataset", "value": "wel-{{message3.columns.source}}", "override": true } },
{ "set": { "if": "ctx.message3.columns.?data != null", "field": "dataset", "value": "wel-{{message3.columns.source}}", "override": true } },
{ "rename": { "field": "message3.columns.winlog.EventData.SubjectUserName", "target_field": "user.name", "ignore_missing": true } },
{ "rename": { "field": "message3.columns.winlog.EventData.destinationHostname", "target_field": "destination.hostname", "ignore_missing": true } },
{ "rename": { "field": "message3.columns.winlog.EventData.destinationIp", "target_field": "destination.ip", "ignore_missing": true } },

View File

@@ -6,6 +6,8 @@
{ "rename":{ "field": "message2.alert", "target_field": "rule", "ignore_failure": true } },
{ "rename":{ "field": "rule.signature", "target_field": "rule.name", "ignore_failure": true } },
{ "rename":{ "field": "rule.ref", "target_field": "rule.version", "ignore_failure": true } },
{ "rename":{ "field": "rule.signature_id", "target_field": "rule.uuid", "ignore_failure": true } },
{ "rename":{ "field": "rule.signature_id", "target_field": "rule.signature", "ignore_failure": true } },
{ "pipeline": { "name": "suricata.common" } }
]
}

View File

@@ -12,9 +12,9 @@
{ "rename": { "field": "message2.id.resp_h", "target_field": "destination.ip", "ignore_missing": true } },
{ "rename": { "field": "message2.id.resp_p", "target_field": "destination.port", "ignore_missing": true } },
{ "set": { "field": "client.ip", "value": "{{source.ip}}" } },
{ "set": { "if": "ctx.source.port != null", "field": "client.port", "value": "{{source.port}}" } },
{ "set": { "if": "ctx.source?.port != null", "field": "client.port", "value": "{{source.port}}" } },
{ "set": { "field": "server.ip", "value": "{{destination.ip}}" } },
{ "set": { "if": "ctx.destination.port != null", "field": "server.port", "value": "{{destination.port}}" } },
{ "set": { "if": "ctx.destination?.port != null", "field": "server.port", "value": "{{destination.port}}" } },
{ "set": { "field": "observer.name", "value": "{{agent.name}}" } },
{ "date": { "field": "message2.ts", "target_field": "@timestamp", "formats": ["ISO8601", "UNIX"], "ignore_failure": true } },
{ "remove": { "field": ["agent"], "ignore_failure": true } },

View File

@@ -21,6 +21,20 @@
{ "rename": { "field": "message2.orig_cc", "target_field": "client.country_code","ignore_missing": true } },
{ "rename": { "field": "message2.resp_cc", "target_field": "server.country_code", "ignore_missing": true } },
{ "rename": { "field": "message2.sensorname", "target_field": "observer.name", "ignore_missing": true } },
{ "script": { "lang": "painless", "source": "ctx.network.bytes = (ctx.client.bytes + ctx.server.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": "zeek.common" } }
]
}

View File

@@ -4,9 +4,9 @@
{ "remove": { "field": ["host"], "ignore_failure": true } },
{ "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
{ "rename": { "field": "message2.rtt", "target_field": "event.duration", "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 } },
{ "rename": { "field": "message2.named_pipe", "target_field": "dce_rpc.named_pipe", "ignore_missing": true } },
{ "rename": { "field": "message2.endpoint", "target_field": "dce_rpc.endpoint", "ignore_missing": true } },
{ "rename": { "field": "message2.operation", "target_field": "dce_rpc.operation", "ignore_missing": true } },
{ "pipeline": { "name": "zeek.common" } }
]
}

View File

@@ -15,7 +15,7 @@
{ "rename": { "field": "message2.domain", "target_field": "host.domain", "ignore_missing": true } },
{ "rename": { "field": "message2.host_name", "target_field": "host.hostname", "ignore_missing": true } },
{ "rename": { "field": "message2.duration", "target_field": "event.duration", "ignore_missing": true } },
{ "rename": { "field": "message2.msg_types", "target_field": "message_types", "ignore_missing": true } },
{ "rename": { "field": "message2.msg_types", "target_field": "dhcp.message_types", "ignore_missing": true } },
{ "pipeline": { "name": "zeek.common" } }
]
}

View File

@@ -23,6 +23,7 @@
{ "rename": { "field": "message2.TTLs", "target_field": "dns.ttls", "ignore_missing": true } },
{ "rename": { "field": "message2.rejected", "target_field": "dns.query.rejected", "ignore_missing": true } },
{ "script": { "lang": "painless", "source": "ctx.dns.query.length = ctx.dns.query.name.length()", "ignore_failure": true } },
{ "pipeline": { "if": "ctx.dns.query.name.contains('.')", "name": "zeek.dns.tld"} },
{ "pipeline": { "name": "zeek.common" } }
]
}

View File

@@ -0,0 +1,13 @@
{
"description" : "zeek.dns.tld",
"processors" : [
{ "script": { "lang": "painless", "source": "ctx.dns.top_level_domain = ctx.dns.query.name.substring(ctx.dns.query.name.lastIndexOf('.') + 1)", "ignore_failure": true } },
{ "script": { "lang": "painless", "source": "ctx.dns.query_without_tld = ctx.dns.query.name.substring(0, (ctx.dns.query.name.lastIndexOf('.')))", "ignore_failure": true } },
{ "script": { "lang": "painless", "source": "ctx.dns.parent_domain = ctx.dns.query_without_tld.substring(ctx.dns.query_without_tld.lastIndexOf('.') + 1)", "ignore_failure": true } },
{ "script": { "lang": "painless", "source": "ctx.dns.subdomain = ctx.dns.query_without_tld.substring(0, (ctx.dns.query_without_tld.lastIndexOf('.')))", "ignore_failure": true } },
{ "script": { "lang": "painless", "source": "ctx.dns.highest_registered_domain = ctx.dns.parent_domain + '.' + ctx.dns.top_level_domain", "ignore_failure": true } },
{ "script": { "lang": "painless", "source": "ctx.dns.subdomain_length = ctx.dns.subdomain.length()", "ignore_failure": true } },
{ "script": { "lang": "painless", "source": "ctx.dns.parent_domain_length = ctx.dns.parent_domain.length()", "ignore_failure": true } },
{ "remove": { "field": "dns.query_without_tld", "ignore_failure": true } }
]
}

View File

@@ -12,30 +12,22 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.1') %}
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.2') %}
{% set MASTER = salt['grains.get']('master') %}
{% set FEATURES = salt['pillar.get']('elastic:features', False) %}
{% if FEATURES %}
{% set FEATURES = "-features" %}
{% else %}
{% set FEATURES = '' %}
{% endif %}
{% if grains['role'] == 'so-master' %}
{% set esclustername = salt['pillar.get']('master:esclustername', '') %}
{% set esheap = salt['pillar.get']('master:esheap', '') %}
{% elif grains['role'] in ['so-eval','so-mastersearch'] %}
{% set esclustername = salt['pillar.get']('master:esclustername', '') %}
{% set esheap = salt['pillar.get']('master:esheap', '') %}
{% elif grains['role'] == 'so-node' or grains['role'] == 'so-heavynode' %}
{% set esclustername = salt['pillar.get']('node:esclustername', '') %}
{% set esheap = salt['pillar.get']('node:esheap', '') %}
{% if grains['role'] in ['so-eval','so-mastersearch', 'so-master', 'so-standalone'] %}
{% set esclustername = salt['pillar.get']('master:esclustername', '') %}
{% set esheap = salt['pillar.get']('master:esheap', '') %}
{% elif grains['role'] in ['so-node','so-heavynode'] %}
{% set esclustername = salt['pillar.get']('node:esclustername', '') %}
{% set esheap = salt['pillar.get']('node:esheap', '') %}
{% endif %}
vm.max_map_count:
@@ -144,8 +136,12 @@ so-elasticsearch-pipelines-file:
so-elasticsearch-pipelines:
cmd.run:
- name: /opt/so/conf/elasticsearch/so-elasticsearch-pipelines {{ esclustername }}
- onchanges:
- file: esingestconf
- file: esyml
- file: so-elasticsearch-pipelines-file
{% if grains['role'] == 'so-master' or grains['role'] == "so-eval" or grains['role'] == "so-mastersearch" %}
{% if grains['role'] in ['so-master', 'so-eval', 'so-mastersearch', 'so-standalone'] %}
so-elasticsearch-templates:
cmd.run:
- name: /usr/sbin/so-elasticsearch-templates

View File

@@ -74,7 +74,7 @@ filebeat.modules:
# List of prospectors to fetch data.
filebeat.inputs:
#------------------------------ Log prospector --------------------------------
{%- if grains['role'] == 'so-sensor' or grains['role'] == "so-eval" or grains['role'] == "so-helix" or grains['role'] == "so-heavynode" %}
{%- if grains['role'] == 'so-sensor' or grains['role'] == "so-eval" or grains['role'] == "so-helix" or grains['role'] == "so-heavynode" or grains['role'] == "so-standalone" %}
{%- if BROVER != 'SURICATA' %}
{%- for LOGNAME in salt['pillar.get']('brologs:enabled', '') %}
- type: log

View File

@@ -11,7 +11,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.1') %}
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.2') %}
{% set MASTER = salt['grains.get']('master') %}
{% set MASTERIP = salt['pillar.get']('static:masterip', '') %}
{% set FEATURES = salt['pillar.get']('elastic:features', False) %}

View File

@@ -1,15 +1,16 @@
# Firewall Magic for the grid
{%- if grains['role'] in ['so-eval','so-master','so-helix','so-mastersearch'] %}
{%- set ip = salt['pillar.get']('static:masterip', '') %}
{%- elif grains['role'] == 'so-node' or grains['role'] == 'so-heavynode' %}
{%- set ip = salt['pillar.get']('node:mainip', '') %}
{%- elif grains['role'] == 'so-sensor' %}
{%- set ip = salt['pillar.get']('sensor:mainip', '') %}
{%- elif grains['role'] == 'so-fleet' %}
{%- set ip = salt['pillar.get']('node:mainip', '') %}
{%- endif %}
{%- set FLEET_NODE = salt['pillar.get']('static:fleet_node') %}
{%- set FLEET_NODE_IP = salt['pillar.get']('static:fleet_ip') %}
{% if grains['role'] in ['so-eval','so-master','so-helix','so-mastersearch', 'so-standalone'] %}
{% set ip = salt['pillar.get']('static:masterip', '') %}
{% elif grains['role'] == 'so-node' or grains['role'] == 'so-heavynode' %}
{% set ip = salt['pillar.get']('node:mainip', '') %}
{% elif grains['role'] == 'so-sensor' %}
{% set ip = salt['pillar.get']('sensor:mainip', '') %}
{% elif grains['role'] == 'so-fleet' %}
{% set ip = salt['pillar.get']('node:mainip', '') %}
{% endif %}
{% set FLEET_NODE = salt['pillar.get']('static:fleet_node') %}
{% set FLEET_NODE_IP = salt['pillar.get']('static:fleet_ip') %}
# Quick Fix for Docker being difficult
iptables_fix_docker:
@@ -136,7 +137,7 @@ enable_wazuh_manager_1514_udp_{{ip}}:
- save: True
# Rules if you are a Master
{% if grains['role'] == 'so-master' or grains['role'] == 'so-eval' or grains['role'] == 'so-helix' or grains['role'] == 'so-mastersearch' %}
{% if grains['role'] in ['so-master', 'so-eval', 'so-helix', 'so-mastersearch', 'so-standalone'] %}
#This should be more granular
iptables_allow_master_docker:
iptables.insert:
@@ -364,6 +365,17 @@ enable_minion_osquery_8080_{{ip}}:
- position: 1
- save: True
enable_minion_osquery_8090_{{ip}}:
iptables.insert:
- table: filter
- chain: DOCKER-USER
- jump: ACCEPT
- proto: tcp
- source: {{ ip }}
- dport: 8090
- position: 1
- save: True
enable_minion_wazuh_55000_{{ip}}:
iptables.insert:
- table: filter
@@ -671,7 +683,14 @@ enable_cluster_ES_9300_{{ip}}:
# Rules if you are a Sensor
{% if grains['role'] == 'so-sensor' %}
iptables_allow_sensor_docker:
iptables.insert:
- table: filter
- chain: INPUT
- jump: ACCEPT
- source: 172.17.0.0/24
- position: 1
- save: True
{% endif %}
# Rules if you are a Hot Node
@@ -827,4 +846,4 @@ enable_fleetnode_8090_{{ip}}:
{% endfor %}
{% endif %}
{% endif %}

View File

@@ -31,7 +31,7 @@ docker exec so-fleet fleetctl apply -f /packs/hh/osquery.conf
# Enable Fleet
echo "Enabling Fleet..."
salt-call state.apply fleet.event_enable-fleet queue=True >> /root/fleet-setup.log
salt-call state.apply common queue=True >> /root/fleet-setup.log
salt-call state.apply nginx queue=True >> /root/fleet-setup.log
# Generate osquery install packages
echo "Generating osquery install packages - this will take some time..."
@@ -41,8 +41,8 @@ sleep 120
echo "Installing launcher via salt..."
salt-call state.apply fleet.install_package queue=True >> /root/fleet-setup.log
salt-call state.apply filebeat queue=True >> /root/fleet-setup.log
docker stop so-core
salt-call state.apply common queue=True >> /root/fleet-setup.log
docker stop so-nginx
salt-call state.apply nginx queue=True >> /root/fleet-setup.log
echo "Fleet Setup Complete - Login here: https://{{ MAIN_HOSTNAME }}"
echo "Your username is $2 and your password is $initpw"

View File

@@ -1,7 +1,7 @@
{%- set MYSQLPASS = salt['pillar.get']('secrets:mysql', None) -%}
{%- set FLEETPASS = salt['pillar.get']('secrets:fleet', None) -%}
{%- set FLEETJWT = salt['pillar.get']('secrets:fleet_jwt', None) -%}
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.1') %}
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.2') %}
{% set MASTER = salt['grains.get']('master') %}
{% set MAINIP = salt['pillar.get']('node:mainip') %}
{% set FLEETARCH = salt['grains.get']('role') %}
@@ -13,6 +13,9 @@
{% set MAINIP = salt['pillar.get']('static:masterip') %}
{% endif %}
include:
- mysql
#{% if grains.id.split('_')|last in ['master', 'eval', 'fleet'] %}
#so/fleet:
# event.send:
@@ -86,6 +89,8 @@ fleetdb:
- connection_port: 3306
- connection_user: root
- connection_pass: {{ MYSQLPASS }}
- require:
- sls: mysql
fleetdbuser:
mysql_user.present:
@@ -95,6 +100,8 @@ fleetdbuser:
- connection_port: 3306
- connection_user: root
- connection_pass: {{ MYSQLPASS }}
- require:
- fleetdb
fleetdbpriv:
mysql_grants.present:
@@ -106,6 +113,8 @@ fleetdbpriv:
- connection_port: 3306
- connection_user: root
- connection_pass: {{ MYSQLPASS }}
- require:
- fleetdb
{% if FLEETPASS == None or FLEETJWT == None %}

View File

@@ -1226,7 +1226,7 @@
},
{
"params": [
" / 5"
" / {{ CPUS }}"
],
"type": "math"
}
@@ -1365,7 +1365,7 @@
},
{
"params": [
" / 8"
" / {{ CPUS }}"
],
"type": "math"
}
@@ -1504,7 +1504,7 @@
},
{
"params": [
" / 8"
" / {{ CPUS }}"
],
"type": "math"
}
@@ -1643,7 +1643,7 @@
},
{
"params": [
" / 8"
" / {{ CPUS }}"
],
"type": "math"
}

View File

@@ -290,7 +290,7 @@
},
{
"params": [
" / 16"
" / {{ CPUS }}"
],
"type": "math"
}
@@ -430,7 +430,7 @@
},
{
"params": [
" / 16"
" / {{ CPUS }}"
],
"type": "math"
}
@@ -1046,7 +1046,7 @@
},
{
"params": [
" / 16"
" / {{ CPUS }}"
],
"type": "math"
}
@@ -1186,7 +1186,7 @@
},
{
"params": [
" / 16"
" / {{ CPUS }}"
],
"type": "math"
}
@@ -1326,7 +1326,7 @@
},
{
"params": [
" / 16"
" / {{ CPUS }}"
],
"type": "math"
}

File diff suppressed because it is too large Load Diff

View File

@@ -298,7 +298,7 @@
},
{
"params": [
" / 16"
" / {{ CPUS }}"
],
"type": "math"
}
@@ -438,7 +438,7 @@
},
{
"params": [
" / 16"
" / {{ CPUS }}"
],
"type": "math"
}

View File

@@ -1326,7 +1326,7 @@
},
{
"params": [
" / 8"
" / {{ CPUS }}"
],
"type": "math"
}
@@ -1465,7 +1465,7 @@
},
{
"params": [
" / 8"
" / {{ CPUS }}"
],
"type": "math"
}
@@ -1604,7 +1604,7 @@
},
{
"params": [
" / 8"
" / {{ CPUS }}"
],
"type": "math"
}

View File

@@ -10,6 +10,13 @@ providers:
editable: true
options:
path: /etc/grafana/grafana_dashboards/master
- name: 'Master Search'
folder: 'Master Search'
type: file
disableDeletion: false
editable: true
options:
path: /etc/grafana/grafana_dashboards/mastersearch
- name: 'Sensor Nodes'
folder: 'Sensor Nodes'
type: file

205
salt/grafana/init.sls Normal file
View File

@@ -0,0 +1,205 @@
{% set GRAFANA = salt['pillar.get']('master:grafana', '0') %}
{% set MASTER = salt['grains.get']('master') %}
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.2') %}
{% if grains['role'] in ['so-master', 'so-mastersearch', 'so-eval', 'so-standalone'] and GRAFANA == 1 %}
# Grafana all the things
grafanadir:
file.directory:
- name: /nsm/grafana
- user: 939
- group: 939
- makedirs: True
grafanaconfdir:
file.directory:
- name: /opt/so/conf/grafana/etc
- user: 939
- group: 939
- makedirs: True
grafanadashdir:
file.directory:
- name: /opt/so/conf/grafana/grafana_dashboards
- user: 939
- group: 939
- makedirs: True
grafanadashmdir:
file.directory:
- name: /opt/so/conf/grafana/grafana_dashboards/master
- user: 939
- group: 939
- makedirs: True
grafanadashmsdir:
file.directory:
- name: /opt/so/conf/grafana/grafana_dashboards/mastersearch
- user: 939
- group: 939
- makedirs: True
grafanadashevaldir:
file.directory:
- name: /opt/so/conf/grafana/grafana_dashboards/eval
- user: 939
- group: 939
- makedirs: True
grafanadashfndir:
file.directory:
- name: /opt/so/conf/grafana/grafana_dashboards/sensor_nodes
- user: 939
- group: 939
- makedirs: True
grafanadashsndir:
file.directory:
- name: /opt/so/conf/grafana/grafana_dashboards/search_nodes
- user: 939
- group: 939
- makedirs: True
grafanaconf:
file.recurse:
- name: /opt/so/conf/grafana/etc
- user: 939
- group: 939
- template: jinja
- source: salt://grafana/etc
{% if salt['pillar.get']('mastertab', False) %}
{% for SN, SNDATA in salt['pillar.get']('mastertab', {}).items() %}
{% set NODETYPE = SN.split('_')|last %}
{% set SN = SN | regex_replace('_' ~ NODETYPE, '') %}
dashboard-master:
file.managed:
- name: /opt/so/conf/grafana/grafana_dashboards/master/{{ SN }}-Master.json
- user: 939
- group: 939
- template: jinja
- source: salt://grafana/dashboards/master/master.json
- defaults:
SERVERNAME: {{ SN }}
MANINT: {{ SNDATA.manint }}
MONINT: {{ SNDATA.manint }}
CPUS: {{ SNDATA.totalcpus }}
UID: {{ SNDATA.guid }}
ROOTFS: {{ SNDATA.rootfs }}
NSMFS: {{ SNDATA.nsmfs }}
{% endfor %}
{% endif %}
{% if salt['pillar.get']('mastersearchtab', False) %}
{% for SN, SNDATA in salt['pillar.get']('mastersearchtab', {}).items() %}
{% set NODETYPE = SN.split('_')|last %}
{% set SN = SN | regex_replace('_' ~ NODETYPE, '') %}
dashboard-master:
file.managed:
- name: /opt/so/conf/grafana/grafana_dashboards/mastersearch/{{ SN }}-MasterSearch.json
- user: 939
- group: 939
- template: jinja
- source: salt://grafana/dashboards/mastersearch/mastersearch.json
- defaults:
SERVERNAME: {{ SN }}
MANINT: {{ SNDATA.manint }}
MONINT: {{ SNDATA.manint }}
CPUS: {{ SNDATA.totalcpus }}
UID: {{ SNDATA.guid }}
ROOTFS: {{ SNDATA.rootfs }}
NSMFS: {{ SNDATA.nsmfs }}
{% endfor %}
{% endif %}
{% if salt['pillar.get']('sensorstab', False) %}
{% for SN, SNDATA in salt['pillar.get']('sensorstab', {}).items() %}
{% set NODETYPE = SN.split('_')|last %}
{% set SN = SN | regex_replace('_' ~ NODETYPE, '') %}
dashboard-{{ SN }}:
file.managed:
- name: /opt/so/conf/grafana/grafana_dashboards/sensor_nodes/{{ SN }}-Sensor.json
- user: 939
- group: 939
- template: jinja
- source: salt://grafana/dashboards/sensor_nodes/sensor.json
- defaults:
SERVERNAME: {{ SN }}
MONINT: {{ SNDATA.monint }}
MANINT: {{ SNDATA.manint }}
CPUS: {{ SNDATA.totalcpus }}
UID: {{ SNDATA.guid }}
ROOTFS: {{ SNDATA.rootfs }}
NSMFS: {{ SNDATA.nsmfs }}
{% endfor %}
{% endif %}
{% if salt['pillar.get']('nodestab', False) %}
{% for SN, SNDATA in salt['pillar.get']('nodestab', {}).items() %}
{% set NODETYPE = SN.split('_')|last %}
{% set SN = SN | regex_replace('_' ~ NODETYPE, '') %}
dashboardsearch-{{ SN }}:
file.managed:
- name: /opt/so/conf/grafana/grafana_dashboards/search_nodes/{{ SN }}-Node.json
- user: 939
- group: 939
- template: jinja
- source: salt://grafana/dashboards/search_nodes/searchnode.json
- defaults:
SERVERNAME: {{ SN }}
MANINT: {{ SNDATA.manint }}
MONINT: {{ SNDATA.manint }}
CPUS: {{ SNDATA.totalcpus }}
UID: {{ SNDATA.guid }}
ROOTFS: {{ SNDATA.rootfs }}
NSMFS: {{ SNDATA.nsmfs }}
{% endfor %}
{% endif %}
{% if salt['pillar.get']('evaltab', False) %}
{% for SN, SNDATA in salt['pillar.get']('evaltab', {}).items() %}
{% set NODETYPE = SN.split('_')|last %}
{% set SN = SN | regex_replace('_' ~ NODETYPE, '') %}
dashboard-{{ SN }}:
file.managed:
- name: /opt/so/conf/grafana/grafana_dashboards/eval/{{ SN }}-Node.json
- user: 939
- group: 939
- template: jinja
- source: salt://grafana/dashboards/eval/eval.json
- defaults:
SERVERNAME: {{ SN }}
MANINT: {{ SNDATA.manint }}
MONINT: {{ SNDATA.monint }}
CPUS: {{ SNDATA.totalcpus }}
UID: {{ SNDATA.guid }}
ROOTFS: {{ SNDATA.rootfs }}
NSMFS: {{ SNDATA.nsmfs }}
{% endfor %}
{% endif %}
so-grafana:
docker_container.running:
- image: {{ MASTER }}:5000/soshybridhunter/so-grafana:{{ VERSION }}
- hostname: grafana
- user: socore
- binds:
- /nsm/grafana:/var/lib/grafana:rw
- /opt/so/conf/grafana/etc/grafana.ini:/etc/grafana/grafana.ini:ro
- /opt/so/conf/grafana/etc/datasources:/etc/grafana/provisioning/datasources:rw
- /opt/so/conf/grafana/etc/dashboards:/etc/grafana/provisioning/dashboards:rw
- /opt/so/conf/grafana/grafana_dashboards:/etc/grafana/grafana_dashboards:rw
- environment:
- GF_SECURITY_ADMIN_PASSWORD=augusta
- port_bindings:
- 0.0.0.0:3000:3000
- watch:
- file: /opt/so/conf/grafana/*
{% endif %}

View File

@@ -1,5 +1,5 @@
{% set MASTERIP = salt['pillar.get']('master:mainip', '') %}
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.1') %}
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.2') %}
{% set MASTER = salt['grains.get']('master') %}
hiveconfdir:
file.directory:

View File

@@ -23,7 +23,7 @@ search {
# Number of shards
nbshards = 5
# Number of replicas
nbreplicas = 1
nbreplicas = 0
# Arbitrary settings
settings {
# Maximum number of nested fields

View File

@@ -22,7 +22,7 @@ search {
# Number of shards
nbshards = 5
# Number of replicas
nbreplicas = 1
nbreplicas = 0
# Arbitrary settings
settings {
# Maximum number of nested fields

View File

@@ -5,7 +5,7 @@
{%- set HIVEKEY = salt['pillar.get']('static:hivekey', '') %}
hive_init(){
sleep 60
sleep 120
HIVE_IP="{{MASTERIP}}"
HIVE_USER="{{HIVEUSER}}"
HIVE_PASSWORD="{{HIVEPASSWORD}}"
@@ -16,7 +16,7 @@ hive_init(){
COUNT=0
HIVE_CONNECTED="no"
while [[ "$COUNT" -le 240 ]]; do
curl --output /dev/null --silent --head --fail -k "https://$HIVE_IP:/thehive"
curl --output /dev/null --silent --head --fail -k "https://$HIVE_IP/thehive"
if [ $? -eq 0 ]; then
HIVE_CONNECTED="yes"
echo "connected!"
@@ -52,7 +52,7 @@ if [ -f /opt/so/state/thehive.txt ]; then
exit 0
else
rm -f garbage_file
while ! wget -O garbage_file {{MASTERIP}}:9500 2>/dev/null
while ! wget -O garbage_file {{MASTERIP}}:9400 2>/dev/null
do
echo "Waiting for Elasticsearch..."
rm -f garbage_file

View File

@@ -12,7 +12,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.1') %}
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.2') %}
{% set MASTER = salt['grains.get']('master') %}
# IDSTools Setup
idstoolsdir:

43
salt/influxdb/init.sls Normal file
View File

@@ -0,0 +1,43 @@
{% set GRAFANA = salt['pillar.get']('master:grafana', '0') %}
{% set MASTER = salt['grains.get']('master') %}
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.2') %}
{% if grains['role'] in ['so-master', 'so-mastersearch', 'so-eval', 'so-standalone'] and GRAFANA == 1 %}
# Influx DB
influxconfdir:
file.directory:
- name: /opt/so/conf/influxdb/etc
- makedirs: True
influxdbdir:
file.directory:
- name: /nsm/influxdb
- makedirs: True
influxdbconf:
file.managed:
- name: /opt/so/conf/influxdb/etc/influxdb.conf
- user: 939
- group: 939
- template: jinja
- source: salt://influxdb/etc/influxdb.conf
so-influxdb:
docker_container.running:
- image: {{ MASTER }}:5000/soshybridhunter/so-influxdb:{{ VERSION }}
- hostname: influxdb
- environment:
- INFLUXDB_HTTP_LOG_ENABLED=false
- binds:
- /opt/so/conf/influxdb/etc/influxdb.conf:/etc/influxdb/influxdb.conf:ro
- /nsm/influxdb:/var/lib/influxdb:rw
- /etc/pki/influxdb.crt:/etc/ssl/influxdb.crt:ro
- /etc/pki/influxdb.key:/etc/ssl/influxdb.key:ro
- port_bindings:
- 0.0.0.0:8086:8086
- watch:
- file: influxdbconf
{% endif %}

View File

@@ -1,38 +1,21 @@
#!/bin/bash
{%- set MASTER = salt['pillar.get']('static:masterip', '') %}
{%- set FLEET = salt['pillar.get']('static:fleet_ip', '') %}
{%- set KRATOS = salt['pillar.get']('kratos:redirect', '') %}
# {%- set FLEET_MASTER = salt['pillar.get']('static:fleet_master', False) -%}
# {%- set FLEET_NODE = salt['pillar.get']('static:fleet_node', False) -%}
# {%- set FLEET_IP = salt['pillar.get']('static:fleet_ip', '') %}
# {%- set MASTER = salt['pillar.get']('master:url_base', '') %}
KIBANA_VERSION="7.6.1"
MAX_WAIT=120
# Check to see if Kibana is available
until curl "{{ MASTER }}:5601/nonexistenturl" 2>&1 |grep -q "Not Found" ; do
wait_step=$(( ${wait_step} + 1 ))
echo "Waiting on Kibana ({{ MASTER }}:5601)...Attempt #$wait_step"
if [ ${wait_step} -gt ${MAX_WAIT} ]; then
echo "ERROR: Kibana not available for more than ${MAX_WAIT} seconds."
exit 5
fi
sleep 1s;
done
# Sleep additional JIC server is not ready
sleep 30s
# Copy template file
cp /opt/so/conf/kibana/saved_objects.ndjson.template /opt/so/conf/kibana/saved_objects.ndjson
# {% if FLEET_NODE or FLEET_MASTER %}
# Fleet IP
sed -i "s/FLEETPLACEHOLDER/{{ FLEET_IP }}/g" /opt/so/conf/kibana/saved_objects.ndjson
# {% endif %}
# SOCtopus and Master
sed -i "s/PLACEHOLDER/{{ MASTER }}/g" /opt/so/conf/kibana/saved_objects.ndjson
# Fleet IP
sed -i "s/FLEETPLACEHOLDER/{{ FLEET }}/g" /opt/so/conf/kibana/saved_objects.ndjson
# Kratos redirect
sed -i "s/PCAPPLACEHOLDER/{{ KRATOS }}/g" /opt/so/conf/kibana/saved_objects.ndjson
# Load saved objects
curl -X POST "localhost:5601/api/saved_objects/_import" -H "kbn-xsrf: true" --form file=@/opt/so/conf/kibana/saved_objects.ndjson > /dev/null 2>&1

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,4 @@
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.1') %}
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.2') %}
{% set MASTER = salt['grains.get']('master') %}
{% set FEATURES = salt['pillar.get']('elastic:features', False) %}
{% if FEATURES %}
@@ -66,13 +66,6 @@ kibanabin:
- mode: 755
- template: jinja
kibanadashtemplate:
file.managed:
- name: /opt/so/conf/kibana/saved_objects.ndjson.template
- source: salt://kibana/files/saved_objects.ndjson
- user: 932
- group: 939
# Start the kibana docker
so-kibana:
docker_container.running:
@@ -91,12 +84,27 @@ so-kibana:
- port_bindings:
- 0.0.0.0:5601:5601
kibanadashtemplate:
file.managed:
- name: /opt/so/conf/kibana/saved_objects.ndjson.template
- source: salt://kibana/files/saved_objects.ndjson
- user: 932
- group: 939
wait_for_kibana:
module.run:
- http.wait_for_successful_query:
- url: "http://{{MASTER}}:5601/api/saved_objects/_find?type=config"
- wait_for: 180
- onchanges:
- file: kibanadashtemplate
so-kibana-config-load:
cmd.run:
- name: /usr/sbin/so-kibana-config-load
- cwd: /opt/so
- onchanges:
- file: kibanadashtemplate
- wait_for_kibana
# Keep the setting correct

View File

@@ -12,9 +12,10 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.1') %}
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.2') %}
{% set MASTER = salt['grains.get']('master') %}
{% set FEATURES = salt['pillar.get']('elastic:features', False) %}
{% if FEATURES %}
{% set FEATURES = "-features" %}
{% else %}
@@ -23,35 +24,21 @@
# Logstash Section - Decide which pillar to use
{% if grains['role'] == 'so-sensor' %}
{% set lsheap = salt['pillar.get']('sensor:lsheap', '') %}
{% set lsaccessip = salt['pillar.get']('sensor:lsaccessip', '') %}
{% set lsheap = salt['pillar.get']('sensor:lsheap', '') %}
{% set lsaccessip = salt['pillar.get']('sensor:lsaccessip', '') %}
{% elif grains['role'] == 'so-node' or grains['role'] == 'so-heavynode' %}
{% set lsheap = salt['pillar.get']('node:lsheap', '') %}
{% set nodetype = salt['pillar.get']('node:node_type', 'storage') %}
{% elif grains['role'] == 'so-master' %}
{% set lsheap = salt['pillar.get']('master:lsheap', '') %}
{% set freq = salt['pillar.get']('master:freq', '0') %}
{% set dstats = salt['pillar.get']('master:domainstats', '0') %}
{% set nodetype = salt['grains.get']('role', '') %}
{% set lsheap = salt['pillar.get']('node:lsheap', '') %}
{% set nodetype = salt['pillar.get']('node:node_type', 'storage') %}
{% elif grains['role'] in ['so-eval','so-mastersearch', 'so-master', 'so-standalone'] %}
{% set lsheap = salt['pillar.get']('master:lsheap', '') %}
{% set freq = salt['pillar.get']('master:freq', '0') %}
{% set dstats = salt['pillar.get']('master:domainstats', '0') %}
{% set nodetype = salt['grains.get']('role', '') %}
{% elif grains['role'] == 'so-helix' %}
{% set lsheap = salt['pillar.get']('master:lsheap', '') %}
{% set freq = salt['pillar.get']('master:freq', '0') %}
{% set dstats = salt['pillar.get']('master:domainstats', '0') %}
{% set nodetype = salt['grains.get']('role', '') %}
{% elif grains['role'] in ['so-eval','so-mastersearch'] %}
{% set lsheap = salt['pillar.get']('master:lsheap', '') %}
{% set freq = salt['pillar.get']('master:freq', '0') %}
{% set dstats = salt['pillar.get']('master:domainstats', '0') %}
{% set nodetype = salt['grains.get']('role', '') %}
{% set lsheap = salt['pillar.get']('master:lsheap', '') %}
{% set freq = salt['pillar.get']('master:freq', '0') %}
{% set dstats = salt['pillar.get']('master:domainstats', '0') %}
{% set nodetype = salt['grains.get']('role', '') %}
{% endif %}
{% set PIPELINES = salt['pillar.get']('logstash:pipelines', {}) %}

View File

@@ -5,7 +5,7 @@ input {
ssl_certificate_authorities => ["/usr/share/filebeat/ca.crt"]
ssl_certificate => "/usr/share/logstash/filebeat.crt"
ssl_key => "/usr/share/logstash/filebeat.key"
tags => [ "beat" ]
#tags => [ "beat" ]
}
}
filter {

View File

@@ -1,9 +1,9 @@
#!/bin/bash
MASTER={{ MASTER }}
VERSION="HH1.2.1"
VERSION="HH1.2.2"
TRUSTED_CONTAINERS=( \
"so-core:$VERSION" \
"so-nginx:$VERSION" \
"so-cyberchef:$VERSION" \
"so-acng:$VERSION" \
"so-soc:$VERSION" \

View File

@@ -12,7 +12,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.1') %}
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.2') %}
{% set MASTER = salt['grains.get']('master') %}
{% set masterproxy = salt['pillar.get']('static:masterupdate', '0') %}

View File

@@ -1,6 +1,6 @@
{%- set MYSQLPASS = salt['pillar.get']('secrets:mysql', None) %}
{%- set MASTERIP = salt['pillar.get']('static:masterip', '') %}
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.1') %}
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.2') %}
{% set MASTER = salt['grains.get']('master') %}
{% set MAINIP = salt['pillar.get']('node:mainip') %}
{% set FLEETARCH = salt['grains.get']('role') %}
@@ -85,4 +85,9 @@ so-mysql:
- /opt/so/log/mysql:/var/log/mysql:rw
- watch:
- /opt/so/conf/mysql/etc
cmd.run:
- name: until nc -z {{ MAINIP }} 3306; do sleep 1; done
- timeout: 120
- onchanges:
- docker_container: so-mysql
{% endif %}

22
salt/navigator/init.sls Normal file
View File

@@ -0,0 +1,22 @@
{% set VERSION = salt['pillar.get']('static:soversion', 'HH1.2.2') %}
{% set MASTER = salt['grains.get']('master') %}
navigatorconfig:
file.managed:
- name: /opt/so/conf/navigator/navigator_config.json
- source: salt://navigator/files/navigator_config.json
- user: 939
- group: 939
- makedirs: True
- template: jinja
so-navigator:
docker_container.running:
- image: {{ MASTER }}:5000/soshybridhunter/so-navigator:{{ VERSION }}
- hostname: navigator
- name: so-navigator
- binds:
- /opt/so/conf/navigator/navigator_config.json:/nav-app/src/assets/config.json:ro
- /opt/so/conf/navigator/nav_layer_playbook.json:/nav-app/src/assets/playbook.json:ro
- port_bindings:
- 0.0.0.0:4200:4200

View File

@@ -146,6 +146,20 @@ http {
}
location /cyberchef/ {
auth_request /auth/sessions/whoami;
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Proxy "";
}
location /cyberchef {
rewrite ^ /cyberchef/ permanent;
}
location /packages/ {
try_files $uri =206;
auth_request /auth/sessions/whoami;
@@ -299,12 +313,12 @@ http {
return 302 /auth/self-service/browser/flows/login;
}
error_page 404 /404.html;
location = /40x.html {
}
#error_page 404 /404.html;
# location = /usr/share/nginx/html/40x.html {
#}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
location = /usr/share/nginx/html/50x.html {
}
}

View File

@@ -86,12 +86,12 @@ http {
}
error_page 404 /404.html;
location = /40x.html {
}
#error_page 404 /404.html;
# location = /40x.html {
#}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
location = /usr/share/nginx/html/50x.html {
}
}

View File

@@ -77,12 +77,12 @@ http {
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
# #error_page 404 /404.html;
# # location = /40x.html {
# #}
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# location = /usr/share/nginx/html/50x.html {
# }
# }

View File

@@ -47,12 +47,12 @@ http {
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
#error_page 404 /404.html;
# location = /40x.html {
#}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
location = /usr/share/nginx/html/50x.html {
}
}

View File

@@ -146,6 +146,20 @@ http {
}
location /cyberchef/ {
auth_request /auth/sessions/whoami;
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Proxy "";
}
location /cyberchef {
rewrite ^ /cyberchef/ permanent;
}
location /packages/ {
try_files $uri =206;
auth_request /auth/sessions/whoami;
@@ -299,12 +313,12 @@ http {
return 302 /auth/self-service/browser/flows/login;
}
error_page 404 /404.html;
location = /40x.html {
}
#error_page 404 /404.html;
# location = /40x.html {
#}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
location = /usr/share/nginx/html/50x.html {
}
}

View File

@@ -146,6 +146,20 @@ http {
}
location /cyberchef/ {
auth_request /auth/sessions/whoami;
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Proxy "";
}
location /cyberchef {
rewrite ^ /cyberchef/ permanent;
}
location /packages/ {
try_files $uri =206;
auth_request /auth/sessions/whoami;
@@ -299,12 +313,12 @@ http {
return 302 /auth/self-service/browser/flows/login;
}
error_page 404 /404.html;
location = /40x.html {
}
#error_page 404 /404.html;
# location = /40x.html {
#}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
location = /usr/share/nginx/html/50x.html {
}
}

View File

@@ -47,12 +47,12 @@ http {
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
#error_page 404 /404.html;
# location = /40x.html {
#}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
location = /usr/share/nginx/html/50x.html {
}
}

Some files were not shown because too many files have changed in this diff Show More