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

워드프레스 백도어 제거 가이드: PHP/ApiWord 악성코드 감염 진단부터 복구까지

최근 많은 워드프레스 사이트에서 functions.php 파일 상단에 악성 코드가 삽입되는 사례가 발견되고 있습니다. 이 코드를 통해 공격자는 원하는 거의 모든 피해를 사이트에 입힐 수 있습니다. 해당 코드는 ApiWord 악성코드로부터 유래된 것으로, post.phpfunctions.php 파일을 변조할 뿐만 아니라 백도어 역할을 하는 /wp-includes/class.wp.php 파일까지 생성합니다.

functions.php 파일은 모든 테마가 워드프레스에서 인식되기 위해 반드시 필요한 핵심 파일이며, 페이지가 로딩될 때마다 실행됩니다. 바로 이러한 특성 때문에 악성 코드의 주요 표적이 됩니다.

ApiWord 악성코드란?

실제 감염 사례 중 하나에서는 woocommerce-direct-download라는 악성 플러그인의 functions.php 파일 안에서 감염 코드가 발견되었습니다. 이 플러그인에는 난독화된 PHP 코드를 포함한 woocp.php라는 악성 스크립트가 숨어 있었고, 이 스크립트가 실행되면 모든 functions.php 파일에 악성 코드를 삽입하게 됩니다.

일단 감염되면 스크립트는 백도어를 생성하며, 공격자는 이를 다양한 방식으로 악용할 수 있습니다. 백도어 PHP 스크립트의 대표적인 악용 방법은 다음과 같습니다.

  • 사이트에 임의의 게시물을 추가하거나 기존 게시물을 변조
  • 서버 내 모든 워드프레스 사이트에 감염 확산
  • ApiWord 도메인에서 동적으로 가져온 코드로 서버에 새로운 PHP 파일 생성

ApiWord 악성코드는 wp-includes/post.php 파일에 코드 조각을 추가하고, wp-includes/wp-cd.php 파일을 생성합니다. 아래는 해당 코드의 base64 디코딩 결과입니다.

관련 글 – 워드프레스 wp-vcd 악성코드 제거 방법

워드프레스 백도어 제거 가이드: PHP/ApiWord 악성코드 감염 진단부터 복구까지

디코딩된 코드는 아래와 같습니다.

워드프레스 백도어 제거 가이드: PHP/ApiWord 악성코드 감염 진단부터 복구까지

ApiWord 악성코드 감염 여부 확인 방법

먼저 알아두어야 할 점은, 악성 코드가 설치된 각 테마의 루트 디렉터리에 있는 모든 functions.php 파일의 최상단에 추가된다는 사실입니다.

예를 들어 워드프레스 사이트의 테마 이름이 "MyTheme"이라면, 악성 코드는 wp-content/themes/MyTheme/functions.php 파일에 삽입됩니다.

악성 코드가 포함된 것으로 알려진 파일 경로는 다음과 같습니다.

@file_puts_contents($_SERVER['DOCUMENT_ROOT'].'/wp-includes/class.wp.php', file_get_contents)

이 코드에는 wp_cd_code라는 이름의 변수 형태 시그니처가 포함되어 있으며, 이를 활용하면 감염된 파일을 식별할 수 있습니다.

워드프레스 백도어 제거 가이드: PHP/ApiWord 악성코드 감염 진단부터 복구까지

유닉스 계열 OS를 사용 중이라면, 서버 웹루트 디렉터리에서 아래 명령어를 실행하여 감염된 모든 파일 목록을 추출할 수 있습니다.

find -iname '*.php' -print0 | xargs -0 egrep -in 'wp_cd_code'

이 명령어는 모든 .php 파일을 대상으로 "wp_cd_code" 문자열을 재귀적으로 검색하며, 검색 결과로 해당 문자열이 포함된 파일 경로와 줄 번호를 출력합니다.

ApiWord 악성코드의 작동 원리

간단히 설명하면, 코드 인젝터는 각 사이트에 맞게 악성 코드를 설정한 후, 사용자 요청마다 실행되는 PHP 파일에 삽입합니다. 그리고 그 결과는 공격자에게 전달됩니다.

삽입된 코드는 HTTP 요청에 담긴 action 변수와 password 값을 확인합니다. 패스워드가 하드코딩된 해시 값(코드 인젝터가 미리 생성)과 일치하면, action 변수의 내용에 따라 지정된 동작을 수행합니다.

공격자는 생성된 비밀번호를 이용해 일반적인 로그인 과정 없이도 관리자 권한을 획득할 수 있습니다. 이를 통해 감염된 사이트에 임의 콘텐츠를 추가하거나 게시물을 수정하는 등의 행위가 가능해집니다. 자세한 내용은 '워드프레스 PHP 코드 실행 취약점' 관련 글을 참고하세요.

PHP/ApiWord 악성코드 제거 방법

ApiWord 악성코드를 완전히 제거하려면 테마 디렉터리 내 모든 functions.php 파일에서 백도어 코드를 철저히 삭제해야 합니다. 아래 체크리스트를 따라 진행하세요.

  1. 모든 functions.php 파일에서 악성 코드 확인: 해당 코드는 PHP 파일의 첫 번째 <?php ?> 블록 내에 위치하므로, 이 블록 전체를 삭제하는 것이 좋습니다.
  2. 코드 인젝터 즉시 삭제: 코드 인젝터가 아직 남아 있다면 즉시 제거하세요. 예를 들어 woocommerce-direct-download 플러그인의 경우, 코드 인젝터가 woocp.php 파일에 담겨 있으므로 해당 파일을 삭제해야 합니다.
  3. <wp_prefix>_datalist 및 <wp_prefix>_install_meta 테이블 점검: 이 테이블들은 변조된 게시물을 찾는 데 도움이 되므로 기록해 두었다가, 반드시 삭제하세요.
  4. 모든 게시물에서 "wp_cd_code" 시그니처 검색 및 DIV 태그 제거: 감염된 각 게시물에서 해당 DIV 요소를 찾아 삭제하세요.
  5. 서버에서 최근 수정된 파일 확인: SSH로 웹 서버에 로그인한 뒤, 아래 명령어를 실행하면 최근에 수정된 파일을 찾을 수 있습니다.

    find /path-of-www -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort -r

ApiWord 악성코드 감염 예방 방법

워드프레스 백도어 제거 가이드: PHP/ApiWord 악성코드 감염 진단부터 복구까지
  1. 파일 권한 업데이트: 웹사이트 파일 권한을 더욱 엄격하게 설정하세요. 폴더와 파일의 기본 권한은 각각 750과 640이 적절합니다. FTP/SFTP 클라이언트로 변경할 수 있으며, 명령줄로 재귀적으로 변경하려면 아래 명령어를 사용하세요.
    • 디렉터리 권한 설정:
      find /path/to/your/wordpress/install/ -type d -exec chmod 750 {} \;
    • 파일 권한 설정:
      find /path/to/your/wordpress/install/ -type f -exec chmod 640 {} \;
  2. 서버에 새로 생성되는 파일 모니터링: Astra 같은 WAF(웹 애플리케이션 방화벽)를 배포하면 서버에서 생성·삭제·수정되는 파일을 실시간으로 감시하고 정기적으로 악성코드를 스캔합니다.
  3. 불법 복제 테마 사용 금지: 반드시 공식적이고 신뢰할 수 있는 출처에서 제공하는 테마만 사용하세요.
  4. 워드프레스 업데이트 즉시 적용: 워드프레스는 발견된 취약점을 해결하기 위해 코어와 플러그인 업데이트를 정기적으로 배포합니다. Astra의 WordPress Security를 이용하면 업데이트 알림을 제때 받아볼 수 있습니다.
워드프레스 백도어 제거 가이드: PHP/ApiWord 악성코드 감염 진단부터 복구까지

ApiWord 악성코드: 마무리

악성코드는 끊임없이 진화하며, 웹사이트는 물론 평판에도 심각한 타격을 줄 수 있습니다. 감염된 사이트에서 악성코드를 제거하는 것도 중요하지만, 재감염을 막기 위해서는 더 근본적인 해결책, 즉 Astra의 보안 솔루션이 필요합니다.

워드프레스 커뮤니티의 최신 소식이나 업데이트 릴리스 알림을 받고 싶다면, WordPress Security 블로그를 구독하세요.

Astra Security Suite 소개

Astra는 해커, 인터넷 위협, 봇으로부터 웹사이트를 보호하는 필수 웹 보안 솔루션입니다. WordPress, OpenCart, Magento 등 인기 있는 CMS 기반 웹사이트에 선제적인 보안을 제공하며, 연중무휴 24시간 지원팀이 고객 문의에 대응합니다.