Massachusetts Institute of Technology. Vorlesung # 6.858. "Sicherheit von Computersystemen." Nikolai Zeldovich, James Mickens. 2014 Jahr
Computer Systems Security ist ein Kurs zur Entwicklung und Implementierung sicherer Computersysteme. Die Vorträge behandeln Bedrohungsmodelle, Angriffe, die die Sicherheit gefährden, und Sicherheitstechniken, die auf jüngsten wissenschaftlichen Arbeiten basieren. Zu den Themen gehören Betriebssystemsicherheit, Funktionen, Informationsflussmanagement, Sprachsicherheit, Netzwerkprotokolle, Hardwaresicherheit und Sicherheit von Webanwendungen.
Vorlesung 1: „Einführung: Bedrohungsmodelle“
Teil 1 /
Teil 2 /
Teil 3Vorlesung 2: „Kontrolle von Hackerangriffen“
Teil 1 /
Teil 2 /
Teil 3Vorlesung 3: „Pufferüberläufe: Exploits und Schutz“
Teil 1 /
Teil 2 /
Teil 3Vorlesung 4: „Trennung von Privilegien“
Teil 1 /
Teil 2 /
Teil 3 Heute werden wir über das Teilen von Berechtigungen sprechen, da wir auf einer bestimmten Ebene Pufferüberläufe hatten, aber wir werden darauf zurückkommen. Wir werden nicht über die Details zur Verwendung von Pufferüberläufen sprechen, sondern auf die Reduzierung dieses Problems umstellen und darüber, wie ein System entwickelt wird, in dem Pufferüberläufe für Sie wie andere Schwachstellen kein großes Problem darstellen.

Daher werden wir heute über das Teilen von Berechtigungen als eine Methode sprechen, mit der Sie ein sichereres System erstellen können, und in den Vorlesungsmaterialien erwähnen wir einen Webserver namens
OKWS . Dies ist nicht das aussagekräftigste Beispiel für die Trennung von Rechten, aber das System wird dort gut beschrieben, um zu verstehen, wie alle seine Teile funktionieren. Dies bedeutet jedoch nicht, dass Sie sofort
OKWS herunterladen und Ihre Website starten sollten.
Bevor wir uns also mit den Details der
OKWS- und Unix-Berechtigungen
befassen , wollen wir uns nur ansehen, was das Teilen von Berechtigungen ist und warum dies eine so gute Idee ist. Letzte Woche hat James gezeigt, dass wenn Sie ein Programm in C schreiben, Sie fast unweigerlich etwas Schlechtes oder Falsches daran haben werden. Das Problem ist, dass die Angreifer, wenn Sie eine ausreichend große Anwendung haben und eine Sicherheitslücke darin besteht, eine Verbindung zum Programm herstellen, Anforderungen an diese Anwendung senden, sie austricksen und die „schlechten“ Dinge tun können.
Jede Anwendung verfügt über Zugriffsrechte. Dies bedeutet, dass es viele Daten enthält, die mit Zugriff abgerufen werden können. Sie können diese Dateien sogar löschen, wie Sie es in Labor Nummer 1 getan haben. Das Problem ist, dass eine Sicherheitsanfälligkeit in dieser großen Anwendung es einem Angreifer ermöglichen kann, diese Daten zu ändern oder genügend Berechtigungen zum Verwalten des Programms zu erhalten, wenn Sie nicht vorsichtig sind.
In dieser Vorlesung werden wir uns ansehen, was das Teilen von Berechtigungen zu tun versucht. Es lohnt sich, das Programm zu nehmen, es in Teile zu unterteilen und sicherzustellen, dass jedes einzelne Element nur die erforderlichen Berechtigungen hat, um seine Arbeit korrekt auszuführen.

Links haben wir ein dreiteiliges Programm und rechts Daten, die ebenfalls aus drei Teilen bestehen. Ordnungsgemäß zugewiesene Berechtigungen bedeuten, dass jeder Teil der Anwendung nur auf seinen Teil der Daten zugreifen kann. Und wenn wir eine Sicherheitslücke in Programm X haben, können wir nur einen Teil der Daten kontrollieren und die Daten in den anderen beiden Teilen nicht beeinflussen.
Diese Idee, Privilegien zu teilen, ist also extrem stark. Es dient nicht dazu, das Problem von Pufferüberläufen oder anderen Schwachstellen spezifisch zu beeinflussen. Es handelt sich lediglich um allgemeine Anforderungen an die Architektur von Softwareprodukten, um sicherzustellen, dass Schwachstellen an einem Ort des Systems keine Auswirkungen auf die anderen Teile des Systems haben. Die Trennung von Privilegien ist weit verbreitet. Um die Isolation von Komponenten innerhalb eines Programms sicherzustellen, werden häufig virtuelle Maschinen verwendet.
Sie können Ihr großes System in mehrere VMs aufteilen, um die einzelnen Teile zu isolieren. Sie können jedoch auch Unix verwenden, um diese Isolation tatsächlich mit "Slicing" durchzuführen. Unix bietet eine Reihe von Mechanismen, die OKWS tatsächlich verwendet, um Berechtigungen zu trennen.
Viele Anwendungen verwenden tatsächlich Verfahren zur gemeinsamen Nutzung von Berechtigungen. Ihr habt wahrscheinlich ziemlich oft SSH oder "Secure Shell" verwendet. Dies ist ein Netzwerkprotokoll, mit dem das Betriebssystem ferngesteuert und Dateien übertragen werden. In vielen seiner Komponenten wird die gemeinsame Nutzung von Berechtigungen verwendet, um sicherzustellen, dass die Verschlüsselungsschlüssel nicht entschlüsselt werden und der Server nicht gefährdet wird. Der Chrome-Webbrowser ist für Sie relevanter, in dem die Freigabe von Berechtigungen ebenfalls weit verbreitet ist. Wenn es also in Chrome einen „Fehler“ gibt, kann der Gegner nicht die volle Kontrolle über Ihren Computer erlangen.
Dies ist eine sehr kurze Zusammenfassung dessen, was das Teilen von Berechtigungen ist und warum
OKWS ein interessantes Beispiel ist. Er ist jedoch eher ein anschauliches Beispiel als eine wichtige Software.
Wie bereits erwähnt, verwendet
OKWS Unix-Berechtigungen und eine Art Unix-Mechanismus, um die verschiedenen Komponenten zu trennen. Für uns ist es wichtig zu verstehen, wie Unix-Sicherheitsmechanismen funktionieren. Unix als Tool zum
Freigeben von Berechtigungen ist nicht nur
wichtig , um
OKWS zu verstehen. Wie jedes andere Tool zum Isolieren wie
UID ,
VM ,
Container oder ähnliche Technologien können Sie die Details des Prozesses verstehen. Da es viele komplexe Teile des Prozesses zum Erhalten von Zugriffsrechten gibt und Sie sich mit einem Angreifer befassen können, der die Sicherheitsanfälligkeit eines dieser Teile ausnutzt. Daher werden wir uns Unix ausführlich genug ansehen, um zu verstehen, was es ist und wie es in einem bestimmten Sicherheitsmechanismus aussehen sollte.
Unix war in der Vergangenheit das beste Beispiel für die Erstellung eines Sicherheitsmechanismus. Der Sicherheitsmechanismus entstand, um die Notwendigkeit zu befriedigen, Benutzer auf demselben Unix-System voneinander zu trennen. Gleichzeitig wurde angenommen, dass es eine Reihe von Benutzern gibt, die denselben Computer verwenden, und Sie müssen sie voneinander trennen. Dies ist also nicht unbedingt ein Allzweckmechanismus, aber immer noch einer der am häufigsten verwendeten und am weitesten verbreiteten. Daher versucht Chrome, viele Mechanismen zur Freigabe von Berechtigungen unter Unix zu verwenden.
Wenn Sie über einen Schutzmechanismus nachdenken, sollten Sie über dessen Prinzipien nachdenken. Dies bedeutet, dass es jemanden mit Berechtigungen oder Rechten gibt, und Unix initiiert oder unterstützt diese Rechte. Daher denke ich, dass das Thema oder das Thema von Unix ein Prozess ist, da ein Prozess unterstützt wird, da jede Operation oder Anforderung, die wir aus Sicherheitsgründen betrachten, etwas zulassen oder ablehnen sollte. Dies ist wahrscheinlich die Operation, die vom Prozess durch
Ausführen des
Syscall- Systemaufrufs aufgerufen wird. Hier geht es darum, wie wir beschreiben, welche Privilegien dieser Prozess hat.
Als nächstes gibt es ein Objekt, das unser Prozess als Subjekt fungiert. Er kann Objekte modifizieren, lesen, beobachten. Es gibt viele Objekte im Betriebssystem, die Sie schützen sollten. Über welche Objekte sollten wir uns Ihrer Meinung nach Sorgen machen?
Zielgruppe: über Dateien!
Professor: Richtig, über Dateien und Verzeichnisse. Was noch?
Zielgruppe: Über Network Sockets!
Professor: Ja, großartig bei Netzwerk-Sockets. Ist in unserem System noch etwas los?
Zielgruppe: andere Prozesse.
Professor: Richtig. Dies ähnelt in der Tat dem, worum sich die Anwendung oder der Benutzer kümmern sollte, es gibt jedoch verschiedene interne Komponenten des Systems, die Sie ebenfalls schützen müssen. Daher ist der Prozess selbst nicht das Thema, das den Systemaufruf ausführt, sondern es ist auch etwas, auf das ein anderer Prozess einwirken kann. Er kann ihn töten oder einen neuen erstellen. Daher müssen Sie herausfinden, nach welchen Regeln ein Prozess als manipulierbares Objekt wahrgenommen werden kann. Welche anderen Dinge können uns Sorgen machen?
Zielgruppe: Umgebungsvariablen.
Professor: Ich denke, dass sie wahrscheinlich kein Thema sind, das Sie im Sinne der Verwaltung von OK und einer Sicherheitsrichtlinie ändern können. Ich denke, Umgebungsvariablen sind nur eine Art Zustand eines im Speicher enthaltenen Prozesses. Aber ich denke, im Allgemeinen kümmern wir uns um diesen Teil des Prozesses, der im Speicher enthalten ist - Umgebungsvariablen, Stapel, Argumente, das ist auch ziemlich wichtig. Wahrscheinlich gibt es im Gedächtnis des Prozesses viele Dinge, die empfindlich auf Störungen von außen reagieren. Was sonst?
Zielgruppe: Dateideskriptoren im Allgemeinen.
Professor: Es gibt einen anderen inneren Umstand, der von großer Bedeutung ist. Dateien, die sich auf der Festplatte befinden, sollten uns betreffen. Es gibt jedoch immer noch ein solches operatives Tool wie einen Dateideskriptor, das
OKWS in großem
Umfang zu verwenden versucht, und wir werden sehen, was es ist. Welche anderen Dinge möchten Sie im Betriebssystem schützen?
Zielgruppe: Hardware oder Hardware.
Professor: Ja, Hardware erfordert nicht weniger Schutz als die abstrakten Dinge, die uns das Betriebssystem bietet, weil wir nicht möchten, dass unser Prozessor aus irgendeinem Grund „einfriert“.
Teilnehmerin: Sie sollten auch über den Schutz von Peripheriegeräten nachdenken!
Professor: Oh ja! Also, zusätzliche Geräte, Sie haben Recht, besonders auf einem Desktop-Computer, es gibt eine Menge unnötiger Dinge: ein USB-Laufwerk, eine Webcam, wahrscheinlich das Display selbst - Sie werden einige davon schützen wollen, weil die damit verbundenen Anwendungen nicht „spazieren gehen“ sollten. »Überall auf Ihrem Bildschirm.
Ich denke, in der Tat sind all diese Objekte nicht auf der Serverseite, sie sind nur ziemlich nah dran. Auf Ihrem Telefon ist das Mikrofon wahrscheinlich auch ein sehr wichtiges Objekt, das Sie ebenfalls schützen möchten.
Aber ich werde diese Liste verlassen, weil wir im Folgenden hauptsächlich über Serveranwendungen sprechen werden, aber Sie haben absolut Recht mit der Liste der Objekte. Ich denke, für
OKWS ist dies wahrscheinlich eine mehr oder weniger vollständige Liste von Dingen, die wir schützen könnten oder die zumindest
OKWS verwenden .
Lassen Sie uns also darüber sprechen, wie der Betriebssystemkern entscheidet, wann ein Prozess mit einem dieser Objekte etwas anfangen kann. Auf hoher Ebene betrachten wir den Prozess daher hauptsächlich als eine Einheit mit den durch dieses Prinzip gewährten Berechtigungen, und das Prinzip im Unix-System ist eine ziemlich komplizierte Sache.
Es gibt eine sogenannte
Benutzer-ID , bei der es sich um eine 32-Bit-Ganzzahl handelt. Es gibt eine
Gruppen-ID , die auch eine 32-Bit-Ganzzahl ist. In der Tat gibt es keinen besonderen Grund, warum sie unterschiedlich sein sollten.

Es wäre schön, wenn sie nur einen Satz von 32-Bit-Ganzzahlen zusammenstellen würden, aber Unix unterteilt sie leider in zwei Kategorien. Es gibt
Benutzer-ID- Ganzzahlen und
Gruppen-ID- Ganzzahlen. Wenn wir über einen Prozess sprechen, der bestimmte Berechtigungen hat, meinen wir einen Prozess, der einem bestimmten
UID- Wert zugeordnet ist. In der Regel verfügt ein Prozess über eine
UID sowie eine Liste der Gruppen-
GID- Kennungen, über die der Prozess verfügt. Aus historischen Gründen kam es vor, dass sie zu einem
Gid und dann zu einer Liste anderer Kennungen zusammengefasst wurden. Grob gesagt kann ein Prozess die Berechtigungen ausüben, die durch alle diese Kennungen dargestellt werden. Wenn
uid also Zugriff auf etwas bietet, kann der Prozess alles damit machen.
Lassen Sie uns nun über Dateien, Verzeichnisse und andere Arten von Objekten sprechen. Was passiert nun mit Dateien oder wie werden Unix-Berechtigungen für die Arbeit mit Dateien erstellt? Mit Dateien ist alles relativ einfach. Sie sind besorgt über die Vorgänge, die mit ihnen ausgeführt werden können: Lesen, Schreiben, möglicherweise Ausführen sowie die Möglichkeit, die Berechtigungen selbst oder andere Sicherheitseigenschaften zu ändern.
Teilnehmerin: Krawatten brechen!
Professor: Ja, Links brechen, Verknüpfungen
aufheben - was ist Ihrer Meinung nach die Eigenschaft der Datei oder des Verzeichnisses selbst? Eigentlich ist diese Unterscheidung etwas unklar. Wenn Unix über das Löschen einer Datei nachdenkt, geht es eher um das Verzeichnis, da die Datei unter Unix wirklich ein
Inode oder ein Inode ist. Unter Unix können Sie daher mehrere feste Links zu
Inodes haben. Wenn Sie einen bestimmten Unix-Dateinamen mithilfe von
Unlink trennen
, zerstören Sie tatsächlich nur einen der Dateinamen, aber möglicherweise andere Namen und andere Links dazu. In der Tat ist es wichtig, ob Sie das Verzeichnis ändern dürfen, das auf die Datei verweist, und gleichzeitig nichts mit dem
Inode der Datei selbst tun dürfen. Daher sind
Verknüpfungs- ,
Verknüpfungs- ,
Umbenennungs- und
Erstellungsvorgänge normalerweise Vorgänge, die einem Verzeichnis zugeordnet sind. Das Erstellen wirkt sich also sowohl auf das Verzeichnis als auch auf die neue Datei aus. Daher müssen wir herausfinden, welche Regeln dort gelten.

Um zu entscheiden, dass jemand eine Datei lesen oder schreiben kann, fügen wir einige Berechtigungen oder Bits in die
Inode- Datei ein. Unter Unix hat jeder
Inode , der letztendlich eine Datei oder ein Verzeichnis ist, aus Sicherheitsgründen mehrere interessante Felder. Hier ist die Benutzer-ID und die Kennung der Gruppe, der, wie wir sagen, die Datei oder das Verzeichnis gehört. Auf diese Weise können Sie alle Dateien in Ihrem Home-Verzeichnis verwalten, da Unix über Ihre
UID verfügt .
Unix hat auch eine Reihe von Berechtigungsbits, die als Teil der Matrix betrachtet werden können. Im grundlegenden Design sehen sie wie
r (Lesen),
w (Schreiben) und
x (Ausführen) aus. Wir können diese Berechtigungen für verschiedene Entitäten angeben, und unter Unix werden sie für den Eigentümer-
Eigentümer angegeben ,
dh für den
UID-Inode , für die Gruppengruppe
, zu der die angegebene Datei gehört,
dh für
GID und für alle anderen -
andere .
Sie können diese binäre Matrix 3 mal 3 füllen, wobei 1 die Berechtigung zum Ausführen einer bestimmten Aktion bedeutet und 0 die Ausführung verbietet:

So speichert Unix Berechtigungen. Es gibt eine traditionelle Art, diese Dinge zu codieren, die Sie oft sehen werden und die wahrscheinlich erwähnenswert ist. Unter Unix wird diese Matrix als Oktalzahl codiert, daher sollte jede Zeile hier als Basiszahl von 8 betrachtet werden, sodass unsere Matrix in dieser Codierung folgendermaßen aussieht:
r ist 4 Bit,
w ist 2 Bit,
x ist 1 Bit,
Eigentümer - Es ist 6 Bit und
Gruppe und
andere enthalten jeweils 4 Bit.

Sie werden solche Bezeichnungen häufig in den Vorlesungsunterlagen sehen, sodass Sie sagen können, dass diese Datei eine Auflösung von 6, 4, 4 hat, dh der Eigentümer kann die Datei lesen und schreiben, und der Gruppeninhaber und andere können sie nur lesen.
Diese Notationen geben an, wann eine Datei gelesen, geschrieben und ausgeführt werden muss. Was ist mit dem Ändern der Berechtigungen für diese Datei? Das ist keine faire Frage, aber was haltet ihr davon? Wie sollen wir entscheiden, dass jemand diese Berechtigungen ändern kann, da dies möglicherweise auch erforderlich ist? Irgendwelche Gedanken dazu?
Zielgruppe: Hat diese Person Zugriff auf die Datei?
Professor: Vielleicht hängt es auch von den Zugriffsrechten ab. Auf der anderen Seite können Sie eine überschreibbare wiederbeschreibbare Datei erstellen, die Sie für jemanden freigeben möchten, damit dieser Ihre Datei lesen, anhängen und ändern kann. Dies bedeutet jedoch auch, dass Sie plötzlich die Berechtigungen ändern können, um die Datei nicht wiederbeschreibbar oder zuweisbar zu machen nur für mich.
Daher haben die Ersteller von Unix entschieden, dass wenn Sie eine Datei haben,
dh Ihre
UID der in die Datei eingegebenen
UID entspricht, Sie die
Berechtigungen standardmäßig ändern können. Andernfalls können Sie nicht. Wenn Sie also nur
gid haben und diese
Gruppe alle Berechtigungen in der Datei hat, können Sie die Berechtigungen für diese Datei immer noch nicht ändern. Sie können einfach lesen, umschreiben, alles damit machen, aber ohne
UID können Sie die Berechtigungen nicht ändern.
Unix-Verzeichnisse folgen denselben Regeln. Wenn Sie also die
Verknüpfung aufheben und Verknüpfungseinträge in einem Verzeichnis
verknüpfen , haben Sie die Berechtigung, in dieses Verzeichnis zu schreiben. Wenn Sie eine Datei umbenennen möchten, müssen Sie wahrscheinlich Schreibzugriff auf das Verzeichnis haben, aus dem Sie sie erhalten, und Schreibzugriff auf das Verzeichnis, in dem Sie sie ablegen. In einigen Fällen können harte Links Probleme verursachen, und in den Vorlesungsmaterialien werden diese Details hervorgehoben.
In der Tat gibt es eine andere interessante Operation im Katalog - die Suche. Dank ihr finden Sie die Datei einfach im Verzeichnis. Unix codiert
Ausführungsberechtigungen als die Möglichkeit, eine Suche nach Verzeichnissen zu implementieren. Wenn Sie also
Ausführungsberechtigungen für ein Verzeichnis haben, müssen Sie tatsächlich nach einem bestimmten Dateinamen suchen können. Es kann sein, dass Sie keine Berechtigung für das Verzeichnis benötigen, um nach dem Dateinamen zu suchen. Wenn Sie jedoch keine Leseberechtigung haben, können Sie den Inhalt des Verzeichnisses nicht anzeigen, dh die Datei finden. Dies ist in einigen Situationen nützlich, in denen Sie Aktionen für einige Dateien einschränken oder vor dem Benutzer verbergen müssen.
Schauen wir uns ein Beispiel an. Was passiert unter Unix, wenn ich den Befehl
open ("/ etc / password") eingebe ? Was überprüft den Kernel des Systems in meinem Namen, wenn ich ihm befehle, einen Systemaufruf durchzuführen?
Zielgruppe: Überprüft es, ob Sie die Berechtigung zur Ausführung usw. haben?
Professor: Ja, bis zu einem gewissen Grad ist dies der Fall. Ich muss etwas tun usw.
Zielgruppe: und führen Sie dann den angegebenen Schrägstrich aus!
Professor: Ja, eigentlich muss ich mir ansehen, worauf
/ etc hinweist? Wenn ich also die
Root-Berechtigungen - Rechte nicht herausfinde, funktioniert dies nicht.
Zielgruppe: Dann müssen Sie
/ etc / password lesen.
Professor: Ja, das macht Sinn. Hier ist ein kleines Puzzle für dich. Angenommen, das MIT erstellt eine Gruppe für alle Personen, die mit dem 6.858-Kurs verbunden sind, und andere Gruppen für alle TAs im MIT, die in der Unix-Terminologie als
Gids bezeichnet werden , aber aus dummen Gründen nicht in der 6.858-TAs-Gruppe enthalten sind. Wie kann ich eine Datei erstellen, die nur für die Gruppe 6.858 TAs verfügbar ist?
Angenommen, ich habe 6.858 gid und TAs gid, aber ich kann nur eine
gid in die Datei einfügen.
Teilnehmerin: Sie könnten dies nicht tun, da Sie hier möglicherweise TAs haben, nicht 6.858 TAs.
Professor: Ja, das stimmt. Obwohl es Schüler in Gruppe 6.858 gibt, die TAs anderer Klassen sind, ist dies vielleicht nicht wirklich großartig. Aber versuchen wir trotzdem, die Schnittpunkte dieser Gruppen irgendwie zu machen. Dazu können wir den Berechtigungsmechanismus verwenden.
/foo/bar/grades ,
foo ,
gid 6.858 . , ,
/foo .
/bar ,
gid TAs, .
/foo/bar/ ,
grades . , .
: , , , , 6.858 gid, TA - - 6.858 ?
: , . , , , Unix , , , , , . ,
MACS — mandatory accesscontrol systems, . , , : , . . , - .
Unix , , , TA - , Unix . , - . - , Unix , , . , , . , , , . , . Unix.
, , , , - , . - , , , .
, , Unix.
, — .
OKWS , Unix . Unix , . , «» , .
, : , . , . - , , Unix – , , , , .
– Unix - , .
OKWS , . , , , - , . , , , - . - , .
, . , , .
? ? ? Unix . , , – Unix ,
ptrace .

. , , , , , . , ,
web ,
gid TAs, .
, , .
userid .
ptrace —
uid uid .
ptrace Linux . , , , - , , , . - . , ID.
27:50
:
MIT-Kurs "Computer Systems Security". 4: « », 2.
Vielen Dank für Ihren Aufenthalt bei uns. Gefällt dir unser Artikel? Möchten Sie weitere interessante Materialien sehen? Unterstützen Sie uns, indem Sie eine Bestellung
aufgeben oder sie Ihren Freunden empfehlen.
Habr-Benutzer erhalten 30% Rabatt auf ein einzigartiges Analogon von Einstiegsservern, das 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 $ 20 oder wie teilt man den Server? (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 von 249 US-Dollar in den Niederlanden und den USA! Lesen Sie mehr über
den Aufbau eines Infrastrukturgebäudes. Klasse mit Dell R730xd E5-2650 v4 Servern für 9.000 Euro für einen Cent?