OnePlus 3/3T-Bootloader-Schwachstelle ermöglicht die Änderung von SELinux in den Permissive-Modus im Fastboot

Eine schwerwiegende Sicherheitslücke im OnePlus 3/3T-Bootloader ermöglicht es Angreifern, den SELinux-Status von „Erzwingend“ auf „Zulässig“ umzuschalten! Lesen Sie weiter, um mehr zu erfahren!

Der OnePlus 3 und das OnePlus 3T gehören zu den besten Telefonen, die Sie derzeit kaufen können. Die kommenden Flaggschiffe des Jahres 2017 müssen den Verbrauchern zwar noch vorgestellt werden, in Ermangelung dieser werden sie jedoch nicht vorgestellt OnePlus 3/3T dominiert die Leistung in der realen Welt zu einem erschwinglichen Preis.

Aber wenn wir bei der Beurteilung des Geräts fair sein wollen, Wir müssen anerkennen, dass das OnePlus 3/3T trotz aller Bemühungen von OnePlus nicht ohne Fehler ist. Wir haben beispielsweise bereits über Sicherheitsprobleme wie z OnePlus gibt IMEI-Details preis über das Netzwerk, wenn Sie auf Ihrem Telefon nach Updates suchen. Und jetzt müssen wir der Liste ein weiteres Sicherheitsproblem hinzufügen, dieses mit potenziell gefährlicheren Auswirkungen.

Eine Schwachstelle im Bootloader des OnePlus 3/3T öffnet Tür und Tor für böswillige Angriffe. Wie Roee Hay vom IBM X-Force Application Security Research Team und herausgefunden hat 

auf der IBM X-Force Exchange-Plattform veröffentlichtDiese Schwachstelle ermöglicht es einem Angreifer, den SELinux-Status auf den Geräten zu manipulieren und sie dadurch in den permissiven Modus umzuschalten. Alles, was der Angreifer braucht, ist entweder physischer Zugang zum Gerät, bzw Fernzugriff auf eine ADB-Verbindung zum Gerät.

SELinux, oder Security-Enhanced Linux, ist ein Linux-Kernel-Sicherheitsmodul, das den Zugriff und die Verwaltung von Sicherheitsrichtlinien ermöglicht. SELinux wurde ab Android 4.3 in Android eingeführt und darauf eingestellt Strikt Modus als Standard seit Android 4.4. Dieses obligatorische Zugangskontrollsystem trägt dazu bei, die bestehenden Zugangskontrollrechte durchzusetzen und versucht, Angriffe zur Rechteausweitung zu verhindern. Dies stellt eine Hürde für die unbefugte Kontrolle über Ihr Gerät dar, beispielsweise durch eine App oder eine Sicherheitslücke, die darauf abzielt, sich in böswilliger Absicht Root-Zugriff zu verschaffen. SELinux auf einstellen Strikt Die Standardeinstellung auf Android dient als erster Schritt, um normale Benutzer vor solchen Angriffen zu schützen.

Die Schwachstelle lässt sich recht einfach ausnutzen – tatsächlich handelt es sich eher um ein großes Versehen von OnePlus als um das, was man sich einen typischen Exploit vorstellen würde. Zunächst startet ein Angreifer das OnePlus 3/3T im „Fastboot“-Modus neu. Wenn Sie physischen Zugriff haben, drücken Sie beim Booten einfach die Lauter-Taste. Wenn Sie dies nicht tun, können Sie den ADB-Befehl erteilen adb reboot bootloader zum Gerät. Der Fastboot-Modus auf dem Gerät stellt eine USB-Schnittstelle zur Verfügung, die die Ausführung sicherheitsrelevanter Befehle auf gesperrten Geräten nicht zulassen sollte. Aber beim OnePlus 3/3T reicht es einfach aus, das auszugeben fastboot oem selinux permissive Der Befehl über die Fastboot-Schnittstelle schaltet den SELinux-Modus um Strikt Zu Freizügig.

fastboot oem selinux permissive
...
OKAY[ 0.045s]
finished. totaltime: 0.047s

...

OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $

Um das Problem noch weiter zu verkomplizieren, verfügen OnePlus 3 und 3T über keinen Eintrag im „Info-Bildschirm“, der den aktuellen SELinux-Status des Geräts angibt. Ein Opfer wird den kompromittierten Zustand seines Geräts weiterhin nicht bemerken, wenn es nicht Zeuge der aktiven Nutzung des Exploits geworden ist. Das Fehlen eines SELinux-Statuseintrags im „Info-Bildschirm“ fehlt sowohl in den auf Android 6.0 basierenden Open Beta-Versionen als auch in den offiziellen ROMs für Android 7.0.

Es gibt mehrere Apps, mit denen Sie den SELinux-Status auf „Zulässig“ umschalten können, z SELinuxModeChanger Anwendung. Das Umschalten von SELinux über diese Methode verhindert, dass der Status auch nach einem Neustart bestehen bleibt. Aber Sie können es Skripte nutzen um die aufrecht zu erhalten Freizügig SELinux-Status bei harten Neustarts. Beide Methoden erfordern Root-Zugriff, was bedeutet, dass der Benutzer bereits über die Risiken informiert ist, denen er ausgesetzt ist. Aber der größte Unterschied besteht darin, den SELinux-Modus zu ändern Freizügig Die Verwendung der oben genannten Sicherheitsanfälligkeit besteht darin, dass dies nicht der Fall ist bleibt auch bei harten Neustarts bestehen, das tut es ohne Root-Zugriff zu benötigen.

Derzeit gibt es keine Abhilfemaßnahmen gegen die Sicherheitslücke.


AKTUALISIEREN:

Wir haben Kontakt aufgenommen Sultanxda, einer der bekanntesten benutzerdefinierten ROM-Entwickler für OnePlus-Geräte, um zu sehen, ob er uns helfen könnte, mehr über dieses Problem zu erfahren. Er hat sich sofort im Code umgesehen, um die Root-Quelle zu finden. Folgendes hat er gefunden:

Die Art und Weise, wie das „Fastboot OEM Selinux Die Funktionsweise des Befehls besteht darin, dass er beim Booten von Linux ein zusätzliches Argument zur Kernel-Befehlszeile hinzufügt. Das zusätzliche Argument hat die Form „androidboot.selinux=“.", Wo kann „freizügig“ sein. Da wird es lustig: „androidboot." Argumente in der Kernel-Befehlszeile werden von Androids Init analysiert. In einem normalen Android-Produktions-Build (einem „Benutzer“-Build) wird das Argument „androidboot.selinux“ völlig ignoriert und Selinux wird immer zur Durchsetzung gezwungen. Dieser Fehler besteht also aus zwei Problemen:

  1. Benutzer können den Bootloader veranlassen, ein Flag zu übergeben, das Selinux normalerweise für einen Engineering-/Debugging-ROM-Build freigibt
  2. OnePlus hat die Init-Funktion von Android geändert, um das Flag „androidboot.selinux“ auch für Produktions-ROM-Builds zu berücksichtigen

Hier ist die Init-Funktion von Android so konfiguriert, dass sie das Flag „androidboot.selinux“ für Produktions-Builds ignoriert: https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7

Das ALLOW_DISABLE_SELINUX-Flag im Quellcode ist nur für Userdebug- und Engineering-Builds auf 1 gesetzt

(Mein ROM ist davon nicht betroffen, da ich mein ROM im Produktionsmodus (Benutzermodus) erstelle.)

Daher wird „androidboot.selinux“ in meinem ROM, dem „fastboot oem selinux“, einfach ignoriert Der Befehl scheint ebenfalls von OnePlus erstellt worden zu sein, da in den öffentlichen Bootloader-Quellen von CAF kein solcher Befehl vorhanden ist. Mir fallen spontan vier Möglichkeiten ein, das Problem für Benutzer mit entsperrten Bootloadern zu beheben:

  1. Bearbeiten Sie den Bootloader hexadezimal, um alle Instanzen der Zeichenfolge „selinux“ in etwas anderes (z. B. „sclinux“) zu ändern, sodass das Flag von Androids Init nicht erkannt wird
  2. Bearbeiten Sie die Android-Init-Binärdatei in OxygenOS hexadezimal, um alle Instanzen von „androidboot.selinux“ zu ersetzen etwas anderes (wie „androidboot.sclinux“), damit Android init das nicht erkennt androidboot.selinux-Flag
  3. Fügen Sie einen Hack zum Kernel-Befehlszeilentreiber hinzu, der meiner SafetyNet-Umgehung ähnelt, um das Flag „androidboot.selinux“ vor Androids Init zu verbergen

Wir möchten Sultanxda für seine Zeit und Mühe danken, die uns dabei geholfen hat, herauszufinden, was hinter den Kulissen vor sich geht. Wir haben uns auch an OnePlus gewandt, das sich der Situation bewusst ist und die Angelegenheit untersucht.


Wir hoffen, dass OnePlus das ernste Problem öffentlich anerkennt und seine Pläne zur Behebung des Problems transparent macht.