2009-08-05 11 views
0

Windows 7 hat Heap Randomisierung und Stack Randomisierung Funktionen. Wie könnte ich das schaffen? Wie sie sich auf die Leistung meiner Anwendung auswirken? Wo könnte ich mehr Informationen darüber finden, wie es funktioniert?Heap Randomisierung in Windows

Ich verwende Visual Studio 2008 für die Entwicklung von C++ - Programmen. Ich kann keine Compiler-Optionen für diese Funktionen finden.

Antwort

2

Ok, Heap-Randomisierung und Stack-Randomisierung sind Windows-Funktionen, müssen jedoch explizit für jeden Prozess zur Verbindungszeit aktiviert werden. Mark Russinovich hat beschrieben, wie es in seinem Buch 5-th Windows Internals funktioniert.

Die Stapelrandomisierung besteht darin, zunächst einen von 32 möglichen Stapelspeicherorten auszuwählen, die entweder durch 64 KB oder 256 KB getrennt sind. Diese Basisadresse wird ausgewählt, indem der erste geeignete freie Speicherbereich gefunden wird und dann der verfügbare Bereich ausgewählt wird, wobei x erneut basierend auf dem TSC des aktuellen Prozessors erzeugt wird, der verschoben und in einen 5-Bit-Wert maskiert wird. ...>

Schließlich randomisiert ASLR die Position des anfänglichen Prozess-Heaps (und nachfolgende Heaps), wenn im Benutzermodus erstellt. Die RtlCreateHeap Funktion verwendet einen anderen pseudozufälligen TSC-abgeleiteten Wert, um die Basisadresse des Heap zu ermitteln. Dieser Wert, diesmal 5 Bit, wird mit 64 KB multipliziert, um die endgültige Basisadresse zu erzeugen, beginnend bei 0, was einen möglichen Bereich von 0x00000000 bis 0x001F0000 für den anfänglichen Heap ergibt. Darüber hinaus wird der Bereich vor der Heap-Basisadresse manuell freigegeben, um eine Zugriffsverletzung zu erzwingen, wenn ein Angriff einen Brute-Force-Sweep des gesamten möglichen Heap-Adressbereichs durchführt.

0

Sicher ist es nur eine Betriebssystemfunktion? Es sollte dich nicht im Geringsten stören. Das Betriebssystem wird Ihre Anwendung verschieben, und solange Sie nicht davon ausgehen, dass Ihre Anwendung auf eine bestimmte Speicheradresse geladen ist (was Sie wirklich nie annehmen sollten), werden Sie keine Probleme bekommen.

+0

Meine Frage war nicht über Adress Randomisierung, sondern über Heap Randomisierung. Ich bin in der Lage, jederzeit einen neuen Heap zu erstellen. Randomisierung könnte ein schweres Verfahren sein. Ich möchte sicher sein, dass es ohne meine Zustimmung nicht stattfinden wird. –

+0

AFAIK Heap Randomisierung bedeutet nur, dass, wenn Sie ein Malloc den Block von Speicher, die es auf einen Lauf zurückgibt nicht identisch sein wird, wie der Block des Speichers auf dem nächsten ... Es passiert nur im virtuellen Adressraum des Prozesses sowieso. Ist es nicht? – Goz

+0

Ich weiß es nicht. Deshalb frage ich :) Diese Funktionen wurden im 'Windows 7 Client Software Logo' Dokument erwähnt. Ich kann dazu keine zusätzlichen Informationen finden. –