728x90
반응형
SMALL

SW개발보안가이드중 구현단계에서의 점검항목은 크게 7가지 이다.  (입보시에코캡아)
  1. 입력데이터 검증 및 표현
  2. 보안기능
  3. 시간 및 상태
  4. 에러처리
  5. 코드오류
      5-1. Null Pointer 역참조
      5-2. 부적절한 자원 해제
      5-3. 해제된 자원 사용
      5-4. 초기화되지 않은 변수 사용

  6. 캡슐화

  7. API 오용

이 장에서는 "5.코드오류" 에 대한 점검항목을 설명한다.
(두음 : 널부해초)


5-1. Null Pointer 역참조

구분 설명
원인/영향 Null로 설정된 참조변수의 주소값을 참조하는 경우 공격자는 의도적으로 널포인트 역참조를 
유발하여 그 결과로 발생하는 예외상황을 이용하여 추후의 공격을 계획하는데 사용할 수 있다
대응 ① 참조변수를 레퍼런스하기전에 NULL인지 검사한다

취약) public static int cardinality (Object obj, final Collection col) {
         if (obj.equals("aaa")) {  <-- object 파라미터값을 null검사 안하고 바로 사용
         }

안전) public static int cardinality (Object obj, final Collection col) {
         if (null != obj && obj.equals("aaa")) {  <-- object 파라미터값을 null검사
         }



5-2. 부적절한 자원 해제

구분 설명
원인/영향 자원(메모리,DB연결,파일..) 들을 사용후 반드시 해제하여야 하는데 부적절한 로직 및 코드누락으로
자원해제가 안될경우 자원고갈로 인해 오류가 발생한다
대응 ① 자원할당후 반드시 자원해제가 되도록 코드를 작성한다
② 자바의 경우 자원해제코드는 finally 블록에 기술해서 누락되지 않도록 한다


5-3. 해제된 자원 사용

구분 설명
원인/영향 C,C++ 에서는 개발자가 자원을 직접 해제해야하는 경우 해제된 자원을 다시 해제하거나
해제된 자원을 다시 사용하는 경우 오류발생
취약) free(temp);
       stmcpy(temp, argv[1], BUFFER_SIZE-1);   <-- temp해제후 다시 사용
대응 ① 자원해제 후 그 메모리를 참조하고 있던 포인터를 참조 추적이나 형변환
  , 수식에서의 피연산자 등을 사용하여 해제된 메모리에 접근하지 못하도록 한다.
② 자원해제 후 포인터에 NULL을 저장하거나, 다른 적절한 값을 저장하면 예상치 못한 
   코드의 실행을 막을수 있다



5-4. 초기화되지 않은 변수 사용

구분 설명
원인/영향 C언어에서 스택 메모리에 저장되는 지역변수는 생성시 자동으로 초기화 되지 않는데
, 이 변수를 그냥 참조할 경우 이전에 이 메모리에 저장되어 있던 데이터를 의도치 않게
참조하게 되어 악성코드가 실행될 수 있다
대응 ① 모든 변수는 사용전에 반드시 올바른 초기값을 할당한다
취약) int x , y ;
안전) int x = 0 , y = 0 ;



728x90
반응형
LIST

+ Recent posts