Goorm DeepDive 수료 후기

goldenGlow_21·2025년 3월 19일

회고록

목록 보기
1/1

들어가며

그간 42서울이나 해커톤, Econet 프로젝트 등 여러 활동을 하면서 느낀 바가 참 많았다. 때문에 평소 사용하는 Obsidian에 틈틈이 기록했던 내용들을 업로드 하는 식으로 기록을 남겨왔다. 그럼에도 과정 전체가 마무리된 후 회고를 제대로 작성한 적은 별로 없었던 것 같다.

그리고 때마침, 어제(2025.03.18) 휴학까지 감수하고 참여한 구름톤 딥다이브 정보보호 전문가 양성과정 9회차가 마무리되었다. 작년 8월부터였으니, 근 8개월 동안 함께한 동료들과 배운 것들, 느낀 점들은 정말... 따로 남겨놓지 않으면 후회할 거라는 강한 확신이 들었다.

물론 전부 시간순으로 정리하기엔 포스트 1개로는 한참 부족할 테니, 기억에 남는 것들을 찬찬히 정리해보려 한다. 가볍게 작성할 요량이니, 읽어주시는 분들(이 있다면)은 그냥 재미로만 봐주시면 좋겠습니다~


왜 했는가

모두가 진로를 정하기 시작한다는 대학교 3학년 1학기, 학과 세미나에서 버그 바운티 활동을 하시는 멘토님의 강연을 듣게 되었다. 당시 보안 쪽 지망이 많지 않았던 점을 고려해주셨는지, 포너블/리버싱/웹 등 정보보안의 가장 기초이자 입문에 가까운 내용들 부터 실무가 어떤 느낌으로 돌아가는지 등, 정말 많은 내용을 풀어주셨던 기억이 난다.

당시 시험이 끝났었는지, 알 수 없는 고양감에 휩싸여 있던 나는 그 자리에서 진로를 정보보안으로 정해버렸다. 어차피 뭘 골라도 고되고 힘들 텐데, 좋아하는 거 하면서 힘들고 싶다(?)는 생각을 했기 때문이다. 다행스럽게도, 이 생각은 아직까지도 변하지 않았다.

그렇게 여름방학을 맞이한 나는 ctf 조금, 드림핵 로드맵 조금을 섞어 가며 지식을 쌓기 위해 노력했다. 하지만... 그렇게 공부를 하면 할 수록 "제대로 배우고 싶다"는 생각은 강해져만 갔다. 그러다 인터넷에서 광고로 뜬 구름톤 딥다이브 모집 공고를 보았고, 정말 별 고민 없이 신청해 버렸다. 지금 와서 보니, 이 과정이 약간은 "졸업생 대상" 느낌이 없지 않지만 그래도 잘한 선택이었다고 생각한다.

뭐 했나요?

당장에 기억나는 걸 꼽으라면 다음과 같다.

  • CTF 스터디(조별 자율 스터디)
  • 교육 세션
  • 3번의 세미 프로젝트
  • 파이널 프로젝트

물론 저 중에 핵심은 파이널 프로젝트겠지만, 하나하나가 정말 소중한 경험들이었다. 그러니 천천히 풀어보자.

OT

OT는 이야기를 하지 않을 수 없지...

당시 OT는 판교에 있는 구름스퀘어? 에서 진행했던 걸로 기억한다. 집과 학교, 헬스장만 다녀본 내가 나서기엔 너무 먼 길이었지만, 막상 엄청난 빌딩을 보고 나니 감탄만 했던 것 같다.

어떻게 길을 잘 찾아 OT가 진행되는 방으로 들어가니 왠지 모르게 2~3명 정도의 교육생 분들이 모여 노트북으로 무언갈 보고 있었다. 왠지 나도 그래야 할 것 같아 가져온 노트북으로 (그 당시 기준) 얼마 전에 마무리한 프로젝트의 백엔드 코드를 좀 만지작 거리다 보니... 주변 자리가 차기 시작했다.

그리고 그 분들이 바로... 파이널 프로젝트까지 함께한 역전의 용사들 되시겠다.

이후의 OT는 뭐... 자기소개와 포부? 지원동기? 같은 것들을 작성하고 발표하고... 구름 측에서 제공하는 혜택과 장학 제도 같은 것들을 소개받았다. 아 그리고 마시멜로우랑 스파게티 면으로 탑 쌓는 즉석 조별과제를 진행했는데... 이건 아직도 왜 했는지 모르겠다.

점심은 구름 측에서 미리 계산해둔 식당으로 가서 제육볶음을 먹었는데, 이때부터 슬슬 초반 친해지기를 마친 교육생 분들은 멤버 모으기를 시작하셨다. 관심 있는 분야나 스터디 희망 주제 등에 대해 이야기를 나누셨는데, 난 OT가 끝날 때쯤 관심 주제가 비슷한 교육생 한 분을 만나 스터디 계획을 조금 공유했다.

CTF 스터디

참고로 딥다이브 과정에서는 의무사항으로, 조를 만들어 관심 있는 주제로 스터디를 진행해야 한다. 1차와 2차로 나누어 진행하나, 우리 조의 경우에는 딱히 달라진 게 없어서 그대로 이어간 기억이 난다. 아무튼 그렇게 OT에서 만난 교육생 분과 CTF에 참여해보고 싶다는 공통점을 찾아 함께 스터디를 꾸리게 되었다.

당시 CTF 스터디는 주에 1번, 2명씩 격주로 풀어온 워게임 문제와 그 풀이를 발표하며 경험을 나누는 형태로 이루어졌다. 신기하게도 4명의 멤버들의 관심 분야가 웹/리버싱/포너블/포렌식 느낌으로 자연스럽게 나뉘어져, 다양한 분야에 대한 인사이트를 종합적으로 키울 수 있었다.

그렇게 문제 풀이가 어느 정도 익숙해질 즈음, CTF에 참가해보자는 의견이 나왔고... 드림핵 플랫폼에서 정기적으로 진행하는 CTF 대회에서 참여하게 되었다. 수료까지 8개월, 그동안 대략 6개 정도의 CTF에 참가했으며 그 중 절반 정도는 한 문제도 못 풀었다. 그래도 덕분에 처음으로 CTF라는 필드에 참가도 해보고, 실전에서 문제를 풀어냈다는 성취감까지 느낄 수 있었다.

내 옵시디언은 모든 것을 기록한다...

교육 세션

이 부분은 딱히 할 말은 없다. 프로젝트 주간으로 들어가기 전, 팀 스터디와 병행하며 10월의 끝까지 강의를 듣는 기간이었는데, 정말 별 거 없이 하루 하루 배정된 강의를 소화해내면 되는 기간이었다.

다만 아직까지 기억나는 건, SecurityOnion을 사용하는 실습이 포함된 강의인데, 저거 하나 설치하겠다고 3일을 썼던 기억이 난다. 정말 뭔 놈의 에러가 그리도 많은지...

세미 프로젝트

교육 세션이 끝난 후, 파이널 프로젝트로 들어가기 전 구름 측에서 제시해둔 주제와 평가 기준에 맞추어 진행하는 3개의 프로젝트이다. 처음에는 자유 주제로 3개 진행하면 어땠을까 하는 생각도 해봤지만, 막상 다 끝내고 나니 분야별로 최소 한번씩은 맛을 보길 바라는 구름 멘토님들의 바람이 느껴졌다.

참고로 자세한 수행 과정이나 내가 남긴 일지가 궁금하다면... 이 벨로그에 다른 시리즈로 정리해놨으니 찾아보면 될 것이다.

샌드박스 구축을 통한 악성코드 자동 탐지 및 분석 시스템 개발

https://github.com/InGyu/deepdive_semi_project_01

안드로이드 / MobSF / Frida

이 3가지가 아직까지도 생생하다. 주제를 설명해보자면... Frida 스크립트를 사용하여 정적/동적분석 과정을 자동화하고, 제공된 악성코드 파일을 분석한 결과를 도출하는 일원화 스크립트를 만드는 개발 과제이다.

위에서 안드로이드를 써놨기에 눈치를 챈 사람도 있겠지만, 에뮬레이터를 사용해야 한다. 내 경우에는 딥다이브 과정 이전에 Flutter 개발을 공부하면서 사용해본 안드로이드 스튜디오가 있었기에 에뮬레이터는 문제 없을 것이라 여겼으나, 큰 오판이었다. 결과적으로는 Genymotion을 사용해야 했는데, 수시로 터지고 멈추는 탓에 새로 깐 것만 3번이다. 아마 VMWare도 이때 새로 깔았던 거 같은데... 왜였지?

당시 우리 팀은 역할을 나누어 스크립트의 어떤 과정을 담당할지 리드를 정했는데, 내가 담당한 파트는 암호화/복호화 파트였다. 제공되는 악성 파일이 apk 파일 형태로 주어지기에, 그걸 알맞게 풀고 편집, 정보를 확인한 후 키 값을 새로 넣고 패킹까지 해줘야 하기 때문이다. 덕분에 당시에 RSA나 AES, Hash 공부를 꽤 넓게 해봤던 기억이 난다.

얘는 GCM이라는 녀석인데... 다시 보니까 갑자기 복습이 절실해진다.

서비스 포트 스캐너 구현

https://github.com/goldenGlow21/goorm_semi_project_2

개인적으로는 가장 빡셌던 프로젝트였다. 포트 스캐닝 기법이나 핸드쉐이크 등 네트워크 방면에서 사용되는 CS 수준은 그냥 공부 열심히 하는 걸로 잘 커버가 됐지만, 막상 그걸 개발로 구현하려니 상당히 막막했다.

당시에 Flask 웹서버를 기반으로 프로젝트를 구성했는데, 각 스캐닝 기법을 모듈화하자는 계획을 세웠다. 당연히 맞는 말이고 웬만하면 그렇게 하는 게 맞는데, 문제는 당시의 우리 팀이 최적화를 위해 각 스캐닝 기법을 구현하는 건 C로 하고, import하여 python 스크립트에서 사용하는 방법으로 하기로 결정했다는 것이다.(근데 이거 다시 보니까 내가 제안했네)

덕분에 C로 개발을 힘겹게 하다가, 비동기였나... 무언가가 제대로 구현되지 않아 전부 갈아엎고 Python으로 다시 개발을 했다. 이 시점에 코딩이 살짝 싫어질 뻔 했던 거 같다.

다행히 팀에 개발을 상당히 잘 하시는(하지만 본인은 항상 부정하시는) 팀원분이 계셔서, 많은 도움을 받으면서 결과물을 낼 수 있었다. 어찌됐든 네트워크 분야의 개념들을 전반적으로 훑으면서 복습하고, 직접 개발을 해보며 포트 스캐닝 기법들을 머리에 때려박았다.

확실히 직접 해보니 이해되는 속도가 다르긴 했다...

다크웹 정보 유출 탐지 시스템 개발

https://github.com/limchansu/darkweb_and_osint_viewer

내가 제일 좋아했고, 아직도 좋아하는 프로젝트이다. 무엇보다 다크웹이라는 미지의 공간이 흥미로웠고, 유출 정보를 탐지한다는 "손에 잡히는" 성과를 도출한 것이 정말 뿌듯했던 기억이 난다.

사실 이 프로젝트를 개발 측면에서 바라본다면 크롤러 작성 말고는 뭐 없다. 다만 중요한 건 다크웹을 대상으로 한다는 것. 어디에서, 무엇을 가져올지 정하는 그 과정에서 상당한 고민이 필요했다.

그러고 보니 당시에 수집한 정보를 elasticsearch와 kibana까지 도입하여 시각화할 계획을 가지고 있었으나, 막상 시각화 단계까지 가 보니 "시각화"에 대한 팀원들의 생각이 서로 판이하게 달라 곤혹을 치뤘던 기억이 난다. 사전 명세 협의가 얼마나 치밀하게 이뤄져야 하는지 격심히 느낀 사례...

하지만 가장 큰 수확을 꼽자면, 다크웹이라는 공간에 대해 조금 더 실재적인 감각을 얻었다는 것이다. 내가 상상했던 것보다 훨씬 덜 위험했으며, 내가 생각한 것보다 훨씬 더 위험한 곳이었다.

당장 다크웹에 접속해본 사람들은 알겠지만, 전용 브라우저인 Tor를 구해 접속한다고 쳐도 원하는 사이트의 url을 구하지 못하면 애초에 접속이 불가능하다. 그마저도 친절하게 www.naver.com처럼 규격과 정보를 제시해주는 게 아니라,

http://stniiomyjli...yvmpwt7gklffqd.onion

처럼 제시되어 있다.(혹시 몰라서 가운데는 자름) 주요 사이트들의 url을 모으고, 정리하며 업데이트해주는 일부 사이트가 있긴 하지만, 이런 걸 빨리 찾지 못한다면 서피스 웹에서 겨우겨우 찾아낸 2년 전 링크에 접속했다가 낭패를 치르기 일쑤다.

그럼에도 불구하고 수십개의 사이트를 돌아다니며 유출된 정보가 어떤 형태로 내걸리며, 핵티비즘 그룹들이 이를 어떤 식으로 공개하려 하는지 등을 직접 마주하니 정말 내가 정보보안 분야에서 무언가를 하고 있다는 실감이 났다.

우리 봇 일한다~

파이널 프로젝트

가장 자랑스러운, 그리고 가장 많은 수고와 공을 들인 프로젝트이다. 세미 프로젝트를 모두 마친 후, 자유 주제로 2달 반 정도에 걸쳐 프로젝트를 진행하게 되었다. 때문에 당시 팀원들이 저마다 아이디어를 제시했고, 내가 낸 아이디어는 아래와 같았다.

MIPS 아키텍처 IoT기기의 취약점 탐색

사실 처음에는 ARM이었지만... 아무튼

그동안의 세미 프로젝트에서는 CTF 스터디 때부터 쭉 팀장을 맡아주신 교육생 분께서 자연스럽게 팀장을 맡아주셨으나, 이번엔 기적적으로 내가 낸 아이디어가 채택되면서(진짜 왜 됐지) 내가 팀장을 맡게 되었다.

프로젝트는 하드웨어 해킹 -> 1-day 취약점 재현 -> 0-day 취약점 탐색 순으로 이뤄졌다. 다만 이마저도 처음 계획과 정말 많이 달라졌는데, 이건 따로 한번 정리해봐야겠다.

하드웨어 해킹

일단 이건 개발 측면은 아닌데... 1개 분석하기로 한 하드웨어 해킹은 UART/Flash Memory 덤프가 제대로 안 되어 하나씩 추가적으로 까보다가 결과적으로 5개나 까버렸고(150,000\), 분석 도구의 품질에 문제가 있다는 판단에 추가적으로 구입(140,000\)하면서 상당한 경제적 타격(...)을 입었다.

물론 덕분에 부트로더, ROM, UART, Flash Memory 등 이론으로만 접해봤을 지식을 손에 잡히는 거리에서 다뤄볼 수 있었으니 얻은 게 없진 않다. 그리고 무엇보다, 팀원들 다 같이 모여 PCB기판 붙잡고 매달리고... UART 연결 됐다고 난리 부르스를 떨던 그 날의 기억은 정말 오래도록 잊지 못할 것 같다.

결과적으로 5개 제품에 대한 총 15가지(각 3가지) 접근 경로에서 추출은 총 2가지 성공했으므로 딱히 타율이 좋다곤 할 수 없겠지만, 이 과정에서 정말 처음 접해보는 펌웨어, 또는 하드웨어 연관(PCB 기판 상의 요소들 등) 지식들을 많이 배워갈 수 있어 만족스럽다.

(그리고 납땜 캐리해 주신 양 팀원님 사랑합니다)

1-day 취약점 재현

원래는 공개 펌웨어 분석을 목표로 했다. 제조사의 홈페이지에 공개된 펌웨어를 직접 분석해보고, 알려진 취약점을 재현해보는 단계이다. 다만 후속 단계에서 비공개 펌웨어를 대상으로 한 분석이 사실상 무산되면서 1-day 취약점을 재현하는 의의만 남았다.

게다가 처음 분석 대상으로 선정한 D-Link의 DIR-882 펌웨어는 에뮬레이팅 단계에서 애로사항이 많아 이 또한 중단되었고, 결국 멘토님의 조언을 받아 Totolink의 제품으로 대상을 변경했다.

이후에는 뭐... Github에 올라와 있는 CVE 중 가장 영양가 있어 보이는 BOF 관련 CVE를 찾아 재현을 진행하였으며, 성공했다.

리버스 쉘 획득 성공한 사진!

하지만, 이 단계에서 가장 많이 배움을 얻은 건 DIR-882를 맨땅에 헤딩하는 식으로 분석해봤을 때였다. 파일 시스템이나 부트로더, 뭐 이런 것들을 이론으로만 알고 있던 나에게 펌웨어 분석은 정말 처음부터 끝까지 Blackbox였다. CVE에 관련 정보가 나와 있다고 해도, 결국 이 놈이 뭐하는 놈인지 알아야 검증이나 이해를 할 것 아닌가.

장님이 코끼리를 더듬어 형태를 찾듯, 어마어마한 양의 파일들을 하나씩 들어가 보며 분석하고, 너무 길거나 아무것도 이해가 안될 땐 GPT한테 도움을 구하기도 했다.(기계는 기계가 잘 알더라...)

어찌됐든 목표로 했던 1-day 취약점도 성공적으로 재현했고, exploit 전 수행한 정적/동적 분석 과정에서 팀원들 대부분이 취약점으로 의심되는 부분을 한두개씩 찾아둔 상태라, 이 단계가 끝날 때쯤 팀원들은 모두 상당히 고양된 상태였다.

Zero-day 취약점 탐색

제로데이 취약점을 찾기 전, 하드웨어 해킹을 재시도했다가 실패하고 분석 대상을 다시 Totolink의 제품(이번에는 최신 기종, 최신 버전으로)으로 바꾸는 작은 사고가 있었다.

아무튼, 이번 단계에는 주어진 CVE 정보를 바탕으로 공격 사례를 재현하는 게 아닌, 스스로 취약점을 찾아보았다. 이전에 1-day 취약점을 찾아보며 감을 잡아보자는 목표가 유효했는지, 팀원들 모두 상당히 빠르게 취약점에 접근했다. 지금 와서 생각해보면 별도의 분석 세션을 둘 필요가 없었을 정도..?

그렇게 분석 과정에서 유망해 보이는 공격 벡터를 5개 선정하고, 각 벡터에 모든 팀원이 다 함께 참가하며 하나하나 도장깨기 식으로 취약점을 찾아나갔다. 결과적으로는 총 4개 벡터에서 8개의 취약점을 찾아냈으며, exploit까지 성공했다.

이건 그냥 pwndbg 쓰는 사진...ㅎ

이 단계에서 수행한 것들을 되돌아보면, 에뮬레이터를 돌리는 것부터 스크립트로 exploit을 수행하는 것 까지 쉬운 것 하나 없는 과정이었다. 그렇기에 하나 하나 설명하기엔 너무나도 쓸 게 많지만, 사실 여기서 느낀 건 "나 일정 진짜 잘 짰다" 였다.

본 게임이라고 할 수 있는 건 역시 Zero-day 취약점 탐색 이지만, 그 이전에 진행한 1-day 취약점 재현 단계나 하드웨어 해킹 단계에서 경험했던 지식들이 정말 많이 필요했다. 물론 bottom to top으로 차근히 지식을 쌓았다면 더 좋았을지 모르나, 실전으로만 배우고 응용할 수 있는 날것의 지식, 아니 경험들이 분명히 존재했다. 펌웨어를 binwalk로 추출하는 순간부터 쉘 획득을 성공하는 순간까지, 별다른 검색 없이 '아 이거 그거네' 하고는 자연스럽게 넘어가는 내 모습을 보면서 성장을 체감하는 여러 순간들은 아직도 느껴질 만큼 생생하다.

대망의 발표(수료식)

무릇 팀장이라는 자리를 맡은 사람이라면 내 팀원들과 결과물에 자랑스러워야 하는 법이다. 그리고 그 자랑스러움을 내보이는 건 당연히 팀장의 몫이다.

라는 생각을 머리속에 끊임없이 때려박으며, 약 3~4일간 미친듯이 대본을 수정하며 발표를 준비했다. 마지막으로 팀장 직책을 달고 발표까지 해본 건 고등학교 때가 마지막인데(아니 중학교인가) 어쩌다 이런 일이 벌어졌는지 회고도 해보고...

그런데 사실 최종 발표에서 가장 힘들었던 건 떨림보다도 분량 문제였다. 쓸 게 너무 많았던 것. ppt는 좀 꽉 차긴 해도 알짜로만 담았고, 말하는 속도가 딱히 느린 편도 아니라 걱정할 일 없을 줄 알았는데, 정말 기술적인 내용을 다 빼고 3달간의 여정만 설명해도 16~17분이 나왔던 걸로 기억한다. 덕분에 설명(=자랑)하지 못한 팀의 성과가 한 트럭은 될 것이다.

사족과 너무 자세하다 싶은 것들을 잘라내다 보니 약간은 뿌듯한 감정을 느끼기도 했다. 글을 쓸 때는 많이 쓰고 다듬으며 줄이는 게 더 편하다고 하지 않던가. 쓸 게 없는 상황에서 그럴싸함을 꾸며내는 빈곤함보다는 간결함을 추구하며 느끼는 고민이 나은 법이다.

아무튼 그렇게 발표도 잘 마쳤고, 심사위원으로 자리해주신 곽경주 CSO님과 김다솜 멘토님의 질문까지 받고 나니, 정말 다 마무리됐구나 하는 실감과 함께 엄청난 뿌듯함이 몰려왔다. 아마 이때 입꼬리 관리가 좀 안됐을텐데, 아무도 못 봤길 바란다.

그 뒤로는... 우수 프로젝트와 우수 수료생 발표, 향후 구름 측에서의 지원 제도나 그런 것들을 안내해주셨다. 그리고...

대상이나 최우수상은 따로 없었기에 우리가 사실상 대상이다!

혹시 싶어서 이름은 지웠지만... 나다!

맺으며

정말 과분한 성과를 얻은 것 같다. 8개월간 누구 하나 지치지 않고 끝까지 열심히 달려와 주신 팀원분들, 아침이든 저녁이든 수시로 DM을 받아주신 멘토님들, 계속 신경쓰며 안내를 맡아주신 관리자님들까지, 누구에게든 감사함밖에 느껴지지 않는다. 아마 우수 수료생 돼서 그런 거 같긴 하다.

물론 스스로 풀어지거나 할 때마다 '제주도 펜트하우스 숙박권 받아야지!!' 하면서 자신을 다잡았지만, 솔직히 내가 받으리라고는 생각하지 못한 명예였다. 그만큼 8개월간 노력한 자신이 자랑스러워지고, 그간 잃었던 자신감이 엄청나게 충전된 기분이다.

정보보안 분야를 공부하고 있다는 말을 자랑스럽게 할 수 있을 만큼 공부했고, 또 공부하는 법을 배웠다고 생각한다. 이제 복학도 해야 하고, 인턴이나 취준 등 할 일이 산더미지만... 앞으로 어떤 어려움이 닥쳐오든 이번 딥다이브 과정에서 얻어낸 것들이 큰 힘이 되러줄 거라는 강한 예감이 든다.

끝으로, 이걸 봐주실진 모르겠지만... 정말 고생 많았던 정보보호 9회차 용두용미팀 팀원분들, 정말 감사합니다. 덕분에 스터디와 강의부터 3번의 세미, 1번의 파이널 프로젝트까지, 정말 많이 배웠고 힘이 되었습니다. 바라건대 제가 여러분께 배우고 의지했던 만큼, 저 또한 여러분께 의지되는 팀원이었다면 좋겠습니다!

profile
안드로이드는 리눅스의 꿈을 꾸는가

0개의 댓글