워드프레스 XML-RPC를 빠르게 비활성화하는 방법을 찾고 계신가요? 그 전에 먼저 비활성화하려는 이유를 한번 생각해 볼 필요가 있습니다.
아마 다음과 같은 궁금증도 함께 갖고 계실 겁니다.
- xmlrpc.php란 무엇인가?
- 얼마나 큰 보안 위협이 되는가?
- xmlrpc.php를 비활성화하면 위협이 자동으로 사라지는가?
이 글에서는 이러한 질문들에 대한 답을 모두 정리해 드립니다.
핵심 요약: 워드프레스에서 XML-RPC를 비활성화하는 것은 근본적인 해결책이 아닙니다. 언젠가 해커는 또 다른 취약점을 찾아내어 공격할 것입니다. 따라서 봇과 악성 IP를 차단하기 위해 강력한 워드프레스 방화벽을 설치하는 것을 권장합니다.
XML-RPC 때문에 내 사이트가 해킹당하고 있는 걸까?
결론부터 말하면 아닙니다.
실제로 일어나고 있는 일은 해커들이 사용자 이름과 비밀번호 조합을 무작위로 시도하며 사이트 접근을 시도하는 것입니다. 하지만 당황하지 마세요. 아직 사이트가 해킹된 것은 아닙니다.
거의 모든 사이트에서 이런 시도가 발생합니다. 강력한 비밀번호를 사용하고 있다면 이런 공격으로 인해 해킹당할 가능성은 매우 낮습니다. 우리가 분석한 1만 개 이상의 해킹된 사이트 중 이런 유형의 공격으로 해킹된 경우는 5% 미만에 불과했습니다.
다만 이러한 공격, 즉 '무차별 대입 공격(brute force attack)'은 서버 리소스를 소모시킵니다. 로그인 페이지와 관리자 페이지를 보호했더라도 이런 공격은 해당 페이지를 우회하여 서버에 과부하를 일으킬 수 있습니다.
이를 막으려면 좋은 방화벽을 설치하는 것이 중요합니다.
XML-RPC란 무엇인가?
XML-RPC는 워드프레스와 외부 시스템 간에 데이터를 주고받을 수 있게 해주는 기능입니다. 현재는 REST API로 대부분 대체되었지만, 하위 호환성을 위해 여전히 워드프레스에 포함되어 있습니다.
XML-RPC를 사용하면 서드파티 앱에서 워드프레스 사이트에 콘텐츠를 게시할 수 있습니다. 예를 들어 스마트폰의 워드프레스 모바일 앱으로 글을 발행할 때 XML-RPC가 그 역할을 합니다.
이것뿐만이 아닙니다. 워드프레스는 다른 블로그 플랫폼과 통신할 때도 XML-RPC를 사용했으며, 트랙백(trackback)과 핑백(pingback) 기능도 이를 통해 구현되었습니다.
심지어 구버전 제트팩(Jetpack) 플러그인도 XML-RPC를 기반으로 작동했습니다.
흥미로운 점은 워드프레스가 더 이상 XML-RPC를 사용하지 않는다는 사실입니다. 자체 REST API를 출시한 이후 워드프레스는 오래된 코드베이스 사용을 중단했습니다.
워드프레스 설치 환경에 xmlrpc.php 파일이 남아 있는 유일한 이유는 하위 호환성 때문입니다. 쉽게 말해 아주 오래된 버전의 워드프레스를 사용하는 사이트를 위한 것입니다.
만약 구버전을 사용 중이라면 즉시 사이트를 백업하고 워드프레스 코어 파일, 테마, 플러그인을 업데이트하는 것을 강력히 권장합니다. 구버전 워드프레스를 유지하는 것이 xmlrpc.php 공격보다 훨씬 큰 보안 위험을 안고 있는 경우가 많습니다.
결론적으로 워드프레스 버전이 4.7 이상이라면 XML-RPC를 안전하게 비활성화할 수 있습니다. 제트팩을 사용 중이더라도 영향을 받지 않습니다. 하지만 XML-RPC 비활성화 자체는 안전한 조치임에는 분명하지만, 해커로부터 사이트를 보호하는 데는 도움이 되지 않습니다.
왜 해커들은 XML-RPC를 공격할까?
워드프레스 모바일 앱을 사용해 본 적이 있다면, 변경 사항을 적용하기 전에 사이트에 로그인해야 한다는 것을 기억할 겁니다. 이 로그인은 자격 증명을 xmlrpc.php 스크립트로 전송하고, 스크립트가 이를 검증·인증하는 방식으로 이루어집니다.
해커도 기본적으로 같은 방식을 시도합니다. xmlrpc.php 스크립트에 자격 증명을 전송하여 사이트에 로그인하려는 것입니다. 가장 큰 위험은 비밀번호가 약해서 쉽게 추측될 수 있는 경우입니다. 바로 이럴 때 XML-RPC가 보안 문제가 됩니다.
그렇지 않다면 서버 과부하 가능성 정도가 남는데, 이 역시 좋은 상황은 아니지만 방화벽으로 충분히 대응할 수 있습니다.
REST API를 사용해 외부 앱과 연동하는 워드프레스 4.7 이상 버전은 OAuth 토큰이라는 인증 방식을 사용합니다. OAuth는 외부 앱과 연결하는 매우 안전한 방식입니다. 반면 XML-RPC가 사용자 이름과 비밀번호를 직접 사용하는 방식은 결코 안전하지 않습니다.
충분한 시간만 주어지면 해커나 봇은 올바른 조합을 찾을 때까지 다양한 사용자 이름과 비밀번호 변형을 xmlrpc.php에 계속 전송할 수 있습니다.
이것이 바로 무차별 대입 공격입니다.
XML-RPC의 또 다른 주요 보안 문제는 핑백 기능입니다. 핑백은 누군가 내 콘텐츠에 링크를 걸었을 때 알려주는 워드프레스 알림 기능인데, 해커가 이를 악용해 엄청난 양의 핑백을 사이트로 쏟아붓는 공격이 가능합니다.
이런 유형의 공격을 DDoS 공격이라고 하며, 서버를 마비시키고 리소스를 고갈시켜 웹호스팅 업체로부터 계정 정지 처분을 받게 만들 수도 있습니다.
다행히 REST API가 이 기능 역시 대체했습니다. 따라서 핑백 기능을 선호하더라도 XML-RPC를 안전하게 비활성화할 수 있습니다.
혹시 내 사이트가 해킹당했을지 모른다고 걱정된다면 지금 바로 무료 멀웨어 스캐너를 사용해 가능성을 확인해 보세요.
XML-RPC를 비활성화해야 할까?
우리는 XML-RPC 비활성화를 권장하지 않습니다.
이유는 간단합니다. PHP 파일을 비활성화해도 아무런 이득이 없기 때문입니다. XML-RPC를 비활성화한다고 해서 해커와 봇이 사라지는 것이 아니며, 단지 공격 대상이 wp-login.php로 옮겨갈 뿐입니다.
또한 비활성화 플러그인은 요청을 차단하기 위해 매번 로드되어야 하므로 사이트 속도를 늦춥니다.
더 중요한 것은 사이트를 보호하는 일입니다. 여기까지 읽으셨다면 이미 눈치채셨겠지만, 우리가 권장하는 것은 방화벽 설치입니다.
워드프레스에서 XML-RPC를 비활성화하는 방법
모든 워드프레스 작업이 그렇듯이, XML-RPC를 비활성화하는 방법도 두 가지가 있습니다.
- 플러그인 사용
- 플러그인 없이 직접 처리
대부분의 경우 워드프레스에서 어떤 작업이든 플러그인을 사용하는 것을 권장합니다. 백엔드 코드를 직접 수정하면 큰 문제가 생길 수 있습니다. 드물게도 어느 쪽 방법도 권장하지 않는 상황이지만, 참고로 두 가지 방법을 모두 소개해 드리겠습니다.
작업 전 반드시 신중하게 진행하고, 사이트 백업을 먼저 생성하세요.
1단계: 사이트에서 XML-RPC가 활성화되어 있는지 확인
워드프레스에 xmlrpc.php 파일이 포함되어 있다고 해서 반드시 활성화되어 있는 것은 아닙니다. 비활성화 작업에 앞서 먼저 활성화 여부를 확인해야 합니다.
WordPress XML-RPC Validation Service를 이용하면 사이트를 검사하여 xmlrpc.php 활성화 여부를 알려줍니다.
참고로 MalCare 사이트에 동일한 검사를 실행하면 방화벽이 작동 중이므로 403 오류 메시지가 표시됩니다.
2단계: 사이트에서 XML-RPC 비활성화
이제 본격적으로 XML-RPC를 비활성화하는 방법을 살펴보겠습니다. 두 가지 방법을 소개하지만, 앞서 말씀드린 대로 파일 비활성화 자체는 권장하지 않으며, 굳이 진행하실 거라면 플러그인 방식을 권장합니다.
방법 A: 플러그인 사용
XML-RPC를 비활성화할 수 있는 플러그인은 여러 가지가 있습니다. 그중 REST XML-RPC Data Checker 플러그인을 추천합니다.
단, 플러그인이 요청을 차단하기 위해 로드되어야 하므로 사이트 속도가 느려진다는 점, 그리고 해커들의 공격이 wp-login.php로 옮겨간다는 점을 기억하세요.
즉, 보안 측면에서는 아무런 효과가 없습니다. 진짜 보호를 원한다면 MalCare의 고급 방화벽 플러그인 설치를 권장합니다.
플러그인을 설치한 후 설정 > REST XML-RPC Data Checker로 이동합니다.
그다음 XML-RPC 탭을 클릭합니다.
여기서 API 인터페이스, 글 형식 지정 기능, 핑백, 트랙백을 비활성화할 수 있습니다. 추가로 특정 사용자에게만 XML-RPC 사용을 허용하거나, 차단하지 않을 신뢰할 수 있는 IP 목록을 지정할 수도 있습니다.
REST 탭은 건드리지 않고 기본값 그대로 두는 것이 좋습니다.
방법 B: 플러그인 없이 직접 비활성화
이 방법은 선택지 중 가장 위험한 방법입니다. 가능하면 다음 섹션의 XML-RPC 공격 방어 방법으로 넘어가시길 권장합니다.
그래도 직접 비활성화하시겠다면 반드시 사이트 전체 백업을 먼저 생성하세요.
서버 환경에 따라 다음 두 가지 방법 중 하나를 선택할 수 있습니다.
.htaccess로 XML-RPC 비활성화
.htaccess 파일에 아래 코드를 추가합니다:
# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</Files>5번째 줄의 'allow from xxx.xxx.xxx.xxx' 부분에서 x를 본인 IP 주소로 교체하면 해당 IP에서는 XML-RPC를 계속 사용할 수 있습니다. 필요 없다면 이 줄을 삭제하면 됩니다.
Apache 서버를 사용하는 사이트라면 cPanel이나 FTP로 서버에 접속하여 .htaccess 파일에 접근할 수 있습니다.
Nginx 설정(.config)으로 XML-RPC 비활성화
Nginx로 호스팅되는 사이트라면 Nginx.config 파일에 다음 코드를 추가합니다:
location ~* ^/xmlrpc.php$ {
return 403;
}또는 웹호스팅 업체에 요청하여 XML-RPC를 비활성화해 달라고 할 수도 있습니다.
필터(Filter)로 XML-RPC 비활성화
또는 플러그인에 필터를 추가하는 방법도 있습니다:
add_filter('xmlrpc_enabled', '__return_false');테마의 functions 파일에서도 가능하지만, 플러그인 형태로 작성하는 것이 훨씬 안전한 방식입니다. 이 방법은 서버 종류와 상관없이 사용할 수 있다는 장점도 있습니다.
다시 강조하지만, 이 방법들 중 어느 것도 근본적인 해결책이 되지 못하며 수동 수정은 결코 좋은 선택이 아닙니다. 어쩔 수 없이 진행해야 한다면 만일의 사태에 대비해 반드시 백업을 준비하세요.
XML-RPC 공격을 예방하는 방법
이 섹션이 이 글에서 가장 중요한 부분입니다. XML-RPC 공격을 예방하기 위해 실제로 실행할 수 있는 단계별 방법을 정리했습니다.
1단계: 사이트가 이미 해킹당했는지 확인
대부분의 경우 아직 해킹되지 않았을 가능성이 높습니다.
하지만 확실히 확인해 두는 것이 좋습니다. 만약 사이트가 실제로 해킹당했다면 먼저 멀웨어를 제거해야 하며, 그렇지 않으면 XML-RPC를 비활성화하는 것 자체가 의미가 없습니다.
해킹 여부를 확인하는 가장 간단한 방법은 MalCare의 무료 멀웨어 스캐너를 사용하는 것입니다. 설정에 몇 분도 걸리지 않으며, 몇 초 만에 알려지지 않은 멀웨어까지 탐지할 수 있습니다.
MalCare에서 해킹 경고가 표시되면 'Autoclean(자동 정화)' 버튼만 누르면 됩니다. MalCare가 60초 안에 멀웨어 제거를 모두 처리해 줍니다.
2단계: 워드프레스 방화벽 설치
XML-RPC 취약점에 대응하는 올바른 방법은 방화벽입니다. xmlrpc.php에 접속하려는 봇을 차단할 수 있는 워드프레스 방화벽을 사용하세요.
파일을 비활성화하는 것은 소용이 없습니다. 해커는 곧바로 wp-login.php 공격으로 전환할 뿐입니다.
문제는 일반적인 방화벽은 대응이 너무 늦다는 점입니다. 해커가 xmlrpc.php나 wp-login.php에 접속을 시도할 때마다 워드프레스 사이트 전체가 로드되기 때문입니다.
그래서 MalCare의 고급 방화벽을 권장합니다. 이 방화벽은 다음과 같은 장점이 있습니다.
- 사이트가 로드되기 전에 봇과 해커를 차단
- Cloudflare와 달리 사이트 로딩 속도를 저하시키지 않음
- 보호 중인 25만 개 이상의 사이트 네트워크에서 학습하여 악성 IP 데이터베이스를 지속적으로 업데이트
MalCare로 보호되는 사이트에서 봇이나 해커가 XML-RPC 또는 WP-Login에 접속을 시도하면 403 오류만 받게 됩니다. 이런 오류는 해커가 더 이상 공격을 진행하지 않도록 빠르게 낙담시키는 효과가 있습니다.
왜 사람들은 XML-RPC 비활성화를 권장할까?
몇 가지 이유가 있습니다. 왜 많은 사람(워드프레스 관련 블로그 포함)이 이 방법을 권장하는지 살펴보겠습니다. 물론 임시방편에 불과하긴 하지만요.
많은 독자들이 XML-RPC 비활성화를 원하는 가장 큰 이유는 서버 리소스 문제를 겪었기 때문입니다. 로그를 확인해 보면 xmlrpc.php 파일로 향하는 수많은 요청 기록을 발견하게 됩니다.
제트팩 사용 중 설치 과정에서 설정 오류가 발생한 적이 있을 수도 있습니다. 그때 이 낯선 파일명을 검색해 보고 취약점 관련 글들을 읽게 되는 것이죠.
또는 보안 스캐너를 돌렸다가 Wordfence 트래픽 로그처럼 경고 메시지를 본 경우도 있습니다.
보안 플러그인이 봇들이 XML-RPC를 통해 사이트에 침입하려 한다고 알려주면, 자연스럽게 이 기능을 완전히 끄고 싶어지는 것입니다.
절대 하지 말아야 할 행동과 그 이유
IP 주소 블랙리스트 등록
수동으로 IP를 차단하면 해커를 막을 수 있다고 생각할 수 있습니다. 실제로 많은 보안 '전문가'들이 이 방법을 권장하기도 합니다. 하지만 효과가 없습니다. 하나의 IP를 차단하면 무차별 대입 봇은 단순히 다른 IP를 사용해 공격을 계속합니다.
XML-RPC 파일 삭제
워드프레스 설치 폴더에서 xmlrpc.php 파일을 삭제하는 것은 절대 생각조차 하지 마세요. 사이트가 완전히 망가질 수 있고, 설령 문제가 없더라도 다음 워드프레스 업데이트 시 파일이 그대로 복원됩니다.
그다음은 무엇을 해야 할까?
워드프레스 보안 강화는 한 번으로 끝나는 작업이 아닙니다. 방화벽 설치는 좋은 시작이지만, 사이트에 대한 전체 보안 감사를 진행해 추가로 개선할 부분을 찾아보는 것을 권장합니다.
MalCare를 이미 설치했다면 직관적인 대시보드에서 다양한 개선 제안을 확인할 수 있습니다. 보안 스캔을 실행하고 안내에 따라 진행하면 됩니다.
워드프레스 사이트 보안을 강화(hardening)하는 것도 좋은 방법입니다. 역시 안내 지침만 따라가면 몇 번의 클릭으로 완료할 수 있습니다.
또한 보안의 중요한 요소는 항상 최신 정보를 파악하는 것입니다. 새로운 워드프레스 취약점이 발견되면 내 사이트에 영향을 미치기 전에 선제적으로 대응해야 합니다.
자주 묻는 질문(FAQ)
XML-RPC란 무엇인가요?
XML-RPC는 XML Remote Call Procedure의 약자입니다. HTTP 연결과 XML 인코딩을 사용해 블로그에 접속하던 구식 블로그 시스템의 프로토콜입니다. 쉽게 말해 워드프레스 같은 블로그 플랫폼에 원격으로 접속할 수 있게 해주는 프로토콜입니다.
XML-RPC는 어떤 용도로 사용되나요?
XML-RPC는 워드프레스 모바일 앱 같은 서드파티 앱에서 워드프레스에 원격 접속하는 방법입니다. 또한 트랙백과 핑백을 통해 누군가 내 글에 링크를 걸 때마다 알림을 보내는 기능도 담당합니다.
XML-RPC는 어떻게 비활성화하나요?
REST XML-RPC Data Checker 같은 플러그인으로 비활성화할 수 있습니다. 다만 XML-RPC를 비활성화해도 해커의 침입 시도 자체를 막을 수는 없습니다. 공격을 차단하려면 MalCare의 고급 방화벽 플러그인을 설치하는 것이 좋습니다.
CAPTCHA나 2단계 인증(2FA)을 사용 중인데도 XML-RPC로 비밀번호가 뚫릴 수 있나요?
CAPTCHA와 2FA 플러그인은 추가 보안용입니다. XML-RPC 해킹에 대한 실질적인 보호는 제공하지 않습니다.
대부분의 CAPTCHA와 2FA 플러그인은 워드프레스 로그인 페이지만 보호하며 XML-RPC 스크립트는 보호하지 않습니다. 사용 중인 보안 플러그인이 XML-RPC를 통한 로그인도 차단하는지 반드시 확인하세요.
악성 IP 주소를 블랙리스트에 등록해도 되나요?
해커의 IP만 차단하면 안전할 것 같은 명백해 보이는 해결책이지만, 이 생각에 흔들리지 마세요. 해커와 두더지 잡기를 하는 것과 같습니다. 해커들은 IP를 계속 바꿔가며 다른 IP로 공격할 것이고, 이 과정에는 끝이 없습니다.
MalCare의 방화벽 같은 솔루션만이 도움이 됩니다. 봇 보호 기능이 국가나 디바이스 기준으로 악성 IP를 자동 차단하며, 고급 방화벽은 25만 개 이상의 사이트 네트워크에서 학습해 공격이 시작되기 전에 봇과 악성 IP를 식별합니다. 이 모든 것이 사이트 속도 저하 없이 이루어집니다.
그럼에도 불구하고 악성 IP를 하나씩 영원히 차단하고 싶으시다면 관련 가이드를 참고하세요.
XML-RPC 파일을 그냥 삭제하면 안 되나요? 워드프레스는 더 이상 사용하지 않잖아요.
삭제하지 마세요. XML-RPC 파일이 없어도 봇들은 계속 접속을 시도하며 서버에 부하를 줍니다. 더 큰 위험은 워드프레스 코어 파일을 함부로 삭제하면 사이트 전체가 망가질 수 있다는 점입니다.
최악은 xmlrpc.php가 다음 워드프레스 업데이트 때 그냥 재설치된다는 점입니다. 삭제의 의미가 없어지는 것이죠.