본문 바로가기
Linux/TIP

악성bot 차단하기 (feat. mj12bot.com/majestic12)

by aegypius 2021. 12. 10.
728x90
반응형

가끔 apache의 log를 보면 눈에 띄는 녀석이 있다. MJ12bot과 SemrushBot이다. 대충 웹 검색을 해보니 semrush는 robots.txt도 무시하고 접근한다고 하는데....robots.txt를 이용해서 사이트별로 특정 봇에 대한 설정을 해 본 경험은 없다. 게다가 .htaccess도 거의 사용하지 않는다. 여하튼 내 서버에는 semrush보다는 mj12bot이 계속 거슬린다. 이녀석을 어떻게 막아야할까....

(1) ip차단 (방화벽)

처음에는 mj12bot이 접속한 ip를 방화벽에서 차단했는데 계속 ip를 바꿔가면서 접근한다. (fail2ban이 잠깐 떠올랐다.) 주기적으로 로그를 보면서 ip를 차단하는 것은 분명 한계가 있다. 이 bot의 접속 간격도 1초부터 10초 안팎이다. 

(2) apache 설정

인터넷 검색으로 찾아낸 내용을 나의 상황에 맞게 조금 수정했다.

/etc/httpd/conf.d/block-BADbot.conf

<Directory "/home/*">
  SetEnvIfNoCase User-Agent “^MJ12bot” bad-bot
  SetEnvIfNoCase User-Agent “^mj12bot” bad-bot
  SetEnvIfNoCase User-Agent “^MJ12bot/v1.4.5” bad-bot
  SetEnvIfNoCase User-Agent “^MJ12bot/v1.4.8” bad-bot

  <RequireAny>
    <RequireAll>
      Require all granted
      Require not env bad-bot
      Require not host mj12bot.com
    </RequireAll>
  </RequireAny>
</Directory>

위의 설정은 UA가 mj12bot(MJ12bot)인 경우 접속을 차단하며, require not host 로 mj12bot.com의 도메인까지 차단하지만.......결국엔 뚫렸다. 아래와 같은 접근에는 속수무책인 것이다.

1: "GET /robots.txt HTTP/1.1" 200 24 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"
2: "GET /%EC%9E%91%EC%97%85%EC%8B%A4%EC%A0%81/?board_page=2&vid=21 HTTP/1.1" 200 75780 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"
3: "GET /%EC%9E%91%EC%97%85%EC%8B%A4%EC%A0%81/?stag=%20%EB%B2%8C%EC%B4%88 HTTP/1.1" 200 77207 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"
4: "GET /%EC%9E%91%EC%97%85%EC%8B%A4%EC%A0%81/?search_field=fn_tag&search_text=%EC%84%9C%EC%9A%B8&vid=36 HTTP/1.1" 200 75568 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"

UA에 mj12bot이 없거나 접속ip에서 호스트 네임이나 도메인을 확인할 수 없는 경우가 훨씬 많기 때문이다.
(게시판과 같은 특정 페이지나 검색을 이용해서 집요하게 달라붙는(?)것은 정말 연구대상이다. *나중에 이런 방식을 그대로 따라해 볼만한 상황이 발생할 것도 같긴...한데....)

(3) ModSecurity 설정

위의 아파치 로그를 보면 모두 mj12bot이라는 공통된 문자열을 볼 수 있다. 따라서 header에 mj12bot이 포함되어 있다면 무조건 차단하자. (문자열은 숫자를 제외하고는 모두 소문자이다.)

SecRule REQUEST_HEADERS:User-Agent "@contains mj12bot" "id:1000000,t:none,t:lowercase,deny,msg:'BAD BOT - Detected and Blocked. '"

 

이후로 mj12bot이 서버에 접속하면 ModSecurity가 차단함과 동시에 아래와 같은 로그를 남긴다.

/var/log/httpd/modsec_audit.log:User-Agent: Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)
/var/log/httpd/modsec_audit.log:Message: Access denied with code 403 (phase 2). String match "mj12bot" at REQUEST_HEADERS:User-Agent. [file "/etc/httpd/conf.d/mod_security.conf"] [line "55"] [id "1000000"] [msg "BAD BOT - Detected and Blocked. "]
/var/log/httpd/modsec_audit.log:Apache-Error: [file "apache2_util.c"] [line 271] [level 3] [client 216.240.128.214] ModSecurity: Access denied with code 403 (phase 2). String match "mj12bot" at REQUEST_HEADERS:User-Agent. [file "/etc/httpd/conf.d/mod_security.conf"] [line "55"] [id "1000000"] [msg "BAD BOT - Detected and Blocked. "] [hostname "www.rentalpark.kr"] [uri "/robots.txt"] [unique_id "YbLzhsIAFo1g2SwUaWQlEgAAAAM"]

 

이후 완벽하게 차단이 되는 것을 확인했다면 위의 로그도 필요없을 것이다. nolog 옵션을 사용하여 로그를 남기지 않을 수 있다.  [.....lowercase,deny,nolog,msg...]

(4) semrush

semrush의 로그를 살표보니 모두 185.191.171.1~45 의 ip주소로 확인된다. 일단 방화벽에서 185.191.171.0/24를 막아두고 지켜보기로 했다. mj12bot처럼 ip가 바뀐다면 modsecurity를 사용해야 할 것이다...

(대략 일주일정도 지켜보니 semrush는 ip 차단으로 완벽하게 막히는 것 같다.....)

한 달 정도 지켜보니 137.184.37.190 / 167.172.62.208 두 개의 ip로 각각 한 번씩 접근한 기록이 있는데..일회성으로 보이기에 ip차단까지 할 필요는 없을 것 같다.

- 참고 -
Malware Expert (https://malware.expert/tutorial/how-to-block-mj12bot-with-mod_security/)


Mod Security 관련글

2021.12.24 - [Linux/Web Server] - 413 Request Entity Too Large [modsecurity & apache]

 

413 Request Entity Too Large [modsecurity & apache]

서버오류..... 서버에 파일을 업로드 할 때 발생했다면 대게는 업로드 할 수 있는 파일 용량의 한계를 넘겼기 때문이겠지만 워드프레스로 사이트를 제작하는 도중에 '저장하기'나 '업데이트'를

aegypius.tistory.com

 

 

2021.12.10 - [Linux/TIP] - 악성bot 차단하기 (feat. mj12bot.com/majestic12)

 

악성bot 차단하기 (feat. mj12bot.com/majestic12)

가끔 apache의 log를 보면 눈에 띄는 녀석이 있다. MJ12bot과 SemrushBot이다. 대충 웹 검색을 해보니 semrush는 robots.txt도 무시하고 접근한다고 하는데....robots.txt를 이용해서 사이트별로 특정 봇에 대한..

aegypius.tistory.com

 

 

2021.08.22 - [Linux/Web Server] - 업로드 파일의 용량 제한 변경하기(feat. ModSecurity)

 

업로드 파일의 용량 제한 변경하기(feat. ModSecurity)

워드프레스의 미디어 라이브러리에 파일을 업로드 하는데 계속 오류가 발생한다. 분명 php.ini에서 업로드 할 수 있는 최대 파일용량은 아래와 같이 8GB로 설정했는데.... ..... post_max_size = 8192M .....

aegypius.tistory.com

 

 

2021.06.25 - [Linux/Web Server] - ModSecurity: Access denied with code 44 (phase 2). Match of "eq 0" against "MULTIPART_UNMATCHED_BOUNDARY"

 

ModSecurity: Access denied with code 44 (phase 2). Match of "eq 0" against "MULTIPART_UNMATCHED_BOUNDARY"

워드프레스로 만든 웹사이트의 게시판에 사진을 업로드 하는 중에 발생했다. Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete you..

aegypius.tistory.com

 

 

2021.04.21 - [Linux/Web Server] - 웹 서버의 정보 숨기기 (apache)

 

웹 서버의 정보 숨기기 (apache)

웹서버보안 : hide apache webserver information & mod_security curl, nc, httprint 등으로 서버의 정보를 수집하는 방법은 다양하다. 도메인이나 ip주소를 입력하면 해당 서버의 OS, 웹서버, 네임서버 등의 정..

aegypius.tistory.com

 

728x90
반응형

댓글