MIT-Kurs "Computer Systems Security". Vorlesung 21: Datenverfolgung, Teil 1

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 3
Vorlesung 2: „Kontrolle von Hackerangriffen“ Teil 1 / Teil 2 / Teil 3
Vorlesung 3: „Pufferüberläufe: Exploits und Schutz“ Teil 1 / Teil 2 / Teil 3
Vorlesung 4: „Trennung von Privilegien“ Teil 1 / Teil 2 / Teil 3
Vorlesung 5: „Woher kommen Sicherheitssysteme?“ Teil 1 / Teil 2
Vorlesung 6: „Chancen“ Teil 1 / Teil 2 / Teil 3
Vorlesung 7: „Native Client Sandbox“ Teil 1 / Teil 2 / Teil 3
Vorlesung 8: „Netzwerksicherheitsmodell“ Teil 1 / Teil 2 / Teil 3
Vorlesung 9: „Sicherheit von Webanwendungen“ Teil 1 / Teil 2 / Teil 3
Vorlesung 10: „Symbolische Ausführung“ Teil 1 / Teil 2 / Teil 3
Vorlesung 11: „Ur / Web-Programmiersprache“ Teil 1 / Teil 2 / Teil 3
Vorlesung 12: Netzwerksicherheit Teil 1 / Teil 2 / Teil 3
Vorlesung 13: „Netzwerkprotokolle“ Teil 1 / Teil 2 / Teil 3
Vorlesung 14: „SSL und HTTPS“ Teil 1 / Teil 2 / Teil 3
Vorlesung 15: „Medizinische Software“ Teil 1 / Teil 2 / Teil 3
Vorlesung 16: „Seitenkanalangriffe“ Teil 1 / Teil 2 / Teil 3
Vorlesung 17: „Benutzerauthentifizierung“ Teil 1 / Teil 2 / Teil 3
Vorlesung 18: „Privates Surfen im Internet“ Teil 1 / Teil 2 / Teil 3
Vorlesung 19: „Anonyme Netzwerke“ Teil 1 / Teil 2 / Teil 3
Vorlesung 20: „Sicherheit von Mobiltelefonen“ Teil 1 / Teil 2 / Teil 3
Vorlesung 21: „Tracking-Daten“ Teil 1 / Teil 2 / Teil 3

James Mickens: Großartig, fangen wir an. Vielen Dank, dass Sie an diesem besonderen Tag vor Thanksgiving zum Vortrag gekommen sind. Ich bin froh, Leute, dass Sie sich so sehr für Computersicherheit engagieren, und ich bin sicher, dass Sie auf dem Arbeitsmarkt gefragt sein werden. Sie können mich gerne als Quelle für Empfehlungen bezeichnen. Heute werden wir über Taint-Tracking-Infektions-Tracking sprechen, insbesondere über ein System namens TaintDroid, das diese Art der Analyse des Informationsflusses im Kontext von Android-Smartphones bietet.



Das Hauptproblem in der Vorlesung ist die Tatsache, dass Anwendungen Daten abrufen können. Die Idee ist, dass Ihr Telefon viele vertrauliche Informationen enthält - eine Kontaktliste, Ihre Telefonnummer, E-Mail-Adresse und all das. Wenn das Betriebssystem und das Telefon selbst nicht vorsichtig sind, kann die böswillige Anwendung möglicherweise einige dieser Informationen extrahieren und an ihren Heimserver zurücksenden, und der Server kann diese Informationen für alle Arten von unglücklichen Dingen verwenden, über die wir später sprechen werden.

Im globalen Sinne bietet ein Artikel über TaintDroid eine solche Lösung: Überwachen Sie vertrauliche Daten, während sie das System durchlaufen, und stoppen Sie sie im Wesentlichen, bevor sie über das Netzwerk übertragen werden. Mit anderen Worten, wir müssen die Möglichkeit verhindern, Daten als Argument an Netzwerksystemaufrufe zu übergeben. Wenn wir dies tun können, können wir das Leck anscheinend im Wesentlichen genau in dem Moment stoppen, in dem es beginnt.

Sie fragen sich vielleicht, warum herkömmliche Android-Berechtigungen nicht ausreichen, um das Extrahieren dieser Art von Daten zu verhindern. Der Grund dafür ist, dass diese Berechtigungen nicht die richtige Grammatik haben, um die Art des Angriffs zu beschreiben, den wir verhindern möchten. Android-Berechtigungen beziehen sich normalerweise auf Anwendungsberechtigungen zum Schreiben oder Lesen von etwas von einem bestimmten Gerät. Aber jetzt sprechen wir darüber, was sich auf einer anderen semantischen Ebene befindet. Selbst wenn einer Anwendung das Recht eingeräumt wurde, Informationen zu lesen oder Daten auf ein Gerät wie ein Netzwerk zu schreiben, kann es gefährlich sein, der Anwendung das Lesen oder Schreiben bestimmter vertraulicher Daten auf ein Gerät zu erlauben, mit dem sie interagieren darf.

Mit anderen Worten, bei Verwendung herkömmlicher Android-Sicherheitsrichtlinien ist es schwierig, über bestimmte Datentypen zu sprechen. Es ist viel einfacher darüber zu sprechen, ob die Anwendung auf das Gerät zugreift oder nicht. Vielleicht können wir dieses Problem mit einer alternativen Lösung lösen, ich werde es mit einem Sternchen kennzeichnen.



Diese alternative Lösung besteht darin, niemals Anwendungen zu installieren, die vertrauliche Daten lesen und / oder auf das Netzwerk zugreifen können. Auf den ersten Blick scheint das Problem behoben zu sein. Denn wenn eine Anwendung nicht beide Dinge gleichzeitig ausführen kann, kann sie entweder nicht auf vertrauliche Daten zugreifen oder sie lesen, aber nicht über das Netzwerk senden. Was denkst du ist der Haken?

Jeder denkt schon an den festlichen Truthahn, ich sehe es in deinen Augen. Nun, der Hauptgrund, warum dies eine schlechte Idee ist, ist, dass diese Maßnahme die Arbeit vieler legitimer Anwendungen unterbrechen kann. Schließlich gibt es viele Programme, zum Beispiel Mail-Clients, die tatsächlich in der Lage sein sollten, einige vertrauliche Daten zu lesen und über das Netzwerk zu senden.

Wenn wir nur sagen, dass wir diese Art von Aktivität verhindern werden, werden wir tatsächlich die Arbeit vieler Anwendungen auf dem Telefon verbieten, die den Benutzern wahrscheinlich nicht gefallen werden.
Hier gibt es ein weiteres Problem: Selbst wenn wir diese Lösung implementieren würden, würde dies nicht verhindern, dass Daten durch eine Reihe verschiedener Mechanismen von Kanälen von Drittanbietern verloren gehen. In früheren Vorlesungen haben wir beispielsweise berücksichtigt, dass der Browser-Cache beispielsweise dazu beitragen kann, dass Informationen über einen Benutzer, der eine bestimmte Site besucht, verloren gehen. Selbst mit der Implementierung einer solchen Sicherheitsrichtlinie können wir daher nicht alle Kanäle von Drittanbietern kontrollieren. Wenig später werden wir über Kanäle von Drittanbietern sprechen.

Die vorgeschlagene Lösung wird die Absprache von Anwendungen nicht stoppen, wenn zwei Anwendungen zusammenarbeiten können, um das Sicherheitssystem zu beschädigen. Was ist beispielsweise, wenn eine Anwendung keinen Netzwerkzugriff hat, aber mit der zweiten Anwendung kommunizieren kann, über die sie verfügt? Schließlich ist es möglich, dass die erste Anwendung die IPC-Android-Mechanismen verwendet, um vertrauliche Daten an eine Anwendung mit Netzwerkberechtigungen zu übertragen, und diese zweite Anwendung kann diese Informationen auf den Server hochladen. Aber selbst wenn die Anwendungen nicht in Absprache sind, kann es einen Trick geben, wenn eine Anwendung andere Anwendungen dazu zwingen kann, versehentlich vertrauliche Daten auszugeben.



Es ist möglich, dass das E-Mail-Programm einen Fehler aufweist, aufgrund dessen es zu viele zufällige Nachrichten von anderen Komponenten des Systems empfängt. Dann könnten wir eine spezielle Absicht für Intent erstellen, um das E-Mail-Programm auszutricksen, und es würde die Google Mail-Anwendung zwingen, etwas Wichtiges per E-Mail außerhalb des Telefons zu senden. Diese alternative Lösung funktioniert also nicht gut genug.

Wir sind daher sehr besorgt, dass vertrauliche Daten das Telefon verlassen. Überlegen Sie, was bösartige Anwendungen für Android in der Praxis bewirken. Gibt es in der realen Welt Angriffe, die durch die Verfolgung von Taint-Tracking-Infektionen verhindert werden können? Die Antwort lautet ja. Schädliche Programme werden für Mobiltelefone zu einem zunehmenden Problem. Das erste, was böswillige Anwendungen tun können, ist, Ihren Standort oder Ihre IMEI zu verwenden, um Dienste zu bewerben oder durchzusetzen.

Schädliche Software kann Ihren physischen Standort bestimmen. Zum Beispiel sind Sie nicht weit vom MIT-Campus entfernt, also sind Sie ein hungriger Student. Warum also nicht mein Restaurant auf Rädern besuchen, das ganz in der Nähe liegt?

IMEI ist eine Ganzzahl, die die eindeutige Kennung Ihres Telefons darstellt. Es kann für Ihre Verfolgung an verschiedenen Orten verwendet werden, insbesondere an solchen, an denen Sie nicht "aufleuchten" möchten. Daher gibt es in der Natur schädliche Programme, die solche Dinge tun können.

Das zweite, was Malware tut, ist, Ihre persönlichen Daten zu stehlen. Sie versuchen möglicherweise, Ihre Telefonnummer oder Kontaktliste zu stehlen und diese Dinge auf einen Remote-Server hochzuladen. Dies kann erforderlich sein, um sich beispielsweise in einer Nachricht auszugeben, die später zum Senden von Spam verwendet wird.

Vielleicht ist das Schlimmste, was Malware zumindest für mich tun kann, Ihr Telefon in einen Bot zu verwandeln.



Dies ist natürlich ein Problem, dem sich unsere Eltern nicht stellen mussten. Moderne Telefone sind so leistungsfähig, dass sie zum Versenden von Spam verwendet werden können. Es gibt viele Schadprogramme, die auf bestimmte Unternehmensumgebungen abzielen und genau das tun. Sobald sie in Ihrem Telefon sind, beginnen sie, es als Teil eines Spam-Netzwerks zu verwenden.

Student: Ist es Malware, die speziell auf das Hacken des Android-Betriebssystems abzielt, oder ist es nur eine typische Anwendung? Wenn dies eine typische Anwendung ist, können wir sie dann möglicherweise mit Berechtigungen sichern?

Professor: Das ist eine sehr gute Frage. Es gibt beide Arten von Malware. Wie sich herausstellte, ist es ziemlich einfach, Benutzer dazu zu bringen, auf verschiedene Schaltflächen zu klicken. Ich werde Ihnen ein Beispiel geben, das weniger Malware als das nachlässige Verhalten von Menschen betrifft.
Es gibt ein beliebtes Spiel Angry Birds. Gehen Sie in den App Store und suchen Sie es in der Anwendungssuchleiste. Als erstes in den Suchergebnissen erhalten Sie das ursprüngliche Angry Birds-Spiel, und in der zweiten Zeile befindet sich möglicherweise die Angry Birdss-Anwendung mit zwei Sekunden am Ende. Und viele Leute werden es vorziehen, diese zweite Anwendung herunterzuladen, da sie möglicherweise weniger kostet als die Originalversion. Während der Installation schreibt diese Anwendung außerdem, dass Sie nach der Installation zulassen, dass dies so und so und so weiter geschieht, und Sie sagen: „Natürlich kein Problem!“ Weil Sie die gewünschten Angry Birds für nur ein paar Cent erhalten haben. Nach diesem „Boom“ - und Sie sind am Haken eines Hackers!

Sie haben jedoch absolut Recht, wenn Sie davon ausgehen, dass die Installation von Malware bei korrektem Android-Sicherheitsmodell vollständig von der Dummheit oder Naivität der Benutzer abhängt, die ihr Zugriff auf das Netzwerk gewähren, beispielsweise wenn Ihr Spiel „Tic Tac Toe“ keinen Zugriff darauf haben sollte Netzwerk.

So können Sie Ihr Telefon in einen Bot verwandeln. Dies ist aus vielen Gründen schrecklich, nicht nur, weil Ihr Telefon Spam sendet, sondern auch, weil Sie möglicherweise für die Daten all der Briefe bezahlen, die von Ihrem Telefon gesendet werden. Außerdem ist der Akku schnell leer, da Ihr Telefon ständig Spam sendet.

Es gibt Anwendungen, die Ihre persönlichen Daten verwenden, um Schaden zu verursachen. Das Besondere an diesem Bot ist, dass er Ihre Kontaktliste anzeigen und in Ihrem Namen Spam an Personen senden kann, die Sie kennen. Darüber hinaus steigt die Wahrscheinlichkeit, dass sie in diesem Brief auf etwas Bösartiges klicken, um ein Vielfaches.



Es ist also eine gute Sache, das Extrahieren von Informationen zu verhindern, aber es verhindert nicht die Möglichkeit von Hacking. Es gibt Mechanismen, auf die wir zuallererst achten sollten, da sie verhindern, dass ein Angreifer Ihr Smartphone erfasst, indem sie Benutzer darüber informieren, worauf sie klicken können, und in keiner Weise darauf klicken sollten.

Daher ist Taint-Tracking allein keine ausreichende Lösung, um eine Situation zu verhindern, die Ihr Telefon zu beschlagnahmen droht.

Mal sehen, wie TaintDroid funktioniert. Wie bereits erwähnt, verfolgt TaintDroid alle Ihre vertraulichen Informationen, während sie sich im System verbreiten. TaintDroid unterscheidet also zwischen sogenannten "Informationsquellen", Informationsquellen und "Informationssenken". Informationsquellen erzeugen sensible Daten. Normalerweise sind dies Sensoren - GPS, Beschleunigungsmesser und dergleichen. Dies kann Ihre Kontaktliste, IMEI, alles sein, was Sie, einen bestimmten Benutzer, mit Ihrem realen Telefon verbinden kann. Dies sind Geräte, die infizierte Informationen generieren, die als Quellen infizierter Daten bezeichnet werden - Taint-Quelle.

In diesem Fall sind Informationssenken Orte, an denen infizierte Daten nicht auslaufen dürfen. Im Fall von TaintDroid ist der Hauptabsorber das Netzwerk. Später werden wir darüber sprechen, dass Sie sich mehr Orte vorstellen können, an denen Informationen verloren gehen, das Netzwerk jedoch einen besonderen Platz in TaintDroid einnimmt. In einem allgemeineren System als einem Telefon befinden sich möglicherweise andere Informationssenken. TaintDroid wurde jedoch entwickelt, um Leckagen im Netzwerk zu verhindern.

TaintDroid verwendet einen 32-Bit-Bitvektor, um eine Taint-Infektion darzustellen. Dies bedeutet, dass Sie nicht mehr als 32 verschiedene Infektionsquellen haben können.



Daher befindet sich für jede vertrauliche Information eine Einheit an einer bestimmten Position, wenn sie mit einer bestimmten Infektionsquelle infiziert wurde. Zum Beispiel wurde es aus GPS-Daten, aus etwas aus Ihrer Kontaktliste usw. abgerufen.

Interessanterweise sind 32 Infektionsquellen tatsächlich nicht so viele. Die Frage ist, ob diese Anzahl für dieses bestimmte System groß genug ist und ob sie für allgemeine Systeme mit Informationslecks groß genug ist. Im Sonderfall von TaintDroid sind 32 Infektionsquellen eine angemessene Menge, da dieses Problem einen begrenzten Informationsfluss betrifft.

In Anbetracht aller Sensoren, die in Ihrem Telefon, vertraulichen Datenbanken und dergleichen vorhanden sind, scheint 32 die richtige Menge für die Speicherung dieser infizierten Flags zu sein. Wie wir aus der Implementierung dieses Systems sehen werden, ist 32 tatsächlich eine sehr bequeme Zahl, da sie 32 Bit entspricht, einer Ganzzahl, mit der Sie diese Flags effektiv konstruieren können.

Wie wir später erläutern möchten, reichen 32 Bit möglicherweise nicht aus, wenn Sie Programmierern die Möglichkeit geben möchten, Informationslecks zu kontrollieren, dh ihre eigenen Infektionsquellen und ihre eigenen Arten von Lecks anzugeben. In diesem Fall sollten Sie eine komplexere Laufzeitunterstützung hinzufügen, um mehr Speicherplatz anzuzeigen.

Grob gesagt, wenn Sie sich ansehen, wie eine Infektion durch ein System fließt, tritt sie im Allgemeinen von rechts nach links auf. Ich werde ein einfaches Beispiel geben. Wenn Sie beispielsweise eine Art Operator haben, deklarieren Sie eine ganzzahlige Variable, die dem Breitengradwert Ihres Standorts entspricht: Int lat = gps.getLat (). Im Wesentlichen generiert das Objekt rechts vom Gleichheitszeichen einen Wert, der eine Art Grenze hat mit ihrer Infektion.



Es wird also ein bestimmtes Flag gesetzt, das besagt: "Hey, dieser Wert, den ich zurückgebe, stammt aus einer vertraulichen Quelle"! Die Infektion wird also von hier auf der rechten Seite kommen und hier nach links gehen, um diesen Teil von lat zu infizieren. So sieht es in den Augen eines Entwicklers aus, der den Quellcode schreibt. Die virtuelle Dalvik-Maschine verwendet jedoch dieses Registerformat in Kleinbuchstaben, um Programme zu erstellen, und auf diese Weise wird die Taint-Semantik in der Realität implementiert.

In der Tabelle für einen der Vorlesungsartikel finden Sie eine große Liste von Befehlen mit einer Beschreibung, wie sich eine Infektion auf diese Befehlstypen auswirkt. Sie können sich beispielsweise vorstellen, dass Sie eine Move-Op-Operation haben, die auf das Ziel dst und das Quell-srs zeigt. In einer virtuellen Dalvik-Maschine auf einer abstrakten Computer-Engine kann dies als Register betrachtet werden. Wie gesagt, die Infektion geht von der rechten zur linken Seite. Wenn der Dalvik-Interpreter in diesem Fall Anweisungen von der rechten Seite ausführt, berücksichtigt er das Taint-Label des Sourse-Parameters und weist es dem dst-Parameter zu.

Angenommen, wir haben eine andere Anweisung in Form einer binären Binäroperation, die so etwas wie Addition macht. Wir haben ein Ziel dst und zwei Quellen: srs0 und srs1. In diesem Fall nimmt der Dalvik-Interpreter, wenn er diese Anweisung verarbeitet, Verschmutzungen aus beiden Quellen, kombiniert sie und weist diese Vereinigung dann dem Ziel dst zu.



Es ist ziemlich einfach. Die Tabelle zeigt die verschiedenen Arten von Anweisungen, die Sie sehen werden. In erster Näherung sind dies jedoch die häufigsten Methoden zur Verbreitung von Infektionen im System. Schauen wir uns einige besonders interessante Fälle an, die im Artikel erwähnt werden. Ein solcher Sonderfall sind Arrays.

Angenommen, Sie haben einen Befehl char c, der einen bestimmten Wert C zuweist. Gleichzeitig deklariert das Programm ein Array char char [], das die Großbuchstaben "A", "B", "C" enthält: char superior [] = ["A. "," B "," C "]

Eine sehr häufige Sache im Code ist die Indizierung in ein Array wie dieses, wobei C direkt verwendet wird, da Kernigan und Ritchie, wie wir alle wissen, lernen, dass die meisten Zeichen Ganzzahlen sind. Sie können sich also vorstellen, dass es einen Zeichen-UpperC-Code gibt, der besagt, dass die Großbuchstaben dieser Zeichen "A", "B", "C" den spezifischen Indizes in dieser Tabelle entsprechen: char UpperC = Upper [C]



Dies wirft die Frage auf, welche Infektion in diesem Fall UpperC bekommen sollte. Es scheint, dass in früheren Fällen bei uns alles einfach war, aber in diesem Fall ist viel los. Wir haben ein Array ["A", "B", "C"], das eine Art von Infektion haben kann, und wir haben dieses Symbol C, das auch eine eigene Art von Infektion haben kann. Dalvik , binary-op. upperC [C] .

, upperC - upper [ ]. - [C]. , , upperC , .

: , taint move op binary op?

: move op. , srs… -, . , , , , , taint. , , .
, srs , , . srs : « , 2 , srs». .

– , taint. , srs0 srs1, taint, :

\.

dst :

\.

, , 32- , , . , . taints, , .
, , , binary-op. upperC [C] [«», «», «»]. TaintDroid , taint . , . , 32- , «» , .

, taint. — , , ? , taint , , . , , , , . - , .

, . , , - , , . , , – , , . .

, – , , Native methods, - . Native- . , Dalvik , system.arraycopy(), - , C C++. Native method, .

- JNI. JNI, Java Native Interface — C C++ Java. , Java , Java. x86, ARM , .

- taint , Dalvik. Java-, C C++ . , Native-, TaintDroid , Java.

\.

, « », , taint. , – . - , . , Dalvik , system.arraycopy(), , taint. arraycopy() : « , , , , ».

? , , . , , Dalvik , , , .

- JNI , . , , , C C++, .

, , . , - , , , . .

26:25

MIT-Kurs "Computer Systems Security". 21: « », 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 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 Cores) 10GB DDR4 240GB SSD 1Gbps , .

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?

Source: https://habr.com/ru/post/de433376/


All Articles