이 문서에서는 가장 흔한 WordPress 해킹 유형, 이를 식별하는 방법, 그리고 이를 해결하는 다양한 방법에 대해 다룹니다. 이러한 문제가 발생하면 전문 웹 개발자에게 추가 지원을 요청하는 것을 강력히 권장합니다. 호스팅 계정의 보안을 강화하는 추가 안내는 이 가이드를 참고하세요.
중요: 변경을 하기 전에 웹사이트의 전체 백업을 생성하세요.
참고: 향후 WordPress 해킹 위험을 줄이려면 정기적으로 호스팅 계정을 스캔하여 안티바이러스 도구로 악성 또는 의심스러운 파일을 제거하고, 웹사이트의 모든 플러그인과 테마를 최신 버전으로 유지하세요.
여러 가지 문제가 기본 파일의 누락 또는 변경을 초래할 수 있지만, 가장 흔한 원인은 WordPress 설치에 주입된 악성코드입니다. 다행히도, 저희 웹 및 호스팅 서버의 안티바이러스 도구는 손상된 파일을 자동으로 감지하고 격리할 수 있습니다.
핵심 WordPress 파일이 감염되면 다음과 같은 증상이 나타날 수 있습니다:
빈 페이지;
500 Internal Server Error;
“이 사이트에 기술적 문제가 발생했습니다” 오류(WordPress 5.2.2에서 도입됨);
또는 이와 유사한 기타 오류.
이 문제를 해결하려면 아래에 안내된 단계를 따르세요.
사이트에서 문제가 발생한 원인을 파악하려면 error_log 파일을 검토하세요. 이 파일에는 웹사이트에서 발생한 중요한 오류가 기록됩니다.
cPanel 계정 > “파일 관리자” 메뉴 > WordPress 설치의 루트 디렉터리에서 찾을 수 있습니다.
도메인의 루트 폴더에 접근하면 error_log 파일을 찾으세요. 파일이 있다면 다음 단계를 따르세요:
파일을 마우스 오른쪽 버튼으로 클릭한 후 보기를 선택하세요:

로그 내부에서 다음과 같은 오류를 볼 수 있습니다: “No such file or directory in…”와 같이 누락된 파일의 경로가 표시됩니다. 이는 필수 파일이 없어서 웹사이트가 제대로 작동하지 못함을 의미합니다.
예시:/home/cPuser/public_html/wp-settings.php

누락된 파일을 복구하려면 이 가이드의 "누락된 파일 교체 방법" 섹션으로 이동하세요.
error_log 파일이 웹사이트 루트 디렉터리에 없다면, cPanel 계정에서 display_errors PHP 옵션을 활성화할 수 있습니다. 이 설정을 통해 오류 메시지가 웹사이트에 직접 표시되어 문제를 더 쉽게 파악할 수 있습니다.
중요: 보안상의 이유로 문제 해결이 끝나면 반드시 display_errors를 비활성화하세요.
PHP 옵션은 다음 방법으로 활성화할 수 있습니다:
php.ini를 통해
cPanel의 “PHP Tweaks” 메뉴 외에도, php.ini 파일을 직접 수정하여 웹사이트의 일부 설정을 조정할 수 있습니다.
display_errors 옵션을 활성화하려면 파일에 다음 줄을 추가해야 합니다: display_errors=1
웹사이트 루트 폴더에 새 php.ini 파일을 생성하여 줄을 추가하거나, 아래 단계에 따라 시스템에서 생성된 파일을 수정할 수 있습니다.
cPanel 계정에 로그인한 후 “파일 관리자” 메뉴로 이동하세요.
설정에서 “숨김 파일(dotfiles) 표시” 옵션이 활성화되어 있는지 확인하세요:

다음 디렉터리로 이동하세요: /home/cPanel_user/.system-php/ini

도메인에 할당된 PHP 버전을 선택한 후 도메인 디렉터리를 선택하세요. 예를 들어 전체 경로는 다음과 같을 수 있습니다:
/home/cPanel_user/.system-php/ini/7.0/testwebsite.com
php.ini 파일을 마우스 오른쪽 버튼으로 클릭하고 편집을 선택하세요.
파일에 다음 줄을 추가하세요: display_errors=1
.htaccess를 통해
.htaccess 파일을 통해 display_errors PHP 옵션을 활성화하려면, “파일 관리자”에서 웹사이트 루트 디렉터리 내의 파일을 편집하고 다음 줄을 추가하세요:php_value display_errors 1
.htaccess 파일 위치를 찾는 자세한 단계는 이 기사에서 확인할 수 있습니다.
변경을 완료한 후 저장을 클릭하세요.
WordPress는 간단하고 체계적인 파일 구조를 사용하므로 누락되거나 손상된 파일을 복구하기가 비교적 쉽습니다. 기본 핵심 파일을 교체하는 것이 강력히 권장되며, 이는 악성코드로 인해 손상된 모든 파일이 완전히 복원됨을 보장합니다. 단, 주의하세요: 특정 파일이나 폴더를 잘못 교체하면 데이터가 손실될 수 있습니다.
누락된 WordPress 파일을 교체하려면 아래 단계를 따르세요:
cPanel에 로그인한 후 Softaculous Apps Installer로 이동하세요.
임시 하위 디렉터리에 새 WordPress 설치를 생성하세요. 이를 위해 WordPress 아이콘을 클릭한 후 설치를 선택하세요:

설치 설정 페이지로 이동합니다. 여기서 드롭다운 메뉴에서 해당 도메인 이름을 선택하고 디렉터리 내 필드에 하위 폴더 이름을 입력하세요.
이 예시에서는 WordPress 설치를 위해 ” fix” 하위 폴더를 사용합니다:

참고: 모든 기본 파일을 교체하면 기존 설치가 임시 “fix” 설치에 사용된 버전으로 업데이트되며, 서로 다른 버전의 파일을 혼합하면 시스템 충돌 및 사이트 기능 장애가 발생할 수 있습니다.
현재 WordPress 버전을 유지해야 하거나 특정 파일만 교체하려는 경우, 사이트의 /wp-includes/version.php 파일에서 버전을 확인하고 새 설치가 동일한 WordPress 버전을 사용하도록 하세요:

새 설치를 위한 WordPress 버전은 설치 창에서 직접 선택할 수 있습니다:

모든 설정이 완료되면 빠른 설치를 클릭하거나 설치 페이지 하단으로 스크롤하여 설치를 클릭하세요.
새 WordPress 설치가 완료되면 해당 파일이 “파일 관리자” > 도메인 루트 디렉터리에 나타납니다. 폴더를 더블 클릭하여 여세요:

특정 누락 파일(예: wp-settings.php)을 교체하려면 새 설치 디렉터리에서 해당 파일을 찾으세요.
이후 파일을 마우스 오른쪽 버튼으로 클릭 > 이동 > 웹사이트 루트 폴더 경로 입력 > 파일 이동을 클릭하여 현재 웹사이트 루트 디렉터리로 이동하세요:

완료되면 누락된 파일이 복원되어 웹사이트가 정상적으로 로드되어야 합니다.
웹사이트의 모든 기본 WordPress 파일을 교체하는 과정에서 1~6단계는 “누락된 WordPress 파일 교체 방법” 섹션과 동일합니다.
이 단계를 완료하고 새 WordPress 설치가 생성되면, 웹사이트 루트 폴더의 모든 기본 파일을 교체하려면 다음 단계를 따르세요:
새 WordPress 설치 루트 폴더를 여세요:

새 설치 폴더 내에서 다음 파일 및 폴더를 삭제하세요:

.htaccess
wp-config.php
wp-content
이 파일과 폴더에는 사이트의 구성 및 콘텐츠가 포함되어 있으므로 변경하지 않아야 합니다.
그런 다음 나머지 파일을 메인 웹사이트의 루트 디렉터리로 이동하세요. 이를 위해 전체 선택 버튼을 사용한 후 > 클릭하여 이동 > 사이트 루트 폴더 경로 입력 > 클릭 파일 이동:

WordPress 핵심 파일이 모두 교체되었습니다. 웹사이트를 방문하여 모든 것이 정상적으로 로드되는지 확인하세요.
사이트에 여전히 오류가 표시된다면 error_log를 다시 확인하세요. 대부분의 경우 추가 문제는 테마 또는 플러그인 파일 누락으로 인해 발생합니다.
테마 또는 플러그인 파일 누락은 여러 가지 이유로 발생할 수 있지만, 가장 흔한 원인은 WordPress 설치의 필수 구성요소를 감염 및 제거하는 악성코드입니다.
WordPress 플러그인 또는 테마 파일이 누락된 경우 다음과 같은 현상이 나타날 수 있습니다:
빈 페이지;
500 Internal Server Error;
“이 사이트에 기술적 문제가 발생했습니다” 오류(WordPress 5.2.2에서 도입됨);
부분적으로 로드되거나 시각적으로 “깨진” 페이지.
문제 진단에 도움이 필요하다면 이 문서의 다음 섹션을 참고하세요: 웹사이트의 error_log 파일 확인 및 display_errors PHP 옵션 활성화.
error_log 또는 웹사이트에서 다음과 유사한 오류 메시지를 볼 수 있습니다:
PHP Fatal error: Uncaught Error: Call to undefined function sample_function() in /home/cPaneluser/...
다음은 손상되었거나 누락된 플러그인 파일로 인해 발생한 오류 예시입니다:

누락된 파일을 복구하려면 해당 테마 또는 플러그인을 다시 설치하세요.
참고: 테마의 functions.php 파일 누락은 종종 wp-vcd.php 악성코드와 관련이 있으며, 일반적으로 /wp-includes 디렉터리에 위치합니다. 새 테마를 설치하기 전에 wp-vcd.php가 있다면 삭제하거나, 완전한 안전을 원한다면 위에서 설명한 대로 모든 기본 WordPress 파일을 교체하세요 이전.
경우에 따라 웹사이트가 악성코드에 감염되면 방문자를 유해하거나 의심스러운 페이지로 리디렉션할 수 있습니다. 이 문제는 보안이 취약한 플러그인 또는 테마로 인해 발생하는 경우가 많으며, 공격자가 데이터베이스 URL을 변경하거나 웹사이트 파일을 수정할 수 있습니다.
참고: 리디렉션된 링크를 클릭하지 마세요. 클릭 시 개인 컴퓨터가 악성코드에 감염될 수 있습니다:

악성 리디렉션을 해결하려면 아래 단계를 따르세요:
웹사이트의 데이터베이스 구성 파일 - wp-config.php 를 cPanel > 파일 관리자 > 웹사이트 루트 폴더에서 찾으세요. 파일을 열어 웹사이트의 데이터베이스 이름을 확인하세요:

그런 다음 cPanel의 phpMyAdmin 메뉴에서 웹사이트에 할당된 데이터베이스를 클릭하여 열고 wp_options 테이블로 이동하세요(“wp_”는 기본 접두사이며, 다를 수 있습니다):

siteurl 및 home 필드의 값을 확인하고, 악성 또는 의심스러운 URL이 있다면 실제 도메인 이름으로 교체하세요:

데이터베이스의 나머지 부분도 유사한 악성 URL이 있는지 스캔하고 적절히 교체하세요.
현재 .htaccess를 임시로 기본 버전으로 교체하세요. 기존 파일의 이름을 변경(예: .htaccess_old)하고 새 파일을 새로 만드는 것이 가장 좋습니다.
파일 이름을 변경하려면 파일을 더블 클릭 > 이름 변경 선택 > 새 파일 이름 입력 > 파일 이름 변경을 누르세요.
그런 다음 새 파일을 만들려면 + 파일 클릭 > 이름을 .htaccess로 지정 > 새 파일 만들기를 선택하세요.
새로운 .htaccess가 생성되면 마우스 오른쪽 버튼으로 클릭 > 편집 을 선택하세요. 편집 창이 열리면 아래의 기본 WordPress 규칙을 파일에 붙여넣으세요:# BEGIN WordPressRewriteEngine OnRewriteBase /RewriteRule ^index\.php$ - [L]RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule . /index.php [L]# END WordPress
변경 사항 저장을 클릭하세요.
웹사이트가 계속 리디렉션된다면 모든 기본 WordPress 핵심 파일을 교체해 보세요.
또한 WordPress 대시보드나 데이터베이스에서 모든 플러그인을 임시로 비활성화한 후 하나씩 활성화해 보세요. 각 플러그인을 활성화할 때마다 웹사이트를 확인하여 어떤 플러그인이 악성 리디렉션 문제를 일으키는지 확인하세요.