Basic of Computer Skills

포너블(Pwnable) 개요 본문

보안/Pwnable

포너블(Pwnable) 개요

cdecl 2018. 7. 30. 13:28

시스템 해킹을 다른 말로 포너블(pwnable)이라 한다.


명칭의 유래는 한 유저가 게임에서 승리했는데, 이때 own! 이라고 입력할 것을 pwn! 라고 입력했고 


이 말이 유행을 타서 굳어졌다고 한다.



시스템 해킹은 말 그대로 어떤 시스템을 해킹하여 정보를 획득하는 것을 목적으로 한다.


그리고 이런 목적을 달성하려면 해당 시스템의 관리자 권한을 탈취하는 과정이 필요하다.


즉 포너블은 시스템의 일반 유저의 자격으로, 여러 가지 공격 기법을 활용해 관리자 자격을 뺏는 절차라고 할 수 있겠다.



그리고 이는 문제풀이를 포함하여 여러 가지 여건을 살펴보니 리눅스 환경에서 많이 진행이 된다는 걸 알 수 있다.


그래서 해당 스킬을 공부하기 위해, 예전에 해커스쿨에서 구축해놓은 LOB(Lord of BufferOverflow) 라는 문제집을 선택했다.


포너블을 공부하는 사람이라면 LOB는 반드시 들어봤을 거라 생각한다.


그리고 LOB의 문제를 풀기 위해서는 다음과 같은 배경지식이 필요하다고 본다.



1.    C 언어 해석능력

2.    프로그램 메모리 구조

3.    약간의 리눅스 지식

4.    약간의 리버싱 지식

5.    쉘 코드(Shell Code)        -> 이건 굳이 제작법까지 알 필요는 없다고 생각한다. 잘하시는 분들이 다 인터넷에 올려놓으셨다.



일단 문제가 C 언어라서, 코드를 보고 취약점이 있는 함수가 어디있는지 찾아내야한다. 그래서 C를 할 줄 알아야한다.


프로그램 메모리 구조는 포너블에 있어서 필수적인 부분이다. (스택, 힙, SFP, 및 RET) 등.. 이를 모르면 문제를 풀 수 없다.


그리고 리눅스의 CLI 환경에서 진행되므로, 기본적인 리눅스 명령어는 몇 개 알아야한다. (vi, gcc, gdb, ls, cat, 등등)


약간의 리버싱 지식은 문제의 프로그램을 디스어셈블(disassemble)하여 스택 크기가 얼마인지, 어디 부분에 중단점을 걸고 실행할지 등등 어셈블리 언어를 조금이나마 볼 줄 아는 능력을 의미한다.


그리고 쉘 코드는


"\x31\xc0\x50\x68\x2f\2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"  


이런 식으로 구성되어 있는 16진수 코드이다. 이는 시스템을 공격하여 쉘을 획득할 때 사용된다. 


꼭 쉘 코드를 사용해야만 문제를 풀 수 있는 것은 아니지만, 포너블을 공부하는 사람이라면 적어도 이것이 뭔지는 알아야한다고 생각한다.




겁부터 먹지말고 이제부터 차근차근 공부하자. 







'보안 > Pwnable' 카테고리의 다른 글

스택 프레임 훑어보기 -2 (gdb 사용)  (1) 2018.08.02
스택 프레임 훑어보기 - 1 (gdb 사용)  (0) 2018.08.01
스택 프레임(Stack Frame) 개요  (0) 2018.07.31
LOB 맛보기 (1번 예시)  (0) 2018.07.30
LOB 준비  (0) 2018.07.30
Comments