2020 사이버 포카전 Retrospective

mspaint로 만듬.

올해도 역시 사이버 이공계 학생 교류전의 해킹 분야 문제 출제 / 운영을 LeaveCat에서 진행을 했다. 포항에서 하면 카-포전 대전에서 하면 포-카전이라고 하는데 코로나 19 여파로 인해 모든게 다 온라인으로 진행되면서 갖게 된 새로운 명칭이다. 바쁜 업무 + 며칠전 부터 있던 몸살 기운으로 문제 출제를 아예 못하게 될 줄 알았지만 운이 좋게도 대회 당일 조금 몸이 괜찮아져서 몇 문제를 낼 수 있게 되었다. 그 중 한 문제는 며칠전 공개된 CVE-2020-1472 (NetLogon aka ZeroLogon) 를 오마주 해서 출제하게 되었다. 대회 중간에 야식 이벤트를 진행했는데 의도치 않게 테트리스 고인물을 만나는 신기한 경험도 했다.

작년 문제는 github을 통해 모두 archiving 해 아래 링크에서 만나볼 수 있다. 올해 문제는 어떻게 할지 아직 모름.

https://github.com/LeaveCat/poka-sciencewar-2019


우리가 운영하기 시작한 첫 해와 두번째 해는 빙고 컨셉의 대회 운영 사이트를 만들어 문제를 해결할 경우 빙고판을 채워넣고 빙고!를 만들면 추가 점수를 획득할 수 있는 방식을 사용했다. 해가 지나갈수록 팀원 대부분이 취업을 하거나 고등교육을 받으러 떠나 개발할 시간이 충분하지 않았기 때문에 CTFd를 사용했다. 작년까지만 해도 vultr / digital ocean을 사용해 한 사람이 모두 dockerizing 된 문제들을 deploy하는 방식이었다. 올해는 팀원 중 한 사람의 aws 계정에 iam (ec2 full access)를 만들고 해당 계정에서 문제를 관리하는 방식을 사용하려고 했지만, 역-시나 대부분이 다른 서버에 deploy 하는 바람에 관리가 조금 힘들었다. 아직 해커들은 클라우드에 친숙하지 않나보다.. 😭

올해 Mic Check, Real Hacker, 0ero Trust Login (0TL) 총 3가지의 문제를 출제했다. 앞에 2개는 어렵지 않게 만들 수 있고 푸는 입장에서도 쉽게 풀 수 있는 문제다. 마지막 0TL 문제는 CVE-2020-1472를 오마주한 문제이다.

Mic Check는 이번 코드게이트 본선에 출제되었던 Mic Check에서 감명 받아 만든 문제이다. CRC32 결과를 주고 flag를 찾아내라는 문제였다. 당연히 4byte 이상일 것이라고 생각한 우리는 4byte 부터 brute-force를 하였지만 답은 안나왔고 결국 MIC, 3글자가 정답이었다. ㅎ.ㅎ MIC 대신 m1c를 사용하였고 flag format을 알려주어 9자리지만 3자리만 brute-force하면 되는 재밌는 문제를 만들었다. shasum 결과까지 제공해 쉽게 풀 수 있도록 하였다.

-C0deG4te-

Real Hacker는 말그대로 진정한 해커가 되자는 의미에서, 공책에 flag를 적은 후 종이를 구긴 다음 찢어서 사진을 찍었다. 작년에는 flag가 중간에 적힌 소설을 프린트한 후 파쇄기에 넣은 결과물을 오프라인에서 제공해주었다. 올해는 온라인으로 진행되어 전달해줄 수 없어 사진으로 제공했다. 정답 풀이는 사진 편집 프로그램을 적절히 사용해.. flag를 조합하면 된다. (실제로 몇천 장의 종이를 파쇄기에 집어넣은 후 결과를 복구하는 대회도 있다.) 잘 복구가 되지 않는 부분은 local 환경에서 brute-force할 수 있게 flag의 hash도 제공했다.

0TL은 Microsoft의 DC 서버에서 발견된 CVSS Score 10점 만점짜리인 CVE-2020-1472의 취약점을 재활용 했다. Root Cuase는 크립토 취약점인데 난이도도 높지 않고 취약점 자체가 cool해서 문제로 바로 만들면 좋겠다는 생각이 들어 제작했다. 해당 CVE에 대한 자세한 설명은 https://www.secura.com/blog/zero-logon 에서 확인할 수 있다. CVE를 토대로 출제된 문제에서 사용하는 Key Exchange Algorithm은 아래와 같다. 원래는 Client에서 IV를 선택할 수 있어 취약점을 손쉽게 트리거할 수 있지만 대회 문제다 보니 의도치 않게 풀리는 것을 방지하기 위해 Server에서 Random IV를 반환해주고 해당 IV를 모두 \x00 * 16로 초기화 할 수 있는 취약점을 넣어두었다.

Key Exchange Algorithm

CFB16을 간단하게 설명하자면 아래와 같다. feed back operation인데 iv와 plain을 합친 후 첫 16바이트 data[:16] 의 ecb encryption의 결과 값의 첫 바이트와 data[16]을 xor한 후 다시 data[1:17]을 ecb encryption 한 후 data[17]과 xor을 반복적으로 해 총 16바이트가 모두 xor 된 다음 결과를 반환한다. (Microsoft는 CFB8을 사용한다.)

cfb16 operation

이 때 발생할 수 있는 취약점은 만약 IV가 모두 \x00고 Plain 또한 모두 \x00일 경우 1/256의 확률로 계속해서 aes_ecb(\x00 * 16)을 하는 경우가 생길 수 있다. (특정 key에 따라 \x00 * 16의 암호화 된 결과의 첫 바이트가 다시 \x00이 반환된다면..) IV를 모두 \x00로 만들기 위해 취약점을 2가지 만들어 두었다. 하나는 session key를 만드는 함수에서 인자로 받은 iv를 strncpy를 이용해 복사하기 때문에 첫 바이트가 \x00라면 realIv는 모두 \x00가 된다. 이를 이용해 결과 값도 모두 \x00가 되는 경우를 만들 수 있다. 하지만 서버에서 IV를 랜덤하게 만들어 반환하기 때문에 Random IV의 첫 바이트가 \x00가 되는 확률과 ecb encrypt된 결과의 첫 바이트가 \x00이 되는 확률을 곱해야 하기 때문에 매우 많은 brute-force가 필요하다. 서버를 대상으로 하는 공격이라 문제를 solve하는데 너무 많은 시간이 들 것 같아서 추가적인 취약점을 만들어뒀다.

IV를 생성한 후 username을 입력 받는데 스택 프레임을 보면 username 뒤에 iv가 있어 “admin” + “\x00” * 11을 입력으로 주게 되면 off-by-one으로 인해 IV의 첫 바이트가 \x00로 덮이게 된다. 이를 통해 2바이트의 확률을 1바이트로 줄일 수 있게 된다.

/*
-0000000000000208 username        xmmword ?
-00000000000001F8 iv              xmmword ?
*/

// function: main

/*
lea     r12, [rsp+2E8h+username]
call    sub_1190
lea     rsi, aUsername  ; "username >> "
mov     edi, 1
xor     eax, eax
call    printf
mov     rsi, r12
lea     rdi, a16s       ; "%16s"
xor     eax, eax
call    scanf
*/

// function: make Session Key
strncpy_0(&realIv, iv, 16LL);

아쉽게도 이를 해결한 KAIST는 서버에 2바이트 brute-force하는 방식으로 문제를 해결했다. 중간에 Rate-Limit을 추가하려고 했으나 졸려서 그냥 잤다. ㅋ

서버 아파요 ㅜㅜㅜ
자고 일어났더니 풀려있어 기분이 좋았다 ㅎ.ㅎ

Solver는 https://gist.github.com/junorouse/831e5b8774104922705972d80d676ee4 여기에 올려두었다.


총 4번의 운영을 통해 배운점도 많고 어린 나이에 대회를 운영해 볼 수 있는 경험을 주었다는 것은 매우 행운이었다. 이제는 이런 경험을 성장하고 있는 다른 팀들도 겪어볼 수 있게 이제는 다른 팀에게 운영을 넘겨줄 때가 되지 않았나 싶다. (Dreamhack ?)

이미지: 사람 6명, 임준오님 포함, 웃고 있음, 서 있는 사람들
이랬던 사람들이,ㅡ,

Defcon (26+27) CTF

기적같은 1년여간의 드래프트를 끝내고 defcon 27과 함께 올리는 후기인 것이다.

Defcon 26

짜잔! 데프콘 26 후기다. 원래 시간상 스페인 다녀온 여행기를 먼저 쓰려고 했지만, 게으름의 정점을 찍고 있는 나에게는 무리였다. 이번에 미국가서 LA는 못 갔다왔지만.. 고든램지 식당 3개 별 찍고, 총도 쏘고 여러가지 재밌는 액티비티를 한듯!

올해는 legitbs가 아니라 OOO가 운영을 했다. 컨셉 자체가 뭔가 중2병 걸린 것 같았는데 운영도 역시 그랬다! 그래서 대회중에 있었던 에피소드와 간단한 라이트업을 작성 할 것이다!!

우선 카테고리는 아래와 같다. Attack/Defense는 취약점 찾아서 팀들(23팀) 익스하고 패치해서 방어하는거다. KingOfTheHill은 없었던 카테고리인데, 짧은 길이도 쉘코드 짜기, 스테이지 더 많이 깨기등.. seccon 본선에서 나오는거라고 한다. (안가봐서 모름)

볼드 처리된게 우리가 풀어서 점수를 먹은 것이고 주황색문제들을 라이트업을 쓰겠다.

Attack / Defense

  • pointless
  • twoplustwo
  • pool
  • oooeditor
  • bew
  • vchat
  • reeducation

KingOfTheHill

  • reverse
  • doublethink
  • propaganda

reverse

가장 처음 나온 문제다! KingOfTheHIll 문제였고 (디스)어셈블 해서 빈칸에 해당하는 인스트럭션 혹은 “??”로 되어있는 옵코드를 맞추면 된다.

unknown.png (523×332)

위 사진은 LEVEL 3까지 넘어와 옵코드를 맞추는 문제다. LEVEL 1, 2는 옵코드에 해당하는 인스트럭션을 맞추면 되는 문제였는데 급하게 해서 사진이 없다.

LEVEL 1, 2풀때 옆에 어셈블된 헥스 값 있는 지 모르고 머리로 대충 게싱해서 점수 올렸다.
e.g.) rdx, rsi 순으로 레지스터 설정한 후 빈칸 있고 call하면 rdi 셋하는 거 선택… 이런식으로 초반에 빈집털이에 성공했다.

Screen Shot 2018-08-16 at 1.10.47 AM.jpg

이후에 스크립트를 아주 잘짠,, 고수 형님들에게 처참하게 털렸다. (PPP, DEFKOR00T, Sauercloud, 등..)

pointless

내 기억상 가장 처음 나온 어택 디펜스 문제다. 첫날 대회장에선 reverse 코드 짜고 있었기도 했고, 손도 못대고 있다가 호텔가서 풀었다. 그런 이유는 여러가지가 있었는데,,

  1. mips 어셈 처음봄
  2. 대회장 너무 추움
  3. 우리 테이블 앞에 큰 스피커 있는데 자꾸 이상한 소리나오는 영상 틀어줌

위 3가지 이유 덕분에 멀미 나서 토할 것 같았다 리얼루.. 아무튼 분석하면 매우 간단한? 프로그램인데..

  1. DH를 4겹으로 한 후(RSA -> AES -> AES -> AES) 메뉴에 접근할 수 있다.
  2. 메뉴에 memcpy stack overflow를 발생시키는 함수가 있고 stack leak도 가능하다.
  3. NX가 없기에 offset 맞춰준 후 스택으로 점프하면 된다.

이제 여기서 부터 문제가 발생했다. 딱 1일차 밤에 완성시키고 2일차에 싱글벙글 하며 갔는데, 본선장에 도착하니 네트워크가 DoS 맞고 있었나,, 뭐래나.. 연결이 좀 왔다갔다 하니깐 끊기는 거다.. 결국 이건 나중에 가서 고쳐졌는데 똑같이 거의 안됐다. 그래서 OOO도  서비스 완전히 내려버렸다 ^___^ 화나고 이해가 안되는건 서비스 완전히 내려버리기 전에 잠깐 maintenance 하는 시간이 있었는데 이때 서비스가 KingOfTheHill 1문제와 Attack/Defense(pointless/풀리지 않은 문제)가 있었음에도 KingOfTheHill 라운드는 계속 올라가며 점수를 주고 있었다는 것이다. 이에 대한 어떠한 보상 및 사과는 이루어지지 않았다!!!!!!!!!! (ㅠㅠ)

~~bew~~

2019년 08월 14일. 기억이 안난다. zz
머 이상한 웹 익스였던걸로 기억. nodejs

~~pool~~

2019년 08월 14일. 기억이 안난다. zz
코인빼오는 거였나?

Defcon 27

올해는 민교랑 익스플로잇 프레임워크 개발에 좀 많은 시간을 썼다. 조만간 오픈소스를 통해 공개할 예정이다. 사실 다른 빌리지 CTF를 통해 블랙뱃지를 얻어보려고 했지만, 테이블에 앉고 정신차리니 밤이라 실패했다고 한다 ㅠ_ㅠ. 작년에 가고싶었던 LA 여행은 성공적으로 했다고 한다. 지금 보스턴 가는 비행기 기다리면서 작성하고 있다.

telooogram

총 취약점 3개인 것 같은 2개가 있었다.

익스플로잇은 상대방의 avatar를 요청하는 기능으로 했다. file path를 전달하게 되는데 flag 를 넣게되면 플래그를 읽어서 해당 유저에게 보낸다.

두번째는 음성통화 기능에 존재하는 overflow다. 익스가 어려워 보여서 손절했다.

세번째는 unsafe한 deserialization을 하는데 이걸로 익스 어떻게 하는지 모르겠어서 손절했다.

아이폰 시뮬레이터 (홍보 차원에서?) 사용한 것 같았는데, 메세지를 폴링하는 방식이라 flag가 아닌 cred를 뺀 후 타 서버에서 (심지어 메시지 서버가 외부 접근이 되었음) 0.1초마다 크롤해주면 아무도 익스를 못하는 DoS 공격이 되어버린다.

어느 시점이후로 플래그가 몇개 안오길래 열심히 새로고침 시켜줬다 ㅋㅋ

aoool

태양이가 열심히 파서를 분석했다. 첫날만 열심히 하고 침대에서 뒹굴 메타를 시전해버렸기 때문에 안하다가 ELF 바이너리 인것 보고 잠깐 하기로 했다. 익스플로잇을 하나 작성해갔지만 정상적으로 작동이 되지 않고 계속해서 공격받고 있었다. 띵킹을 좀 하다가 ELF니깐 셀프바이너리 패치를 하고나서 uploads폴더에 올라간 익스플로잇을 빼오자는 생각을 했다. JUNO를 입력하면 쉘을 띄워주고 그 외엔 모두 정상 path를 타게해서 SLA 체크를 통과시켰다. 그 후 익스빼서 잘 돌렸다 슝슝

jtaste

셋째날 역시 침대에서 뒹굴대고 있었는데 다훈이형의 채찍질로 일어나서 풀었다. 이상하게 내 컴퓨터가 라우팅 설정이 잘못되어 있어가지구 VPN을 붙어도 접속이 안되었다. 그래서 코드만 보고 테스트 없이 익스플로잇을 작성했는데 바로 되었다고 한다. 그렇게 퍼스트블러드를 ~~~~~~~~~ ~! ~! ~! ~!~~!

P.S.

내년에는 ㅡ블랙뱃지를 받을 수 있도록 다른 전략을 세워봐야겠다. (i.e. 빌리지로 도망zz)

건강한 보안 생태계 발전을 위해

트위터에서 워게임의 Write-Up 공유를 막은게 뉴비의 진입장벽을 높였는가?  라는 말이 나와 이것에 대해 이야기를 해보려고 한다. 내 생각이 옳은 것 만은 아니기 때문에 다양한 의견이 오갈 수 있으면 좋겠다. 밤새고 쓴 글이라 두서가 없고 글의 내용이 이해가 되지 않을 수 있습니다.

우선 보안/해킹 분야의 진입장벽은 높다. 아니, 높을 수 밖에 없는게 사실이다. 절대 자료가 부족해서가 아니다. 방대한 CS 기초 지식들을 바탕으로 어플리케이션 레벨에서 문제가 발생해 취약점이 생기는 것이기 때문이다. 심지어 최근들어 CTF에 하드웨어/수학과 관련된 지식을 요구하는 문제들도 나온다. 그래서 뉴비들이 힘겨워 하는게 당연하다. 다만 우리가 공부하면서 겪었던 시행 착오들을 줄일 수 있게 도와주는게 맞지 않을까. 옛날에 아무것도 없는 상태에서 해킹했던 사람들이 정리해둔 것을 보며 도움을 받았던 것 처럼.

Screen Shot 2018-11-07 at 5.22.57 AM

문제를 풀때 가장 풀이가 보고 싶어질 때는 코드를 보고 보아도 아무것도 생각나지도 뭘 해야할지도 모르겠을때다. 하지만 대부분의 경우는 CS 베이스 지식들을 무시하고 문제를 풀게 해달라!! 하는 것이라 그렇다. 이건 당연하게도 도둑놈 심보라고 생각된다. 무언가 문제를 풀 때 도저히 갈피가 안잡히면 문제에 나온 함수들이나 코드들이 한줄 한줄 실제로 어떻게 동작하는지, 기능을 다르게 구현할 수 있을텐데 왜 이런 로직을 썼는지, a부터 z까지 완벽하게 알아볼 필요가 있다. 만약 그래도 모르겠다면 낮은 난이도의 문제를 찾아 풀어보는게 어떨까.

출제자가 풀이 공유를 금지시킨 이유는 “출제자가 생각못한 의도치 않은 풀이를 얻기 위함” 인 것 같다. 당연하게도 해당 문제에 대한 풀이를 한번 본 사람은 생각을 편협적으로 할 수 밖에 없다. CTF를 풀 때도 안풀리는 문제를 다른 팀원에게 받으면 일부만 알려달라고 한다. 그 사람 생각을 그대로 받고 다시 분석하게 되면 그냥 그 팀원 생각대로 분석할 뿐이다. 그럼 문제를 못 푼다. 따라서 챌린징한 워게임 문제에 대해선 풀이 공유를 금지하는게 합당하다.

문제 풀이자 입장에서 보았을 때도 흔히 말하는 “삽질”을 통해 배우는게 엄청 많다. 기본적으로 삽질은 내가 모르는 부분을 하기 때문에, 강제로 학습 당해버린다. 뭐 다른 관점에서 보면 가성비가 안좋다고 느낄 수 있지만 난 문제 풀이 과정의 일부분이라 생각한다.

물론 내가 그 문제를 풀었을땐 다른 사람들이 어떻게 풀었는지 알 권리는 줘야한다. (pwnable.kr, pwnable.tw)는 문제를 풀면  다른 사람 풀이를 확인할 수 있다. 그렇게 해서 많은 방법들이 나왔을 때 삽질했던 시행 착오들을 모아서 how2heap처럼 정리하면 아주 좋을 것이다. 다만 이런 시행착오들을 아무런 댓가 없이 습득해버리게 되면 결국 잡기술만 늘게 된다. 잡기술이 되는 근본적인 원인을 찾고 이해해야 다른거에도 적용을 시킬텐데, 대부분의 사람들은 그렇지 않는다. 기초 과학은 중요시 하면서 왜 CS를 깡그리 무시한체 문제 푸는거에만 집중을 할까..

트위터에서 이슈가 됐던건 pwnable.kr의 풀이 공유 금지 룰 때문이다. 한가지 집고 넘어가야 할것이 나는 절대 pwnable.kr이 뉴비를 위한 입문용 워게임이라고 생각하지 않는다. CS 및 해킹의 기초 지식, 즉 베이스가 탄탄한 상태에서 다양한 시각을 가져야만 풀 수 있게 의도된 문제들이 많다. 그러니깐 제발 ftz, lob, overthewire로 무얼 원하는건지 좀 알고 시작했으면 좋겠다 !! 찾아보니 요즘은 pwnable.kr 라이트업도 공개로 많이 올라와 있다. 심지어 유튜브 영상도 있다. (https://www.youtube.com/watch?v=rcnnyJW8qXo)

예전보다는 뉴비들이 입문용으로 배울 수 있는 레퍼런스들은 매우 많이 생겼다. 다만 그 자료들의 수준이 매우 얕고 강의가 시작은 하지만 끝나는 경우가 없다.

그럼 왜 사람들은 자신이 겪었던 시행 착오를 모아둔 “제대로된 정보“를 공유하거나 로드맵을 그려줄 무언가를 만들지 않는가? 난 여기에 몇가지 이유가 있다고 생각한다.

첫째, 금전적인 이익으로 귀결되기 때문이다. 금융공학이 학문적으로 발전할 수 없는 가장 큰 이유는 간단하다. 학문적으로 발전 시킬 무언가는 곧 바로 금전적인 이익으로 귀결되기 때문에 논문을 내거나 하지 않는다. (논문을 내는 순간 모든 사람이 정보를 알기 때문) 보안도 마찬가지이다. 뉴비들을 위한 스텝 바이 스텝은 기업 강의 자료로 만들어 진다. 보안을 취미로 하지 않는 이상 남들에게 떠먹여 주는 자료를 만들며 봉사하긴 힘들다.

둘째, 한국 사회의 교육 및 평가 체계 문제라고 생각한다. 눈에 보이는것만 인정해주는 그런 문화, 팀 대회를 우승 했어도 하나의 문제를 풀 때 얼마나 많은 컨트리뷰션을 했느냐 보다는 그냥 몇 문제를 더 풀었냐로 외부 에서 평가를 하다보니 내부에서도 경쟁이 생길 수 밖에 없다. 청소년 시절, 즉 불과 1-2년전만 해도 이런거에 엄청 신경썼다. 그때는 1-2년의 결과가 인생의 전부라고 생각했기 때문. 그러다 보니 팀 내부에서도 경쟁을 할 수 밖에 없다. 함께 하면 더 빨리 풀 문제를 2N+a 보다 더 많은 시간을 쏟았다. 뭐 하튼 자기들 끼리도 경쟁하는데 뉴비에게 신경 쓸 여유가 있나.

 셋째, 잡지식으로 이루어진 상태라 트렌드를 따라가지 못하거나 잠깐 여유를 가지면 실력의 갭이 엄청나게 난다. 나를 포함해서 (ㅠㅠ) 기초가 제대로 되어있지 않은 상태에서 얻은 잡지식을 바탕으로 문제를 풀다보니 새로 나온 기술들이나 트렌드를 빠르게 읽지 못하면 CTF 씬에서 살아남기 힘들다. 뉴비를 챙겨줄 만한 여유가 없지 않나 싶다. 나중에 여유가 생겼다고 해도 대박친 ICO 대표들 처럼 놀고 먹을 가능성이 농후하기 때문.

그렇다면 단순히 모든 문제에 대한 라이트업을 공개한다고 해서 해결될 문제인가? 나는 아니라고 생각한다. 일단 라이트업들이 뉴비들에게 친절하지 않을 뿐더러 문제 풀이자도 뉴비를 대상으로 라이트업을 쓰지 않는 경우가 많다. 그럼 결국 원론적인 이유를 이해하지 못하고 그냥 이렇게 이렇게 해서 이렇게 되는구나... 하고 마는 경우가 많다. 그러니까 결국 뉴비들을 위해 계단을 놓아줄 무언가가 필요하다. 그게 교육 솔루션이 되었든, 오픈 커뮤니티가 되었든 반드시 뭔가 하나는 필요하다.

그럼 라이트업이나 로드맵 처럼 뉴비들도 알아먹을 수 있게 문서를 잘 써서 공개하면 어떤 일이 일어날까?  how2heap을 살펴보면 몇 년동안 자신들 만의 리그에서 공유되던 ptmalloc exploit 기법들이 한번에 공개되었다. 이를 통해 많은 사람들이 힙 익스플로잇에 익숙해졌고, “평균적으로” ptmalloc 구조를 이해하려고 하는 사람들이 많아졌다. 그 사람들에 의해서 새로운 힙 익스플로잇 테크닉도 많이 발견 되었다.

궁극적으로 계단을 놓아줄 수 있는 상황이 온다면 보안하는 사람들이 많아질테고 그러면 어중이 떠중이들이 없어져 각 개인이 먹을 수 있는 파이의 조각이 많아질 것이다. (난 절대 이 분야가 파이가 작다고 생각하지 않는다. 다만 개인의 실력에 따라 먹을 수 있는 파이 조각의 갯수에 리밋이 있을 뿐.) 또 실력 자체가 상향 평준화 돼서 좀 더 건강한 보안 생태계가 될 듯 하다.

 이런 상황이 오기 전까지는 제발 질문좀 했으면 좋겠다. 우리나라 사람들 종특인지 모르겠지만 발표 끝나고 질문을 부탁할 때 안하고 꼭 끝나고 와서 개인적으로 물어보더라. 모르는게 부끄러운게 아니라고 생각한다. 해커들이 사이코패스도 아니고 물어보는데 “화이팅 ^^7” 이런 사람들은 없다..

Screen Shot 2018-11-07 at 12.00.52 PM.PNG
챌린징한 문제들. 물어보면 잘 알려줍니다.

마지막으로 코딩 교육에 돈 쏟아 붓는 만큼 보안 교육에 돈 좀 잘 썼으면 좋겠다. 막 이상한거 만들지 말고.. 본질적인걸 보고 뭐가 필요 한지 찾아야 하는데 자기들 성과내기 급급하니깐 ㅋㅋ 이상한 대회 만들고 ㅎㅁㅎ

Screen Shot 2018-11-07 at 12.45.41 PM
현실

 

이다훈, 김용진, 이태양, 김낙현과 함께 나눈 의견을 바탕으로 작성 되었습니다.
감사합니당.
글에 나온 제 의견은 제가 속한 조직과 위 분들을 대표하는게 아닌 개인적인 생각입니다.

CSAW 2016 Final 참가후기

csaw(cyber security awareness week)

11월 8일부터 11월 15일까지 CSAW Final에 참가했었다. 중앙 아시아를 제외하고 아시아 지역은 원래 본선 참가 대상이 아니였다. 올해부터 CSAW가 글로벌하게 확장됨에 따라 뉴욕대 포탈캠퍼스가 있는 아부다비와 인도에서 열리게 되었다. 우리는 아부다비 뉴욕대에 초청받아서 참가하게 되었다.

아침에 씻고있는데 태양이가 메일하나가 왔다고 했다. 확인해보니 본선참가를 하라는 내용이었다. 놀라며 다시 사이트에 들어갔다. 그 어느곳에서도 아시아 지역은 참가대상이라는 부분이 없었다. 그래서 어떻게 된거냐고 답 메일을 보냈다. 그랬더니 “일단 너희 개인정보좀 보내줘바” 식의 답변을 받았다. 나중에 대회 끝나고 얘기했던건데 처음에 우리가 스팸메일이나 phd메일 해킹당한건줄알고 놀랐었다고 했더니 웃었다. 알겠다고 하면서 개인정보를 싹 보냈더니 운영위원회의 선택을 기다리랜다. 이건 또 무슨 경우인가 하고 있었는데 뭐 어찌됬건 가게 되었다.

참가 조건이 Guest Team이었기 때문에 상은 받을 수 없었다. 그렇지만 많은 도움이 되었던것 같다.

뉴욕대정문

갈때, 올때 모두 밤비행기 예매를 부탁했기 때문에 잠자면서 비행을 할 수 있었다. 에어버스 A380이라 무척 크고 화장실도 많아서 편했다. 승무원 누나들은 언제나 이쁘다. 기내식은 뭘먹었는지 기억이 안난다. 깨우면 먹고 다시 자기를 몇번 반복하니 두바이에 도착했다.

도착해서 환전과 선불유심을 구매했다. 선불유심을 구매하면서 너무 많은 시간을 썻기 때문에 하마터면 예약된 택시를 놓칠뻔 했다. 두바이 공항에서 아부다비에 있는 뉴욕대까지 대략 한국돈으로 6만원이 나오니 놓쳤다면 그 돈을 꽁으로 날릴뻔 하였다. 우리를 나두고 가기 2분전에 픽업을 했으니 참 다행이다.

아랍에미리트가 사막지대라 워낙 더운 나라인데 우리는 겨울에 갔기 때문에 덜 더웠다. 그리고 실내는 겨울이었다. 오일머니의 힘일까. 건물의 문을 열면 온도차때문에 바람이 분다.

Welcome Center라는곳에 내려줬다. 그곳에서 시큐리티 가드가 인적사항을 체크한 후 방키와 음식을 먹을 수 있는 식권을 줬다. 식권이 무려 만원짜리였다. 아침부터 엄청나게 많은 음식을 먹을 수 있었다.

우선 방은 쾌적하고 좋았다. 룸클린을 해준다고 했지만 안해줘서 좀 힘들었긴 했지만 뜨거운물도 잘나오고 기숙사가 아닌것 같았다. 아니 진짜 기숙사가 아닌것 같았다. 학교내의 교직원들의 아파트가 있기때문인지, 유명한 디자이너가 학교를 디자인 했기 때문인지는 몰라도 건물들이 마치 고급주택단지를 연상케했다. 엘레베이터 버튼을 누르면 뾱뾱 소리가 났는데 듣기 좋았다. 내 침대에 누우면 마리나베이처럼 생기는 건물과 멋있는 건물들이 눈에 들어왔는데 이곳에 다시 오고 싶어질 만큼 아름다웠다. 여행을 하면서 택시 기사님한테 물어봤는데 같은 마리나베이라고 한다. 싱가폴에 있는 마리나베이와 같은거라고..

창문

이곳 학생들은 아이디 카드를 긁고 밥을먹었는데 뭐 아마 장학금인거 같다. 이것도 나중에 택시기사분이 알려줬는데 아부다비에 있는 뉴욕대 포탈캠퍼스는 전액 장학금이라고 한다. 따로 먹을 간식비랑 그런것들만 준비하면 된다고 한다. 하지만 물가가 엄청나기 때문에 간식비도 만만치 않다. 이상하게 콜라같은 음료는 한국보다 저렴했다. 다른것들 예를들어 채소 같은경우는 대략 한국의 3배라고 생각하면 될거같다. 밥을 진짜 잘먹었다. 인터넷에서만 보던 구글, 애플과 같은 회사들에서 배급하는 방식으로 먹었는데 주문하는 즉시 조리되고 양파를 더넣어달라는둥 치즈를 한장더 넣어달라는둥의 커스터마이징이 가능하다. 맛도 역시 선린과는 다르게 진짜 맛있다. 나중에 가서 깨달은건데 학식이 젤 맛있었다. 밖에 나가서 사먹으니 비싸기만하고 맛도없고 조리시간도 오래걸렸다. 쉑쉑버거를 먹었는데 10만원이 나왔다. 처음에 아무거나 먹다가 비로소 마지막날이 되서야 비프 스테이크가 젤 맛있다는걸 깨달았다. 아직 연어 스테이크를 먹어보진 못했는데, CTF 결과 덕분에 내년 여름에 펠로우쉽을 받을 수 있어 또 올 수 있는데 그떄 먹고야 말겠다.

학교내의 시설은 디미고같았다. 디미고 대회 시상식때 학교탐방을 시켜줬는데 잔디구장있고 스쿼시코트있고 체육시설있고 당구장있고 뭐 등등. 여기도 마찬가지였다. 다만 축구장이 돔형태로 따로 있었고 농구, 배드민턴, 축구, 태권도, 수영 등등의 액티비티를 학생들 스스로 팀을 짜서 하는거 같았다. CS쪽 학생들도 운동을 많이 하는거 같은데 한국도 이런 문화가 들어왔으면 좋겠다. 밤새 컴퓨터하고 그러다보니 몸이 힘들어지는걸 매번 느낀다. NYU Falcons였나 하여튼 그렇게 불린다. 아 참고로 학교 시설은 학생뿐만아니라 교직원 그리고 교직원 가족분들도 사용할 수 있는거 같았다. 가끔가다 유모차도 보인다. 우리가 젤 많이 사용했던 곳은 탁구대랑 포켓볼대 그리고 각종 게임머신들이 있는곳이었다. 이곳에서 처음 Windows의 3D핀볼을 실물로 볼 수 있었다. 게임인줄만 알았는데 실제로 작동되는걸 보니 신기할 노름이었다. 대회 중간중간이나 할거없을떄마다 와서 여기서 놀았다. 밤에 잠안올때 학교 구경하러 다녔는데 시설들이 엄청 좋다. 아 그리고 도서관을 가보고싶었는데 못가봤다. 책이 엄청 많아보였고 분위기가 좋았다.

탁구

CTF 본선 전에 Security Quiz라는 작은 이벤트같은 게임을 하였다. 뭐 ㅋㅋ 처음엔 우리가 이것도 1등할줄 알았다. 그런데 문화도 다르고 배우는게 다르다보니 중간에 포기하고야 말았다. 스피드퀴즈 형태였는데, 전부 영어로 나왔다. 미국 법이라든지 포렌식 순서, 사이버 윤리, 보안 이슈등의 문제가 나왔다. 딱 들었을때 한국말로 뭔지는 알겠고 그런데 이걸 영어로 쓸줄몰라서 답을 못적었다. 스피드 퀴즈 특성상 생각을 정리하기도 힘들었다. 답안들은 정보통신망법 뭐 이런것들이었다.

그리고 두바이, 아부다비에서 공부하고있는 한국 학생들도 만났다. 외지에서 같은 민족을 보니 기분이 설렜다. high school forensic challenge본선으로 온거라는데 우리가 CTF본선 왔다니 신기해 하면서 칭찬도 많이 해줬다. 나중에 연락하라면서 FB account를 공유했다.

본선날 아침에 늦었다. 매번그렇다. 서로 코리안타임을 알려주자, 코리안타임 문화를 세계로 미래로 퍼뜨리자면서 허겁지겁 갔다. 갔더니 대회 셋팅문제로 어짜피 조금 늦게 시작했다. 베트남의 ISITDTU팀도 게스트팀으로 참가했다. 재밌는 문제들이 많이 나왔다. dcua2팀에 선두를 두번뺏기고 계속 1등을 했다. 한문제에 대해서 이야기를 하고싶다.

일주일 밖에 안지났는데 문제이름이 기억이 안난다. 나이가 먹었나보다. 두개의 스테이지가 있던 웹문제 였다. 취약점도 간단했다. exploit을 하려고 하는데 소스코드에 주어진 포트로는 열린 서버가 하나도 없었다. 그런데 갑자기 문제가 수정됬다고 한다. 받았는데 똑같았다. 한 4번 이랬나, 갑자기 포트가 열렸다. 그런데 회원가입을 하니 500에러가 났다. 디비 권한쪽 서버 설정 오류 같은데 로컬에선 잘만 됬다. (flask로 짜여진 웹서버고 sqlite3 씀) 500에러난다고 그러니깐 메일 답장이 딱 3글자 왔다. “???” 물음표 세글자 왔다. 진짜. 하여튼 그러다가 레프리한테도 자꾸 안된다고 그랬더니 알겠다고 했다. 문제 코드가 또 교체됬다그런다. 디핑해보니 파일 하나가 더생겼다. db.sqlite3가 생겼다. 열어보니 users의 기본 유저가 있었따. 해쉬크랙을 하고 로그인을 하니 안된다. 기다렸다. 문제코드가 또 변경됬다. db.sqlite3이 없어졌다. 마찬가지로 회원가입이 또 안됬다. 문제코드가 다시 교체됬다. 이제는 전부 다 괜찮아졌다고 한다. 안된다. 대회 40분 남기고 문제가 사라졌다. 32시간을 버렸다.

답장

대회는 1등했다. 전체 지역은 4등이었나 그랬는데 MENA지역에서는 1등했다. 더욱더 열심히 하고픈 욕구가 생겼다. 준우형이랑 태양이 용진이형이 다 잘해줘서 1등할 수 있었던것 같았다. 게스트팀이었기에 시상식때 우리 이름은 나오지 않았다. 이렇게 끝나 아쉽구나 하고 있었는데 갑자기 불러줬다. 대학생도아니고 고등학생이 1등했다면서 앞으로 나오라고 했다. 떨렸다. 끝나고 뉴욕대 사이버시큐리티 클럽 회장이 와서 교류하자고 명함을 줬다. 레이어세븐이라고 하면서 이메일 주겠다고 했다.

앙

많은 사람들을 만날 수 있어 좋은 기회였다. 내 인생에 다시 이런 기회가 찾아 올 수 있을까 하는 생각이 들기도 한다. 식당가면서 안에 강의하는걸 몇번 봤는데 이런곳에서 공부할 수 있다면 엄청 좋을거 같다는 생각이 들었다. 주최측에서도 많이 신경써주시고 배려해주셔서 감사했다. 다음년도 부터는 아시아와 유럽까지 진출자격을 확대한다고 한다. 우리 팀이 본선에 올라왔던게 가장큰 이유라고 한다. 조금더 열심히 해서 다른 외국대회도 좋은성적을 낼 수 있으면 좋겠다.

hehe