IgnatiusHeo

설계단계 보안설계기준-보안기능 입력값 검증 본문

자격/SW보안약점진단원

설계단계 보안설계기준-보안기능 입력값 검증

Ignatius Heo 2023. 6. 27. 18:51

작성일: 230627

 

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

 

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

 

유형  입력데이터 검증 및 표현
설계항목  보안기능 입력값 검증
설명
 보안기능(인증, 권한부여 등) 입력값과 함수(또는 메소드)의 외부입력값 및 수행 결과에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한 처리방법을 설계해야 한다.

보안대책
 ① 사용자의 역할, 권한을 결정하는 정보를 서버에서 관리해야 한다.
 
 ② 쿠키값, 환경변수, 파라미터 등 외부입력값이 보안기능을 수행하는 함수의 인자로 사용되는 경우, 입력값에 대한 검증작업을 수행한 뒤 제한적으로 사용해야 한다.

 ③ 중요상태정보나 인증, 권한 결정에 사용되는 정보는 쿠키로 전송되지 않아야 하며, 불가피하게 전송하는 경우에는 해당 정보를 암호화해서 전송해야 한다. 

연관된
구현단계
- 보안기능 결정에 사용되는 부적절한 입력값
https://cryptocurrencyclub.tistory.com/124
- 정수형 오버플로우
https://cryptocurrencyclub.tistory.com/123
- Null Pointer 역참조
https://cryptocurrencyclub.tistory.com/149

 

가. 취약점 개요

 

ㅇ 위 내용을 볼 때, 예상 가능한 보안 위협: 1. 중간자공격? 2. 입력값을 조작하여 권한 상승?

  1. 보안기능 결정에 사용되는 부적절한 입력값: 변수를 조작한 뒤 서버로 요청하여 상승된 권한으로 작업 수행\
  2. 정수형 오버플로우: 반복문 제어, 메모리 할당, 메모리 복사 등을 위한 조건으로 사용하는 외부입력값이 오버플로우 되는 경우 보안상 문제 유발
  3. Null Pointer 역참조: 객체가 Null이 될 수 없다는 가정을 위반했을 때 발생하며, 역참조를 발생시키는 경우 발생하는 예외 상황을 이용하여 공격을 계획하는 데 사용될 수 있음.

메모리 버퍼오버플로우(출처: 소프트웨어 보안약점 진단 가이드 2021, 행정안전부·KISA)

 

나. 설계시 고려사항

 

① 사용자의 역할, 권한을 결정하는 정보는 서버에서 관리해야 한다.

  →  상태정보는 인증, 인가, 권한에 관련된 중요 정보는 서버 측의 세션이나 DB에 저장해서 사용하도록 설계한다.

 

② 쿠키값, 환경변수, 파라미터 등 외부입력값이 보안기능을 수행하는 함수의 인자로 사용되는 경우, 입력ㄱ밧에 대한 검증작업을 수행한 뒤 제한적으로 사용해야 한다.

  →  보안기능을 수행하는 함수 설계 시, 외부의 입력값에 의존할 필요가 없는 구조를 가지도록 설계해야 하며, 만약 외부입력값(쿠키, 환경변수, 파라미터 등)을 받아서 수행해야 하는 경우, 입력값에 대한 검증작업을 수행한 뒤 제한적으로 사용해야 한다.

  →  특히 입력값에 대한 검증작업은 클라이언트측에서 수행하는 검증방식과 서버에서 수행하는 검증방식이 동일해야 한다. 또한 외부에서 입력된 값에 대해서는 사용 전에 NULL 여부를 체크한 뒤 사용해야 한다.

 

③ 중요상태정보나 인증, 권한 결정에 사용되는 정보는 쿠키로 전송되지 않아야 하며, 불가피하게 전송하는 경우에는 암호화해서 전송해야 한다.

  →  중요정보가 포함되는 쿠키는 암호화하여 전송하거나 HMAC(Hash-Based Message Authentication Code)와 같은 메시지인증코드를 이용하여 서버측에서 무결성을 검증한다.

 

다. 진단 세부사항

 

 ① 사용자의 역할, 권한을 결정하는 정보는 서버에서 관리해야 한다. 사용자 및 권한 확인 절차를 확인하여 서버에서 관리하는 세션정보를 사용하도록 설계하고 있는지 확인한다.

  ㅇ  사용자에 대한 역할을 구분하고 있으며, 각 역할 별 권한의 구분 여부 확인

  ㅇ  사용자의 역할과 권한을 정의하여 저장할 수 있도록 데이터베이스가 설계되어 있는지 확인

  ㅇ  사용자의 역할과 권한을 검증하는 모듈이 설계되어 있거나, 외부 라이브러리를 사용하는 경우 사용자의 권한이나 역할 검증을 위한 정보가 DB 또는 세션에 저장되도록 설계되어 있는 지 확인

  ㅇ  조작된 입력 파라미터, 쿠키 등을 전달하여 사용자의 역할이나 권한 체크가 우회되는지 점검하기 위한 테스트계획이 수립되어 있는지 확인

 

 ② 쿠키값, 환경변수, 파라미터 등 외부입력값이 보안기능을 수행하는 함수의 인자로 사용되는 경우, 입력값에 대한 검증작업을 수행한 뒤 제한적으로 사용해야 한다.

외부입력값을 이용하여 사용자 및 권한 확인 등 보안기능에 사용하는 경우 입력값을 검증하도록 명시하고 있는지 확인한다.

  ㅇ  보안기능 수행에 사용되는 값의 종류, 출처, 의미 등의 정의 여부 확인

  ㅇ  외부 입력값을 사용해야 하는 경우, 타당한 근거/사유가 명시되어 있는지 확인

  ㅇ  보안기능 수행에 외부 입력값이 사용되는 경우, 외부 입력값에 대한 검증 방법 정의 여부 확인(NULL 검사, 정수오버플로우 등)

  ㅇ  외부입력값을 조작하여 보안 기능의 무력화 또는 오작동 여부를 점검하기 위한 테스트 계획의 수립 여부 확인

 

 ③ 중요상태정보나 인증, 권한결정에 사용되는 정보는 쿠키로 전송되지 않아야 하며, 불가피하게 전송하는 경우에는 해당 정보를 암호화해서 전송해야 한다. 생성되는 응답페이지에 외부입력값이 사용되는 경우 사용자 입력값에 스크립트가 포함되어 있는지 검증하도록 설계하고 있는지 확인한다.

  ㅇ  쿠키에 포함될 정보의 이름, 값, 의미, 유효기간 등을 정의하고 있는지 확인(중요정보가 포함되는 경우 근거/사유)

  ㅇ  중요정보를 쿠키로 전달하는 경우 암호화처리방식 설계여부 확인(암호화 통신채널 or 쿠키를 안전한 암호알고리즘을 사용하여 암호화하여 전송)

  ㅇ  쿠키로 전달된 중요정보의 무결성 검사 방법과 모듈의 설계 여부 확인

  ㅇ  쿠키에 포함된 값을 복호화하거나 변조된 쿠키를 전달하여 정보 조작이 가능한지 점검하기 위한 테스트계획 수립 여부 확인

 

 

끝.