Während der Laufzeit eines Programms lassen sich noch einige Tricks umsetzen, um die Sicherheit von Programmen zu verbessern, indem beispielsweise Exploits für mögliche Buffer Overflows erschwert oder verhindert werden. Dafür kommen Techniken wie Stack Randomization (d.h. der Stackanfang wird bei jedem Programmstart zufällig auf eine etwas andere Adresse gesetzt, Einsprungadressen für Exploits verändern sich dann bei jedem Programmaufruf, ein Exploit wird unzuverlässig), Shared Library Randomization (d.h. gemeinsam genutzte Bibliotheken wie die Libc werden in zufälliger Reihenfolge und zufällig an unterschiedliche Adressen gemappt, sogenannte Return-to-Libc-Exploits, die eine bestimmte Adresse der in der Libc anspringen müssen werden dadurch unzuverlässig), etc. zum Einsatz.
Aktuelle verbreitete Maßnahmen sind:
- data/code separation (siehe Harvard Architektur)
- randomized stack bottom
- shared libs randomization
- randomized malloc
Viele dieser Maßnahmen wurden als erstes in OpenBSD implementiert. Mögliche Verbesserungen enthalten
- section starting address randomization (16 Bit Entropie)
- randomized loading order (abhängig von der Anzahl der Bibliotheken)
Zu den obskureren Verfahren gehört dann wohl
- executable randomization (pie executables)
- gaps filled with bad stuff (keine NOP-Sleds mehr)
- morphing executables (ah … die Virenscanner freuen sich)
Einige dieser Maßnahmen würden bis zu 10% Performanceeinbußen mitbringen, hier wäre eine Abwägung zwischen Leistung und Sicherheit notwendig.
Kommentare gesperrt wegen Spam
Comment by Christian — 22. Mai 2018 @ 18:18