본문 바로가기
서비스개발

워드프레스 XML-RPC 공격 설명

by @developer.kye 2022. 11. 3.

워드프레스 xmlrpc.php 파일이란?

https://워드프레스주소/xmlrpc.php <= 이 파일이 xml로 인코딩한 데이터 http요청을 할 수 있게 하는 파일이라고 합니다.
옛날에 REST API가 없었을 때 원격으로 블로그포스팅을 할 수 있게 한 방식이라던데
요즘에는 인기가 시들었지만 아직까지 워드프레스 앱에서 사용된다고 합니다.

 

 

XML-RPC공격 유형

이 파일을 통해서 1.Brute Force 공격, 2.pingback을 이용한 DDOS 공격을 시도할 수 있다고 합니다.


1. Brute Force: 무턱대고 아이디비번 알아내는 공격

2. Pingback 을 이용한 DDOS 공격

 

 

1. Brute Force: 무턱대고 아이디비번 알아내는 공격

xmlrpc.php에 xml요청을 다음과 같이 작성해서 로그인시도를 할 수 있습니다. 

POST /xmlrpc.php HTTP/1.1
User-Agent: Fiddler
Host: www.example.com
Content-Length: 164

<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>pass</value></param>
</params>
</methodCall>


위와 같이 요청을 보내면, 아이디가 틀렸으면 친절하게 "이런 아이디가 없어요~" 비번이 틀렸으면 "비번 틀렸어요~" 이렇게 답변이 옵니다.

해커들은 위 요청을 계속 보내면서 여러 가지 아이디 비번을 맞을때까지 시도해볼 수 있습니다~.


2. Pingback 을 이용한 DDOS 공격


Attacker가 워드프레스의 Pingback 기능을 이용하여 Victim에게 자기 자신의 IP를 노출시키지 않고 워드프레스를 경유하여 DDOS 공격을 하도록 하는 것입니다.

 

워드프레스는 서로의 글이 링크되면 다음 그림과 같이 출처서버에 노티가 되는 기능을 기본적으로 가지고 있습니다. 이 노티를 통해서 A 블로그는 자신의 글을 "퍼가요~♥️" 한 블로그들을 확인할 수도 있죠.

 

다음과 같이 A 블로그에 어떤 유명한 글이 있어서 그 글을 B 블로거가 갖다 썼다고 가정한다면, B워드프레스는 자동으로 A워드프레스에게 알립니다. 

 

워드프레스 pingback 방식

알림메세지를 보낼 때 꼭 두 URL을 적어서 보내게 되어있는데, 첫번째 URL은 "링크가 걸린글" 두번째 URL은 "해당 링크"입니다.

즉, 이 경우 첫번째 URL은 B의 글( http://b.com/ordinary-post )이고, 두번째 URL은 A의 유명한 글 ( http://a.com.popular-post ) 인 것이죠!

 

그렇게 요청을 받은 A블로그는 실제로 이 URL의 존재여부를 확인하기 위해 첫번째 URL을 접속해봅니다. (이 부분이 중요)

 

위 방식이 원래 워드프레스의 의도된 기능이었지만, 여기에서 해커가 등장합니다. 👀!!

 

해커가 마치 자기가 링크를건 워드프레스인양 A블로그에게 요청을 보내는 것이죠!

이 때 다음처럼 첫번째 URL을 Victim 서버로 두면, A는 첫번째 URL에 자동으로 접속하게 되는 것입니다! (GET/ 요청이 Victim 서버에 발생)

 

POST /xmlrpc.php HTTP/1.1
Host: www.example.com
Connection: keep-alive
Content-Length: 293

<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param>
<value><string>http://Victim/</string></value>
</param>
<param>
<value><string>http://a.com/popular-post</string></value>
</param>
</params>
</methodCall>

 

 

이 요청을 다수의 워드프레스를 이용하여 시도하면 Victim 서버는 계속해서 GET 요청을 받게 될 것이고, 너무 많은 GET 요청을 받게되어 "GET Flooding" 으로 인해 서버가 마비되는 것입니다.

 

 

해결방법

다양한 방법으로 해결할 수 있습니다. xmlrpc를 아예 이용하지 않는다면 이 기능 자체를 끄는 것도 방법일 것 같습니다.

Nginx의 경우 /xmlrpc.php 접속시 403을 return하는 server block을 추가해도 되고, 워드프레스의 플러그인을 사용해 pingback을 허용하지 않게 하는 방법도 있습니다.

 

xmlrpc 해결방법은 검색하면 많이 나오고 자신의 서버 상황에 가장 맞는 방법으로 대응하면 좋을 것 같습니다.

 

 

마무리

해결방법은 많이 알려져 있고 블로그글도 수두룩하지만, 이 공격에 대한 명확하고 친절한 설명이 있는 블로그 글은 많이 없어 작성했습니다. 아무쪼록 궁금하셨을 분들에게 도움이 되었길 바랍니다 :D