[CM11] Tracking-Schutz/FakeMAC

O

ooo

Enthusiast
3.449
Ausgehend von einer Analyse zum Verhalten der(Google-)Kontakte habe ich zwei andere Dinge gefunden, die mich (an der von mir verwendeten CM11 KK 4.4.4 ROM) stören.
(Anmerkung: Der folgende Teil des dortigen Original-Beitrags wurde am Do., 27.11.2014 um 09:49 Uhr von @Fight4Music hierher verschoben.)


1. Lücke: Captive Portal Checker geht immer zu einer Google-Adresse

Bei jedem Start überprüft die ROM, ob sich das Phone mit dem Internet verbinden kann.

"Im Internet" bedeutet hierbei nicht nur, dass es in einem W-LAN eingebucht ist, sondern auch wirklich Server ansteuern kann (Web, Mail etc.).

Dazu wird ein Captive Portal Check durchgeführt. - Ein Captive Portal befindet sich z. B. oft in Hotels (offenes W-LAN, aber zum Surfen ins Internet muss man sich erst freischalten lassen).

Der (Google-)Code, der auch in allen ROMs steckt, versucht dabei immer, eine Verbindung zu h t t p : / /clients3.google.com aufzubauen (bei jedem Start und egal, ob man die GApps hat oder nicht). - Gelingt dies, "weiß" das Phone anhand der Antwort-Seite (HTTP Response-Code 204), dass es ins Internet kann.

Und Google weiß, wer wann von wo mit welchem Browser mit welchem Androiden ins Internet gegangen ist. - Nochmal: es ist im AOSP-/CM-Code. - Ganz großes Tracking-Kino!

Noch besser: Ich habe die Funktion trotz Firewall nicht daran hindern können, "nach Hause zu telefonieren".
Edit 2015-01-03: Nachtests haben ergeben, dass AFWall+ dies unterbindet, wenn die Firewall korrekt eingerichtet und explizit aktiviert wurde. In "Netzwerk Log" sollte in den Einstellungen "Hinter Firewall protokollieren" aktiviert sein, um nur den wirklich abfließenden Traffic zu sehen. - Das grundsätzliche Problem existiert aber dennoch weiter und muss - wie unten beschrieben - bearbeitet werden, falls die Firewall deaktiviert wird (Crash, ROM-Updates etc.)

Hier findet man alle IPs, die Google dafür vorgesehen hat (ohne Anspruch auf Vollständigkeit):

clients3.google.com


Wie stellt man das jetzt ab (mit und ohne Google Apps):

Dazu z. B. adb shell oder Android Terminal Emulator öffnen

Eingabe:
Code:
su
settings put global captive_portal_detection_enabled 0
settings put global captive_portal_server localhost
reboot
_____


2. Lücke: Das Phone holt sich die konkrete Zeit bei z. B. 2.android.pool.ntp.org via NTP (Port 123)

Das passiert ebenfalls bei jedem Start des Phones (mit und ohne Google Apps) und selbst dann, wenn man die automatische Zeitaktualisierung in den Einstellungen deaktiviert. - Hallooo?!

Überprüfung mit dig auf einer Linux Box:
Code:
root@dev:~# [B]dig 2.android.pool.ntp.org[/B]

; <<>> DiG 9.8.1-P1 <<>> 2.android.pool.ntp.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4419
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;2.android.pool.ntp.org.        IN    A

;; ANSWER SECTION:
2.android.pool.ntp.org.    86    IN    A    [B]5.9.39.5[/B]
2.android.pool.ntp.org.    86    IN    A    [B]131.188.3.220[/B]
2.android.pool.ntp.org.    86    IN    A    [B]85.10.246.226[/B]
2.android.pool.ntp.org.    86    IN    A    [B]5.9.80.114[/B]

;; Query time: 41 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Nov 26 23:26:24 2014
;; MSG SIZE  rcvd: 104
Die IPs sind u. a. von Hetzner und auch Privat-Personen, die offene Zeit-Server betreiben und zur Verfügung stellen. Die IPs wechseln, die dahinter stehenden Leute/Firmen auch. - Will ich, dass registriert wird, wann und von wo (meine IP-Adresse/meine MAC-Adresse) ich das Phone starte?

Wenn nein, dann ist hier die Lösung, um auch das abzustellen:

adb shell oder Android Terminal Emulator öffnen

Eingabe:
Code:
su
settings put global ntp_server 127.0.0.1
_____


Wer hat Lust, seine MAC in unsicheren Umgebungen zu ändern, um sich so vor Tracking besser zu schützen?

(ACHTUNG: Nur für die Kombination 1. Motorola Defy(+) (MB525, MB526) und 2. CyanogenMod CM 11 KitKat 4.4.4 ROMs von Quarx)

Ich habe mir hierzu ein Shell-Script geschrieben und als flashbare ZIPs angehängt, die Ihr gerne mal ausprobieren könnt. - Kaputt gehen kann nichts dabei.

Der FakeMAC Randomizer ändert eure MAC-Adresse automatisch bei jedem Start des Phones, wenn er aktiviert ist. - Die originale MAC wird nicht zerstört und kann wieder benutzt werden. - Durch einfaches Umbenennen einer Datei (siehe Screenshots) kann die Funktion ein- oder ausgeschaltet werden oder die aktuelle MAC-Adresse "eingefroren".

fakemac-v3-flashable.zip installiert und aktiviert FakeMAC.

fakemac-v3-uninstall-flashable.zip stellt den Ausgangszustand wieder her.

Viel Spaß beim Testen!

Hinweise:

Edit 28.11.2014:
Neue Version v3 angehängt. - Bug fix: Wenn man in der v2 das Verzeichnis /data/local/userinit.d nicht bereits hatte, dann wurde immer nur die originale MAC benutzt. - Das wurde jetzt bereinigt.

Edit 27.11.2014:
In der Version v2 bleibt bei der Deinstallation evtl. die automatisch generierte Datei /data/local/userinit.d/98-fakemac übrig, tut aber nichts weiter aktiv. - Bitte manuell löschen.


Allgemeiner Tipp: Wenn das W-LAN nicht tun sollte, was sehr selten vorkommt, einfach ein Wipe Dalvik Cache und Wipe Cache durchführen.
 

Anhänge

  • 00-fakemac-ssh-with-putty.png
    00-fakemac-ssh-with-putty.png
    31,2 KB · Aufrufe: 656
  • 01-fakemac-cm-fileexplorer.png
    01-fakemac-cm-fileexplorer.png
    17 KB · Aufrufe: 626
  • 02-fakemac-log-file.png
    02-fakemac-log-file.png
    16,2 KB · Aufrufe: 575
  • fakemac-v3-flashable.zip
    130,6 KB · Aufrufe: 348
  • fakemac-v3-uninstall-flashable.zip
    123,9 KB · Aufrufe: 298
Zuletzt bearbeitet:
  • Danke
Reaktionen: Oebbler, email.filtering, mratix und 8 andere
Könnte man da mit reinhängen.

Guter Stil ist aber, die einzelnen "Tweaks" (thematisch) jeweils getrennt in eigenen init.d-Start-Scripts unterzubringen (in /data/local/userinit.d/).

Wenn jeder Tweak ein eigenes Script hat, dann werden bei einem Fehler in einem der Scripte (das dann abbricht), die anderen Tweaks trotzdem noch ausgeführt.

Professioneller ist es, das LTO-Script extra zu halten.

Alle Dateien, die im Verzeichnis /data/local/userinit.d/ sind und ausführbar, werden beim Start in alphabetischer Reihenfolge aufgerufen. - Ist das Verzeichnis nicht da, kann man es sich selbst anlegen (als "root"). - Die Scripte müssen root:root und -rwxr-xr-x haben. - Wie sie heißen, ist egal.
 
Da ist was dran. Allerdings ist das glaube ich auch die falsche Stelle - ein Denkfehler von mir.
Das FakeMAC wird beim Booten aufgerufen, das LTO Script idealerweise beim Einschalten einer WLAN Verbindung. Du hast dir das schon genauer angeschaut, gibts da eine Position wo das sinnvoll wäre?
Ok, hier geraten wir OT ...
 
LTO automatisieren

Die benutzen deren Datei /init.aries.rc was bei uns /init.mapphone_umts.rc ist, um einen Service einzurichten, der das alles automatisiert. - Die .rc-Datei ist aber nach einem ROM-Update wieder zurückgesetzt.

Ich habe das noch nicht probiert, weil mich GPS nicht interessiert. - Manuell hatte das bei mir auch keinerlei Auswirkungen auf den Fix als ich das mal ausprobiert hatte.
 
  • Danke
Reaktionen: starbright
Hi, josef2,

nein, das macht zunächst keine Probleme, da es den falschen Namen "captive_detection_enabled" nicht gibt. - Ein Problem wäre es gewesen, wenn es diesen Namen ebenfalls gibt, da ja dann dessen echter Wert überschrieben worden wäre.

Allerdings gibt es jetzt in den Settings "deine" neue Variable "captive_detection_enabled".

Das kannst du im Terminal wieder löschen mit:

Code:
su 
settings put global captive_detection_enabled null
___

josef2 schrieb:
Servus ooo,

ich habe Deine Tweak´s wie angegeben über das Terminal eingetippt, leider ist mir da ein Missgeschick passiert.
Anstatt "settings put global captive_portal_detection_enabled 0" habe ich "settings put global captive_detection_enabled 0" abgeschickt.
Gibt das ein Problem? Zumindest das Terminal hat nach <Enter> nicht gemeckert.

Danke in Voraus für Deine Hilfe.

MfG, josef2
 
Hallo, ich habe zu Punkt 2. eine blöde Frage.

Mit Xprivacy kann man sich auch ID, IP, MAC- Adresse etc generieren lassen und auch beim Start des Phones generieren. Funktioniert diese Funktion dieser App nicht richtig, oder warum geiftst du auf ein eigenes Skrip zurück?

Oder liegt es am dem Motorla Phone?

(ACHTUNG: Nur für die Kombination 1. Motorola Defy(+) (MB525, MB526) und 2. CyanogenMod CM 11 KitKat 4.4.4 ROMs von Quarx)
 
Nimm Xposed. - Ich hatte damals nach einer Lösung (NUR für das Motorola Defy!) gesucht, die mit möglichst null Fremd-Apps bzw. Tweaks auskommt. - Ich bin absolut kein Freund von XPosed, weil es massive Änderungen an einer ROM vornimmt und die Module aus unsicheren Quellen unkontrollierte Änderungen vornehmen *könnten*. Deswegen verwende ich es nicht (mehr) und kenne mich deswegen auch nicht (mehr) damit aus.

Mit dem Custom Script von AFWall+ kannst du übrigens auch die Zeit-Server-Anfragen über eine Regel auf einen ganz bestimmten NTP-Server einstellen (erzwingen).

Quelle:
CustomScripts · ukanth/afwall Wiki · GitHub

# Force a specific NTP in this case DE ntp0.fau.de (131.188.3.220), Location: University Erlangen-Nuernberg
$IPTABLES -t nat -A OUTPUT -p tcp --dport 123 -j DNAT --to-destination 131.188.3.220:123
$IPTABLES -t nat -A OUTPUT -p udp --dport 123 -j DNAT --to-destination 131.188.3.220:123
 
Zuletzt bearbeitet:
ooo schrieb:
ch hatte damals nach einer Lösung (NUR für das Motorola Defy!) gesucht, die mit möglichst null Fremd-Apps bzw. Tweaks auskommt

Find ich ehrlich gesagt, nicht verkehrt. Da hast du auch recht, das Problem ist das nicht nicht jeder sogut auskennt wie du und den meisten die Zeit & Lust fehlt. Wie machst du das denn dann mit den Berechtigungn deiner Apps?
Nutzt du nur die Datenschutzfunktion von der ROM?

Bin halt leider nicht so versiert in diesem Thema, nutze auch nur dieses eine Modul.
Ob es aktuell so sicher ist weiss ich leider auch nicht.

Danke für den Tipp mit dem Zeitserver.
 
Ja, nur die Datenschutz-Funktion. Apps kommen erstmal nicht ins Internet (AFWall). Apps, die ins Internet müssen, aber sich nicht "benehmen" (Daten) fliegen raus. Keine Google Apps, keine Mainstream-Apps (Facebook, WhatsApp & friends). - F-Droid als App Store (Quell-Code bei Bedarf einsehbar).
Tipp: Einfach immer weiter am Thema bleiben und dazulernen.
 
Kommt nach der Eingabe in das Terminal, nicht auch immer eine Ausgabe? (Bei 1. & 2.)
Wenn ja, wäre es schön wenn das auch noch mit aufgefhührt werden würde =).
 
Wenn die Befehle ohne Fehler angenommen wurden, kommt keine weitere Ausgabe (das ist oft so bei unixoiden Betriebssystemen). - Wenn etwas falsch läuft, gibt es auch etwas zu melden - dann kommt eine Ausgabe.
 
  • Danke
Reaktionen: anonymousdark
Bin am Überlegen, wie am besten die disable captive portal geschichte unterzubringen bzw. wasserdicht zu halten.

Code:
# check system reflashed
if [ -f /system/etc/init.d/98-blabla ] exists; then ; else cp /data/local/userinit.d/98-blabla /system/etc/init.d/ ; echo 'CP script wurde wiederhergestellt' ; fi

# check value
if settings get global captive_portal_server == "localhost"; then echo 'CP inaktiv'; else settings put global captive_portal_server localhost; echo 'localhost wurde gesetzt' ; fi

# check is active
if settings get global captive_portal_detection_enabled == "0"; then exit; else settings put global captive_portal_detection_enabled 0; echo 'CP wurde deaktiviert, restart'  && wait 5; reboot ; fi

# data wiped
echo 'disable CP script nicht gefunden! Bitte zip wieder flashen'; pause; fi

...so ungefähr, Kopfkino

was haltet ihr davon?
 
Zuletzt bearbeitet:
Ein init.d-Script kann das nicht (automatisieren), weil Android noch nicht gestartet ist. - Die Init.d-Scripte werden zwar ausgeführt, aber die settings binary (reinschauen, es ist nur Text ...) und die settings.jar stehen (m. M. n.) noch nicht zur Verfügung, um die captive portal Werte zu checken bzw. zu setzen. - Jedenfalls kenne ich bis jetzt noch keine automatisierte Lösung. - Evtl. geht es mit der sqlite3 binary und einem Script, um low-level bei jedem Start in die settings.db via SQL-commands zu schreiben. - Warum überprüfen? - Einfach "brutal" immer wieder überschreiben ... (getestet habe ich das aber noch nicht. - Ich mache das bisher manuell).

(Wenn die ROM ein /system/addon.d/ Verzeichnis hat, kann man sich ein Survival-Script für normale (OTA-)Updates einrichten, das dann die "captive portal deactivation"-Script-Datei in /system/etc/nit.d/ wegsichert. - Analog z. B. zu /system/addon.d/50-cm.sh bei einer CM-ROM für die Datei /system/etc/hosts)

Edit:
Außerdem liegt die settings.db, die die captive portal Werte enthält, in data, nicht in system und überlebt ein Update. - Nach einem Full wipe ist das natürlich etwas anderes. - Auch eine Installation/Aktualisierung bestimmter Google Apps/Services können die Werte wieder (in seltenen Fällen) zurücksetzen.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: mratix
ooo schrieb:
Evtl. geht es mit der sqlite3 binary und einem Script, um low-level bei jedem Start in die settings.db via SQL-commands zu schreiben.
Hört sich gut an, werde mir dazu noch Gedanken zur Umsetzung machen.

Ich danke dir, wieder mal, für das hervorragende Fachwissen.
 
Captive Portal Detection deaktivieren funktioniert mit (vorhandenem) sqlite3 in einem init.d-Script:
(Funktioniert aber nur, wenn die ROM/der Kernel init.d-Scripte unterstützt)

ooo-cpd-v1.zip entpacken

Datei 98cpdoff nach /system/etc/init.d/ kopieren
Berechtigungen auf root:root -rwxr-xr-x (0755) setzen

Optional (nur, wenn /system/addon.d/ vorhanden, z. B. CM-ROM)
Datei 98-cpdoff-survival.sh nach /system/addon.d/ kopieren
Berechtigungen auf root:root -rwxr-xr-x (0755) setzen

Tipp (init.d nachrüsten/korrigieren):
Wenn die ROM SELinux-Status Strikt (Enforcing) hat, kann es sein, dass keine init.d-Scripts ausgeführt werden. - Dann kann man sich hier über eine mögliche Lösung (nur zu Lollipop-ROMs) informieren. - Wenn es sofort funktioniert, braucht man das nicht anwenden. - Bei CM-ROMs (gerootet mit SuperSU) muss man nur das Verzeichnis /system/su.d/ korrekt anlegen und die Datei runpartsinitd (Berechtigungen nicht vergessen: root:root 0755).

/system/su.d/runpartsinitd hat dabei folgenden Inhalt:
#!/system/bin/sh

/sytem/xbin/busybox run-parts /system/etc/init.d/
(busybox muss natürlich installiert sein)
 

Anhänge

  • cpd01.png
    cpd01.png
    11,1 KB · Aufrufe: 512
  • cpd02.png
    cpd02.png
    21,8 KB · Aufrufe: 498
  • cpd03.png
    cpd03.png
    12,1 KB · Aufrufe: 430
  • cpd04.png
    cpd04.png
    18,7 KB · Aufrufe: 437
  • ooo-cpd-v1.zip
    996 Bytes · Aufrufe: 230
Zuletzt bearbeitet:
  • Danke
Reaktionen: mratix
Wow! Hat super funktioniert.

Ganz großen Dank an dich @ooo

Wenn du möchtest, hier noch ein kleines script um den Status abzufragen. Könnte man ins Archiv reinpacken.

Code:
#!/system/bin/sh

# Make sure that you have 'su' before

echo 'A response of "null" indicates the global key value has NOT been SET and Android will fall back to default of being on and performing the detection.'
echo 
echo 'If the detection is disabled the response of "0" will be received.'
echo  
echo '*** Status is:'
settings get global captive_portal_detection_enabled

settings get global captive_portal_server
echo '***'
 
@ooo

Zum FakeMac : Das funktioniert sicher nicht mehr auf nem LOS14.1, oder? Wie könnte man das dort lösen?
Danke
 
FakeMac bezieht sich nur auf das Defy bzw. dessen originale Firmware, die von einer Custom ROM mitbenutzt wird.
Das ändern der MAC ist hier also eher Device-spezifisch.
___

Chainfire hat eine App im Play Store, die das allgemeiner machen kann, falls es auf Device und ROM passt:
Pry-Fi will prevent your device from announcing all the networks it knows to the outside world, but it will still allow background scanning and automatically connecting to Wi-Fi networks. While you are not connected to a Wi-Fi network, the MAC address will constantly be pseudo-randomized,

[root] Pry-Fi – Android-Apps auf Google Play

(letzte Version aus 2014)
___

Android MAC-Adresse ändern - bleiben Sie einfach anonym | TippCenter
 

Ähnliche Themen

K
  • kschroeder
Antworten
5
Aufrufe
1.670
ooo
O
J
Antworten
5
Aufrufe
2.224
jodu
J
D
  • Defy+ User
Antworten
9
Aufrufe
2.160
Defy+ User
D
Zurück
Oben Unten