Das Internet ist KEIN sicherer Ort. Sicherlich ist es an sich wunderbar und in vielerlei Hinsicht nützlich. Aber der Cyberspace ist auch randvoll mit böswilligen Akteuren: Diebe, Hacker, unzählige Kriminelle, die es auf die Schwachen und Verletzlichen abgesehen haben. Lassen Sie sich jedoch nicht beunruhigen. Solange Sie wissen, womit Sie es zu tun haben, haben Sie mehr als nur eine Chance gegen Eindringlinge. Und im Jahr 2022 stehen die Chancen gut, dass Sie es mit BAC-Bedrohungen (Broken Access Control) zu tun haben werden.
Tatsächlich hat BAC die SQL-Injektionen abgelöst und ist an die Spitze der 10 größten Sicherheitsrisiken für Webanwendungen von OWASP aufgestiegen. Ja, laut der größten gemeinnützigen Stiftung für Softwaresicherheit waren 3,81 % der getesteten Anwendungen anfällig für Bedrohungen durch fehlerhafte Zugriffskontrolle (was übrigens sehr viel ist).
Aber lassen Sie uns mehrere Schritte zurückgehen. Was ist eine Zugriffskontrolle? Und was ist eine defekte Zugangskontrolle? Wie wird sie an sich “gebrochen” und sind Sie dafür anfällig? Alles gute Fragen, also fangen wir gleich damit an.
Gebrochene Zugangskontrolle: Erläuterung und Beispiele
Wie der Name schon vermuten lässt, ist eine unterbrochene Zugriffskontrolle eine Sicherheitsbedrohung, bei der sich Eindringlinge Zugang zu nicht autorisierten Daten verschaffen können. Die Zugangskontrolle hingegen umfasst Richtlinien und Mechanismen, die sicherstellen, dass bestimmte Benutzer Zugang zu bestimmten Komponenten haben, und zwar nur zu diesen Komponenten.
Um es auf einen Nenner zu bringen (kein Wortspiel beabsichtigt): In jedem System gibt es verschiedene Personen, die unterschiedliche Rollen spielen. Man möchte, dass sie dies (bis zu einem gewissen Grad) frei tun können, aber man möchte selten, dass alle Beteiligten auf das gesamte System zugreifen können. An dieser Stelle kommt die Zugangskontrolle ins Spiel.
Wenn diese nicht mehr gewährleistet ist und jeder auf alles zugreifen kann, was er will, ist natürlich die Hölle los. Unter Umgehung der vorgesehenen Berechtigungen können Eindringlinge vertrauliche Informationen preisgeben, alle Daten ändern oder sogar löschen oder Geschäftsfunktionen ausführen, die Sie nicht wünschen würden.
Und da eine unzureichende Zugriffskontrolle heute weltweit die größte Bedrohung für die Sicherheit von Webanwendungen darstellt, haben wir unzählige erfolgreiche BAC-Beispiele gesehen. Von kleinen Unternehmen, die sich auf ungeprüfte Daten verlassen, bis hin zu den größten Online-Imperien, die von Hackern, die Ziel-URLs erzwingen, in den Ruin getrieben werden.
Bevor wir uns jedoch mit konkreten Beispielen befassen, sollten wir herausfinden, was Zugriffskontrolle in der Softwarewelt bedeutet und was sie unterläuft.
Was ist “Broken Access Control”?
Eine unzureichende Zugangskontrolle ist ein Versäumnis der Webanwendung, die zuvor festgelegten Zugangsrichtlinien auszuführen und einzuhalten. Was sind diese Richtlinien? Aus der Sicht der Webanwendungen lässt sich die Zugriffskontrolle in drei Hauptkategorien einteilen:
- Administrative Zugangskontrolle. In diesem Fall geht es um die Zugriffsprotokolle, die zur Durchsetzung der allgemeinen Sicherheitsrichtlinien definiert und eingerichtet werden. Im Allgemeinen lassen sich diese Protokolle in zwei Unterkategorien einteilen: Personalprotokolle und Geschäftsprotokolle. Um ein paar konkretere Beispiele zu nennen, handelt es sich dabei um alltägliche Richtlinien, Einstellungsverfahren und Hintergrundüberprüfungen.
- Technische Zugangskontrolle. Auf der anderen Seite, auch logische Zugriffskontrolle genannt, stehen die software- und hardwarebasierten Beschränkungen. Diese schaffen mehrere zusätzliche Schutzschichten, um das System (oder seine Ressourcen) vor unberechtigtem Zugriff zu schützen. Diese Implementierungen umfassen in der Regel Elemente wie Passwörter, Smartcards, verschiedene digitale Schlüssel, Protokolle, Firewalls und mehr. Wie nicht anders zu erwarten, sind sie sehr hilfreich, wenn es darum geht, die API-Sicherheit des Systems zu erhöhen.
- Physische Zugangskontrolle.Dieser Teil umfasst Videokameras, Tore, Zäune, Sicherheitspersonal und Schlösser, die den Zugang zu bestimmten Umgebungen beschränken. Wie der Name schon sagt, konzentriert sich die physische Zugangskontrolle auf die nichttechnische Seite der Gleichung. Natürlich ist diese Kategorie genauso wichtig wie die beiden anderen, aber wir werden uns heute in erster Linie mit der “technischen” Seite befassen.
Wie die Zugangskontrolle durchgeführt wird
Was die technische Seite betrifft, so wird die Zugriffskontrolle in drei Gruppen unterteilt: schreibgeschützte Dateien, lesbare und schreibbare Daten und ausführbare Ressourcen. Je nach Dateityp, mit dem Sie gerade arbeiten, können diese jedoch sehr unterschiedlich sein. In jedem Fall sollten Sie darauf achten, dass sie nach dem (zuvor) genehmigten Betriebsverfahren ausgeführt werden. Genauer gesagt, sollte das System präzise mehrstufige Protokolle anwenden.
Zunächst sollte es die ID des Subjekts ermitteln. Anhand dieser ID weiß das System, wer den Zugang beantragt hat.
Der nächste Schritt ist die Identifizierung der Person, die hinter der Anfrage steht, was in der Regel durch einen Authentifizierungsprozess geschieht.
Angenommen, der Authentifizierungsschritt führt nicht zum Erfolg, dann wird die Anfrage im nächsten Schritt mit der Zugriffskontrollliste abgeglichen. Hier stellt das System sicher, dass die Person, die die Anfrage gestellt hat, die Berechtigung hat, auf die angeforderten Ressourcen zuzugreifen. Außerdem bestimmt das System die Zugriffsstufe, die dieser Person gewährt werden sollte.
Nicht zuletzt sollte das System immer Audit-Mechanismen enthalten, die potenzielle Fehler und Schwachstellen aufspüren und untersuchen. Damit sollten Sie in der Lage sein, zu erkennen, wie jemand die Zugangsbeschränkungen umgehen könnte, bevor er es tut.
Was die Zugangskontrolle stört
Um zu verstehen, wie man das System schützen kann, muss man zuerst verstehen, wie man das System knacken kann, richtig? Richtig. Mit diesem Gedanken im Hinterkopf wollen wir alles auf den Tisch legen und herausfinden, wie die Zugangskontrolle unterbrochen wird.
Das Wichtigste zuerst: Es gibt mehrere Möglichkeiten, wie Server Rechte für die Anforderung bestimmter Ressourcen erteilen oder verweigern können. Dazu gehören Sitzungscookies, JWT-Tokens und mehr. Wie wir oben festgestellt haben, stellt das System, wenn Benutzer Zugriff auf bestimmte Ressourcen anfordern, zunächst sicher, dass sie auf diese Ressourcen zugreifen können, bevor es die Anforderung ausführt. Diese Überprüfung kann sowohl durch GET-Aufrufe als auch durch verschiedene HTTP-Methoden wie POST/PUT/DELETE durchgeführt werden. Genau hier liegt das Problem. Da Entwickler jeden einzelnen Endpunkt mit jeder möglichen HTTP-Methode absichern müssen, ist es leicht, mindestens einen (oder mehrere) Eintrag zu übersehen.
Mit anderen Worten, die Zugriffskontrolle wird “gebrochen”, wenn Eindringlinge erfolgreich Zugriff auf etwas anfordern können, auf das sie keinen Zugriff haben sollten. In den meisten Fällen geschieht dies, wenn die Entwickler die Autorisierungsprotokolle nicht absichern. Das häufigste Beispiel sind Endpunkte auf Websites, die 403 verbotene Fehler ausgeben, die dann durch Hinzufügen eines X-Forwarded-For umgangen werden können: “127.0.0.1”-Header umgangen werden können.
Ein weiteres typisches Beispiel sind die alten Verzeichnisse aus der Entwicklungsphase, die eigentlich gelöscht oder geschützt werden sollten, dies aber nicht getan haben.
Unerfahrene Benutzer könnten auch Passwörter im Klartext im System speichern. Wenn das System (in der Regel der Computer) kompromittiert wird, können die Hacker mit diesen Passwörtern Zugang zu verschiedenen Systemen erlangen.
In anderen Fällen verlassen sich die Menschen auf schwache Passwörter, die auch ohne versehentliche Aufdeckung leicht geknackt werden können, so dass die Zugangskontrolle unterbrochen wird.
Und dies ohne absichtliche Angriffe auf die Zugangskontrolle, was eine ganz andere Sache ist.
Beispiele für defekte Zugangskontrollen
Die möglichen Angriffsvektoren, die Hacker nutzen können, um die Zugangskontrolle zu umgehen, sind zu zahlreich, um sie aufzuzählen. Dennoch funktionieren sie in der Regel nach den gleichen Prinzipien.
Versäumnis, den URL-Zugriff zu beschränken
Der häufigste Angriff auf die Zugriffskontrolle erfolgt, wenn eine URL die Authentifizierung umgeht und dem System vorgaukelt, dass sie bereits authentifiziert wurde. Mithilfe von Format- und Musterkenntnissen sind Hacker in der Lage, die URL für privilegierte Seiten zu schreiben, die nicht richtig konfiguriert wurden.
Stellen Sie sich zum Beispiel einen kleinen Fisch vor, der sich anmeldet. Seine Hauptseite würde etwa so aussehen:
1 2 3 |
https://webdevsagainsthackers.net/fish_login.html |
Fällt Ihnen etwas auf (diesmal beabsichtigt)? Die URL zeigt fish_login.html als die Hauptseite an.
Alles, was die Hacker in diesem Fall tun müssen, um vollen Zugang zu den Haien zu erhalten, ist, die URL wie folgt zu gestalten:
1 2 3 |
https://webdevsagainsthackers.net/shark_login.html |
An diesem Punkt konnten die Angreifer den Haifisch-Zugang erlangen, indem sie nichts weiter taten, als die URL zu ändern. Einfach? Sicher. Aber dennoch effektiv gegen unerfahrene Entwickler.
Unsichere direkte Objektreferenzen (IDOR)
Dieser Fall ist etwas komplizierter. Es gibt nämlich mehrere Möglichkeiten, wie böswillige Agenten auf den harten Code einer Webanwendung zugreifen können. Teile dieses Codes können Aufschluss darüber geben, wie Ihre Datenbank in Bezug auf Formatierung, Muster und mehr organisiert ist. Mit nur diesen wenigen Teilen können geschickte Hacker weitere Informationen für weitere Untersuchungen offenlegen.
Beim folgenden Zugriff melden Sie sich bei Ihrem Konto auf einer Website an und sehen die Hauptseite. In der Adressleiste sehen Sie eine URL wie diese:
1 2 3 |
https://webdevsagainsthackers.net/index.php/view?account=4200 |
Was haben wir hier? Etwas, das wie eine lange Kontenliste aussieht, und Sie sind die Nummer 4200 in der Datenbank.
Auf den ersten Blick nichts Verdächtiges. Aber alles, was ein bösartiger Agent tun muss, um auf die Konten anderer Benutzer zuzugreifen, ist, eine andere Kontonummer dort einzutragen. Manchmal (häufiger als es sein sollte) sind die Konten der Administratoren den ersten 1-10 Nummern zugeordnet. So kann man es drehen und wenden wie folgt:
1 2 3 |
https://webdevsagainsthackers.net/index.php/view?account=1 |
und die falschen Benutzer könnten auf Administratorkonten zugreifen.
“Moment mal, das sieht (und klingt) doch gar nicht so anders aus als der vorherige Angriff?” Sie haben Recht. Aber auch falsch.
Der Unterschied besteht darin, dass die Hacker in diesem Fall Objektverweise ausnutzen. Die meisten Webanwendungen verwenden Standardseitennamen, die auf dem MVC-Setup (Model, View und Controller) basieren. Da dies der Fall ist, können Hacker möglicherweise auf den Quellcode dieser Webanwendungen zugreifen.
Nehmen wir den Abschnitt “Über uns”, den die meisten Websites haben. Die unten stehende Adresse zeigt, dass alle Seiten mit .htm (oder etwas Ähnlichem) enden:
1 2 3 |
https://webdevsagainsthackers.net/against/default.aspx?content=about_us.htm |
Die Hacker wissen, dass der default.aspx.cs-Teil die Hauptseite ist, und wollen möglicherweise weitere Nachforschungen anstellen.
Mit einem Null-Byte-Angriff (./) können sie den Code des Browsers austricksen, so dass er glaubt, die URL sei vollständig. Die auf das Null-Byte folgende Zeichenkette ermöglicht es Angreifern, den Inhalt jeder eingeschriebenen Datei aufzudecken:
1 2 3 |
https://webdevsagainsthackers.net/against/default.aspx?content=%20./default.aspx.cs%00.htm |
In diesem Beispiel konnten die Hacker auf eine ganze Seite mit Quellcode von default.aspx.cs zugreifen. Natürlich ist dies mit jedem Standardseitennamen möglich.
Auch direkte Objektverweise können in einem Fehlercode auftauchen. Alles, was die Hacker tun müssen, ist, Einträge zu manipulieren, um herauszufinden, welche Ausnahmen/Fehler auftauchen könnten und was sie aussagen könnten. Dadurch erhalten sie mehr Informationen, die sie für die Suche in der URL benötigen.
BAC-Beispiele aus der Praxis
Wenn man bedenkt, dass BAC heute die größte Bedrohung für die Softwaresicherheit darstellt, sind auch die größten Medienkonzerne in der Vergangenheit nicht verschont geblieben. Dies sind nur ein paar Beispiele:
Snapchat.Gibson Security hat Schwachstellen in der Zugangskontrolle des Snapchat-Systems entdeckt, die zunächst als unbedeutend abgetan wurden. Es verging nicht mehr als eine Woche, und durch Brute-Force-Aufzählungen wurden 4,6 Millionen Benutzernamen und Telefonnummern aufgedeckt. Unnötig zu sagen, dass die betroffenen Nutzer nicht glücklich über das Datenleck waren, kein bisschen.
Facebook Business Pages. Laxman Muthiyah hat herausgefunden, dass böswillige Nutzer eine Anfrage stellen konnten, um sich selbst Administratorrechte für bestimmte Facebook-Seiten zu erteilen. Da Facebook keine sicheren Maßnahmen zur Zugriffskontrolle getroffen hat, mussten Hacker nur eine Anfrage wie die folgende verwenden:
1 2 3 |
Anfrage :- |
POST //userpermissions HTTP/1.1
Host : graph.facebook.com
Content-Length: 245
role=MANAGER&user=&business=&access_token=
Antwort :-
true
und sie würden sich selbst zu Administratoren der Seite machen. Wie Sie sich denken können, könnten sie mit diesem neuen Privileg den eigentlichen Administratoren/Managern der Seite den Zugriff verweigern.
Wie BAC verhindert werden kann
Um eine wirksame Zugangskontrolle zu gewährleisten, müssen Sie zunächst dafür sorgen, dass das System sie über vertrauenswürdigen serverseitigen Code oder eine serverlose API durchsetzt. Auf diese Weise können Sie verhindern, dass Hacker die Zugangskontrollprüfung oder die Metadaten ändern.
Ansonsten helfen Ihnen die folgenden Schritte dabei, eine fehlerhafte Zugriffskontrolle zu verhindern:
- Überprüfen Sie die Berechtigungen und stellen Sie sicher, dass sie korrekt sind. Der Trick ist natürlich, gründlich zu sein und jede einzelne Datei zu überprüfen. Im Zweifelsfall sollten Sie das Prinzip der geringsten Rechte befolgen: Stellen Sie sicher, dass nur die Personen, die bestimmte Dateien bearbeiten können müssen, Schreibrechte für diese Dateien haben.
- Deaktivieren Sie das clientseitige Caching auf eingeschränkten Seiten. Andernfalls könnten nicht autorisierte Benutzer erneut auf diese Seiten zugreifen.
- Vermeiden Sie die so genannten präsentativen Zugriffskontrollmechanismen. Nur weil es keine sichtbare Schaltfläche gibt, die Benutzer zu eingeschränkten Seiten führt, heißt das nicht, dass Angreifer sie nicht finden können. Das ist im Grunde Sicherheit durch Unsichtbarkeit, ein Prinzip, das gegen ernsthafte Hacker NICHT standhält. Sperren Sie stattdessen sensible Seiten hinter einer Authentifizierung.
- Verweigern Sie standardmäßig den Zugriff auf alle Funktionen. Auf diese Weise wird es Ihnen leichter fallen, die Berechtigungen auf dem Punkt zu halten. Stellen Sie außerdem sicher, dass Sie Zugriffskontrolllisten und rollenbasierte Authentifizierungsverfahren verwenden.
- Benennen Sie Zielseiten nicht mit Bedeutung.Wenn Sie das tun, helfen Sie Eindringlingen, sie zu identifizieren. Verwenden Sie stattdessen Schlüssel-Wert-Paare, die auf die Objekte verweisen.
Kurze Zusammenfassung
Die Nummer 1 auf der Liste der Software-Sicherheitsbedrohungen wird man nicht, ohne ernsthaften Schaden anzurichten und noch mehr Schaden in der Zukunft zu ermöglichen. Es sei denn, wir haben es noch nicht deutlich genug gemacht – Sie müssen die Bedrohung durch eine defekte Zugriffskontrolle respektieren, oder Sie werden die Alternative nicht mögen. Solange Sie jedoch wissen, womit Sie es zu tun haben, wie Sie es verhindern und wie Sie BAC bekämpfen können, sollte es Ihnen gut gehen.