{"id":413,"date":"2019-06-06T10:27:39","date_gmt":"2019-06-06T08:27:39","guid":{"rendered":"https:\/\/wiki.ad-libitum.info\/?page_id=413"},"modified":"2019-06-06T10:37:26","modified_gmt":"2019-06-06T08:37:26","slug":"datenschutz-ab-mysql-8","status":"publish","type":"page","link":"https:\/\/wiki.ad-libitum.info\/?page_id=413","title":{"rendered":"Datenschutz ab MySQL 8"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Must-Do 1: Sicheres SHA-256 Authentifizierungs-Plugins nutzen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Verbindet\n sich ein Anwender mit dem Server, erkennt dieser, welches \nAuthentifizierungs-Plugin (AP) f\u00fcr ihn konfiguriert ist. Im Anschluss \nfordert er den Mitarbeiter auf, das korrekte Zugangspasswort einzugeben.\n In der Vergangenheit kam es dabei durchaus vor, dass zwei oder mehrere \nNutzer dasselbe <a target=\"_blank\" href=\"https:\/\/www.security-insider.de\/was-ist-ein-sicheres-passwort-a-572229\/\" rel=\"noreferrer noopener\">Passwort<\/a> mit demselben <a target=\"_blank\" href=\"https:\/\/www.security-insider.de\/was-ist-ein-hash-a-635712\/\" rel=\"noreferrer noopener\">Hash<\/a>-Wert benutzt hatten. <a target=\"_blank\" href=\"https:\/\/www.security-insider.de\/was-ist-ein-hacker-a-596399\/\" rel=\"noreferrer noopener\">Hacker<\/a>\n haben so leichtes Spiel und k\u00f6nnen mithilfe einer Rainbow Table in die \nDatenbank eindringen und den Zugang durch \u00c4nderung des Passwortes \n\u00fcbernehmen.<br><br>Mit dem MySQL-Update auf Release 8.0 ist dies kaum \nmehr m\u00f6glich. Es ersetzt den SHA1-Algorithmus des standardisierten AP \ndurch den sichereren SHA-256, genannt \u201a<em>caching_sha2_password<\/em>\u2018. Es\n erm\u00f6glicht die Verwendung von Salted Passwords. Diese kombinieren das \nNutzerpasswort mit einem zuf\u00e4llig generierten Datensatz (Salt). Zudem \nwird das Passwort bei SHA-256 rund 5.000 Mal gehasht. Der Hash-Wert des \nPasswortes l\u00e4sst sich \u00fcber ein einziges Rainbow Table nun nicht mehr \nermitteln. Ein Hacker m\u00fcsste nun f\u00fcr jeden denkbaren Salt eine \nvollst\u00e4ndige Rainbow Table anlegen. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">So erfolgt die Konfiguration in MySQL 8.0:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Mit folgenden Codes lassen sich neue Anwender mit \u201a<em>caching_sha2_password<\/em>\u2018 anlegen:<\/p>\n\n\n\n<p><code>mysql&gt; CREATE USER \u2018user_1\u2019@\u20191.1.1.1\u2019 IDENTIFIED BY \u2018Hpdclim1@#$\u2019;<br>Query OK, 0 rows affected (3.26 sec)<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>mysql&gt; SELECT host, user, plugin FROM mysql.user WHERE user = \u2018user_1\u2019;<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>+\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014+\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014+\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014-+<br>|&nbsp;host&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;user&nbsp;&nbsp;&nbsp;|&nbsp;plugin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>+\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014+\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014+\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014-+<br>|&nbsp;1.1.1.1&nbsp;|&nbsp;user_1&nbsp;|&nbsp;caching_sha2_password&nbsp;|<br>+\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014+\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014+\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014-+<br>1 row in set (0.01 sec)<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr bereits bestehende Anwender gelten folgende Einstellungen:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>mysql&gt; SELECT host, user, plugin FROM mysql.user WHERE plugin = \u2018mysql_native_password\u2019;<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">+\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014+\u2014\u2014\u2014\u2014\u2014\u2014\u2014+\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014-+<br>|&nbsp;host&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;user&nbsp;&nbsp;|&nbsp;plugin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>+\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014+\u2014\u2014\u2014\u2014\u2014\u2014\u2014+\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014-+<br>|&nbsp;1.1.1.1&nbsp;|&nbsp;usr_2&nbsp;|&nbsp;mysql_native_password&nbsp;|<br>+\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014+\u2014\u2014\u2014\u2014\u2014\u2014\u2014+\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014-+<br>1 row in set (0.03 sec)<\/p>\n\n\n\n<p><code>mysql&gt; ALTER USER \u2018usr_2\u2019@\u20191.1.1.1\u2019 IDENTIFIED WITH caching_sha2_password BY \u2018Hpdclim1@#$\u2019;<br>Query OK, 0 rows affected (0.15 sec)<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>mysql&gt; SELECT host, user, plugin FROM mysql.user WHERE plugin = \u2018mysql_native_password\u2019;<br>Empty set (0.00 sec)<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Must-Do 2: Rollenbasierte stufenlose Zugriffsrechte festsetzen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Unternehmen\n k\u00f6nnen die Sicherheit f\u00fcr ihre Datenbank dar\u00fcber hinaus durch \neingeschr\u00e4nkte Zugriffsmandate erh\u00f6hen: Nicht jeder Mitarbeiter ben\u00f6tigt\n Zugriff auf alle Informationen, die in der Datenbank hinterlegt sind. \nIT-Administratoren k\u00f6nnen in der neuen Datenbankversion jedem \nMitarbeiter rollenbasierte Zugriffsrechte einr\u00e4umen, indem sie ihm die \nben\u00f6tigten Datenzugriffe zuschreiben und diese auch gezielt verwalten. \nDamit sind gleichzeitig Sicherheitsstandards wie <a target=\"_blank\" href=\"https:\/\/www.security-insider.de\/dsgvo\/\" rel=\"noreferrer noopener\">DSGVO<\/a>, DISA und CIS gew\u00e4hrleistet. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Unternehmen,\n die auf rollenbasierte Zug\u00e4nge verzichten, r\u00e4umen ihren Mitarbeitern \nh\u00f6here Privilegien ein als n\u00f6tig und riskieren damit die \nDatensicherheit. Denn haben Mitarbeiter vollumf\u00e4ngliche Zugriffrechte \nauf die Inhalte der Datenbank, erh\u00e4lt auch der Angreifer, der ihren <a target=\"_blank\" href=\"https:\/\/www.security-insider.de\/was-ist-ein-account-a-799384\/\" rel=\"noreferrer noopener\">Account<\/a>\n hackt, eine komplette Dateneinsicht. Sind die Zugriffsrechte allerdings\n von vornherein eingeschr\u00e4nkt, verringert sich der Schaden um ein \nVielfaches.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Must-Do 3: Richtlinien vorgeben zur \u00c4nderung des aktuellen Passworts<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mit\n der neuen Datenbankversion MySQL 8.0 l\u00e4sst sich f\u00fcr jeden Anwender die \nRichtlinie \u201eAktuelles Passwort \u00e4ndern\u201c aktivieren. Das sollte m\u00f6glichst \nf\u00fcr alle Anwender erfolgen. Vorteil: Ist die Generierung eines neuen \nPasswortes mit der Eingabe des aktuellen Passwortes verkn\u00fcpft, bleibt \ndieser Zugriff dem Angreifer verwehrt. Nur IT-Administratoren und der \nMitarbeiter haben Zugriff auf das aktuelle Passwort und k\u00f6nnen dieses \n\u00e4ndern.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gef\u00e4hrdet also ein Angreifer den Host-Computer und \nverwendet eine Web Shell, um auf die Datenbanksitzung des Anwenders \nzuzugreifen, konnte dieser ihn bisher abmelden und ein neues Passwort \nfestlegen. Durch die allgemeine Richtlinie ist dies nun nicht mehr \nm\u00f6glich.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">So erfolgt die Konfiguration in MySQL 8.0:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Um\n die Richtlinie global festzulegen, wie das aktuelle Passworts ge\u00e4ndert \nwerden soll, sollten IT-Administratoren folgende Zeile in die \nmy.cnf-Datei des Servers kopieren:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>[mysqld]<br>password_require_current=ON<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Must-Do 4: Richtlinien festlegen zur Wiederverwendung von Passw\u00f6rtern<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Der\n Kontozugriff l\u00e4sst sich weiter sichern, wenn die Passwortnutzung \ngeregelt ist. Unternehmen sollten hierzu Richtlinien aufstellen, die \nklar aufzeigen, wie oft Anwender dieselben Passw\u00f6rter erneut verwenden \nd\u00fcrfen. Die Beschr\u00e4nkung kann dabei auf der Anzahl der zur\u00fcckliegenden \nPasswort\u00e4nderungen, der verstrichenen Zeit oder beidem basieren. So \nbleibt Anwendern beispielsweise untersagt, eines der letzten sechs \nverwendeten Passw\u00f6rter oder ein im vergangenen Jahr verwendetes Passwort\n erneut zu gebrauchen. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">So erfolgt die Konfiguration in MySQL 8.0:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Um\n die Nutzung der letzten sechs verwendeten Passw\u00f6rter oder die \nPassw\u00f6rter der letzten 365 Tage zu verbieten, sollten IT-Administratoren\n folgende Zeilen in die my.cnf-Datei des Servers eingeben: <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>[mysqld]<br>password_history=6<br>password_reuse_interval=365<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Must-Do 5: Verschl\u00fcsselungsalgorithmus aktivieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Der\n FIPS-Modus ist ein anerkannter Verschl\u00fcsselungsalgorithmus auf der \nServerseite. Er enth\u00e4lt verschiedene Replikationen (Master-\/Slave- und \nGruppenreplikation) und das X-Plugin unter Verwendung bestimmter \nVerschl\u00fcsselungschiffren bei der Client-Server-Kommunikation. Das \nsichert die Verbindung zwischen Nutzer und Server. Aber auch der \nFIPS-Modus kann nicht den Aufbau einer unverschl\u00fcsselten Verbindung \nverhindern.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mit dem Update auf MySQL 8.0 unterst\u00fctzt der Datenbankserver den FIPS-Modus. Er muss allerdings mit <a target=\"_blank\" href=\"https:\/\/www.security-insider.de\/was-ist-openssl-a-698279\/\" rel=\"noreferrer noopener\">OpenSSL<\/a>\n genutzt werden. Au\u00dferdem m\u00fcssen eine OpenSSL-Bibliothek sowie ein \nFIPS-Objektmodul zur Laufzeit verf\u00fcgbar sein. Empfohlen wird, den \nFIPS-Modus zu aktivieren und immer verschl\u00fcsselte Verbindungen \nherzustellen.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">So erfolgt die Konfiguration in MySQL 8.0:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Zur Aktivierung des FIPS-Modus f\u00fcgt der IT-Administrator folgende Zeilen in die my.cnf-Datei des Servers ein: <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>[mysqld]<br>ssl_fips_mode=1<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Must-Do 6: Accounts wechseln von SUPER auf dynamische Berechtigungen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In MySQL 8.0 sind nach dem Update viele Operationen, die bisher das SUPER-Privileg erforderten, auch mit dynamischen <a target=\"_blank\" href=\"https:\/\/www.security-insider.de\/was-sind-berechtigungen-a-672809\/\" rel=\"noreferrer noopener\">Berechtigungen<\/a>\n mit begrenzter Reichweite m\u00f6glich. Der Wechsel verbessert die \nSicherheit. Datenbankadministratoren k\u00f6nnen die SUPER-Zugriffrechte \nunterbinden und die Benutzerberechtigung enger auf die Aufgaben der \nAnwender zuschneiden. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Verwendung dynamischer Berechtigungen \nkn\u00fcpft die Zugriffsrechte eines Mitarbeiters zudem an einen Kontext. Das\n kann beispielsweise der Standort oder der Zeitpunkt des Zugriffs sein. \nDer Server pr\u00fcft bei jedem Zugriff die Benutzerberechtigungen von Neuem \nund entscheidet, wie viel Zugriff er zul\u00e4sst. Das erschwert Hackern den \nexternen Zugriff auf die Datenbank.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">So erfolgt die Konfiguration in MySQL 8.0:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">IT-Administratoren sollten folgende Abfrage ausf\u00fchren, um Konten mit SUPER-Rechten zu identifizieren:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>mysql&gt; GRANT BINLOG_ADMIN ON *.* TO \u2018admin_log\u2019@\u20191.1.1.1\u2019;<br>Query OK, 0 rows affected (0.03 sec)<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>mysql&gt; REVOKE SUPER ON *.* FROM \u2018admin_log\u2019@\u20191.1.1.1\u2019;<br>Query OK, 0 rows affected, 1 warning (0.14 sec)<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Anschlie\u00dfend\n ordnen Sie jedem der oben aufgef\u00fchrten Konten das geringste ben\u00f6tigte \nPrivileg zu und entziehen den Konten das SUPER-Privileg. Beispiel: Wenn \nder Benutzer &#8218;admin_log&#8217;@&#8217;1.1.1.1.1.1&#8216; SUPER f\u00fcr die Bereinigung bin\u00e4rer\n Protokolle ben\u00f6tigt, f\u00fchrt der Administrator Folgendes aus:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>mysql&gt; GRANT BINLOG_ADMIN ON *.* TO \u2018admin_log\u2019@\u20191.1.1.1\u2019;<br>Query OK, 0 rows affected (0.03 sec)<\/code><\/p>\n\n\n\n<p<code>>mysql&gt; REVOKE SUPER ON *.* FROM \u2018admin_log\u2019@\u20191.1.1.1\u2019;<br>Query OK, 0 rows affected, 1 warning (0.14 sec)<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Must-Do 7: Redo-Log- und Undo-Log-Daten verschl\u00fcsseln<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Redo-Daten und Undo-Daten enthalten sensible Informationen \u00fcber Vorg\u00e4nge in der Datenbank. Eine <a target=\"_blank\" href=\"https:\/\/www.security-insider.de\/was-ist-verschluesselung-a-618734\/\" rel=\"noreferrer noopener\">Verschl\u00fcsselung<\/a>\n dieser Daten \u2013 selbst im Ruhezustand \u2013 ist unerl\u00e4sslich f\u00fcr die \nSicherheit der Datenbank. MySQL 8.0 nutzt Redo- und \nUndo-Log-Datenverschl\u00fcsselungen, wenn ein Mitarbeiter Daten in der \nDatenbank schreibt und \u00e4ndert oder von einer Festplatte ausliest. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">So erfolgt die Konfiguration in MySQL 8.0:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Die\n Redo-Log- und die Undo-Log-Verschl\u00fcsselung sind standardm\u00e4\u00dfig \ndeaktiviert. Nachdem die IT-Administratoren die \nVerschl\u00fcsselungsvoraussetzungen konfiguriert haben, f\u00fcgen sie folgende \nZeilen in die my.cnf-Datei des Servers ein und aktivieren damit die \nChiffrierung:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>[mysqld]<br>innodb_redo_log_encrypt=ON<br>innodb_undo_log_encrypt=ON<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die\n Sicherheitseinstellungen in MySQL 8.0 sind schnell vorgenommen. Der \nSchutz der Datenbank erh\u00f6ht sich nachhaltig. Mit den sieben Must-Dos ist\n ein wichtiger Schritt weg von kompromittierten Datenbanken getan, die \nmeist das Ergebnis schlechter oder gar unterlassener Konfiguration sind \nund Angreifern den Zugriff erleichtern.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Must-Do 1: Sicheres SHA-256 Authentifizierungs-Plugins nutzen Verbindet sich ein Anwender mit dem Server, erkennt dieser, welches Authentifizierungs-Plugin (AP) f\u00fcr ihn konfiguriert ist. Im Anschluss fordert er den Mitarbeiter auf, das korrekte Zugangspasswort einzugeben. In der Vergangenheit kam es dabei durchaus vor, dass zwei oder mehrere Nutzer dasselbe Passwort mit demselben Hash-Wert benutzt hatten. Hacker haben [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-413","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/wiki.ad-libitum.info\/index.php?rest_route=\/wp\/v2\/pages\/413","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wiki.ad-libitum.info\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wiki.ad-libitum.info\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wiki.ad-libitum.info\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/wiki.ad-libitum.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=413"}],"version-history":[{"count":0,"href":"https:\/\/wiki.ad-libitum.info\/index.php?rest_route=\/wp\/v2\/pages\/413\/revisions"}],"wp:attachment":[{"href":"https:\/\/wiki.ad-libitum.info\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=413"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}