Funktionen testen und debuggen

OWASP-Kategorie:MASVS-CODE: Code Quality

Übersicht

Die Veröffentlichung von Produktions-Builds, die Test- oder Debugging-Funktionen enthalten, kann sich negativ auf die Sicherheit der Anwendung auswirken. Diese Funktionen werden verwendet, um Entwicklern zu helfen, Fehler in den vorgesehenen Anwendungsfällen vor oder nach der Veröffentlichung einer neuen Version zu erkennen und zu identifizieren. Sie sollten nicht öffentlich zugänglich sein.

Beispiele für Test-/Debug-Funktionen:

  • Ausgeblendete Menüs
  • Optionen zum Aktivieren von Fehlerbehebungsprotokollen
  • Optionen zum Ändern des Anwendungsablaufs
  • Optionen zum Umgehen von Zahlungs- oder Abo-Prozessen
  • Optionen zum Umgehen der Authentifizierung
  • Tests für anwendungsspezifische Aktivitäten

All das kann von einem böswilligen Nutzer ausgenutzt werden, um den beabsichtigten Ablauf der Anwendung zu ändern oder Systeminformationen abzurufen, um weitere Angriffe zu starten.

Das Risiko, das durch das Offenlassen von Test- oder Debugging-Funktionen entsteht, kann je nach der mit den Debugging-Funktionen verbundenen Aktion variieren.

Ein weiterer Risikobereich für die Anwendung ist das Attribut android:debuggable, das im AndroidManifest.xml-Element <application> festgelegt ist. Wie im Artikel android:debuggable beschrieben, können böswillige Nutzer durch die Bereitstellung einer Produktionsanwendung mit dem oben genannten Wert auf administrative Ressourcen zugreifen, die ansonsten nicht zugänglich sind.

Positiv beeinflussen

Wenn ein böswilliger Nutzer mit einer Test- oder Debugging-Funktion in einem Produktionsbuild interagiert, kann das zu unerwarteten Ergebnissen führen. Die Auswirkungen einer Aktion hängen direkt von den Berechtigungen ab, die der Funktion zugewiesen sind. Je höher die Berechtigungen, desto größer die Auswirkungen, die eine aktive Ausnutzung haben kann. Solche Funktionen in einer Anwendung können verwendet werden, um eine Reihe von Schutzmaßnahmen zu umgehen, Paywalls zu umgehen, system- oder nutzerbezogene Informationen abzurufen oder Testaktivitäten auszulösen.

Maßnahmen zur Risikominderung

Debug-Komponenten vermeiden

Test- oder Debugging-Funktionen sollten niemals in Produktionsanwendungskomponenten wie Aktivitäten, Broadcast-Empfängern, Diensten oder Content-Providern implementiert werden, da sie, wenn sie exportiert werden, von jedem anderen Prozess auf dem Gerät ausgeführt werden können. Wenn Sie die Debugging-Komponente als nicht exportiert festlegen (android:exported="false"), ist das kein gültiger Schutz für die Funktionen, da sie auf jedem gerooteten Gerät über das ADB-Tool (Android Debug Bridge) ausgeführt werden können, wenn die Debugging-Option aktiviert ist.

Debug- oder Testfunktionen auf Staging-Builds beschränken

Die Ausführung von Test- oder Debugging-Funktionen in Anwendungen sollte nur auf eine eingeschränkte Anzahl von Staging-Builds beschränkt sein, damit nur Entwickler Anwendungsfunktionen in einer kontrollierten Umgebung debuggen oder testen können. Dazu können Sie einen speziellen Test- oder Debug-Build der Anwendung und erweiterte instrumentierte Tests dafür erstellen, um sicherzustellen, dass alle Test- oder Debug-Funktionen in einer isolierten Version ausgeführt werden.

Automatisierte UI-Tests implementieren

Wenn Sie Tests für eine Anwendung ausführen, sollten Sie automatisierte UI-Tests verwenden, da sie wiederholbar sind, in einer separaten Umgebung ausgeführt werden können und nicht anfällig für menschliche Fehler sind.

Ressourcen