본문 바로가기
Server&OS/Apache

[보안] php취약점 자동공격 봇 막기.

by 백룡화검 2010. 4. 23.

 자동봇은 HTTP/1.0 을 이용한다.
1.0 으로만 공격해도 효과가 충분하기도 하고,
1.1 은 복잡해서 1.1 대응은 웬만한 정성으로는 못만들것이다.
모바일 접속용 브라우저는 1.0 을 사용할지도 모르고,
웹크롤러(검색엔진)도 1.0을 사용하지만 일단 막고,
막힌것이 무엇인지 검사 후 풀어주면 된다.

제가 관리하지 않던 서버의 홈페이지를 제가 관리하는 서버로 옮겼습니다.
옮기면서 php취약점 공격하던 넘들도 같이 넘어왔더군요.
로그를 좀 쌓으면서 보니까 봇 공격인듯 하여 일단 HTTP/1.0 을 막았습니다.

RewriteEngine On
RewriteCond %{THE_REQUEST} HTTP/1\.0$
RewriteRule .* /deny.php

deny.php
<?php

$fp = fopen('../denys.txt', 'a');
fwrite($fp, $_SERVER['REMOTE_ADDR']."\n");
fclose($fp);
$fp = fopen('../agents.txt', 'a');
fwrite($fp, $_SERVER['HTTP_USER_AGENT']."\n");
fclose($fp);


HTTP/1.0 으로 접근하면 ip 와 user agent 를 기록하고 종료합니다.
이렇게 하는것 만으로 서버가 느려질 정도의 공격이 무효화 되었습니다.
서버가 바로 빨라지네요.
(이렇게 하기전에 잠시동안 iptables 로 ip 를 일일히 막았는데,
ip 를 바꾸면서 공격시도를 다시하고, 정도가 심해지는것이,
꼭 옆에앉아서 싸우는것 같은 느낌이었습니다.
ip 를 무한히 확보해 놓은듯 하더군요.-_-^)

ip 는 숫자세서 정말 공격이다 싶은것만 iptables 로 막고,
(rewrite 를 이용해 /etc/hosts.deny 를 연동할 수 있던데, DROP 이 안되더군요.
iptables 의 막는 방법은 REJECT, DROP 이 있는데,
REJECT 로 하면 상대방에게 끊어졌다는 것이 바로 알려지고,
DROP 으로 하면 아무것도 알리지를 않아서 느린 서버에 접속할 때 처럼
지연이 생기게 됩니다.)
agent 에서 크롤러인것만 풀어줬습니다.


RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} EMPAS\.ROBOT [OR]
RewriteCond %{HTTP_USER_AGENT} Twiceler [OR]
RewriteCond %{HTTP_USER_AGENT} Yahoo [OR]
RewriteCond %{HTTP_USER_AGENT} Snapbot [OR]
RewriteCond %{HTTP_USER_AGENT} yoofind [OR]
RewriteCond %{HTTP_USER_AGENT} NaverBot [OR]
RewriteCond %{HTTP_USER_AGENT} xMind
RewriteRule .* - [NS,L]
RewriteCond %{THE_REQUEST} HTTP/1\.0$
RewriteRule .* /deny.php


구글에 검색된 사이트던데,
구글봇이 안다녀갔네요.ㅎㅎ

야후봇이 수십개 되던데 해킹봇 외에 가장 미친듯이 접속하더군요.

게다가 deny.php 주소를 어떻게 알아냈는지 직접 접속하여,
deny 목록에 지가 추가되는군요-_-;

<?php

if(preg_match('@(EMPAS\.ROBOT|Twiceler|Yahoo|Snapbot|yoofind|NaverBot|xMind)@', $_SERVER['HTTP_USER_AGENT'])) exit;

$fp = fopen('../denys.txt', 'a');
fwrite($fp, $_SERVER['REMOTE_ADDR']."\n");
fclose($fp);
$fp = fopen('../agents.txt', 'a');
fwrite($fp, $_SERVER['HTTP_USER_AGENT']."\n");
fclose($fp);



http://iplists.com/
검색엔진 ip 목록

 

출처 : PHPSCHOOL