정보보호 관리,기술 진단/모의해킹
파일 업로드 취약점 (webshell upload)
Hackerrior
2019. 5. 8. 20:07
파일 업로드 취약점
파일업로드 기능을 이용하여 시스템 명령어를 실행할 수 있는 웹 프로그램(웹셀)을 업로드할 수 있는 취약점이다.
DBD(Drive-By-Download)공격을 이용해 (웹이 가지고있는 취약한 보안상태를 이용해 악성코드를 심어 놓는방법)
공격이 이루어지면 일반 클라이언트는 어떠한 액션을 취하지 않아도 취약한 사이트를 방문하는것 만으로도 감염시킬 수 있다.
파급 효과
시스템 장악, 웹 페이지 변조
공격 예상도
서버측에서 실행될 수 있는 스크립트 파일(asp,jsp,php파일 등)을 업로드가능하고, 이 파일을 공격자가 웹을 통해
직접 실행할 수 있는 경우 시스템 내부 명령어를 실행하거나 외부와 연결하여 시스템을 제어할 수 있다.
파일 업로드 취약점 원인 및 결과
→ 파일 업로드 취약점
- 파일 업로드 기능을 이용하여 시스템 명령어를 실행할 수 있는 웹 프로그램(웹셀)을 업로드할 수 있는 취약점
→ 파일업로드 취약점 원인과 결과
- 웹 사이트상에서 파일 업로드 시 파일의 확장자 검증을 하지 않아서 발생
- 서버의 모든 제어권, 정보탈취, 변조, 악성스크립트 삽입 등의 위험 존재
파일 업로드 취약점에 대한 대응방안
점검시 고려사항
- 검증된 웹셀 올리기
- 웹셀 취약점 점검 이후 후속 조치를 통해 업로드 했던 웹셀은 반드시 삭제 해야한다.
- 업로드 기능이 불필요할 경우 개발단계에서 완전 제거해야하며 소스코드단에서 편의를 위해 주석처리하는등의 처리는 지양한다.
- 파일 업로드 기능이 필요한 경우 서버측에서 파일명 검
4-1. 파일 이름은 전체 검사를 원칙으로 한다.
4-2. 확장자를 분리할 경우(.) 조건문자 마지막 확장자를 검사한다.
4-3. 시스템에서는 대소문자를 구분함으로 소문자 치환 후 검사를 진행한다.
※ 허용하는 확장자를 먼저 규정한 후 이외의 확장자는 모두 차단한다.
4-4. 업로드 가능한 파일명, 확장자인 경우 업로드 전용 폴더에 저장한다. 저장시 파일명, 확장자명 변경
=> 정상 파일 다운로드시 데이터베이스 연동을 통해 원본 파일명으로 바꿔준다.
4-5. 업로드 전용 폴더의 실행권한 제거 ( 주기적으로 체크 요망 )
설계시 고려사항
1. 업로드되어 저장되는 파일의 타입, 크기, 개수, 실행권한을 제한해야 한다.
1-1. 업로드 파일의 크기제한
1-2. 파일 타입의 제한
1-3. 업로드 되어 정되는 파일의 실행권한 제거
2. 업로드되어 저장되는 파일은 외부에서 식별되지 않아야 한다.
2-1. 업로드되는 파일의 저장경로는 외부에서 직접 접근이 불가능한 경로 사용
2-2. 업로드되어 저장되는 파일의 파일명은 랜덤하게 생성하여 사용
↑ 파일 업로드 기능 구현시 위와같은 프레임워크의 사용을 고려하여 기능의 목적에 부합하는
형식의 파일만 업로드 하도록 허용한다.
파일 업로드 취약점 실습 : 웹페이지 소스코드 변조
1. 파일업로드 기능 탐색
2. 파일 업로드 기능을 이용해서 악성파일 업로드 시도
2-1. 웹 어플리케이션에서 실행 가능한 언어로 작성된 악성 스크립트 업로드 시도
=> 이는 웹 개발 언어가 JSP언어로 개발된 환경이라면 먼저 1차원적으로 JSP로 작성된 악성 스크립트의
업로드를 시도한다. → .jsp 해당 환경에 맞춰 같은 언어로 제작된 악성 스크립트 업로드 시도
2-2. 업로드된 파일 확장ㅈ가 개발 운영 환경에서 실행 가능한 확장자이어야 실행이 가능하다.
3. 우회기법
3-1. webshell.txt.asp
→조건 문자를 만나는것에서 처음 만나는 부분으로 기준을 잡는다면해당 파일이 업로드될 가능성이 있다.
#파일 이름은 전체검사를 원칙으로 한다.
3-2. 종단 문자 우회
A. urlencode 이용 : %00 = null code
→ %00가 포함된 뒷 문자열은 웹 서버에서 파일을 저장할 때 null 인식되는 것을 악용하는 방식
허용하는 확장자를 알고 있다면 해당 방식을 사용할 때 허용하는 확장자와 원하는 확장자 사이에
%00를 이용해 업로드를 시도한다.
↑ 현재 파일업로드 기능에대해서 파일의 확장자를 필터링하고 있다.
↑ 현재 게시판은 웹 서버측에서 확장자 필터링을 하는것이 아닌, 해당 웹 페이지단에서 확장자를 필터링하고 있다.
# 확장자 필터링은 항상 웹 서버측에서 진행되어야 한다. 이는 프록시를 이용한 소스코드 조작으로 악의적인
스크립트 파일을 업로드할 수 있기 때문이다.
↑프록시도구를 이용해 해당 웹페이지의 소스코드중 필터링 코드를 수정하였다.
↑웹셀 업로드 시도
↑ 웹셀이 성공적으로 업로드 되었다.
%00를 이용한 파일 업로드
↑업로드 가능한 파일 확장자명을 알 수 있다.
# 이를 이용한 우회기법으로 웹셀 업로드를 시도할 수 있다.
↑%00가 포함된 물자열은 웹 서버에서 파일을 저장할 때 null로 인식한다
# 웹 서버에 저장되는 파일은 webshell(seung_hoon).asp이다.
↑웹셀이 성공적으로 업로드 되었다.
↑업로드한 웹셀을 다운로드하고, 프록시 도구를 이용해 다운로드 경로를 찾는다.
↑다운로드 경로 확인하기
↑ 파일 다운로드 URL을 통해 다운로드 경로를 확이할 수 있다.
# 이를 이용해 웹셀에 접근한다.
↑찾아낸 다운로드 경로를 이용해 업로드한 웹셀에 접근한다.
↑접근한 웹셀을 이용해 시스템 명령어를 사용한 모습
참고
- K-shield.jr 2기 정보보호 관리진단 과정
- KISA : 웹 취약점 분석 및 기술지원
- KISA : SW개발 보안 가이드