Come si verifica se un'app utilizza le comunicazioni sicure?

8

Qualsiasi browser dei giorni nostri fornisce un feedback all'utente finale che conferma se stai utilizzando o meno HTTPS e alcune convalide di base del certificato.

Quando si utilizza un'applicazione mobile, sembra che l'utente finale non abbia modo di verificare se le proprie comunicazioni sono protette o meno. A meno di provare un MiTM usando qualcosa come l'avvelenamento della cache ARP c'è un modo per verificare se un'applicazione mobile sta usando o meno HTTPS?

Se l'app utilizza HTTPS e io inietto un certificato autofirmato usando Fiddler, sembra che il sistema operativo passi e mi avverta. Almeno in questo scenario se l'app utilizza HTTPS e qualcuno tenta un MiTM, sono avvisato. Tuttavia, se l'app utilizza HTTP un MiTM può sedersi tutto il giorno e come utente finale posso solo presupporre che sia sicuro e che il certificato sia OK o che non sia sicuro e speriamo per il meglio ...

Proprio come i permessi delle app, che possono essere verificati dall'utente al momento dell'installazione, potremmo fare con un flag "comunicazioni sicure" che indica che il sistema operativo non consentirà alle comunicazioni non protette di uscire dall'app. Esiste un modo per affermare questo livello di sicurezza all'interno di un'app mobile che non è semplicemente un'affermazione dello sviluppatore ma qualcosa che può essere applicato o provato?

    
posta Scott Helme 09.09.2013 - 12:26
fonte

3 risposte

1

È necessario montare un attacco MitM solo se si intende decrittografare il traffico. se l'applicazione utilizza un protocollo crittografato standard (SSL / TLS, SSH), puoi semplicemente registrare la connessione (ad esempio, utilizzando tcpdump) e quindi inviare il risultato a un analizzatore di protocollo di discesa (ig Wireshark) e ti dirà se c'è una stretta di mano sicura e quali opzioni sono usate.

    
risposta data 09.09.2013 - 14:27
fonte
0

Risponderò per quanto riguarda Android, dal momento che mi è più familiare.

La maggior parte delle app utilizza le librerie client HTTP incorporate, sebbene ciò non sia garantito per app eleganti o ad alte prestazioni. Queste librerie Android non sono così ricche come Java desktop, quindi è non chiaro se le librerie caricano le impostazioni dell'intero sistema che potresti modificare (come utente root) e che sarebbe disponibile un'opzione force-https .

In pratica dovresti trovare o creare un'app di firewall o di inoltro proxy che intercetti tutto il traffico delle app in uscita e inietta un'istruzione HTTP 301 (o 302) su reindirizzamento a HTTPS ; presumibilmente controllando se esiste un socket HTTPS per l'indirizzo del server. A seconda della libreria utilizzata, potrebbe non esserci una verifica del certificato SSL / TLS senza interruzioni per un'app che non si aspettava di utilizzare HTTPS.

In alternativa, basta che lo strumento personalizzato avvisi l'utente quando un'app esegue una richiesta HTTP a una destinazione non autorizzata.

Preferibilmente, questa sorta di applicazione solo HTTPS dovrebbe essere una caratteristica del sistema operativo, o almeno una caratteristica di popolari ROM come CyanogenMod.

Come Polynomial menzionato, se il tuo telefono cellulare attraversa un bridge di rete che controlli; puoi utilizzare WireShark o simili per scoprire cosa sta facendo il tuo telefono tramite WiFi. Tcpdump sul telefono è possibile con gli strumenti e i privilegi giusti, probabilmente importato in WireShark per una migliore visualizzazione.

    
risposta data 09.09.2013 - 14:26
fonte
0

Non sono sicuro di altre piattaforme mobili, ma l'autorizzazione per poter effettuare connessioni HTTPS su Android è android.permission.INTERNET , che in realtà è abbastanza generale (può aprire qualsiasi connessione).

Non ho provato, ma se conosci l'esatto URI in anticipo, potresti essere in grado di utilizzare Autorizzazioni URI . Non è chiaro per me se si applicano esclusivamente agli URI di contenuto interno o anche alle connessioni effettuate da URLConnection , il che potrebbe darti le restrizioni che desideri.

Si noti che questo è poco importante nel complesso, dal momento che ciò che stai chiedendo è visibilmente non dal punto di vista dello sviluppatore. Suppongo che la tua domanda riguardi la possibilità di verificare che un'app di terze parti effettui solo connessioni HTTPS e che non ti fidi necessariamente dei suoi sviluppatori.

  • Anche se queste autorizzazioni URI fossero utilizzabili per applicare gli URI HTTPS, ciò funzionerebbe solo se gli sviluppatori ne avessero tenuto conto. Allo stato attuale, gli utenti non hanno la possibilità di sovrascrivere le autorizzazioni richieste dall'applicazione (anche se sembra esserci una tale caratteristica in Android 4.3 o se hai rootato il tuo telefono e hai installato un'applicazione extra). In questo caso, i permessi non sarebbero ancora la cosa giusta da usare, dal momento che gli sviluppatori si concedono in modo efficace queste autorizzazioni: un contrassegno auto-affermante "Faccio solo connessioni sicure" sembrerebbe inutile, se non addirittura applicato dal sistema operativo.

  • Se sei in grado di ascoltare il traffico a livello di router, puoi almeno verificare che l'applicazione utilizzi solo il traffico HTTPS in quel momento. Non notare connessioni con testo normale durante un determinato periodo di tempo non garantisce che non verrà mai effettuata alcuna connessione di testo normale, ma dovrebbe fornire un'indicazione ragionevole.

  • Il fatto che sia possibile vedere un'app che effettua le connessioni HTTPS non implica che stia utilizzando correttamente HTTPS . Essere in grado di non rendere gli errori dei certificati andare via sembra essere un requisito comune (ad esempio su iOS o su Android . Per alcune ragioni, le risposte con soluzioni non sicure sembrano essere molto pubblicizzate ...). Durante l'utilizzo di un certificato autofirmato con Fiddler, è possibile rilevare le app che non verificano affatto il certificato, inoltre è necessario utilizzare un certificato attendibile con un nome host diverso per rilevare le app che si dimenticano di verificare il nome host.

risposta data 09.09.2013 - 15:07
fonte

Leggi altre domande sui tag