Buffer-Overflow: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Thomas (Diskussion | Beiträge) (→Quelle) |
|||
| (13 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]] | ||
| + | |||
| + | =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}} | ||
| + | |||
=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 | ||
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.
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
- 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


