CR226: Anwendungssicherheit

Warum Malware auch heute noch erfolgreich ist

Software beeinflusst unser aller Leben. Wir vertrauen Software und Betriebssystemen, ohne sie vollstaendig ueberpruefen zu koennen. Doch welche Gefahren lauern in den Tiefen der Betriebssystemarchitektur? Welche Maßnahmen wurden ergriffen, um ungebetene Gäste draussen 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. Darüber diskutiert Danimo am Donnerstag ab 22 Uhr mit Gästen aus dem CCC in der Marienstrasse 11 vor Live-Publikum. Das VOC hält wie immer einen Stream bereit.

Dieser Beitrag wurde unter Chaosradio veröffentlicht. Setze ein Lesezeichen auf den Permalink.

10 Antworten auf CR226: Anwendungssicherheit

  1. Christian Berger sagt:

    Warum gibts denn eigentlich vom Chaosradio nie ein “ReLive”?

  2. danimo sagt:

    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.

  3. Matthias B sagt:

    Coole Sendung! Diesmal gefühlt etwas neerdiger als üblich, aber OK für mich. Bitte mehr Security-Themen in Zukunft!
    Ciao
    Matthias B.

  4. Stigt VanHou sagt:

    Danke. Thema gern’ erweiter. Das Zuhörer.

  5. Christian Berger sagt:

    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.

  6. Dirk sagt:

    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?

    • Christian Berger sagt:

      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.

    • Warker sagt:

      Das gibt es schon und nennt sich Shadow-Stack.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *