Eine der größten Bedrohungen sind Root-Exploits, die die Sicherheit eines Android-Geräts gefährden können. In einem Forschungsprojekt wollte SEC Consult herausfinden, ob aktuelle Root-Erkennungsbibliotheken, die von Applikationen, welche mit hoch-sensiblen Informationen arbeiten (z.B. Bank- oder Gesundheitsapplikationen), erkennen können, ob ein Gerät während der Laufzeit durch eine bösartige Anwendung via Root-Exploit kompromittiert wird. Das Ziel ist es, die Nützlichkeit der Root-Erkennung im Allgemeinen zu hinterfragen und die verschiedenen Implementierungsmöglichkeiten zu diskutieren.
Um dieses Thema besser zu verstehen, werden unsere Experten für mobile Sicherheit, Hussam Cheaib und Fabian Densborn, zunächst beschreiben, was Rooting eigentlich ist, welche verschiedenen Arten von Root es gibt und wie bzw. ob Root-Erkennung überhaupt funktioniert.
Was ist Rooting?
Rooting ist der Prozess der Erlangung von Administrationsrechten (Root-Rechten) auf einem Android-Gerät. Standardmäßig werden Android-Geräte mit eingeschränkten Benutzerkonten eingerichtet, die über begrenzte Berechtigungen verfügen. Diese Einschränkungen verhindern, dass Benutzer auf bestimmte Systemdateien und Einstellungen zugreifen können, was die Sicherheit und Stabilität des Geräts verbessern kann. Sobald ein Gerät gerootet wurde, hat der Benutzer die volle Kontrolle über das Gerät, einschließlich der Möglichkeit, benutzerdefinierte Software zu installieren, Systemeinstellungen zu ändern und auf Systemdateien zuzugreifen, die zuvor eingeschränkt waren. Das Rooten kann dem Benutzer zwar mehr Kontrolle über sein Gerät geben, birgt aber auch Risiken in sich. Durch das Rooten wird das Gerät möglicherweise anfälliger für Sicherheitsbedrohungen wie Malware und andere bösartige Software. Es gibt zwei verschiedene Arten des Rootings, die unterschieden werden müssen und im Folgenden beschrieben sind.
Nutzer Root - Willentliches rooten des eigenen Geräts
Für Benutzer, die mehr Kontrolle über ihr Gerät wünschen, kann Rooting eine Möglichkeit sein, diese Einschränkungen zu umgehen und die volle Kontrolle über das Betriebssystem zu erlangen. Beim Rooten wird im Wesentlichen die Firmware oder Software des Geräts verändert, um einen privilegierten Zugriff auf die Systemdateien und Systemeinstellungen zu ermöglichen. Das Rooten kann mit verschiedenen Methoden erfolgen, z. B. mit einem Rooting-Tool oder durch das Aufspielen einer modifizierten Version des Android-Betriebssystems ("Custom ROM"). In den meisten Fällen wird eine Gatekeeper-Anwendung wie Magisk installiert, um den Zugriff auf diese erweiterten Berechtigungen zu regulieren. In diesem Szenario sind sich die Benutzer über den Zustand des Geräts bewusst, weil sie das Gerät selbst modifiziert haben. Sie wollen die Flexibilität nutzen, die sie durch das Rooten ihres eigenen Geräts erhalten. Es gibt viele Artefakte auf dem Gerät, anhand derer man erkennen kann, dass ein solches Gerät gerootet ist. Da das Rooten jedoch beabsichtigt ist, versuchen die meisten modifizierten Android-Versionen nicht einmal, solche Artefakte zu verbergen.
Bösartiges Root - Gerät wird durch einen Angreifer kompromittiert
Bösartiges Root wird häufig von Schadsoftware verwendet, um erhöhte Administrationsrechte (Root-Rechte) zu erhalten. In den meisten Fällen wird ein Kernel-Exploit missbraucht, um die Privilegien zu erweitern. Die Schadsoftware führt im Anschluss ihre bösartigen Aktionen aus. Nur wenige Artefakte, die auf die Kompromittierung des Systems hinweisen könnten, werden auf dem Gerät platziert, da die Schadsoftware versucht, ihre bösartige Absicht zu verbergen. Dies macht es fast unmöglich, einen bösartigen Root zu entdecken, da die Malware dank ihrer hohen Privilegien alle ihre Spuren verwischen kann. Die meisten bösartigen Root-Exploits sind vorübergehend, d. h. sie überleben keinen Geräte-Neustart. Da Smartphones in der Regel aber ohnehin selten neu gestartet werden, kann die Schadsoftware sehr lange auf dem Gerät überleben. Es gibt jedoch auch bösartige Root-Exploits, die dauerhaft bestehen bleiben können, einige von ihnen überleben sogar das Zurücksetzen des Smartphones auf die Werkseinstellungen.
Root-Exploits sind im Wesentlichen Schwachstellen, die es Angreifern ermöglichen, Root-Rechte auf einem Gerät zu erlangen. Sobald Angreifer Root-Rechte erlangt haben, können sie alles auf dem Gerät tun, einschließlich der Änderung von Systemdateien, dem Diebstahl von Daten und der Installation von zusätzlicher Schadsoftware.
Die meisten Root-Exploits nutzen eine Kernel-Schwachstelle aus, um erhöhte Rechte auf dem Gerät zu erlangen. Für eine erfolgreiche Ausnutzung müssen jedoch zunächst viele Sicherheitsfunktionen wie SECCOMP oder SELinux umgangen werden. Zusätzlich müssen die meisten Root-Exploits auf ein bestimmtes Gerät zugeschnitten sein, damit sie funktionieren.
Root-Erkennung
Was ist Root-Erkennung?
Root-Erkennung ist eine Technik, die von einigen Android-Apps verwendet wird, um festzustellen, ob ein Gerät kompromittiert wurde. Wenn eine App installiert wird, prüft sie auf Anzeichen für Rooting, z. B. das Vorhandensein bestimmter Dateien oder Ordner, die während des Prozesses erstellt wurden. Wird erkannt, dass das Gerät verändert wurde, deaktiviert die App möglicherweise bestimmte Funktionen, die von einem Angreifer mit Root-Zugriff ausgenutzt werden könnten, oder sie verweigert die Ausführung ganz. Der Zweck dieses Prozesses ist es, sicherzustellen, dass die App auf einem Gerät läuft, das die Standardsicherheitsmaßnahmen des Betriebssystems gewährleistet. Dazu zählt beispielsweise, dass das private Verzeichnis einer Anwendung nur für die App selbst zugänglich ist und nicht von anderen Apps auf diese sensiblen Daten zugegriffen werden kann.
Wie funktioniert Root-Erkennung?
Die Root-Erkennung kann auf unterschiedliche Weise funktionieren, abhängig von der App und den verwendeten Techniken. Einige Apps prüfen lediglich, ob bestimmte Dateien oder Ordner vorhanden sind, die oftmals beim Rooten des Geräts erstellt werden. Andere verwenden fortschrittlichere Techniken, wie z. B. die Überprüfung des Kernels auf Änderungen oder auf Manipulationsanzeichen des Dateisystems. Einige Anwendungen verwenden auch eine Kombination aus verschiedenen Techniken, um die Genauigkeit ihrer Root-Erkennung zu verbessern.
Die meisten Root-Erkennungsbibliotheken überprüfen die folgenden Dinge:
- Sind Root-Management-Anwendungen (z. B. Magisk) auf dem Gerät installiert?
- Sind andere potenziell bösartige Anwendungen installiert?
- Enthält das Build-Tag Testschlüssel?
- Hat das Gerät gefährliche Geräteeigenschaften eingestellt?
- Ist die busybox-Binärdatei auf dem Gerät installiert?
- Ist die su-Binärdatei auf dem Gerät installiert?
- Ist die Systempartition mit Lese- und Schreibzugriff gemountet und nicht schreibgeschützt?
Einige Anwendungen versuchen sogar den aktuellen SELinux-Modus zu ermitteln, in dem das Gerät läuft, aber ohne spezielle Berechtigungen, auf die nur Systemanwendungen Zugriff haben, ist dies in modernen Android-Versionen nicht möglich.
Wie gehen Applikationen mit Root-Erkennung um?
Wenn eine Applikation feststellt, dass das Gerät, auf dem sie läuft, kompromittiert ist, gibt es verschiedene Möglichkeiten, wie Apps darauf reagieren können:
- Warnung des Benutzers: Einige Apps warnen den Benutzer, dass sie auf einem gerooteten Gerät ausgeführt werden, und informieren ihn über die potenziellen Risiken. Diese Warnung kann vom Nutzer bestätigt werden, doch die App bleibt weiterhin nutzbar.
- Funktionalitäten einschränken: Einige Apps können bestimmte Funktionen einschränken, wenn sie feststellen, dass das Gerät gerootet ist. So kann beispielsweise eine Banking-App Transaktionen auf einem gerooteten Gerät verbieten.
- Zugriff verweigern: In extremeren Fällen kann sich eine Anwendung ganz weigern, auf einem gerooteten Gerät zu laufen. Dies ist häufig bei Anwendungen der Fall, die mit hoch-sensiblen Daten oder Transaktionen zu tun haben, z. B. Banking- oder Finanz-Apps, bestimmte Spiele, um Betrug zu verhindern, oder Streaming-Dienste, um Raubkopien zu vermeiden.
Proof of Concept: Erkennen moderne Root Detection Bibliotheken bösartiges Root?
Um zu prüfen, ob Anwendungen mit Root-Erkennungsmechanismen auch bösartige Root-Exploits zur Laufzeit erkennen, mussten wir zunächst mögliche Exploit-Kandidaten identifizieren, für die ein öffentlicher Proof-of-Concept (PoC) existiert.
Bei der Recherche stellten sich die Schwachstellen mit den Kennungen CVE-2019-2215 und CVE-2020-0847 als die am besten dokumentierten heraus. Für beide Schwachstellen gibt es bereits einen PoC, der es uns ermöglicht, die Kernel-Schwachstelle auszunutzen und zur Laufzeit eine Kommandozeile mit Root-Rechten zu erstellen.