워드프레스 XML-RPC 공격 대응

워드프레스 블로그를 운영한 지 꽤 오래 됐습니다. 처음에는 미국에 서버를 둔 블로후스트 BLUEHOST에서 시작했지만, 태평양을 건너오느라 로딩 시간이 오래 걸려 많이 답답했습니다. 그래서 디지털오션 digitalocean으로 호스팅을 옮겼습니다. 서버가 필리핀에 있다 보니 로딩 속도가 현저히 개선됐고, 호스팅 비용도 줄어들었습니다.

대신 잃은 것도 많습니다. 스토리지를 비롯해 DB 개수와 용량, 트래픽 제한 등에서 확 줄어들긴 했는데, 예전에 비해 블로그 트래픽이 그렇게 많은 시절이 아니므로 별 문제는 없습니다.

한데, 서버 옮긴지 이제 한달 조금 넘었는데, 거의 1주일에 한번 정도 xml-rpc 공격으로 서버가 다운되는 현상이 일어나고 있습니다. 아마도 방화벽이나 악성공격에 대응하는 방식이나 정책 이런 게 두 호스팅사간에 차이가 있겠지요. xml-rpc.php는 일명 ‘원격 블로깅’ 도구입니다. 내가 최근 자주 쓰던 marsedit나, 윈도 기반에서 원격블로깅 툴인 LiveWrite 같은 것으로 웹으로 블로그에 접속하지 않고 내 PC에서 블로그 포스팅을 할 수 있게 해주는 일종의 프로토콜이나 포트 같은 기능을 하는 것으로 압니다.

이게 워드프레스 3.5 버전 이전까지는 대시보드에서 관리자가 끄거나 켤 수 있었는데, 3.5 버전 이후로 이 기능이 기본으로 켜져 있고, 끌 수 있는 장치가 없다는 겁니다.

그렇다보니 원격 블로깅 툴로 특정 워드프레스 블로그 xml-rpc를 지속적으로 호출하면서 id와 패스워드를 무작위대입으로 공격하는 듯합니다. 이로 인해 SQL 서버가 부하를 견디지 못해 뻗어버리고요.

ip 185.106.92.160 에서 정말 열심히 무작위 대입공격을 시도하고 있습니다.

ip 185.106.92.160 에서 정말 열심히 무작위 대입공격을 시도하고 있습니다.

도대체 어떤 녀석인지 whois 검색을 해보니 벨라루스에 있는 못된 놈이군요.

도대체 어떤 녀석인지 whois 검색을 해보니 벨라루스에 있는 못된 놈이군요.

그나마 다행인 것이 Jetpack by WordPress.com 플러그인으로 서버를 감시하고 있어서 서버가 다운되거나 하면 곧바로 메일로 알려주기에 다운된 채로 오래 두지는 않습니다만, 이게 귀찮기도 하고 그렇죠.

JetPack 플러그인이 보내준 서버 상황 모니터 보고서.

JetPack 플러그인이 보내준 서버 상황 모니터 보고서.

하여튼 xml-rpc 공격을 막아야겠는데 워드프레서 대시보드에서는 기능을 끌 방법이 없습니다.

그래서 구글링 신공을 발휘한 결과 몇가지 끄는 방법을 찾아냈습니다.

일단 내가 취한 방법은 .htaccess(앞에 있는 점. 을 잊지 마세요^^) 파일에 코드를 심어주는 방법입니다.

보통 .htaccess 파일은 /home 또는 /www 또는 /html 등 웹페이지 루트폴드에 숨김파일로 들어있습니다. 쉘로 접속해서 vi 에디터 등으로 수정할 수도 있습니다만, 나는 ForkLift로 ftp 접속한 다음에 SublimeText로 .htaccess 파일을 불러와서 편집하는 방법을 썼습니다. 이게 가장 간단한 듯합니다.

# Block WordPress xmlrpc.php requests
order deny,allow
deny from all
allow from 127.127.127.127
.htaccess 파일 수정 모습.

.htaccess 파일 수정 모습.

위의 코드를 .htaccess 파일 맨 아래쪽에 덧붙인 후 저장해줍니다. 다음에 쉘로 접속한 뒤 아파치 서버를 재시동해주면 됩니다.

sudo service apache restart

이렇게 했을 때 한가지 단점은 내가 쓰던 MarsEdit 같은 원격블로깅 툴을 사용하지 못한다는 단점이 있습니다. 코드 구조로 봐서는 맨 아래쪽에 있는 allow from 127.127.127.127에 따라 해당 ip에서 들어오는 것은 허용돼야 하는데, 내가 쓰고 있는 ip로 접속 시도해도 연결되지 않았습니다. 하지만 요즘은 wordpress.com에서 아이폰용은 물론, 맥용 앱도 내놨기에 원격블로깅 툴이 굳이 필요하지 않습니다. 또 마크다운 문법으로 글 쓰는 것을 익혀가다 보니 웹에 접속해서 편안하게 글을 써가는 것이 훨씬 효율적이고 간편해졌기에 뭐, 막힌다 해서 아쉬울 일은 전혀 없습니다.

일단 디지털오션에서는 두가지 해결책을 제시하고 있습니다만, 이건 디지털오션에 특화된 방식이라 패스했습니다. 다음으로 참고한 사이트는 Brute Force Amplification Attacks Against WordPress XMLRPC라는 블로그입니다. 이 블로그를 보고 xml-rpc 공격이 이뤄지는 메커니즘을 알게 됐습니다. 최종적으로 wpbeginner 블로그의 How to Disable XML-RPC in WordPress라는 글을 보고 해결했습니다.

디지로그포유

IT와 최신 기술 동향에 관심이 많습니다. 세상이 하수상한지라 시사와 경제에도 관심을 가질 수밖에 없습니다.

You may also like...