1
Bug-Bounty-Grundlagen
Ist Hacking etwas Neues fĂŒr Sie? Dann legen Sie sich jetzt ein grundlegendes VerstĂ€ndnis der Funktionsweise des Internets zu und lernen, was hinter den Kulissen passiert, wenn Sie einen URL in der Adressleiste des Browsers eingeben. Auch wenn der Besuch einer Website einfach aussieht, so umfasst er viele verborgene Prozesse, etwa den Aufbau eines HTTP-Requests, die Identifikation der Domain, an die der Request gesendet werden soll, die Ăbersetzung der Domain in eine IP-Adresse, die RĂŒckgabe einer Response und so weiter.
In diesem Kapitel lernen Sie grundlegende Konzepte und Begriffe kennen wie etwa Schwachstellen, Bug-Bounties, Clients, Server, IP-Adressen und HTTP. Sie bekommen eine grundsĂ€tzliche Vorstellung davon, wie unerwartete Aktionen und unerwartete Eingaben sowie der Zugriff auf private Informationen zu Schwachstellen fĂŒhren. Dann sehen wir uns an, was passiert, wenn Sie einen URL in der Adressleiste Ihres Browsers eingeben, wie HTTP-Requests und -Responses aussehen sowie die verschiedenen HTTP-Aktionsverben. Wir beenden das Kapitel mit der ErklĂ€rung, was »HTTP ist zustandslos« bedeutet.
1.1Schwachstellen und Bug-Bounties
Eine Schwachstelle (engl. vulnerability) in einer Anwendung, ermöglicht es einer böswilligen Person, unerwĂŒnschte Aktionen auszufĂŒhren oder Zugriff auf Informationen zu erhalten, auf die sie normalerweise nicht zugreifen darf.
WĂ€hrend Sie Anwendungen testen, sollten Sie daran denken, dass Angreifer solche Schwachstellen durch beabsichtigte und unbeabsichtigte Aktionen öffnen können. Wenn Sie etwa die ID eines Datensatzes Ă€ndern, um auf Informationen zuzugreifen, die Sie eigentlich nicht sehen sollten, dann ist das ein Beispiel fĂŒr eine (vom Entwickler) nicht beabsichtigte Aktion.
Nehmen wir an, Sie können auf einer Website ein Profil mit Name, E-Mail, Geburtsdatum und Adresse anlegen. Diese Informationen sollen vertraulich behandelt werden und nur fĂŒr jene Benutzer sichtbar sein, die als Ihre Freunde bekannt sind. Wenn es die Website aber jedem erlaubt, Sie ohne Ihre Zustimmung als Freund aufzunehmen, dann ist das eine Schwachstelle. Denn selbst wenn die Site Ihre Daten vor Nicht-Freunden schĂŒtzt, kann Sie jeder als Freund hinzufĂŒgen und so auf diese Informationen zugreifen. WĂ€hrend Sie eine Website testen, sollten Sie immer darĂŒber nachdenken, wie jemand die vorhandene FunktionalitĂ€t missbrauchen könnte.
Ein Bug-Bounty ist eine Belohnung, die eine Website oder ein Unternehmen an jemanden bezahlt, der (ethisch sauber) eine Schwachstelle entdeckt und meldet. Die Belohnung ist oft Geld und reicht von ein paar Zehn bis zu Tausenden von Dollar. Andere Beispiele fĂŒr Bounties sind KryptowĂ€hrungen, Flugmeilen, Belohnungspunkte, Gutschriften und so weiter.
Bietet ein Unternehmen Bug-Bounties an, legt es ein Programm auf. Wir verwenden diesen Begriff in diesem Buch fĂŒr die Regeln und das Rahmenwerk, die Unternehmen fĂŒr Leute aufstellen, die das Unternehmen auf Schwachstellen testen wollen. Beachten Sie, dass sich das von den sogenannten Vulnerability Disclosure Programs (VDPs) anderer Unternehmen unterscheidet. Bug-Bounties bieten eine monetĂ€re Belohnung, wĂ€hrend ein VDP keine Bezahlung bietet (auch wenn das Unternehmen eine PrĂ€mie gewĂ€hren kann). Ein VDP ist nur eine Möglichkeit fĂŒr ethische Hacker, Schwachstellen an ein Unternehmen zu melden, die es dann beheben kann. Zwar wurden nicht alle Reports in diesem Buch finanziell belohnt, doch alle Beispiele stammen von Hackern, die an Bug-Bounty-Programmen teilnehmen.
1.2Client und Server
Ihr Browser ist auf das Internet angewiesen, ein Netzwerk aus Computern, die einander Nachrichten senden. Wir nennen diese Nachrichten Pakete. Pakete umfassen die von Ihnen gesendeten Daten sowie Informationen darĂŒber, wo diese Daten herkommen und wohin sie gehen. Jeder Computer im Internet hat eine Adresse, an die Pakete gesendet werden können. Doch einige Computer akzeptieren nur bestimmte Arten von Paketen, wĂ€hrend wieder andere nur Pakete von einer beschrĂ€nkten Liste anderer Computer empfangen. Der empfangende Computer muss dann entscheiden, was mit den Paketen geschehen und wie reagiert werden soll. In diesem Buch konzentrieren wir uns nur auf die in den Paketen enthaltenen Daten (die HTTP-Nachrichten), nicht auf die Pakete selbst.
Ich bezeichne diese Computer entweder als Clients oder als Server. Der die Requests (Anforderungen) initiierende Computer ist ĂŒblicherweise der Client, unabhĂ€ngig davon, ob der Request durch einen Browser, die Kommandozeile und so weiter initiiert wird. Server stehen fĂŒr die Websites und Webanwendungen, die diese Requests empfangen. Ist ein Konzept sowohl auf Clients als auch auf Server anwendbar, spreche ich ganz allgemein von Computern.
Da im Internet eine beliebige Anzahl von Computern miteinander reden kann, benötigen wir Richtlinien, auf welche Art sie ĂŒber das Internet miteinander kommunizieren sollen. Diese liegen in Form der sogenannten Request for Comments (RFCs) vor, die Standards definieren, wie Computer sich zu verhalten haben. Zum Beispiel definiert das Hypertext Transfer Protocol (HTTP), wie ein Internet-Browser mit einem entfernten Server ĂŒber das Internet Protocol (IP) kommuniziert. Bei diesem Szenario mĂŒssen sowohl Client als auch Server die gleichen Standards implementieren, um die Pakete verstehen zu können, die sie senden und empfangen.
1.3Was beim Besuch einer Website passiert
Weil wir uns in diesem Buch auf HTTP-Nachrichten konzentrieren, geben wir in diesem Abschnitt eine (auf hohem Niveau angesiedelte) Ăbersicht des Prozesses, der durchlaufen wird, wenn Sie einen URL in der Adressleiste Ihres Browsers eingeben.
1.3.1Schritt 1: Extrahieren des Domainnamens
Sobald Sie http://www.google.com/ eingegeben haben, bestimmt Ihr Browser den Domainnamen aus dem URL. Ein Domainname identifiziert die Website, die Sie besuchen wollen, und muss bestimmten Regeln folgen, die durch die RFCs definiert sind. Beispielsweise darf ein Domainname nur alphanumerische Zeichen und Unterstriche enthalten. Eine Ausnahme sind internationalisierte Domainnamen, die aber den Rahmen dieses Buchs sprengen wĂŒrden. Wer mehr ĂŒber sie erfahren will, sei auf RFC 3490 verwiesen, das deren Nutzung definiert. Die Domain ist eine Möglichkeit, die Adresse eines Servers zu ermitteln.
1.3.2Schritt 2: Auflösen der IP-Adresse
Nachdem der Domainname ermittelt wurde, nutzt Ihr Browser das IP, um die mit der Domain verknĂŒpfte IP-Adresse zu bestimmen. Dieser Prozess wird als Auflösung (engl. Resolving) der IP-Adresse bezeichnet, und jede Domain im Internet muss zu einer IP-Adresse aufgelöst werden, um funktionieren zu können.
Es gibt zwei Arten von IP-Adressen: das Internet Protocol Version 4 (IPv4) und das Internet Protocol Version 6 (IPv6). IPv4-Adressen sind als vier durch Punkte voneinander getrennte Zahlen organisiert, und jede dieser Zahlen liegt im Bereich von 0 bis 255. IPv6 ist die neueste Version des Internetprotokolls. Sie wurde entwickelt, um das Problem ausgehender IPv4-Adressen zu lösen. IPv6-Adressen bestehen aus acht Gruppen von vier Hexadezimalzahlen, die durch Doppelpunkte voneinander getrennt sind, doch es gibt auch Methoden, um IPv6-Adressen zu verkĂŒrzen. So ist 8.8.8.8 beispielsweise eine IPv4-Adresse und 2001:4860:4860::8888 eine verkĂŒrzte IPv6-Adresse.
Um eine IP-Adresse ĂŒber den Domainnamen nachzuschlagen, sendet Ihr Computer einen Request an einen Server des Domain Name...