OutDoorFrog의 리버싱 이야기

앞으로의 CTF 대비 및 환경 구성, 공부 방향 및 계획 본문

취미/나를 되돌아 보는 시간

앞으로의 CTF 대비 및 환경 구성, 공부 방향 및 계획

OutDoorFrog 2018. 9. 10. 09:43

안녕하세요! 블로그의 주인장 "OutDoorFrog"입니다!



오늘은 앞으로의 CTF 참가를 위해서 문제 풀이 환경을 구성해봅시다!

공부할 방향을 결정하고 과거를 정리해봅시다!



1. 준비해야하는 환경



  1. Windows 10 64bit  (Host Computer) 

  2. Ubuntu Linux 64bit (Guest Computer)


혹시 모르니 Windows 7 32bit도 준비해줍시다.


2. 리버싱에 사용할 디버거



  1. OllyDbg, ImmunityDbg, X64Dbg, x32Dbg, IDA Pro

  2. gdb, IDA Pro(Remote Server)




Windows에서는 환경이 익숙해서 사용할 수 있는 Dbg, 도구가 많은데

Linux에서는 숙련도가 조금 떨어지네요. (노오력합시다)



3. IDA


IDA 같은 경우 리버싱을 하는 사람의 친구(필수)인 도구입니다.


음 breakpoint 설정이나 디버깅이 안되는데 IDA 7.0 쓰시는 분들


혹시 자주 사용하시는 플러그인 있나요? 조언 좀 해주세요.(ㅎㅎ)



4. 부 분야


CTF를 잘하는 사람들을 보니 올라운더 혹은 분야를 하나 더 정해서

두 가지 이상의 분야를 공부를 하더군요.


  1. Web

  2. Reversing

  3. Pwnable

  4. MISC

  5. Forensic


악성코드 분석을 하고 싶어서 주 분야를 쉽게 정할 수 있었습니다만
부 분야는 악성코드 분석이기 때문에 더 고르기가 어렵군요.

마음 속에 담아둔 분야는 두 가지 입니다.

Forensic, Pwnable 입니다.



포너블을 부분야로 결정하면 약했던 메모리 구조, 취약점에 관련된 지식을 접할 수 있는 기회가 주어지고 리버싱과 응용되어 
소프트웨어 취약점분석까지 할 수 있을 정도로 성장할 가능성이 있습니다.




포렌식을 부분야로 결정한다면 파일 구조, 암호학, 흔적에 대한 추적에
대한 지식을 좀 더 접할 수 있고 악성코드 분석에 좀 더 힘을 실어줄 겁니다.


5. 향후 공부할 방향



놓쳤던 부분들을 좀 더 공부해볼 예정입니다.(자료구조,윈시프,C++,WDK)


  • C++에서 클래스나 가상함수는 어떻게 어셈블리어로 변환이될까..
  • 세마포어나 뮤텍스 같은 개념은 어떻게 되어있고 구현을 어떻게 할까?
  • 프린트, 키보드 ,다른 하드웨어의 드라이버는 어떻게 만들까?
  • 리눅스 디버거(gdb)는 어떻게 다루고 AT & T 문법은 어떻게 읽을까?
  • 또다른 어셈블리어는 어떤 식으로 구성이 되어 있고 어떤 종류가 있을까?
  • 행위 분석은 쿠쿠 샌드박스 이외에 어떤 툴을 사용하고 어떤 식으로 진행할까?



6. 여기까지 온 과정




모든 것은 초등학교 때의 악성코드의 감염에서 시작됬습니다.


악성코드를 구현하기 위해 Java를 공부해서 운영체제에 간섭할 수 있는 매개체를 찾았습니다.


파일을 만들거나 지우고, 메모리를 확보하고, 서버와 통신하고, 프로그램에 간섭하고 이런 행위를

할 수 있는 매개체를 찾기 시작했고 




고1 때 어떤 선배님 덕분에 Windows API를 찾을 수 있었습니다.


Windows API에 속한 프레임워크 MFC, Windows System Programming를 익혔습니다.


콘솔 프로그램을 만드는 것에서 벗어나서 UI를 디자인하고 제작하고 평범한 사람들이 




그 이후로 처음으로 Reversing을 배웠습니다.


tuts4you 에서 리버싱 문제 몇 개만 푼 후 바로 악성코드 분석에 돌입했습니다.


If, for, while 같은 기초적인 구문들이 어떻게 어셈으로 변환되는지도 모르는 채로 말입니다.


사용되는 API의 순서, 목록만 보고 어떤 기능이 사용되었는지 유추하고 바로 제작에 옮겼습니다.


레지스트리, DLL Injection, Code Injection, 통신을 위한 API를 이용해 기능을 구현한 후


고2 때 어떤 행사, 프로젝트, 대회에 참여할지 모르는 나를 위해 불완전한 분석을 끝 마치고

Windows 에 대해서 더 공부했습니다.




고등학교 2학년, 커널 모드에 접근하기 위한 매개체를 찾았지만 찾지 못했습니다.




대신 저에게 여러 지식을 가르쳐주신 은사님께서 BOB, 사이버가디언즈에 대해 알려주셨습니다.


은사님 덕분에 악성코드 분석을 원하는 사람이 BOB 보안 제품 솔루션 개발 1차까지 합격했지만


면접에서 참교육 당한 후에 떨어졌습니다! (각성 계기)





BOB 탈락 이후, 사이버 가디언즈에 참여해서 리그를 나가봤는데 문제를 풀 수가 없었습니다.


머리로는 방법이 구상되는데, 기술이 따라주지 않는 상황...


기초와 기본이 부족해서 응용조차 흔들리는 겁니다.





사이버 가디언즈 이후로 약점을 보충하기 위해 노력했습니다.


WDK를 발견하여 커널 모드에 접근해서 SSDT 후킹과 IDT 후킹을 실습해보고


CodeEngn Basic RCE 문제 20개를 1일 반에 다 풀고

advanced 4개와 Reversing.Kr 문제 3개까지 합해서 3일만에 풀었습니다.



그렇게 흐트러진 기초와 기본을 조금 정돈하고





대망의 해킹 캠프에 참가하게 됩니다.


가장 큰 변화를 했다고 볼 수 있습니다.


스탭님의 상담 덕분에 약점을 진정으로 마주보게 되었고


CTF 문제도 푸는 속도 빨라지며


팀에 대한 존재도 알게 되었습니다.


계속 CTF 에 참여하고 있고


스승님처럼 가르쳐주시는 사람도 생겨서 기분이 좋습니다.^^


사설이 길어졌군요. 결론은





Demon 팀 지원 준비까지 하면 완벽하겠군요.

Comments