SQL Server effizient absichern mit C2-Überwachung, DLL-Trigger und Server Audit

Microsoft erweitert den SQL Server laufend um Sicherheits- und Audit-Features, damit Firmen gestiegene IT-Sicherheitsanforderungen erfüllen können.

Dieser Artikel behandelt

Datenbanksysteme

ÄHNLICHE THEMEN

Microsoft erweitert den SQL Server laufend um neue Sicherheits- und Audit-Features, da Unternehmen ihre Maßnahmen...

beim Security-Management ständig verstärken und verbessern wollen. Die Audit-Funktionen des SQL Server unterstützen Datenbankadministratoren (DBA) bei der Erzeugung von Audit Trails, wenn Änderungen am Datenbankschema vorgenommen werden oder sicherheitsrelevante Ereignisse eintreten.

Gleichzeitig können Unternehmen mit diesen Features auch unterschiedliche gesetzliche und regulatorische Anforderungen erfüllen: zum Beispiel die Datenschutzdirektive der Europäischen Union (EU) beziehungsweise die künftige EU-Datenschutz-Grundverordnung, den Payment Card Industry Data Security Standard (PCI DSS) bei der Abwicklung von Kredittransaktionen oder das Bundesdatenschutzgesetz (BDSG). Darüber hinaus wird durch die Audit-Features des SQL Server auch die Sicherheit der Daten sowie Datenbankinfrastruktur verbessert und erhöht.

Überwachung der Logins

Zur Überwachung der Logins auf einem SQL Server werden fehlgeschlagene und erfolgreiche Anmeldungen am Server aufgezeichnet und in einem Fehlerprotokoll gespeichert. Das Aufzeichnen der Verbindungen und der Verbindungsversuche ist nützlich, um herauszufinden, welche Personen auf die Datenbank Zugriff haben oder darauf zugreifen wollen.

Die Login-Überwachung lässt sich im SQL Server Management Studio wie folgt konfigurieren: Im Object Explorer mit der rechten Maustaste den entsprechenden Servernamen anklicken, Eigenschaften auswählen, dann auf die Registerkarte Sicherheit klicken, die gewünschte Option auswählen und mit OK bestätigen. Bei der Login-Überwachung gibt es mehrere Varianten: fehlgeschlagene Anmeldeversuche und erfolgreiche Logins werden entweder getrennt überprüft oder beide zusammen. Sobald die Auswahl getroffen und bestätigt ist, muss der SQL Server neu gestartet werden.

C2-Überwachungsmodus und allgemeine Compliance-Kriterien aktivieren

Fehlgeschlagene als auch erfolgreiche Zugriffsversuche auf Anweisungen und Datenbankobjekte werden mit dem C2-Überwachungsmodus aufgezeichnet. Allerdings ist der Einsatz dieser Funktion sehr datenintensiv, denn es müssen sehr viele Informationen gespeichert werden. 

Deshalb erstellt der SQL Server automatisch eine neue Datei, wenn die Überwachungsprotokolldatei eine maximale Größe von 200 Megabyte (MB) erreicht hat. Die alte Datei wird geschlossen, sodass Überwachungsdatensätze nur noch in die neue Datei geschrieben werden. Ist das Verzeichnis mit den Überwachungsdaten voll, fährt der SQL Server automatisch herunter.

Der C2-Überwachungsmodus kann im SQL Server Management Studio oder mit der Option c2 audit mode in sp_configure konfiguriert werden. Im Server Management Studio wir die Konfiguration wie folgt ausgeführt: Im Object Explorer mit der rechten Maustaste auf Eigenschaften klicken, Registerkarte Sicherheit auswählen, C2-Audit aktivieren und den Vorgang mit OK bestätigen und abschließen. Alternativ dazu besteht die Möglichkeit, die C2-Überwachungsverfolgung in sp_configure zu konfigurieren.

Der C2-Sicherheitsstandard ist zwar auch im SQL Server 2012 noch verfügbar, aber diese Funktion wird in aktuellen (SQL Server 2014) und künftigen Versionen durch die Allgemeinen Compliance-Kriterien (Common Compliance Criteria) ersetzt. Die Common Compliance Criteria sind ein Überwachungsstandard, bei dem Datenbankzugriffe auch mithilfe SQL Trace geprüft werden. 

Nach der Aktivierung dieses Features ist automatisch auch die Login-Überwachung freigeschaltet. Die Aktivierung der Common Compliance Criteria im SQL Server erfolgt durch einen Klick mit der rechten Maustaste auf den Object Explorer. Unter Einstellungen wird die Registerkarte Sicherheit ausgewählt, dort die C2-Überwachungsverfolgung freigeschaltet und der Vorgang abgeschlossen.

SQL Server Profiler

Mithilfe des SQL Server Profiler können Events zum Zeitpunkt ihres Auftretens aufgezeichnet und nachverfolgt werden. Dazu zählen Zugriffe auf Objekte, die Anmeldekonfiguration oder Sicherheitsereignisse. 

Das Ergebnis wird in sogenannten Trace-Dateien oder Datenbanktabellen gespeichert. Mehr Informationen dazu, wie mit der Funktion SQL Trace auftretende Ereignisse überwacht werden können, sind im SQL Server Profiler im Bereich Create a Trace verfügbar.

Verwendung von DDL-Triggern

DDL-Trigger werden im SQL Server als Reaktion auf verschiedene DDL-Ereignisse (Data Definition Language, Datendefinitionssprache) ausgeführt oder zur Aufzeichnung von sicherheitsrelevanten Ereignissen. Sie können zum Ausführen von Verwaltungsaufgaben in der Datenbank verwendet werden, etwa zum Überwachen und Steuern der Datenbankvorgänge. 

Durch die Protokollierung von DDL-Ereignissen werden alle Informationen der Anmeldevorgänge erfasst und lassen sich im Rahmen eines Audit Trails lückenlos zurückverfolgen. Zugleich werden Risikoindikatoren frühzeitig erkannt, etwa wenn einem Nutzer gemäß seiner Rolle zu viele Berechtigungen zugeordnet sind oder wenn ein Nutzer Berechtigungen, die ihm zugeordnet sind, missbraucht.

Bei der Erstellung von DDL-Trigger kann festgelegt werden, ob diese auf Server- oder auf Datenbankebene ausgelöst werden. Trigger auf Serverebene erfassen Serverobjektereignisse wie zum Beispiel Anmeldevorgänge. DDL-Trigger auf Datenbankebene lassen sich verwenden, um Änderungen oder Ereignisse im Datenbankschema oder in Datenbanktabellen aufzuzeichnen. 

Die EventData-Funktion (SQL-Transact) gibt dabei detaillierte Informationen zu sicherheitsrelevanten Server- oder Datenbankereignissen in Form von XML-Daten zurück. Je nachdem, um welchen Ereignistyp es sich handelt, muss das entsprechende Schema extrahiert werden, das in der Schemadefinition hinterlegt ist.

Durch den folgenden Code wird auf Serverebene ein DDL-Trigger erzeugt, der sämtliche Verbindungen und sicherheitsrelevanten Ereignisse, die im SQL Server auftreten, auf einer Security-Log-Tabelle in der Master-Datenbank protokolliert und überwacht:

USE [master]

GO

DROP TABLE [dbo].[SecurityLog]

GO

CREATE TABLE [dbo].[SecurityLog](

      [EventType]         [nvarchar](128) NULL,

      [EventTime]         [datetime] NULL,

      [EventLog]          [xml] NULL

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

Erstellen Sie einen DDL-Trigger (ddl_trig_capture_security_events), um alle Verbindungen und sicherheitsrelevanten Ereignisse abzufangen und zu speichern:

USE [master]

GO

IF EXISTS (SELECT * FROM sys.server_triggers

          WHERE name = 'ddl_trig_capture_security_events')

DROP TRIGGER ddl_trig_capture_security_events

ON ALL SERVER;

GO

FOR  LOGON, DDL_SERVER_SECURITY_EVENTS,       

       DDL_DATABASE_SECURITY_EVENTS

AS   

INSERT INTO [master]..[SecurityLog] (EventType, EventTime, EventLog)     

SELECT EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(128)')

     ,EVENTDATA().value('(/EVENT_INSTANCE/PostTime)[1]','datetime')

,EVENTDATA()

GO

Sobald der DDL-Trigger erzeugt wurde, kann getestet werden, ob er reibungslos funktioniert. Das funktioniert wie folgt:

USE [master]

GO

CREATE LOGIN [TestDDL] WITH PASSWORD=N'TestDDL'

GO

USE [AdventureWorks2012]

GO

CREATE USER [TestDDL] FOR LOGIN [TestDDL]

GO

ALTER ROLE [db_datareader] ADD MEMBER [TestDDL]

GO

GRANT EXECUTE ON [dbo].[uspGetBillOfMaterials] TO [TestDDL]

GO

Das Ereignisprotokoll lässt sich durch einen Klick auf XML vollständig einsehen (siehe Abbildung 1).

Abbildung 1

Abbildung 2 zeigt die Ergebnisse in der Protokolldatei:

Abbildung 2

Benachrichtigung über Ereignisse

Microsoft hat die Funktion Ereignisbenachrichtigung (Event Notification) mit dem SQL Server 2005 eingeführt. Damit können sicherheitsrelevante SQL-Trace-, DDL- und Systemereignisse erfasst und eine Ereignisbenachrichtigung an einen Service Broker-Dienst gesendet werden. Mit der Ereignisbenachrichtigung können Ereignisse automatisiert und asynchron verarbeitet werden. Eventbenachrichtigungen sind somit eine Alternative zu DDL-Triggern, die die synchron verarbeitet werden, und SQL Trace.

Weiterführende Informationen zum Thema Ereignisbenachrichtigungen und DDL-Trigger sind im Microsoft Developer Network abrufbar. In folgendem Beispiel werden unter Verwendung der Event-Notification-Funktion alle auf einem SQL Server auftretenden Verbindungen und Sicherheitsereignisse verfolgt und gespeichert.

USE [msdb]

GO

--Creating queue

CREATE QUEUE [SecurityEventsQueue]

GO

--Creating service for the queue

CREATE SERVICE [//AdventureWorks.com/SecurityEventsService]

AUTHORIZATION [dbo]

ON QUEUE [dbo].[SecurityEventsQueue]

([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification])

GO

--Creating route for the service

CREATE ROUTE SecurityEventsRoute

WITH SERVICE_NAME = '//AdventureWorks.com/SecurityEventsService',

ADDRESS = 'LOCAL';

GO

--Creating Event Notification to capture connection and secrity-related events

USE [msdb]

GO

CREATE EVENT NOTIFICATION NotifySecurityEvents

ON SERVER

FOR AUDIT_LOGIN,      

       AUDIT_LOGOUT,      

      AUDIT_LOGIN_FAILED,      

      DDL_SERVER_SECURITY_EVENTS,      

      DDL_DATABASE_SECURITY_EVENTS

TO SERVICE '//AdventureWorks.com/SecurityEventsService' ,   

           '9D584F73-1796-4494-ADC2-04BDD729FBCE';

GO

--Creating the service program that will process the event messages that is

--generated via Event Notification objects

IF EXISTS (SELECT * FROM [sys].[objects] WHERE [name] = 'sProcessSecurityEvents')

DROP PROCEDURE [dbo].[sProcessSecurityEvents]

GO

CREATE PROC [dbo].[sProcessSecurityEvents]

AS BEGIN

SET NOCOUNT ON

SET CONCAT_NULL_YIELDS_NULL ON

SET ANSI_PADDING ON

SET ANSI_WARNINGS ON

BEGIN TRY

DECLARE  @message_body [xml]            

             ,@EventTime [datetime]            

            ,@EventType [varchar](128)            

           ,@message_type_name [nvarchar](256)             

           ,@dialog [uniqueidentifier]

-- Endless loop

 

WHILE (1 = 1)

BEGIN

BEGIN TRANSACTION ;

-- Receive the next available message

WAITFOR (RECEIVE TOP(1)                   

                  @message_type_name = [message_type_name],                   

                 @message_body = [message_body],                   

                 @dialog = [conversation_handle]

FROM [dbo].[SecurityEventsQueue]), TIMEOUT 2000

-- Rollback and exit if no messages were found

IF (@@ROWCOUNT = 0)

BEGIN      

        ROLLBACK TRANSACTION;      

        BREAK;

END;

-- End conversation of end dialog message

IF (@message_type_name = 'http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog')

BEGIN      

       PRINT 'End Dialog received for dialog # ' + CAST(@dialog as [nvarchar](40));      

       END CONVERSATION @dialog;

       END;

ELSE

BEGIN      

       SET @EventTime = CAST(CAST(@message_body.query('/EVENT_INSTANCE/PostTime/text()') AS [nvarchar](max)) AS [datetime])      

       SET @EventType = CAST(@message_body.query('/EVENT_INSTANCE/EventType/text()') AS [nvarchar](128))      

       INSERT INTO [master]..[SecurityLog] ([EventType], [EventTime], [EventLog])      

      VALUES (@EventType, @EventTime, @message_body)

END

COMMIT TRANSACTION

END --End of loop

END TRY

BEGIN CATCH

SELECT ERROR_NUMBER()            

            ,ERROR_SEVERITY()            

            ,ERROR_STATE()            

            ,ERROR_PROCEDURE()            

            ,ERROR_LINE()            

            ,ERROR_MESSAGE()

END CATCH

END

GO

--Once service program is created successfully, execute the following script to

--activate our service broker queue and reference this Service Program stored procedure:

ALTER QUEUE [dbo].[SecurityEventsQueue]       

        WITH STATUS = ON      

        ,ACTIVATION (PROCEDURE_NAME = [sProcessSecurityEvents]      

        ,STATUS = ON      

        ,MAX_QUEUE_READERS = 1      

         ,EXECUTE AS OWNER)

GO

Nach dem Einrichten wird die Ereignisbenachrichtigung getestet und danach die Ergebnisse der SecurityLog-Tabelle geprüft.

SQL Server Audit

Zur Nachverfolgung sicherheitsrelevanter Ereignisse auf der Server- wie auch auf Datenbankebene lässt sich auch SQL Server Audit einsetzen, eine Funktion der SQL Server Enterprise Edition, die ab dem SQL Server 2008 verfügbar ist. SQL Server Audit enthält Tools und Prozesse, die zum Aktivieren, Speichern und Anzeigen von Überwachungen benötigt werden.

Überwachte Ereignisse können dabei in die Ereignisprotokolle oder Überwachungsdateien geschrieben werden. Um eine Überwachung zu erstellen, verwendet SQL Server Audit das Feature „erweiterte Ereignisse“. Folgendes Beispiel zeigt wie die Spezifikationen zur Überwachung sämtlicher sicherheitsrelevanter Ereignisse erstellt werden. Voraussetzung dafür ist, dass im ersten Schritt eine dateibasiertes Server Audit definiert wird, das die Basis für die Spezifikation des Server Audits bildet.

USE [master]

GO

CREATE SERVER AUDIT [Audit-SecurityEvents]

TO FILE

(      FILEPATH = N'D:\Demo_SQLAudit'      

      ,MAXSIZE = 200 MB      

      ,MAX_ROLLOVER_FILES = 2147483647      

       ,RESERVE_DISK_SPACE = OFF )

WITH

(      QUEUE_DELAY = 1000      

          ,ON_FAILURE = CONTINUE )

GO

Jetzt wird die Audit-Server-Spezifikation erzeugt, die später die Überwachung der Ereignisse auf Server- und Datenbankebene ermöglicht: zum Beispiel Änderung des Login-Passwortes, Änderung der Zugriffsrechte für Datenbanknutzer und auf Datenbankobjekte, fehlgeschlagene Anmeldeversuche, Änderung der Serverstruktur:

CREATE SERVER AUDIT SPECIFICATION [ServerAuditSpecification]

FOR SERVER AUDIT [Audit-SecurityEvents]

ADD (LOGIN_CHANGE_PASSWORD_GROUP),

ADD (DATABASE_PRINCIPAL_CHANGE_GROUP),

ADD (DATABASE_OBJECT_PERMISSION_CHANGE_GROUP),

ADD (FAILED_LOGIN_GROUP),

ADD (SERVER_PRINCIPAL_CHANGE_GROUP)

GO

Um zu überprüfen, ob die erstellte Server-Audit-Spezifikation korrekt funktioniert, werden einige Ereignisse erstellt. Dann wird anhand der Überwachungsdatei geprüft, ob diese Events tatsächlich auch aufgezeichnet wurden (siehe Abbildung 3).

Abbildung 3

Über den Autor:
Basit Farooq ist ein leitender Datenbank-Administrator, Trainer und technischer Autor. Er hat mehr als ein Jahrzehnt IT-Erfahrung in Sachen Entwicklung, technische Ausbildung und Datenbank-Administration hinsichtlich Plattformen mit Microsoft SQL Server.

Folgen Sie SearchEnterpriseSoftware.de auch auf Facebook, Twitter und Google+!

Artikel wurde zuletzt im Januar 2015 aktualisiert

Pro+

Premium-Inhalte

Weitere Pro+ Premium-Inhalte und andere Mitglieder-Angebote, finden Sie hier.

Erfahren Sie mehr über Datenbanksysteme

0 Kommentare

Älteste Beiträge 

Passwort vergessen?

Kein Problem! Tragen Sie Ihre E-Mail-Adresse unten ein. Wir werden Ihnen eine E-Mail mit Ihrem Passwort schicken.

Ihr Passwort wurde an die folgende E-Mail-Adresse gesendet::

- GOOGLE-ANZEIGEN

SearchSecurity.de

SearchStorage.de

SearchNetworking.de

SearchDataCenter.de

Close