Best Practices für die App-Sicherheit

Dieser Abschnitt enthält Empfehlungen zur Gewährleistung der Sicherheit von Apps auf Android-Geräten.

Überprüfung des Quellcodes

Durch die Überprüfung des Quellcodes kann ein breites Spektrum an Sicherheitsproblemen aufgedeckt werden, darunter auch die in diesem Dokument genannten. Android empfiehlt dringend sowohl die manuelle als auch die automatisierte Überprüfung des Quellcodes.

  • Befolgen Sie bei der Durchführung von Überprüfungen umfassende Sicherheitsrichtlinien, um die Abdeckung sicherzustellen. Nutzen Sie relevante interne oder externe Standards, um konsistente und vollständige Überprüfungen sicherzustellen.
  • Führen Sie mithilfe des Android SDK einen Linter wie den Android Studio-Linter für den gesamten App-Code aus und beheben Sie alle identifizierten Probleme.
  • Analysieren Sie nativen Code mit einem automatisierten Tool, das Speicherverwaltungsprobleme wie Pufferüberläufe und Off-by-One-Fehler erkennen kann.
  • Das Android-Buildsystem unterstützt viele der LLVM-Bereinigungsprogramme, wie z. B. AddressSanitizer und UndefinedBehaviorSanitizer , die zur Laufzeitanalyse von speicherbezogenen Problemen verwendet werden können. In Kombination mit Fuzzing, das in Android durch libFuzzer unterstützt wird, können Sanitizer ungewöhnliche Grenzfälle aufdecken, die einer weiteren Untersuchung bedürfen.
  • Ein sachkundiger Sicherheitsgutachter sollte Code mit höherem Risiko überprüfen, z. B. Krypto, Zahlungsabwicklung und PII-Verarbeitung.

Automatisierte Tests

Automatisierte Tests können dabei helfen, ein breites Spektrum an Sicherheitsproblemen zu erkennen und sollten regelmäßig durchgeführt werden.

  • Führen Sie während des gesamten Entwicklungsprozesses regelmäßig die neueste Version von CTS aus, um Probleme frühzeitig zu erkennen und die Zeit bis zur Behebung zu verkürzen. Android verwendet CTS als Teil der kontinuierlichen Integration in unserem automatisierten Build-Prozess, der mehrmals täglich erstellt.
  • Automatisieren Sie Sicherheitstests von Schnittstellen, einschließlich Tests mit fehlerhaften Eingaben (Fuzz-Tests). Das Build-System von Android unterstützt libFuzzer zum Schreiben von Fuzz-Tests.

Scannen von Schwachstellen

Mithilfe des Schwachstellenscans kann sichergestellt werden, dass vorinstallierte Apps frei von bekannten Sicherheitslücken sind. Eine erweiterte Erkennung kann den Zeit- und Kostenaufwand für die Behebung dieser Schwachstellen reduzieren und Risiken für Benutzer und Geräte verhindern.

  • Scannen Sie alle vorinstallierten Apps mit einem branchenweit anerkannten Tool zum Scannen von App-Schwachstellen und beheben Sie erkannte Schwachstellen.

Potenziell schädliche Anwendungen

Es ist wichtig sicherzustellen, dass es sich bei den auf Ihrem Gerät vorinstallierten Apps nicht um potenziell schädliche Anwendungen (PHAs) handelt. Sie sind für das Verhalten aller Apps verantwortlich, die auf Ihren Geräten enthalten sind. Scannen Sie vor dem Gerätestart alle vorinstallierten Apps auf Schwachstellen.

Weitere Informationen zu PHAs und wie Google sie im Play Store bekämpft, finden Sie in der Entwicklerdokumentation zu Google Play Protect .

App-Installation und Berechtigungen

Übermäßige Berechtigungen für vorinstallierte Apps können ein Sicherheitsrisiko darstellen. Beschränken Sie vorinstallierte Apps auf die minimal erforderlichen Berechtigungen und stellen Sie sicher, dass sie keinen Zugriff auf unnötige Berechtigungen oder Privilegien haben. App-Berechtigungen werden in AndroidManifest.xml beschrieben.

  • Gewähren Sie vorinstallierten Apps keine unnötigen Berechtigungen oder Privilegien. Überprüfen Sie Apps mit Systemprivilegien gründlich, da diese möglicherweise über sehr sensible Berechtigungen verfügen.
  • Stellen Sie sicher, dass alle angeforderten Berechtigungen für die Funktionalität dieser spezifischen App relevant und notwendig sind.
  • Stellen Sie sicher, dass für alle vorinstallierten Apps, die die INSTALL_PACKAGES -Berechtigung verwenden, eine Benutzeroffenlegung erfolgt.
  • Stellen Sie sicher, dass der Entwickler vertraglich verpflichtet ist, keine Apps mit der UID 0 zu installieren.
  • Bewerten Sie die im Manifest aller Apps deklarierten Berechtigungen, die über das Netzwerk des Entwicklers installiert werden sollen.
  • Stellen Sie sicher, dass der Entwickler vertraglich verpflichtet ist, alle Download-URLs von Auto-Updater- und Installer-Apps mit der Google Safe Browsing API zu scannen, bevor er Apps auf dem Gerät bereitstellt.

App-Signierung

App-Signaturen spielen eine wichtige Rolle bei der Gerätesicherheit und werden für Berechtigungsprüfungen und Software-Updates verwendet. Bei der Auswahl eines Schlüssels zum Signieren von Apps ist es wichtig zu berücksichtigen, ob eine App nur auf einem einzelnen Gerät verfügbar ist oder auf mehreren Geräten gleich ist.

  • Stellen Sie sicher, dass Apps nicht mit einem öffentlich bekannten Schlüssel signiert sind, z. B. dem AOSP-Entwicklerschlüssel.
  • Stellen Sie sicher, dass die zum Signieren von Apps verwendeten Schlüssel auf eine Art und Weise verwaltet werden, die branchenüblichen Praktiken für den Umgang mit sensiblen Schlüsseln entspricht, einschließlich eines Hardware-Sicherheitsmoduls (HSM), das begrenzten, überprüfbaren Zugriff bietet.
  • Stellen Sie sicher, dass Apps nicht mit dem Plattformschlüssel signiert sind. Dadurch erhält eine App Zugriff auf Plattformsignaturberechtigungen, die sehr leistungsstark sind und nur für die Verwendung durch Komponenten des Betriebssystems gedacht sind. System-Apps sollten privilegierte Berechtigungen verwenden.
  • Stellen Sie sicher, dass Apps mit demselben Paketnamen nicht mit unterschiedlichen Schlüsseln signiert werden. Dies tritt häufig bei der Erstellung einer App für verschiedene Geräte auf, insbesondere bei Verwendung des Plattformschlüssels. Wenn die App geräteunabhängig ist, verwenden Sie auf allen Geräten denselben Schlüssel. Wenn die App gerätespezifisch ist, erstellen Sie eindeutige Paketnamen pro Gerät und Schlüssel.

Isolieren von Apps und Prozessen

Das Android- Sandbox-Modell bietet bei korrekter Verwendung zusätzliche Sicherheit rund um Apps und Prozesse.

Root-Prozesse isolieren

Root-Prozesse sind das häufigste Ziel von Privilege-Escalation-Angriffen; Durch die Reduzierung der Anzahl der Root-Prozesse wird das Risiko einer Rechteausweitung verringert.

  • Stellen Sie sicher, dass auf den Geräten der minimal erforderliche Code als Root ausgeführt wird. Verwenden Sie nach Möglichkeit einen regulären Android-Prozess anstelle eines Root-Prozesses. Wenn ein Prozess als Root auf einem Gerät ausgeführt werden muss, dokumentieren Sie den Prozess in einer AOSP-Funktionsanforderung, damit er öffentlich überprüft werden kann.
  • Wo möglich, sollte der Stammcode von nicht vertrauenswürdigen Daten isoliert und über Interprozesskommunikation (IPC) zugänglich gemacht werden. Reduzieren Sie beispielsweise die Root-Funktionalität auf einen kleinen Dienst, auf den über Binder zugegriffen werden kann, und stellen Sie den Dienst mit Signaturberechtigung einer App mit geringen oder keinen Berechtigungen zur Verarbeitung des Netzwerkverkehrs zur Verfügung.
  • Root-Prozesse dürfen nicht auf einem Netzwerk-Socket lauschen.
  • Root-Prozesse dürfen keine Allzweck-Laufzeitumgebung (z. B. eine Java VM) enthalten.

System-Apps isolieren

Im Allgemeinen sollten vorinstallierte Apps nicht mit der gemeinsamen eindeutigen Systemkennung (UID) ausgeführt werden. Wenn es für eine App erforderlich ist, die gemeinsame UID des Systems oder eines anderen privilegierten Dienstes (z. B. Telefon) zu verwenden, sollte die App keine Dienste, Rundfunkempfänger oder Inhaltsanbieter exportieren, auf die von Benutzern installierte Drittanbieter-Apps zugreifen können .

  • Stellen Sie sicher, dass auf den Geräten der minimal erforderliche Code als System ausgeführt wird. Verwenden Sie nach Möglichkeit einen Android-Prozess mit eigener UID, anstatt die System-UID wiederzuverwenden.
  • Wenn möglich, sollte der Systemcode von nicht vertrauenswürdigen Daten isoliert werden und IPC nur anderen vertrauenswürdigen Prozessen zugänglich gemacht werden.
  • Systemprozesse dürfen nicht auf einem Netzwerk-Socket lauschen. Dies ist eine CTS-Anforderung.

Prozesse isolieren

Die Android-Anwendungssandbox bietet Apps die Möglichkeit, von anderen Prozessen auf dem System, einschließlich Root-Prozessen und Debuggern, isoliert zu sein. Sofern das Debuggen nicht ausdrücklich von der App und dem Benutzer aktiviert wird, sollte keine App diese Erwartung verletzen.

  • Stellen Sie sicher, dass Root-Prozesse nicht auf Daten in einzelnen App-Datenordnern zugreifen, es sei denn, Sie verwenden eine dokumentierte Android-Debugging-Methode.
  • Stellen Sie sicher, dass Root-Prozesse nicht auf den Speicher von Apps zugreifen, es sei denn, Sie verwenden eine dokumentierte Android-Debugging-Methode.
  • Stellen Sie sicher, dass die Geräte keine App enthalten, die auf Daten oder Speicher anderer Apps oder Prozesse zugreift.