Mangelhafte Zertifikatsprüfung bei F-Droid

Den einzigen Store den GOS neben dem Playstore empfiehlt ist Accrescent. Den kann man in GOS sogar einfach aus dem vorhandenen GOS Store installieren.
Accrescent legt dabei besonderen Wert auf Sicherheit.
Nur besonders viele Apps gibts da aktuell nicht. Aber das wird ja vielleicht noch was in den nächsten Jahren.

@Eulenspiegel Du hast mich immer noch nicht verstanden: Die App, die von F-Droid oder dem PlayStore überprüft wurde, ist zumindest in der Version der Stores sicher. Wenn ich sie dann direkt vom Developer (also z.B von dessen Website oder von einem Git) herunterlade, lade ich natürlich eine andere Version

, aber ich muss nicht die F-Droid-Version laden, die Signaturprobleme hat.

Außerdem bevorzuge ich persönlich lieber einer Instanz weniger (dem Dev musst du sowieso vertrauen, wenn Google oder vor allem F-Droid) die apk baut musst du einer weiteren Instanz vertrauen:

Und hier hast du die Funktion nicht verstanden (du könntest natürlich einen stark bei Obtainium Beitragenden einfach vertrauen, des es bisher noch nicht geht):

Hier findest du alle Sources, die derzeit supportet werden. Die Implementation von Google Play steht noch aus. Die Funktion, die du meinst, ist, dass eine Installation von Obtainium mithilfe von Shizuku für den Google Play Store registriert wird. Das kann nützlich sein, wenn die GitHub-Version exakt diesselbe wie die PlayStore-Version ist und beide diesselbe Signaur haben. Und/Oder wenn eine App nicht läuft, wenn sie nicht über den Google Play Store installiert wurde (das können die Apps abchecken).

Ich werde gleich einmal die Übersetzung anpassen. EDIT: Kannst du mal schauen, ob das verständlicher ist und (wenn nicht) ob du Verbesserungsvorschläge hast (gerne auch einfach in meinem Fork PRs stellen; dann stelle ich nacher einen PR auf Imrans main Repo): https://github.com/DwainZwerg/Obtainium/commit/48b89335fa62cad94bf048b463ed254080d604e8

Danke für die Klarstellung.

So ist es für mich auf jeden fall verständlicher.

Also nochmal zusammengefasst (bin noch totaler Noob in dem Thema):

  • Dev baut App, ladbar direkt von Github → keine Sicherheitsprüfung Dritter
  • Dev baut 2te Version der App, um sie auf Google Play anzubieten, mit den Vorgaben die Google macht → Sicherheitsprüfung durch Google
  • Dev baut 3te Version der App, für F-Droid, angepasst an die Vorgaben von F-Droid bzw. FOSS → Sicherheitsprüfung durch F-Doid
  • Eine weitere Möglichkeit wäre dann, dass z.B. F-Droid die App nimmt und die .apk selber „neu“ baut, wo dann die vom TE genannten Sicherheitsprobleme zum tragen kommen können.

Jetzt kommt Obtainium ins Spiel und man hat die Wahl, welche der 3 App-Versionen man bezieht und entsprechend hat man dann eine ungeprüfte, eine von Google und eine von F-Doid geprüfte Version.

Fazit: Wenn ich also per Obtainium Quelle überschreiben nutze, ziehe ich z.B. die F-Droid-verifizierte-Version, ohne die von F-Droid selbst gebaute .apk aus dem F-Droid-Store zu nutzen. Und das ist gut?!

Soweit richtig?

  • So sollte es zumindest meiner Meinung nach sein (meist ist es das leider nicht, d.h. man muss einem Drittanbieter seiner Wahl vertrauen): Dev baut App (wobei er da meist entweder die Android-Entwicklerplattform von Google oder die Build-in APK-Packfunktion in GitHub verwendet; da muss man also auch ein ganz kleines bisschen einer weiteren Partei vertrauen), ladbar von seiner Website und/oder einem eigenen (evtl. F-Droid-)Repo und/oder seinem Git-Service (benutzerdefiniert/GitHub/GitLab/Codeberg) → keine Sicherheitsprüfung; User kann die APK bei einschlägigen Überprüfungsdiensten (Virustotal, Exodus Privacy, Jottis, …) hochladen, für zusätzliche Sicherheit bevorzugt er eher Apps, die auch noch in einem vertrauenswürdigen (nicht reupload!-)Store (Ascreescent, Google Play Store, F-Droid, Samsung Galaxy Store, Amazon App Store, …) zu finden sind.
  • Zusätzlich wird die App evtl. noch von Stores überprüft (wenn der Dev sie einreicht). Evtl. muss der Dev dafür etwas an seiner Source anpassen, um den Bestimmungen von Ascreescent, Google Play Store, F-Droid, Samsung Galaxy Store, Amazon App Store, etc. zu genügen. Die Stores (zumindest F-Droid, der Amazon App Store und der Google Play Store (da läuft es allerdings ein bisschen anders und vertrauenswürdiger, denn das wichtige sind dort nicht die App-Signaturen (es werden übrigens die Developer-Signaturen verwendet, die sicher im Google Cloud Key Management Service aufbewahrt werden), sondern die mit JSON Web Token (JWT) signierten Bundles, die nur der App-Dev besitzt (wie genau das funktioniert habe ich allerdings nicht verstanden))) bauen einen eigenen Build (bei F-Droid gibt es da zwei verschiedene Varianten (entweder verwendet F-Droid ihren eigenen Build-Schlüssel oder die App ist reproduzierbar und F-Droid verwendet den Schlüssel des App-Dev (die zweite Möglichkeit ist die, die die im Thread eingangs beschriebenen Sicherheitsrisiken hat; bei der anderen Möglichkeit ist aber auch problematisch signiert). → Man muss einer weiteren Partei vertrauen. Die App gilt dafür als „überprüft“.

Nein. „Quelle überschreiben“ ist nur dafür da, eine falsche Quelldetektion zu korrigieren. Wenn du ein Third-Party-F-Droid-Repo nutzen möchtest, musst du z.B. Obtainium erklären, dass dies ein F-Droid-Repo und keine andere Art Repo, die per Regex-Filter abgescrapt wird, ist. Wenn du eine App von einer anderen, vom Dev selbst betriebene GitLab-/Forgejo-Instanz, abrufen möchtest, musst du dies ebenfalls korrigieren. Es gibt auch noch weitere Fälle, wo die Automatik manuell überschrieben werden muss.
Du kannst ja aber auch Obtainium nutzen, um eine App von F-Droid abzurufen (falls du Spaß daran hast bzw. dies bei der jeweiligen App für sinnvoll hältst bzw. es die einzige Möglichkeit ist, weil die App nirgendwo anders abgerufen werden kann).

Na ja, du musst einer Partei weniger vertrauen (wenn man jetzt den Packservice von GitHub bzw. die Entwicklerplattform von Google außer Acht lässt) und erhältst schneller (evtl. sicherheitskritische) Updates, weil die App durch keinen Überprüfungsprozess muss (auch beim Google Play Store gibt es ungefähr einen halben Tag Delay).
Was ich meinte, ist Folgendes: Wenn ich nach einer neuen App suche, kann ich mir ja erstmal verschiedene OSS-Apps raussuchen, die prinzipiell meinen Zweck erfüllen. Anschließend schaue ich, ob eine der Apps auf Ascreescent verfügbar ist. Wenn eine das ist, bevorzuge ich sie natürlich. Ebenso wenn nur eine auf F-Droid oder nur eine im Google Play Store ist. Bei Apps, die im Google Play Store auffindbar sind, nutze ich außerdem Exodus, um auf bekannte Tracker zu überprüfen. Wenn alle Alternativen in keinem Store verfügbar sind, überprüfe ich die gerade aktuelle Version noch mit Virustotal und Exodus. Wenn es keine Probleme mit der App gibt (oder sie das allerkleinste Übel ist), trage ich sie in Obtainium ein und lasse sie durch Obtainium aktualisieren. Dadurch bin ich natürlich nicht davor gefeit, dass die App in Zukunft sicher & sauber bleibt, muss aber auch keine Angst davor zu haben, dass durch z.B. einen Hack eines Stores das nächste Update verseucht ist. Es kommt halt darauf an, ob dir die goldene Regel möglichst wenigen zu vertrauen oder doch die Überprüfung einer jeden Appversion durch einen fehleranfälligen Algorithmus (im Play Store hatten schon häufiger Devs Probleme, weil der Algorithmus von Google etwas gefunden hat, was in der Form begründbar war oder gar überhaupt nicht existent war) einer weiteren Partei wichtiger ist.

1 „Gefällt mir“

Danke. Ich glaube jetzt habe ich es.

Wenn man von Google Store Apps nimmt hat man fast immer Google Tracker…
So stellte ich es mit dem TrackerControl fest.

Ist nicht genau das Gegenteil der Fall wenn die App von F-Droid „gebuildet“ wird?

Ich habe ja keine Garantie, dass die APK die ich im Repository des Entwicklers finde, auch den dort aufgeführten SourceCode verwendet - bei F-Droid hingegen schon (reproducible build ausgeschlossen), oder sehe ich das falsch?

a) F-Droid überprüft den Source-Code nur oberflächlich! Jemand, der eine Open-Source-App schreibt und damit wirklich schaden möchte, wird mehr Energie reinstecken und F-Droid wird die Gemeinheiten nicht finden. Das heißt schlussendlich muss ich dennoch dem Dev vertrauen, ob ich F-Droid nutze oder nicht.
b) Ich muss, dadurch, dass F-Droid/Amazon App Store einen anderen build-Prozess als der Google Play Store und die Huawei App Gallery hat, stärker F-Droid/Amazon App Store vertrauen.

Auch ich stehe vor der Entscheidung welchen „Weg“ ich gehen soll.
Bisher habe ich ausschließlich den Droid-ify Client benutzt. Geärgert habe ich mich aber schon mehrmals das die Updates teilweise echt spät kommen.

Der Playstore sowie Aurora sind KEINE Option für mich, auch wenn der Playstore bzgl. Sicherheit empfohlen wird.

Ich möchte keine Apps mit Trackern aus dem Store.
Bei Obtanium sehe ich aber die Schwierigkeit mit der Verifizierung der App. Nicht jeder Dev hat auf Github etc. den Hash Wert zur Kontrolle hinzugefügt. Somit habe ich doch einige Apps die nicht verifiziert sind :frowning:

Wie handhabt ihr es mit Obtanium und Apps die nicht verifiziert werden können?

Ebenso muss ich bei manchen Apps wie Gadgetbridge trotzdem auf das F-Droid Repro zugreifen da ich die App nirgendwo auf GitHub oder izzy finden kann.

Das siehst du richtig. Es gibt an der Stelle immer eine Lücke zwischen dem Quellcode und einer ausführbaren Anwendung. Durch F-Droids Builds wird diese Lücke geschlossen. Die Alternative wären eigene Builds, um anhand des Quellcodes eine Anwendung zu kompilieren.

Die Steigerung sind reproduzierbare Builds. Dort kommt auf das Bit genau immer die gleiche Anwendung heraus - unabhängig davon, wer die Anwendung baut und wer sie signiert. Damit lässt sich die Integrität einer Anwendung vom Quellcode bis zur final ausführbaren Anwendung sicherstellen (= „chain of trust“).

2 „Gefällt mir“

Das ist richtig, der Aufwand ist aber deutlich höher als bei beispielsweise Obtainium, da eröffnen sich meiner Meinung nach ganz andere Möglichkeiten.

Ist es nicht trotzdem besser F-Droid Apps zu beziehen selbst wenn sie Schadcode beinhalten könnten (in der Vergangenheit hat sich der Playstore in seltenen Fällen auch als Malware Quelle herausgestellt)? Man darf ja nicht vergessen, dass F-Droid in solchen Fällen reagiert und die Community da einfach groß ist, es würde dort wahrscheinlich schneller auffallen.

Und warum muss ich F-Droid mehr vertrauen als dem PlayStore? Also was hat der Build-Prozess damit zutun?

Auf diese Weise kann man prüfen ob die APK tatsächlich vom Entwickler stammt aber das passiert dann ja unabhängig von einer wirklichen Sicherheitsprüfung (wenn auch nur standardmäßig wie bei F-Droid)? Das bedeutet dann doch auch, dass diese Methode am „unsichersten“ ist oder?

Und erhöht man nicht das Risiko für Schadcode mit jeder weiteren App die man auf diese Weise installiert? Ich muss ja immer mehr Instanzen vertrauen. Beim PlayStore/F-Droid ist es ja für jede App die gleiche…

In https://privsec.dev/posts/android/f-droid-security-issues/#1-the-trusted-party-problem wird erläutert, warum du F-Droid/Amazon mehr vertrauen musst als dem Play Store/Huawei App Gallery.

Du kannst ja auch nur die Apps mittels Obtainium runterladen, die einen Hash-Wert zur Verfügung stellen (das muss nur beim ersten Mal erfolgen (danach gleicht Android die Signaturen ab) und ist durch die Integration des AppVerifiers in Obtainium möglich).

In dem Link gehts um die signatur und nicht um den sourcecode (über den reden wir ja). Die Signatur sagt halt leider nichts darüber aus, welcher Sourcecode verwendet wurde. Hat man 20 Apps installiert, muss man 20 völlig unabhängigen Instanzen vertrauen, dass der Sourcecode auch so verwendet wurde, wie er im Repository ist. Verwendet man stattdessen F-Droid, hat man nur eine einzige Instanz. Die Build-Protokolle sind ja zu jedem Release frei verfügbar.

Ist es unter den Gesichtspunkten wirklich so unklug, F-Droid als Bezugsquelle Obtainium vorzuziehen? Wirklich viele Alternativen gibt es ja nicht, da fällt mir nur Accrescent ein, aber da sieht es noch mager aus.

Wiege die Gefahren ab und schaue ob es dich stört, wenn nein, dann einfach nutzen.

1 „Gefällt mir“

Ich möchte gerne nochmal nachfragen wie es mit den in F-Droid eingebunden Repos und deren Sicherheit aussieht, bspw. Guardian, Calyx Institute, Threema (libre) u.a.
Sind die durch das F-Droid Problem auch direkt betroffen oder als eigenständige Repoquellen in dieser Hinsicht „sicher“.
Gibt es dazu Hinweise/Einschätzungen?

Das betrifft grundsätzlich nur die reproduzierbaren Apps (aktuell etwa 10 % im F-Droid Repository). Sowohl die „anderen“ Apps aus dem F-Droid Repository als auch die von „Drittanbietern“ sind nicht betroffen.

Soweit ich das jetzt verstanden hab, gehts ja „nur“ darum, dass eine Signatur bei den reproduzierbaren builds durchgewunken wird, die nicht durchgewunken werden sollte, oder? Ist die Signatur wichtig wenn bei den reproduzierbaren builds „auf das bit genau“ sowieso immer die gleiche App heraus kommt?

Na ja, damit wird (soweit ich das verstanden habe) ermöglicht, dass Apps, die nicht „auf das Bit genau“ reproduzierbar sind, dennoch dieselbe Signatur tragen, was ich doch für eine große Sicherheitslücke halte.

1 „Gefällt mir“

Ja, wenn die Signatur falsch/fehlerhaft ist, lässt sich eine App nicht aktualisieren. In diesem Fall kann man allerdings eine App aktualisieren.

Das eigentliche Problem ist im PoC beschrieben:

But the Android APK Signature Scheme v2/v3 actually allows embedding arbitrary data (or code) in the signing block, meaning that two APKs with the exact same valid signature – though not a bit-by-bit identical signing block – can behave differently.

Quelle: https://github.com/obfusk/fdroid-fakesigner-poc/blob/master/README.md#background


Eine App die zu den reproduzierbaren Builds gehört, aber nicht reproduzierbar gebaut werden kann, wird nicht veröffentlicht: https://f-droid.org/docs/Reproducible_Builds/

Apps die nicht zu den reproduzierbaren Builds gehören (ca. 90 %) werden mit dem F-Droid Schlüssel signiert und veröffentlich. Dort ist dieser Fehler nicht relevant, weil die Signatur des Entwicklers nicht berücksichtigt wird.

1 „Gefällt mir“