0. 개요
서버 측에서 실행될 수 있는 스크립트 파일(asp, jsp, php 파일 등)이 업로드 가능하고,
이 파일을 공격자가 웹을 통해 직접 실행시킬 수 있는 경우,
시스템 내부명령어를 실행하거나 외부와 연결하여 시스템을 제어할 수 있는 보안약점이다.
2020.11.15 - [about Security/웹 해킹] - [웹해킹] # 파일 업로드
2020.11.15 - [about Security/웹 해킹] - [웹해킹 실습] # 파일 업로드 공격
1. 보안 대책
- 업로드 되어 저장되는 파일의 타입, 크기, 개수, 실행권한을 제한해야 한다.
- 업로드 되어 저장되는 파일은 외부에서 식별되지 않아야 한다.
- 화이트 리스트 방식으로 허용된 확장자만 업로드를 허용한다.
* 화이트 리스트 방식 : 안전이 증명된 것만을 허용한다.
- 업로드 되는 파일을 저장할 때에는 파일명과 확장자를 외부 사용자가 추측할 수 없는 문자열로 변경하여 저장하며,
저장 경로는 'web document root' 밖에 위치시켜서 공격자의 웹을 통한 직접 접근을 차단한다.
- 파일 실행여부를 설정할 수 있는 경우, 실행 속성을 제거한다.
2. 진단 방법
- 외부 입력값에서 파일명을 얻어오는지 확인한다.
- 허용된 확장자에 대해서만 업로드를 허용하는지 확인한다.
3. 코드 예시
# 1 - 위험한 형식 파일 업로드 - 안전하지 않은 코드 예시(JAVA)
위의 코드와 같이 업로드할 파일에 대한 유효성을 검사하지 않으면,
위험한 유형의 파일을 공격자가 업로드 하거나 전송할 수 있다.
파일의 확장자를 검사하여 허용되지 않은 확장자인 경우 업로드를 제한하도록 하자.
# 1 + 위험한 형식 파일 업로드 - 안전한 코드 예시(JAVA)
# 2 - 위험한 파일 형식 업로드 - 안전하지 않은 코드 예시(JAVA)
# 2 + 위험한 파일 형식 업로드 - 안전한 코드 예시(JAVA)
4. 해당 취약점 CASE
- 파일 업로드 시 확장자를 체크하지 않는 경우
- 블랙리스트 방식으로 확장자를 체크하는 필터링에서 대소문자를 구분하여 체크하는 경우.
* 블랙리스트와 화이트리스트의 차이점
블랙리스트는 시스템으로부터 차단해야하는 것들의 목록 이라면 화이트리스트는 들어와도 되는 것들의 목록이다.
블랙리스트가 필터링, 걸러냄의 의미라면 화이트리스트는 가능한 것만 골라잡는 너낌??!?
#. 참고 블로그
https://prokyhsigma.tistory.com/42?category=848515
'about Security > SECURE CODING' 카테고리의 다른 글
[보안 기능] 취약한 암호화 알고리즘 사용 (4등급) (0) | 2021.08.07 |
---|---|
[입력 데이터 검증 및 표현] 정수형 오버플로우 (4등급) (0) | 2021.08.07 |
[입력 데이터 검증 및 표현] HTTP 응답분할 (3등급) (0) | 2021.08.07 |
[캡슐화] 제거되지 않고 남은 디버그 코드 (3등급) (0) | 2021.08.07 |
[보안기능] 중요정보 평문저장 (3등급) (0) | 2021.08.07 |
댓글