IgnatiusHeo

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

자격/SW보안약점진단원

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

Ignatius Heo 2023. 6. 23. 02:01

작성일: 230623

 

※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.

 

정리 내용: 소프트웨어 보안약점 진단 가이드(58~63p)

 

유형  입력데이터 검증 및 표현
설계항목  시스템 자원 접근 및 명령어 수행 입력값 검증
설명
 시스템 자원접근 및 명령어를 수행할 때 입력값에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한
 처리 방법을 설계해야 한다.


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

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


연관된
구현단계
- 코드삽입
https://cryptocurrencyclub.tistory.com/111
- 경로 조작 및 자원 삽입
https://cryptocurrencyclub.tistory.com/112
- 서버사이드 요청 위조
https://cryptocurrencyclub.tistory.com/121
- 운영체제 명령어 삽입
https://cryptocurrencyclub.tistory.com/114

 

가. 취약점 개요

 

ㅇ 위 내용을 볼 때, 예상 가능한 보안 위협: 비인가 자원 할당 및 명령 실행, 경로조작 및 정보 탈취

 

나. 설계시 고려사항

 

① 외부입력값을 이용하여 시스템 자원을 식별하는 경우 허가되지 않은 자원이 사용되지 않도록 해야 한다.

  →  외부입력값이 프로그램 내부에서 사용하는 리소스를 결정하는데 직접적으로 사용되지 않도록 설계한다. (기능 설계시 사용하는 리소스 목록과 사용 범위를 설정, 리소스 목록은 프로퍼티파일이나 XML파일로 정의하여 리소스 정보를 변경하는 경우 프로그램 수정을 최소화 할 수 있도록 관리)

  →  사용자의 요청 리소스가 디렉토리 내 모든 파일인 경우 목록화 하는것은 어려우니, 해당 경우는 경로조작을 일으킬 수 있는 문자(.. / \)를 제거하고 사용하여 지정 경로 내 파일만 접근 가능하도록 시큐어코딩 규칙을 정의한다.

 

  →  FTP 서비스를 예시로 들면 사용자별 디렉토리를 제공, 해당 디렉토리에 파일을 업-다운로드할 수 있도록 설정하는 경우를 가정하면 사용자는 1. 사용자 개인 디렉토리에만 접근이 가능해야 하며, 2. 적절한 자원 사용범위를 설계하여 파일 관리 시 시스템에 영향이 가지 않도록 설계를 해야하며 3. 입력값에 대한 필터링 + 시큐어코딩을 설정.

 

 

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

  →  셸을 생성해서 명령어 실행해야하는 경우면, 외부입력값이 직접적으로 명령어의 일부로 사용되지 않도록 해야한다.

  →  명령어 일부 사용값들을 프로퍼티파일이나 XML파일과 인덱싱을 조합, 목록화하여 허용 목록 내 값들로만 명령어가 조립되어 실행될 수 있도록 해야 한다.

 

  →  말이 어려운데, 서브커맨드 목록 만들어놓고 인덱싱 => 조립해서 커맨드 완성, 실행하도록 설정해야함. 외부입력값을 그대로 받아 셸에 직접 커맨드를 입력하는 경우는 없어야함. 맞말임.

 

 

다. 진단 세부사항

 

 ① 외부 입력값을 이용하여 시스템자원을 식별하는 경우 허가되지 않은 자원이 사용되지 않도록 해야 한다.

  ㅇ  접근 허가된 시스템자원이 식별되고, 사용가능한 기능과 매핑되어 있는지 확인

  ㅇ  시스템자원 접근 이력이 로그로 기록되도록 설계되어 있는지 확인

  ㅇ  조작된 입력으로 비허가 자원의 접근가능 여부를 점검할 수 있는 테스트 계획의 수립 여부 확인

    → 경로조작에 사용 가능한 문자: / \\

 

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

  ㅇ  명령어 실행 기능 포함여부를 식별, 해당 기능의 실행 가능 명령어 파라미터의 제한 설계 여부 확인

  ㅇ  운영체제 명령어 실행 이력이 로그로 기록되도록 설계되어 있는지 확인

    → 누가/언제/어느IP에서 썼는지 확인 가능하도록 설계되어야함.

 

  ㅇ  조작된 입력으로 비허가 명령어의 실행 가능 여부 테스트 계획 수립 여부 확인

    → 검증해야 할 특수문자: | & ; 

 

 

 

끝.