[정보 보안] 리버싱

[Reversing] 기초 이론_CPU와 레지스터

ITsubin 2022. 8. 10. 16:47

Reverse Engineering?

> 리버스 엔지니어링, 즉 리버싱은 "역공학", "역분석"을 말합니다.

>  프로그램을 역으로 분석하여 원래의 소스코드를 얻는 과정입니다.


개발적인 관점에서의 리버싱?

> 개발 시 필요한 지식 습득을 위해 소프트웨어 분석


보안적인 관점에서의 리버싱?

> 프로그램의 취약점 파악 후 악성코드 제작

> 백신업체에서 악성코드 분석 후 백신 제작

> 소프트웨어의 암호화 알고리즘 분석


CPU의 구조

> CPU는 Central Processing Unit의 약자로, 중앙 처리 장치를 말합니다.

> 메모리를 읽고 쓰거나, 명령어 해석 연산을 통해 다른 H/W를 제어합니다.

 

CPU를 세분화해서 나누면 ALU  /  Control Unit  /  Register  /  Bus Interface 총 4가지로 분류됩니다.

 

ALU

> ALU는 Arithmetic Logic Unit으로, 산술 논리 장치를 말합니다.

> CPU의 연산(산술 연산, 논리 연산)을 담당합니다.

 

Register (**중요**)

> CPU 내부의 저장장치로, ALU에서 연산된 데이터를 저장하는 공간입니다.

> 용량은 적지만 데이터와의 접근 거리가 가까워 속도가 빠릅니다.

> 리버싱에서 가장 중요한 개념입니다.

 

Bus Interface

> H/W간 데이터를 전송하고 입력하는 통신 경로를 말합니다.

> 장치 간 통신하는 방법이 달라서 각각의 버스 인터페이스들이 존재합니다.

> 버스의 종류는 세 가지로, [ Address, Data, Control ] 버스가 존재합니다. 이를 "Bus System"이라고 합니다.

    >>  Address Bus : 메모리 주소 값 전송을 통제합니다.

    >>  Data Bus : 메모리 주소 안의 데이터를 통제합니다.

    >>  Control Bus : CPU와 Memory 간의 데이터 송수신을 통제합니다.


Clock Pulse

> CPU가 일하는 타이밍을 조절합니다.

> CPU가 H/W보다 성능이 좋으면 장치 부하가 걸리고,

    H/W가 CPU보다 성능이 좋으면 쓰레기 데이터를 가져갈 수 있습니다.

> CPU와 구성 요소의 박자를 맞춰 효율적인 일을 하도록 도와줍니다.


메모리 계층 구조 (Memory hiearchy)

> H/W, RAM, Cash, Register

> 메모리를 필요에 따라 여러 종류로 나눈 것입니다.


메모리 접근

> CPU - Register - Cash - RAM - HDD

1) 메모리는 CPU와 가까울수록 속도가 빠르고 멀수록 느립니다.

2) 메모리는 CPU와 가까울수록 공간이 작고 멀수록 용량이 커집니다.


가상 메모리 (SWAP)

> RAM의 부족함을 HDD로 확장하는 개념입니다.

> RAM처럼 사용하는 HDD의 영역으로, RAM 크기에 상관 없이 메모리 공간을 할당합니다.

 

실제 RAM이 2GB라면, 가상 메모리는 아래와 같이 할당됩니다.

1) HDD에 저장된 파일 실행 (32Bit)

2) RAM에서 데이터가 Process로 변환

3) Process는 4GB의 메모리를 할당(보통 2배, 가상 메모리)

 

이를 MMU(Memory Management Unit)이라고 합니다.

CPU는 MMU를 통해 메모리 공간을 할당받습니다.

 

메모리 할당 시 1개의 블록은 4Byte로,

만약 15Byte를 요청하면 4개의 블록을 할당합니다.

블록 크기를 정해놓고 할당하면 공간 낭비가 적고 연산이 줄어 속도가 빨라집니다.

 

블록의 명칭

> 물리 메모리에서의 블록 : Page Frame

> 가상 메모리에서의 블록 : Page


CPU, 가상 메모리, 물리 메모리 흐름

1) CPU가 0x41000번지에 저장을 명령

2) MMU가 0x41000번지에 해당하는 페이지 프레임(블록)을 물리 메모리에 할당

     (순간 물리 메모리를 초과하는 연산이 들어오면 컴퓨터가 뻗을 수 있지만,

      HDD로 가상 메모리를 만들어준다면 단기적으로는 대처가 가능합니다.)

3) 2GB의 물리 메모리가 다 차게 되면 가장 오래된 페이지를 가상 메모리에 저장 후 새로운 페이지를 물리 메모리에 적재

4) 이후 저장된 가상 메모리에 물리 메모리의 내용을 붙여 완성

 

가상 메모리SWAP, 가상 메모리 작업Paging이라고 부릅니다.


 

보안과 관리 측면에서 가상 메모리를 사용하는 이유

> 보안적 측면)

   물리 메모리에 도착 전, 가상 메모리 안에서 연산 처리 후 OS에서 검사를 합니다.

   다른 물리 메모리에 접근을 할 수 없기 때문에 다른 프로세스에 영향을 줄 수 없습니다.

 

> 관리적 측면)

   프로세스간 영역을 간섭하게 되면 오류가 발생할 수 있습니다.

   프로세스 간 영역이 겹치지 않게 하기 위해서 사용합니다.


가상 메모리 관리 기법 (Segmentation, Paging)

> [ Paging ]

   가상 메모리를 모두 같은 크기 블록으로 나누어 순차적으로 할당

> [ Segmentation ]

   메모리를 각각의 용도에 따라 분리하여 각 용도에서 Offset을 이용하여 Memory에 접근


Selector? : Segment Register

> 세그먼트 정의에 대한 위치 정보를 가지고 있습니다.

    (이 위치 정보를 GDT(Global Descriptor Table)이라고 합니다.)

> 해당 세그먼트 레지스터의 위치 정보, 사용 권한, Flag 등의 시스템 정보가 저장됩니다.