2016-12-10 5 views
1

Gibt es Informationen darüber, welche Maßnahmen glibc benötigt, um Heap-basierte Exploits zu erschweren? Ich habe von einigen Dingen wie PTR_MANGLE und einigen nebulösen "heap consistency checking" auf den Seiten der Sicherheitsfunktionslisten mehrerer Linux-Distributionen gehört, aber ich konnte keine detaillierten Informationen darüber finden, wie diese Mechanismen tatsächlich implementiert werden, wenn sie dies tun sind effektiv und welche Vulnerabilitätsklassen umfassen sie. Auch bei der Suche nach den genannten Features konnte ich keine glibc-Dokumentation finden.Informationen zu Glibc-Heap-Schutzmechanismen?

Welche Funktionen sind also implementiert und wie gut funktionieren sie? Verfügt Glibc über einen Mechanismus zur Überprüfung der Heap-Konsistenz, der dem Stack-Crash-Schutz auf dem Stack ähnelt? Verschlüsselt PTR_MANGLE alle Zeiger oder nur einen Teil davon? Und vor allem: Können diese Funktionen vom Endbenutzer eingeschaltet werden, oder hängen sie von bestimmten APIs ab, so dass ich hoffen muss, dass derjenige, der die Programme geschrieben hat, die Schutzmechanismen aktiviert hat?

+0

Haben Sie beispielsweise eine Google-Suche nach 'glibc heap protection' versucht? Es kommt zuerst auf Ihre Frage, aber die folgenden Referenzen sind ziemlich nützlich. (Einige, wie das Glibc-Handbuch, sind nicht so sofort hilfreich, wie Sie hoffen.) "Glibc ptr_mangle" liefert eine Menge nützlicher Informationen. –

+0

@ JonathanLeffler Danke, ich habe "glibc ptr_mangle" nachgeschlagen und die Antwort auf die meisten meiner Fragen dazu gefunden. Die einzige Information, die ich nicht finden konnte, war, ob ptr_mangle für jedes mit glibc kompilierte Programm aktiviert ist oder nicht, oder ob die Person, die das Programm schreibt, angeben muss, dass sie mit einer speziellen Funktion geschützt werden soll. Ich nehme an, dass es ein automatischer Schutz ist, aber ich kann nichts finden, was das beweist. Ich konnte auch nicht herausfinden, ob glibc etwas wie Stapelkanarien für den Haufen implementiert. –

+0

Sie könnten nachsehen [Frage ist auf libc Zeigerverschlüsselung] (http://stackoverflow.com/questions/19584160/questions-on-libcs-pointer-encryption), die eine Verknüpfung zu einem anderen Dokument hat, das helfen kann. –

Antwort

0

PTR_MANGLE ist eine interne Implementierung von glibc selbst und hat keine Auswirkungen auf Zeiger, die von Programmen verwendet werden. es ist auch nicht etwas, das im laufenden Betrieb oder für bestimmte Programme ein- und ausgeschaltet werden kann. Es schützt nur interne Glibc-Datenstrukturen, die für Programme undurchsichtig sind, und selbst dann konzentriert es sich nur auf diejenigen, die verwendet werden können, um Code-Fluss direkt zu entführen (d. h. vtables/Funktionszeiger). Es wird nicht für allgemeine Daten (z. B. Zähler) verwendet.

Derzeit glaube ich nicht, glibc verwendet Guard-Seiten für den Haufen, aber die Leute arbeiten daran. Sie können versuchen, die Upstream-Mailingliste nach aktuellen Beiträgen zu diesem Thema zu durchsuchen. Es hat lange Guard-Seiten für den Stack verwendet, aber diese sind eher zum Blasen des Stapels als Stapelkanarien (ssp).

Verwandte Themen