php취약점 자동공격 봇 막기

2011.07.28 09:50

Myip 심걸 조회 수:12705

자동봇은 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 송효진
번호 제목 글쓴이 날짜 조회 수
160 jpgraph 1.20.4 에서 한글 폰트 사용 [16] Myip 심걸 2011.07.28 14551
159 [AS3] Integer.reverseBytes() of Java [1] Myip 심걸 2011.07.28 12796
158 [AIR] AIR를 포함하는 ASDoc 만들기 [2] Myip 심걸 2011.07.28 12901
157 [AIR] EncrytpedLocalStore 저장 위치 Myip 심걸 2011.07.28 12621
156 [AS3]trace 를 지우거나 주석화하지 않고 비활성화 시키기 [2] Myip 심걸 2011.07.28 13068
155 PHP코딩팁. include와 return의 특성 Myip 심걸 2011.07.28 12951
154 [PHP] 배열의 활용 Myip 심걸 2011.07.28 12789
153 php 기본 문법. php group 에서 시키는 대로 하자 Myip 심걸 2011.07.28 14830
152 인스턴스의 타입체크하기 Myip 심걸 2011.07.28 12719
151 Flash Builder에서 TODO, FIXME 사용하기 [23] Myip 심걸 2011.07.28 13047
150 [Flex] Flash Builder 4 Compiler Options [15] Myip 심걸 2011.07.28 13625
149 [AS3] 인스턴스의 클래스와 패키지명까지 알아오기 [1] Myip 심걸 2011.07.28 12795
148 javascript로 난수 발생 Myip 심걸 2011.07.28 12652
147 webkit계열에서 css문건내 @charset 선언문제 Myip 심걸 2011.07.28 12710
146 [AS3] 인스턴스 자동 선언 옵션은 반드시 Off 합시다 [35] Myip 심걸 2011.07.28 19796
145 [AS3] 최대, 최소값 자르기 두가지 방법 Myip 심걸 2011.07.28 12695
144 [AS3]최적화 코드 Myip 심걸 2011.07.28 12663
143 [AS3] Flash Player 10.1 활용하기 [4] Myip 심걸 2011.07.28 12926
142 [FF3].html post .php 데이터 손실 Myip 심걸 2011.07.28 12555
141 new 안하고, 전역변수 안쓰기. class, static Myip 심걸 2011.07.28 12658