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

PHP 백도어와 웹 셸 완벽 가이드: 개념부터 탐지 및 제거 방법까지

현재 PHP는 Prestashop, WordPress, Magento 등 거의 모든 인기 CMS의 핵심 엔진으로 자리 잡고 있습니다. 이 서버 사이드 스크립팅 언어는 그 인기가 매우 높아 현재 인터넷상 웹사이트의 약 80%가 PHP로 구동되고 있습니다. 하지만 이러한 압도적인 점유율 때문에 PHP 기반 사이트는 해커들의 주요 표적이 되기도 합니다. 하나의 취약점만 찾아내면 수많은 사이트에 동시에 적용할 수 있기 때문입니다. 공격자들은 종종 교묘한 기법을 활용해 눈에 보이지 않게 악성 행위를 수행하며, PHP 웹 셸 백도어는 바로 웹사이트에 은밀하게 침투하도록 설계된 대표적인 악성 스크립트입니다.

PHP 웹 셸 백도어란 무엇이며, 왜 내 사이트가 감염될까?

PHP 웹 셸 백도어는 웹사이트에서 다양한 악성 행위를 수행하도록 설계된 악성 스크립트 및 프로그램을 의미합니다. 간단한 형태의 웹 셸은 명령어 기반 스크립트이며, PHP 웹 셸은 공격자가 PHP 서버를 원격으로 관리할 수 있게 해줍니다. 공격자는 인터넷상의 URL을 통해 서버에 접근할 수 있으며, 더 정교한 웹 셸은 메모리에 직접 접근하기도 합니다.

PHP 백도어와 웹 셸 완벽 가이드: 개념부터 탐지 및 제거 방법까지

특히 이러한 감염은 제거 후에도 반복해서 재발하는 경우가 많습니다. 지속적인 접근 권한을 유지하도록 설계되었기 때문입니다. 대부분의 백도어는 다양한 난독화 기법을 사용해 탐지를 회피하며, 일부는 복잡한 알고리즘을 통해 메모리 안에 직접 숨어 있기도 합니다.

PHP 웹 셸이 웹사이트에 침투하는 경로는 여러 가지가 있습니다. 다음은 감염을 허용하는 대표적인 보안 취약점입니다.

  • 약하거나 기본값으로 설정된 비밀번호
  • 제한 없는 PHP 파일 업로드 허용
  • 입력값 검증이 되지 않은 부실한 PHP 코딩
  • 오래된 PHP 버전 사용
  • 부적절한 PHP 설정
  • 민감한 파일에 대한 허술한 파일 권한
  • 부적절한 에러 리포팅과 코드 노출

PHP 웹 셸 백도어가 할 수 있는 일

일반적인 PHP 웹 셸 백도어는 공격자가 마치 관리자처럼 PHP 서버에서 명령어를 실행할 수 있게 해줍니다. 경우에 따라 공격자는 권한 상승(privilege escalation) 시도를 하기도 합니다. 이 셸을 통해 공격자는 다음과 같은 행위를 할 수 있습니다.

  • 서버의 모든 유형 데이터에 접근
  • 내 서버를 이용한 암호화폐 채굴
  • 공격자의 지시에 따라 대량의 스팸을 발송하는 봇으로 서버 변조
  • 그 외 무수히 많은 악의적인 행위!

PHP 웹 셸 백도어: 코드 분석

일반적인 PHP 웹 셸 백도어는 다음 단계를 거쳐 작동합니다.

첫 번째 단계는 시스템 변수 초기화입니다. 이 과정에서 웹 셸은 오류 메시지가 화면에 출력되지 않도록 하여 탐지를 회피합니다. 이를 위해 x_die 함수를 생성합니다. 오류가 발생하면 관련 메시지가 이 함수로 전달되고, 이 함수는 PHP의 die() 함수를 호출해 현재 스크립트 실행을 종료합니다.

PHP 백도어와 웹 셸 완벽 가이드: 개념부터 탐지 및 제거 방법까지

다음 단계는 웹 셸이 PHP 서버에서 명령어를 실행할 수 있는지 확인하는 것입니다. 이를 위해 일반적인 PHP 웹 셸은 exec(), system() 등 PHP의 다양한 실행 함수들을 점검합니다.

PHP 백도어와 웹 셸 완벽 가이드: 개념부터 탐지 및 제거 방법까지

이후 웹 셸은 시스템 설정을 확인하고 해당 설정을 변경할 수 있는지 검증합니다. 설정 관련 함수가 존재하지 않으면 'can not config' 메시지를 x_die() 함수로 전달합니다.

PHP 백도어와 웹 셸 완벽 가이드: 개념부터 탐지 및 제거 방법까지

또한 PHP 서버의 세이프 모드(safe mode) 여부도 확인합니다. 세이프 모드는 주로 공유 호스팅 서버에 적용되는 기능으로, 특정 파일을 연 프로세스가 검증된 사용자에 의해 실행되었는지 확인합니다. 세이프 모드가 활성화되어 있으면 웹 셸은 더 이상 실행을 진행하지 않습니다.

if(x_ini_get('safe_mode')){x_die('can not exec: safe mode active');}

모든 조건이 충족되면 웹 셸은 Windows 시스템의 Superfetch 서비스를 이용해 명령어를 실행합니다.

PHP 백도어와 웹 셸 완벽 가이드: 개념부터 탐지 및 제거 방법까지

PHP 웹 셸 백도어: 탐지 및 제거 방법

  1. 모든 PHP 파일의 소스 코드를 검토하여 일반적인 PHP 웹 셸 백도어에 감염되었는지 확인합니다.
  2. 수동 검색이 어렵다면 Grep 명령어를 활용하세요.
  3. 다음 명령어로 폴더 내 웹 셸 코드 덤프를 검색합니다:
    grep -r "dump of web shell" /folderToSearch/
  4. 이 방법으로 일반적인 웹 셸을 탐지할 수 있습니다. 다만 한 종류의 일반 웹 셸만 검색할 수 있다는 한계가 있습니다.
  5. 다른 웹 셸을 찾으려면 해당 소스 코드를 알아야 합니다. GitHub에서 무료로 배포되는 웹 셸 탐지 도구를 활용하면 이 문제를 해결할 수 있습니다.
  6. PHP 웹 셸을 탐지하기 위해 로그에서 의심스러운 HTTP 요청도 반드시 확인하세요. 웹 셸을 발견했다면 즉시 삭제합니다.
  7. 민감한 파일에서 PHP 웹 셸 덤프가 발견된 경우, 해당 부분을 주석 처리한 후 전문가에게 추가적인 악성코드 제거 및 분석을 의뢰하세요.

PHP 웹 셸 백도어: 예방 및 완화 대책

  1. PHP 버전을 항상 최신 상태로 유지합니다.
  2. 기본 비밀번호나 취약한 비밀번호 사용을 피합니다.
  3. 사이트 설정 오류(misconfiguration)가 없는지 항상 점검합니다.
  4. 파일 권한을 절대 777로 설정하지 않습니다. 누구나 파일을 수정할 수 있게 됩니다!
  5. PHP 파일 개발 시 보안 코딩 규칙을 준수합니다.
  6. 종합적인 침투 테스트(penetration testing)를 실시하여 PHP 사이트의 취약점을 사전에 발견합니다.

결론

웹 셸을 삭제하는 것만으로 사이트가 안전해지는 것은 아닙니다. 공격자는 여전히 사이트의 취약점을 이용해 새로운 웹 셸을 업로드할 수 있습니다. 일반 사용자에게 이러한 취약점을 스스로 찾아내는 것은 쉽지 않기 때문에, 보안 솔루션을 활용해 이 과정을 자동화하는 것이 좋습니다.

Astra Security의 자동화 악성코드 스캐너는 클릭 한 번으로 수많은 PHP 웹 셸과 악성코드를 탐지합니다. 또한 Astra Security 방화벽은 웹사이트를 실시간으로 모니터링하며 유입되는 보안 위협을 차단합니다. 필요에 맞는 플랜을 선택하고 지금 바로 시작해 보세요!