보안/SW보안약점 진단원

[설계보안] 보안기능-입력값 검증

re-bugger 2022. 6. 24. 20:11

분류: 보안기능 / 보안기능 결정에 사용되는 부적절한 입력값, 정수형 오버플로우, Null Pointer 역참조

가. 항목명

보안기능 입력값 검증

나. 취약점 설명

보안기능 결정에 사용되는 부적절한 입력값: 사용자가 전달하는 쿠키, 환경변수, 파라미터 등을 충분히 검증하지 않고 사용하는 경우 사용자 권한, 역할 등을 나타내는 변수를 조작한 뒤 서버로 요청하여 상승된 권한을 수행하는 취약점

정수형 오버플로우: 허용된 가장 큰 값보다 더 커져 실제 저장되는 값이 의도하지 않게 아주 작은 수나 음수로 되어 발생하는 취약점

Null Pointer 역참조:  의도적으로 널 포인터 역참조를 발생시켜 예외 상황을 이용하여 추후 공격에 활용하는 취약점

다. 보안대책

① 사용자의 역할, 권한을 결정하는 정보는 서버가 관리

② 외부입력값이 보안기능을 수행하는 함수의 인자로 사용되는 경우, 입력값 검증

③ 중요상태정보, 인증, 권한 결정에 사용하는 정보는 쿠키로 전송하지 않거나 필요시 암호화 전

라. 설계시 고려사항

① 사용자의 역할,권한 결정하는 정보는 서버가 관리

  • 중요정보는 세션이나  DB에 저장하여 사용

② 입력값이 보안기능 수행하는 함수의 인자로 사용될 경우 입력 값에 대한 검증이 필요함

  • 외부의 입력 값에 의존할 필요가 없는 구조를 가지도록 설계
  • 서버와 클라이언트에서 수행하는 검증하는 방식이 동일해야 함
  • 외부에서 입력 된 값에 대해서는 사용 전  Null 여부를 체크

③ 중요 상태정보, 인증, 권한을 결정하는 정보는 쿠키로 전송하지 않거나 암호화하여 전송할 것

  • 쿠키는 암호하하여 전송하거나 HMAC 과 같은 메시지 인증코드를 이용하여 서버측에서 무결성 검증한다.

마. 진단기준 및 세부사항

① 사용자의 역할/권한 결정하는 정보는 서버에서 관리

  • 사용자에 대한 역할을 구분한다 ( 일반사용자, 관리자, 최고관리자 등 )
  • 각 역할에 대한 권한을 구분
  • 사용자의 역할과 권한을 정의하여 DB에 저장
  • 권한/역할 검증위한 정보가 DB 또는 세션에 저장되도록 설계

②  외부입력값이 보안기능을 수행하는 함수로 사용되는 경우 

  • 보안기능 수행에 사용된 값의 종류, 출처, 의미를 정의
  • 외부 입력값을 사용해야하는 이유 근거 명시
  • 외부입력값에 대한 Null 검사
  • 정수오버플로우와 같은 범위 넘어서는 값 사용하지 않도록 설계

③ 중요상태정보 / 인증 / 권한 정보는 쿠키로 전송하지 않거나 암호화하여 전송

  • 쿠키에 포함되는 정보를 정의( 이름, 값, 의미, 유효기간 등)
  • 쿠키에 중요정보가 포함되는 경우 타당한 근거/사유 명시                         
  • 중요정보 전송 시 암호 처리 (안전한 암호화 통신채널로 전송, 안전한 암호화 알고리즘 사용)
  • 무결성 검사 방법과 모듈 설계

바. 안전한 보안설계의 예

No 요구사항명 해결방안 검수기준 비고
1 DB사용자 계정에 최소권한 부여 애플리케이션에서 사용하는 DB 사용자 계정은 애플리케이션에서 사용하는 테이블, 뷰, 프로시저에 대해서만 사용권한을 부여한다 애플리케이션에서 사용하는 DB사용자 계정은 테이블, 뷰, 프로시저에 대한 권한만 적용된다. 지속적인 DB사용자 계정 관리가 필요