WACon에 출제를 하게 되었습니다. 어떻게 하다가 이런 대회가 열리게 된건지 잘 모르겠긴 하지만 새로운 대회는 언제나 환영이죠 :p 사실 원래는 본선때 해킹대회 출제 브이로그를 찍어보겠다고 영상을 이것저것 찍었는데, 찍던 중간에 저는 이런걸 할 수 없는 성격이란걸 깨달아버렸습니다. 브이로그 유튜버분들 존경합니다,,,
사실 제일 처음 출제를 해본 CTF는 코드게이트 2022였지만 코드게이트 2022는 사실상 문제만 만들면 됐고 그 뒤의 세팅은 저와 무관한 일이라는 느낌이었다면 WACon은 아예 제가 속해있는 CTF팀에서 운영을 맡았다보니 운영을 근거리에서 지켜볼 수 있었다는 차이가 있었습니다. 물론 저는 아직 도커와도 친숙하지 않고 또 아예 CTFd를 만져본게 처음이라 전반적으로 서버랑 도커 관리를 다른 팀원분들, 특히 sqrtrev님이랑 GoRiyA님이 도맡아서 해주셨고 저는 그냥 문제 정보 등록 같은 노가다나 조금 거들었지만 아무튼 이렇게 한 번 경험해본게 좋았습니다.
문제 아이디어가 엥간치 있었어서 이번에 거의 문제공장장 느낌으로 easy, medium 수준의 문제를 여럿 찍어냈습니다. 예선에 The Game of DES, Zero time signature, Type confusion, Hashashashashash를, 본선에 BYOS, mistake, draclean, mosaic, Sudoku game을 냈습니다. 암호학이랑 misc 분야는 익숙했지만 어쩌다보니 리버싱 문제도 예선과 본선에 1개씩 내게 됐네요.
사실 요즘 고등학생들의 수준을 잘 몰라서 본의아니게 예선때에는 주니어부에 대한 배려가 조금 부족했던 것 같습니다. 소오오오오올직히 The Game of DES는 점수를 퍼다주는 문제였고 실제로 일반부에서는 그냥 점수 자판기였는데 주니어부에서 딱 2팀만 풀어낸걸 보고 조금 아쉽긴 했습니다. Type confusion도 주니어에서 한 팀은 풀 줄 알았는데ㅠ... 그래서 본선에서는 분야별로 한 문제씩은 저희 나름대로 쉬운 문제를 두었는데 (pwn - old style, crypto - mistake, misc - ide, rev - draclean, web - BabyJS) 딴건 다 솔버가 나왔지만 draclean은 안풀렸네요. ㅈㅅ... 덜 꼬아낼걸 그랬습니다.
Sudoku game의 경우, 혼자 떠올린 게임이었고 저는 그냥 정직하게 백트래킹으로 AI를 만들었습니다. 나름 AI를 열심히 짠다고는 짰는데 플레이어가 그냥 매 순간마다 가능한 칸 중에서 랜덤으로 두더라도 승률 30% 정도는 나오길래 어쩔 수 없이 연결 횟수를 팀 당 1회로 제한하고 sleep도 무지막지하게 두었습니다.
이 때 팀 당 1회 제한을 어떻게 해야하나 고민을 했는데 diff님이 filelock을 알려주셔서 유용하게 써먹었습니다. 저는 처음에 CTFd 안에 팀별로 고유한 팀 토큰이 있다고 생각해서 그냥 그걸 토큰으로 사용하려고 했으나 확인했더니 그렇지가 않아서 대회장에서 급하게 토큰을 만들었습니다.
혹시 filelock에서 취약점이 있지는 않을까 노심초사했는데 다행히 그렇지는 않았네요. 다만 간혹 연결이 비정상적으로 종료된 후 접속이 계속 안되는 경우가 있어서 처음에는 어떻게 해결해야하나 애를 좀 먹었는데 도커 안에 들어가서 그냥 파일을 지우면 되는걸 확인해서 그 뒤로는 요청이 들어와도 큰 어려움 없이 처리를 할 수 있었습니다.
사실 이렇게 sleep을 두고 접속을 1회로 제한해도 그냥 승률 30%짜리로 계속 돌리면서 +12점이 되길 기도하는 식으로 했을 때 운이 좋으면 플래그를 얻을 수 있긴 했는데 더 sleep을 늘리긴 그래서 어쩔 수 없이 이정도로 했습니다. 참고로 시뮬레이션을 했을 때 승률 30%로는 평균적으로 60-80시간이 지나면 +12점을 얻을 수 있고, 50%로는 20분이 지나면 +12점에 도달할 수 있었습니다. 그래서 제 AI랑 승률이 반반만 나와도 플래그를 획득할 수 있게 했는데 필승전략이 있는줄은 몰랐습니다,,,, (여기 참고) 전략을 직접 떠올린 팀도 있었고 열심히 검색해 저 글을 찾은 팀도 있었습니다. 저도 출제 당시 나름대로 혹시 기존에 있는 게임은 아닐까 걱정하면서 열심히 찾았지만 저런 글을 못찾았는데 아쉽네요ㅜ 그래도 검색으로 풀 수 있었던건 아쉬운 점이었지만, 필승전략이 있었기 때문에 노잼 백트래킹 빡구현문제가 예스잼 게임이론문제가 된 것 같습니다.
출제 당시에는 풀이까지 상세하게 작성할만큼 여유가 없었고 익스플로잇 코드만 다 작성했었습니다. 짬날때마다 제가 출제한 문제들에 대한 풀이는 틈틈히 작성을 하고 있긴 한데 언제 정리를 다 해서 공개를 할 수 있을지는 모르겠습니다. 아마 여러 일 중에서 우선순위가 굉장히 낮을 것 같네요ㅠ 그래도 제가 낸 문제 중에 풀이가 궁금한게 있으면 언제든 편하게 질문주세요.
이거 대회때문에 계속 서울 왔다갔다하고 진행중에는 잠도 잘 못자고 되게 정신없었는데 끝나니까 살 것 같네요. 그래도 제가 낸 문제들을 정말 뛰어난 분들이 도전해주시는게 참 흔치않은 기회인데 감사한 일이었습니다. 또 주니어부 분들이 제 문제를 통해 뭔가 얻어갈 수 있다면 기쁠 것 같습니다. 특히 mistake와 Type confusion은 복습해볼 가치가 있지 않나 생각하긴 합니다.
'대회 > 각종 대회 후기' 카테고리의 다른 글
22 현대모비스 알고리즘 경진대회 후기 (6) | 2022.07.11 |
---|---|
Quora Programming Challenge 2022 후기 (10) | 2022.02.06 |
Hackceler8 후기 (4) | 2021.11.08 |
DEF CON CTF 2021 후기 (2) | 2021.08.10 |
DEF CON CTF 2020 후기 (14) | 2020.08.12 |
2019 ACM-ICPC Da Nang Regional 후기 (0) | 2020.01.26 |