#!/bin/bash # # Filter für den ASR-Integritätsbericht. # function info { echo -e ' SYNTAX: see [-c ext] tw.report -c Wählt die Konfiguration "tw.config-ext" an. see kennt die Schlüsselwörter FLAG (Trojaner) und BAIT (Köder). ([!/=] Objekt [Auswahlmaske] [#Kommentar [FLAG|BAIT[(Bem.)]]])\n' } . ${0%/*}/tw_conf ; . ${0%/*}/tw_lib err_types=(added deleted changed detected touched) # Auflösungsvermögen. list=/tmp/l.$$ ; buff=/tmp/b.$$ function notify { # Ersetzt Standard-Meldetext... local str sear_str neg str=${entry[*]} ; sear_str="\(${str// /\\|}\)" eval cat ${str:+"| grep -v \$sear_str"} # ...durch objektspezifische Hinweise. [ "$2" = 'if_not_found' ] && neg=true declare -i i=0 while [ -n "${entry[$i]}" ]; do if eval ${neg:+"!"} grep -q "${entry[$i]}$" $buff; then echo "$1${entry[$i]}${rem[$i]:+ (${rem[$i]})}" fi i=$((i+1)) done } # Option? conf="$DESTDIR/tw.config" while getopts "c:h" opt; do case $opt in c) conf="$DESTDIR/tw.config-$OPTARG"; shift 2;; h) info ; exit 0;; *) exit 1;; esac done if ! [ -e $conf ]; then echo "--> ${0##*/}: Kann Konfigurationsdatei nicht finden!" exit 1 fi cat $1 >$buff cat $buff | sed 's/: /: /g' | ( # Trojaner? set_entry FLAG <$conf notify "detected: ... " if_not_found ) | ( # Köder? set_entry BAIT <$conf notify "touched: ... " if_found #) | ( # Beispiel für einen benutzerdefinierten Filter: # entry=(/etc/passwd /etc/inetd.conf /bin/login) # notify "ALERT: ... " if_found ) | sed '/^$/d' | tee $list # Statusbits setzen! declare -i mask=2 for type in ${err_types[*]}; do grep -q "^$type" $list && stat=$((stat | mask)) mask=$((mask << 1)) done rm -f $list $buff exit $stat # Statusbit: 7 6 5 4 3 2 1 0 # Bedeutung: - - touch. detec. chang. delet. added -