본문 바로가기
공부/KISA

시스템 자원 접근 및 명령어 수행 입력값 검증 - KISA 소프트웨어 개발 보안 가이드

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

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

 

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

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

www.kisa.or.kr


분석∙설계단계 SW 보안강화 - 설계보안항목 정의 및 설계 시 고려 사항 - 시스템 자원 접근 및 명령어 수행 입력값 검증 

설명

  • 시스템 자원접근 및 명령어 수행을 위해 사용되는 입력 값에 대한 유효성 검증방법과 유효하지 않은 값에 대한 처리방법을 설계해야 한다.

설계항목내용

  • 외부 입력값을 이용하여 시스템 자원(IP, PORT번호, 프로세스, 메모리, 파일 등)을 식별하는 경우 허가되지 않은 자원이 사용되지 않도록 해야 한다.
  • 서버 프로그램 안에서 쉘을 생성하여 명령어를 실행해야 하는 경우 외부 입력값에 의해 악의적인 명령어가 실행되지 않도록 해야 한다.

가. 취약점 개요

사례 1: 경로 조작 및 자원 삽입
  • 공격자가 입력값 조작을 통해 시스템이 보호하는 자원에 임의로 접근하여 자원의 수정․삭제, 시스템 정보 누출, 시스템 자원 간 충돌로 인한 서비스 장애 등을 유발할 수 있는 취약점이다.
  • 경로 조작 및 자원 삽입을 통해서 공격자가 허용되지 않은 권한을 획득하여, 설정에 관계된 파일을 변경하거나 실행시킬 수 있다.
사례 2: 입력값을 조작하여 허가되지 않은 명령 실행
  • 적절한 검증절차를 거치지 않은 사용자 입력값에 의해 의도하지 않은 시스템 명령어가 실행되어 부적절하게 사용자 권한이 변경되거나 시스템 동작 및 운영에 악영향을 미칠 수 있는 취약점이다.

 

나. 설계 시 고려사항

1. 외부 입력값을 이용하여 시스템 자원(IP, PORT번호, 프로세스, 메모리, 파일 등)을 식별하는 경우 허가되지 않은 자원이 사용되지 않도록 해야 한다.

  • 외부 입력값이 프로그램 내부에서 사용하는 리소스를 결정하는데 직접적으로 사용되지 않도록 설계한다. 즉, 기능 설계 시 사용해야 하는 리소스 목록을 정의하여 지정된 범위 안에서 리소스를 선택하여 사용하도록 해야 하며, 리소스 목록은 프로퍼티 파일이나 XML 파일로 정의하여 리소스 정보를 변경하는 경우 프로그램 수정을 최소화할 수 있도록 관리한다.
  • 사용자의 요청 리소스가 특정 디렉터리 내의 모든 파일인 경우, 모든 파일명을 목록화하는 것은 어렵다. 이런 경우는 입력값 중 경로 조작을 일으킬 수 있는 문자(.. / ₩) 문자를 제거하고 사용하여 지정된 경로 내의 파일만 접근 가능하도록 시큐어코딩 규칙을 정의한다.

2. 서버 프로그램 안에서 쉘을 생성하여 명령어를 실행해야 하는 경우 외부 입력값에 의해 악의적인 명령어가 실행되지 않도록 해야 한다.

  • 먼저, 서버 프로그램 안에서 쉘을 생성해서 명령어가 실행되는 구조를 가지지 않도록 설계하는 것이 우선이다. 하지만 경우에 따라 이러한 기능이 꼭 필요한 경우에는 외부 입력값이 직접적으로 명령어의 일부로 사용되지 않도록 해야 한다.
  • 명령어의 일부로 사용되어야 하는 값들을 목록화하여 목록 내에 있는 값들로만 명령어가 조립되어 실행될 수 있도록 해야 하며, 목록화되어 있는 값들이 경우에 따라 변경되어야 한다면, 이로 인해 프로그램이 수정되지 않도록 프로퍼티 파일이나 XML 파일을 사용하여 허용 목록을 작성한다.
  • 이때 외부 입력값은 목록화된 정보를 검색하는 인덱스 값을 사용하여 목록화된 정보의 노출을 최소화한다.

참고자료

반응형

댓글