(de) | (en) |
Im Folgenden werden wir ein recht verbreitetes Szenario sehen, wie Sicherheit auf Zeilenebene / Row-Level Security (und auch Zellenebene/Cell-Level Security) implementiert werden kann. Die Architektur ist recht einfach: | In the following we will see a quite common scenario of how Row-Level Security (and also Cell-Level Security) can be implemented. The architecture is quite simple: Of course there are also more complex designs with intermediate tables and multi-role-memberships/permissions, but it all comes down sharing the same vulnerability which I am about to demonstrate. First of all here's a diagram of the high-level architecture: |
Sehen wir uns das ganze also an. | So let’s see it in action. |
Die Spalte „Role“ wird von der Sicht verwendet, um die jeweilige Zeile, unter Verwendung der IS_MEMBER()-Funktion nur Mitgliedern der jeweils hinterlegten Datenbankrolle durchzureichen. | The column “Role” is used by the view to return the respective row by using the IS_MEMBER()-function only to members of the respectively stored database-role. |
Benutzer, Rollen und Berechtigungen: | User(s), Roles and Permissions: |
Erinnern wir uns, was die Tabelle enthält: | Now, remember what our table contains: |
In einer heilen Welt, vor dem Sündenfall, wäre dies ausreichend. | So in an innocent world, before the fall of mankind, this would be sufficient. |
- Natürlich wird die Funktion User_Name() nur für Demo-Zwecke eingesetzt. | - Of course the function User_Name() is only used for demo-purposes. |
Angriff | Attack |
Und das Ergebnis ist: | And the result is: |
Nicht „schön“, aber wir haben, was wir wollten: die „geschützten“ Daten. Der bereits geschulte Leser erkennt diese Form des Angriffs vielleicht aus einem anderen Bereich wieder: SQL Injection. | Not exactly “pretty”, but we got what we want: the “protected” data. The well-educated reader may remember this kind of attack from a different area as well: SQL Injection. |
Einigen kommt das Bild vielleicht schon bekannt vor 🙂 Stellt sicher, dass das nicht Euer "Vorgarten" ist! Wo wir davon reden: | To some, this picture may already look familiar 🙂 Make sure it’s not your "front-yard"! Speaking of which: |
Schutzmaßnahmen Was kann man gegen solche Angriffe tun? 1) Einsatz von gespeicherten Prozeduren, die alle Fehler abfangen, oder, wenn man unbedingt mit Sichten Arbeiten möchte, der Einsatz einer dazwischengeschalteten Multi-Statement-Tabellenwertfunktion 2) Datenverschlüsselung (Nicht TDE!) 3) Ähnlich wie 1, Aufbau einer Mittelschicht in der Anwendung, die derartiges unterbindet. Und schlussendlich sollte man für kritische Daten auch über eine Überwachungslösung nachdenken. | Security-measures What can prevent such forms of attack? 1) The use of stored procedures which catch all errors, or, if one really wants to use views for some reason, using of a multi-statement table valued function which will be put between. 2) Data encryption (Not TDE!) 3) Similar to 1, implementation of a mid-tier in the application which prohibits such actions. Finally one should also think about an Auditing solution for critical data. |
Die hier gezeigte Technik der Row-Level Disclosure ist nicht wirklich etwas Neues, wird aber gerne immer mal vergessen. | The technique of Row-Level Disclosure shown above isn’t really new, but frequently forgotten about. |
Implementing Row- and Cell-Level Security in Classified Databases Using SQL Server 2005
Happy securing,
Andreas
Wer sich ermuntert fühlt, nun einmal richtig in das Thema „Sicherheit mit SQL Server“ einzusteigen, für den habe ich auch 3 erstklassige Trainings im Angebot: | If you now feel encouraged to really dive into the subject of “Security with SQL Server”, I do have 3 first-class Trainings on offer: |
Für Beginner, die hier einen guten Überblick erhalten und Grundlegende Kenntnisse erlernen: | For Starters, who gain a good overview and learn essential knowledge in the basics: |
(SES) SQL Server Security Essentials for Developers & Administrators (1 day) | |
Für Administratoren, die fortgeschrittene Sicherheitskonzepte umsetzen müssen: | For Administrators that have to implement advanced security concepts: |
(SIA) Securityworkshop for SQL Server Administrators (advanced) (1 day) | |
Für Entwickler, die fortgeschrittene Sicherheitskonzepte umsetzen müssen: | For Developers that have to implement advanced security concepts: |
(SID) Securitysworkshop for SQL Server Developers (advanced) (1 day) |