티스토리 뷰
가. 원인
- 검증되지 않은 외부입력값을 파일 및 서버의 시스템 자원에 접근하거나 식별을 허용
나. 영향
- 시스템이 보호하는 자원에 접근/수정/삭제/정보노출
- 시스템 자원간 충돌로 시스템 장애 유발
- 허용되지 않는 권한을 획득
- 인증/인가 우회 후 설정파일 열람/변경/실행
다. 보안대책
- 외부입력값을 자원(파일, 소켓포트 등)의 식별자로 사용할 경우, 검증 후 사용
- 사용자별 사용가능한 자원을 사전에 리스트로 정의
- 외부입력값을 파일 식별자로 사용할 경우, 경로순회공격 위험이 있는 문자( .. / \ ) 필터링
라. 안전한 코드
String fileName = request.getParameter("file"); fileName = filename.replaceAll("\\.", "").replaceAll("/", "").replaceAll("\\\\", ""); fis = new FileInputStream("c:\data\" + fileName);
|
public static void main(String[] args) { String fileName = args[0]; if ( fileName != null ) { fileName = fileName.replaceAll("\\.{2,}[/\\\\\]", ""); } ... }
|
마. 진단방법
<경로조작>
1. 파일객체를 사용하는지 확인
2. 해당파일을 외부에서 직접접근하는지 확인
3. 외부입력값에 경로순회 문자열을 제거하는 필터링이 있는지 확인
<자원삽입>
1. 파일명, 소켓포트 등과 같은 자원을 사용하는지 확인
2. 해당자원을 외부에서 직접접근하는지 확인
3. 직접접근하지 않고 매핑표나 리스트를 통해 사용하는지 확인
바. 정/오탐 케이스
<정탐 케이스>
1. 경로순회 문자열을 제거하지 않고 파일생성에 사용
2. 개별 사용 프로퍼티를 사용하여 자원에 접근 시 정탐
<오탐 케이스>
1. getRealPath(), getContextPath() 등 내부 함수는 소스가 안전하므로 취약하지 않다고 판정
2. 시스템 프로퍼티를 사용하여 자원에 접근 시 오탐
'Web Analytics > SW 보안약점 진단원' 카테고리의 다른 글
[구현보안] 입력 데이터 검증 및 표현 04 - 운영체제 명령어 삽입 (0) | 2019.09.30 |
---|---|
[구현보안] 입력 데이터 검증 및 표현 03 - 크로스 사이트 스크립트 (0) | 2019.09.30 |
[구현보안] 입력 데이터 검증 및 표현 01 - SQL 삽입 (0) | 2019.09.30 |
[설계보안] 세션통제 01 - 세션통제 (0) | 2019.09.29 |
[설계보안] 에러처리 01 - 예외처리 (0) | 2019.09.29 |
- Total
- Today
- Yesterday