brunch

You can make anything
by writing

C.S.Lewis

by penna Oct 07. 2024

파일 다운로드

파일 다운로드 취약점

"파일을 다운로드하는 기능인데 취약점 때문에 다운로드 기능을 없애야 하는 걸까?


오늘은 업무팀 질의가 아니라 점검을 시작했을 때 제가 고민했던 질문으로 이야기를 시작해보려고 합니다.

보통 XSS(Cross Site Scripting) 취약점이나 SQL Injection 취약점의 경우 개발자가 의도한 기능 외에서 발생한 취약점이지만,

파일 업로드, 파일다운로드, URL Redirection 등 몇몇 취약점의 경우 의도적으로 개발한 특정 기능이 취약하다고 나옵니다.


그럼 그런 기능인데 그 기능이 취약하다는 건 어떤 의미일까요?

오늘은

파일 다운로드

취약점에 대해 얘기해보려고 합니다.


우선, 파일 다운로드 기능을 만든 이유를 생각해보아야 합니다. 우리는 특정 문서를 여러 사람들과 공유하기 위해 파일을 올리고 다운로드하는 기능을 만듭니다.

이때 아무 파일이 아닌,

'공유하고 싶은' 파일

이라는 점을 생각해보아야 합니다.


가령 '시큐어코딩 가이드' 문서를 공유하고 싶은데 우리 바탕화면에 있는 거래처 정보 내역이 있는 엑셀 파일 같은 것 까지도 다운로드가 가능하다면?

서버 정보나 패스워드 등이 저장된 파일이 우리 홈페이지에 접근한 사용자 누구라도 다운로드가 가능하다면,

이건 우리의 의도와 조금 달라집니다.

다운로드 기능은 공유의 개념이지, 공개의 의도가 아니기 때문입니다.


공격자는 파일 다운로드의 취약점을 찾기 위해 다운로드 가능한 파일이 저장된 위치를 찾아보려고 합니다. 그래서 상위 디렉터리(=폴더)에 접근하여 상위 디렉터리에 저장된 파일을 다운로드가 가능한지를 봅니다.

이때, 공격자 입장에서 어떤 경로에 어떤 파일이 있는지는 어떻게 알까요?

웹 서버를 만들 때 기본적으로 설정하는 파일들이 있고 기본 디렉터리 구조가 있거든요. 그걸 참고하기도 하고, 윈도우나 리눅스 서버에 고정된 경로에 저장된 사용자 계정정보 파일, 호스트 파일을 공략해 봅니다. 그래서 해당 파일들의 정보를 확인하고 파일에서 획득한 정보를 이용해 더 민감하고 예민한 정보에 접근합니다.


이때 사용하는 특수문자가 . / ₩ 입니다.  이런 문자들을 활용해 상위 디렉터리에 접근하여 파일을  다운로드합니다.


그렇다면 우리는 저 특수문자들을 막으면 됩니다. 그리고 해당 특수문자를 막을 것을 고려해 공격구문을 URL Encoding 형식으로 바꿔 우회할 수 있으니 %2E %2F 이런 것도 막아주면 됩니다.


특정 확장자만 다운로드할 수 있도록 제한하는 것도 방법 중 하나가 될 수 있습니다. 그리고 웹서버에 허용된 디렉터리 외의 경로에 대한 접근은 차단하도록 설정해야 합니다.


다운로드 기능은 보안의 입장에서는 우회기법이 계속 발전되고 있기 때문에 취약한 부분이 나올 수밖에 없습니다. 하지만 서비스를 제공하는 입장에선 때로는 꼭 필요한 기능이기도 합니다. 래서 기능을 없애기보다는 안전하게 보완해 가면서 서비스를 제공할 수 있도록 해야 합니다.

이전 10화 루팅 우회
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari