본문 바로가기
공부/KISA

경로 조작 및 자원 삽입 - KISA 소프트웨어 개발 보안 가이드

by Skogkatt의 개인 블로그 2020. 7. 18.
반응형

https://www.kisa.or.kr/public/laws/laws3.jsp

 

기술안내서 가이드 < 관련법령·기술안내서 < 자료실 : 한국인터넷진흥원

기술안내서 가이드 한국인터넷진흥원 기술안내서 가이드 입니다. 게시판 목록 보기 기술안내서 가이드 표 대분류 소분류 기술안내서 가이드 대상 수준 인터넷 진흥 및 이용 활성화 인터넷 진흥

www.kisa.or.kr


구현 단계 시큐어코딩 가이드 - 입력 데이터 검증 및 표현 - 경로 조작 및 자원 삽입

가. 개요

  • 검증되지 않은 외부 입력값을 통해 파일 및 서버 등 시스템 자원에 대한 접근 혹은 식별을 허용할 경우, 입력값 조작을 통해 시스템이 보호하는 자원에 임의로 접근할 수 있는 보안약점이다.
  • 경로 조작 및 자원 삽입 약점을 이용하여 공격자는 자원의 수정․삭제, 시스템 정보 누출, 시스템 자원 간 충돌로 인한 서비스 장애 등을 유발할 수 있다. 즉, 경로 조작 및 자원 삽입을 통해서 공격자가 허용되지 않은 권한을 획득하여, 설정에 관계된 파일을 변경하거나 실행시킬 수 있다.

나. 보안대책

  • 외부의 입력을 자원(파일, 소켓의 포트 등)의 식별자로 사용하는 경우, 적절한 검증을 거치도록 하거나, 사전에 정의된 적합한 리스트에서 선택되도록 한다.
  • 특히, 외부의 입력이 파일명인 경우에는 경로순회(directory traversal)[각주:1]공격의 위험이 있는 문자( “ / ₩ .. 등 )를 제거할 수 있는 필터를 이용한다.

다. 코드예제

JAVA
더보기

외부 입력값(P)이 버퍼로 내용을 옮길 파일의 경로 설정에 사용되고 있다. 만일 공격자에 의해 P의 값으로 ../../../rootFile.txt와 같은 값을 전달하면 의도하지 않았던 파일의 내용이 버퍼에 쓰여 시스템에 악영향을 준다.

외부 입력값에 대하여 상대 경로를 설정할 수 없도록 경로 순회 문자열( / ₩ & .. 등 )을 제거하고 파일의 경로 설정에 사용한다.

인자 값이 파일 이름인 경우에는 애플리케이션에서 정의(제한)한 디렉터리 c:₩help_files₩에서 파일을 읽어서 출력하지만, args[0]의 값으로 "..₩..₩..₩windows₩system32₩drivers₩etc₩hosts"와 같이 경로 조작 문자열을 포함한 입력이 들어오는 경우 접근이 제한된 경로의 파일을 열람할 수 있다.

외부 입력값으로 파일 경로를 조합하여 파일 시스템에 접근하는 경로를 만들지 말아야 한다. 외부에서 입력되는 값에 대하여 null 여부를 체크하고, 외부에서 입력되는 파일 이름에서 경로 조작 문자열 제거 조치 후 사용하도록 한다

 

C#
더보기

다음 C# 코드는 외부 입력값을 파일명에 바로 사용하고 있다. 이는 의도치 않은 파일의 손상을 가져올 수 있다.

외부 입력값에 경로 조작 문자열을 제거하여 조작 위험을 없앨 수 있다.

 

C
더보기

아래 C 코드는 외부 입력 값을 파일 경로로 바로 사용하고 있다. 이는 공격자가 환경 변수 reportfile 을 조작하여 디렉터리 경로를 조작할 수 있다.

아래 C 코드는 외부에서 불러온 파일 이름을 그대로 사용하지 않고 경로 조작 가능성이 있는 문자열을 검증하고 사용한다.


참고자료

  1. 경로순회 : “./”,“../” 등을 사용하여 상대 경로 참조 방식을 이용해 웹 루트 디렉터리를 벗어나 다른 디렉터리의 중요 파일에 접근하는 공격법. 경로 추적이라고도 함 [본문으로]
반응형

댓글