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