Skip to content

smmac72/whatVPN

Repository files navigation

whatVPN

Небольшой POC, покрывающий проверки RKNHardening - тестаппы по детекту ВПН из внешних приложений

Не является обходом, используйте пожалуйста только для проверок безопасности вашего устройства

С последнего коммита официально является нейрослопом

Требования

  • Android 8+
  • su-доступ
  • LSPosed

Установка

  • Установить .apk
  • Включить модуль в LSPosed
  • Добавить в скоуп LSPosed все приложения для проверки
  • Перезапустить устройство
  • Применить в whatVPN требуемые приложения (покажутся приложения из скоупа)
  • Перезапустить устройство
  • Проверять

Функциональность

Что не может

  • GeoIP - решается сплит-туннелингом
  • IP Comparison - решается сплит-туннелингом
  • Location Signals - решается сплит-туннелингом
  • WebRTC Leak - JS может раскрыть публичный IP через RTCPeerConnection, можно попробовать отключение WebRTC в настройках браузера

Что может

Direct signs - системные АПИ вызовы (проверка TRANSPORT_VPN)

  • Хук на вызов connectivityManager.getNetworkCapabilities(network).hasTransport(4) - всегда вернет false
  • Хук на вызов NetworkCapabilities.toString() - убирает подстроки с VPN, добавляет NOT_VPN
  • Хук на вызов NetworkCapabilities.hasCapability(NET_CAPABILITY_NOT_VPN) - возвращает true
  • Хук на вызов ConnectivityManager.getNetworkInfo(TYPE_VPN) - возвращает null
  • Хук на получение системных свойств (http.proxyHost, http.proxyPort, socksProxyHost, socksProxyPort и https-варианты) через System.getProperty(String) - возвращает null
  • Хук на PackageManager.getPackageInfo(), getInstalledApplications(), getInstalledPackages() возвращает null на проверку по package name (надо будет сделать добавление)
  • Фильтрует ConnectivityManager.getAllNetworks() - вроде как малоиспользуемое, но оставляем только физическую сеть
  • Вызывает PackageManager.queryIntentServices(Intent("android.net.VpnService")) и прячет приложения с VpnService в манифесте

Indirect signs - сетевые интерфейсы и маршруты

  • Хук на вызов NetworkInterface.getNetworkInterfaces() - фильтрует по паттернам tun\d+, tap\d+, wg\d+, ppp\d+, ipsec.* и с уменьшенным MTU
  • Хук на вызов LinkProperties.getRoutes() - фильтрует по dedicated routes через VPN-интерфейсы (к примеру 0.0.0.0/5 via tun0) и по паттерну сплит-туннелинга
  • Хук на вызов LinkProperties.getDnsServers() - возвращает DNS физического интерфейса
  • Фильтрует /proc/net/*, /sys/class/net/ при чтении - убирает VPN-интерфейсы
  • Очищает dumpsys vpn_management
  • Возвращает EConnRefused на сканирование известных портов. Если приложение активно сканирует порты - уходит в режим полной блокировки на 10 секунд

About

POC of denying an external VPN check for Android apps

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages