mirror of https://github.com/CISOfy/lynis.git
241 lines
11 KiB
Bash
241 lines
11 KiB
Bash
#!/bin/sh
|
|
|
|
#################################################################################
|
|
#
|
|
# Lynis
|
|
# ------------------
|
|
#
|
|
# Copyright 2007-2014, Michael Boelen (michael@rootkit.nl), The Netherlands
|
|
# Web site: http://www.rootkit.nl
|
|
#
|
|
# 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.
|
|
#
|
|
#################################################################################
|
|
#
|
|
# Report
|
|
#
|
|
#################################################################################
|
|
#
|
|
logtextbreak
|
|
#if [ ${QUIET} -eq 0 ]; then
|
|
# echo ""
|
|
# echo " ---------------------------------------------------"
|
|
# echo " Program version: ${PROGRAM_version}"
|
|
# echo " Operating system: ${OS_NAME}"
|
|
# echo " Operating system version: ${OS_VERSION}"
|
|
# if [ ! "${OS_MODE}" = "" ]; then echo " Operating system mode: ${OS_MODE}"; fi
|
|
# echo " Kernel version: ${OS_KERNELVERSION}"
|
|
# echo " Hardware platform: ${HARDWARE}"
|
|
# echo " Hostname: ${HOSTNAME}"
|
|
# echo " Auditor: ${AUDITORNAME}"
|
|
# echo " Profile: ${PROFILE}"
|
|
# echo " Log file: ${LOGFILE}"
|
|
# echo " Report file: ${REPORTFILE}"
|
|
# echo " Report version: ${REPORT_version}"
|
|
# echo " ---------------------------------------------------"
|
|
# fi
|
|
|
|
#
|
|
#################################################################################
|
|
#
|
|
# Hardening Index
|
|
# Define approximately how strong a machine has been hardened
|
|
#
|
|
#################################################################################
|
|
#
|
|
# If no hardening has been found, set value to 1
|
|
if [ ${HPPOINTS} -eq 0 ]; then HPPOINTS=1; HPTOTAL=100; fi
|
|
HPINDEX=`expr $HPPOINTS \* 100 / $HPTOTAL`
|
|
HPAOBLOCKS=`expr $HPPOINTS \* 20 / $HPTOTAL`
|
|
# Set color related to rating
|
|
if [ ${HPINDEX} -lt 50 ]; then
|
|
HPCOLOR="${RED}"
|
|
HIDESCRIPTION="System has not or a low amount been hardened"
|
|
fi
|
|
if [ ${HPINDEX} -gt 49 -a ${HPINDEX} -lt 80 ]; then
|
|
HPCOLOR="${YELLOW}"
|
|
HIDESCRIPTION="System has been hardened, but could use additional hardening"
|
|
fi
|
|
if [ ${HPINDEX} -gt 79 -a ${HPINDEX} -lt 90 ]; then
|
|
HPCOLOR="${GREEN}"
|
|
HIDESCRIPTION="System seem to be decent hardened"
|
|
fi
|
|
if [ ${HPINDEX} -gt 89 ]; then
|
|
HPCOLOR="${GREEN}"
|
|
HIDESCRIPTION="System seem to be well hardened"
|
|
fi
|
|
|
|
case ${HPAOBLOCKS} in
|
|
0) HPBLOCKS="#"; HPEMPTY=" " ;;
|
|
1) HPBLOCKS="#"; HPEMPTY=" " ;;
|
|
2) HPBLOCKS="##"; HPEMPTY=" " ;;
|
|
3) HPBLOCKS="###"; HPEMPTY=" " ;;
|
|
4) HPBLOCKS="####"; HPEMPTY=" " ;;
|
|
5) HPBLOCKS="#####"; HPEMPTY=" " ;;
|
|
6) HPBLOCKS="######"; HPEMPTY=" " ;;
|
|
7) HPBLOCKS="#######"; HPEMPTY=" " ;;
|
|
8) HPBLOCKS="########"; HPEMPTY=" " ;;
|
|
9) HPBLOCKS="#########"; HPEMPTY=" " ;;
|
|
10) HPBLOCKS="##########"; HPEMPTY=" " ;;
|
|
11) HPBLOCKS="###########"; HPEMPTY=" " ;;
|
|
12) HPBLOCKS="############"; HPEMPTY=" " ;;
|
|
13) HPBLOCKS="#############"; HPEMPTY=" " ;;
|
|
14) HPBLOCKS="##############"; HPEMPTY=" " ;;
|
|
15) HPBLOCKS="###############"; HPEMPTY=" " ;;
|
|
16) HPBLOCKS="################"; HPEMPTY=" " ;;
|
|
17) HPBLOCKS="#################"; HPEMPTY=" " ;;
|
|
18) HPBLOCKS="##################"; HPEMPTY=" " ;;
|
|
19) HPBLOCKS="###################"; HPEMPTY=" " ;;
|
|
20) HPBLOCKS="####################"; HPEMPTY="" ;;
|
|
esac
|
|
|
|
HPGRAPH="[${HPCOLOR}${HPBLOCKS}${NORMAL}${HPEMPTY}]"
|
|
logtext "Hardening index : [${HPINDEX}] [${HPBLOCKS}${HPEMPTY}]"
|
|
logtext "Hardening strength: ${HIDESCRIPTION}"
|
|
report "hardening_index=${HPINDEX}"
|
|
|
|
#
|
|
#################################################################################
|
|
#
|
|
# Show test results overview
|
|
#
|
|
#################################################################################
|
|
#
|
|
# Only show overview if not running in quiet mode
|
|
if [ ${QUIET} -eq 0 ]; then
|
|
echo ""; echo "================================================================================"
|
|
echo ""; echo " -[ ${WHITE}${PROGRAM_name} ${PROGRAM_version} Results${NORMAL} ]-"
|
|
echo "";
|
|
|
|
# Show warnings from logfile
|
|
SWARNINGS=`cat ${LOGFILE} | grep -i 'warning:' | sed 's/ /!space!/g'`
|
|
|
|
|
|
if [ "${SWARNINGS}" = "" ]; then
|
|
echo " ${OK}No warnings${NORMAL}"; echo ""
|
|
else
|
|
echo " ${WARNING}Warnings${NORMAL}:"
|
|
echo " ${WHITE}----------------------------${NORMAL}"
|
|
for WARNING in ${SWARNINGS}; do
|
|
SHOWWARNING=`echo ${WARNING} | sed 's/!space!/ /g' | sed 's/^\[\(.*\)\] Warning: //'`
|
|
ADDLINK=`echo ${WARNING} | sed 's/!space!/ /g' | sed 's/^\[\(.*\)\] Warning: \(.*\)\[//' | sed 's/\]//'`
|
|
echo " ${WHITE}- ${SHOWWARNING}${NORMAL}"
|
|
echo " http://cisofy.com/controls/${ADDLINK}/"
|
|
echo ""
|
|
done
|
|
fi
|
|
|
|
# Show suggestions from logfile
|
|
SSUGGESTIONS=`grep -i 'suggestion:' ${LOGFILE} | sed 's/ /!space!/g'`
|
|
|
|
if [ "${SSUGGESTIONS}" = "" ]; then
|
|
echo " ${OK}No suggestions${NORMAL}"; echo ""
|
|
else
|
|
echo " ${YELLOW}Suggestions${NORMAL}:"
|
|
echo " ${WHITE}----------------------------${NORMAL}"
|
|
for SUGGESTION in ${SSUGGESTIONS}; do
|
|
SHOWSUGGESTION=`echo ${SUGGESTION} | sed 's/!space!/ /g' | sed 's/^\[\(.*\)\] Suggestion: //'`
|
|
ADDLINK=`echo ${SUGGESTION} | sed 's/!space!/ /g' | sed 's/^\[\(.*\)\] Suggestion: \(.*\)\[//' | sed 's/\]//'`
|
|
echo " - ${SHOWSUGGESTION}"
|
|
echo " http://cisofy.com/controls/${ADDLINK}/"
|
|
done
|
|
echo ""
|
|
fi
|
|
|
|
if [ ! "${SWARNINGS}" = "" -o ! "${SSUGGESTIONS}" = "" ]; then
|
|
echo " ${CYAN}Follow-up${NORMAL}:"
|
|
echo " ${WHITE}----------------------------${NORMAL}"
|
|
echo " ${WHITE}-${NORMAL} Check the logfile (less $LOGFILE)"
|
|
echo " ${WHITE}-${NORMAL} Read security controls texts (http://cisofy.com)"
|
|
echo " ${WHITE}-${NORMAL} Use --upload to upload data (Lynis Enterprise users)"
|
|
echo ""
|
|
fi
|
|
echo "================================================================================"
|
|
echo " ${WHITE}Lynis Scanner (details)${NORMAL}:"
|
|
echo ""
|
|
echo " ${CYAN}Hardening index${NORMAL} : ${WHITE}${HPINDEX}${NORMAL} ${HPGRAPH}"
|
|
echo " ${CYAN}Tests performed${NORMAL} : ${WHITE}${CTESTS_PERFORMED}${NORMAL}"
|
|
echo " ${CYAN}Plugins enabled${NORMAL} : ${WHITE}${N_PLUGIN_ENABLED}${NORMAL}"
|
|
echo ""
|
|
echo " ${SECTION}Lynis Modules${NORMAL}:"
|
|
# Heuristics will be implemented later
|
|
echo " - Heuristics Check [${WHITE}NA${NORMAL}] - Security Audit [${GREEN}V${NORMAL}] - Vulnerability Scan [${GREEN}V${NORMAL}]"
|
|
echo ""
|
|
echo " ${SECTION}Compliance Checks${NORMAL}:"
|
|
# Compliance checks and status will be marked in upcoming releases
|
|
echo " - HIPAA [${WHITE}NA${NORMAL}] - PCI [${WHITE}NA${NORMAL}] - SOx [${WHITE}NA${NORMAL}] "
|
|
|
|
echo ""
|
|
echo " ${SECTION}Files${NORMAL}:"
|
|
echo " - Test and debug information : ${WHITE}${LOGFILE}${NORMAL}"
|
|
echo " - Report data : ${WHITE}${REPORTFILE}${NORMAL}"
|
|
echo "================================================================================"
|
|
if [ ${PROGRAM_LV} -gt ${PROGRAM_AC} ]; then
|
|
echo " ${NOTICE}Notice: ${WHITE}${PROGRAM_name} update available${NORMAL}"
|
|
echo " Current version : ${WHITE}${PROGRAM_AC}${NORMAL} Latest version : ${WHITE}${PROGRAM_LV}${NORMAL}"
|
|
echo "================================================================================"
|
|
else
|
|
###########################################################################################
|
|
#
|
|
# Software quality program
|
|
# Only provide this hint when the tool is at the latest version
|
|
#
|
|
###########################################################################################
|
|
|
|
if [ ! "${PROGRAM_LV}" = "0" -a ! "${REPORTFILE}" = "" -a ! "${REPORTFILE}" = "/dev/null" ]; then
|
|
# Determine if the quality of the program can be increased by filtering out the exceptions
|
|
FIND=`${GREPBINARY} "^exception" ${REPORTFILE}`
|
|
if [ ! "${FIND}" = "" ]; then
|
|
echo ""
|
|
echo " ${RED}Exceptions found${NORMAL}"
|
|
echo " ${WHITE}Some exceptional events or information was found!${NORMAL}"
|
|
echo ""
|
|
echo " ${CYAN}What to do:${NORMAL}"
|
|
echo " You can help improving Lynis by providing your report file."
|
|
echo " Go to http://cisofy.com/contact/ and send your file to the e-mail address listed"
|
|
echo ""
|
|
echo "================================================================================"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Display what tests are skipped in non-privileged scan for awareness
|
|
if [ ${PENTESTINGMODE} -eq 1 -a ! "${SKIPPED_TESTS_ROOTONLY}" = "" ]; then
|
|
echo ""
|
|
echo " ${PURPLE}Skipped tests due to non-privileged scan${NORMAL}"
|
|
|
|
FIND=`echo ${SKIPPED_TESTS_ROOTONLY} | sed 's/ /:space:/g'`
|
|
# Split entries
|
|
FIND=`echo ${FIND} | sed 's/====/ /g'`
|
|
# Display found entries
|
|
for I in ${FIND}; do
|
|
J=`echo ${I} | sed 's/:space:/ /g'`
|
|
echo " ${J}"
|
|
done
|
|
echo ""
|
|
echo "================================================================================"
|
|
fi
|
|
|
|
if [ ${SHOW_TOOL_TIPS} -eq 1 ]; then
|
|
echo " Tip: Disable all tests which are not relevant or are too strict for the"
|
|
echo " purpose of this particular machine. This will remove unwanted suggestions"
|
|
echo " and also boost the hardening index. Each test should be properly analyzed"
|
|
echo " to see if the related risks can be accepted, before disabling the test."
|
|
echo "================================================================================"
|
|
fi
|
|
|
|
echo " ${PROGRAM_name} ${PROGRAM_version}"
|
|
echo " ${PROGRAM_copyright}"
|
|
echo " ${WHITE}${PROGRAM_extrainfo}${NORMAL}"
|
|
echo "================================================================================"
|
|
|
|
|
|
echo ""; echo ""
|
|
fi
|
|
|
|
#
|
|
#================================================================================
|
|
# Lynis - Copyright 2007-2014, Michael Boelen - cisofy.com - The Netherlands
|