2015-05-27 12:34:01 +02:00
#!/bin/sh
#################################################################################
#
# Lynis
# ------------------
#
2016-03-13 16:00:39 +01:00
# Copyright 2007-2013, Michael Boelen
2021-01-07 15:22:19 +01:00
# Copyright 2007-2021, CISOfy
2016-03-13 16:00:39 +01:00
#
# Website : https://cisofy.com
# Blog : http://linux-audit.com
# GitHub : https://github.com/CISOfy/lynis
2015-05-27 12:34:01 +02:00
#
# Lynis comes with ABSOLUTELY NO WARRANTY. This is free software, and you are
# welcome to redistribute it under the terms of the GNU General Public License.
# See LICENSE file for usage of this software.
#
#################################################################################
#
# Containers, Zones, Jails
#
#################################################################################
#
2020-10-22 00:13:42 +02:00
InsertSection "${SECTION_CONTAINERS}"
2015-05-27 12:34:01 +02:00
#
#################################################################################
2015-09-24 20:29:05 +02:00
#
2016-08-29 19:26:35 +02:00
DOCKER_CONTAINERS_RUNNING=0
DOCKER_CONTAINERS_TOTAL=0
2015-09-24 20:29:05 +02:00
DOCKER_FILE_PERMISSIONS_WARNINGS=0
2016-07-30 13:23:27 +02:00
RUN_DOCKER_TESTS=0
2015-09-24 20:29:05 +02:00
#
#################################################################################
2015-05-27 12:34:01 +02:00
#
# Test : CONT-8004
# Description : Query running Solaris zones
2017-04-23 20:06:54 +02:00
if [ -x ${ROOTDIR}usr/sbin/zoneadm ]; then PREQS_MET="YES"; else PREQS_MET="NO"; fi
2016-07-24 17:22:00 +02:00
Register --test-no CONT-8004 --os Solaris --weight L --network NO --category security --description "Query running Solaris zones"
2015-05-27 12:34:01 +02:00
if [ ${SKIPTEST} -eq 0 ]; then
2015-12-21 21:17:15 +01:00
LogText "Test: query zoneadm to list all running zones"
2017-04-23 20:06:54 +02:00
FIND=$(${ROOTDIR}usr/sbin/zoneadm list -p | ${AWKBINARY} -F: '{ if ($2!="global") print $0 }')
2019-07-16 13:20:30 +02:00
if [ -n "${FIND}" ]; then
2017-04-30 17:59:35 +02:00
COUNT=0
for ITEM in ${FIND}; do
COUNT=$((COUNT + 1))
ZONEID=$(echo ${ITEM} | ${CUTBINARY} -d ':' -f1)
ZONENAME=$(echo ${ITEM} | ${CUTBINARY} -d ':' -f2)
2015-12-21 21:17:15 +01:00
LogText "Result: found zone ${ZONENAME} (running)"
Report "solaris_running_zone[]=${ZONENAME} [id:${ZONEID}]"
2015-05-27 12:34:01 +02:00
done
2017-04-30 17:59:35 +02:00
LogText "Result: total of ${COUNT} running zones"
Display --indent 2 --text "- Checking Solaris Zones" --result "FOUND ${COUNT} zones" --color GREEN
2016-09-08 21:04:17 +02:00
else
2015-12-21 21:17:15 +01:00
LogText "Result: no running zones found"
2016-06-18 11:14:01 +02:00
Display --indent 2 --text "- Checking Solaris Zones" --result "${STATUS_NONE}" --color WHITE
2015-05-27 12:34:01 +02:00
fi
fi
#
#################################################################################
#
2017-04-30 17:59:35 +02:00
# Do you have Xen running? Help us testing this test and submit a pull request on GitHub
# Test : CONT-1906 TODO
2015-05-27 12:34:01 +02:00
# Description : Query running Xen zones
#if [ -x /usr/bin/xm ]; then PREQS_MET="YES"; else PREQS_MET="NO"; fi
2016-07-24 17:22:00 +02:00
#Register --test-no CONT-1906 --weight L --network NO --category security --description "Query Xen guests"
2015-05-27 12:34:01 +02:00
#if [ ${SKIPTEST} -eq 0 ]; then
# Show Xen guests
2017-03-06 08:41:21 +01:00
#FIND=$(xm list | ${AWKBINARY} '$1 != "Name|Domain-0" {print $1","$2}')
2015-05-27 12:34:01 +02:00
#for I in ${FIND}; do
2017-03-06 08:41:21 +01:00
#XENGUESTNAME=$(echo ${I} | ${CUTBINARY} -d ':' -f1)
#XENGUESTID=$(echo ${I} | ${CUTBINARY} -d ':' -f2)
2015-12-21 21:17:15 +01:00
#LogText "Result: found Xen guest ${XENGUESTNAME} (ID: ${XENGUESTID})"
2015-05-27 12:34:01 +02:00
#done
#fi
#
#################################################################################
#
# Test : CONT-8102
# Description : Checking Docker daemon status and basic information for later tests
2016-07-24 17:22:00 +02:00
Register --test-no CONT-8102 --weight L --network NO --category security --description "Checking Docker status and information"
2015-05-27 12:34:01 +02:00
if [ ${SKIPTEST} -eq 0 ]; then
2019-07-26 11:32:48 +02:00
if IsRunning "dockerd"; then
2015-12-21 21:17:15 +01:00
LogText "Result: found Docker daemon running"
Report "docker_daemon_running=1"
2015-05-27 12:34:01 +02:00
DOCKER_DAEMON_RUNNING=1
2016-07-30 13:23:27 +02:00
RUN_DOCKER_TESTS=1
2015-05-27 12:34:01 +02:00
Display --indent 4 --text "- Docker"
2016-06-18 11:14:01 +02:00
Display --indent 6 --text "- Docker daemon" --result "${STATUS_RUNNING}" --color GREEN
2015-05-27 12:34:01 +02:00
fi
fi
#
#################################################################################
#
# Test : CONT-8104
# Description : Checking Docker info for any warnings
# Notes : Hardening points are awarded, as usually warnings are the result of missing controls to restrict boundaries like memory
2017-04-30 17:59:35 +02:00
if HasData "${DOCKERBINARY}"; then PREQS_MET="YES"; else PREQS_MET="NO"; fi
2016-07-24 17:22:00 +02:00
Register --test-no CONT-8104 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Checking Docker info for any warnings"
2015-05-27 12:34:01 +02:00
if [ ${SKIPTEST} -eq 0 ]; then
COUNT=0
2015-12-21 21:17:15 +01:00
LogText "Test: Check for any warnings"
2016-07-30 13:23:27 +02:00
FIND=$(${DOCKERBINARY} version 2>&1)
if [ $? -gt 0 ]; then
Display --indent 8 --text "- Docker status" --result "${STATUS_ERROR}" --color RED
LogText "Result: disabling further Docker tests as docker version gave exit code other than zero (0)"
RUN_DOCKER_TESTS=0
fi
2023-04-25 16:06:02 +02:00
FIND=$(${DOCKERBINARY} info 2>&1 | ${GREPBINARY} -E "^WARNING:|^ERROR:" | ${CUTBINARY} -d " " -f 2- | ${SEDBINARY} 's/ /:space:/g')
2015-05-27 12:34:01 +02:00
if [ ! "${FIND}" = "" ]; then
2015-12-21 21:17:15 +01:00
LogText "Result: found warning(s) in output"
2015-05-27 12:34:01 +02:00
for I in ${FIND}; do
2016-09-08 21:04:17 +02:00
J=$(echo ${I} | ${SEDBINARY} 's/:space:/ /g')
2015-12-21 21:17:15 +01:00
LogText "Output: ${J}"
2016-05-03 14:57:53 +02:00
COUNT=$((COUNT + 1))
2015-05-27 12:34:01 +02:00
done
2016-07-30 13:23:27 +02:00
Display --indent 8 --text "- Docker info output (warnings)" --result "${COUNT}" --color YELLOW
2015-05-27 12:34:01 +02:00
ReportSuggestion "${TEST_NO}" "Run 'docker info' to see warnings applicable to Docker daemon"
AddHP 3 4
2016-09-08 21:04:17 +02:00
else
2015-12-21 21:17:15 +01:00
LogText "Result: no warnings found from 'docker info' output"
2016-06-18 11:14:01 +02:00
Display --indent 8 --text "- Docker info output (warnings)" --result "${STATUS_NONE}" --color GREEN
2015-05-27 12:34:01 +02:00
AddHP 1 1
fi
fi
#
#################################################################################
#
# Test : CONT-8106
# Description : Checking Docker containers (basic stats)
# Notes : Hardening points are awarded, if there aren't a lot of stopped containers
2019-07-16 13:20:30 +02:00
if [ -n "${DOCKERBINARY}" -a ${RUN_DOCKER_TESTS} -eq 1 ]; then PREQS_MET="YES"; else PREQS_MET="NO"; fi
2016-07-24 17:22:00 +02:00
Register --test-no CONT-8106 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Gather basic stats from Docker"
2015-05-27 12:34:01 +02:00
if [ ${SKIPTEST} -eq 0 ]; then
Display --indent 6 --text "- Containers"
# Check total of containers
2015-12-21 21:17:15 +01:00
LogText "Test: checking total amount of Docker containers"
2023-04-23 23:38:21 +02:00
DOCKER_CONTAINERS_TOTAL=$(${DOCKERBINARY} info 2> /dev/null | ${GREPBINARY} -E "^[ \t]?Containers: " | ${AWKBINARY} '{ print $2 }')
2017-04-23 20:06:54 +02:00
if [ -z "${DOCKER_CONTAINERS_TOTAL}" ]; then
2015-07-24 23:58:50 +02:00
DOCKER_CONTAINERS_TOTAL=0
fi
2016-09-08 21:04:17 +02:00
2015-12-21 21:17:15 +01:00
LogText "Result: docker info shows ${DOCKER_CONTAINERS_TOTAL} containers"
2016-08-25 15:31:33 +02:00
DOCKER_CONTAINERS_TOTAL2=$(${DOCKERBINARY} ps -a 2> /dev/null | ${GREPBINARY} -c -v "CONTAINER")
2015-12-21 21:17:15 +01:00
LogText "Result: docker ps -a shows ${DOCKER_CONTAINERS_TOTAL2} containers"
2015-05-27 12:34:01 +02:00
if [ ! "${DOCKER_CONTAINERS_TOTAL}" = "${DOCKER_CONTAINERS_TOTAL2}" ]; then
2015-12-21 21:17:15 +01:00
LogText "Result: difference detected, which is unexpected"
2015-05-27 12:34:01 +02:00
ReportSuggestion "${TEST_NO}" "Test output of both 'docker ps -a' and 'docker info', to determine why they report a different amount of containers"
2016-06-18 11:14:01 +02:00
Display --indent 8 --text "- Total containers" --result "${STATUS_UNKNOWN}" --color RED
2016-08-29 19:26:35 +02:00
else
2015-05-27 12:34:01 +02:00
Display --indent 8 --text "- Total containers" --result "${DOCKER_CONTAINERS_TOTAL}" --color WHITE
fi
# Check running instances
2016-08-25 15:31:33 +02:00
DOCKER_CONTAINERS_RUNNING=$(${DOCKERBINARY} ps 2> /dev/null | ${GREPBINARY} -c -v "CONTAINER")
2015-05-27 12:34:01 +02:00
if [ ${DOCKER_CONTAINERS_RUNNING} -gt 0 ]; then
2016-07-30 14:01:36 +02:00
Display --indent 10 --text "- Running containers" --result "${DOCKER_CONTAINERS_RUNNING}" --color GREEN
2015-12-21 21:17:15 +01:00
LogText "Result: ${DOCKER_CONTAINERS_RUNNING} containers are currently active"
Report "docker_containers_running=${DOCKER_CONTAINERS_RUNNING}"
2016-08-29 19:26:35 +02:00
else
2015-12-21 21:17:15 +01:00
LogText "Result: no active containers"
Report "docker_containers_running=0"
2015-05-27 12:34:01 +02:00
fi
2016-08-29 19:26:35 +02:00
fi
#
#################################################################################
#
# Test : CONT-8107
# Description : Checking Docker number of unused containers
# Notes : Hardening points are awarded, if there aren't a lot of stopped containers
2019-07-16 13:20:30 +02:00
if [ -n "${DOCKERBINARY}" -a ${RUN_DOCKER_TESTS} -eq 1 ]; then PREQS_MET="YES"; else PREQS_MET="NO"; fi
2016-08-29 19:26:35 +02:00
Register --test-no CONT-8107 --preqs-met ${PREQS_MET} --weight L --network NO --category performance --description "Check number of Docker containers"
if [ ${SKIPTEST} -eq 0 ]; then
2015-05-27 12:34:01 +02:00
# Check if there aren't too many unused containers on the system
if [ ${DOCKER_CONTAINERS_TOTAL} -gt 0 ]; then
2016-05-03 14:57:53 +02:00
DOCKER_CONTAINERS_UNUSED=$((DOCKER_CONTAINERS_TOTAL - DOCKER_CONTAINERS_RUNNING))
2015-05-27 12:34:01 +02:00
if [ ${DOCKER_CONTAINERS_UNUSED} -gt 10 ]; then
ReportSuggestion "${TEST_NO}" "More than 10 unused containers found on the system. Clean up old containers by using output of 'docker ps -a' command"
Display --indent 8 --text "- Unused containers" --result "${DOCKER_CONTAINERS_UNUSED}" --color RED
AddHP 0 2
2016-08-29 19:26:35 +02:00
else
LogText "Result: found ${DOCKER_CONTAINERS_UNUSED} unused containers"
Display --indent 8 --text "- Unused containers" --result "${DOCKER_CONTAINERS_UNUSED}" --color YELLOW
AddHP 1 1
2015-05-27 12:34:01 +02:00
fi
fi
fi
#
#################################################################################
2015-09-24 20:29:05 +02:00
#
# Test : CONT-8108
# Description : Checking Docker file permissions
# Notes : /var/run/docker.sock - Usually root as owner, docker as group - should not be world writable
2019-07-16 13:20:30 +02:00
if [ -n "${DOCKERBINARY}" -a ${RUN_DOCKER_TESTS} -eq 1 ]; then PREQS_MET="YES"; else PREQS_MET="NO"; fi
2016-07-24 17:22:00 +02:00
Register --test-no CONT-8108 --preqs-met ${PREQS_MET} --weight L --network NO --category security --description "Check file permissions for Docker files"
2015-09-24 20:29:05 +02:00
if [ ${SKIPTEST} -eq 0 ]; then
2017-04-23 20:06:54 +02:00
NOT_WORLD_WRITABLE="${ROOTDIR}var/run/docker.sock"
2016-09-08 21:04:17 +02:00
for FILE in ${NOT_WORLD_WRITABLE}; do
LogText "Test: Check ${FILE}"
if [ -f ${FILE} ]; then
LogText "Result: file ${FILE} found, permissions will be tested"
if IsWorldWritable ${FILE}; then
2015-12-21 21:17:15 +01:00
LogText "Result: file is writable by others, which is a security risk (e.g. privilege escalation)"
2016-09-08 21:04:17 +02:00
ReportWarning "${TEST_NO}" "Docker file is world writable" "${FILE}" "-"
2016-05-03 14:57:53 +02:00
DOCKER_FILE_PERMISSIONS_WARNINGS=$((DOCKER_FILE_PERMISSIONS_WARNINGS + 1))
2016-09-08 21:04:17 +02:00
else
LogText "Result: file ${FILE} is not writable by others, which is fine"
2015-09-24 20:29:05 +02:00
fi
fi
done
if [ ${DOCKER_FILE_PERMISSIONS_WARNINGS} -gt 0 ]; then
2016-06-18 11:14:01 +02:00
Display --indent 4 --text "- File permissions" --result "${STATUS_WARNING}"S --color YELLOW
2015-09-24 20:29:05 +02:00
AddHP 0 5
2016-09-08 21:04:17 +02:00
else
2016-06-18 11:14:01 +02:00
Display --indent 4 --text "- File permissions" --result "${STATUS_OK}" --color GREEN
2015-09-24 20:29:05 +02:00
AddHP 5 5
fi
fi
#
#################################################################################
2015-05-27 12:34:01 +02:00
#
2016-04-28 12:31:57 +02:00
WaitForKeyPress
2015-05-27 12:34:01 +02:00
#
#================================================================================
2021-01-07 15:22:19 +01:00
# Lynis - Copyright 2007-2021, CISOfy - https://cisofy.com