Linker, Loader und ausführbare Formate

Welcher Angriff lässt sich leichter verhindern, wenn Speicherseiten nicht gleichzeitig „beschreibbar“ und „ausführbar“ sein dürfen (W^X, Trennung von Schreiben und Ausführen)?

  1. AEin Angriff, der Passwörter durch Ausprobieren aller Möglichkeiten testet
  2. BEin Angriff, der durch große Mengen an Datenverkehr einen Server lahmlegt
  3. CEin Angriff, der Angriffs-Maschinencode in Datenbereiche wie den Stack schreibt und dorthin springen und ihn ausführen lässt
Antwort und Erläuterung anzeigen

Antwort: C. Ein Angriff, der Angriffs-Maschinencode in Datenbereiche wie den Stack schreibt und dorthin springen und ihn ausführen lässt

Bei älteren Angriffen wurde häufig per Pufferüberlauf Maschinencode auf den Stack geschrieben und die Rücksprungadresse dorthin gelenkt, um ihn auszuführen. In der Seitentabelle der CPU gibt es ein Bit für Ausführungsverbot (z. B. das NX-Bit); macht das Betriebssystem Stack, Heap und .data nicht ausführbar und .text nicht beschreibbar, ist diese Methode nicht mehr nutzbar. Wird wie bei JIT-Compilern zur Laufzeit Code erzeugt, werden die Schreib- und Ausführungsrechte umgeschaltet.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Linker, Loader und ausführbare Formate

  1. Wann wird bei Shared Libraries unter Linux die Versionsnummer des soname, wie das „.1“ in libfoo.so.1, im Allgemeinen erhöht?
  2. Was lässt sich unter Linux erkennen, wenn der Befehl ldd auf eine ausführbare Datei angewendet wird?
  3. Welche Kombination der von den wichtigsten Betriebssystemen verwendeten Formate ausführbarer Dateien ist richtig?
  4. Was geschieht unter Linux u. a. im Allgemeinen, wenn eine zu tiefe Rekursion die Obergrenze des Stacks überschreitet?
  5. Welche Aussage zu den Werten lokaler und globaler Variablen ohne Initialwert zu Beginn ihrer Verwendung in C ist richtig?

Vergleiche zu diesem Thema