2025년 Browser-as-a-Service 스크래퍼 탐지 방법

발행: (2025년 12월 17일 오전 04:41 GMT+9)
10 min read
원문: Dev.to

Source: Dev.to

위에 제공된 소스 링크 외에 번역할 텍스트가 없습니다. 번역이 필요한 전체 내용을 알려주시면 한국어로 번역해 드리겠습니다.

브라우저‑as‑Service의 부상

BaaS 플랫폼이 실제로 하는 일

Browser‑as‑a‑Service 플랫폼은 자동화를 대규모로 수행할 수 있도록 클라우드에 호스팅된 브라우저 인프라를 제공합니다. 원시 HTTP 요청을 보내는 전통적인 스크래핑 도구와 달리, BaaS 플랫폼은 실제 Chromium 브라우저를 실행하여:

  • JavaScript 실행
  • 페이지 렌더링
  • 정당한 사용자와 동일하게 세션 유지

2025년 주요 플레이어

PlatformFunding / StatusKey Features
Browserbase$67.5 M 총 펀딩 (시장 리더)관리형 헤드리스 브라우저, 세션 지속성, 프록시 지원, AI 에이전트를 위한 Stagehand SDK. Perplexity, Vercel, 11x 등에서 사용.
SkyvernY Combinator‑지원컴퓨터 비전과 LLM 결합; WebBench 벤치마크에서 64.4 % 정확도; 양식 입력, 로그인 자동화, RPA에 강점.
Hyperbrowser프라이빗 라운드 펀딩“고급 탐지 시스템을 갖춘 웹사이트에서 작동하는 AI 에이전트를 위해 설계됨.” 은신성, 지속성, 탐지 회피에 초점.
Browser Use오픈‑소스다양한 AI 프레임워크와 통합되는 자동화 원시 기능.

불편한 진실: 전통적인 봇 탐지는 이를 잡아낼 수 없습니다.
하지만 행동 분석은 가능합니다.

비즈니스 모델: 스텔스가 기능

These platforms compete on evasion capability.

  • Browserbase: “Stealth mechanisms to avoid bot detection.”
  • Hyperbrowser: “Engineered to stay undetected and maintain stable sessions over time, even on sites with aggressive anti‑bot measures.”

Stealth is the product.

BaaS 플랫폼이 전통적인 탐지를 회피하는 방법

// What detection checks for
if (navigator.webdriver === true) {
  flagAsBot();
}

// How BaaS platforms evade
Object.defineProperty(navigator, 'webdriver', {
  get: () => undefined
});

동적 User‑Agent 생성

Stytch의 연구에 따르면 Browserbase는 각 세션마다 약간씩 다른 User‑Agent를 생성합니다—때로는 기본 Chromium 런타임과 일치하고, 때로는 의도적으로 속이는 방식입니다. 이로 인해 탐지 가능한 불일치가 발생합니다: User‑Agent는 Chrome 120을 주장하지만 TLS 지문은 실제 Chromium 버전을 드러냅니다.

JavaScript API 패치

// Chrome object spoofing
window.chrome = {
  runtime: {},
  loadTimes: function () {},
  csi: function () {},
  app: {}
};

// Plugins array spoofing
Object.defineProperty(navigator, 'plugins', {
  get: () => [
    { name: 'Chrome PDF Plugin', filename: 'internal-pdf-viewer' },
    { name: 'Chrome PDF Viewer', filename: 'mhjfbmdgcfjbbpaeojofohoefgiehjai' },
    { name: 'Native Client', filename: 'internal-nacl-plugin' }
  ]
});

Puppeteer‑Stealth는 17개의 별도 회피 모듈을 포함하고 있으며, BaaS 플랫폼은 여기에 자체적인 개선을 추가합니다.

왜 스텔스 모드가 행동 분석에 실패하는가

BaaS 플랫폼은 정적 지문 채취 문제를 해결했지만, 인간 행동을 완전히 흉내낼 수는 없습니다.

마우스‑이동 엔트로피

인간의 마우스 움직임은 혼돈적입니다: 과도 이동, 경로 교정, 불규칙한 가속, 곡선 경로 등. 자동화는 효율적이고 직선적인 경향이 있습니다.

MetricHumanBaaS Automation
movement_count1478
linear_path_ratio0.12 (대부분 곡선)0.91 (직선)
velocity_variance0.84 (매우 변동)0.08 (일정)
overshoots40

“인간‑같은” 무작위화를 적용하더라도, 통계 분석을 통해 합성된 패턴이 드러납니다.

클릭‑타이밍 분포

인간의 반응 시간은 오른쪽으로 치우친 분포를 보이며 (≈ 200‑400 ms) 자동화 클릭은 일관되게 빠르고 변동성이 적습니다.

// Human click timing (ms from target appearing)
[247, 312, 289, 198, 267, 334, 223, 278, 301, 256]
// Mean: 271 ms, Std Dev: 42 ms

// BaaS automation click timing
[150, 180, 160, 170, 155, 175, 165, 145, 185, 158]
// Mean: 164 ms, Std Dev: 13 ms — too consistent

허니팟 링크 효과

<a href="/admin/backup" style="display:none;">Admin Backup Portal</a>

DOM을 파싱하는 자동화는 이 링크를 클릭하게 되며, 자신을 드러내게 됩니다.

Source:

실제로 작동하는 탐지 기법

TLS/JA3/JA4 지문 분석

모든 TLS 핸드셰이크는 실제 클라이언트 신원을 드러냅니다. 암호 스위트, 순서, 확장 기능 및 프로토콜 버전이 고유한 지문을 만듭니다.

Real Chrome 120 JA4:
t13d1517h2_8daaf6152771_b0da82dd1658

Browserbase session claiming Chrome 120:
t13d1516h2_8daaf6152771_a9f2e3c71b42
// Different hash reveals different TLS stack

사용자‑에이전트가 Chrome 120을 주장하더라도 TLS 지문은 실제 Chromium 버전을 보여줍니다. 이 불일치는 강력한 봇 신호가 됩니다. (TLS 지문에 대한 심층 분석)

브라우저 기능 검증

주장된 브라우저는 특정 기능을 지원해야 합니다:

// If User-Agent claims Chrome 120
const expectedFeatures = {
  'Array.prototype.toSorted': true,      // Added Chrome 110
  'Array.prototype.toReversed': true,   // Added Chrome 110
  'structuredClone': true,              // Added Chrome 98
};

for (const [feature, expected] of Object.entries(expectedFeatures)) {
  const actual = eval(`typeof ${feature} !== 'undefined'`);
  if (actual !== expected) {
    flagAsInconsistent('capability_mismatch', feature);
  }
}

JavaScript 환경 일관성

스텔스 패치는 흔적을 남깁니다:

// Check if navigator.webdriver was patched
const descriptor = Object.getOwnPropertyDescriptor(navigator, 'webdriver');

if (descriptor && descriptor.get &&
    descriptor.get.toString().includes('undefined')) {
  flagAsStealth();
}

// Check for override detection
const nativeCode = /\[native code\]/;
if (!nativeCode.test(navigator.plugins.toString())) {
  flagAsStealth();
}

Canvas/WebGL 지문 이상

BaaS 플랫폼은 GPU 없이 클라우드 인프라에서 실행됩니다. 소프트웨어 렌더링을 사용하므로 독특한 지문이 생성됩니다:

function detectSoftwareRendering() {
  const canvas = document.createElement('canvas');
  const gl = canvas.getContext('webgl');
  const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
  const renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);

  const softwareIndicators = [
    'SwiftShader', 'llvmpipe', 'Mesa',
    'Software Rasterizer', 'ANGLE'
  ];

  return softwareIndicators.some(i => renderer.includes(i));
}

실제 사용자는 실제 GPU를 가지고 있습니다. 클라우드 브라우저는 소프트웨어 렌더링을 사용합니다.

다중 신호 상관관계

단일 신호만으로는 확정적인 판단을 내리기 어렵습니다. 약한 신호들을 결합해 강력한 판정을 내립니다:

class BotDetector {
  constructor() {
    this.weights = {
      tls_mismatch: 40,
      software_renderer: 35,
      stealth_patches: 30,
      behavioral_anomaly: 50,
      honeypot_interaction: 100,
      mouse_entropy_low: 40
    };
  }

  calculateScore(signals) {
    return Object.entries(signals)
      .filter(([_, detected]) => detected)
      .reduce((sum, [signal]) => sum + (this.weights[signal] || 0), 0);
  }

  getVerdict(score) {
    if (score >= 100) return 'block';
    if (score >= 60)  return 'challenge';
    if (score >= 30)  return 'flag';
    return 'allow';
  }
}

직접 구현하고 싶지 않다면, WebDecoy의 SDK가 점수 계산, SIEM 연동 및 응답 자동화를 바로 제공해 줍니다.

구현 권장 사항

허니팟부터 시작

허니팟은 가장 높은 신뢰도의 신호를 제공하며 오탐이 없습니다. 즉시 배포하세요:

  • 모든 입력에 반응하는 숨겨진 폼 필드
  • 엔드포인트를 잡는 보이지 않는 링크
  • 파서만 볼 수 있는 CSS 숨김 콘텐츠

탐지 방법 계층화

방법일반적인 효과
허니팟오탐이 없으며 70‑80 % 포착
TLS 지문 채취빠르고 서버 측
행동 분석정교한 회피 탐지
다중 신호 상관관계최고 정확도

점진적 챌린지 사용

신뢰 수준조치
낮음기록 및 관찰
중간속도 제한
높음CAPTCHA 챌린지
확정 (허니팟)차단

The Arms Race Continues

Browser‑as‑a‑Service는 사라지지 않을 것입니다. 시장은 성장하고, 자금은 흐르며, 플랫폼은 점점 더 정교해지고 있습니다.

하지만 근본적인 비대칭은 행동 분석에 투자하는 방어자에게 유리합니다. BaaS 플랫폼은 기술적 지문을 위조할 수 있지만, 인간임을 위조할 수는 없습니다.

문제는 BaaS 스크래퍼를 탐지할 수 있느냐가 아니라, 현재 사용 중인 솔루션이 이 위협에 대비하도록 설계되었는가 입니다.

Originally published at webdecoy.com

Want to catch BaaS scrapers without building it yourself? Try WebDecoy — deploys in 5 minutes.

More on this topic

What’s your experience with BaaS scrapers? Drop a comment below.

Back to Blog

관련 글

더 보기 »