Qualche differenza di sicurezza tra i firewall basati su root (AFWall +) e quelli non basati su root (NetGuard)?


18

Quali sono le differenze tecniche tra i firewall basati su root (come AFWall +) e i firewall non basati su root (come NetGuard)?

C'è qualche impatto sulla sicurezza effettivamente fornita da tale software?

Ho già controllato un po 'nel codice sorgente di NetGuard per farmi un'idea, ma penso che questa potrebbe essere ancora una buona domanda e sono interessato a ottenere analisi di altre persone sull'argomento.

Vorrei limitare tale domanda alla caratteristica tecnica principale fornita da tale software (come il tipo di firewall: stateless o stateful, ci sono eccezioni hardcoded, la solidità del codice che gestisce i pacchetti non attendibili, ecc.) E non le funzionalità secondarie o anti-funzionalità che potrebbero avere (pubblicità, tracciamento, cosmetici, ...) a meno che non incidano concretamente sull'obiettivo principale del software.

In altre parole: niente rant per favore;)!

In caso di limitazioni, potrebbe essere utile menzionare se sono specifiche dell'implementazione (la conseguenza di una scelta fatta dal team di sviluppo) o una conseguenza della tecnologia utilizzata (basandosi su sistemi molto diversi, è possibile che si debba far fronte con limitazioni che l'altro non ha).

Risposte:


14

Come autore di NetGuard ho esperienza diretta in questo campo.

Uno svantaggio di un firewall basato su una VPN locale è che non tutti i tipi di traffico possono essere gestiti, poiché il kernel (Android) Linux non consente l'inoltro di tutti i tipi di traffico su una connessione basata su socket. Un esempio è IPsec, che viene utilizzato per le chiamate IP da alcuni produttori. Una soluzione parziale (non per IPsec) sarebbe quella di utilizzare un server VPN remoto per inoltrare il traffico, ma questo è saggio della privacy non accettabile per molte persone e verrebbe con ulteriore complessità e probabilmente anche con un ulteriore utilizzo della batteria. In pratica, la gestione del traffico TCP e UDP sembra essere sufficiente per il 99,9% degli utenti NetGuard. Da Android 5 è possibile escludere il routing delle applicazioni nella VPN (l'applicazione di implementazione della VPN decide se è obbligatoria o facoltativa), che può essere utilizzato per risolvere i problemi derivanti dal fatto di non poter inoltrare tutto il traffico. Un'altra opzione è quella di escludere l'indirizzo (intervalli), che NetGuard utilizza per "correggere" le chiamate IP per alcuni produttori.

Un altro svantaggio è che il traffico di inoltro aumenterà l'utilizzo della batteria sui dispositivi mobili, poiché comporta una certa elaborazione, poiché i pacchetti devono essere ispezionati e inoltrati. L'uso di iptables, che è integrato nel kernel di Linux, è più efficiente e quindi più compatibile con la batteria.

In generale è apparso che Android instrada tutto il traffico verso la VPN, anche il traffico di applicazioni e componenti di sistema, ma un produttore potrebbe decidere di escludere determinati tipi di traffico, riducendo la sicurezza che può essere raggiunta da un firewall basato su VPN.

NetGuard non analizza i dati stessi, ad eccezione delle richieste DNS per fornire il blocco degli annunci, ma se ciò potesse sollevare un problema di privacy. Tuttavia, tecnicamente visto questo è un vantaggio di un firewall basato su VPN (se vuoi ancora chiamarlo in quel modo), perché consentirebbe un'ispezione completa dello stato dei flussi di dati oltre ciò che è possibile con iptables. Ciò sarebbe probabilmente a spese dell'utilizzo della batteria, a causa dell'elaborazione in questione. Si noti che richiederebbe un attacco MiT locale per ispezionare i flussi SSL.

Un altro svantaggio è che Android non consente il concatenamento di VPN, quindi l'utilizzo di una VPN locale per implementare un firewall impedirà l'utilizzo di un vero servizio VPN, a meno che il firewall non fornisca tale servizio stesso o in alternativa un meccanismo di inoltro o proxy a un'altra VPN applicazione.

Infine, un firewall basato su VPN dipende dall'applicazione che fornisce il servizio VPN firewall in esecuzione. Questo sembra essere banale, ma non lo è, perché alcune versioni / varianti di Android del produttore stanno uccidendo i processi in modo troppo aggressivo in condizioni di memoria insufficiente (IMHO è un bug se Android uccide le applicazioni che forniscono un servizio VPN).

Infine, il rooting dei dispositivi Android sta diventando sempre più difficile, lasciando un firewall basato su VPN come l'unica scelta per molte persone. Non mi aspetto che Google aggiunga presto un firewall basato sul sistema, perché potrebbe influire in modo significativo sulle entrate degli annunci. iOS ha un firewall basato sul sistema.

Fammi sapere se ci sono domande e cercherò di rispondervi.


1
Grazie per la risposta. "consentirebbe un'ispezione completa dello stato dei flussi di dati oltre ciò che è possibile con iptables" , iptables è modulare e nulla di AFAIK gli impedisce di fornire tali tecniche di ispezione di pacchetti profondi (DPI). Ci sono anche diversi progetti che implementano questo ( ndpi-netfilter , https://github.com/thomasbhatia/OpenDPI , l7-filter ), ma suppongo che la domanda effettiva di tale cosa sia troppo bassa rispetto al lavoro richiesto, quindi sembrano tutti abbandonato ora.
WhiteWinterWolf

Sì, può essere fatto anche usando un modulo kernel Linux, ma è molto più semplice da fare a livello di applicazione. I moduli del kernel Linux devono essere compatibili con una versione del kernel, che non sarebbe un'opzione praticabile su Android con così tante versioni del kernel in natura. Richiederebbe anche i permessi di root e le conoscenze su come inserire un modulo del kernel, cosa che non ci si può aspettare da un utente medio, anche se questo può forse essere automatizzato in qualche modo.
M66B,

10

Per quanto ne so, è l'approccio:

I firewall basati su root utilizzano IPFilter / iptables per controllare il flusso. Ciò si applica automaticamente a tutte le app, indipendentemente dal fatto che ci sia una connessione di rete disponibile o meno, se il routing funziona completamente o meno o se ci si trova in un "ambiente chiuso" (Intranet) senza accesso al "mondo esterno" "(Internet). Le app che hai bloccato sono bloccate. A un livello piuttosto basso.

I firewall non root non hanno accesso a quel livello basso, quindi devono usare soluzioni alternative. Nella maggior parte dei casi questo viene fatto utilizzando le funzionalità VPN di Android . A seconda dell'implementazione, questo funziona completamente sul dispositivo (vale a dire, indipendentemente da quale connessione di rete potrebbe essere disponibile) o tramite "servizi esterni" (connettendoti alla VPN del provider di app). In quest'ultimo caso, le cose si rompono non appena il servizio smette di essere disponibile - un fatto che potresti notare o meno. In entrambi i casi, non sono sicuro se davvero tutte le app rispettino la VPN o se ci siano modi per aggirare. 1 Un altro fatto spiacevole con le VPN di cui ho letto è la fastidiosa notifica permanente in arrivo, che dice "La tua rete potrebbe essere monitorata"- ma AFAIK che dovrebbe apparire solo se l'app in questione necessita del proprio certificato installato. 2

Verdetto: personalmente mi fiderei di più di una soluzione basata su root. Ma dove il non è un'opzione, le soluzioni non root dovrebbero essere quasi altrettanto buone. In tal caso, la mia raccomandazione sarebbe rivolta a soluzioni open source come NetGuard (anche il suo sviluppatore ha creato Xprivacy ed è molto fidato). A proposito: per ulteriori dettagli, dai un'occhiata all'introduzione XDA di NetGuard , che spiega lo sfondo con alcuni dettagli in più.


1 Non ho familiarità con i dettagli tecnici dietro l'implementazione VPN di Android, ma citando WhiteWinterWolf (vedi commento sotto), spetta al sistema di base Android applicarlo, non c'è motivo di pensare che non sia stato fatto correttamente.

2 Sempre citando WhiteWinterWolf: l' API VPN utilizzata da NetGuard consente a tutti i dati di essere intercettati da un'applicazione non privilegiata, questo è ciò che Android considera efficacemente come "monitoraggio", non ha alcuna relazione con alcun certificato e questo avviso è una conseguenza inevitabile e prevista di usando questa API.


2
Grazie per la tua risposta. "Non sono sicuro che tutte le app onorino la VPN" : spetta al sistema di base Android imporre questo, non c'è motivo di pensare che non sia stato eseguito correttamente. "la fastidiosa notifica permanente" : l' API VPN utilizzata da NetGuard consente a tutti i dati di essere intercettati da un'applicazione non privilegiata, questo è ciò che Android considera efficacemente come "monitoraggio", non ha alcuna relazione con alcun certificato e questo avviso è inevitabile e previsto conseguenza dell'utilizzo di questa API.
WhiteWinterWolf,

Grazie per i dettagli! Li ho integrati con la mia risposta (crediti assegnati) per renderli più facili da individuare. Per quanto riguarda la "notifica di monitoraggio": dovunque abbia mai trovato quello menzionato, era nel contesto dell'installazione di un certificato utente. Ma grazie per il chiarimento!
Izzy

1
Sì, è piuttosto triste per Android riutilizzare la stessa notifica per diversi scopi non correlati. Nel contesto attuale, questa notifica deve essere collegata alla seguente dichiarazione della documentazione API VPN precedentemente collegata : "Una notifica gestita dal sistema viene mostrata durante la vita di una connessione VPN." .
WhiteWinterWolf

1
Qualcosa da tenere a mente sul fatto che ci siano modi per aggirare le VPN, mentre cercavo qualcos'altro ho trovato questa nota relativa ai miglioramenti in Android 4.4 : " VPN per utente . Su dispositivi multiutente, le VPN sono ora applicate per utente. Ciò può consentire a un utente per instradare tutto il traffico di rete attraverso una VPN senza influenzare altri utenti sul dispositivo. "
WhiteWinterWolf

2
  1. A parte il consenso generale sul fatto che la sicurezza effettiva è fuori dalla finestra per i dispositivi rooted e ovviamente dipende dall'utente, AFWall + offre un approccio a livello di kernel per filtrare il traffico mentre NetGuard utilizza la crittografia. Penso che la capacità di funzionare come amministratore Android senza la necessità di rimanere in primo piano sia importante ...
  2. AFWall + utilizza facoltativamente uno script di avvio a livello di sistema che impedisce la perdita di dati durante l'avvio (e credo anche che l'arresto sia)
  3. Se utilizzato, ha anche un plug-in tasker integrato che offre la possibilità di cambiare automaticamente i profili quando viene rilevata una modifica della connettività (mi piace molto questo)
  4. Iptables basati su Linux al contrario del metodo VPN utilizzato da Netguard
  5. Non vedo alcuna opzione per proteggere con password le impostazioni dell'app in Netguard, ma non ho mai usato questa funzione in AFWall +, quindi ...

Penso che una caratteristica importante da notare su Netguard sarebbe la possibilità di filtrare indirizzi specifici in base all'app. Questa è un'opzione a pagamento.

Non posso dire VPN basata su certificato vs iptables. Ciò dipenderebbe probabilmente dal kernel e dalla versione di Android per iptables e per NetGuard, gli algoritmi utilizzati per crittografare i dati, indipendentemente dal fatto che vengano registrati e dove sono archiviati. La mia risposta potrebbe non essere così tecnica come quella che stavi cercando e, da tempo utente di AFWall + (versione donata), sono decisamente di parte. Tuttavia, so che lo sviluppatore di NetGuard mantiene attivamente anche XPrivacy, un gestore della privacy Android molto conosciuto / affidabile e robusto. AFWall + non è stato affatto abbandonato ma sicuramente non ha ricevuto un aggiornamento di recente come NetGuard. Entrambi utilizzano diversi metodi per mantenere il controllo del traffico, ma alla fine, penso che dipenda in gran parte dall'utente quanto sia sicura qualsiasi parte del proprio dispositivo.


Grazie per la risposta, in particolare il proiettile è stato molto istruttivo. Per quanto noto NetGuard non applica alcuna crittografia, sfrutta l'API VPN di Android perché questa API consente di reindirizzare l'intera comunicazione della rete dati a un processo utente senza privilegi. L'intento iniziale di questa API è consentire a tale processo di gestire una connessione VPN (in effetti la crittografia ecc.) A un host remoto, ma NetGuard invece utilizza questa posizione solo localmente solo per essere in grado di analizzare e filtrare il traffico. Per quanto ne so, non esiste un'opzione VPN effettiva in NetGuard (al contrario di AFWall +).
WhiteWinterWolf,

Una cosa per cui la mia curiosità non mi ha costretto a rintracciare una risposta definitiva è se è comune per le app tunnelare i loro shenanigans di caricamento e quanto sia efficace nell'analizzare e filtrare i dati che vengono tunnelizzati attraverso questo meccanismo VPN.
cbar.tx,

Il tunneling VPN è trasparente per le altre app, pensano di avere un accesso diretto a Internet mentre Android è in grado di reindirizzare la comunicazione all'interfaccia VPN. Per quanto ne so, NetGuard non analizza i dati stessi, solo informazioni sul protocollo di livello 3 (indirizzi IP e flag) e un trucco Android non documentato per collegare il pacchetto all'app di origine, questo è sufficiente per decidere se un pacchetto debba essere permesso o no.
WhiteWinterWolf,

Non esiste un trucco Android non documentato utilizzato per collegare i pacchetti alle applicazioni, ma una funzionalità del kernel Linux documentata.
M66B,

@ M66B: Grazie per la precisione, per questo ho fatto affidamento sull'articolo XDA collegato nella risposta di Izzy: "abbiamo scoperto che per differenziare il traffico da app diverse, era necessario utilizzare l'accesso non documentato ai file sul kernel "Proc" filesystem, per tradurre i processi in UID dell'applicazione. Questo accesso potrebbe essere facilmente bloccato nelle future versioni di Android da SELinux, e potrebbe anche essere bloccato in alcuni dispositivi più orientati alla sicurezza " .
WhiteWinterWolf
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.