웹사이트 검색

Ubuntu 14.04에서 XML-RPC 공격으로부터 WordPress를 보호하는 방법


소개

WordPress는 인기 있고 강력한 CMS(콘텐츠 관리 시스템) 플랫폼입니다. 그것의 인기는 WordPress 사이트를 특별히 겨냥한 악성 트래픽의 형태로 원치 않는 관심을 끌 수 있습니다.

보호 또는 최적화되지 않은 서버는 소량의 악성 트래픽을 수신한 후 문제 또는 오류가 발생할 수 있는 경우가 많습니다. 이러한 공격으로 인해 시스템 리소스가 고갈되어 MySQL과 같은 서비스가 응답하지 않게 됩니다. 이에 대한 가장 일반적인 시각적 신호는 데이터베이스 연결 오류 메시지입니다. 웹 콘솔에 메모리 부족 오류가 표시될 수도 있습니다.

이 가이드는 Ubuntu 14.04 시스템에서 XML-RPC 공격으로부터 WordPress를 보호하는 방법을 보여줍니다.

전제 조건

이 가이드에는 다음이 필요합니다.

  • 우분투 14.04 물방울
  • sudo 권한이 있는 루트가 아닌 사용자(Ubuntu 14.04의 초기 서버 설정에 설정 방법이 설명되어 있음)

Ubuntu 14.04 Droplet에 WordPress가 이미 설치되어 있다고 가정합니다. WordPress를 설치하는 방법에는 여러 가지가 있지만 다음은 두 가지 일반적인 방법입니다.

  • Ubuntu 14.04에 Wordpress를 설치하는 방법
  • DigitalOcean을 사용하여 Ubuntu 14.04에 WordPress 원클릭 설치

이 자습서의 모든 명령은 루트가 아닌 사용자로 실행해야 합니다. 명령에 루트 액세스가 필요한 경우 앞에 sudo가 옵니다. Ubuntu 14.04의 초기 서버 설정에서는 사용자를 추가하고 sudo 액세스 권한을 부여하는 방법을 설명합니다.

XML-RPC란 무엇입니까?

WordPress는 기능을 활용합니다. 인기 있는 플러그인 JetPack과 WordPress 모바일 애플리케이션은 WordPress가 XML-RPC를 사용하는 방법을 보여주는 두 가지 좋은 예입니다. 이 동일한 기능을 악용하여 단기간에 수천 건의 요청을 WordPress에 보낼 수도 있습니다. 이 시나리오는 사실상 무차별 대입 공격입니다.

XML-RPC 공격 인식

XML-RPC 공격을 인식하는 두 가지 주요 방법은 다음과 같습니다.

  1. WordPress 사이트가 다운되었을 때 \데이터베이스 연결 오류 메시지 보기
  2. 웹 서버 로그에서 \POST /xmlrpc.php HTTP/1.0”과 유사한 많은 항목 찾기

웹 서버 로그 파일의 위치는 실행 중인 Linux 배포와 실행 중인 웹 서버에 따라 다릅니다.

Ubuntu 14.04의 Apache의 경우 다음 명령을 사용하여 XML-RPC 공격을 검색합니다.

  1. grep xmlrpc /var/log/apache2/access.log

Ubuntu 14.04의 Nginx의 경우 다음 명령을 사용하여 XML-RPC 공격을 검색합니다.

  1. grep xmlrpc /var/log/nginx/access.log

위의 명령으로 인해 다음 예와 같이 여러 줄의 출력이 발생하면 WordPress 사이트가 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 플러그인 설치

이상적으로는 XML-RPC 공격이 발생하기 전에 방지하려고 합니다. WordPress용 Jetpack 플러그인은 Protect 기능으로 XML-RPC 다중 호출 메서드 요청을 차단할 수 있습니다. Jetpack이 활성화된 웹 서버 로그에는 XML-RPC 항목이 계속 표시됩니다. 그러나 Jetpack은 이러한 악의적인 로그인 시도로 인한 데이터베이스 부하를 거의 90%까지 줄입니다.

참고: Jetpack 플러그인을 활성화하려면 WordPress.com 계정이 필요합니다.

Jetpack은 WordPress 백엔드에서 쉽게 설치됩니다. 먼저 WordPress 제어판에 로그인하고 왼쪽 메뉴에서 Plugins->Add New를 선택합니다.

Jetpack은 새로 추가 페이지의 추천 플러그인 섹션에 자동으로 나열되어야 합니다. 안 보이시면 검색창을 이용하여 Jetpack을 검색하시면 됩니다.

지금 설치 버튼을 클릭하여 Jetpack을 다운로드, 압축 해제 및 설치합니다. 성공적으로 설치되면 페이지에 플러그인 활성화 링크가 표시됩니다. 플러그인 활성화 링크를 클릭합니다. 플러그인 페이지로 돌아가고 상단에 귀하의 Jetpack이 거의 준비되었습니다!라는 녹색 헤더가 표시됩니다. Wordpress.com에 연결 버튼을 클릭하여 Jetpack 활성화를 완료합니다.

이제 WordPress.com 계정으로 로그인합니다. 필요한 경우 계정을 만들 수도 있습니다.

WordPress.com 계정에 로그인하면 Jetpack이 활성화됩니다. Jetpack의 일반 기능을 자동으로 활성화하는 Jump Start 실행 옵션이 표시됩니다. 이 단계에서 건너뛰기 링크를 클릭합니다.

점프 시작 프로세스를 건너뛰어도 보호 기능이 자동으로 활성화됩니다. 이제 보호 기능이 활성화된 것으로 표시되는 Jetpack 대시보드를 볼 수 있습니다. 보호 이름 옆에 있는 톱니바퀴를 클릭하여 보호에 의해 잠재적으로 차단되지 않도록 IP 주소를 화이트리스트에 추가하세요.

허용 목록에 추가할 IPv4 또는 IPv6 주소를 입력하고 저장 버튼을 클릭하여 보호 허용 목록을 업데이트합니다.

방법 2: a2enconf로 block-xmlrpc 활성화

2015년 12월에 a2enconf block-xmlrpc 기능이 DigitalOcean WordPress 원클릭 이미지에 추가되었습니다. 이를 통해 웹 서버 수준에서 모든 XML-RPC 요청을 차단할 수 있습니다.

참고: 이 방법은 2015년 12월 이후에 생성된 DigitalOcean 원클릭 WordPress 설치에서만 사용할 수 있습니다.

XML-RPC 블록 스크립트를 활성화하려면 DO WordPress 원클릭 이미지가 설치된 Droplet에서 다음 명령을 실행합니다.

  1. sudo a2enconf block-xmlrpc

변경 사항을 적용하려면 Apache를 다시 시작하십시오.

  1. sudo service apache2 restart

경고: 이 방법은 Jetpack 또는 WordPress 모바일 앱을 포함하여 XML-RPC를 사용하는 모든 기능을 중지합니다.

방법 3: 모든 XML-RPC 트래픽을 수동으로 차단

또는 XML-RPC 블록을 Apache 또는 Nginx 구성에 수동으로 적용할 수 있습니다.

Ubuntu 14.04의 Apache의 경우 다음 명령을 사용하여 구성 파일을 편집합니다.

  1. sudo nano /etc/apache2/sites-available/000-default.conf

아래에서 태그 사이에 강조 표시된 줄을 추가합니다.

<VirtualHost>
…    
    <files xmlrpc.php>
      order allow,deny
      deny from all
    </files>
</VirtualHost>

완료되면 이 파일을 저장하고 닫습니다.

변경 사항을 적용하려면 웹 서버를 다시 시작하십시오.

  1. sudo service apache2 restart

Ubuntu 14.04의 Nginx의 경우 다음 명령을 사용하여 구성 파일을 편집합니다(구성 파일을 반영하도록 경로 변경).

  1. sudo nano /etc/nginx/sites-available/example.com

서버 블록 내에서 아래 강조 표시된 줄을 추가합니다.

server {
…
 location /xmlrpc.php {
      deny all;
    }
}

완료되면 이 파일을 저장하고 닫습니다.

변경 사항을 적용하려면 웹 서버를 다시 시작하십시오.

  1. sudo service nginx restart

경고: 이 방법은 Jetpack 또는 WordPress 모바일 앱을 포함하여 XML-RPC를 사용하는 모든 기능을 중지합니다.

공격 완화 단계 확인

공격을 방지하기 위해 어떤 방법을 선택하든 작동하는지 확인해야 합니다.

Jetpack Protect 기능을 활성화하면 웹 서버 로그에서 XML-RPC 요청이 계속되는 것을 볼 수 있습니다. 빈도는 낮아야 하며 Jetpack은 공격이 데이터베이스 서버 프로세스에 가할 수 있는 부하를 줄입니다. 또한 Jetpack은 공격 IP 주소를 점진적으로 차단합니다.

모든 XML-RPC 트래픽을 수동으로 차단하면 로그에 여전히 시도가 표시되지만 결과 오류 코드는 200이 아닙니다. 예를 들어 Apache access.log 파일의 항목은 다음과 같습니다.

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 (compatible: MSIE 7.0; Windows NT 6.0)"

결론

악의적인 XML-RPC 트래픽을 완화하기 위한 조치를 취함으로써 WordPress 사이트는 시스템 리소스를 덜 소비합니다. 시스템 리소스 소진은 VPS에서 WordPress 사이트가 오프라인이 되는 가장 일반적인 이유입니다. 이 문서에서 언급한 XML-RPC 공격을 방지하는 방법과 함께 WordPress 사이트를 온라인 상태로 유지합니다.

WordPress XML-RPC에 대한 무차별 대입 공격에 대해 자세히 알아보려면 Sucuri.net — WordPress XMLRPC에 대한 무차별 대입 증폭 공격을 읽어보십시오.