Android to obecnie najpopularniejszy system operacyjny na smartfonach. Ale pod względem ochrony prywatności daleko mu do naj.
Choć na przestrzeni lat załatano parę luk, aplikacje nadal mogą dość łatwo dobrać się do danych i wysłać je komuś przez internet.

Za jedną z największych luk uważam brak precyzyjnej kontroli nad dostępem aplikacji do internetu.

System pozwala co najwyżej wyłączać wybranym aplikacjom funkcję przesyłania danych „po cichu”, kiedy z nich nie korzystamy. Jest też przełącznik ogólny, odcinający internet wszystkim aplikacjom.

Nie istnieje natomiast coś, co łączyłoby w sobie precyzję (możliwość wskazania konkretnych aplikacji) i skuteczność (kompletne, bezwarunkowe odcięcie im internetu). To moim zdaniem wielka wada Androida.

…A przynajmniej nie istnieje w domyślnych opcjach. Powstały jednak firewalle – aplikacje, które ustawiają się jako „kontrolerzy” całego ruchu internetowego. I dzielą się tą kontrolą z użytkownikami. Dając dokładnie takie przełączniki, o jakich marzyłem.

W tym samouczku pokażę jedną taką aplikację, RethinkDNS. Darmową, o otwartym kodzie źródłowym, łatwą w obsłudze. I skuteczną.

Spis treści

Weryfikacja i instalacja

Świat open source bywa dynamiczny. Zdarza się czasem, że jakiś projekt zmieni właściciela albo zostanie sprzedany. W dniu tworzenia wpisu ufam RDNS-owi, ale czy to się kiedyś nie zmieni?

Dlatego przed instalacją warto sobie zweryfikować, czy z aplikacją wszystko w porządku. Na początek można odwiedzić jej stronę główną.

Jest tam informacja o tym, że apka jest/była częścią inicjatywy Mozilla Builders (od firmy Mozilla, twórców Firefoksa). Na stronie samej incjatywy znajdziemy potwierdzenie.
To pierwszy plus, bo Mozilla akurat weryfikują aplikacje.

Ciekawostka

Dawniej projekt działał pod nazwą BraveDNS, a strona główna była pod adresem bravedns.com.
Nie mają jednak nic wspólnego z przeglądarką Brave i zmienili nazwę na RethinkDNS zapewne ze względu na częste mylenie tych dwóch projektów.

Jest też link do kodu źródłowego. Ponad 2100 gwiazdek od użytkowników, czyli całkiem sporo. Sam opis również wyjaśnia, co leży twórcom apki na sercu i na jakich stronach są aktywni. Ogólnie budzą zaufanie.

Podsumowując: na dzień dzisiejszy polecam Rethink DNS. Ale czas płynie, świat się zmienia. Dlatego dla pewności warto poszukać informacji na zewnętrznych stronach:

  • wpisać w ogólną wyszukiwarkę rethink dns site:reddit.com i zobaczyć, co tam na forum Reddit;
  • poszukać najnowszych wątków na forum Hacker News.

Potem można sobie poczytać, czy są jakieś aktualne, większe skandale. Pojedynczymi komentarzami krytycznymi nie warto się przejmować – światek prywatnościowy jest dość wymagający :wink:

Instalacja

Zachęcam do RethinkDNS-a zainstalować w następujący sposób:

  1. Pobrać aplikację F-Droid.

    To alternatywne źródło aplikacji. Dopuszczają tylko te o otwartym kodzie źródłowym.
    Poza tym są wymagający, więc gdyby RDNS zmienił się na niekorzyść, to jest szansa że nie przyjmą niekorzystnej aktualizacji i zostaną przy starej, dobrej wersji.

  2. Wpisać rethink w wyszukiwarkę F-Droida i zainstalować RDNS przez niego.

RethinkDNS – VPN tylko z nazwy

Od strony formalnej RethinkDNS jest ustawiony na systemie jako aplikacja typu VPN.
To dlatego, że takie apki dostają od Androida kontrolę nad przepływem danych do internetu. Są jak szeroki lejek zbierający wszystko, co próbują wysłać w świat inne aplikacje.

Wiele osób może kojarzyć VPN-y z ukrywaniem tożsamości, choćby w celu ominięcia blokad geograficznych.

Po włączeniu typowych VPN-ów cała komunikacja idzie przez pośrednika (cudzy serwer). Ten pośrednik nie ujawnia naszego adresu IP. A to m.in. po adresie ustala się kraj pochodzenia.

Ale warto pamiętać, że RethinkDNS to VPN jedynie na papierze. Samo jego włączenie nie ukryje prawdziwego adresu IP przed adresatami.

Uwaga

Spotkałem się z uwagami, że król VPN może być tylko jeden.
W związku z tym włączony RDNS nie pozwalałby korzystać równocześnie z innych VPN-ów (tych typowych, od maskowania adresu IP).

W każdym razie, jeśli ktoś nie potrzebuje VPN-ów ani ich funkcji, to prawdziwa natura RDNS-a nie ma żadnego znaczenia. Po zainstalowaniu tej apki w górnej części ekranu pokaże się ikonka kluczyka. To znaczy że działa. I ten fakt wystarczy.

Obsługa aplikacji

Uwaga: zachęcam do przeczytania części „DNS” nawet osoby, które nie planują ustawiać nic własnego. Warto bowiem pomyśleć o zmianie jednego ustawienia.

DNS

Czym jest DNS? W uproszczeniu: to książka telefoniczna internetu. W praktyce jakiś serwer.

Po pierwsze: system musi znać adres jakiegoś DNS-a, żeby się z nim połączyć. Zwykle jest on proponowany przez hotspota albo operatora (w przypadku sieci mobilnej). Można też ustawić coś własnego.

Kiedy aplikacja (np. przeglądarka) chce zdobyć coś ze strony internetowej, a zna jedynie jej czytelną nazwę (jak ciemnastrona.com.pl), to zwraca się do DNS-a. Ten odsyła aktualny adres IP odpowiadający tej nazwie. A reszta interakcji zachodzi już bezpośrednio ze stroną spod tego adresu.

Schemat pokazujący wymianę informacji między laptopem a serwerami: DNS-em oraz adresatem docelowym

DNS udziela odpowiedzi tylko na pierwszym etapie. System zapisuje sobie adres i przez pewien czas już go nie pyta.

Apka RethinkDNS domyślnie kieruje wszystkie pytania o strony do serwera DNS kontrolowanego przez jej autorów. Ponoć szyfrującego informacje. To na plus.
Niektórzy mogą jednak mimo wszystko zmienić to ustawienie i pozostać przy tym, co zapewnia system.

Po pierwsze: ze względu na (ograniczone) zaufanie.

Do DNS-a podsuniętego przez apkę będą trafiały ogólne nazwy domen, jakie odwiedzamy (bez konkretnych podstron). Jak: youtube.com, ciemnastrona.com.pl, niegrzeczne-obrazki.gov.pl.

Zazwyczaj takie informacje trafiają do właściciela hotspota, którego używamy, albo do firmy telekomunikacyjnej. Używając rozwiązania od twórców RDNS-a, przenosimy to zaufanie na nich. Może nie ma w tym nic złego, ale lepiej mieć świadomośc.

Po drugie: ze względu na stabilność.

Serwerowi DNS zapewnianemu przez twórców RDNS-a może się coś przytrafić. I czasem się przytrafia. A że apka pośredniczy we wszystkim, to do czasu naprawienia usterki telefon de facto straci łączność z internetem.

Z powyższego względu – zwłaszcza jeśli ustawiamy firewalla osobie mniej lubiącej się z elektroniką – warto wrócić do domyślnego, systemowego DNS-a, podsuwanego przez hotspota/operatora. Minimalizuje to szansę niemiłych zaskoczeń.

Zmiana DNS-a jest bardzo łatwa. Wystarczy kliknąć na ekranie głównym RDNS-a kafelek DNS u góry i wybrać z krótkiej listy opcję System DNS.

Firewall

To ta funkcja pozwala odciąć od sieci aplikacje, którym nie ufamy.

Po otwarciu RDNS-a pokaże się ekran zawierający kilka głównych kategorii. Trzeba kliknąć tę na dole, Aplikacje.

Pokaże się lista wszystkich aplikacji na smartfonie. Żeby odciąć wybranym dostęp do sieci, trzeba klikać odpowiadające im ikonki po prawej, aż się przekreślą. Jedna odpowiada za hotspoty, druga za sieć komórkową.

Na liście są również aplikacje systemowe, które łatwo poznać po ikonie wyglądającej jak głowa robota (Androida). Proponuję zachować ostrożność i nie wyłączać im sieci na chybił-trafił.

A kogo odciąć? Przede wszystkim aplikacje, które raczej nie mają interesu w łączności z siecią. Takie jak Zegar.

Osobiście zablokowałem przez RDNS-a również aplikacje Google’a, których nie dało się odinstalować, a jedynie wyłączyć.
Bloka dałem nawet Usługom Google Play, wcześniej wyłączonym. Wiem że będę tu w mniejszości, bo wiele aplikacji jednak na nich polega.

Schemat pokazujący ustawienia RethinkDNS. Pośrodku widać okno z ustawieniami dla dwóch aplikacji. Apka Files By Google ma wyłączoną łączność, a strzałka wychodząca od jej ikony odbija się od okna z ustawieniami. Strzałka wychodząca od aplikacji Firefox, która ma włączone przełączniki, normalnie dociera do ikony kuli ziemskiej po drugiej stronie okna.

Źródła: oficjalne ikony, kula ziemska autorstwa vectorsmarket15 (serwis Flaticon).

Firewall pozwala również ustawiać bardziej złożone regułki niż zwykłe tak/nie. Ale o tym może napiszę innym razem, kiedy już poeksperymentuję.

Logi

Kolejną cenną rzeczą, jaką oferuje Rethink DNS, jest możliwość zerknięcia do logów (historii połączeń z siecią) i ujrzenia na własne oczy, z czym łączyły się aplikacje.

Żeby w tę historię zajrzeć, trzeba kliknąć zakładkę Logi na ekranie głównym. U góry będą dwie zakładki:

  • Logi sieciowe
  • DNS

Zakładka Logi sieciowe to ułożona chronologicznie lista, pokazująca wymianę informacji między aplikacjami a zewnętrznymi serwisami. Przykładowa pozycja z listy wygląda tak:

Pojedyncza pozycja z listy pokazująca ikonkę przeglądarki Firefox, stronę news.ycmbinator.com, jej adres IP oraz godzinę połączenia i parę pomniejszych informacji

Widać tu:

  • nazwę oraz ikonę aplikacji,
  • adres IP i nazwę serwisu (domenę), z jakim się połączyła,
  • ilość przesłanych danych (strzałka w górę – wysłane, w dół – pobrane),
  • protokół, jakim się połączyła (tu: szyfrowany HTTPS),
  • czas wykonania połączenia,
  • kraj, w jakim znajduje się serwis (na podstawie adresu IP).

Druga górna zakładka, DNS, to z kolei podobnie wyglądająca lista zapytań do DNS-a. Są to przeważnie nazwy domen, wysyłane z nadzieją na otrzymanie odpowiadających im adresów IP.
Zapytania z tej listy nie są już przypisane do konkretnych aplikacji, co może nieco utrudniać ustalanie winnych.

Ciekawostka

Przy niektórych pozycjach widnieje czas połączenia 0 ms – oznacza to zapewne, że żądanie w ogóle nie poleciało w sieć, bo adres został wzięty z pamięci podręcznej.
Powiązania domena-adres są na pewien czas zapisywane na urządzeniu, żeby system był dużym chłopcem i przestał ciągle słać pytania do DNS-a.

W jaki sposób można korzystać z logów? Proponuję co pewien czas sprawdzać obie listy. Jeśli któryś element wyda się podejrzany, to można poszukać w internecie nazwy domeny, ewentualnie dopisując słowa is malicious, privacy i tak dalej, żeby nadać kontekstu.

Jeśli obawy się potwierdzą – albo nie zostaną rozwiane – to można kliknąć na dany element z listy, po czym paroma kliknięciami zablokować łączność z wybraną domeną. Mając na uwadze, że czasem może to prowadzić do błędów aplikacji.

Przykład: dzięki logom odkryłem, że moja aplikacja Termux zapytała o coś DNS-a pod adresem 8.8.8.8, czyli należącego do Google’a, zamiast mojego domyślnego. Niedobrze.

Miałem podejrzenie, że nastąpiło to po uźyciu programiku dig, więc poszukałem pod hasłem dig termux google dns.
Jak się okazało, to problem Androida. Niektóre apki biorą adres DNS-a z pewnego pliku systemowego. A w nim domyślnie znajdują się adresy DNS-a od Google’a. Podejrzana sprawa.

Logi pozwoliłyby również wykryć, że jakaś strona otwarła się w przeglądarce wbudowanej w Facebooka, zamiast w (oczekiwanej) systemowej. Moją uwagę zwróciłby fakt, że aplikacja Facebooka połączyła się ze stroną, która nijak nie jest z Metą/Facebookiem związana.

Eksport logów i ustawień

Przeglądarka logów od RDNS-a ma swoje ograniczenia. Pozwala szukać po nazwie aplikacji albo odfiltrowywać aplikacje (nie-)blokowane… Ale to w sumie tyle.

Nie da się na przykład wyświetlić tylko połączeń wykonanych w określonym przedziale czasowym. Nie mówiąc o jakiejś wizualizacji liczby połączeń w skali, dajmy na to, kilku tygodni.

Żeby przeprowadzić dokładniejszą analizę, trzeba wyciągnąć plik z wnętrza RDNS-a i trochę przy nim popracować innymi programami. Mam w planie zrobić coś takiego na blogu, ale póki co pokażę jedynie, jak wyeksportować dane.

Wystarczy kliknąć ikonkę Skonfiguruj na samym dole, potem wybrać opcję Kopia zapasowa i przywracanie, przeklikać się przez okienka i wybrać folder, do jakiego zostaną zapisane dane z aplikacji.

Trzy fragmenty zrzutów ekranu pokazujące po kolei, jak wyeksportować dane z apki Rethink DNS

Uwaga

Jeden z komunikatów mówi, że eksport danych wymaga ponownego uruchomienia VPN‑a (czyli zapewne również firewalla).
Jeśli ktoś się obawia, że to okno czasowe wykorzystają któreś z blokowanych aplikacji i dorwą się do sieci, to dla pewności można wyłączyć internet na poziomie całego smartfona. I przywrócić po wyeksportowaniu.
Osoby szczególnie wyczulone mogą również upewnić się, że żadne nielubiane aplikacje nie mają pozwolenia na dostęp do plików. Cenne logi trafią bowiem do publicznej części smartfona, gdzie każdy może zajrzeć.

Dane zostaną zapisane w wybranym folderze, do pliku z rozszerzeniem .rbk. Od strony technicznej to zwykłe archiwum, które można rozpakować (w Eksploratorze Windowsa: po ręcznej zmianie rozszerzenia na .zip).
W środku jest kilka plików, w tym dwie bazy danych typu SQLite. Logi znajdują się wewnątrz tej o nazwie rethink_logs.db.

Jeśli już umiecie dłubać w takim formacie, to super! Jeśli nie, to możecie poczytać praktyczny opis takiej eksploracji. Albo poczekać na mój wpis :wink: