티스토리 뷰
가. 원인
- 버퍼 크기보다 큰 데이터를 버퍼에 기록할 경우
- 버퍼의 영역을 넘어 다른 메모리 영역에 침범할 경우
나. 영향
- 메모리 상 중요한 정보를 읽거나 시스템 충돌유도
- 리턴주소를 조작하여 임의의 코드를 실행하도록 조작
다. 보안대책
- 버퍼의 범위를 넘는 데이터를 접근하지 못하도록 버퍼 크기와 인덱스를 정확히 사용
- 문자열 저장 시 버퍼의 마지막에 NULL로 종료
라. 안전한 코드
1. 버퍼 크기를 정확히 사용
typedef struct _charvoid { char data[16]; void *prev; void *next; } charvoid;
public void main( char* args ) { charvoid cv_struct; ... int data_size = sizeof(cv_struct.data);
memcpy( cv_struct.data, args, data_size ); cv_struct.data[data_size - 1] = '\0'; ... }
|
마. 진단방법
<버퍼 크기 확인>
1. 버퍼에 외부입력값을 저장하는지 확인
2. 외부입력값의 사이즈가 버퍼의 사이즈보다 크게 저장되는지 확인
3. 문자열 사용 시 버퍼의 마지막에 NULL을 저장하는지 확인
바. 정/오탐 케이스
<정탐 케이스>
1. 복사하려는 문자열의 크기를 검증없이 제한된 사이즈의 버퍼에 복사할 경우
2. 호스트 정보를 작은 사이즈(64 byte)의 제한된 버퍼에 문자열 복사할 경우
3. 버퍼의 마지막에 널을 삽입하지만, 특정 조건 시 위치가 마이너스일 경우 ( buf[-1] = \0 )
'Web Analytics > SW 보안약점 진단원' 카테고리의 다른 글
[구현보안] 보안기능 01 - 적절한 인증없는 중요기능 허용 (0) | 2019.10.04 |
---|---|
[구현보안] 입력 데이터 검증 및 표현 15 - 포멧 스트링 삽입 (0) | 2019.10.04 |
[구현보안] 입력 데이터 검증 및 표현 13 - 보안기능 결정에 사용되는 부적절한 입력값 (0) | 2019.10.04 |
[구현보안] 입력 데이터 검증 및 표현 12 - 정수형 오버플로우 (0) | 2019.10.04 |
[구현보안] 입력 데이터 검증 및 표현 11 - HTTP 응답분할 (0) | 2019.10.04 |
- Total
- Today
- Yesterday