In Univ? (2024-1) - 2
5 min read
DEF CON 32
init. Cold Fusion
DEF CON CTF 본선은 CTF하는 사람이라면 반드시 한 번 쯤 가고 싶어하는 대회라고 해도 과언이 아닙니다. 지금은 AI가 발달하면서 그 위상이 좀 떨어진 감이 있지만, 당시만 해도 한국에서 DEF CON을 가 본 사람이 그리 많지 않았습니다(아마도?). 그건 저도 마찬가지였고요.
다만 이번엔 작년과 달리 HITCON에서 '프로그램털모찌'로 좋은 성적을 거둔 기억이 있어, 혹시 이번엔 DEF CON 본선에 갈 수 있지 않을까 행복 회로를 돌려봤습니다.
원래는 당시 팀 그대로 가려 했는데 몇 분은 이미 DEF CON 팀이 있어서 나가셔야 했고, 때문에 추가로 다른 팀과 연합할 필요가 있었습니다.
마침 지섭님이 나가시면서 ANOPs를 소개해주셨고, CyKor를 통해서 다른 분들을 소개 받아 팀이 완성되었습니다.
이제 팀을 만들었으니 이름을 지어야겠지요. 하지만 전 이름 짓는 데 영 소질이 없었습니다. 그냥 프로그램털모찌로 나가자니 DEF CON에 쓰기는 좀 그렇고, 그렇다고 새로운 팀명을 투표로 정하자니 시간이 없었습니다. 이번에도 어김없이 AI 한테 부탁했지만 별로인 이름들만 가져다주더군요. 당시 모델이 gpt-3, o4 시절이니 그럴 만 했습니다. 해킹은 커녕 일상 생활에도 사용하기 힘들었던 수준이었으니 말이죠.
아무튼 Roy님이 Cold Fusion란 이름을 가져왔고, 전 이 이름이 썩 맘에 들었습니다. 너무 공대생 감성인가요.
DEF CON 예선을 치루기 전에 연습해 볼 대회가 있으니 그 동안 팀명도 다시 고민해보며 팀 전력을 살펴보기로 했습니다. LINE, Plaid를 모의로 뛰었고, 성과는 꽤 괜찮았습니다. 각각 7등, 10등으로 본선을 노려볼 만한 정도였죠. 특히 Plaid는 DEF CON 본선 팀들이 몸 풀기처럼 뛰어왔던 CTF이기 때문에 해당 등수로 실제 본선 가능성을 가늠해 볼 수 있었습니다.
10등이면 참 애매한 등수입니다. 당시 시드가 이미 4개 정도 발급된 상황이라 DEF CON 본선을 가기 위해선 예선에서 8등 이내에 들어야 하니... 솔직히 말하자면 문제에 따라 어떻게 될 지 모르는 상황이라고 볼 수 있겠네요.

그럼에도, 가능성이 있다는 것 만으로 충분히 만족했습니다. 본선 합격 여부는 저희한테 달려 있는 게 아니니까요. 혹시 저희한테 정말 잘 맞는 문제가 나와줄지도 모르잖아요?
그렇게 24년 5월 4일 오전 09:00 (UTC+9). 대회 시작입니다.
Quals
DEF CON 예선의 막이 올랐습니다.
다른 대회와 달리 노틸러스가 운영하는 DEF CON은 문제 카테고리가 정해져 있지 않았으며, Live CTF가 있고, 앞의 문제가 일정 이상 만큼 풀렸을 때 새로운 문제가 열리는 방식이었습니다.
그래서 초반엔 Live CTF용 docker 제출 포맷을 만들었습니다. 다른 분들이 문제를 워낙 빨리 풀어서 열리기까지 대기해야 했죠.
제가 메인으로 잡은 문제는 saferrrust였습니다. 미리 말하면, 이 문제를 대회 끝날 때 까지 못 풀었습니다. 당시 IDA가 try catch문을 올바르게 못 보여준다는 걸 제대로 인지하지 못해 디스어셈만 보다 숨겨진 로직을 제대로 찾지 못했습니다. 저는 Pwn인 줄 알고 하루 종일 메모리 corruption으로 익스하려 했는데(실제로 그럴듯한 취약점이 있었습니다...) 슬프게도 익스가 안되더라고요.
- 이런 헛소리나 하다니...

한 문제만 오래 붙잡고 있을 순 없었기에 중간 중간 liveCTF로 이사갔다가 다시 복귀하고를 반복했습니다. 운 좋게도 당시 Windows Userland 강의를 작성했는데, 마침 liveCTF 문제로 윈도우 유저랜드 익스플로잇이 나와서 '이게 웬 떡이냐' 하고 바로 풀러 갔습니다.
다시 돌아와서, 제가 saferrrust 한 문제에 골머리를 썩히는 사이 다른 분들이 하나 둘 씩 flag를 따오기 시작했습니다. 다만 이전 Plaid CTF에서 보았듯 저희 팀은 본선을 확정할 실력까지는 아니었습니다. 덕분에 DEF CON 스코어보드에서도 본선 진출 실패를 넘나드는 쫄깃한 경험을 48시간 동안 내내 하고 있었죠.
- 와! 무려 1점 차가 2팀!

심지어 상대 다이나믹 스코어링이라 아래 팀이 고추가루 뿌리기를 해버릴 수도 있는 상황이었습니다.
- 위 사진의 n분 전 캡쳐. 아무것도 하지 않았지만 등수가 올랐다.

저 시점이 대회 3시간 남은 시점이니, 다른 팀이 추가로 푸는 것 까지 고려하면 1문제는 더 풀어야 본선에 갈 수 있었습니다.
그리고 클러치(주워먹기)의 신 physicube가 Flag를 따왔습니다!

배점도 346점으로, 본선 티켓을 가르는 문제였습니다. 이 사람에겐 유관력이 있는 걸까요? 잘 대리고 다녀야겠습니다.
답변도 인상적이네요.

푼 방법을 물었더니 make_elf(bd(저거))라는 말을 하나 남기곤 홀연히 떠났습니다. 한 쪽에선 왜 기존 풀이는 안 된 건지 복기하고 있었고요.
사실 2시간이면 거의 다 풀린 문제 빼곤 현실적으로 flag를 따기 어렵습니다. 때문에 전 8등 이내에 드는 걸 기도하는 역할을 맡기로 했죠.
결과는 어땠을까요?

6등으로, 그렇게, DEF CON 본선에 갔습니다.
physicube뿐만 아니라 문제 풀이에 참여해주신 모든 분들에게 감사를 표하고 싶지만 제가 허락 받은 게 아니라 함부로 언급하기는 힘들군요. 나중에 허락 받는다면 차차 업데이트 해보겠습니다. (physicube에겐 허락 받지 않았지만, 괜찮을겁니다?)
Partial Recap
CTF에서 제가 이루고자 하는 목표는
메이저 CTF에서 1문제 풀기메이저 CTF에서 퍼블하기메이저 CTF 본선 참여하기- DEF CON CTF 본선 참여하기
CTF를 시작한 지 4년, 드디어 4번 문장에 줄을 그을 수 있게 되었군요. 너무나도 감격스럽습니다.
사이사이에 힘든 일도 많았고 유혹들도 많았습니다. '그냥 회사 팀에 들어가서 DEF CON 본선에 쉽게 갈까?'란 생각도 무수히 해 봤고, '내가 DEF CON 본선에 갈 수 있긴 할까?'란 생각도 수 없이 해 봤습니다. 제가 다시 그 때로 돌아간다 해도 저런 생각을 버릴 순 없었을 것 같네요.
그래도 그 사이사이에 있던 아주 짧지만 달콤했던 순간들이 행복했고, 조금은 그립습니다.
성취에 실력이 필요한 것은 사실입니다만, 그렇다고 압도적일 필요는 없는 것 같습니다. 오히려 그저 많이 도전해보고 시도해보는 게 더 중요하고, 가끔은 무모할 줄 알아야 한다고 생각합니다. 제가 하는 모든 일들이 계산적이고 성공적이었다면 오히려 이런 순간이 없었으리라는 생각을 합니다.
아마 Cold Fusion라는 팀을 운영하지도 못했을 거고, 지금처럼 좋은 사람들을 많이 알 지도 못했을 것이며, 지금처럼 많은 걸 해보지 못했을 겁니다.
현실적이진 않지만 멋있는, 흔히 "낭만"이라고 부르죠. 저에게 CTF의 낭만 이라고 하면 PLUS, 그리고 제가 알고 있는 사람들과 우리들만의 멋진 팀을 꾸려 HITCON, DEF CON 본선과 같은 큰 무대에 출전하는 것이었습니다.
21년도의 저한테 진짜 할 수 있냐고 물어봤다면 아마 '그렇게 할 수만 있다면 좋을 것 같은데, 아마 안되지 않을까?'란 답변이 돌아왔을 겁니다. 사실 너무나 당연하죠.
그러나 21, 22, 23, 24년. 매년 시도할 때 마다 새로운 사람을 만나고, 새로운 지식을 배우고, 새로운 시도를 하다 보니 결국엔 낭만도 현실이 된 듯 합니다.
이 일련의 사건들이 포기하지만 않는다면 100%의 성공은 불가능할지언정 성공 그 언저리까지는 갈 수 있으리라 생각할 수 있도록 만들어 주었네요. 여기까지 함께 해 주신, 그리고 함께 해 주실 모든 분들께 무한히 감사할 따름입니다.
그나저나, DEF CON 본선 한 번 진출한 걸로 너무 거창하게 늘어놓은 것 같아 슬슬 부끄러워지는군요. 이만 글을 줄여야겠습니다.
다 써 놓고 이런 말을 하다니, 그것조차 부끄러울지도.
Comments
Loading...