본문 바로가기

System Security/Theory

Chapter 5. BOF(Buffer OverFlow) I

Chapter 5. BOF(Buffer OverFlow) I
1. Program Processing

 - Program Processing 과정
  · 논리적인 처리 과정

  ◦ HDD로부터 Program이 실행되면 해당 Program이 RAM에 Process로 Load된다.
  ◦ Load된 Memory(RAM)에 해당 Program의 일정 Memory(RAM)가 할당되며 Program 내에서 변수 존재 시 해당 변수의 크기만큼 Memory(RAM)에 영역이 할당된다.
  ◦ 변수가 Memory(RAM)에 할당될 때 변수의 종류에 따라 해당되는 Memory(RAM) 영역에 변수 영역이 할당된다.
  ◦ Memory(RAM)에 Load되어 있는 Process의 Programming 내용 순서대로 변수와 함수가 Register에 호출되며 처리가 진행된다.
  · 실제 처리 과정

  ◦ HDD로부터 Program이 실행되면 해당 Program이 Virtual Memory에 Process로 Load된다.
  ◦ 각각의 Virtual Memory의 용량은 4GB이며 각각의 Program은 RAM에 Load되기 전에 Virtual Memory에 Load되어 공간을 지정한 후 RAM으로 이동되어 RAM의 처음 영역부터 Process의 형태로 차곡차곡 할당된다.
  ◦ RAM에 Load된 Process는  Process의 Programming 내용 순서대로 변수와 함수가 Register에 호출되며 처리가 진행된다.
    ※ Virtual Memory를 사용하는 이유 : Program을 여러 개 실행 시 Program의 시작 Memory 주소가 다른 Program의 중간과 겹칠 수 있기 때문에 Virtual Memory를 거처 각 Process를 RAM에 일정 Memory 영역을 할당한다.

 

2. Reverse Engineering Base
 - CPU(Central Processing Unit)  
  · Computer의 가장 중요한 부분으로 Program의 명령을 해독하여 그에 따라 실행하는 장치
  · CPU의 구성
  ◦ ALU(Arithmetic and Logic Unit) : CPU의 산술/논리연산장치로 정수를 주로 처리한다.
  ◦ FPU(Floating Point Unit) : 부동 소수점 연산 장치로 실수를 주로 처리하며 실수를 부동 소수점 방식으로 연산하기 때문에 미세한 오차가 발생한다.
  ◦ CU(Control Unit) : 제어장치로 기억 장치에 축적되어 있는 명령을 해독하고 소요 신호를 내서 각 장치의 동작을 지시한다.
  ◦ Instruction Decoder : 명령어 해독기로 Memory에 저장된 내용을 읽어와 그 명령코드를 분석하는 장치이다.
  ◦ Register : CPU의 임시 기억 Memory로 일정 명령을 저장해 놓고 명령어 해독기가 수시로 읽을 수 있도록 저장해 놓는 장치이다.
  ◦ Bus :  Computer 내부의 회로에서, CPU와 RAM, 입출력 장치 간에 정보를 전송하는 데 공용으로 사용하는 전기적 통로이다.
  ◦ Cache : RAM에서 읽어 들인 명령이나 Program으로 채워지는 Buffer 형태의 고속 기억 장치이다.
 - Register
  · CPU 내의 임시 기억장치
  · 각 Register의 최대 기억 Memory 공간의 크기
  ◦ 32bit / 64bit
  ◦ CPU 종류 중 32bit, 64bit CPU를 결정하는 요소
  ◦ 32Bit 환경의 주소 경우의 수
   ▹ 1Bit Memory당 넣을 수 있는 값의 경우는 0, 1 두 가지로 32bit Memory의 경우의 수는 2³²(약 43억 가지)이다.
   ▹ 경우의 수(2³² : 약 43억 가지)가 인식할 수 있는 RAM의 크기이다.
   ▹ 즉, 32Bit CPU는 Memory를 4GB까지 인식할 수 있다.
  · Register의 종류
  ◦ 범용 Register, Segment Register, Pointer Register, Index Register, Flag Register, Control Register etc.
  ◦ 범용 Register
   ▹ 다양한 용도로 사용되는 Register
   ▹ 사용하고자하는 용도에 따라 얼마든지 다른 용도로 사용가능하다.
   ▹ 범용 Register의 종류
    ▸  EAX(Extended Accumulator Register)
     ▫  산술 연산 처리에 주로 사용되는 Register이다.
     ▫  32Bit로 구성되어 있다.
     ▫  I/O 장치의 입/출력과 부호 조작 명령은 EAX Register로만 처리가능하다
     ▫  곱셈(*), 나눗셈(/)의 Source Data는 EAX Register에 있어야만 처리가능하다.
     ▫  함수의 반환(Return) 값이 저장된다.
    ▸  EBX(Extended Base Register)
     ▫  시작 주소 값을 저장하는 Register이다.
     ▫  32Bit로 구성되어 있다.
    ▸  ECX(Extended Counter Register)
     ▫  반복 횟수를 지정하는 Register이다.
     ▫  반복 명령어 사용 시 반복 Counter로 사용된다.
     ▫  자동으로 Data가 감소하므로 인정 횟수만큼 반복시키는 반복문에서 사용한다.
    ▸  EDX(Extended Data Register)
     ▫  곱셈(*)과 나눗셈(/)에서 EAX와 조합하여 사용되는 Register이다.
     ▫  곱셈 : 연산결과가 EDX 또는 EAX에 입력된다.
     ▫  나눗셈 : 연산에 쓰이는 Source를 EDX 또는 EAX에 저장해 연산하며 연산결과에서 '몫'은 EAX에 '나머지'는 EDX에 저장된다.

   ▹ 명령어 Register의 종류
    ▸  EIP(Extended Instruction Pointer)
     ▫  다음에 실행할 명령의 주소가 저장되는 Register이다.

   ▹ Pointer Register의 종류
    ▸  EBP(Extended Base Pointer)
     ▫  Stack Frame의 시작점(기준점)을 가리키는 Register이다.
    ▸  ESP(Extended Stack Pointer)
     ▫  Stack Frame의 현재 위치를 가리키는 Register이다.

 

'System Security > Theory' 카테고리의 다른 글

Chapter 7. BOF(Buffer OverFlow) III  (0) 2015.08.18
Chapter 6. BOF(Buffer OverFlow) II  (0) 2015.08.18
Chapter 4. Malware II  (0) 2015.08.18
​Chapter 3. Malware I  (0) 2015.08.18
Chapter 2. System Security Setting  (0) 2015.08.18