이번에 한&일 연합팀으로 Hackceler8 (2020 Google CTF Final)에 참여하여 준우승 차지 했다. 처음보는 방식의 CTF였고 재미있었던 점이 많아서 간단하게 후기를 작성한다.


대회 진행 방식

우선 해당 대회는 Google CTF에서 Top16팀이 참여할 수 있다. 우리 팀은 18등으로 마무리했었고, 상위 팀인 !SpamAndHexp4가 본선 진출을 포기해서 운 좋게 The Flat Network SocietyI Use Bing팀이 본선에 진출하게 되었다.

우리 팀 명은 I Use Bing이었는데 arang형이 처음 제시했던 팀 명이었고 Google CTF에 저 팀 명으로 참여한다는 것이 재미있어서 다들 동의했다. 그리고 본선 진출을 할 당시에 팀 로고를 제출 해달라고 했는데 Zoruri님이 재미있는 아이디어를 제시해줘서 해당 아이디어를 토대로 다음과 같은 로고가 탄생했다. (디자인은 posix형이 했다.)

Untitled

Top16팀은 이제 time zone에 따라서 4개의 조로 나뉘어진다. 경쟁 구도는 다음과 같았다.

# Saturday, October 17th, 12pm CEST:
I Use Bing
TokyoWesterns
Balsn
pwnPHOfun

# Saturday, October 17th, 8pm CEST:
1064CBread
PPP
perfect blue
DiceGang

# Sunday, October 18th, 2pm CEST:
More Smoked Leet Chicken
pasten
5BC
ALLES!

# Sunday, October 18th, 8pm CEST:
r00timentary
The Flat Network Society
hxp
cr0wn

이렇게 4개의 조로 나누어서 경기를 진행한 후 각 조의 1위팀이 다시 경쟁하여 최종 결승 진출 팀을 4팀을 뽑는다. 우리는 아시아권 팀과 경쟁을 하게되었고 강팀인 TokyoWesternsBalsn을 경계했다.


첫 번째 대회 준비

이 대회는 일반 CTF와는 다르다. 게임이 주어지고 해당 게임을 한 명이 플레이하면서 동시에 스트리밍을 진행해야 한다. 그러면 구글 CTF 운영진들은 그것을 보면서 실시간 중계를 한다. (마치 e스포츠)

대회엔 총 7가지 스테이지가 있고 1등 기준은 모든 스테이지를 클리어하고 특정 지점으로 이동하여 escape 하는 것이다. 예를들어 맵을 돌아다니며 문제 a의 터미널을 발견했으면 해당 문제를 다운받아서 팀원들에게 공유하고 팀원들이 문제를 풀면 문제 a의 플래그를 인증할 수 있는 콘솔을 찾으러가서 인증을 해야했다. (플래그는 있는데 어디서 인증해야 되는지 모르는 상황 발생 가능…)

처음 대회를 진행하기전에 test map을 공개해줬는데 이를 토대로 우리팀의 akiym가 크롬 익스텐션을 제작하여 문제 풀이에 도움이 되는 기능들을 만들었다. 이때 만들었던 유용한 기능은 지나갈수 있거나 밞을 수 있는 물체들에 색을 입히는 것과 점프할 때 실수를 하지 않도록 도와주는 기능이었다. (나중에 알고보니 다른 팀들은 스피드 핵도 만들고 캐릭터도 바꾸는 등 엄청난 준비를 했었다.)


첫 번째 대회 시작

우리 조는 첫 번째로 대회를 시작했다. 처음이라 그런지 오류가 많았고 시작 시간이 많이 딜레이되었다. posix형이 게임 플레이하고 나머지 사람들은 문제 풀이를 보조하는 역할을 맡았다.

대회 시간은 총 90분이다. 대회 시작 30분전에 대회 맵을 공개하고 이제 그 맵을 빠르게 분석해야 한다. 문제는 종류가 3가지로 나뉜다. 첫 번째는 일반적으로는 가기 힘든 위치를 가는 스테이지 2개 (크롬 익스텐션을 개발안했다면 클리어하지 못한다.) 주어진 맵의 소스코드 오디팅을 통하여 특정 동작을 해서 특수하게 이동해야 하는 스테이지 1개, 일반 CTF 형식의 스테이지 4개이다.

우리 팀은 크롬 익스텐션을 만들어놨기 때문에 무난하게 1등을 했었고 그 당시 스코어보드는 다음과 같다.

1. I Use Bing (7 submitted flags + escape)
2. pwnPHOfun (6 flags)
3. TokyoWesterns (4 flag)
4. Balsn (2 flag)

TokyoWesternsBalsn은 대회 준비를 많이 안했어서 막힌 구간이 꽤 많았었다. TokyoWesterns의 영상을 보니 되게 재미있었던 점이 보이지 않는 발판을 올라가야하는 맵이 있었는데, 해당 맵에 진입하면 그 맵을 클리어하기 전 까지 갇혀버린다. 처음엔 계속 블라인드로 모든 경우의 수를 밞아 보면서 해결하다가 전혀 답이 안보이는지 대회 도중에 코딩을 해서 해당 발판들을 보이게 만들었다. (물론 많은 시간이 소요됨)

결과적으로 90분이란 제한된 시간 속에서 우리 팀만 완주를 성공했고 완주에 걸린 시간은 86분이다. 하지만 다른 팀들의 결과를 보니 놀랄 수 밖에 없었다.

match 1
I Use Bing (86)

match 2
PPP (80)

match 3
pasten (23)
ALLES! (60)

match 4
The Flat Network Society (72)

match 3가 엄청 치열했는데 2등한 ALLES! 팀은 다른 그룹에 참여 햇다면 어느 그룹을 가던지 1등으로 본선에 진출했을 텐데 pasten이 23분이라는 경이로운 기록을 세우는 바람에 안타깝게 탈락했다.


두 번째 대회 준비

최초로 크롬 익스텐션을 개발한 akiym과 함께 xrekkusuposix형이 개발에 참여했다. posix형은 스피드핵과 같은 게임 해킹 기능 위주로 많이 만들었고 나머지 분들은 기타 다양한 기능들을 업데이트 했다.

대회 준비를 하던 도중 스피드 핵을 패치하겠단 공지가 나왔고 패치한 버전을 올려주었는데 posix형이 이를 분석하여 스피드 핵 패치를 우회하는 방안을 발견했다. (대회 때 보니 모든 팀이 스피드 핵 패치를 우회하였다.)

근데 또 하나 재밌는 기능을 만들었는데 이는 한 사람이 간 경로를 저장하고 서버에 업로드하면 실시간으로 다른 사람의 화면에도 해당 경로가 표시가 되고 다른 사람이 리플레이를 하게되면 그 경로로 바로 이동한다. 쉽게 말해서 텔레포트 기능이다. (다만 사람이 직접 그려야하기 때문에 수동이다)

일반적으로 스피드핵을 사용해서 이동하면 속도가 너무 빠르면 조작하기 힘들기 때문에 일정 속도를 유지한다. 하지만 리플레이 기능을 사용하면 미리 간 경로에 대해 최대 속도로 이동하도록 설정해버리면 텔레포트와 같은 기능을 만들 수 있는 것이다. 따라서 우린 텔레포트 기능을 만드는 사람들은 모집했고 소통을 위해서 직접 모일 수 있는 한국인들로 구성했다.

대회는 일요일에 진행되었는데 토요일부터 모여서 이틀 간 약 10시간 정도 연습을 했고 연습할 당시 녹화한 영상은 다음과 같다.

https://www.youtube.com/watch?v=hLQpEGt8ftY&feature=youtu.be


두 번째 대회 시작

대회 맵이 주어지고 열어봤는데 예선때 주어진 맵이 조금 더 커져서 기능이 추가된 구조였다. 나는 conductor라는 역할을 맡고 지도를 보고 어느 경로를 경유할 지 그림을 그렸다. 이동을 최소화하는게 좋기 때문에 어디를 먼저 방문하는게 효율적인지를 판단해야했고 게임에 존재하는 다양한 오브젝트와 문제 터미널과 인증 콘솔의 위치, 우리팀이 문제에 푸는 시간 등을 고려해야 했기 때문에 꽤 많이 복잡했다.

대회 당시 그린 그림은 다음과 같다.

image

이 그림을 토대로 포탈을 만드는 사람은 본인이 맡은 구역을 분석해서 동선을 파악하고 포탈을 안정적으로 만들어야한다. 대회가 시작하고 나서도 포탈 작업은 계속 되었고 중간 중간 꼬여서 직접 걸어가야하는 상황도 생기긴 했지만 연습한 만큼 괜찮은 결과가 나왔다. 대회 중후반부에 스코어보드는 다음과 같았다.

1. PPP (6)
2. pasten (6)
3. I Use Bing (6)
4. TFNS (6)

한 문제만 더 풀고 escape를 하면 1등인 상황이었다. 최종 결승전 답게 모든 팀이 박빙이었으나 PPP팀이 먼저 escape에 성공하였고 이때 당시 60분이었다. 그로부터 14분뒤 우리팀이 escape를 성공했고 나머지 팀들은 escape하는데 실패했다.

image

이때까지 했던 대회와 다른 방식이었고 굉장히 재미있었다. 포탈을 만들어준 racrua, jskim, h4ck4s3cur1ty, ddddh, 70ry, ZoRuri, 크롬 익스텐션을 개발한 akiym, xrekkusu, posix 그 외 문제를 열심히 풀어준 나머지 멤버들 모두 너무 열심히 해줬고 좋은 결과를 남기게 되서 뿌듯하다.