Emotet Erkennung mit Icinga / Nagios und EmoCheck

Neulich wurde bei Heise (https://heise.de/-4652554) über ein interessantes Tool berichtet, mit dem geprüft werden kann, ob ein PC bereits mit der Schadsoftware „Emotet“ infiziert ist. Dies erledigt das Tool „EmoCheck“ (https://github.com/JPCERTCC/EmoCheck/releases) indem es den Rechner auf Prozesse untersucht, die typisch für eine Emotet-Infektion sind. In dem Artikel wird darauf hingewiesen, dass sich ein mit Emotet infizierter Rechner nicht zwangsläufig sofort auffällig verhält. In dem genannten Artikel heißt es: „[…] typischerweise vergehen zwischen der ersten Emotet-Infektion in einem Firmennetz und dem Verteilen des Erpressungs-Trojaners Ryuk ein bis zwei Wochen.“

Es gibt einige Diskussionen über die Funktionsweise dieses Tools. So regt sich einiges an Kritik am Umstand, dass EmoCheck nach statischen Prozessnamen sucht. Ich teile diese Bedenken dahingehend, dass Emotet seinen Prozessen jederzeit anderslautende Namen geben könnte. Allerdings bin ich der Meinung, dass dieses Werkzeug einen installierten Virenschutz sicherlich sinnvoll ergänzen kann und es in Anbetracht des doch erheblichen Schadenpotentials von Emotet sicherlich nicht schlecht ist, sich nur auf einen Prüfmechanismus zu verlassen.

In diesem Artikel beschreibe ich, wie man das Monitoringsystem Icinga bzw. Nagios in Verbindung mit EmoCheck nutzen kann um in einem Unternehmensnetz Emotet-Infektionen frühzeitig erkennen zu können und sich gegebenenfalls aktiv warnen zu lassen.

./libexec/check_emotet
#!/usr/bin/perl
use strict;
use warnings;
use File::Copy;

binmode STDOUT, ":utf8";
use utf8;
use JSON;

use experimental qw( switch );
use feature qw(switch say);

# Declare infection pointer
my $infected = 0;
my $infected_host = "";
my $dir = '/opt/emocheck';

foreach my $fp (glob("$dir/*.json")){
        my $json;
        {
                local $/; # This enables 'slurp' mode
                open my $fh, "<", $fp;
                $json = <$fh>;
                close $fh;
        }
        my $data = decode_json($json);
        if ($data->{'is_infected'} eq 'yes'){
                # Infection found! Set $infected to 1 and set/concatenate affected hostnames delimited by '|'
                $infected = 1;
                if ($infected_host eq ""){
                        $infected_host = $data->{'hostname'};
                }else{
                        $infected_host .= "/" . $data->{'hostname'};
                }
        }
        move($fp, $dir. "/processed");
}

given ($infected) {
    chomp($infected);
    when ($infected lt '1') { print "OK - No infection found."; exit(0);      }
    when ($infected eq '1') { print "CRITICAL - One or more infections suspected. ($infected_host)"; exit(2); }
    default { print "UNKNOWN - $infected of disk space used."; exit(3); }
}

@echo off
.\emocheck_x64 /quiet /json /output \\icinga\emocheck

checkcommands.cfg
define command {
                command_name                          check_emotet
                command_line                          $USER1$/check_emotet
}

advanced_services.cfg
define service {
                service_description                   Check Emotet Infection
                max_check_attempts                    1
                first_notification_delay              0
                notification_interval                 0
                notification_options                  c,r
                notifications_enabled                 1
                event_handler_enabled                 1
                check_command                         check_emotet!
                check_period                          24x7
                notification_period                   24x7
                host_name                             icinga.mein.netz
                contact_groups                        +admins,ProductionAdmins
                use                                   generic-service
}

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"emocheck"="C:\\Program Files\\Emocheck\\emocheck_x64.exe /quiet /json /output \\\\icinga\\emocheck"