Logikgatter im Turing-vollständigen Fax-Algorithmus
Der von Apple für JBIG2 genutzte Code stammt laut der Analyse von Google aus dem in C++ geschriebenen Open-Source-Projekt Xpdf, das seit Jahrzehnten wohl von einer einzigen Person gepflegt wird. Darin ausgenutzt wird von dem Trojaner letztlich ein immer noch typischer Integer-Overflow.
Mit einigen weiteren Tricks erreicht der Exploit einen Punkt, den Googles Project Zero so beschreibt: "An dieser Stelle wäre es auch möglich, auf beliebige absolute Speicheradressen zu schreiben, wenn Sie deren Offsets aus dem Seitenpuffer kennen. Aber wie berechnet man diese Offsets? Bisher verlief dieser Exploit sehr ähnlich wie ein Exploit für eine 'kanonische' Skriptsprache, der in Javascript mit einem unbegrenzten Arraybuffer-Objekt mit Zugriff auf den Speicher enden könnte."
Um die Berechnungen doch noch umzusetzen, nutzt der Exploit eine Eigenheit der JBIG2-Kompression aus. Ähnlich wie andere Kompressionsalgorithmen sucht auch JBIG2 zunächst nach gleichen beziehungsweise sehr ähnlichen Zeichen (Glyphen) und merkt sich lediglich einmal das eigentliche Symbol und von den anderen Vorkommen im Text nur deren Position, so dass dies beim Wiederherstellen ersetzt werden kann.
Eine VM aus Logikgattern
Der Algorithmus erlaubt dabei aber auch eine möglichst verlustfreie Komprimierung. Erreicht wird das wiederum, indem der Unterschied zwischen Original-Glyphen und dem möglichen Ersatz mit Hilfe von Logikgattern (AND, OR, XOR, XNOR) gespeichert wird. Die Schritte sind dabei nicht beschränkt und der JBIG2-Algorithmus selbst ist so flexibel, dass dies zu einer Turing-Vollständigkeit führt, wie das Team schreibt.
Aus einer Verknüpfung von AND- und XOR-Gatter lassen sich so etwa NAND-Gatter erzeugen, die auch mehrheitlich in der modernen Mikroelektronik zum Einsatz kommen. Der Pegasus-Trojaner setzt dies nun so zusammen, dass durch eine gezielte Verknüpfung der Logikgatter innerhalb der Parser-Bibliothek eine eigene kleine virtuelle Maschine gebaut wird.
Googles Project Zero schreibt dazu: "Mit über 70.000 Segmentbefehlen, die logische Bitoperationen definieren, definieren sie eine kleine Computerarchitektur mit Funktionen wie Registern und einem vollständigen 64-Bit-Addierer und -Komparator, mit denen sie den Speicher durchsuchen und arithmetische Operationen ausführen. Es ist nicht so schnell wie Javascript, aber es ist im Wesentlichen rechnerisch äquivalent."
Der Pegasus-Trojaner nutzt diese Fähigkeiten für die ersten Schritte, um den notwendigen Ausbruch aus einer Sandbox vorzubereiten. Googles Project Zero schreibt dazu: "Es ist ziemlich unglaublich und gleichzeitig ziemlich erschreckend." In einem weiteren Blogpost wollen die Beteiligten dann erklären, wie der Ausbruch aus der Sandbox gelingt.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
- ohne Werbung
- mit ausgeschaltetem Javascript
- mit RSS-Volltext-Feed
NSO Pegasus: Mit der Logikgatter-VM im Fax-Algorithmus zum Trojaner |
- 1
- 2
Aber es ist ja kein .gif - nur weil etwas eine bestimmte Dateiendung hat, heisst das ja...
Ich frage mich bei solchen Dingen immer, welcher Entwickler lässt sich für so etwas...
Vor allem die Aneinanderreihung ist interessant. Die Geschichte mit den Gifs zu finden...
Vielleicht sollten sie dies. Vergessen sollte man dabei aber nicht, dass Apple bereits...