워드프레스 xmlrpc.php 공격 차단하기


오늘 워드프레스 보안 플러그인이 너무 많은 로그인 시도를 막았다.   워드프레스앱과 JetPack를 사용하려면 xml rpc 를 사용해야 하는데,  오늘 xmlrpc 를 막으면서 정리해보았다.

워드프레스는 백악관사이트나 대기업 홈페이지나 신문사 사이트, 쇼핑몰들도 사용하는 세계에서 가장 많이 사용하는 CMS 솔루션이다. 소스코드가 공개되어 있고 개방형 구조라 테마나 플러그인 무수히 많고 시장 또한 형성돼있다.   동시에  많은 공격을 당하기도 한다. xmlrpc 를 이용한 공격이 한 몫을 한다.
 

 

xmlrpc 공격

어드민 로그인 해킹 시도 차단

오늘 아래와 같은 메일을 받았다. 틀린 id 로 너무 많은 로그인 시도를 해서 워드프레스 보안 플러그인이 막았다.
 

A lockdown event has occurred due to too many failed login attempts or invalid username:
Username: ****
IP Address: 3.26.0.19
IP Range: 3.26.0.*
Log into your site’s WordPress administration panel to see the duration of the lockout or to unlock the user.

 
All In One WP Security 워드프레스 플러그인으로 로그인 시도 등 여러가지 보안 옵션을 설정해놨는데 애가 보낸 거였다.
 
워드프레스 관리자 페이지의 로그인 페이지 URL은 정해져있다.  그리고 보통 워드프레스를 설치할때 admin 이라는 이름으로 하기 때문에 wp-admin 로 접속해 admin 아이디로 비밀번호를 바꿔가며 관리자 계정을 접속하려는 시도를 한다.
나는 관리자계정 아이디를 다른 것으로 했고,  플러그인으로 관리자 로그인 페이지도 변경해 놓았다. 그래서 로그인을 할 수 없을 텐데 왜 이렇게 됐을까 알아보았다.

XML RPC 핑백 공격

 
아파치 access log 를 보니 접속 차단한 ip 가 xmlrpc.php 를 계속 호출하고 있었다.
 

3.26.0.19 – – [22/Jun/2021:05:32:16 +0000] “POST /xmlrpc.php HTTP/1.1” 200 443
3.26.0.19 – – [22/Jun/2021:05:32:17 +0000] “POST /xmlrpc.php HTTP/1.1” 200 443
3.26.0.19 – – [22/Jun/2021:05:32:17 +0000] “POST /xmlrpc.php HTTP/1.1” 200 443
3.26.0.19 – – [22/Jun/2021:05:32:18 +0000] “POST /xmlrpc.php HTTP/1.1” 200 443
3.26.0.19 – – [22/Jun/2021:05:32:18 +0000] “POST /xmlrpc.php HTTP/1.1” 200 443
3.26.0.19 – – [22/Jun/2021:05:32:18 +0000] “POST /xmlrpc.php HTTP/1.1” 200 443
3.26.0.19 – – [22/Jun/2021:05:32:19 +0000] “POST /xmlrpc.php HTTP/1.1” 200 443
3.26.0.19 – – [22/Jun/2021:05:32:19 +0000] “POST /xmlrpc.php HTTP/1.1” 200 443
3.26.0.19 – – [22/Jun/2021:05:32:20 +0000] “POST /xmlrpc.php HTTP/1.1” 200 443

 
트랙백을 하거나 원격으로 접속해서 글을 쓸때 이게 호출된다.   찾아보니 내 서버를 경유에 다른 서버를 공격하는데데 사용된다고 한다. 내 블로그에서 다른 블로그로 핑백 트래픽을 유발한다.

워드프레스 pingback DoS공격 다이어그램
워드프레스 pingback DoS공격 다이어그램

(이미지 출처)


 
플러그인 설명 설명을 보니 xml rpc 로 DoS 공격 뿐만 아니라 네트우크 포트를 스캔한다고 한다. 이걸 막으면 트래픽도 줄일 수 있다.
 

이 설정은 워드 프레스의 XML-RPC 기능에 대한 책임이 있는 워드 프레스 xmlrpc.php 파일에 대한 액세스를 비활성화하려면 .htaccess에 지시문을 추가합니다.

해커는 다음과 같은 여러 가지 방법으로 워드 프레스 XML-RPC API의 다양한 취약점을 악용 할 수 있습니다.

1) 서비스 거부(DoS) 공격

2) 해킹 내부 라우터.

3) 다양한 호스트로부터 정보를 얻기 위해 내부 네트워크에서 포트를 스캔합니다.

보안 보호 이점 외에도 이 기능은 특히 사이트에 현재 설치시 XML-RPC API에 영향을 미치는 원치 않는 트래픽이 많은 경우 서버의 부하를 줄이는 데 도움이 될 수 있습니다.

참고: 현재 WordPress 설치에서 XML-RPC 기능을 사용하지 않는 경우에만 이 기능을 사용하도록 설정해야 합니다.

이 기능을 사용하지 않도록 두고 pingback 보호를 원하지만 여전히 XMLRPC가 필요한 경우 아래 기능을 사용합니다.

워드프레스의 xmlrpc.php 용도


트랙백과 핑백

웹 2.0 이 한창이던 2005년 즈음에는 블로그가 활성화되기 시작했고 다른 블로그의 글에 트랙백을 걸어서 글을 쓰기도 했었다.
요즘은 이런걸  쓰지 않으니 막아도 될 것 같다.

워드프레스 앱으로 내 블로그 사용

2005년 즈음에는 윈도우나 맥의 블로긴 앱으로 원격 포스팅이 유행할때가 있었다. 별도 블로깅 앱이 아니더라도 워드프레스앱으로 내 사이트를 연결해서 글을 쓸 수 있고 댓글  알림도 받을 수 있다.
모바일에서도 워드프레스 앱으로 작성해서 xmlrpc 를 열어 놓았다. 워드프레스앱을 사용하려면 xmlrpc를 허용하고 젯팩플러그인을 사용해야한다. 모바일에서 블로깅은 모바일웹을 사용한다.

JetPack 플러그인 사용

워드프레스를 만든 회사가 만든 프를러그인으로 보안 기능도 있고, 이미지 cdn기능, 통계 기능등 여러 기능들이 있다.  JetPack 플러그인을 사용하려면 xml-rpc 가 활성되어 있어야한다.

사용 통계는 구글 어낼리틱스를 쓰고 댓글 어뷰징 막는 것은 워드프레스에서 만든 플러그인을 쓰고 있다.  딱 하나 서버접속이 안됐을때 이 플러그인이 이메일로 보내주는 기능을 쓴다. 근데 이것도 사이트가 죽었는지 확인하는 서비스를 사용한다.

젯팩플러그인은 기능은 많은데 서버 부하가 많아서 사용하지 않는다. 아무래도 모바일에서 블로깅은 워드프레스앱을 사용하지 않고 모바일웹을 사용한다.
 

xmlrpc.php 비활성화시키기

이걸 비활성화 시키는 옵션은 워드프레스 관리자 기능이나 wp-config.php 에 없다.
xmlrpc.php 파일을 지우면 될 것 같은데 찾아보니 워드프레스를 업데이트 하면 다시 생긴다. 이건 방법이 아니다.
찾아보니 다음의 방법이 있다.

Disable XML-RPC 플러그인

워드프레스 답게 이것도 플러그인이 있다. xml-rpc 를 비활성화시켜주는 플러그인이다.  가장 간단하다.

All In One WP Security 워드프레스 플러그인

보안 통합 플러그인 중에 All In One WP Security 를 사용한다. 방화벽 기능에서 xml rpc를 끌 수 있다.

이 플러그인을 사용하면 워드프레스앱과 Jetpack을 사용할 수 있게 하는 옵션이 있다. 워드프레스앱과 젯팩을 사용한다면 이 플러그인을 사용하면 된다.

아래 그림에서 XMLRPC에서 Pingback 기능 비활성화를 시키면 워드프레스 앱과 Jetpack를 사용할 수 있다.

All In One WP Security 워드프레스 플러그인으로 xml-rpc 차단
All In One WP Security 워드프레스 플러그인으로 xml-rpc 차단

참고: Jetpack 또는 워드프레스 iOS 또는 기타 앱을 사용하는 경우 이 기능을 사용하도록 설정하지만 “XMLRPC에 대한 완전히 차단” 확인란을 선택하지 않은 상태로 두어야 합니다.

이 기능은 여전히 사이트에서 XMLRPC 기능을 허용하지만 pingback 메서드를 비활성화합니다.

이 기능은 “X-Pingback” 헤더가 있는 경우에도 제거합니다.

테마의 function.php 에 필터 추가

차일드 테마의 function.php 에 다음 코드를 추가한다.

add_filter('xmlrpc_enabled', false);

.htaccess 파일 변경

워드프레스 서버의 .htaccess 파일을 접근할 수 있다면 다음 내용을 추가한다.
 

# BEGIN protect xmlrpc.php
<files xmlrpc.php>
order allow,deny
deny from all
</files>
# END protect xmlrpc.php

웹서버 아파치 conf 설정

아파치 서버의 httpd.conf 에접근할 수 있다면 아래 내용을 추가하고 아파치를 재시작해준다.

<Files xmlrpc.php>
Require all denied
#ErrorDocument 403 /403.html
</Files>

 

웹서버 NGINX conf 설정

웹 서버에서 막으면 워드프레스 실행을 안하니 CPU 사용을 줄일 수 있다.

/etc/nginx/sites-available/ 안에 개별 서버의 server안에 아래 내용을 추가하고, nginx 를 릴로드한다.

server {

  # xmlrpc.php 막기
  location = /xmlrpc.php {
  deny all;
  }

}


nginx를 릴로드한다.

$ sudo nginx -s reload 

마치며

서버 접속을 못 하면 위에 언급한 플러그인이나 테마를 수정해서 막으면 된다. CPU 사용을 조금이라도 줄이고 싶은데 서버에 접속할 수 있다면 .htaccess 를 수정하면 된다. 일반 웹 호스팅이 아니라 아마존 라이트세일 처럼 직접 서버를 설치했다면 아파치나 NGINX 웹서버에서 막는게 가장 좋은 것 같다.  







제휴 링크로 구매 시 제휴마케팅 활동의 일환으로 일정액의 수수료를 지급받아 콘텐츠를 제작하는데 큰 도움이 됩니다.



도움이 되셨다면, 댓글이나 소중한 커피 한 잔 부탁드려도 될까요?

커피 사주기
























당신이 좋아할 만한 글







윗몸일으키기: 윗몸일으키기 카운터

윗몸일으키기 하면 자동으로 횟수 측정, 횟수를 음성으로 세주고, 윗몸일으키기 속도 분석, 일별/월별/연도별 운동 기록 관리









2 Comments

Add a Comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다