Sicherheitsaspekte bei der Wiederherstellung eines Backups von einer unbekannten Quelle?

31

Szenario : Sie erhalten ein Datenbank-Backup und werden aufgefordert, es auf einem Server wiederherzustellen (auf dem bereits andere Datenbanken gehostet werden). Sie erhalten jedoch keine nützlichen Informationen darüber, was das Backup enthält oder ob die Quelle als vertrauenswürdig eingestuft werden soll.

Frage 1 : Welche potenziellen Auswirkungen hat die Wiederherstellung eines Backups, das möglicherweise böswillig ist?

Frage 2 : Was können Sie tun, um Ihren Server / die Daten in anderen Datenbanken vor den Auswirkungen der Wiederherstellung eines potenziell böswilligen Backups zu schützen? RESTORE VERIFYONLYDas scheint ein guter erster Schritt zu sein. Die ultimative Antwort ist wahrscheinlich "Wiederherstellung der Datenbank in einer Sandbox-VM ohne Zugriff auf die Außenwelt", aber nehmen wir an, dass diese Option vom Tisch ist. Was sollte in dieser Situation noch getan werden?

Simon Righarts
quelle
1
Selbst wenn die Wiederherstellung nur Daten enthält (keine gespeicherten Prozeduren oder ähnliche), kann es zu einer Menge Böswilligkeiten kommen. Angenommen, die Sicherung bezieht sich auf eine Webanwendung, die eine Benutzertabelle mit den entsprechenden Berechtigungsstufen enthält. Eine böswillige Sicherung kann Benutzern Zugriff gewähren, die diese nicht haben sollten, und die wissen, was sie daraus machen können.
Lie Ryan
Sehr seltsam, niemand erwähnte das potenzielle Risiko von CLR-Prozeduren oder -Funktionen. (standardmäßig nicht mehr deaktiviert)
ALZDBA

Antworten:

21

Eine Datenbank kann schädlichen Code enthalten, möglicherweise eine Prozedur, die ein Kennwort für die Anmeldung "sa" ändert oder jede Datenbank löscht. Die einzige Möglichkeit, die ein Problem hervorruft, besteht darin, dass eine Person die Datenbank wiederherstellt und anschließend den Code in dieser Datenbank manuell ausführt. Es würde nicht in automatisierter Weise ausgeführt.

Es gibt keine Einstellung, die in einer Datenbank angewendet werden kann, damit SQL Server beim Wiederherstellen auf einem Server automatisch Code in der Datenbank ausführt. Andernfalls würde Microsoft die Common Criteria-Zertifizierung für das Produkt verlieren. Das ist zu groß für einen Bug, der mir in einem DBMS erlaubt hat.

Shawn Melton
quelle
Wenn Service Broker im Rahmen der Wiederherstellung (unter Verwendung von WITH ENABLE_BROKERua) erneut aktiviert wird , kann Code "automatisch" ausgeführt werden. Offensichtlich ist der Restaurator würde nicht wollen , eine dieser Optionen verwenden , wenn Sicherheit ein Anliegen ist, aber es könnte möglicherweise in einem 3rd-Party - Anbietern App begraben werden , wo der Benutzer nicht sehen könnte.
Jon Seigel
Welche Art von Code kann über Service Broker ausgeführt werden? Ich benutze es nie oder richte es ein.
Shawn Melton
Gespeicherte Prozeduren aktivieren. technet.microsoft.com/en-us/library/…
Jon Seigel
2
Führen Sie möglicherweise auch ein RESTORE HEADERONLY durch, um festzustellen, ob für die Datenbank die Eindämmung aktiviert ist. Wenn dies der Fall ist und die Eindämmung auf dem Server aktiviert ist, können Benutzer darauf zugreifen, ohne dass Sie ihnen Serverzugriff gewähren. Dies gilt natürlich für SQL 2012 oder höher. Wenn die Eindämmung auf dem Server nicht aktiviert ist und die Datenbank in der Sicherung sie aktiviert hat, schlägt die Wiederherstellung fehl, sodass dies hauptsächlich dann von Belang ist, wenn sie auf dem Server aktiviert ist.
Robert L Davis
1
@ JonSeigel Ich glaube nicht, dass diese automatisch ausgelöst werden. ETWAS muss eine Nachricht in eine Warteschlange stellen, indem es an einen Dienst gesendet wird. In dieser Datenbank muss also eine Interaktion stattfinden, um einen Datensatz einzufügen oder eine Prozedur oder etwas auszulösen. Broker-Warteschlangen lösen nicht nur ihre Aktivierungsprozeduren ohne Interaktion aus, sondern warten auch darauf, dass Nachrichten in der Warteschlange angezeigt werden.
JNK
11

Es gibt einige Präventionsschritte, die Sie durchführen können.

  1. Stellen Sie sicher, dass nur ein Systemadministrator Zugriff auf die wiederhergestellte Datenbank hat.
  2. Versetzen Sie die Datenbank nach Abschluss der Wiederherstellung in den Einzelbenutzermodus.
  3. Überprüfen Sie den Code in allen gespeicherten Prozeduren und Funktionen und Triggern in dieser Datenbank.
  4. Führen Sie eine dbcc-Prüfung durch, um sicherzustellen, dass keine Integritätsprobleme vorliegen.
  5. Überprüfen Sie die Benutzer, die früher Zugriff auf die Datenbank hatten, und entfernen Sie alle.
  6. Beginnen Sie, den Zugriff zuzulassen, der auf bestimmte von Ihnen überprüfte Objekte beschränkt ist.

Wie Shawn sagte, wird der Code nur dann von selbst ausgeführt, wenn eine gespeicherte Prozedur, die vbalid zu sein scheint, einen anderen bösartigen Code ausführt. Dies ist der Grund, warum Sie den Code in jedem von ihnen überprüfen müssen, bevor Sie ihn in den Mehrbenutzermodus versetzen.

yrushka
quelle
10

Ich erreiche hier, aber ich kann mir mindestens ein gefährliches Szenario vorstellen : Wenn Sie eine Datenbank mit einer Dateitabelle wiederherstellen , befinden sich diese Dateien jetzt standardmäßig in Ihrem Netzwerk (und insbesondere auf Ihrem SQL Server). Sie könnten einen Virus wiederherstellen.

Das alleine macht natürlich nichts - der Virus wird nicht plötzlich empfindlich - aber wenn Ihre Benutzer dann versuchen, auf die Datei zuzugreifen, könnten sie infiziert werden. Ich stelle mir ein Szenario vor, in dem ein externer Hacker Malware in die Tür bekommen möchte. Anschließend sendet er eine E-Mail an Bob in der Buchhaltung mit den Worten: "Hier ist die Datei: \ sqlserver \ filetableshare \ myvirus.exe "- zu diesem Zeitpunkt ist es ohne Erkennung an Ihren Firewalls vorbei gegangen, und wir sind nun bei Ihren internen Antiviren- und Antischadsoftware-Tools angelangt.

Brent Ozar
quelle
2
Sie können dies auch so ausdrücken: "Die Datenbank enthält Anleitungen für unser Personal, die gelesen und angewendet werden müssen." Wenn sie der böswilligen Anleitung folgen, werden sie die Raketen auf Moskau abfeuern. Es wäre eine gewöhnliche Variable in einer Tabelle ... Das gleiche gilt, wenn Sie Binärdateien wiederherstellen und Mitarbeiter einladen, sie auszuführen, ohne den Ursprung zu validieren.
Remus Rusanu
@ RemusRusanu die Raketen auf Moskau starten, hahaha, schön!
Brent Ozar
Lieben Sie die Social-Engineering-Perspektive. Eine gezielte E-Mail mit einer .bak-Datei kann je nach Ziel sehr verlockend sein.
Max Vernon
7

RESTORE VERIFYONLY scheint ein guter erster Schritt zu sein. Die ultimative Antwort ist wahrscheinlich "Wiederherstellung der Datenbank in einer Sandbox-VM ohne Zugriff auf die Außenwelt", aber nehmen wir an, dass diese Option vom Tisch ist. Was sollte in dieser Situation noch getan werden?

Bei der Wiederherstellung wird nur die Integrität der Datenbank überprüft. Es wird NICHT angezeigt , ob die Sicherung einen schädlichen Code enthält. Bei der Wiederherstellung wird nicht versucht, die Struktur der in den Sicherungsdatenträgern enthaltenen Daten zu überprüfen. Es ist höchst unwahrscheinlich, dass Backups, die von der Firma stammen, in der Sie arbeiten, böswillig sein können. Wenn sie jedoch von Dritten stammen, müssen Sie vorsichtig sein, wie Shawn betonte.

Microsoft Online-Dokumentation sagt das

• Aus Sicherheitsgründen empfehlen wir, keine Datenbanken aus unbekannten oder nicht vertrauenswürdigen Quellen anzuhängen oder wiederherzustellen. Solche Datenbanken können schädlichen Code enthalten, der unbeabsichtigten Transact-SQL-Code ausführen oder Fehler verursachen kann, indem das Schema oder die physische Datenbankstruktur geändert werden. Bevor Sie eine Datenbank aus einer unbekannten oder nicht vertrauenswürdigen Quelle verwenden, führen Sie DBCC CHECKDB für die Datenbank auf einem Nichtproduktionsserver aus und überprüfen Sie den Code in der Datenbank, z. B. gespeicherte Prozeduren oder anderen benutzerdefinierten Code.

Shanky
quelle
7

Die Frage konzentriert sich hauptsächlich auf ein Backup, das Malware enthält. Es ist jedoch auch möglich, dass der Wiederherstellungsvorgang selbst unerwünschtes und potenziell böswilliges Verhalten hervorruft.

Ich habe in der Vergangenheit versehentlich festgestellt, dass es möglich ist, SQL Server zum Absturz zu bringen, indem versucht wird, eine beschädigte Sicherungsdatei wiederherzustellen, wodurch SQL Server versucht, nach dem Ende der Sicherungsdatei zu lesen, und abstürzt. Ich bin nicht sicher, welche Versionen anfällig sind oder was genau erforderlich ist, um das Problem zu reproduzieren. Ich habe hier einige begrenzte Details dokumentiert , als ich vor einigen Jahren auf dieses Problem gestoßen bin.

James L
quelle
Guter Punkt. Ich wollte mich nicht unbedingt auf "gültiges Backup, das Malware enthält" konzentrieren. Ein Absturz des SQL-Servers durch ein ungültiges Backup ist auch eine absolut relevante Antwort auf "Was könnte schief gehen?".
Simon Righarts
5

Welches Risiko besteht bei der Wiederherstellung einer unbekannten Datenbank aus einer unbekannten Quelle? Keiner.

Welches Risiko besteht darin, dass eine unbekannte Anwendung über ein Sysadmin-Konto eine Verbindung zu dieser Datenbank herstellt und Code ausführt? VIELE! Wenn das Anwendungskonto nur Rechte in der Datenbank und keinen Zugriff auf Serverebene hat, kann es außerhalb der Datenbank nichts wirklich tun. Dies hängt im Wesentlichen davon ab, ob auf dem Server ein ordnungsgemäßes Sicherheitsframework eingerichtet ist.

mrdenny
quelle
2

Sie erhalten ein Datenbank-Backup und werden aufgefordert, es auf einem Server wiederherzustellen (auf dem bereits andere Datenbanken gehostet werden). Sie erhalten jedoch keine nützlichen Informationen darüber, was das Backup enthält oder ob die Quelle als vertrauenswürdig eingestuft werden soll.

Nett. Sie fordern eine unterschriebene schriftliche Erklärung von demjenigen, der Sie dazu auffordert, dass er die volle Verantwortung für die Folgen übernimmt. Wenn sie dazu nicht bereit sind, sollten Sie die Installation in einer Sandbox testen, nachdem Sie die Sicherungsdatei überprüft haben (falls möglich), und alle Tabellen, Prozeduren usw. gründlich untersuchen das Produktionssystem. Selbst dann sollten Sie (Ihrem Chef und seinen Vorgesetzten) klar machen, dass Sie der Sicherung nie vertraut haben und dies nur auf direkten Befehl hin tun.

Wenn sie eine solche Erklärung nicht unterzeichnen, benachrichtigen Sie ihren Vorgesetzten, bevor Sie etwas unternehmen. Als Fachmann ist es Ihre Pflicht, Ihr System so gut wie möglich zu schützen, unabhängig davon, was Ihnen ein düsterer Vorgesetzter befiehlt. Sie könnten gefeuert werden, aber Sie können Ihren Kopf hoch halten und wissen, dass Sie das Richtige getan haben.

Phil Perry
quelle
2

Es gibt nicht viele Gefahren, außer den hier vorgeschlagenen weitreichenden. Wie bereits erwähnt, ist es schwierig, automatisch auszuführende Elemente in einer Datenbanksicherung selbst zu haben. Es braucht eine Art äußeren Auslösemechanismus.

Besorgen Sie sich einen alten Laptop / Desktop und eine Evaluierungsversion Ihrer Datenbanksoftware (SQLExpress), wenn Lizenzierungsprobleme auftreten. Kopieren Sie die Sicherungsdatei auf den Computer, trennen Sie das Netzwerk / WLAN und führen Sie die Wiederherstellung durch. Dann anfangen zu graben. Nehmen Sie sich die Zeit, die Sie brauchen, denn es gibt viele Orte, an denen sich Dinge verstecken können, die meisten davon bereits von anderen Posts in diesem Thread abgedeckt.

Ihre DBA-Integrität und das Wohl Ihrer Produktionsumgebung sind wichtiger als jeder Auftrag, den ein Vorgesetzter erteilt.

Philippe
quelle