보안/SW보안약점 진단원
[설계보안] 보안기능-입력값 검증
re-bugger
2022. 6. 24. 20:11
분류: 보안기능 / 보안기능 결정에 사용되는 부적절한 입력값, 정수형 오버플로우, Null Pointer 역참조
가. 항목명
보안기능 입력값 검증
나. 취약점 설명
보안기능 결정에 사용되는 부적절한 입력값: 사용자가 전달하는 쿠키, 환경변수, 파라미터 등을 충분히 검증하지 않고 사용하는 경우 사용자 권한, 역할 등을 나타내는 변수를 조작한 뒤 서버로 요청하여 상승된 권한을 수행하는 취약점
정수형 오버플로우: 허용된 가장 큰 값보다 더 커져 실제 저장되는 값이 의도하지 않게 아주 작은 수나 음수로 되어 발생하는 취약점
Null Pointer 역참조: 의도적으로 널 포인터 역참조를 발생시켜 예외 상황을 이용하여 추후 공격에 활용하는 취약점
다. 보안대책
① 사용자의 역할, 권한을 결정하는 정보는 서버가 관리
② 외부입력값이 보안기능을 수행하는 함수의 인자로 사용되는 경우, 입력값 검증
③ 중요상태정보, 인증, 권한 결정에 사용하는 정보는 쿠키로 전송하지 않거나 필요시 암호화 전
라. 설계시 고려사항
① 사용자의 역할,권한 결정하는 정보는 서버가 관리
- 중요정보는 세션이나 DB에 저장하여 사용
② 입력값이 보안기능 수행하는 함수의 인자로 사용될 경우 입력 값에 대한 검증이 필요함
- 외부의 입력 값에 의존할 필요가 없는 구조를 가지도록 설계
- 서버와 클라이언트에서 수행하는 검증하는 방식이 동일해야 함
- 외부에서 입력 된 값에 대해서는 사용 전 Null 여부를 체크
③ 중요 상태정보, 인증, 권한을 결정하는 정보는 쿠키로 전송하지 않거나 암호화하여 전송할 것
- 쿠키는 암호하하여 전송하거나 HMAC 과 같은 메시지 인증코드를 이용하여 서버측에서 무결성 검증한다.
마. 진단기준 및 세부사항
① 사용자의 역할/권한 결정하는 정보는 서버에서 관리
- 사용자에 대한 역할을 구분한다 ( 일반사용자, 관리자, 최고관리자 등 )
- 각 역할에 대한 권한을 구분
- 사용자의 역할과 권한을 정의하여 DB에 저장
- 권한/역할 검증위한 정보가 DB 또는 세션에 저장되도록 설계
② 외부입력값이 보안기능을 수행하는 함수로 사용되는 경우
- 보안기능 수행에 사용된 값의 종류, 출처, 의미를 정의
- 외부 입력값을 사용해야하는 이유 근거 명시
- 외부입력값에 대한 Null 검사
- 정수오버플로우와 같은 범위 넘어서는 값 사용하지 않도록 설계
③ 중요상태정보 / 인증 / 권한 정보는 쿠키로 전송하지 않거나 암호화하여 전송
- 쿠키에 포함되는 정보를 정의( 이름, 값, 의미, 유효기간 등)
- 쿠키에 중요정보가 포함되는 경우 타당한 근거/사유 명시
- 중요정보 전송 시 암호 처리 (안전한 암호화 통신채널로 전송, 안전한 암호화 알고리즘 사용)
- 무결성 검사 방법과 모듈 설계
바. 안전한 보안설계의 예
No | 요구사항명 | 해결방안 | 검수기준 | 비고 |
1 | DB사용자 계정에 최소권한 부여 | 애플리케이션에서 사용하는 DB 사용자 계정은 애플리케이션에서 사용하는 테이블, 뷰, 프로시저에 대해서만 사용권한을 부여한다 | 애플리케이션에서 사용하는 DB사용자 계정은 테이블, 뷰, 프로시저에 대한 권한만 적용된다. | 지속적인 DB사용자 계정 관리가 필요 |