CR226 Warum Malware auch heute noch erfolgreich ist ()
Software beeinflusst unser aller Leben. Wir vertrauen Software und Betriebssystemen, ohne sie vollständig überprüfen zu können. Doch welche Gefahren lauern in den Tiefen der Betriebssystemarchitektur? Welche Maßnahmen wurden ergriffen, um ungebetene Gäste draußen zu halten? Und wieso gelangen trotzdem jeden Tag erneut eben jene ungebetenen Gäste selbst in vermeintlich abgesicherte Systeme? Im Chaosradio 226 versuchen wir einen Überblick über die aktuelle Situation und das Wettrüsten zwischen Entwickern und Angreifern zu geben.
Warum gibts denn eigentlich vom Chaosradio nie ein „ReLive“?
ReLive muss derzeit von Hand gestreichelt werden, deshalb macht das VOC das nur fuer groessere Konferenzen.
Noch ein Nachtrag: Aus Zeitgruenden haben haben wir u.a. Canaries uebersprungen (https://en.wikipedia.org/wiki/Buffer_overflow_protection#Canaries) und sind nicht naeher auf den Schutz moderner Compiler wie bounds-checking eingegangen. Trotzdem gilt unsere Aussage: Buffer overflows sind nur eine Art, Anwendungen zu exploiten.
Coole Sendung! Diesmal gefühlt etwas neerdiger als üblich, aber OK für mich. Bitte mehr Security-Themen in Zukunft!
Ciao
Matthias B.
Danke. Thema gern‘ erweiter. Das Zuhörer.
Entschuldigung aber ich muss einfach sagen, dass ihr relativ schlecht im Erklären seid. Ihr erwähnt den Kern der Sache nur am Rand und redet zu viel über unwichtige Details.
Hier mal wie ich zum Beispiel erklären würde, wie so ein Angriff auf die Rücksprungadressen funktioniert:
1. Speicher ist wie eine Menge an Zellen in denen Sachen drin stehen können.
2. Programme sind wie Kochbücher bei denen jede Anweisung in einer Speicherzelle steht. Jede Anweisung hat somit auch eine Adresse, so wie eine Seitenzahl oder eine Zeilennummer.
3. In einem Rezept können Verweise enthalten sein, zum Beispiel „Bereiten Sie einen Hefeteig zu, siehe Seite 55“. In dem Fall schreibt der Computer die momentane Position im Rezept an eine Stelle (den Stack) und macht bei Seite 55 weiter. Wenn der Hefeteig fertig ist, schaut es wieder auf den Stack und macht dort weiter wo es vorher aufgehört hat. Das nennt man auch die Rücksprungadresse.
4. Auf dem Stack werden auch Daten gespeichert, und zwar zum Teil vor der Rücksprungadresse. Falls die Daten zu lang sind, kann die Rücksprungadresse überschrieben werden, und das Programm springt danach wo anders hin.
5. Wenn man die Rücksprungadresse schreiben kann, kann man da auch Daten bzw Anweisungen in den Speicher schreiben. Geschickt gemacht schreibt man in einem Rutsch Anweisungen und überschreibt die Rücksprungadresse mit der Adresse der Anweisungen die man gerade rein geschrieben hat.
6. Gegen 5. haben moderne Prozessoren, die verhindern, dass ein Programm Bereiche ausführen kann, die es auch beschreiben kann.
7. Gegen 6. hilft, dass da ja auch noch ein Programm (und Programmbibliotheken) im Speicher sind. Macht man das geschickt, so kann man damit auch was anfangen…
usw….
Also wie ihr seht, einfach von den Grundlagen zum Speziellen gehen, dann ist das viel einfacher verständlich.
Genau das habe ich auch gedacht! Manchmal frag ich mich an welche Zielgruppe richtet ihr Euch eigentlich?
Gerne mehr derartige Themen aber bitte nicht in einem speziellen Detailbereich versinken. Da springt der Hörer ab und für den Fachmann ist es auch nicht tief genug.
Waren gibt es eigentlich keinen getrennten Stack für (Rücksprung-)Adressen und lokale Variablen von Funktionen. Sind Register heute noch so knapp oder warum wird das nicht gemacht? Oder gibt es da irgendwo schon?
Das ist eine gute Frage. Das Hauptproblem ist das Management. Sprich eine Funktion kann sich auch selbst rekursiv aufrufen und braucht dafür einen Ort wo die lokalen Variablen abgelegt werden. Einige Plattformen (Sparc) haben dafür spezielle Registerfenster die bei jedem call weiter geschaltet werden. Sprich man packt seine Werte in Register X rein, und für die Funktion steht das dann in Register Y drin.
Prozessoren haben halt auch nur Hardwareunterstützung für einen Stack, und 2 Stacks zu verwalten ist, zumindest ohne MMU, deutlich schwieriger. Prozessoren die auf die Abarbeitung von Forth ausgelegt sind haben so was.
Das gibt es schon und nennt sich Shadow-Stack.