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 3Vorlesung 5: „Woher kommen Sicherheitssysteme?“
Teil 1 /
Teil 2Vorlesung 6: „Chancen“
Teil 1 /
Teil 2 /
Teil 3Vorlesung 7: „Native Client Sandbox“
Teil 1 /
Teil 2 /
Teil 3Vorlesung 8: „Netzwerksicherheitsmodell“
Teil 1 /
Teil 2 /
Teil 3Vorlesung 9: „Sicherheit von Webanwendungen“
Teil 1 /
Teil 2 /
Teil 3Vorlesung 10: „Symbolische Ausführung“
Teil 1 /
Teil 2 /
Teil 3Vorlesung 11: „Ur / Web-Programmiersprache“
Teil 1 /
Teil 2 /
Teil 3Vorlesung 12: Netzwerksicherheit
Teil 1 /
Teil 2 /
Teil 3Vorlesung 13: „Netzwerkprotokolle“
Teil 1 /
Teil 2 /
Teil 3Vorlesung 14: „SSL und HTTPS“
Teil 1 /
Teil 2 /
Teil 3Vorlesung 15: „Medizinische Software“
Teil 1 /
Teil 2 /
Teil 3Vorlesung 16: „Seitenkanalangriffe“
Teil 1 /
Teil 2 /
Teil 3Vorlesung 17: „Benutzerauthentifizierung“
Teil 1 /
Teil 2 /
Teil 3Vorlesung 18: „Privates Surfen im Internet“
Teil 1 /
Teil 2 /
Teil 3Vorlesung 19: „Anonyme Netzwerke“
Teil 1 /
Teil 2 /
Teil 3 Schauen wir uns die Funktionsweise des Protokolls genauer an. Weil es eine Schande wäre, einen Vorlesungsartikel zu lesen und nicht über Dinge zu sprechen, auf die er aufmerksam macht. Ich möchte mich noch einmal für meine Technik des Zeichnens an der Tafel entschuldigen, schließlich verbringe ich die meiste Zeit am Tisch damit, am Computer zu tippen.
Dies ist eine fremde Technologie. Also hier ist der Repeater. Und hier ist Alice. Hier ist ein weiterer Repeater und hier ist Bob. Alice möchte jetzt mit Bob sprechen, also erstellt sie als erstes eine Kette über diese Repeater zu Bob. Angenommen, sie hat diese beiden Repeater R1 und R2 ausgewählt. Alice stellt zuerst eine TLS-Verbindung zu R1 her. Nehmen wir an, sie hat bereits eine TLS-Verbindung zu R2. Anschließend führt Alice zunächst eine Einwegauthentifizierung und einen Einwegabgleich anonymer Schlüssel durch.

Das alte Tor-Protokoll hieß TAP - Tor Authentication Protocol, das neue heißt NTor. Beide haben Sicherheitsnachweise. Dies ist ein korrekter Beweis, obwohl in ihrer Beschreibung Fehler gemacht wurden.
Nach der Authentifizierung wählt Alice die Kanal-ID-Schaltungs-ID aus, z. B. 3, weist den Repeater an, Kanal "3" - "3" zu erstellen, und teilt ihr mit, dass der Kanal erstellt - erstellt wurde. Alice und das Relais teilen sich jetzt den geheimen symmetrischen Schlüssel S1. Und beide speichern es mit einem Index von "3", der einen Link zu diesem Kanal darstellt.

Alice kann jetzt diesen Schlüssel verwenden, um R1-Nachrichten zu senden. Sie sagt, dass dies auf der "Troika" die Kanal-ID ist, die im Vorlesungsartikel besprochen wird. Eine erweiterte Zelle mit Inhalten wird an das Relais gesendet.

Eine erweiterte Zelle enthält im Wesentlichen die erste Hälfte eines Handshake-Handshakes. Diesmal wird es jedoch nicht mit dem öffentlichen Schlüssel R1 verschlüsselt, sondern mit dem öffentlichen Schlüssel R2. Dies zeigt an, dass die Nachricht an R2 gesendet wird. Somit weiß R1, dass es notwendig ist, einen neuen Kanal für R2 zu öffnen, und meldet dies dem R2-Relais mit der Nachricht create (....), in der die gleiche Hälfte des von Alice stammenden Handshakes in Klammern steht. Dabei erstellt R1 eine eigene Leitungs-ID, da die Kanal-IDs andere Kanäle in dieser zweiten TLS-Verbindung definieren. Außerdem weiß Alice nicht, welche Kanalbezeichner hier noch verwendet werden, da dies eine „persönliche Angelegenheit“ von R1 und R2 ist.

So kann der Repeater beispielsweise ID 95 wählen. Dies ist in der Tat unwahrscheinlich, da die Kanalnummer zufällig aus 4 Byte Speicherplatz ausgewählt wird, aber ich möchte heute nicht alle 32-Bit-Nummern ausschreiben.
Danach beantwortet R2 das erste „erstellte“ Relais und R1 gibt eine erweiterte Zelle, die mit dem S1-Schlüssel verschlüsselt ist, an Alice zurück. Jetzt teilen sich Alice und R2 Relay S2 und Alice kann Nachrichten senden, zuerst mit S2 und dann mit S1 verschlüsselt. Sie sendet eine solche Nachricht, R1 entfernt die Verschlüsselung von S1 und leitet sie weiter.

Das erste Relais weiß, dass Kanal 3-Nachrichten an das zweite Relais auf Kanal 95 gesendet werden müssen. Nach dem Empfang dieser Nachricht erkennt das zweite Relais, dass der Schlüssel S2 Kanal 95 entspricht, und entschlüsselt mit seiner Hilfe diese Nachricht: „Oh, es heißt offene Verbindung mit Bob“! Nachdem dies gelesen wurde, öffnet das R2-Relay eine TCP-Verbindung mit Bob und meldet dies Alice unter Verwendung des gleichen Prozesses zum Weiterleiten von Nachrichten.
Nach all dem sagt Alice: „Großartig, dann sag Bob etwas wie http: 1.0get /index.html“ und dann geht das Leben weiter.
Mal sehen, was ich im Vorlesungsartikel vermisst habe ... also ... dies, das und das. Okay, was leiten wir eigentlich weiter? Einige Lösungen in diesem Bereich behaupten, dass es notwendig ist, IP-Pakete hin und her zu übertragen, dh dieses Schema sollte einfach eine Möglichkeit sein, IP-Pakete zu übertragen. Eines der Probleme ist, dass wir so viele Benutzer wie möglich unterstützen möchten, was bedeutet, dass wir auf allen Arten von Betriebssystemen arbeiten müssen.
TCP-Stacks verschiedener Betriebssysteme verhalten sich jedoch unterschiedlich. Wenn Sie jemals Nmap oder ein Tool zur Analyse des Netzwerkverkehrs verwendet haben, können Sie Windows TCP leicht von FreeBSD TCP oder TCP Linux unterscheiden. Sie können sogar zwischen verschiedenen Versionen unterscheiden. Wenn Sie rohe IP-Pakete an einen ausgewählten Host senden können, können Sie darüber hinaus Antworten provozieren, die teilweise auf den Aktivitäten des Hosts basieren.

Wenn Sie also IP-Pakete hin und her weiterleiten, benötigen Sie eine IP-Normalisierung. Da alles, was kleiner als der vollständige IP-Stack ist, nicht an der Normalisierung arbeiten kann, werden Sie nicht dazu kommen.
Stattdessen wählen wir den einfachsten Weg - wir akzeptieren einfach den gesamten Inhalt aus den TCP-Streams, vorausgesetzt, er ist zuverlässig und alles ist in Ordnung. Das Programm analysiert alle von Alice übertragenen Daten, akzeptiert TCP-Verbindungen, die von ihren Anwendungen stammen, und leitet den Inhalt einfach weiter, ohne auf Netzwerkebene etwas Kompliziertes zu tun.
Sie können versuchen, die Produktivität zu steigern, indem Sie andere in den Vorlesungsunterlagen beschriebene Mittel verwenden. Ich habe jedoch ein Schema beschrieben, das tatsächlich implementiert werden kann, da wir beim Erstellen von Tor Sicherheitsklassen und Compilern viel mehr Aufmerksamkeit geschenkt haben als Netzwerkklassen. Jetzt haben wir Netzwerkspezialisten, aber in den Jahren 2003-2004 hatten wir einen Mangel an ihnen.
Das TCP-Protokoll scheint eine sehr angemessene, korrekte Ebene zu sein. Die in einigen Originalprojekten diskutierten übergeordneten Protokolle verwenden separate Proxys auf der Alice-Seite für HTTP, FTP und scheinen eine schlechte Idee zu sein. Dies liegt daran, dass jedes Protokoll während der gesamten Alice-Bob-Verbindung von Anfang bis Ende verschlüsselt sein muss. Wenn wir Glück haben, kann Alice eine TLS-Verbindung zwischen R2 und Bob herstellen, die über Integritäts- und Sicherheitsfunktionen verfügt.
Wenn dies jedoch der Fall ist, müssen alle Anonymitätstransformationen, die Sie auf verschlüsselte Daten anwenden möchten, in der von Alice verwendeten Anwendung erfolgen, bevor die TLS-Verbindung vollständig erstellt wird. Dies ist jedoch mit einem Proxyserver nicht möglich, sodass TCP für uns besser geeignet ist.
Jemand fragte mich, wo sind unsere Sicherheitsnachweise? Wir haben Sicherheitsnachweise für viele der von uns verwendeten Verschlüsselungsmethoden. Dies sind Standardversionen von Dokumenten. Im Allgemeinen gibt es für das Protokoll Hinweise auf die Sicherheit bestimmter Aspekte des Zwiebelroutings. Die Modelle, die sie verwenden müssen, um zu beweisen, dass dies Anonymität bietet, sollten jedoch auf solch bizarren Eigenschaften des Universums, Eigenschaften des Netzwerks oder den Fähigkeiten des Angreifers basieren, dass sie nur die Programmieraufträge erfüllen können, die auf einigen theoretischen Konferenzen sitzen.
Kurz gesagt, diese Anonymitätseigenschaften müssen beweisen, dass ein Angreifer, der das Volumen und den Zeitpunkt der Daten im Abschnitt Alice-R1 sehen kann, diese nicht identifizieren kann, indem er nur die Ausgabebytes im Abschnitt R2-Bob beobachtet. Dies ist jedoch kein zufriedenstellendes Ergebnis. Sagen wir einfach: Welche Sicherheitsgarantien möchten Sie von einem System, das Sie nicht erstellen können? Nun, ich muss mit solchen Aussagen vorsichtig sein ... Denken Sie daran, dass es Systeme mit starken Garantien für Anonymität gibt und Sie wissen, wie man solche Systeme erstellt, aber Sie werden sie niemals verwenden wollen. Wie zum Beispiel das klassische DC-Net-Netzwerk, das garantierte Anonymität bietet, mit der Ausnahme, dass jeder Teilnehmer das gesamte Netzwerk schließen kann, indem er einfach aufhört, daran teilzunehmen. Außerdem skaliert dieses System nicht.
Aber für die Dinge, die in unserer Zeit geschaffen wurden, sind die Eigenschaften der Anonymität eher probabilistisch und nicht kategorisch garantiert. Anstatt zu fragen, ob dieses System die Sicherheit von Alice garantiert, lohnt es sich zu fragen, wie viel Verkehr Alice sicher senden kann, wenn sie eine 99% ige Chance haben möchte, dass diese Netzwerkaktivität nicht mit ihrer Aktivität verknüpft werden kann.
Die erste Frage, die wir uns gestellt haben, als wir angefangen haben, Tor zu erschaffen, ist, wer all diese Dinge verwalten wird. Wir wussten nicht, ob unser System wirklich "auf die Beine kommen" würde, daher bestand die einzige Möglichkeit darin, zu versuchen, herauszufinden, was daraus wurde.

Wir hatten genug Freiwillige. Eine ganze Reihe von gemeinnützigen Organisationen wollte einfach nur Spenden tätigen und damit Bandbreite kaufen und Tor-Websites starten. Einige Universitäten und mehrere private Unternehmen nahmen an dem Projekt teil, deren Sicherheitsdienste beschlossen, dass es Spaß machen würde, einen eigenen Tor-Server zu starten.
In diesem Fall traten rechtliche Probleme auf, aber auch hier bin ich kein Anwalt und kann diese Dinge nicht rechtlich beurteilen. Fünf verschiedene Personen fragten mich jedoch nach der Legalität unseres Systems. Soweit ich das beurteilen kann, gibt es zumindest in den USA keine rechtlichen Hindernisse für den Start des Tor-Servers. Und es scheint mir, dass eine ähnliche Situation in den meisten europäischen Ländern auftritt. In Ländern mit weniger Internetfreiheit ist Tor restriktiver.
Das Problem ist nicht, wie legal oder illegal die Verwendung des Tor-Systems ist, sondern dass jemand mit meinem Tor-Server etwas Illegales oder Unerwünschtes tun kann. Wird mein Provider mich beispielsweise vom Netzwerk trennen, wenn ich meinen Computer als Tor-Knoten zur Verfügung stelle, werden Strafverfolgungsbehörden glauben, dass ich nur den Tor-Server verwende, oder sie werden meinen Computer abholen, um dies sicherzustellen.
In einem solchen Fall würde ich Ihnen raten, den Tor-Server nicht von Ihrem Schlafsaal aus zu starten oder Ihren Computer nicht zum Senden einer großen Menge an Ausgabeverkehr zu verwenden, vorausgesetzt, dies erlaubt Netzwerkrichtlinien. Ehrlich gesagt habe ich keine Ahnung, was diese Richtlinie jetzt ist, da sie sich seit meiner Studienzeit sehr verändert hat. In jedem Fall kann ein großer ausgehender Datenverkehr von Ihrem Computer im Hostel zu Problemen führen. Das Starten eines Repeaters ohne Ausgabe von Datenverkehr ins Internet ist jedoch weniger problematisch. Wenn Ihr Provider es Ihnen jedoch erlaubt, auf diese Weise zu handeln, ist dies eine vernünftige Sache.
Jemand hat mich gefragt, was passiert, wenn Benutzer einer bestimmten Site nicht vertrauen? Dies bringt uns zum nächsten Thema. Clients des Netzwerks verwenden die Software nach eigenem Ermessen, und Sie können ihnen nicht verbieten, einige der Programme zu verwenden, und sie dazu verpflichten, andere zu verwenden. Aber denken Sie daran, dass Anonymität Gesellschaft liebt. Wenn ich drei Knoten verwende, Sie drei andere Knoten verwenden und Sie drei andere Knoten sind, wird sich unser Datenverkehr überhaupt nicht vermischen.

Solange wir die von uns verwendeten Teile des Netzwerks trennen, können wir uns leicht voneinander unterscheiden. Wenn ich nun einfach einen oder zwei Knoten ausschließe und Sie einfach einen oder zwei Knoten ausschließen, ist dies keine so große Aufteilung des Netzwerks in Teile und erschwert unsere Identifizierung. Es wäre jedoch optimal, wenn jeder so oft wie möglich dieselben Knoten verwenden würde. Wie erreichen wir das?
In der ersten Version von Tor haben wir gerade eine Liste aller Knoten an Benutzer abgegeben, von denen es ungefähr 6 gab, von denen drei auf einem Computer im Tech Square-Informatiklabor arbeiteten. Dies war jedoch keine gute Idee, da die Anzahl der Knoten zunimmt und abnimmt, sich die Knoten selbst ändern und Sie nicht jedes Mal eine neue Version der Software veröffentlichen möchten, wenn jemand dem Netzwerk beitritt.
Sie können jedoch sicherstellen, dass jeder Knoten eine Liste aller anderen Knoten enthält, die mit ihm verbunden sind, und dass sich alle gegenseitig "bewerben" würden. Wenn der Client eine Verbindung zum Netzwerk herstellt, muss er nur einen Knoten kennen und dann sagen: „Hey, wer ist dort im Netzwerk?“.
Tatsächlich haben viele Menschen Projekte, die auf diesem Prinzip aufbauen. Viele frühe Peer-Anonymitätsprojekte funktionieren auf diese Weise. Aber das ist eine schreckliche Idee. Denn wenn Sie eine Verbindung zu einem Knoten herstellen und fragen, wer online ist, und Sie dem antwortenden Teilnehmer vertrauen, kann ich Ihnen antworten: „Ich bin online und mein Freund ist hier online, und mein Freund ist auch online und vieles mehr niemand ist online! " Das heißt, ich kann Ihnen eine beliebige Anzahl von gefälschten Knoten mitteilen, die ich verwalte und die Ihren gesamten Datenverkehr abfangen. Dies wird als rw-Erfassungsangriff oder Abfangangriff auf den Quellknoten bezeichnet.
Wenn wir also nur ein Verzeichnis haben, das von einer vertrauenswürdigen Partei verwaltet wird, ist dies nicht so gut. Nehmen wir also immer noch an, dass wir mehrere vertrauenswürdige Parteien haben. Clients gehen zu diesen vertrauenswürdigen Parteien, empfangen von jedem eine Liste aller Knoten und kombinieren sie zu einer gemeinsamen Liste von Netzwerkknoten.
Das ist nicht gut, weil wir wieder in identifizierbare Netzwerkcluster unterteilt sind. Wenn ich diese drei Knoten auswähle und Sie drei andere Knoten auswählen, verwenden wir unterschiedliche Knotensätze, was nicht gut ist. Wenn ich die Liste der an mich übergebenen Knoten verwende, kann mich eine der vertrauenswürdigen Parteien daran hindern, einen Knoten zu verwenden, den sie nicht mag, und ihn einfach nicht in der Liste angeben. Wenn ich eine kombinierte Liste verwende, kann mich jemand mit 20.000 gefälschten Servern überfluten und diese in der Liste angeben. Ich könnte für ihren Ausschluss stimmen und irgendwie die letzten beiden Probleme lösen, aber ich werde trotzdem von allen getrennt sein, die unterschiedliche vertrauenswürdige Parteien verwenden.

Wir könnten eine magische DHT oder eine verteilte Hash-Tabelle erstellen, eine Art magische verteilte Struktur, die alle Knoten durchläuft. Ich sage "Magie", denn obwohl es Projekte in diesem Bereich gibt und einige besser sind als andere, hat keines von ihnen derzeit solide Sicherheitsnachweise. So schwer, dass ich mit Zuversicht sagen kann, dass es wirklich sicher ist.
Hier ist die Lösung, zu der wir als Ergebnis gekommen sind. Unser Netzwerk verfügt über mehrere vertrauenswürdige Behörden, die von vertrauenswürdigen Parteien verwaltet werden und Listen von Knoten sammeln, die stündlich abstimmen, welche Knoten im Netzwerk arbeiten können, und abstimmen können, um verdächtige Knoten auszuschließen. Sie alle arbeiten an derselben / 16, die mit dem Verkehr so seltsame Dinge macht, und bilden einen Konsens, der auf der Berechnung des Abstimmungsergebnisses basiert.
Und Clients verwenden den Knoten nicht, wenn er nicht von einer ausreichenden Anzahl von „Stimmen“ vertrauenswürdiger Parteien signiert ist.
Dies ist nicht die endgültige Version des Projekts, aber es ist die beste, die wir bisher entwickeln konnten. Übrigens müssen Sie nur eine Liste aller autorisierten öffentlichen Schlüssel und eine Liste einiger Orte zum Empfangen von Verzeichnissen unter den Clients verteilen. Sie möchten, dass alle Knoten diese Verzeichnisse zwischenspeichern. Andernfalls wird die Netzwerklast gefährlich und die Netzwerkbandbreite sinkt drastisch.
Ich beabsichtige, die nächste Frage zu überspringen und direkt zu erfahren, wie Kunden auswählen sollen, welche Pfade sie durch das Netzwerk leiten sollen. Ich möchte über die Probleme bei der Verwendung und Erstellung von Anwendungen sprechen, die sich nicht selbst verraten würden. Ich möchte über Netzwerkmissbrauch, über versteckte Dienste und deren Funktionsweise, über Widerstand gegen Zensur und über Angriffe und Schutz sprechen. Wir haben aber nur noch 35 Minuten, sodass ich nicht über alles sprechen kann, was ich will. Ich bitte Sie, über die Themen abzustimmen, die Sie für die Diskussion als am wichtigsten erachten.
Wenn Sie der Meinung sind, dass eines der wichtigsten Themen die Auswahl von Pfaden und Knoten ist, heben Sie bitte Ihre Hand. Wenn eines der wichtigsten Themen Anwendungsprobleme sind und wie Sie sicherstellen können, dass Anwendungen Ihre Anonymität nicht verletzen, heben Sie bitte Ihre Hand. Wenn Missbrauch eines der wichtigsten Themen ist und wie er verhindert werden kann, heben Sie bitte Ihre Hand. Ich sehe also, dass dieses Thema beliebt ist, und markiere es.
Wenn es für Sie wichtig ist, wie versteckte Dienste funktionieren und wie sie besser funktionieren können, heben Sie bitte Ihre Hand. , , . , . , ? , . ?

, . , , . , , — .
, . , IP-, , . , Whole stack, -, , Tor.
«» -, , , , , , , , .
, : , , , . , -, . , . , . . , .
, . , , – , -, . , BitTorrent, Gnutella . , , , .
, , , 80 443. , 80. IRC- - IRC. -, , , , .
, , - 80 443, , , . , Tor. - , . , , .
, - IRC- IP-.
, My Little Pony, IRC-, , , , – . , IP-, , IP- . Tor .

IP- ? , IP ? Nein. , IP, . , IP-, .
IP- , , , , , , Tor -.
. - «» ? , IP, , IP IP-. , , IP-.
, , , , . – « ». , , , , , IRC – , , , .
, . , . , , , - IP, .
- . , 2013 , « 2» , Silk Road. « 2» , Tor, , , .
, - , OPSEC – . , , . Tor , .
, , , , , « ». : «, , . , , . , , — ». , , .
54:00
MIT-Kurs "Computer Systems Security". 19: « », 3 ( Tor).
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 Ihren Freunden empfehlen, einen
Rabatt von 30% für Habr-Benutzer 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 von $ 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).
VPS (KVM) E5-2650 v4 (6 Kerne) 10 GB DDR4 240 GB SSD 1 Gbit / s bis Januar kostenlos, wenn Sie für einen Zeitraum von sechs Monaten bezahlen, können Sie hier bestellen .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?