[보안기사] Overflow 공격
Overflow 공격
(1) Stack overflow
- 메모리 영역 중 Local value나 함수의 Return Address 가 저장되는 스택 영역에서 발생하는 오버플로우
- 스택 영역에 할당된 버퍼의 크기를 초과하는 뎅터(실행가능코드)를 입력하여 복귀주소를 변경하고 공격자가 원하는 임의의 코드를 실행
- 공격절차
1) 공격 쉘코드 생성 : 공격자가 공격 쉘코드를 버퍼에 저장
2) 반환주소 덮어 쓰기 : 루트 권한으로 실행되는 프로그램 상에서 특정 함수의 스택 버퍼를 오버플로우 시키고, 공격 쉘 코드가 저장된 버퍼의 주소로 반환 주소를 변경
3) 공격 쉘 코드 주소 반환 : 특정 함수의 호출이 완료되면 조작된 반환 주소인 공격 쉘코드 주소가 반환됨
4) 쉘코드 실행 : 공격 쉘 코드가 실행되어 루트 권한 탈취
- 공격대응
1) 경계 검사하는 함수 사용: strncat(), strncpy(), fgets(), fscanf(), vsnprintf()
2) 최소 권한으로 프로그램 실행
3) 운영체제 커널 패치
4) 메모리 보호 기법 : ASLR, 스택가드, 스택쉴드, Non-Executable 스택, RELRO, PIE를 이용해 메모리 보호
1. 스택가드 (카나리 값을 복귀 주소와 변수 사이에 삽입, 카나리 값을 검증하여 변하면 복귀 주소를 호출하지 않도록 함)
2. 스택쉴드 (함수 시작시 복귀주소를 Global RET이라는 특수 스택에 저장, 종료시 저장된 값과 비교하여 다르면 프로그램 실행 중단)
3. Non-Excutable 스택 활용 (스택의 내용이 변경할 수 없도록 하는 기법, 윈도우에서 DEP 방식 사용) *DEP, Data Execution Prevention : 메모리의 특정 영역(stack, heap)에 저장된 데이터를 실행 가능한 코드로 취급하지 않는 보호 기법
4. RELRO(Read only Relocation, 중요한 바이너리 섹션을 읽기전용으로 설정하여 메모리 변조를 방지하는 방법)
5. PIE(Position Independent Executable, 프로그램이 실행될 때 마다 메모리 주소가 달라지도록 하는 기법)
(2) Heap Overflow
- 프로그램 실행 시 동적으로 할당되는 힙 영역에 할당된 버퍼 크기를 초과하는 (실행가능코드)를 입력하여 메모리의 데이터와 암수 주소를 변경, 공격자가 원하는 임의의 코드 실행
- 인접한 메모리(Linked-list)의 데이터가 삭제될 수 있으며, 해당 위치에 특정 함수에 대한 포인터 주소가 있으면 이를 악용, 관리자 권한 파일에 접근하거나 공격자의 특정 코드를 실행한다.
(참고) 프로세스의 주소 영역
(1) 코드 영역 - 실행할 프로그램의 코드가 저장되는 영역, Text area
(2) 데이터 영역 - 전역변수, static 변수가 할당되는 영역, 프로그램 실행과 동시에 할당, 종료시 소멸
(3) 힙 영역 - 메모리 동적 할당 (malloc 함수 new 이용해 할당) 시 저장되는 영역, 동적으로 할당된 메모리를 해제 시 소멸
(4) 스택 영역 - 함수 호출 시 생성되는 지역변수, 매개변수가 저장되는 영역, 함수를 호출한 곳의 복귀주소를 저장하고 있어 함수 호출이 종료되면 소멸
'정보보안 > 정보보안기사' 카테고리의 다른 글
| [보안기사] HTTP 구조 (0) | 2025.12.24 |
|---|---|
| [보안기사] SQL 인젝션 (0) | 2025.12.19 |
| 정보보안기사 실기 정리 파일 (0) | 2025.12.05 |
| 정보보안기사 필기 빈출 정리 (0) | 2025.02.27 |
| 정보보안(산업)기사 기본용어 정리 문서 (0) | 2024.12.22 |




