티스토리 뷰
0. 트위터에서 CTF 대회와 그 커뮤니티 규칙(?)에 대한 토론이 활발하게 일어나고 있어서 저도 이것에 대해 이야기를 해보려고 합니다. 저는 CTF와 관련된 어떠한 커뮤니티에도 속해 있지 않으며, 멘토와 같은 선생님 없이 혼자서 독학으로 공부하고 있습니다. pwnable.kr 문제만 2달 내내 팠고, 지금은 53등에 있네요. 저는 CTF 커뮤니티를 단 하나도 모르기 때문에 글에서는 주로 PS 커뮤니티의 이야기를 할 것입니다.
저는 CTF 커뮤니티가 변하는 것을 간절히 여기진 않습니다. 보안을 취미로 하고 있고, 보안 실력 뒤쳐진다고 먹고 살 걱정을 하지도 않습니다. 대회도 딱히 잘하고 싶은 마음은 없어서 커뮤니티에 속할 의무도 없습니다. (대회는 팀으로 이뤄지다보니 어떤 그룹에 소속되어있는 것이 중요한 것 같습니다.) 하지만 주변에 CTF를 시작하려는 사람들이 전부 나가떨어지는 걸 보면 마음이 아픕니다. 공부를 할 수 있는 방법을 찾을 수가 없다보니 시작을 할 수가 없습니다. 그래서 바뀌었으면 좋겠다고 생각하는 것이 아닐까 싶습니다.
1. CS 전공자가 학부 대부분의 수업을 들어도 사전지식만으로도 진입하기 힘든 것이 CTF입니다. 학부 CS 심화내용은 대부분 CTF랑은 전혀 상관없는 내용이 대부분입니다. 알고리즘이 CS의 한 분야이듯, 보안도 CS의 한 분야일 뿐입니다. 그래서 고려대 사이버국방학과?와 같은 특별한 학부가 아니라면 CS를 전부 들어도 CTF를 위해 공부해야 하는 내용은 산더미처럼 많을 것입니다. 때문에 CTF를 공부하기 위해서는 학부 공부 이외의 시간을 할애해야 합니다.
PS는 CS 학부에 포함되어있는 알고리즘이라는 과목을 기초로 하고, 수업에서 배우는 기초지식만으로도 시작하는 것에 무리가 없습니다. 하지만 CTF의 기초지식 중 CS에서 배우는 내용은 극히 일부고, CS 외의 내용을 배우기 시작해야 비로소 시작할 수 있습니다. 예를 들어, CTF에서 사용하는 도구들이나 SQL Injection과 php의 동작 원리 등이 여기에 해당될 것입니다.
CTF 커뮤니티에서 말하는 대로 인터넷에 공개되어있는 사전지식 관련 자료가 부족하지는 않을 것입니다. 하지만 초보자에게 필요한 것은 사전지식 자료가 아닙니다. 자신이 모르는 것 체크리스트, 사전지식을 모아놓은 사이트나 내용, 그리고 질문하고 답변할 수 있는 사람이 필요합니다. 널리 흩어져있어 완벽한 키워드를 알아야만 찾을 수 있는 사전지식 자료는 딱히 도움이 되지 않습니다.
이것이 제가 생각하는 뉴비의 진입장벽입니다. 전 Writeup을 공개하지 않는 것에는 이유를 불문하고 반대하지는 않지만, 뉴비에게 느껴지는 진입장벽이 너무 크다 보니 Writeup이라도 공개하라는 발언이 나온 것으로 이해하고 있습니다.
2. 저는 PS 커뮤니티가 뉴비에게 친절한 이유로 PS를 하는 사람은 모두 친구라고 생각하기 때문이 아닐까 생각합니다. 자신과 같은 취미를 가진 사람과는 쉽게 친해지는 것과 비슷합니다. 그리고 친한 사람끼리 서로 도와주는 것은 딱히 신기한 일이 아닙니다.
PS 커뮤니티가 왜 이런 모습으로 바뀌었는지는 제가 알기 어려운 것 같습니다. 너무 많은 변수가 있었고, 한두 가지 이유만으로 설명할 수 있는 현상이 아닙니다. 하지만 확실한 것은 많은 사람들의 노력이 있었고, 커뮤니티를 바꿀 수 있는 힘이 있는 고인물들이 이런 모습을 더 선호하기 때문이겠죠.
3. ICPC는 3인팀 대회입니다. CTF와 같이 인원수 제한 없는 대회랑은 달리 인원수가 적고 고정되어 있기 때문에 결과가 그 어떤 것보다도 우선시됩니다. 제가 속한 팀의 전략은 제가 쓴 글에 있습니다. 이 전략은 개인이 낸 성과를 알아볼 수 없으며, 3명 중 한 명의 존재감이 없어지듯 말려버려도 팀 성과는 뒤처지지 않는 형태입니다. ICPC만 해온 저에게는 CTF에서 팀 성과보다 개인 성과를 우선시하는 경우가 있다는 것이 신기했습니다.
“그 사람 생각을 그대로 받고 다시 분석하게 되면 그냥 그 팀원 생각대로 분석할 뿐이다.”는 PS에서도 매우 중요한 말입니다. (두 번 말하지만, 매우 중요합니다.) 하지만 그것은 커뮤니케이션 문제이지, 연습할 때 풀이를 보고 마는 것의 문제가 아닙니다. 풀이 공개 관련해서는 뒤에 더 말해보고, 대회 얘기를 조금 더 해보겠습니다.
ICPC를 하다보면 풀리지 않는 문제를 팀원과 상의해야 할 때가 있습니다. (저는 팀 전략 때문에 이런 일이 특히나 더 많았던 것 같습니다.) 문제 고찰을 전달하는 쪽은 논리적인 이유를 같이 전달하고, 부정확한 것은 부정확하다고 확실하게 말해야 합니다. 자존심 세우겠다고 틀릴 수 있는 말을 맞는 것처럼 말하면 큰일납니다. 저도 연습 초기에는 이런 적이 있던 것 같습니다. 전달받는 쪽은 논리적으로 엄밀한지, 내용에 이상한 점은 없는지, 다른 길이 있는지를 언제나 생각해야 합니다.
4. “삽질”을 강요하는 것은 매우 위험합니다. 제가 “삽질”로 배우는 것을 매우 좋아하긴 합니다만, 아무리 좋아해도 혼자서 문제를 풀면 코드를 보고 보아도 아무것도 생각나지도 뭘 해야할지도 모르는 경우가 매우 자주 생깁니다. 그리고 대부분은 이 경우가 자신이 가진 지식의 한계선을 마주하는 경우입니다. 이 한계선을 뚫어주는 역할이 문제의 풀이입니다. 풀이로 자신의 한계선을 늘려나가야 실력이 느는거지, 풀이 공유를 막는다고 독학하는 사람 실력이 늘지는 않습니다.
제 경우에는 포너블 공부하면서 “삽질”을 엄청나게 했습니다만, 풀이나 필요한 지식을 찾기 위해 하루 내내 검색한 적도 있고, 정작 찾은 풀이는 사고력에 도움이 하나도 안되는 내용이 대다수였던 것 같습니다. 사고력에 도움이 안되는 내용의 예시로 MS-DOS 디버깅 방법이나 qemu 환경 세팅, dynamic linking library의 ELF 구조같은 것들이 있습니다. 아는 사람이 한마디면 아는 내용을 검색으로 하루 넘게 쓰고 있으면 짜증이 솟구치긴 합니다.
“삽질”을 하라고 풀이 공유를 막는 것도 별로지만, “삽질” 자체를 강요하는 것도 꽤나 위험합니다. 일단 “삽질”을 재미없어하는 사람은 시작부터 전부 떨어져 나갑니다. “삽질”이 재미없으면서 재능이 있는 사람은 당연히 뒤쳐질 것이 뻔합니다. 그리고 “삽질”로 공부하는 방법은 문제 하나를 공들여 풀기 때문에 “삽질”을 적당히 한 사람에 비해 푼 문제수가 엄청나게 적습니다. 때문에 본인이 해결한 문제 DB가 극도로 적어서 문제를 빠르게 해결할 수 없고, 새로운 테크닉을 접한 적이 없어 해결할 수 없기도 합니다.
PS 상위권을 조사해보면 매우 많은 종류의 공부 방법이 나옵니다. 많은 문제를 최대 2시간 정도 고민하고 답을 보며 공부하는 사람이 있는가 하면, 한 문제를 1주일 내내 붙잡으면서 푸는 사람도 있고, 2시간 고민하고 안 풀리면 다른 문제로 도주하는 사람도 있습니다. 이것이 의미하는 것이 어떻게 공부하든 엄청나게 많이 하면 잘해질 수 있다는 뜻이 아닐까 합니다. CTF도 “삽질”이 중요한 것이 아니라, 재미있게 많이 공부하면 장땡 아닐까요?
5. SCPC는 모두의 기대 속에서 시작한 대회입니다. 회사에서 코드 라인수와 심지어 버그를 낸 횟수로 직원 기여도를 측정하던 시절, 수많은 교수님들이 직원의 평가 방식을 바꿔야 한다는 목소리를 냈습니다. 교수님들이 삼성을 열심히 민 결과 14년도부터 삼성이 움직이기 시작했습니다. 직원을 알고리즘으로 평가하기 시작했고, 이와 비슷한 시점에 만들어진 SCPC라는 대회는 삼성의 변화를 광고하는 역할을 했습니다. 단순히 총상금 1억의 대회가 만들어진 것 이상의 의미가 있습니다. 솔직히 SCPC 1회는 문제도, 운영도 마음에 들지는 않았습니다만, 크게 보면 대회 내용보다 대회를 열었다는 사실 자체가 중요합니다.
이 시점을 기준으로 PS 커뮤니티에 엄청나게 많은 사람들이 밀려들어오게 됩니다. 가장 큰 이유는 삼성 내부 자격증 시험이고(아마 자격증을 기간 내에 받지 못하면 짤렸다고 합니다), 그 외에도 삼성 입사 공부, 대회 준비, 회사 입사시험 준비 등이 있습니다. 그리고 그와 관련된 사업들의 크기가 갑자기 커지게 되었고, 4년 전 대회도 딱히 없던 PS에서 작은 파이로 사이좋게 나눠먹던 고인물들이 갑자기 커진 파이를 얻게 되었습니다.
삼성은 분명 보안 실력이 뛰어난 사람을 뽑고 싶을 것입니다. 얼마 전에 타이젠 OS가 보안 이슈 때문에 뉴스를 탔기 때문에, 보안에 무지한 삼성이라는 이미지를 없애고 싶어 할 것입니다. 누구도 보안이 약한 OS를 자동차에 설치하고 싶지는 않을 것입니다. 해커에 의해 사고가 날 수 있는 자동차를 누가 쓸까요?
SCPC에서 몇백만원을 받아가는 최상위권 학생들이 삼성에 입사할지는 의문입니다만, 결과적으로 SCPC는 삼성에 입사하게 될 상위권 학생들의 실력을 엄청나게 끌어올리는 효과를 냈습니다. 저는 아마 SCTF도 같은 의도가 아닐까 추측하고 있습니다. 보안 실력이 매우 뛰어난 사람이 삼성에 입사할지는 모르겠습니다만, 결과적으로 삼성에 입사했으면 하는 보안전문가의 평균 실력을 끌어올리고 싶었던 것이 아닐까 싶습니다.
끝!
'일기' 카테고리의 다른 글
Kudeki-chain 답안과 오픈소스 (0) | 2019.06.05 |
---|---|
GPU와 kudeki-chain (1) | 2019.05.09 |
10.31 잡담 (1) | 2018.10.31 |
9.30 잡담 (0) | 2018.10.01 |
UCPC 2018 출제 후기 (3) | 2018.08.15 |