27 Stimmen

Überraschende Software-Schwachstellen oder Exploits?

Welches sind die seltsamsten/raffiniertesten/überraschendsten/tiefsten versteckten Software-Schwachstellen oder Exploits, die Sie je gesehen haben? Stellen im Code, von denen Sie dachten, dass sich dort keine Gefahr verbirgt, aber falsch lagen?

[Zur Klarstellung: Jeder kennt SQL-Injektionen, XSS oder Pufferüberläufe - Fehler, die oft durch unvorsichtige Kodierung entstehen. Aber Dinge wie Ken Thompsons versteckter Trojaner (Reflections on Trusting Trust: http://cm.bell-labs.com/who/ken/trust.html ), die jüngste NULL-Dereferenz-Schwachstelle im Linux-Kernel ( http://isc.sans.org/diary.html?storyid=6820 ), oder ein komplexer Angriff auf RNG mit Denial of Service ( http://news.ycombinator.com/item?id=639976 ) haben mich sehr beunruhigt].

Update: Vielen Dank für alle Antworten, sie waren großartig. Ich hatte die Qual der Wahl. Letztendlich habe ich mich entschieden, das Kopfgeld für den Seitenkanal-/Stromüberwachungsangriff zu zahlen. Nichtsdestotrotz zeigen all eure Antworten zusammen, dass ich mehr über Sicherheit lernen muss, da es ein wirklich tiefes Thema ist :).

0 Stimmen

Hinzufügung der Kennzeichnung "subjektiv", da es keine objektive Möglichkeit gibt, die Frage zu beantworten, was am "merkwürdigsten" oder überraschendsten ist.

0 Stimmen

Eigentlich handelt es sich bei allen dreien um neue Anwendungen alter, bekannter Probleme. Daran ist nichts auszusetzen, aber sie sollten nicht als besonders überraschend angesehen werden.

3 Stimmen

Das sind keine Bugs, das sind Features!

27voto

Mark Renouf Punkte 30149

Mein Favorit und das beeindruckendste, was ich bisher gesehen habe, ist eine Klasse von Kryptographietechniken, die als Seitenkanal-Angriffe .

Eine Art des Seitenkanalangriffs nutzt die Leistungsüberwachung. Verschlüsselungsschlüssel wurden von Smartcard-Geräten wiederhergestellt, indem sorgfältig analysiert wurde, wie viel Strom von der Stromversorgung bezogen wird. Die eingebetteten Prozessoren verbrauchen unterschiedlich viel Strom, um verschiedene Anweisungen zu verarbeiten. Mit dieser winzigen Information ist es möglich, geschützte Daten wiederherzustellen, und zwar völlig passiv.

0 Stimmen

Wow - das ist beängstigend! Wie soll man das verhindern?

3 Stimmen

Unter anderem: Umgekehrte Optimierung. Man nehme die Hardwareentwickler, die jahrelang herausgefunden haben, wie man eine Funktion mit den wenigsten Transistoren, dem geringsten Stromverbrauch und so schnell wie möglich erreichen kann, und versetze sie in eine neue Denkweise, in der Konsistenz alles ist. Wenn das Gerät konstant 100 ms für eine Transaktion benötigt und im Betrieb konstant 150 mW verbraucht, dann ist der Seitenkanalangriff fehlgeschlagen, und der Kunde ist vielleicht bereit, die höheren Hardwarekosten und die kürzere Batterielebensdauer in Kauf zu nehmen, um diesen Vorteil zu nutzen.

0 Stimmen

Das hängt natürlich von den Verschlüsselungstechniken ab. Es ist viel besser, assymetrische Verschlüsselung zu verwenden, bei der der Schlüssel selbst kompromittiert werden kann, ohne dass Ihr System beeinträchtigt wird.

21voto

Bratch Punkte 3903

Jeder kennt SQL-Injektionen, aber eine der überraschendsten Angriffe, von denen ich kürzlich hörte, war die Einfügung von SQL-Injektionen in Strichcodes. Prüfer sollten ALLE Eingaben auf bösartiges SQL überprüfen. Ein Angreifer könnte bei einer Veranstaltung auftauchen und das Registrierungssystem zum Absturz bringen, die Preise in Geschäften ändern usw. Ich denke, dass das Hacken von Strichcodes im Allgemeinen für mich überraschend war. Das hat keinen Wow-Faktor, sondern ist nur etwas, das man beachten sollte.

EDIT: Ich hatte gerade eine Diskussion, in der die Idee aufkam, die SQL-Injektion auf einen Magnetkartenstreifen zu setzen. Ich denke, man kann sie überall anbringen, also alle Eingaben testen, vor allem die von Benutzern und diese Art von Datenspeichern.

19voto

Falaina Punkte 6545

Ich denke, dass eine relativ neue Linux-Schwachstelle auf Ihre Beschreibung der Ausnutzung von Code, der sicher (wenn auch etwas unstrukturiert) erscheint, zutrifft.

Dabei handelt es sich um ein Stück Code im Linux-Kernel:

struct sock *sk = tun->sk;  // initialize sk with tun->sk
…
if (!tun)
    return POLLERR;  // if tun is NULL return error

Aufgrund einer GCC-Optimierung werden die if-Anweisung und der Body entfernt (was für Userland-Code sinnvoll ist, nicht so sehr für Kernel-Code). Durch etwas Cleverness konnte eine Person daraus einen Exploit bauen.

Eine Zusammenfassung:

http://isc.sans.org/diary.html?storyid=6820

Ein veröffentlichter Exploit:

http://lists.grok.org.uk/pipermail/full-disclosure/2009-July/069714.html

EDIT : Hier finden Sie eine sehr viel ausführlichere Zusammenfassung, wie dieser Code ausgenutzt wurde. Es ist eine kurze Lektüre, aber eine sehr gute Erklärung der für den Exploit verwendeten Mechanismen.

http://lwn.net/SubscriberLink/342330/f66e8ace8a572bcb/

18voto

Dour High Arch Punkte 21088

Ein klassischer Exploit war Ken Thompsons Hack, der ihm Root-Zugriff auf jedes Unix-System der Welt verschaffte.

Damals, als Bell Labs der einzige Anbieter von Unix war, verteilten sie den Quellcode, so dass jede Installation ihr eigenes Betriebssystem erstellen und anpassen konnte. Dieser Quellcode enthielt den Unix-Anmeldebefehl. Ken modifizierte den C-Compiler, um zu erkennen, ob er den Anmeldebefehl kompilierte, und fügte in diesem Fall eine anfängliche Passwortprüfung hinzu. Dieses Passwort war sein eigenes magisches Passwort und gewährte Root-Zugriff.

Natürlich würde jeder, der den Quelltext des C-Compilers liest, dies erkennen und herausnehmen. Also modifizierte Ken den C-Compiler erneut, so dass er beim Kompilieren eines C-Compilers den Logon-Hack wieder einfügte.

Jetzt kommt der verblüffende Teil: Ken kompilierte den C-Compiler mit seinem gehackten Compiler und löschte dann alle Spuren seines Hacks, indem er ihn aus dem Quellcode, den Sicherungskopien, der Versionskontrolle und allem anderen löschte. Er existierte nur noch in der kompilierten Binärdatei, die Teil der Unix-Distribution war.

Jeder, der dieses Unix von Bell Labs erhielt, bekam ein gehacktes Login und einen C-Compiler. Wenn man sich den Quellcode ansah, war es sicher. Wenn man das Betriebssystem neu erstellte, hackte der gehackte Compiler den neu erstellten Compiler, der den Hack wieder in den Anmeldebefehl einfügte.

Die Lehre, die ich daraus ziehe, ist, dass man mit keiner noch so umfangreichen statischen Analyse (Untersuchung des Quellcodes, des Betriebssystems, der Anwendungen) Sicherheit garantieren kann.

Ken hat dies in einem ACM-Artikel mit dem Titel Überlegungen zum Vertrauen in das Vertrauen .

0 Stimmen

Wenn ich Wikipedia richtig lese ( de.wikipedia.org/wiki/Backdoor_%28Computing%29 ) und die Jargon-Datei ( science.uva.nl/~mes/jargon/b/backdoor.html ) hat er es - zumindest offiziell - nicht auf diese Weise verbreitet.

0 Stimmen

Die Tatsache, dass nur sehr wenige Websites darüber berichteten, nachdem er es enthüllt hatte, lässt mich vermuten, dass er es nicht weitergegeben hat. Dennoch würde es von vornherein keine Spuren hinterlassen und wäre in der Praxis sehr, sehr schwer zu entdecken. Und er hat das Passwort nie preisgegeben...

0 Stimmen

Das sagt viel über das ganze Konzept "mehr Augäpfel machen seichte Fehler" aus, nicht wahr....

11voto

Jason Williams Punkte 55292

Vor Jahren habe ich mir ein Programm (auf dem Acorn Archimedes) angesehen, das mit einem komplexen Verschlüsselungssystem geschützt war (nur um zu sehen, wie es gemacht wurde, und um daraus zu lernen). Es war sehr raffiniert gemacht, mit dem Entschlüsselungscode selbst als Teil des Entschlüsselungsschlüssels, so dass jeder Versuch, ihn zu manipulieren, die Entschlüsselung zerstören und somit Müll im Speicher hinterlassen würde.

Nachdem ich 2 Tage lang versucht hatte, herauszufinden, wie es gemacht wurde und wie man es umgehen konnte, besuchte mich ein Freund. Mit Hilfe eines Betriebssystem-Tools (ein Klick und ein Ziehen, um die RMA-Speicherzuweisung zu maximieren) begrenzte er den verfügbaren Arbeitsspeicher, in dem der Prozess ausgeführt werden konnte, auf eine Größe, die nur geringfügig größer war als die Größe der .exe-Datei. Dann führte er ihn aus. Unmittelbar nach der Entschlüsselung versuchte er, Speicher zuzuweisen, was fehlschlug, und stürzte ab. Anschließend speicherte er das entschlüsselte Programm aus dem Speicher. Gesamtdauer des Knackens: etwa 2 Minuten, nur durch Ziehen mit der Maus und einen Speicherbefehl in der Befehlszeile.

Ich habe daraus gelernt, dass es sich nicht lohnt, zu viel Zeit und Mühe in den Schutz Ihrer Software zu investieren - wenn jemand sie knacken will, wird er es tun, und zwar wahrscheinlich mit einer einfachen Methode, die Ihnen nie in den Sinn gekommen wäre.

(Haftungsausschluss: Wir hatten beide legale Kopien dieses Programms gekauft und den geknackten Code nie in irgendeiner Weise verwendet. Es war wirklich nur eine intellektuelle Programmierübung)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X