Post

봇 감지하는 서버를 만들어 테스트해보자

봇을 감지하는 간단한 서버를 만들어 확인해보자

봇 감지하는 서버를 만들어 테스트해보자

봇 감지하는 서버를 만들어 테스트해보자

봇을 감지하는 간단한 서버를 만들어 확인해보자

1. 서론 (Introduction)

  • 문제/상황 (Problem):
    • 크롤링 기술이 발전함에 따라 서버 측에서도 무분별한 데이터 수집을 막기 위한 정교한 봇 탐지 기법이 도입되고 있다.
  • 목적 (Purpose):
    • 요청 헤더와 핑거프린팅 데이터를 분석하여 자동화된 도구(Bot)를 판별하는 보안 서버를 구축하고 감지 원리를 이해한다.
  • 대상 (Target Audience):
    • 웹 보안 및 탐지 우회 기술에 관심이 있는 개발자나 자신의 사이트를 봇으로부터 보호하려는 엔지니어

2. 방법 및 과정 (Methods & Process)

  • 배경 조사 및 데이터 (Data Collection):
    • User-Agent, Client Hints, Sec-Fetch-* 등 현대적인 브라우저가 전송하는 표준 헤더 세트를 조사하였다.
탐지 항목설명판별 기준
User-Agent 분석요청 라이브러리 명칭 포함 여부 확인requests, httpx 등 특정 문자열 포함 시 봇 의심
Client Hints 검증브라우저 엔진 및 플랫폼 상세 정보 확인필수적인 Sec-CH-UA 헤더 누락 시 비브라우저 판단
Fetch Metadata요청의 출처와 목적지 정보 확인Sec-Fetch-Site 등의 메타데이터 부재 시 자동화 도구 의심
필수 헤더 누락Accept-Language 등 표준 헤더 확인브라우저에서 기본적으로 보내는 헤더 부재 시 감지
JS 핑거프린팅navigator.webdriver 속성 등 확인브라우저 내부 속성을 통한 자동화 엔진 식별
  • 접근 방법 (Approach Methods):
    • [방법 1]: Flask를 사용하여 HTTP 요청 헤더를 실시간으로 분석하는 보안 미들웨어 로직을 구현한다.
    • [방법 2]: 분석 결과를 HTML 메타 태그와 HTTP 응답 헤더에 주입하여 클라이언트에게 감지 상태를 리포트한다.
  • 분석 및 해결 프로세스 (Analysis Flow):
    • 도구/기술: Python, Flask, Jinja2
    • 주요 단계: DemoServer 클래스 설계 $\rightarrow$ 다단계 요청 분석 로직(_analyze_request) 구현 $\rightarrow$ 봇 신뢰도 점수 산출 엔진 개발 $\rightarrow$ 동적 템플릿 렌더링 $\rightarrow$ 멀티 스레드 서버 구동
    • 결과 도출 및 검증: 다양한 클라이언트(브라우저, requests 스크립트 등)로 접속하여 서버의 봇 감지 로그가 정확히 기록됨을 확인한다.

3. 결과 (Results)

  • 분석 결과 요약:
    • 단순한 User-Agent 비교를 넘어, 현대 브라우저의 고유한 헤더 조합(Client Hints 등)을 검증함으로써 봇 판별의 정확도를 높일 수 있었다.
    • 감지된 신호를 바탕으로 ‘Yes’, ‘Maybe’, ‘No’의 3단계 봇 상태를 정의하고, 감지 근거를 상세 로그로 남겨 분석 편의성을 확보하였다.

4. 인사이트 및 액션 (Insights & Action)

  • 인사이트 (Insight):
    • 기존 웹 데이터 획득 방식이 봇으로 감지되는지 확인해보자. 해당 봇 감지를 우회할 수 있는 것을 고민해보자.
    • 봇 감지는 창과 방패의 싸움이며, 서버가 확인하는 단서들을 이해하는 것이 우회 기술의 핵심이다.
  • 실행 방안 (Action Plan):
    • 구축된 보안 서버를 벤치마킹하여 현재 운영 중인 서비스의 비정상 접근 탐지 시스템을 강화한다.
  • 한 줄 결론 (Key Takeaway):
    • 서버 측 보안 가시성을 확보하면 보다 정교한 봇 차단 및 트래픽 관리가 가능하다. 샘플 코드
  • 다음 스텝 (Next Step):
    • Playwright와 httpx를 결합한 하이브리드 방식으로 이러한 탐지 시스템을 효율적으로 우회하는 기법을 실무에 적용한다.
This post is licensed under CC BY 4.0 by the author.