7 Reaktionen

Malware Erkennung in Webseiten unter Debian mit maldetect und inotify

Geschätzte Lesedauer:

Malware Detection ist oftmals ein schwieriges Thema. Heute habe ich einen kleines aber feines Howto (in englisch) gelesen, welches zeigt, wie mit kleinen Anpassungen das Programm maldetect auch unter Debian vernünftig läuft.
Auf Basis dieses Howtos habe ich ein Shell Skript geschrieben, was die notwendigen (und ein paar weitere) Änderungen an den maldetect Dateien vornimmt.
Ich habe es zwar selbst nicht getestet, aber dies müsste auch unter Ubuntu funktionieren, da sich die Systeme recht ähnlich sind.
Einfach die folgende Datei in einem Verzeichnis nach Wahl abspeichern (sie sollte danach auch weiterhin dort liegen bleiben für spätere Updates!):

Nutzung wie immer auf eigene Gefahr!

[pastacode lang=“bash“ message=“Shell-Script“ highlight=““ provider=“manual“]

#!/bin/bash
# debian-specific installation script by M. Cramer 
# howto taken from howtoforge written by "felan":
# http://www.howtoforge.com/forums/showthread.php?p=284504
#
 
CURDIR=`pwd`
PROG=`readlink -f $0`
 
echo "Installing prerequisites..."
apt-get -y -q install inotify-tools sed
 
echo "Fetching latest version of maldetect..."
cd /tmp
wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
tar -xzf maldetect-current.tar.gz
cd maldetect-*
 
echo "Modifying install script..."
sed -r -i 's/^(.*cp.*\/libinotifytools.so\.0[ ]+\/usr\/lib\/.*)$/#\1/g' install.sh;
 
echo "Modifying cron job..."
sed -r -i '/maldet.*\/var\/www\/vhosts\/\?\/subdomains\/\?\/httpdocs.*$/ a\
        elif [ -d "/usr/local/ispconfig" || -d "/root/ispconfig" ]; then\
                # ispconfig\
                /usr/local/maldetect/maldet -b -r /var/www 2 >> /dev/null 2>&1' cron.daily;
 
echo "Modifying maldet script..."
sed -r -i 's/^\$nice .*$/\$nice -n \$inotify_nice \$inotify -r --fromfile \$inotify_fpaths \$exclude --timefmt "%d %b %H:%M:%S" --format "%w%f %e %T" -m -e create,move,modify >> \$inotify_log 2>\&1 \&/g' files/maldet;
 
sed -r -i '/lmdup\(\) \{.*$/ a\
ofile=\$tmpdir/.lmdup_vercheck.\$\$\
tmp_inspath=/usr/local/lmd_update\
rm -rf \$tmp_inspath\
rm -f \$ofile\
\
mkdir -p \$tmp_inspath\
chmod 750 \$tmp_inspath\
\
eout "\{update\} checking for available updates..." 1\
\
\$wget --referer="http://www.rfxn.com/LMD-\$ver" -q -t5 -T5 "\$lmdurl_ver" -O \$ofile >> /dev/null 2>\&1\
if \[ -s "\$ofile" \]; then\
        installed_ver=`echo \$ver | tr -d "."`\
        current_ver=`cat \$ofile | tr -d "."`\
        current_hver=`cat \$ofile`\
        if \[ "\$current_ver" -gt "\$installed_ver" \]; then\
                eout "\{update\} new version \$current_hver found, updating..." 1\
                '"$PROG"'\
        fi\
else\
    echo "no update file found. try again later"\
    exit\
fi\
\
rm -rf \$tmp_inspath \$ofile \$ofile_has\
\
exit;\
# skip all the rest\
' files/maldet;
 
echo "Modifying config..."
sed -r -i 's/^inotify=.*$/inotify=\/usr\/bin\/inotifywait/g' files/internals.conf
 
echo "Deleting unneccessary files..."
rm -f files/inotify/inotifywait
rm -f files/inotify/libinotifytools.so.0
 
./install.sh
 
rm -r /tmp/maldetect-*
 
cd $CURDIR
 
echo "Soll ein Echtzeit-Monitoring laufen bitte folgende Änderungen vornehmen:"
echo ""
echo "vi /usr/local/maldetect/maldetfilelist"
echo ""
echo "Einfügen (Verzeichnis/Verzeichnisse, die untersucht werden sollen)"
echo "/var/www"
echo "(bzw. das Basisverzeichnis für die Webseiten, kann auch /home/www oder ähnlich sein)"
echo ""
echo "vi /etc/rc.local"
echo ""
echo "Einfügen (Befehl startet den Monitor beim Boot des Servers)"
echo "/usr/local/maldetect/maldet -m /usr/local/maldetect/maldetfilelist"
echo ""
echo "Zum starten des Monitors einmalig den Befehl ausführen"
echo "/usr/local/maldetect/maldet -m /usr/local/maldetect/maldetfilelist"

[/pastacode]

Um sich bei Malwarefunden per Mail benachrichtigen zu lassen, müssen die Einstellungen in der Datei /usr/local/maldetect/conf.maldet geändert werden.
email_alert=1
sowie die Werte bei email_addr (eigene Mailadresse eintragen), sowie optional die Werte für den Betreff (email_subj).

Sollen bei einem Malwarefund die Dateien automatisch gesäubert und/oder in Quarantäne verschoben werden, dann muss zusätzlich noch die Einstellung quar_hits auf 1 gesetzt werden. Ich persönlich schaue mir die Malware Dateien lieber selbst noch einmal an und habe daher diese Option nicht gesetzt.

Da die Konfiguration (zumindest derzeit noch) bei einem Update überschrieben wird sollte man die Datei schützen, wenn die eigenen Änderungen nicht verloren gehen sollen:
chattr +i /usr/local/maldetect/conf.maldet
Der Schutz lässt sich mit chattr -i /usr/local/maldetect/conf.maldet wieder entfernen.

Mit den Standard-Einstellungen wird täglich ein CRON-Job ausgeführt. Dieser verhält sich unterschiedlich, je nachdem ob der Monitordienst eingerichtet wurde oder nicht.
Bei aktivem Monitoring wird lediglich eine tägliche Zusammenfassung der Malwarefunde versendet. Ist das Monitoring nicht aktiv, wird täglich ein Scan der Webverzeichnisse vorgenommen.
Hierbei unterscheiden sich die Verzeichnisse, je nachdem welche Hosting Panel Software verwendet wird:

  • ensim:
    /home/virtual/*/fst/var/www/html und /home/virtual/*/fst/home/*/public_html
  • plesk:
    /var/www/vhosts/*/httpdocs und /var/www/vhosts/*/subdomains/*/httpdocs
  • ispconfig:
    /var/www
  • sonstige:
    /home*/*/public_html

Passen all diese Pfade nicht zum eigenen System müssen die Pfade in /etc/cron.daily/maldet angepasst werden.

Wurde nun der Monitoringdienst eingerichtet, empfielt es sich zumindest einen ersten Scan von Hand anzustoßen. Die notwendigen Befehle stehen in der oben genannten CRON Datei, wobei wir die 2 am Ende des Befehls durch eine 60 ersetzen. Dies gibt den Zeitraum in Tagen an, seit dem eine Datei geändert worden sein muss, damit sie untersucht wird. 60 Tage ist hierbei das Maximum.
Stellt man eine höhere Zahl ein, so wird der Wert auf 7 zurückgesetzt.

Hier das Beispiel für den ersten Durchlauf auf einem Plesk System:

[pastacode lang=“bash“ message=“Kommandozeile“ highlight=““ provider=“manual“]

/usr/local/maldetect/maldet -b -a /var/www/vhosts/?/httpdocs
/usr/local/maldetect/maldet -b -a /var/www/vhosts/?/subdomains/?/httpdocs

[/pastacode]

Dieser Artikel wurde von Marius Burkard verfasst.

Marius Burkard ist Diplom-Wirtschaftsinformatiker und arbeitet seit 2006 als selbstständiger Software-Entwickler und Linux-Server-Administrator mit der Firma pixcept KG. Er ist unter anderem mitverantwortlich für die Projekte Was-lese-ich.de und ISPProtect.

4 Kommentare - bis jetzt!

Eigenen Kommentar verfassen
  1. schrieb am :

    Deine Mühen in allen Ehren, aber das Shell Skript sieht an sich schon… gefährlich aus. Das wilde rm und apt-get install -y …. Lass es da mal zu Konflikten kommen auf dem System des Menschen der das ausführt. Ruck zuck ist da alles hinüber.

    Mir hätte eine Stück für Stück Anleitung wie ich soetwas bewerkstelligen kann besser gefallen.

  2. schrieb am :

    @noqqe:
    Naja, wenn du dir die rm Befehle ansiehst, dann wird da nichs an Stellen gemacht, die gefährlich wären. Die rms werden im /tmp und im entpackten Download gemacht.
    Ein apt-get install -y bei schweren Konflikten wird nicht ausgeführt, dafür bräuchte es ein force-yes.
    Eine Schritt-für-Schritt Anleitung gibt es ja in der genannten Quelle.

  3. Roman
    schrieb am :

    Moin,
    hm, verstehe ich das richtig, dass ein maldet -m /path dann durchgängig eine Kontrolle aller geänderten Dateien vornimmt und verdächtige Dateien meldet?

    Ich hatte den Fall, dass das Monitoring lief, aber keine „Hits“ gemeldet wurden – ein manuelles „maldet -b -a /var/www“ gab dann aber Hits aus und meldete diese per Mail…

  4. schrieb am :

    Hallo Roman,
    das ist so eine Sache mit dem „-m“.
    Maldet benutzt hier Systemdienste für die Überwachung von Dateiänderungen. Leider ist es aber so, dass diese Überwachungen Grenzen haben. Ich verlasse mich schon länger nicht mehr darauf, sondern nutze andere Möglichkeiten, um Prüfungen vorzunehmen.
    Bspw. mache ich täglich ein find /var/www/ -type f -mtime -2 -exec scanbefehl {} \; um die geänderten/neuen Dateien zu scannen. Das erwischt allerdings nicht diejenigen, die ein „Fakedatum“ bekommen haben. Daher mache ich zusätzlich in regelmäßigen Abständen vollständige Scans.
    Für einige Server nutze ich auch den (kostenpflichtigen) ISPConfig MAUS Service, der unter anderem auch Malware Scans macht.

    Viele Grüße
    Marius

Und jetzt du! Deine Meinung?

Erforderliche Felder sind mit einem Asterisk (*) gekennzeichnet. Die E-Mail-Adresse wird nicht veröffentlicht.
  1. Nach Absenden des Kommentar-Formulars erfolgt eine Verarbeitung der von Ihnen eingegebenen personenbezogenen Daten durch den datenschutzrechtlich Verantwortlichen zum Zweck der Bearbeitung Ihrer Anfrage auf Grundlage Ihrer durch das Absenden des Formulars erteilten Einwilligung.
    Weitere Informationen