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 |