Was ist der Unterschied? Ich versuche es mal: Buffer Overflow passiert, wenn einer Variablen eine größere Datenmenge zugewiesen wird, als für sie reserviert ist (also größer als ihr buffer) und das nicht vernünftig abgefangen wird. Diese Verwundbarkeit kann man ausnutzen. Es gibt hauptsächlich (?) zwei Arten von Buffer Overflow Attacken: Stack Smashing und Heap Smashing. Auf dem Programmstack liegen lokale Variablen und ganz unten die Rücksprungadresse zur aufrufenden Funktion. Man kann also mit einem Buffer Overflow einer lokalen Variable den Wert einer anderen Variable ändern (indem die 'überschüssige' Datenmenge auf den nächsten Adressen im Stack landet (und den Stack damit kaputt machen)). Wenn man das geschickt anstellt, kann man die Rücksprung-Adresse am Ende des Stacks ändern zu der Startadresse einer anderen Funktion oder Shellcode einfügen um eine root-shell zu bekommen.
Was man damit machen kann, ist sehr vom konkreten Fall abhängig. Webassembly z.B. hat einen nativen stack, der nicht im Speicher des wasm Programms / nicht direkt Addressierbar ist. Da sind unter anderem Rücksprungadressen und anderes zeug drauf, aber auf die kann man nicht direkt zugreifen. Deshalb braucht es für gewisse dinge noch einen stack parallel dazu. Aber Rücksprungadressen überschreiben geht da nicht einfach so, höchstens manchmal indirekt, und stark Eingeschränkt, vielleicht.
Antonow B. schrieb: > Wenn man das geschickt anstellt, kann man die > Rücksprung-Adresse am Ende des Stacks ändern zu der Startadresse einer > anderen Funktion oder Shellcode einfügen um eine root-shell zu bekommen. Dazu musst du es aber erstmal schaffen ausführbaren Code irgendwo zu hinterlegen den du dann versuchen kannst aufzurufen. Um das zu erschweren gibt es z.B. sowas.: - https://en.wikipedia.org/wiki/Executable_space_protection - https://en.wikipedia.org/wiki/Address_space_layout_randomization - https://en.wikipedia.org/wiki/Memory_protection Und wenn du das nach all dem geschaft hast läuft dein "neuer" Maschinencode erstmal mit der ursprünglichen Berechtigung. Einfach mal zu sagen "führe mir eine Shell mit root-rechten aus" ist da noch lange nicht. - https://en.wikipedia.org/wiki/CPU_modes - https://en.wikipedia.org/wiki/User_space In der heutigen Praxis benötigst du da eine ganze Kette von Schwachstellen die du alle nacheinander gezielt ausnutzen musst um an dein Ziel zu kommen. Und ja, es kommt immer wieder mal vor das solche Ketten gefunden werden. Aber mittlerweile greif man da viel lieber die Applikationen an. Diese sind meist sehr viel anfälliger als die mittlerweile über Jahrzehnte gehärteten OS.
Irgend W. schrieb: > Dazu musst du es aber erstmal schaffen ausführbaren Code irgendwo zu > hinterlegen Nicht unbedingt: https://en.wikipedia.org/wiki/Return-oriented_programming
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.