# Anubis: Automatyczne zamrażanie aplikacji przy aktywnym VPN
Popularne aplikacje w Rosji skanują urządzenie pod kątem obecności VPN i przekazują wychodzące adresy IP w celu blokady. Rozwiązanie — automatyczne zamrażanie aplikacji przy aktywnym VPN. Anubis, narzędzie open-source, blokuje aktywność w tle aplikacji, czyniąc je niewidocznymi dla systemów detekcji.
Dlaczego piaskownice nie rozwiązują problemu
Profile robocze Androida (Island, Insular) ukrywają VPN przed ConnectivityManager, ale nie zapobiegają wyciekom sieciowym. Aplikacje w profilu roboczym nadal widzą:
- Interfejs
tun0przezNetworkInterface.getNetworkInterfaces() - Trasy przez
/proc/net/route - SOCKS5-proxy na localhost (port 1080 i inne)
Te sprawdzenia działają bez uprawnień i są zgodne z wytycznymi Ministerstwa Rozwoju Cyfrowego z 2026 roku. Nawet przy izolacji profilu aplikacja może określić wychodzący adres IP serwera VPN i przekazać go do Roskomnadzoru. Kod poniżej pokazuje, jak standardowe sprawdzenie przez ConnectivityManager jest filtrowane między profilami:
// Kod w profilu roboczym nie wykryje VPN z profilu głównego
val cm = getSystemService<ConnectivityManager>()
val vpnActive = cm.allNetworks.any {
cm.getNetworkCapabilities(it)
?.hasTransport(NetworkCapabilities.TRANSPORT_VPN) == true
}
// Wynik: vpnActive == false
Krytyczna luka w klientach VLESS (niechroniony SOCKS5-proxy) pogarsza problem. Aplikacja nie tylko może wykryć VPN, ale też wykorzystać go do określenia wychodzącego IP. Metody takie jak kaskadowe VPN z trzema węzłami przesuwają problem, ale go nie eliminują — szpieg i tak uzyska wychodzący IP pierwszego węzła.
Architektoniczne ograniczenia Androida
Android nie używa network namespaces dla profili, w przeciwieństwie do systemów desktopowych. Wirtualizacja (VirtualBox, QEMU) na PC całkowicie izoluje stos sieciowy, ale na Androidzie:
- Stos sieciowy jest wspólny dla wszystkich profili
- Aktywność w tle jest dozwolona przez
BroadcastReceiver,JobScheduler, FCM - Tryb Doze i App Standby nie gwarantują pełnego zatrzymania
Nawet przy idealnej izolacji sieciowej procesy w tle nadal będą działać. Aplikacje z uprawnieniami do aktywności w tle (banki, komunikatory) regularnie sprawdzają:
- Stan sieci przez API systemowe
- Otwarte porty na localhost
- Dostępność zablokowanych zasobów
Profil roboczy nie blokuje tych sprawdzeń. Jedyna niezawodna metoda — pełne wyłączenie aplikacji przez systemową komendę pm disable-user.
Jak działa Anubis
Anubis monitoruje stan VPN przez VpnService i automatycznie wyłącza aplikacje docelowe. Kluczowe komponenty:
- Monitorowanie systemowe: Śledzenie zdarzeń
CONNECTIVITY_ACTIONi stanuVpnService - Zarządzanie pakietami: Wywołanie
PackageManager.setApplicationEnabledSetting()z flagąDONT_KILL_APP - Lista celów: Filtrowanie po package name (np. ru.max.messenger, ru.tbank)
Proces aktywacji:
- Użytkownik włącza VPN
- Anubis odbiera zdarzenie przez
BroadcastReceiver - Dla każdej aplikacji z białej listy wykonywane jest
pm disable-user - Ikony aplikacji znikają z launchera, procesy w tle są zatrzymywane
Po wyłączeniu VPN system automatycznie przywraca aplikacje do stanu aktywnego. Do działania wymagane jest uprawnienie CHANGE_NETWORK_STATE oraz uprawnienie do zmiany stanu aplikacji (przez ADB lub root):
# Aktywacja komendy wyłączenia dla aplikacji zainstalowanych przez użytkownika
adb shell pm enable-user --user 0 ru.target.app
Techniczne niuanse implementacji
Anubis omija ograniczenie Androida dotyczące wyłączania aplikacji użytkownika za pomocą dwóch podejść:
- Tryb ADB: Konfiguracja przez komputer dla urządzeń z debugowaniem
- Dostęp root: Bezpośrednie wywołanie
pm disable-userprzez su
Przy użyciu ADB wymagana jest jednorazowa konfiguracja:
adb shell pm set-install-location 2
adb shell pm grant com.anubis.control android.permission.CHANGE_NETWORK_STATE
Ważne: po wyłączeniu aplikacja jest całkowicie izolowana od systemu. Nie odbiera zdarzeń broadcastowych, nie ma dostępu do sieci i nie może uruchomić procesów. To gwarantuje, że nawet zaawansowane metody detekcji (skanowanie portów, analiza tras) stają się niemożliwe.
Co ważne
- Profile robocze ukrywają VPN tylko przed ConnectivityManager, ale nie przed niskopoziomowymi sprawdzeniami sieciowymi
- Aktywność w tle aplikacji pozostaje aktywna nawet w izolowanym profilu
- Pełne wyłączenie przez
pm disable-user— jedyny sposób na zagwarantowanie braku wycieków - Anubis automatyzuje proces, wiążąc stan aplikacji z VPN
- Wymagany ADB lub root do aktywacji funkcji dla aplikacji użytkownika
— Editorial Team
Brak komentarzy.