Autor Thema: Verwundbar trotz No Execute  (Gelesen 472 mal)

0 Mitglieder und 2 Gäste betrachten dieses Thema.

Offline SiLæncer

  • Cheff-Cubie
  • *****
  • Beiträge: 191383
  • Ohne Input kein Output
    • DVB-Cube
Verwundbar trotz No Execute
« am: 06 Oktober, 2005, 05:49 »
Dass das No-Execute-Feature modernerer x86-Prozessoren nicht wirklich vor Buffer-Overflow-Exploits schützt, hat im Grundsatz schon c't mit dem Delphi-Programm nxtest [aus Hacker-Blocker in Ausgabe 16/2004] sowie der erste Return-to-libc-Exploit für 32-Bit-Betriebssysteme aufgezeigt. No Execute verhindert lediglich, dass man Code in Datensegementen (Stack, Heap ...) ausführen kann, den Overflow selbst verhindert es nicht und wenn man hier einen Sprung irgendwohin ins Codesegment provoziert, kann No Execute nichts dagegen tun.

Allerdings sind vor einem funktionierenden Exploit ein paar Hürden zu überwinden. Auf 32-Bit-Systemen ist es in der Regel besonders einfach, gezielt eine Systemfunktion mit Parametern aufzurufen, da die Aufrufparameter ebenfalls über den Stack übergeben werden, den man per Overflow beliebig manipulieren kann. Bei den 64-Bit-Betriebssystemen werden üblicherweise jedoch die Prozessorregister für die Parameterübergabe verwendet, und die lassen sich nicht durch Überläufe passend befüllen -- jedenfalls nicht direkt.

Sebastian Krahmer von Suse hat nun aber gezeigt, wie man mit ein paar zusammengesuchten Codefragmenten aus Standardbibliotheken beliebige Register mit den Overflow-Werten vorbesetzen und damit auch unter 64bittigem Linux eine gewünschte Routine mit den eigenen Parametern anspringen kann. Er nannte die Methode "Code Chunk Borrow Technique". Die missbrauchten kurzen Codesequenzen müssen nicht einmal als korrekte Befehlsfolge im Gastcode auftreten, wie beispielsweise pop %rdi; retq. Es reicht wenn irgendwo die Hex-Sequenz (hier 0x5f und 0xc3) vorkommt, etwa als Bestandteil eines längeren Befehls beziehungsweise als Offset etc.

Sogar einen automatischen Exploit-Generator stellt er vor, der alle benötigten Codefragmente aufsucht und die Einsprungadressen passend für den Overflow zusammenstellt. Darüber hinaus belegt Krahmer, dass man Techniken zum Ausnutzen von Heap-Overflows oder Format-String-Bugs in der Regel auf einen Stackoverflow übertragen kann. Sein Demo-Programm benutzt die als malloc overflow bekannte Methode, durch Überschreiben interner Speicherkontrollstrukturen beim Heap-Overflow beliebige 64-Bit-Werte an eine beliebigen 64-Bit-Adresse zu schreiben und vereint diese mit der "Code Chunk Borrow Technique".

Es wird sich nun zeigen, ob AMD noch länger an der werbewirksamen Bezeichnung "Advanced Virus Protection" für das No-Execute-Feature festhalten wird.

Quelle : www.heise.de

Arbeits.- Testrechner :

Intel® Core™ i7-6700 (4 x 3.40 GHz / 4.00 GHz)
16 GB (2 x 8 GB) DDR4 SDRAM 2133 MHz
250 GB SSD Samsung 750 EVO / 1 TB HDD
ZOTAC Geforce GTX 1080TI AMPExtreme Core Edition 11GB GDDR5
MSI Z170A PC Mate Mainboard
DVD-Brenner Laufwerk
Microsoft Windows 10 Home 64Bit

TT S2 3200 ( BDA Treiber 5.0.1.8 ) + Terratec Cinergy 1200 C ( BDA Treiber 4.8.3.1.8 )