Wie Google die Sicherheitslücken von Android um 52 % reduzierte

Oscar

Google arbeitet seit Jahren hart daran, Android zu einem immer sichereren Betriebssystem zu machen. Angreifer suchen nach jeder Lücke, die sie ausnutzen können, und verwenden dabei banale Methoden wie Phishing oder komplexere wie Speichersicherheitslücken. Nun erklärt Google, wie es mit dem Safe-Coding-Ansatz in den letzten Jahren gelungen ist, die Speichersicherheitslücken in Android deutlich zu reduzieren.

Google nutzt Safe-Coding-Ansatz gegen Speichersicherheitslücken

Sicherheitslücken im Speicher sind solche, die speicherbezogene Fehler wie Pufferüberläufe, Formatierungszeichenfolgenprobleme oder hängende Zeiger ausnutzen, um mit dem Speicher zu interagieren oder ihn sogar zu überschreiben. Diese Art von Sicherheitslücken sind in der Softwareentwicklung immer noch weit verbreitet. Entwickler versuchen, sie mit verschiedenen Ansätzen anzugehen, wobei Abhilfemaßnahmen und proaktive Erkennung überwiegen. Google ist jedoch überzeugt, dass Safe Coding der ideale Ansatz ist, um Sicherheitslücken im Speicher zu minimieren, wie die Ergebnisse mit Android zeigen.

Der Safe-Coding-Ansatz priorisiert von Anfang an die Verwendung speichersicherer Programmiersprachen. Es gibt jedoch Software, die viele Jahre alt ist und Millionen von Zeilen Schlüsselcode enthält, die in „speicherunsicheren“ Sprachen entwickelt wurden. Was also schlägt Google in diesen Fällen vor? Die Antwort liegt in der schrittweisen Umstellung auf speichersichere Sprachen (wie Rust) für neue Funktionen.

Grundsätzlich schlägt Google vor, dass Entwickler bei der Entwicklung neuer Funktionen ausschließlich speichersichere Sprachen implementieren. In der Zwischenzeit bleibt alter Code, der auf unsicheren Sprachen basiert, über die klassische Wartung und Fehlerbehebung hinaus „unverändert“. Dies bedeutet, dass eine sichere, effiziente und kostengünstige Interoperabilität zwischen neuem und altem Code erreicht wird.

Die Speichersicherheitslücken von Android gingen in 6 Jahren um 52 % zurück

Laut Google hat der Safe-Coding-Ansatz dazu geführt, dass die Speichersicherheitslücken in Android in nur 6 Jahren von 76 % auf 24 % gesunken sind. Die Idee, speicherunsicheren Code beizubehalten, kann jedoch kontraintuitiv erscheinen. Wenn Sie nach maximaler Sicherheit suchen, wäre Ihr erster Gedanke schließlich, Ihren gesamten Code in eine sichere Sprache zu migrieren. Dies mag zwar zutreffen, aber Googles Ansatz ist sinnvoll, und das Unternehmen erklärt, warum.

Bei der Softwareentwicklung sind Codeeffizienz und Kosteneffizienz entscheidend. Es gibt Tools oder ganze Systeme, hinter denen viele Jahre Entwicklung stecken. Dabei geht es um Millionen und Abermillionen grundlegender Codezeilen. Ein Unternehmen könnte zwar einfach anfangen, die Software auf der Grundlage speichersicherer Sprachen von Grund auf neu zu schreiben, aber die Investition und der Aufwand lohnen sich wahrscheinlich nicht. Bei relativ neuen Entwicklungen, die noch nicht viel Zeit hinter sich haben, kann die Situation jedoch anders sein.

Vorteile von Safe Coding und Interoperabilität

Google behauptet, dass der Safe-Coding-Ansatz, der auf Code-Interoperabilität basiert, eine kostengünstige und praktische Möglichkeit ist, speichersicheren Code zu übernehmen. Dies wiederum macht es kostengünstig, da Unternehmen frühere Investitionen nutzen können. Die Kosten sind deutlich geringer als beim Neuschreiben von Software von Grund auf. Es ist auch effizient, da es die Entwicklung neuer Funktionen ermöglicht, während der neue, sichere Code integriert wird.

Die Verwendung von inhärent speichersicherem Code sorgt auf lange Sicht auch für geringere Kosten. Frühere Ansätze begünstigten einen endlosen Zyklus von „Angriff und Verteidigung“ zwischen Entwicklern und Angreifern. Das Verlassen auf Abwehrmaßnahmen und proaktive Erkennung erforderte kontinuierliche Maßnahmen und Investitionen als Reaktion auf potenzielle Angriffe. Mit Safe Coding können Entwickler und Unternehmen dies jedoch vergessen und sich auf die Wartung und Verbesserung von Funktionen oder die Behebung von Fehlern konzentrieren.

Dank niedrigerer Code-Rollback-Raten ist auch die Produktivität höher. Das heißt, es gibt weniger Notfall-Code-Rollback-Situationen aufgrund unerwarteter Fehler. Google behauptet, dass Rust Code-Rollback-Raten bietet, die weniger als halb so hoch sind wie die von C++. Im Wesentlichen bringt Safe Coding erhebliche Zeit- und Kosteneinsparungen für Unternehmen und Entwickler. In der heutigen Industrie, die die Rentabilität genau überwacht, kann dies von entscheidender Bedeutung sein.

Google gibt bekannt, dass es die Interoperabilität zwischen „Rust ↔︎ C++ und Rust ↔︎ Kotlin“ implementiert hat. Das Unternehmen hat außerdem sowohl Geld als auch Tools zur Verfügung gestellt, um seinen Ansatz voranzutreiben. So hat Google beispielsweise der Rust Foundation 1.000.000 US-Dollar gespendet, um deren Entwicklung voranzutreiben. Außerdem hat es seine eigenen Interoperabilitätstools wie Crubit und autocxx bereitgestellt.

Google Memory Safe-Sicherheitslücken (3)

So macht der Safe-Coding-Ansatz Software sicherer

Sie fragen sich vielleicht immer noch, wie ein Ansatz, der speicherunsicheren Code beibehält, zu einer exponentiellen Reduzierung von Speichersicherheitslücken führen kann. Google erklärt dies auch in seinem Blogbeitrag, auf sehr technische Weise, aber ich werde versuchen, es für alle einfach zu machen.

Durch groß angelegte Studien haben USENIX Security und Google selbst ein faszinierendes Phänomen entdeckt. Im Wesentlichen kam die Forschung zu dem Schluss, dass die überwiegende Mehrheit der Speicherschwachstellen in Software ihren Ursprung in neuem Code hat. Ein erheblicher Teil stammt auch aus kürzlich geändertem Code. Google bemerkte auch, dass die Dichte der Android-Speichersicherheitsschwachstellen in altem Code zunehmend abnahm.

Da ein erheblicher Teil der Probleme auf neuen Code zurückzuführen ist, ist es sinnvoll, sich darauf zu konzentrieren, oder? Dies ist der Grund für die Entscheidung von Google, den Safe-Coding-Ansatz zu übernehmen. Aber warum häufen sich in neuem Code mehr Probleme und Schwachstellen an? Das liegt daran, dass jede Programmiersprache eine grundlegende Eigenschaft hat: Reifung.

Während die grundlegende Struktur einer Sprache sie speicherunsicher machen kann, können aufeinanderfolgende Updates helfen, dies zu mildern. Theoretisch kann unsicherer Code, der in älteren Teilen der Software verwendet wird, mit der Zeit weniger anfällig werden. Durch die Kombination der Reifung älteren Codes mit neuen Funktionen, die in neuem, von Natur aus speichersicherem Code entwickelt werden, ergibt sich eine exponentielle Verringerung der Speicherschwachstellen.

Google Memory Safe-Sicherheitslücken (2)

Google empfiehlt Rust als speichersichere Sprache

Natürlich kann das Portieren von Teilen älteren Codes in Sprachen wie Rust die Sicherheit noch weiter erhöhen. Dies ist jedoch nicht immer möglich, zumindest nicht auf unkomplizierte Weise. Es gibt Fälle, in denen das Verschieben eines einzigen Blocks das ganze Schloss zum Einsturz bringen kann. Google besteht darauf, dass Rust eine speichersichere Programmiersprache ist. Wenn Sie also daran interessiert sind, Programmieren oder eine neue Sprache zu lernen, um in der heutigen Branche wettbewerbsfähig zu sein, ist Rust möglicherweise das Richtige für Sie.

Sicherheitslücken im Speicher sind nicht die einzigen, die es gibt. Böswillige Dritte werden weiterhin nach Möglichkeiten suchen, die Sicherheitsebenen einer Software zu umgehen. Starke Barrieren im „Innern“ der Software sorgen jedoch dafür, dass Angreifer auf banalere und leicht zu neutralisierende Methoden zurückgreifen müssen. Sie können beispielsweise vermeiden, Opfer von Phishing zu werden, indem Sie einfach Ihren gesunden Menschenverstand einsetzen.