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

워드프레스 백도어 해킹 완벽 대응 가이드: 주요 원인과 탐지·복구 방법

워드프레스 백도어란 무엇일까?

매년 수천 개의 워드프레스 사이트가 악성코드에 감염되고 있으며, 그 수는 해마다 증가하는 추세입니다. 이렇게 해킹된 웹사이트들은 이후 스팸이나 각종 사기를 퍼뜨리는 도구로 악용됩니다. 더 큰 문제는 사이트 소유자나 개발자조차 감염 사실을 모른 채 지나치는 경우가 많다는 점입니다.

워드프레스 백도어(Backdoor)란 공격자가 서버에 지속적이고 허가되지 않은 접근을 할 수 있게 해주는 코드를 의미합니다. 보통 어딘가 숨겨진 악성 파일 형태로 존재하거나, 때로는 감염된 플러그인으로 위장하기도 합니다. 새로운 형태의 백도어 변종은 매달 새롭게 발견되고 있습니다.

해커들은 끊임없이 워드프레스 사이트에 백도어를 심으려 시도합니다. 지난 몇 년간 여러 플러그인이 감염 확산 경로로 악용되었고, 그렇기 때문에 위협은 어디서든 발생할 수 있습니다. 일단 백도어가 심어지면 제거 과정이 길고 번거로울 수 있지만, 예방 조치만 잘해도 피해를 크게 줄일 수 있습니다. 보안이 강화된 워드프레스 사이트라면 공격 자체를 막거나 최소한 늦출 수 있습니다. 이번 글에서는 백도어를 찾고 복구하는 구체적인 방법을 살펴보겠습니다.

워드프레스 백도어 해킹은 어떻게 발생할까?

워드프레스 사이트 구축은 비교적 쉽지만, 몇 가지 취약점이 백도어 침투의 통로가 될 수 있습니다. 주요 원인을 정리하면 다음과 같습니다.

  • 버그가 있는 플러그인이나 취약한 테마 사용
  • 약하거나 기본값 그대로인 로그인 계정 정보
  • 느슨한 파일 권한 설정으로 인한 민감한 파일 노출
  • 방화벽 등 보안 솔루션 미설치
  • 오래된 버전으로 방치된 설치 환경
  • 감염된 서버를 다른 사이트와 공유하는 경우 (호스팅 업체에 서브넷 격리 문의 필요)

워드프레스 백도어 찾는 방법

1. 테마에서 백도어 찾기

비활성화 상태의 테마는 백도어를 숨기기 가장 좋은 장소입니다. 해커들도 이 점을 잘 알고 있기 때문에 사이트 내 사용하지 않는 테마를 우선적으로 노립니다. 사용하지 않는 테마는 확인할 가능성이 낮기 때문입니다.

워드프레스 테마에는 functions.php라는 중요한 파일이 있습니다. 이 파일은 PHP 네이티브 함수와 워드프레스 함수들을 호출하는 역할을 하므로, 사실상 모든 종류의 작업을 수행할 수 있습니다. 그래서 공격자들이 이 파일에 코드를 삽입해 백도어를 만들려 하는 경우가 많습니다.

예를 들어 functions.php에 다음과 같은 악성 코드가 삽입될 수 있습니다. 공격자가 특정 URL(www.yoursite.com/wp-includes/registration.php)에 접속하면 코드가 실행되어 아래와 같은 관리자 계정이 새로 생성됩니다.

ID: backdooradmin
비밀번호: Pa55W0rd.

문제는 해당 사용자를 삭제하더라도, 공격자가 같은 URL에 다시 방문하면 계정이 재생성된다는 점입니다. 전형적인 워드프레스 백도어 사례입니다. 다만 이런 코드는 공격자가 먼저 서버에 접근할 수 있어야 삽입 가능하며, 열린 FTP 포트나 기타 취약점이 경로가 됩니다.

2. 플러그인에서 백도어 찾기

백도어 해킹의 상당수는 취약한 플러그인에서 비롯됩니다. 실제로 유저 수가 500만 명이 넘는 인기 플러그인 'Contact Form 7'에서도 권한 상승 취약점이 발견된 바 있습니다. 플러그인 파일이 변조되더라도 관리자 대시보드에서는 눈에 띄지 않지만, FTP 검색을 통해 드러낼 수 있습니다. 또한 해커들은 백도어 파일에 '헬퍼(helper) 파일' 같은 이름을 붙여 정상 파일처럼 위장하기도 합니다.

플러그인이 백도어의 온상이 되는 이유는 다음과 같습니다.

  • 사용하지 않는 플러그인은 오랫동안 백도어를 은닉할 수 있어 감염 위험이 높습니다.
  • 신뢰할 수 없는 저명성 없는 플러그인은 코딩 품질이 낮아 해킹 가능성이 커집니다.
  • 오래 업데이트하지 않은 플러그인은 많은 사이트가 여전히 사용 중이기에 공격 표적이 됩니다.
  • 취약한 플러그인은 다른 코어 파일까지 변조하는 발판이 될 수 있습니다.

따라서 출처를 알 수 없는 플러그인은 모두 점검하고, 사용하지 않는 플러그인은 반드시 삭제하세요!

3. 설치 파일에서 백도어 찾기

플러그인 감염 다음 단계는 코어 파일 변조입니다. 코어 파일 안에 승인되지 않은 코드가 들어가거나, 알 수 없는 새 파일이 생길 수 있습니다. 백도어는 때때로 사람이 읽을 수 없는 난독화된 코드 형태로 나타납니다.

$t43="l/T6\\:aAcNLn#?rP}1\rG_ -s`SZ\$58t\n7E{.*]ixy3h,COKR2dW[0!U\tuQIHf4bYm>wFz<admin@wsxdn.com&(BjX'~|ge%p+oMJv^);\"k9";

이런 코드는 알려진 기법으로 난독화되어 있어 사람이 읽기 어렵습니다. 이처럼 의미를 알 수 없는 코드를 발견하면 해당 파일을 즉시 삭제해야 합니다. 반대로 xml.php, media.php, plugin.php처럼 정상적으로 보이는 파일명으로 위장하는 경우도 있으니, 겉모습만 믿고 건너뛰어서는 안 됩니다.

또한 파일 전체에서 'FilesMan'이라는 키워드를 검색해 보세요. 아래는 악명 높은 FilesMan 백도어의 코드 예시입니다.

<?php
$auth_pass = "";
$color = "#df5";
$default_action = "FilesMan";
$default_charset = "Windows-1251";
preg_replace("/.*/e", ...);
?>

예를 들어 위 코드의 preg_replace 부분은 16진수(hex) 형식으로 되어 있는데, 디코딩하면 eval(gzinfla... 같은 실행문이 드러납니다. 온라인에서 무료로 제공되는 hex 디코딩 도구를 적극 활용하세요. base64 인코딩으로 숨겨진 경우도 같은 방식으로 처리하면 됩니다. 위 샘플에서는 4번째 줄에 'FilesMan'이라는 키워드가 포함되어 있으며, 이 계열 변종들은 대부분 이 키워드를 공통으로 가지고 있습니다. 간혹 .htaccess 같은 민감한 파일이 변조되기도 하므로 반드시 함께 확인하세요.

워드프레스 백도어 해킹 복구 방법

1. 체크섬(Checksum) 비교

첫 번째 단계는 체크섬 비교입니다. 파일 무결성을 판단하는 휴리스틱 방법으로, 수동 검사도 가능하고 무료 자동화 도구도 많이 나와 있습니다. 코어 파일뿐 아니라 플러그인과 테마에 대한 체크섬도 제공됩니다. 또한 공개된 목록들을 활용해 자신만의 블랙리스트를 관리하는 것도 좋은 방법입니다. 체크섬이 일치하지 않는 파일이 발견되면 수동으로 백도어 제거 작업을 진행하면 됩니다.

2. 코어 파일 무결성 검사

두 번째로, 체크섬 값이 다르게 나온 파일은 직접 열어 확인해야 합니다. 백도어 해킹이 파일 변조로 이어졌을 가능성이 매우 높기 때문입니다. 설치 파일의 무결성은 깨끗한 워드프레스 원본과 비교하는 방식으로 검증할 수 있습니다. 먼저 새로운 워드프레스 사본을 다운로드합니다.

$ mkdir wordpress
$ cd wordpress

위 명령어로 'wordpress'라는 디렉터리를 만들고 이동합니다.

$ wget https://github.com/WordPress/WordPress/archive/4.9.8.zip
$ tar -zxvf 4.9.8.zip

첫 번째 명령으로 최신 버전 워드프레스를 다운로드하고, 두 번째 명령으로 압축을 해제합니다. 그다음 핵심 단계는 diff 비교입니다.

$ diff -r /path/to/your/file.php /wordpress/wp-cron.php

이 코드는 두 파일의 차이점을 비교해 보여줍니다. 백도어가 파일을 변조했다면 변경 내역이 출력됩니다. 단, xmlrpc.php처럼 동적으로 변하는 파일도 있습니다. 이 파일은 사용자와 서비스가 RPC 방식으로 사이트와 통신할 때 사용되는데, 해커들도 이를 알고 백도어를 숨기는 곳으로 자주 활용합니다. 따라서 꼼꼼히 확인하고 백도어를 찾아 제거해야 합니다.

3. 인코딩된 코드 검색

파일이 변조되었지만 내용을 알아볼 수 없는 경우가 있습니다. 이럴 때는 base64 인코딩 문자열 검색부터 시작하는 것이 효과적입니다. 이때 grep 명령어가 강력한 도구가 됩니다.

find . -name "*.php" -exec grep "base64" {} \; -print &> output.txt

이 명령은 base64로 의심되는 모든 항목을 output.txt에 정리해 줍니다. 이후 온라인 디코딩 도구로 평문으로 바꿔 확인하면 됩니다. .php 외의 파일도 검색하려면 명령어의 *.php 부분만 바꾸면 됩니다. 악성코드가 16진수 형식일 수도 있으므로 grep -Pr "[\x01\x02\x03]" 같은 명령도 활용하고, 다른 인코딩 형식에 대해서도 같은 절차를 반복하세요. 악성 파일이나 코드 라인을 삭제하면 백도어 제거가 완료됩니다.

4. 서버 로그 활용

서버 로그 역시 백도어 제거에 큰 도움이 됩니다. 먼저 특정 날짜 이후 수정된 파일 목록을 확인하세요. FTP 로그를 훑어보며 서버에 접속했던 IP 주소도 점검해야 합니다. 최근에 변경된 파일을 주의 깊게 살피고, 이미지 폴더도 반드시 확인하세요. 이미지 폴더에 실행 파일이 있을 리 없지만, 폴더에 쓰기 권한이 열려 있는 경우가 많아 해커들이 숨어들기 좋아하는 장소입니다. 민감한 파일의 권한 설정도 점검하여 444 (r--r--r--) 또는 440 (r--r-----)로 설정하는 것을 권장합니다. 특히 이미지 폴더 내 변조 여부를 집중적으로 살펴보세요.

5. 업데이트와 백업

워드프레스 사이트를 최신 상태로 유지하는 것의 중요성은 아무리 강조해도 지나치지 않습니다. 오래된 설치 환경은 사실상 감염된 사이트와 다름없습니다.

  • 백도어 해킹의 원인을 추적하지 못하겠다면, 현재 사이트를 먼저 백업한 뒤 정상 백업본으로 복원하고 두 버전을 비교하세요.
  • 기존 백업이 없다면, 현재 사이트를 백업한 후 워드프레스 코어 파일을 수동으로 새 버전으로 교체하는 방법도 있습니다.
  • 사용 중인 플러그인에 취약점이 보고되었다면 즉시 업데이트하세요. 패치가 너무 늦어진다면 대체 플러그인으로 교체하는 것이 좋습니다.
  • 공식 블로그나 릴리즈 노트를 꾸준히 확인해 보안 패치를 최대한 빨리 적용하세요.

6. 백도어 스캐너 활용

사람은 언제나 실수할 수 있습니다. 수동 검사는 번거롭고 오류 가능성도 높아, 놓친 백도어가 재해킹의 빌미가 될 수 있습니다. 해결책은 자동화입니다. 요즘은 상당히 발전된 보안 도구들이 많으며, 워드프레스 백도어를 탐지하고 제거해 주는 스캐너도 존재합니다. 예를 들어 Astra 악성코드 클리너는 웹사이트를 정화할 뿐 아니라 향후 감염으로부터도 보호해 줍니다. 합리적인 가격에 전반적인 보안 상태를 한눈에 파악할 수 있어 소중한 시간과 리소스를 아껴줍니다.