티스토리 뷰
워드프레스는 가장 인기 있고 강력한 CMS(Content management system) 플랫폼입니다. 하지만 인기가 좋아 많은 사람이 사용하는 만큼 워드프레스 웹사이트만을 타깃으로 한 다양한 공격도 끊임없이 시도되고 있습니다.
공격에는 다양한 종류가 있지만 이번엔 악의적인 트래픽 공격으로 인해 MySQL이 응답하지 않아 사이트 접속 시 "Error connecting to database" 혹은 "Out of Memory errors" 문구가 뜨는 경우에 대해 원인을 알아보고 문제를 해결해보도록 하겠습니다.
이 해결책은 우분투 14.04 시스템(Ubuntu 14.04 system)을 사용하는 워드프레스를 XML-RPC 공격으로부터 방어하는 방법입니다.
XML-RPC란?
RPC 프로토콜의 일종으로서, 인코딩 형식에서는 XML을 채택하고, 전송 방식에서는 HTTP 프로토콜을 사용하고 있다. XML-RPC는 매우 단순한 규약으로서, 작은 데이터 형식이나 명령을 정의하는 정도로만 사용하고 있으며, 사양서도 A4 2매 정도로 꽤나 단순한 편이다. 이건 대다수의 RPC 프로토콜 시스템이 수많은 규격을 규정하고, 실제 사용할 때에도 엄청난 양의 코딩을 요구하는 것과 비교하면 눈에 띄는 특징이라고 할 수 있다. (출처:위키백과)
사용의 편리성과 가벼움으로 워드프레스는 XML-RPC를 원격 실행 도구로 이용합니다. 이를 이용하면 서버에 직접 접속하지 않더라도 원격으로 블로깅을 할 수 있게 됩니다. 젯팩(JetPack) 플러그인이나 워드프레스 모바일 앱 등이 XML-RPC를 사용하는 대표적인 예가 될 수 있습니다. 좋게 사용하면 정말 편리한 기능이지만 역으로 이를 악용하면 접근성이 쉬우므로 엄청난 취약점이 될 수 있습니다.
내 웹사이트가 XML-RPC 공격을 당하고 있는지 확인하기
다음 2가지 경우 중 해당 사항이 있다면 XML-RPC 공격을 의심해봐야 합니다.
1. 사이트 접속 시 "Error connecting to database" 메시지가 자주 나타난다.
Error connecting to database 오류가 나타나는 경우, 다양한 원인이 있으므로 XML-RPC 공격 때문인지 알아보기 위해선 다른 원인조건을 먼저 확인해야 합니다. 데이터베이스 ID와 Password 설정이 제대로 되어 있는지 "WP-Config.php" 파일을 확인한 후 명령어를 통해 MySQL을 재부팅 해줍니다. 그 후에도 계속해서 오류가 나타난다면 XML-RPC 공격을 받고 있을 가능성이 높습니다.
2. access.log를 살펴볼 때 "POST /xmlrpc.php HTTP/1.0"과 비슷한 로그가 계속 발견된다.
위 로그를 확인하기 위해 리눅스에 따라 다음과 같은 명령어를 입력해줍니다.
Apache (Ubuntu 14.04)를 사용하는 경우
$ grep xmlrpc /var/log/apache2/access.log
Nginx (Ubuntu 14.04)를 사용하는 경우
$ grep xmlrpc /var/log/nginx/access.log
로그를 살펴볼 때 하단과 비슷한 로그가 계속해서 발견되면 XML-RPC공격을 받고 있을 가능성이 높습니다.
111.222.333.444:80 555.666.777.888 - - [01/Jan/2016:16:33:50 -0500] "POST /xmlrpc.php HTTP/1.0" 200 674 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
XML-RPC 공격 방어하기
1. 젯팩 플러그인 설치 (JetPack Plugin)
젯팩 플러그인은 자체적인 방어 시스템으로 XML-RPC 멀티 요청을 90% 정도까지 막아줍니다. 사용자는 플러그인을 통해 요청 차단 로그를 확인할 수 있습니다. 젯팩은 회원가입 후 무료로 사용할 수 있습니다. (유료 전환 시 더 다양한 혜택)
2. XML-RPC를 사용하지 않도록 설정하기
Apache (Ubuntu 14.04)를 사용하는 경우
$ sudo nano /etc/apache2/sites-available/000-default.conf
하단의 빨간색 태그를 <VirtualHost>태그 사이에 삽입합니다.
<VirtualHost>
…
<files xmlrpc.php>
order allow,deny
deny from all
</files>
</VirtualHost>
저장 후 변경된 설정이 적용되도록 apache2를 재시작합니다.
$sudo service apache2 restart
Nginx (Ubuntu 14.04)를 사용하는 경우
$ sudo nano /etc/nginx/sites-available/example.com
하단의 빨간색 내용을 server 블록 사이에 삽입합니다.
server {
…
location /xmlrpc.php {
deny all;
}
}
저장 후 변경된 설정이 적용되도록 Nginx를 재시작합니다.
$ sudo service nginx restart
※ 주의 사항 ※
XML-RPC를 사용하지 못하게 설정하면 이 기능을 사용하는 플러그인을 포함한 모든 기능도 사용할 수 없게 됩니다.(젯팩, 워드프레스 모바일 앱 등)
XML-RPC 방어가 제대로 이루어졌는지 확인하기
젯팩 플러그인을 설치했다면 젯팩 메뉴 중 방어 로그 확인 기능을 통해 확인할 수 있고 매뉴얼로 XML-RPC 사용을 중지시켰다면 access.log를 통해 확인할 수 있습니다.
Apache (Ubuntu 14.04)를 사용하는 경우
$ grep xmlrpc /var/log/apache2/access.log
Nginx (Ubuntu 14.04)를 사용하는 경우
$ grep xmlrpc /var/log/nginx/access.log
만약 제대로 설정이 됐다면 로그에서 200이라 표시되던 숫자가 다른 숫자로 표시되게 됩니다.
111.222.333.444:80 555.666.777.888 - - [01/Jan/2016:16:33:50 -0500] "POST /xmlrpc.php HTTP/1.0" 200 674 "-" "Mozilla/4.0
111.222.333.444:80 555.666.777.888 - - [01/Jan/2016:16:33:50 -0500] "POST /xmlrpc.php HTTP/1.0" 500 674 "-" "Mozilla/4.0
위 포스팅과 관련된 피드백은 언제나 환영합니다.
또한 의문사항이 생기면 언제든 댓글 남겨주시기 바랍니다.
감사합니다.
'블로그 팁 (Tips of Blog) > 워드프레스 (Wordpress)' 카테고리의 다른 글
워드프레스 로딩 페이지 만들기 - Preloader by SWS 플러그인 (0) | 2016.10.15 |
---|---|
워드프레스 파일 첨부 플러그인 - [WordPress Download Manager] (0) | 2016.10.13 |
'Error establishing a database connection' 고치는 방법 (0) | 2016.08.25 |
워드프레스 속도 최적화 - Gzip 압축 (Gzip Compression) (0) | 2016.07.18 |
워드프레스 파일 업로드 용량 설정 (1) | 2016.07.14 |