Exploits entmystifiziert, Teil 1

Wie ein Angreifer Schadcode ins System schleusen kann

Seite: 2/3

Firma zum Thema

Exploit-Bausteine – Schwachstellen und Shellcode

Anwendungen akzeptieren Eingaben und verarbeiten diese. Theoretisch könnte diese Eingabe entweder ordnungsgemäß sein und ausgeführt werden oder fehlerhaft sein und abgelehnt werden. In der Praxis gibt es jedoch auch noch eine dritte Möglichkeit, bei der die Datei tatsächlich manipuliert ist, aber von der Anwendung akzeptiert wird. Die Anwendung startet mit dem Ausführen der Datei, aber irgendwo entlang der Strecke wird die Ausführung vom vorgezeichneten Weg abweichen und bringt die Anwendung zum Absturz.

Um zu verstehen, warum dies passiert, gilt es einen Blick darauf zu werfen, was passiert, wenn ein Programm ausgeführt wird. Ein ausgeführtes Programm wird als Prozess betrachtet. Das Betriebssystem ordnet dem Prozess einen Speicheradressraum zu, der den Code und die Daten des Prozesses enthält. Der Prozess-Speicherplatz ist der Spielplatz, wo der Prozess ausgeführt und wird uns durch die gesamte Serie begleiten. Wir werden später tiefer eintauchen, um zu aufzuzeigen, wie dieser Raum strukturiert ist.

In der Zwischenzeit liegt das Interesse im Prozessadressraum an der Tatsache, dass ein ausgeführter Prozess eine bloße Folge von Speicheradressen sein kann. Diese Adressen werden zu einem bestimmten Zeitpunkt vom Prozessor (Central Processing Unit, CPU) nach einer vorgezeichneten Sequenz abgerufen. Die CPU führt die Anweisungen in der abgerufenen Adresse aus und geht weiter zur nächsten und so weiter und so fort, bis zur letzte Anweisung den Prozess verlässt.

So läuft es ab, wenn die Datei ordnungsgemäß ist. Jedoch weicht in dem oben beschriebenen Szenario zu einem gewissen Punkt in der Sequenz der Ausführungsablauf ab. Die CPU wird aufgerufen von einer Adresse, die keine Anweisungen enthält, die Ausführung stoppt. Dies entspricht in etwa dem, was passiert, wenn ein Prozess/Programm abstürzt.

Bis zu diesem Zeitpunkt haben wir noch nichts Bösartiges beschrieben. Die Tatsache, dass Anwendungen fehlerhafte Eingabedateien akzeptieren, statt alle abzulehnen ist eine integrierte Komponente des Programmierens. Die Programmierer sind per Definition nicht in der Lage, alle möglichen Dateiveränderungen vorherzusagen.

Die Perspektive des Angreifers

Aus der Perspektive des Angreifers ist dies ein attraktives Szenario. Wenn eine bestimmte fehlerhafte Eingabe bewirkt, dass der Ausführungsablauf zu einer leeren Adresse abweicht, könnte eine Eingabe auch in Handarbeit erfolgen, um diese leere Stelle mit Anweisungen des Angreifers zu überschreiben. In diesem Fall würde der Ausführungsablauf nicht mehr abstürzen, sondern stattdessen umgeleitet werden.

An diesem Punkt verstehen wir, wie ein Angreifer die Kontrolle über die Prozessausführung gewinnen kann. Wir haben aber noch nicht verstanden, was es zu gewinnen gilt. Der Speicherplatz, in dem der Angreifer ist, ist immer noch der Speicherplatz, den der Prozess von Betriebssystem zugewiesen bekommen hat – und in diesem Raum ist der einzige gültige Code der Anwendungscode.

(ID:43725378)