Beruflich Dokumente
Kultur Dokumente
PETER FETZER
Kontrollverlust
Der Einsatz zentralisierter Monitoringanwendungen ist fr den geordneten Betrieb komplexer IT-Landschaften inzwischen unerlsslich. Er birgt jedoch grundstzlich auch einige Gefahren fr die Sicherheit der damit berwachten Infrastruktur. Am Beispiel des verbreiteten OpenSource-Projekts Nagios zeigt dieser Artikel, welche Ansatzpunkte es fr potentielle Angreifer gibt und wie Administratoren einen wirksamen Schutz dagegen aufbauen knnen.
agios, bzw. der daraus abgeleitete Fork ICINGA , ist ein flexibles und gut erweiterbares Monitoringsystem zur berwachung von Netzwerk- und Systemdiensten, Servern, Netzwerkgerten und vielem mehr. Es ermglicht die Frherkennung von Ausfllen, die Identifizierung von Fehlerquellen und untersttzt die Vorhersage von Ressourcenengpssen. Mit Hilfe sehr einfach zu entwickelnder Plugins kann nahezu jedes Gert und jeder Dienst berwacht werden. Auch dank seiner ausfhrlicher Dokumentation und einer sehr aktiven Community findet Nagios heute eine starke Verbreitung in Netzwerken und Unternehmen jeder Gre. Gelingt es einem Angreifer, die Kontrolle ber einen Nagios-Server zu erlangen, erffnet ihm dies in der Regel den ungehinderten Zugang zu einer Vielzahl anderer Systeme. Selbst aus einem unverschlsselten Backup des Konfigurationsverzeic hnisses knnen bereits wertvolle Informationen fr weitere Angriffe gezogen werden.
Auch Nagios oder genauer gesagt seine Konfiguration kann einem Angreifer bereits sensible und wertvolle Informationen ber das Zielnetzwerk und die darin befindlichen Hosts liefern. Dies ist zum einen ber das Webfrontend und zum anderen ber die Konfigurationsdateien mglich. Soll die zweite Mglichkeit genutzt werden ist es notwendig zu wissen, wo die relevanten Dateien zu finden sind, in jedem Fall aber wie sie strukturiert sind und wie die darin enthaltenen Daten interpretiert und genutzt werden knnen. Am Ende dieses Kapitels werden noch die Mglichkeiten zur berwachung von Remote-Diensten beleuchtet und runden damit auch die Einfhrung in die Materie der Nagios-Konfiguration ab.
Grundlagen
Informationsbeschaffung
Zu Beginn eines Angriffs steht immer die Beschaffung von Informationen ber lohnende Ziele, getroffene Abwehrmanahmen und potentielle Schwachstellen. blicherweise beginnt die Recherche mit ffentlich einsehbaren Informationen wie DNS- und IP-Zuordnungen und hangelt sich an den gefundenen Daten immer weiter Richtung Ziel. Ein hilfreicher Zwischenschritt kann es dabei sein, sich Zugriff auf ein geschftsunkritisches und daher schwcher geschtztes System zu verschaffen.
Nagios wird blicherweise als Daemon unter Linux oder anderen unixoiden Systemen betrieben. Die verwendeten Pfade sind bei der Installation frei konfigurierbar bzw. beim Einsatz einer Paketverwaltung vom jeweiligen Distributor festgelegt. Dennoch folgen die meisten Installationen einem von zwei verbreiteten Schemata. Das eigentliche Nagios-Binary findet sich unter /usr/sbin/ oder /usr/local/nagios/bin/, die Check-Plugins unter /usr/lib/nagios/plugins/ oder /usr/local/nagios/libexec/. Die HTML-Dateien und Bilder fr die Weboberflche sowie die Dokumentation liegen unter /usr/share/nagios/htdocs/ oder /usr/ local/nagios/share/, die CGI-Skripte unter
oder
sind Status- und Logdateien zu finden. Die Konfiguration von Nagios erfolgt mit Hilfe mehrerer Konfigurationsdateien unter dem Pfad /etc/nagios/ oder /usr/ local/nagios/etc/: Die zentrale nagios.cfg enthlt alle Grundeinstellungen des Dienstes und referenziert alle weiteren Konfigurationsdateien und -verzeichnisse mit Ausnahme der Datei cgi.cfg fr die Konfiguration der Weboberflche. Von groem Informationsgehalt sind die Objektkonfiguration und die RessourcenDatei. Um die darin enthaltenen Informationen nutzen zu knnen, ist es sinnvoll, die Bedeutung der einzelnen Konfigurationsobjekte zu verstehen.
gen Inhalt: hosts.cfg, hostgroups.cfg, hostextinfo.cfg, services.cfg, etc. Lediglich die Befehle (Commands) werden noch in die checkcommands.cfg fr Prfbefehle und die misccommands.cfg fr Benachrichtigungsaufrufe und Event-Handler verteilt. Die Ressourcen-Datei resource.cfg dient der Belegung der benutzerdefinierten Makros $USER1$ bis $USER32$. In diesen werden neben Pfaden hufig auch Benutzernamen und Passwrter fr die Verwendung durch Commands hinterlegt. Aus diesem Grund ist diese Datei meist auch mit restriktiven Zugriffsrechten versehen.
Konfigurationsobjekte
Host Definition (host)
ber Host Definitions werden alle zu berwachenden physikalischen Hosts definiert. Aus den Feldern alias und address lassen sich die IP-Adresse und ggfs. der DNS-Name ermitteln. Die als parents definierten Hosts sind dem Host, der diese definiert, topologisch gesehen bergeordnet. Mit Hilfe dieser Information kann schrittweise ein vollstndiger Plan des berwachten Netzes gezeichnet werden, wie ihn auch Nagios in seinem Webfrontend darstellt. Dabei ist zu beachten, dass die Wurzel der entstandenen Topologie immer der Nagios-Server ist. Abbildung 1 zeigt zur Veranschaulichung einen graphischen Netzplan aus der Weboberflche. Die Felder contacts bzw. contact_groups bilden hufig die Zuordnung der Hosts zu den verantwortlichen Administratoren ab. Fr Social-Engineering-Angriffe ist dies eine
Konfigurationsstruktur
Der Aufbau der Objektkonfiguration ist nicht fest vorgeschrieben und richtet sich rein nach den Vorlieben des Administrators. So kann er alle Hosts und Services in jeweils einer Datei zusammenfassen, oder aber fr jeden Host eine Datei anlegen und in dieser neben dem Host auch alle Services, Abhngigkeiten, Eskalationen etc. mit definieren. In kleinen Installationen knnen auch alle Konfigurationsobjekte in einer Datei liegen. Die vielerorts empfohlene und daher auch hufig anzutreffende Konfigurationsstruktur gruppiert gleiche Objekte in einer Konfigurationsdatei und richtet sich bei der Benennung der Dateien nach ihrem jeweili-
1/2010 HAKIN9
21
ANGRIFF
werden. Daraus lsst sich ableiten, welche Personen welchen Status einnehmen und wann sie Dienst haben. So wird ein Supportmitarbeiter zum Beispiel sofort ber eine Strung informiert, sein Abteilungsleiter aber erst, wenn das Problem nicht nach sptestens vier Stunden behoben ist. nicht mehr korrekt antwortender LDAP-Dienst nicht mehr als gestrt gemeldet, wenn der dahinter liegende Datenbank-Dienst ausgefallen ist. Ein Angreifer kann daraus Informationen beziehen, welche Dienste miteinander in Verbindung stehen, um lohnenswerte Ziele wie zum Beispiel die schwcher geschtzte Backup-Datenbank der CRM-Anwendung oder den Anwendungsserver hinter dem von auen gut geschtzten Kundenportal zu ermitteln. diese berwacht werden und fr einzelne Kontakte, wann diese ber eingetretene Strungen informiert werden sollen. Dies lsst Rckschlsse auf die blichen Bro- bzw. Schichtzeiten, also auch auf geeignete Zeitfenster fr Angriffe, und ggfs. auf fr Konkurrenten interessante Service-Level-Agreements (SLA) zu.
Templates
Um hufig bentigte Einstellungen nicht redundant pflegen zu mssen, knnen zu allen Listing 2. Die Konfiguration eines Services
define service{ host_name db001 service_description mySQL check_command check_mysql_server max_check_attempts 5 check_interval 5 retry_interval 3 check_period 24x7 notification_interval 30 notification_period 24x7 notification_options w,c,r contact_groups database-admins-ffm }
} # Nachher command{ command_name check_local_load command_line echo $USER3$ \ > /tmp/result ; \ $USER1$/check_load \ -w $ARG1$ -c $ARG2$ }
sem Kapitel gezeigten Techniken erfordert mindestens die lokalen Zugriffsrechte des Benutzers nagios.
Eine andere Mglichkeit ist die Ausfhrung von Befehlen per SSH mit Hilfe des Standard-Plugins check_by_ssh. Dies hat den Vorteil, dass auf dem zu berwachenden Host kein zustzlicher Systemdienst installiert werden muss, wodurch sich auch Umgebungen monitoren lassen, fr die NRPE nicht zur Verfgung steht. Wie im nachfolgenden Kapitel noch erlutert wird, bergen beide Mglichkeiten unterschiedliche Risiken fr die Sicherheit des berwachten Hosts. Weiterhin ist es mglich, den Status eines Dienstes mit Hilfe eines dynamisch generierten HTML- oder XML-Dokumentes anzuzeigen. Mit einem geeigneten NagiosPlugin kann dieses per HTTP(S) abgerufen und interpretiert werden.
Angriffe
Neben den im vorherigen Kapitel gezeigten passiven Methoden zur eschaffung wertvoller Informationen zu Netzwerkinfrastruktur und Diensten, geht es nun um die aktive Ausnutzung von gefundenen Schwachstellen. Der Groteil der in die-
Wie bereits erwhnt, ist die RessourcenDatei resource.cfg unter anderem dazu vorgesehen, Benutzernamen und Passwrter in Form der Makros $USER1$ bis $USER32$ zu speichern. Zu welchem Dienst uns diese Zugang verschaffen, verrt eine Suche nach dem Namen des entsprechenden Makros in den Konfigurationsobjekten command und ggfs. service. Erlauben besonders strikt gesetzte Rechte keinen lesenden Zugriff auf die Ressourcen-Datei, gelingt es mglicherweise auch, auf anderem Weg an ihren Inhalt zu gelangen. Hierzu werden Schreibrechte auf die nagios.cfg, auf eine Objektko nfigurationsdatei (cfg_file) oder auf ein Objektkonfigurationsverzeichnis (cfg_dir) bentigt, um eine bestehende CommandDefinition zu verndern oder neue Konfigurationsobjekte hinzuzufgen. Die Modifikation eines bestehenden Objektes ist dabei wenn mglich vorzuziehen, da ein neu hinzugefgter Service auch im Webfrontend sichtbar wird. Listing 3 zeigt den Ausschnitt einer entsprechend modifizierten Konfiguration. Sie ist so angepasst, dass die Manipulation ber das Webfrontend nicht entdeckt werden kann. Nach einem Neustart des NagiosDienstes wird der manipulierte Befehl ausgefhrt. Abhngig vom Wert des Parameters max _ service _ check _ spread in der nagios.cfg kann dies allerdings einige Minuten dauern.
Shell-Code-Injection
Durch eine Schwachstelle in NRPE ist es in allen bisherigen Versionen mglich, von einem berechtigten Nagios-Server oder beim Einsatz von IP-Adress-Spoofing auch von jedem anderen Rechner aus ShellBefehle auf den berwachten Maschinen auszufhren. Wie zuvor gezeigt ist es auch bei der Definition eines Commands in NRPE mglich, Platzhalter fr eine Parameterbergabe in Form von Makros der Art $ARGx$ zu verwenden. Wird also beispielsweise der Command check _ procs mit drei Parametern versehen:
1/2010 HAKIN9 23
ANGRIFF
command[check_procs]=/usr/lib64\ /nagios/plugins/check_procs -w \ $ARG1$ -c $ARG2$ -s $ARG3$
knnen diese beim Aufruf des Commands per check_nrpe mit Hilfe des Parameters -a mit bergeben werden:
hal ~ # /usr/lib64/nagios/plugins\ check_procs -a 1 2 R PROCS CRITICAL:
/check_nrpe -H db001.rz01.local -c \
Durch eine leichte Modifikation des Aufrufs, lassen sich jedoch auf dem Zielsystem auch Befehle ausfhren, nicht in der Konfiguration von NRPE vorgesehen sind:
hal ~ # /usr/lib64/nagios/plugins\ check_procs -a 1 2 '$(whoami)' PROCS OK:
/check_nrpe -H db001.rz01.local -c \
Die auf diesem Weg eingeschleusten Befehle werden direkt mit den Rechten des Benutzers nagios in der Shell ausgefhrt. (Den Nagios-Administratoren unter den Lesern stehen sptestens jetzt dicke Schweiperlen auf der Stirn.) Doch beliebiger Code lsst sich an dieser Stelle noch nicht einspeisen, denn Aufrufe mit einem Listing 5. Konfigurationsobjekte zur Installation einer Backdoor
define service{ host_name db001 service_description ping check_command check_for_ instructions max_check_attempts 5 check_interval 5 retry_interval 3 check_period 24x7 notification_interval 30 notification_period none notification_options n contact_groups nobody } define command{ command_name
der vielen ntzlichen Sonderzeichen wie | ` & > < ' " \ [ ] { } ; und ! zur Abspaltung von Prozessen, zur Umlenkung von Ausgaben etc. werden inzwischen blockiert. Da in vielen Unternehmen noch Nagios-Installationen der Serie 1.x und 2.x anzutreffen sind, lohnt es sich auf jeden Fall, die bergabe eines solchen Sonderzeichens dennoch zu versuchen. Verfgt der Zielrechner ber einen Zugang zum Internet, lsst sich diese Filterung aber auch bei aktuellen Installationen relativ einfach umgehen: Der Angreifer stellt per HTTP oder FTP ein Shellskript zur Verfgung, ldt dieses mit Hilfe von wget oder curl herunter und brint es anschlieend zur Ausfhrung. Listing 4 zeigt dies an einem Beispiel. Die zurckerhaltenen Fehlermeldungen sind an dieser Stelle nicht relevant. Wird eine Erfolgskontrolle bentigt, sollte diese ber das ausgefhrte Skript implementiert werden. NRPE erlaubt dabei nur denjenigen Hosts die Ausfhrung von Commands, deren IP-Adresse in seiner Konfiguration ber den Parameter allowed _ hosts freigeschaltet wurden. Die Prfung der IP-Adresse des Nagios-Servers geschieht jedoch nur rudimentr beim Verbindungsaufbau und kann durch IP-Spoofing einfach umgangen werden.
Denial of Service
Einige Commands setzen vergleichsweise ressourcenintensive Prozesse wie zum Beispiel die statistische Auswertung groer Datenmengen, die Synchronisation von Verzeichnissen bers Netzwerk oder die Prfung von Dateisystemen in Gang. Zu erkennen sind sie hufig daran, dass ihre bergeordneten Services nicht wie sonst blich im Abstand von wenigen Minuten sondern in einem weit greren Takt aufgerufen werden. Auch ein besonders hoher Timeout weist auf solche Befehle hin. Durch den wiederholten und hufigen manuellen oder skriptgesteuerten Aufruf der entsprechenden Plugins kann es mglich sein einzelne Dienste oder ganze Hosts zu berlasten. Gelingt es Plugins zu manipulieren oder eigene einzuschleusen, kann mit Hilfe sogenannter Forkbomben ein System innerhalb von Sekunden lahmgelegt werden. Neben der rein destruktiven Anwendung eines solchen Denial-ofService-Angriffs kann diese Technik auch gezielt eingesetzt werden um beispielsweise ein Intrusion-Detection-System zu berlasten oder um den Master eines Hochverfgbarkeitsclusters nachz anipulation des Slave-Knotens gezielt in einen Fehlerzustand zu bringen.
Datenbankzugriff
Die berwachung von Datenbankparametern geschieht blicherweise mit Hilfe von Plugins, die eine direkte Verbindung zur Datenbank aufbauen und dort per SQL Anfragen zur Ermittlung von Statuswerten absetzen. Abhngig vom verwendeten Plugin ist der dabei verwendete SQL-Code entweder im Plugin selbst, in der Konfiguration von Nagios oder in einer externen Datei hinterlegt. In den letzten beiden Fllen und sofern das verwendete Plugin in einer Interpretersprache geschrieben wurde auch im ersten sollte es mglich sein, diesen direkt zu verndern, um eigene Befehle an die Datenbank abzusetzen. Verfgt der dazu verwendete Datenbankbenutzer ber ausreichend hohe Rechte, kann damit unter Umstnden das gesamte Datenbanksystem kompromittiert werden. Darber hinaus lassen sich beim Monitoring von Datenbanksystemen auch hervorragend die Methoden aus dem Kapitel Diebstahl von Passwrtern anwenden.
Event-Handler
Mit Hilfe von Event-Handlern ist es mglich, Nagios auf erkannte Fehlerzustnde hin automatisch Befehle ausfhren zu lassen. Damit lassen sich beispielsweise ausgefallene Dienste neu starten, Reboots initiieren, Trouble-Tickets erzeugen oder Logeintrge in Datenbanken absetzen. Unter Umstnden lassen sich aber auch erweiterte Zugriffsrechte erlangen, Daten aussphen oder ganze Systeme lahm legen. Die Ausfhrung vieler per Event-Handler aufgerufenen Befehle bentigt weitergehende Rechte, als sie dem Benutzer nagios blicherweise zur Verfgung stehen. Um dieses Problem zu lsen knnen dem Benutzer nun weitere Rechte zugewiesen oder die bentigten Rechte zur Ausfhrung des Befehls gelockert werden. Einem Angreifer ermglicht dies aber in der Regel auch die Ausfhrung nicht vorgesehener Befehle, denn je nach Granularitt des verwendeten Rechtesystems kann zum Beispiel nicht immer zwischen dem Einfgen, berschreiben oder
24 HAKIN9 1/2010
Im Internet:
http://www.nagios.org Offizielle Seite des Nagios-Projekts http://www.icinga.org Fork des Nagios-Projekts http://nagios.sourceforge.net/docs/3_0/ Dokumentation zu Nagios 3.x http://www.nagiosplugins.org Offizielle Plugins zu Nagios http://fedoraproject.org/wiki/SELinux Security-Enhanced Linux http://www.novell.com/linux/security/ apparmor/ Application Armor
Abwehrmanahmen
Um sich nach einem erfolgreichen aber aufwendigen Angriff die knftige Rckkehr zu erleichtern, bedienen sich Angreifer hufiger der Mglichkeit, eine Hintertre im System zu installieren. Hierzu werden blicherweise Rootkits verwendet, die unter anderem sehr raffinierte Techniken einsetzen, um ihre Existenz vor den Augen des Administrators zu verbergen. Eine ebenso kreative Methode kann es aber sein, eine Backdoor in der Konfiguration von Nagios zu verstecken: Hierzu wird ein unverdchtig benannter Service angelegt, der beim Eintreten eines definierten Ereignisses eine Reaktion auslst. Statt einen neuen Service anzulegen, kann auch wie in Listing 3 beschrieben der Command eines bestehenden Services manipuliert werden. Listing 5 zeigt ein sehr einfaches Beispiel, welches Befehle von einer entsprechend vor-
Die in diesem Artikel vorgestellten Schwachstellen und Angriffsmglichkeiten sind fr Administratoren durchaus beunruhigend und sollten auf jeden Fall ernst genommen werden. Auch wenn ein Eindringling sich fr den Groteil der Angriffe zunchst einen Weg ins interne Netz und einen Zugang auf den Monitoringserver verschaffen muss, ist das Risiko nicht von der Hand zu weisen. Ein Nagios-Server ist fr einen Angreifer ein sehr lohnendes Ziel und sollte daher auch besondere Aufmerksamkeit bei der Absicherung erfahren. Nachfolgend werden einige Schutz- und Abwehrmanahmen aufgefhrt. Monitoringserver sollten durch grundstzliche Sicherheitsmanahmen wie Systemhrtung, Verlagerung in ein sicheres Netzsegment etc. besonders gut gegen externe und interne Angreifer abgesichert werden. Dabei knnen zum Beispiel die Sicherheitserweiterungen SELinux. Auf Routern und Firewalls sollte das sogenannte Ingress Filtering aktiviert sein. Dadurch werden Datenpakete abgewiesen, deren Absenderadresse nicht zu dem Netz passen, aus dem sie empfangen wurden. Diese Manahme schrnkt die Mglichkeiten zum IP-Spoofing ber Netzgrenzen hinweg stark ein. Die Konfigurationsdateien und Plugins von Nagios sollten dem Benutzer und der Gruppe nagios zugeordnet sein, Zugriff auch der lesende durch andere Benutzer sollte mit streng gesetzten Zugriffsrechten verhindert werden. Die ressources.cfg ist dabei besonders schtzenswert. Die Absicherung des Webfrontends ist im Kapitel Enhanced CGI Security and Authentication der offziellen Dokumentation hervorragend beschrieben. Backups der Konfiguration oder des ganzen Monitoringservers sollten nur verschlsselt oder an einem gut gesicherten Ort gelagert werden. Beim Einsatz von NRPE sollten die erlaubten IP-Adressen ber den Parameter allowed _ hosts genau definiert werden. Zustzlich empfiehlt es sich noch per Netfilter/iptables oder /etc/ hosts.allow und /etc/hosts.deny die erlaubten IP-Adressen auf dem NRPE-Port noch weiter einzuschrnken. Die integrierte Mglichkeit zur
Verschlsselung der Kommunikation per SSL sollte unbedingt genutzt werden. In der nrpe.cfg eines Hosts sollten nur die Commands aktiviert werden, die zum Monitoring dieser Maschine auch wirklich bentigt werden. Falls mglich, sollte komplett auf die Mglichkeit der Parameterbergabe an NRPE verzichtet werden. Dies erreicht man durch Setzen des in diesem Kontext etwas missverstndlich benannten Parameters dont _ blame _ nrpe auf 0. Beim Einsatz des Plugins check_by_ssh sollten nur stark eingeschrnkte User verwendet werden. Statt der Authentifizierung per Passwort sollten SSH-Keys zum Einsatz kommen. In der Datei ~/.ssh/authorized_keys kann dann festgelegt werden, von welchen IP-Adressen aus eine Verbindung aufgebaut werden darf und welche Befehle dem auf diesem Weg authentifizierten Benutzer zur Verfgung stehen. Vom Einsatz von SNMPv1 und SNMPv2 auf sicherheitskritischen Systemen ist abzuraten. Die aktuelle Version 3 hat deutlich bessere Sicherheitsfunktionen. Ist der Einsatz von SNMPv2c unverzichtbar, sollten unbedingt unterschiedliche CommunityStrings fr Read- und Write-Community verwendet werden. Fr die berwachung von Datenbanken sollten dedizierte Monitoring-Benutzer sowie Stored Procedures eingerichtet werden. Dadurch knnen die Zugriffsrechte dieser Benutzer auf die reine Ausfhrung der vorgegebenen Befehle eingeschrnkt werden. Peter Fetzer
ist Dipl.-Ing. (FH) und arbeitet als Consultant fr ITSicherheit bei der Cassini Consulting GmbH in Frankfurt. Er beschftigt sich seit ber vier Jahren mit Nagios im Umfeld mittelgroer bis groer Rechenzentren. 1/2010 HAKIN9 25