io-app
io-app copied to clipboard
It Wallet - [Graphene OS] - Criteri di sicurezza Documenti su IO
Salve, come da titolo non passo i requisiti minimi di sicurezza con pixel 6a. Non uso l'os stock, ma ho installato Graphene OS proprio per ragioni di privacy e sicurezza. Non ho infatti alcun root al telefono e ho il bootloader bloccato (come la FAQ relativa suggerisce).
Android 15 GraoheneOS: build 2024102100
Grazie!
Mi hai preceduto di poche ore, stavo per aprire la stessa issue. Pare che il Wallet di IO utilizzi Play Integrity API per validare la sicurezza del dispositivo:
https://github.com/pagopa/io-react-native-wallet/blob/master/src/wallet-instance/README.md https://github.com/pagopa/io-react-native-integrity/blob/main/README.md
GrapheneOS non può passare l'attestazione anche se con bootloader bloccato e senza root in quanto non allowlisted da Google sebbene sia significativamente più sicuro dell'OS stock dei Pixel e praticamente di ogni altro telefono Android.
Difatti l'app non valida realmente la sicurezza ma solo che il dispositivo passi l'attestazione hardware di Play Integrity, tuttavia questa la può passare un dispositivo Android con mesi addietro di patch di sicurezza (ad esempio privilege escalation and remote code execution regolarmente corrette nei bollettini di sicurezza). Non mi pare Play Integrity o IO facciano questa valutazione.
IO dovrebbe lasciar passare GrapheneOS implementando attestazione hardware con cui è pienamente compatibile, non c'è motivo per rifiutarlo sulla base di un giudizio fuorviante di Play Integrity:
https://grapheneos.org/articles/attestation-compatibility-guide
Corretto, il motivo mi torna, è la stessa validazione hw usata per i tanto agognati pagamenti tramite nfc che su GOS non funzionano. L'attestazione dovrebbe avvenire in altro modo e non in subordine a metodi di un fornitore privato come google.
L'attestazione dovrebbe avvenire in altro modo e non in subordine a metodi di un fornitore privato come google.
Dovrebbe avvenire tramite attestazione standard di Android, possibilmente verificando anche il patch level in modo che non sia un security theater con il solo scopo reale di vietare sistemi operativi alternativi. Immagino alla luce del Digital Markets Act, l'UE non apprezzerebbe l'impiego di Play Integrity API.
è la stessa validazione hw usata per i tanto agognati pagamenti tramite nfc
@0pipe0
Sembrerebbe ancora più forte. Google Wallet funziona se l'esito di Play Integrity include Basic + Device integrity.
Io sono nella situazione per cui ho Basic + Device (ma non Strong integrity), oltre al bootloader che risulta bloccato da Key Attestation Demo.
Tuttavia, IT-Wallet non funziona, dando codice di errore KEY_IS_NOT_HARDWARE_BACKED. Suppongo richieda anche la Strong integrity, ossia ponga requisiti ancora più elevati di Google Wallet per fare pagamenti NFC
Google Wallet funziona se l'esito di Play Integrity include Basic + Device integrity.
Google Pay occasionalmente oscilla tra MEETS_BASIC_INTEGRITY e MEETS_STRONG_INTEGRITY, probabilmente perché molti dispositivi hanno implementazioni fallate della seconda, il che la dice lunga sulla validità di questi controlli...
Tuttavia, IT-Wallet non funziona, dando codice di errore KEY_IS_NOT_HARDWARE_BACKED.
Sì, IT-Wallet senza dubbio richiede strong integrity, o per lo meno richiede chiave basata su hardware per la quale si basano comunque sul lasciapassare di Google per averne contezza, altrimenti funzionerebbe su GrapheneOS.
IO dovrebbe lasciar passare GrapheneOS
@orazioedoardo IO dovrebbe lasciar passare qualsiasi android, non solo GrapheneOS. Io per esempio uso LineageOS. Se proprio gli sviluppatori non vogliono dispositivi con permessi d'amministrazione (root) dovrebbero rilevarlo in altre maniere..
IO dovrebbe lasciar passare qualsiasi android
In base ai README di questo repository e altri di pagoPA è chiaro che si richieda un certo livello di sicurezza dai dispositivi su cui scaricare il digital ID.
Non tutti gli OS di terze parti su Android sono allo stesso livello sotto questo punto di vista, ad esempio LineageOS anche senza root richiede bootloader sbloccato il che facilita accesso fisico alla partizione dati (basta cambiare recovery per fare bruteforce del PIN senza limiti). Inoltre non supporta Verified Boot, il che rende più facile a seguito di un attacco mantenere accesso persistente sul dispositivo dopo il riavvio.
Si potrebbe aprire un'altra issue per discutere e giustificare i requisiti di sicurezza del digital ID in IO (IMHO LineageOS senza root potrebbe essere più che sufficiente considerato che per lo meno rispetto all'OS stock avresti le patch di Android più recenti sebbene non del firmware). È probabile che quanto implementato oggi in IO sia dovuto a una interpretazione di vari requisiti di sicurezza in vista del wallet europeo.
Se proprio gli sviluppatori non vogliono dispositivi con permessi d'amministrazione (root) dovrebbero rilevarlo in altre maniere..
Dovrebbero effettuare una valutazione olistica del dispositivo sulla base dei meriti utilizzando API standard piuttosto che tramite un gatekeeper.
LineageOS anche senza root richiede bootloader sbloccato
Questo dipende dal bootloader e quindi dal modello del cellulare, in alcuni (come il mio) è possibile bloccare il bootloader in seguito all'installazione della ROM. Ma effettivamente sono casi rari. Dispositivi senza GMS o con microg sono invece più comuni.
LineageOS does not preserve the security model. GrapheneOS not only preserves the security mode but substantially improves security. Unlike LineageOS, GrapheneOS supports verified boot and hardware attestation which enables verifying that it's genuine GrapheneOS. See https://grapheneos.org/articles/attestation-compatibility-guide. They should implement this rather than forbidding using GrapheneOS. It will not reduce their device security checks to implement this.
Play integrity è inutile in quanto facilmente bypassabile con PIF + TS. Basterebbe avvisare l'utente e permettergli di continuare per smettere di frustrare noi modder inutilmente.
Inoltre: Google a caso sbaglia l'attestazione. Proprio stamane un amico mi ha contattato perché il suo telefono (ovviamente stock) non passava più l'integrity, completamente senza motivo (dubito sia stato vittima di un 0day).
Un altro problema è che si rende necessario contattare i server di Google. Perché devo chiedere il permesso a Google per avere i MIEI documenti italiani sul telefono? Vi ricordo che Google è una multinazionale americana, ha anche sede in italia ma non è italiana, i server di play integrity non sono in italia.
Cosa succede se i server di Google vanno giù? Cosa succede se decidono che il telefono di persona importante x non passa più l'integrity?
IO sta creando un grave disservizio agli utenti che desiderano usare sistemi operativi più sicuri senza di fatto ostacolare aggressori che possono spoofare l'attestazione di Play Integrity tramite leaks di chiavi.
È inverosimile che il team di sviluppo non abbia ancora letto questa issue e le altre due/tre dove si evidenzia questo approccio problematico alla sicurezza per cui a voler pensare bene la scelta non dipende da loro.
La situazione non cambierà finché la discussione rimarrà confinata qui. È necessario un approccio concertato che generi più rumore su social network con coinvolgimento di media / siti di tecnologia come avvenne per la questione traccianti e allora forse prenderanno in considerazione.
La FAQ sui documenti in IO a cui si viene indirizzati in caso di errore è fuorviante: https://io.italia.it/documenti-su-io/faq/#n1_12
per Android: dispositivi con Android 8.0 o versioni successive.
Chiedo quanto possa valere l'attestazione di un dispositivo che nel migliore dei casi, ergo OEM benefattore, è indietro di 3 anni e 9 mesi nelle patch di sicurezza, il che si traduce in qualche centinaio di vulnerabilità con elevata severità oltre ovviamente a mancati miglioramenti strutturali alla sicurezza apportati nelle versioni più recenti di Android.
È inoltre necessario che il dispositivo non sia compromesso, ossia non siano state rimosse le restrizioni imposte dal sistema operativo (ad esempio, il jailbreak per iOS o il rooting per Android).
Un dispositivo sottoposto a jailbreak o root non implica sia compromesso. Inoltre sui Google Pixel lo sblocco del bootloader e il successivo blocco con un sistema operativo aftermarket è 100% supportata, non invalida neanche la garanzia, e permette di mantenere l'integrità e la sicurezza del sistema, come avviene con GrapheneOS. Il fatto che la stragrande maggioranza degli OEM azzoppi il telefono quando si cambi OS non rende la dicitura corretta.
Ti ricordiamo infine che eventuali problemi nell’attivazione della funzionalità potrebbero dipendere anche da fattori quali le politiche di sicurezza o restrizioni specifiche imposte da Google o Apple.
Depistaggio, è IO che sceglie di utilizzare Play Integrity per vietare di fatto sistemi di terze parti, non Google.
Quindi..., uno si prende un Pixel per installarci GrapheneOs e poi, per essere più realista del re e primo tra i primi, non appena il sistema da il via si sbatte e si arrovella nel tentativo di installare su quel telefono e su quel sistema operativo, uno di quelli che sarà tra i primi se non il primo strumento di controllo sociale? L'acqua bolle, ma la rana continua a credere che il caldo che sente sia per colpa del cambiamento climatico. Ambo, terno, quaterna, cinquina e tombola...., per il sistema!
Stesso problema vostro, ho installato Lineage 21 sul mio Poco F2 Pro. Solo che anche con STRONG INTEGRITY mi dà che il mio dispositivo non e supportato. Probabilmente guarda se il bootloader e sbloccato
@M4th12 Play Integrity API is supposed to be checked on the service, not in the app. Locally spoofing it for an app checking it won't bypass it for a proper implementation. Tricking the strong integrity check requires a leaked key which they can revoke once they detect it with their fingerprinting, although they probably won't for ones only used by a single person.
True, but in the meantime I found a solution using a Module called Tricky Store, now I can use all the functions without an error. (I know is not the best for security, but I don't want to have a bad experience with the stock ROM)
@M4th12 Are you using a leaked key?
Caro team di IO, rispetto molto il vostro lavoro e vi sono grato per l'esempio virtuoso che date a tutta la PA per la gestione del progetto in maniera aperta. Mi sento però in questo momento di dover chiedere come mai, a due settimane dall'apertura dell'issue, non sia pervenuta ancora una risposta almeno ufficiosa. Andando avanti la discussione inevitabilmente si allargherà e sarà più difficile gestire il tutto. Già adesso il discorso si è esteso prendendo in considerazione la sicurezza di varie ROM e come bypassare il controllo da voi imposto, quando il problema è uno e molto semplice: l'API che usate è sbagliata in principio. Stiamo ricevendo anche il contributo del fondatore di quella che è probabilmente la ROM Android più sicura di sempre. Capisco che abbiate avuto le vostre gatte da pelare grazie ai tuttologi che su Twitter sono arrivati ad accusarvi di gestire male il progetto senza capirne niente, capisco anche che sia faticoso gestire un progetto open contribution, questo però non giustifica una totale negligenza nella comunicazione con il pubblico rispetto ad un problema che riguarda l'identità digitale del cittadino, un argomento che a poco a poco diventerà sempre più importante.
Ho segnalato sul post dedicato a it wallet di IO su linkedin le due issues (questa e #6346 ). Un'altra soluzione è spingere google (aiutati da pagopa) ad ammettere GrapheneOS nella whitelist delle play untegrity api.
L'issue su traffico in chiaro sembra avere una spiegazione semplice che ho appena aggiunto.
Certo per GrapheneOS sarebbe ideale se Google lo aggiungesse in allowlist di Play Integrity in modo che funzioni con ogni app che ne fa uso, tuttavia la vedo dura e non affronterebbe il problema più grande, cioè l'uso stesso dell'API.
@thestinger not leaked but given from a developer
@thestinger not leaked but given from a developer
Gli sviluppatori non hanno accesso ai keybox. È una chiave leaked di certo se passi strong integrity.
Detto ciò, io ora ho un problema ancora più grande perché il mio telefono è stato rilasciato con Android 7, aggiornato fino ad Android 10, ma non supporta neanche con sistema stock la STRONG INTEGRITY di Play Integrity. Di fatto non posso usare IT Wallet, se non appunto con trucchi vari, sul mio telefono stock con Android 10 (l'attestazione hardware non era un requisito con Android 7). Ovviamente usando custom rom con versioni più recenti di Android vale lo stesso, ma il fatto che io non possa usare una funzionalità come IT Wallet su un telefono stock mi pare alquanto assurdo.
@roberto-sartori-gl Strong integrity depends on hardware key attestation which was required for devices launched with Android 8 and later so your device is too old. It's worth noting that only Android 12 or later has security support so devices with earlier versions lack security patches. It's ridiculous that a device with no patches for 8 years can pass Play Integrity device integrity but yet GrapheneOS is forbidden. GrapheneOS should pass both device and strong integrity, but unfortunately Google is taking a highly anti-competitive approach and apps like this are participating it. It's clearly illegal and we're not only considering legal action against Google but also app developers.
@thestinger
My point is that the requirement for IT Wallet is 'Android 8', which is not true. The real requirement on Android is Play Integrity (with hardware attestation).
Anyway, I don't think this is the thread to discuss GrapheneOS or not GrapheneOS. There are a lot of phones which don't have GraheneOS available so discussing GrapheneOS is not the point. Even Lineage may be considered more secure on old phones compared to the stock OEM OS.
This thread was created about GrapheneOS, which not only preserves the standard security model (unlike LineageOS) but substantially improves security. A device without Android 12 or later with current security patches wouldn't pass their checks if they cared at all about security rather than doing performative security with a clearly illegal anti-competitive approach to pretend they care. They should either implement https://grapheneos.org/articles/attestation-compatibility-guide as a staritng point to permitting secure alternate operating systems or remove their checks. This thread was not created about LineageOS and LineageOS genuinely does not preserve the standard security model and features so convincing them to allow it is an entirely different topic from convincing them to allow a secure OS. Their lack of forbidding clearly insecure devices without security patches is simply strong evidence that they do not actually care about security but rather want to pretend they do, but they can prove that wrong by adding a check for a patch level from the past 4 months at a bare minimum.
Even Lineage may be considered more secure on old phones compared to the stock OEM OS.
It still lacks most of the privacy/security patches, Nothing secure about that, and an app which wants to permit only secure devices would be checking for a current patch level and not allowing operating systems setting a fake patch level to mislead users like LineageOS does... LineageOS is a major part of the reason for why app developers are hostile towards alternate operating systems because they wrongly believe all of them have the same awful security as LineageOS, which is wrong. The person who filed this issue filed it about GrapheneOS and bringing up an insecure hobbyist OS is just weakening the attempt at getting them to follow https://grapheneos.org/articles/attestation-compatibility-guide.
@thestinger the fact that the user who opened the issue is using GrapheneOS does not mean that we should discuss GrapheneOS only. We are in the io-app repository discussing IT Wallet. If you want to discuss GrapheneOS vs Lineage, you can discuss it on the Graphene OS repositories, I assume.
Like I said, I have the same issue using the stock OS from the vendor of my phone. No Lineage or custom ROM.
GrapheneOS supports hardware-based attestation which can be used to verify the device is running GrapheneOS as explained in https://grapheneos.org/articles/attestation-compatibility-guide. LineageOS doesn't support this so even if they wanted to allow it, there isn't a way for them to do it within their model of wanting to check the OS based on hardware attestation.
This issue is about them implementing https://grapheneos.org/articles/attestation-compatibility-guide to verify the device is running either GrapheneOS or another alternate OS preserving the security model and supporting hardware attestation. We aren't aware of any others, but they could whitelist their keys very easily after they implement this.
LineageOS doesn't provide current privacy/security patches, sets an inaccurate Android security patch level which misleads users, doesn't preserve the standard privacy/security model, doesn't leverage important hardware-based security features and introduces major issues. You're also talking about a phone running the stock OS which hasn't had security patches for years. Android 12 is the oldest Android OS version with ongoing security support and if this app cared about security instead of only performative security to pretend they're doing something for perception and legal reasons it would be the minimum OS version.
You're bringing up LineageOS on an issue about permitting GrapheneOS so it's you who brought up this topic. LineageOS is indeed off topic for this issue, as is using a device with the stock OS that hasn't received security patches for years. It's not what the issue was filed about and all you're distracting from getting GrapheneOS permitted as it should be via our attestation compatibility guide.
If they implement what's covered in our attestation compatibility guide by using the native Android hardware attestation API to verify the device is running either the stock OS or GrapheneOS, then they can easily add other operating systems. That is the starting point for adding other operating systems.