Was in einer APK steckt, bevor Sie sie installieren
Eine APK ist eine Zip-Datei mit einer Erklärung im Anhang. Bevor Android eine einzige Zeile ihres Codes ausführt, sagt das Paket bereits, wer es zu sein behauptet, welche Android-Versionen es unterstützt, was es tun dürfen will, welche seiner Teile andere Apps aufrufen können und wer es signiert hat. Nichts davon erfordert eine Installation. Wer es vorher liest, verwandelt einen Vertrauenssprung in eine zehnminütige Prüfung – und diese Prüfung reicht oft für eine Entscheidung.
Warum eine per Sideload geladene APK einen ersten Blick verdient
Apps aus einem offiziellen Store kommen mit einer Produktseite, Bewertungen und einer Herausgeberseite. Eine per Sideload geladene APK – von einer Herstellerseite, einem Spiegelserver, einem Forenbeitrag, einer Chatnachricht oder einem alten Backup – bringt nichts von diesem Zusammenhang mit, und die Installationsabfrage ersetzt ihn nicht. Androids Installer zeigt Name und Symbol, und Berechtigungen erscheinen spät, gruppiert und vereinfacht, genau in dem Moment, in dem Sie am wenigsten innehalten. Ist eine App erst installiert und einmal gestartet, hält sie womöglich schon die erteilten Berechtigungen und hat das Netz benutzt. Der billige Moment für Fragen ist davor, solange die Datei noch nur eine Datei ist.
Das ist kein Argument gegen Sideloading an sich. Hersteller vertreiben legitime Apps direkt, Unternehmen setzen so interne Werkzeuge ein, und ältere Versionen lösen manchmal echte Probleme. Es ist ein Argument dafür, zu lesen, was man Ihnen gegeben hat. Der APK-Analysator auf dieser Seite zerlegt das Paket in Ihrem Browser – die Datei wird nie hochgeladen und nie ausgeführt – und zeigt Manifest, Berechtigungen, Komponenten und Signaturzertifikat in einer Ansicht. Welches Werkzeug Sie auch nutzen, halten Sie diese Reihenfolge ein: erst prüfen, dann installieren, und behandeln Sie jede App, die die Prüfung nicht besteht, als Antwort für sich.
Das Manifest ist die eigene Erklärung der App
Jede APK enthält eine AndroidManifest.xml in binärem XML, und sie ist die Erklärung der App über sich selbst. Sie nennt das Paket – die eindeutige Identität, die Android verwendet, etwa com.example.app – zusammen mit einem numerischen versionCode und einem lesbaren versionName. Sie deklariert die Komponenten der App, die angeforderten Berechtigungen und die erwarteten Hardware- und Softwaremerkmale. Da Android große Teile dieser Datei durchsetzt, ist sie schwerer beiläufig zu fälschen als eine Store-Seite oder Downloadseite: Eine App kann keine Berechtigung still nutzen, die sie nie deklariert hat, und sie kann sich nicht als Update für ein Paket ausgeben, dessen Namen sie nicht teilt.
Zwei Zahlen im Manifest sagen Erstaunliches über die Pflege aus. Die minSdkVersion ist das älteste Android, auf dem die App läuft; eine sehr niedrige Untergrenze bedeutet Unterstützung für Geräte und Sicherheitsmodelle von vor vielen Jahren, manchmal nötig, manchmal schlicht geerbt und vergessen. Die targetSdkVersion ist die Android-Verhaltensebene, der die App zu folgen behauptet. Google hebt das für Store-Updates geforderte Ziel jedes Jahr an, weil ein höheres Ziel die App neueren Datenschutz- und Sicherheitsregeln unterwirft. Eine APK mit einem Ziel von vor mehreren Jahren ist nicht automatisch bösartig – aber sie sagt Ihnen, dass sie diese neuen Regeln gemieden oder nie erfüllt hat, und Sie sollten fragen, warum.
Berechtigungen, richtig gelesen
Android sortiert Berechtigungen in Klassen, und die Klasse zählt mehr als der Name. Normale Berechtigungen werden bei der Installation automatisch erteilt – der Netzzugang ist das bekannte Beispiel –, weil das System sie als risikoarm einstuft. Gefährliche Berechtigungen betreffen empfindliche Daten und Aktionen wie Kontakte, Nachrichten, genauen Standort, Mikrofon und Kamera; sie brauchen eine Laufzeitabfrage, die der Nutzer ablehnen kann. Signaturberechtigungen werden nur Apps mit demselben Zertifikat oder dem System selbst erteilt, sodass eine fremde App, die eine deklariert, nichts davon hat. Sortieren Sie eine Berechtigungsliste gedanklich in diese Gruppen, bevor Sie eine einzelne Zeile beurteilen.
Der Zusammenhang ist das Urteil, nicht die Anzahl. Eine Taschenlampe, die SMS lesen will, hat dafür keinen ehrlichen Grund; ein Messenger, der dieselbe Berechtigung verlangt, kann sich wenigstens erklären – einen Bestätigungscode lesen oder sich als Standard-Nachrichten-App anbieten. Eine Banking-App darf berechtigt viele Berechtigungen anfordern, während ein einfaches Spiel, das nur wenige verlangt, genau die eine enthalten könnte, die nicht passt. Bewerten Sie Apps also nicht allein nach der Berechtigungszahl. Fragen Sie bei jeder gefährlichen Berechtigung, welche Funktion dieser App ohne sie ausfallen würde. Die Anfragen, die Sie keiner Funktion zuordnen können, sind der Befund – und genau das verbirgt die Installationszusammenfassung.
Exportierte Komponenten und die Angriffsfläche, die sie schaffen
Eine App besteht aus Komponenten – Aktivitäten (Bildschirme), Diensten, Broadcast-Empfängern und Content-Providern –, und das Manifest gibt an, welche davon exportiert sind, also von anderen Apps auf dem Gerät erreichbar. Exportierte Komponenten sind nicht per se ein Fehler: Ein Teilen-Ziel, ein Dateiöffner und ein Deep Link funktionieren, weil eine Komponente absichtlich exportiert ist, geschützt und im modernen Android ausdrücklich deklariert. Das Risiko liegt bei exportierten Komponenten, die nie eine öffentliche Tür sein sollten: ein Dienst, den jede App starten kann, ein Empfänger, den jede auslösen kann, oder ein Provider, der die Daten der App an jeden Fragenden herausgibt, ohne Berechtigungsprüfung davor.
Zwei Manifest-Schalter verdienen in jeder Produktions-App einen direkten Blick. Eine als debuggbar markierte Anwendung kann von Werkzeugen auf einem angeschlossenen Rechner untersucht werden; das ist eine Entwicklungseinstellung, und sie aktiviert auszuliefern ist ein Warnsignal dafür, wie der Release gebaut wurde. Backup zu erlauben bedeutet, dass die privaten Daten der App in Gerätesicherungen landen können – bequem, aber es kann Daten, die Sie innerhalb der App wähnten, an einen weit weniger kontrollierten Ort bewegen. Keiner der Schalter beweist, dass eine App schädlich ist. Beide sind billig zu prüfen, in einem fertigen Produkt schwer zu rechtfertigen und genau die Art von Detail, die auf einer Downloadseite nie erscheint.
Signaturzertifikate: Androids Identitätssystem
Jede APK ist signiert, und das Signaturzertifikat ist das Nächste, was Android an einem Ausweis hat. Android installiert ein Update über einer bestehenden App nur, wenn beide Exemplare denselben Paketnamen und denselben Signierer teilen. Diese eine Regel leistet viel stille Arbeit: Ein Fremder kann kein trojanisiertes Update für eine App schicken, der Sie bereits vertrauen, weil er den Originalschlüssel nicht besitzt, und der Zertifikatsfingerabdruck – meist als SHA-256-Kurzform gezeigt – ist der praktische Weg, Kontinuität zu prüfen. Veröffentlicht ein Anbieter einen erwarteten Fingerabdruck, vergleichen Sie ihn. Der Zertifikat- und Schlüssel-Abgleich auf dieser Seite deckt dieselbe Fingerabdruck-Logik für Zertifikate und Schlüssel allgemein ab.
Seien Sie sich klar, was ein Fingerabdruck beweist und was nicht. Er beweist, dass diese Datei von demjenigen signiert wurde, der einen bestimmten privaten Schlüssel besitzt, und dass sie mit einer anderen, mit demselben Schlüssel signierten Datei übereinstimmt – oder nicht. Er beweist nicht, dass der Schlüsselinhaber ehrlich oder kompetent ist oder gar das Unternehmen, das in den Betrefffeldern des Zertifikats steht, die der Signierer selbst ausfüllt. Eine umgepackte App ist typischerweise mit einem anderen Zertifikat signiert als das Original, weshalb ein abweichender Fingerabdruck ein starkes Stoppsignal ist; ein übereinstimmender ist nur ein Kontinuitätssignal. Identität ist in Android Kontinuität des Schlüssels, mehr nicht – behandeln Sie sie entsprechend.
Eine Checkliste vor der Installation
Fügen Sie die Teile in fester Reihenfolge zusammen, und die Prüfung dauert Minuten. Erstens, Identität: Stimmt der Paketname mit der erwarteten App überein, und sind Versionscode und -name für die gewünschte Ausgabe plausibel? Zweitens, Pflege: Wie alt sind Mindest- und Ziel-SDK, und passt das zu einer noch betreuten App? Drittens, Berechtigungen: Listen Sie die gefährlichen auf und ordnen Sie jede einer Funktion zu, und halten Sie bei jeder an, die Sie nicht erklären können. Viertens, Oberfläche: Welche Komponenten sind exportiert, und sind Debugging und Backup eingeschaltet? Fünftens, Signatur: Stimmt der Zertifikatsfingerabdruck mit dem vom Herausgeber genannten Wert überein, oder wenigstens mit dem Exemplar, dem Sie schon vertrauen? Führen Sie die Datei durch den APK-Analysator und gehen Sie diese Liste auf einem Bildschirm durch.
Entscheiden Sie dann in drei Gruppen, nicht in zwei. Installieren, wenn sich alles einer Funktion zuordnen lässt und der Fingerabdruck stimmt. Vorsichtig installieren – auf einem Testgerät, in einem Arbeitsprofil oder ohne die fraglichen Berechtigungen –, wenn fast alles passt, aber ein Punkt Beobachtung braucht. Oder Abstand nehmen, wenn der Paketname falsch ist, der Fingerabdruck nicht stimmt oder hinter einer gefährlichen Berechtigung keine denkbare Funktion steht. Abstand kostet einen Download; die andere Richtung kann ein Konto kosten. Und halten Sie die Gewohnheit im Maß: Das ist Triage, wie die ersten zehn Minuten mit dem Paketmitschnitt-Analysator – ein schnelles, ehrliches Lesen dessen, was eine Datei über sich erklärt, bevor Sie ihr einen Platz auf dem Gerät geben, das Sie überallhin mitnehmen.
Häufig gestellte Fragen
Bedeutet ein sauberes Manifest, dass eine APK sicher ist?
Nein. Das Manifest ist eine Erklärung, kein Verhaltensbericht. Eine App kann einen bescheidenen, völlig plausiblen Satz von Berechtigungen und Komponenten deklarieren und sich im Code trotzdem schlecht verhalten – nach Hause telefonieren, die ihr rechtmäßig erteilten Berechtigungen missbrauchen oder nach der Installation neues Verhalten nachladen. Das Manifest zu lesen ist Triage: Es findet schnell und billig nicht passende Identitäten, unerklärte Berechtigungen, offengelegte Komponenten und falsche Signaturzertifikate. Es ist kein Malware-Urteil, und jedes Werkzeug, das aus einer Manifest-Lektüre einen grünen «Sicher»-Stempel macht, behauptet mehr, als die Belege hergeben.
Warum zeigt dieselbe App in verschiedenen Werkzeugen verschiedene Berechtigungen?
Meist aus drei berechtigten Gründen. Erstens, Versionsbegrenzung: Eine Berechtigung kann eine maxSdkVersion tragen, gilt also nur bis zu einer bestimmten Android-Ebene, und Werkzeuge unterscheiden sich darin, ob sie solche Einträge anzeigen. Zweitens, Gruppierung: Android präsentiert Berechtigungen bei der Abfrage in Gruppen, während das Manifest einzelne Berechtigungen auflistet, sodass die gruppierte Ansicht kürzer wirkt als die volle Liste. Drittens, Zusammenführung: In die App gepackte Bibliotheken bringen eigene Manifest-Einträge mit, die der Build in die finale Datei zusammenführt – das installierte Manifest kann also Berechtigungen enthalten, die kein Teil des eigenen Codes der App je deklariert hat. Unterschiede sind ein Anlass zu prüfen, welcher Grund zutrifft, keine automatische Evidenz für Manipulation.
Kann ich eine APK prüfen, ohne etwas zu installieren?
Ja – genau darum geht es bei einem lokalen Analysator im Browser. Die APK wird als Datei zerlegt: Ihr binäres Manifest wird dekodiert, ihre Ressourcen werden nach Beschriftungen und Texten gelesen, und ihre Signaturzertifikate werden extrahiert und mit Fingerabdrücken versehen. Der Code der App wird nie ausgeführt, nichts wird auf irgendeinem Gerät installiert, und mit dem Analysator auf dieser Seite wird die Datei auch nie hochgeladen – die Zerlegung geschieht in Ihrer Browser-Registerkarte. Wenn ein Prüfdienst Sie bittet, eine APK auf einen Server hochzuladen, fragen Sie sich, ob diese Datei – womöglich ein interner Build – überhaupt auf den Rechner eines anderen gehört.