Buffer-Overflow: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „=Was passiert beim Buffer-Overflow= Wenn ein Programm gestartet wird, weist ihm das Betriebssystem einen bestimmten Speicherbereich zu. In einem Teil davon li…“)
 
 
(14 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
=Grundlegendes=
 +
*Einem Angreifern wird ermöglicht mit speziell ausgewählten Eingabe-Werten, die größer sind als der dafür im Programmcode vorgesehene Speicherplatz, die Ausführung der Software zu stören.
 +
 +
*Bei geschickter Ausnutzung dieses Schwachstellen-Typs ist ebenfalls Code Execution möglich.
 +
 
=Was passiert beim Buffer-Overflow=
 
=Was passiert beim Buffer-Overflow=
 +
*Wenn ein Programm gestartet wird, weist ihm das Betriebssystem einen bestimmten Speicherbereich zu.
 +
*In einem Teil davon liegt der eigentliche Programmcode.
 +
*Dieser ist geschützt und kann nicht geändert werden.
 +
*Darüber liegt der Heap , in dem das System globale Variablen und Konstanten ablegt.
 +
*Dann folgt der Stack , der lokale Variablen und den Inhalt von Prozessorregistern aufnehmen kann.
 +
*Im Stack liegen auch die Rücksprung-Adressen von Unterprogrammen, also von Verzweigungen im Hauptprogramm.
 +
*Beim Buffer-Overflow wird eine lokale Variable mit mehr Inhalt gefüllt, als für Sie reserviert ist.
 +
*Dadurch kann der Stack und damit die Rücksprungadresse überschrieben werden.
 +
*Wenn die Rücksprungadresse ungültig ist, kommt es zum Programmabsturz.
 +
*Der Trick der Hacker besteht jetzt darin, die Rücksprungadresse auf Programmsegmente zu lenken, die den eigentlichen Schadcode enthalten.
 +
[[Datei:buffer-overflow.png]]
  
Wenn ein Programm gestartet wird, weist ihm das Betriebssystem einen bestimmten Speicherbereich zu. In einem Teil davon liegt der eigentliche Programmcode. Dieser ist geschützt und kann nicht geändert werden. Darüber liegt der Heap , in dem das System globale Variablen und Konstanten ablegt. Dann folgt der Stack , der lokale Variablen und den Inhalt von Prozessorregistern aufnehmen kann. Im Stack liegen auch die Rücksprung-Adressen von Unterprogrammen, also von Verzweigungen im Hauptprogramm. Beim Buffer-Overflow wird eine lokale Variable mit mehr Inhalt gefüllt, als für Sie reserviert ist. Dadurch kann der Stack und damit die Rücksprungadresse überschrieben werden. Wenn die Rücksprungadresse ungültig ist, kommt es zum Programmabsturz. Der Trick der Hacker besteht jetzt darin, die Rücksprungadresse auf Programmsegmente zu lenken, die den eigentlichen Schadcode enthalten.  
+
=Beispiel=
 +
*Wir haben die Funktion stack_overflow
 +
void stack_overflow(const char *foo)
 +
{
 +
    char bar[7];
 +
    strcpy(bar, foo);
 +
}
 +
*Wird die Funktion nun aufgerufen:
 +
stack_overflow("abcdefghij")
 +
 
 +
*So ergibt sich ein Buffer Overflow, da nicht genug Speicher für bar[7] allokiert wurde.
 +
*Die Funktion strcpy(), die in diesem Fall unsere Eingabe in bar[] kopiert ist ein Beispiel.
 +
*Diese steht für eine Funktion die oft zu Überläufen führen kann, wenn nicht auf die Grenzen geachtet wird.
 +
*Abhängig von dem ensprechenden Programm kann dieses dabei abstürzen und ein weitestgehend unkontrolliertes Verhalten aufweisen.*
 +
*Wird ein Bufferoverflow absichtlich erzeugt, so meist in der Absicht Code auf dem Zielsystem auszuführen.
 +
*Die Ausführungsprivilegien entsprechen hierbei denen, des betroffenen Prozesses.  
 +
*Dies kann erreicht werden, indem Sprungadressen im Speicher abgelegt werden, die auf andere Speicherbereiche verweisen.
 +
*So kann beispielsweise eine Rücksprungadresse auf eine Funktion diese ausführen.
 +
 
 +
 
 +
=Vereinfachte Darstellung=
 +
==Vor dem Angriff==
 +
{{#drawio:buffer-flow-1}}
 +
==Der Angriff==
 +
 
 +
{{#drawio:buffer-flow-2}}
  
[[Datei:buffer-overflow.png]]
 
  
 
=Quelle=
 
=Quelle=
 
*http://www.pcwelt.de/ratgeber/Buffer-Overflow-So-funktioniert-ein-Pufferueberlauf-Die-Hacker-Bibel-4838377.html
 
*http://www.pcwelt.de/ratgeber/Buffer-Overflow-So-funktioniert-ein-Pufferueberlauf-Die-Hacker-Bibel-4838377.html
 +
*https://steemit.com/deutsch/@security101/de-bufferoverflow-die-theorie
 +
 +
=Beispiel=
 +
*http://www-rn.informatik.uni-bremen.de/lehre/itsec/itsec05-2u.pdf
 +
*http://www.online-tutorials.net/security/buffer-overflow-tutorial-teil-1-grundlagen/tutorials-t-27-282.html

Aktuelle Version vom 7. November 2022, 14:47 Uhr

Grundlegendes

  • Einem Angreifern wird ermöglicht mit speziell ausgewählten Eingabe-Werten, die größer sind als der dafür im Programmcode vorgesehene Speicherplatz, die Ausführung der Software zu stören.
  • Bei geschickter Ausnutzung dieses Schwachstellen-Typs ist ebenfalls Code Execution möglich.

Was passiert beim Buffer-Overflow

  • Wenn ein Programm gestartet wird, weist ihm das Betriebssystem einen bestimmten Speicherbereich zu.
  • In einem Teil davon liegt der eigentliche Programmcode.
  • Dieser ist geschützt und kann nicht geändert werden.
  • Darüber liegt der Heap , in dem das System globale Variablen und Konstanten ablegt.
  • Dann folgt der Stack , der lokale Variablen und den Inhalt von Prozessorregistern aufnehmen kann.
  • Im Stack liegen auch die Rücksprung-Adressen von Unterprogrammen, also von Verzweigungen im Hauptprogramm.
  • Beim Buffer-Overflow wird eine lokale Variable mit mehr Inhalt gefüllt, als für Sie reserviert ist.
  • Dadurch kann der Stack und damit die Rücksprungadresse überschrieben werden.
  • Wenn die Rücksprungadresse ungültig ist, kommt es zum Programmabsturz.
  • Der Trick der Hacker besteht jetzt darin, die Rücksprungadresse auf Programmsegmente zu lenken, die den eigentlichen Schadcode enthalten.

Buffer-overflow.png

Beispiel

  • Wir haben die Funktion stack_overflow
void stack_overflow(const char *foo)
{
    char bar[7];
    strcpy(bar, foo);
}
  • Wird die Funktion nun aufgerufen:
stack_overflow("abcdefghij")
  • So ergibt sich ein Buffer Overflow, da nicht genug Speicher für bar[7] allokiert wurde.
  • Die Funktion strcpy(), die in diesem Fall unsere Eingabe in bar[] kopiert ist ein Beispiel.
  • Diese steht für eine Funktion die oft zu Überläufen führen kann, wenn nicht auf die Grenzen geachtet wird.
  • Abhängig von dem ensprechenden Programm kann dieses dabei abstürzen und ein weitestgehend unkontrolliertes Verhalten aufweisen.*
  • Wird ein Bufferoverflow absichtlich erzeugt, so meist in der Absicht Code auf dem Zielsystem auszuführen.
  • Die Ausführungsprivilegien entsprechen hierbei denen, des betroffenen Prozesses.
  • Dies kann erreicht werden, indem Sprungadressen im Speicher abgelegt werden, die auf andere Speicherbereiche verweisen.
  • So kann beispielsweise eine Rücksprungadresse auf eine Funktion diese ausführen.


Vereinfachte Darstellung

Vor dem Angriff

Der Angriff


Quelle

Beispiel