Cert/소프트웨어(SW) 보안약점 진단원

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

브루노W 2024. 8. 23. 11:27
유형 입력데이터 검증 및 표현
설계항목 보안기능 입력값 검증
설명 보안기능(인증, 권한부여 등) 입력 값과 함수(또는 메소드)의 외부 입력값 및 수행 결과에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한 처리방법을 설계해야 한다.
보안대책 ① 사용자의 역할, 권한을 결정하는 정보는 서버에서 관리해야 한다.
② 쿠키값, 환경변수, 파라미터 등 외부 입력값이 보안기능을 수행하는 함수의 인자로 사용되는 경우, 입력값에 대한 검증작업을 수행한 뒤 제한적으로 사용해야 한다.
③ 중요상태정보나 인증, 권한 결정에 사용되는 정보는 쿠키로 전송되지 않아야 하며, 불가피하게 전송하는 경우에는 해당 정보를 암호화해서 전송해야 한다.
연관된 구현단계 기준 보안기능 결정에 사용되는 부적절한 입력값
정수형 오버플로우
Null Pointer 역참조

 

취약점 개요

 

사례1 : 보안기능 결정에 사용되는 부적절한 입력값

서버는 사용자가 전달하는 쿠키, 환경변수, 파라미터 등을 충분히 검증하지 않고 사용할 경우 공격자는 이에 포함된 사용자 권한, 역할 등을 나타내는 변수를 조작한 뒤 서버로 요청하여 상승된 권한으로 작업을 수행한다.

 

 

사례2 : 정수형 오버플로우

정수형 변수의 오버플로우는 정수 값이 증가하면서, 허용된 가장 큰 값보다 더 커져서 실제 저장되는 값이 의도하지 않게 아주 작은 수이거나 음수가 되어 발생한다. 특히 반복문 제어, 메모리 할당, 메모리 복사 등을 위한 조건으로 사용하는 외부 입력값이 오버플로우되는 경우 보안상 문제를 유발할 수 있다.

 

 

사례3 : Null Pointer 역참조

일반적으로, 그 객체가 '널(Null)이 될 수 없다'라고 하는 가정을 위반했을 때 발생한다. 공격자가 의도적으로 널 포인트 역참조를 발생시키는 경우, 그 결과 발생하는 예외 상황을 이용하여 추후의 공격을 계획하는데 사용될 수 있다.

 

 

 

설계 시 고려사항

 

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

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


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

보안기능을 수행하는 함수 설계 시, 외부의 입력값에 의존할 필요가 없는 구조를 가지도록 설계해야 한다.

외부 입력값(쿠키, 환경변수, 파라미터 등)을 받아서 수행해야 하는 경우, 입력값에 대한 검증작업을 수행한 후 제한적으로 사용해야 한다.

외부에서 입력된 값은 사용 전 Null 여부를 체크한 뒤 사용해야 한다.

입력값에 대한 검증작업은 클라이언트측과 서버측에서 수행하는 검증방식이 동일해야 한다.


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

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

 

진단 세부사항

 

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

- 사용자의 역할 및 권한 결정을 서버에서 관리하는 정보를 이용하여 서버에서 처리되도록 설계되어 있는지 확인

- 인증우회 및 권한상승이 가능한지 점거하는 테스트 계획이 수립되어 있는지 확인

 

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

- 보안기능 수행에 사용되는 입력값이 안전하게 사용되도록 설계되어 있는지 확인

- 외부 입력값 조작으로 보안기능 우회 여부를 점검하는 테스트 계획이 수립되어 있는지 확인

 

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

- 쿠키로 전달되는 정보가 분류되어 있으며, 그 중 불가피하게 전송되어야 하는 중요정보의 경우 안전하게 전달될 수 있도록 설계되어 있는지 확인

- 쿠키를 조작하여 중요정보 탈취 및 변조 여부를 점검하는 테스트 계획이 수립되어 있는지 확인