MonatJanuar 2011

Alarmierung via SMS/MMS/Email/Sprachanruf an ein Handy

1. Einleitung

Ursprünglich war es unsere Aufgabe eine genaue Recherche über das Thema Alarmierung via SMS/MMS/Email/Sprachanruf an ein Handy durchzuführen. Im Zuge dieser Recherche bemerkten wir jedoch, dass heutzutage eine Vielzahl von Alarmierungssystemen mit sogenannten Handyapps realisiert werden. So entschieden wir uns, denn Fokus auf die Apps zu legen.

Handyapps, sind Programme die auf Smartphones (modernen Mobiltelefonen) laufen und dabei gehören Macs iOS und Googles Android zu den beliebtesten App Betriebssystemen.

Wir entschieden uns, für einen praktischen Test des Überwachungstools Nagios, um die Möglichkeiten einer solchen Alarmierung näher zu bringen.

2. Überwachung und Alarmierung mit Nagios

2.1 Allgemeines

Nagios ist eine kostenlose Open-Source Software, die entwickelt wurde um Netzwerkgeräte zu überwachen und bei Fehlern oder Änderungen den Anwender oder Administrator zu alarmieren. Die Anwendung kann in kleinen Heimnetzwerken bis zu großen Firmennetzwerken eingesetzt werden. Nagios kann dabei Prozesse auf Servern, die Erreichbarkeit von Diensten (HTTP, FTP, SSH, etc), Performance von Datenbanken, Daten von Netzwerkgeräten wie Switches und Router und noch vieles mehr überwachen.

Nagios überwacht seine Ziele nicht direkt, sondern über Plugins. Diese Plugins werden mit verschiedenen Parametern, wie einer IP, einem Port, oder Ähnlichem aufgerufen und liefern
einen Status zurück („OK“, „Warning“, „Critical“ oder „Unknown“). Viele Plugins werden bereits mit der Nagios Installation mitgeliefert und bieten Möglichkeiten der Überwachung von Systemen über Ping, der Überwachung von Webseiten über einen HTTP Request oder der Überwachung von Systemressourcen. Werden Plug-Ins für speziellere Zwecke benötigt, wird man oft in Plugin Sammlungen im Internet fündig. In dem unwahrscheinlichen Fall, dass es noch keine passenden Plugins gibt, kann man sich sehr leicht in einer beliebigen Programmiersprache sein eigenes Plugin schreiben. Auch die Benachrichtigung über E-Mail, SMS, Telefonanruf, Pager, uvm. geschieht meist über Plugins.
Bei einem Statuswechsel eines Plugins durchläuft ein Ereignis eine Filterkette, die am Ende feststellt, ob eine Benachrichtigung gesendet werden soll oder nicht. Diese Filterkette beinhaltet zum Beispiel die Überprüfung, ob der Host gerade zu Wartungszwecken abgeschaltet wurde, oder ob der Empfänger der Nachricht um diese Uhrzeit benachrichtigt werden soll, oder ob die Benachrichtigungen global deaktiviert wurden und noch vieles mehr. Nagios ist dabei in der Lage Benachrichtigungen über verschiedene Wege an eine Person,  mehrere Personen oder an eine Gruppe von Personen, zu schicken. Dabei können die Wege der Benachrichtigung und die Zeiten wann eine Person oder eine Gruppe benachrichtigt werden soll, angegeben werden. Auch der Text und die enthaltenen Informationen sind frei konfigurierbar.

Quellen: http://www.heise.de/netze/artikel/Netzwerkueberwachung-mit-Nagios-221683.html
Weiterführende Links: http://www.nagiosexchange.org/ http://www.nagios.org/

2.2 Installation von Nagios

Die Installation gestaltet sich im Vergleich zu anderen UNIX Serversystemen relativ einfach, man sollte jedoch Grundkenntnisse im Umgang mit UNIX/Linux besitzen. Nagios ist für alle gängigen UNIX Varianten und somit auch Linux verfügbar. Im Internet finden sich viele ausgezeichnete Anleitungen zur Installation, weshalb dieser Schritt auf den meisten Systemen schnell erledigt ist.

Da Nagios keine grafische Oberfläche benötigt, sollte man aus Performance Gründen auch beim Aufsetzen des Betriebssystems auf eine grafische Oberfläche verzichten. Auch wenn Nagios für einige Linux Systeme in den Repositories enthalten ist, empfiehlt sich die Installation der aktuellsten Version von Nagios.

Nagios benötigt einige Vorraussetzungen um installiert und betrieben werden zu können. Dies sind unter anderem ein Webserver (Apache2) mit PHP, ein „GCC compiler“ mit den dazugehörigen „development libraries“ sowie die „GD development libraries“ für die Bildmanipulation.

Nagios sollte unter einem eigenen Benutzer laufen, um die Sicherheit des Systems nicht zu gefährden. Man sollte sich also einen „nagios“ Benutzer und eine „nagios“ Gruppe anlegen.
Darüber hinaus sollte man eine zweite Gruppe mit dem Namen „nagcmd“ erstellen, der den Benutzer „nagios“ und den Benutzer, unter dem der Webserver läuft, zusammenfasst.

Sind die Benutzer und Gruppen angelegt, kann Nagios von der Projektseite auf sourceforge.net heruntergeladen werden. Die aktuelle Version von Nagios beim Verfassen dieses Dokuments ist 3.2.3. Neben der Kernsoftware Nagios, können auch viele Plugins heruntergeladen werden. Auf Sourceforge lassen sich knapp 300 Projekte mit dem Suchwort “Nagios” finden.

Ist Nagios heruntergeladen und entpackt, kann mit dem Konfigurieren, Kompilieren und Installieren begonnen werden. Näheres dazu findet sich in Betriebssystem spezifischen Anleitungen im Internet oder in der Dokumentation von Nagios (HTML Dateien im Verzeichnis html/docs/). In dieser Dokumentation sind alle Schritte genau beschrieben und dazu auch Hintergrundwissen enthalten.

Einige Anleitungen für die Installation sind in den weiterführenden Links aufgeführt. Mit diesen Anleitungen ist es möglich Nagios auf einem laufenden Linux System zu installieren.

Quellen: http://www.heise.de/netze/artikel/Installation-224088.html

Weiterführende Links:

2.3 Konfiguration von Nagios

Bevor Nagios das erste Mal gestartet werden kann, muss noch die Konfiguration angepasst werden. Bei der Installation werden Standard- bzw. Beispiel-Konfigurationsdateien mitkopiert. Diese Beispielkonfiguration kann man groß teils in das System übernehmen und anschließend Schritt für Schritt an seine Bedürfnisse anpassen. Nagios speichert seine gesamten Einstellungen in einfachen Textdateien, wobei es eine zentrale Konfigurationsdatei gibt, das alle anderen Konfigurationsdateien einbindet. Diese Dateien sind in einem Unterordner der Nagios Installation zu finden. Wurde Nagios beispielsweise unter „/usr/local/nagios“ installiert, so befinden sich die Konfigurationsdateien im Ordner „/usr/local/nagios/etc/objects/.

Die Konfiguration von Nagios teilt sich in folgende Bereiche:

  • Contacts
  • Hosts
  • Services

Contacts sind Personen oder Personengruppen, die Benachrichtigungen erhalten können. Im Bereich Hosts lassen sich alle Systeme konfigurieren, die überwacht werden sollen. Unter Services lassen sich die zu überwachenden Prozesse einrichten.

Nachfolgend ist ein typischer Contacts-Eintrag zu sehen. Bei Ereignissen der überwachten Services oder Hosts wird dieser Kontakt über E-Mail informiert.

define contact{

  • contact_name                                         nagiosadmin
  • use                                                                generic-contact
  • alias                                                              Robert Huber
  • service_notification_period                 24×7
  • host_notification_period                    24×7
  • service_notification_options                w,u,c,r
  • host_notification_options                   d,u,r
  • email                                                             robert.huber@xxx.at

}

Der „contact_name“ bezeichnet den Kontakt und wird von Nagios intern zur Zuordnung verwendet. Daher muss der gewählte Name eindeutig sein. Mit „use“ wird ein Template eingebunden, dass Standardeinstellungen für Kontakte beinhaltet. Damit kann der Administrator gleiche Einstellungen immer zentral verwalten. Der „alias“ beinhaltet meistens den vollen Namen des Kontakts.
Die beiden Einträge „service_notification_period“ und „host_notification_period“ geben die Benachrichtigungszeit an. „24×7“ wurde dabei bereits an einer anderen Stelle in der Konfiguration spezifiziert.

„service_notification_options“ und „host_notification_options“ geben die Fälle an in denen der Kontakt benachrichtigt werden soll. Dabei steht:

  • „w“ für „Warning“
  • „u“ für „Unknown“
  • „c“ für „Critical“
  • „r“ für „Recover“

Bei den Hosts gibt es die Zustände:

  • „d“ für „Down“
  • „u“ für „Unreachable“
  • „r“ für „Recovery“

Die letzte Zeile beinhaltet die E-Mail Adresse des Kontakts.

Hier ist nun ein Eintrag für einen Host zu sehen, wobei es sich um einen Linux Server handelt:

define host{

  • use                                   linux-server
  • host_name                   webspace
  • alias                                webspace
  • address                          78.46.51.253

}

Mit „use“ wird wieder ein Template eingebunden, das für alle Linux Server verwendet werden kann. Der „host_name“ muss wieder eine eindeutige Kennzeichnung für den Host enthalten. Der „alias“ kann der vollständige Name des Servers oder eine Beschreibung sein. Die letzte Zeile „address“ beinhaltet die IP-Adresse über die der Server erreichbar ist.

Um nun die Services des angelegten Hosts überwachen zu können, muss zumindest ein Service Eintrag angelegt werden:

define service{

  • use                                               generic-service
  • host_name                               webspace
  • service_description             webspace FTP check
  • check_command                   check_ftp

}

define service{

  • use                                                local-service
  • host_name                                webspace
  • service_description             HUBAX Homepage Check
  • check_command                   check_http_critical_redirect!hubax.at!/index.php

}

define service{

  • use                                               local-service
  • host_name                               localhost
  • service_description             Root Partition
  • check_command                   check_local_disk!20%!10%!/

}

Der erste Service Eintrag zeigt die Überwachung eines FTP Server auf dem Host „webspace“. Der maßgebliche Befehl „check_ftp“ ist meistens in der commands.cfg definiert.
Der zweite Eintrag zeigt die Überwachung einer Webseite mit dem DNS Namen „hubax.at“ und der Seite „index.php“. Der dritte Eintrag spezifiziert die Überwachung einer lokalen Ressource, die bei Unterschreiten von 20% freiem Speicherplatz eine Warning zurückliefert. Bei weniger als 10% Speicherplatz wird ein Critical Status zurückgeliefert.

Um nun zu wissen was genau hinter den Einträgen steckt, müssen wir uns noch die verwendeten Templates genauer ansehen. Nachfolgend ein Standardtemplates, das mit Nagios mitinstalliert wird:

define contact{

  • name                                                              generic-contact
  • service_notification_period               24×7
  • host_notification_period                     24×7
  • service_notification_options             w,u,c,r,f,s
  • host_notification_options                    d,u,r,f,s
  • service_notification_commands       notify-service-by-email
  • host_notification_commands              notify-host-by-email
  • register                                                           0

}

Dieses Template das von unserem Kontakt benutzt wird, besitzt viele Einstellungen, die wir überschrieben haben. Daneben gibt es aber auch noch den Eintrag service_notification_commands“, der Befehle angibt, die beim Wechsel des Service-Status ausgeführt werden (hier: „notify-service-by-email“, das ein E-Mail beim Status Wechsel verschickt).

define host{

  • name                                              linux-server
  • use                                                  generic-host
  • check_period                             24×7
  • check_interval                           5
  • retry_interval                            1
  • max_check_attempts              10
  • check_command                       check-host-alive
  • notification_period                 workhours
  • notification_interval               120
  • notification_options                d,u,r
  • contact_groups                         admins
  • register                                         0

}

Dieses Template ist für Linux Server gedacht und überwacht die Erreichbarkeit des Hosts und gibt an wie oft der Hosts geprüft wird und welche Personen bei einer Änderung des Status benachrichtigt werden sollen.

Mit den Anleitungen und Ausführungen in den weiterführenden Links ist eine Konfiguration von Nagios zur Überwachung von einfachen Hosts und Services möglich.

Quelle:

Weiterführende Links:

2.4 Weboberfläche von Nagios

Nach einer erfolgreichen Installation und Konfiguration von Nagios kann das umfangreiche Webinterface bestaunt werden. Es bietet nicht nur einen aktuellen Überblick über den Zustand des Netzwerkes, eine Detailansicht der einzelnen Hosts und Services sowie einer History über die geschehenen Ereignisse, sondern auch die Möglichkeit aktiv in Benachrichtigungen und Statusabfragen einzugreifen. Dabei können einzelne Services oder Hosts zu Wartungszwecken deaktiviert oder Abfragen außerhalb des Zeitplans durchgeführt werden. Dabei können zusätzliche Benachrichtigungen versendet oder unversandte als versandt markiert werden.

Dabei bietet das Webinterface viele verschiedene Ansichten an:

  • Übersicht über einzelne Services oder einzelne Hosts,
  • Ansichten über Gruppen von Services oder Hosts, sowie
  • „Tactical Overview“, der den Status und die Probleme des gesamten Netzwerks auf einer Seite zusammenfasst.

NagiosOverview

Bild: Tactical Overview

NagiosServices

Bild: Service Overview

3. Unterschiede zwischen Email/SMS und Handyappbenachrichtigung

3.1            E-Mail Benachrichtigung

Da jedes moderne Mobiltelefon, jeder Computer, und viele andere Geräte bereits E-Mails empfangen können, ist auf Seiten des Clients kaum noch etwas einzurichten. Man benötigt lediglich ein Mailkonto, auf das per POP3 oder IMAP zugegriffen werden kann. Der Vorteil bei dieser Art der Benachrichtigung ist, dass viele Personen bereits E-Mails auf ihren stationären und mobilen Geräten empfangen können.

Auf Seiten des Servers ist meist schon ein E-Mail Programm bei der Installation des Betriebssystems mitinstalliert worden und die Benachrichtigung von Nagios über E-Mail funktioniert out-of-the-box. Es muss lediglich die E-Mail Adresse des Kontakts in Nagios eingetragen werden und der Benutzer erhält eine E-Mail, wenn sich ein Status im überwachten Bereich ändert.

Nachfolgend ist der Standardbefehl aus der Konfigurationsdatei „commands.cfg“ zur Benachrichtigung per E-Mail zu sehen. Der Text in der Mail kann beliebig angepasst werden und mit den Platzhalten zwischen den „$“ Zeichen werden Service spezifische Werte eingebunden.

define command{

  • command_name    notify-service-by-email
  • command_line    /usr/bin/printf „%b“ „***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n“ | /usr/bin/mail -s „** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **“ $CONTACTEMAIL$

}

3.2 SMS Benachrichtigung

SMS Benachrichtigungen benötigen auf einem Endgerät keinerlei Konfiguration. In Nagios muss nur die Telefonnummer des Empfängers konfiguriert werden.
Der Vorteil der SMS Benachrichtigung ist, dass jedes Mobiltelefon SMS empfangen kann und viele Anwender auf eine SMS schneller reagieren als auf eine E-Mail.

Da der Rechner auf dem der der Nagios-Server läuft nur selten SMS senden und empfangen kann, muss diese Möglichkeit erst geschaffen werden. Entweder man meldet sich bei einem “E-Mail to SMS Gateway Service” im Internet an, das zugesandte E-Mails in SMS umwandelt und versendet, oder man schließt ein Mobiltelefon am Computer an, über das SMS versendet werden können.

Der Vorteil bei einem E-Mail to SMS Gateway ist, dass es kostengünstig zu mieten ist und mit jedem Server funktioniert. Der Nachteil liegt daran, dass SMS nur gesendet werden können, wenn auch eine Internetverbindung besteht. Diesen Nachteil besitzt auch die Benachrichtigung über E-Mail, fällt jedoch hier weg, wenn die SMS über ein lokales Mobiltelefon versendet wird. Es verbleibt die Tatsache, dass SMS ein Best-Effort Service ist. Das heißt, dass der Provider eingehende Anfragen im Rahmen seiner Ressourcen schnellstmöglich verarbeitet. Ein garantierter Versand ist nicht gewährleistet. Die Mobilfunkbetreiber versuchen zwar das SMS-Service mit einer Priorität zu versehen, um diese ohne Zeitverzögerung zuzustellen, leider liegt dieser Priority-SMS kein definierter Standard zugrunde, weshalb dieser Ansatz zumeist nur funktioniert, wenn Sender und Empfänger beim selben Provider sind.

Nachfolgend ist die Konfiguration zu sehen, die eine SMS Benachrichtigung über eine “E-Mail to SMS Gateway” sendet und zur Authentifizierung im Betreff einen Benutzernamen und ein Passwort übergibt. Der Empfänger wird hier als E-Mail Empfänger übergeben. Zum Beispiel wird für die Mobiltelefonnummer 06601234567 das E-Mail an 06601234567@smsgateway versandt.

define command{

  • command_name    service-notify-by-epagerSMSat
  • command_line    /usr/bin/printf „%b“ „Type: $NOTIFICATIONTYPE$ — Service: $SERVICEDESC$ — Host: $HOSTALIAS$ — State: $SERVICESTATE$ — Time: $LONGDATETIME$ — Info: $SERVICEOUTPUT$“ | /usr/bin/mail -s „SMSGW-Auth:benutzername:passwort“ $CONTACTEMAIL$

}

Weiterführende Links:

3.3 App Benachrichtigung

Smartphones werden immer beliebter und für die 2 großen Player am Markt, Android und iPhone, gibt es jede Menge Applikationen, die sich sehr einfach installieren lassen. In den jeweiligen App-Stores lassen sich auch Apps für Nagios finden. Wir haben uns Nagroid für Android Mobiltelefone und iNag für iPhones genauer angesehen.

Die Alarmierungsapplikationen pollen dabei den Server und holen sich die aktuellen Informationen und alarmieren den Benutzer zum Beispiel akustisch oder über Vibration. Dabei können in der Applikation Statusinformationen angezeigt und Statistiken abgerufen werden. Einige Apps bieten zusätzlich noch die Möglichkeit Befehle abzusetzen und in die Konfiguration einzugreifen.

Der Vorteil der Alarmierung über Apps liegt wie bei der SMS Alarmierung an der sofortigen Reaktionsmöglichkeit. Das Eintreffen eines E-Mails bemerkt man in der Regel erst sehr viel später. Zusätzlich zur Benachrichtigung erhält man oft noch Zusatzinformationen und muss manchmal zum Eingreifen nicht unbedingt einen Computer aufsuchen.

Der größte Nachteil liegt wie bei der SMS Alarmierung an der Abhängigkeit vom Mobilfunkbetreiber. Wenn kein Empfang verfügbar ist, funktioniert auch die Abfrage des Status nicht. Neben diesem Grundkriterium ist man noch vom Betriebssystem des Smartphones abhängig. Nur die wenigsten Apps sind für mehrere Betriebssysteme verfügbar.

Nagroid – ein inoffzieller Nagios Client für Android

nagios Hier sieht man das Nagroidinterface. Es zeigt alle am Nagroid Webinterface eingestellten Services an. Mehr kann dieses App jedoch nicht.

Von uns getesteten Beispiele:

HubaX Website online check – ist absichtlich deaktiviert worden.

MySQL Service Checks

_

_

_

Quellen: http://code.google.com/p/nagroid/

iNag – Nagios Client für Apples IOs Betriebssystem

iNag

Wir haben den iNAG Client zwar nicht testen können, weil keiner von uns ein IPhone besitzt, jedoch sieht man in der Beschreibung und den Referenzen, das dieses App viel mehr kann als das Nagroid App.

Quellen: http://idevelop.fullnet.com/iapps/modules/apps/inag.php

4. Zusammenfassung & Fazit

Zusammenfassend lässt sich sagen, dass die Alarmierung per App viel komfortabler und besser ist, da man viel mehr Möglichkeiten hat. Man kann Benachrichtigungen empfangen und als gelesen markieren. Somit kann man eine Art Logbuch am Server führen. Heutzutage hat auch fast jeder einen Internetzugang an seinem Smartphone mit einer Internetflatrate, sodass es auch keine wirtschaftlichen Nachteile bei diesem Alarmierungstyp auftreten.

Über Nagios lässt sich fast nur Gutes sagen. Einfache Installation durch eine Menge von Anleitungen, die im Internet zu finden sind. Es besitzt ein gutes und übersichtliches Webinterface, sodass man sofort loslegen kann. Nagios beherrscht auch die Alarmierung per SMS und Email. Das Einzige was uns ein wenig gestört hat, ist die Konfiguration über die Kommandozeile.

Schlussendlich ist man jedoch immer von der Netzqualität des Mobilfunkanbieters abhängig, denn wenn man keinen Empfang hat, kann man gar nicht benachrichtigt werden.

Passwort Security

Was sind Passwörter?

Das Passwort  ist die am weitesten verbreitete Methode um Benutzer auf Computern zu Authentifizieren und zusammen mit einem Benutzernamen zu  Identifizieren. Dabei hängt die Sicherheit des Passwortes und damit die der Authentifizierung von der Länge des Passworts, von der Anzahl aller möglichen Zeichen und der Gültigkeitsdauer des Passworts ab. Das heißt, am sichersten sind Passwörter die aus möglichst vielen Zeichen bestehen können (das Alphabet mit Groß und Kleinschreibung, Zahlen, Sonderzeichen), die möglichst lang sind und die nur einmal gültig sind (Einwegpasswörter). Aber auch die Auswahl der Zeichen des Passworts ist von großer Bedeutung, bekannte Namen, Wörter, Sätze können leicht mit Wörterbuchangriffen gefunden werden.

In diesem Zusammenhang wurde im Dezember 2009 die Webseite „rockyou.com“ gehackt und dabei die Passwörter von über 32 Millionen Benutzern ausgelesen und veröffentlich. (vgl. [2]) Eine Analyse der Passwörter ergab, dass das am meisten verwendete Passwort (fast 300.000) ist „123456“. Das am zweit (fast 80.000) und dritt (76.000) häufigsten verwendete Passwort ist „12345“ und „123456789“. Außerdem benutzten fast die Hälfte aller User ein Passwort das mit einem Wörterbuchangriff leicht zu finden ist.

Hier eine Liste mit den 20 am häufigsten verwendeten Passwörtern auf „rockyou.com“: (vgl. [1])

Rank | Num of Occurrences | Password
————————————————————–

  • 1    290729    123456
  • 2     79076     12345
  • 3     76789     123456789
  • 4     59462     password
  • 5     49952     iloveyou
  • 6     33291     princess
  • 7     21725     1234567
  • 8     20901     rockyou
  • 9     20553     12345678
  • 10   16648     abc123
  • 11   16227     nicole
  • 12   15308     daniel
  • 13   15163     babygirl
  • 14   14726     monkey
  • 15   14331     lovely
  • 16   14103     jessica
  • 17   13984     654321
  • 18   13981     michael
  • 19   13488     ashley
  • 20   13456     qwerty

Wie verwalte ich meine Passwörter?

Heutzutage braucht man für fast jede Internetseite, für deinen eigenen PC, für das E-Mail Konto, für die Arbeit ein Passwort. Bei so einer Menge an Passwörtern ist es schwierig die Übersicht zu behalten. Auch sollte man auf keinen Fall für alles dasselbe Passwort verwenden.  Eine gute Möglichkeit all diese Passwörter zu behalten und zu verwalten ist ein Passwort Manager. Ein solches Programm ist „KeePass“ (vgl. [4]). Das Programm speichert alle Passwörter in einer Datenbank dir von dem User mit einem Masterkey verschlüsselt und geschützt wird. Somit braucht sich der Anwender nur ein Passwort statt dutzende merken. Die Datenbank kann auch bequem auf einem USB Stick mitgenommen werden und somit hat mein seine wichtigsten Passwörter immer dabei. „KeePass“ bietet eine Reihe von Sicherheitsfeatures wie  einen Zufallszahlengenerator, einen Schutz gegen Wörterbuchangriffe sowie eine Sicherung der Programmdaten im RAM. Um die sensiblen Daten im Arbeitsspeicher zu schützen werden diese dort nur verschlüsselt gespeichert und vor dem beenden überschrieben und somit gelöscht.

Wie werden Passwörter gespeichert?

Um ein Passwort sicher zu speichern verwendet man meist eine Einwegfunktion (Hashfunktion)  die auf das eingegebene Passwort angewendet wird. Somit werden keine Passwörter in Klartext gespeichert und ein Angreifer kann selbst mit den gespeicherten Passwörtern (Hashwert) das System nur schwer kompromittieren.  Um die Sicherheit dieses Verfahrens noch zu erhöhen werden mit Passwörter noch bevor sie mit der Einwegfunktion behandelt werden um eine bekannte Zeichenkette (Salt) verlängert. Das Salt wird dabei in Klartext mit dem Passwort abgespeichert um ein eingegebenes Passwort mit dem gespeicherten vergleichen zu können. Damit wird Sicherheit der Einwegfunktion um ein vielfaches erhöht und selbst einfache Passwörter die mit dem Salt künstlich verlängert werden können nur sehr schwer aus den Hashwerten  errechnet werden.

Was sind kryptologische Hashfunktionen und welche gibt es? (vgl. [7])

Hashfunktionen bilden eine Zeichenkette von beliebiger Länge auf eine Zeichenkette von fester Länge und bestimmten Zeichen ab. Kryptologische Hashfunktionen sind eine Untergruppe die zusätzlich noch Einwegfunktionen sind. Somit kann aus dem Ergebnis nicht auf die Eingabe geschlossen werden. Eine weitere wichtige Eigenschaft von kryptologischen Hashfunktionen ist es, dass man nur sehr schwer zu einer bekannten Eingabe eine zweite (aber unterschiedliche) Eingabe finden kann die dasselbe Ergebnis wie die Erste hat (oder schwächer, dass man nur sehr schwer zwei beliebige Eingaben finden kann die das gleiche Ergebnis haben).

Hier sind nun einige Bekannte Hashfunktionen mit wichtigen Eigenschaften aufgelistet: (vgl. [5])

Funktionsname | Digest size | Max. message length | Compression function | best known collision attack

  • MD5         128 bits                264 bits                512-bit block 128-bit chaining variable                  229
  • SHA-1       160 bits               264 bits                512-bit block 160-bit chaining variable                  269
  • SHA-256    256 bits              264 bits                512-bit block 256-bit chaining variable                  –
  • SHA-512    512 bits              128 bits                1024-bit block 512-bit chaining variable               –
  • Whirlpool  512 bits             264 bits                512-bit block 512-bit chaining variable                  –

Was sind Rainbow Tables und wie funktionieren sie? (vgl. [6])

Die „einfachste“ Möglichkeit ein Passwort das mit einer kryptologischen Hashfunktion gespeichert wurde wiederherzustellen ist, alle möglichen Kombinationen von Eingabewörtern durch zu probieren und den Hashwert mit dem gesuchten zu vergleichen. Da diese Methode sehr Zeitaufwendig ist, wenn man für jedes Passwort von vorne zu rechnen beginnt, und sehr Speicheraufwendig wenn man jedes Klartext, Hashwert Paar abspeichert wurden Methoden entwickelt  mit der der Zeitaufwand durch Speicherplatz bzw. der Speicherbedarf durch Laufzeit reduziert werden kann.

Eine dieser Methoden ist die Rainbow Table (Regenbogentabelle) das Suchfeld für die Hashfunktion einzugrenzen. Dabei werden Ketten, die mit einem Passwort beginnen,  durch das ein Hashwert berechnet wird, der wieder in ein mögliches Passwort umgewandelt wird, usw.  Von diesen Ketten werden nur der der Anfangs- und Endwert gespeichert.

Um nun ein Klartextkennwort zu einem Hashwert zu erhalten, werden auf den Hashwert die selben Funktionen wie zum generieren der Ketten angewendet.  Stimmt nun eines der Zwischenergebnisse mit einem Endeintrag in der Tabelle überein kann die gefundene Kette durchgegangen werden und das Klartextkennwort zu dem Hashwert gefunden werden.

Wie und Wo werden in Betriebssystemen Passwörter gespeichert? (vgl. [14])

In modernen Betriebssystemen werden Benutzerkonten standardmäßig mit einem Passwort geschützt. Alle Betriebssysteme verwenden dabei das gleiche Konzept, das Passwort wird geschützt durch eine Einwegfunktion auf der Festplatte abgelegt. Wenn der User sein Passwort eingeben soll, wird das eingegebene Passwort, auf das wieder die Einwegfunktion angewendet wird, mit dem gespeicherten verglichen und bei Übereinstimmung der Zugriff gewährt.

GNU/Linux (vgl. [8])

Linux, hier am Beispiel CentOS, speichert seine Benutzerdaten in die Datei „/etc/passwd“. Diese Datei kann von jedem User auf dem System gelesen werden. Darin befinden sich die Benutzernamen aller am System vorhanden User, optional das Passwort, die User ID, die Gruppen ID, das Heimatverzeichnis, die verwendete Shell und optional noch zusätzliche Informationen wie zum Beispiel der volle Name das Users. Da die Datei „/etc/passwd“ von jedem gelesen werden muss ist es nicht besonders sicher darin die Passwörter zu speichern, daher verwenden mit meisten Linux Systeme und auch CentOS die Datei „/etc/shadow“ um für jeden User das Passwort abzuspeichern.  Wird die Datei „/etc/shadow“ zum Speichern für das Passwort verwendet steht an  der Stelle des Passworts ein kleines „x“ um zu kennzeichnen das das Passwort in der shadow Datei ist.

Hier einige Einträge aus einem passwd File:

  • postfix:x:89:89::/var/spool/postfix:/sbin/nologin
  • mailman:x:41:41:GNU Mailing List Manager:/usr/lib/mailman:/sbin/nologin
  • postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
  • dovecot:x:97:97:dovecot:/usr/libexec/dovecot:/sbin/nologin
  • clamav:x:100:101:Clamav database update user:/var/lib/clamav:/sbin/nologin
  • user1:x:500:501:User1:/home/ user1:/bin/bash
  • user2:x:501:502:Benutzer Eins:/home/ user2:/bin/sh
  • user3:x:503:502::/home/ user3:/bin/false
  • user4:x:506:506::/home/ user4:/bin/bash
  • user5:x:507:501::/home/ user1/homes/ user5:/dev/null
  • user6:x:508:501:Benutzer Sechs:/home/ user1/homes/ user6:/dev/null
  • user7:x:509:501: Benutzer Sieben:/home/ user1/homes/ user7:/dev/null
  • user8:x:510:501: Benutzer Acht:/home/ user1/homes/ user8:/dev/null
  • user9:x:511:501: Benutzer Neun:/home/ user1/homes/ user9:/dev/null
  • user10:x:512:501: Benutzer Zehn:/home/ user1/homes/ user10:/dev/null

Die Datei  „/etc/shadow“  kann nur vom User root gelesen werden und somit können darin Passwörter sicher gespeichert werden. Die Datei einhält den Benutzernamen zu dem das Passwort gehört, das Passwort in verschlüsselter Form (geschützt meist durch einen Hash Algorithmus, hier MD5) , das Datum an dem das Passwort das letzte Mal geändert wurde und noch einige weitere Felder die in der Literaturquelle [8] genauer erklärt werden. Das Feld in dem das Passwort gespeichert wird, wird noch in weitere Felder unterteilt, die mit einem $-Zeichen getrennt sind. Zur verarbeitung des Passwortfeldes wird die Funktion crypt verwendet, für genauere Erklärungen siehe die Manpage von crypt(5) im Literaturverzeichniss [9]. Beginnt der Passwortstring mit einem $ wurde ein anderen Algorithmus als DES verwendet. Die Zeichen „$1$“ am Anfang  geben zum Beispiel an das der MD5 Algorithmus verwendet wurde. Wird MD5 verwendet folgen anschließend 8 bytes die einen Salt für das Passwort darstellen. Anschließend, getrennt durch ein „$“ folgt das verschlüsselte Passwort mit 22 bytes.

Hier einige Einträge aus einem shadow File:

  • user1:$1$64940791$fmqrzRd1sdssntS580grd0:14640::::::
  • user2:$1$65116444$C4NnRGHGeuhfSDg2MOU9l1:14642::::::
  • user3:$1$65202459$K3.7WDplFcGp2rYjH4irU1:14650::::::
  • user4:$1$ehYkbFVR$hVYycGCtO7yNIsek6wEPy.:14653:0:99999:7:::
  • user5:$1$66238589$dMlbYZ/EN0wlUWRA7Hv001:14655::::::
  • user6:$1$66488849$FIl6aIv2VZnsg.dNMjJhJ/:14658::::::
  • user7:$1$66603118$QwTb1n5gpftJHDiSx5uyj0:14659::::::
  • user8:$1$66603171$APje/DqNfFFLISORcPrUx/:14659::::::
  • user9:$1$66603284$3MavUXyEUrNp8YcxaqMil0:14659::::::
  • user10:$1$66603362$U.kQCom4sVzeJ0KRW7wE..:14815::::::
  • user11:$1$66603488$U/L2G3d9Nl8sA1WlnCuJa1:14659::::::
  • user12:$1$66603553$zMODEUpIaa3yG2j9wxoXw/:14659::::::
  • user13:$1$66603630$PeLFLUnO/B7NCcDjBeKTL1:14659::::::
  • user14:$1$66603781$yh7oHN9W54.oZv8T4nN8e0:14659::::::
  • user15:$1$66606855$EzrUC.dlCX6glV9hRx.sf0:14659::::::

Jeder Benutzer gehört auch einer Gruppe an. Informationen über Gruppen werden in der Datei „/etc/group“ gespeichert. Für jede Gruppe werden folgende Informationen gespeichert: der Gruppenname, optional das Passwort, die Gruppen ID und eine Liste mit den Benutzernamen die Mitglied in der Gruppe sind. Auch für Gruppen kann das Passwort in einer zweiten Datei gespeichert werden. Die Datei „/etc/gshadow“ enthält dann den Gruppennamen, das verschlüsselte Passwort, den Gruppenadministrator und die Mitglieder der Gruppe.

Hier einige Einträge aus einer group Datei:

  • root::0:root
  • bin::1:root,bin,daemon
  • daemon::2:root,bin,daemon
  • sys::3:root,bin,adm
  • adm::4:root,adm,daemon
  • tty::5:
  • disk::6:root
  • lp::7:daemon,lp
  • mem::8:
  • kmem::9:
  • wheel::10:root
  • mail::12:mail,postfix
  • news::13:news
  • uucp::14:uucp
  • man::15:
  • games::20:
  • gopher::30:
  • dip::40:
  • ftp::50:
  • lock::54:
  • nobody::99:

Windows XP (vgl. [12])

Windows speichert die Benutzerinformationen in dem „Security Accounts Manager“ der die Daten als Registry Datei meist unter %windir%/system32/config/SAM ablegt. Die Passwörter werden als „LM hash“ und „NTML hash“ abgespeichert. Da der LM hash ein großes Sicherheitsrisiko birgt kann optional abgeschaltet werden, in neueren Windows Versionen, ab Windows Vista, ist dies Standard. Um die Sicherheit der Passwörter noch zu erhöhen wird die Datenbank mit der SysKey-Funktion (vgl. [13]) verschlüsselt.

Offline Angriffe auf Benutzerpasswörter

Da man als normaler User unter Linux normalerweise nicht das Passwortfile auslesen kann und unter Windows der Zugriff auf die Datenbank im laufenden Betrieb nicht möglich ist, gibt es mehrere Möglichkeiten, wenn man physikalischen Zugriff auf das System hat, die Passwörter bzw. die Passworthashwerte einfach auszulesen.  Mit verschiedenen Boot-CDs kann der Rechner durch ein sich auf der CD befindliches Betriebssystem gebootet werden und über diese das Passwortfile ausgelesen und kopiert werden. Auch gibt es spezielle CDs die darauf ausgelegt sind die Passwörter  auszulesen und das Originalpasswort aus dem Hashwert zu errechnen. Auch bieten viele solche CDs die Möglichkeit das Passwort das Systems zu ändern oder löschen um somit ein einloggen beim nächsten Start des Betriebssystems zu ermöglichen.

Hat man einen Passworthash oder eine Datei mit Hashes (zum Beispiel die Linux shadow oder das Windows SMA File) vor sich gibt es verschiedene Möglichkeiten um ihn wieder das Anfangspasswort umzuwandeln. Für Windows kann dafür zum Beispiel das Programm „Cain and Abel“ (vgl. [10]) verwendet werden unter Linux gibt es das bekannte Programm „John the Ripper“ (vgl. [11]) verwendet werden. Es gibt noch viele gewerbliche Programme die Zusatzfeatures anbieten wie das Benutzen der Grafikkartenrechenleistung oder verteiltes rechnen auf mehreren PCs.

Literaturverzeichnis: