파일 업로드, 안전하게 관리하는 방법?

by DD
2개월 전
조회수 14

파일 업로드 기능은 다양한 공격 표면을 가지며, 이미지 처리 라이브러리, 파일 시스템, CDN 등에서 취약점이 발생할 수 있음

파서(Parser) 취약점을 이용한 공격, 특히 ImageMagick의 ImageTragick과 같은 사례를 통해, 제한된 환경에서의 파일 처리 필요성을 강조함

XSS 공격을 방지하기 위해 업로드된 파일은 별도의 도메인에서 제공하고, Content-Disposition 및 X-Content-Type-Options 헤더 설정을 권장함

파일 이름 및 경로 조작을 통한 공격을 막기 위해, 파일 이름은 랜덤 ID로 변경하고, 아카이브 추출 시 경로 검증을 수행해야 함

이미지 처리 라이브러리 취약점과 방어

게시물에서는 이미지 처리 라이브러리(Image Processing Library)의 취약점을 악용한 공격 사례를 상세히 설명한다. 특히, ImageMagick의 ImageTragick 취약점(CVE-2016-3714)을 예시로 들며, 공격자는 악성 코드를 포함한 이미지를 업로드하여 서버에서 임의의 명령을 실행할 수 있었다. 이러한 공격을 방어하기 위해, 제한된 환경(Restricted Environment)에서 파일 처리를 수행하고, ImageMagick의 policy.xml 설정을 통해 공격 범위를 줄이는 것이 중요하다고 강조한다.

XSS 공격 방지를 위한 안전한 파일 제공

게시물은 XSS(Cross-Site Scripting) 공격을 방지하기 위해 업로드된 파일을 별도의 도메인에서 제공하는 방법을 제시한다. 특히, SVG 파일에 악성 스크립트를 삽입하여 사용자 세션을 탈취하는 공격을 예방하기 위해, 데이터 격리 아키텍처(Data Isolation Architecture)를 구축해야 한다고 강조한다. 또한, Content-Disposition: attachment 및 X-Content-Type-Options: nosniff 헤더 설정을 통해 브라우저가 파일을 실행 가능한 콘텐츠로 해석하는 것을 막아야 한다.

파일 이름 및 경로 조작 공격 방어

게시물은 파일 업로드 시 파일 이름(Filename) 및 경로 조작(Path Traversal) 공격에 대한 방어 기법을 제시한다. 공격자는 악의적인 파일 이름을 사용하여 서버의 파일 시스템에 접근하거나, 중요한 파일을 덮어쓸 수 있다. 이를 방지하기 위해, 업로드된 파일의 이름을 랜덤 ID(Random Identifier)로 변경하고, 원본 파일 이름은 데이터베이스에 메타데이터로 저장해야 한다. 또한, 아카이브 추출 시에는 경로 검증을 통해 디렉토리 외부로의 접근을 차단해야 한다.

자원 고갈 및 비용 증폭 공격 방어

게시물은 자원 고갈(Resource Exhaustion)비용 증폭(Cost Amplification) 공격에 대한 방어 전략을 제시한다. 공격자는 압축 파일을 이용하여 서버의 자원을 과도하게 소모시키거나, 예상치 못한 비용을 발생시킬 수 있다. 이를 방지하기 위해, 파일 크기 제한을 설정하고, 업로드 속도를 제한하며, 아카이브 추출 시에는 스트리밍 방식으로 처리하고, 압축 해제된 파일의 크기를 제한해야 한다. 멀티모달 분석(Multimodal Analysis)을 통해 파일의 실제 유형을 검증하는 것도 중요하다.

How to Not Get Hacked Through File Uploads