System-level ad-blocking in Android
안드로이드 시스템 수준 광고 차단
안드로이드에서 모든 앱의 광고를 줄이는 DNS 기반 차단 방법 네 가지를 비교합니다. 비루팅 기기는 DNS 서비스·VPN·로컬 VPN 앱을, 루팅 기기는 hosts 파일 수정을 쓸 수 있으며, 각 방법의 보안 위험과 앱 호환성 한계도 설명합니다.
- 주제
AI 요약
안드로이드 기기에서 시스템 수준으로 광고를 차단하면 브라우저뿐 아니라 앱 전반과 운영체제의 네트워크 요청에도 같은 규칙을 적용합니다. 글은 대부분의 시스템 수준 광고 차단이 DNS 동작을 바꾸는 방식이라고 설명합니다. 광고 호스트 이름을 조회할 때 실제 서버 대신 잘못된 IP 주소를 돌려주면 해당 서버와 연결되지 않습니다. 다만 앱이 광고 영역을 없애거나 화면을 다시 배치해 주는 방식은 아니며, 앱마다 실패한 광고 요청에 대응하는 방법도 다릅니다.
DNS를 바꾸는 네 가지 방법
글에서 제시하는 선택지는 광고 차단 기능을 제공하는 상용 DNS 서비스, 광고 차단 기능이 있는 상용 VPN, 루트 권한이 필요 없는 차단 앱, 루트 권한을 쓰는 차단 방식입니다. 상용 DNS는 안드로이드 설정에서 통신사나 인터넷 서비스 제공업체 대신 지정할 수 있습니다. 차단 목록 관리 방식은 서비스마다 다르며, 목록을 얼마나 꾸준히 관리하는지에 따라 효과도 달라집니다. 일부 서비스는 도박이나 성인물 사이트도 함께 차단하도록 설정할 수 있습니다.
DNS 운영자는 기기의 DNS 조회를 볼 수 있고, 악의적으로 설정하면 온라인 뱅킹 요청을 프록시로 돌려 로그인 정보를 노릴 수도 있습니다. 따라서 운영자의 신뢰도와 개인정보 처리 방침을 확인해야 합니다. 글은 로그를 남기지 않고 암호화 DNS를 지원하는 서비스를 고려하라고 권합니다. 자금 조달 방식이 분명하지 않은 무료 서비스도 경계하라고 덧붙입니다.
광고 차단 VPN도 DNS 조회를 자체 서버로 보내고 알려진 광고 호스트에는 가짜 IP를 돌려주는 점에서 상용 DNS와 비슷합니다. 이미 개인정보 보호를 위해 VPN을 구독한다면 광고 차단이 추가 비용 없이 제공될 수 있고, 앱에서 설정을 간단히 마칠 수 있습니다. 다만 DNS 서비스와 마찬가지로 운영자를 신중하게 골라야 합니다.
루트 권한이 없는 앱
루트 권한 없는 광고 차단 앱은 대체로 안드로이드의 로컬 VPN 기능을 이용합니다. 앱 안에서 DNS 서버와 VPN 호스트를 실행하고, 기기의 시스템 VPN으로 등록해 DNS 조회를 처리합니다. 시스템 파일을 직접 수정하지 않고도 광고 호스트 목록을 적용하는 방식입니다. 글은 AdAway 같은 앱을 대체 앱 스토어인 F-Droid에서 받을 수 있다고 설명하며, 구글이 플레이 스토어 바깥 앱의 설치를 점점 번거롭게 만든다고 지적합니다.
이 방식은 대체로 무료이며, 오픈소스 앱은 자원봉사자가 광고 호스트 목록을 관리합니다. 반면 기기의 네트워크 트래픽이 앱 하나를 거치므로 병목이 생길 수 있습니다. 악성 차단 앱은 VPN 서비스와 마찬가지로 네트워크 요청을 들여다볼 위험이 있습니다. 글은 소스가 공개되지 않은 앱은 피하라고 권합니다.
루트 권한을 쓰는 hosts 파일 방식
루트 권한이 있으면 안드로이드의 hosts 파일에 광고 호스트 이름과 127.0.0.1을 연결하는 항목을 넣을 수 있습니다. 기기 자체의 로컬 주소로 요청을 돌리면 광고 서버에 연결할 수 없다는 응답이 빠르게 돌아옵니다. 연결할 수 없는 외부 IP로 보내는 경우처럼 긴 대기 시간이 생기지 않습니다.
이 방식에는 두 가지 관리 문제가 있습니다. 먼저 최신 광고 호스트 목록을 구해야 합니다. 오래됐거나 지나치게 큰 목록은 더 이상 운영되지 않는 호스트까지 포함할 수 있으며, DNS 조회마다 파일을 검색하므로 네트워크 접근을 늦출 수 있습니다. 글은 AdAway 같은 오픈소스 앱의 목록을 참고할 만한 출처로 꼽습니다.
또한 최신 안드로이드 기기의 /system 파일 시스템은 읽기 전용이므로 hosts 파일을 바로 고칠 수 없습니다. 루트 기기에서 Magisk를 사용한다면 ‘systemless hosts’ 옵션을 켜 시스템 파일을 부팅 과정에 반영하는 모듈을 만들 수 있습니다. 이후 /data/adb/modules/root/system/etc/hosts 파일을 편집하고 기기를 재부팅하면 됩니다. AdAway 같은 앱도 루트 기기에서 이 방식을 관리하는 기능을 제공합니다. 글은 루트 기기에서는 로컬 VPN을 쓰는 앱보다 이 방식이 빠르며, 트래픽을 중간에서 처리하는 앱에 의존하지 않는다고 설명합니다. 다만 설치된 hosts 파일을 확인해 127.0.0.1 이외의 주소로 매핑한 항목이 없는지 살펴보라고 권합니다.
남는 한계
DNS 차단은 모든 광고를 막지 못합니다. 광고가 없으면 동작하지 않거나 기능이 깨지는 앱은 차단 목록을 조정해야 할 수 있지만, 어떤 호스트가 필요한지 알아내기 어려울 수 있습니다. 광고가 앱에 내장돼 있으면 네트워크 요청 자체가 없으므로 DNS 차단으로 막을 수 없습니다. 안드로이드는 DNS 조회 결과를 여러 위치에 캐시하므로 차단 목록을 바꾼 뒤에도 캐시를 비우려고 재부팅해야 할 수 있습니다. 앱이 DNS 대신 광고 서버 IP 주소에 직접 접속하면 DNS 기반 차단은 효과가 없습니다.
글은 루트 기기의 hosts 파일 수정이 시스템 자원을 거의 쓰지 않으며 모든 앱에 적용된다고 설명합니다. 루팅을 원하지 않는 사용자에게는 DNS 서비스, VPN, 비루트 차단 앱이 대안이지만, 설정 가능성·비용·효과 면에서 차이가 있습니다. 광고 문제의 범위가 웹사이트에 한정된다면 광고 차단 기능이 있는 브라우저를 쓰는 방법도 제시합니다.
Lobsters 반응
- @nelson — 이런 방법은 웹사이트가 광고 차단을 쉽게 감지해 이용자를 괴롭히거나 접속을 막을 수 있다는 문제가 있습니다. uBlock Origin 같은 브라우저 확장 프로그램은 광고 차단 방지 코드를 무력화하려는 기능도 갖춰 이런 대응을 더 잘 막습니다. 기업들이 상품과 서비스를 사도록 속이려 드는 전쟁터로 컴퓨터를 만드는 건 말도 안 됩니다.
- @SamRW — 전적으로 받아들일 수 없습니다. 모바일 기기에서는 개방형 컴퓨팅이 사라지는 상황이 분명합니다. iOS는 더 심합니다. 구매한 기기에서 임의의 코드를 실행하려면 연 100달러를 내거나, 탈옥한 취약한 운영체제를 써야 합니다. GrapheneOS가 쓸 만하고 괜찮은 유일한 해결책처럼 보입니다. 다만 포기해야 하는 점도 많습니다.
- @muvlon — 사용자 제어 측면에서 GrapheneOS가 안드로이드 생태계의 최선이라고 생각하지 않습니다. 보안 측면에서는 가장 나을 수 있지만, 그건 다른 문제입니다. 구글 안드로이드처럼 GrapheneOS도 어떤 경우에도 사용자가 파일 시스템에 임의로 접근하도록 허용하지 않습니다. 그래서 휴대전화 전체를 백업하거나 데이터를 전부 꺼낼 수 없습니다. 앱마다 백업 API를 통해 내주려는 데이터를 요청하는 방법뿐입니다. 더 나은 대안을 찾거나 프로젝트가 기기 지원을 중단해 GrapheneOS를 바꾸려면 부트로더를 다시 잠금 해제해야 하고, 그 과정에서 데이터가 지워집니다. 결국 구글 안드로이드를 GrapheneOS로 바꾸면 관리자를 하나 바꾸는 셈입니다. 데이터는 여전히 사용자 것이 아닙니다. 부트로더를 사용자 제어 키가 아닌 키로 잠그고 임의의 파일 시스템 접근도 허용하지 않는 CalyxOS도 마찬가지입니다. 사용자가 기기와 데이터를 완전히 통제했던 LineageOS 같은 이전 세대 안드로이드 배포판보다 분명히 퇴보했습니다. 보안을 강화하려고 그런 통제권을 포기할 가치가 있느냐는 질문에는 답이 여러 가지일 수 있습니다. 다만 GrapheneOS가 사용자 통제 측면에서 최선은 아니라는 말입니다.
- @edwintorok — 어떤 웹사이트는 쿠키 배너를 수락하거나 거절할 때까지 페이지를 계속 맨 위로 스크롤하는 코드가 있어서, 광고 차단이 페이지 스크롤을 망가뜨리는 경우도 있다고 합니다.
- @jaredkrinke — DNS 운영자가 온라인 뱅킹 요청을 자체 프록시로 돌려 로그인 정보를 훔칠 수 있다고 했는데, HTTPS가 이를 막아주지 않나요?
- @toastal — hosts 파일에 항목을 추가하려면 루트 권한이 필요하다는 점이 정말 짜증 납니다. 구글이 광고를 보여주려고 hosts 파일 수정을 막는 게 음모론인가요? 광고 차단 말고도 hosts 파일을 고칠 이유가 있는데, 루팅 기기를 쓰면 모두가 기기가 안전하지 않다고 취급합니다. 광고·애드웨어·스파이웨어·악성코드를 hosts 파일로 막으면 오히려 더 안전하다고 생각합니다. 안드로이드에서 이 기능을 없앤 건 애초에 제 개인정보 보호나 보안을 위한 일이 아니었습니다.
- @dimonomid — 저도 ‘루팅’ 기기를 ‘안전하지 않다’고 여기고, 기업·금융·정부 앱이 ‘사용자 안전’을 이유로 루팅 사실을 숨기지 않으면 실행을 거부하는 점에 정말 화가 납니다. 기업과 벌이는 술래잡기에 지쳐서 다음 안드로이드 휴대전화는 루팅하지 않을 것 같습니다. 결국 제가 진 것 같습니다.
- @drmorr — 예전에는 안드로이드 기기에서 광고 차단 VPN을 썼지만, Tailscale을 설치한 뒤 문제가 생겼습니다. Tailscale 자체가 VPN이라 VPN 두 개를 동시에 쓸 수 없습니다. 그래서 브라우저 밖의 앱에서는 광고를 보게 됐습니다. 정말 짜증 나는데, 아직 해결책을 찾지 못했습니다.
- @lemon — 저도 똑같은 문제를 겪어서 안 쓰던 라즈베리 파이에 Pi-hole을 설치하고 Tailscale을 올린 다음 tailnet 출구 노드로 설정했습니다.
- @frontsideair — Pi-hole을 추천합니다. 어디서나 잘 작동했고 문제도 없었습니다. Tailscale을 쓰다가 iOS 클라이언트 앱의 배터리 소모가 커서 WireGuard로 바꿨는데, Pi-hole은 둘 다에서 똑같이 잘 작동했습니다.
- @xilef — personalDNSfilter를 오랫동안 문제없이 썼고 광고도 줄었습니다.
원문: Kevin Boone / 번역·요약: Trawling