웹 셸
포스팅 뷰63
1. 웹 셸(Web Shell)이란?
1.1 웹 셸의 정의
웹 셸은 간단히 말해 웹 서버 위에서 원격 명령을 실행할 수 있도록 만들어진 악성 스크립트 파일입니다. 공격자는 PHP, ASP, JSP, Node.js 등 서버에서 실행되는 언어를 이용해, 브라우저를 통해 서버에 명령을 내릴 수 있는 일종의 “원격 콘솔”을 만들어 놓습니다.
1.2 웹 셸이 위험한 이유
- 서버 완전 장악: 웹 셸이 한 번 심어지면, 공격자는 서버 안을 자유롭게 돌아다니며 거의 모든 작업을 수행할 수 있습니다.
- 권한 상승의 발판: 초기엔 웹 서버 권한만 가지더라도, 추가 취약점을 이용해 root나 관리자 계정으로 권한을 높일 수 있습니다.
- 지속적인 침투: 눈에 띄지 않는 경로에 여러 개의 웹 셸을 숨겨 두고, 하나가 삭제되어도 다른 웹 셸로 다시 접속하는 식의 장기 잠입이 가능합니다.
- 2차 피해 유발: 개인정보 유출, 랜섬웨어 유포, 다른 서버 공격의 중계지 등으로 악용될 수 있습니다.
1.3 대표적인 웹 셸 종류
- PHP 웹 셸: 워드프레스, 게시판, 쇼핑몰 등 PHP 기반 서비스에서 가장 흔하게 발견됩니다.
- ASP/ASP.NET 웹 셸: 윈도우 서버 + IIS 환경에서 사용되는 웹 셸입니다.
- JSP 웹 셸: 톰캣(Tomcat)이나 WAS(Web Application Server)를 사용하는 자바 기반 서비스에서 사용됩니다.
- 기타 스크립트형 웹 셸: Python, Node.js 등 다양한 언어와 프레임워크에서도 웹 셸 형태의 악성 스크립트가 존재할 수 있습니다.
2. 웹 셸 해킹이 이루어지는 원리
2.1 파일 업로드 취약점
가장 대표적인 경로는 파일 업로드 기능입니다. 이력서 업로드, 이미지 업로드, 첨부파일 기능 등에서 서버 측 검증이 허술할 경우, 공격자는 이미지처럼 보이지만 실제로는 서버에서 실행되는 스크립트 파일을 업로드할 수 있습니다.
2.2 입력값 검증 부족
파일 업로드뿐만 아니라, URL 파라미터·폼 입력값·쿠키 값 등을 제대로 필터링하지 않으면 특정 파라미터를 통해 동적으로 다른 파일을 불러오는 기능이 악용되어 웹 셸을 실행할 수 있는 구조가 만들어지기도 합니다.
2.3 서버 설정 오류
- 업로드 디렉터리를 실행 가능한 스크립트 경로와 분리하지 않은 경우
- 테스트용 디렉터리(
/test,/old)를 그대로 남긴 경우 - 디렉터리 리스팅, 에러 상세 출력 같은 디버그 기능을 제거하지 않은 경우
2.4 권한 상승 및 지속적 장악
- 서버 정보 탐색(OS·계정·설치 프로그램 확인)
- 추가 취약점으로 관리자 권한 확보
- 추가 백도어 설치 및 로그 삭제
3. 공격자가 웹 셸을 업로드하는 실제 시나리오
3.1 취약한 파일 업로드 폼 이용
공격자는 먼저 파일 업로드 기능이 있는 페이지를 찾고, 검증이 허술한지 확인합니다.
3.2 확장자 우회
- 이중 확장자:
test.php.jpg - 대소문자 혼합 확장자:
.Php - MIME 헤더 조작
3.3 업로드 경로 파악
업로드된 파일이 실제 어디 저장되는지 에러 메시지나 디렉터리 구조를 통해 추적합니다.
3.4 웹 셸 실행 및 서버 장악
웹 브라우저에서 웹 셸 파일을 직접 열어 명령을 실행하고, 서버를 점차 장악합니다.
4. 웹 셸 감염 시 나타나는 증상
- CPU 급상승 및 야간 비정상 트래픽 증가
- 관리자 계정 생성 또는 권한 조작
- 외부 IP로 대량 통신 발생
- 웹사이트 변조, 악성코드 배포
5. 웹 셸 탐지 방법
5.1 파일 무결성 검사
해시값을 비교해 신규 또는 변경된 의심 파일을 확인합니다.
5.2 웹 서버 로그 분석
- 특정 IP에서 반복 업로드 요청
- 스크립트 파일 직접 호출
- 비정상적인 파일명 또는 경로 접근
5.3 코드 패턴 탐지
exec, system, eval 등 위험 함수 사용 여부를 점검합니다.
5.4 자동 웹셸 스캐너 활용
전문 보안 솔루션을 통해 웹셸 패턴을 자동 분석할 수 있습니다.
6. 웹 셸 방지 전략
6.1 안전한 파일 업로드 정책
- 허용 확장자 화이트리스트 적용
- 서버 측 MIME 검사
- 업로드 디렉터리 실행 권한 제거
- 파일명 난수화
6.2 웹 방화벽(WAF) 적용
파일 업로드 공격, 우회 기법 등을 자동 차단할 수 있습니다.
6.3 정기 취약점 점검
CMS, 플러그인, 라이브러리 업데이트는 필수입니다.
6.4 안전한 보안 코딩
- 입력값 검증 및 인코딩
- 민감한 에러 메시지 제거
- 테스트/디버그 코드 제거
- 최소 권한 원칙 준수
7. 웹 셸 감염 시 대응 절차
7.1 의심 파일 격리
증거 보존을 위해 삭제 대신 안전 영역에 격리합니다.
7.2 서버 로그 분석
초기 침입 경로 확인이 핵심입니다.
7.3 공격 경로 차단
- 취약 기능 임시 중단
- 취약 플러그인 제거
- 보안 패치 적용
7.4 재발 방지
- 보안 정책 재점검
- 개발자 / 운영자 보안 교육
- 정기 로그 모니터링
8. 결론
웹 셸은 단순한 파일처럼 보이지만, 서버 전체를 장악할 수 있는 강력한 공격 도구입니다. 안전한 파일 업로드 정책, 정기 점검, 실시간 모니터링 체계를 갖추는 것이 장기적 보안의 핵심입니다.