Compare commits

...

593 Commits

Author SHA1 Message Date
Mike Reeves
58dc073678 Merge pull request #10481 from Security-Onion-Solutions/2.4/dev
2.4.2
2023-06-01 09:37:38 -04:00
Mike Reeves
8c9186d8dd Merge pull request #10489 from Security-Onion-Solutions/2.4.2
2.4.2
2023-06-01 09:27:56 -04:00
Mike Reeves
aee842b912 2.4.2 2023-06-01 09:26:24 -04:00
weslambert
3a5a59af59 Merge pull request #10485 from Security-Onion-Solutions/fix/elastic_fleet_dedicated
Add so-fleet role logic
2023-05-31 16:04:40 -04:00
Josh Patterson
8f3a874e61 Merge pull request #10483 from Security-Onion-Solutions/dedfleetES
exclude elasticsearch.ca state from fleet and receiver nodes
2023-05-31 16:02:57 -04:00
m0duspwnens
66dc6274e6 exclude elasticsearch.ca state from fleet and receiver nodes 2023-05-31 15:59:36 -04:00
Wes
302e580d8f Add so-fleet role logic 2023-05-31 19:56:17 +00:00
Mike Reeves
4cf60a6054 Merge pull request #10480 from Security-Onion-Solutions/mreeves/mergefrommain
Mreeves/mergefrommain
2023-05-31 15:32:30 -04:00
Mike Reeves
8f6d82af97 Merge branch '2.4/main' into mreeves/mergefrommain 2023-05-31 15:28:07 -04:00
Mike Reeves
8ab54dcead Merge pull request #10477 from Security-Onion-Solutions/2.4.2
2.4.2
2023-05-31 14:49:34 -04:00
Mike Reeves
9704c8917e 2.4.2 2023-05-31 14:47:34 -04:00
weslambert
540ee156db Merge pull request #10469 from Security-Onion-Solutions/fix/elastic_fleet_dynamic_configuration
Use Fleet pillar instead of Zeek
2023-05-31 12:36:39 -04:00
Wes
344e2bf1d0 Update defaults file 2023-05-31 15:30:03 +00:00
Wes
3441c0684e Create elasticfleet pillar dir 2023-05-31 15:10:35 +00:00
Wes
ed560f19d3 Remove where not applicable 2023-05-31 14:28:43 +00:00
Wes
b3f6012856 Change ordering 2023-05-31 14:22:47 +00:00
Wes
9ae26ec866 Add Fleet to top file 2023-05-31 14:21:39 +00:00
Wes
20aaa79476 Add pillar files for Fleet 2023-05-31 13:45:19 +00:00
Wes
2bb77251b0 Move Elastic Fleet logging exclusions to the Fleet pillar 2023-05-31 13:38:58 +00:00
weslambert
36791665f3 Merge pull request #10462 from Security-Onion-Solutions/feature/elastic_agent_zeek_logging
Dynamic integration configuration and Zeek log exclusions for Elastic Agent
2023-05-30 19:27:13 -04:00
Josh Patterson
4d4744a89b Merge pull request #10465 from Security-Onion-Solutions/suricataimport
dont apply suricata.enabled on import nodes
2023-05-30 16:51:17 -04:00
Wes
f3be63051b Remove Fleet configuration 2023-05-30 20:48:43 +00:00
m0duspwnens
743ed316f8 dont apply suricata.enabled on import nodes 2023-05-30 16:10:41 -04:00
Wes
e4b4bbcfdc Use ZEEKMERGED from zeek/config.map.jinja 2023-05-30 19:51:13 +00:00
Wes
b6e090f29f Move Elastic Fleet logic in so-common to so-elastic-fleet-common 2023-05-30 18:43:56 +00:00
weslambert
25006ed20b Merge pull request #10455 from Security-Onion-Solutions/fix/curator_cluster_delete_delete
Update so-elasticsearch-cluster-space-used and so-curator-cluster-delete-delete
2023-05-30 14:28:22 -04:00
Wes
4469a93a75 Fix typo 2023-05-30 18:24:30 +00:00
Mike Reeves
0027016b5a Merge pull request #10463 from Security-Onion-Solutions/TOoSmOotH-patch-2
Update so-setup
2023-05-30 13:52:30 -04:00
Mike Reeves
0143e2412d Update so-setup 2023-05-30 13:51:20 -04:00
Mike Reeves
20212414c4 Update so-setup 2023-05-30 13:46:24 -04:00
Mike Reeves
8a63ed5124 Update so-setup 2023-05-30 13:33:30 -04:00
Wes
096dadf9bd Change 1024 to 1000 for gigabytes 2023-05-30 17:29:42 +00:00
Wes
b441fe662f Change 1024 to 1000 for gigabytes 2023-05-30 17:28:59 +00:00
Wes
e5117a343d Change description 2023-05-30 17:10:17 +00:00
Wes
b9d692eb0e Remove default value 2023-05-30 17:08:52 +00:00
Wes
36a7f54160 Add extension 2023-05-30 16:46:38 +00:00
Josh Brower
96134684dc Merge pull request #10459 from Security-Onion-Solutions/2.4/fixes
Change Fleet Host URL API Endpoint
2023-05-30 12:13:52 -04:00
Jason Ertel
374ab0779a Merge pull request #10458 from Security-Onion-Solutions/jertel/debugrsa
Add short sleeps around show_top to isolate if there's a race conditi…
2023-05-30 12:09:34 -04:00
Jason Ertel
d0d1cc9106 Add short sleeps around show_top to isolate if there's a race condition causing intermittent RSA key format errors 2023-05-30 12:08:39 -04:00
Wes
9035fa3037 Don't load Elasticsearch integration 2023-05-30 15:46:00 +00:00
Wes
b4b87e5620 Only provide JSON output 2023-05-30 15:43:31 +00:00
Wes
97c53d70a4 Remove integrations 2023-05-30 14:05:40 +00:00
Wes
53b4f7bd5c Add spacing 2023-05-30 14:05:11 +00:00
Mike Reeves
192c8c78c7 Merge pull request #10456 from Security-Onion-Solutions/airgaps
Update verifications
2023-05-30 09:52:07 -04:00
Mike Reeves
62a063dae4 Update verifications 2023-05-30 09:50:43 -04:00
Wes
79014a53ec Remove extra lines 2023-05-30 12:35:32 +00:00
Wes
e910f04beb Add default description and Zeek log exclusions for Elastic Fleet 2023-05-30 03:10:52 +00:00
Wes
ef5b63337b Add check for integration existence and integration update functionality 2023-05-30 02:58:00 +00:00
Wes
799e92e595 Add files 2023-05-30 02:56:23 +00:00
Wes
c835c523a9 Elastic Fleet integration update improvements 2023-05-30 02:54:39 +00:00
Josh Brower
9ec1492fad Change Fleet Host URL API Endpoint 2023-05-29 07:44:18 -04:00
Wes
5af1bfe142 Move alert generation outside of the inner loop 2023-05-27 21:15:45 +00:00
Jason Ertel
482c5324db Merge pull request #10442 from Security-Onion-Solutions/airgaps
Rule Updates
2023-05-26 20:32:39 -04:00
Mike Reeves
3c1f1cd50e Rule Updates 2023-05-26 20:11:22 -04:00
Mike Reeves
aecd900203 Merge pull request #10387 from Security-Onion-Solutions/airgaps
Docker Enhancements
2023-05-26 17:35:23 -04:00
Mike Reeves
89f5d9f292 Rule Updates 2023-05-26 17:14:10 -04:00
Josh Brower
de43a202a3 Merge pull request #10441 from Security-Onion-Solutions/2.4/fleet-retry
Add Fleet download retry
2023-05-26 17:03:58 -04:00
Josh Brower
6176fa7ca5 Add Fleet download retry 2023-05-26 16:46:02 -04:00
Mike Reeves
9ff27e5b6a Rule Updates 2023-05-26 16:34:48 -04:00
Mike Reeves
5922fc0e45 Rule Updates 2023-05-26 16:29:13 -04:00
Mike Reeves
b48e259fee Rule Updates 2023-05-26 16:27:29 -04:00
Mike Reeves
b4d85a7bf8 Rule Updates 2023-05-26 16:21:07 -04:00
Mike Reeves
38881231ac Merge branch '2.4/dev' of https://github.com/Security-Onion-Solutions/securityonion into airgaps 2023-05-26 15:16:38 -04:00
Mike Reeves
b2d2a9f0ed Rule Updates 2023-05-26 15:16:14 -04:00
Jason Ertel
32021cf272 Merge pull request #10438 from Security-Onion-Solutions/jertel/redircurl
support forwarding urls
2023-05-26 13:42:57 -04:00
Jason Ertel
4410e136b1 Merge branch '2.4/dev' into jertel/redircurl 2023-05-26 12:12:09 -04:00
Jason Ertel
81d4584819 allow following redirects 2023-05-26 12:11:40 -04:00
Jason Ertel
657ef97d17 Merge pull request #10433 from Security-Onion-Solutions/kilo
Use common fail routine when explicitly aborting setup; Enhance cloud detection
2023-05-26 09:54:15 -04:00
Jason Ertel
8f247f962a undo version for PR 2023-05-26 09:50:12 -04:00
Josh Patterson
bcbdab1682 Merge pull request #10435 from Security-Onion-Solutions/issue/10429
Issue/10429
2023-05-26 09:47:33 -04:00
m0duspwnens
5b4ec70ca6 fix typo on suricata annotations. add to global annotations 2023-05-26 09:37:57 -04:00
Wes
ce114a2601 Fix total space logic and rename TOTAL_AVAILABLE_SPACE to TOTAL_USED_SPACE 2023-05-26 13:19:45 +00:00
Wes
5de59a879a Break out of index deletion when unable to bring space below the disk space threshold 2023-05-26 13:15:27 +00:00
Jason Ertel
a2e6469a38 provide custom cloud detection path 2023-05-26 08:05:34 -04:00
m0duspwnens
5c933910aa simplify map for updating suricata config if md engine is suricata 2023-05-25 17:25:54 -04:00
m0duspwnens
a3c3f08511 convert list to dict to work better with ui. regex on suricata vars HOME_NET for soc 2023-05-25 17:00:48 -04:00
Jason Ertel
9aa58be286 correct kilo version 2023-05-25 16:14:07 -04:00
Jason Ertel
db56b3d6a3 pin version to kilo 2023-05-25 15:27:05 -04:00
Jason Ertel
7d6182a18f redir err to out to avoid leaks to console 2023-05-25 15:24:09 -04:00
Jason Ertel
074f84ae4d flag all forced setup aborts 2023-05-25 14:57:58 -04:00
Mike Reeves
8ce0d76287 Zeek Annotations 2023-05-25 12:12:18 -04:00
Mike Reeves
3be3df00d1 Zeek Annotations 2023-05-25 12:10:15 -04:00
m0duspwnens
d99d4756c3 set defaults as example in soc ui for suricata cpu affinity 2023-05-25 11:11:53 -04:00
m0duspwnens
0d83b13585 Merge remote-tracking branch 'origin/2.4/dev' into issue/10229 2023-05-25 11:04:04 -04:00
m0duspwnens
6505d3e2ce update annotations for suricata 2023-05-25 11:03:37 -04:00
Josh Patterson
6edfadd18b Merge pull request #10432 from Security-Onion-Solutions/distribsetup
Update so-functions
2023-05-25 10:44:33 -04:00
Josh Patterson
9552510c7d Update so-functions
assign proper hostgroups for setup
2023-05-25 10:43:47 -04:00
Doug Burks
36ddcfa4e5 Merge pull request #10431 from Security-Onion-Solutions/dougburks-patch-1
Update README.md for Beta 3
2023-05-25 08:36:14 -04:00
Doug Burks
fcc1337e1a Update README.md for Beta 3 2023-05-25 07:51:08 -04:00
Mike Reeves
10f9d0f4bd Suricata Airgap 2023-05-24 16:21:51 -04:00
Mike Reeves
edf531739c Suricata Airgap 2023-05-24 15:47:07 -04:00
Mike Reeves
11d7e66ea0 Suricata Airgap 2023-05-24 15:30:52 -04:00
Mike Reeves
caaedee5a7 Suricata Airgap 2023-05-24 15:18:52 -04:00
Mike Reeves
1bdd79c578 Suricata Airgap 2023-05-24 15:05:40 -04:00
Mike Reeves
c199acc64e Suricata Airgap 2023-05-24 14:58:11 -04:00
Josh Patterson
a01704a1d7 Merge pull request #10427 from Security-Onion-Solutions/issue/10229
Issue/10229
2023-05-24 13:23:29 -04:00
Wes
53f258b08f Add eligible_indices to index deletion requirements 2023-05-24 17:02:11 +00:00
Wes
a308a39bbe Use disk space taken up by indices if the script is not running on a manager 2023-05-24 16:48:45 +00:00
m0duspwnens
5c00655ad0 Merge remote-tracking branch 'origin/2.4/dev' into issue/10229 2023-05-24 12:22:52 -04:00
m0duspwnens
67a608ea56 adjust suricata defaults 2023-05-24 12:22:42 -04:00
Josh Brower
01d983fc00 Merge pull request #10426 from Security-Onion-Solutions/2.4/fleet-punchlist
2.4/fleet punchlist
2023-05-24 12:15:50 -04:00
Mike Reeves
d6f1bcfdf0 Merge branch '2.4/dev' of https://github.com/Security-Onion-Solutions/securityonion into airgaps 2023-05-24 11:42:44 -04:00
Josh Brower
f156573f8d Merge remote-tracking branch 'remotes/origin/2.4/dev' into 2.4/fleet-punchlist 2023-05-24 11:28:38 -04:00
Josh Brower
b3e0e68896 Change Fleet Host URL API 2023-05-24 11:27:41 -04:00
Mike Reeves
86803f1fb5 Add Suricata 2023-05-24 10:48:01 -04:00
Jason Ertel
aad08a830b Merge pull request #10425 from Security-Onion-Solutions/kilo
fix malformed alert templates
2023-05-24 10:21:21 -04:00
Mike Reeves
c9db6c0f18 Add Suricata 2023-05-24 10:18:58 -04:00
Jason Ertel
d9a9c8738c fix malformed alert templates 2023-05-24 10:17:59 -04:00
Mike Reeves
cb0ed9ae6d Merge branch '2.4/dev' of https://github.com/Security-Onion-Solutions/securityonion into airgaps 2023-05-24 10:04:15 -04:00
Josh Brower
4f72fca2d7 Merge remote-tracking branch 'remotes/origin/2.4/dev' into 2.4/fleet-punchlist 2023-05-24 09:55:29 -04:00
Josh Patterson
1dc426b8ce Merge pull request #10422 from Security-Onion-Solutions/issue/10229
fix suricata sostatus
2023-05-24 09:54:14 -04:00
m0duspwnens
8995012c80 fix suricata sostatus 2023-05-24 09:52:07 -04:00
Mike Reeves
2c4ba2e8b2 Add Suricata 2023-05-24 09:35:50 -04:00
Mike Reeves
c42959d040 soup skeleton 2023-05-24 09:29:50 -04:00
Mike Reeves
fa6dcd7f83 Merge branch '2.4/dev' of https://github.com/Security-Onion-Solutions/securityonion into airgaps 2023-05-24 09:04:04 -04:00
Josh Brower
9c6365aa2f Merge remote-tracking branch 'remotes/origin/2.4/dev' into 2.4/fleet-punchlist 2023-05-24 09:03:57 -04:00
Josh Patterson
6e4c4febfb Merge pull request #10421 from Security-Onion-Solutions/issue/10229
rename state to resolve conflicting / duplicate state ids
2023-05-24 09:02:47 -04:00
m0duspwnens
732d2aadf8 rename state to resolve conflicting / duplicate state ids 2023-05-24 08:58:43 -04:00
Mike Reeves
cace817c79 Merge branch '2.4/dev' of https://github.com/Security-Onion-Solutions/securityonion into airgaps 2023-05-24 08:43:03 -04:00
Josh Brower
e1c361e555 Fix variable 2023-05-23 16:50:40 -04:00
Josh Brower
502277b1b7 Hash check, use url base 2023-05-23 16:38:37 -04:00
bryant-treacle
57f5a22f0f Merge pull request #10396 from Security-Onion-Solutions/2.4/Influxdb_alerts
2.4/influxdb alerts
2023-05-23 14:14:48 -04:00
Josh Patterson
4b18a0e758 Merge pull request #10417 from Security-Onion-Solutions/issue/10229
Issue/10229
2023-05-23 13:47:48 -04:00
Josh Brower
f6a9a764de Merge pull request #10416 from Security-Onion-Solutions/2.4/smallfixes
2.4/EQL
2023-05-23 13:28:11 -04:00
m0duspwnens
e65214b097 Merge remote-tracking branch 'origin/2.4/dev' into issue/10229 2023-05-23 12:10:29 -04:00
m0duspwnens
cc47f9a595 fix suricata thresholding 2023-05-23 11:16:32 -04:00
m0duspwnens
eb633be437 enable/disable suricata in ui. assign threads properly 2023-05-22 17:48:22 -04:00
Josh Brower
df0dc2e4d1 Merge remote-tracking branch 'remotes/origin/2.4/dev' into 2.4/smallfixes 2023-05-22 16:02:30 -04:00
Josh Brower
766f4dd661 Add Elastic Defend Integration 2023-05-22 16:02:08 -04:00
Jason Ertel
f53fb69ffb Merge pull request #10407 from Security-Onion-Solutions/kilo
Ignore Synchronize button clicks when an active salt job is running and another is already in queue
2023-05-22 14:59:42 -04:00
Jason Ertel
ba0ec18a33 Ignore Synchronize button clicks when an active salt job is running and another is already in queue 2023-05-22 14:52:07 -04:00
weslambert
79182cecfd Merge pull request #10397 from Security-Onion-Solutions/fix/elastic_exclude_zeek_reporter_log
Exclude Zeek's reporter.log from being picked up by Elastic Agent
2023-05-22 07:56:54 -04:00
weslambert
8cf82c4b6a Merge pull request #10398 from Security-Onion-Solutions/fix/elasticsearch_ingest_dns_query
Check if 'dns.query' is null
2023-05-22 07:56:44 -04:00
weslambert
78d4586033 Merge pull request #10399 from Security-Onion-Solutions/fix/elastalert_playbook_alerter
Update 'url' to use 'es_hosts'
2023-05-22 07:56:31 -04:00
Jason Ertel
02cf1074f2 Merge pull request #10400 from Security-Onion-Solutions/kilo
use the same requests version that's already packaged with the analyzer
2023-05-20 08:45:21 -04:00
Jason Ertel
a881cab469 use the same requests version that's already packaged with the analyzer 2023-05-19 23:54:30 -04:00
weslambert
00bd93c026 Update 'url' to use 'es_hosts' 2023-05-19 17:14:13 -04:00
weslambert
2c10ad7eec Check if 'dns.query' is null 2023-05-19 15:50:33 -04:00
weslambert
167051af28 Exclude Zeek's reporter.log from being picked up by Elastic Agent 2023-05-19 15:44:09 -04:00
weslambert
eb9c5e9af0 Merge pull request #10307 from Security-Onion-Solutions/fix/elastic_fleet_ignore_zeek_logs
Don't read from 'known_hosts.log', 'known_services.log', or 'ntp.log'
2023-05-19 15:09:15 -04:00
Jason Ertel
2f942a3e37 Merge pull request #10393 from Security-Onion-Solutions/kilo
fix lib dependency issue with whoisit
2023-05-19 14:34:42 -04:00
Jason Ertel
03f97b309a fix lib dependency issue with whoisit 2023-05-19 14:18:19 -04:00
weslambert
c6a962a46b Merge pull request #10392 from Security-Onion-Solutions/fix/elastalert_index
Change Elastalert writeback index name from 'elastalert_status' to 'elastalert'
2023-05-19 13:31:29 -04:00
weslambert
1ddf45bbbe Change Elastalert writeback index name from 'elastalert_status' to 'elastalert' 2023-05-19 12:39:27 -04:00
Doug Burks
f0c4cebaca Merge pull request #10391 from Security-Onion-Solutions/2.4/elastic-8.7.1
UPGRADE: Elastic 8.7.1 #10269
2023-05-19 12:29:01 -04:00
Doug Burks
87c42ece00 Update so-kibana-config-load 2023-05-19 12:21:09 -04:00
Doug Burks
4f8fcd3369 Update config_saved_objects.ndjson 2023-05-19 12:19:44 -04:00
bryant-treacle
5b2d91b5b5 Update alarm_zeek_packet_loss.json 2023-05-19 10:32:53 -04:00
bryant-treacle
a84322f9b7 Update alarm_suricata_packet_loss.json 2023-05-19 10:32:29 -04:00
bryant-treacle
2de95bcb63 Update alarm_steno_packet_loss.json 2023-05-19 10:32:13 -04:00
bryant-treacle
1e9e2facde Update alarm_low_monitor_traffic.json 2023-05-19 10:29:53 -04:00
bryant-treacle
592c67d1f2 Update alarm_pcap_retention.json 2023-05-19 10:29:15 -04:00
bryant-treacle
e91dd29cb2 Update alarm_high_redis_memory_usage.json 2023-05-19 10:25:22 -04:00
bryant-treacle
13c9142814 Update alarm_low_monitor_traffic.json 2023-05-19 10:21:43 -04:00
bryant-treacle
ef4f2491f3 Update alarm_high_redis_memory_usage.json 2023-05-19 10:12:44 -04:00
bryant-treacle
645555b990 Update alarm_zeek_packet_loss.json 2023-05-19 10:10:44 -04:00
bryant-treacle
839275814c Update redis.sh - Added percent of used memory. 2023-05-19 08:51:49 -04:00
bryant-treacle
9b973e07e2 Add files via upload 2023-05-19 08:49:43 -04:00
Josh Patterson
0027385da9 Merge pull request #10389 from Security-Onion-Solutions/issue/10229
enable playbook on eval in pillar during setup
2023-05-18 17:38:05 -04:00
m0duspwnens
4ef77f9050 enable playbook on eval in pillar during setup 2023-05-18 17:34:59 -04:00
Mike Reeves
debbdec350 Allow additional docker parameters 2023-05-18 17:10:18 -04:00
Mike Reeves
bf4ac0c2dd Allow additional docker parameters 2023-05-18 17:08:39 -04:00
Mike Reeves
cb9e7e63db Allow additional docker parameters 2023-05-18 17:00:54 -04:00
Mike Reeves
32560af767 Allow additional docker parameters 2023-05-18 16:59:45 -04:00
Mike Reeves
1e5ac61ff5 Allow additional docker parameters 2023-05-18 16:57:48 -04:00
Mike Reeves
5315c51197 Allow additional docker parameters 2023-05-18 16:52:38 -04:00
Mike Reeves
8917f9b9d2 Allow additional docker parameters 2023-05-18 16:46:28 -04:00
Mike Reeves
c0dc05f26a Allow additional docker parameters 2023-05-18 16:39:42 -04:00
Mike Reeves
2aa801d906 Allow additional docker parameters 2023-05-18 16:31:29 -04:00
weslambert
c192ec9109 Merge pull request #10385 from Security-Onion-Solutions/feature/elastalert_eql
Add initial support for EQL queries for Elastalert
2023-05-18 15:36:28 -04:00
Mike Reeves
7ab31e36af Merge branch '2.4/dev' of https://github.com/Security-Onion-Solutions/securityonion into airgaps 2023-05-18 15:19:15 -04:00
Mike Reeves
0fd9fb9294 Allow additional docker parameters 2023-05-18 15:19:09 -04:00
Josh Patterson
059f80bfc4 Merge pull request #10384 from Security-Onion-Solutions/issue/10334
Issue/10334
2023-05-18 13:28:47 -04:00
m0duspwnens
bab2f7282c fix spaciong 2023-05-18 13:27:48 -04:00
m0duspwnens
02920b5ac9 confirm manager ip when found in setup 2023-05-18 13:25:12 -04:00
m0duspwnens
25b0934cda confirm manager ip when found in setup 2023-05-18 13:06:20 -04:00
Wes
d3c7ea4805 Add EQL option 2023-05-18 16:55:26 +00:00
Wes
82c3d78672 Change Elasticsearch host syntax 2023-05-18 16:52:27 +00:00
Josh Brower
97b68609bc Merge pull request #10381 from Security-Onion-Solutions/2.4/smallfixes
2.4/ElasticFleetPunchList
2023-05-18 09:04:30 -04:00
Josh Patterson
1d611e618f Merge pull request #10383 from Security-Onion-Solutions/issue/10229
remove conditional on cacertz and capemz
2023-05-18 08:45:41 -04:00
m0duspwnens
f4b8d385ee remove conditional on cacertz and capemz 2023-05-18 08:36:24 -04:00
Jason Ertel
b7e0923ec4 Merge pull request #10382 from Security-Onion-Solutions/kilo
add missing var for local dev
2023-05-17 18:58:29 -04:00
Jason Ertel
4930ae4ba6 add missing var for local dev 2023-05-17 18:14:21 -04:00
Josh Brower
d11479ec5f Merge remote-tracking branch 'remotes/origin/2.4/dev' into 2.4/smallfixes 2023-05-17 16:11:46 -04:00
Josh Brower
901e3c4a20 Set Fleet Host timeouts to 120 seconds 2023-05-17 16:07:59 -04:00
Josh Patterson
81842462ba Merge pull request #10380 from Security-Onion-Solutions/issue/10229
Issue/10229
2023-05-17 15:53:15 -04:00
m0duspwnens
e15c14cc2e fix indent 2023-05-17 15:50:31 -04:00
m0duspwnens
f7ddf57f39 move files out of config 2023-05-17 15:49:22 -04:00
Josh Brower
47e67fda46 Rework restart scripts for Elastic Fleet 2023-05-17 15:37:39 -04:00
Josh Brower
7d0251952c Filter out uneeded Logstash metadata 2023-05-17 11:06:16 -04:00
Josh Brower
5536f5a8c2 Add Fleet node to other roles 2023-05-17 09:32:20 -04:00
Josh Patterson
2c932fae9d Merge pull request #10371 from Security-Onion-Solutions/salt3006.1
Salt3006.1
2023-05-16 16:59:31 -04:00
Josh Brower
24445cf36a Rename Fleet pipelines 2023-05-16 16:43:21 -04:00
m0duspwnens
0feb25c962 Merge remote-tracking branch 'origin/2.4/dev' into salt3006.1 2023-05-16 16:07:31 -04:00
m0duspwnens
3abb4d79ba change path where SALTVERSION is pulled from 2023-05-16 16:07:06 -04:00
Josh Patterson
1df183deb3 Merge pull request #10370 from Security-Onion-Solutions/issue/10229
fix grep logic for so-elastic-fleet sostatus.sls
2023-05-16 15:46:41 -04:00
m0duspwnens
77834c1e58 fix grep logic for so-elastic-fleet sostatus.sls 2023-05-16 15:05:14 -04:00
Josh Patterson
d6207705cd Merge pull request #10369 from Security-Onion-Solutions/salt3006.1
specify salt version to install during setup
2023-05-16 14:47:35 -04:00
m0duspwnens
e4b61aa08d specify salt version to install during setup 2023-05-16 14:28:57 -04:00
Josh Patterson
736ff2930d Merge pull request #10368 from Security-Onion-Solutions/salt3006.1
Salt3006.1
2023-05-16 13:48:11 -04:00
m0duspwnens
6aff526d9e Merge remote-tracking branch 'origin/2.4/dev' into salt3006.1 2023-05-16 13:08:28 -04:00
Josh Brower
8101171c97 Merge pull request #10367 from Security-Onion-Solutions/2.4/integrationfix
Update Integrations
2023-05-16 12:56:47 -04:00
Josh Brower
000507c366 Update Integrations 2023-05-16 12:50:40 -04:00
Josh Patterson
82fdee45aa Merge pull request #10366 from Security-Onion-Solutions/issue/10229
cwd for catrustscript
2023-05-16 12:11:20 -04:00
m0duspwnens
2419fa43b6 cwd for catrustscript 2023-05-16 12:08:44 -04:00
m0duspwnens
acc7619023 salt 3006.1 2023-05-16 12:04:02 -04:00
Jason Ertel
dcd761ad74 Merge pull request #10364 from Security-Onion-Solutions/kilo
import installs do not use monitor ifaces
2023-05-16 10:15:26 -04:00
Jason Ertel
9871ecd223 import installs do not use monitor ifaces 2023-05-16 10:14:31 -04:00
Josh Patterson
56a7fdcfcd Merge pull request #10363 from Security-Onion-Solutions/issue/10229
Issue/10229
2023-05-16 09:36:31 -04:00
m0duspwnens
6325f6db16 run elasticfleet.config so elasticfleet setup script gets put in place 2023-05-16 09:30:27 -04:00
m0duspwnens
b253cd45ca Merge remote-tracking branch 'origin/2.4/dev' into issue/10229 2023-05-16 09:22:48 -04:00
Jason Ertel
1724565331 Merge pull request #10362 from Security-Onion-Solutions/kilo
ensure automated tests have passwordless sudo
2023-05-16 08:49:00 -04:00
Jason Ertel
00a7beaca2 ensure automated tests have passwordless sudo 2023-05-16 08:43:13 -04:00
Mike Reeves
c129bba7e5 Merge pull request #10361 from Security-Onion-Solutions/TOoSmOotH-patch-3
Update defaults.yaml
2023-05-16 08:19:07 -04:00
Mike Reeves
fb298224fc Update defaults.yaml 2023-05-16 08:17:50 -04:00
Josh Brower
1feed47185 Merge pull request #10360 from Security-Onion-Solutions/2.4/retry
2.4/retry
2023-05-16 08:15:42 -04:00
Josh Brower
923de356e1 Fix typos 2023-05-16 08:06:31 -04:00
Jason Ertel
cea9af4e01 Merge pull request #10359 from Security-Onion-Solutions/kilo
missing braces
2023-05-16 07:25:36 -04:00
Jason Ertel
0f6d894322 missing braces 2023-05-16 07:22:17 -04:00
Josh Brower
9f879164ec Fix broken loop 2023-05-16 06:45:17 -04:00
Jason Ertel
1ddc4b6ff8 Merge pull request #10357 from Security-Onion-Solutions/kilo
ISO tests also use DHCP
2023-05-15 19:04:31 -04:00
Jason Ertel
58f80120bd ISO tests also use DHCP 2023-05-15 18:58:04 -04:00
m0duspwnens
a0e08e4f41 enable elasticfleet via pillar, fix sostatus for elasticfleet 2023-05-15 17:41:09 -04:00
m0duspwnens
2813d67670 import GLOBALS 2023-05-15 16:47:33 -04:00
m0duspwnens
c49b134122 move so-catrust 2023-05-15 16:43:47 -04:00
Mike Reeves
48ce377b02 Merge pull request #10340 from Security-Onion-Solutions/airgaps
Fix IDS Tools
2023-05-15 16:10:03 -04:00
Josh Brower
40de01e8c4 Temp fix 2023-05-15 15:56:21 -04:00
Mike Reeves
2fe88a1e66 Fix verify so copying sigma rules isnt fail 2023-05-15 15:33:52 -04:00
Mike Reeves
214117e0e0 Fix verify so copying sigma rules isnt fail 2023-05-15 15:33:32 -04:00
Josh Brower
bc2d3e43f0 Merge pull request #10356 from Security-Onion-Solutions/2.4/retry
Fix path
2023-05-15 15:20:43 -04:00
Josh Brower
b3528b2139 Fix path 2023-05-15 15:18:49 -04:00
Josh Brower
7ecd067e2b Merge pull request #10355 from Security-Onion-Solutions/2.4/retry
Add retry
2023-05-15 14:57:46 -04:00
Josh Brower
576c1d7cc1 Add retry 2023-05-15 14:55:43 -04:00
m0duspwnens
6320528263 move so-catrust 2023-05-15 14:08:30 -04:00
Josh Brower
6528632861 Merge pull request #10352 from Security-Onion-Solutions/2.4/taglogs
Refactor wrapper
2023-05-15 13:56:38 -04:00
m0duspwnens
928b3b5471 create local kibana pillar dirs before touching pillar files 2023-05-15 13:40:52 -04:00
m0duspwnens
f1c8467e9b create and assign kibana.soc and kibana.adv 2023-05-15 13:13:38 -04:00
m0duspwnens
f5337eba1a Merge remote-tracking branch 'origin/2.4/dev' into issue/10229 2023-05-15 13:08:53 -04:00
Jason Ertel
de28e15805 Merge pull request #10354 from Security-Onion-Solutions/kilo
Relax rate limiting thresholds when installing in test mode
2023-05-15 13:02:07 -04:00
Jason Ertel
09ba15f9bb Merge branch '2.4/dev' into kilo 2023-05-15 12:57:46 -04:00
Jason Ertel
ba9892941d relax login rate limiting when testing 2023-05-15 12:57:41 -04:00
Josh Brower
b381c51246 Merge branch '2.4/dev' into 2.4/taglogs 2023-05-15 12:13:44 -04:00
Josh Brower
64726af69c Change from tmp 2023-05-15 12:09:16 -04:00
m0duspwnens
7a4fea7a12 fix nginx merge conflicts 2023-05-15 11:40:12 -04:00
m0duspwnens
db47256cdd rename 2023-05-15 11:23:27 -04:00
m0duspwnens
ba2392997b enabled/disable elastic-fleet-package-registry via ui 2023-05-15 11:14:21 -04:00
m0duspwnens
1a1bcb3526 enable/disable idh via ui 2023-05-15 10:53:39 -04:00
m0duspwnens
997e6c141a enable/disable idstools in ui 2023-05-15 10:19:15 -04:00
Doug Burks
9a3c997779 Merge pull request #10351 from Security-Onion-Solutions/dougburks-patch-1
Update install_agent_grid.sls
2023-05-15 10:13:55 -04:00
Doug Burks
53ed4d49c2 Update install_agent_grid.sls 2023-05-15 10:10:27 -04:00
m0duspwnens
0cee5b54a1 make advnaced 2023-05-15 10:00:15 -04:00
m0duspwnens
3f8e15d16f enabled/disable elaticfleet in ui 2023-05-15 09:41:44 -04:00
Doug Burks
f8f6a1433a Merge pull request #10350 from Security-Onion-Solutions/2.4/fix-agent-iso
2.4/fix agent iso
2023-05-15 08:47:05 -04:00
Doug Burks
83188401c5 update status messages 2023-05-15 08:43:53 -04:00
Doug Burks
b01367a294 remove the temp directory when finished 2023-05-15 08:41:05 -04:00
Doug Burks
d8e0e320f4 so-elastic-agent-gen-installers should use /nsm to avoid filling /tmp 2023-05-15 07:31:32 -04:00
m0duspwnens
b033f0d20f fix import 2023-05-12 16:57:31 -04:00
m0duspwnens
b71b4225c4 enabled/disable kratos in ui 2023-05-12 16:53:18 -04:00
m0duspwnens
2a39f5f0b5 enabled/disable mysql in ui 2023-05-12 16:27:18 -04:00
m0duspwnens
e27e690bc8 fix disabled for registry 2023-05-12 16:07:49 -04:00
m0duspwnens
57371ffe5a fix so-status for dockerregistry 2023-05-12 16:05:23 -04:00
m0duspwnens
4440ecd433 enabled/disable registry in ui 2023-05-12 15:51:00 -04:00
m0duspwnens
277ad61920 enabled/disable registry in ui 2023-05-12 15:49:13 -04:00
m0duspwnens
0860b1501e fix so-status state name 2023-05-12 15:17:51 -04:00
m0duspwnens
b06610088a fix so-status state names 2023-05-12 15:15:21 -04:00
m0duspwnens
aa2f168b73 make node_description a string 2023-05-12 15:12:12 -04:00
m0duspwnens
d1f7e5f4a7 fix and rename timeout_ms and parallel_limit 2023-05-12 14:57:55 -04:00
m0duspwnens
05a81596e5 place and access sensoronikey from sensoroni.config 2023-05-12 14:38:39 -04:00
m0duspwnens
00d1ca0b62 configure and enable/disable sensoroni via ui 2023-05-12 14:26:46 -04:00
Josh Brower
dbd4a5bd98 Refactor wrapper 2023-05-12 12:11:28 -04:00
Doug Burks
3db34a3346 Merge pull request #10341 from Security-Onion-Solutions/dougburks-patch-1
revert last change to so-verify
2023-05-11 16:47:50 -04:00
Doug Burks
f9890778ad revert last change to so-verify 2023-05-11 16:45:46 -04:00
m0duspwnens
e342dae818 put srvKey under soc:config:server 2023-05-11 16:14:52 -04:00
Mike Reeves
64e294ef48 Fix verify so copying sigma rules isnt fail 2023-05-11 16:02:58 -04:00
Mike Reeves
992bbdfac1 Merge branch '2.4/dev' of https://github.com/Security-Onion-Solutions/securityonion into airgaps 2023-05-11 16:00:15 -04:00
Mike Reeves
a4cd695cc8 Airgap Rules Fix 2023-05-11 16:00:07 -04:00
Doug Burks
9f85b3cb4f Merge pull request #10339 from Security-Onion-Solutions/dougburks-patch-1
add another error exclusion to so-verify
2023-05-11 15:59:14 -04:00
Doug Burks
e9fd7d8b8b add another error exclusion to so-verify 2023-05-11 15:38:57 -04:00
m0duspwnens
fa1a428133 fix import 2023-05-11 15:36:20 -04:00
m0duspwnens
8e18986671 enabled/disable soc in ui 2023-05-11 15:33:16 -04:00
m0duspwnens
a3b97b40ba enabled/disable soctopus in ui 2023-05-11 13:57:08 -04:00
Doug Burks
634dd9907d Merge pull request #10338 from Security-Onion-Solutions/dougburks-patch-1
fix typo in so-elastic-fleet-setup
2023-05-11 13:40:15 -04:00
Doug Burks
1d12dcd243 fix typo in so-elastic-fleet-setup 2023-05-11 13:39:07 -04:00
Jason Ertel
2ec8d6abf0 Merge pull request #10337 from Security-Onion-Solutions/kilo
Prevent duplicate telegraph data from elastic from distorting Influx graphs
2023-05-11 13:38:14 -04:00
Jason Ertel
98c19e5934 handle duplicate telegraph data for elastic 2023-05-11 13:34:44 -04:00
m0duspwnens
03e7636a18 include nginx.config in soctopus 2023-05-11 13:19:16 -04:00
m0duspwnens
6ce9561ba7 enabled/disable nginx via ui 2023-05-11 13:15:26 -04:00
m0duspwnens
b80dd996cc fix import 2023-05-11 12:46:05 -04:00
m0duspwnens
63cea88c1d enable/disable influxdb in ui 2023-05-11 12:43:06 -04:00
m0duspwnens
f41c75c633 fix include 2023-05-11 12:14:30 -04:00
m0duspwnens
20f706f165 enable/disable telegraf in ui 2023-05-11 12:12:25 -04:00
m0duspwnens
c74b440922 configure and enable/disable curator in ui 2023-05-11 10:17:28 -04:00
Mike Reeves
badaab94de Merge pull request #10331 from Security-Onion-Solutions/airgaps
Fix so_user shennanigans
2023-05-10 18:34:39 -04:00
Mike Reeves
2be6c603ab Fix so_user shennanigans 2023-05-10 17:47:41 -04:00
Jason Ertel
7700a5a1bf Merge pull request #10328 from Security-Onion-Solutions/kilo
add missing dollar sign
2023-05-10 17:06:35 -04:00
Jason Ertel
687a89e30b add missing dollar sign 2023-05-10 17:00:13 -04:00
m0duspwnens
06a0492226 import DOCKER and GLOBALS for filestream enabled 2023-05-10 16:04:53 -04:00
m0duspwnens
4e4034e054 cleanup strelka in top and allowed_states 2023-05-10 15:59:10 -04:00
m0duspwnens
5b06aa518e makedirs if needed 2023-05-10 15:55:21 -04:00
m0duspwnens
c91fb438bb update map file with new strelka format 2023-05-10 15:53:28 -04:00
m0duspwnens
54c9a3ec71 enable/disable each strelka container in ui 2023-05-10 15:50:07 -04:00
Mike Reeves
cc1babbea6 Merge pull request #10325 from Security-Onion-Solutions/airgaps
Initial airgap support
2023-05-10 15:00:57 -04:00
Mike Reeves
bde67266d4 Add elastic agent logic 2023-05-10 14:28:46 -04:00
Josh Brower
1de1e2fdc2 Merge pull request #10324 from Security-Onion-Solutions/2.4/taglogs
tag container logs
2023-05-10 14:21:16 -04:00
Josh Brower
2293574f2e tag container logs 2023-05-10 14:19:17 -04:00
Mike Reeves
3077c21bd9 Add official key 2023-05-10 14:15:06 -04:00
Mike Reeves
a52ca6e298 Add official key 2023-05-10 13:29:22 -04:00
m0duspwnens
02e1a29f0c configure redis in ui 2023-05-10 11:54:21 -04:00
m0duspwnens
1b9ed1c72b uncomment so-playbook when enabled 2023-05-10 11:24:14 -04:00
Mike Reeves
9564158c32 Don't sync down the repo for airgap 2023-05-10 11:19:36 -04:00
m0duspwnens
ce1f75aab6 fix indent for description and helplink 2023-05-10 11:19:00 -04:00
m0duspwnens
a0ce46e702 enable/disable logstash in ui 2023-05-10 11:16:03 -04:00
Mike Reeves
f501fac9cd Don't sync down the repo for airgap 2023-05-10 11:07:03 -04:00
Mike Reeves
8b95edd91a Fix setup whiptail for airgap 2023-05-10 10:46:29 -04:00
m0duspwnens
c5e5763014 uncomment so-kibana in so-status 2023-05-10 09:55:20 -04:00
m0duspwnens
2322ed4b6d fix require 2023-05-09 17:13:36 -04:00
m0duspwnens
38d69701a4 fix require 2023-05-09 17:09:00 -04:00
m0duspwnens
4dc0f06331 add add_kibana_to_minion to so-minion 2023-05-09 16:51:41 -04:00
m0duspwnens
ec7bcd9b0c enabled/disable kibana in ui 2023-05-09 16:46:48 -04:00
Doug Burks
24140c4cda Merge pull request #10319 from Security-Onion-Solutions/dougburks-patch-1
Update soc_idstools.yaml
2023-05-09 12:18:36 -04:00
m0duspwnens
6909d3ed14 move cacertz and capemz to ssl state 2023-05-09 12:16:18 -04:00
Doug Burks
cf5feafb1e Update soc_idstools.yaml 2023-05-09 12:11:42 -04:00
Josh Brower
ebc20a86eb Merge pull request #10316 from Security-Onion-Solutions/2.4/integrationversions
Remove Hardcoded Versions
2023-05-09 12:04:24 -04:00
Mike Reeves
e792fbe023 Merge pull request #10317 from Security-Onion-Solutions/airgaps
Remove escaping from nmcli
2023-05-09 11:58:02 -04:00
Mike Reeves
02b619193d Remove escaping from nmcli 2023-05-09 11:55:51 -04:00
Mike Reeves
e5aab3b707 Merge pull request #10315 from Security-Onion-Solutions/airgaps
Fix NIC escaping
2023-05-09 11:40:20 -04:00
Mike Reeves
089fcbd0c5 Fix NIC escaping 2023-05-09 11:37:50 -04:00
Josh Brower
62bafb94f9 Remove Hardcoded Versions 2023-05-09 11:30:25 -04:00
m0duspwnens
9d6fb98e3b move cacertz and capemz to ca state 2023-05-09 11:13:57 -04:00
m0duspwnens
7bd9a84aa1 changes to top and allow_states for enable/disable elasticsearch in ui 2023-05-09 10:01:30 -04:00
m0duspwnens
328b714306 import ELASTICSEARCHMERGED 2023-05-09 09:51:53 -04:00
m0duspwnens
2a979197a0 enabled/disable elasticsearch in ui 2023-05-09 09:33:37 -04:00
Jason Ertel
6f7f09f1cd Merge pull request #10310 from Security-Onion-Solutions/kilo
nginx changes: add rate limiting, remove old HH html
2023-05-08 16:32:27 -04:00
m0duspwnens
f9804c218d only append to so-status.conf if needed 2023-05-08 16:20:17 -04:00
Jason Ertel
dfc4498921 Clarify auth throttle desc 2023-05-08 16:06:10 -04:00
m0duspwnens
9049f9cf03 enabled/disable elastalert via web ui 2023-05-08 15:56:26 -04:00
Jason Ertel
79a5f3a89f add missing slash 2023-05-08 15:55:00 -04:00
Jason Ertel
c7cb11e919 remove obsolete code 2023-05-08 15:34:19 -04:00
Jason Ertel
da81d93930 adjust var name 2023-05-08 15:32:04 -04:00
Jason Ertel
44344612b7 adjust var name 2023-05-08 15:31:08 -04:00
Jason Ertel
7ac4bc52a3 add missing file 2023-05-08 14:55:37 -04:00
m0duspwnens
9aaa33c224 fix allowed_states logic in playbook config 2023-05-08 14:51:10 -04:00
weslambert
a13e6257c3 Don't read from 'known_hosts.log', 'known_services.log', or 'ntp.log' 2023-05-08 14:38:55 -04:00
m0duspwnens
ef18cb3704 top and allow_states changes for playbook 2023-05-08 14:12:46 -04:00
m0duspwnens
d5c7eec4ef enabled false by default, enabled via pillar in so-minion 2023-05-08 13:43:53 -04:00
m0duspwnens
a2c444e03b enabled/disable playbook in ui 2023-05-08 13:43:08 -04:00
Jason Ertel
40c3f9a156 Merge branch '2.4/dev' into kilo 2023-05-08 12:19:00 -04:00
Jason Ertel
bd23d1ab7b implement selective rate limiting 2023-05-08 12:18:46 -04:00
weslambert
a1e0041b14 Merge pull request #10287 from Security-Onion-Solutions/fix/strelka_ignore_yara_rules_2.4
Ignore "expl_outlook_cve_2023_23397.yar" and "gen_mal_3cx_compromise_mar23.yar" since they are causing problems with YARA compilation
2023-05-08 11:58:17 -04:00
weslambert
7483dbf442 Merge pull request #10304 from Security-Onion-Solutions/fix/kibana_pivot_to_pcap_url_2.4
Surround _id field in double quotes to prevent errors associated with values beginning with a hyphen
2023-05-08 11:55:35 -04:00
Wes
0f30e787b3 Surround _id field in double quotes to prevent errors associated with values beginning with a hyphen 2023-05-08 15:34:35 +00:00
m0duspwnens
5d50dbb69e enabled/disable zeek 2023-05-08 10:12:32 -04:00
Mike Reeves
867ea5a1ac Merge pull request #10298 from Security-Onion-Solutions/dockerbinds
Add custom volume binds to all containers
2023-05-08 09:48:45 -04:00
Doug Burks
52cfc59113 Merge pull request #10300 from Security-Onion-Solutions/dougburks-patch-2
FIX: Improve soup's local file modification logic #8972
2023-05-08 09:47:57 -04:00
Mike Reeves
789eafa8c2 Fix string entry 2023-05-08 09:45:08 -04:00
Doug Burks
ed712477d6 FIX: Improve soup's local file modification logic #8972 2023-05-08 09:43:20 -04:00
Mike Reeves
e3cb0a9953 Fix string entry 2023-05-08 09:35:07 -04:00
m0duspwnens
743bbfea35 add zeek.enabled to zeek annotation file 2023-05-05 17:09:01 -04:00
m0duspwnens
e8a5a5bffb import GLOBALS 2023-05-05 16:44:46 -04:00
m0duspwnens
a97fa9675b enable/disable zeek in ui 2023-05-05 16:33:59 -04:00
Mike Reeves
2418d9a096 Add volume mounts 2023-05-05 16:01:23 -04:00
m0duspwnens
2a8ed24045 import GLOBALS 2023-05-05 15:35:04 -04:00
Mike Reeves
f1c91e91b1 Remove port bindings from logstash config section 2023-05-05 15:10:21 -04:00
m0duspwnens
5405bc4e20 handle import node and merge with 2.4/dev 2023-05-05 14:41:26 -04:00
m0duspwnens
47a580d110 fix enabled and disable steno in ui 2023-05-05 13:59:52 -04:00
Mike Reeves
61a43f7df5 Merge pull request #10233 from Security-Onion-Solutions/mkrfixes
Several Fixes
2023-05-05 13:52:56 -04:00
Mike Reeves
21ffcbf2fd Update so-setup 2023-05-05 13:16:45 -04:00
Mike Reeves
563c0631ba Update so-functions 2023-05-05 13:01:40 -04:00
Mike Reeves
77cbf35625 Update so-functions 2023-05-05 11:26:10 -04:00
Mike Reeves
d7972032e4 Update init.sls 2023-05-05 10:33:11 -04:00
Mike Reeves
f6dcefe0f8 Update so-user 2023-05-05 09:34:33 -04:00
Mike Reeves
d5a1406095 Update so-user 2023-05-05 09:15:52 -04:00
Josh Patterson
3d3be6bd29 Merge pull request #10290 from Security-Onion-Solutions/ui/logstash
UI/logstash
2023-05-05 09:01:57 -04:00
m0duspwnens
52fec5fef0 Merge remote-tracking branch 'origin/mkrfixes' into ui/logstash 2023-05-05 09:00:23 -04:00
m0duspwnens
ddb776c80e add redis pillars to searchnode. move redis scripts with jinja to sbin_jinja 2023-05-04 17:26:18 -04:00
Mike Reeves
469258ee5e Update init.sls 2023-05-04 16:46:54 -04:00
Mike Reeves
4fec2a18a5 Update so-functions 2023-05-04 16:26:40 -04:00
weslambert
c7ed29dfa8 Ignore "expl_outlook_cve_2023_23397.yar" and "gen_mal_3cx_compromise_mar23.yar" since they are causing problems with YARA compilation 2023-05-04 16:16:06 -04:00
Mike Reeves
80cbe5f6e8 Update so-functions 2023-05-04 15:45:05 -04:00
Mike Reeves
a64eb0ba97 Update so-setup 2023-05-04 15:30:44 -04:00
Josh Patterson
dbb1b82e1b Merge pull request #10285 from Security-Onion-Solutions/ui/logstash
source from sbin_jinja and exlude pat
2023-05-04 15:14:47 -04:00
m0duspwnens
f34627f709 source from sbin_jinja and exlude pat 2023-05-04 15:13:42 -04:00
Josh Patterson
59451fc4d0 Merge pull request #10284 from Security-Onion-Solutions/ui/logstash
remove extra " from so-elasticsearch-roles-load
2023-05-04 15:02:34 -04:00
m0duspwnens
dc77b20723 remove extra " from so-elasticsearch-roles-load 2023-05-04 14:54:37 -04:00
Josh Patterson
51869ce5b2 Merge pull request #10282 from Security-Onion-Solutions/ui/logstash
UI/logstash
2023-05-04 13:55:28 -04:00
m0duspwnens
98705608a6 Merge remote-tracking branch 'origin/mkrfixes' into ui/logstash 2023-05-04 13:53:55 -04:00
Mike Reeves
8055088d25 Fix some errors 2023-05-04 13:35:44 -04:00
Mike Reeves
d0cfaaeb26 Fix some errors 2023-05-04 13:28:11 -04:00
Mike Reeves
fbacfce0e4 Fix some errors 2023-05-04 13:18:08 -04:00
m0duspwnens
082704ce1f logstash jinja for ui 2023-05-04 13:07:07 -04:00
m0duspwnens
71b6311edc add logstash.nodes to pillar top 2023-05-04 13:05:16 -04:00
Mike Reeves
7e71c60334 Fix some errors 2023-05-04 12:57:35 -04:00
Mike Reeves
c5c2600799 Fix some errors 2023-05-04 12:56:04 -04:00
Josh Brower
c6c3cc82e4 Merge pull request #10281 from Security-Onion-Solutions/2.4/airgapfix
Reenable Elastic Package Registry - all managers
2023-05-04 12:25:00 -04:00
Josh Brower
b17b68034e Reenable Elastic Package Registry - all managers 2023-05-04 12:19:45 -04:00
Mike Reeves
cbd1c05929 Sbin Changes 2023-05-04 10:36:03 -04:00
m0duspwnens
b14d33ced8 add logstash jinja for ui changes 2023-05-03 15:22:03 -04:00
Mike Reeves
a5b1660778 Fix firewall changes 2023-05-03 14:12:32 -04:00
Mike Reeves
d5c4a2887e Fix annotations and defaults for logstash 2023-05-03 13:37:06 -04:00
Josh Brower
b4b84038ed Merge pull request #10277 from Security-Onion-Solutions/2.4/package-registry
Reenable Elastic Package Registry
2023-05-03 12:57:21 -04:00
Josh Patterson
85ce0bb472 Merge pull request #10274 from Security-Onion-Solutions/ui/firewall
UI/firewall
2023-05-03 12:44:18 -04:00
m0duspwnens
b0bd64bc10 define and assign elastic_agent_update port 2023-05-03 12:40:56 -04:00
Josh Brower
17dd21703d Reenable Elastic Package Registry 2023-05-03 12:08:46 -04:00
m0duspwnens
767c922083 add idh to firewall annotation 2023-05-03 11:55:29 -04:00
Josh Brower
a57ba7e35d Merge pull request #10273 from Security-Onion-Solutions/2.4/fleet-airgap
Fleet Airgap - Phase 1
2023-05-03 11:24:52 -04:00
Josh Brower
81c1678ec7 Merge branch '2.4/dev' into 2.4/fleet-airgap 2023-05-03 11:19:57 -04:00
m0duspwnens
1593da4597 idh services are no longer selected in setup 2023-05-03 11:05:21 -04:00
m0duspwnens
8359f1983c idh firewall 2023-05-03 10:53:13 -04:00
Josh Brower
87a20ffede Refactor Wrapper gen script 2023-05-03 10:44:46 -04:00
m0duspwnens
c597766390 assign firewall pillars to * in top 2023-05-03 10:17:45 -04:00
Mike Reeves
3d10a60502 Fix annotations and defaults for logstash 2023-05-03 10:01:44 -04:00
Mike Reeves
220c534ad4 Fix annotations and defaults for logstash 2023-05-03 09:32:03 -04:00
Mike Reeves
c7604e893e Fix annotations and defaults for logstash 2023-05-03 09:17:37 -04:00
Josh Brower
b56486d88e Set Elastic Agent Artifact Registry URL 2023-05-03 08:55:29 -04:00
Josh Brower
c99f19251b More visibility 2023-05-02 17:04:41 -04:00
Josh Brower
544fa824ea Initial cut for Artifact Registry 2023-05-02 14:17:59 -04:00
Mike Reeves
dd034edad6 Fix some files 2023-05-02 13:12:14 -04:00
Mike Reeves
2419cf86ee Fix some files 2023-05-02 12:41:49 -04:00
m0duspwnens
61f9573ace Merge remote-tracking branch 'origin/2.4/dev' into ui/firewall 2023-05-02 12:21:09 -04:00
Mike Reeves
7595072e85 Fix some files 2023-05-02 12:15:05 -04:00
Mike Reeves
e60e21d9ff Move files out of common 2023-05-02 09:40:02 -04:00
Jason Ertel
b46a5c4b2a Merge pull request #10267 from Security-Onion-Solutions/kilo
more detection improvements
2023-05-02 08:17:09 -04:00
Jason Ertel
40ff2677c4 more detection improvements 2023-05-02 07:57:49 -04:00
m0duspwnens
80b40503fb no more plural roles, update so-firewall-minion 2023-05-01 17:28:16 -04:00
m0duspwnens
6a501efa75 remove unneeded imports 2023-05-01 16:55:16 -04:00
m0duspwnens
1f6463a9bb rework so-firewall to work with pillar files 2023-05-01 16:49:06 -04:00
Mike Reeves
2d4f4791e0 Move files out of common 2023-05-01 15:21:31 -04:00
Mike Reeves
102906f5dd Change to new repo layout 2023-05-01 13:39:24 -04:00
Jason Ertel
6c151d3ebd Merge pull request #10260 from Security-Onion-Solutions/kilo
simplify cloud detection
2023-05-01 11:26:34 -04:00
Jason Ertel
17e6f5b899 simplify cloud detection 2023-05-01 11:06:00 -04:00
Mike Reeves
a38495ce39 Fix pillar top for firewall 2023-05-01 10:40:36 -04:00
Mike Reeves
38629a7676 fix defaults for logstash 2023-05-01 09:55:16 -04:00
m0duspwnens
9a4ae2b832 start with customhostgroup0 2023-04-28 16:44:02 -04:00
m0duspwnens
3fdcb92dfe dont apply firewall.soc state anymore for manager highstate 2023-04-28 15:33:54 -04:00
m0duspwnens
725f5414ba fw rework for ui, still need to add idh to map 2023-04-28 15:30:18 -04:00
Jason Ertel
73aceb9697 Merge pull request #10251 from Security-Onion-Solutions/kilo
Kilo
2023-04-28 14:44:25 -04:00
Jason Ertel
03c89a02ad Add privileged session config option to kratos config UI 2023-04-28 14:01:19 -04:00
Jason Ertel
666d4ea260 Add privileged session config option to kratos config UI 2023-04-28 13:56:28 -04:00
Jason Ertel
4c58aa2ccf Add privileged session config option to kratos config UI 2023-04-28 13:14:30 -04:00
Mike Reeves
26619e5f8d Merge pull request #10245 from Security-Onion-Solutions/2.4/Fix_zeek_idstools
2.4/fix zeek idstools
2023-04-28 09:38:08 -04:00
bryant-treacle
57d90a62f7 Update soc_zeek.yaml 2023-04-27 16:21:41 -04:00
bryant-treacle
a8b8a1d0b7 Update soc_idstools.yaml 2023-04-27 15:32:37 -04:00
Mike Reeves
e4375a6568 regex for hostgroups 2023-04-27 15:30:59 -04:00
Mike Reeves
b8f9a9a311 regex for hostgroups 2023-04-27 15:08:01 -04:00
Mike Reeves
3d7f2bc691 Fix annotations and file locations 2023-04-27 13:23:53 -04:00
Mike Reeves
e799edaf49 Fix globals order 2023-04-26 15:54:16 -04:00
Mike Reeves
be003f7ee4 Merge branch '2.4/dev' of https://github.com/Security-Onion-Solutions/securityonion into mkrfixes 2023-04-26 15:50:47 -04:00
Mike Reeves
868cb8183c Fix the top file 2023-04-26 14:15:34 -04:00
Mike Reeves
b3f94961ea Fix Kibana and friends 2023-04-26 13:30:23 -04:00
bryant-treacle
12120e94c8 Update soc_idstools.yaml 2023-04-26 09:32:08 -04:00
bryant-treacle
49a60bac76 Update soc_idstools.yaml 2023-04-26 08:49:04 -04:00
bryant-treacle
f07f0775ac Update top.sls 2023-04-26 08:30:28 -04:00
bryant-treacle
e93e58fedb Update node.cfg.jinja 2023-04-26 08:28:40 -04:00
Jason Ertel
8459054ff8 Merge pull request #10220 from Security-Onion-Solutions/kilo
timeout more quickly on aws imdsv2 detection
2023-04-26 07:56:22 -04:00
Jason Ertel
43ec897397 timeout more quickly on aws imdsv2 detection 2023-04-26 07:53:07 -04:00
Mike Reeves
4b73f859d1 don't sync the repo 2x 2023-04-25 15:33:08 -04:00
Jason Ertel
969cf25818 Merge pull request #10199 from Security-Onion-Solutions/jertel/imdsv2
Detect cloud install on forced imdsv2 instances
2023-04-24 16:33:56 -04:00
Jason Ertel
e25bbd8a0d Detect cloud install on forced imdsv2 instances 2023-04-24 16:19:20 -04:00
Mike Reeves
5b11c41434 Merge pull request #10197 from Security-Onion-Solutions/TOoSmOotH-patch-1
Update VERSION
2023-04-24 13:40:36 -04:00
Mike Reeves
99f21ce46f Update VERSION 2023-04-24 13:39:51 -04:00
Mike Reeves
9dc31b6db4 Merge pull request #10193 from Security-Onion-Solutions/2.4/dev
2.4.1
2023-04-24 13:29:45 -04:00
Mike Reeves
083d96fab2 Merge pull request #10192 from Security-Onion-Solutions/2.4.1
Update VERIFY_ISO.md
2023-04-24 11:41:04 -04:00
Mike Reeves
f21e717dcd Update README.md 2023-04-24 11:39:39 -04:00
Mike Reeves
87e9d2997b Update VERIFY_ISO.md 2023-04-24 11:37:35 -04:00
Josh Patterson
288b5ac4d2 Merge pull request #10184 from Security-Onion-Solutions/2.4/hsschedule
rename highstate schedule
2023-04-24 09:34:11 -04:00
m0duspwnens
533c3b7569 rename highstate schedule 2023-04-24 09:31:32 -04:00
weslambert
32874d2e9d Merge pull request #10175 from Security-Onion-Solutions/fix/setup_docker_image_display_and_log
Display output and write to a log for Docker image operations during setup
2023-04-20 17:15:09 -04:00
Wes
fca7753f73 Display output and write to log for Docker image downloads 2023-04-20 20:56:04 +00:00
Doug Burks
fcdb02d61e Merge pull request #10174 from Security-Onion-Solutions/dougburks-patch-1
FIX: Overview Customization link #10173
2023-04-20 16:28:01 -04:00
Doug Burks
4dcc79d245 FIX: Overview Customization link #10173 2023-04-20 16:26:51 -04:00
weslambert
6c7b4e5492 Merge pull request #10166 from Security-Onion-Solutions/fix/elasticsearch_curl_config
Don't distribute curl configuration to nodes that don't need it
2023-04-20 08:47:47 -04:00
Wes
a341f1b7b7 Don't distribute curl configuration to nodes that don't need it 2023-04-20 12:31:50 +00:00
weslambert
01bd3545d0 Merge pull request #10162 from Security-Onion-Solutions/fix/elastic_agent_metadata
Rename @metadata to metadata to ensure it's not lost between Logstash pipelines
2023-04-19 16:25:01 -04:00
Wes
d823d5dcc9 Rename @metadata to metadata to ensure it's not lost between Logstash pipelines 2023-04-19 20:17:10 +00:00
Josh Patterson
9fed2ac616 Merge pull request #10159 from Security-Onion-Solutions/ui/globals
fix globals being changed via ui
2023-04-19 12:22:42 -04:00
m0duspwnens
d5ab8ff191 create the local global pillar directory 2023-04-19 11:44:03 -04:00
m0duspwnens
2b28283095 Merge remote-tracking branch 'origin/2.4/dev' into ui/globals 2023-04-19 11:23:29 -04:00
Josh Brower
499b889b56 Merge pull request #10158 from Security-Onion-Solutions/2.4/fleet
Gen installers at the end setup
2023-04-19 11:12:22 -04:00
Josh Brower
aa5063c5df Gen installers at the end setup 2023-04-19 11:11:08 -04:00
m0duspwnens
9f07388fa4 fix global location for fleet node 2023-04-19 10:47:08 -04:00
m0duspwnens
cd674947bb Merge remote-tracking branch 'origin/2.4/dev' into ui/globals 2023-04-19 10:45:56 -04:00
m0duspwnens
976ad4152d move soc_global and adv_global pillar file under pillar/global/ 2023-04-19 10:44:02 -04:00
Josh Brower
2633f348ac Merge pull request #10157 from Security-Onion-Solutions/2.4/fleet
Fix cert gen
2023-04-19 10:25:24 -04:00
Josh Brower
1ab72e9288 Fix cert gen 2023-04-19 10:23:13 -04:00
Josh Brower
ef92fba867 Merge pull request #10156 from Security-Onion-Solutions/2.4/fleet
2.4/fleet
2023-04-19 10:06:03 -04:00
Josh Brower
36c96c4beb Remove dep vars 2023-04-19 10:02:24 -04:00
Josh Brower
d79ad53daf Merge pull request #10153 from Security-Onion-Solutions/fleet-sa
FEATURE: Dedicated Fleet Node
2023-04-19 09:12:30 -04:00
Josh Brower
4c4b873eca Add integrations and cleanup 2023-04-19 09:04:33 -04:00
Josh Patterson
a062939705 Merge pull request #10152 from Security-Onion-Solutions/issue/10050
Issue/10050
2023-04-18 11:58:04 -04:00
Jason Ertel
3f14885539 Merge pull request #10151 from Security-Onion-Solutions/kilo
avoid docker and lo nics getting used by test profiles
2023-04-18 11:56:35 -04:00
Jason Ertel
393077ba9e avoid docker and lo nics getting used by test profiles 2023-04-18 11:43:24 -04:00
m0duspwnens
b0f9585da1 Merge remote-tracking branch 'origin/2.4/dev' into issue/10050 2023-04-18 11:31:00 -04:00
m0duspwnens
7c8ba04820 set file limit for zeek container 2023-04-18 11:30:39 -04:00
Josh Brower
31f83c6dee Re-enabled Fleet Setup during setup 2023-04-17 15:00:51 -04:00
Josh Brower
8cccaef664 mkdirs as needed 2023-04-17 12:28:07 -04:00
Josh Brower
1944d09978 Logstash certs fixup 2023-04-17 11:34:57 -04:00
Josh Brower
a7d282b412 Firewall fixup 2023-04-15 18:33:44 -04:00
Jason Ertel
aade62491c Merge pull request #10132 from Security-Onion-Solutions/kilo
fix log dir
2023-04-14 16:58:14 -04:00
Jason Ertel
b901555793 fix log dir 2023-04-14 16:56:40 -04:00
Josh Patterson
debe146dcf Merge pull request #10131 from Security-Onion-Solutions/m0duspwnens-patch-1
USER=root no longer needed for so-status cron
2023-04-14 16:23:27 -04:00
Josh Patterson
c8ef8cc88e USER=root no longer needed for so-status cron 2023-04-14 16:18:48 -04:00
Jason Ertel
9bd176621d Merge pull request #10130 from Security-Onion-Solutions/kilo
detect root using id command
2023-04-14 16:17:44 -04:00
Jason Ertel
05baaacc83 detect root using id command 2023-04-14 16:15:39 -04:00
Jason Ertel
9bc44c122f Merge pull request #10129 from Security-Onion-Solutions/kilo
wrong and
2023-04-14 12:46:11 -04:00
Jason Ertel
1fdd8acd0c wrong and 2023-04-14 12:35:32 -04:00
Josh Brower
92a6eac976 fix EA wrapper gen 2023-04-14 12:09:18 -04:00
Jason Ertel
dc227df229 Merge pull request #10128 from Security-Onion-Solutions/kilo
Skip raid state for cloud images
2023-04-14 10:31:17 -04:00
Jason Ertel
ff35a58f3f Skip raid state for cloud images 2023-04-14 10:24:54 -04:00
Josh Patterson
64fde6b02e Merge pull request #10124 from Security-Onion-Solutions/2.4/ubuntu
2.4/ubuntu
2023-04-13 16:35:53 -04:00
m0duspwnens
1047462898 add identifiers for all cron.present 2023-04-13 16:25:47 -04:00
m0duspwnens
76ba89c356 fix so-status cron to work with ubuntu 2023-04-13 16:01:43 -04:00
weslambert
f3b4ee6a0b Merge pull request #10121 from Security-Onion-Solutions/fix/elasticsearch_deletion_improvements
Simplify deletion logic and add stderr and stdout logging within script
2023-04-13 11:10:50 -04:00
Wes
d6421ee7cc Simplify deletion logic and add stderr and stdout logging within script 2023-04-13 15:04:16 +00:00
Doug Burks
148ef5833e Merge pull request #10120 from Security-Onion-Solutions/2.4/fix-suricata-dns
FIX: Suricata DNS A and CNAME parsing #10117
2023-04-13 11:00:24 -04:00
Doug Burks
a67cbb3276 FIX: Suricata DNS A and CNAME parsing #10117 2023-04-13 10:56:17 -04:00
m0duspwnens
0485c83388 Merge remote-tracking branch 'origin/2.4/dev' into 2.4/ubuntu 2023-04-13 09:10:58 -04:00
Jason Ertel
a8d3363a6f Merge pull request #10115 from Security-Onion-Solutions/kilo
discover appliance model grain during setup
2023-04-12 19:12:45 -04:00
Jason Ertel
dba7b84adb discover appliance model grain during setup 2023-04-12 19:02:04 -04:00
Josh Brower
2567ceea74 Fix path 2023-04-12 16:51:40 -04:00
Josh Brower
4ec31dbf35 Refactoring Fleet setup redux 2023-04-12 16:40:28 -04:00
m0duspwnens
e4e326cd06 limit whiptail install options for ubuntu 2023-04-12 15:44:42 -04:00
m0duspwnens
0d17f4f486 python modules for filecheck 2023-04-12 14:38:21 -04:00
Mike Reeves
7838393b9f Merge pull request #10112 from Security-Onion-Solutions/TOoSmOotH-patch-3
Update defaults.yaml
2023-04-12 10:32:54 -04:00
m0duspwnens
c90c72dbba provide info when running apt-get update and upgrade 2023-04-12 10:17:13 -04:00
Mike Reeves
04eb73ac27 Update defaults.yaml 2023-04-12 10:06:23 -04:00
m0duspwnens
de082f6100 install chrony in ntp state 2023-04-12 09:26:04 -04:00
weslambert
2c44c8e468 Merge pull request #10108 from Security-Onion-Solutions/fix/elastic_clear
Update Elastic clear utility script
2023-04-11 17:24:21 -04:00
Wes
06b60ca96b Don't stop Elastic Fleet for now 2023-04-11 21:11:12 +00:00
Wes
4d64a9777e Update Elastic clear utility script 2023-04-11 21:06:20 +00:00
m0duspwnens
26a12477ac python3-rich for ubuntu and chrony pkg for all 2023-04-11 15:36:57 -04:00
weslambert
43447e5df5 Merge pull request #10106 from Security-Onion-Solutions/fix/kibana_16.04_dashboards_remove
Remove Security Onion 16.04 dashboards
2023-04-11 14:41:12 -04:00
m0duspwnens
c66f595666 unsure prereqs for sensor 2023-04-11 13:48:59 -04:00
m0duspwnens
ad64b873c0 ubuntu changes 2023-04-11 12:58:40 -04:00
Wes
c6be0a48a1 Remove Security Onion 16.04 dashboards 2023-04-11 15:05:41 +00:00
weslambert
5eb0364a98 Merge pull request #10105 from Security-Onion-Solutions/fix/elasticsearch_template_loading_so-searchnode
Only load pipelines and templates if the node role is not 'so-searchnode'
2023-04-11 10:45:52 -04:00
Wes
8d0074c712 Only load pipelines and tempaltes if the node role is not 'so-searchnode' 2023-04-11 14:15:21 +00:00
Jason Ertel
3883a89212 Merge pull request #10102 from Security-Onion-Solutions/kilo
elastic-fleet typo fix; remote dev enhancement
2023-04-10 14:09:20 -04:00
Jason Ertel
cfa61a6c26 correct salt state 2023-04-10 14:04:19 -04:00
Jason Ertel
7f28cdd2a3 provide means for using salt-relay with local development against remove VMs 2023-04-10 14:04:03 -04:00
m0duspwnens
9ea3eaafae fix merge conflict 2023-04-10 09:09:43 -04:00
m0duspwnens
16249cc80d salt install for ubuntu 2023-04-10 09:06:55 -04:00
m0duspwnens
2589670755 set forceType 2023-04-06 15:16:04 -04:00
Josh Brower
17bc96c3b3 Refactoring Fleet setup 2023-04-06 13:21:19 -04:00
Josh Patterson
b87ee4904f Merge pull request #10096 from Security-Onion-Solutions/salt3006rc3
only install salt-minion on non manager
2023-04-06 11:07:26 -04:00
m0duspwnens
7519a8c39d only install salt-minion on non manager 2023-04-06 10:20:17 -04:00
m0duspwnens
df4bf95b93 sort local.zeek so redef is last 2023-04-06 09:54:59 -04:00
m0duspwnens
602e00058a Merge remote-tracking branch 'remotes/origin/2.4/dev' into issue/10050 2023-04-06 09:13:27 -04:00
Josh Patterson
6aba7b6bcf Merge pull request #10091 from Security-Onion-Solutions/salt3006rc3
Salt3006rc3
2023-04-05 16:42:36 -04:00
Josh Patterson
ff7aaa95e1 Merge branch '2.4/dev' into salt3006rc3 2023-04-05 16:38:41 -04:00
m0duspwnens
f166919160 use dockerpy 5.0.2 2023-04-05 15:35:48 -04:00
m0duspwnens
aecbfd28ee install salt module deps from local 2023-04-05 13:08:50 -04:00
m0duspwnens
b24e3ff6c4 add requests 2.25.1 2023-04-04 16:59:35 -04:00
Josh Brower
cda67b2894 Ded Fleet Node - checkpoint 2023-04-04 16:11:22 -04:00
m0duspwnens
6040c5062b include whl files for salt module dependencies 2023-04-04 16:08:35 -04:00
m0duspwnens
d83266c546 remove unrecognized keyword arguments 2023-04-04 09:58:44 -04:00
m0duspwnens
6039a1430e x509 changes for salt 3006 2023-04-04 08:55:10 -04:00
Josh Brower
c2d4e870c8 Fixup Elastic Fleet 2023-04-03 16:50:34 -04:00
Josh Patterson
1faceddc40 Merge pull request #10085 from Security-Onion-Solutions/saltrc3key
Saltrc3key
2023-04-03 11:27:04 -04:00
Josh Patterson
471f467e63 Merge pull request #10084 from Security-Onion-Solutions/saltrc3key
add new salt key since rc3 has been added to repo
2023-04-03 11:23:57 -04:00
m0duspwnens
a0d8be4dc6 add new salt key since rc3 has been added to repo 2023-04-03 10:44:44 -04:00
Josh Brower
035451cdb8 Cleanup conflict leftovers 2023-04-03 07:30:25 -04:00
Josh Brower
af392681e3 Merge remote-tracking branch 'remotes/origin/2.4/dev' into fleet-sa 2023-04-03 07:27:04 -04:00
Josh Brower
a0bb6a700a Merge pull request #10082 from Security-Onion-Solutions/2.4/elasticagent8.7
Update elastic agent binaries - 8.7.0
2023-03-31 18:40:43 -04:00
Josh Brower
ad000550a6 Update elastic agent binaries - 8.7.0 2023-03-31 16:46:24 -04:00
m0duspwnens
0fc6a74b6d update salt versions on defaults 2023-03-31 15:02:40 -04:00
m0duspwnens
0b96635bcc salt3006rc3 2023-03-31 14:52:40 -04:00
Doug Burks
5b2e39f80d Merge pull request #10078 from Security-Onion-Solutions/2.4/fix-elasticsearch-roles
FIX: SOC only displaying data for users assigned the superuser role #10068
2023-03-31 09:26:58 -04:00
Doug Burks
a8b6470a14 Update limited-auditor.json 2023-03-31 09:22:42 -04:00
Doug Burks
e945f1c38f Update limited-analyst.json 2023-03-31 09:22:28 -04:00
Doug Burks
d0dff9572d Update auditor.json 2023-03-31 09:22:15 -04:00
Doug Burks
68e8c159ce Update analyst.json 2023-03-31 09:21:59 -04:00
Josh Brower
a8038c90ce Merge pull request #10077 from Security-Onion-Solutions/2.4/Elastic8.7.0
2.4/elastic8.7.0
2023-03-31 08:57:20 -04:00
Josh Brower
91c990e30a UPGRADE: Elastic 8.7.0 2023-03-31 08:52:43 -04:00
Josh Brower
b6b49c876b UPGRADE: Elastic to 8.7.0 2023-03-31 08:51:51 -04:00
Doug Burks
cf98a95dd1 Merge pull request #10072 from Security-Onion-Solutions/2.4/so-user-formatting
fix formatting in so-user
2023-03-30 17:03:29 -04:00
Doug Burks
921e79c56c fix formatting in so-user 2023-03-30 16:55:30 -04:00
weslambert
2cfbf30f05 Merge pull request #10070 from Security-Onion-Solutions/fix/cloud_test
Fix cloud sniffing interface configuration
2023-03-30 14:41:59 -04:00
weslambert
3e08506c4e Fix syntax for $is_cloud test 2023-03-30 13:26:36 -04:00
Wes
d4cba6908e Use dynamic interface value instead of explicitly setting it to 'bond0' 2023-03-30 16:17:34 +00:00
Wes
dfd3456343 Add logging for cloud detection and interface settings 2023-03-30 16:15:41 +00:00
Wes
3cd1598067 Only perform bond interface operations if it is not a cloud installation 2023-03-30 16:11:50 +00:00
m0duspwnens
1be86cdf8e issue 10050 and issue 10062 2023-03-29 17:21:40 -04:00
Mike Reeves
bdae8d5017 Merge pull request #10042 from Security-Onion-Solutions/TOoSmOotH-patch-2
Update VERSION
2023-03-28 16:21:50 -04:00
Mike Reeves
d5e17da9d3 Update VERSION 2023-03-28 16:20:40 -04:00
Josh Brower
e4b10aa28c Remove endif 2023-02-01 15:47:26 -05:00
Josh Brower
1c1b079058 Change default output 2023-02-01 15:42:05 -05:00
Josh Brower
967a0807ad Fix typo 2023-02-01 09:16:34 -05:00
Josh Brower
b8d8a5fd6b Remove default outputs 2023-01-31 17:02:41 -05:00
Josh Brower
18a54b86f4 More fixes 2023-01-31 14:57:39 -05:00
Josh Brower
17af095e14 Fix firewall 2023-01-27 11:28:54 -05:00
Josh Brower
a71cbcfc9b Pull in upstream changes 2023-01-27 07:53:53 -05:00
Josh Brower
29aa6dceed Add logstash 2023-01-27 07:49:21 -05:00
Josh Brower
81ee333b07 Initial support - Elastic Fleet Node 2023-01-24 13:36:30 -05:00
566 changed files with 15905 additions and 9773 deletions

View File

@@ -1,6 +1,6 @@
## Security Onion 2.4 ## Security Onion 2.4 Beta 3
Security Onion 2.4 is here! Security Onion 2.4 Beta 3 is here!
## Screenshots ## Screenshots

View File

@@ -1,47 +1,47 @@
### 2.3.120-20220425 ISO image built on 2022/04/25 ### 2.4.2-20230531 ISO image built on 2023/05/31
### Download and Verify ### Download and Verify
2.3.120-20220425 ISO image: 2.4.2-20230531 ISO image:
https://download.securityonion.net/file/securityonion/securityonion-2.3.120-20220425.iso https://download.securityonion.net/file/securityonion/securityonion-2.4.2-20230531.iso
MD5: C99729E452B064C471BEF04532F28556 MD5: EB861EFB7F7DA6FB418075B4C452E4EB
SHA1: 60BF07D5347C24568C7B793BFA9792E98479CFBF SHA1: 479A72DBB0633CB23608122F7200A24E2C3C3128
SHA256: CD17D0D7CABE21D45FA45E1CF91C5F24EB9608C79FF88480134E5592AFDD696E SHA256: B69C1AE4C576BBBC37F4B87C2A8379903421E65B2C4F24C90FABB0EAD6F0471B
Signature for ISO image: Signature for ISO image:
https://github.com/Security-Onion-Solutions/securityonion/raw/master/sigs/securityonion-2.3.120-20220425.iso.sig https://github.com/Security-Onion-Solutions/securityonion/raw/2.4/main/sigs/securityonion-2.4.2-20230531.iso.sig
Signing key: Signing key:
https://raw.githubusercontent.com/Security-Onion-Solutions/securityonion/master/KEYS https://raw.githubusercontent.com/Security-Onion-Solutions/securityonion/2.4/main/KEYS
For example, here are the steps you can use on most Linux distributions to download and verify our Security Onion ISO image. For example, here are the steps you can use on most Linux distributions to download and verify our Security Onion ISO image.
Download and import the signing key: Download and import the signing key:
``` ```
wget https://raw.githubusercontent.com/Security-Onion-Solutions/securityonion/master/KEYS -O - | gpg --import - wget https://raw.githubusercontent.com/Security-Onion-Solutions/securityonion/2.4/main/KEYS -O - | gpg --import -
``` ```
Download the signature file for the ISO: Download the signature file for the ISO:
``` ```
wget https://github.com/Security-Onion-Solutions/securityonion/raw/master/sigs/securityonion-2.3.120-20220425.iso.sig wget https://github.com/Security-Onion-Solutions/securityonion/raw/2.4/main/sigs/securityonion-2.4.2-20230531.iso.sig
``` ```
Download the ISO image: Download the ISO image:
``` ```
wget https://download.securityonion.net/file/securityonion/securityonion-2.3.120-20220425.iso wget https://download.securityonion.net/file/securityonion/securityonion-2.4.2-20230531.iso
``` ```
Verify the downloaded ISO image using the signature file: Verify the downloaded ISO image using the signature file:
``` ```
gpg --verify securityonion-2.3.120-20220425.iso.sig securityonion-2.3.120-20220425.iso gpg --verify securityonion-2.4.2-20230531.iso.sig securityonion-2.4.2-20230531.iso
``` ```
The output should show "Good signature" and the Primary key fingerprint should match what's shown below: The output should show "Good signature" and the Primary key fingerprint should match what's shown below:
``` ```
gpg: Signature made Mon 25 Apr 2022 08:20:40 AM EDT using RSA key ID FE507013 gpg: Signature made Wed 31 May 2023 05:01:41 PM EDT using RSA key ID FE507013
gpg: Good signature from "Security Onion Solutions, LLC <info@securityonionsolutions.com>" gpg: Good signature from "Security Onion Solutions, LLC <info@securityonionsolutions.com>"
gpg: WARNING: This key is not certified with a trusted signature! gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner. gpg: There is no indication that the signature belongs to the owner.
@@ -49,4 +49,4 @@ Primary key fingerprint: C804 A93D 36BE 0C73 3EA1 9644 7C10 60B7 FE50 7013
``` ```
Once you've verified the ISO image, you're ready to proceed to our Installation guide: Once you've verified the ISO image, you're ready to proceed to our Installation guide:
https://docs.securityonion.net/en/2.3/installation.html https://docs.securityonion.net/en/2.4/installation.html

View File

@@ -1 +1 @@
2.4.0 2.4.2

View File

@@ -1,42 +0,0 @@
logstash:
pipelines:
helix:
config:
- so/0010_input_hhbeats.conf
- so/1033_preprocess_snort.conf
- so/1100_preprocess_bro_conn.conf
- so/1101_preprocess_bro_dhcp.conf
- so/1102_preprocess_bro_dns.conf
- so/1103_preprocess_bro_dpd.conf
- so/1104_preprocess_bro_files.conf
- so/1105_preprocess_bro_ftp.conf
- so/1106_preprocess_bro_http.conf
- so/1107_preprocess_bro_irc.conf
- so/1108_preprocess_bro_kerberos.conf
- so/1109_preprocess_bro_notice.conf
- so/1110_preprocess_bro_rdp.conf
- so/1111_preprocess_bro_signatures.conf
- so/1112_preprocess_bro_smtp.conf
- so/1113_preprocess_bro_snmp.conf
- so/1114_preprocess_bro_software.conf
- so/1115_preprocess_bro_ssh.conf
- so/1116_preprocess_bro_ssl.conf
- so/1117_preprocess_bro_syslog.conf
- so/1118_preprocess_bro_tunnel.conf
- so/1119_preprocess_bro_weird.conf
- so/1121_preprocess_bro_mysql.conf
- so/1122_preprocess_bro_socks.conf
- so/1123_preprocess_bro_x509.conf
- so/1124_preprocess_bro_intel.conf
- so/1125_preprocess_bro_modbus.conf
- so/1126_preprocess_bro_sip.conf
- so/1127_preprocess_bro_radius.conf
- so/1128_preprocess_bro_pe.conf
- so/1129_preprocess_bro_rfb.conf
- so/1130_preprocess_bro_dnp3.conf
- so/1131_preprocess_bro_smb_files.conf
- so/1132_preprocess_bro_smb_mapping.conf
- so/1133_preprocess_bro_ntlm.conf
- so/1134_preprocess_bro_dce_rpc.conf
- so/8001_postprocess_common_ip_augmentation.conf
- so/9997_output_helix.conf.jinja

View File

@@ -4,6 +4,7 @@ logstash:
- 0.0.0.0:3765:3765 - 0.0.0.0:3765:3765
- 0.0.0.0:5044:5044 - 0.0.0.0:5044:5044
- 0.0.0.0:5055:5055 - 0.0.0.0:5055:5055
- 0.0.0.0:5056:5056
- 0.0.0.0:5644:5644 - 0.0.0.0:5644:5644
- 0.0.0.0:6050:6050 - 0.0.0.0:6050:6050
- 0.0.0.0:6051:6051 - 0.0.0.0:6051:6051

View File

@@ -1,8 +0,0 @@
logstash:
pipelines:
manager:
config:
- so/0011_input_endgame.conf
- so/0012_input_elastic_agent.conf
- so/9999_output_redis.conf.jinja

View File

@@ -1,8 +0,0 @@
logstash:
pipelines:
receiver:
config:
- so/0011_input_endgame.conf
- so/0012_input_elastic_agent.conf
- so/9999_output_redis.conf.jinja

View File

@@ -1,7 +0,0 @@
logstash:
pipelines:
search:
config:
- so/0900_input_redis.conf.jinja
- so/9805_output_elastic_agent.conf.jinja
- so/9900_output_endgame.conf.jinja

View File

@@ -1,44 +1,26 @@
base: base:
'*': '*':
- patch.needs_restarting - global.soc_global
- ntp.soc_ntp - global.adv_global
- ntp.adv_ntp
- logrotate
- docker.soc_docker - docker.soc_docker
- docker.adv_docker - docker.adv_docker
- firewall.soc_firewall
- firewall.adv_firewall
- influxdb.token
- logrotate.soc_logrotate
- logrotate.adv_logrotate
- nginx.soc_nginx
- nginx.adv_nginx
- node_data.ips
- ntp.soc_ntp
- ntp.adv_ntp
- patch.needs_restarting
- patch.soc_patch
- patch.adv_patch
- sensoroni.soc_sensoroni - sensoroni.soc_sensoroni
- sensoroni.adv_sensoroni - sensoroni.adv_sensoroni
- telegraf.soc_telegraf - telegraf.soc_telegraf
- telegraf.adv_telegraf - telegraf.adv_telegraf
- influxdb.token
- node_data.ips
'* and not *_eval and not *_import':
- logstash.nodes
'*_eval or *_heavynode or *_sensor or *_standalone or *_import':
- match: compound
- zeek
- bpf.soc_bpf
- bpf.adv_bpf
'*_managersearch or *_heavynode':
- match: compound
- logstash
- logstash.manager
- logstash.search
- logstash.soc_logstash
- logstash.adv_logstash
- elasticsearch.index_templates
- elasticsearch.soc_elasticsearch
- elasticsearch.adv_elasticsearch
'*_manager':
- logstash
- logstash.manager
- logstash.soc_logstash
- logstash.adv_logstash
- elasticsearch.index_templates
'*_manager or *_managersearch': '*_manager or *_managersearch':
- match: compound - match: compound
@@ -49,14 +31,19 @@ base:
- kibana.secrets - kibana.secrets
{% endif %} {% endif %}
- secrets - secrets
- soc_global
- adv_global
- manager.soc_manager - manager.soc_manager
- manager.adv_manager - manager.adv_manager
- idstools.soc_idstools - idstools.soc_idstools
- idstools.adv_idstools - idstools.adv_idstools
- logstash.nodes
- logstash.soc_logstash
- logstash.adv_logstash
- soc.soc_soc - soc.soc_soc
- soc.adv_soc - soc.adv_soc
- soctopus.soc_soctopus
- soctopus.adv_soctopus
- kibana.soc_kibana
- kibana.adv_kibana
- kratos.soc_kratos - kratos.soc_kratos
- kratos.adv_kratos - kratos.adv_kratos
- redis.soc_redis - redis.soc_redis
@@ -65,17 +52,31 @@ base:
- influxdb.adv_influxdb - influxdb.adv_influxdb
- elasticsearch.soc_elasticsearch - elasticsearch.soc_elasticsearch
- elasticsearch.adv_elasticsearch - elasticsearch.adv_elasticsearch
- elasticfleet.soc_elasticfleet
- elasticfleet.adv_elasticfleet
- elastalert.soc_elastalert
- elastalert.adv_elastalert
- backup.soc_backup - backup.soc_backup
- backup.adv_backup - backup.adv_backup
- firewall.soc_firewall - curator.soc_curator
- firewall.adv_firewall - curator.adv_curator
- soctopus.soc_soctopus
- soctopus.adv_soctopus
- minions.{{ grains.id }} - minions.{{ grains.id }}
- minions.adv_{{ grains.id }} - minions.adv_{{ grains.id }}
'*_sensor': '*_sensor':
- healthcheck.sensor - healthcheck.sensor
- soc_global - strelka.soc_strelka
- adv_global - strelka.adv_strelka
- zeek.soc_zeek
- zeek.adv_zeek
- bpf.soc_bpf
- bpf.adv_bpf
- pcap.soc_pcap
- pcap.adv_pcap
- suricata.soc_suricata
- suricata.adv_suricata
- minions.{{ grains.id }} - minions.{{ grains.id }}
- minions.adv_{{ grains.id }} - minions.adv_{{ grains.id }}
@@ -89,15 +90,27 @@ base:
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/kibana/secrets.sls') %} {% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/kibana/secrets.sls') %}
- kibana.secrets - kibana.secrets
{% endif %} {% endif %}
- soc_global
- kratos.soc_kratos - kratos.soc_kratos
- elasticsearch.soc_elasticsearch - elasticsearch.soc_elasticsearch
- elasticsearch.adv_elasticsearch - elasticsearch.adv_elasticsearch
- elasticfleet.soc_elasticfleet
- elasticfleet.adv_elasticfleet
- elastalert.soc_elastalert
- elastalert.adv_elastalert
- manager.soc_manager - manager.soc_manager
- manager.adv_manager - manager.adv_manager
- idstools.soc_idstools - idstools.soc_idstools
- idstools.adv_idstools - idstools.adv_idstools
- soc.soc_soc - soc.soc_soc
- soc.adv_soc
- soctopus.soc_soctopus
- soctopus.adv_soctopus
- kibana.soc_kibana
- kibana.adv_kibana
- strelka.soc_strelka
- strelka.adv_strelka
- curator.soc_curator
- curator.adv_curator
- kratos.soc_kratos - kratos.soc_kratos
- kratos.adv_kratos - kratos.adv_kratos
- redis.soc_redis - redis.soc_redis
@@ -106,15 +119,19 @@ base:
- influxdb.adv_influxdb - influxdb.adv_influxdb
- backup.soc_backup - backup.soc_backup
- backup.adv_backup - backup.adv_backup
- firewall.soc_firewall - zeek.soc_zeek
- firewall.adv_firewall - zeek.adv_zeek
- bpf.soc_bpf
- bpf.adv_bpf
- pcap.soc_pcap
- pcap.adv_pcap
- suricata.soc_suricata
- suricata.adv_suricata
- minions.{{ grains.id }} - minions.{{ grains.id }}
- minions.adv_{{ grains.id }} - minions.adv_{{ grains.id }}
'*_standalone': '*_standalone':
- logstash - logstash.nodes
- logstash.manager
- logstash.search
- logstash.soc_logstash - logstash.soc_logstash
- logstash.adv_logstash - logstash.adv_logstash
- elasticsearch.index_templates - elasticsearch.index_templates
@@ -126,7 +143,6 @@ base:
{% endif %} {% endif %}
- secrets - secrets
- healthcheck.standalone - healthcheck.standalone
- soc_global
- idstools.soc_idstools - idstools.soc_idstools
- idstools.adv_idstools - idstools.adv_idstools
- kratos.soc_kratos - kratos.soc_kratos
@@ -137,51 +153,81 @@ base:
- influxdb.adv_influxdb - influxdb.adv_influxdb
- elasticsearch.soc_elasticsearch - elasticsearch.soc_elasticsearch
- elasticsearch.adv_elasticsearch - elasticsearch.adv_elasticsearch
- elasticfleet.soc_elasticfleet
- elasticfleet.adv_elasticfleet
- elastalert.soc_elastalert
- elastalert.adv_elastalert
- manager.soc_manager - manager.soc_manager
- manager.adv_manager - manager.adv_manager
- soc.soc_soc - soc.soc_soc
- soc.adv_soc
- soctopus.soc_soctopus
- soctopus.adv_soctopus
- kibana.soc_kibana
- kibana.adv_kibana
- strelka.soc_strelka
- strelka.adv_strelka
- curator.soc_curator
- curator.adv_curator
- backup.soc_backup - backup.soc_backup
- backup.adv_backup - backup.adv_backup
- firewall.soc_firewall - zeek.soc_zeek
- firewall.adv_firewall - zeek.adv_zeek
- bpf.soc_bpf
- bpf.adv_bpf
- pcap.soc_pcap
- pcap.adv_pcap
- suricata.soc_suricata
- suricata.adv_suricata
- minions.{{ grains.id }} - minions.{{ grains.id }}
- minions.adv_{{ grains.id }} - minions.adv_{{ grains.id }}
'*_heavynode': '*_heavynode':
- elasticsearch.auth - elasticsearch.auth
- soc_global - logstash.nodes
- logstash.soc_logstash
- logstash.adv_logstash
- elasticsearch.soc_elasticsearch
- elasticsearch.adv_elasticsearch
- curator.soc_curator
- curator.adv_curator
- redis.soc_redis - redis.soc_redis
- redis.adv_redis
- zeek.soc_zeek
- zeek.adv_zeek
- bpf.soc_bpf
- bpf.adv_bpf
- pcap.soc_pcap
- pcap.adv_pcap
- suricata.soc_suricata
- suricata.adv_suricata
- strelka.soc_strelka
- strelka.adv_strelka
- minions.{{ grains.id }} - minions.{{ grains.id }}
- minions.adv_{{ grains.id }} - minions.adv_{{ grains.id }}
'*_idh': '*_idh':
- soc_global
- adv_global
- idh.soc_idh - idh.soc_idh
- idh.adv_idh - idh.adv_idh
- minions.{{ grains.id }} - minions.{{ grains.id }}
- minions.adv_{{ grains.id }} - minions.adv_{{ grains.id }}
'*_searchnode': '*_searchnode':
- logstash - logstash.nodes
- logstash.search
- logstash.soc_logstash - logstash.soc_logstash
- logstash.adv_logstash - logstash.adv_logstash
- elasticsearch.index_templates
- elasticsearch.soc_elasticsearch - elasticsearch.soc_elasticsearch
- elasticsearch.adv_elasticsearch - elasticsearch.adv_elasticsearch
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %} {% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %}
- elasticsearch.auth - elasticsearch.auth
{% endif %} {% endif %}
- redis.soc_redis - redis.soc_redis
- soc_global - redis.adv_redis
- adv_global
- minions.{{ grains.id }} - minions.{{ grains.id }}
- minions.adv_{{ grains.id }} - minions.adv_{{ grains.id }}
'*_receiver': '*_receiver':
- logstash - logstash.nodes
- logstash.receiver
- logstash.soc_logstash - logstash.soc_logstash
- logstash.adv_logstash - logstash.adv_logstash
{% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %} {% if salt['file.file_exists']('/opt/so/saltstack/local/pillar/elasticsearch/auth.sls') %}
@@ -189,8 +235,6 @@ base:
{% endif %} {% endif %}
- redis.soc_redis - redis.soc_redis
- redis.adv_redis - redis.adv_redis
- soc_global
- adv_global
- minions.{{ grains.id }} - minions.{{ grains.id }}
- minions.adv_{{ grains.id }} - minions.adv_{{ grains.id }}
@@ -206,11 +250,20 @@ base:
- kratos.soc_kratos - kratos.soc_kratos
- elasticsearch.soc_elasticsearch - elasticsearch.soc_elasticsearch
- elasticsearch.adv_elasticsearch - elasticsearch.adv_elasticsearch
- elasticfleet.soc_elasticfleet
- elasticfleet.adv_elasticfleet
- elastalert.soc_elastalert
- elastalert.adv_elastalert
- manager.soc_manager - manager.soc_manager
- manager.adv_manager - manager.adv_manager
- soc.soc_soc - soc.soc_soc
- soc_global - soc.adv_soc
- adv_global - soctopus.soc_soctopus
- soctopus.adv_soctopus
- kibana.soc_kibana
- kibana.adv_kibana
- curator.soc_curator
- curator.adv_curator
- backup.soc_backup - backup.soc_backup
- backup.adv_backup - backup.adv_backup
- kratos.soc_kratos - kratos.soc_kratos
@@ -219,11 +272,30 @@ base:
- redis.adv_redis - redis.adv_redis
- influxdb.soc_influxdb - influxdb.soc_influxdb
- influxdb.adv_influxdb - influxdb.adv_influxdb
- firewall.soc_firewall - zeek.soc_zeek
- firewall.adv_firewall - zeek.adv_zeek
- bpf.soc_bpf
- bpf.adv_bpf
- pcap.soc_pcap
- pcap.adv_pcap
- suricata.soc_suricata
- suricata.adv_suricata
- strelka.soc_strelka
- strelka.adv_strelka
- minions.{{ grains.id }} - minions.{{ grains.id }}
- minions.adv_{{ grains.id }} - minions.adv_{{ grains.id }}
'*_workstation': '*_fleet':
- backup.soc_backup
- backup.adv_backup
- logstash.nodes
- logstash.soc_logstash
- logstash.adv_logstash
- elasticfleet.soc_elasticfleet
- elasticfleet.adv_elasticfleet
- minions.{{ grains.id }}
- minions.adv_{{ grains.id }}
'*_desktop':
- minions.{{ grains.id }} - minions.{{ grains.id }}
- minions.adv_{{ grains.id }} - minions.adv_{{ grains.id }}

View File

@@ -3,16 +3,6 @@
# https://securityonion.net/license; you may not use this file except in compliance with the # https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0. # Elastic License 2.0.
{% set ZEEKVER = salt['pillar.get']('global:mdengine', '') %}
{% set PLAYBOOK = salt['pillar.get']('manager:playbook', '0') %}
{% set ELASTALERT = salt['pillar.get']('elastalert:enabled', True) %}
{% set ELASTICSEARCH = salt['pillar.get']('elasticsearch:enabled', True) %}
{% set KIBANA = salt['pillar.get']('kibana:enabled', True) %}
{% set LOGSTASH = salt['pillar.get']('logstash:enabled', True) %}
{% set CURATOR = salt['pillar.get']('curator:enabled', True) %}
{% set REDIS = salt['pillar.get']('redis:enabled', True) %}
{% set STRELKA = salt['pillar.get']('strelka:enabled', '0') %}
{% set ISAIRGAP = salt['pillar.get']('global:airgap', False) %} {% set ISAIRGAP = salt['pillar.get']('global:airgap', False) %}
{% import_yaml 'salt/minion.defaults.yaml' as saltversion %} {% import_yaml 'salt/minion.defaults.yaml' as saltversion %}
{% set saltversion = saltversion.salt.minion.version %} {% set saltversion = saltversion.salt.minion.version %}
@@ -35,6 +25,7 @@
'soc', 'soc',
'kratos', 'kratos',
'elasticfleet', 'elasticfleet',
'elastic-fleet-package-registry',
'firewall', 'firewall',
'idstools', 'idstools',
'suricata.manager', 'suricata.manager',
@@ -105,7 +96,8 @@
'schedule', 'schedule',
'tcpreplay', 'tcpreplay',
'docker_clean', 'docker_clean',
'elasticfleet' 'elasticfleet',
'elastic-fleet-package-registry'
], ],
'so-manager': [ 'so-manager': [
'salt.master', 'salt.master',
@@ -119,6 +111,7 @@
'soc', 'soc',
'kratos', 'kratos',
'elasticfleet', 'elasticfleet',
'elastic-fleet-package-registry',
'firewall', 'firewall',
'idstools', 'idstools',
'suricata.manager', 'suricata.manager',
@@ -137,6 +130,7 @@
'influxdb', 'influxdb',
'soc', 'soc',
'kratos', 'kratos',
'elastic-fleet-package-registry',
'elasticfleet', 'elasticfleet',
'firewall', 'firewall',
'manager', 'manager',
@@ -166,6 +160,7 @@
'influxdb', 'influxdb',
'soc', 'soc',
'kratos', 'kratos',
'elastic-fleet-package-registry',
'elasticfleet', 'elasticfleet',
'firewall', 'firewall',
'idstools', 'idstools',
@@ -191,6 +186,16 @@
'tcpreplay', 'tcpreplay',
'docker_clean' 'docker_clean'
], ],
'so-fleet': [
'ssl',
'telegraf',
'firewall',
'logstash',
'healthcheck',
'schedule',
'elasticfleet',
'docker_clean'
],
'so-receiver': [ 'so-receiver': [
'ssl', 'ssl',
'telegraf', 'telegraf',
@@ -202,27 +207,27 @@
], ],
}, grain='role') %} }, grain='role') %}
{% if (PLAYBOOK != 0) and grains.role in ['so-eval', 'so-manager', 'so-managersearch', 'so-standalone'] %} {% if grains.role in ['so-eval', 'so-manager', 'so-managersearch', 'so-standalone'] %}
{% do allowed_states.append('mysql') %} {% do allowed_states.append('mysql') %}
{% endif %} {% endif %}
{%- if ZEEKVER != 'SURICATA' and grains.role in ['so-sensor', 'so-eval', 'so-standalone', 'so-heavynode'] %} {%- if grains.role in ['so-sensor', 'so-eval', 'so-standalone', 'so-heavynode'] %}
{% do allowed_states.append('zeek') %} {% do allowed_states.append('zeek') %}
{%- endif %} {%- endif %}
{% if STRELKA and grains.role in ['so-sensor', 'so-eval', 'so-standalone', 'so-heavynode'] %} {% if grains.role in ['so-sensor', 'so-eval', 'so-standalone', 'so-heavynode'] %}
{% do allowed_states.append('strelka') %} {% do allowed_states.append('strelka') %}
{% endif %} {% endif %}
{% if ELASTICSEARCH and grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-searchnode', 'so-managersearch', 'so-heavynode', 'so-import'] %} {% if grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-searchnode', 'so-managersearch', 'so-heavynode', 'so-import'] %}
{% do allowed_states.append('elasticsearch') %} {% do allowed_states.append('elasticsearch') %}
{% endif %} {% endif %}
{% if ELASTICSEARCH and grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-managersearch', 'so-import'] %} {% if grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-managersearch', 'so-import'] %}
{% do allowed_states.append('elasticsearch.auth') %} {% do allowed_states.append('elasticsearch.auth') %}
{% endif %} {% endif %}
{% if KIBANA and grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-managersearch', 'so-import'] %} {% if grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-managersearch', 'so-import'] %}
{% do allowed_states.append('kibana') %} {% do allowed_states.append('kibana') %}
{% do allowed_states.append('kibana.secrets') %} {% do allowed_states.append('kibana.secrets') %}
{% endif %} {% endif %}
@@ -231,23 +236,19 @@
{% do allowed_states.append('curator') %} {% do allowed_states.append('curator') %}
{% endif %} {% endif %}
{% if ELASTALERT and grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-managersearch'] %} {% if grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-managersearch'] %}
{% do allowed_states.append('elastalert') %} {% do allowed_states.append('elastalert') %}
{% endif %} {% endif %}
{% if (PLAYBOOK !=0) and grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-managersearch'] %} {% if grains.role in ['so-eval', 'so-manager', 'so-standalone', 'so-managersearch'] %}
{% do allowed_states.append('playbook') %} {% do allowed_states.append('playbook') %}
{% endif %} {% endif %}
{% if (PLAYBOOK !=0) and grains.role in ['so-eval'] %} {% if grains.role in ['so-helixsensor', 'so-manager', 'so-standalone', 'so-searchnode', 'so-managersearch', 'so-heavynode', 'so-receiver'] %}
{% do allowed_states.append('redis') %}
{% endif %}
{% if LOGSTASH and grains.role in ['so-helixsensor', 'so-manager', 'so-standalone', 'so-searchnode', 'so-managersearch', 'so-heavynode', 'so-receiver'] %}
{% do allowed_states.append('logstash') %} {% do allowed_states.append('logstash') %}
{% endif %} {% endif %}
{% if REDIS and grains.role in ['so-manager', 'so-standalone', 'so-managersearch', 'so-heavynode', 'so-receiver'] %} {% if grains.role in ['so-manager', 'so-standalone', 'so-managersearch', 'so-heavynode', 'so-receiver', 'so-eval'] %}
{% do allowed_states.append('redis') %} {% do allowed_states.append('redis') %}
{% endif %} {% endif %}

View File

@@ -25,6 +25,7 @@ config_backup_script:
so_config_backup: so_config_backup:
cron.present: cron.present:
- name: /usr/sbin/so-config-backup > /dev/null 2>&1 - name: /usr/sbin/so-config-backup > /dev/null 2>&1
- identifier: so_config_backup
- user: root - user: root
- minute: '1' - minute: '1'
- hour: '0' - hour: '0'

View File

@@ -18,7 +18,7 @@ include:
pki_private_key: pki_private_key:
x509.private_key_managed: x509.private_key_managed:
- name: /etc/pki/ca.key - name: /etc/pki/ca.key
- bits: 4096 - keysize: 4096
- passphrase: - passphrase:
- cipher: aes_256_cbc - cipher: aes_256_cbc
- backup: True - backup: True
@@ -39,7 +39,7 @@ pki_public_ca_crt:
- keyUsage: "critical cRLSign, keyCertSign" - keyUsage: "critical cRLSign, keyCertSign"
- extendedkeyUsage: "serverAuth, clientAuth" - extendedkeyUsage: "serverAuth, clientAuth"
- subjectKeyIdentifier: hash - subjectKeyIdentifier: hash
- authorityKeyIdentifier: keyid,issuer:always - authorityKeyIdentifier: keyid:always, issuer
- days_valid: 3650 - days_valid: 3650
- days_remaining: 0 - days_remaining: 0
- backup: True - backup: True

View File

@@ -49,12 +49,11 @@ so-status.conf:
- name: /opt/so/conf/so-status/so-status.conf - name: /opt/so/conf/so-status/so-status.conf
- unless: ls /opt/so/conf/so-status/so-status.conf - unless: ls /opt/so/conf/so-status/so-status.conf
sosaltstackperms: socore_opso_perms:
file.directory: file.directory:
- name: /opt/so/saltstack - name: /opt/so
- user: 939 - user: 939
- group: 939 - group: 939
- dir_mode: 770
so_log_perms: so_log_perms:
file.directory: file.directory:
@@ -97,6 +96,8 @@ alwaysupdated:
Etc/UTC: Etc/UTC:
timezone.system timezone.system
# Sync curl configuration for Elasticsearch authentication
{% if GLOBALS.role in ['so-eval', 'so-heavynode', 'so-import', 'so-manager', 'so-managersearch', 'so-searchnode', 'so-standalone'] %}
elastic_curl_config: elastic_curl_config:
file.managed: file.managed:
- name: /opt/so/conf/elasticsearch/curl.config - name: /opt/so/conf/elasticsearch/curl.config
@@ -108,22 +109,25 @@ elastic_curl_config:
- require: - require:
- file: elastic_curl_config_distributed - file: elastic_curl_config_distributed
{% endif %} {% endif %}
{% endif %}
# Sync some Utilities
utilsyncscripts: common_sbin:
file.recurse: file.recurse:
- name: /usr/sbin - name: /usr/sbin
- user: root - source: salt://common/tools/sbin
- group: root - user: 939
- group: 939
- file_mode: 755
common_sbin_jinja:
file.recurse:
- name: /usr/sbin
- source: salt://common/tools/sbin_jinja
- user: 939
- group: 939
- file_mode: 755 - file_mode: 755
- template: jinja - template: jinja
- source: salt://common/tools/sbin
- exclude_pat:
- so-common
- so-firewall
- so-image-common
- soup
- so-status
so-status_script: so-status_script:
file.managed: file.managed:
@@ -133,8 +137,10 @@ so-status_script:
{% if GLOBALS.role in GLOBALS.sensor_roles %} {% if GLOBALS.role in GLOBALS.sensor_roles %}
# Add sensor cleanup # Add sensor cleanup
/usr/sbin/so-sensor-clean: so-sensor-clean:
cron.present: cron.present:
- name: /usr/sbin/so-sensor-clean
- identifier: so-sensor-clean
- user: root - user: root
- minute: '*' - minute: '*'
- hour: '*' - hour: '*'
@@ -154,8 +160,10 @@ sensorrotateconf:
- source: salt://common/files/sensor-rotate.conf - source: salt://common/files/sensor-rotate.conf
- mode: 644 - mode: 644
/usr/local/bin/sensor-rotate: sensor-rotate:
cron.present: cron.present:
- name: /usr/local/bin/sensor-rotate
- identifier: sensor-rotate
- user: root - user: root
- minute: '1' - minute: '1'
- hour: '0' - hour: '0'
@@ -178,8 +186,10 @@ commonlogrotateconf:
- template: jinja - template: jinja
- mode: 644 - mode: 644
/usr/local/bin/common-rotate: common-rotate:
cron.present: cron.present:
- name: /usr/local/bin/common-rotate
- identifier: common-rotate
- user: root - user: root
- minute: '1' - minute: '1'
- hour: '0' - hour: '0'
@@ -200,17 +210,11 @@ sostatus_log:
- name: /opt/so/log/sostatus/status.log - name: /opt/so/log/sostatus/status.log
- mode: 644 - mode: 644
common_pip_dependencies: # Install sostatus check cron. This is used to populate Grid.
pip.installed: so-status_check_cron:
- user: root
- pkgs:
- rich
- target: /usr/lib64/python3.6/site-packages
# Install sostatus check cron
sostatus_check_cron:
cron.present: cron.present:
- name: '/usr/sbin/so-status -j > /opt/so/log/sostatus/status.log 2>&1' - name: '/usr/sbin/so-status -j > /opt/so/log/sostatus/status.log 2>&1'
- identifier: so-status_check_cron
- user: root - user: root
- minute: '*/1' - minute: '*/1'
- hour: '*' - hour: '*'
@@ -220,7 +224,7 @@ sostatus_check_cron:
remove_post_setup_cron: remove_post_setup_cron:
cron.absent: cron.absent:
- name: 'salt-call state.highstate' - name: 'PATH=$PATH:/usr/sbin salt-call state.highstate'
- identifier: post_setup_cron - identifier: post_setup_cron
{% if GLOBALS.role not in ['eval', 'manager', 'managersearch', 'standalone'] %} {% if GLOBALS.role not in ['eval', 'manager', 'managersearch', 'standalone'] %}
@@ -234,7 +238,7 @@ soversionfile:
{% endif %} {% endif %}
{% if GLOBALS.so_model %} {% if GLOBALS.so_model and GLOBALS.so_model not in ['SO2AMI01', 'SO2AZI01', 'SO2GCI01'] %}
{% if GLOBALS.os == 'Rocky' %} {% if GLOBALS.os == 'Rocky' %}
# Install Raid tools # Install Raid tools
raidpkgs: raidpkgs:
@@ -246,9 +250,10 @@ raidpkgs:
{% endif %} {% endif %}
# Install raid check cron # Install raid check cron
so_raid_status: so-raid-status:
cron.present: cron.present:
- name: '/usr/sbin/so-raid-status > /dev/null 2>&1' - name: '/usr/sbin/so-raid-status > /dev/null 2>&1'
- identifier: so-raid-status
- user: root - user: root
- minute: '*/15' - minute: '*/15'
- hour: '*' - hour: '*'

View File

@@ -5,28 +5,37 @@ commonpkgs:
pkg.installed: pkg.installed:
- skip_suggestions: True - skip_suggestions: True
- pkgs: - pkgs:
- chrony
- apache2-utils - apache2-utils
- wget - wget
- ntpdate - ntpdate
- jq - jq
- python3-docker
- curl - curl
- ca-certificates - ca-certificates
- software-properties-common - software-properties-common
- apt-transport-https - apt-transport-https
- openssl - openssl
- netcat - netcat
- python3-mysqldb
- sqlite3 - sqlite3
- libssl-dev - libssl-dev
- python3-dateutil - python3-dateutil
- python3-m2crypto
- python3-mysqldb
- python3-packaging - python3-packaging
- python3-watchdog
- python3-lxml - python3-lxml
- git - git
- vim - vim
# since Ubuntu requires and internet connection we can use pip to install modules
python3-pip:
pkg.installed
python-rich:
pip.installed:
- name: rich
- target: /usr/local/lib/python3.8/dist-packages/
- require:
- pkg: python3-pip
{% elif GLOBALS.os == 'Rocky' %} {% elif GLOBALS.os == 'Rocky' %}
commonpkgs: commonpkgs:
pkg.installed: pkg.installed:
@@ -51,6 +60,8 @@ commonpkgs:
- python3-m2crypto - python3-m2crypto
- rsync - rsync
- python3-rich - python3-rich
- python3-pyyaml
- python3-watchdog - python3-watchdog
- python3-packaging
- unzip - unzip
{% endif %} {% endif %}

View File

@@ -54,6 +54,8 @@ add_interface_bond0() {
ethtool -K "$BNIC" $i off &>/dev/null ethtool -K "$BNIC" $i off &>/dev/null
fi fi
done done
if ! [[ $is_cloud ]]; then
# Check if the bond slave connection has already been created # Check if the bond slave connection has already been created
nmcli -f name,uuid -p con | grep -q "bond0-slave-$BNIC" nmcli -f name,uuid -p con | grep -q "bond0-slave-$BNIC"
local found_int=$? local found_int=$?
@@ -71,16 +73,18 @@ add_interface_bond0() {
ethernet.mtu "$MTU" \ ethernet.mtu "$MTU" \
connection.autoconnect "yes" connection.autoconnect "yes"
fi fi
fi
ip link set dev "$BNIC" arp off multicast off allmulticast off promisc on ip link set dev "$BNIC" arp off multicast off allmulticast off promisc on
if ! [[ $is_cloud ]]; then
# Bring the slave interface up # Bring the slave interface up
if [[ $verbose == true ]]; then if [[ $verbose == true ]]; then
nmcli con up "bond0-slave-$BNIC" nmcli con up "bond0-slave-$BNIC"
else else
nmcli con up "bond0-slave-$BNIC" &>/dev/null nmcli con up "bond0-slave-$BNIC" &>/dev/null
fi fi
fi
if [ "$nic_error" != 0 ]; then if [ "$nic_error" != 0 ]; then
return "$nic_error" return "$nic_error"
fi fi
@@ -201,7 +205,7 @@ gpg_rpm_import() {
local RPMKEYSLOC="$UPDATE_DIR/salt/repo/client/files/rocky/keys" local RPMKEYSLOC="$UPDATE_DIR/salt/repo/client/files/rocky/keys"
fi fi
RPMKEYS=('RPM-GPG-KEY-EPEL-9' 'SALTSTACK-GPG-KEY2.pub' 'docker.pub' 'securityonion.pub') RPMKEYS=('RPM-GPG-KEY-rockyofficial' 'RPM-GPG-KEY-EPEL-9' 'SALT-PROJECT-GPG-PUBKEY-2023.pub' 'docker.pub' 'securityonion.pub')
for RPMKEY in "${RPMKEYS[@]}"; do for RPMKEY in "${RPMKEYS[@]}"; do
rpm --import $RPMKEYSLOC/$RPMKEY rpm --import $RPMKEYSLOC/$RPMKEY

View File

@@ -1,34 +0,0 @@
#!/bin/bash
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0; you may not use
# this file except in compliance with the Elastic License 2.0.
#so-elastic-agent-gen-installers $FleetHost $EnrollmentToken
{% from 'vars/globals.map.jinja' import GLOBALS %}
. /usr/sbin/so-common
ENROLLMENTOKEN=$(curl -K /opt/so/conf/elasticsearch/curl.config -L "localhost:5601/api/fleet/enrollment_api_keys" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' | jq .list | jq -r -c '.[] | select(.policy_id | contains("endpoints")) | .api_key')
FLEETHOST=$(lookup_pillar "server:url" "elasticfleet")
#FLEETHOST=$1
#ENROLLMENTOKEN=$2
CONTAINERGOOS=( "linux" "darwin" "windows" )
rm -rf /tmp/elastic-agent-workspace
mkdir -p /tmp/elastic-agent-workspace
for OS in "${CONTAINERGOOS[@]}"
do
printf "\n\nGenerating $OS Installer..."
cp /opt/so/saltstack/default/salt/elasticfleet/files/elastic-agent/so-elastic-agent-*-$OS-x86_64.tar.gz /tmp/elastic-agent-workspace/$OS.tar.gz
docker run -e CGO_ENABLED=0 -e GOOS=$OS \
--mount type=bind,source=/etc/ssl/certs/,target=/workspace/files/cert/ \
--mount type=bind,source=/tmp/elastic-agent-workspace/,target=/workspace/files/elastic-agent/ \
--mount type=bind,source=/opt/so/saltstack/local/salt/elasticfleet/files/so_agent-installers/,target=/output/ \
{{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-elastic-agent-builder:{{ GLOBALS.so_version }} go build -ldflags "-X main.fleetHost=$FLEETHOST -X main.enrollmentToken=$ENROLLMENTOKEN" -o /output/so-elastic-agent_$OS
printf "\n $OS Installer Generated..."
done

View File

@@ -1,94 +0,0 @@
#!/bin/bash
#
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{%- set NODEIP = salt['pillar.get']('host:mainip', '') %}
. /usr/sbin/so-common
SKIP=0
#########################################
# Options
#########################################
usage()
{
cat <<EOF
Security Onion Elastic Clear
Options:
-h This message
-y Skip interactive mode
EOF
}
while getopts "h:y" OPTION
do
case $OPTION in
h)
usage
exit 0
;;
y)
SKIP=1
;;
*)
usage
exit 0
;;
esac
done
if [ $SKIP -ne 1 ]; then
# List indices
echo
curl -K /opt/so/conf/elasticsearch/curl.config -k -L https://{{ NODEIP }}:9200/_cat/indices?v
echo
# Inform user we are about to delete all data
echo
echo "This script will delete all data (documents, indices, etc.) in the Elasticsearch database."
echo
echo "If you would like to proceed, please type "AGREE" and hit ENTER."
echo
# Read user input
read INPUT
if [ "$INPUT" != "AGREE" ] ; then exit 0; fi
fi
# Check to see if Logstash are running
LS_ENABLED=$(so-status | grep logstash)
EA_ENABLED=$(so-status | grep elastalert)
if [ ! -z "$LS_ENABLED" ]; then
/usr/sbin/so-logstash-stop
fi
if [ ! -z "$EA_ENABLED" ]; then
/usr/sbin/so-elastalert-stop
fi
# Delete data
echo "Deleting data..."
INDXS=$(curl -K /opt/so/conf/elasticsearch/curl.config -s -XGET -k -L https://{{ NODEIP }}:9200/_cat/indices?v | egrep 'logstash|elastalert|so-' | awk '{ print $3 }')
for INDX in ${INDXS}
do
curl -K /opt/so/conf/elasticsearch/curl.config-XDELETE -k -L https://"{{ NODEIP }}:9200/${INDX}" > /dev/null 2>&1
done
#Start Logstash
if [ ! -z "$LS_ENABLED" ]; then
/usr/sbin/so-logstash-start
fi
if [ ! -z "$EA_ENABLED" ]; then
/usr/sbin/so-elastalert-start
fi

View File

@@ -1,137 +0,0 @@
#!/bin/bash
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
. /usr/sbin/so-common
{%- set ZEEKVER = salt['pillar.get']('global:mdengine', '') %}
{%- set STRELKAENABLED = salt['pillar.get']('strelka:enabled', '0') %}
{%- set RITAENABLED = salt['pillar.get']('rita:enabled', False) %}
wait_for_web_response "http://localhost:5601/api/spaces/space/default" "default" 300 "curl -K /opt/so/conf/elasticsearch/curl.config"
# Let's snag a cookie from Kibana
SESSIONCOOKIE=$(curl -K /opt/so/conf/elasticsearch/curl.config -c - -X GET http://localhost:5601/ | grep sid | awk '{print $7}')
# Disable certain Features from showing up in the Kibana UI
echo
echo "Disable certain Features from showing up in the Kibana UI"
so-kibana-space-defaults
echo
# Suricata logs
echo
echo "Setting up Suricata package policy..."
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "log", "version": "1.1.0" }, "id": "suricata-logs", "name": "suricata-logs", "description": "Suricata integration", "namespace": "so", "inputs": { "logs-logfile": { "enabled": true, "streams": { "log.log": { "enabled": true, "vars": { "paths": [ "/nsm/suricata/eve*.json" ], "data_stream.dataset": "suricata", "tags": [],"processors": "- add_fields:\n target: event\n fields:\n category: network\n module: suricata", "custom": "pipeline: suricata.common" }}}}}}'
echo
# Zeek logs
echo
echo "Setting up Zeek package policy..."
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "log", "version": "1.1.0" }, "name": "zeek-logs", "description": "Zeek logs", "namespace": "so", "inputs": { "logs-logfile": { "enabled": true, "streams": { "log.log": { "enabled": true, "vars": { "paths": ["/nsm/zeek/logs/current/*.log"], "data_stream.dataset": "zeek", "tags": [], "processors": "- dissect:\n tokenizer: \"/nsm/zeek/logs/current/%{pipeline}.log\"\n field: \"log.file.path\"\n trim_chars: \".log\"\n target_prefix: \"\"\n- script:\n lang: javascript\n source: >\n function process(event) {\n var pl = event.Get(\"pipeline\");\n event.Put(\"@metadata.pipeline\", \"zeek.\" + pl);\n }\n- add_fields:\n target: event\n fields:\n category: network\n module: zeek\n- add_tags:\n tags: \"ics\"\n when:\n regexp:\n pipeline: \"^bacnet*|^bsap*|^cip*|^cotp*|^dnp3*|^ecat*|^enip*|^modbus*|^opcua*|^profinet*|^s7comm*\"", "custom": "exclude_files: [\"broker|capture_loss|ecat_arp_info|loaded_scripts|packet_filter|stats|stderr|stdout.log$\"]\n" } } } } } }'
echo
# Import - EVTX
echo
echo "Setting up EVTX import package policy..."
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{ "package": { "name": "log", "version": "1.1.0" }, "name": "import-evtx-logs", "namespace": "so", "description": "Import Windows EVTX logs", "policy_id": "so-grid-nodes", "inputs": { "logs-logfile": { "enabled": true, "streams": { "log.log": { "enabled": true, "vars": { "paths": [ "/nsm/import/*/evtx/data.json" ], "data_stream.dataset": "import", "custom": "pipeline: import.wel", "processors": "- dissect:\n tokenizer: \"/nsm/import/%{import.id}/evtx/%{import.file}\"\n field: \"log.file.path\"\n target_prefix: \"\"\n- decode_json_fields:\n fields: [\"message\"]\n target: \"\"\n- add_fields:\n target: event\n fields:\n module: windows_eventlog\n imported: true", "tags": [] } } } } } }'
echo
# Import - Suricata logs
echo
echo "Setting up Suricata import package policy..."
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{ "policy_id": "so-grid-nodes", "package": { "name": "log", "version": "1.1.0" }, "id": "import-suricata-logs", "name": "import-suricata-logs", "description": "Import Suricata logs", "namespace": "so", "inputs": { "logs-logfile": { "enabled": true, "streams": { "log.log": { "enabled": true, "vars": { "paths": ["/nsm/import/*/suricata/eve*.json"], "data_stream.dataset": "import", "tags": [], "processors": "- add_fields:\n target: event\n fields:\n category: network\n module: suricata\n imported: true\n- dissect:\n tokenizer: \"/nsm/import/%{import.id}/suricata/%{import.file}\"\n field: \"log.file.path\"\n target_prefix: \"\"", "custom": "pipeline: suricata.common" } } } } } }'
echo
# Import - Zeek logs
echo
echo "Setting up Zeek import package policy..."
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "log", "version": "1.1.0" }, "name": "import-zeek-logs", "description": "Zeek Import logs", "namespace": "so", "inputs": { "logs-logfile": { "enabled": true, "streams": { "log.log": { "enabled": true, "vars": { "paths": ["/nsm/import/*/zeek/logs/*.log"], "data_stream.dataset": "import", "tags": [], "processors": "- dissect:\n tokenizer: \"/nsm/import/%{import.id}/zeek/logs/%{import.file}\"\n field: \"log.file.path\"\n target_prefix: \"\"\n- script:\n lang: javascript\n source: >\n function process(event) {\n var pl = event.Get(\"import.file\").slice(0,-4);\n event.Put(\"@metadata.pipeline\", \"zeek.\" + pl);\n }\n- add_fields:\n target: event\n fields:\n category: network\n module: zeek\n imported: true\n- add_tags:\n tags: \"ics\"\n when:\n regexp:\n import.file: \"^bacnet*|^bsap*|^cip*|^cotp*|^dnp3*|^ecat*|^enip*|^modbus*|^opcua*|^profinet*|^s7comm*\"", "custom": "exclude_files: [\"broker|capture_loss|ecat_arp_info|loaded_scripts|packet_filter|stats|stderr|stdout.log$\"]\n" } } } } } }'
echo
# Strelka logs
echo
echo "Setting up Strelka package policy..."
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "log", "version": "1.1.0" }, "id": "strelka-logs", "name": "strelka-logs", "description": "Strelka logs", "namespace": "so", "inputs": { "logs-logfile": { "enabled": true, "streams": { "log.log": { "enabled": true, "vars": { "paths": [ "/nsm/strelka/log/strelka.log" ], "data_stream.dataset": "strelka", "tags": [],"processors": "- add_fields:\n target: event\n fields:\n category: file\n module: strelka", "custom": "pipeline: strelka.file" }}}}}}'
echo
# Syslog TCP Port 514
echo
echo "Setting up Syslog TCP package policy..."
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{ "policy_id": "so-grid-nodes", "package": { "name": "tcp", "version": "1.5.0" }, "id": "syslog-tcp-514", "name": "syslog-tcp-514", "description": "Syslog Over TCP Port 514", "namespace": "so", "inputs": { "tcp-tcp": { "enabled": true, "streams": { "tcp.generic": { "enabled": true, "vars": { "listen_address": "0.0.0.0", "listen_port": "514", "data_stream.dataset": "syslog", "pipeline": "syslog", "processors": "- add_fields:\n target: event\n fields:\n module: syslog", "tags": [ "syslog" ], "syslog_options": "field: message\n#format: auto\n#timezone: Local" } } } } } }'
echo
# Syslog UDP Port 514
echo
echo "Setting up Syslog UDP package policy..."
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{ "policy_id": "so-grid-nodes", "package": { "name": "udp", "version": "1.5.0" }, "id": "syslog-udp-514", "name": "syslog-udp-514", "description": "Syslog over UDP Port 514", "namespace": "so", "inputs": { "udp-udp": { "enabled": true, "streams": { "udp.generic": { "enabled": true, "vars": { "listen_address": "0.0.0.0", "listen_port": "514", "data_stream.dataset": "syslog", "pipeline": "syslog", "max_message_size": "10KiB", "keep_null": false, "processors": "- add_fields:\n target: event\n fields: \n module: syslog\n", "tags": [ "syslog" ], "syslog_options": "field: message\n#format: auto\n#timezone: Local" } } } } } }'
echo
# Kratos logs
echo
echo "Setting up Kratos package policy..."
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "log", "version": "1.1.0" }, "id": "kratos-logs", "name": "kratos-logs", "description": "Kratos logs", "namespace": "so", "inputs": { "logs-logfile": { "enabled": true, "streams": { "log.log": { "enabled": true, "vars": { "paths": [ "/opt/so/log/kratos/kratos.log" ], "data_stream.dataset": "kratos", "tags": [],"custom":"pipeline: kratos","processors": "- decode_json_fields:\n fields: [\"message\"]\n target: \"\"\n add_error_key: true \n- add_fields:\n target: event\n fields:\n category: iam\n module: kratos" }}}}}}'
echo
# RITA Logs
#echo
#echo "Setting up RITA package policy..."
#curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "log", "version": "1.1.0" }, "id": "rita-logs", "name": "rita-logs", "description": "RITA Beacon logs", "namespace": "so", "inputs": { "logs-logfile": { "enabled": true, "streams": { "log.log": { "enabled": true, "vars": { "paths": [ "/nsm/rita/beacons.csv", "/nsm/rita/long-connections.csv", "/nsm/rita/short-connections.csv", "/nsm/rita/exploded-dns.csv" ], "data_stream.dataset": "rita", "tags": [], "processors": "- add_fields:\n target: event\n fields:\n category: network\n module: rita\n- if:\n log.file.path: beacons.csv\n then: \n - add_fields:\n target: \"@metadata\"\n fields:\n pipeline: rita.beacon\n- if:\n regexp:\n log.file.path: \"*connections.csv\"\n then: \n - add_fields:\n target: \"@metadata\"\n fields:\n pipeline: rita.connection\n- if:\n log.file.path: \"exploded-dns.csv\"\n then: \n - add_fields:\n target: \"@metadata\"\n fields:\n pipeline: rita.dns" }}}}}}'
#echo
# Elasticsearch logs
echo
echo "Setting up Elasticsearch package policy..."
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "elasticsearch", "version": "1.0.0" }, "id": "elasticsearch-logs", "name": "elasticsearch-logs", "description": "Elasticsearch Logs", "namespace": "default", "inputs": { "elasticsearch-logfile": { "enabled": true, "streams": { "elasticsearch.audit": { "enabled": false, "vars": { "paths": [ "/var/log/elasticsearch/*_audit.json" ] } }, "elasticsearch.deprecation": { "enabled": false, "vars": { "paths": [ "/var/log/elasticsearch/*_deprecation.json" ] } }, "elasticsearch.gc": { "enabled": false, "vars": { "paths": [ "/var/log/elasticsearch/gc.log.[0-9]*", "/var/log/elasticsearch/gc.log" ] } }, "elasticsearch.server": { "enabled": true, "vars": { "paths": [ "/opt/so/log/elasticsearch/*.log" ] } }, "elasticsearch.slowlog": { "enabled": false, "vars": { "paths": [ "/var/log/elasticsearch/*_index_search_slowlog.json", "/var/log/elasticsearch/*_index_indexing_slowlog.json" ] } } } }, "elasticsearch-elasticsearch/metrics": { "enabled": false, "vars": { "hosts": [ "http://localhost:9200" ], "scope": "node" }, "streams": { "elasticsearch.stack_monitoring.ccr": { "enabled": false }, "elasticsearch.stack_monitoring.cluster_stats": { "enabled": false }, "elasticsearch.stack_monitoring.enrich": { "enabled": false }, "elasticsearch.stack_monitoring.index": { "enabled": false }, "elasticsearch.stack_monitoring.index_recovery": { "enabled": false, "vars": { "active.only": true } }, "elasticsearch.stack_monitoring.index_summary": { "enabled": false }, "elasticsearch.stack_monitoring.ml_job": { "enabled": false }, "elasticsearch.stack_monitoring.node": { "enabled": false }, "elasticsearch.stack_monitoring.node_stats": { "enabled": false }, "elasticsearch.stack_monitoring.pending_tasks": { "enabled": false }, "elasticsearch.stack_monitoring.shard": { "enabled": false } } } } }'
echo
# Logstash logs
#echo
#echo "Setting up Logstash package policy..."
#curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "logstash", "version": "2.0.0" }, "id": "logstash-logs", "name": "logstash-logs", "description": "Logstash logs", "namespace": "default", "inputs": { "logstash-logfile": { "enabled": true, "streams": { "logstash.log": { "enabled": true, "vars": { "paths": [ "/opt/so/logs/logstash/logstash.log" ] } }, "logstash.slowlog": { "enabled": false, "vars": { "paths": [ "/var/log/logstash/logstash-slowlog-plain*.log", "/var/log/logstash/logstash-slowlog-json*.log" ] } } } }, "logstash-logstash/metrics": { "enabled": false, "vars": { "hosts": [ "http://localhost:9600" ], "period": "10s" }, "streams": { "logstash.stack_monitoring.node": { "enabled": false }, "logstash.stack_monitoring.node_stats": { "enabled": false } } } } }'
#echo
# Kibana logs
#echo
#echo "Setting up Kibana package policy..."
#curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "kibana", "version": "2.0.0" }, "id": "kibana-logs", "name": "kibana-logs", "description": "Kibana logs", "namespace": "default", "inputs": { "kibana-logfile": { "enabled": true, "streams": { "kibana.audit": { "enabled": false, "vars": { "paths": [ "/opt/so/log/kibana/kibana.log" ] } }, "kibana.log": { "enabled": true, "vars": { "paths": [ "/opt/so/log/kibana/kibana.log" ] } } } }, "kibana-kibana/metrics": { "enabled": false, "vars": { "hosts": [ "http://localhost:5601" ] }, "streams": { "kibana.stack_monitoring.cluster_actions": { "enabled": false }, "kibana.stack_monitoring.cluster_rules": { "enabled": false }, "kibana.stack_monitoring.node_actions": { "enabled": false }, "kibana.stack_monitoring.node_rules": { "enabled": false }, "kibana.stack_monitoring.stats": { "enabled": false }, "kibana.stack_monitoring.status": { "enabled": false } } } } }'
#echo
# Redis logs
echo
echo "Setting up Redis package policy..."
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{ "policy_id": "so-grid-nodes", "package": { "name": "redis", "version": "1.4.0" }, "id": "redis-logs", "name": "redis-logs", "description": "Redis logs", "namespace": "default", "inputs": { "redis-logfile": { "enabled": true, "streams": { "redis.log": { "enabled": true, "vars": { "paths": [ "/opt/so/log/redis/redis.log" ], "tags": [ "redis-log" ], "preserve_original_event": false } } } }, "redis-redis": { "enabled": false, "streams": { "redis.slowlog": { "enabled": false, "vars": { "hosts": [ "127.0.0.1:6379" ], "password": "" } } } }, "redis-redis/metrics": { "enabled": false, "vars": { "hosts": [ "127.0.0.1:6379" ], "idle_timeout": "20s", "maxconn": 10, "network": "tcp", "password": "" }, "streams": { "redis.info": { "enabled": false, "vars": { "period": "10s" } }, "redis.key": { "enabled": false, "vars": { "key.patterns": "- limit: 20\n pattern: '*'\n", "period": "10s" } }, "redis.keyspace": { "enabled": false, "vars": { "period": "10s" } } } } } }'
echo
# IDH logs
echo
echo "Setting up IDH package policy..."
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{"policy_id":"so-grid-nodes","package":{"name":"log","version":"1.1.1"},"id":"idh-logs","name":"idh-logs","namespace":"so","description":"IDH integration","inputs":{"logs-logfile":{"enabled":true,"streams":{"log.log":{"enabled":true,"vars":{"paths":["/nsm/idh/opencanary.log"],"data_stream.dataset":"idh","custom":"pipeline: common","processors": "\n- decode_json_fields:\n fields: [\"message\"]\n target: \"\"\n add_error_key: true\n- drop_fields:\n when:\n equals:\n logtype: \"1001\"\n fields: [\"src_host\", \"src_port\", \"dst_host\", \"dst_port\" ]\n ignore_missing: true\n- rename:\n fields:\n - from: \"src_host\"\n to: \"source.ip\"\n - from: \"src_port\"\n to: \"source.port\"\n - from: \"dst_host\"\n to: \"destination.host\"\n - from: \"dst_port\"\n to: \"destination.port\"\n ignore_missing: true\n- convert:\n fields:\n - {from: \"logtype\", to: \"event.code\", type: \"string\"}\n ignore_missing: true\n- drop_fields:\n fields: '\''[\"prospector\", \"input\", \"offset\", \"beat\"]'\''\n- add_fields:\n target: event\n fields:\n category: host\n module: opencanary","tags":[]}}}}}}'
echo
# SOC - Server logs
echo
echo "Setting up SOC - Server Logs package policy..."
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{"package":{"name":"log","version":"1.1.2"},"name":"soc-server-logs","namespace":"so","description":"Security Onion Console Logs","policy_id":"so-grid-nodes","inputs":{"logs-logfile":{"enabled":true,"streams":{"log.log":{"enabled":true,"vars":{"paths":["/opt/so/log/soc/sensoroni-server.log"],"data_stream.dataset":"soc","custom":"pipeline: common","processors": "- decode_json_fields:\n fields: [\"message\"]\n target: \"soc\"\n process_array: true\n max_depth: 2\n add_error_key: true \n- add_fields:\n target: event\n fields:\n category: host\n module: soc\n dataset_temp: server\n- rename:\n fields:\n - from: \"soc.fields.sourceIp\"\n to: \"source.ip\"\n - from: \"soc.fields.status\"\n to: \"http.response.status_code\"\n - from: \"soc.fields.method\"\n to: \"http.request.method\"\n - from: \"soc.fields.path\"\n to: \"url.path\"\n - from: \"soc.message\"\n to: \"event.action\"\n - from: \"soc.level\"\n to: \"log.level\"\n ignore_missing: true","tags":[]}}}}}}'
echo
# SOC - Sensoroni logs
echo
echo "Setting up SOC - Sensoroni Logs package policy..."
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{"package":{"name":"log","version":"1.1.2"},"name":"soc-sensoroni-logs","namespace":"so","description":"Security Onion - Sensoroni - Logs","policy_id":"so-grid-nodes","inputs":{"logs-logfile":{"enabled":true,"streams":{"log.log":{"enabled":true,"vars":{"paths":["/opt/so/log/sensoroni/sensoroni.log"],"data_stream.dataset":"soc","custom":"pipeline: common","processors": "- decode_json_fields:\n fields: [\"message\"]\n target: \"sensoroni\"\n process_array: true\n max_depth: 2\n add_error_key: true \n- add_fields:\n target: event\n fields:\n category: host\n module: soc\n dataset_temp: sensoroni\n- rename:\n fields:\n - from: \"sensoroni.fields.sourceIp\"\n to: \"source.ip\"\n - from: \"sensoroni.fields.status\"\n to: \"http.response.status_code\"\n - from: \"sensoroni.fields.method\"\n to: \"http.request.method\"\n - from: \"sensoroni.fields.path\"\n to: \"url.path\"\n - from: \"sensoroni.message\"\n to: \"event.action\"\n - from: \"sensoroni.level\"\n to: \"log.level\"\n ignore_missing: true","tags":[]}}}}}}'
echo
# SOC - Elastic Auth Sync logs
echo
echo "Setting up SOC - Elastic Auth Sync Logs package policy..."
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{"package":{"name":"log","version":"1.1.2"},"name":"soc-auth-sync-logs","namespace":"so","description":"Security Onion - Elastic Auth Sync - Logs","policy_id":"so-grid-nodes","inputs":{"logs-logfile":{"enabled":true,"streams":{"log.log":{"enabled":true,"vars":{"paths":["/opt/so/log/soc/sync.log"],"data_stream.dataset":"soc","custom":"pipeline: common","processors": "- dissect:\n tokenizer: \"%{event.action}\"\n field: \"message\"\n target_prefix: \"\"\n- add_fields:\n target: event\n fields:\n category: host\n module: soc\n dataset_temp: auth_sync","tags":[]}}}}}}'
echo
# SOC - Salt Relay logs
echo
echo "Setting up SOC - Salt_Relay Logs package policy..."
curl -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X POST "localhost:5601/api/fleet/package_policies" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d'{"package":{"name":"log","version":"1.1.2"},"name":"soc-salt-relay-logs","namespace":"so","description":"Security Onion - Salt Relay - Logs","policy_id":"so-grid-nodes","inputs":{"logs-logfile":{"enabled":true,"streams":{"log.log":{"enabled":true,"vars":{"paths":["/opt/so/log/soc/salt-relay.log"],"data_stream.dataset":"soc","custom":"pipeline: common","processors": "- dissect:\n tokenizer: \"%{soc.ts} | %{event.action}\"\n field: \"message\"\n target_prefix: \"\"\n- add_fields:\n target: event\n fields:\n category: host\n module: soc\n dataset_temp: salt_relay","tags":[]}}}}}}'
echo

View File

@@ -1,109 +0,0 @@
#!/bin/bash
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0; you may not use
# this file except in compliance with the Elastic License 2.0.
{% from 'vars/globals.map.jinja' import GLOBALS %}
. /usr/sbin/so-common
# Create ES Token
ESTOKEN=$(curl -K /opt/so/conf/elasticsearch/curl.config -L -X POST "localhost:5601/api/fleet/service_tokens" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' | jq -r .value)
printf "ESTOKEN = $ESTOKEN \n"
# Add SO-Manager Fleet URL
## This array replaces whatever URLs are currently configured
printf "\n"
curl -K /opt/so/conf/elasticsearch/curl.config -L -X PUT "localhost:5601/api/fleet/settings" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{"fleet_server_hosts":["https://{{ GLOBALS.manager_ip }}:8220"]}'
printf "\n\n"
# Configure certificates
mkdir -p /opt/so/conf/elastic-fleet/certs
cp /etc/ssl/certs/intca.crt /opt/so/conf/elastic-fleet/certs
cp /etc/pki/elasticfleet* /opt/so/conf/elastic-fleet/certs
{% if grains.role in ['so-import', 'so-standalone', 'so-eval', 'so-manager', 'so-managersearch'] %}
# Add SO-Manager Elasticsearch Ouput
ESCACRT=$(openssl x509 -in /opt/so/conf/elastic-fleet/certs/intca.crt)
JSON_STRING=$( jq -n \
--arg ESCACRT "$ESCACRT" \
'{"name":"so-manager_elasticsearch","id":"so-manager_elasticsearch","type":"elasticsearch","hosts":["https://{{ GLOBALS.manager_ip }}:9200"],"is_default":true,"is_default_monitoring":true,"config_yaml":"","ssl":{"certificate_authorities": [$ESCACRT]}}' )
curl -K /opt/so/conf/elasticsearch/curl.config -L -X POST "localhost:5601/api/fleet/outputs" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d "$JSON_STRING"
printf "\n\n"
{% else %}
# Create Logstash Output payload
LOGSTASHCRT=$(openssl x509 -in /opt/so/conf/elastic-fleet/certs/elasticfleet.crt)
LOGSTASHKEY=$(openssl rsa -in /opt/so/conf/elastic-fleet/certs/elasticfleet.key)
LOGSTASHCA=$(openssl x509 -in /opt/so/conf/elastic-fleet/certs/intca.crt)
JSON_STRING=$( jq -n \
--arg LOGSTASHCRT "$LOGSTASHCRT" \
--arg LOGSTASHKEY "$LOGSTASHKEY" \
--arg LOGSTASHCA "$LOGSTASHCA" \
'{"name":"so-manager_logstash","id":"so-manager_logstash","type":"logstash","hosts":["{{ GLOBALS.manager_ip }}:5055"],"is_default":true,"is_default_monitoring":true,"config_yaml":"","ssl":{"certificate": $LOGSTASHCRT,"key": $LOGSTASHKEY,"certificate_authorities":[ $LOGSTASHCA ]}}'
)
# Add SO-Manager Logstash Ouput
curl -K /opt/so/conf/elasticsearch/curl.config -L -X POST "localhost:5601/api/fleet/outputs" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d "$JSON_STRING"
printf "\n\n"
{%- endif %}
# Add Elastic Fleet Integrations
# Add Elastic Fleet Server Agent Policy
#curl -vv -K /opt/so/conf/elasticsearch/curl.config -L \
#-X POST "localhost:5601/api/fleet/agent_policies" \
#-H 'kbn-xsrf: true' -H 'Content-Type: application/json' \
#-d '{"name":"SO-Manager","id":"so-manager","description":"SO Manager Fleet Server Policy","namespace":"default","monitoring_enabled":["logs"],"has_fleet_server":true}'
# Add Agent Policy - SOS Grid Nodes
#curl -vv -K /opt/so/conf/elasticsearch/curl.config -L \
#-X POST "localhost:5601/api/fleet/agent_policies" \
#-H 'kbn-xsrf: true' -H 'Content-Type: application/json' \
#-d '{"name":"SO-Grid","id":"so-grid","description":"SO Grid Endpoint Policy","namespace":"default","monitoring_enabled":["logs"]}'
# Add Agent Policy - Default endpoints
#curl -vv -K /opt/so/conf/elasticsearch/curl.config -L \
#-X POST "localhost:5601/api/fleet/agent_policies" \
#-H 'kbn-xsrf: true' -H 'Content-Type: application/json' \
#-d '{"name":"Endpoints-Initalization","id":"endpoints","description":"Initial Endpoint Policy","namespace":"default","monitoring_enabled":["logs"]}'
ENDPOINTSENROLLMENTOKEN=$(curl -K /opt/so/conf/elasticsearch/curl.config -L "localhost:5601/api/fleet/enrollment_api_keys" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' | jq .list | jq -r -c '.[] | select(.policy_id | contains("endpoints-default")) | .api_key')
GRIDNODESENROLLMENTOKEN=$(curl -K /opt/so/conf/elasticsearch/curl.config -L "localhost:5601/api/fleet/enrollment_api_keys" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' | jq .list | jq -r -c '.[] | select(.policy_id | contains("so-grid-nodes")) | .api_key')
# Store needed data in minion pillar
pillar_file=/opt/so/saltstack/local/pillar/minions/{{ GLOBALS.minion_id }}.sls
printf '%s\n'\
"elasticfleet:"\
" server:"\
" es_token: '$ESTOKEN'"\
" endpoints_enrollment: '$ENDPOINTSENROLLMENTOKEN'"\
" grid_enrollment: '$GRIDNODESENROLLMENTOKEN'"\
" url: '{{ GLOBALS.manager_ip }}'"\
"" >> "$pillar_file"
#Store Grid Nodes Enrollment token in Global pillar
global_pillar_file=/opt/so/saltstack/local/pillar/soc_global.sls
printf '%s\n'\
" fleet_grid_enrollment_token: '$GRIDNODESENROLLMENTOKEN'"\
"" >> "$global_pillar_file"
# Call Elastic-Fleet Salt State
salt-call state.apply elasticfleet queue=True
# Load Elastic Fleet integrations
/usr/sbin/so-elastic-fleet-integration-policy-load
# Temp
wget --progress=bar:force:noscroll -P /opt/so/saltstack/default/salt/elasticfleet/files/elastic-agent/ https://github.com/Security-Onion-Solutions/securityonion-docker-rpm/releases/download/so_elastic-agent-8.6.2/so-elastic-agent-8.6.2-darwin-x86_64.tar.gz
wget --progress=bar:force:noscroll -P /opt/so/saltstack/default/salt/elasticfleet/files/elastic-agent/ https://github.com/Security-Onion-Solutions/securityonion-docker-rpm/releases/download/so_elastic-agent-8.6.2/so-elastic-agent-8.6.2-linux-x86_64.tar.gz
wget --progress=bar:force:noscroll -P /opt/so/saltstack/default/salt/elasticfleet/files/elastic-agent/ https://github.com/Security-Onion-Solutions/securityonion-docker-rpm/releases/download/so_elastic-agent-8.6.2/so-elastic-agent-8.6.2-windows-x86_64.tar.gz
#git clone -b 2.4-so-elastic-agent https://github.com/Security-Onion-Solutions/securityonion-image.git
#cd securityonion-image/so-elastic-agent-builder
#docker build -t so-elastic-agent-builder .
so-elastic-agent-gen-installers
salt-call state.apply elasticfleet.install_agent_grid queue=True

View File

@@ -1,31 +0,0 @@
#!/bin/bash
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
. /usr/sbin/so-common
{%- if grains['role'] in ['so-eval','so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode', 'so-import']%}
/usr/sbin/so-restart elasticsearch $1
{%- endif %}
{%- if grains['role'] in ['so-eval', 'so-manager', 'so-managersearch', 'so-standalone', 'so-import']%}
/usr/sbin/so-restart kibana $1
{%- endif %}
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode']%}
/usr/sbin/so-restart logstash $1
{%- endif %}
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode']%}
/usr/sbin/so-restart curator $1
{%- endif %}
{%- if grains['role'] in ['so-eval','so-manager', 'so-managersearch', 'so-standalone']%}
/usr/sbin/so-restart elastalert $1
{%- endif %}

View File

@@ -1,31 +0,0 @@
#!/bin/bash
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
. /usr/sbin/so-common
{%- if grains['role'] in ['so-eval','so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode', 'so-import']%}
/usr/sbin/so-start elasticsearch $1
{%- endif %}
{%- if grains['role'] in ['so-eval', 'so-manager', 'so-managersearch', 'so-standalone', 'so-import']%}
/usr/sbin/so-start kibana $1
{%- endif %}
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode']%}
/usr/sbin/so-start logstash $1
{%- endif %}
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode']%}
/usr/sbin/so-start curator $1
{%- endif %}
{%- if grains['role'] in ['so-eval','so-manager', 'so-managersearch', 'so-standalone']%}
/usr/sbin/so-start elastalert $1
{%- endif %}

View File

@@ -1,31 +0,0 @@
#!/bin/bash
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
. /usr/sbin/so-common
{%- if grains['role'] in ['so-eval','so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode', 'so-import']%}
/usr/sbin/so-stop elasticsearch $1
{%- endif %}
{%- if grains['role'] in ['so-eval', 'so-manager', 'so-managersearch', 'so-standalone', 'so-import']%}
/usr/sbin/so-stop kibana $1
{%- endif %}
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode']%}
/usr/sbin/so-stop logstash $1
{%- endif %}
{%- if grains['role'] in ['so-manager', 'so-managersearch', 'so-standalone', 'so-heavynode', 'so-searchnode']%}
/usr/sbin/so-stop curator $1
{%- endif %}
{%- if grains['role'] in ['so-eval','so-manager', 'so-managersearch', 'so-standalone']%}
/usr/sbin/so-stop elastalert $1
{%- endif %}

View File

@@ -1,15 +0,0 @@
#!/bin/bash
#
#
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
IP={{ salt['grains.get']('ip_interfaces').get(salt['pillar.get']('sensor:mainint', salt['pillar.get']('manager:mainint', salt['pillar.get']('elasticsearch:mainint', salt['pillar.get']('host:mainint')))))[0] }}
ESPORT=9200
echo "Removing read only attributes for indices..."
echo
curl -K /opt/so/conf/elasticsearch/curl.config -s -k -XPUT -H "Content-Type: application/json" -L https://$IP:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}' 2>&1 | if grep -q ack; then echo "Index settings updated..."; else echo "There was any issue updating the read-only attribute. Please ensure Elasticsearch is running.";fi;

View File

@@ -1,104 +0,0 @@
#!/usr/bin/bash
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
. /usr/sbin/so-common
if [[ $# -lt 1 ]]; then
echo "Usage: $0 --role=<ROLE> --ip=<IP ADDRESS> --apply=<true|false>"
echo ""
echo " Example: so-firewall --role=sensor --ip=192.168.254.100 --apply=true"
echo ""
exit 1
fi
for i in "$@"; do
case $i in
-r=*|--role=*)
ROLE="${i#*=}"
shift
;;
-i=*|--ip=*)
IP="${i#*=}"
shift
;;
-a=*|--apply*)
APPLY="${i#*=}"
shift
;;
-*|--*)
echo "Unknown option $i"
exit 1
;;
*)
;;
esac
done
ROLE=${ROLE,,}
APPLY=${APPLY,,}
function rolecall() {
THEROLE=$1
THEROLES="analyst analyst_workstations beats_endpoint beats_endpoint_ssl elastic_agent_endpoint elasticsearch_rest endgame eval heavynodes idh manager managersearch receivers searchnodes sensors standalone strelka_frontend syslog"
for AROLE in $THEROLES; do
if [ "$AROLE" = "$THEROLE" ]; then
return 0
fi
done
return 1
}
# Make sure the required options are specified
if [ -z "$ROLE" ]; then
echo "Please specify a role with --role="
exit 1
fi
if [ -z "$IP" ]; then
echo "Please specify an IP address with --ip="
exit 1
fi
# Are we dealing with a role that this script supports?
if rolecall "$ROLE"; then
echo "$ROLE is a supported role"
else
echo "This is not a supported role"
exit 1
fi
# Are we dealing with an IP?
if verify_ip4 "$IP"; then
echo "$IP is a valid IP or CIDR"
else
echo "$IP is not a valid IP or CIDR"
exit 1
fi
local_salt_dir=/opt/so/saltstack/local/salt/firewall
# Let's see if the file exists and if it does, let's see if the IP exists.
if [ -f "$local_salt_dir/hostgroups/$ROLE" ]; then
if grep -q $IP "$local_salt_dir/hostgroups/$ROLE"; then
echo "Host already exists"
exit 0
fi
fi
# If you have reached this part of your quest then let's add the IP
echo "Adding $IP to the $ROLE role"
echo "$IP" >> $local_salt_dir/hostgroups/$ROLE
# Check to see if we are applying this right away.
if [ "$APPLY" = "true" ]; then
echo "Applying the firewall rules"
salt-call state.apply firewall queue=True
echo "Firewall rules have been applied... Review logs further if there were errors."
echo ""
else
echo "Firewall rules will be applied next salt run"
fi

View File

@@ -1,27 +0,0 @@
#!/bin/bash
local_salt_dir=/opt/so/saltstack/local
got_root() {
# Make sure you are root
if [ "$(id -u)" -ne 0 ]; then
echo "This script must be run using sudo!"
exit 1
fi
}
got_root
if [ ! -f $local_salt_dir/pillar/fireeye/init.sls ]; then
echo "This is nto configured for Helix Mode. Please re-install."
exit
else
echo "Enter your Helix API Key: "
read APIKEY
sed -i "s/^ api_key.*/ api_key: $APIKEY/g" $local_salt_dir/pillar/fireeye/init.sls
docker stop so-logstash
docker rm so-logstash
echo "Restarting Logstash for updated key"
salt-call state.apply logstash queue=True
fi

View File

@@ -38,6 +38,7 @@ container_list() {
"so-zeek" "so-zeek"
"so-elastic-agent" "so-elastic-agent"
"so-elastic-agent-builder" "so-elastic-agent-builder"
"so-elastic-fleet-package-registry"
) )
elif [ $MANAGERCHECK != 'so-helix' ]; then elif [ $MANAGERCHECK != 'so-helix' ]; then
TRUSTED_CONTAINERS=( TRUSTED_CONTAINERS=(
@@ -45,6 +46,7 @@ container_list() {
"so-elastalert" "so-elastalert"
"so-elastic-agent" "so-elastic-agent"
"so-elastic-agent-builder" "so-elastic-agent-builder"
"so-elastic-fleet-package-registry"
"so-elasticsearch" "so-elasticsearch"
"so-idh" "so-idh"
"so-idstools" "so-idstools"

View File

@@ -1,17 +0,0 @@
#!/bin/bash
#
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% set MAININT = salt['pillar.get']('host:mainint') -%}
{% set NODEIP = salt['grains.get']('ip_interfaces').get(MAININT)[0] -%}
. /usr/sbin/so-common
if [ "$1" == "" ]; then
for i in $(curl -s -L http://{{ NODEIP }}:9600/_node/stats | jq .pipelines | jq '. | to_entries | .[].key' | sed 's/\"//g'); do echo ${i^}:; curl -s localhost:9600/_node/stats | jq .pipelines.$i.events; done
else
curl -s -L http://{{ NODEIP }}:9600/_node/stats | jq .pipelines.$1.events
fi

View File

@@ -1,304 +0,0 @@
#!/bin/bash
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
if [ -f /usr/sbin/so-common ]; then
. /usr/sbin/so-common
fi
if [ "$(id -u)" -ne 0 ]; then
echo "This script must be run using sudo!"
exit 1
fi
if [[ $# -lt 1 ]]; then
echo "Usage: $0 -o=<operation> -m=[id]"
echo ""
echo " where <operation> is one of the following:"
echo ""
echo " list: Lists all keys with hashes"
echo " accept: Accepts a new key and adds the minion files"
echo " delete: Removes the key and deletes the minion files"
echo " reject: Rejects a key"
echo " test: Perform minion test"
echo ""
exit 1
fi
for i in "$@"; do
case $i in
-o=*|--operation=*)
OPERATION="${i#*=}"
shift
;;
-m=*|--minionid=*)
MINION_ID="${i#*=}"
shift
;;
-e=*|--esheap=*)
ES_HEAP_SIZE="${i#*=}"
shift
;;
-n=*|--mgmtnic=*)
MNIC="${i#*=}"
shift
;;
-d=*|--description=*)
NODE_DESCRIPTION="${i#*=}"
shift
;;
-a=*|--monitor=*)
INTERFACE="${i#*=}"
shift
;;
-i=*|--ip=*)
MAINIP="${i#*=}"
shift
;;
-*|--*)
echo "Unknown option $i"
exit 1
;;
*)
;;
esac
done
PILLARFILE=/opt/so/saltstack/local/pillar/minions/$MINION_ID.sls
ADVPILLARFILE=/opt/so/saltstack/local/pillar/minions/adv_$MINION_ID.sls
function getinstallinfo() {
# Pull from file
INSTALLVARS=$(sudo salt "$MINION_ID" cp.get_file_str /opt/so/install.txt --out=newline_values_only)
source <(echo $INSTALLVARS)
}
function testminion() {
# Always run on the host, since this is going to be the manager of a distributed grid, or an eval/standalone.
# Distributed managers must run this in order for the sensor nodes to have access to the so-tcpreplay image.
so-test
result=$?
# If this so-minion script is not running on the given minion ID, run so-test remotely on the sensor as well
local_id=$(lookup_grain id)
if [[ ! "$local_id" =~ "${MINION_ID}_" ]]; then
salt "$MINION_ID" cmd.run 'so-test'
result=$?
fi
exit $result
}
function listminions() {
salt-key list -F --out=json
exit $?
}
function rejectminion() {
salt-key -y -r $MINION_ID
exit $?
}
function acceptminion() {
salt-key -y -a $MINION_ID
}
function deleteminion() {
salt-key -y -d $MINION_ID
}
function deleteminionfiles () {
rm -f $PILLARFILE
rm -f $ADVPILLARFILE
}
# Create the minion file
function create_minion_files() {
mkdir -p /opt/so/saltstack/local/pillar/minions
touch $ADVPILLARFILE
if [ -f "$PILLARFILE" ]; then
rm $PILLARFILE
fi
}
# Add Elastic settings to the minion file
function add_elastic_to_minion() {
printf '%s\n'\
"elasticsearch:"\
" esheap: '$ES_HEAP_SIZE'"\
" " >> $PILLARFILE
}
# Add IDH Services info to the minion file
function add_idh_to_minion() {
printf '%s\n'\
"idh:"\
" restrict_management_ip: $IDH_MGTRESTRICT"\
" services:" >> "$PILLARFILE"
IFS=',' read -ra IDH_SERVICES_ARRAY <<< "$IDH_SERVICES"
for service in ${IDH_SERVICES_ARRAY[@]}; do
echo " - $service" | tr '[:upper:]' '[:lower:]' | tr -d '"' >> "$PILLARFILE"
done
}
function add_logstash_to_minion() {
# Create the logstash advanced pillar
printf '%s\n'\
"logstash_settings:"\
" ls_host: '$LSHOSTNAME'"\
" ls_pipeline_batch_size: 125"\
" ls_input_threads: 1"\
" lsheap: $LSHEAP"\
" ls_pipeline_workers: $CPUCORES"\
" " >> $PILLARFILE
}
# Analyst Workstation
function add_analyst_to_minion() {
printf '%s\n'\
"host:"\
" mainint: '$MNIC'"\
"workstation:"\
" gui:"\
" enabled: true"\
"sensoroni:"\
" node_description: '${NODE_DESCRIPTION//\'/''}'" >> $PILLARFILE
}
# Add basic host info to the minion file
function add_host_to_minion() {
printf '%s\n'\
"host:"\
" mainip: '$MAINIP'"\
" mainint: '$MNIC'" >> $PILLARFILE
}
# Add sensoroni specific information - Can we pull node_adrees from the host pillar?
function add_sensoroni_to_minion() {
printf '%s\n'\
"sensoroni:"\
" node_description: '${NODE_DESCRIPTION//\'/''}'"\
" " >> $PILLARFILE
}
# Sensor settings for the minion pillar
function add_sensor_to_minion() {
echo "sensor:" >> $PILLARFILE
echo " interface: '$INTERFACE'" >> $PILLARFILE
echo " mtu: 9000" >> $PILLARFILE
echo "zeek:" >> $PILLARFILE
echo " config:" >> $PILLARFILE
echo " node:" >> $PILLARFILE
echo " lb_procs: '$CORECOUNT'" >> $PILLARFILE
echo "suricata:" >> $PILLARFILE
echo " config:" >> $PILLARFILE
echo " af-packet:" >> $PILLARFILE
echo " threads: '$CORECOUNT'" >> $PILLARFILE
echo "pcap:" >> $PILLARFILE
echo " enabled: True" >> $PILLARFILE
}
function updateMine() {
salt "$MINION_ID" mine.send network.ip_addrs interface="$MNIC"
}
function apply_ES_state() {
salt-call state.apply elasticsearch concurrent=True
}
function createEVAL() {
add_elastic_to_minion
add_logstash_to_minion
add_sensor_to_minion
}
function createIDH() {
add_idh_to_minion
}
function createIMPORT() {
add_elastic_to_minion
add_logstash_to_minion
add_sensor_to_minion
}
function createHEAVYNODE() {
add_elastic_to_minion
add_logstash_to_minion
add_sensor_to_minion
}
function createMANAGER() {
add_elastic_to_minion
add_logstash_to_minion
}
function createMANAGERSEARCH() {
add_elastic_to_minion
add_logstash_to_minion
}
function createSENSOR() {
add_sensor_to_minion
}
function createSEARCHNODE() {
add_elastic_to_minion
add_logstash_to_minion
updateMine
apply_ES_state
}
function createSTANDALONE() {
add_elastic_to_minion
add_logstash_to_minion
add_sensor_to_minion
}
function testConnection() {
retry 15 3 "salt '$MINION_ID' test.ping" True
local ret=$?
if [[ $ret != 0 ]]; then
echo "The Minion has been accepted but is not online. Try again later"
echo "Deleting the key"
deleteminion
exit 1
fi
}
if [[ "$OPERATION" = 'list' ]]; then
listminions
fi
if [[ "$OPERATION" = 'delete' ]]; then
deleteminionfiles
deleteminion
fi
if [[ "$OPERATION" = 'add' || "$OPERATION" = 'setup' ]]; then
# Skip this if its setup
if [ $OPERATION != 'setup' ]; then
# Accept the salt key
acceptminion
# Test to see if the minion was accepted
testConnection
# Pull the info from the file to build what is needed
getinstallinfo
fi
# Check to see if nodetype is set
if [ -z $NODETYPE ]; then
echo "No node type specified"
exit 1
fi
create_minion_files
add_host_to_minion
add_sensoroni_to_minion
create$NODETYPE
echo "Minion file created for $MINION_ID"
fi
if [[ "$OPERATION" = 'test' ]]; then
testminion
fi

View File

@@ -24,6 +24,7 @@ if [ $# -ge 1 ]; then
case $1 in case $1 in
"steno") docker stop so-steno && docker rm so-steno && salt-call state.apply pcap queue=True;; "steno") docker stop so-steno && docker rm so-steno && salt-call state.apply pcap queue=True;;
"elastic-fleet") docker stop so-elastic-fleet && docker rm so-elastic-fleet && salt-call state.apply elasticfleet queue=True;;
*) docker stop so-$1 ; docker rm so-$1 ; salt-call state.apply $1 queue=True;; *) docker stop so-$1 ; docker rm so-$1 ; salt-call state.apply $1 queue=True;;
esac esac
else else

View File

@@ -1,10 +0,0 @@
#!/bin/bash
. /usr/sbin/so-common
argstr=""
for arg in "$@"; do
argstr="${argstr} \"${arg}\""
done
docker exec so-idstools /bin/bash -c "cd /opt/so/idstools/etc && idstools-rulecat --force ${argstr}"

View File

@@ -24,6 +24,7 @@ if [ $# -ge 1 ]; then
case $1 in case $1 in
"all") salt-call state.highstate queue=True;; "all") salt-call state.highstate queue=True;;
"steno") if docker ps | grep -q so-$1; then printf "\n$1 is already running!\n\n"; else docker rm so-$1 >/dev/null 2>&1 ; salt-call state.apply pcap queue=True; fi ;; "steno") if docker ps | grep -q so-$1; then printf "\n$1 is already running!\n\n"; else docker rm so-$1 >/dev/null 2>&1 ; salt-call state.apply pcap queue=True; fi ;;
"elastic-fleet") if docker ps | grep -q so-$1; then printf "\n$1 is already running!\n\n"; else docker rm so-$1 >/dev/null 2>&1 ; salt-call state.apply elasticfleet queue=True; fi ;;
*) if docker ps | grep -E -q '^so-$1$'; then printf "\n$1 is already running\n\n"; else docker rm so-$1 >/dev/null 2>&1 ; salt-call state.apply $1 queue=True; fi ;; *) if docker ps | grep -E -q '^so-$1$'; then printf "\n$1 is already running\n\n"; else docker rm so-$1 >/dev/null 2>&1 ; salt-call state.apply $1 queue=True; fi ;;
esac esac
else else

View File

@@ -170,7 +170,8 @@ def main():
if "-h" in options or "--help" in options or "-?" in options: if "-h" in options or "--help" in options or "-?" in options:
showUsage(options, None) showUsage(options, None)
if os.environ["USER"] != "root": proc = subprocess.run(['id', '-u'], stdout=subprocess.PIPE, encoding="utf-8")
if proc.stdout.strip() != "0":
fail("This program must be run as root") fail("This program must be run as root")
console = Console() console = Console()

View File

@@ -61,7 +61,7 @@ if [ -f "$pillar_file" ]; then
reboot; reboot;
else else
echo "There was an issue applying the workstation state. Please review the log above or at /opt/so/logs/salt/minion." echo "There was an issue applying the workstation state. Please review the log above or at /opt/so/log/salt/minion."
fi fi
else # workstation is already added else # workstation is already added
echo "The workstation pillar already exists in $pillar_file." echo "The workstation pillar already exists in $pillar_file."

81
salt/curator/config.sls Normal file
View File

@@ -0,0 +1,81 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% from 'allowed_states.map.jinja' import allowed_states %}
{% if sls.split('.')[0] in allowed_states %}
{% from "curator/map.jinja" import CURATORMERGED %}
# Create the group
curatorgroup:
group.present:
- name: curator
- gid: 934
# Add user
curator:
user.present:
- uid: 934
- gid: 934
- home: /opt/so/conf/curator
- createhome: False
# Create the log directory
curlogdir:
file.directory:
- name: /opt/so/log/curator
- user: 934
- group: 939
curactiondir:
file.directory:
- name: /opt/so/conf/curator/action
- user: 934
- group: 939
- makedirs: True
actionconfs:
file.recurse:
- name: /opt/so/conf/curator/action
- source: salt://curator/files/action
- user: 934
- group: 939
- template: jinja
- defaults:
CURATORMERGED: {{ CURATORMERGED.elasticsearch.index_settings }}
curconf:
file.managed:
- name: /opt/so/conf/curator/curator.yml
- source: salt://curator/files/curator.yml
- user: 934
- group: 939
- mode: 660
- template: jinja
- show_changes: False
curator_sbin:
file.recurse:
- name: /usr/sbin
- source: salt://curator/tools/sbin
- user: 934
- group: 939
- file_mode: 755
curator_sbin_jinja:
file.recurse:
- name: /usr/sbin
- source: salt://curator/tools/sbin_jinja
- user: 934
- group: 939
- file_mode: 755
- template: jinja
{% else %}
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %}

View File

@@ -1,4 +1,6 @@
elasticsearch: curator:
enabled: False
elasticsearch:
index_settings: index_settings:
logs-import-so: logs-import-so:
close: 73000 close: 73000

35
salt/curator/disabled.sls Normal file
View File

@@ -0,0 +1,35 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% from 'allowed_states.map.jinja' import allowed_states %}
{% if sls.split('.')[0] in allowed_states %}
include:
- curator.sostatus
so-curator:
docker_container.absent:
- force: True
so-curator_so-status.disabled:
file.comment:
- name: /opt/so/conf/so-status/so-status.conf
- regex: ^so-curator$
so-curator-cluster-close:
cron.absent:
- identifier: so-curator-cluster-close
so-curator-cluster-delete:
cron.absent:
- identifier: so-curator-cluster-delete
{% else %}
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %}

88
salt/curator/enabled.sls Normal file
View File

@@ -0,0 +1,88 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% from 'allowed_states.map.jinja' import allowed_states %}
{% if sls.split('.')[0] in allowed_states %}
{% from 'vars/globals.map.jinja' import GLOBALS %}
{% from 'docker/docker.map.jinja' import DOCKER %}
include:
- curator.config
- curator.sostatus
so-curator:
docker_container.running:
- image: {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-curator:{{ GLOBALS.so_version }}
- start: True
- hostname: curator
- name: so-curator
- user: curator
- networks:
- sobridge:
- ipv4_address: {{ DOCKER.containers['so-curator'].ip }}
- interactive: True
- tty: True
- binds:
- /opt/so/conf/curator/curator.yml:/etc/curator/config/curator.yml:ro
- /opt/so/conf/curator/action/:/etc/curator/action:ro
- /opt/so/log/curator:/var/log/curator:rw
{% if DOCKER.containers['so-curator'].custom_bind_mounts %}
{% for BIND in DOCKER.containers['so-curator'].custom_bind_mounts %}
- {{ BIND }}
{% endfor %}
{% endif %}
{% if DOCKER.containers['so-curator'].extra_hosts %}
- extra_hosts:
{% for XTRAHOST in DOCKER.containers['so-curator'].extra_hosts %}
- {{ XTRAHOST }}
{% endfor %}
{% endif %}
{% if DOCKER.containers['so-curator'].extra_env %}
- environment:
{% for XTRAENV in DOCKER.containers['so-curator'].extra_env %}
- {{ XTRAENV }}
{% endfor %}
{% endif %}
- require:
- file: actionconfs
- file: curconf
- file: curlogdir
- watch:
- file: curconf
delete_so-curator_so-status.disabled:
file.uncomment:
- name: /opt/so/conf/so-status/so-status.conf
- regex: ^so-curator$
so-curator-cluster-close:
cron.present:
- name: /usr/sbin/so-curator-cluster-close > /opt/so/log/curator/cron-close.log 2>&1
- identifier: so-curator-cluster-close
- user: root
- minute: '2'
- hour: '*/1'
- daymonth: '*'
- month: '*'
- dayweek: '*'
so-curator-cluster-delete:
cron.present:
- name: /usr/sbin/so-curator-cluster-delete > /opt/so/log/curator/cron-cluster-delete.log 2>&1
- identifier: so-curator-cluster-delete
- user: root
- minute: '*/5'
- hour: '*'
- daymonth: '*'
- month: '*'
- dayweek: '*'
{% else %}
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %}

View File

@@ -1,85 +0,0 @@
#!/bin/bash
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% from 'vars/globals.map.jinja' import GLOBALS %}
{% import_yaml 'elasticsearch/defaults.yaml' as ELASTICDEFAULTS %}
{%- set ELASTICSEARCH_HOST = GLOBALS.node_ip -%}
{%- set RETENTION = salt['pillar.get']('elasticsearch:retention', ELASTICDEFAULTS.elasticsearch.retention, merge=true) -%}
LOG="/opt/so/log/curator/so-curator-cluster-delete.log"
LOG_SIZE_LIMIT=$(/usr/sbin/so-elasticsearch-cluster-space-total {{ RETENTION.retention_pct}})
overlimit() {
[[ $(/usr/sbin/so-elasticsearch-cluster-space-used) -gt "${LOG_SIZE_LIMIT}" ]]
}
closedindices() {
# If we can't query Elasticsearch, then immediately return false.
/usr/sbin/so-elasticsearch-query _cat/indices?h=index,status | grep close > /dev/null 2>&1
[ $? -eq 1 ] && return false
# First, get the list of closed indices using _cat/indices?h=index,status | grep close | awk '{print $1}'.
# Next, filter out any so-case indices.
# Finally, use grep's -q option to return true if there are any remaining logstash-, so-, or .ds-logs- indices.
/usr/sbin/so-elasticsearch-query _cat/indices?h=index,status | grep close | awk '{print $1}' | grep -v "so-case" | grep -q -E "(logstash-|so-|.ds-logs-)"
}
# Check for 2 conditions:
# 1. Are Elasticsearch indices using more disk space than LOG_SIZE_LIMIT?
# 2. Are there any closed indices that we can delete?
# If both conditions are true, keep on looping until one of the conditions is false.
while overlimit && closedindices; do
CLOSED_INDICES=$(/usr/sbin/so-elasticsearch-query _cat/indices?h=index,status | grep close | awk '{print $1}' | grep -v "so-case" | grep -E "(logstash-|so-|.ds-logs-)" | sort -t- -k3)
# We iterate through the closed indices
for CLOSED_INDEX in ${CLOSED_INDICES}; do
# Now that we've sorted the indices from oldest to newest, we need to check each index to see if it is assigned as the current write index for a data stream
# To do so, we need to identify to which data stream this index is associated
# We extract the data stream name using the pattern below
DATASTREAM_PATTERN="logs-[a-zA-Z_.]+-[a-zA-Z_.]+"
DATASTREAM=$(echo "${CLOSED_INDEX}" | grep -oE "$DATASTREAM_PATTERN")
# We look up the data stream, and determine the write index
CURRENT_WRITE_INDEX=$(/usr/sbin/so-elasticsearch-query _data_stream/$DATASTREAM | jq -r .data_streams[0].indices[-1].index_name)
# We make sure we are not trying to delete a write index
if [ "${CLOSED_INDEX}" != "${CURRENT_WRITE_INDEX}" ]; then
# This should not be a write index, so we should be allowed to delete it
/usr/sbin/so-elasticsearch-query ${CLOSED_INDEX} -XDELETE
# Finally, write a log entry that says we deleted it.
echo "$(date) - Used disk space exceeds LOG_SIZE_LIMIT (${LOG_SIZE_LIMIT} GB) - Index ${CLOSED_INDEX} deleted ..." >> ${LOG}
fi
if ! overlimit; then
exit
fi
done
done
while overlimit; do
# We need to determine the oldest open index.
# First, get the list of open indices using _cat/indices?h=index,status | grep open | awk '{print $1}'.
# Next, filter out any so-case indices and only select the remaining logstash-, so-, or .ds-logs- indices.
# Then, sort by date by telling sort to use hyphen as delimiter and sort on the third field.
OPEN_INDICES=$(/usr/sbin/so-elasticsearch-query _cat/indices?h=index,status | grep open | awk '{print $1}' | grep -v "so-case" | grep -E "(logstash-|so-|.ds-logs-)" | sort -t- -k3)
# We iterate through the open indices
for OPEN_INDEX in ${OPEN_INDICES}; do
# Now that we've sorted the indices from oldest to newest, we need to check each index to see if it is assigned as the current write index for a data stream
# To do so, we need to identify to which data stream this index is associated
# We extract the data stream name using the pattern below
DATASTREAM_PATTERN="logs-[a-zA-Z_.]+-[a-zA-Z_.]+"
DATASTREAM=$(echo "${OPEN_INDEX}" | grep -oE "$DATASTREAM_PATTERN")
# We look up the data stream, and determine the write index
CURRENT_WRITE_INDEX=$(/usr/sbin/so-elasticsearch-query _data_stream/$DATASTREAM | jq -r .data_streams[0].indices[-1].index_name)
# We make sure we are not trying to delete a write index
if [ "${OPEN_INDEX}" != "${CURRENT_WRITE_INDEX}" ]; then
# This should not be a write index, so we should be allowed to delete it
/usr/sbin/so-elasticsearch-query ${OPEN_INDEX} -XDELETE
# Finally, write a log entry that says we deleted it.
echo "$(date) - Used disk space exceeds LOG_SIZE_LIMIT (${LOG_SIZE_LIMIT} GB) - Index ${OPEN_INDEX} deleted ..." >> ${LOG}
fi
if ! overlimit; then
exit
fi
done
done

View File

@@ -4,9 +4,9 @@
# Elastic License 2.0. # Elastic License 2.0.
{% from 'vars/globals.map.jinja' import GLOBALS %} {% from 'vars/globals.map.jinja' import GLOBALS %}
{% if grains['role'] in ['so-searchnode', 'so-heavynode'] %} {% if GLOBALS.role in ['so-searchnode', 'so-heavynode'] %}
{%- set elasticsearch = GLOBALS.node_ip -%} {%- set elasticsearch = GLOBALS.node_ip -%}
{% elif grains['role'] in ['so-eval', 'so-managersearch', 'so-standalone', 'so-manager'] %} {% elif GLOBALS.role in ['so-eval', 'so-managersearch', 'so-standalone', 'so-manager'] %}
{%- set elasticsearch = GLOBALS.manager_ip -%} {%- set elasticsearch = GLOBALS.manager_ip -%}
{%- endif %} {%- endif %}
{%- set ES_USER = salt['pillar.get']('elasticsearch:auth:users:so_elastic_user:user', '') %} {%- set ES_USER = salt['pillar.get']('elasticsearch:auth:users:so_elastic_user:user', '') %}
@@ -30,10 +30,8 @@ elasticsearch:
id: id:
api_key: api_key:
master_only: False master_only: False
{%- if salt['pillar.get']('elasticsearch:auth:enabled') is sameas true %}
username: "{{ ES_USER }}" username: "{{ ES_USER }}"
password: "{{ ES_PASS }}" password: "{{ ES_PASS }}"
{%- endif %}
logging: logging:
loglevel: INFO loglevel: INFO

View File

@@ -3,153 +3,11 @@
# https://securityonion.net/license; you may not use this file except in compliance with the # https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0. # Elastic License 2.0.
{% from 'allowed_states.map.jinja' import allowed_states %} {% from 'curator/map.jinja' import CURATORMERGED %}
{% if sls in allowed_states %}
{% from 'vars/globals.map.jinja' import GLOBALS %}
{% from 'docker/docker.map.jinja' import DOCKER %}
{% from "curator/map.jinja" import CURATOROPTIONS %}
{% from "curator/map.jinja" import CURATORMERGED %}
{% set REMOVECURATORCRON = False %}
# Curator
# Create the group
curatorgroup:
group.present:
- name: curator
- gid: 934
# Add user
curator:
user.present:
- uid: 934
- gid: 934
- home: /opt/so/conf/curator
- createhome: False
# Create the log directory
curlogdir:
file.directory:
- name: /opt/so/log/curator
- user: 934
- group: 939
curactiondir:
file.directory:
- name: /opt/so/conf/curator/action
- user: 934
- group: 939
- makedirs: True
actionconfs:
file.recurse:
- name: /opt/so/conf/curator/action
- source: salt://curator/files/action
- user: 934
- group: 939
- template: jinja
- defaults:
CURATORMERGED: {{ CURATORMERGED }}
curconf:
file.managed:
- name: /opt/so/conf/curator/curator.yml
- source: salt://curator/files/curator.yml
- user: 934
- group: 939
- mode: 660
- template: jinja
- show_changes: False
curclusterclose:
file.managed:
- name: /usr/sbin/so-curator-cluster-close
- source: salt://curator/files/bin/so-curator-cluster-close
- user: 934
- group: 939
- mode: 755
- template: jinja
curclusterdelete:
file.managed:
- name: /usr/sbin/so-curator-cluster-delete
- source: salt://curator/files/bin/so-curator-cluster-delete
- user: 934
- group: 939
- mode: 755
curclusterdeletedelete:
file.managed:
- name: /usr/sbin/so-curator-cluster-delete-delete
- source: salt://curator/files/bin/so-curator-cluster-delete-delete
- user: 934
- group: 939
- mode: 755
- template: jinja
so-curator:
docker_container.{{ CURATOROPTIONS.status }}:
- image: {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-curator:{{ GLOBALS.so_version }}
- start: {{ CURATOROPTIONS.start }}
- hostname: curator
- name: so-curator
- user: curator
- networks:
- sobridge:
- ipv4_address: {{ DOCKER.containers['so-curator'].ip }}
- interactive: True
- tty: True
- binds:
- /opt/so/conf/curator/curator.yml:/etc/curator/config/curator.yml:ro
- /opt/so/conf/curator/action/:/etc/curator/action:ro
- /opt/so/log/curator:/var/log/curator:rw
- require:
- file: actionconfs
- file: curconf
- file: curlogdir
- watch:
- file: curconf
append_so-curator_so-status.conf:
file.append:
- name: /opt/so/conf/so-status/so-status.conf
- text: so-curator
- unless: grep -q so-curator /opt/so/conf/so-status/so-status.conf
{% if not CURATOROPTIONS.start %}
so-curator_so-status.disabled:
file.comment:
- name: /opt/so/conf/so-status/so-status.conf
- regex: ^so-curator$
{% else %}
delete_so-curator_so-status.disabled:
file.uncomment:
- name: /opt/so/conf/so-status/so-status.conf
- regex: ^so-curator$
{% endif %}
so-curatorclusterclose:
cron.present:
- name: /usr/sbin/so-curator-cluster-close > /opt/so/log/curator/cron-close.log 2>&1
- user: root
- minute: '2'
- hour: '*/1'
- daymonth: '*'
- month: '*'
- dayweek: '*'
so-curatorclusterdeletecron:
cron.present:
- name: /usr/sbin/so-curator-cluster-delete > /opt/so/log/curator/cron-cluster-delete.log 2>&1
- user: root
- minute: '*/5'
- hour: '*'
- daymonth: '*'
- month: '*'
- dayweek: '*'
include:
{% if CURATORMERGED.enabled %}
- curator.enabled
{% else %} {% else %}
- curator.disabled
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %} {% endif %}

View File

@@ -1,18 +1,7 @@
{% set CURATOROPTIONS = {} %} {# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
{% set ENABLED = salt['pillar.get']('curator:enabled', True) %} or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
{% do CURATOROPTIONS.update({'manage_sostatus': True}) %} https://securityonion.net/license; you may not use this file except in compliance with the
Elastic License 2.0. #}
# don't start the docker container if curator is disabled via pillar
{% if not ENABLED %}
{% do CURATOROPTIONS.update({'start': False}) %}
{% do CURATOROPTIONS.update({'status': 'absent'}) %}
{% if (TRUECLUSTER and grains.id.split('_')|last == 'searchnode') or (not TRUECLUSTER and grains.id.split('_')|last == 'manager') %}
{% do CURATOROPTIONS.update({'manage_sostatus': False}) %}
{% endif %}
{% else %}
{% do CURATOROPTIONS.update({'start': True}) %}
{% do CURATOROPTIONS.update({'status': 'running'}) %}
{% endif %}
{% import_yaml 'curator/defaults.yaml' as CURATORDEFAULTS %} {% import_yaml 'curator/defaults.yaml' as CURATORDEFAULTS %}
{% set CURATORMERGED = salt['pillar.get']('elasticsearch:index_settings', CURATORDEFAULTS.elasticsearch.index_settings, merge=true) %} {% set CURATORMERGED = salt['pillar.get']('curator', CURATORDEFAULTS.curator, merge=true) %}

View File

@@ -0,0 +1,108 @@
curator:
enabled:
description: You can enable or disable Curator.
helpLink: curator.html
elasticsearch:
index_settings:
logs-import-so:
close: &close
description: Age, in days, when Curator closes the index.
helpLink: curator.html
forcedType: int
delete: &delete
description: Age, in days, when Curator deletes the index.
helpLink: curator.html
forcedType: int
logs-strelka-so:
close: *close
delete: *delete
logs-suricata-so:
close: *close
delete: *delete
logs-syslog-so:
close: *close
delete: *delete
logs-zeek-so:
close: *close
delete: *delete
logs-elastic_agent-metricbeat-default:
close: *close
delete: *delete
logs-elastic_agent-osquerybeat-default:
close: *close
delete: *delete
logs-elastic_agent-fleet_server-default:
close: *close
delete: *delete
logs-elastic_agent-filebeat-default:
close: *close
delete: *delete
logs-elastic_agent-default:
close: *close
delete: *delete
logs-system-auth-default:
close: *close
delete: *delete
logs-system-application-default:
close: *close
delete: *delete
logs-system-security-default:
close: *close
delete: *delete
logs-system-system-default:
close: *close
delete: *delete
logs-system-syslog-default:
close: *close
delete: *delete
logs-windows-powershell-default:
close: *close
delete: *delete
logs-windows-sysmon_operational-default:
close: *close
delete: *delete
so-beats:
close: *close
delete: *delete
so-elasticsearch:
close: *close
delete: *delete
so-firewall:
close: *close
delete: *delete
so-ids:
close: *close
delete: *delete
so-import:
close: *close
delete: *delete
so-kratos:
close: *close
delete: *delete
so-kibana:
close: *close
delete: *delete
so-logstash:
close: *close
delete: *delete
so-netflow:
close: *close
delete: *delete
so-osquery:
close: *close
delete: *delete
so-ossec:
close: *close
delete: *delete
so-redis:
close: *close
delete: *delete
so-strelka:
close: *close
delete: *delete
so-syslog:
close: *close
delete: *delete
so-zeek:
close: *close
delete: *delete

21
salt/curator/sostatus.sls Normal file
View File

@@ -0,0 +1,21 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% from 'allowed_states.map.jinja' import allowed_states %}
{% if sls.split('.')[0] in allowed_states %}
append_so-curator_so-status.conf:
file.append:
- name: /opt/so/conf/so-status/so-status.conf
- text: so-curator
- unless: grep -q so-curator /opt/so/conf/so-status/so-status.conf
{% else %}
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %}

View File

@@ -0,0 +1,67 @@
#!/bin/bash
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% from 'vars/globals.map.jinja' import GLOBALS %}
{% import_yaml 'elasticsearch/defaults.yaml' as ELASTICDEFAULTS %}
{%- set ELASTICSEARCH_HOST = GLOBALS.node_ip -%}
{%- set RETENTION = salt['pillar.get']('elasticsearch:retention', ELASTICDEFAULTS.elasticsearch.retention, merge=true) -%}
LOG="/opt/so/log/curator/so-curator-cluster-delete.log"
ALERT_LOG="/opt/so/log/curator/alert.log"
LOG_SIZE_LIMIT_GB=$(/usr/sbin/so-elasticsearch-cluster-space-total {{ RETENTION.retention_pct}})
LOG_SIZE_LIMIT=$(( "$LOG_SIZE_LIMIT_GB" * 1000 * 1000 * 1000 ))
ITERATION=0
MAX_ITERATIONS=10
overlimit() {
[[ $(/usr/sbin/so-elasticsearch-cluster-space-used) -gt ${LOG_SIZE_LIMIT} ]]
}
###########################
# Check for 2 conditions: #
###########################
# 1. Check if Elasticsearch indices are using more disk space than LOG_SIZE_LIMIT
# 2. Check if the maximum number of iterations - MAX_ITERATIONS - has been exceeded. If so, exit.
# Closed indices will be deleted first. If we are able to bring disk space under LOG_SIZE_LIMIT, or the number of iterations has exceeded the maximum allowed number of iterations, we will break out of the loop.
while overlimit && [[ $ITERATION -lt $MAX_ITERATIONS ]]; do
# If we can't query Elasticsearch, then immediately return false.
/usr/sbin/so-elasticsearch-query _cat/indices?h=index,status > /dev/null 2>&1
[ $? -eq 1 ] && echo "$(date) - Could not query Elasticsearch." >> ${LOG} && exit
# We iterate through the closed and open indices
CLOSED_INDICES=$(/usr/sbin/so-elasticsearch-query _cat/indices?h=index,status | grep 'close$' | awk '{print $1}' | grep -vE "playbook|so-case" | grep -E "(logstash-|so-|.ds-logs-)" | sort -t- -k3)
OPEN_INDICES=$(/usr/sbin/so-elasticsearch-query _cat/indices?h=index,status | grep 'open$' | awk '{print $1}' | grep -vE "playbook|so-case" | grep -E "(logstash-|so-|.ds-logs-)" | sort -t- -k3)
for INDEX in ${CLOSED_INDICES} ${OPEN_INDICES}; do
# Now that we've sorted the indices from oldest to newest, we need to check each index to see if it is assigned as the current write index for a data stream
# To do so, we need to identify to which data stream this index is associated
# We extract the data stream name using the pattern below
DATASTREAM_PATTERN="logs-[a-zA-Z_.]+-[a-zA-Z_.]+"
DATASTREAM=$(echo "${INDEX}" | grep -oE "$DATASTREAM_PATTERN")
# We look up the data stream, and determine the write index. If there is only one backing index, we delete the entire data stream
BACKING_INDICES=$(/usr/sbin/so-elasticsearch-query _data_stream/${DATASTREAM} | jq -r '.data_streams[0].indices | length')
if [ "$BACKING_INDICES" -gt 1 ]; then
CURRENT_WRITE_INDEX=$(/usr/sbin/so-elasticsearch-query _data_stream/$DATASTREAM | jq -r .data_streams[0].indices[-1].index_name)
# We make sure we are not trying to delete a write index
if [ "${INDEX}" != "${CURRENT_WRITE_INDEX}" ]; then
# This should not be a write index, so we should be allowed to delete it
printf "\n$(date) - Used disk space exceeds LOG_SIZE_LIMIT (${LOG_SIZE_LIMIT_GB} GB) - Deleting ${INDEX} index...\n" >> ${LOG}
/usr/sbin/so-elasticsearch-query ${INDEX} -XDELETE >> ${LOG} 2>&1
fi
fi
if ! overlimit ; then
exit
fi
((ITERATION++))
done
if [[ $ITERATION -ge $MAX_ITERATIONS ]]; then
alert_id=$(uuidgen)
printf "\n$(date) -> Maximum iteration limit reached ($MAX_ITERATIONS). Unable to bring disk below threshold. Writing alert ($alert_id) to ${ALERT_LOG}\n" >> ${LOG}
printf "\n$(date),$alert_id,Maximum iteration limit reached ($MAX_ITERATIONS). Unable to bring disk below threshold.\n" >> ${ALERT_LOG}
fi
done

View File

@@ -8,93 +8,193 @@ docker:
final_octet: 20 final_octet: 20
port_bindings: port_bindings:
- 0.0.0.0:5000:5000 - 0.0.0.0:5000:5000
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-elastic-fleet': 'so-elastic-fleet':
final_octet: 21 final_octet: 21
port_bindings: port_bindings:
- 0.0.0.0:8220:8220/tcp - 0.0.0.0:8220:8220/tcp
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-elasticsearch': 'so-elasticsearch':
final_octet: 22 final_octet: 22
port_bindings: port_bindings:
- 0.0.0.0:9200:9200/tcp - 0.0.0.0:9200:9200/tcp
- 0.0.0.0:9300:9300/tcp - 0.0.0.0:9300:9300/tcp
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-idstools': 'so-idstools':
final_octet: 25 final_octet: 25
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-influxdb': 'so-influxdb':
final_octet: 26 final_octet: 26
port_bindings: port_bindings:
- 0.0.0.0:8086:8086 - 0.0.0.0:8086:8086
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-kibana': 'so-kibana':
final_octet: 27 final_octet: 27
port_bindings: port_bindings:
- 0.0.0.0:5601:5601 - 0.0.0.0:5601:5601
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-kratos': 'so-kratos':
final_octet: 28 final_octet: 28
port_bindings: port_bindings:
- 0.0.0.0:4433:4433 - 0.0.0.0:4433:4433
- 0.0.0.0:4434:4434 - 0.0.0.0:4434:4434
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-logstash': 'so-logstash':
final_octet: 29 final_octet: 29
port_bindings: port_bindings:
- 0.0.0.0:3765:3765 - 0.0.0.0:3765:3765
- 0.0.0.0:5044:5044 - 0.0.0.0:5044:5044
- 0.0.0.0:5055:5055 - 0.0.0.0:5055:5055
- 0.0.0.0:5056:5056
- 0.0.0.0:5644:5644 - 0.0.0.0:5644:5644
- 0.0.0.0:6050:6050 - 0.0.0.0:6050:6050
- 0.0.0.0:6051:6051 - 0.0.0.0:6051:6051
- 0.0.0.0:6052:6052 - 0.0.0.0:6052:6052
- 0.0.0.0:6053:6053 - 0.0.0.0:6053:6053
- 0.0.0.0:9600:9600 - 0.0.0.0:9600:9600
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-mysql': 'so-mysql':
final_octet: 30 final_octet: 30
port_bindings: port_bindings:
- 0.0.0.0:3306:3306 - 0.0.0.0:3306:3306
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-nginx': 'so-nginx':
final_octet: 31 final_octet: 31
port_bindings: port_bindings:
- 80:80 - 80:80
- 443:443 - 443:443
- 8443:8443
- 7788:7788
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-playbook': 'so-playbook':
final_octet: 32 final_octet: 32
port_bindings: port_bindings:
- 0.0.0.0:3000:3000 - 0.0.0.0:3000:3000
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-redis': 'so-redis':
final_octet: 33 final_octet: 33
port_bindings: port_bindings:
- 0.0.0.0:6379:6379 - 0.0.0.0:6379:6379
- 0.0.0.0:9696:9696 - 0.0.0.0:9696:9696
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-sensoroni':
final_octet: 99
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-soc': 'so-soc':
final_octet: 34 final_octet: 34
port_bindings: port_bindings:
- 0.0.0.0:9822:9822 - 0.0.0.0:9822:9822
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-soctopus': 'so-soctopus':
final_octet: 35 final_octet: 35
port_bindings: port_bindings:
- 0.0.0.0:7000:7000 - 0.0.0.0:7000:7000
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-strelka-backend': 'so-strelka-backend':
final_octet: 36 final_octet: 36
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-strelka-filestream': 'so-strelka-filestream':
final_octet: 37 final_octet: 37
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-strelka-frontend': 'so-strelka-frontend':
final_octet: 38 final_octet: 38
port_bindings: port_bindings:
- 0.0.0.0:57314:57314 - 0.0.0.0:57314:57314
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-strelka-manager': 'so-strelka-manager':
final_octet: 39 final_octet: 39
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-strelka-gatekeeper': 'so-strelka-gatekeeper':
final_octet: 40 final_octet: 40
port_bindings: port_bindings:
- 0.0.0.0:6381:6379 - 0.0.0.0:6381:6379
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-strelka-coordinator': 'so-strelka-coordinator':
final_octet: 41 final_octet: 41
port_bindings: port_bindings:
- 0.0.0.0:6380:6379 - 0.0.0.0:6380:6379
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-elastalert': 'so-elastalert':
final_octet: 42 final_octet: 42
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-curator': 'so-curator':
final_octet: 43 final_octet: 43
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-elastic-fleet-package-registry': 'so-elastic-fleet-package-registry':
final_octet: 44 final_octet: 44
port_bindings: port_bindings:
- 0.0.0.0:8080:8080/tcp - 0.0.0.0:8080:8080/tcp
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-idh': 'so-idh':
final_octet: 45 final_octet: 45
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-telegraf':
final_octet: 99
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-steno':
final_octet: 99
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-suricata':
final_octet: 99
custom_bind_mounts: []
extra_hosts: []
extra_env: []
'so-zeek':
final_octet: 99
custom_bind_mounts: []
extra_hosts: []
extra_env: []

View File

@@ -26,10 +26,10 @@ dockerheldpackages:
dockerheldpackages: dockerheldpackages:
pkg.installed: pkg.installed:
- pkgs: - pkgs:
- containerd.io: 1.6.18-3.1.el9 - containerd.io: 1.6.20-3.1.el9
- docker-ce: 23.0.1-1.el9 - docker-ce: 23.0.5-1.el9
- docker-ce-cli: 23.0.1-1.el9 - docker-ce-cli: 23.0.5-1.el9
- docker-ce-rootless-extras: 23.0.1-1.el9 - docker-ce-rootless-extras: 23.0.5-1.el9
- hold: True - hold: True
- update_holds: True - update_holds: True
{% endif %} {% endif %}

View File

@@ -28,6 +28,24 @@ docker:
helpLink: docker.html helpLink: docker.html
advanced: True advanced: True
multiline: True multiline: True
custom_bind_mounts:
description: List of custom local volume bindings.
advanced: True
helpLink: docker.html
multiline: True
forcedType: "[]string"
extra_hosts:
description: List of additional host entries for the container.
advanced: True
helpLink: docker.html
multiline: True
forcedType: "[]string"
extra_env:
description: List of additional ENV entries for the container.
advanced: True
helpLink: docker.html
multiline: True
forcedType: "[]string"
so-dockerregistry: *dockerOptions so-dockerregistry: *dockerOptions
so-elastalert: *dockerOptions so-elastalert: *dockerOptions
so-elastic-fleet-package-registry: *dockerOptions so-elastic-fleet-package-registry: *dockerOptions

103
salt/elastalert/config.sls Normal file
View File

@@ -0,0 +1,103 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% from 'allowed_states.map.jinja' import allowed_states %}
{% if sls.split('.')[0] in allowed_states %}
{% from 'elastalert/map.jinja' import ELASTALERTMERGED %}
# Create the group
elastagroup:
group.present:
- name: elastalert
- gid: 933
# Add user
elastalert:
user.present:
- uid: 933
- gid: 933
- home: /opt/so/conf/elastalert
- createhome: False
elastalogdir:
file.directory:
- name: /opt/so/log/elastalert
- user: 933
- group: 933
- makedirs: True
elastalert_sbin:
file.recurse:
- name: /usr/sbin
- source: salt://elastalert/tools/sbin
- user: 933
- group: 939
- file_mode: 755
#elastalert_sbin_jinja:
# file.recurse:
# - name: /usr/sbin
# - source: salt://elastalert/tools/sbin_jinja
# - user: 933
# - group: 939
# - file_mode: 755
# - template: jinja
elastarules:
file.directory:
- name: /opt/so/rules/elastalert
- user: 933
- group: 933
- makedirs: True
elastaconfdir:
file.directory:
- name: /opt/so/conf/elastalert
- user: 933
- group: 933
- makedirs: True
elastasomodulesdir:
file.directory:
- name: /opt/so/conf/elastalert/modules/so
- user: 933
- group: 933
- makedirs: True
elastacustmodulesdir:
file.directory:
- name: /opt/so/conf/elastalert/modules/custom
- user: 933
- group: 933
- makedirs: True
elastasomodulesync:
file.recurse:
- name: /opt/so/conf/elastalert/modules/so
- source: salt://elastalert/files/modules/so
- user: 933
- group: 933
- makedirs: True
elastaconf:
file.managed:
- name: /opt/so/conf/elastalert/elastalert_config.yaml
- source: salt://elastalert/files/elastalert_config.yaml.jinja
- context:
elastalert_config: {{ ELASTALERTMERGED.config }}
- user: 933
- group: 933
- mode: 660
- template: jinja
- show_changes: False
{% else %}
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %}

View File

@@ -1,4 +1,5 @@
elastalert: elastalert:
enabled: False
config: config:
rules_folder: /opt/elastalert/rules/ rules_folder: /opt/elastalert/rules/
scan_subdirectories: true scan_subdirectories: true
@@ -12,9 +13,10 @@ elastalert:
es_port: 9200 es_port: 9200
es_conn_timeout: 55 es_conn_timeout: 55
max_query_size: 5000 max_query_size: 5000
eql: true
use_ssl: true use_ssl: true
verify_certs: false verify_certs: false
writeback_index: elastalert_status writeback_index: elastalert
alert_time_limit: alert_time_limit:
days: 2 days: 2
index_settings: index_settings:

View File

@@ -0,0 +1,27 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% from 'allowed_states.map.jinja' import allowed_states %}
{% if sls.split('.')[0] in allowed_states %}
include:
- elastalert.sostatus
so-elastalert:
docker_container.absent:
- force: True
so-elastalert_so-status.disabled:
file.comment:
- name: /opt/so/conf/so-status/so-status.conf
- regex: ^so-elastalert$
{% else %}
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %}

View File

@@ -1,11 +0,0 @@
{% from 'vars/globals.map.jinja' import GLOBALS %}
{% import_yaml 'elastalert/defaults.yaml' as ELASTALERT %}
{% set elastalert_pillar = salt['pillar.get']('elastalert:config', {}) %}
{% do ELASTALERT.elastalert.config.update({'es_host': GLOBALS.manager}) %}
{% do ELASTALERT.elastalert.config.update({'es_username': pillar.elasticsearch.auth.users.so_elastic_user.user}) %}
{% do ELASTALERT.elastalert.config.update({'es_password': pillar.elasticsearch.auth.users.so_elastic_user.pass}) %}
{% do salt['defaults.merge'](ELASTALERT.elastalert.config, elastalert_pillar, in_place=True) %}

View File

@@ -0,0 +1,74 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% from 'allowed_states.map.jinja' import allowed_states %}
{% if sls.split('.')[0] in allowed_states %}
{% from 'vars/globals.map.jinja' import GLOBALS %}
{% from 'docker/docker.map.jinja' import DOCKER %}
include:
- elastalert.config
- elastalert.sostatus
wait_for_elasticsearch:
cmd.run:
- name: so-elasticsearch-wait
so-elastalert:
docker_container.running:
- image: {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-elastalert:{{ GLOBALS.so_version }}
- hostname: elastalert
- name: so-elastalert
- user: so-elastalert
- networks:
- sobridge:
- ipv4_address: {{ DOCKER.containers['so-elastalert'].ip }}
- detach: True
- binds:
- /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:/opt/elastalert/config.yaml:ro
{% if DOCKER.containers['so-elastalert'].custom_bind_mounts %}
{% for BIND in DOCKER.containers['so-elastalert'].custom_bind_mounts %}
- {{ BIND }}
{% endfor %}
{% endif %}
- extra_hosts:
- {{ GLOBALS.manager }}:{{ GLOBALS.manager_ip }}
{% if DOCKER.containers['so-elastalert'].extra_hosts %}
{% for XTRAHOST in DOCKER.containers['so-elastalert'].extra_hosts %}
- {{ XTRAHOST }}
{% endfor %}
{% endif %}
{% if DOCKER.containers['so-elastalert'].extra_env %}
- environment:
{% for XTRAENV in DOCKER.containers['so-elastalert'].extra_env %}
- {{ XTRAENV }}
{% endfor %}
{% endif %}
- require:
- cmd: wait_for_elasticsearch
- file: elastarules
- file: elastalogdir
- file: elastacustmodulesdir
- file: elastaconf
- watch:
- file: elastaconf
- onlyif:
- "so-elasticsearch-query / | jq -r '.version.number[0:1]' | grep -q 8" {# only run this state if elasticsearch is version 8 #}
delete_so-elastalert_so-status.disabled:
file.uncomment:
- name: /opt/so/conf/so-status/so-status.conf
- regex: ^so-elastalert$
{% else %}
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %}

View File

@@ -31,7 +31,7 @@ class PlaybookESAlerter(Alerter):
creds = (self.rule['es_username'], self.rule['es_password']) creds = (self.rule['es_username'], self.rule['es_password'])
payload = {"rule": { "name": self.rule['play_title'],"case_template": self.rule['play_id'],"uuid": self.rule['play_id'],"category": self.rule['rule.category']},"event":{ "severity": self.rule['event.severity'],"module": self.rule['event.module'],"dataset": self.rule['event.dataset'],"severity_label": self.rule['sigma_level']},"kibana_pivot": self.rule['kibana_pivot'],"soc_pivot": self.rule['soc_pivot'],"play_url": self.rule['play_url'],"sigma_level": self.rule['sigma_level'],"event_data": match, "@timestamp": timestamp} payload = {"rule": { "name": self.rule['play_title'],"case_template": self.rule['play_id'],"uuid": self.rule['play_id'],"category": self.rule['rule.category']},"event":{ "severity": self.rule['event.severity'],"module": self.rule['event.module'],"dataset": self.rule['event.dataset'],"severity_label": self.rule['sigma_level']},"kibana_pivot": self.rule['kibana_pivot'],"soc_pivot": self.rule['soc_pivot'],"play_url": self.rule['play_url'],"sigma_level": self.rule['sigma_level'],"event_data": match, "@timestamp": timestamp}
url = f"https://{self.rule['es_host']}:{self.rule['es_port']}/so-playbook-alerts-{today}/_doc/" url = f"{self.rule['es_hosts']}/so-playbook-alerts-{today}/_doc/"
requests.post(url, data=json.dumps(payload), headers=headers, verify=False, auth=creds) requests.post(url, data=json.dumps(payload), headers=headers, verify=False, auth=creds)
def get_info(self): def get_info(self):

View File

@@ -1,124 +1,13 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one # Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0; you may not use # or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# this file except in compliance with the Elastic License 2.0. # https://securityonion.net/license; you may not use this file except in compliance with the
{% from 'allowed_states.map.jinja' import allowed_states %} # Elastic License 2.0.
{% if sls in allowed_states %}
{% from 'vars/globals.map.jinja' import GLOBALS %} {% from 'elastalert/map.jinja' import ELASTALERTMERGED %}
{% from 'docker/docker.map.jinja' import DOCKER %}
{% from 'elastalert/elastalert_config.map.jinja' import ELASTALERT as elastalert_config with context %}
# Create the group
elastagroup:
group.present:
- name: elastalert
- gid: 933
# Add user
elastalert:
user.present:
- uid: 933
- gid: 933
- home: /opt/so/conf/elastalert
- createhome: False
elastalogdir:
file.directory:
- name: /opt/so/log/elastalert
- user: 933
- group: 933
- makedirs: True
elastarules:
file.directory:
- name: /opt/so/rules/elastalert
- user: 933
- group: 933
- makedirs: True
elastaconfdir:
file.directory:
- name: /opt/so/conf/elastalert
- user: 933
- group: 933
- makedirs: True
elastasomodulesdir:
file.directory:
- name: /opt/so/conf/elastalert/modules/so
- user: 933
- group: 933
- makedirs: True
elastacustmodulesdir:
file.directory:
- name: /opt/so/conf/elastalert/modules/custom
- user: 933
- group: 933
- makedirs: True
elastasomodulesync:
file.recurse:
- name: /opt/so/conf/elastalert/modules/so
- source: salt://elastalert/files/modules/so
- user: 933
- group: 933
- makedirs: True
elastaconf:
file.managed:
- name: /opt/so/conf/elastalert/elastalert_config.yaml
- source: salt://elastalert/files/elastalert_config.yaml.jinja
- context:
elastalert_config: {{ elastalert_config.elastalert.config }}
- user: 933
- group: 933
- mode: 660
- template: jinja
- show_changes: False
wait_for_elasticsearch:
cmd.run:
- name: so-elasticsearch-wait
so-elastalert:
docker_container.running:
- image: {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-elastalert:{{ GLOBALS.so_version }}
- hostname: elastalert
- name: so-elastalert
- user: so-elastalert
- networks:
- sobridge:
- ipv4_address: {{ DOCKER.containers['so-elastalert'].ip }}
- detach: True
- binds:
- /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:/opt/elastalert/config.yaml:ro
- extra_hosts:
- {{ GLOBALS.manager }}:{{ GLOBALS.manager_ip }}
- require:
- cmd: wait_for_elasticsearch
- file: elastarules
- file: elastalogdir
- file: elastacustmodulesdir
- file: elastaconf
- watch:
- file: elastaconf
- onlyif:
- "so-elasticsearch-query / | jq -r '.version.number[0:1]' | grep -q 8" {# only run this state if elasticsearch is version 8 #}
append_so-elastalert_so-status.conf:
file.append:
- name: /opt/so/conf/so-status/so-status.conf
- text: so-elastalert
include:
{% if ELASTALERTMERGED.enabled %}
- elastalert.enabled
{% else %} {% else %}
- elastalert.disabled
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %} {% endif %}

15
salt/elastalert/map.jinja Normal file
View File

@@ -0,0 +1,15 @@
{# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
https://securityonion.net/license; you may not use this file except in compliance with the
Elastic License 2.0. #}
{% from 'vars/globals.map.jinja' import GLOBALS %}
{% import_yaml 'elastalert/defaults.yaml' as ELASTALERTDEFAULTS %}
{% set elastalert_pillar = salt['pillar.get']('elastalert:config', {}) %}
{% do ELASTALERTDEFAULTS.elastalert.config.update({'es_hosts': 'https://' + GLOBALS.manager + ':' + ELASTALERTDEFAULTS.elastalert.config.es_port|string}) %}
{% do ELASTALERTDEFAULTS.elastalert.config.update({'es_username': pillar.elasticsearch.auth.users.so_elastic_user.user}) %}
{% do ELASTALERTDEFAULTS.elastalert.config.update({'es_password': pillar.elasticsearch.auth.users.so_elastic_user.pass}) %}
{% set ELASTALERTMERGED = salt['pillar.get']('elastalert', ELASTALERTDEFAULTS.elastalert, merge=True) %}

View File

@@ -1,4 +1,7 @@
elastalert: elastalert:
enabled:
description: You can enable or disable Elastalert.
helpLink: elastalert.html
config: config:
disable_rules_on_error: disable_rules_on_error:
description: Disable rules on failure. description: Disable rules on failure.

View File

@@ -0,0 +1,21 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% from 'allowed_states.map.jinja' import allowed_states %}
{% if sls.split('.')[0] in allowed_states %}
append_so-elastalert_so-status.conf:
file.append:
- name: /opt/so/conf/so-status/so-status.conf
- text: so-elastalert
- unless: grep -q so-elastalert /opt/so/conf/so-status/so-status.conf
{% else %}
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %}

View File

@@ -0,0 +1,29 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% from 'allowed_states.map.jinja' import allowed_states %}
{% if sls.split('.')[0] in allowed_states %}
# Add Group
elasticsagentprgroup:
group.present:
- name: elastic-agent-pr
- gid: 948
# Add user
elastic-agent-pr:
user.present:
- uid: 948
- gid: 948
- home: /opt/so/conf/elastic-fleet-pr
- createhome: False
{% else %}
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %}

View File

@@ -0,0 +1,2 @@
elastic_fleet_package_registry:
enabled: False

View File

@@ -0,0 +1,27 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% from 'allowed_states.map.jinja' import allowed_states %}
{% if sls.split('.')[0] in allowed_states %}
include:
- elastic-fleet-package-registry.sostatus
so-elastic-fleet-package-registry:
docker_container.absent:
- force: True
so-elastic-fleet-package-registry_so-status.disabled:
file.comment:
- name: /opt/so/conf/so-status/so-status.conf
- regex: ^so-elastic-fleet-package-registry$
{% else %}
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %}

View File

@@ -0,0 +1,59 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% from 'allowed_states.map.jinja' import allowed_states %}
{% if sls.split('.')[0] in allowed_states %}
{% from 'vars/globals.map.jinja' import GLOBALS %}
{% from 'docker/docker.map.jinja' import DOCKER %}
include:
- elastic-fleet-package-registry.config
- elastic-fleet-package-registry.sostatus
so-elastic-fleet-package-registry:
docker_container.running:
- image: {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-elastic-fleet-package-registry:{{ GLOBALS.so_version }}
- name: so-elastic-fleet-package-registry
- hostname: Fleet-package-reg-{{ GLOBALS.hostname }}
- detach: True
- user: 948
- networks:
- sobridge:
- ipv4_address: {{ DOCKER.containers['so-elastic-fleet-package-registry'].ip }}
- extra_hosts:
- {{ GLOBALS.hostname }}:{{ GLOBALS.node_ip }}
{% if DOCKER.containers['so-elastic-fleet-package-registry'].extra_hosts %}
{% for XTRAHOST in DOCKER.containers['so-elastic-fleet-package-registry'].extra_hosts %}
- {{ XTRAHOST }}
{% endfor %}
{% endif %}
- port_bindings:
{% for BINDING in DOCKER.containers['so-elastic-fleet-package-registry'].port_bindings %}
- {{ BINDING }}
{% endfor %}
{% if DOCKER.containers['so-elastic-fleet-package-registry'].custom_bind_mounts %}
- binds:
{% for BIND in DOCKER.containers['so-elastic-fleet-package-registry'].custom_bind_mounts %}
- {{ BIND }}
{% endfor %}
{% endif %}
{% if DOCKER.containers['so-elastic-fleet-package-registry'].extra_env %}
- environment:
{% for XTRAENV in DOCKER.containers['so-elastic-fleet-package-registry'].extra_env %}
- {{ XTRAENV }}
{% endfor %}
{% endif %}
delete_so-elastic-fleet-package-registry_so-status.disabled:
file.uncomment:
- name: /opt/so/conf/so-status/so-status.conf
- regex: ^so-elastic-fleet-package-registry$
{% else %}
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %}

View File

@@ -1,52 +1,13 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one # Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0; you may not use # or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# this file except in compliance with the Elastic License 2.0. # https://securityonion.net/license; you may not use this file except in compliance with the
{% from 'allowed_states.map.jinja' import allowed_states %} # Elastic License 2.0.
{% if sls in allowed_states %}
{% from 'vars/globals.map.jinja' import GLOBALS %}
{% from 'docker/docker.map.jinja' import DOCKER %}
# Add Group {% from 'elastic-fleet-package-registry/map.jinja' import ELASTICFLEETPACKAGEREGISTRYMERGED %}
elasticsagentprgroup:
group.present:
- name: elastic-agent-pr
- gid: 948
# Add user
elastic-agent-pr:
user.present:
- uid: 948
- gid: 948
- home: /opt/so/conf/elastic-fleet-pr
- createhome: False
so-elastic-fleet-package-registry:
docker_container.running:
- image: {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-elastic-fleet-package-registry:{{ GLOBALS.so_version }}
- name: so-elastic-fleet-package-registry
- hostname: Fleet-package-reg-{{ GLOBALS.hostname }}
- detach: True
- user: 948
- networks:
- sobridge:
- ipv4_address: {{ DOCKER.containers['so-elastic-fleet-package-registry'].ip }}
- extra_hosts:
- {{ GLOBALS.hostname }}:{{ GLOBALS.node_ip }}
- port_bindings:
{% for BINDING in DOCKER.containers['so-elastic-fleet-package-registry'].port_bindings %}
- {{ BINDING }}
{% endfor %}
append_so-elastic-fleet-package-registry_so-status.conf:
file.append:
- name: /opt/so/conf/so-status/so-status.conf
- text: so-elastic-fleet-package-registry
include:
{% if ELASTICFLEETPACKAGEREGISTRYMERGED.enabled %}
- elastic-fleet-package-registry.enabled
{% else %} {% else %}
- elastic-fleet-package-registry.disabled
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %} {% endif %}

View File

@@ -0,0 +1,7 @@
{# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
https://securityonion.net/license; you may not use this file except in compliance with the
Elastic License 2.0. #}
{% import_yaml 'elastic-fleet-package-registry/defaults.yaml' as ELASTICFLEETPACKAGEREGISTRYDEFAULTS %}
{% set ELASTICFLEETPACKAGEREGISTRYMERGED = salt['pillar.get']('elastic_fleet_package_registry', ELASTICFLEETPACKAGEREGISTRYDEFAULTS.elastic_fleet_package_registry, merge=True) %}

View File

@@ -0,0 +1,4 @@
elastic_fleet_package_registry:
enabled:
description: You can enable or disable Elastic Fleet Package Registry.
advanced: True

View File

@@ -0,0 +1,21 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% from 'allowed_states.map.jinja' import allowed_states %}
{% if sls.split('.')[0] in allowed_states %}
append_so-elastic-fleet-package-registry_so-status.conf:
file.append:
- name: /opt/so/conf/so-status/so-status.conf
- text: so-elastic-fleet-package-registry
- unless: grep -q so-elastic-fleet-package-registry /opt/so/conf/so-status/so-status.conf
{% else %}
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %}

View File

@@ -0,0 +1,11 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0; you may not use
# this file except in compliance with the Elastic License 2.0.
fleetartifactdir:
file.directory:
- name: /nsm/elastic-fleet/artifacts
- user: 947
- group: 939
- makedirs: True

View File

@@ -0,0 +1,91 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% from 'allowed_states.map.jinja' import allowed_states %}
{% from 'vars/globals.map.jinja' import GLOBALS %}
{% if sls.split('.')[0] in allowed_states %}
# Add EA Group
elasticsagentgroup:
group.present:
- name: elastic-agent
- gid: 947
# Add EA user
elastic-agent:
user.present:
- uid: 947
- gid: 947
- home: /opt/so/conf/elastic-fleet
- createhome: False
elasticfleet_sbin:
file.recurse:
- name: /usr/sbin
- source: salt://elasticfleet/tools/sbin
- user: 947
- group: 939
- file_mode: 755
elasticfleet_sbin_jinja:
file.recurse:
- name: /usr/sbin
- source: salt://elasticfleet/tools/sbin_jinja
- user: 947
- group: 939
- file_mode: 755
- template: jinja
eaconfdir:
file.directory:
- name: /opt/so/conf/elastic-fleet
- user: 947
- group: 939
- makedirs: True
eastatedir:
file.directory:
- name: /opt/so/conf/elastic-fleet/state
- user: 947
- group: 939
- makedirs: True
{% if GLOBALS.role != "so-fleet" %}
eaintegrationsdir:
file.directory:
- name: /opt/so/conf/elastic-fleet/integrations
- user: 947
- group: 939
- makedirs: True
eadynamicintegration:
file.recurse:
- name: /opt/so/conf/elastic-fleet/integrations
- source: salt://elasticfleet/files/integrations-dynamic
- user: 947
- group: 939
- template: jinja
eaintegration:
file.recurse:
- name: /opt/so/conf/elastic-fleet/integrations
- source: salt://elasticfleet/files/integrations
- user: 947
- group: 939
ea-integrations-load:
file.absent:
- name: /opt/so/state/eaintegrations.txt
- onchanges:
- file: eaintegration
- file: eadynamicintegration
{% endif %}
{% else %}
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %}

View File

@@ -0,0 +1,23 @@
elasticfleet:
enabled: False
config:
server:
endpoints_enrollment: ''
es_token: ''
grid_enrollment: ''
url: ''
logging:
zeek:
excluded:
- broker
- capture_loss
- ecat_arp_info
- known_hosts
- known_services
- loaded_scripts
- ntp
- packet_filter
- reporter
- stats
- stderr
- stdout

View File

@@ -0,0 +1,27 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% from 'allowed_states.map.jinja' import allowed_states %}
{% if sls.split('.')[0] in allowed_states %}
include:
- elasticfleet.sostatus
so-elastic-fleet:
docker_container.absent:
- force: True
so-elastic-fleet_so-status.disabled:
file.comment:
- name: /opt/so/conf/so-status/so-status.conf
- regex: ^so-elastic-fleet$
{% else %}
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %}

View File

@@ -0,0 +1,83 @@
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
# https://securityonion.net/license; you may not use this file except in compliance with the
# Elastic License 2.0.
{% from 'allowed_states.map.jinja' import allowed_states %}
{% if sls.split('.')[0] in allowed_states %}
{% from 'vars/globals.map.jinja' import GLOBALS %}
{% from 'docker/docker.map.jinja' import DOCKER %}
{# This value is generated during node install and stored in minion pillar #}
{% set SERVICETOKEN = salt['pillar.get']('elasticfleet:config:server:es_token','') %}
include:
- elasticfleet.config
- elasticfleet.sostatus
{% if SERVICETOKEN != '' %}
so-elastic-fleet:
docker_container.running:
- image: {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-elastic-agent:{{ GLOBALS.so_version }}
- name: so-elastic-fleet
- hostname: FleetServer-{{ GLOBALS.hostname }}
- detach: True
- user: 947
- networks:
- sobridge:
- ipv4_address: {{ DOCKER.containers['so-elastic-fleet'].ip }}
- extra_hosts:
- {{ GLOBALS.manager }}:{{ GLOBALS.manager_ip }}
- {{ GLOBALS.hostname }}:{{ GLOBALS.node_ip }}
{% if DOCKER.containers['so-elastic-fleet'].extra_hosts %}
{% for XTRAHOST in DOCKER.containers['so-elastic-fleet'].extra_hosts %}
- {{ XTRAHOST }}
{% endfor %}
{% endif %}
- port_bindings:
{% for BINDING in DOCKER.containers['so-elastic-fleet'].port_bindings %}
- {{ BINDING }}
{% endfor %}
- binds:
- /etc/pki:/etc/pki:ro
#- /opt/so/conf/elastic-fleet/state:/usr/share/elastic-agent/state:rw
{% if DOCKER.containers['so-elastic-fleet'].custom_bind_mounts %}
{% for BIND in DOCKER.containers['so-elastic-fleet'].custom_bind_mounts %}
- {{ BIND }}
{% endfor %}
{% endif %}
- environment:
- FLEET_SERVER_ENABLE=true
- FLEET_URL=https://{{ GLOBALS.node_ip }}:8220
- FLEET_SERVER_ELASTICSEARCH_HOST=https://{{ GLOBALS.manager }}:9200
- FLEET_SERVER_SERVICE_TOKEN={{ SERVICETOKEN }}
- FLEET_SERVER_POLICY_ID=FleetServer_{{ GLOBALS.hostname }}
- FLEET_SERVER_ELASTICSEARCH_CA=/etc/pki/tls/certs/intca.crt
- FLEET_SERVER_CERT=/etc/pki/elasticfleet.crt
- FLEET_SERVER_CERT_KEY=/etc/pki/elasticfleet.key
- FLEET_CA=/etc/pki/tls/certs/intca.crt
{% if DOCKER.containers['so-elastic-fleet'].extra_env %}
{% for XTRAENV in DOCKER.containers['so-elastic-fleet'].extra_env %}
- {{ XTRAENV }}
{% endfor %}
{% endif %}
{% endif %}
{% if GLOBALS.role != "so-fleet" %}
so-elastic-fleet-integrations:
cmd.run:
- name: /usr/sbin/so-elastic-fleet-integration-policy-load
{% endif %}
delete_so-elastic-fleet_so-status.disabled:
file.uncomment:
- name: /opt/so/conf/so-status/so-status.conf
- regex: ^so-elastic-fleet$
{% else %}
{{sls}}_state_not_allowed:
test.fail_without_changes:
- name: {{sls}}_state_not_allowed
{% endif %}

View File

@@ -0,0 +1,32 @@
{% from 'elasticfleet/map.jinja' import ELASTICFLEETMERGED %}
{%- raw -%}
{
"package": {
"name": "log",
"version": ""
},
"name": "import-zeek-logs",
"namespace": "so",
"description": "Zeek Import logs",
"policy_id": "so-grid-nodes",
"inputs": {
"logs-logfile": {
"enabled": true,
"streams": {
"log.log": {
"enabled": true,
"vars": {
"paths": [
"/nsm/import/*/zeek/logs/*.log"
],
"data_stream.dataset": "import",
"tags": [],
"processors": "- dissect:\n tokenizer: \"/nsm/import/%{import.id}/zeek/logs/%{import.file}\"\n field: \"log.file.path\"\n target_prefix: \"\"\n- script:\n lang: javascript\n source: >\n function process(event) {\n var pl = event.Get(\"import.file\").slice(0,-4);\n event.Put(\"@metadata.pipeline\", \"zeek.\" + pl);\n }\n- add_fields:\n target: event\n fields:\n category: network\n module: zeek\n imported: true\n- add_tags:\n tags: \"ics\"\n when:\n regexp:\n import.file: \"^bacnet*|^bsap*|^cip*|^cotp*|^dnp3*|^ecat*|^enip*|^modbus*|^opcua*|^profinet*|^s7comm*\"",
"custom": "exclude_files: [\"{%- endraw -%}{{ ELASTICFLEETMERGED.logging.zeek.excluded | join('|') }}{%- raw -%}.log$\"]\n"
}
}
}
}
}
}
{%- endraw -%}

View File

@@ -0,0 +1,33 @@
{% from 'elasticfleet/map.jinja' import ELASTICFLEETMERGED %}
{%- raw -%}
{
"package": {
"name": "log",
"version": ""
},
"id": "zeek-logs",
"name": "zeek-logs",
"namespace": "so",
"description": "Zeek logs",
"policy_id": "so-grid-nodes",
"inputs": {
"logs-logfile": {
"enabled": true,
"streams": {
"log.log": {
"enabled": true,
"vars": {
"paths": [
"/nsm/zeek/logs/current/*.log"
],
"data_stream.dataset": "zeek",
"tags": [],
"processors": "- dissect:\n tokenizer: \"/nsm/zeek/logs/current/%{pipeline}.log\"\n field: \"log.file.path\"\n trim_chars: \".log\"\n target_prefix: \"\"\n- script:\n lang: javascript\n source: >\n function process(event) {\n var pl = event.Get(\"pipeline\");\n event.Put(\"@metadata.pipeline\", \"zeek.\" + pl);\n }\n- add_fields:\n target: event\n fields:\n category: network\n module: zeek\n- add_tags:\n tags: \"ics\"\n when:\n regexp:\n pipeline: \"^bacnet*|^bsap*|^cip*|^cotp*|^dnp3*|^ecat*|^enip*|^modbus*|^opcua*|^profinet*|^s7comm*\"",
"custom": "exclude_files: [\"{%- endraw -%}{{ ELASTICFLEETMERGED.logging.zeek.excluded | join('|') }}{%- raw -%}.log$\"]\n"
}
}
}
}
}
}
{%- endraw -%}

View File

@@ -0,0 +1,28 @@
{
"name": "elastic-defend-endpoints",
"namespace": "default",
"description": "",
"package": {
"name": "endpoint",
"title": "Elastic Defend",
"version": ""
},
"enabled": true,
"policy_id": "endpoints-initial",
"vars": {},
"inputs": [{
"type": "endpoint",
"enabled": true,
"streams": [],
"config": {
"integration_config": {
"value": {
"type": "endpoint",
"endpointConfig": {
"preset": "DataCollection"
}
}
}
}
}]
}

View File

@@ -0,0 +1,20 @@
{
"package": {
"name": "osquery_manager",
"version": ""
},
"name": "osquery-endpoints",
"namespace": "default",
"policy_id": "endpoints-initial",
"inputs": {
"osquery_manager-osquery": {
"enabled": true,
"streams": {
"osquery_manager.result": {
"enabled": true,
"vars": {}
}
}
}
}
}

View File

@@ -0,0 +1,57 @@
{
"policy_id": "endpoints-initial",
"package": {
"name": "system",
"version": ""
},
"name": "system-endpoints",
"namespace": "default",
"inputs": {
"system-logfile": {
"enabled": true,
"streams": {
"system.auth": {
"enabled": true,
"vars": {
"paths": [
"/var/log/auth.log*",
"/var/log/secure*"
]
}
},
"system.syslog": {
"enabled": true,
"vars": {
"paths": [
"/var/log/messages*",
"/var/log/syslog*"
]
}
}
}
},
"system-winlog": {
"enabled": true,
"vars": {
"preserve_original_event": false
},
"streams": {
"system.application": {
"enabled": true,
"vars": {
"tags": []
}
},
"system.security": {
"enabled": true,
"vars": {
"tags": []
}
}
}
},
"system-system/metrics": {
"enabled": false
}
}
}

View File

@@ -0,0 +1,67 @@
{
"policy_id": "endpoints-initial",
"package": {
"name": "windows",
"version": ""
},
"name": "windows-endpoints",
"description": "",
"namespace": "default",
"inputs": {
"windows-winlog": {
"enabled": true,
"streams": {
"windows.forwarded": {
"enabled": true,
"vars": {
"tags": [
"forwarded"
],
"preserve_original_event": false
}
},
"windows.powershell": {
"enabled": true,
"vars": {
"tags": [],
"preserve_original_event": false
}
},
"windows.powershell_operational": {
"enabled": true,
"vars": {
"tags": [],
"preserve_original_event": false
}
},
"windows.sysmon_operational": {
"enabled": true,
"vars": {
"tags": [],
"preserve_original_event": false
}
}
}
},
"windows-windows/metrics": {
"enabled": false,
"streams": {
"windows.perfmon": {
"enabled": false,
"vars": {
"perfmon.group_measurements_by_instance": false,
"perfmon.ignore_non_existent_counters": false,
"perfmon.queries": "- object: 'Process'\n instance: [\"*\"]\n counters:\n - name: '% Processor Time'\n field: cpu_perc\n format: \"float\"\n - name: \"Working Set\"\n",
"period": "10s"
}
},
"windows.service": {
"enabled": false,
"vars": {
"period": "60s"
}
}
}
}
}
}

View File

@@ -0,0 +1,106 @@
{
"package": {
"name": "elasticsearch",
"version": ""
},
"name": "elasticsearch-logs",
"namespace": "default",
"description": "Elasticsearch Logs",
"policy_id": "so-grid-nodes",
"inputs": {
"elasticsearch-logfile": {
"enabled": true,
"streams": {
"elasticsearch.audit": {
"enabled": false,
"vars": {
"paths": [
"/var/log/elasticsearch/*_audit.json"
]
}
},
"elasticsearch.deprecation": {
"enabled": false,
"vars": {
"paths": [
"/var/log/elasticsearch/*_deprecation.json"
]
}
},
"elasticsearch.gc": {
"enabled": false,
"vars": {
"paths": [
"/var/log/elasticsearch/gc.log.[0-9]*",
"/var/log/elasticsearch/gc.log"
]
}
},
"elasticsearch.server": {
"enabled": true,
"vars": {
"paths": [
"/opt/so/log/elasticsearch/*.log"
]
}
},
"elasticsearch.slowlog": {
"enabled": false,
"vars": {
"paths": [
"/var/log/elasticsearch/*_index_search_slowlog.json",
"/var/log/elasticsearch/*_index_indexing_slowlog.json"
]
}
}
}
},
"elasticsearch-elasticsearch/metrics": {
"enabled": false,
"vars": {
"hosts": [
"http://localhost:9200"
],
"scope": "node"
},
"streams": {
"elasticsearch.stack_monitoring.ccr": {
"enabled": false
},
"elasticsearch.stack_monitoring.cluster_stats": {
"enabled": false
},
"elasticsearch.stack_monitoring.enrich": {
"enabled": false
},
"elasticsearch.stack_monitoring.index": {
"enabled": false
},
"elasticsearch.stack_monitoring.index_recovery": {
"enabled": false,
"vars": {
"active.only": true
}
},
"elasticsearch.stack_monitoring.index_summary": {
"enabled": false
},
"elasticsearch.stack_monitoring.ml_job": {
"enabled": false
},
"elasticsearch.stack_monitoring.node": {
"enabled": false
},
"elasticsearch.stack_monitoring.node_stats": {
"enabled": false
},
"elasticsearch.stack_monitoring.pending_tasks": {
"enabled": false
},
"elasticsearch.stack_monitoring.shard": {
"enabled": false
}
}
}
}
}

View File

@@ -0,0 +1,29 @@
{
"package": {
"name": "log",
"version": ""
},
"name": "idh-logs",
"namespace": "so",
"description": "IDH integration",
"policy_id": "so-grid-nodes",
"inputs": {
"logs-logfile": {
"enabled": true,
"streams": {
"log.log": {
"enabled": true,
"vars": {
"paths": [
"/nsm/idh/opencanary.log"
],
"data_stream.dataset": "idh",
"tags": [],
"processors": "\n- decode_json_fields:\n fields: [\"message\"]\n target: \"\"\n add_error_key: true\n- drop_fields:\n when:\n equals:\n logtype: \"1001\"\n fields: [\"src_host\", \"src_port\", \"dst_host\", \"dst_port\" ]\n ignore_missing: true\n- rename:\n fields:\n - from: \"src_host\"\n to: \"source.ip\"\n - from: \"src_port\"\n to: \"source.port\"\n - from: \"dst_host\"\n to: \"destination.host\"\n - from: \"dst_port\"\n to: \"destination.port\"\n ignore_missing: true\n- convert:\n fields:\n - {from: \"logtype\", to: \"event.code\", type: \"string\"}\n ignore_missing: true\n- drop_fields:\n fields: '[\"prospector\", \"input\", \"offset\", \"beat\"]'\n- add_fields:\n target: event\n fields:\n category: host\n module: opencanary",
"custom": "pipeline: common"
}
}
}
}
}
}

View File

@@ -0,0 +1,29 @@
{
"package": {
"name": "log",
"version": ""
},
"name": "import-evtx-logs",
"namespace": "so",
"description": "Import Windows EVTX logs",
"policy_id": "so-grid-nodes",
"inputs": {
"logs-logfile": {
"enabled": true,
"streams": {
"log.log": {
"enabled": true,
"vars": {
"paths": [
"/nsm/import/*/evtx/data.json"
],
"data_stream.dataset": "import",
"tags": [],
"processors": "- dissect:\n tokenizer: \"/nsm/import/%{import.id}/evtx/%{import.file}\"\n field: \"log.file.path\"\n target_prefix: \"\"\n- decode_json_fields:\n fields: [\"message\"]\n target: \"\"\n- add_fields:\n target: event\n fields:\n module: windows_eventlog\n imported: true",
"custom": "pipeline: import.wel"
}
}
}
}
}
}

View File

@@ -0,0 +1,29 @@
{
"package": {
"name": "log",
"version": ""
},
"name": "import-suricata-logs",
"namespace": "so",
"description": "Import Suricata logs",
"policy_id": "so-grid-nodes",
"inputs": {
"logs-logfile": {
"enabled": true,
"streams": {
"log.log": {
"enabled": true,
"vars": {
"paths": [
"/nsm/import/*/suricata/eve*.json"
],
"data_stream.dataset": "import",
"tags": [],
"processors": "- add_fields:\n target: event\n fields:\n category: network\n module: suricata\n imported: true\n- dissect:\n tokenizer: \"/nsm/import/%{import.id}/suricata/%{import.file}\"\n field: \"log.file.path\"\n target_prefix: \"\"",
"custom": "pipeline: suricata.common"
}
}
}
}
}
}

View File

@@ -0,0 +1,29 @@
{
"package": {
"name": "log",
"version": ""
},
"name": "kratos-logs",
"namespace": "so",
"description": "Kratos logs",
"policy_id": "so-grid-nodes",
"inputs": {
"logs-logfile": {
"enabled": true,
"streams": {
"log.log": {
"enabled": true,
"vars": {
"paths": [
"/opt/so/log/kratos/kratos.log"
],
"data_stream.dataset": "kratos",
"tags": ["so-kratos"],
"processors": "- decode_json_fields:\n fields: [\"message\"]\n target: \"\"\n add_error_key: true \n- add_fields:\n target: event\n fields:\n category: iam\n module: kratos",
"custom": "pipeline: kratos"
}
}
}
}
}
}

View File

@@ -0,0 +1,20 @@
{
"package": {
"name": "osquery_manager",
"version": ""
},
"name": "osquery-grid-nodes",
"namespace": "default",
"policy_id": "so-grid-nodes",
"inputs": {
"osquery_manager-osquery": {
"enabled": true,
"streams": {
"osquery_manager.result": {
"enabled": true,
"vars": {}
}
}
}
}
}

View File

@@ -0,0 +1,76 @@
{
"package": {
"name": "redis",
"version": ""
},
"name": "redis-logs",
"namespace": "default",
"description": "Redis logs",
"policy_id": "so-grid-nodes",
"inputs": {
"redis-logfile": {
"enabled": true,
"streams": {
"redis.log": {
"enabled": true,
"vars": {
"paths": [
"/opt/so/log/redis/redis.log"
],
"tags": [
"redis-log"
],
"preserve_original_event": false
}
}
}
},
"redis-redis": {
"enabled": false,
"streams": {
"redis.slowlog": {
"enabled": false,
"vars": {
"hosts": [
"127.0.0.1:6379"
],
"password": ""
}
}
}
},
"redis-redis/metrics": {
"enabled": false,
"vars": {
"hosts": [
"127.0.0.1:6379"
],
"idle_timeout": "20s",
"maxconn": 10,
"network": "tcp",
"password": ""
},
"streams": {
"redis.info": {
"enabled": false,
"vars": {
"period": "10s"
}
},
"redis.key": {
"enabled": false,
"vars": {
"key.patterns": "- limit: 20\n pattern: *\n",
"period": "10s"
}
},
"redis.keyspace": {
"enabled": false,
"vars": {
"period": "10s"
}
}
}
}
}
}

View File

@@ -0,0 +1,29 @@
{
"package": {
"name": "log",
"version": ""
},
"name": "soc-auth-sync-logs",
"namespace": "so",
"description": "Security Onion - Elastic Auth Sync - Logs",
"policy_id": "so-grid-nodes",
"inputs": {
"logs-logfile": {
"enabled": true,
"streams": {
"log.log": {
"enabled": true,
"vars": {
"paths": [
"/opt/so/log/soc/sync.log"
],
"data_stream.dataset": "soc",
"tags": ["so-soc"],
"processors": "- dissect:\n tokenizer: \"%{event.action}\"\n field: \"message\"\n target_prefix: \"\"\n- add_fields:\n target: event\n fields:\n category: host\n module: soc\n dataset_temp: auth_sync",
"custom": "pipeline: common"
}
}
}
}
}
}

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