🧠 메모리 취약점
- 메모리 정의
- 컴퓨터가 가지고 있는 기억장치
- 레지스터 : CPU의 일부로 CPU 동작 속도와 동기화되어 작동 (가장 빠르다)
- 주 기억 장치 : CPU 에서 직접 접근이 가능한 메모리
- 보조 기억장치 : CPU 에서 직접 접근이 불가능한 메모리 (주 기억장치를 위한 장치)
- 메모리 관리
- 메모리 위치, 메모리 주소 : 컴퓨터에서 저장된 정보 읽거나 쓸 때 필요하다
- 일반적으로 각각의 메모리 위치는 8bit의 데이터를 저장
- 각각의 주소는 특정 메모리 위치에 대한 고유한 식별자
- 주소 지정 : 컴퓨터가 메모리의 위치를 식별하는 과정
- 프로그램 실행 → 프로그램 수행에 필요한 데이터들이 메모리에 올려짐 → 프로그램 사용 가능
- 프로그램이 메모리에 올려져 사용될 때 저장되는 값
- 데이터 영역 : 전역 변수 할당 / 시작과 동시에 할당 / 종료와 함께 소멸
- 스택 영역 : 함수 변수 저장 / 함수 호출시 생성 / 함수 완료시 소멸
- 힙 영역 : 필요에 의해 동적으로 메모리 할당
- 힙, 데이터, 텍스트 영역 : 낮은 주소부터 할당 / 스택 : 높은 주소에서부터 할당
→ 높은 숫자의 주소부터 나열 : STACK-HEAP-DATA-TEXT
- 메모리 취약점
- int a,b,c,d : 가장 늦게 선언된 d가 가장 낮은 주소에 할당, a가 가장 높은 주소에 할당
- 4byte 할당된 변수에 4byte보다 큰 값을 입력 → 할당되지 않은 영역 사용 가능
= 다른 변수에 할당된 메모리 영역 침범 가능
📁 버퍼 오버플로우
- 버퍼오버플로우 정의
- 버퍼(buffer) : 데이터가 한곳에서 다른 곳으로 이동할 때, 그 데이터가 보관되는 임시 기억공간
- 오버(over) : ‘과하다. 지나치다.’ / 플로우(flow) : 넘치다.
→ 사용자가 입력한 데이터 크기가 너무 과하여 제한된 버퍼 용량에서 넘치는 것 - 기본개념 = 데이터 밀어쓰기 : 자기에게 할당된 영역뿐만 아니라 그 옆에 영역까지 쓰는 현상
- 프로그래머가 취약한 특정 함수 사용 / 메모리 취약 부분 발견시 공격 가능
- 정상적인 경우에는 사용되지 않아야 할 주소 공간 부분에 해커가 임의의 코드를 덮어 쓴다.
- 버퍼오버플로우 특징
- 정상적, 제한적 입력 환경에서는 버퍼 오버플로우 발생 X
- 사용자 입력 요구시 버퍼 오버플로우 발생 O (임의의 값을 입력 받는 경우)
- 메모리 중 주로 STACK과 HEAP이 공격 대상으로 활용된다.
- STACK 오버플로우
- RET 값을 변조하여 관리자 권한을 획득하는 방식
- Return(RET)값 : 함수 종료 뒤 수행을 위해 이동할 주소
- 공격자가 [입력 값 조작] → RET 변조해서 [관리자 권한 획득] → [프로그램 조작]
- HEAP 오버플로우
- 힙에서는 malloc, calloc으로 데이터 할당 → 공간이 늘었다 줄었다 과정 반복
→ 공격자는 이곳에 저장되는 데이터, 함수 변경 → 원하는 결과를 얻어내는 공격
- 힙에서는 malloc, calloc으로 데이터 할당 → 공간이 늘었다 줄었다 과정 반복
- 버퍼오버플로우의 이해
- gets : 키보드로부터 문자열을 입력받아 → 지정된 버퍼에 저장하는 함수 (C)
- 비정상적인 값을 입력하면, 비정상적인 결과가 발생한다.
- 사용자의 입력에 따라 결과 값이 달라진다.
- 기본 개념은 덮어쓰기다.
* 이 게시글은 K-MOOC 정보보호와 보안의 기초 (링크) 강의를 듣고 개인 학습용으로 정리한 내용입니다.
'학습 정리 > 🦴 CS Study' 카테고리의 다른 글
13. 랜섬웨어, Heart Bleed 공격, APT 공격 (0) | 2022.12.13 |
---|---|
12. 백도어, SQL 인젝션, 크로스 사이트 공격(XSS), DDoS (0) | 2022.12.13 |
10. DNS 캐시 포이즈닝, 파밍, 피싱 (0) | 2022.12.12 |
9. TCP 세션 하이재킹, ARP 스푸핑, IP 스푸핑 (0) | 2022.12.12 |
8. 네트워크 패킷, 스니핑·스누핑·스푸핑, wireshark (0) | 2022.12.12 |