Donnerstag, 28. April 2016

April 2016 - MySQL

Im "Modul 151 - Datenbanken in Internetauftritten einbinden" verwenden wir als Datenbank MySQL. Ich habe bisher nur einige Male etwas mit MySQL zu tun gehabt, deshalb möchte ich in diesem Blogeintrag darüber schreiben.


MySQL

Bei MySQL handelt es sich um ein relationales Datenbankenverwaltungssystem. Da es für viele verschiedene Betriebssysteme verfügbar ist, ist es eines der am verbreitetsten Systeme und bildet die Grundlage sehr vieler dynamischer Websites. MySQL wird bereits seit 1994 entwickelt. MySQL wird vorzugsweise zur Datenspeicherung von Webdiensten verwendet und wird dabei häufig in Verbindung mit dem WebServer Apache und PHP eingesetzt, kann jedoch auch für gewöhnliche Desktopapplikationen eingesetzt werden. Die meisten bekannten Websites wie YouTube, Facebook, Twitter, Google etc. verwenden dieses System.


Plattfomen

Wie bereits erwähnt, ist MySQL für viele verschiedene Plattformen verfügbar. Diese sind unter anderem Windows, Mac OS X, Linux und viele Unix-Varianten. Weiterhin ist MySQL auch auf den Betriebssystemen OS/2 und i5/OS sowie Symbian lauffähig.


Verwendung/Struktur

Die Verwendung von MySQL sieht im Allgemeinen so aus, dass ein MySQL-Server, auf welchem die Daten abgespeichert sind, vorhanden ist. Von den Clients werden Anfragen an den Server geschickt, die dieser beantwortet. 
Im Datenbankmanagementsystem können mehrere Datenbanken erstellt und verwaltet werden. In einer Datenbank werden eine oder mehrere Tabellen angelegt. MySQL erstellt dann auf der Festplatte jeweils einen Ordner pro Datenbank, in dem Dateien für die Struktur und die Daten der einzelnen Tabellen abgelegt werden.
Die Spalten der Tabellen haben jeweils einen Datentypen zugeordnet, so dass in der jeweiligen Spalte nur Daten dieses Typs abgespeichert werden können.


Ablauf von Anfragen

Wenn ein Client eine Anfrage an den Server schickt, ist dieser dafür verantwortlich, die Anfrage so performant wie möglich abzuarbeiten.
Dazu wird als erstes der Query-Cache befragt. Der Query-Cache ist ein Zwischenspeicher, in dem die Ergebnisse von Anfragen gespeichert werden. Der Zwischenspeicher bleibt so lange erhalten, bis sich etwas an den Daten in der Datenbank ändert. Befindet sich also nun im Query-Cache eine identische Abfrage wie die, die gerade gestellt wurde, gibt der Server die Antwort aus dem Cache und muss nicht die gesamte Datenbank nochmals befragen. 
Befindet sich keine identische Abfrage im Query-Cache, wird die erhaltene Query zuerst geparst. Das heisst, sie wird zunächst mal auf die Syntax überprüft. Dazu wird sie in die einzelnen Komponenten zerlegt. Gleichzeitig werden grundlegende Informationen über die Query gesammelt, wie etwa die Art der Query (Select- , Insert-, Set-, oder Grant-Statement), sowie die betroffenen Tabellen. Am Ende kennt MySQL den vollständigen Parse-Baum, der danach optimiert wird.
Optimiert wird jede Query, die syntaktisch in Ordnung ist. Der sogenannte Optimizer sucht nach dem effizientesten Weg, die Query zu bearbeiten. In diesem Schritt geht es hauptsächlich darum, die Anzahl der zu lesenden Datensätze zu verringern. Das kann zum Beispiel erreicht werden, wenn bei Datensätzen, die aus mehreren Tabellen gelesen werden müssen, eine geschickte Abfragereihenfolge gewählt wird. Andererseits werden nicht benötigte Tabellen in Join-Anweisungen erst gar nicht gelesen. Nach dieser Prozedur stehen dem Optimizer alternative Möglichkeiten zum Finden der Daten zur Verfügung. Für jede Möglichkeit wird die Ausführungsgeschwindigkeit abgeschätzt und zum Schluss diejenige mit der kürzesten Zeit ausgewählt und durchgeführt.

Speichersubsysteme

In MySQL sind verschiedene Speichersubsysteme enthalten. Speichersubsysteme sind Engines, die sich insofern unterscheiden, als sie jeweils für andere Einsatz-Szenarien optimiert sind. Ausserdem bieten diese Engines mehr Funktionalitäten als reine Speichersubsysteme. Die einzelnen Engines bieten unterschiedliche Funktionen an und weisen je nach Einsatzgebiet auch eine unterschiedliche Performance auf. Je nachdem wozu eine Tabelle genutzt wird, z.B. mehrheitlich lesen oder hauptsächlich schreiben, sollte eine passende Speicherengine gewählt werden. Der Entscheid für oder gegen eine Engine hängt auch von den gegebenen Funktionalitäten ab.
MySQL kann auch mit eigenen Speicherengines erweitert werden.



Administration

Für die Verwaltung und Administration von MySQL-Datenbanken steht der mitgelieferte Kommandozeilen-Client zur Verfügung. Weitere Kommandozeilenwerkzeuge sind im Funktionsumfang enthalten. Beispielsweise Tools zur Anzeige von Metadaten einer Datenbank oder Tabelle, anzeigen von erweiterten Informationen zu Fehlercodes sowie Import und Export von Tabellenstrukturen.
Als grafische Benutzeroberfläche zur Verwaltung wird MySQL Workbench angeboten.


Mysqlwb-homepage.png
MySQL Workbench


Als Alternative gibt es die Open-Source-Anwendung phpMyAdmin, die beispielsweise auch zusammen mit XAMPP geliefert wird. Die Benutzeroberfläche lässt sich über den Browser bedienen. phpMyAdmin wird hauptsächlich zur Verwaltung von MySQL-Datenbanken auf WebServern verwendet.

Bildschirmfoto von phpMyAdmin
phpMyAdmin


Dienstag, 12. April 2016

März 2016 - DDoS

In der Schule beschäftigen wir uns im Modul 151 - "Datenbanken in Internetauftritt einbinden" mit der Sicherheit und den Schwachstellen bei Webservern. In Zweiergruppen bearbeiten wir jeweils ein Thema. Wir haben das Thema DoS/DDoS zugeteilt bekommen.

(D)DoS

DoS, im Allgemeinen, steht für Denial of Service, was zu Deutsch etwa "Dienstverweigerung" bedeutet. In der Informatik bezeichnet dieser Begriff die Nichtverfügbarkeit eines Dienstes, der eigentlich verfügbar sein sollte. In der Regel spricht man von DoS als Folge einer Überlastung von Infrastruktur, obwohl die Nichtverfügbarkeit eines Dienstes auch die Folge von verschiedenen anderen Gründen sein kann. Eine solche Überlastung kann natürlich unbeabsichtigt auftreten, jedoch auch durch einen absichtlichen, gezielten Angriff auf einen Server. Sofern die Überlastung oder eben der gezielte Angriff von mehreren Systemen verursacht wird, spricht man von "Distributed Denial of Service" (DDoS).

Funktionsweise

Bei einem gezielten Angriff auf ein System wird von den Angreifern versucht, ein oder mehrere Online-Dienste arbeitsunfähig zu machen. DoS-Angriffe können den Internetzugang, die Dienste des Host (z.B. HTTP) oder das ganze Betriebssystem belasten. Dies kann erreicht werden, indem eine massiv höhere Anzahl an Anfragen an den Server geschickt wird, als dieser verarbeiten kann. Dadurch kann er auf reguläre Anfragen nur mehr sehr langsam oder überhaupt nicht mehr reagieren. Wesentlich effizienter ist es jedoch, einen Programmfehler auszunutzen, um eine Fehlfunktion der Serversoftware auszulösen, die möglicherweise den gesamten Server zum Absturz bringt, worauf dieser natürlich ebenfalls auf keine Anfragen mehr reagiert. Der Unterschied zu anderen Angriffen besteht im Wesentlichen darin, dass bei einem DoS-Angriff der Angreifer normalerweise nicht in den Computer eindringen muss und deshalb auch keine Passwörter oder Ähnliches vom Zielrechner benötigt.
Es existiert ein sehr einfach zu bedienendes Tool, das man im Internet finden kann. Mit diesem ist es möglich, einen DoS-Angriff auf einen mit dem Internet verbundenen Rechner zu starten.
Da für das Tool kein grösseres Fachwissen benötigt wird, wird es häufig bei Protestaktionen eingesetzt.


Schematische Darstellung eines DDoS-Angriffs





DRDoS

Eine besondere Form, die zugleich schwieriger zurückzuverfolgen ist, ist der DRDoS-Angriff (Distributed Reflected Denial of Service). Bei dieser Form schickt der Angreifer seine Datenpakete nicht direkt an den Zielrechner, sondern an einen regulär arbeitenden Internetdienst, trägt jedoch als Absenderadresse der Datenpakete die Adresse des Ziels ein. Der Internetdienst schickt die Antworten auf die Anfragen des Angreifers also an das Ziel und verursacht somit den eigentlichen DoS-Angriff.  



Botnetze

Ein mutwilliger DDoS-Angriff wird oftmals mit Hilfe von Botnetzen durchgeführt. Ein Botnetz ist eine Gruppe von automatisierten Computerprogrammen. Diese Programme, die sogenannten Bots, laufen auf vernetzten Rechnern, deren Netzwerkanbindungen und die lokalen Ressourcen den Bots zur Verfügung stehen. Die Bots werden von einem Angreifer ohne das Wissens des Inhabers auf dessen Rechner installiert. Meist ist es sogar der Fall, dass die Bots selbstständig versuchen, weitere Rechner in einem Netzwerk zu infizieren.
Verfügt der Angreifer nun über ein solches Botnetz, kann er den infizierten Rechnern Befehle schicken, dass sie Anfragen an einen Internetdienst schicken sollen. Je grösser das Botnetz ist, desto erfolgreicher kann mit dessen Hilfe ein DDoS-Angriff durchgeführt werden.




Herkömmliche Überlastungen

Es kann auch der Fall sein, dass ein Dienst überlastet wird, weil eine grosse Anzahl Anfragen von Besuchern kommen (die nicht die Absicht haben, den Dienst zu überlasten), die der Server bis dahin nie verarbeiten können musste. Das kann dann geschehen, wenn eine eher kleinere Seite, vor allem durch Online-Newsseiten, bekannt gemacht wird, wodurch ein Teil der vielen Nutzer automatisch die neue Seite besucht. In solch einem Fall spricht man dann von einem Slashdot-Effekt.



Gegenmassnahmen

Je nachdem ob es sich um einen mutwilligen Angriff oder eine herkömmlichen Überlastung handelt, muss man entscheiden, wie man vorgeht.
Wurde die Überlastung durch eine hohe Besucheranzahl verursacht und nicht durch einen gezielten Angriff, sollte man am besten die eigene Serverhardware aufrüsten, um dem Besucherandrang gewachsen zu sein.

Will man sich jedoch vor DDoS-Attacken schützen, gibt es verschiedene Möglichkeiten, um diese abzuwehren.
Wenn der Angriff von nur wenigen Rechnern aus kommt, können einfache Sperrlisten von der Firewall eingesetzt werden. Datenpakete von IP-Adressen auf dieser Sperrliste werden automatisch verworfen. Oftmals kann eine Firewall auch simple Angriffe automatisch erkennen und diese Sperrliste dynamisch erzeugen.
Verhaltensbasierte Analyse- und Filtermassnahmen können auf dem Server und auch auf dem Router eingerichtet werden.
Falls dem Angreifer nur die IP-Adresse bekannt ist, reicht es, die Public-IP-Adresse zu ändern. Erfolgt der Angriff aber über einen öffentlichen DNS-Hostname, bringt diese Massnahme nahezu nichts.
Eine dauerhafte aber auch ziemlich teurere Möglichkeit ist die Nutzung eines Filter-Services. Solche Dienste werden von verschiedenen kommerziellen Anbietern gehostet. Jeglicher Netzwerkverkehr geht zuerst über diesen Anbieter, der unter anderem eine Anbindung von bis zu 500 GBit/s hat. Solange eine gewisse Grenze nicht überschritten wird, gehen die Daten weiter an den eigentlichen Dienst. Sollten sich die Anfragen häufen (wegen eines DDoS-Angriffes), so dass der eigentliche Dienst überlastet werden würde, werden diese Anfragen vom Filter-Service verworfen.