IT/코딩

[보안] 해킹대회(CTF) 출전을 위한 시스템해킹(Pwnable) 입문

KimCookieYa 2023. 9. 8. 00:42

초고

인프런에 "해킹대회(CTF) 출전을 위한 시스템해킹(Pwnable) 입문"이라는 무료 강의 알림이 오길래 봤더니 1시간도 안되는 강의였다. 문득 호기심이 생겨서 강의를 듣고 해당 내용을 정리해보았다.

 

0. 시스템 해킹(Pwnable) 이해하기

해킹이란?

  • 해킹의 목표: 하면 안되는 거 하기
  • 하면 안되는 거 => 권한이 없는 행위
  • 의사 면허가 없는 사람의 의료 행위
  • 개발자가 의도하지 않은 프로그램의 동작: Buffer Overflow, Out Of Bound, Off By One, 기타 시스템 해킹 공격 기법

시스템 장악(Shell 실행)

  • "시스템을 장악했다." == "Shell을 실행했다."
  • 내 컴퓨터는 내가 시스템을 장악한 상태다.
  • 나의 통제 하에 있는 행위: 해킹 아님. 내가 시스템을 장악한 상태

시스템

  • PC 그 자체
  • OS를 기반으로 하드웨어를 통제할 수 있는 소프트웨어적 환경
  • Shell: 실행하고 싶은 프로그램(코드)을 실행시켜 주는 프로그램
  • 실행하고 싶은 코드를 실행할 수 있다는 것은 시스템을 장악했다는 것과 동일한 말이다.
  • => 쉘을 실행시킬 수 있다는 것은 시스템을 장악했다는 것과 동일한 말이다.

 

1. 해킹대회(Pwnable)의 문제상황 이해하기

원격(Remote)의 상황 이해하기

  • 남의 컴퓨터로 넘어가서 내 맘대로 계산기를 연다면? 명백한 해킹
  • 해킹하고자 하는 컴퓨터가 반드시 인터넷에 연결되어 있어야 한다.
  • => 공격 대상인 프로그램은 반드시 인터넷에 연결되어 있어야 한다.

 

2. 악의적인 실행흐름 만드는 법

  • 목표: 남의 컴퓨터에서 권한 없이 하고 싶은 거 하기
  • => 구체화: 프로그램의 취약점을 찾아 공격해 쉘을 실행하는 것이 Pwnable의 목표

컴퓨터 구조 이해하기

CPU

  • PC(Program Counter)에 쓰인 주소에 있는 프로그램 코드를 가져와서 실행함
  • 문제는 CPU는 PC에 쓰인 값을 무조건(검증없이) 실행함

악의적인 실행흐름 만들기

따라서 메모리에 악의적인 코드를 적고 PC에 적힌 값을 악의적인 코드가 적힌 메모리 주소로 바꾸기만 하면, CPU는 무조건(검증없이) PC에 적힌 주소로 가서 악의적인 코드를 읽고 실행할 것이다.

 

3. Pwnable 학습을 위한 실습환경설정(Configuration)

  1. gdb
  • 동적 debugger
  • 프로그램이 실행되며 레지스터, 메모리에 어떤 값들이 담기는지 보여준다.
  • 프로그램이 어떻게 실행되는지 알아야 취약점을 찾고 익스플로잇을 할 수 있다.
  1. pwntools
  • 익스플로잇 코드 작성을 위한 파이썬 라이브러리
  • 리틀/빅 엔디안을 고려한 데이터 전송, 원격 서비스로의 전송 등을 지원한다.

 

4. 취약점 이론과 공격기법 실습 - HelloFlag

5. 취약점 이론과 공격기법 실습 - BasicBOF