본문 바로가기
Cert/소프트웨어(SW) 보안약점 진단원

설계단계 보안설계 기준 - 시스템 자원 접근 및 명령어 수행 입력값 검증

by 브루노W 2024. 8. 21.
유형 입력데이터 검증 및 표현
설계항목 시스템 자원 접근 및 명령어 수행 입력값 검증
설명 시스템 자원 접근 및 명령어 수행할 때 입력값에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한 처리방법을 설계해야 한다.
보안대책 ① 외부입력값을 이용하여 시스템 자원(IP, PORT, 프로세스, 메모리, 파일 등)을 식별하는 경우 허가되지 않은 자원이 사용되지 않도록 해야 한다.
② 서버 프로그램 안에서 셸을 생성하여 명령어를 실행해야 하는 경우 외부입력값에 의해 악의적인 명령어가 실행되지 않도록 해야 한다.
연관된 구현단계 기준 코드  삽입
경로 조작 및 자원 삽입
서버사이드 요청 위조
운영체제 명령어 삽입

 

취약점 개요

 

사례1 : 경로 조작 및 자원 삽입

공격자가 입력값 조작으로 시스템이 보호하는 자원에 임의로 접근하여 자원의 수정, 삭제, 시스템 정보누출, 시스템 자원 간 충돌로 인한 서비스 장애 등을 유발시킬 수 있는 취약점이다. 공격자가 허용되지 않은 권한을 획득하여, 설정에 관계된 파일을 변경하거나 실행시킬 수 있다.

 

 

사례2 : 입력값을 조작하여 허가되지 않은 명령 실행

적절한 검증절차를 거치지 않은 사용자 입력값에 의해 의도하지 않은 시스템 명령어가 실행되어 부적절하게 사용자 권한이 변경되거나 시스템 동작 및 운영에 악영향을 미칠 수 있다.

 

 

 

설계 시 고려사항

 

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

기능 설계 시 사용해야 하는 리소스 목록을 정의하여 지정된 범위 안에서 리소스를 선택하여 사용하도록 해야 하며, 리소스 목록은 프로퍼티파일이나 XML 파일로 정의하여 관리한다.

사용자의 요청 리소스가 특정 디렉토리 내 모든 파일인 경우에는 입력값 중 경로조작을 일으킬 수 있는 문자(.. / ₩)를 제거한다.


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

서버 프로그램 안에서 셸을 생성해서 명령어가 실행되는 구조를 가지지 않도록 설계하는 것이 우선이다.

명령어 일부로 사용되어야 하는 값들을 목록화하여 목록 내에 있는 값들로만 명령어가 조립되어 실행될 수 있도록 해야 하며, 허용목록은 프로퍼티파일이나 XML 파일로 정의하여 관리한다.

 

진단 세부사항

 

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

- 외부입력값이 시스템자원을 식별해야 하는 값으로 사용되는 경우, 허가된 자원에만 접근하도록 보안설계가 적용되어 있는지 확인

- 허가되지 않은 자원에 대해 접근이 가능한지를 점검하는 테스트 계획이 수립되어 있는지 확인

 

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

- 외부입력값이 운영체제 명령어 실행 시 명령어 또는 파라미터로 사용되는 경우, 허가된 명령만 실행되도록 보안설계가 적용되어 있는지 확인

- 허가되지 않은 명령어 실행가능 여부를 점검하는 계획이 수립되어 있는지 확인

 . 테스트 계획에는 검증해야 할 문자열(| , & , ; 등)을 정의하고 검증 및 예상 결과가 포함되어 있는지 확인