소문으로만 들었다. 구글의 검색 봇으로 위장해서 블로그의 글을 몰래 수집해가는 봇이 있다는 이야기다. 그런데 필자의 블로그에도 그런 봇들이 드나들고 있었다. Apache Web Server의 Access Log를 보던 중 발견했다.
정상적인 Google Bot의 접근
구글의 검색 봇은 다음과 같이 Access Log 파일에 기록된다.

구글 검색엔진의 Bot은 User Agent 항목에 Google의 검색엔진 봇이라는 것을 알리기 위해 Google 이라는 키워드가 들어간다. 물론 구글 검색엔진의 봇은 여러 종류가 있다. Mediapartners-Google, Google-Display-Ads-Bot 등 목적에 따라 여러 종류의 봇이 있다.
Googlebot을 사칭하는 악성 봇 또는 해커의 접근
그런데 다음과 같이 구글의 정상적인 봇이 아닌 글을 읽어갈 목적 또는 해킹의 목적으로 접근하는 경우도 있다.

User Agent 항목에 Google Bot인 것 처럼 위장했지만 이 접근은 악성 봇이다. 단순히 글을 읽어가거나 취약점을 찾기 위한 접근이다. 실제로 정상적인 접근일 때와 완벽하게 동일한 User Agent를 사용한다.
다음은 해킹의 목적이 명백한 접근이다. 보안에 취약한 설정이나 접속을 위한 인증정보를 탈취할 목적의 접근이다.

Googlebot을 사칭하는 접근을 식별하는 방법
사실 방법은 딱 하나다. 접근하는 파일이 앞의 화면처럼 env 파일 등 해킹에 악용되는 파일명에 접근하는지와 출발지의 IP가 구글 봇의 IP 대역인지를 확인하는 것이다.
구글 봇의 IP 대역은 필자가 확인한 결과 다음의 IP 주소 범위를 벗어나지 않는다.
# 66.249.64.0/19 - Google Bot Network
# 66.102.0.0/20 - Google ADS Network. etc
즉 모두 66.x.x.x 를 벗어나지 않는다. 만약 User Agent에 Google 봇 관련 키워드가 포함되어 있는데 정상적인 구글 봇인지 확인하고자 한다면 다음과 같이 리버스 DNS 주소를 확인하면 된다.
nslookup -q=ptr 66.249.66.44
이 명령어로 의심되는 IP의 리버스 도메인 조회를 할 경우 다음과 같이 출력된다.

Googlebot IP의 리버스 DNS 조회
만약 name 항목에 googlebot.com 이 보인다면 이 IP 주소는 Google Bot이 사용하는 IP 대역이 맞다. 만약 값이 나오지 않거나 엉뚱한 도메인이 출력된다면 악성 봇이나 해커가 사용하는 IP인 것이다.
fail2ban을 사용해 Googlebot 사칭 차단하기
필자는 fail2ban을 사용해서 다음과 같이 필터를 설정해 악성봇을 탐지하고 있다. ipset과 fail2ban 을 사용해서 웹 방화벽을 구축하는 방법은 다음 링크를 참고하기 바란다. (보러가기)

필터의 맨 앞에 과감하게 googlebot 을 추가했다. 다만 다음의 jail 에서 구글 봇의 IP를 예외처리한다.
이렇게 하면 앞의 User Agent 필터에 의해 탐지되더라도 Jail에 빠지지 않고 예외처리되어 정상적인 Google Bot은 접근이 허용되고 Google Bot을 사칭하는 봇과 다른 봇들은 모두 차단된다.

#fail2ban #googlebot #악성봇
답글 남기기