파일 업로드 취약점
웹 사이트에 파일을 업로드를 할 때 서버에서는 적절한 보안조치를 하지 않으면 매우 위험한 취약점 중 하나인 파일 업로드 취약점 입니다. 공격자가 파일 업로드 시스템을 통해 서버에 직접적인 접근 권한을 제공할 수 있습니다.
대표적인 공격 방법
1. 웹쉘 업로드
웹쉘은 서버 측 스크립트 언어(PHP, JSP 등)로 작성된 악성 스크립트로 공격자가 원격에서 서버를 제어할 수 있습니다.
예시는 생략했지만, 웹쉘 코드는 온라인에서 쉽게 찾을 수 있습니다.
웹쉘을 업로드하고 해당 악성 스크립트가 실행될 수 있다면 공격자는 URL 파라미터를 통해 서버에서 임의의 명령을 실행할 수 있습니다.
2. DoS 공격
대용량의 파일을 대량으로 서버에 업로드를 하면 서버의 디스크 공간을 고갈시키는 서비스 거부(DoS) 공격을 수행할 수 있습니다.
파일 업로드 공격 방어 방법
1. 확장자 검사
허용되지 않은 확장자 파일로 업로드를 할 시 서버에서 막는 방법입니다.
하지만 이 방법에는 헛점이 있습니다. 바로 확장자 위조를 하거나 이중 확장자로 우회를 할 수 있습니다.
2. 파일 내용 직접 검사
MIME 타입 검사를 통해 파일의 실제 형식을 확인할 수 있습니다.
자바의 경우, URLConnection.guessContentTypeFromStream() 같은 API를 사용해서 MIME 타입을 추정할 수 있습니다.
MIME 타입은 파일 확장자가 아닌 파일의 실제 내용을 기반으로 판단해야 하며, 서버에서는 클라이언트가 보낸 Content-Type 헤더를 신뢰하지 말아야 합니다.
3. 업로드된 파일의 이름 변경
공격자가 예측할 수 없는 랜덤한 파일명을 사용함으로써 업로드된 파일에 직접 접근을 어렵게 만들 수 있습니다.
4. 문서 루트 외부에 저장하기
업로드된 파일이 직접 실행되는 것을 방지할 수 있습니다.
파일에 접근해야할 경우 스크립트를 통해 파일 내용을 읽어 전달하는 방식을 사용할 수 있습니다.
5. 파일 크기 제한
공격 방식 중 하나인 DoS 공격을 막기 위해 업로드 가능한 파일의 최대 크기를 설정해야 합니다.
'웹 보안' 카테고리의 다른 글
[웹 보안] 세션 하이잭킹 (1) | 2025.05.01 |
---|---|
[웹 보안] CSRF (1) | 2025.04.28 |
[웹 보안] XSS (1) | 2025.04.23 |
[웹 보안] SQL 인젝션 (0) | 2025.04.21 |