Wir tun alles, um die Android-Plattform für alle Benutzer auf allen Geräten sicher zu halten. Sicherheitsupdates werden jeden Monat mit Korrekturen für Schwachstellen veröffentlicht, die von Mitgliedern des Vulnerability Rewards Program (VRP) gefunden wurden . Wir versuchen jedoch auch, die Plattform vor anderen potenziellen Schwachstellen zu schützen, indem wir beispielsweise einen Compiler verwenden und die Testumgebung verbessern. Das Android-Ökosystem umfasst Geräte mit einer Vielzahl von Funktionen. Daher müssen alle Entscheidungen ausgewogen sein und die verfügbaren Daten berücksichtigen.
In diesem Artikel wird erläutert, wie wir Sicherheitskontrollen für bestimmte Umstände auswählen und wie sie implementiert werden.
Um die Sicherheit von Android zu gewährleisten, wird ein ganzheitlicher Ansatz verfolgt. Um die Ausnutzung potenzieller Schwachstellen zu erschweren, treffen wir datengesteuerte Entscheidungen unter Verwendung mehrerer Prinzipien und Techniken. Beim Härten der Plattform müssen folgende Fragen beantwortet werden:
- Welche Daten haben wir und wie können sie uns helfen, Entscheidungen zu treffen?
- Welche Tools zur Angriffsprävention stehen zur Verfügung? Wie können sie verbessert werden? In welchen Situationen sollten sie angewendet werden?
- Welche Probleme können bei der Verwendung bestimmter Sicherheitstools auftreten? Welche möglichen Layouts sollten berücksichtigt werden?
Die Prinzipien, die wir bei unseren Sicherheitsentscheidungen verwenden, spiegeln unseren allgemeinen Ansatz zum Schutz der Benutzer der Android-Plattform wider.
Treffen Sie datengesteuerte Sicherheitsentscheidungen
Um herauszufinden, für welche Plattformkomponenten bestimmte Lösungen effektiv sind, wenden wir uns verschiedenen Quellen zu. Das Android Vulnerability Rewards-Programm (VRP) ist vielleicht das informativste von allen. Unsere Sicherheitsingenieure analysieren alle von Programmteilnehmern entdeckten Schwachstellen und ermitteln deren Grundursache und Schweregrad (basierend auf diesen Empfehlungen ). Darüber hinaus gibt es interne und externe Fehlerberichte. Sie helfen dabei, anfällige Komponenten sowie Codefragmente zu identifizieren, die häufig zu Fehlern führen. Wenn wir wissen, wie solche Fragmente aussehen, und die Schwere und Häufigkeit der daraus resultierenden Fehler verstehen, können wir fundierte Entscheidungen darüber treffen, welche Sicherheitsmaßnahmen am effektivsten sind.
Sicherheitslücken mit hohem und kritischem Schweregrad, die in den Android Security Bulletins 2019 behoben wurden. Verlassen
Sie sich jedoch nicht nur auf Schwachstellenberichte. Sie geben zunächst ein verzerrtes Bild, da Sicherheitsexperten häufig auf "heiße" Zonen achten, dh auf Bereiche, in denen bereits Schwachstellen gefunden wurden (z. B. Stagefright ). Oder sie können nach Schwachstellen suchen, bei denen sie mithilfe von Standardlösungen leichter zu erkennen sind. Wenn beispielsweise ein Sicherheitsanalysetool auf der GitHub-Plattform veröffentlicht wird, wird es von vielen Fachleuten verwendet.
Wir versuchen, unsere Bemühungen zur Verbesserung der Sicherheit gleichmäßig zu verteilen. Unsere Teams achten auf die weniger erforschten und komplexeren Komponenten der Plattform. Darüber hinaus werden auf virtuellen Maschinen und physischen Android-Geräten kontinuierlich automatisierte Fuzzing-Tests durchgeführt, mit denen Sie Fehler in den frühesten Entwicklungsstadien finden und beheben können. Bei der Entscheidung, welche Tools verwendet werden sollen, analysieren wir auch die Hauptursachen und die Schwere der gefundenen Probleme.
Als Teil des Android VRP-Programms empfehlen wir Entwicklern, vollständige Schwachstellenketten hinzuzufügen So können Sie den gesamten Angriffsprozess von Anfang bis Ende verfolgen. In der Regel nutzen Cyberkriminelle mehrere Sicherheitslücken gleichzeitig aus, und in solchen Ketten sind diese "Bündel" deutlich sichtbar und daher sehr informativ. Unsere Sicherheitsingenieure analysieren sowohl ganze Ketten als auch ihre einzelnen Glieder und versuchen, neue Angriffsstrategien in ihnen zu entdecken. Diese Analyse hilft bei der Ermittlung von Strategien zur Verhinderung der sequentiellen Ausnutzung von Schwachstellen (z. B. zufällige Adressraumzuweisung und Methoden zur Kontrolle der Flussflussintegrität ) und zeigt auch, ob der Angriff gemindert werden kann, wenn der Prozess unerwünschten Zugriff auf Ressourcen erhält.
Offensichtlich können einige Schwachstellen in mehreren Ketten gleichzeitig enthalten sein und sich in einer anderen Reihenfolge befinden. Daher ist es besser, "Tiefenverteidigung" zu verwenden, um die Wirksamkeit einzelner Schwachstellen zu verringern und die Exploit-Ketten zu verlängern. In diesem Fall ist es für einen Angreifer schwieriger, eine effektive Kette aufzubauen und einen Angriff durchzuführen.
Um aktuelle Sicherheitsbedrohungen zu verstehen und zukünftige Trends vorherzusagen, müssen Sie ständig am Puls der Sicherheitsgemeinschaft bleiben, insbesondere:
- eng mit Sicherheitsexperten von Drittanbietern zusammenarbeiten;
- thematische Veröffentlichungen lesen und an Konferenzen teilnehmen;
- die von Malware verwendeten Technologien untersuchen;
- Verfolgen Sie die neuesten Entwicklungen im Bereich Sicherheit.
- Teilnahme an Nebenprojekten wie KSPP , Syzbot, LLVM, Rust usw.
Auf diese Weise erhalten Sie ein besseres Verständnis Ihrer gesamten Sicherheitsstrategie, der Effektivität vorhandener Lösungen und der Verbesserungsmöglichkeiten.
Warum ist ein stärkerer Schutz notwendig?
Stärkung des Schutzes und Verhinderung von Angriffen
Durch die Analyse der Daten können Bereiche identifiziert werden, in denen eine wirksame Abwehr von Angriffen ganze Schwachstellenklassen beheben kann. Wenn beispielsweise einige Komponenten der Plattform aufgrund von Ganzzahlüberlauffehlern viele Schwachstellen entwickeln, sollten Sie einen nicht angegebenen Verhaltensbereiniger ( UBSan ) verwenden, z. B. den Ganzzahlüberlaufbereiniger. Wenn häufig Sicherheitslücken beim Speicherzugriff auftreten, sollten Sie gehärtete Speicherzuordnungen (in Android 11 standardmäßig aktiviert) und Tools zur Verhinderung von Angriffen (z. B. Control Flow Integrity ) verwenden, die gegen Speicherüberlauf und Use-After-Sicherheitslücken resistent sind. Kostenlos.
Bevor wir über die Datennutzung sprechen, schlagen wir eine Klassifizierung von Tools vor, um die Sicherheit der Plattform zu verbessern. Hier sind die wichtigsten Segmente, in die alle diese Tools unterteilt werden können (obwohl einige Tools und Methoden möglicherweise auf mehrere von ihnen gleichzeitig angewendet werden):
- Eliminierungswerkzeuge ausnutzen
- Deterministische Tools zur Laufzeitkorrektur erkennen undefiniertes oder unerwünschtes Verhalten und unterbrechen die Programmausführung. Dadurch wird eine Datenbeschädigung im Speicher vermieden, während die Wahrscheinlichkeit nur geringfügiger Fehler erhalten bleibt. Oft können solche Werkzeuge punktuell angewendet werden und sind dennoch wirksam, da sie für einzelne Fehler ausgelegt sind. Beispiele: Integer Overflow Sanitizer und BoundsSanitizer .
- . . . . , . : , Control Flow Integrity (CFI), , .
- , . , . : .
-
- . , . , .
Abhängig vom spezifischen Problem entscheiden wir, welches der beschriebenen Tools wie verwendet werden soll. Zum Beispiel ist jeder von ihnen geeignet, wenn es sich um einen großen Prozess handelt, der die Verarbeitung unzuverlässiger Daten und die komplexe Analyse umfasst. Multimedia-Plattformen sind eine großartige Demonstration dafür, wie die Zerlegung von Architekturen verwendet werden kann, um Exploits effektiver abzuschwächen und eine Eskalation von Berechtigungen zu verhindern.
Zerlegung der Architektur und Isolation von Medienrahmen im historischen Kontext
Die Ziele von Remote-Angriffen (NFC, Bluetooth, Wi-Fi und Medieninhalte) sind traditionell mit den schwerwiegendsten Sicherheitslücken verbunden. Daher sollte die Stärkung ihrer Sicherheit Priorität haben. In der Regel werden diese Sicherheitsanfälligkeiten durch die häufigsten Ursachen im VRP-Programm verursacht, und wir haben kürzlich für alle Desinfektionsmittel Desinfektionsmittel hinzugefügt.
Angriffspräventionstools sind nützlich für Bibliotheken und Prozesse, die Sicherheitsgrenzen festlegen oder sich innerhalb dieser befinden (z. B. Libbinder sowie die Standardbibliotheken libui , libcore und libcutils)), da sie nicht an bestimmte Prozesse gebunden sind. Diese Bibliotheken sind jedoch für den effizienten und stabilen Betrieb von Systemen verantwortlich. Bevor Sie eine bestimmte Methode verwenden, müssen Sie ernsthaft sicherstellen, dass sie die Sicherheit erhöht.
Schließlich ist es wichtig, den Kernel aufgrund seiner hohen Berechtigungen zu schützen. Alle Codebasen haben unterschiedliche Eigenschaften und Funktionen, sodass die Wahrscheinlichkeit von Schwachstellen in ihnen unterschiedlich ist. Die Hauptkriterien sind hier Stabilität und Leistung. Verwenden Sie nur wirksame Sicherheitsmaßnahmen, die die Arbeit der Benutzer nicht beeinträchtigen. Bevor wir die optimale Strategie für den Härtungsschutz auswählen, analysieren wir daher sorgfältig alle verfügbaren Daten, die sich auf den Kernel beziehen.
Der datengetriebene Ansatz hat zu greifbaren Ergebnissen geführt. Nachdem die Stagefright-Sicherheitsanfälligkeit im Jahr 2015 entdeckt wurde, erhielten wir Berichte über eine große Anzahl anderer kritischer Sicherheitsanfälligkeiten in der Android Media-Plattform. Um die Sache zu verkomplizieren, waren viele von ihnen aus der Ferne zugänglich. Wir haben das Android Nougat-System massiv zerlegt und die Behebung von Schwachstellen in Multimedia-Komponenten beschleunigt . Dank dieser Änderungen gab es im Jahr 2020 keine Berichte über kritische Schwachstellen in Multimedia-Plattformen, auf die über das Internet zugegriffen werden kann.
Wie die Bereitstellungsentscheidung getroffen wird
Natürlich ist es sinnvoll, sich auf die Tools zur Angriffsprävention zu konzentrieren, die am besten funktionieren. Um sie zu identifizieren, untersuchen wir, wie sich jedes Tool auf die Leistung auswirkt, wie viel Arbeit für die Bereitstellung und Unterstützung erforderlich ist und ob sich dies negativ auf die Systemstabilität auswirkt.
Performance
Bei der Auswahl eines Tools zur Verhinderung von Angriffen müssen Sie wissen, wie sich dies auf die Geräteleistung auswirkt. Wenn einige Komponenten oder das gesamte System die Last nicht bewältigen können, können sich die Batterielebensdauer und die Gesamtleistung verringern. Dies gilt insbesondere für Einstiegsgeräte, die ebenfalls eine erhöhte Sicherheit benötigen. Daher bevorzugen wir die effektivsten Lösungen, die die Leistung der Geräte nicht beeinträchtigen.
Bei der Bewertung der Leistung berücksichtigen wir nicht nur die Prozessorzeit, sondern auch die Speichernutzung, die Codelänge, die Akkulaufzeit und Fälle von Einfrieren der Schnittstelle.... Um sicherzustellen, dass ein Tool im gesamten Android-Ökosystem eine gute Leistung erbringt, ist es besonders wichtig, die aufgelisteten Parameter auf Einstiegsgeräten zu testen.
Es ist sehr wichtig, für welche Komponente die Schutzmaßnahmen angewendet werden. Beispielsweise wird die Bindung am häufigsten für die Interprozesskommunikation verwendet. Daher wirkt sich eine übermäßige Belastung sofort auf den Betrieb des Geräts aus. Bei einem Media Player, der Frames nur mit der ursprünglichen Rate verarbeitet, ist die Situation anders. Wenn die Videogeschwindigkeit viel höher als die Anzeigegeschwindigkeit ist, ist die zusätzliche Belastung nicht so kritisch.
Wir verwenden Benchmarks, um die Auswirkungen einer bestimmten Lösung auf die Leistung zu bestimmen. Wenn für eine Komponente keine Benchmark-Ergebnisse vorhanden sind, müssen Sie diese beispielsweise durch Aufrufen des betroffenen Codecs zum Dekodieren der Mediendatei abrufen. Wenn das Testen eine nicht akzeptable Belastung anzeigt, gibt es mehrere Optionen:
- Deaktivieren Sie selektiv die Angriffsprävention für Funktionen, die einen erheblichen Einfluss auf die Leistung haben. Normalerweise verbrauchen nur wenige Funktionen zur Laufzeit Ressourcen. Wenn Sie keine Angriffsminderung anwenden, können Sie die Leistung aufrechterhalten und Ihre Sicherheitsauswirkungen maximieren. Hier ist ein Beispiel für diesen Ansatz für einen der Mediencodecs. Um die Risiken auszuschließen, sollten die genannten Funktionen vorab auf Fehler überprüft werden.
- Optimieren Sie den Einsatz der Angriffsprävention. Dies erfordert häufig Änderungen am Compiler. Zum Beispiel hat unser Team auf Integer Overflow Sanitizer und Bounds Sanitizer umgestellt.
- Einige Optionen zur Angriffsminderung, wie z. B. die integrierte Heap-Ausfallsicherheit von Scudo, können optimiert werden , um die Leistung zu verbessern.
Viele dieser Verbesserungen erfordern Änderungen am LLVM-Design. Infolgedessen gewinnt nicht nur die Android-Plattform, sondern auch andere Mitglieder der LLVM-Community.
Bereitstellung und Support
Bei der Auswahl eines Tools zur Verhinderung von Angriffen müssen Sie nicht nur Sicherheits- und Leistungsaspekte berücksichtigen, sondern auch die Kosten für Bereitstellung und langfristigen Support.
Auswirkungen von Sicherheitsmaßnahmen auf den stabilen Betrieb des Systems
Es ist wichtig zu verstehen, ob es möglich ist, ein bestimmtes Angriffspräventionstool fälschlicherweise auszulösen. Wenn das Bounds-Desinfektionsprogramm beispielsweise einen Fehler auslöst, wird der Zugriff definitiv verweigert (obwohl er möglicherweise nicht verwendet wurde). Im Fall des Integer Overflow-Desinfektionsmittels sind Fehlalarme möglich, da ein Integer-Überlauf häufig ein absolut normaler und harmloser Prozess ist.
Daher ist es wichtig, die Auswirkungen von Tools zur Angriffsprävention auf die Systemstabilität zu berücksichtigen. Es spielt keine Rolle, ob ein falsches Positiv oder eine echte Sicherheitsbedrohung vorliegt - auf jeden Fall treten für den Benutzer Unannehmlichkeiten auf. Auch hier stellen wir fest, dass klar verstanden werden muss, für welche Komponenten die eine oder andere Sicherheitsmaßnahme angewendet werden soll. Weil Fehler in einigen Komponenten einen größeren Einfluss auf die Stabilität des Systems haben. Wenn Attack Prevention den Mediencodec zum Absturz bringt, wird das Video einfach nicht mehr abgespielt. Im Falle eines Fehlers im Prozess
netd
Bei der Installation des Updates lässt sich das Gerät möglicherweise nicht mehr einschalten. Auch wenn Fehlalarme bei einigen Anti-Angriffs-Tools kein Problem darstellen (z. B. beim Bounds-Desinfektionsmittel), führen wir dennoch umfangreiche Tests durch, um sicherzustellen, dass das Gerät stabil ist. Zum Beispiel können Bias-Fehler von einem nicht normal abstürzen, und der Bounds-Desinfizierer unterbricht den Prozess und stört die Systemstabilität.
Es ist auch wichtig zu verstehen, ob es möglich ist, alle Komponenten, die das Angriffspräventionstool deaktivieren kann, im Voraus zu identifizieren. Im Fall des Integer Overflow-Desinfektionsmittels ist es beispielsweise sehr schwierig, die Risiken vorherzusagen, ohne umfangreiche Tests durchzuführen, da es schwierig ist zu bestimmen, welche Ganzzahlüberläufe beabsichtigt (zulässig) sind und welche Schwachstellen verursachen können.
Unterstützung
Es ist notwendig, nicht nur die möglichen Probleme beim Einsatz von Angriffspräventionstools zu berücksichtigen, sondern auch die Besonderheiten ihrer langfristigen Unterstützung. Wir schätzen die Zeit, die erforderlich ist, um das Tool in vorhandene Systeme zu integrieren, es zu aktivieren und zu debuggen, auf Geräten bereitzustellen und nach dem Start zu warten. Die SELinux-Technologie ist ein gutes Beispiel. Das Erstellen von Regeln erfordert viel Zeit und Mühe. Und dieses Set muss jahrelang gewartet werden, unabhängig von Codeänderungen sowie dem Hinzufügen oder Entfernen einzelner Funktionen.
Wir bemühen uns sicherzustellen, dass Angriffspräventionstools nur minimale Auswirkungen auf die Stabilität haben und dass Entwickler über alle Informationen verfügen, die sie benötigen. Um diese Ziele zu erreichen, verbessern wir unsere aktuellen Algorithmen, um die Anzahl der Fehlalarme zu verringern, und veröffentlichen die Dokumentation unter source.android.com . Indem Sie das Debuggen bei Fehlern vereinfachen, können Sie den Wartungsaufwand für Entwickler verringern. Um beispielsweise das Erkennen von Fehlern im UBSan-Desinfektionsprogramm zu vereinfachen, haben wir dem Android-Buildsystem standardmäßig UBSan-Mindestlaufzeitunterstützung hinzugefügt . Anfangs wurde die minimale Ausführungszeit hinzugefügt andere Google-Entwickler speziell für diesen Zweck. Wenn das Programm aufgrund des Integer Overflow-Desinfektionsprogramms abstürzt, wird der SIGABRT-Fehlermeldung das folgende Snippet hinzugefügt:
Abort message: 'ubsan: sub-overflow'
Nach dem Anzeigen dieser Meldung werden Entwickler verstehen, dass der Diagnosemodus aktiviert werden muss, um Informationen über den Fehler auszudrucken:
frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp:2188:32: runtime error: unsigned integer overflow: 0 - 1 cannot be represented in type 'size_t' (aka 'unsigned long')
Gleichzeitig verfügt SELinux über ein audit2allow-Tool, mit dem Sie Regeln vorschlagen können, die bestimmte blockierte Vorgänge zulassen:
adb logcat -d | audit2allow -p policy
#============= rmt ==============
allow rmt kmem_device:chr_file { read write };
Während audit2allow möglicherweise nicht immer die richtigen Optionen vorschlägt, ist es für Entwickler, die neu in SELinux sind, eine große Hilfe.
Fazit
Mit jeder Version von Android bieten wir Ihnen neue Tools, die das gesamte Ökosystem schützen und die Leistung und Stabilität gewährleisten, die Sie benötigen. Dabei spielt die Datenanalyse eine wichtige Rolle. Wir hoffen, dieser Artikel hat Ihnen geholfen, die Herausforderungen bei der Implementierung neuer Tools zur Angriffsprävention und deren Umgang mit ihnen besser zu verstehen.
Vielen Dank an unsere Kollegen und Autoren: Kevin Deus, Joel Galenson, Billy Lau und Ivan Lozano - Experten für Android-Sicherheit und Datenschutz. Besonderer Dank geht an Zviad Kardava und Jeff Van Der Stup für ihre Hilfe bei der Vorbereitung dieses Artikels.