최근에 워드프레스를 이용해 서비스하는 사이트가 해킹되는 일이 있었습니다. 워드프레스 사이트 해킹 인지부터 분석 및 복구 과정까지 정리해 보도록 하겠습니다. 현재 보고 계시는 사이트도 워드프레스 기반입니다. 설치를 염두에 두고 있는 분은 이 글을 참고하시고 보안성 강화 차원에서 본 글도 일독을 권합니다.

워드프레스 사이트 해킹 인지 단계

최초 해킹을 인지한 것은 사이트 사용 고객사로부터 접속시 사내 사용중인 보안 툴에서 troijan 이 검출되어 접속이 불가하다는 보고를 해 주어 최초 인지하게 되었습니다.

다행히 사이트 접속이 잘 되고, 어드민 접속을 비롯해 기존 DB 정보들은 spoil 되지 않았습니다.

사이트 어드민에서 확인해 보니 모르는 계정이 Administrator Role로 추가되어 있어 해킹을 정확히 확인할 수 있었습니다.

워드프레스 사이트 해킹
모르는 어드민 계정이 추가되어 있음

워드프레스 사이트 해킹 분석 단계

어떤 과정으로 사이트 어드민이 탈취되었는지 확인하기 위해 먼저 웹서버 로그를 확인해 보았습니다.

일반적인 설치 형태로 nginx를 사용하는 경우 사이트 접속 로그는 /var/log/nginx/access.log 에서 확인할 수 있습니다. nginx 로그는 www-data:adm 소유의 파일로 생성되므로 하기의 커맨드를 통해 접속 로그를 확인해 보았습니다.

$ sudo vi /var/log/nginx/access.log

수상한 접속 로그가 확인됩니다. 비정기적으로 다양한 IP주소로부터 계속적으로 입력되는 xmlrpc.php 와 wp-login.php 에 대한 접속 로그입니다.

146.56.117.106 - - [09/Aug/2022:06:35:00 +0900] "POST /xmlrpc.php HTTP/1.1" 200 421 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0"

107.180.88.41 - - [09/Aug/2022:06:52:32 +0900] "GET /wp-login.php HTTP/1.1" 200 3065 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0"

Brute Force Attack이 의심되는 정황입니다.

Brute Force Attack (무차별 대입 공격)

무차별 대입 공격은 공격자가 올바른 암호를 찾을 때까지 많은 수의 암호를 제출하는 것으로 구성됩니다. 공격자는 올바른 암호를 찾을 때까지 가능한 모든 암호를 대입하고 이를 체계적으로 확인합니다.

워드프레스 사이트 해킹 복구 단계

워드프레스 사이트 해킹 으로부터 복구하기 위해 다음의 과정으로 작업을 수행했습니다.

  1. 외부 네트워크로부터 사이트 접속 차단
  2. Admin 사용자를 비롯해 사용자 비밀번호 변경
  3. DB root 및 워드프레스 유저 비밀번호 변경
  4. Backdoor / Troijan 코드 삽입 부분 검출 및 제거

외부 네트워크로부터 사이트 접속 차단

혹시라도 복구 과정중에 어떤 정보가 해커에게 다시 흘러들어가는 것을 방지하기 위해 외부 네트워크 접속을 차단하였습니다. 본 사이트의 경우 클라우드 인스턴스를 사용하고 있기 때문에 보안 그룹 설정을 통해 조치를 취하는 PC의 IP 주소 이외의 모든 접속을 차단하는 방식으로 작업했습니다.

사용자 비밀번호 변경

사이트의 Administrator 및 모든 등급의 모든 사용자의 비밀번호를 어려운 비밀번호로 변경했습니다.

이미 Admin 사용자를 생성한 것으로 보아 비밀번호를 비롯한 모든 DB상의 정보가 탈취되었다고 가정해야 하기 때문에 사이트 등록 사용자의 비밀번호를 변경했습니다.

사용자 비밀번호 변경은 워드프레스 어드민 패널의 사용자 메뉴에서 변경할 수 있습니다.

DB 패스워드 변경

이런 경우 일단의 조치를 하더라도 이미 유출되었을 지 모르는 DB 및 사용자 계정 비밀번호들은 새로 설정하는 편이 안전할 것입니다.

저는 평소 사용하던 Beekeeper Studio라는 GUI 도구를 이용해서 MySQL 비밀번호 변경을 하기 위해 접속을 했습니다.

Beekeeper Studio

하지만 리눅스 터미널의 mysql-client 를 이용해도 전혀 문제가 없습니다. root 사용자로 로그인하여 쿼리를 수행할 수 있는 상태를 준비하면 됩니다. 아래 SQL을 이용해 root 비밀번호와 wordpress 사용자 비밀번호를 변경해 줍니다.

ALTER USER 'root'@'%' IDENTIFIED BY 'MY_NEW_ROOT_PW';
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MY_NEW_ROOT_PW';
ALTER USER '워드프레스사용자명'@'%' IDENTIFIED BY 'MY_NEW_PW';

Backdoor / Troijan 코드 삽입 부분 검출 및 제거

Troijan이 검출된 것으로 보아 코드상에 어떤 부분을 수정했거나 해킹용 코드를 삽입해 두었을 것으로 추측했습니다.

이 부분을 찾아내기 위해 이번의 경우 동일한 형태의 워드프레스 사이트를 하나 더 구축을 한 다음 코드 머지 도구를 이용하여 변경된 부분을 검색하는 방법을 사용했습니다.

WinMerge라는 무료 도구를 이용하여 새로 설치한 사이트의 워드프레스 파일들과 해킹이 발생한 사이트 코드를 비교하였습니다.

비교 결과 wp-includes 디렉토리에서 general-template.php 파일이 변조된 것을 확인할 수 있었습니다.

삽입된 부분을 삭제하고 사이트를 정상화 시켰습니다.

해킹 재발 방지 설정

이로써 일단의 조치들은 완료되었지만, 차후 동일한 방식의 계정 탈취가 발생하지 않도록 하기 위해서 방지 대책을 강구해야 했습니다. 하기의 조치를 추가로 수행하였습니다.

  1. 어드민 경로 변경
  2. xmlrpc.php 비활성화

어드민 경로 변경

워드프레스 사이트 해킹 관련 검색 결과 wp-login.php 주소가 모두 동일하기 때문에 이를 통해 계정 정보가 탈취되는 경우가 많은 것 같습니다. 이 문서를 참조하여 진행하였습니다.

먼저 wp-login.php 파일의 이름을 원하는 이름으로 변경합니다. (ex: my-new-login.php)

그리고 텍스트 에디터를 이용해 wp-login.php 부분을 찾아 변경된 이름으로 일괄 변경해 줍니다.

이러한 조치 이후에 액세스 로그를 살펴보면 공격자가 wp-login 경로에 입력하는 트래픽은 404로 리턴이 되는 것을 볼 수 있습니다.

106.15.38.206 - - [11/Aug/2022:10:01:44 +0900] "POST /wp-login.php HTTP/1.1" 404 17737 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36"

xmlrpc 비활성화

xmlrpc는 낮은 버전의 워드프레스 사이트에서 사용한 모듈간 통신 수단이었으나, 보안 취약성을 가집니다. 그리고 기본 설치시 항상 활성화 상태입니다. 하지만 Jetpack 과 같은 플러그인에서 현재까지 사용하고 있다고 하니, 사용중인 플러그인이 없는 경우에만 비활성화 해주는 것이 좋습니다.

xmlrpc를 비활성화 하기 위해서는 disable xml-rpc 플러그인을 설치해 주면 간단하게 적용할 수 있습니다.


Jay

Jay

S/W Engineer!!

2개의 댓글

1 · 2023-02-11 14:14

1

가이버 · 2024-02-21 10:39

혹시 도움을 주실 수 있을까요?

답글 남기기

Avatar placeholder