Die Entwickler des Projekts Chromium 912 gefĂ€hrliche und kritische Schwachstellen, die in den stabilen Versionen von Chrome seit 2015 erkannt wurden, und kamen zu dem Schluss, dass 70 % davon auf unsicheres Arbeiten mit dem Speicher (Fehler bei der Arbeit mit Zeigern in C/C++-Code) zurĂŒckzufĂŒhren sind. Die HĂ€lfte dieser Probleme (36,1 %) wird durch Zugriffe auf den Puffer nach der Freigabe des damit verbundenen Speichers (Use-after-free) verursacht.
Bei der Konzeption von Chromium wurde ursprĂŒnglich , dass im Code das Auftreten von Fehlern nicht ausgeschlossen werden kann, weshalb ein groĂer Schwerpunkt auf die Anwendung von Sandbox-Isolation gelegt wurde, um die Auswirkungen von Schwachstellen zu begrenzen. Derzeit haben die Möglichkeiten dieser Technologie ihre Grenzen erreicht, und eine weitere Aufspaltung in Prozesse ist aus Sicht des Ressourcenverbrauchs nicht sinnvoll.
Um die Sicherheit des Codes zu gewĂ€hrleisten, wendet Google auch das ââ an, wonach jeder hinzugefĂŒgte Code nicht mehr als zwei von drei Bedingungen erfĂŒllen darf: den Umgang mit nicht ĂŒberprĂŒften Eingabewerten, die Verwendung einer unsicheren Programmiersprache (C/C++) und das AusfĂŒhren mit erhöhten Privilegien. Daraus folgt, dass der Code zur Verarbeitung externer Daten entweder auf minimale Privilegien (isoliert) beschrĂ€nkt oder in einer sicheren Programmiersprache geschrieben werden muss.
Um die Sicherheit des Codes weiter zu erhöhen, wurde ein Projekt zur Verhinderung von Speicherfehlern im Code ins Leben gerufen. Es werden drei HauptansĂ€tze verfolgt: die Erstellung von C++-Bibliotheken mit Funktionen fĂŒr einen sicheren Umgang mit dem Speicher und die Erweiterung des Anwendungsbereichs des Garbage Collectors, die Anwendung von Hardware-Schutzmechanismen (Memory Tagging Extension) und die Erstellung von Komponenten in Sprachen, die einen sicheren Umgang mit dem Speicher gewĂ€hrleisten (Java, Kotlin, JavaScript, Rust, Swift).
Es wird erwartet, dass die Arbeit auf zwei Hauptbereiche konzentriert wird:
- Eine wesentliche Ănderung des Entwicklungsprozesses in C++, die negative Auswirkungen auf die Leistung nicht ausschlieĂt (zusĂ€tzliche Grenzkontrollen und Garbage Collection). Statt roh-Zeigern sollen im Code Typen verwendet werden. , der es ermöglicht, die ausgenutzten Fehler der Klasse use-after-free auf sichere AbstĂŒrze zu reduzieren, ohne spĂŒrbare negative Auswirkungen auf die Leistung, den Speicherverbrauch und die StabilitĂ€t zu haben.
- Die Verwendung von Sprachen, die fĂŒr die ĂberprĂŒfung der sicheren Arbeit mit Speicher zur Kompilierungszeit ausgelegt sind, eliminiert die negativen Auswirkungen auf die Leistung, die bei derartigen ĂberprĂŒfungen zur Laufzeit auftreten. Sie fĂŒhrt jedoch zu zusĂ€tzlichen Aufwendungen fĂŒr die Organisation der Interaktion zwischen dem Code in der neuen Sprache und dem C++-Code.
Die Verwendung von Bibliotheken fĂŒr die sichere Arbeit mit Speicher ist der einfachste, aber auch weniger effiziente Weg. Eine Neuschreibung des Codes in Rust wird als der effektivste, aber auch sehr kostspielige Weg angesehen.
Quelle: opennet.ru
