웹셸 공격, 파일 업로드 취약점과 운영자가 할 예방 6가지
웹셸 공격은 파일 업로드 기능 등을 통해 서버에서 실행되는 악성 파일을 올려 홈페이지를 원격으로 조종하는 공격으로, 업로드 형식 제한·실행 차단·프로그램 업데이트로 대부분 예방할 수 있습니다. 이 글에서는 원리와 예방 6가지, 감염 점검 방법을 정리했습니다.
웹셸이란 무엇인가
웹셸은 웹서버에 올라가 실행되면서, 바깥에서 서버를 마음대로 다룰 수 있게 해 주는 악성 프로그램 파일입니다. 한번 설치되면 서버의 파일을 열어 보고 고치거나, 데이터베이스에 접근하거나, 다른 악성코드를 추가로 심는 통로로 쓰일 수 있습니다.
웹셸이 위험한 이유는 오래 숨어 있기 쉽다는 데 있습니다. 평범한 이미지나 프로그램 파일처럼 보이는 이름으로 숨어 있다가, 관리자 비밀번호를 바꾸고 화면을 복구한 뒤에도 같은 통로로 다시 들어오는 데 쓰입니다. 그래서 해킹 복구 때는 웹셸이 남아 있는지 확인하는 일이 빠지면 안 됩니다.
파일 업로드 취약점이 생기는 이유
웹셸이 들어오는 가장 대표적인 통로는 게시판 첨부, 문의 폼 첨부, 에디터 이미지 올리기처럼 방문자나 관리자가 파일을 올리는 기능입니다. 서버가 올라온 파일이 정말 이미지나 문서인지 제대로 확인하지 않거나, 업로드 폴더에서 프로그램 파일이 실행되도록 설정되어 있으면 취약점이 됩니다.
PHP 공식 문서인 PHP 매뉴얼의 POST 업로드 안내는 브라우저가 알려 주는 파일 형식 정보가 PHP 쪽에서 확인되지 않으므로 그 값을 그대로 믿지 말라고 설명합니다. 화면에서 걸어 둔 파일 크기 제한도 브라우저 쪽 편의 기능일 뿐이라 쉽게 무시될 수 있다고 안내합니다. 즉, 업로드 검사는 반드시 서버에서 해야 합니다.
업로드 기능이 아니어도 웹셸은 들어올 수 있습니다. 업데이트하지 않은 플러그인의 취약점, 유출된 관리자 계정, 유출된 FTP 계정으로 파일을 직접 올리는 경우도 있습니다. 아래 표는 업로드가 일어나는 지점별로 위험이 커지는 경우와 운영자가 확인할 점을 비교한 것입니다.
| 업로드 지점 | 위험이 커지는 경우 | 운영자가 확인할 점 |
|---|---|---|
| 게시판 첨부파일 | 누구나 글을 쓸 수 있고 첨부 형식 제한이 없음 | 허용 확장자 목록, 글쓰기 권한, 첨부 저장 위치 |
| 문의 폼 첨부 | 로그인 없이 파일을 받음 | 첨부가 꼭 필요한지, 허용 형식과 크기 |
| 에디터 이미지 올리기 | 오래된 에디터 버전을 그대로 사용 | 에디터 버전과 업데이트 여부 |
| 플러그인·테마 설치 | 출처가 불분명한 파일을 설치 | 공식 배포처, 설치 권한을 가진 계정 |
| FTP·서버 접속 | 접속 계정을 여러 사람이 공유 | SFTP 사용, 계정 정리, 비밀번호 변경 |
웹셸 공격 예방 6가지
예방은 들어오지 못하게 하는 것과, 들어와도 실행되지 못하게 하는 것 두 겹으로 생각하면 쉽습니다. 아래 여섯 가지는 개발을 맡은 업체에 확인하거나 요청할 수 있는 항목입니다.
- 허용 형식만 받기: 업무에 필요한 이미지·문서 형식만 허용 목록으로 정하고 나머지는 모두 거부합니다.
- 내용으로 검사하기: 파일 이름의 확장자만이 아니라 서버에서 실제 파일 내용을 기준으로 형식을 확인합니다.
- 파일 이름 새로 붙이기: 올린 사람이 정한 이름을 그대로 쓰지 않고 서버가 새 이름을 붙여 저장합니다.
- 실행 차단하기: 업로드 폴더에서는 프로그램이 실행되지 않게 하거나, 웹에서 직접 열리지 않는 위치에 저장합니다.
- 서버에서 크기 제한하기: 화면이 아닌 서버 설정과 프로그램에서 파일 크기를 제한합니다.
- 업데이트와 정리: 홈페이지 프로그램, 에디터, 플러그인을 최신으로 유지하고 쓰지 않는 업로드 기능은 끕니다.
그림의 여섯 가지 가운데 앞의 세 가지는 악성 파일이 들어오는 것을 막고, 뒤의 세 가지는 들어오더라도 피해가 커지지 않게 합니다. 한 가지만으로는 충분하지 않으므로 여러 겹을 함께 적용합니다. 첨부파일 기능의 세부 설정은 첨부파일 업로드 보안 설정에서 따로 다룹니다.
웹셸 감염 여부 점검 방법
웹셸은 화면에 증상이 잘 드러나지 않으므로 정기적으로 서버를 확인해야 합니다. 서버 접근 권한이 있는 담당자나 유지보수 업체와 함께 아래 순서로 점검합니다.
- 업로드 폴더 확인: 이미지와 문서만 있어야 할 폴더에 프로그램 파일이 섞여 있는지 봅니다.
- 최근 변경 파일 확인: 직접 수정한 적이 없는데 최근에 바뀐 프로그램 파일이 있는지 봅니다.
- 계정과 예약 작업 확인: 모르는 관리자 계정, 서버 접속 계정, 예약 작업이 생겼는지 확인합니다.
- 접속 기록 확인: 업로드 폴더 안의 파일을 반복해서 직접 호출한 기록이 있는지 호스팅 업체에 확인을 요청합니다.
- 점검 도구와 기관 서비스 활용: 호스팅 업체의 보안 점검 기능이나 KISA 보호나라의 기업 대상 점검 서비스를 확인합니다.
- 발견하면 기록 먼저: 의심 파일은 바로 지우지 말고 위치, 이름, 수정 시각을 기록한 뒤 대응을 시작합니다.
그림의 마지막 단계가 중요합니다. 웹셸 파일만 지우면 어떤 경로로 들어왔는지 알 수 없어 같은 방식으로 다시 침입당할 수 있습니다. KISA 보호나라의 기업 서비스 안내에는 보안 취약점 점검, 중소기업 홈페이지 보안강화, 해킹진단도구 같은 서비스가 소개되어 있으니 신청 조건을 확인해 보세요.
웹셸을 발견했을 때 대응
웹셸이 발견되면 이미 서버에 침입한 상태이므로 해킹 대응 절차로 넘어갑니다. 사이트를 점검 화면으로 바꾸고, 깨끗한 기기에서 모든 관리 계정의 비밀번호를 바꾸고, 피해 범위를 확인한 뒤 감염 이전의 백업이나 새로 설치한 프로그램으로 복구합니다. 전체 순서는 홈페이지 해킹 대처 순서 7단계를 참고하세요. 침해사고 신고 대상인지와 신고 방법은 보호나라 신고 안내나 국번 없이 118 상담으로 확인할 수 있습니다.
디코랩이 돕는 방식
디코랩은 홈페이지 제작과 함께 운영 중인 사이트의 수정, 오류 처리, 개선을 맡고 있습니다. 첨부파일 기능의 허용 형식이나 저장 방식을 점검하고 싶다면 유지보수 접수 게시판에 사이트 주소와 해당 기능 위치를 비밀글로 남겨 주세요.
자주 묻는 질문
이미지 파일만 올릴 수 있게 하면 안전한가요?
확장자만 보고 막으면 부족할 수 있습니다. 서버에서 파일 내용을 확인하고, 업로드 폴더에서 프로그램이 실행되지 않게 하는 조치를 함께 적용해야 안전합니다.
첨부파일 기능이 없으면 웹셸 걱정은 없나요?
업로드 기능이 없어도 오래된 플러그인의 취약점이나 유출된 관리자·FTP 계정으로 파일이 올라올 수 있습니다. 업데이트와 계정 관리는 첨부 기능과 관계없이 필요합니다.
웹셸 파일을 지우면 끝인가요?
파일 하나를 지워도 다른 곳에 숨은 파일이나 침입 경로가 남아 있으면 다시 감염됩니다. 들어온 경로를 확인해 막고, 비밀번호 변경과 복구, 재점검까지 마쳐야 대응이 끝납니다.
호스팅 업체가 웹셸을 찾아 주나요?
업체와 상품에 따라 다릅니다. 보안 점검이나 악성 파일 탐지 기능이 있는지, 사고 때 어디까지 지원하는지 미리 확인해 두세요.
우리 홈페이지의 업로드 기능이 안전하게 설정되어 있는지 확인하고 싶다면 사이트 주소를 적어 디코랩 프로젝트 문의로 보내 주세요.
댓글0
댓글 작성 권한이 없습니다