2025년 Browser-as-a-Service 스크래퍼 탐지 방법
Source: Dev.to
위에 제공된 소스 링크 외에 번역할 텍스트가 없습니다. 번역이 필요한 전체 내용을 알려주시면 한국어로 번역해 드리겠습니다.
브라우저‑as‑Service의 부상
BaaS 플랫폼이 실제로 하는 일
Browser‑as‑a‑Service 플랫폼은 자동화를 대규모로 수행할 수 있도록 클라우드에 호스팅된 브라우저 인프라를 제공합니다. 원시 HTTP 요청을 보내는 전통적인 스크래핑 도구와 달리, BaaS 플랫폼은 실제 Chromium 브라우저를 실행하여:
- JavaScript 실행
- 페이지 렌더링
- 정당한 사용자와 동일하게 세션 유지
2025년 주요 플레이어
| Platform | Funding / Status | Key Features |
|---|---|---|
| Browserbase | $67.5 M 총 펀딩 (시장 리더) | 관리형 헤드리스 브라우저, 세션 지속성, 프록시 지원, AI 에이전트를 위한 Stagehand SDK. Perplexity, Vercel, 11x 등에서 사용. |
| Skyvern | Y 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 플랫폼이 전통적인 탐지를 회피하는 방법
navigator.webdriver 제거
// 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 플랫폼은 정적 지문 채취 문제를 해결했지만, 인간 행동을 완전히 흉내낼 수는 없습니다.
마우스‑이동 엔트로피
인간의 마우스 움직임은 혼돈적입니다: 과도 이동, 경로 교정, 불규칙한 가속, 곡선 경로 등. 자동화는 효율적이고 직선적인 경향이 있습니다.
| Metric | Human | BaaS Automation |
|---|---|---|
movement_count | 147 | 8 |
linear_path_ratio | 0.12 (대부분 곡선) | 0.91 (직선) |
velocity_variance | 0.84 (매우 변동) | 0.08 (일정) |
overshoots | 4 | 0 |
“인간‑같은” 무작위화를 적용하더라도, 통계 분석을 통해 합성된 패턴이 드러납니다.
클릭‑타이밍 분포
인간의 반응 시간은 오른쪽으로 치우친 분포를 보이며 (≈ 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.
- Bot Scanner Pro: Catching Stagehand and Browserbase
- TLS Fingerprinting with WebDecoy SDK
- Headless Browser Detection: Playwright, Puppeteer, Selenium
What’s your experience with BaaS scrapers? Drop a comment below.