트위터에서 워게임의 Write-Up 공유를 막은게 뉴비의 진입장벽을 높였는가? 라는 말이 나와 이것에 대해 이야기를 해보려고 한다. 내 생각이 옳은 것 만은 아니기 때문에 다양한 의견이 오갈 수 있으면 좋겠다. 밤새고 쓴 글이라 두서가 없고 글의 내용이 이해가 되지 않을 수 있습니다.
우선 보안/해킹 분야의 진입장벽은 높다. 아니, 높을 수 밖에 없는게 사실이다. 절대 자료가 부족해서가 아니다. 방대한 CS 기초 지식들을 바탕으로 어플리케이션 레벨에서 문제가 발생해 취약점이 생기는 것이기 때문이다. 심지어 최근들어 CTF에 하드웨어/수학과 관련된 지식을 요구하는 문제들도 나온다. 그래서 뉴비들이 힘겨워 하는게 당연하다. 다만 우리가 공부하면서 겪었던 시행 착오들을 줄일 수 있게 도와주는게 맞지 않을까. 옛날에 아무것도 없는 상태에서 해킹했던 사람들이 정리해둔 것을 보며 도움을 받았던 것 처럼.
문제를 풀때 가장 풀이가 보고 싶어질 때는 코드를 보고 보아도 아무것도 생각나지도 뭘 해야할지도 모르겠을때다. 하지만 대부분의 경우는 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)
예전보다는 뉴비들이 입문용으로 배울 수 있는 레퍼런스들은 매우 많이 생겼다. 다만 그 자료들의 수준이 매우 얕고 강의가 시작은 하지만 끝나는 경우가 없다.
- 진모님의 CTF 문제 풀이 방송도 있고,
- LiveOverflow 영상들도 있고,
- https://trailofbits.github.io/ctf/intro/find.html
- https://github.com/vxresearch/awesome-pwnable
- https://github.com/qazbnm456/awesome-web-security
- 그 외 awesome- 프로젝트들
그럼 왜 사람들은 자신이 겪었던 시행 착오를 모아둔 “제대로된 정보“를 공유하거나 로드맵을 그려줄 무언가를 만들지 않는가? 난 여기에 몇가지 이유가 있다고 생각한다.
첫째, 금전적인 이익으로 귀결되기 때문이다. 금융공학이 학문적으로 발전할 수 없는 가장 큰 이유는 간단하다. 학문적으로 발전 시킬 무언가는 곧 바로 금전적인 이익으로 귀결되기 때문에 논문을 내거나 하지 않는다. (논문을 내는 순간 모든 사람이 정보를 알기 때문) 보안도 마찬가지이다. 뉴비들을 위한 스텝 바이 스텝은 기업 강의 자료로 만들어 진다. 보안을 취미로 하지 않는 이상 남들에게 떠먹여 주는 자료를 만들며 봉사하긴 힘들다.
둘째, 한국 사회의 교육 및 평가 체계 문제라고 생각한다. 눈에 보이는것만 인정해주는 그런 문화, 팀 대회를 우승 했어도 하나의 문제를 풀 때 얼마나 많은 컨트리뷰션을 했느냐 보다는 그냥 몇 문제를 더 풀었냐로 외부 에서 평가를 하다보니 내부에서도 경쟁이 생길 수 밖에 없다. 청소년 시절, 즉 불과 1-2년전만 해도 이런거에 엄청 신경썼다. 그때는 1-2년의 결과가 인생의 전부라고 생각했기 때문. 그러다 보니 팀 내부에서도 경쟁을 할 수 밖에 없다. 함께 하면 더 빨리 풀 문제를 2N+a 보다 더 많은 시간을 쏟았다. 뭐 하튼 자기들 끼리도 경쟁하는데 뉴비에게 신경 쓸 여유가 있나.
셋째, 잡지식으로 이루어진 상태라 트렌드를 따라가지 못하거나 잠깐 여유를 가지면 실력의 갭이 엄청나게 난다. 나를 포함해서 (ㅠㅠ) 기초가 제대로 되어있지 않은 상태에서 얻은 잡지식을 바탕으로 문제를 풀다보니 새로 나온 기술들이나 트렌드를 빠르게 읽지 못하면 CTF 씬에서 살아남기 힘들다. 뉴비를 챙겨줄 만한 여유가 없지 않나 싶다. 나중에 여유가 생겼다고 해도 대박친 ICO 대표들 처럼 놀고 먹을 가능성이 농후하기 때문.
그렇다면 단순히 모든 문제에 대한 라이트업을 공개한다고 해서 해결될 문제인가? 나는 아니라고 생각한다. 일단 라이트업들이 뉴비들에게 친절하지 않을 뿐더러 문제 풀이자도 뉴비를 대상으로 라이트업을 쓰지 않는 경우가 많다. 그럼 결국 원론적인 이유를 이해하지 못하고 그냥 이렇게 이렇게 해서 이렇게 되는구나...
하고 마는 경우가 많다. 그러니까 결국 뉴비들을 위해 계단을 놓아줄 무언가가 필요하다. 그게 교육 솔루션이 되었든, 오픈 커뮤니티가 되었든 반드시 뭔가 하나는 필요하다.
그럼 라이트업이나 로드맵 처럼 뉴비들도 알아먹을 수 있게 문서를 잘 써서 공개하면 어떤 일이 일어날까? how2heap을 살펴보면 몇 년동안 자신들 만의 리그에서 공유되던 ptmalloc exploit 기법들이 한번에 공개되었다. 이를 통해 많은 사람들이 힙 익스플로잇에 익숙해졌고, “평균적으로” ptmalloc 구조를 이해하려고 하는 사람들이 많아졌다. 그 사람들에 의해서 새로운 힙 익스플로잇 테크닉도 많이 발견 되었다.
궁극적으로 계단을 놓아줄 수 있는 상황이 온다면 보안하는 사람들이 많아질테고 그러면 어중이 떠중이들이 없어져 각 개인이 먹을 수 있는 파이의 조각이 많아질 것이다. (난 절대 이 분야가 파이가 작다고 생각하지 않는다. 다만 개인의 실력에 따라 먹을 수 있는 파이 조각의 갯수에 리밋이 있을 뿐.) 또 실력 자체가 상향 평준화 돼서 좀 더 건강한 보안 생태계가 될 듯 하다.
이런 상황이 오기 전까지는 제발 질문좀 했으면 좋겠다. 우리나라 사람들 종특인지 모르겠지만 발표 끝나고 질문을 부탁할 때 안하고 꼭 끝나고 와서 개인적으로 물어보더라. 모르는게 부끄러운게 아니라고 생각한다. 해커들이 사이코패스도 아니고 물어보는데 “화이팅 ^^7” 이런 사람들은 없다..

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

이다훈, 김용진, 이태양, 김낙현과 함께 나눈 의견을 바탕으로 작성 되었습니다.
감사합니당.
글에 나온 제 의견은 제가 속한 조직과 위 분들을 대표하는게 아닌 개인적인 생각입니다.
(댓글을 한 번 쓰고 post를 눌렀는데 왠지 날아가고 없어서 다시 씁니다ㅠㅠ)
안녕하세요. 트위터를 돌아다니다가 이 글을 발견하고 댓글 남깁니다.
저도 본문에서 주장하는 바를 전적으로 공감합니다만, 왜 하필 pwnable.kr이 이슈가 되었는지는 따로 설명드려야할 것 같습니다.
저는 CTF나 워게임에 대한 경험이 거의 없고 해킹 분야를 공부하지도 않았습니다. 다만 학부 수준의 CS 지식은 갖추고 있습니다.(버퍼오버플로우가 무엇인지, 힙을 터뜨린다는 것이 어떤 의미인지, 어셈블리를 읽을 수 있다든지 등등..) 얼마전에 갑자기 CTF에 흥미가 생겨서 pwnable.kr의 문제들을 조금 풀어보았는데 엄청나게 재밌었습니다. 그렇게 앞에서부터 차례대로 스스로 풀다가 현재 shellcode에 막힌 상태입니다 […]
왜 하필 pwnable.kr로 시작했나? 가 제 코멘트의 핵심이겠네요. 막연히 CTF라는 것을 경험해보고 싶다는 마음이 들었는데 무엇으로 시작해야할지 고민하던 차에, 제 주변에 해킹을 공부하는 친구들/후배들이 pwnable.kr을 자주 이야기하던 것이 생각났습니다. 그냥 그렇게 별 생각없이 들어갔는데 처음 몇 문제는 진짜 쉬워서 “아 여기가 제일 유명하면서도 입문자도 이용할 수 있는 사이트구나!” 같은 생각이 들더라고요. 그렇게 시작해서 계속 파고들다가 좌절하게 되는 것 같습니다. 이슈의 시작이 되었던 그 분도 아마 저와 비슷한 경로로 도달하게 되었지 않았을까 싶네요.
입문자의 입장에서 해킹 분야의 ‘공부 방법’을 배울 수 있는 기초 커리큘럼이 있으면 좋겠습니다. 앞으로 다양한 분야의 문제들로 확장해나가기 위해 중요하고 기초적인 지식, 기술, 툴은 무엇이 있는지, 정보가 활발히 공유되는 곳은 어딘지, 질문을 남길 수 있는 곳은 어딘지, 등을 알려준다든가 하는 것들이요. 보통 이런 것들은 해킹 동아리같은 곳에 들어가면 내부적으로는 잘 알려주는 것 같긴 합니다만, 저같이 혼자 공부하는 사람들에게는 조금 막막한 것 같습니다.
그런 의미에서 juno님이 글에 남겨주신 입문자를 위한 자료들은 정말 좋아보입니다. 특히 overthewire라는 것이 있는 줄 몰랐는데 살펴보니 정말 괜찮은 사이트 같네요ㅠㅠ
이상 긴 코멘트 읽어주셔서 감사합니다.
LikeLike
안녕하세요, 덧글이 스팸함에 들어가 있어 확인하지 못한 점 죄송합니다.
말씀하신대로 `입문자의 입장에서 “공부 방법”을 배울 수 있는 곳`을 바로 떠오르기가 힘드네요.
난이도 별로 각 문제가 정리된 리스트를 하나 남겨둡니다.
https://pastebin.com/uttU8Pn3
감사합니다.
LikeLike