#!/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