맨땅에 코딩

취약점 분석 - 컴퓨터 구조 II 본문

화이트햇 스쿨 2기/이론교육

취약점 분석 - 컴퓨터 구조 II

나는 푸딩 2025. 2. 13. 19:40

*화이트햇 스쿨 2기에서 이수한 이론교육 내용을 바탕으로 작성되었습니다.

 

1. 컴퓨터의 기본 구조

 

컴퓨터 언어

- 단위와 용어

 

1. Human language(C)


2. Assembly


3. byte


4. bit (Binary)

 

 

- 컴퓨터가 이해할 수 있는 언어 체계가 있음

- 번역기가 필요함

- 외국어 배우듯이 배우면 됨

 

어셈블리 언어 기초

- 사람이 해석할 수 있는 가장 낮은 수준의 컴퓨터 언어

- 내 프로그램을 컴퓨터가 처리하는 수준으로 해석

- 번역이 필요함

 

API

- 컴퓨터나 컴퓨터 프로그램 사이의 연결

 

- 내가 구현하지 않아도 기능을 사용할 수 있음

- 대신 서로 잘 알려줘야 함

 

컴파일과 링킹

- 소스코드를 기계어로 만듦

- 기계어들을 잘 연결함

- 외부 코드도 잘 연결함

 

2. 컴퓨터 메모리 구조

 

포인터

- 메모리 공간마다 주소가 있음

- 메모리 공간에 값이 들어감

- 메모리 공간 주소를 담고 있는 것이 포인터

 

스택

- 지역 변수를 사용할 때 메모리는 스택 구조를 사용함

- 스택은 First In, Last Out 구조임

- push와 pop을 이용해서 스택에서 넣고 뺌

 

스택 프레임

- 변수를 할당하고 함수로 넘길 때 스택을 사용함

- 변수를 관리하기 위해 스택 프레임을 사용함

- 스택에 함수를 호출한 뒤 돌아올 주소도 저장함

 

함수 호출 규약

- cdecl
  - 함수 밖에서 스택을 정리
  - 사용자 함수
- stdcall
  - 함수 안에서 스택을 정리하고 리턴
  - Win32 API
- fastcall
  - 함수 안에서 스택을 정리
  - 스택이 아닌 레지스터로 파라미터 전달
  - 64bit 시스템

 

- 함수를 호출할 때 약속이 있음

- 데이터를 전달하고 메모리 공간을 만들 때 어떻게 할지에 대한 약속임

- 주로 데이터 흐름에서 취약점이 발생하기 때문에 잘 알아두면 좋음

 

가상 메모리

- 프로그램 마다 가상 메모리가 있음

- 사용자가 고민하지 않아도 되어서 편리함

- 메모리를 할당하는 규칙이 있음

 

시스템 해킹 기초

- 소프트웨어 보안 취약점
  - Stack Based Buffer Overflow
  - Heap Based Buffer Overflow
  - Integer Overflow
  - Format String Bug
  - User After Free
  - Double Free
  - Race Condition

 

- 버그를 이용해서 시스템 해킹을 함

- 경계를 넘어 넘치게 되어 오버플로우가 발생함

- 프로그램 흐름을 바꿀 수 있음