그래서 우리가 포너블을 하는 이유
두비니
·2021. 3. 7. 17:08
물론 저도 부족한 지식이지만 동아리 활동을 통해 포너블에 대해 후배들을 가르치면서, 가장 많이 설명한 부분이 "포너블이 무엇이고, 왜 하는가"에 대한 부분입니다. 저는 처음 공부할 당시에 정말 맨땅에 헤딩 식으로 공부를 했기 때문에, 정확하게 내가 왜 이걸 하고 있으며 결론적으로 이루고 싶은 바가 무엇인지도 모르고 그냥 풀었습니다.
저는 어떤 일이든 내가 어떤 일을 하고있으며, 이 일의 목적은 무엇인지 파악하는 것이 매우 중요하다고 생각하는 반면에 구글을 찾아보면 무작정 워게임들을 추천하는 글밖에 없는 것 같아서 이 글을 작성합니다. (혹시나 잘못 작성된 부분이 있다면 댓글 부탁드립니다. 감사합니다!)
0. 포너블이란
사실 이내용은 조금만 찾아봐도 널려있는 내용이라 간단하게 하고 넘어가겠습니다. 우선 왜 이름이 굳이 pwnable이냐,
Pwnable은 원래 권한을 자기것으로 만든다는 의미에서 ownable이 원래 정식 명칭입니다. 그러나 대회 당시 오타로 pwnable이라고 입력을 했고, 그게 그대로 pwnable이라는 이름을 가지게 되었습니다.
이름은 그렇고, 결론적으로 포너블을 통해서 하는 일은 관리자 권한을 탈취하는 것입니다. 단순한 방문자가 관리자 권한을 탈취한다면, 관리자의 권한으로 노출되어서는 안되는 중요한 정보에 접근할 수 있겠죠? 그래서 접근하기 위해서 이런 공격기법들을 배우는 것입니다. 그 관리자 권한을 얻기 위해 보통 사용하는 것이 앞으로 지겹게 듣게 될 system("/bin/sh")이나 execve("/bin/sh")같은 함수들이고, 그것을 바이트코드로 옮긴 것이 쉘코드입니다.
이정도면 대충 목적의식은 생긴 것 같으니 넘어가도록 합시다.
1. 전체적인 과정
이제는 어떻게 하면 포너블 문제를 풀 수 있는지 봅시다.
일단 포너블 문제들의 기본은 관리자의 권한을 탈취하는 것입니다. 그런 뒤 정상적으로는 접근할 수 없는 곳들을 접근한다는 것이 기본적인 해킹의 개념이고요.
이 과정을 크게 4가지로 나누면 다음과 같습니다.
1. 프로그램상의 취약점을 발견합니다.
2. 취약점을 기반으로 공격 시나리오를 작성합니다.
3. 공격 시나리오를 기반으로 하여 필요한 정보를 수집하고, 공격합니다.
(그 과정에는 메모리 구조 분석 등이 필수적이겠죠.)
4. 공격을 성공시키고, 권한을 탈취하거나 원하는 정보를 알아냅니다!
각 단계에서 빨간색으로 표시한 부분들이 문제를 풀기 전 기본적으로 학습하고, 알고 있어야 하는 부분이고, 이는 wargame이나 실습을 통해서 학습하시면 됩니다.
문제가 풀리지 않는다면 저 네가지 중에 어딘가가 부족하다는 뜻이겠죠?
2. 포너블을 하기 위한 기본적인 소양
포너블을 하기 위해서 가져야 할 기초적인 지식들입니다.
- 운영체제(특히 Linux)
- 컴퓨터/메모리 구조
- 네트워크 기초
- 기본적인 프로그래밍 언어에 대한 이해
- 자신이 구상한 바를 구현시킬 수 있는 프로그래밍 실력
- 구글링 실력(⭐⭐⭐⭐⭐)
- 포기하지 않을 끈기(⭐⭐⭐⭐⭐)
- 뭐라도 하기(⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐)
볼드체로 되어있는 부분은 모르면 정말 힘든 지식들이고, 별표로 되어있는 부분은 그냥 필수입니다. 저 능력이 없거나 어떻게든 저 능력들을 기르겠다는 마음가짐이 없으면 안하는게 낫습니다. 근데 마지막 두가지는 다른 분야들도 다 필요한 부분이라고 생각해서ㅎ.. 열심히 합시다
그래도 저 소양들을 보면서 '나는 저기중에서 두가지정도는 전혀 모르는데?? 어떡하지ㅠㅠㅠㅠ???? 다른 길을 찾아봐야하나?!?!!!!???' 라고 생각할 필요는 없습니다. 만약 부족한 부분이 있다면, 공부를 하면서 추가적으로 채워나가면 되는 부분이니 미리 포기는 하지 마시길 바랍니다. 화이팅!
그럼 이 소양들을 쌓기 위해서는 어떻게 해야하나요? 라고 물어보신다면, 이건 구글링을 통해서 찾으면 됩니다.(귀찮아서 아님ㅎㅅㅎ) 전체적인 워게임 추천글은 구글에 널렸으니까요. '아니, 뭐가 너무 많은데 뭐부터 해야하나요?'라고 물어보신다면, 뭐라도 하세요. 너무 어려우면 하다못해 다른 사람이 올려놓은 write-up을 분석하고, 똑같이 작성해서라도 푸세요. 아무것도 안한사람보다는 그렇게라도 하면서 포기하지 않는 것이 낫습니다.(물론 write-up에 너무 의존하면 안되겠죠..)
쓰다보니깐 너무 잔소리글이 된거같은데... 죄송합니다ㅎㅅㅎ 아무튼 모두 포기하지 않고 행복한 포너블합시다잉
'SYSTEM HACKING > PWNABLE&REVERSING' 카테고리의 다른 글
[Python] Built-in 객체 사용하기, 응용하기 (Python RCE) (0) | 2021.05.14 |
---|---|
[STACK] mprotect ROP (0) | 2021.03.17 |
[Stack] Stack Frame 공부하기 - 2 (0) | 2021.03.02 |
[Stack] Stack Frame 공부하기 - 1 (0) | 2021.03.01 |
함수의 got 구하기 (0) | 2020.10.09 |