MIT-Kurs "Computer Systems Security". Vorlesung 4: "Trennung von Privilegien", Teil 3

Published on July 25, 2018

MIT-Kurs "Computer Systems Security". Vorlesung 4: "Trennung von Privilegien", Teil 3

Ursprünglicher Autor: Nikolai Zeldovich, James Mykens
  • Übersetzung
  • Tutorial

Массачусетский Технологический институт. Курс лекций #6.858. «Безопасность компьютерных систем». Николай Зельдович, Джеймс Микенс. 2014 год


Computersystemsicherheit ist ein Kurs zur Entwicklung und Implementierung sicherer Computersysteme. Die Vorträge behandeln Bedrohungsmodelle, Angriffe, die die Sicherheit gefährden, und Sicherheitsmethoden, die auf den neuesten wissenschaftlichen Erkenntnissen basieren. Zu den Themen gehören Betriebssystemsicherheit, Funktionen, Steuerung des Informationsflusses, Sprachsicherheit, Netzwerkprotokolle, Hardwareschutz und Sicherheit in Webanwendungen.

Vorlesung 1: „Einführung: Bedrohungsmodelle“ Teil 1 / Teil 2 / Teil 3
Vorlesung 2: „Kontrolle von Hackerangriffen“ Teil 1 / Teil 2 / Teil 3
Vorlesung 3: „Pufferüberlauf: Exploits und Schutz“ Teil 1 /Teil 2 / Teil 3
Vorlesung 4: "Die Aufteilung der Rechte" Teil 1 / Teil 2 / Teil 3

Unser Bild zeigt also ein „Kunstwerk“, das seine Schöpfer vor Bedrohungen zu schützen versuchten. Ich glaube, sie waren sehr besorgt, weil sie bei der Erstellung der Dating- Website okcupid.com unbedingt darauf achten wollten, dass der Ruf der Nutzer der Website nicht durch die Offenlegung personenbezogener Daten beeinträchtigt wird . Aus einem Gespräch mit einem der Entwickler der Website, die diesen Artikel geschrieben haben, ist bekannt, dass sie nicht wirklich kompromittiert wurden. Zumindest trat kein Datenverlust aufgrund der Verwendung der OKWS- Architektur und teilweise aufgrund der Überwachung böswilliger Aktivitäten auf.

Der Grund, warum Benutzer ihre Anwendungen nicht in kleinere Komponenten aufteilen, ist, dass dieser Prozess einige Anstrengungen erfordert. Es ist notwendig, alle Teile des Codes zu isolieren, klare Schnittstellen zwischen ihnen zu definieren und zu entscheiden, auf welche Daten jede Komponente Zugriff haben soll. Wenn Sie sich für die Implementierung einer neuen Funktion entscheiden, müssen Sie die Daten ändern, auf die jede Komponente des Programms Zugriff hat, um ihr neue Berechtigungen zu erteilen, oder einige auswählen usw. Das ist also ein ziemlich zeitaufwendiger Prozess.



Versuchen wir zu verstehen, wie ein Webserver aufgebaut ist. Eine Möglichkeit besteht darin, zu verfolgen, wie eine http-Anfrage von einem OKWS- Server verarbeitet wird . Wie in der vorherigen Abbildung haben wir einen Webbrowser, der zu okcupid.com wechseln möchte. Die Entwickler des Site-Projekts stellten sich vor, dass sie viele Maschinen haben würden, aber wir werden nur die Oberfläche der Site betrachten, auf der OKWS arbeiten wird , und eine weitere Maschine im Hintergrund, auf der die Datenbank gespeichert wird. Diese zweite Maschine verwendet MySQL , weil sie eine gute Software zur Lösung vieler Probleme ist. Sie wollen wirklich diese Daten zu schützen, weil es wirklich schwer ist , auf die bekommen rohen -ROM oder Datenbank mit den rohen Datagramme roh .

Wie funktioniert die Anfrage, wie wird die Anfrage vom OKWS- Server bearbeitet ? Zuerst kommt es an und wird von einem Prozess namens okd für den OKWS- Dispatcher verarbeitet .. Er prüft, ob er um diese Anfrage bittet, und führt dann ein paar Dinge aus. Da Sie diese Anforderung möglicherweise zuerst registrieren müssen, wird sie in eine Komponente namens oklogd umgeleitet. Anschließend müssen Sie möglicherweise einige Vorlagen erstellen. Möglicherweise müssen Sie diese erst erstellen, bevor die Anforderung eingegangen ist. Und dies führt eine andere Komponente namens pubd aus .



Und schließlich gibt es einen bestimmten Dienst, an den diese Anforderung gesendet wird, sodass in okd eine Tabelle mit den von ihm unterstützten Diensten vorhanden ist. Vermutlich geht diese Anfrage an einen dieser Dienste. Nach Überprüfung leitet okd diese Anfrage an einen bestimmten SVC- Dienstprozess weiter.. Dieser Dienst führt genau das aus, was für die Anforderung erforderlich ist. Beispielsweise wird der Benutzer in den Newsletter eingetragen oder es wird die Möglichkeit geboten , das Benutzerverzeichnis unter Verwendung der Datenbank usw. einzusehen .

Und dafür benötigen Sie wahrscheinlich den Service, um Informationen über die Anforderung im Protokoll der oklogd- Komponente zu hinterlassen . Und am Ende des Tages sollte er mit der Datenbank „sprechen“. Die Ersteller der Site haben diesen Prozess der „Kommunikation“ etwas anders implementiert, als es normalerweise in Apache der Fall ist , wo Sie einfach mit der Datenbank kommunizieren und beliebige SQL- Abfragen stellen . Sie kamen auf das Konzept eines Datenbank-Proxys, dbproxy , der sich vor der MySQL-Datenbank befindet und Anforderungen des Dienstes entgegennimmtsvc , um sie auszuführen. Ich denke, diese Abbildung zeigt im Grunde, wie OKWS funktioniert .



Es gibt eine weitere Komponente, die all dies einleitet. Sie heißt okld und ist dafür verantwortlich, alle Prozesse auf der Oberfläche dieses Webservers zu starten. Ich hoffe, einige dieser Dinge kommen Ihnen bekannt vor, da dies genau die Architektur ist, die im Labor behandelt wurde. Es sieht so aus, als wäre es ein gutes Design. Sie hatten in LR nicht pubd , logd und dbproxy , aber Sie hatten okd und svc . Haben Sie Fragen zu OKWS ? Teilnehmerin

: Wir haben den dbproxy richtig verstandenAkzeptiert nicht SQL-Abfragen, sondern eine andere Art von Abfragen?

Professor: Ja, das stimmt! Wie sieht diese Oberfläche aus? Sie beschreiben dies nicht sehr detailliert, aber Sie können mit diesem Datenbankproxy eine Reihe von Argumenten für SQL- Abfragevorlagen erstellen . Beispielsweise könnte es sich um eine Suchvorlage für die Suche eines Freundes handeln, die diese nach ID auswählt .



Angenommen, es gibt eine Vorlage wie "Wähle ^ ID aus der Liste der Freunde, wobei ^ ID ="% S "ist . Angenommen, Sie möchten Alice unter Ihren Freunden finden und die Abfrage S senden , wobei das Argument gleich "Alice" ist . Lassen Sie unsere Anwendung in der Schnittstelle wissen, dassdbproxy kann in seinem Namen drei Arten von Abfragen ausführen. Wenn Sie Abfrage 1 ausführen möchten und das Argument "Alice" lautet , erhalten Sie Zugriff auf die Datenbank.

Zielgruppe: Kann ein externer Benutzer auf Webbrowserebene eine solche Anforderung an die Datenbank senden oder gilt dies alles nur für interne Netzwerkbenutzer?

Professor: Ja, das kann es. Wie funktioniert es? Tatsächlich ist es seltsam, dass sich diese Datenbank auf einem separaten Computer befindet, weil Sie einfach eine Verbindung zur OKWS- Datenbank oder zum MySQL- Server herstellen können . Also, was stoppt das?

Zielgruppe: Firewall?

Professor:Ja, wahrscheinlich auf einer gewissen Ebene. Die Entwickler beschreiben dies nicht zu detailliert, aber es gibt wahrscheinlich ein internes Netzwerk auf dem zweiten Computer und es gibt einen Wechsel zwischen der Schnittstelle und der Datenbank, der von außen nicht erreichbar ist. Tatsächlich befinden sich beide Computer im selben Netzwerk, es gibt jedoch eine Firewall Fw , die einige Regeln enthält. Vielleicht liegt es daran, dass Sie nur über Port 80 eine Verbindung zu diesem Schnittstellencomputer herstellen können, nicht jedoch direkt mit dem internen Server. Dies ist eine der Schutzoptionen.



Ein weiterer Grund ist wahrscheinlich, dass Sie beim Herstellen einer Verbindung zu diesem Datenbank-Proxyserver einen 20-Byte-Kryptografietoken oder -Schlüssel bereitstellen müssen. Wenn Sie diesen nicht bereitstellen, müssen Sie dbproxy bereitstellenlehnt Ihre Verbindung ab. Die Regel lautet also, dass Sie eine TCP-Verbindung herstellen, Ihre 20 Bytes senden und wenn sie falsch sind, die Verbindung geschlossen wird. Dies ist meiner Meinung nach die Bedeutung eines solchen Systemprojekts.

Versuchen wir also herauszufinden, wie diese verschiedenen Prozesse hier isoliert werden können. Wie können Sie sicherstellen, dass sich all diese Komponenten nicht gegenseitig überfordern?

Zielgruppe: unterschiedliche Root-Rechte und unterschiedliche Benutzer-IDs?

Professor: Ja, fast jede dieser Komponenten arbeitet als eine andere UID. Daher gibt es hier in der Systembeschreibung eine ganze Tabelle, die für jede Komponente beschreibt, wo sie funktioniert und mit welcher UID . Also können wir schreiben, dass okd seine UID hat, pubd hat seine uid und oklogd hat auch eine eigene uid .

Okld arbeitet als root , was ziemlich bedauerlich ist, aber vielleicht gibt es nichts, worüber man sich Sorgen machen müsste . Dann gibt es eine ganze Reihe von dynamisch zugewiesenen Benutzer-IDs für jeden Dienst, z. B. ID 51001 usw.



Auf diese Weise wird sichergestellt, dass nicht jeder Dienst die Prozesse anderer Dienste stören kann. Auch hier ist Chroot weit verbreitet , sodass einige dieser Komponenten Chroot- Rechte in separaten Verzeichnissen haben. Zum Beispiel sind okd und svc mit allgemeinen Chroot- Rechten ausgestattet.in einigen Verzeichnissen. Warum haben diese beiden Komponenten Ihrer Meinung nach eine separate Komponente und werden nicht mit den anderen Komponenten der Chroot geteilt ?

Zielgruppe: weil okd keine root-Rechte hat.

Professor: Ja, aber warum bringen sie pubd , oklogd und alle anderen nicht in die gleiche Chroot ?

Zielgruppe: Müssen Dienste, wenn sie mehr Daten gemeinsam nutzen müssen, voneinander isoliert sein?

Professor: Vielleicht. Ich denke, dass sie einige Daten teilen sollten, aber diese Daten sind nicht in den Dateien, sie werden über Sockets von okd übertragenin Dienstleistungen. Tatsächlich speichert jedoch keine dieser Komponenten etwas Interessantes im Dateisystem.

Daher gibt es im chroot- Verzeichnis nichts Interessantes, und ich denke, dass die Jungs von OKWS gerade beschlossen haben, unproduktive chroot- Kosten zu senken , wie die Notwendigkeit, eine Kopie des Verzeichnisses zu erstellen. Es ist auch möglich, dass sie einen Teil der Verwaltungskosten für jeden chroot- Befehl loswerden wollten . Aber da es hier keine echten Dateien gibt, ist alles in Ordnung.

Der Grund, warum diese Jungs verschiedene Chroot für Umgebungskomponenten zugewiesen habenHier gibt es einige interessante Dinge. Möglicherweise gibt es Vorlagen und möglicherweise eine Protokolldatei, sodass die Protokolldatei nicht nach dem Zufallsprinzip gelesen werden soll.

Zielgruppe: Haben diese Dienste Dateien, z. B. aspx ?

Professor: Wie im Artikel beschrieben, handelt es sich bei dem Dienst um eine einzelne kompilierte C ++ - Binärdatei. Es gibt also keine zusätzlichen Dateien.

Es gibt Vorlagen, aber diese werden wirklich über diesen seltsamen Mechanismus übertragen: pubd hat Vorlagen im Verzeichnis, zeigt sie in einer Art Vorcomputer an , hausgemachte Form in okd und okdstellt bereits Vorlagen für alle Dienste über RPC- Aufrufe bereit . Sie befinden sich also im Speicher, sind jedoch direkt über das Dateisystem nicht zugänglich. Dies ist ein etwas paranoides Design, wenn ich die Vorlagen nicht einmal lesen kann.
Was bringt es also, all diese Komponenten zu trennen? Warum brauchen wir ein separates oklogd ?

Zielgruppe: die Möglichkeit des Überschreibens oder Ausschneidens des Magazins ausschließen?

Professor: Ja, also wollen wir wirklich sicherstellen, dass das Tagebuch zumindest nicht beschädigt wird, wenn etwas schief geht. Daher gibt es eine separate Protokolldatei, die nur von dieser Benutzer-ID zum Schreiben zur Verfügung steht , und alle Protokollnachrichten werden als RPC gesendetfür diesen Protokollierungsdienst. Und selbst wenn alles andere, außer okld , verdorben ist, bleibt das Magazin intakt.

Teilnehmerin: Was ist, wenn Sie versehentlich einen Weg gefunden haben, eine Zeitschrift zu lesen und nicht sehen, was andere bereits damit gemacht haben?

Professor: Nein, ich denke, wenn Sie einen Dienst, eine Kneipe oder etwas anderes "gehackt" haben, können Sie alles in die Zeitschrift schreiben. Daher ist es sinnvoll , einen separaten oklogd-Eintrag zu erstellen . Tatsächlich ist es gut, dass oklogd ein separater Prozess ist und nicht nur durch das Anhängen von Dateien wie beispielsweise einer Nur-Anhängen-Datei aktualisiert wird . Also oklogdEs können nicht zu jedem Protokolleintrag einige zusätzliche Informationen hinzugefügt werden, da Sie in diesem Fall nicht wissen, dass jemand in die Datei geschrieben hat , wenn das Betriebssystem die Nur-Anhängen- Datei unterstützt . Während oklogd jeder Nachricht einen Zeitstempel hinzufügt, können Sie herausfinden, von welchem ​​Dienst die Aufzeichnung stammt oder von okd . Daher erhalten Sie in dieser Protokolldatei zusätzliche Informationen, da es sich um einen separaten Dienst handelt.

Und wozu dient der Zweig okld und warum sollte er mit root-Rechten arbeiten? Ich denke, dafür gibt es mehrere Gründe.

Zielgruppe: Wenn Sie möchten, dass niemand als Root fungiert, müssen Sie okld delegierenBenutzeridentifikationsfunktion.



Professor: Ja. Jemand muss diese ganze UID-Chroot einrichten , und Sie benötigen root für dieses Unix , also stellt okld sie zur Verfügung. Dies ist einer der Gründe. Noch etwas?

Zielgruppe: 80 Port Definition?

Professor: Ja natürlich! Müssen Sie die Audition an Port 80 binden, der in Ordnung ist und alles andere bietet?

Zielgruppe: Damit ist das Öffnen der oklogd- Protokolldatei abgeschlossen , da oklogd nicht geöffnet bleiben soll , um den Zugriff auf die Protokolldatei zu verhindern.

Professor:kann sein. Ich weiß jedoch nicht, ob die Entwickler es wirklich getan haben, da ich ihren Quellcode nicht angezeigt habe. Denken Sie, okld öffnet die Protokolldatei und sendet sie an oklogd ? Ist möglich.

Zielgruppe: Andernfalls kann ein Angreifer, der oklogd kompromittiert hat, das gesamte Protokoll löschen.

Professor: Ja, das stimmt. Vielleicht möchten Sie es im Append- Modus öffnen und dann an oklogd übergeben , dann haben Sie mehr Sicherheitsgarantien für das Protokoll. Dies ist etwas, was Sie nicht ohne Root-Rechte tun können.

Wir hatten also eine Hausaufgabenfrage, was passieren würde, wenn dieses 20-Byte-Token für den Zugriff auf die Datenbank „durchgesickert“ wäre. Welchen Schaden kann es anrichten? Sollen wir uns darum kümmern?

Zielgruppe: Während ein Angreifer die Kontrolle über einen bestimmten Dienst übernehmen kann.

Professor: Ja, richtig, denn jetzt können Sie eine Verbindung herstellen und alle Abfragevorlagen abrufen. Es scheint eigentlich ziemlich einfach. Sie müssen wahrscheinlich eine dieser Komponenten kompromittieren, um zuerst eine Verbindung zur Serverdatenbank herstellen zu können. Ich denke, wenn Sie dieses Token haben und es schaffen, eine dieser in der Abbildung gezeigten Komponenten zu kompromittieren, können Sie all diese Abfragen verwenden.

Nun wollen wir sehen, wie Sie dieses OKWS- Design verbessern können . Beispielsweise wäre es möglich, jedem Benutzer eine separate UID- Einheit zuzuweisen , mit Ausnahme der Zuweisung einer separaten UID für jeden Dienst. Hier hat jeder Dienst, z. B. Nachrichten, die Suche nach Freunden oder das Erstellen eines Kontos, eine separate Benutzer-ID , aber nicht jeder OKWS- Benutzer wird als Unix-Benutzer-ID dargestellt . In der Realität gibt es keine Benutzer-ID , hier sind nur Service- IDs vorhanden . Glauben Sie, Sie brauchen für jeden OKWS- Client eine andere Benutzer- ID ?

Zielgruppe:In diesem Fall stellt sich heraus, dass ein Benutzer, der den Dienst "hackt", auf alle Daten anderer Benutzer dieses Servers zugreifen kann.

Professor: Ja, das stimmt!

Zielgruppe: Wenn Sie jedoch tatsächlich für jeden Benutzer einen separaten Dienst und einen separaten Datenbankproxy hätten, wäre es unmöglich, auf die Daten anderer Personen zuzugreifen.

Professor: Ja, aber kann dies ein stärkeres Modell sein? Ich denke, dass die OKWS- Entwickler diesen Schritt aus zwei Gründen nicht unternehmen. Das erste ist Leistung. Wenn Sie ein paar Millionen okcupid-Benutzer , mehrere Millionen laufende Prozesse und ein paar Millionen dbproxie habenDann sind Leistungskosten möglich. Und es wird nicht möglich sein, die gleiche Leistung zu erzielen, die die vorhandene OKWS- Architektur bietet .

Zielgruppe: Die Beschreibung von OKWS besagt, dass die Leistung dieses Systems besser ist als die anderer Systeme. Wie wurde das erreicht?

Professor: Ich denke, das liegt zum Teil daran, dass sie ihr Design an eine bestimmte Arbeitslast angepasst haben und alles auch in C ++ geschrieben haben . Die Alternative ist, einige Dinge in PHP zu schreiben , dann werden Sie wahrscheinlich Vorteile in dieser Hinsicht erzielen.

Darüber hinaus verfügen sie nicht über viele der Funktionen, die Apache bietet. Es ist universell einsetzbar, daher gibt es viele Arbeitsprozesse, die von Zeit zu Zeit neu geladen werden. Hier gibt es viele TTP- Verbindungen, die die Dauer des Prozesses von Verbindungen sicherstellen und deren Aktivität aufrechterhalten. Es erhöht auch die Anzahl der auf dem System ausgeführten Prozesse. Apache wurde universeller gestaltet und kann alles, was Sie vom Internet-Server erwarten , ausführen , während sich die OKWS-Mitarbeiter mehr auf die Lösung spezifischer Aufgaben konzentrieren.

Aber ich denke, dass es in unserer Zeit andere Webserver gibt, die wahrscheinlich der Leistung von OKWS entsprechen . So zum Beispiel Nginx- Dies ist ein sehr optimierter Webserver, den Sie heutzutage ausführen können. Wenn serverseitige Anwendungsleistung erforderlich ist, möchten Sie wahrscheinlich, dass ein langer Prozess OKWS sehr ähnlich ist . Und damit hätte es einen CGI- schnellen allgemeinen Gateway-Schnittstellenmechanismus zum Verbinden eines externen Programms mit einem Webserver oder eine Art Protokoll, das auf der Serverseite verwendet werden könnte, um dies sogar in Apache oder Nginx zu implementieren . Aus diesem Grund denke ich, dass viele dieser Ideen nicht nur für OKWS gelten.können sie auf anderen Webservern implementiert werden. Sie zeigen lediglich, dass die Verbesserung der Sicherheit die Verwendung dieser „Tricks“ nicht ausschließt. Ich denke, sie haben mit einem ähnlichen Schema wie Apache angefangen , waren jedoch der Meinung, dass es nicht sicher genug wäre.

Ich denke, einer der Gründe, warum die Entwickler von OKWS keine separaten Berechtigungen für Benutzer einführen wollten, war die mögliche Verschlechterung der Leistung.



Ein weiterer Grund ist, dass sich das vollständige Anwendungsmodell um einen Dienst „dreht“, der versucht, auf die Daten jedes Benutzers zuzugreifen, z. B. Freunde bei okcupid zu finden.oder jemanden, den du zu einem Date einladen kannst. Infolgedessen ist dieses Benutzerisolationsmodell nicht sehr sinnvoll, da letztendlich ein Dienst vorhanden sein muss, an den Sie eine Anfrage senden, und alle anderen Daten überprüft werden, um eine Übereinstimmung mit Ihrer Anfrage zu finden. Selbst wenn Sie über Benutzer-IDs oder einen Isolierungsmechanismus verfügen, müssen Sie dennoch für jeden Benutzer den Zugriff auf den Dienst öffnen.

Bei anderen Diensten wie Google Mail oder Dropbox , die viel benutzerspezifischer sind und nicht die Möglichkeit bieten, ihre Dateien zu teilen, bietet das Isolieren von Benutzern möglicherweise weitere Vorteile. Zum Beispiel auf dem Dropbox- Server gibt esBenutzer-ID für jeden Dropbox- Client . Und wenn ein Prozess für Sie ausgeführt wird und ein Prozess für eine andere Person ausgeführt wird, können Sie selbst bei Verwendung eines böswilligen Exploits nicht auf die Informationen einer anderen Person zugreifen.
Nun wollen wir sehen, ob OKWS es wirklich geschafft hat, die Sicherheit in diesem Servermodell zu verbessern. Um die Sicherheit zu bewerten, müssen Sie jede Komponente des Systems berücksichtigen und ermitteln, welche Art von Angriffen sie schädigen können.

Beginnen wir mit okd . Es kann beispielsweise durch Anfragen über den Browser angegriffen werden, um einen Pufferüberlauf zu verursachen. Da dieses Ding in c ++ geschrieben ist, waren diese Jungs vielleicht nachlässig und haben irgendwo einen Fehler gemacht, so dass okd verwundbar wurde. Was könnte der Schaden sein?



Zielgruppe: Können Sie auf diesem Computer einen Dienst anrufen?

Professor: Ja, Sie haben Zugang zu jedem Dienst. Was ist schlecht

Zielgruppe: Sie können es aufrufen, indem Sie beliebige Daten eingeben.

Professor: Ja, das ist wahr. Aber Sie könnten es wahrscheinlich auch ohne Hacken tun, da Sie jede http- Anfrage senden können , da diese Services letztendlich dafür ausgelegt sind, alle Anfragen zu bearbeiten. Vielleicht ist es nicht so schlimm.

Teilnehmer: Können Sie den gesamten Datenverkehr von diesem Server auf eine andere Site umleiten?

Professor:richtig und es wird verheerende Folgen haben. Sie können festlegen, dass jeder, der diesen Server kontaktiert , anstatt Dienste zu erhalten, zu einer anderen Site weitergeleitet wird, z. B. zu match.com oder wo immer Sie möchten. Obwohl ich denke, dass sie jetzt schon OkCupid gekauft haben . OK, sonst noch etwas? Könnten Sie trotzdem ein Datenleck beheben?

Zielgruppe: Es hängt wahrscheinlich davon ab, ob Sie die Authentifizierung mit okd verwenden . Würden Sie dann anstelle eines Dienstes einfach unautorisierte Anfragen stellen können, wie in einer Datenbank?

Professor: Richtig. In diesem Fall analysiert okd einfach die Anfrage und leitet sie weiter.

Zielgruppe:Können Sie möglicherweise die persönlichen Daten des Benutzers erfassen?

Professor: Natürlich! Sie können nicht nur den Datenverkehr umleiten, sondern auch alle nachfolgenden Anforderungen empfangen, einschließlich der Kennwörter anderer Benutzer, die eine Verbindung zur Site herstellen. So können Sie ihre Passwörter speichern, ihre Anforderungen ändern, sehen, was sie tun, oder Prozesse in ihrem Namen ausführen. Dies ist wahrscheinlich das größte Leck. Wenn Sie okd "gehackt" haben , können Sie andere Anforderungen anzeigen , Kennwörter von Konten stehlen und während der Übertragung auch Benutzerdaten stehlen.

Teilnehmerin: Können wir hier eine Art DOS-Angriff durchführen?

Professor:Ja, Sie könnten wahrscheinlich den Prozessor "hängen", indem Sie mehrere Anforderungen senden oder die Datenbank "einfrieren" lassen, aber Sie können einen DOS-Angriff organisieren, ohne dass Benutzer Daten verlieren. Teilnehmerin

: Wenn Sie Zugriff auf okd haben , können Sie die gesendeten Antworten lesen ...

Professor: Ja, genau. Daher sollte okd eigentlich ziemlich zuverlässig sein, da die Antworten der Dienste nicht über okd zurückkommen , sondern direkt zum Browser gehen. Wenn Sie also okd kompromittieren , können Sie den gesamten Datenverkehr überwachen und von dort aus Benutzerkennwörter stehlen. Dies bedeutet, dass wenn okdwurde kompromittiert, und ich habe mich versehentlich auf dieser Website angemeldet. Sie können meine Antworten anzeigen, mein Kennwort erfassen, andere Anforderungen mit meinen Anmeldeinformationen senden und Daten aus der Datenbank abrufen.

Zielgruppe: und dann konnten Sie die gesamte Datenbank erheblich rekonstruieren.

Professor: Das ist es und es ist ziemlich gefährlich. So OKD können uns eine Menge Ärger geben. Was passiert, wenn wir oklogd hacken ? Wie schlimm wird es sein?

Zielgruppe: Dies ist schlecht für Kontodaten.

Professor: Ja, weil die Journaleinträge alle diese vertraulichen Daten enthalten, aber sonst können Sie nicht direkt auf die Datenbank zugreifen, oder? Durch das Senden verschiedener Anfragen und Antworten anpubd , ich denke du könntest Vorlagen beschädigen, oder so ähnlich.

Zielgruppe: Alles, was Sie tun können, ist, oklogd den Müll hinzuzufügen .

Professor: Ja, das stimmt. Sie könnten eine Menge Müll schreiben, aber wenn sie das Betriebssystem zum Erstellen eines Nur-Anhängen- Protokolls ohne Lesen verwendeten, könnten Sie leicht den Inhalt eines Magazins fälschen.

Teilnehmer: Sie werden wahrscheinlich keine neuen Einträge hinzufügen können ...

Prof: wahr, aber Sie könnten die echten Einträge blockieren, indem Sie sie mit Müll füllen. Sie können die neuen Einträge auch anzeigen und versuchen, sie zu hacken.

Was ist mit SVC- Diensten ?? Ich denke, das ist der Hauptzweck des Angreifers. Da andere Komponenten des Systems zum Beispiel ziemlich unverwundbar sind, wurden die Codes für die Module okd und oklogd von Max Kron geschrieben. Er war vorsichtig und überprüfte sie auf Fehler, um sicherzustellen, dass kein Pufferüberlauf drohte.

Und die svc- Komponente wurde von einem Webentwickler geschrieben, der die folgende Funktion so schnell wie möglich bereitstellen wollte. Daher ist dies der Teil des Servers, auf dem Hacker nach Programmierfehlern und angreifbaren Schwachstellen suchen. Ich hoffe jedoch, dass der Schaden durch Hacking-Services nicht zu groß wird, da Sie nur die Anforderungen ausgeben können, die Sie in der Datenbank ausführen dürfen.

Und was haben wir mit okld? Hier scheint alles in Ordnung zu sein, weil es als root funktioniert. Sollten wir uns um diese Komponente kümmern? Natürlich wird der Schaden, wenn es gehackt wird, ziemlich groß sein. Der Hacker erhält Zugriff auf den gesamten Computer und auf alle Dbproxy- Token . Wie schwer ist es okld zu knacken ? Was könnte es "stecken"? Ist eine Dateneingabe erforderlich?

Zielgruppe: Vielleicht auf eine ganz bestimmte Art und Weise?

Professor:Ja, Sie können sich nur wie folgt anmelden. Wenn der untergeordnete Prozess beendet ist und der Hacker benachrichtigt wird, dass der untergeordnete Prozess beendet ist, kann er schnell darauf reagieren. Wenn beispielsweise die Prozesse zum Löschen von Informationen oder einige Fehler während der Verarbeitung oder zum Massenabbruch von untergeordneten Prozessen zeitlich zusammenfallen, können Sie möglicherweise durch die Eingabe Ihrer Daten etwas Schlechtes verursachen. Aber selbst in diesem Fall ist es sehr schwierig, Shell-Code durch das Exit-Pattern zu injizieren. In diesem Fall ist es auf jeden Fall sinnvoll, Root-Rechte für diese Komponente zu verwenden.

Teilnehmerin: Anscheinend wäre es ein großes Problem, wenn der Hacker dbproxy verwenden könnte .

Professor: Ja!

Zielgruppe: Wenn sich herausstellt, dass ein Hacker dies nicht tut, beispielsweise, dass er nur eine begrenzte Menge an RPC bereitstellt , Sie jedoch einige Eingaben vornehmen können, führt dies zur Ausführung einer anderen als der von Ihnen erwarteten Anforderung! Und das kann ein großes Problem sein.



Professor: Ja, das kann ein Problem sein. Was ist der Angriffsvektor auf dbproxy ? Ich denke, ein Angreifer sollte zuerst Zugriff auf eine dieser Komponenten haben. Zumindest sollte es diese beiden Komponenten "knacken", dh eine Schwachstelle in dbproxy und anderswo finden.

Zielgruppe: Dies ist jedoch nicht erforderlich, da svc Anforderungen umleitet ...

Professor: Richtig, aber svc geht Anfragen durch, die meistens nicht geprüft werden!

Zielgruppe: Angenommen, Sie versuchen, sich anzumelden, und diese Option ist dann erfolgreich!

Professor: Im Prinzip ist es möglich, wie im Beispiel mit dem Namen "Alice" , in die Vorlage zu gelangen und so weiter . Teilnehmer

: In der Theorie kann Alice direkt in dbproxy gelangen .

Professor: bedingungslos. Ja, es kann einige Dbproxy- Fehler geben , es ist durchaus möglich.

Ich hoffe, Sie verstehen, was uns die Trennung von Anwendungsberechtigungen gibt. Und wie wir sehen können, ist dies nicht ideal. Es gibt noch viel mehr Dinge, die schief gehen können. Es scheint jedoch, dass diese Lösung in jedem Fall besser ist, als einzelne Anwendungen ohne Zugriffsrechte zu entwerfen, mit denen wir begonnen haben.


Die Vollversion des Kurses finden Sie hier .

Vielen Dank für Ihren Aufenthalt bei uns. Mögen Sie unsere Artikel? Möchten Sie weitere interessante Materialien sehen? Unterstützen Sie uns, indem Sie eine Bestellung aufgeben oder Freunden empfehlen. 30% Rabatt für Habrs Benutzer auf ein einzigartiges Analogon der Einstiegsserver, die wir für Sie erfunden haben: Die ganze Wahrheit über VPS (KVM) E5-2650 v4 (6 Kerne) 10 GB DDR4 240 GB SSD 1 Gbit / s von 20 Dollar oder wie man den Server teilt? (Optionen sind mit RAID1 und RAID10, bis zu 24 Kernen und bis zu 40 GB DDR4 verfügbar).

Dell R730xd 2 mal günstiger? Nur wir haben 2 x Intel Dodeca-Core Xeon E5-2650v4 128 GB DDR4 6 x 480 GB SSD 1 Gbit / s 100 TV ab 249 US-Dollar in den Niederlanden und den USA! Lesen Sie überWie baue ich die Infrastruktur des Gebäudes? Klasse C mit Servern Dell R730xd E5-2650 v4 im Wert von 9000 Euro für einen Cent?