brunch

You can make anything
by writing

C.S.Lewis

by penna Aug 12. 2024

파일 업로드

파일 업로드 취약점

".png 확장자는 허용해도 될까요? 이 취약점 가이드를 받은 분들한테 종종 오는 질문입니다.


사실 취약점을 알아가다 보면 취약점 중요도를 나누는 게 과연 의미가 있을까 하는 생각도 듭니다. 어떤 취약점이 어떤 곳에서 발생했느냐에 따라 영향도가 달라지거든요. 그럼에도 중요도를 항상 '상'이라고 꼽을 수 있는 취약점이 있다면


파일 업로드


입니다. 그렇기 때문에 업로드 기능이 없는 게 가장 좋겠지만, 서비스를 제공하면서 어쩔 수 없이 사용해야 하기 때문에 더 주의 깊게 점검을 진행해야 합니다.


업로드 취약점의 어떻게 발생되는 걸까요?

공격자는 업로드 기능을 확인한 뒤 업로드 된 파일에 웹브라우저로 직접 접근할 수 있는지 확인합니다. 업로드된 파일이 서버에서 실행 가능한 폴더에 저장될 경우 공격자는 웹브라우저를 이용하여 해당 파일을 직접 호출합니다. 이때 업로드하는 파일이 JSP,  PHP 등의 서버 언어로 작성된 웹쉘입니다. 웹쉘을 이용하면 서버에 CMD(명령 프롬프트)를 띄우는 것과 유사한 행위를 할 수 있습니다. 우리가  PC에서 cmd창을 띄워 네트워크 IP를 확인하는 것과 같은 행위를 할 수도 있고 파일을 복사하거나 파일 내용을 읽고, 파일을 지우고 생성하는 것도 가능합니다. 공격자는 자신이 올린 쉘에서 권한 상승을 시도하여 시스템 관리자 권한을 획득하려고도 해 봅니다. 그러면 서버의 관리자 권한처럼 서버를 마음대로 조작하며 고객 정보가 있는 DB정보도 획득하여 유출 시나리오까지 만들어 볼 수 있습니다. 그리고 로그를 지워 자신이 침입한 흔적까지도 없앨 수 있습니다.


 그렇기 때문에 저희가 업로드 취약점을 점검하는 기준을 한 줄로 설명하면

웹브라우저로 접근 가능한 경로에 실행 기능이 있는 폴더로 서버 언어 파일이 올라갈 경우입니다.

가장 베스트는 허용하지 않는 확장자가 업로드되지 않도록 조치하는 것이지만,

불가피하게 취약점을 조치하는데 기간이 조금 걸린다는 연락을 받는다면 우리는 업로드 취약점의 경우의 수를 다시 따져봐야 합니다.

조치 시간이 오래 걸리더라도 최소한의 방안을 짜서 결론적으로 해당 취약점의 원인을 제거해야 하기 때문입니다.


가장 우선적으로 필수로 조치해야 하는 부분은

업로드된 파일이 실행되지 않도록 업로드 폴더에 대한 실행권한을 제거해야 합니다.(1/4)

그리고 서버 언어 확장자로 되어 있는 파일은 업로드되지 않도록 해야 합니다. (2/4)

또한, 화이트리스트로 업로드 파일 확장자를 제한해야 합니다.(3/4)

마지막으로 업로드된 파일명을 서버에서 변경하고 파일 업로드 경로를 유추하거나 직접 접근할 수 없도록 해야 합니다. (4/4)

이 4가지가 모드 충족되어야 완벽한 조치완료로 볼 수 있습니다. 그리고 3,4 조치가 어려울 경우 보완하여 방어할 수 있는지 협의를 해야 합니다.

 

만약 화이트리스트가 어렵다면 블랙리스트로 제한할 것을 권고해야 합니다.

서버사이드 스크립트 파일(.php, .asp, .aspx, .jsp, .py 등), 클라이언트 스크립트 파일(.html, .htm, .js, .css 등), 실행 가능한 파일(.exe, .bat, .cmd, .sh, .msi 등), Perl 및 CGI 스크립트 등은 필수적으로 업로드를 허용하지 않아야 합니다.

그리고 업로드된 파일의 직접 접근을 막을 수 없다면 업로드 경로를 유추할 수 없도록 해야 합니다.


다시 처음 질의로 돌아가서 답하자면 이미지 파일은 허용해도 됩니다. 다만, MIME 타입도 검증하여 파일이 실제로 허용된 유형인지 확인하고, 업로드된 내용과 파일명을 확인하여 확장자나 MIME 타입을 위장한 파일이라면 차단을 해야 한다고 답변하시면 됩니다.

이전 07화 부적절한 인가
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari