보안/SW보안약점 진단원

[설계보안] 허용된 범위내 메모리 접근

re-bugger 2022. 6. 24. 19:56

분류: 입력데이터 검증 및 표현 / 메모리 버퍼 오버플로우, 포맷 스트링 삽입

가. 항목명

허용된 범위 내 메모리 접근

나. 취약점 설명

버퍼 오버플로우: 스택이나 힙에 할당되는 메모리에 문자열 등이 저장될 때 정의된 메모리 크기를 초과하여 문자열을 저장하는 경우 버퍼 오버플로우가 발생하는 취약점

포맷스트링: 공격자가 외부입력값에 포맷 문자열을 삽입하여 취약한 프로세스를 공격하거나 매모리 내용을 읽기/쓰기 권한을 취득하여 임의의 코드를 실행하는 취약점

다. 보안대책

① 메모리를 사용하는 플랫폼에서 메모리 버퍼의 경계값을 넘어서 메모리를 읽거나 저장하지 않도록 설계

② 메모리 버퍼오버플로우가 발생시킬 수 있는 취약한 API를 사용하지 않도록 설계

라. 설계시 고려사항

① 메모리 관리하는 플랫폼에서 메모리 버퍼의 경계값을 넘어서 읽기/쓰기 여부를  검사

  • 메모비리 보호 정책(예, Non-executable Stack, 랜덤스택(ASLR), 스택가드(StackGuard)) 적용
  • 메모리 사용 시 경계 값을 검사하고 사용

② 메모리 버퍼 오버플로우를 발생시키는 취약한 API를 사용하지 않도록 설계

마. 진단기준 및 세부사항

① 메모리 버퍼 경계값을 검사

  • 리눅스 환경의 경우 ASLR, StackGuard와 같은 메모리 보호를 위한 설정 확인
  • 배열의 값을 다른 배열로 복사하는 경우 데이터의 길이를 검사
  • 할당된 메모리보다 더 큰 입력 값을 사용하여 버퍼오버플로우 검사(테스트 입력값: 충분히 큰 문자열)

② 취약한 API 사용 통제

  • 메모리 버퍼 오버플로우를 발생시키는 API를 정의하고 코딩규칙 적용 확인
  •  

바. 안전한 보안설계의 예

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