1. 버퍼 오버 플로우
- 프로세스가 사용 가능한 메모리 공간을 초과하여 발생하는 취약점(c, c++)
==> 할당된 공간보다 넘치게 값을 입력하는 것(덮어쓰기)으로 악의적인 코드가 실행
2. 메모리 영역
- 프로그램을 구동할 경우 메모리 영역으로 올라가게 되는데 크게 4가지로 구분
[+] 코드/텍스트 영역(Code Segment OR Text)
-읽기만 가능한 메모리 영역
- 프로그램 코드가 저장
[+] 데이터 영역(Data Segment)
- 변수가 저장되는 영역
- 전역/정적 변수를 할당하는 공간
- 영역에 변수가 선언되면 자동 초기화
[+] 힙영역 (Heap Segment)
- 메모리에 동적으로 할당되는 경우 힙영역에 저장
- 힙 영역은 다른 영역을 모두 할당하고 남는 공간
[+] 스택 영역(Stack Segment)
- 함수 내에 정의된 지역 변수가 저장되는 영역
- 복귀 조수를 가지고 있음
- LIFO 구조(후입선출)
3. 버퍼 오버 플로우 공격 종류
[+] 스택 버퍼 오버 플로우 공격
- 스택에 저장된 복귀 주소가 지역변수에 의해 침범당하는 공격
- 스택의 구조는 선입 선출
[+] 힙 버퍼 오버 플로우 공격
- 힙 영역은 하위 주소에서 상위주소로 메모리를 할당한다. 경곗값을 검사하지 않고 메모리를 사용하게 되면 할당된 메모리보다
초과한다는 취약점을 악용하여 악성코드를 넣어 실행
4. 버퍼 오버플로우 대응법
- Stack Guard(스택 가드) : 프로그램의 복귀주소와 변수 사이의 특정한 값(카나리아)을 지정하여 변경될 경우 프로그램 중지
- Stack Shield(스택 실드) : 함수 시작 시 리턴 주소를 특수 스택(Global RET)에 저장해 놓고 함수 종료 시 저장된 값과 스택의 RET 비교
- ASLR(address Space Layout Randomization) : 메모리 공격을 방어하기 위해 주소 공간을 난수화 하는 기법으로 특정 주소를
불러오는 것을 방지하여 악성코드가 실행되지 않도록 한다.
[+] C언어 권고 함수
- 길이 제한 기능이 있는 함수
strncat(); ##문자열을 합치는 함수
strncpy(): ##문자열을 복사하는 함수
fgets(); ##문자열을 읽는 함수
vscant(): ##문자열을 읽는 함수
snprintf(): ##문자열을 출력하는 함수
vsnprintf(); ##문자열을 출력하는 함수
'소소한 IT이야기 > 정보보안기사 필기' 카테고리의 다른 글
[필기] 2023년도 정보보안산업기사 1회차 (feat. 시스템 보안) (2) | 2023.03.11 |
---|---|
[시스템 보안] 유닉스/리눅스 정리 --001 (12) | 2023.03.01 |
[보안기사]필기 기출 문제 정리 (feat. 18회차) (3) | 2023.02.26 |