Ein weiterer [fast] unauslöschbarer Trojaner für Android

Ende letzten Jahres haben einige unserer Benutzer mithilfe der Änderungserkennungsfunktion im Systembereich eine Änderung in der Systemdatei /system/lib/libc.so registriert. Dies ist eine der Hauptbibliotheken von Linux-basierten Betriebssystemen, die für Systemaufrufe und Grundfunktionen verantwortlich ist. Eine detaillierte Untersuchung dieses Falls ergab neue Beispiele aus der Trojaner- Familie Android.Xiny , die uns seit 2015 bekannt sind.

Zum ersten Mal haben wir die Installation des Attributs " unveränderlich " in den Dateien seiner Vertreter gesehen, was das Entfernen von Trojanern von Geräten erheblich erschwerte.

Es sah sehr unterhaltsam aus: Das angegebene Attribut wurde in die Apk-Datei der installierten Anwendung eingefügt, der Versuch, diese Anwendung zu entfernen, war erfolgreich, die Daten wurden gelöscht, die Apk-Datei selbst blieb jedoch erhalten. Nach dem Neustart des Geräts "erschien" die Anwendung erneut. Wir haben über einen dieser Trojaner im Jahr 2016 gesprochen. Um solchen Bedrohungen entgegenzuwirken, haben wir unserem Antivirus eine Funktion zum Zurücksetzen von Dateiattributen hinzugefügt, die unter der Bedingung funktioniert, dass der Benutzer dem Antivirus Root-Berechtigungen erteilt hat.

In diesem Artikel werden wir eine weitere interessante Selbstverteidigungsmethode betrachten, die von neuen Versionen von Android.Xiny verwendet wird.

Android 5.1? Im Jahr 2019?



Der in diesem Artikel betrachtete Trojaner funktioniert unter Android OS bis einschließlich Version 5.1. Es mag seltsam erscheinen, dass Malware, die für solche „alten“ Versionen von Android entwickelt wurde, immer noch aktiv ist (Version 5.1 wurde 2015 veröffentlicht). Trotz ihres Alters sind ältere Versionen immer noch in Gebrauch. Laut Google laufen ab dem 7. Mai 2019 25,2% der Geräte mit Android 5.1 und niedriger. Statistiken für unsere Benutzer geben eine etwas größere Zahl - etwa 26%. Dies bedeutet, dass etwa ein Viertel aller Android-Geräte potenzielle Ziele sind, was nicht so klein ist. Angesichts der Tatsache, dass diese Geräte anfällig für Schwachstellen sind, die niemals behoben werden, ist es nicht verwunderlich, dass ältere Versionen des Android-Betriebssystems für Virenschreiber immer noch von Interesse sind. In der Tat lösen Root-Rechte, die durch Ausnutzen der genannten Sicherheitslücken erhalten werden können, die Hände der Virenschreiber - mit ihrer Hilfe können Sie alles auf dem Gerät tun. Am häufigsten kommt es jedoch auf die banale Installation von Anwendungen an.

Die Hauptfunktionen des Trojaners


Beginnend mit den frühesten Versionen besteht die Hauptfunktion des Android.Xiny-Trojaners darin, beliebige Anwendungen ohne Benutzerberechtigung auf dem Gerät zu installieren. Somit können Angreifer Geld verdienen, indem sie an Partnerprogrammen teilnehmen, die für die Installation bezahlen. Soweit man urteilen kann, ist dies eine der Haupteinnahmequellen für die Schöpfer dieser Familie. Nach dem Start einiger seiner Vertreter können Sie in wenigen Minuten ein praktisch funktionsunfähiges Gerät erhalten, auf dem viele harmlose, aber unnötige Benutzeranwendungen installiert und gestartet werden. Darüber hinaus können diese Trojaner auch Malware installieren - alles hängt vom Befehl ab, der vom Verwaltungsserver empfangen wird.

Das Interessanteste, das neue Versionen des Android.Xiny-Trojaners auslöst, ist der Löschschutz. Dafür sind zwei Komponenten verantwortlich. Betrachten wir sie genauer.

Installer


sha1: f9f87a2d2f4d91cd450aa9734e09534929170c6c
Erkennen: Android.Xiny.5261

Diese Komponente wird gestartet, nachdem Sie Root-Rechte erhalten haben. Es ersetzt die Systemdateien / system / bin / debuggerd und / system / bin / ddexe, um den automatischen Start zu gewährleisten, und speichert die Originale unter dem Namen mit dem Suffix _server, der sich wie ein klassischer Begleitvirus verhält. Außerdem werden mehrere ausführbare Dateien aus dem in den Befehlszeilenparametern übergebenen Ordner auf die Systempartition kopiert. Außerdem kann der Trojaner die in der Systempartition installierten Komponenten aktualisieren, wenn Sie ihn mit speziellen Parametern ausführen und den Ordner angeben, in dem sich die neuen Versionen befinden.

Android.Xiny.5261 enthält eine beeindruckende Liste der zu löschenden Dateien. Es enthält Pfade, die für ältere Familienmitglieder charakteristisch sind, sowie konkurrierende Trojaner-Familien, die auf der Systempartition installiert sind. Wie zum Beispiel Triada.



Außerdem entfernt Android.Xiny.5261 einige vorinstallierte Anwendungen - möglicherweise, um Speicherplatz freizugeben. Schließlich werden die bekannten Root-Rechteverwaltungsanwendungen wie SuperSU, KingRoot und andere entfernt. Auf diese Weise wird dem Benutzer die Möglichkeit genommen, Root-Rechte zu verwenden, und daher werden die in der Systempartition installierten Trojanerkomponenten entfernt.

Geänderte Systembibliothek libc.so


sha1: 171dba383d562bec235156f101879223bf7b32c7
Erkennen: Android.Xiny.5260

Diese Akte hat uns am meisten interessiert und diese Recherche hat damit begonnen. Ein kurzer Blick darauf zeigt das Vorhandensein von ausführbarem Code am Ende des .data-Abschnitts, was verdächtig ist.





Öffnen Sie die Datei in der IDA und überprüfen Sie, um welchen Code es sich handelt.

Es stellt sich heraus, dass die folgenden Funktionen in dieser Bibliothek geändert wurden: mount, execve, execv, execvp, execle, execl, execlp.

Modifizierter Mount-Funktionscode:
int __fastcall mount ( const char * -Quelle , const char * -Ziel , const char * -Dateisystemtyp , int mountflags ohne Vorzeichen , const void * -Daten )
{
unsigned __int8 systemPath [ 19 ] ; // [sp + 18h] [bp-1Ch]
bool receiveMagicFlags ; // [sp + 2Bh] [bp-9h]
int v13 ; // [sp + 2Ch] [bp-8h]
v13 = MAGIC_MOUNTFLAGS ; // 0x7A3DC594
receiveMagicFlags = mountflags == MAGIC_MOUNTFLAGS ;
if ( mountflags == MAGIC_MOUNTFLAGS )
mountflags = 0x20 ; // MS_REMOUNT
if ( receiveMagicFlags )
return call_real_mount ( Quelle , Ziel , Dateisystemtyp , Mountflags , Daten ) ;
if ( mountflags & 1 ) // MS_RDONLY
return call_real_mount ( Quelle , Ziel , Dateisystemtyp , Mountflags , Daten ) ;
if ( getuid_ ( ) ) // nicht root
return call_real_mount ( Quelle , Ziel , Dateisystemtyp , Mountflags , Daten ) ;
memCopy ( systemPath , ( unsigned __int8 * ) off_73210 + 471424 , 8 ) ; // / system
decrypt ( systemPath , 8 ) ;
if ( memCompare ( ( unsigned __int8 * ) target , systemPath , 8 ) || ! isBootCompete ( ) )
return call_real_mount ( Quelle , Ziel , Dateisystemtyp , Mountflags , Daten ) ;
* ( _DWORD * ) errno_ ( ) = 13 ;
return - 1 ;
}

Zu Beginn wird der Parameter mountflags auf das Vorhandensein des "magischen" Werts 0x7A3DC594 überprüft. Wenn dieser Wert an die Funktion übergeben wird, wird die Steuerung sofort an die reale Mount-Funktion übertragen. Als nächstes wird geprüft, ob versucht wird, die / system-Partition zum Schreiben erneut bereitzustellen, und ob der Start des Betriebssystems abgeschlossen ist. Wenn diese Bedingungen erfüllt sind, wird die echte Mount-Funktion nicht aufgerufen und ein Fehler zurückgegeben. Die vom Trojaner geänderte Mount-Funktion ermöglicht es daher niemandem, die Systempartition zum Schreiben erneut einzuhängen, mit Ausnahme des Trojaners selbst, der sie mit dem Parameter "magic" aufruft.

Der Code der modifizierten execve-Funktion (in den übrigen exec * -Funktionen ist alles gleich):
int __fastcall execve ( const char * Dateiname , char * const argv [ ] , char * const envp [ ] )
{
int v3 ; // r3
if ( targetInDataOrSdcard ( filename ) > = 0 ) // gibt -1 zurück, wenn true
{
sub_7383C ( ) ;
v3 = call_real_execve ( Dateiname , argv , envp ) ;
}
sonst
{
* ( _DWORD * ) errno_ ( ) = 13 ;
v3 = -1 ;
}
return v3 ;
}

int __fastcall targetInDataOrSdcard ( const char * path )
{
char buf [ 516 ] ; // [sp + 8h] [bp-204h]
if ( isDataOrSdcard ( path ) )
return - 1 ;
if ( * path == '.' && getcwd_ ( buf , 0x200u ) && isDataOrSdcard ( buf ) )
return - 1 ;
return 0 ;
}

Hier wird geprüft, ob der Pfad zur gestarteten Datei mit "/ data /" beginnt und "/ sdcard" enthält. Wenn eine der Bedingungen erfüllt ist, wird der Start blockiert. Denken Sie daran, dass sich entlang des Pfads / data / data / die Anwendungsverzeichnisse befinden. Dies blockiert die Ausführung von ausführbaren Dateien aus allen Verzeichnissen, in denen eine reguläre Anwendung eine Datei erstellen kann.

Änderungen an der libc.so-Systembibliothek stören Anwendungen, die Root-Berechtigungen erhalten sollen. Aufgrund von Änderungen in den Funktionen von exec * kann eine solche Anwendung keine Exploits starten, um die Berechtigungen im System zu erhöhen, da Exploits normalerweise ausführbare Dateien sind, die vom Netzwerk in das Anwendungsverzeichnis heruntergeladen und ausgeführt werden. Wenn es Ihnen immer noch gelungen ist, die Berechtigungen zu erhöhen, können Sie die Systempartition mit der geänderten Bereitstellungsfunktion nicht erneut zum Schreiben bereitstellen. Dies bedeutet, dass keine Änderungen daran vorgenommen werden.

Infolgedessen besteht die Selbstverteidigung des Trojaners aus zwei Teilen: Das Installationsprogramm deinstalliert Anwendungen zum Verwalten von Root-Rechten und die geänderte Bibliothek libc.so verhindert, dass der Trojaner erneut installiert wird. Darüber hinaus funktioniert dieser Schutz auch vor "Konkurrenten" - anderen Trojanern, die Root-Berechtigungen erhalten und auf der Systempartition installiert sind, da sie nach dem gleichen Prinzip wie "gute" Root-Berechtigungen arbeiten.

Wie gehe ich mit einem solchen Trojaner um?


Um Android.Xiny.5260 loszuwerden, kann das Gerät geflasht werden - vorausgesetzt, es gibt eine Open Access-Firmware. Aber ist es möglich, die Malware auf andere Weise zu entfernen? Schwierig, aber möglich - es gibt mehrere Möglichkeiten. Um Root-Rechte zu erhalten, können Sie Exploits in Form von so-Bibliotheken verwenden. Im Gegensatz zu ausführbaren Dateien blockiert der Trojaner den Download nicht. Sie können auch die Komponente des Trojaners selbst verwenden, die Root-Rechte für seine anderen Teile bereitstellt. Es empfängt Befehle über den Socket im Pfad / dev / socket / hs_linux_work201908091350 (der Pfad kann in verschiedenen Modifikationen abweichen). Um die Mount-Sperre zu umgehen, können Sie den Wert "magic" des Parameters mountflags verwenden oder den entsprechenden Syscall direkt aufrufen.

Das werde ich natürlich nicht umsetzen.

Wenn Ihr Gerät einen solchen Trojaner erkennt, empfehlen wir, das offizielle Image des Betriebssystems zum Flashen zu verwenden. Vergessen Sie jedoch nicht, dass dadurch alle Benutzerdateien und -programme gelöscht werden. Erstellen Sie daher vorab Sicherungskopien.

Source: https://habr.com/ru/post/de484664/


All Articles