## 아누비스: VPN 활성화 시 앱 자동 동결
러시아의 인기 앱들은 장치를 스캔해 VPN 사용 여부를 확인하고 발신 IP 주소를 보고해 차단되도록 합니다. 해결책은? VPN이 켜질 때마다 앱을 자동으로 동결시키는 것. 오픈소스 도구인 Anubis는 앱의 백그라운드 활동을 차단해 감지 시스템에서 보이지 않게 만듭니다.
왜 워크 프로필이 문제를 해결하지 못하는가
Android 워크 프로필(Island, Insular)은 ConnectivityManager로부터 VPN을 숨기지만, 네트워크 유출을 막지 못합니다. 워크 프로필 내 앱들은 여전히 다음을 볼 수 있습니다:
tun0인터페이스를NetworkInterface.getNetworkInterfaces()로/proc/net/route를 통한 라우트- localhost의 SOCKS5 프록시(포트 1080 등)
이러한 확인은 권한 없이 작동하며 디지털 개발부의 2026년 지침과 일치합니다. 프로필 격리에도 불구하고 앱은 VPN 서버의 발신 IP 주소를 감지해 로스콤나드조르에 보낼 수 있습니다. 아래 코드는 프로필 간 표준 ConnectivityManager 확인이 필터링되는 방식을 보여줍니다:
// Code in rabochem profile not obnaruzhit VPN osnovnogo profilya
val cm = getSystemService<ConnectivityManager>()
val vpnActive = cm.allNetworks.any {
cm.getNetworkCapabilities(it)
?.hasTransport(NetworkCapabilities.TRANSPORT_VPN) == true
}
// Result: vpnActive == false
VLESS 클라이언트의 치명적 취약점(보호되지 않은 SOCKS5 프록시)이 상황을 악화시킵니다. 앱은 VPN을 감지할 뿐만 아니라 이를 이용해 발신 IP를 정확히 파악할 수 있습니다. 트리플 캐스케이드 VPN 같은 기법은 문제를 미루기만 할 뿐—첫 번째 노드의 발신 IP를 스파이가 여전히 잡아낼 수 있기 때문입니다.
Android의 아키텍처 한계
Android는 데스크톱 OS와 달리 프로필에 네트워크 네임스페이스를 사용하지 않습니다. PC의 가상화(VirtualBox, QEMU)는 네트워크 스택을 완전히 격리하지만, Android에서는:
- 모든 프로필이 네트워크 스택을 공유
BroadcastReceiver,JobScheduler, FCM를 통한 백그라운드 활동 허용- Doze Mode와 App Standby가 완전 정지를 보장하지 않음
완벽한 네트워크 격리라도 백그라운드 프로세스는 계속 실행됩니다. 백그라운드 활동 권한을 가진 앱(은행, 메신저)은 정기적으로 확인합니다:
- 시스템 API를 통한 네트워크 상태
- localhost의 열린 포트
- 차단된 리소스 가용성
워크 프로필은 이러한 확인을 차단하지 않습니다. 유일한 확실한 방법은 시스템 명령 pm disable-user로 앱을 완전히 비활성화하는 것입니다.
Anubis 작동 원리
Anubis는 VpnService를 통해 VPN 상태를 모니터링하고 대상 앱을 자동으로 비활성화합니다. 주요 구성 요소:
- 시스템 모니터링:
CONNECTIVITY_ACTION이벤트와VpnService상태 추적 - 패키지 관리:
DONT_KILL_APP플래그와 함께PackageManager.setApplicationEnabledSetting()호출 - 대상 목록: 패키지 이름으로 필터링 (예: ru.max.messenger, ru.tbank)
활성화 과정:
- 사용자가 VPN을 켬
- Anubis가
BroadcastReceiver를 통해 이벤트를 수신 - 화이트리스트의 각 앱에 대해
pm disable-user실행 - 앱 아이콘이 런처에서 사라지고 백그라운드 프로세스 중지
VPN이 꺼지면 시스템이 자동으로 앱을 작동 상태로 복원합니다. CHANGE_NETWORK_STATE 권한과 앱 상태 변경 권한(ADB 또는 루트 필요)이 요구됩니다:
# Akaktywatsiya komandy otklyucheniya for user-installed prilozheniy
adb shell pm enable-user --user 0 ru.target.app
기술 구현 세부 사항
Anubis는 사용자 설치 앱 비활성화 제한을 두 가지 접근으로 우회합니다:
- ADB 모드: 디버깅 활성화된 기기에서 컴퓨터로 설정
- 루트 액세스: su를 통한
pm disable-user직접 호출
ADB 사용 시 일회성 설정이 필요합니다:
adb shell pm set-install-location 2
adb shell pm grant com.anubis.control android.permission.CHANGE_NETWORK_STATE
중요: 비활성화 후 앱은 시스템에서 완전히 격리됩니다. 브로드캐스트 이벤트를 받지 않고, 네트워크 액세스가 없으며 프로세스를 시작할 수 없습니다. 이는 포트 스캔, 라우트 분석 같은 고급 감지 방법도 불가능하게 보장합니다.
주요 요점
- 워크 프로필은 ConnectivityManager로부터만 VPN을 숨기고, 저수준 네트워크 확인은 못 막음
- 격리된 프로필에서도 앱의 백그라운드 활동이 활성 상태
pm disable-user를 통한 완전 비활성화가 유출을 보장하는 유일한 방법- Anubis가 프로세스를 자동화해 앱 상태를 VPN 상태와 연동
- 사용자 설치 앱 활성화에 ADB 또는 루트 필요
— Editorial Team
아직 댓글이 없습니다.