Gibt es einen Sicherheitsunterschied zwischen einer root-basierten Firewall (AFWall +) und einer nicht root-basierten Firewall (NetGuard)?

18

Was sind die technischen Unterschiede zwischen root-basierten Firewalls (wie AFWall +) und nicht root-basierten Firewalls (wie NetGuard)?

Gibt es irgendwelche Auswirkungen auf die Sicherheit, die diese Software tatsächlich bietet?

Ich habe bereits ein bisschen in NetGuards Quellcode nachgesehen, um mir eine Idee zu machen, aber ich denke, dass dies immer noch eine gute Frage ist und ich bin daran interessiert, die Analyse anderer Leute zu diesem Thema zu erhalten.

Ich würde diese Frage gerne auf die technischen Kernfunktionen einer solchen Software beschränken (z. B. die Art der Firewall: statuslos oder statusbehaftet, gibt es hartcodierte Ausnahmen, die Robustheit des Codes für den Umgang mit nicht vertrauenswürdigen Paketen usw.) und nicht auf sekundäre Funktionen oder Antifunktionen (Anzeigen, Nachverfolgung, Kosmetik, ...), sofern sie nicht das Kernziel der Software konkret betreffen.

Mit anderen Worten: bitte nicht schimpfen;)!

Falls es Einschränkungen gibt, ist es möglicherweise erwähnenswert, ob diese implementierungsspezifisch sind (die Konsequenz einer vom Entwicklungsteam getroffenen Auswahl) oder eine Konsequenz der verwendeten Technologie (die sich auf sehr unterschiedliche Systeme stützt, ist es möglich, dass man damit fertig wird mit Einschränkungen, die der andere nicht hat).

WhiteWinterWolf
quelle

Antworten:

14

Als Autor von NetGuard habe ich Erfahrung aus erster Hand auf diesem Gebiet.

Ein Nachteil einer Firewall, die auf einem lokalen VPN basiert, ist, dass nicht alle Datenverkehrstypen verarbeitet werden können, da der (Android-) Linux-Kernel nicht alle Datenverkehrstypen über eine Socket-basierte Verbindung weiterleiten kann. Ein Beispiel ist IPsec, das von einigen Herstellern für IP-Anrufe verwendet wird. Eine Teillösung (nicht für IPsec) hierfür wäre die Verwendung eines Remote-VPN-Servers zur Weiterleitung des Datenverkehrs. Dies ist jedoch aus Datenschutzgründen für viele Menschen nicht akzeptabel und mit zusätzlicher Komplexität und wahrscheinlich auch mit einem zusätzlichen Batterieverbrauch verbunden. In der Praxis scheint der Umgang mit TCP- und UDP-Verkehr für 99,9% der NetGuard-Benutzer ausreichend zu sein. Seit Android 5 ist es möglich, Anwendungen von der Weiterleitung in das VPN auszuschließen (die VPN-implementierende Anwendung entscheidet, ob dies obligatorisch oder optional ist). Hiermit können Probleme behoben werden, die dadurch entstehen, dass nicht der gesamte Datenverkehr weitergeleitet werden kann. Eine andere Option ist das Ausschließen von Adressen (Bereichen), mit denen NetGuard IP-Anrufe für einige Hersteller korrigiert.

Ein weiterer Nachteil ist, dass das Weiterleiten von Datenverkehr den Akkuverbrauch auf Mobilgeräten erhöht, da einige Verarbeitungsschritte erforderlich sind, da Pakete überprüft und weitergeleitet werden müssen. Die Verwendung von iptables, das in den Linux-Kernel integriert ist, ist effizienter und damit batteriefreundlicher.

Generell hat sich herausgestellt, dass Android den gesamten Datenverkehr in das VPN weiterleitet, auch den Datenverkehr von Systemanwendungen und -komponenten. Ein Hersteller könnte jedoch bestimmte Datenverkehrstypen ausschließen, um die Sicherheit einer VPN-basierten Firewall zu verringern.

NetGuard analysiert die Daten selbst nicht, mit Ausnahme von DNS-Anfragen zur Anzeigenblockierung. Andernfalls kann dies jedoch zu Datenschutzproblemen führen. Technisch gesehen ist dies jedoch ein Vorteil einer VPN-basierten Firewall (wenn Sie sie immer noch so nennen möchten), da sie eine vollständige Prüfung von Datenströmen ermöglicht, die über das hinausgeht, was mit iptables möglich ist. Dies würde wahrscheinlich auf Kosten des Batterieverbrauchs aufgrund der damit verbundenen Verarbeitung gehen. Beachten Sie, dass zum Überprüfen von SSL-Streams ein lokaler MiT-Angriff erforderlich ist.

Ein weiterer Nachteil ist, dass Android die Verkettung von VPNs nicht zulässt. Wenn Sie also ein lokales VPN zum Implementieren einer Firewall verwenden, können Sie keinen echten VPN-Dienst verwenden, es sei denn, die Firewall stellt einen solchen Dienst selbst oder alternativ einen Weiterleitungs- oder Proxy-Mechanismus für ein anderes VPN bereit Anwendung.

Schließlich hängt eine VPN-basierte Firewall von der Anwendung ab, die den auszuführenden Firewall-VPN-Dienst bereitstellt. Dies scheint trivial zu sein, ist es aber nicht, da einige Hersteller-Android-Versionen / -Varianten Prozesse bei wenig Arbeitsspeicher zu aggressiv beenden (IMHO ist es ein Fehler, wenn Android Anwendungen beendet, die einen VPN-Dienst bereitstellen).

Schließlich wird das Rooten von Android-Geräten immer schwieriger, sodass eine VPN-basierte Firewall für viele Menschen die einzige Wahl ist. Ich erwarte nicht, dass Google in Kürze eine systembasierte Firewall einführt, da dies die Werbeeinnahmen erheblich beeinträchtigen könnte. iOS hat eine systembasierte Firewall.

Lassen Sie mich wissen, wenn es irgendwelche Fragen gibt und ich werde versuchen, sie zu beantworten.

M66B
quelle
1
Danke für deine Antwort. "Es würde eine vollständige Überprüfung der Datenströme ermöglichen, die über das hinausgeht, was mit iptables möglich ist." iptables ist modular aufgebaut, und AFAIK hindert es nicht daran, solche Deep Packet Inspection-Techniken (DPI) bereitzustellen. Es gibt sogar mehrere Projekte, die dies implementieren ( ndpi-netfilter , https://github.com/thomasbhatia/OpenDPI , l7-filter ), aber ich nehme an, dass die tatsächliche Nachfrage nach so etwas im Vergleich zu der erforderlichen Arbeit zu gering ist, so dass sie alle scheinen jetzt aufgegeben.
WhiteWinterWolf
Ja, es kann auch mit einem Linux-Kernel-Modul durchgeführt werden, aber es ist viel einfacher, dies auf Anwendungsebene zu tun. Linux-Kernelmodule müssen mit einer Kernelversion kompatibel sein, was unter Android mit so vielen Kernelversionen in freier Wildbahn keine praktikable Option wäre. Es würde auch Root-Berechtigungen und Kenntnisse über das Einfügen eines Kernel-Moduls erfordern, die Sie vom durchschnittlichen Benutzer nicht erwarten können, obwohl dies möglicherweise irgendwie automatisiert werden kann.
M66B
10

Meines Wissens ist es der Ansatz:

Root-basierte Firewalls verwenden IPFilter / iptables , um den Fluss zu steuern. Dies gilt automatisch für alle Apps, unabhängig davon, ob eine Netzwerkverbindung besteht oder nicht, ob das Routing vollständig funktioniert oder ob Sie sich in einer "geschlossenen Umgebung" (Intranet) ohne Zugang zur "Außenwelt" befinden " (Internet). Apps, die Sie blockiert haben, werden blockiert. Auf einem ziemlich niedrigen Niveau.

Firewalls, die keine Root-Firewalls sind, haben keinen Zugriff auf diese niedrige Ebene. Sie müssen daher Workarounds verwenden. In den meisten Fällen erfolgt dies über die VPN-Funktionen von Android . Je nach Implementierung funktioniert dies entweder vollständig auf dem Gerät (dh unabhängig davon, welche Netzwerkverbindung verfügbar ist) oder über "externe Dienste" (die Sie mit dem VPN des App-Anbieters verbinden). Im letzteren Fall kommt es zu einer Störung, sobald dieser Dienst nicht mehr verfügbar ist - eine Tatsache, die Sie möglicherweise bemerken oder nicht. In beiden Fällen bin ich mir nicht sicher, ob wirklich alle Apps das VPN unterstützen oder ob es einen Ausweg gibt. 1 Eine weitere unangenehme Tatsache bei VPNs, von der ich gelesen habe, ist die störende permanente Benachrichtigung: "Ihr Netzwerk wird möglicherweise überwacht."- aber AFAIK, die nur auftauchen sollte, wenn für die betreffende App ein eigenes Zertifikat installiert sein muss. 2

Fazit: Ich persönlich würde einer root-basierten Lösung eher vertrauen. Wo jedoch keine Option ist, sollten Lösungen ohne Root-Berechtigung fast genauso gut sein. In diesem Fall würde ich Open-Source-Lösungen wie NetGuard empfehlen (der Entwickler hat auch Xprivacy entwickelt und ist sehr vertrauenswürdig). Apropos: Weitere Informationen finden Sie in der XDA-Einführung von NetGuard , in der der Hintergrund mit einigen weiteren Details erläutert wird.


1 Ich kenne die technischen Details hinter der VPN-Implementierung von Android nicht, zitiere jedoch WhiteWinterWolf (siehe Kommentar unten). Es ist Sache des Android-Basissystems, dies durchzusetzen. Es gibt keinen Grund zu der Annahme, dass dies nicht richtig gemacht wird.

2 Nochmals WhiteWinterWolf zitiert: Die von NetGuard verwendete VPN-API ermöglicht das Abfangen aller Daten durch eine nicht privilegierte Anwendung. Android betrachtet dies effektiv als "Überwachung", es hat keinen Bezug zu einem Zertifikat und diese Warnung ist eine unvermeidbare und zu erwartende Konsequenz von Verwenden dieser API.

Izzy
quelle
2
Danke für deine Antwort. "Ich bin nicht sicher, ob wirklich alle Apps das VPN unterstützen" : Es liegt am Android-Basissystem, dies durchzusetzen. Es gibt keinen Grund zu der Annahme, dass dies nicht richtig gemacht wird. "Die nervige permanente Benachrichtigung" : Die von NetGuard verwendete VPN-API ermöglicht das Abfangen aller Daten durch eine nichtprivilegierte Anwendung. Android betrachtet dies effektiv als "Überwachung", es besteht keine Beziehung zu einem Zertifikat, und diese Warnung ist unvermeidlich und wird erwartet Folge der Verwendung dieser API.
WhiteWinterWolf
Danke für die Details! Ich habe sie in meine Antwort integriert (Credits gegeben), um sie leichter zu erkennen. Was die "Überwachungsbenachrichtigung" anbelangt: Wo immer ich sie gefunden habe, war sie im Zusammenhang mit der Installation eines Benutzerzertifikats. Aber danke für die Klarstellung!
Izzy
1
Ja, es ist ziemlich traurig für Android, die gleiche Benachrichtigung für mehrere unabhängige Zwecke wiederzuverwenden. Im aktuellen Kontext ist diese Benachrichtigung mit der folgenden Anweisung aus der zuvor verknüpften VPN-API-Dokumentation zu verknüpfen : "Eine systemverwaltete Benachrichtigung wird während der Lebensdauer einer VPN-Verbindung angezeigt." .
WhiteWinterWolf
1
Denken Sie daran, ob es bei der Suche nach VPNs Möglichkeiten gibt. Ich habe diesen Hinweis zu Verbesserungen in Android 4.4 gefunden : " VPN pro Benutzer . Auf Geräten mit mehreren Benutzern werden jetzt VPNs pro Benutzer angewendet. Dies kann einem Benutzer ermöglichen um den gesamten Netzwerkverkehr über ein VPN weiterzuleiten, ohne andere Benutzer auf dem Gerät zu beeinträchtigen. "
WhiteWinterWolf
2
  1. Abgesehen von dem allgemeinen Konsens, dass die tatsächliche Sicherheit für gerootete Geräte nicht gewährleistet ist und natürlich vom Benutzer abhängt, bietet AFWall + einen Kernel-Ansatz zum Filtern des Datenverkehrs, während NetGuard die Verschlüsselung verwendet. Ich denke, die Fähigkeit, als Android-Administrator zu arbeiten, ohne im Vordergrund zu bleiben, ist wichtig ...
  2. AFWall + verwendet optional ein Startskript auf Systemebene, um Datenverlust während des Startvorgangs zu verhindern (und das Herunterfahren auch, glaube ich).
  3. Wenn es verwendet wird, verfügt es auch über ein integriertes Tasker-Plug-In, mit dem Profile automatisch gewechselt werden können, wenn eine Konnektivitätsänderung festgestellt wird (mir gefällt dieses Plug-In wirklich gut).
  4. Linux-basierte iptables im Gegensatz zu der von Netguard verwendeten VPN-Methode
  5. Ich kann die Einstellungen der App in Netguard nicht mit einem Kennwort schützen, habe diese Funktion jedoch in AFWall + noch nie verwendet.

Ich denke, ein wichtiges Feature, das Sie über Netguard beachten sollten, ist die Möglichkeit, bestimmte Adressen auf App-Basis zu filtern. Dies ist eine kostenpflichtige Option.

Ich kann nicht sagen, zertifikatbasiertes VPN vs Iptables. Dies hängt wahrscheinlich von Ihrer Kernel- und Android-Version für iptables und für NetGuard ab, von den Algorithmen, die zum Verschlüsseln der Daten verwendet werden, davon, ob sie protokolliert werden und wo sie gespeichert sind. Meine Antwort ist möglicherweise nicht so technisch wie das, wonach Sie gesucht haben. Als langjähriger Benutzer von AFWall + (Spendenversion) bin ich definitiv voreingenommen. Ich weiß jedoch, dass der Entwickler von NetGuard auch XPrivacy, einen sehr bekannten / vertrauenswürdigen und robusten Android-Datenschutzmanager, aktiv pflegt . AFWall + wurde nicht aufgegeben, hat aber definitiv noch kein Update erhalten, so wie es NetGuard getan hat. Beide verwenden unterschiedliche Methoden zur Aufrechterhaltung der Verkehrskontrolle, aber letztendlich hängt es meiner Meinung nach hauptsächlich vom Benutzer ab, wie sicher ein Teil ihres Geräts ist.

cbar.tx
quelle
Vielen Dank für Ihre Antwort, insbesondere die Kugel war sehr informativ. Soweit bekannt, wendet NetGuard keine Verschlüsselung an, sondern nutzt nur die VPN-API von Android, da diese API die Weiterleitung der gesamten Daten-Netzwerk-Kommunikation an einen nicht privilegierten Benutzerprozess ermöglicht. Die ursprüngliche Absicht dieser API ist es, einem solchen Prozess die Verarbeitung einer VPN-Verbindung (tatsächlich Verschlüsselung usw.) zu einem Remote-Host zu ermöglichen. NetGuard verwendet diese Position jedoch nur lokal, um den Datenverkehr analysieren und filtern zu können. Soweit ich weiß, gibt es in NetGuard keine VPN-Option (im Gegensatz zu AFWall +).
WhiteWinterWolf
Eine Sache, auf die mich meine Neugier nicht gezwungen hat, eine eindeutige Antwort zu finden, ist, ob es überhaupt üblich ist, dass Apps ihre Upload-Spielereien tunneln, und wie effektiv es wäre, Daten zu analysieren und zu filtern, die durch diesen VPN-Mechanismus getunnelt werden.
cbar.tx
Das VPN-Tunneling ist für die anderen Apps transparent. Sie glauben, sie haben direkten Zugang zum Internet, während Android die Kommunikation unter der Haube tatsächlich zur VPN-Schnittstelle umleitet. Soweit mir bekannt ist, analysiert NetGuard nicht die Daten selbst, sondern nur die Informationen des Layer-3-Protokolls (IP-Adressen und Flags) und einen nicht dokumentierten Android-Trick, um das Paket mit der Ursprungs-App zu verknüpfen. Dies ist ausreichend, um zu entscheiden, ob ein Paket gesendet werden soll erlaubt oder nicht.
WhiteWinterWolf
Es gibt keinen undokumentierten Android-Trick zum Verknüpfen von Paketen mit Anwendungen, sondern eine dokumentierte Linux-Kernelfunktion.
M66B
@ M66B: Vielen Dank für die Präzision, für diese habe ich mich auf den XDA-Artikel gestützt, der in Izzys Antwort verlinkt ist: "Wir haben festgestellt, dass es notwendig ist, den undokumentierten Zugriff auf Dateien auf dem Kernel zu nutzen, um den Datenverkehr von verschiedenen Apps zu unterscheiden „proc“ Dateisystem, übersetzen Prozesse in Anwendung UIDs. Dieser Zugriff leicht in zukünftigen Versionen von Android durch SELinux blockiert werden könnte, und auch sogar in einigen mehr sicherheitsorientierte Geräten "blockiert werden kann .
WhiteWinterWolf