- 공개 웹사이트를 과도하게 요청해 DDoS처럼 작동하는 스크레이퍼 봇 문제를 다루며, 이를 역이용해 시간을 낭비시키는 실험적 접근 제시
-
Markov 연쇄 기반 텍스트 생성기를 만들어
.php파일처럼 보이는 가짜 데이터를 생성, 악성 봇이 이를 다운로드하도록 유도 - 이후 정적 콘텐츠 서버를 구축해 소설 Frankenstein 문단을 무작위로 제공, 링크 구조를 통해 크롤러가 폭발적으로 확산되도록 설계
- 모든 페이지에
noindex, nofollow속성과 요청 카운터를 추가해 정상 검색엔진은 제외하고 규칙을 어기는 봇만 포착 - 실험 결과는 흥미로웠으나, Googlebot 오탐 위험으로 실제 서비스에는 적용하지 않고, 학습·실험용 프로젝트로 유지
스크레이퍼 봇 문제와 대응 아이디어
- 스크레이퍼가 의도치 않게 소규모 웹사이트에 DDoS 수준의 부하를 유발
- 일부 운영자들이 보호 방법을 문의했으나, 이번 글은 “방어가 아닌 역공” 에 초점
- 다른 개발자가 Markov 연쇄로 무한한 가짜 데이터를 생성해 봇을 속이는 사례를 보고 직접 실험 시작
Markov 연쇄 기반 가짜 PHP 생성기
- Rust로 Markov 연쇄 학습기를 구현해 임의 텍스트 데이터를 기반으로 현실감 있는 콘텐츠 생성
-
.env,.aws,.php등 취약 경로를 노리는 악성 봇을 대상으로, 실제처럼 보이지만 무의미한 PHP 코드 제공 - 파일 크기를 2KB에서 10MB까지 늘려 봇의 리소스 낭비 유도
- 예시 출력은 WordPress 함수명과 주석이 섞인 그럴듯한 가짜 PHP 코드 형태
- 목표는 봇의 시간·자원 낭비와, 공격자가 실제 취약점을 찾으려 시간을 허비하게 만드는 것
효율성과 정적 데이터 제공 실험
- VPS에서 1MB 이상 파일을 제공하자 응답 지연과 서버 부하 증가 발생
- 이를 해결하기 위해 정적 사이트 형태의 “garbage server” 구축
- Frankenstein 소설 전체를 메모리에 로드하고, 요청마다 임의의 문단 4개를 반환
- 각 페이지 하단에 5개의 링크를 추가해 폭발적 크롤링 확산(5배수 증가) 유도
- 결과물은 https://herm.app/babbler/ 에서 확인 가능
설계 세부와 운영 방식
- 선택한 소설은 공개 도메인이며, 할로윈 시기에 작업한 점과 AI와 Frankenstein의 유사성을 이유로 사용
- 모든 페이지에
noindex,nofollow속성을 부여해 규칙을 어기는 봇만 포착 - 각 페이지 하단에는 요청 횟수 카운터 표시, 메모리 기반으로 배포 시 초기화
-
.php요청용 별도 서버도 구성해, 실제 PHP 파일을 메모리에서 무작위로 제공 - “Garbage for the garbage king!”이라는 문구로 프로젝트를 요약
위험성과 제한 사항
- 이 시스템은 실제 서비스에 적용 시 검색엔진 오탐 위험 존재
- Googlebot이 잘못된 엔드포인트를 긁으면 스팸 사이트로 분류될 가능성
- 검색 노출 저하나 Chrome 경고 표시로 이어질 수 있음
- 따라서 검색 의존 사이트에는 비추천, 실험용 프로젝트로만 운영
-
.php용 babbler는 HTML이 아니므로 Googlebot 영향 없음, 악성 봇만 대상
마무리와 개인적 결론
- 악성 스크레이퍼를 유인하기 위해 블로그에 숨겨진 링크(rel="nofollow") 추가
- VPS의 트래픽 한도 초과 시 Cloudflare 캐시 사용 고려
- 프로젝트를 통해 Markov 연쇄와 봇 동작 원리를 학습하며, 재미와 분노가 섞인 실험 진행
- 결론적으로, 모든 시도가 실용적일 필요는 없으며, 때로는 단순한 재미로도 충분함