작년 말, 관리중인 웹사이트의 트래픽이 비정상적으로 급증하더니 서버가 다운되는 일이 발생하였다.
엑세스 로그를 확인해보니 아래와 같이 제각기 다른 아이피로 어마어마한 양의 POST 요청이 지속적으로 들어오고 있었다.
203.74.0.211 - - [30/Aug/2013:12:43:57 +0800] "POST / HTTP/1.1" 301 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" 114.143.167.11 - - [30/Aug/2013:12:43:57 +0800] "POST / HTTP/1.1" 301 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" 122.161.102.170 - - [30/Aug/2013:12:43:57 +0800] "POST / HTTP/1.1" 301 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" 114.143.32.198 - - [30/Aug/2013:12:43:57 +0800] "POST / HTTP/1.1" 301 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" 187.150.57.67 - - [30/Aug/2013:12:43:57 +0800] "POST / HTTP/1.1" 301 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
당시 나는 이런 방면에 지식과 경험이 부족했기에 이사람 저사람에게 조언을 구해 우선 급한 불을 꺼두었다. 하지만 계속 인바운드가 있기 때문에 그 원인과 정체가 무엇이고, 원천적인 차단 방법은 없는지 궁금하여 오늘 다시 한번 원인을 찾아나섰다. 알고보니 이 문제는 Pushdo Trojan이라는 멀웨어(malware)였다. 발견된지는 오래되었지만 계속 진화하여 작년말부터 피해사례가 갑자기 많아진 것으로 보인다. 자세한 내용은 아래 링크를 참고.
http://www.distilnetworks.com/is-pushdo-screwing-you-details-of-the-botnet/
이 공격은 도메인 베이스이므로 서버나 아이피를 바꾼다고해서 해결되지않는다. 검색으로 알아본 바, 의견이 분분하지만 전반적으로 인바운드를 원천적으로 차단할 수는 없고, 루트 도메인 홈디렉토리의 user-agent나 http-referer를 체크하여 요청을 차단하는 해법이 주로 이야기되고 있다. 내가 작년에 임시방편으로 처리했던 방법이 후자와 같다. REQUEST_METHOD가 POST이고 HTTP_REFERER가 없는 경우 Forbidden으로 처리하는 방법.
RewriteCond %{REQUEST_URI} ^/$ RewriteCond %{REQUEST_METHOD} POST RewriteCond %{HTTP_REFERER} ^$ RewriteRule ^(.*)$ - [F,L]
location ~ ^/$ { set $request_test ""; if ( $http_referer = "" ){ set $request_test "Y"; } if ( $request_method = "POST" ){ set $request_test "${request_test}Y"; } if ( $request_test = "YY" ){ return 403; } }
특히 워드프레스로 만든 사이트는 기본 쿼리량이 많은 편이므로 위와 같은 공격이 들어오면 캐시를 걸어둔다해도 웹서버에 큰 무리가 갈 수 있다. 현재 당신의 도메인이 Pushdo Trojan의 공격대상이 아니더라도 위와 같은 설정을 미리해두어 나쁠 것 없다고 생각한다.
← home