Back to all posts
log

In Univ (2022-1)

6 min read

1. 2022-1

Graduate

일단 2022년도는 제가 3년 졸업을 포기한 해입니다.

학점을 못 채워서? 진작에 3년 졸업 할 수 있을 만큼 당겨 들었으니, 아닙니다.

목표를 못 정해서? 해킹을 계속 하고 싶었으니, 그것도 아닙니다.

성적이 좋지 않아서? 엄청 좋지는 않지만 당시 3.7-8 정도였으니 대학원 진학하기엔 문제 없었습니다. 재수강으로 바꿀 수 있는 학점도 없었으니 말이죠.

학점도 아니고, 진로도 아니고, 성적도 아니라면 과연 왜 일까요?

바로 영어를 들어야 하기 때문입니다! 포스텍은 구조적으로 한번에 영어 수업을 여러 개 들을 수 없습니다. 기영 1, 기영 2, 3등급, 2등급 순으로 들어야 졸업할 수 있는데, 4개 모두 다 다른 학기에 들어야만 합니다.

만약 2학년까지 이 모든 걸 듣지 않았다면? 당연히 졸업하는데 최소 2년이 추가로 듭니다. 그리고 저는 2학년까지 이 모든 수업을 듣지 않았죠.

무슨 자신감으로 3년 졸업을 하겠다고 했을까요?

포스텍은 또한 예외적으로 OPIC이나 토플 성적으로 통해 몇 개의 수업을 건너뛸 수 있었습니다. 저는 OPIC을 칠 생각이었고, 당연히 뺄 수 있겠지란 마음가짐으로 여유롭게 지냈죠. grammar는 많이 약하지만 그래도 컨퍼런스 가서 외국 사람들이랑 말하는 건 문제가 없었기 때문에 IH는 딸 수 있단 생각이었습니다.

다만 OPIC 주제의 랜덤성을 배제한 게 가장 큰 패착이었습니다. 스피킹에서 내진 설계에 관해 이야기하란 내용이 나왔는데, 많이 당황해서 지문을 통째로 절었습니다. 안일한 마음으로 크게 대비도 하지 않아서 그 충격이 더 컸던 것 같습니다. 나중에 알아보니 그 주제를 잘 모르겠으면 그냥 다른 소리를 해도 된다고 하더라고요...

그래도 'IH 정도는 받을 수 있겠지'란 생각을 했는데 막상 결과를 받아들어보니 speaking에서 IM2 가 나왔습니다. 오히려 걱정했던 writing은 IH가 나와 더 어이가 없었죠.

그래도 한 2-3번 이상 쳤으면 통과했을텐데 전 너무 당당하게도 마감 직전 시험만 신청했습니다. 지금 생각해도 무슨 자신감이었는지 모르겠습니다.

결국 제 3년 졸업은 물 건너 갔습니다. 그러곤 이런 생각을 했죠. '이렇게 될 바에 그냥 대학교 신분으로 참여할 수 있는 대회를 다 참여하고 졸업하겠다. 조기 졸업은 신 포도다.'

제 7학년 생활은 그렇게 시작되었습니다. 초등학교보다 오래 다닌 대학교라니, 흥미롭지 않나요?

DEF CON Finals?

다시 원래 주제로 돌아와서

위 사건을 포함해 2022년도는 제 대학 가장 결정을 많이 했던 해입니다. 입시 때도 이렇게 많은 결정을 해본 적이 없는 것 같은데 말이죠.

2022년도 1학기까지는 PLUS 회장으로서 책임을 다해야 했습니다. 제 위로 무수히 많은 선배들이 있었기에 많이 물어보면서 어찌저찌 일들을 처리해 갔습니다.

다만 가장 큰 문제가 하나 있었는데, 바로 DEF CON CTF 조직하기였습니다. CTF판에 뛰어든 지 채 3년이 안되는 뉴비가 감당하기는 조금 어려운 일이었지만... 그래도 회장이니까요.

조금 엄밀히 말하면, 저희 동아리가 무조건 DEF CON 연합 제안을 먼저 꺼내야 했습니다. 객관적으로 PLUS의 전력은 그리 강하지 않기에 가만히 기다린다고 연락이 오진 않을 확률이 높았습니다. 역시 목마른 사람이 우물을 파야죠.

과거 K-Student로 DEF CON을 아쉽게 못 갔던 기억이 있는데, 이 팀을 바탕으로 연합을 조직해 DEF CON 본선에 가는 게 당시 계획이었습니다. 제 CTFer로서 꿈이 아래와 같다고 했는데

  1. 메이저 CTF에서 1문제 풀기
  2. 메이저 CTF에서 퍼블하기
  3. 메이저 CTF 본선 참여하기
  4. DEF CON CTF 참여하기

어떻게든 DEF CON 본선에 갈 수 있으면 된다! 였습니다.

다만 연합 팀 제안을 거절 당하는 게 제 유일한 걱정거리였습니다. 솔직히 다른 팀장분들께 요청 드릴 때 많은 생각들을 했습니다. '혹시 연합팀 요청을 거절 당하면 어떡하지?', '이미 다른 팀들은 다들 연합이 있지 않을까?', 'PLUS끼리만 나가서 DEF CON을 나갈 순 있을까?'같은 침투적 사고를 하게 되더라고요. 때문에 요청할 때도 몇 번을 지우고 쓰기를 반복하다 '에라 모르겠다' 한 마디 외치고 그냥 보냈습니다.

막상 돌아온 답은 정말 흔쾌한 OK 사인이었습니다. 걱정이 무색하게도 연합은 정말로 무난히, 아니 오히려 제가 생각한 것보다 굉장하게 구성되었습니다. 이전 K-Student였던 CyKor, GoN, PLUS에 Hayyim Security, zer0pts 일부까지 해서 0xEA라는 팀으로 DEF CON 30을 참여했습니다.

하지만, 결과는 그리 좋지 못했습니다. 20등으로 예선을 마무리하게 되었는데 제가 당시 한 문제도 기여를 못해서 너무나 죄송할 따름입니다.

이 DEF CON으로 얻은 건 '생각보다 연합이나 팀을 구성하는 게 어렵지 않구나.'라는 경험과 같이 뛰었던 분들의 연락처였고, 잃은 건 그걸 제외한 대부분이었습니다.

어러 문제가 있겠지만 내년에 이 분들께 다시 연합을 하자고 하자고 하기가 힘들어졌다는 게 가장 컸습니다. 아무래도 2번이나 본선 진출을 못한 연합을 한 번 더 하자고 요청하는 게 쉬운 일은 아니니 말입니다. 다음에도 해주신다면 좋지만 현실적으론 어렵단 생각이었습니다.

이 대회를 끝내고 '이제 DEF CON 가는 건 글렀나'라고 생각했습니다. 미래의 이야기지만 23년도에 팀을 주도적으로 모으지 않은 이유도 이 때문이었습니다.

결국 3, 4번 소망은 올해 안에 이루지 못하게 되겠군요.

이 때문에 도피성으로 PS를 좀 했습니다. 마침 학교 TO 전형으로 운 좋게도 ICPC Seoul Regional을 나가게 되었는데 많이 공부한 건 아니다보니 본선에서 좋은 성적을 거두진 못했습니다. 좀 열심히 공부할 걸. 같이 참여해준 poro와 soda에게 다시 한 번 감사합니다.

다만 포스텍에서 PS를 잘하는 사람들이 메달을 땄다니, 정말로 기쁜 소식이 아닐 수 없습니다. 자세한 이야기는 leo020630을 참고해주세요. 저희 학교 제 n차 PS 전성기의 시발점이 되지 않았나 싶습니다.

돌아와서, 무난하지 않았지만 결과적으로 별 일 없던 학기였습니다. 상태함수군요.

BoB? Theori?

원래 별 일이 없다면 BoB를 갈 생각이었습니다. 이 실력으론 밥 벌어먹고 살기 어렵다는 생각을 하고 있었던 탓에 BoB에 가서 실력을 키운 뒤 보안쪽으로 취업하는 걸 목표로 삼고 있었습니다. 사실 취업까지 본 것도 아니었고, 그저 CTF를 더 잘했으면 좋겠다는 생각 위주였던 듯 합니다.

그런데 전 BoB를 아직도 가지 못했습니다. 당시 Theori에 있던 Beta 선배와 은수 선배의 추천으로 Theori에서 인턴을 하게 되었기 때문입니다. 이건 지금 생각해도 정말 운이 좋은 케이스였다고 생각합니다. 상시 채용으로 여기를 통과하라고 하면... 지래 겁먹고 BoB에 갔을지도 모르겠군요. BoB만의 장점이 있지만 전 Theori 다니면서 얻은 게 많았기에...

덕분에 2022년 6월 여름방학부터 Theori에서 인턴을 하게 되었습니다. 당시 전 VR / Dreamhack 겸직으로 있었는데 이 때문에 아직도 회사분들은 왜 VR에서 Dreamhack으로 옮겼냐고 간간히 물어보시더라고요 ㅋㅋㅋ

제가 가서 맡은 일은 Linux Kernel 관련 업무였습니다. 1-day를 익스까지 완성하는게 당시 목표였는데, 여태까지 CTF에서 아주 쉬운 커널 문제만 풀던 사람이 실제 익스를 하는 건 그리 쉬운 일이 아니었습니다. 커널 세팅조차 제대로 못해 쩔쩔매는 저를 회사 분들이 하나하나 보조해주던 장면이 아직도 눈에 선합니다.

아무튼 거의 2-3주 동안 커널 세팅, 보는 법, 객체 찾는 법 등을 배웠습니다. 이 때 pahole란 것도 알았고 배포판은 CTF보다 사용할 수 있는 객체가 많다는 것도 처음 알았습니다. 전 '커널이면 다 같은 커널이지'라고 생각했는데 config가 그리 많을 줄 몰랐네요.

제가 아는 선에서 이 취약점을 익스할 방법을 도저히 찾지 못해서 이후로도 거의 2주 정도를 pahole 결과만 뚫어져라 보고 있었습니다. 언젠가 진짜 고수가 된다면 딱 보고 바로 익스를 할 수 있게 될까요? 아직도 잘 모르겠습니다.

포기하고 PoC만 잘 정리하려던 찰나 mqueue라는 신기한 객체가 눈에 띄었습니다. 정확히 제가 원하는 객체는 아니었지만 신기하게도 포인터를 잘 조작해 온몸 비틀기를 하면 특정 주소에 원하는 포인터 값을 쓸 수 있다는 걸 깨달았고, 당시 CTF에서 modprobe_path란 걸 막 배우고 온 참이었기에 이 두 개를 결합하면 root로 우리가 원하는 프로그램을 실행할 수 있다는 결론에 다다를 수 있었습니다. 지금 보면 당연히 가능한 거 아니야 싶은데 당시에는 이걸 떠올렸다는 것 만으로 너무나 신이 났네요.

그렇게 완성된 글이 Linux Kernel Exploit (CVE-2022–32250) with mqueue입니다.

사실 익스를 다 하고도 수많은 과정이 있었습니다. 보고서 쓰기, 첨삭, 수정 사항 반영, 그리고 반복. 그럼에도 제가 이 문제를 해결한 방법을 글로써 써낼 수 있다는 것 자체가 너무 즐겁고 좋은 경험이었습니다.

뿐만 아니라, 조금 나중 이야기지만 이 익스플로잇 하나가 제 해킹 생활의 큰 전환점이 될 줄 몰랐습니다. 역시 사람 일은 한 길 앞을 예상할 수가 없군요.

VR이 끝난 뒤 Dreamhack Content에 글 하나를 쓰고 제 인턴 생활을 마무리 지었습니다. 당시 썼던 글은 zer0pts에서 찾은 새로운 FSOP 테크닉이었는데, 2022년 3월쯤 이었으니 아마 당시에는 알려지지 않았던 걸로 기억합니다. kvstore란 문제를 _wide_data의 vtable로 익스했었는데, 아마 지금은 House of Apple이란 테크닉으로 널리 알려져 있는 것 같네요.

  • kvstore writeup을 찾았는데 엄청 러프하게 적힌 거 보니 누구 이해하라고 쓴 글은 아닌 것 같네요 ㅋㅋㅋ

마무리까지 아름다웠으면 좋겠지만... 마지막 한 주는 코로나에 걸려 회사에 나가지 못했습니다. 어느 날 일어나려고 해도 몸이 도저히 안 움직여서 그대로 있었는데, 작은 이모가 오셔서 체온을 재 보더니 깜짝 놀라서 바로 병원에 절 끌고 갔습니다. 그러곤 바로 코로나 진단을 받아 방에 격리 당했네요. 나중에 듣기론 39도가 넘었었다나? 아마 그랬던 듯 합니다. 코로나의 영향으로 한 2달 동안 뭘 먹어도 물맛만 났는데 참으로 죽을 맛이었습니다. 덕분에 건강의 소중함을 깨닫는 뜻 깊은 시간을 가졌죠.

아무튼 제 첫 인턴 생활은 이렇게 끝났습니다. Theori에서 인턴임에도 정말 과분한 일들을 했고, 배웠으며, 깨달았습니다. 다시 일을 할 수 있다면 하고 싶다는 생각을 가지며 퇴사를 했었네요.

Comments

Loading...