Wenn Ihr Telefon plötzlich herunterfällt, wäre Ihr erster Gedanke „Oh mein Gott!“ als eingefleischter Fan von Android-Telefonen. oder dass Ihr Geld bei Google Pay oder Paypal nicht sicher ist? Wenn die zuletzt heruntergeladene App nicht nur verschiedene langweilige Anzeigen, sondern auch unerwartete Benachrichtigungen anzeigt, würden Sie dann denken, dass es sich um einen Phishing-Versuch handelt und die App sofort deinstallieren?
Wie können wir sicherstellen, dass unsere App Benutzern, die sich der Android-Sicherheitslücken nicht ausreichend bewusst sind, ein sicheres Erlebnis bietet? Welche Sicherheitslücken gibt es im Android-Ökosystem? Wo können wir neue Android-Sicherheitstesttechniken erkunden? Wie können wir den Sicherheitstestprozess optimieren?
Erstens verbirgt der Open-Source-Entwicklungsvorteil des Android-Betriebssystems auch inhärente Sicherheitsprobleme bei seiner Entwicklung, wie etwa das Sandbox-System (d. h. die virtuelle Maschine) des Android-Systems. Allerdings weist die darunter liegende Schicht eine Schwachstelle nach der anderen auf, die es bösartigen Programmen (oder Tools) ermöglicht, Root-Zugriff zu erlangen und die Einschränkungen der Sandbox zu durchbrechen. Genau wie im PC-Zeitalter gibt es kein absolut sicheres PC-Betriebssystem; Auch im Zeitalter des mobilen Internets gibt es kein absolut sicheres mobiles Betriebssystem. Die Sicherheitsrisiken des Android-Open-Source-Ökosystems sind wie blutbefleckte Alarmglocken, die jedes Android-Entwicklerherz höher schlagen lassen.
Zweitens sind die Sicherheitsrisiken im Android APP/SDK-Entwicklungsprozess wie unbekannte schwarze Löcher. Wir wissen nie, wo der Endpunkt einer Sicherheitskonfrontation liegt, wer die Angreifer sind, wer die Terminatoren sind und wie wir uns gegen sie verteidigen können.
Was sind schließlich auf Benutzerebene einige häufige und erkennbare Schwachstellen im Sicherheitsverhalten?
Sowohl Android-Apps als auch SDKs weisen in gewissem Maße Sicherheitslücken auf. Möglicherweise ist Ihre Anwendung eines Tages von einer der oben genannten Sicherheitslücken betroffen. Zufälligerweise haben wir kürzlich beim Testen eines Android SDK eine Sicherheitslücke im Zusammenhang mit Android-Anwendungskomponenten entdeckt. Anhand dieses Beispiels werden die Methoden, Techniken und Prozesse für Android SDK-Sicherheitstests zusammengefasst.
Übersicht über die Ursachen der Sicherheitslücke
Als optionale Komponente einer Anwendung (im Folgenden als Anwendung bezeichnet) hat das Android SDK einen zufälligen Port lokal geöffnet, um zu überwachen, ob der Java-Layer-Dienst aktiv ist. Wenn die Java-Schicht jedoch mit der Komponente kommuniziert, überprüft sie die Eingabeparameter nicht streng, was dazu führen kann, dass sie beim Aufrufen der Funktion „system()“ des Linux-Systems mit Angriffscode und böswilligen Angriffen gefüllt wird.
Der folgende Screenshot zeigt, dass nach einem Angriff auf den Simulationsport die Absicht der Anwendungskomponente den URL-Inhalt während der Kommunikation ändert und die Webansicht verstümmelten Code anzeigt:
Die vier Hauptanwendungskomponenten von Android-APPs: Aktivität, Empfänger, Dienst und Inhaltsanbieter sowie die Sicherheitsrollen von Anwendungskomponenten, die absichtlich für IPC kommunizieren, werden hier nicht im Detail besprochen. Unter Ausnutzung der komponentenbezogenen Schwachstelle im obigen Beispiel zeigt das folgende Diagramm die Angriffsdimensionen im Zusammenhang mit der Terminal-APP-Seite:
Aufgrund der lokalen Anwendungsumgebung der Android-App verfügt der Netzwerk-Socket von Natur aus über keinen feinkörnigen Authentifizierungs- und Autorisierungsmechanismus. Wenn daher der Android-Client als Server verwendet wird, der umgekehrte Code verwendet wird, um die lokale zufällige Portnummer der Anwendung zu durchsuchen und der Angriff aktiv an den Port gesendet wird, lauern die folgenden Sicherheitsrisiken:
Lokale Befehlsausführung: Wenn der Paketname der eingebetteten Anwendung als Anwendung selbst und der Komponentenname als Aktivität der Anwendung angegeben wird, kann jede Aktivität der Anwendung ausgeführt werden begonnen, einschließlich der geschützten, nicht exportierten Aktivität, wodurch ein Sicherheitsrisiko entsteht. Beispielsweise kann eine Denial-of-Service-Schwachstelle gefunden werden, indem mehrere nicht exportierte Aktivitäten nacheinander über HTTP-Anfragen gestartet werden.
Befehlssteuerung zum Ändern von Anwendungsberechtigungen: Übergeben Sie die Absicht, Android-Anwendungskomponenten über den offenen Socket-Port zu starten, und führen Sie dann Vorgänge wie das Starten von Aktivitäten und das Senden von Broadcasts mit den Berechtigungen des aus angegriffene Anwendung. Da die über den Socket übermittelten Absichten keine detaillierten Überprüfungen der Identität und Berechtigungen des Absenders durchführen können, wird der von Android für Anwendungskomponenten bereitgestellte Berechtigungsschutz umgangen und die nicht exportierten und berechtigungsgeschützten Anwendungskomponenten können gestartet werden, was ein Sicherheitsrisiko darstellt
Offenlegung vertraulicher Informationen, Mobiltelefonkontrolle: Ein lokaler Dienst öffnet den UDP-Port zum Abhören und kann nach Erhalt eines bestimmten Befehlsworts die vertraulichen Informationen des Mobiltelefons zurückgeben. Beispielsweise kann der Baidu-Handy-Butler den SecretKey des Mobiltelefons aus der Ferne verwalten, und dann können unbefugte Angreifer das Mobiltelefon vollständig über das Netzwerk verwalten.
Android Security Hardening Versionsoptimierung
Fügen Sie Prüfungen für Systembefehle und Sonderzeichenfilterung sowohl in der nativen als auch in der Java-Ebene hinzu.
Socket-Kommunikation für den JNI Watchdog-Daemon-Prozess verschlüsseln.
Funktionsüberprüfung für URLs, Absichten und Aktivitäten in lokalen Benachrichtigungsfunktionen hinzufügen, um die Weiterleitung zu schädlichen Links zu verhindern, wenn Sie auf Benachrichtigungen klicken.
Ändern Sie den Speicherort des Paketnamens im lokalen Speicher der App.
Online-Konfigurationsfunktion hinzufügen.
Dies sind die wichtigen Voraussetzungen für diese Optimierung der Sicherheitshärtung.
Wenn Sie herkömmliche Systemtests oder Leistungstests durchführen, müssen Sie nur Vorwärtstests basierend auf den sich ändernden Anforderungen durchführen. Für Sicherheitstests sind jedoch spezielle Reverse-Tests, die Simulation verschiedener Sicherheitsangriffsmethoden und unterschiedliche Testfälle für die geänderten Punkte erforderlich, um die Robustheit der SDK-Sicherheit sicherzustellen.
Datenschutz: Externe Speichersicherheit und interne Speichersicherheit; Überprüfen Sie, ob Benutzernamen, Passwörter, Chat-Aufzeichnungen, Konfigurationsinformationen und andere private Informationen lokal gespeichert und verschlüsselt sind. Überprüfen Sie die Integrität der Informationen, bevor Sie sie verwenden.
Berechtigungsangriffe: Überprüfen Sie das Verzeichnis der App und stellen Sie sicher, dass ihre Berechtigungen anderen Gruppenmitgliedern nicht das Lesen oder Schreiben erlauben; Überprüfen Sie, ob Systemberechtigungen angegriffen werden.
Berechtigungsschutz für Android-Komponenten: Verhindern Sie, dass App-interne Komponenten willkürlich von Programmen von Drittanbietern aufgerufen werden: Verhindern Sie, dass Aktivitäten von Programmen von Drittanbietern aufgerufen werden, verhindern Sie die Entführung von Aktivitäten; Gewährleistung der Sicherheit beim Empfang und der Übertragung von Sendungen, Empfang nur der von der App gesendeten Sendungen und Verhinderung des Empfangs übertragener Inhalte durch Dritte; verhindern, dass Dienste in böswilliger Absicht gestartet oder gestoppt werden; Überprüfen Sie die Betriebsberechtigungen des Inhaltsanbieters. Wenn Komponenten extern aufgerufen werden müssen, überprüfen Sie, ob Signaturbeschränkungen auf den Aufrufer angewendet wurden.
Upgrades: Überprüfen Sie die Integrität und Rechtmäßigkeit des Upgrade-Pakets, um Hijacking zu vermeiden.
Bibliotheken von Drittanbietern: Wenn Bibliotheken von Drittanbietern verwendet werden, achten Sie auf deren Aktualisierungen und überprüfen Sie deren Sicherheit.
ROM-Sicherheit: Verwenden Sie offizielle ROMs oder von autorisierten Teams bereitgestellte ROMs, um das Hinzufügen implantierter Werbung, Trojaner usw. zu vermeiden.
Anti-Cracking-Gegenmaßnahmen: Wirkt der Dekompilierung entgegen und macht es unmöglich, mit Dekompilierungstools zu dekompilieren oder nach der Dekompilierung den richtigen Disassemblierungscode zu erhalten; statischer Analyse durch Code-Verschleierung und Verschlüsselung entgegenwirken; wirken Sie dem dynamischen Debuggen entgegen, indem Sie Code zur Erkennung von Debuggern und Emulatoren hinzufügen; Verhindern Sie eine Neukompilierung, indem Sie Signaturen überprüfen und den Hash-Wert der kompilierten Dex-Datei überprüfen.
Führen Sie nach Abschluss der speziellen Sicherheitstests und regelmäßigen Prozesstests fortlaufende Regressionstests für die vorhandenen Funktionen der App, die Kompatibilität zwischen neuen und alten Versionen und die Kompatibilität mit verschiedenen Android-Betriebssystemversionen durch.
Im Vergleich zu gewöhnlichen Testfällen für Leistung und Systemfunktionalität erfordern Sicherheitstestfälle ein umfassenderes Verständnis des Android-Ökosystems, z mehr Fokus auf die Entwicklung von Reverse-Attack-Thinking-Testfällen.
Wenn der Ausgangspunkt der Entwicklung die Sicherheitsverteidigung ist, ist der Ausgangspunkt des Testens die Einstellung zum Hackerangriff. Das Entwerfen von Testfällen für Angriffsszenarien und das Implementieren von Angriffstesttechniken bestimmt die Robustheit der SDK-Sicherheit.
Um das höchste Maß an Sicherheit für Ihre Anwendungen zu gewährleisten, sollten Sie die Verwendung von WeTest Application Security Testing in Betracht ziehen. Dieser Service bietet eine umfassende Bewertung von Sicherheitsproblemen in Anwendungen, die rechtzeitige Erkennung von Programmschwachstellen und bietet Code-Reparaturbeispiele zur Unterstützung bei der Behebung von Schwachstellen.
Vertrauen Sie WeTest, um Ihre Anwendung vor potenziellen Bedrohungen zu schützen und ein sicheres Benutzererlebnis zu gewährleisten.
Das obige ist der detaillierte Inhalt vonSo führen Sie Android-App-Sicherheitstests durch: Ein Leitfaden für Entwickler und Tester. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!