티스토리 뷰

반응형

 

 

 

가. 원인

  - 정수형 입력값의 크기를 검증하지 않고 사용하는 경우

  - 정수표현 범위보다 큰 값을 사용하여 음수로 사용될 경우

 

 

나. 영향

  - 시스템 오류 발생

  - 임의명령 실행

  - 시스템 점령 등

 

 

다. 보안대책

  - 언어 및 플랫폼에 따른 정수 타입의 범위를 확인

  - 정수형 입력값을 연산에 사용할 경우, 연산결과의 범위를 체크

 

 

라. 안전한 코드

1. 정수범위 확인

 

  int count = Integer.parseInt( request.getParameter("count") );

  if (count < 0 )

     return -1;

  String[] arrString = new String[ count ];

 

 

마. 진단방법

<정수 범위 확인>

  1. 배열크기에 변수를 사용하여 동적생성하는지 확인

  2. 변수가 외부입력값인지 확인

  3. 해당 변수가 의도한 범위의 값에 대한 검증여부가 있는지 확인

 

 

 

바. 정/오탐 케이스

<정탐 케이스>

  1. ++ 연산으로 제한없이 증가 시 정수형 한계값보다 커지는 경우

  2. 외부 입력값이 검증없이 배열의 크기를 결정하는 경우

 

<오탐 케이스>

  1. available() 함수는 int값을 리턴하며, 정수 값 한계를 벗어난 값을 리턴하지 않음

  2. 헤더값의 길이를 배열 사이즈로 사용 시 헤더의 한계값이 정수 한계를 초과하지 않으므로 안전

  3. 메인 함수 인자의 갯수는 정수 한계 이상으로 입력된다는 것은 실현 가능성 희박하므로 취약하지 않은 것으로 판정

  4. 사용자 입력값 등의 외부 입력값이 아닌 경우

반응형
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday