AdShield의 모델은 지속가능하지 않으며 여러분의 개인정보를 위협적으로 갈취하려 합니다
애드블록과 애드쉴드 간의 싸움 실태를 알아보고 무엇이 문제인지 확인해보세요. 사용자와 서비스 모두 완만한 균형점을 찾을 수 있을 것이라 생각합니다.
저는 2022년부터 개인 활동으로 AdShield와 기타 웹 사이트들의 적대적인 광고 차단 정책을 막고 있습니다. 그리고 그 중심에는 광고가 아닌 가치관과 개인정보 윤리가 있습니다. 모든 사람이 모든 광고를 좋아하는 것은 아닙니다. 하지만 모든 것에는 중간이 있습니다. 그리고 지금 AdShield에서 말하는 "창과 방패의 싸움"의 실태를 보여드립니다.
AdShield가 말하는 "즉시 차단"은 세상에 없습니다.
AdShield(이하 "애드쉴드")를 제가 처음 본 것은 얼마 되지 않았지만 이들은 그들이 현재 이어나가고 있는 작업에 대해서 굉장한 자신감을 가지고 있습니다. 애드블록의 경우에는 광고 차단에 최대 한 달 가량의 시간이 걸릴 수 있지만 애드쉴드의 경우에는 10분 가량의 시간 밖에 걸리지 않는다는 것입니다.
애드쉴드는 단 몇 초만에 필터(공격코드)를 파악하고, Anti-Adblock Engineer의 간단한 조치로 즉시 무력화가 가능합니다.
이 말에는 함정이 숨겨져 있습니다. 단 몇 초만에 필터를 파악할 뿐 그들이 말하는 Anti-Adblock Engineer 분들이 코드를 차단하기까지는 애드블록의 필터 배포 시간과 비슷하거나 꽤 긴 시간이 걸립니다. 그 핵심에는 JavaScript와 웹 브라우저의 동작 방식을 파악하는 역량이 필요한데 그들의 코드가 웹 사이트의 기능을 방해할 수도 있기 때문입니다.
저는 3월부터 6월까지 애드쉴드의 핵심 로직을 파악하고 광고 차단 규칙을 통해 광고를 차단했습니다. 물론 저 또한 본업이 있으므로 애드쉴드 차단에 24시간을 쏟는 사람은 아니기에 대개 1주일에서 2주일 정도의 간격으로 필터를 배포합니다. 하지만 배포 시간을 보면 그들이 말하는 것과는 달리 꽤 길다고 생각이 드시지 않으십니까? 이 필터 업데이트 간격의 기저에는 그들의 대응 시간이 포함되어 있습니다.
저는 애드쉴드가 한국 회사이기 때문에 한국의 새벽 시간대에 주로 필터 업데이트를 배포 요청하곤 합니다. 하지만 그 다음 날에 패치가 되는 경우는 거의 손에 꼽을 정도였습니다. 이유는 단연 그들도 사람이기 때문입니다. 탐지가 자동화되는 것이지 광고 손실을 복구하거나 하는 등 기타 작업에는 수 일 이상이 걸릴 수도 있습니다.
그렇다면 애드블록이 더 유리했습니까? 아니요
심지어 이 둘은 사실 상 불공평한 싸움을 하고 있습니다. 애드블록의 편이 비교적 훨씬 불리하다고 그 어떤 경우에도 말할 수 있습니다. 실제로 저는 6월 애드쉴드의 로직을 애드블록에서 제공하는 한정된 기능으로 간파하는 것을 멈추었는데, 성능의 측면에서 차단 비용이 너무 크게 올라갔기 때문이었습니다.
애드쉴드의 경우에는 웹 사이트에 직접 로직을 삽입합니다. 그래서 JavaScript와 웹 브라우저와 DOM API 등 모든 기능을 전체적으로 사용할 수 있죠. 하지만 애드블록의 경우엔 그렇지 않습니다. 애드블록이 만들어진 이유 중 하나는 "웹 접근성 및 사용성 개선"에 있기 때문에 애드블록을 사용하면서 불편함은 최소화되어야 합니다. 그렇기에 대부분의 광고나 웹 사이트 상의 개체를 가장 효율적으로 차단할 수 있도록 합니다. 특히나 "스크립트 삽입"은 사람의 눈에는 지연이 보이지 않을지라도 간단한 차단 방식과 비교하여 높은 자원 사용을 하므로 지양하고 있기도 합니다.
게임을 한다고 치면 애드쉴드는 각종 아이템을 전부 사용하고도 싸움에서 이기지 못한 것이나 마찬가지입니다. 쇼핑이라고 한다면 애드쉴드는 장바구니를 들고 쇼핑을 했음에도 맨손으로 집은 것만 못한 성능을 보여준 것이라 단언합니다. 이렇게 더 많은 도구를 소유하고도 업데이트 시간이 오래걸린 것은 왜 일까요? 저는 글이 작성된 시점에서 애드블록의 역할을 하는 많은 회사들에게 심지어 그 어떤 형태의 지원을 받은 것도 없습니다.
심지어는 애드쉴드의 업데이트 로그는 4월 달에 업데이트가 끊긴 상태입니다.
AdShield의 지속 가능성
애드쉴드의 지속 가능성에 대해서도 저는 의문이 있습니다.
애드블록 커뮤니티와 그들의 사업 범위
애드블록에는 강력한 "커뮤니티"가 있습니다. 저는 이 커뮤니티의 존재가 애드쉴드가 결국엔 아직도 그들이 말하는 Anti-Adblock 기술을 효과적으로 성장시키지 못한 이유라고 생각합니다. 애드쉴드와 달리 애드블록 커뮤니티는 그 규모가 굉장히 크게 차이납니다. 애드블록과 Google 등 기타 빅테크 기업과의 싸움이었다면 말이 다르겠지만 아직 애드쉴드가 애드블록 커뮤니티에 적극적으로 대응하기에는 부족합니다.
심지어 이 커뮤니티라 함은 모두가 자발적으로 서로가 서로를 유지보수하면서 성장해나갑니다. 대부분은 JavaScript와 웹 기술에 대해 토론할 수 있을 정도의 능력을 가지고 있으며 대가를 받지 않음에도 불구하고 모두가 감사하게 필터에 기여합니다. 애드쉴드는 사업 범위를 넓힐수록 더 많은 국가의 직접적으로 영향을 받게 되는 애드블록 커뮤니티에 의해서 저지당할 것입니다. 제가 그 여정에 서 있다면 분명히 쉽진 않을 것이라 말할 수 있을 것입니다.
난독화의 한계 그리고 코드 퀄리티 유지의 문제
많은 게임과 프로그램을 설계, 배포하는 회사들이 그렇듯 애드쉴드도 쉽게 무력화되지 않도록 많은 장치를 사용합니다. 하지만 가장 문제는 그들이 있는 환경이 웹이라는데에 있습니다. 다른 많은 플랫폼과 달리 웹 사이트의 코드는 직접적으로 방어되지 않습니다. 모든 코드가 결국 클라이언트 단에서 실행되며 실행 중인 코드에도 동적으로 스크립트를 삽입할 수 있기도 합니다. 개발이 편리할수록 그 반대로 뚫는 것도 편리합니다. 흔히 말하는 DX(Developer Experience)는 만드는 사람 그리고 뚫는 사람이 모두 개발자인 시점에서 둘 모두에게 이익이 됩니다.

애드쉴드는 많은 도구 중 JavaScript Obfuscator를 사용합니다. 하지만 안 뚫리는 것은 없습니다. 아래 사진은 1차적으로 자동으로 기계적인 통역을 거친 전과 후의 사진입니다. 저는 이전에도 JavaScript Obfuscator를 사용한 많은 앱들의 스크랩핑 및 크롤링 경험을 바탕으로 아래에서 아직 해독되지 않은 함수들 또한 쉽게 이전의 로직으로 자동적으로 번역하여 작업합니다. 사실 상 거의 컴파일 후 난독화 전의 코드를 얻을 수 있다는 뜻입니다.

또 JavaScript에서 구조적으로 난독화하기 힘든 것 중에는 try...catch 문이 있습니다. 안 쪽의 코드가 항상 바깥쪽의 원래 try...catch 문에 둘러싸여야 하기 때문에 남긴다면 방어자 입장에서는 코드의 구조를 노출하지만 이 것을 어렵게 난독화할지라도 읽는데에는 큰 문제가 없기 때문에 정말 필요한 것인지 깊게 따져야 합니다. 위 코드의 구조가 원본과 비슷하고 심지어 try...catch 문이 55개, 대략적인 실제 로직 구조를 유지하는 구문만 30개 이상이 발견되었습니다. 이 말은 사실 상 코드의 오류 처리에 있어서 코드 퀄리티 문제가 심각하게 의심된다는 뜻입니다.
애드블록의 기능 중에는 강제적으로 특정 로직에서 오류를 일으켜 스크립트 실행을 중단시킬 수 있는 기능이 있는데 현재에 와서는 오류 처리 수준이 조금 나아진 것으로 보이나 여전히 코드 퀄리티 자체가 개발자 입장에서 볼 때 개발이 편안한 상태로 유지되진 않고 있다고 봅니다.
애드쉴드 적용으로 서비스 적용 매체사들과 사용자들이 잃는 것들
JavaScript Obfuscator가 많은 사람들에게 어려움을 주었을지라도 사용함에 있어서 단점은 확실합니다.
성능 문제
그 중 가장 대표적인 것이 성능입니다. 코드를 난독화하면서 많은 함수와 반복문이 추가되었는데 결과적으로 단순히 코드를 몇 자 더 읽는 것 대신 수십에서 수백자 이상을 인터프리터가 부가적으로 처리하게 됩니다. 심지어 높은 수준의 난독화를 사용할 경우에는 JavaScript Obfuscator에서도 성능 문제를 심각하게 야기할 수 있다고 경고합니다.

1차적 처리를 완료한 위 사진에서 보실 수 있듯이 코드의 부분 부분을 배열로 묶고 특정 로직을 통해 포지션을 계산한 뒤에 다시 반환하게 되어 있습니다. 이렇게 되면 간단한 코드 한 줄이라도 결국 배열을 통과하고 컴퓨터는 수배에서 수십배에 달하는 추가 연산을 필요로 합니다. 하지만 결국 웹 사이트에 코드를 남긴다는 것은 모든 정보를 다 전달하는 것이나 다름이 없어 분석에는 수 초도 걸리지 않죠.
심지어는 과거에는 setTimeout
과 같은 요소를 후킹하는 필터를 막겠다고 수십개의 Timer API를 수 천 번 이상 띄운 적도 있습니다. 실시간으로 DOM API 변경 사항을 가져올 수 있는 Mutation Observer API 또한 그렇습니다. 모든 것은 웹 사이트의 로드를 심각하게 지연시키고 특히 모바일 환경에서 기기 발열을 유도합니다.
트래픽 문제
또 이런 애드쉴드의 실제 로직은 Base64로 임베딩되어 웹 사이트 내부에 첨부되는데 이 스크립트의 크기가 기존 웹 사이트의 전체 소스코드에 맞먹을 정도입니다. 오른쪽의 스크롤만 보더라도 단순히 한 문서에 대해서 2배의 트래픽을 소모한다고 볼 수 있죠.

개인정보 침해 문제
마지막으로 제가 제일 중요하게 바라보는 개인정보 침해 문제입니다. 여타 광고들은 여러분의 활동 기록을 통해 타겟팅을 합니다. 새학기 세일을 새학기 전에 하듯이 여러분의 나이, 성별, 관심사 등을 통해 시기 적절하게 광고로 이 물건을 사는 것이 어떠느냐라고 제안하는 것입니다. 하지만 이러한 추적은 언제나 겉으로는 하지 않고 여러분을 존중해주는 것처럼 이루어집니다. 특히나 이런 정보들이 단순히 애드쉴드 내부에서 사용되지 않을 수 있다는 점, 그리고 무엇을 수집하는지 명시하지도 않았죠.
21세기에 트래커가 없는 광고란 거의 존재하지 않습니다. 이들은 트래커가 차단되었다고 말하지만 실제로는 개개인마다 고유한 아이디를 부여하고 이를 쿠키에 저장합니다. 그리고 쿠키가 발견되지 않은 경우에는 심지어는 웹 사이트의 컨텐츠를 제대로 제공하지 않도록 하는 백엔드 로직 또한 갖추고 있습니다. 스크립트 상에서 오디오와 비디오 렌더링 등 웹 브라우저나 운영체제에 영향을 받은 고유한 구성을 사용하여 애드쉴드는 여러분이 재방문자인지 신규 방문자인지 탐지할 수 있습니다.
이들은 여러분이 상상하는 이상으로 개인정보를 당연하듯이 침해하며 앞으로 상상 이상의 일을 벌일 수도 있습니다. 현재는 애드쉴드 내부에서만 광고 네트워크와 로직이 동작하고 있지만 이것이 Google과 Facebook의 광고 네트워크와 공유된다고 생각해보십시오.
개발자 커뮤니티에 대한 적대적 자원 남용
개발자 커뮤니티는 애드쉴드가 애드블록을 차단을 회피하려 든 조치들에 의해서 많은 피해를 입기도 했습니다. 그 중 대표적으로 NPM 등 무료 리소스를 남용 조치하였습니다.


위 사진에서 보실 수 있다시피 @adshield/web-script
를 이름만 다른 패키지로 무려 23개나 배포한 것을 볼 수 있습니다. 이렇게 배포된 패키지는 단순히 NPM 뿐만 아니라 NPM을 소스로 삼고 있는 많은 CDN 제공자에게도 영향을 끼치게 됩니다. 저는 이것이 NPM의 약관을 위반하고 있다 생각합니다.
Packages that function primarily as ads, with only placeholder or negligible code, data, and other technical content.
이들이 업로드한 것은 광고 스크립트의 트래커 부분으로 정확하게 광고 스크립트의 일부라고 볼 수 있습니다.
Content that exists only to "reserve" a name, whether a package name, user name, or organization name. The Dispute Policy governs how npm handles such cases of "squatting".
이들이 업로드한 것은 모두 같은 스크립트로 단순히 다른 모든 스크립트가 자리를 이유없이 채우고만 있습니다.
Content in violation of law, infringing the intellectual property rights of others, violating the privacy or other rights of others, or in violation of any agreement with a third party. This includes code that violates a public license for others' work.
그들의 적대적인 트래킹 스크립트는 개인정보 침해에도 해당이 된다고 생각합니다.
Content containing malicious computer code, such as computer viruses, computer worms, rootkits, back doors, or spyware. This includes content submitted for research purposes. Tools designed and documented explicitly to assist in security research are acceptable, but exploits and malware that use the npm registry as a deployment or delivery vector are not.
또한 이러한 스크립트는 제 3자 CDN 제공자를 통해 실제 사용자에게 제공되는 경우가 많은데 이 때 NPM에서는 의도적이지 않게 사용자의 개인정보 침해 그리고 광고 처리 시스템에 가담하는 전달 벡터의 역할을 한다고 볼 수 있습니다.
- https://docs.npmjs.com/policies/open-source-terms#acceptable-content
- https://docs.npmjs.com/policies/open-source-terms#commercial-content
NPM은 Node.JS 커뮤니티의 사실 상 공적인 패키지 소스로 저희가 현재 이용하고 있는 웹 기술이 발달 과정에 빼놓을 수 없는 존재입니다. 커뮤니티를 성장시키고 무료로 이 모든 것을 제공하기 위해 NPM은 Microsoft에 판매되는 등 이전에 고통을 수반하는 결정을 한 적이 있습니다. 하지만 애드쉴드는 단순히 광고 차단 우회를 넘어서 그 이상의 조치를 아무런 윤리적 책임감없이 다시 커뮤니티에 적대적 행위를 삼았습니다. 그리고 저는 이것이 절대 괜찮다고 생각하지 않습니다. 여전히 애드쉴드는 스스로를 최고의 윤리 기업이라고 말합니다.
지금은 이미 애드블록 커뮤니티가 만든 필터에 의해 저지되어 실질적으로 사용되진 않고 있지만 앞으로 이런 일은 단순히 애드블록과의 대응이라는 주제를 떠나서 있어서는 안 될 것입니다.
정말 좋은 광고와 매체사 운영자 분들의 "광고를 보여줄 권리"는 광고만 포함하는게 아닙니다
정말로 단순히 광고를 게시하는 행위는 단지 페이지 뷰나 클릭 수에 따라 내 통장에 돈이 꽂히게 하는 행위가 아닙니다. 물론 현대 사회에서 대규모의 트래픽을 가지고 가장 돈을 벌기에 좋은 방법 중 하나라는데에는 동의합니다. 하지만 광고 스크립트를 웹 사이트에 삽입하는 순간부터 빅테크 기업에게 적절한 광고를 보여준다는 명목으로 사용자의 일수거일투족을 감시할 수 있는 권한을 주는 것이나 다름없는 결정이 될 것입니다. 물밑으로는 광고를 로드하며 동시에 사용자 정보는 유출되고 기존에는 여러분의 웹 사이트를 사용하면서는 수집이 불가능했던 그 정보의 빈공간을 직접 여러분이 한 두 푼으로 채워주고 있는 것입니다.
또 사용자로 더 많은 광고를 보는 것이 당연해져서는 안 됩니다. 컴퓨팅과 네트워크 비용은 기술이 발전함에 따라 해가 갈수록 저렴해지고 있으며 이것은 인터넷 붐이 터졌을 때부터 그랬습니다. 우리는 현대 사회에서 얼마나 적은 돈으로 사업을 시작할 수 있고 손해를 보는 장사는 없다는 점을 다시 상기시켜야 합니다. 또 광고 운영사들이 그들이 보여주는 광고가 특히 맞춤 서비스라면 얼마나 사용자 경험을 망치고 개인정보를 침해하는지 알아야 합니다. 그들의 권리가 광고를 보여줄 권리라면 저희는 광고에게 저희 개인정보를 제공할지 선택할 권리도 있어야 합니다. 현재의 광고가 미치는 가장 큰 문제점은 광고와 개인정보가 선택권없이 동시에 제공된다는 것입니다. 그리고 동의하지 않으면 사용자를 고립시킬 정도로 빅테크 기업의 점유율은 높습니다.
Carbonads는 개인적으로 광고 경험이 제일 좋았던 회사 중 하나입니다. Semantic-ui.com에도 삽입되어 있는 광고인데 기존 UI와 통일감을 주면서 빈 공간을 잘 활용하였습니다. 또 여백에서도 주로 마우스가 있는 공간에는 광고 배치가 없어 불안감이 적었죠.
뿐만 아닙니다. Yahoo Finance의 모바일 광고를 보신 적이 있나요? UI와 잘 통합되어 있으면서도 기존의 사용자 경험을 방해하지 않습니다.

이러한 광고는 실질적으로 쓰는데 유무와 상관없이 사용자 경험이 달라지지 않은 광고들입니다. 사용자에게 이런 광고가 어떻겠냐고 친절하게 묻는 메세지와 강제적인 기기 정보 수집 대신 계정 단위로 이루어지는 사용자 개인화 경험까지 모든 것은 서비스 사용 전 충분히 숙지할 수 있고 사용자가 통제 가능한 범위에 있습니다. 다른 광고가 구매를 강요하는 광고라면 이런 광고는 제안을 하는 광고라고 봅니다. 같은 질문이라도 다른 스탠스에 놓인 것입니다.
물론, 애드블록 커뮤니티는 판매가 되는 제품도 있고 개인정보에 민감한 사람도 있으며 정말로 많은 사람들이 이용하고 있으므로 광고라면 차단하려고 할 것입니다. 하지만 합당한 이유가 있다면 그에 공감하며 광고를 용인하는 사용자도 많이 있습니다. 그리고 몇몇 웹 사이트 운영자는 애드블록을 차단할 때 적대적으로 차단하지 않기도 하며 사용자들의 마음을 이끌어내기도 합니다.
애드블록과 애드쉴드 뿐만 아니라 많은 웹 기술을 기반으로 서비스하는 기업들 사이에는 이런 사용자 경험과 사용자 통제권 문제가 있습니다. 시각을 달리 한다면 분명히 광고주는 더 높은 구매율을 만들고 사용자는 더 많은 통제권을 가지면서 서로가 만족하는 지점을 찾을 수 있을 것입니다. 광고는 웹을 굴러가게 하는 하나의 거대한 척도이기도 하니깐요.
사업자에게는 허황된 이야기일 수 있지만 더 나은 웹 세상을 위해서는 그리고 사용자 중심의 제품이라면 꼭 필요한 변화일 것이라고 생각합니다. 기나긴 생각을 들어주셔서 감사합니다.
- 저는 특정 애드블록 커뮤니티를 대변하지 않는 개인 의견입니다.
- 저는 특정 애드블록 커뮤니티와 그 어떤 대가를 주고 받지 않습니다.
- 저의 가치관은 독립적입니다.
- 저는 애드쉴드와 관련되어 있지 않은 개인입니다.