Abo
  • Services:
Anzeige
Die Speicherverwaltung von C-Programmen führt oft zu Sicherheitslücken.
Die Speicherverwaltung von C-Programmen führt oft zu Sicherheitslücken. (Bild: Levee)

C-Programmierung: Schutz für Code Pointer

Die Speicherverwaltung von C-Programmen führt oft zu Sicherheitslücken.
Die Speicherverwaltung von C-Programmen führt oft zu Sicherheitslücken. (Bild: Levee)

Bugs in der Speicherverwaltung von C-Programmen gehören zu den häufigsten Sicherheitslücken. Da es aussichtslos sein dürfte, alle Lücken zu beheben, hat Mathias Prayer eine Strategie vorgestellt, mit der sich die meisten verhindern lassen.

Sogenannte Memory-Corruption-Lücken gehören zu den größten Problemen der IT-Sicherheit. Buffer Overflows und ähnliche Lücken werden zwar permanent gefixt, jedoch ist ihre Zahl so groß, dass es kaum realistisch ist, sie alle zu finden. Mathias Prayer hat auf dem 31C3 einen praktikablen Ansatz dargelegt, durch den sich die Ausnutzbarkeit von vielen C-Sicherheitslücken mit akzeptablen Performanceverlusten massiv eindämmen lässt.

Anzeige

Der Grund für die meisten derartigen Sicherheitslücken ist die Speicherverwaltung von C und C++. Ein Programmierer muss selbst darauf achten, dass die Grenzen von Speicherbereichen eingehalten werden und nicht auf ungültige Speicherbereiche zugegriffen wird. In der Vergangenheit gab es bereits eine Reihe von Ansätzen, um das Ausnutzen von Memory-Corruption-Lücken zu erschweren. Dazu gehören etwa sogenannte Stack Canaries, Data Execution Prevention und die Randomisierung des Speicherlayouts (ASLR). Diese Ansätze werden in aktuellen Systemen bereits eingesetzt, doch sie lassen sich häufig umgehen und bieten daher keinen wirklichen Schutz.

Ganz auf C verzichten?

Vielfach wird empfohlen, wenn möglich ganz auf die Nutzung von C zu verzichten und Programmiersprachen mit einer sicheren Speicherverwaltung einzusetzen. Prayer setzt dem entgegen, dass man selbst dann auf große Mengen an C-Code angewiesen sei. Wer beispielsweise ein Programm unter Linux in Python entwickelt, benötigt weiterhin die Python-Laufzeitumgebung, die Glibc und den Linux-Kernel, die alle in C geschrieben sind. Ein System komplett ohne C-Code zu entwickeln, versucht derzeit das Projekt Mirage OS, das auf dem Kongress ebenfalls mit einem Vortrag präsent war.

Prayer und sein Forscherteam wollen die Probleme des Speicherzugriffs innerhalb von C lösen. Auch dazu gibt es bereits einige Ansätze, doch diese sind mit hohen Performanceverlusten verbunden und häufig inkompatibel mit bestehendem Code. So baut das Projekt Softbound + CETS durch eine Erweiterung des Clang-Compilers von LLVM zusätzliche Checks in den generierten Code ein, um Zugriffe außerhalb zulässiger Speicherbereiche zu unterbinden. Das funktioniert zwar, die Performanceverluste liegen jedoch bei über 100 Prozent. Einen etwas weniger aufwendigen Schutz bietet Address Sanitizer, das Teil von Gcc und Clang ist. Doch auch Address Sanitizer hat Performancekosten von etwa 70 Prozent. Für den praktischen Einsatz ist das kaum realistisch, es wird daher auch hauptsächlich als Debugging-Tool genutzt.

Die Idee von Prayers Team: Anders als bisherige Ansätze wollen sie nicht alle Speicherzugriffe schützen, sondern nur Funktionspointer. Denn bei der Ausnutzung von Memory-Corruption-Lücken wird in aller Regel versucht, den Programmablauf durch Überschreiben von Funktionspointern zu beeinflussen. Dadurch bleiben die Performancekosten im erträglichen Rahmen, die allermeisten Sicherheitslücken werden trotzdem verhindert.

Drei unabhängige Schutzmechanismen

Das Projekt Levee ist eine Erweiterung des Clang-Compilers von LLVM. Der Quellcode ist auf Github veröffentlicht. Dabei gibt es drei Schutzmechanismen, die unabhängig voneinander genutzt werden können. Auf dem Stack werden bei Funktionsaufrufen die Rücksprungadressen gespeichert, außerdem werden dort lokale Variablen abgelegt. Klassische Buffer Overflows versuchen häufig, diese Rücksprungadressen zu überschreiben. Der Strategie von Levee ist es daher, die Variablen von Code-Rücksprungadressen zu trennen und zwei separate Stacks zu nutzen. Die Performancekosten sind laut Prayer praktisch vernachlässigbar und sogar geringer als die von Stack Canaries, die bisher bereits eingesetzt werden.

Weitere Schutzmechanismen von Levee sind Code Pointer Security (CPS) und Code Pointer Integrity (CPI). Bei Code Pointer Security werden Funktionspointer auf dem Heap in einem abgetrennten Speicherbereich abgelegt. Die Performancekosten liegen bei wenigen Prozent. Bei Code Pointer Integrity werden zusätzlich alle Variablentypen geschützt, in denen in Zwischenschritten Funktionspointer abgelegt werden. Dadurch wird der Schutz deutlich vollständiger, die Performancekosten sind allerdings auch höher und liegen bei etwa zehn Prozent.

Die Schutzmechanismen funktionieren bereits auf Mac OS X, FreeBSD und Linux. Unter Linux läuft das System allerdings laut Prayer bisher weniger stabil. Auch werden bis jetzt nur x86- und x64-Architekturen unterstützt. In einem Test gelang es dem Team von Prayer, ein komplettes FreeBSD-System mit den Schutzmechanismen von Levee zu kompilieren. Auch wichtige sicherheitskritische Anwendungen wie OpenSSL oder Apache ließen sich damit betreiben. Als nächster Schritt der Entwicklung sollen erste Teile des Codes in den offiziellen LLVM-Code zurückfließen. Am weitesten ist dabei die Separierung des Stacks, diese könnte schon bald Teil des offiziellen Clang-Compilers sein.


eye home zur Startseite
Cerdo 29. Dez 2014

Obwohl ich 3D-Drucker jetzt eher in den Maschinenbau-Bereich setzen würde.

Cerdo 29. Dez 2014

In C99 kannst du verwenden. Damit castest du automatisch zum längsten verfügbaren...

RobertFr 29. Dez 2014

Genau. Gut festgestellt.

RobertFr 29. Dez 2014

Das ist ja mal eine ganz neue Sichtweise. Du hast gar keine Ahnung von C++, oder...

Cerdo 28. Dez 2014

Du Fuchs ;-)



Anzeige

Stellenmarkt
  1. INTENSE AG, Würzburg, Köln (Home-Office)
  2. via 3C - Career Consulting Company GmbH, München, Frankfurt, Hamburg, Düsseldorf, Berlin (Home-Office)
  3. Comline AG, Dortmund
  4. BG-Phoenics GmbH, München


Anzeige
Hardware-Angebote
  1. 18,01€+ 3€ Versand
  2. täglich neue Deals
  3. (reduzierte Überstände, Restposten & Co.)

Folgen Sie uns
       


  1. UAV

    Matternet startet Drohnenlieferdienst in der Schweiz

  2. Joint Venture

    Microsoft und Facebook verlegen Seekabel mit 160 Terabit/s

  3. Remote Forensics

    BKA kann eigenen Staatstrojaner nicht einsetzen

  4. Datenbank

    Börsengang von MongoDB soll 100 Millionen US-Dollar bringen

  5. NH-L9a-AM4 und NH-L12S

    Noctua bringt Mini-ITX-Kühler für Ryzen

  6. Wegen Lieferproblemen

    Spekulationen über Aus für Opels Elektroauto Ampera-E

  7. Minix

    Fehler in Intel ME ermöglicht Codeausführung

  8. Oracle

    Java SE 9 und Java EE 8 gehen live

  9. Störerhaftung abgeschafft

    Bundesrat stimmt für WLAN-Gesetz mit Netzsperrenanspruch

  10. Streaming

    Update für Fire TV bringt Lupenfunktion



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Zukunft des Autos: "Unsere Elektrofahrzeuge sollen typische Porsche sein"
Zukunft des Autos
"Unsere Elektrofahrzeuge sollen typische Porsche sein"
  1. Concept EQA Mercedes elektrifiziert die Kompaktklasse
  2. GLC F-Cell Mercedes stellt SUV mit Brennstoffzelle und Akku vor
  3. ID Crozz VW stellt elektrisches Crossover vor

Kein App Store mehr: iOS-Nutzer sollten das neue iTunes nicht installieren
Kein App Store mehr
iOS-Nutzer sollten das neue iTunes nicht installieren
  1. Apple iOS 11 Wer WLAN und Bluetooth abschaltet, benutzt es weiter
  2. Drei Netzanbieter warnt vor Upgrade auf iOS 11
  3. Betriebssystem Apple veröffentlicht Goldmaster für iOS, tvOS und WatchOS

Inspiron 5675 im Test: Dells Ryzen-Gaming-PC reicht mindestens bis 2020
Inspiron 5675 im Test
Dells Ryzen-Gaming-PC reicht mindestens bis 2020
  1. Android 8.0 im Test Fertig oder nicht fertig, das ist hier die Frage
  2. Logitech Powerplay im Test Die niemals leere Funk-Maus
  3. Polar vs. Fitbit Duell der Schlafexperten

  1. Re: Speedtest Geschummel - Nicht repräsentativ

    ArcherV | 22:46

  2. Re: Normalerweise

    Gromran | 22:46

  3. Re: Wieder mal Schwachsinn

    Gromran | 22:45

  4. Re: K(n)ackpunkt Tastaturlayout

    widdermann | 22:44

  5. Re: Bits und Byte

    Sammie | 22:43


  1. 17:43

  2. 17:25

  3. 16:55

  4. 16:39

  5. 16:12

  6. 15:30

  7. 15:06

  8. 14:00


  1. Themen
  2. A
  3. B
  4. C
  5. D
  6. E
  7. F
  8. G
  9. H
  10. I
  11. J
  12. K
  13. L
  14. M
  15. N
  16. O
  17. P
  18. Q
  19. R
  20. S
  21. T
  22. U
  23. V
  24. W
  25. X
  26. Y
  27. Z
  28. #
 
    •  / 
    Zum Artikel