코더의 보안 정복: 공유 및 학습 시리즈 - 제한 없는 파일 업로드

제한 없는 파일 업로드(Unrestricted File Uploads) 문제는 그 자체로 공격이라기보다는 공격자가 애플리케이션과 네트워크 리소스에 쉽게 접근할 수 있게 만드는 일반적인 상황이나 상태를 의미합니다. 이는 추운 날씨에 젖은 옷을 입고 돌아다니는 것과 비슷합니다. 그 자체로 바로 병에 걸리는 것은 아니지만, 면역력이 떨어져 기회주의적인 바이러스가 신체의 방어 체계를 쉽게 무너뜨릴 수 있는 상태가 되는 것과 같습니다.
사이버 보안 분야에서 공격자들은 제한 없는 파일 업로드를 허용하는 애플리케이션이나 프로그램을 빠르게 악용할 수 있습니다. 그 결과는 치명적일 수 있습니다. 영리한 공격자들은 이러한 제한 없는 접근 권한을 이용해 악성 파일을 업로드하거나, 자격 증명을 탈취하기 위한 스크립트를 설정하거나, 애플리케이션의 권한을 사용하여 네트워크 내부로 더 깊숙이 침투하는 공격을 감행할 수 있습니다. 심지어 기술적으로 뛰어나지 않은 공격자라도 이러한 무제한 접근 권한을 이용해 서비스 거부 공격을 수행하거나 애플리케이션을 중단시킬 수 있습니다.
다행히도 제한 없는 파일 업로드 문제를 해결하여 공격자의 시도를 사전에 차단할 수 있는 방법들이 많이 있습니다. 이를 위해 제한 없는 파일 업로드의 세 가지 핵심 측면을 살펴보겠습니다.
- 작동 원리
- 위험한 이유
- 이를 방어하기 위한 보안 조치 방법
공격자는 어떻게 제한 없는 파일 업로드를 악용하는가?
사이트에서 일반 사용자의 파일 업로드를 허용하려는 데에는 많은 이유가 있습니다. 예를 들어, 기업은 채용 과정에서 지원자의 이력서를 업로드하도록 할 수 있습니다. 은행은 대출이나 신규 계좌 개설 시 고객이 집에서 중요한 서류를 작성하여 제출하도록 권장할 수 있습니다. 관광이나 소셜 미디어 사이트는 사용자가 사진을 공유할 수 있도록 업로드 기능을 제공하기도 합니다.
파일 업로드를 허용해야 할 타당한 이유는 많습니다. 기본적으로 대부분의 새로운 애플리케이션은 별도의 제한 없이 모든 유형의 파일 업로드를 허용할 가능성이 높습니다. 문제는 잠재적인 공격자가 이러한 업로드에 아무런 제한이 없다는 사실을 알아차릴 때 시작됩니다.
업로드에 제한이 없으면 사이트는 세 가지 유형의 공격에 노출됩니다. 가장 단순한 공격부터 살펴보면, 악의적인 사용자가 수백 기가바이트의 정보가 담긴 압축 파일처럼 용량이 매우 큰 파일을 업로드할 수 있습니다. 이는 대역폭을 낭비할 뿐만 아니라 애플리케이션에 할당된 저장 공간을 과부하시킬 수 있습니다.
다음으로 악명 높은 공격은 바이러스나 랜섬웨어와 같이 더 위험한 악성 파일을 업로드하는 경우입니다. 이는 마치 뱀파이어를 집으로 초대해야만 들어올 수 있다는 옛 미신과 비슷합니다. 누구든 자유롭게 들어올 수 있다는 팻말을 걸어두는 것은 제한 없는 파일 업로드를 허용하는 것과 같습니다. 이제 문을 통해 무엇이 들어오는지 통제할 수 없게 되며, 모든 방문자나 파일이 안전할 것이라고 기대해서는 안 됩니다. 그중 일부는 괴물일 수도 있으니까요.
마지막으로, 숙련된 공격자는 제한 없는 업로드를 이용해 네트워크에 발판을 마련하고 더 깊은 공격을 수행할 수 있습니다. 업로드할 수 있는 파일에 제한이 없기 때문에 공격자는 웹 셸(web shell)을 업로드할 수 있습니다. 그 후 셸에 명령을 보내면, 해당 명령은 애플리케이션과 동일한 권한 수준으로 서버에서 실행됩니다.
제한 없는 파일 접근이 왜 그토록 위험한가?
제한 없는 파일 접근 권한을 가진 애플리케이션을 배포하는 것이 당장 위험한 것은 아니지만, 이는 기본적으로 사이버 보안 방어벽에 구멍을 뚫어 누군가 조직을 공격하도록 초대하는 것과 같습니다. 머지않아 누군가 그 구멍을 이용할 것입니다.
가장 기본적인 수준에서 공격자는 큰 기술 없이도 큰 피해를 줄 수 있습니다. 단순히 매우 큰 파일을 압축하여 업로드하는 것만으로도 정상적인 사용자의 서비스 이용을 방해할 수 있습니다. 시간이 지나면 애플리케이션이나 사이트 전체가 프로그래밍 및 네트워크 구성 방식에 따라 중단될 수도 있습니다.
제한 없는 파일 접근은 네트워크 방화벽이나 기타 보호 장치에 구멍을 낼 수도 있습니다. 들어오는 이메일이나 직원의 웹 브라우징 활동을 검사하는 스캐너가 있더라도, 공격자가 핵심 네트워크에 직접 악성 코드를 업로드할 수 있는 경로를 만들어 두었다면 아무런 소용이 없습니다. 악성 코드는 애플리케이션이나 서버를 중단시킬 수 있는데, 이는 그나마 최선의 결과일 것입니다. 최악의 경우, 랜섬웨어와 같은 악성 프로그램이 감염된 서버를 이용해 네트워크 전체로 확산될 수 있습니다.
더 숙련된 공격자는 제한 없는 파일 접근 권한을 가진 애플리케이션을 악용할 때 눈에 띄지 않게 행동할 것입니다. 대신 취약점을 이용해 애플리케이션을 장악하고, 이를 통해 네트워크 내부로 천천히 침투하며 탐지를 피하려 할 것입니다. 이는 웹 셸이나 기타 .exe 유형의 파일을 업로드한 뒤, 파일이 안착하면 직접 명령을 보내는 방식으로 이루어집니다. 사용자가 셸을 통해 실행하는 모든 것은 일반적으로 애플리케이션에 설정된 권한 수준에 따라 서버에서 실행됩니다. 서버 입장에서는 해당 명령이 애플리케이션에서 오는 것으로 간주되므로 추가적인 검사나 확인을 거치지 않을 가능성이 높습니다.
이 모든 이유로 인해 제한 없는 파일 접근 취약점은 네트워크에서 가장 위험한 취약점 중 하나입니다. 문제가 발생할지 여부가 아니라, 언제 발생할지가 문제일 것입니다.
제한 없는 파일 접근 취약점을 어떻게 제거할 수 있는가?
그렇다면 제한 없는 파일 접근 문제를 어떻게 해결할 수 있을까요? 가장 쉬운 방법은 업로드 가능한 파일 유형에 하나 이상의 제한을 두는 것입니다. 예를 들어, 사이트에서 Word나 텍스트 파일만 허용한다거나, 사진 공유 사이트라면 .jpg나 .gif 파일만 허용한다는 점을 사용자에게 알릴 수 있습니다. 백엔드에서는 허용 가능한 파일 확장자 화이트리스트를 생성하고 그 외의 모든 파일은 거부해야 합니다. 또한 파일 이름의 최대 길이에 대해서도 제한을 두어야 합니다. 파일 이름에 실행 명령을 시도하려는 의도로 보이는 특수 문자가 포함되어 있다면, 이 역시 거부해야 합니다.
파일 형식과 명명 규칙 외에도 각 파일의 최대 크기를 제한하는 것이 좋습니다. 최대 크기는 애플리케이션이 수집하려는 파일 유형에 적합하고 합리적인 수준이어야 합니다. 예를 들어 Word 파일은 10MB, 그래픽 파일은 50MB 정도로 제한할 수 있습니다. 예상되는 파일 크기 범위를 명확히 알고 있다면(예: 특정 양식을 작성하여 업로드하는 경우) 최소 파일 크기 규칙을 설정하는 것도 가능합니다.
공격자는 파일 형식 및 크기 제한을 우회하여 셸이나 악성 프로그램을 삽입할 방법을 찾아낼 수 있습니다. 이를 방지하려면 수집된 파일은 항상 실행 권한이 없는 비공개 디렉토리에 저장해야 합니다. 보안을 강화하려면 시스템이 파일 이름을 무작위 문자열로 변경하는 것이 좋습니다. 이렇게 하면 외부 사용자가 업로드된 파일의 위치를 추적하여 네트워크 정보를 파악하는 것을 방지할 수 있습니다. 단, 이 경우 무작위 파일 이름과 원래 파일 이름을 연결하는 테이블을 별도로 관리해야 합니다.
마지막으로, 업로드를 통해 네트워크에 들어오는 모든 파일은 조직의 보안 프로그램으로 악성 코드 및 바이러스 검사를 수행해야 합니다. 모든 위협을 완벽하게 차단할 수는 없지만, 파일 업로드를 통해 유입되는 일반적인 악성 파일의 90% 이상을 탐지할 수 있는 중요한 보안 계층이 됩니다.
제한 없는 파일 업로드 문제 해결하기
백엔드에 여러 보안 계층을 적용하면 '제한 없는 파일 업로드' 문제는 더 이상 위협이 되지 않습니다. 파일 업로드에 제한을 두어 '제한 없는' 상태를 제거하는 것이 핵심입니다. 안전한 파일만 허용하고 악성 코드와 같은 위협 요소는 원천 차단할 수 있습니다.
더 자세한 내용은 OWASP 제한 없는 파일 업로드 방지 치트 시트에서 확인할 수 있으며, 네트워크에서 발생할 수 있는 일반적인 문제들을 다루고 있습니다. 또한, 사이버 보안 팀을 위한 전문 교육 플랫폼인 Secure Code Warrior의 무료 쇼케이스를 통해 습득한 방어 지식을 테스트해 볼 수 있습니다. 이 취약점과 다양한 위협에 대해 더 알아보려면 Secure Code Warrior 블로그를 방문하세요.
지금 바로 이 취약점에 도전할 준비가 되셨나요? 전장으로 이동하여 실력을 테스트해 보세요:
배포 전 AI 기반 개발 거버넌스 확보
AI 기반 위험을 측정하고, 커밋 시점에 보안 코딩 정책을 적용하며, SDLC 전반에 걸쳐 안전한 소프트웨어 제공 속도를 높이세요.
더 많은 블로그 살펴보기
보안 코딩, AI 거버넌스, 소프트웨어 리스크 관리에 관한 전문가 콘텐츠를 확인해 보세요.
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
배포 전 AI 기반 개발 보안 확보
소프트웨어 개발 수명 주기 전반에서 개발자 리스크를 파악하고, 정책을 시행하며, 취약점을 예방하세요.



.avif)