- AWS Lambda와 Headless Chrome만으로도 Google SERP를 주당 수백만 개 수집할 수 있었지만, 강하게 보호된 사이트 앞에서는 클라우드 기반 봇 구조가 쉽게 한계에 부딪힘
- Lambda 재호출과 여러 리전을 활용하면 16개 리전 기준 약
16 * 250 = 4000개의 공개 IP를 동시에 쓸 수 있었고, 이는 느슨한 대상에는 충분했음 - DataDome, Akamai, Imperva 같은 안티봇 업체는 브라우저 설정 불일치, 자동화 흔적, 지문 정보를 추적하며, 실제 난제는 탐지 자체보다 오탐률을 낮추는 것에 가까움
- 더 덜 탐지되는 구조로 Docker나 클라우드 서버 대신 실제 Android 기기와 모바일 IP를 쓰는 방식을 제안하며, 4G/5G/LTE IP는 대도시의 많은 정상 사용자가 공유해 차단이 어려움
- 실제 기기 농장은 기기 구매, 도시별 공간 임대, 현장 유지보수, 하드웨어 장애를 감수해야 하고, Android 에뮬레이터도 에뮬레이션 탐지 위험이 남아 있음
AWS Lambda로 만든 대량 스크레이핑 구조
- 과거 스크레이핑 서비스 운영 당시 Google SERP를 주당 최대 수백만 개 수집했지만, Brightdata, Packetstream, Oxylabs 같은 프록시 제공업체는 쓰지 않았음
- 같은 프록시 대역폭을 공유하는 다른 고객을 신뢰하기 어렵다고 봄
- 공개 정보에 대한 비 DoS 스크레이핑은 괜찮지만, 광고 사기, 소셜 미디어 스팸, 자동 SQL injection, XSS 같은 웹 공격과는 선을 그음
- 프록시 서비스 비용도 부담으로 작용했음
- 실제 구성은 AWS Lambda에 Headless Chrome을 넣고, puppeteer-extra와 chrome-aws-lambda로 300초 동안 브라우저를 실행하는 함수였음
- Google은 자체 검색엔진에 대해 봇 차단을 강하게 하지 않고 주로 IP 기준 속도 제한을 적용하므로, Google SERP만 보면
curl로도 가능했을 수 있다고 봄 - Lambda에서는 함수 호출 3번 뒤 새 공개 IP를 얻고, 1000개 함수를 동시에 호출하면 약 250개 공개 IP에 도달했다고 함
- 16개 리전을 쓰면 동시에 약
4000개의 공개 IP를 사용할 수 있었다고 계산함 - 공유 데이터센터 IP였지만 Google SERP를 주당 수백만 개 수집하기에는 충분했음
- 16개 리전을 쓰면 동시에 약
- Google Cloud Platform도 시도했으나, Google은 AWS 트래픽보다 자사 클라우드 인프라 트래픽을 더 강하게 차단했음
- 이 경험은 2019년과 2020년 기준이며, 이후 상황은 바뀌었을 수 있음
클라우드 봇이 막히는 이유
- Lambda 기반 구조는 Google, Bing, Amazon처럼 어느 정도 스크레이핑을 허용하는 대상에는 작동할 수 있지만, 강한 보호를 적용한 사이트에는 맞지 않음
- DataDome, Akamai, Imperva 같은 안티봇 업체는 브라우저 지문, 설정 불일치, 인간이 조작한 브라우저와 다른 흔적을 찾음
- 탐지 기술의 예시는 넓게 퍼져 있음
- 봇 탐지 방법은 매우 많고, 거의 모든 봇 아키텍처는 어느 정도 탐지에 취약함
- 봇을 만드는 쪽이 탐지하는 쪽보다 어렵고, 안티봇 업체의 더 큰 과제는 대부분의 봇을 잡는 것보다 오탐률을 낮추는 것에 가까움
탐지되기 쉬운 경제적 구조
- 대량 스크레이핑을 하려는 봇 개발자는 브라우저를 Docker 컨테이너에 넣고 Docker Swarm이나 Kubernetes로 오케스트레이션하는 경우가 많음
- 이런 봇은 Hetzner, AWS, DigitalOcean 같은 클라우드 제공업체에서 호스팅되는 일이 잦음
- 이 구조는 인간 사용자의 환경과 크게 다름
- 정상 사용자가 Hetzner VPS의 Docker 컨테이너 안에서 Instagram을 탐색하는 상황은 자연스럽지 않음
- 성공적인 스크레이핑 규칙으로 두 가지를 제시함
- 두 번째로 중요한 규칙: 브라우저 설정에 대해 거짓말하지 말 것
- 가장 중요한 규칙: 들키지 않을 때만 브라우저 설정에 대해 거짓말할 것
실제 Android 기기 농장
- 난독화된 안티봇 지문 채취 라이브러리를 역공학하기 어렵기 때문에, 실제 기기를 스크레이핑에 쓰는 접근을 제안함
- 가정한 구조는 저가 Android 기기 500대를 사고, 지문 다양성을 위해 5개 제조사 정도에서 기기를 섞는 방식임
- 저가 Android 기기는 대당 58달러부터 시작함
- 한 번에 100대를 사면 큰 할인을 받을 수 있다고 봄
- 각 기기에 저렴한 데이터 요금제를 붙이고, DeviceFarmer/stf로 제어함
- London, Paris, Boston, Frankfurt, Los Angeles 같은 5개 주요 도시에 각각 100대씩 배치하고, 모바일 셀룰러 안테나가 가까운 저렴한 저장 공간을 임대하는 구상임
- 기기에는 가벼운 Android Go를 설치하고 불필요한 요소를 제거한 뒤 전원에 연결함
- 5분마다 비행기 모드를 켰다 끄면 4G Carrier Grade NAT를 통해 새 IP를 받을 수 있음
- 모바일 IP 주소는 대도시에서 최대 수십만 명의 정상 사용자가 공유하므로 실질적으로 차단하기 어려움
- 예시로 Instagram이 일부 스팸 사용자를 이유로 LA의 20만 명을 차단하지는 않을 것이라고 봄
- CGN에서 IPv4 주소가 차단되면 전체 가입자 기반에 영향이 갈 수 있다는 Ofcom 문서를 인용함
- IPv6는 주소 공간이 너무 넓어 대부분의 안티봇 업체가 IPv6 주소에 IP 평판을 거의 또는 전혀 부여하지 않는다고 봄
실제 기기 구조의 탐지 포인트와 운영 부담
- 실제 기기를 바닥에 하루 종일 놓아두면 회전이나 움직임이 없는 상태가 지속되므로,
deviceorientation과devicemotionJavaScript 이벤트를 커널 수준에서 스푸핑해야 함- 웹사이트는 Android의 회전과 속도 데이터에 권한 요청 없이 접근할 수 있음
- 이 문제를 제외하면 해당 구조를 봇 탐지 시스템이 어떻게 차단할 수 있을지 명확하지 않다고 봄
- 운영 부담은 작지 않음
- Android 기기 500대를 구매해야 함
- 주요 도시에 저장 공간을 임대해야 하며 비용이 듦
- 5개 도시에서 기기 농장 문제를 고칠 사람이 필요함
- 하드웨어를 다뤄야 하며 지속적으로 문제가 생길 수 있음
- 이런 구조는 큰 프로젝트가 되며, 유지보수에 수천 달러가 들 수 있다고 봄
Android 에뮬레이터라는 대안
- 실제 Android 기기 대신 Android 에뮬레이터를 쓰는 편이 더 낫다고 봄
- 비용은 줄일 수 있지만, 안티봇 업체가 에뮬레이션 환경을 찾아낼 수 있음
- 가능한 탐지 방식은 여러 가지임
- 브라우저 기반 red pill로 브라우저가 에뮬레이션 환경에서 실행 중임을 드러낼 수 있음
- 브라우저 기반 포트 스캔으로 에뮬레이트된 Android 기기에서만 실행되는 포트나
adb같은 서비스를 찾을 수 있음 - Google이 모바일 기기 전체에 광고 ID를 설정할 수 있으며, 이 ID가 없거나 항상 같으면 의심 신호가 될 수 있음
- Social Media Login Detection으로 Gmail이나 YouTube 계정 로그인 여부를 확인할 수 있고, Android에서 Google 계정 로그인이 없으면 의심 대상이 될 수 있음
- 그 밖에도 에뮬레이트된 Android 기기 탐지 기술이 많이 있을 수 있음
- Android 에뮬레이터는 불완전할 가능성이 높고, 그 불완전성이 모바일 브라우저의 방대한 JavaScript API를 통해 드러날 수 있음
- 그래도 에뮬레이션 접근을 선호하며, 강력한 서버 몇 대에 4G 동글을 연결하는 구성을 제안함
- proxidize.com은 4G 모바일 프록시를 제공하지만, 프록시는 그 자체로 탐지 가능하므로 Android 에뮬레이터에서 4G 동글을 직접 쓰고 싶다고 함
- 최종 구조는 지역별 스크레이핑 스테이션 형태임
- 한 지리적 위치에 4G 동글 50개가 연결된 강력한 스크레이핑 서버 1대를 설치함
- 각 서버에서 50~100개의 에뮬레이트된 Android 기기를 실행함
- 이런 스테이션을 5개 주요 도시에 배치함
- 간단한 명령·제어 서버가 5개 스크레이핑 스테이션을 오케스트레이션함