Buffer-Overflow: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(10 dazwischenliegende Versionen von einem anderen Benutzer 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.  
 
*Wenn ein Programm gestartet wird, weist ihm das Betriebssystem einen bestimmten Speicherbereich zu.  
 
 
*In einem Teil davon liegt der eigentliche Programmcode.  
 
*In einem Teil davon liegt der eigentliche Programmcode.  
 
 
*Dieser ist geschützt und kann nicht geändert werden.  
 
*Dieser ist geschützt und kann nicht geändert werden.  
 
 
*Darüber liegt der Heap , in dem das System globale Variablen und Konstanten ablegt.  
 
*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.
 
*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.
 
*Im Stack liegen auch die Rücksprung-Adressen von Unterprogrammen, also von Verzweigungen im Hauptprogramm.
Zeile 14: Zeile 14:
 
*Dadurch kann der Stack und damit die Rücksprungadresse überschrieben werden.  
 
*Dadurch kann der Stack und damit die Rücksprungadresse überschrieben werden.  
 
*Wenn die Rücksprungadresse ungültig ist, kommt es zum Programmabsturz.
 
*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.  
+
*Der Trick der Hacker besteht jetzt darin, die Rücksprungadresse auf Programmsegmente zu lenken, die den eigentlichen Schadcode enthalten.
 +
[[Datei: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.
  
  
[[Datei:buffer-overflow.png]]
+
=Vereinfachte Darstellung=
 +
==Vor dem Angriff==
 +
{{#drawio:buffer-flow-1}}
 +
==Der Angriff==
 +
 
 +
{{#drawio:buffer-flow-2}}
 +
 
  
 
=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=
 
=Beispiel=
 
*http://www-rn.informatik.uni-bremen.de/lehre/itsec/itsec05-2u.pdf
 
*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
 
*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