시스템 기초

[시스템 기초] pwnable과 reversing

유금솔 2023. 7. 24. 13:26

pwnable

시스템 권한을 자기 것으로 만든다는 의미에서 원래 정식 명칭은 "ownable"이다. 그러나 대회 당시 오타로 "pwnable" 이라고 입력을 했고 그 이름 그대로 "pwnable"을 가지게 되었다. 쉽게 말해 시스템 해킹을 다른 말로 pwnable이라고 한다.

 

- pwnable 과정

1. 프로그램 상의 취약점 분석

exe, dll, elf 등 실행 파일의 취약점을 분석한다.

2. 공격 시나리오 작성

Exploit 코드를 작성하기 위한 시나리오를 세운다.

3. 필요한 정보 수집, 공격

Exploit 코드를 작성하기 위한 정보를 수집하고 공격한다.

4. 권한 획득

권한 획득 후 목적에 맞는 행위를 한다.

 

- pwnable 목적

  • 시스템 보안에 대해 이해할 수 있다.
  • 새로운 보안 취약점 발견할 수 있다.
  • CTF 문제 비중이 높다.

reversing

보통은 "역공학"이라고 하며 어느 특징 물건, 장치 등이 있으면 그것에 대한 구조, 기능, 동작 등을 역으로 따라가 분석하고 그 원리를 이해하여 부족한 부분을 보완하며 새로운 기능 등을 추가하는 작업이다. 

 

- reversing 과정

컴파일을 통한 프로그램 제작과정

                    소스코드        ----->         어셈블리어        ----->         바이너리 코드

 

컴파일을 통해 소스코드가 바이너리 코드가 되며 이 바이너리 코드가 실행되며, 제작한 코드가 실행되는 원리이다. 여기서 바이너리 코드를 통해 기존의 소스코드를 복원을 할 수가 없다. 그래서 바이너리 코드를 어셈블리어로 번역하여 기존의 소스 코드를 분석하여야 한다.

리버싱을 통해 프로그램 분석

                    소스코드                          어셈블리어        <-----          바이너리 코드

 

이 과정을 바로 리버싱(reversing), 역공학이라고 부른다.

- reversing 방법

  • 정적 분석 - 파일을 실행하지 않고 파일의 종류(exe, dll, doc, zip 등), 크기, 헤더정보, 실행 압축 여부, 등록 정보, 디지털 인증서 등의 내용을 확인한다. 또한 디스어셈블러를 이용해서 내부코드와 그 구조를 확인한다.
  • 동적 분석 - 파일을 직접 실행시켜서 그 행위를 분석하고, 디버깅을 통하여 코드의 흐름과 메모리의 상태 등을 자세히 살펴보는 방법이다. 레지스트리, 네트워크 등을 관찰하면서 프로그램의 행위를 분석하고 디버거를 이용하여 프로그램 내부 구조와 동작 원리를 분석하기도 한다.

- reversing 목적

  • 개발/테스트 단계에서 미쳐 발견하지 못한 버그나 취약점 파악이 가능하다.
  • 파일이나 메모리를 직접 수정(패치)하여 문제를 해결할 수 있다.
  • 새로운 기능을 추가시켜 프로그램의 기능을 향상시킬 수 있다.
  • 다양한 분야에서 활용한다.