wp-vcd.php 파일의 이름에서 유래한 WP-VCD 악성코드는 워드프레스 생태계에 큰 피해를 일으킨 대표적인 멀웨어입니다. 보안 연구진이 처음 발견한 지 1년이 넘는 시간 동안 이 악성코드는 끊임없이 진화하며 더욱 교묘해졌습니다. 이 글에서는 WP-VCD 악성코드의 변천 과정과 함께, 웹사이트가 감염되었을 때 복구하고 재감염을 예방하는 방법까지 자세히 살펴봅니다.
WP-VCD 악성코드의 주요 증상
1. 관리자 권한의 새 사용자 계정 생성: 해커들이 관리자(Administrator) 권한을 가진 사용자 계정을 몰래 추가하는 사례가 확인되었습니다.
2. 서버 리소스 과다 사용: WP-VCD는 서버 리소스를 대량으로 소모하는 것으로 악명이 높습니다. 실제로 호스팅 업체가 '리소스 과다 사용'을 이유로 계정을 정지시키는 사례도 있었습니다.
3. 웹사이트 로딩 속도 저하: 감염된 사이트는 로딩 속도가 눈에 띄게 느려집니다. 평소 2~3초 걸리던 페이지가 30초 이상 걸리는 경우도 목격되었습니다.
4. 출처 불명의 자바스크립트 코드: functions.php, index.php 같은 핵심 파일은 물론 워드프레스 코어 파일 거의 전체에 알 수 없는 자바스크립트 코드가 삽입됩니다. 특히 후자의 경우 복구가 매우 어렵고, 사이트가 악성 도메인으로 리디렉션되기도 합니다.
5. 코어 폴더 내 악성 PHP 코드: 'WP-VCD'라는 코드가 워드프레스 곳곳에 심어집니다. 악성코드 이름의 유래이기도 합니다. 파일명만 보면 워드프레스 기본 파일처럼 보이지만, 코드를 분석해 보면 악성코드임을 알 수 있습니다.
아래는 Astra Security의 악성코드 스캐너가 탐지한, wp-includes 디렉터리에 은닉되어 있던 WP-VCD 악성코드의 예입니다.
WP-VCD 감염의 주요 원인
일단 감염되면 감염을 제거하고 워드프레스를 철저히 보안 처리하는 것이 무엇보다 중요합니다. 동시에 초기 감염 경로를 파악하는 것도 그만큼 중요합니다. 확인된 주요 침입 경로는 다음과 같습니다.
- 불법 복제(nulled) 테마와 플러그인: WP-VCD 악성코드는 유료 테마·플러그인의 크랙 버전에 미리 심어져 배포됩니다. 이런 불법 테마와 플러그인에는 설치하는 순간 실행되는 악성 스크립트가 포함되어 있습니다.
불법 테마를 통해 사이트에 한번 침투하면, 다른 모든 테마까지 순차적으로 감염시킵니다. 공유 호스팅 환경에서는 같은 서버에 있는 보안이 취약한 사이트들까지 번져갑니다. 그래서 컨테이너화되지 않은 서버에서는 한 서버의 모든 사이트가 함께 감염되는 경우가 흔합니다. - 업데이트하지 않는 플러그인과 테마: 거의 모든 워드프레스 감염 사고의 공통적인 원인입니다. 다만 감염 후에 테마와 플러그인을 최신 버전으로 업데이트한다고 해서 감염이 저절로 사라지지는 않습니다. 선제적 보안을 위해 감염 제거 작업은 반드시 필요합니다.
- 선제적 보안 대책 부재: 해커들은 수년간 공격 기법을 고도화해 왔습니다. 이런 해킹으로 수천 달러를 벌기 때문에, 수백 달러를 투자해 해킹을 자동화하고 수천~수백만 개의 사이트를 동시에 감염시킬 여력이 있습니다.
이렇게 진화한 워드프레스 해킹 기법에 맞서려면 보안 도구에 대한 소액의 투자가 큰 효과를 발휘합니다. 이런 상황에서 겪는 골치 아픔을 덜어줄 뿐 아니라, 다운타임으로 인한 SEO·마케팅·매출 손실을 예방하는 부수적인 효과도 있습니다.
WP-VCD 악성코드는 정확히 어떻게 작동할까?
[다소 기술적인 내용이 등장하지만 매우 중요한 부분입니다]
WP-VCD가 정확히 어떤 동작을 하는지, 어떻게 서버의 소중한 리소스를 갈취해 웹사이트를 느리게 만드는지 이해하는 것은 매우 중요합니다.
악성코드가 사이트에 삽입되면 보통 functions.php나 index.php 같은 핵심 파일에 위치합니다. 이 악성코드는 사이트의 파일들을 호출(call)합니다. 브라우저에서 사이트가 열릴 때 악성코드가 호출한 파일에 접근하려 하고, 해당 파일이 존재하지 않으면 functions.php가 다시 실행됩니다. 결국 사이트 로딩 프로세스가 빙글빙글 돌게 되는 것입니다. 보안 분야에서는 이를 '포크 폭탄(fork bomb)'이라고 부릅니다.
1단계: 악성 스크립트 배포
테마의 functions.php 파일에서 다음과 비슷한 코드를 볼 수 있습니다.
<?php if (file_exists(dirname(__FILE__) . '/<b>class.theme-modules.php</b>')) <b>include_once</b>(dirname(__FILE__) . '/<b>class.theme-modules.php</b>'); ?>
이 코드는 배포용 스크립트가 존재하는지 확인한 뒤 이를 실행합니다. 위 코드에서 호출되는 파일은 class.theme-modules.php입니다. 감염 경로(테마인지 플러그인인지)에 따라 악성 스크립트는 각각 class.theme-modules.php 또는 class.plugin-modules.php 파일에 위치합니다.
2단계: 백도어 생성
<?php
//install_code1
error_reporting(0);
ini_set('display_errors', 0);
DEFINE('MAX_LEVEL', 2);
DEFINE('MAX_ITERATION', 50);
DEFINE('P', $_SERVER['DOCUMENT_ROOT']);
$GLOBALS['<b>WP_CD_CODE</b>'] = 'PD9waHANCmVycm9y...(base64-encoded string of PHP code)
...
이 코드는 100010010과 같은 이름의 새 관리자 계정을 생성합니다. 이 불법 관리자 계정의 목적은, 악성코드를 삭제하더라도 해커가 계속 사이트에 접근할 수 있게 하여 나중에 다시 공격할 수 있도록 하는 것입니다.
3단계: 해커의 명령 수신(C2 통신)
해커는 자신들의 C2(Command & Control) 서버 URL을 삽입하기도 합니다. 이 URL은 감염된 사이트들에 한꺼번에 명령을 내리기 위해 호출됩니다. www.krilns[.]com/code.php, krilns[.]pw, krilns[.]top 같은 도메인들이 다수의 WP-VCD 감염 사이트에서 이런 역할을 하는 것으로 확인되었습니다.
4단계: 다른 파일과 사이트로 확산
WP-VCD 악성코드의 다음 단계는 확산입니다. 사이트의 모든 테마와 플러그인에 악성 스크립트를 심습니다. 이후 같은 서버에서 취약한 사이트를 찾아내 차례로 감염시킵니다.
이 확산은 wp-includes/wp-vcd.php에 위치한 스크립트 배포로 시작됩니다. 이어서 워드프레스 코어의 wp-includes/post.php가 수정되어, 결국 모든 페이지에서 wp-vcd.php의 코드가 실행됩니다.
WP-VCD 악성코드 제거 및 복구 방법
1. 악성코드 찾아 삭제하기: 악성코드가 숨어 있을 가능성이 높은 위치들이 있습니다. 해커들은 악성코드를 더욱 교묘하게 숨기려 하지만, 아래 파일/폴더부터 먼저 점검해 보는 것이 좋습니다.
- wp-includes/wp-vcd.php
- wp-includes/wp-tmp.php
- wp-content/themes/*/functions.php (활성화 여부와 관계없이 서버에 설치된 모든 테마)
- class.wp.php
- code1.php
- class.theme-modules.php (테마 폴더 내부)
2. 악성 문자열 패턴 검색: 감염된 악성코드 파일에서 발견되는 문자열 패턴을 검색하면 탐색 범위를 좁히는 데 도움이 됩니다. 대표적인 패턴은 다음과 같습니다.
- tmpcontentx
- function wp_temp_setupx
- wp-tmp.php
- derna.top/code.php
- stripos($tmpcontent, $wp_auth_key)
3. functions.php 점검: 이 파일은 해커들이 가장 많이 감염시키는 파일 중 하나입니다. functions.php의 코드를 검토하면 wp-vcd 악성코드의 제어 코드를 발견할 수 있습니다.
4. diff(차이점) 검사로 코드 정상 여부 확인: 서버에 있는 파일 내용을 워드프레스 코어 GitHub 저장소 또는 테마/플러그인 디렉터리의 해당 파일과 비교(diff) 검사하세요. SSH 또는 IDE를 활용해 두 방식 중 하나(또는 둘 다)를 사용할 수 있습니다.

(파일 차이점 검사 화면 – Astra 악성코드 스캐너가 index.php 상단에 추가된 악성코드를 표시한 모습)
5. 악성코드 스캔 실행: 이런 감염 상황에서 악성코드 스캐너는 몇 시간씩 걸리는 수동 검색 시간을 크게 줄여 줍니다. 좋은 스캐너는 서버의 모든 파일을 분석할 뿐 아니라, 워드프레스 코어 파일의 모든 변경 사항도 빠짐없이 감지해 알려 줍니다.
WP-VCD 악성코드는 오래된 플러그인과 테마의 취약점을 악용해 사이트에 침투합니다. 대부분의 경우 사이트 소유자가 허가받지 않은 출처에서 무료 또는 크랙 버전의 플러그인과 테마를 설치하면서 직접 감염되며, 그 외에는 이미 감염된 사이트로부터 옮는 경우입니다.
관련 가이드 – 워드프레스 보안 완벽 가이드
이런 해킹 사고에서 얻을 수 있는 가장 큰 교훈은 미래를 위해 웹사이트를 안전하게 지키는 것입니다. Astra Security Suite는 전 세계 수천 개의 웹사이트를 보호하며 매일 수백만 건의 공격과 악성코드를 차단함으로써, 이런 상황 자체를 충분히 예방할 수 있도록 도와줍니다!