Privilege Analysis in der Oracle-Datenbank Du bekommst nur das, was du wirklich brauchst!

Die Seite wird erstellt Susanne Schilling
 
WEITER LESEN
Privilege Analysis in der Oracle-Datenbank Du bekommst nur das, was du wirklich brauchst!
Datenbank

     Privilege Analysis in der
     Oracle-Datenbank
     Du bekommst nur das,
     was du wirklich brauchst!
                                                 Markus Flechtner, Trivadis Germany

34    www.aoug.at • www.doag.org • www.soug.ch
Privilege Analysis in der Oracle-Datenbank Du bekommst nur das, was du wirklich brauchst!
Welche Rechte braucht ein Datenbank-Benutzer wirklich? Eine einfache Frage, der allerdings in der Ver-
gangenheit meist nur wenig Beachtung geschenkt wurde. Funktionalität hatte Priorität, Sicherheit war
zweitrangig. Aber die Sicherheit von Datenbanken und Datenbank-Anwendungen wird immer wichtiger
und auch sonst kommt diese Frage wieder auf die Tagesordnung. Bei der Beantwortung hilft das Oracle-
Feature „Privilege Analysis“.

Jede Anwendung, jeder Benutzer soll nur          ren können – für die Tests auf die Express          Die Prozeduren des Packages DBMS_
die Rechte bekommen, die für die Erfül-          Edition der Datenbank (Oracle 18c XE)            PRIVILEGE_CAPTURE beschreiben grob
lung der jeweiligen Aufgabe notwendig            ausweichen, denn auch dort ist Privilege         den Ablauf einer Analyse (siehe Tabelle 1).
sind. Dieses Prinzip, „Least-Privilege-Prin-     Analysis dabei.                                     Die Data-Dictionary-Tabellen und
zip“ genannt, im Original „Every program                                                          -Views finden sie in Tabelle 2 und die Er-
and every privileged user of the system                                                           gebnis-Views in Tabelle 3.
should operate using the least amount of         Was stellt Oracle zur                               Die Views mit dem „PATH“ im Namen
privilege necessary to complete the job.“,       Verfügung?                                       geben dabei auch den Grant-Pfad an, das
wurde erstmals von Jerome Saltzer in den                                                          heißt, es wird ersichtlich, über welche ge-
1970ern formuliert [1]. Leider wird die-         Für die Analyse der benötigten Rechte stellt     gebenenfalls verschachtelten Rollen ein
ses Prinzip im Alltag nicht immer beach-         Oracle ein Framework bereit, das aus ei-         Benutzer ein Recht bekommen hat.
tet. Installationsskripte von Software-Her-      nem Package (DBMS_PRIVILEGE_CAPTURE)                Im Rahmen einer derartigen Analyse
stellern beginnen mit dem Befehl „GRANT          und einer Menge von Data Dictionary Views        wird zwar nicht protokolliert, wann ge-
DBA TO ..“ oder die internen Entwick-            (DBA_USED%-Views und. DBA_UNUSED_%-              nau eine gewisse Aktion erfolgt ist bezie-
ler fordern erst mal ein ganzes Paket an         Views) besteht. Damit man dieses Frame-          hungsweise wann ein bestimmtes Recht
Rechten. Die Analyse, welche davon wirk-         work nutzen kann, muss dem entspre-              erforderlich war, aber insbesondere bei
lich benötigt werden, entfällt oder wird         chenden Datenbank-Benutzer die Rolle             personalisierten Accounts können aus
vergessen. Kurz gesagt: Dieser Aspekt der        CAPTURE_ADMIN zugewiesen werden.                 den Analysen Rückschlüsse auf das Be-
Datenbank-Sicherheit ist in der Vergan-
genheit oft zu kurz gekommen.
    „Privilege Analysis“ hilft nun, diese Ver-
                                                  Prozedur                                Verwendungszweck
säumnisse der Vergangenheit zu korri-
gieren und dem „Least-Privilege-Prinzip“          CREATE_CAPTURE                          Definieren einer Policy
näher zu kommen, denn es hilft, die fol-          ENABLE_CAPTURE                          Aktivieren der Datensammlung
genden Fragen zu beantworten:
                                                  DISABLE_CAPTURE                         Beenden der Datensammlung

•   Welche Rechte hat ein Benutzer (bzw.          GENERATE_RESULT
                                                                                          Übertragen der gesammelten Daten in das
                                                                                          Data Dictionary
    eine Applikation) bei der Verwendung
    einer Anwendung mindestens einmal                                                     Löschen einer Policy inkl. der gesammelten
                                                  DROP_CAPTURE
                                                                                          Daten
    benötigt und wie hat er dieses Recht
    bekommen?                                                                             Löschen eines einzelnen Durchlaufes inkl. der
                                                  DELETE_RUN
                                                                                          gesammelten Daten
•   Welche Rechte hat ein Benutzer bekom-
    men, die aber nicht benötigt werden?          CAPTURE_DEPENDENCY_PRIVS                Sammelt Rechte, die bei der Kompilierung von
                                                                                          PL/SQL-Objekten (definer’s and invoker’s rights)
                                                                                          erforderlich sind.
Privilege Analysis hat Oracle mit der Da-
tenbank-Version 12c Release 1 (12.1) ein-        Tabelle 1: Prozeduren des Packages DBMS_PRIVILEGE_CAPTURE
geführt. Leider gab es damals einen li-
zenztechnischen Haken: Das Feature war
mit Database Vault verknüpft, einer Opti-
                                                  Tabelle/View                     Inhalt
on, die nur die wenigsten Kunden lizen-
ziert haben. Erst im November 2018 hat            DBA_PRIV_CAPTURES                Zeigt die vorhandenen Policies und die Testläufe
Oracle die Lizenzierungsbedingungen ge-           PRIV_CAPTURE$                    (Grundlage für DBA_PRIV_CAPTURES)
ändert und Privilege Analysis für alle Kun-
                                                  CAPTURED_PRIV$                   Genutzte Rechte, Grundlage für die Ergebnis-Views
den der Enterprise Edition verfügbar ge-
macht. Nutzer der Datenbank Standard              CAPTURE_RUN_LOG$                 Informationen über die durchgeführten Testläufe,
                                                                                   inkl. Start- und Ende-Zeitpunkt
Edition 2 können – wenn sie ihre Daten-
menge auf 12 GB oder weniger reduzie-            Tabelle 2: Data-Dictionary-Tabellen und -Views

                                                                                                          Red Stack Magazin 04/2021             35
Privilege Analysis in der Oracle-Datenbank Du bekommst nur das, was du wirklich brauchst!
Datenbank

     nutzerverhalten gezogen werden. Daher                                                                    Views für vergebene, aber nicht
     kann es ratsam sein, vorher den Betriebs-          Views für genutzte Rechte
                                                                                                              genutzte Rechte
     rat zu kontaktieren. Stichwort: Überwa-
                                                                                             Überblick (alle Rechte)
     chung der Mitarbeiter.
                                                        DBA_USED_PRIVS                                        DBA_UNUSED_PRIVS
                                                                                                   Public-Rechte
     Der Arbeitsablauf                                  DBA_USED_PUBPRIVS                                     DBA_UNUSED_PUBPRIVS
                                                                                                  System-Rechte
     Zuerst muss mittels CREATE_CAPTURE
     eine Policy definiert, also festgelegt wer-        DBA_USED_SYSPRIVS                                     DBA_UNUSED_SYSPRIVS
     den, was protokolliert werden soll (siehe          DBA_USED_SYSPRIVS_PATH                                DBA_UNUSED_SYSPRIVS_PATH
     Listing 1 und 2). Dafür gibt es vier Möglich-                                                Objekt-Rechte
     keiten:
                                                        DBA_USED_OBJPRIVS                                     DBA_UNUSED_OBJPRIVS

     1. Protokollierung aller Aktivitäten in der        DBA_USED_OBJPRIVS_PATH                                DBA_UNUSED_OBJPRIVS_PATH
        Datenbank (Type G_DATABASE)                                                                 User-Rechte
     2. Protokollierung aller Aktivitäten, für          DBA_USED_USERPRIVS                                    DBA_UNUSED_USERPRIVS
        die eine bestimmte Rolle benötigt wird
                                                        DBA_USED_USERPRIVS_PATH                               DBA_UNUSED_USERPRIVS_PATH
        (G_ROLE)
     3. Protokollierung auf Basis eines Kon-           Tabelle 3: Ergebnis-Views
        textes (SYS_CONTEXT) (G_CONTEXT)
     4. Kombination von Rolle und Kontext
        (G_ROLE_CONTEXT)
                                                        Procedure DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE
                                                        Argument Name		  Type				          In/Out Default?
     Für die Einschränkungen des Kontextes
                                                         --------------- ----------------- ------ --------
     können alle Möglichkeiten der Funktion              NAME				        VARCHAR2			       IN
     SYS_CONTEXT genutzt werden, wie zum                 DESCRIPTION		   VARCHAR2			       IN		    DEFAULT
     Beispiel:                                           TYPE				        NUMBER				        IN		    DEFAULT
                                                         ROLES				       ROLE_NAME_LIST		  IN		    DEFAULT

     •   SESSION_USER (angemeldeter Daten-
                                                         CONDITION		     VARCHAR2			       IN		    DEFAULT

         bank-Benutzer, siehe Beispiel)
     •   HOST (Rechner, von dem aus der Be-            Listing 1: Definition der Prozedur CREATE_CAPTURE
         fehl aufgerufen wurde)
     •   OS_USER (Betriebssystembenutzer, der
         den Befehl aufgerufen hat)
     •   MODULE und ACTION (via DBMS_AP-                REM policy to capture all database activities
                                                        execute DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
         PLICATION_INFO)
                                                          name => 'POLICY_ALL_DB_ACTIVITIES',
                                                          description =>'captures all database privileges',
     Eigene Kontexte können über DBMS_SES-                type => DBMS_PRIVILEGE_CAPTURE.G_DATABASE
     SION.SET_CONTEXT definiert werden.                   );
         Bevor die Tests gestartet werden,
     muss die jeweilige Policy aktiviert werden         REM which DBA privileges are used by a specific user
                                                        execute DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
     (siehe Listing 3). Es gilt, dass pro Policy im-
                                                          name => 'POLICY_CAPTURE_SCOTT_DBA',
     mer nur ein „Run“ aktiv sein darf und dass           description =>'captures all required privileges granted to public',
     immer nur eine auf Rolle oder Kontext ba-            type => DBMS_PRIVILEGE_CAPTURE.G_ROLE_AND_CONTEXT,
     sierende Rolle aktiv sein darf. Allerdings           roles => 'DBA',
     darf eine datenbankweite Sammlung zu-                condition=> q'[sys_context('USERENV','SESSION_USER') = 'SCOTT']'
                                                          );
     sätzlich gleichzeitig genutzt werden.
         Der Parameter „run_name“ ist optio-
     nal, aber empfehlenswert, insbesondere            Listing 2: Beispiele für die Definition von Policies
     wenn für eine Policy mehrere Testläufe
     durchgeführt werden sollen.
         Sobald eine Policy aktiviert ist, können
     die Tests beziehungsweise Benutzerakti-            Execute DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE(
                                                         name => 'POLICY_CAPTURE_SCOTT',
     vitäten beginnen. Dabei ist wichtig, um-
                                                         run_name => 'TEST_RUN_20191110');
     fassend zu testen, damit nicht irgendeine
     Funktion vergessen wird, die besondere
     Rechte benötigt. Bei einer späteren Redu-         Listing 3: Aktivieren einer Policy

36       www.aoug.at • www.doag.org • www.soug.ch
zierung der Rechte auf Basis der „Privile-          Analysis auf die Datenbank-Performance            Wichtig: Zu diesem Zeitpunkt sind die
ge Analysis“ würde diese Funktion sonst             sehr gering, sodass eine derartige Ana-       Ergebnisse der Datensammlung noch nicht
nicht mehr fehlerfrei laufen. Wenn Sie ein          lyse auch in einem Produktionssystem          persistent, sondern nur im Hauptspeicher
komplettes Set von automatisierten Tests            durchgeführt werden kann.                     der Datenbank-Instanz vorhanden.
für Ihre Applikation haben, dann spielen               Wenn die Tests abgeschlossen sind,             Das heißt insbesondere, dass beim Ab-
Sie alle Tests einmal durch. Nach meinen            dann kann die Policy, wie in Listing 4 dar-   sturz der Instanz sämtliche gesammelten
Erfahrungen ist der Einfluss von Privilege          gestellt, deaktiviert werden.                 Daten verloren gehen.
                                                                                                      Erst mit dem Befehl DBMS_PRIVILEGE_
                                                                                                  CAPTURE.GENERATE_RESULT werden die
 Execute DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE(                                                  Daten in die Datenbank geschrieben und
  name => 'POLICY_CAPTURE_SCOTT');                                                                können dann ausgewertet werden (siehe
                                                                                                  Listing 5).
Listing 4: Deaktivieren einer Policy

                                                                                                  Auswertung der Ergebnisse
   Execute DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT (
   name => 'POLICY_CAPTURE_SCOTT',                                                                Oracle stellt leider über die DBA_USED_%-
   run_name => 'TEST_RUN_20191110');                                                              und DBA_UNUSED_%-Views hinaus keine
                                                                                                  Hilfsmittel bereit, mit denen die Ergebnis-
Listing 5: Schreiben der gesammelten Daten in die Datenbank                                       se ausgewertet und die Korrekturen im-
                                                                                                  plementiert werden können. Hier ist man
                                                                                                  auf eigene Abfragen angewiesen (siehe
 SQL> select USED_ROLE,SYS_PRIV,PATH                                                              Listing 6).
   2   from DBA_USED_SYSPRIVS_PATH                                                                    Im Beispiel (siehe Listing 6) sieht man,
   3   where CAPTURE='POLICY_CAPTURE_SCOTT'                                                       dass der User SCOTT die Rechte „SELECT
   4   and RUN_NAME= 'TEST_RUN_20191110';
                                                                                                  ANY TABLE“ und „ANALYZE ANY“ über die
 USED_ROLE		  SYS_PRIV			         PATH
 ------------ ----------------- -------------------------------                                   Rolle „SECRET“ bekommen hat.
 SECRET			    SELECT ANY TABLE GRANT_PATH('SCOTT', 'SECRET')                                          Auf Basis der gesammelten Daten kön-
 SECRET			    ANALYZE ANY		      GRANT_PATH('SCOTT', 'SECRET')                                    nen dann GRANT-Befehle generiert werden,
 CONNECT		    CREATE SESSION		   GRANT_PATH('SCOTT', 'CONNECT')                                   mit denen einem Benutzer die benötigten
                                                                                                  Rechte zugewiesen werden (siehe Listing 7).
Listing 6: Beispielabfrage auf DBA_USED_SYSPRIVS_PATH                                                 Listing 8 wandelt Objekt-Zugriffe, für
                                                                                                  die im Test „ANY“-Rechte genutzt wurden,
                                                                                                  in objektspezifische GRANT-Befehle um
 SQL> SELECT 'grant '||sys_priv||' to SCOTT_ROLE;' GRANT_PRIV                                     und macht so die kritischen „ANY-Rechte“
   2   FROM DBA_USED_PRIVS where SYS_PRIV not like '%ANY%'                                        überflüssig.
   3   and CAPTURE='POLICY_CAPTURE_SCOTT'                                                             Hat der Nutzer eigene Views oder PL/
   4   and RUN_NAME= 'TEST_RUN_20191110';
                                                                                                  SQL-Objekte, die auf fremde Objekte ver-
                                                                                                  weisen, so sind direkte Grants erforder-
Listing 7: Generieren der gemäß Analyse erforderlichen System-Rechte                              lich. In diesem Fall sollten die Abfragen
                                                                                                  gegebenenfalls mit DBA_DEPENDENCIES
                                                                                                  verknüpft werden, um solche Abhängig-
 SQL> SELECT DISTINCT 'grant '||                                                                  keiten zu ermitteln.
   2   CASE SYS_PRIV
   3		     WHEN 'SELECT ANY TABLE' THEN 'SELECT'
   4		     WHEN 'EXECUTE ANY PROCEDURE'THEN 'EXECUTE'
                                                                                                  Privilege Analysis im Oracle
   5			        WHEN 'INSERT ANY TABLE' THEN 'INSERT'
   6		     WHEN 'UPDATE ANY TABLE' THEN 'UPDATE'
                                                                                                  Enterprise Manager Cloud
   7			        WHEN 'DELETE ANY TABLE' THEN 'DELETE'                                              Control
   8			        WHEN 'ANALYZE ANY' THEN 'ANALYZE'
   9			        WHEN 'SELECT ANY SEQUENCE' THEN 'SELECT'                                           Auch mit dem Enterprise Manager kann
  10		     ELSE                                                                                   man Policies definieren, aktivieren und
  11			        OBJ_PRIV
                                                                                                  sich die Ergebnisse anzeigen lassen (siehe
  12			        END
  13   ||' on '||OBJECT_OWNER||'.'|| OBJECT_NAME||                                                Abbildung 2). Die in Abbildung 1 aufgeführ-
  14   ' to SCOTT_ROLE;' GRANT_PRIV                                                               te Policy ORA$DEPENDENCY dient dazu,
  15   FROM DBA_USED_PRIVS where capture='POLICY_CAPTURE_SCOTT'                                   zusätzlich benötigte Rechte für den Zu-
  16   AND object_name is not null;                                                               griff auf Funktionen, Prozeduren etc. zu
                                                                                                  protokollieren, und sollte bei einer Aus-
Listing 8: Generieren der erforderlichen Objekt-Rechte (basierend auf [2])                        wertung nicht vergessen werden.

                                                                                                          Red Stack Magazin 04/2021              37
Datenbank

     Abbildung 1: Anzeige der vorhandenen Policies im OEM (Quelle: Markus Flechtner)

     Abbildung 2: Anzeige der Ergebnisse im OEM (Quelle: Markus Flechtner)

     Fazit                                            Quellen und weitere                                   https://docs.oracle.com/en/database/
                                                                                                            oracle/oracle-database/19/dbseg/performing-­
                                                      Informationen                                         privilege-analysis-find-privilege-use.­
     Privilege Analysis ist ein sehr hilfreiches      [1] Jerry H. Saltzer, Mike D. Schroeder (Sep-         html#GUID-44CB644B-7B59-4B3B-B375-
     Werkzeug, um das Least-Privilege-Prin-               tember 1975). “The protection of infor-           9F9B96F60186
     zip für Datenbank-Applikationen zu errei-            mation in computer systems”.
                                                          http://web.mit.edu/Saltzer/www/­
     chen. Durch die Änderung der Lizenzie-               publications/protection/
     rung im November 2018 hat Oracle die                 Proceedings of the IEEE. 63                   Über den Autor
     Nutzung dieses Werkzeugs erfreulicher-           [2] Norman Sibbing: Least Privileges mit
                                                          Privilege Analysis:
     weise einem größeren Anwenderkreis er-               https://apex.oracle.com/pls/apex/germancom-   Markus Flechtner begann seine Tätigkeit
     möglicht.                                            munities/dbacommunity/tipp/7141/index.html    im Oracle-Umfeld in den 1990ern als Soft-
        Privilege Analysis sollte schon in Tests      [3] Dokumentation zu DBMS_PRIVILEGE_              ware-Entwickler in den Bereichen PL/SQL,
                                                          CAPTURE:
     eingesetzt werden, um etwaige Sicher-                https://docs.oracle.com/en/database/oracle/
                                                                                                        Oracle-Forms und Oracle-Reports. Spä-
     heitslücken frühzeitig zu erkennen. We-              oracle-database/19/arpls/DBMS_PRIVILEGE_      ter wechselte der Diplom-Mathematiker
     sentlich ist aber, dass diese Tests alle             CAPTURE.html#GUID-6522AC3E-A457-              in den Oracle Support und spezialisierte
                                                          4C7B-8996-B065957F73E4
     Funktionen der Anwendung beinhalten,                                                               sich auf die Tätigkeit als Datenbankadmi-
                                                      [4] Database Security Guide, Chapter 5
     um wirklich alle benötigten Rechte zu er-            “Performing Privilege Analysis to Find        nistrator. Seit 2008 ist er als Consultant bei
     mitteln.                                             Privilege Use”:                               Trivadis. Seine Schwerpunkte sind Oracle-

38     www.aoug.at • www.doag.org • www.soug.ch
Hochverfügbarkeit sowie Upgrade- bezie-        Bei der Deutschen Oracle-Anwender­
hungsweise Migrationsprojekte.              gruppe (DOAG) ist er seit 2015 Delegier-
   Als Hauptreferent ist er bei Triva-      ter der jährlichen Delegiertenversamm-
dis verantwortlich für die Kurse „Oracle    lung und seit 2019 verantwortlich für den
Database New Features für DBAs“,            Themenbereich „Open-Source-Daten-
„Oracle Multitenant“ und „PostgreSQL        banken“. Er ist Mitautor des Buches „Der
für Oracle-DBAs“; weiterhin ist er Refe-    Oracle DBA: Handbuch für die Administ-
rent für den Kurs „Oracle Real Applica-     ration der Oracle Database 12c“ und wur-
tion Clusters“.                             de 2020 zum Oracle ACE ernannt.
                                                                                             Markus Flechtner
                                                                                        Markus.flechtner@trivadis.com

                                           16. - 18. November
                                                  ONLINE                                             LY B
                                                                                                  EAR ZUM
                                                                                                         IRD
                                                                                                    BIS EPT.
                                                                                                     30. S

                                           2021.doag.org
                                                      iJUG
Eventpartner:                                         Verbund                              Red Stack Magazin 04/2021    39
Sie können auch lesen