Im Zusammenhang mit meinem Posting "JTL-Wawi und das veröffentlichte SA-Passwort" stellte Ralph die Frage, wie kritisch es ist, wenn ich eine Anwendung nutze, die immer mit dem Sysadmin arbeitet. In dem Posting habe ich schon beschrieben, warum es für einen Angreifer ein so großes Geschenk ist an das SA-Passwort zu kommen. Kurz gesagt, er kann sich damit bislang meistens zum Administrator am Server machen.
Im konkreten Fall kann zunächst jeder Depp einen Angriff durchführen solange das im Internet veröffentlichte Default-Passwort nicht geändert wird. Gehen wir also mal davon aus, ein Admin ändert das SA-Passwort. Wie gefährdet bin ich dann als Nutzer so einer Software?
Wenn man einschätzen will, wie kritisch eine Lücke ist, dann muss man zwei Fragen beantworten:
- Wie schlimm ist es, wenn jemand die Lücke ausnutzt?
- Wie schwierig ist es, die Lücke auszunutzen?
Wie lauten die Antworten in diesem konkreten Fall, wenn die Software als Prozess am Arbeitsplatz ausgeführt wird?
Wie schlimm ist es, wenn jemand die Lücke ausnutzt?
Worst Case! Weil der SQL-Server-Dienst im Systemkontext läuft, ist der Server kompromittiert oder der Einzelarbeitsplatz kann komplett aus der Ferne übernommen werden, ja nachdem wo der SQL Server installiert wurde. Nichts ist mehr sicher, dem Angreifer ist nichts unmöglich.
Wie schwierig ist es, die Lücke auszunutzen?
Es sind mehrere Lücken, die beide damit zu tun haben, dass die Anwendung am Arbeitsplatz ausgeführt wird und damit im Kontext des Benutzers:
- Das SA-Passwort wird beim Einrichten an eine Stelle geschrieben, die jeder Benutzer lesen kann. Die verwendete Verschlüsselungsmethoden sind leicht protokollierbar, der Schlüssel ist ebenso zugänglich. Das ist für einen ernsthaften Angreifer die einfachste Methode: Die Software bei sich installieren, in aller Ruhe ausspähen und einen Exploit schreiben, der anderen zur Verfügung gestellt werden kann.
- Während des Zugriffs kann jeder Prozess, der im gleichen Benutzerkontext läuft wie das JTL-WAWI, den JTL-WAWI-Prozess ausspähen: er kann den Hauptspeicher durchwühlen, die von der Anwendung verwendeten Schnittstellen sniffen oder sich sogar als Debugger an den Prozess hängen. Wenigstens seit Windows-XP hat jeder Windows-Benutzer das Recht die "eigenen" Prozesse derart zu untersuchen. Viele Entwickler glauben offenbar dazu wären Admin-Rechte nötig. Daher habe ich beschlossen für diese Zielgruppe ein Buch zur Sicherheit von Anwendungen mit SQL-Server zu schreiben. Mal schauen, ob es auf Interesse stößt.
Als Angreifer haben wir also zwei Angriffspunkte, um an das begehrte SA-Kennwort zu bekommen. Wie man das ganz konkret macht, beschreibe ich hier absichtlich nicht. Angehende Skript-Kids möchte ich nicht zu unüberlegten (weil kriminellen) Handlungen verleiten. Aber seien Sie sicher, dass die bösen Jungs wissen wie das funktioniert. Jeder Fachinformatiker im ersten Lehrjahr sollte dazu in der Lage sein. Ebenso reichen die im Informatikunterricht vermittelten Kenntnisse, um sich da einzulesen.
Es ist nur die Frage, ob Angreifer sich die Mühe machen. Das hängt davon ab, was zu holen ist und wie verbreitet die Software ist und wo der Angreifer sitzt?
Wo sitzt der Angreifer?
Falls mein Geschäft eine Oneman-Show ist und die Software nur auf einem Einzelarbeitsplatz läuft, dann dürfte der Angriff am ehesten über das Internet erfolgen, z.B. durch Ausnutzen einer bekannten, noch ungelösten Lücke (z.B. Internet-Explorer oder Flash) oder einfach per Mailanhang z.B. (präpariertes PDF). Der Schädlich könnte schauen, ob er in der Registry das SA-Kennwort findet, anhand des ebenfalls dort stehenden Schlüssels entschlüsselt und ggf. via SQL Server sein schändliches Werk tun.
Falls der SQL-Server im Netzwerk auf einem Server installiert ist, dann dürften mehrere Mitarbeiter vorhanden sein. Für jeden Arbeitsplatz gilt die gleiche Angriffsmöglichkeit wie beim Einzelplatz. Zugleich kommt noch hinzu, dass ein Mitarbeiter anhand einer der vielen Anleitungen einen Sniffer startet (sehr einfach, auch für absolute Laien), das SA-Kennwort erspäht (dito) und dann die Grenzen der Möglichkeiten erprobt (mit Excel zum SQL Server verbinden ist nicht schwer, über SQL Server andere Dateien auslesen erfordert schon mehr Skills). Je nach Motivation des Mitarbeiters kann er sich dann austoben: Die Möglichkeiten reichen vom Stillen der Neugier (steht dort auch, was die Kollegen verdienen) und Kundendaten mitnehmen (um den geplante Start in sie Selbstständigkeit zu erleichtern) bis hin zur Rache (Festplatte formatieren, weil Gehaltserhöhung nicht bekommen, MS fühlt sich ungerecht behandelt, ihm wurde gekündigt, …)
Weil es geht…
In den letzten Jahren kam ein Trend auf, der alle obigen Ausführungen relativiert. Mit den sogenannten Skript-Kids kamen Angriffe hinzu, wo die Angreifer keine wirtschaftlichen Betrachtungen anstellen: Lohnt sich der Aufwand, was ist zu holen, … ? Gerade weil es so einfach ist, werden von meist Jugendlichen Angriffe ausgeführt, einfach nur weil es geht und sie Grenzen austesten wollen. Die Motivation ist hier der Spaß am Knobeln und vielleicht der Prestige-Gewinn im Freundeskreis. Weil es ihnen nicht darum geht damit Geld zu machen, ist es ihnen egal wie lange sie dafür brauchen, sie haben ja nach der Schule meist viel Zeit. Viele der besonders populären Angriffe der letzten Jahre auf Sony etc. waren so motiviert. Die öffentliche Bestrafung einiger der Skript-Kids führte aber in meinen Augen nicht dazu, dass weniger Angriffe durchgeführt werden. Die Kiddies prahlen damit halt nicht mehr so öffentlich.
Und die benötigte Kenntnisse? SQL lernen bayerische Gymnasiasten in der 9ten Klasse…
Update 3.2.2013: Zuschriften entnahm ich, dass einige nicht glauben, dass auch mit normalen Benutzerrechte die beschriebenen Spionageaktionen möglich sind. Daher können interessierte Entwickler anhand dieser Anleitung die benötigten Rechte selber überprüfen.
Danke Thomas, dass du das Thema noch mal aufgegriffen hast. Ich gehe davon aus, dass von innen keine Gefahr droht, die Mitarbeiter sind nach meiner Einschätzung zu solchen Taten nicht in der Lage.
Es müsste also eine Schadsoftware eingeschleust werden, die nicht nur das sa-Passwort ausspät, sondern auch auf die Datenbank zugreift.
Die Einschleusung ist via email denkbar, die Schadsoftware müsste dann aber alles allein regeln, stelle ich mir in meiner Laienhaftigkeit vor, denn der SQL-Server bietet ja nach außen keine Dienste an.
Prinzipiell verstehe ich die Bedrohungslage. Für mich stellt sich die Frage:
Ist ein solcher Angriff realistisch oder braucht man dafür Geschütze a la stuxnet?
Ich habe die Artikel jetzt nochmal und nochmal durchgelesen und verstehe es so, dass ich es hier mit einer schweren Sicherheitslücke zu tun habe. Dennoch kann ich den Dienst ja nicht abschalten. Das ganze Geschäft wird ja dadurch gesteuert. Gibt es außer den üblichen Maßnahmen (Software zeitnah aktualisieren und keine unbekannten Dateianhänge ungeprüft öffnen, um Einschleusung von Schädlingen unwahrscheinlicher zu machen) etwas, was ich zur Verbesserung der Sicherheit tun kann, als Sofortmaßnahme?
Hallo Ralph, Du tust mir leid. Vor allem, weil Du ja nichts an dem eigentlichen Problem ändern kannst.
Zu Deinen Fragen:
Wie realistisch ist ein Angriff via Schädling? Meiner Ansicht nach muss jemand einen für das JTL-WAWI maßgeschneiderten Exploit bauen. Also zwar kein StuxNet, aber doch etwas was extra für das WAWI geschrieben wird. Dann erst kann er in die gängigen Schädlingsgeneratoren eingebaut werden. Damit kann man ohne besondere Kenntnisse Schädlinge zusammenklicken. Ich habe keine Zahlen über die Verbreitung der Software JTL-WAWI. Falls die Software nur eine geringe Marktbedeutung hat, dann könnte es länger dauern bis jemand so einen Exploit baut. Das kann kein Skript-Kid, sondern muss schon ein Hacker sein. Aber wenn der Schädling dann kommt, merkt man es erst, wenn es zu spät ist.
Hier ein paar Ideen, was Du tun kannst:
* Wenn Du den Mitarbeitern völlig vertraust, dann könnte das Ausführen über einen Windows-Terminal-Server (WTS) das Problem mindern. Schädlinge finden dann auf den Arbeitsplätzen der Mitarbeiter nichts. Wenn Du ohnehin mit virtuellen Servern arbeitest und schon WTSe im Einsatz hast, dann sollte das für Dich kein großes Problem sein (Aufwand hingegen schon). Wenn nicht, dann wäre das ein sehr teurer Vorschlag.
* Wenn Ihr Lizenzgebühren an den Hersteller zahlt, dann könntest Du darauf drängen, dass sie Dir ein Skript geben in dem ein Benutzer angelegt wird, der nur die wirklich benötigten Rechte hat. Für jemanden der die Software kennt, ist der Aufwand überschaubar. Für mir bekannte Software würde ich etwa 60min benötigen. Lass es mit Tests 8h sein, dann ist das hoch gegriffen. Das ist nichts im Vergleich zu dem Aufwand, den Du hast, wenn Du das System abdichten willst. Das könnte billiger sein, aber Du musst mit Deinem Chef über das Budget verhandeln. Aber das Risiko würde ich ohnehin nicht alleine tragen wollen.
* Wenn Du nicht allen Mitarbeitern vertraust, dann wäre ein rundum abgeschotteter Windows-Terminal-Server theoretisch auch eine Minderung des Problems. Wenn man dann nur die Ausführung der WAWI-Software zulässt, dann kann er theoretisch ja keine andere Software ausführen. Nach meiner Erfahrung ist das aber ein nahezu grenzenloser Aufwand. Vor allem müsste man prüfen, ob die Software einen Datei-Dialog bietet, der ein kleiner Explorer ist, inkl. dem Anlegen von Verknüpfungen und dem Ausführen von Dateien. Dann könnte jemand doch relativ leicht eine cmd.exe öffnen und voila… die ganze Abschottung wäre für die Katz.
Wenn mir mehr einfällt, dann komme ich darauf zurück.
Hi,
mir ist noch etwas eingefallen, was die Auswirkungen mindert: JTL installiert den SQL-Server-2005 so, dass er im System-Kontext läuft. Lege am Server einen lokalen Windows-Benutzer an und gibt ihm Vollzugriff auf das Verzeichnis in dem der SQL Server installiert ist und wo die Datenbank-Dateien liegen. Dann lass den SQL Server-Dienst im Kontext dieses Windows-Benutzers ausführen.
Dann kann der Angreifer schon mal nicht mehr den ganzen Windows-Server kompromittieren, sondern nur alle Daten an dem SQL Server manipulieren bzw. löschen.
Viele Grüße
Thomas
Nicht gut. Aber ich muss noch mal nachfragen. Du sagtest, es ist ein Leichtes, das sa-Passwort auszulesen, woraufhin eine entsprechende Schadsoftware vollen Zugriff auf meinen SQL-Server hätte. Mal angenommen, ich könnte einen zweiten Benutzer anlegen und die Anwendung mit den Rechten dieses Benutzers arbeiten lassen. Wäre es dann so ungleich schwieriger, Zugriff auf den SQL-Server zu erlangen? Gut, der Benutzername ist unbekannt, aber kann ich nicht auch sa umbenennen? Welche Rechte der Benutzer zum reibungslosen Betrieb der Anwendung benötigt, weiß ich natürlcih nicht.
Meine einzige Sorge ist der SQL-Server. Wer den hat, kann den Rest des Rechners geschenkt haben.
Ich habe für sa ein sehr starkes Passwort, was nicht viel nützt, wenn es einfach zu entschlüsseln ist. Die Stärke des Passwortes ist dann gleichgültig. Habe ich das richtig verstanden?
Ich mache stündlich ein Backup der Datenbank und sichere diese mehrmals täglich an einen sicheren Drittort. Außerdem täglich ein System-Abbild. Ich könnte im Falle eines Falles unter Datenverlusst alte Images/Datensicherungen einspielen.
Mehr kann ich zum gegenwärtigen Zeitpunkt nicht tun. Mal sehen, ob sich der Hersteller zu dieser Sache äußert.
Vielen Dank bis hier und schönes Wochenende.
Hallo Ralph,
ja, das sehe ich auch so.
Ein starkes Passwort von SQL-Logins hilft gegen Brute-Force (oder ähnliche) Attacken.
Wenn jemand das Passwort so speichert, dass jeder dran kommt, dann ist es egal wie gut das Passwort ist.
Wenn die Anwendung nicht generell mit den SysAdmin arbeitet, sondern vernünftigerweise mit einem Benutzer mit minimalen Rechten, dann hat der Angreifer weniger Rechte.
Das ändert nichts daran, dass es einfach fahrlässig ist das Passwort so zu speichern, dass jeder dran kommt. Da ist für mich auch die Verschlüsselung keine echte Hürde, zumal bei solchen Vorgehensweisen der Schlüssel ja irgendwo zugänglich stehen muss.
Wenn der SQL Server-Dienst im System-Kontext ausgeführt wird, dann kann jemand der Sysadmin-Rechte hat leicht zum Admin des File-Servers werden. Wenn der SQL Server-Dienst nur mit Benutzerrechten läuft, dann entfällt diese Konsequenz. Dann kann ein Angreifer mit SysAdmin-Rechten "nur" noch alles am SQL-Server ausspähen/tun. Er könnte bspw. User/Passwort der JTL-Benutzer auslesen und hoffen, dass sie den Windows-Benutzern entsprechen. Es ist zwar unfassbar, aber die WAWI-Passwörter werden von JTL wirklich im Klartext gespeichert, üblich wäre eigentlich ein Hash-Wert.
Viel Erfolg bei JTL. Das ist der richtige Weg. Die Antwort eines der Geschäftsführer auf meinen Hinweis lies in der Hinsicht kein Problembewusstsein erkennen.
Viele Grüße
Thomas
Hallo zusammen,
es ist nicht richtig, dass JTL kein Problembewusstsein erkennen lässt. Es wurden bereits die Installationsanleitungen ergänzt und künftig wird kein sa Nutzer für JTL-Wawi nötig sein.
Weitere Informationen hierzu unter diesem Link.
http://wiki.jtl-software.de/index.php?title=Kategorie:JTL-Wawi:Datenbank-Benutzer#Einen_neuen_Nutzer_f.C3.BCr_die_Wawi_anlegen
Und siehe da: Es geht. Gut dass wir darüber geredet haben.
Hallo Herr Thomas Lisson,
Wie schön, dass Sie Ihre Meinung geändert haben und nun doch mit einer konkreten Hilfe für Ihre Kunden auf meine Mail vom Herbst reagieren. Gerne berichte ich auch darüber in Kürze auf meinem Blog.
Ich vermute der Satz auf den Sie sich beziehen, steht im Kommentar vom 13.1.2013 und lautet:
"Die Antwort eines der Geschäftsführer auf meinen Hinweis lies in der Hinsicht kein Problembewusstsein erkennen."
Er bezog sich auf die Antwort auf eine Mail, die ich im Herbst von Herrn Janusch Lisson erhielt, nicht auf JTL. Sie ging enttäuschend wenig auf das dargelegte Problem ein, sondern verlagerte die Verantwortung für die Nutzung des SA auf den Kunden: er könne ja das Passwort ändern und außerdem müsse er dafür sorgen, dass keiner an das Passwort kommt. Der Kunde kann aber wenig machen wenn man ihm nicht beschreibt, welche Rechte JTL minimal benötigt. Außerdem kann er nicht verhindern, dass ein Mitarbeiter mit einem API-Tracer das Passwort sieht.
Die Anleitung ist ein guter Schritt! Schade ist, dass die Kunden stattdessen nun einen Benutzer mit DB-Owner-Rechten nutzen sollen. Das ist ein zwar guter Schritt. Aber ein DB-Owner ist nichts anderes als ein Datenbank-Administrator. Ein Angreifer kann jetzt nicht mehr den Server übernehmen (wie mit SysAdmin-Rechten), sondern nur noch die JTL-Datenbank: Daten lesen, ändern, Tabellen löschen, Trigger anlegen, Passwörter der JTL-Benutzer lesen, etc.
Ein noch besserer Schritt wäre, wenn Sie eine eigene Rolle anlegen, die nur die Rechte hat, die ein normaler Mitarbeiter benötigt. Dann könnten Sie trennen zwischen Admins und normalen Benutzern. Ich vermute bspw. nicht jeder Mitarbeiter soll eine Datensicherung durchführen können.
Dennoch freut es mich, dass Sie sich meinen Hinweis nach über drei Monaten letztlich doch zu Herzen genommen haben und auf den Einsatz eines Benutzers mit SysAdmin-Rechten verzichten. Danke für den Hinweis.
PS: Das "Danke" war übrigens ganz leicht und tat nicht weh. Aber wahrscheinlich war ein Dank für meinen Hinweis, der letztlich zu der Beseitigung des größten Problems führen wird, wohl doch zu viel erwartet. Leider entstand bei mir der Eindruck als ob das Überbringen der Botschaft eher als Problem gesehen wurde, als der Inhalt der Botschaft. Irgendwie schade.
Viele Grüße
Thomas Glörfeld
Hallo Ralph,
danke für den Link. Falls Du hier Katalysator oder auch nur der letzte Tropfen warst, dann hast Du ein dickes Lob verdient: gut gemacht!
Viele Grüße
Thomas
Katalysator war wohl eher stewi12, der das Thema ins JTL-Forum getragen hat . . . 🙂