diff --git a/exclude-list.txt b/exclude-list.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/salt/common/tools/sbin/so-docker-refresh b/salt/common/tools/sbin/so-docker-refresh index 11200864f..16b8fb930 100644 --- a/salt/common/tools/sbin/so-docker-refresh +++ b/salt/common/tools/sbin/so-docker-refresh @@ -78,6 +78,7 @@ if [ $MANAGERCHECK != 'so-helix' ]; then "so-logstash:$VERSION" \ "so-mysql:$VERSION" \ "so-nginx:$VERSION" \ + "so-pcaptools:$VERSION" \ "so-playbook:$VERSION" \ "so-redis:$VERSION" \ "so-soc:$VERSION" \ diff --git a/salt/common/tools/sbin/so-features-enable b/salt/common/tools/sbin/so-features-enable index edc378bc5..b4e471c99 100755 --- a/salt/common/tools/sbin/so-features-enable +++ b/salt/common/tools/sbin/so-features-enable @@ -17,6 +17,17 @@ . /usr/sbin/so-common local_salt_dir=/opt/so/saltstack/local +manager_check() { + # Check to see if this is a manager + MANAGERCHECK=$(cat /etc/salt/grains | grep role | awk '{print $2}') + if [ $MANAGERCHECK == 'so-eval' OR $MANAGERCHECK == 'so-manager' OR $MANAGERCHECK == 'so-managersearch' ]; then + echo "This is a manager. We can proceed." + else + echo "Please run so-features-enable on the manager." + exit 0 +} + +manager_check VERSION=$(grep soversion $local_salt_dir/pillar/static.sls | cut -d':' -f2|sed 's/ //g') # Modify static.sls to enable Features sed -i 's/features: False/features: True/' $local_salt_dir/pillar/static.sls diff --git a/salt/common/tools/sbin/soup b/salt/common/tools/sbin/soup index 7c471aa34..7ce5b2ac0 100644 --- a/salt/common/tools/sbin/soup +++ b/salt/common/tools/sbin/soup @@ -15,23 +15,170 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -clone_to_tmp() { +. /usr/sbin/so-common +UPDATE_DIR=/tmp/sogh/securityonion +INSTALLEDVERSION=$(cat /etc/soversion) +default_salt_dir=/opt/so/saltstack/default +manager_check() { + # Check to see if this is a manager + MANAGERCHECK=$(cat /etc/salt/grains | grep role | awk '{print $2}') + if [ $MANAGERCHECK == 'so-eval' OR $MANAGERCHECK == 'so-manager' OR $MANAGERCHECK == 'so-managersearch' ]; then + echo "This is a manager. We can proceed" + else + echo "Please run soup on the manager. The manager controls all updates." + exit 0 +} + +clean_dockers() { + # Place Holder for cleaning up old docker images + echo "" +} + +clone_to_tmp() { # TODO Need to add a air gap option + # Clean old files + rm -rf /tmp/sogh # Make a temp location for the files - rm -rf /tmp/soup - mkdir -p /tmp/soup - cd /tmp/soup - #git clone -b dev https://github.com/Security-Onion-Solutions/securityonion-saltstack.git - git clone https://github.com/Security-Onion-Solutions/securityonion-saltstack.git + mkdir -p /tmp/sogh + cd /tmp/sogh + #git clone -b dev https://github.com/Security-Onion-Solutions/securityonion.git + git clone https://github.com/Security-Onion-Solutions/securityonion.git + cd /tmp + if [ ! -f $UPDATE_DIR/VERSION ]; then + echo "Update was unable to pull from github. Please check your internet." + exit 0 + fi +} + +copy_new_files() { + # Copy new files over to the salt dir + cd /tmp/sogh/securityonion + rsync -a salt $default_salt_dir/ + rsync -a pillar $default_salt_dir/ + chown -R socore:socore $default_salt_dir/ + chmod 755 $default_salt_dir/pillar/firewall/addfirewall.sh + cd /tmp +} + +highstate() { + # Run a highstate but first cancel a running one. + salt-call saltutil.kill_all_jobs + salt-call state.highstate +} + +pillar_changes() { + # This function is to add any new pillar items if needed. + echo "Checking to see if pillar changes are needed" } -# Prompt the user that this requires internets +update_dockers() { + # List all the containers + if [ $MANAGERCHECK != 'so-helix' ]; then + TRUSTED_CONTAINERS=( \ + "so-acng" \ + "so-thehive-cortex" \ + "so-curator" \ + "so-domainstats" \ + "so-elastalert" \ + "so-elasticsearch" \ + "so-filebeat" \ + "so-fleet" \ + "so-fleet-launcher" \ + "so-freqserver" \ + "so-grafana" \ + "so-idstools" \ + "so-influxdb" \ + "so-kibana" \ + "so-kratos" \ + "so-logstash" \ + "so-mysql" \ + "so-nginx" \ + "so-pcaptools" \ + "so-playbook" \ + "so-redis" \ + "so-soc" \ + "so-soctopus" \ + "so-steno" \ + "so-strelka" \ + "so-suricata" \ + "so-telegraf" \ + "so-thehive" \ + "so-thehive-es" \ + "so-wazuh" \ + "so-zeek" ) + else + TRUSTED_CONTAINERS=( \ + "so-filebeat" \ + "so-idstools" \ + "so-logstash" \ + "so-nginx" \ + "so-redis" \ + "so-steno" \ + "so-suricata" \ + "so-telegraf" \ + "so-zeek" ) + fi +# Download the containers from the interwebs + for i in "${TRUSTED_CONTAINERS[@]}" + do + # Pull down the trusted docker image + echo "Downloading $i:$NEWVERSION" + docker pull --disable-content-trust=false docker.io/$IMAGEREPO/$i:$NEWVERSION + # Tag it with the new registry destination + docker tag $IMAGEREPO/$i $HOSTNAME:5000/$IMAGEREPO/$i:$NEWVERSION + docker push $HOSTNAME:5000/$IMAGEREPO/$i:$NEWVERSION + done + +} + +update_version() { + # Update the version to the latest + echo "Updating the version file." + echo $NEWVERSION > /etc/soversion +} + +upgrade_check() { + # Let's make sure we actually need to update. + NEWVERSION=$(cat $UPDATE_DIR/VERSION) + if [ $INSTALLEDVERSION == $NEWVERSION ]; then + echo "You are already running the latest version of Security Onion." + exit 0 + else + echo "Performing Upgrade from $INSTALLEDVERSION to $NEWVERSION" + fi +} + +verify_latest_update_script() { + # Check to see if the update scripts match. If not run the new one. + CURRENTSOUP=$(md5sum /usr/sbin/soup) + GITSOUP=$(md5sum /tmp/sogh/securityonion/salt/common/tools/sbin/soup) + if [ $CURRENTSOUP == $GITSOUP ]; then + echo "The scripts match" + else + echo "They don't match" + cp $UPDATE_DIR/salt/sommon/tools/sbin/soup /usr/sbin/soup + cp $UPDATE_DIR/salt/common/tools/sbin/soup $default_salt_dir/salt/common/tools/sbin/ + echo "soup has been updated. Please run soup again" + exit 0 + fi +} + +manager_check clone_to_tmp -cd /tmp/soup/securityonion-saltstack/update -chmod +x soup -./soup +verify_latest_update_script +upgrade_check +pillar_changes +clean_dockers +update_dockers +copy_new_files +highstate +update_version + + + + diff --git a/upgrade/so-update-functions b/upgrade/so-update-functions deleted file mode 100644 index 3ab79df39..000000000 --- a/upgrade/so-update-functions +++ /dev/null @@ -1,205 +0,0 @@ -#!/bin/bash - -# Copyright 2014,2015,2016,2017,2018,2019,2020 Security Onion Solutions, LLC - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -. /usr/sbin/so-common - -# Set the new SO Version -UPDATEVERSION=1.2.2 -BUILD=HH - -#Determine the current install version - -if [ -f /etc/soversion ]; then - OLDVERSION=$(cat /etc/soversion) -else - OLDVERSION=1.1.4 -fi - -# Use the hostname -HOSTNAME=$(hostname) - -# List all the containers -if [ $MANAGERCHECK != 'so-helix' ]; then - TRUSTED_CONTAINERS=( \ - "so-acng:$BUILD$UPDATEVERSION" \ - "so-thehive-cortex:$BUILD$UPDATEVERSION" \ - "so-curator:$BUILD$UPDATEVERSION" \ - "so-domainstats:$BUILD$UPDATEVERSION" \ - "so-elastalert:$BUILD$UPDATEVERSION" \ - "so-elasticsearch:$BUILD$UPDATEVERSION" \ - "so-filebeat:$BUILD$UPDATEVERSION" \ - "so-fleet:$BUILD$UPDATEVERSION" \ - "so-fleet-launcher:$BUILD$UPDATEVERSION" \ - "so-freqserver:$BUILD$UPDATEVERSION" \ - "so-grafana:$BUILD$UPDATEVERSION" \ - "so-idstools:$BUILD$UPDATEVERSION" \ - "so-influxdb:$BUILD$UPDATEVERSION" \ - "so-kibana:$BUILD$UPDATEVERSION" \ - "so-kratos:$BUILD$UPDATEVERSION" \ - "so-logstash:$BUILD$UPDATEVERSION" \ - "so-mysql:$BUILD$UPDATEVERSION" \ - "so-nginx:$BUILD$UPDATEVERSION" \ - "so-playbook:$BUILD$UPDATEVERSION" \ - "so-redis:$BUILD$UPDATEVERSION" \ - "so-soc:$BUILD$UPDATEVERSION" \ - "so-soctopus:$BUILD$UPDATEVERSION" \ - "so-steno:$BUILD$UPDATEVERSION" \ - "so-strelka:$BUILD$UPDATEVERSION" \ - "so-suricata:$BUILD$UPDATEVERSION" \ - "so-telegraf:$BUILD$UPDATEVERSION" \ - "so-thehive:$BUILD$UPDATEVERSION" \ - "so-thehive-es:$BUILD$UPDATEVERSION" \ - "so-wazuh:$BUILD$UPDATEVERSION" \ - "so-zeek:$BUILD$UPDATEVERSION" ) - else - TRUSTED_CONTAINERS=( \ - "so-filebeat:$BUILD$UPDATEVERSION" \ - "so-idstools:$BUILD$UPDATEVERSION" \ - "so-logstash:$BUILD$UPDATEVERSION" \ - "so-nginx:$BUILD$UPDATEVERSION" \ - "so-redis:$BUILD$UPDATEVERSION" \ - "so-steno:$BUILD$UPDATEVERSION" \ - "so-suricata:$BUILD$UPDATEVERSION" \ - "so-telegraf:$BUILD$UPDATEVERSION" \ - "so-zeek:$BUILD$UPDATEVERSION" ) - fi - - -clone_to_tmp() { - - # TODO Need to add a air gap option - # Make a temp location for the files - mkdir /tmp/sogh - cd /tmp/sogh - #git clone -b dev https://github.com/Security-Onion-Solutions/securityonion-saltstack.git - git clone https://github.com/Security-Onion-Solutions/securityonion-saltstack.git - cd /tmp - -} - -copy_new_files() { - - # Copy new files over to the salt dir - cd /tmp/sogh/securityonion-saltstack - rsync -a --exclude-from 'exclude-list.txt' salt $default_salt_dir/ - chown -R socore:socore $default_salt_dir/salt - chmod 755 $default_salt_dir/pillar/firewall/addfirewall.sh - cd /tmp -} - -detect_os() { - - # Detect Base OS - echo "Detecting Base OS" >> $UPDATELOG 2>&1 - if [ -f /etc/redhat-release ]; then - OS=centos - if grep -q "CentOS Linux release 7" /etc/redhat-release; then - OSVER=7 - elif grep -q "CentOS Linux release 8" /etc/redhat-release; then - OSVER=8 - echo "We currently do not support CentOS $OSVER but we are working on it!" - exit - else - echo "We do not support the version of CentOS you are trying to use" - exit - fi - - elif [ -f /etc/os-release ]; then - OS=ubuntu - if grep -q "UBUNTU_CODENAME=bionic" /etc/os-release; then - OSVER=bionic - elif grep -q "UBUNTU_CODENAME=xenial" /etc/os-release; then - OSVER=xenial - else - echo "We do not support your current version of Ubuntu" - exit - fi - else - echo "We were unable to determine if you are using a supported OS." >> $UPDATELOG 2>&1 - exit - fi - - echo "Found OS: $OS $OSVER" >> $UPDATELOG 2>&1 - -} - -manager_check() { - # Check to see if this is a manager - MANAGERCHECK=$(cat /etc/salt/grains | grep role | awk '{print $2}') - if [ $MANAGERCHECK == 'so-eval' OR $MANAGERCHECK == 'so-manager' OR $MANAGERCHECK == 'so-managersearch' ]; then - echo "This is a manager. We can proceed" - else - echo "Please run soup on the manager. The manager controls all updates." - exit -} - -salt_highstate() { - - salt-call state.highstate - -} - -update_held_packages() { - - if [ $OS == "centos" ] - SALTVER=2019.2.4 - DOCKERVER= - yum -y --disableexcludes=all update salt-$SALTVER - yum -y --disableexcludes=all update docker-ce-$DOCKERVER - else - SALTVER=2019.2.4+ds-1 - DOCKERVER=5:19.03.8~3-0~ubuntu-xenial - fi - -} - -update_all_packages() { - - # Update all the things based on OS - if [ $OS == "centos" ]; then - yum -y update - else - apt -y update && apt -y upgrade - fi - -} - -update_docker_containers() { - - # Download the containers from the interwebs - for i in "${TRUSTED_CONTAINERS[@]}" - do - # Pull down the trusted docker image - echo "Downloading $i" - docker pull --disable-content-trust=false docker.io/$IMAGEREPO/$i - # Tag it with the new registry destination - docker tag $IMAGEREPO/$i $HOSTNAME:5000/$IMAGEREPO/$i - docker push $HOSTNAME:5000/$IMAGEREPO/$i - done - - for i in "${TRUSTED_CONTAINERS[@]}" - do - echo "Removing $i locally" - docker rmi $IMAGEREPO/$i - done - -} - -update_hh_version() { - # Change the version number in the static pillar - -} diff --git a/upgrade/soup b/upgrade/soup deleted file mode 100644 index 068782f04..000000000 --- a/upgrade/soup +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -# Copyright 2014,2015,2016,2017,2018,2019,2020 Security Onion Solutions, LLC - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -SCRIPTDIR=$(dirname "$0") -source $SCRIPTDIR/so-update-functions - -# Update Packages -manager_check -update_all_packages -update_held_packages - - -