mirror of
https://github.com/Security-Onion-Solutions/securityonion.git
synced 2025-12-08 02:02:50 +01:00
Merge pull request #12682 from Security-Onion-Solutions/2.4/soup-playbook
2.4/soup playbook
This commit is contained in:
@@ -582,6 +582,7 @@ up_to_2.4.60() {
|
||||
}
|
||||
|
||||
up_to_2.4.70() {
|
||||
playbook_migration
|
||||
toggle_telemetry
|
||||
INSTALLEDVERSION=2.4.70
|
||||
}
|
||||
@@ -620,6 +621,76 @@ ASSIST_EOF
|
||||
fi
|
||||
}
|
||||
|
||||
playbook_migration() {
|
||||
# Start SOC Detections migration
|
||||
mkdir -p /nsm/backup/detections-migration/{suricata,sigma/rules,elastalert}
|
||||
|
||||
# Remove cronjobs
|
||||
crontab -l | grep -v 'so-playbook-sync_cron' | crontab -
|
||||
crontab -l | grep -v 'so-playbook-ruleupdate_cron' | crontab -
|
||||
|
||||
if grep -A 1 'playbook:' /opt/so/saltstack/local/pillar/minions/* | grep -q 'enabled: True'; then
|
||||
|
||||
# Check for active Elastalert rules
|
||||
active_rules_count=$(find /opt/so/rules/elastalert/playbook/ -type f -name "*.yaml" | wc -l)
|
||||
|
||||
if [[ "$active_rules_count" -gt 0 ]]; then
|
||||
# Prompt the user to AGREE if active Elastalert rules found
|
||||
echo
|
||||
echo "$active_rules_count Active Elastalert/Playbook rules found."
|
||||
echo "In preparation for the new Detections module, they will be backed up and then disabled."
|
||||
echo
|
||||
echo "If you would like to proceed, then type AGREE and press ENTER."
|
||||
echo
|
||||
# Read user input
|
||||
read INPUT
|
||||
if [ "${INPUT^^}" != 'AGREE' ]; then fail "SOUP canceled."; fi
|
||||
|
||||
echo "Backing up the Elastalert rules..."
|
||||
rsync -av --stats /opt/so/rules/elastalert/playbook/*.yaml /nsm/backup/detections-migration/elastalert/
|
||||
|
||||
# Verify that rsync completed successfully
|
||||
if [[ $? -eq 0 ]]; then
|
||||
# Delete the Elastlaert rules
|
||||
rm -f /opt/so/rules/elastalert/playbook/*.yaml
|
||||
echo "Active Elastalert rules have been backed up."
|
||||
else
|
||||
fail "Error: rsync failed to copy the files. Active Elastalert rules have not been backed up."
|
||||
fi
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "Exporting Sigma rules from Playbook..."
|
||||
MYSQLPW=$(awk '/mysql:/ {print $2}' /opt/so/saltstack/local/pillar/secrets.sls)
|
||||
|
||||
docker exec so-mysql sh -c "exec mysql -uroot -p${MYSQLPW} -D playbook -sN -e \"SELECT id, value FROM custom_values WHERE value LIKE '%View Sigma%'\"" | while read -r id value; do
|
||||
echo -e "$value" > "/nsm/backup/detections-migration/sigma/rules/$id.yaml"
|
||||
done || fail "Failed to export Sigma rules..."
|
||||
|
||||
echo
|
||||
echo "Exporting Sigma Filters from Playbook..."
|
||||
docker exec so-mysql sh -c "exec mysql -uroot -p${MYSQLPW} -D playbook -sN -e \"SELECT issues.subject as title, custom_values.value as filter FROM issues JOIN custom_values ON issues.id = custom_values.customized_id WHERE custom_values.value LIKE '%sofilter%'\"" > /nsm/backup/detections-migration/sigma/custom-filters.txt || fail "Failed to export Custom Sigma Filters."
|
||||
|
||||
echo
|
||||
echo "Backing up Playbook database..."
|
||||
docker exec so-mysql sh -c "mysqldump -uroot -p${MYSQLPW} --databases playbook > /tmp/playbook-dump" || fail "Failed to dump Playbook database."
|
||||
docker cp so-mysql:/tmp/playbook-dump /nsm/backup/detections-migration/sigma/playbook-dump.sql || fail "Failed to backup Playbook database."
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "Stopping Playbook services & cleaning up..."
|
||||
for container in so-playbook so-mysql so-soctopus; do
|
||||
if [ -n "$(docker ps -q -f name=^${container}$)" ]; then
|
||||
docker stop $container
|
||||
fi
|
||||
done
|
||||
sed -i '/so-playbook\|so-soctopus\|so-mysql/d' /opt/so/conf/so-status/so-status.conf
|
||||
rm -f /usr/sbin/so-playbook-* /usr/sbin/so-soctopus-* /usr/sbin/so-mysql-*
|
||||
|
||||
echo
|
||||
echo "Playbook Migration is complete...."
|
||||
}
|
||||
|
||||
determine_elastic_agent_upgrade() {
|
||||
if [[ $is_airgap -eq 0 ]]; then
|
||||
update_elastic_agent_airgap
|
||||
|
||||
Reference in New Issue
Block a user