설계단계 보안설계 기준 - 보안기능 입력값 검증
유형 | 입력데이터 검증 및 표현 |
설계항목 | 보안기능 입력값 검증 |
설명 | 보안기능(인증, 권한부여 등) 입력 값과 함수(또는 메소드)의 외부 입력값 및 수행 결과에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한 처리방법을 설계해야 한다. |
보안대책 | ① 사용자의 역할, 권한을 결정하는 정보는 서버에서 관리해야 한다. ② 쿠키값, 환경변수, 파라미터 등 외부 입력값이 보안기능을 수행하는 함수의 인자로 사용되는 경우, 입력값에 대한 검증작업을 수행한 뒤 제한적으로 사용해야 한다. ③ 중요상태정보나 인증, 권한 결정에 사용되는 정보는 쿠키로 전송되지 않아야 하며, 불가피하게 전송하는 경우에는 해당 정보를 암호화해서 전송해야 한다. |
연관된 구현단계 기준 | 보안기능 결정에 사용되는 부적절한 입력값 정수형 오버플로우 Null Pointer 역참조 |
취약점 개요
사례1 : 보안기능 결정에 사용되는 부적절한 입력값
서버는 사용자가 전달하는 쿠키, 환경변수, 파라미터 등을 충분히 검증하지 않고 사용할 경우 공격자는 이에 포함된 사용자 권한, 역할 등을 나타내는 변수를 조작한 뒤 서버로 요청하여 상승된 권한으로 작업을 수행한다.
사례2 : 정수형 오버플로우
정수형 변수의 오버플로우는 정수 값이 증가하면서, 허용된 가장 큰 값보다 더 커져서 실제 저장되는 값이 의도하지 않게 아주 작은 수이거나 음수가 되어 발생한다. 특히 반복문 제어, 메모리 할당, 메모리 복사 등을 위한 조건으로 사용하는 외부 입력값이 오버플로우되는 경우 보안상 문제를 유발할 수 있다.
사례3 : Null Pointer 역참조
일반적으로, 그 객체가 '널(Null)이 될 수 없다'라고 하는 가정을 위반했을 때 발생한다. 공격자가 의도적으로 널 포인트 역참조를 발생시키는 경우, 그 결과 발생하는 예외 상황을 이용하여 추후의 공격을 계획하는데 사용될 수 있다.
설계 시 고려사항
① 사용자의 역할, 권한을 결정하는 정보는 서버에서 관리해야 한다.
상태정보나 인증, 인가, 권한에 관련된 중요정보는 서버 측의 세션이나 DB에 저장해서 사용하도록 설계한다.
② 쿠키값, 환경변수, 파라미터 등 외부 입력값이 보안기능을 수행하는 함수의 인자로 사용되는 경우, 입력값에 대한 검증작업을 수행한 뒤 제한적으로 사용해야 한다.
보안기능을 수행하는 함수 설계 시, 외부의 입력값에 의존할 필요가 없는 구조를 가지도록 설계해야 한다.
외부 입력값(쿠키, 환경변수, 파라미터 등)을 받아서 수행해야 하는 경우, 입력값에 대한 검증작업을 수행한 후 제한적으로 사용해야 한다.
외부에서 입력된 값은 사용 전 Null 여부를 체크한 뒤 사용해야 한다.
입력값에 대한 검증작업은 클라이언트측과 서버측에서 수행하는 검증방식이 동일해야 한다.
③ 중요상태정보나 인증, 권한 결정에 사용되는 정보는 쿠키로 전송되지 않아야 하며, 불가피하게 전송하는 경우에는 해당 정보를 암호화해서 전송해야 한다.
중요정보가 포함되는 쿠키는 암호화하여 전송하거나 HMAC(Hash-based Message Authentication Code)과 같이 메시지인증코드를 이용하여 서버측에서 무결성을 검증한다.
진단 세부사항
요구사항 ① 사용자의 역할, 권한을 결정하는 정보는 서버에서 관리해야 한다.
- 사용자의 역할 및 권한 결정을 서버에서 관리하는 정보를 이용하여 서버에서 처리되도록 설계되어 있는지 확인
- 인증우회 및 권한상승이 가능한지 점거하는 테스트 계획이 수립되어 있는지 확인
요구사항 ② 쿠키값, 환경변수, 파라미터 등 외부 입력값이 보안기능을 수행하는 함수의 인자로 사용되는 경우, 입력값에 대한 검증작업을 수행한 뒤 제한적으로 사용해야 한다.
- 보안기능 수행에 사용되는 입력값이 안전하게 사용되도록 설계되어 있는지 확인
- 외부 입력값 조작으로 보안기능 우회 여부를 점검하는 테스트 계획이 수립되어 있는지 확인
요구사항 ③ 중요상태정보나 인증, 권한 결정에 사용되는 정보는 쿠키로 전송되지 않아야 하며, 불가피하게 전송하는 경우에는 해당 정보를 암호화해서 전송해야 한다.
- 쿠키로 전달되는 정보가 분류되어 있으며, 그 중 불가피하게 전송되어야 하는 중요정보의 경우 안전하게 전달될 수 있도록 설계되어 있는지 확인
- 쿠키를 조작하여 중요정보 탈취 및 변조 여부를 점검하는 테스트 계획이 수립되어 있는지 확인