AES Schlüssel aus RAM lesen

Tryndamere

Neu angemeldet
Registriert
23 Juli 2013
Beiträge
49
Hallo Community,

Ich spiele mich gerade mit einer Aufgabe aus der Uni.

Die Problematik:

Ich habe ein Programm vor mir, welches ein beliebiges Geheimnis enthält, welches mit einem AES CBC verschlüsselt ist. Das Ziel ist es das Geheimnis zu bekommen.

Also Programm anwerfen und mir den Memory dumpen und zum Datensegment springen.

Für den Anfang habe ich mir den AES Schlüssel, Geheimnis und IV auf der Konsole ausgeben lassen um es einfacher zu machen für den Anfang.

Mit den Informationen finde ich den IV und das cipher schnell jedoch der AES is Schlüssel ist unauffindbar. Ich habe das ganze Segment durchsucht und nichts diesbezüglich gefunden. Und nein der Schlüssel wird nicht überschrieben oder entfernt

Deshalb 2 Fragen:

1. Meines Verständnisses nach müsste der Key in der Nähe des IV liegen, da erst der Schlüssel und dann der IV generiert werden. Aber wie gesagt da ist nichts. Wo könnte das Teil liegen?

2. Das finden der Informationen mit des Wissens der cipher Texte ist ja nun schnell machbar. Jedoch wenn ich mir den Dump anschaue, dann ist es ohne Verschlüsselung simpel die Daten zu finden, jedoch der AES Dump enthält ja nur "Quatsch". Wie finde ich also ohne das benötigte Wissen den IV, cipher und Key oder ist es ein reines brutforcen alla "Ich weiß der Schlüssel ist so oder so lang, der IV so oder so lang und nun teste alle möglichen Variablen durch.

MfG
 
Im Allgemeinen kannst du tatsächlich nur raten, welche Daten das Programm wo speichert. Ausserdem können die interessanten Daten sowohl im Heap als auch auf dem Stack liegen, und müssen - speziell im Falle des ursprünglichen Schlüssels, der bei AES/Rijndael bloss dazu benutzt wird, um die Rundenschlüssel abzuleiten - nicht unbedingt dauerhaft gespeichert bleiben (allerdings enthalten die Rundenschlüssel sämtliche Informationen des ursprünglichen Schlüssels, vgl. ). Speziell dann, wenn der Schlüssel auf dem Stack lag, kann er beim nächsten Funktionsaufruf (wenn das Stack-Frame aufgelöst und an derselben Stelle ein neues erstellt wird) überschrieben werden, selbst dann, wenn du das nicht explizit tust.

Die Extraktion der Schlüssels ist in der Regel nur über ein Reverse Engineering der betroffenen Anwendung möglich - setze an der passenden Stelle mit einem Debugger einen Breakpoint, stelle fest, wo der Schlüssel liegt, und lese dann den Stack und/oder den Heap aus. Speziell dann, wenn die Anwendung externe kryptografische Bibliotheken verwendet, bietet sich auch an, entweder mit einem Debugger bei allen Aufrufen dieser Bibliotheken Breakpoints zu setzen, oder die Bibliotheken gegen gepatchte Versionen auszutauschen, welche die übergebenen Schlüssel ausgeben.
 
Zurück
Oben