Sechack

코딩과 해킹의 시작과 지금까지의 히스토리 본문

My Story

코딩과 해킹의 시작과 지금까지의 히스토리

Sechack 2021. 5. 31. 14:06
반응형

앞으로 이 카테고리에는 글을 적고싶을때마다 내 과거를 화상하며 마음대로 글을 써보려고 한다.

 

 

 

나는 컴퓨터를 초6때 C언어로 처음 접했다. 접하게 된 계기는 매우 단순하고 우연한 계기였다.

친구집에 놀러갔는데 친구가 C#으로 퀴즈프로그램 만들고있길래 뭔가 간지나보여서 어떻게 하는거냐고 물어보고 집에와서 친구한테 질문폭탄 던지면서 똑같이 만들어봤다. 그리고 TV에서만 보던 전문가의 영역인줄 알았던 텍스트코딩을 내가 했다는것에 매우 뿌듯해하고 있었다.

 

 

 

그리고 친구가 본격적으로 코딩 공부해보고 싶다면서 C언어 코딩도장이라는 책을 샀다. 그때당시에는 단순히 내가 쟤보다 빨리 배워야지 하는 지금생각하면 좀 어이없는 경쟁심으로 똑같은 책을 사서 경쟁했다. 그런데 이게 너무 재밌고 흥미있고 내 적성에 맞고 재능까지 보여서 나는 프로그래머로 진로를 바꿨다. 이때부터였던것 같다. 내 인생이 180도 변해버리는 분기점이었다.

 

 

 

나는 C언어를 접하기 전에는 바둑 프로기사를 꿈꾸고 있었다. 그런데 C언어를 접하게 되는 당시에는 바둑에 슬럼프가 왔을때였고 바둑은 지금 내가 해킹에 인생을 갈아넣듯이 열심히 공부한 분야는 아니었다. 그래서 그랬던건지 C언어 코딩도장 책을 절반정도 공부했을 때부터 내 꿈은 어느순간 프로그래머가 되어있었다.

 

 

 

C언어를 다 공부하고 초6여름방학이 왔다. 친구랑 나는 방학숙제 선택과제로 방학을 갈아넣어서 C언어 콘솔프로그램으로 거지키우기라는 모바일게임의 기능들을 재현했다. 물론 콘솔이라는 CLI환경에서 구동되므로 그래픽보다는 글자 위주였다. 그리고 나는 중2때까지는 컴퓨터나 스마트폰과 같은 전자기기 사용시간을 부모님이 통제하셔서 거지키우기를 만들때 친구가 70%정도 만들고 내가 30%정도 만들었었다. 다만들고 보니까 소스, 헤더 다합치면 소스코드가 10000줄이 넘어가서 뿌듯했다. 만약 내가 컴퓨터 사용시간에 제약이 없었다면 뿌듯함을 더 느꼈을 것이다. 이게 코딩을 배우고 나서 첫 프로젝트였다.

 

 

 

그리고 나는 C언어를 배웠으므로 친구랑 같이 C++을 공부하고 언리얼엔진 블루프린트를 이용해서 게임도 만들어보았다. 그런데 게임을 만들면서 느낀건데 개발은 처음 공부할때처럼 간지나고 멋있는게 아니라 거의 노가다에 가까웠다.

그리고 딱히 고급적이고 어려운 지식을 요구하는것도 아니었다. 그래서 나는 내가 프로그래머가 되는게 맞나? 하는 내적 갈등을 조금씩 느끼던 시점에 해킹이라는 매력적인 분야를 알게되었다.

 

 

 

나는 이때까지만 해도 해킹을 많이 공부하면 영화속에서 나오는것처럼 몇분, 몇십분의 시간만 주어지면 어떤 곳이든 척척 해킹할 수 있는 마법과도 같은 기술인줄 알았다. 하지만 나는 코딩을 공부하면서 다져진 베이스가 있고 해킹은 코딩보다 훨씬 어렵다는걸 알기때문에 툴키디쪽으로 빠지지는 않았던것 같다. 만약 내가 코딩을 하지 않고 처음부터 해킹을 접했다면 지금쯤 툴키디가 되어서 잼민이짓이나 하고다닐수도 있었을것같다.

 

 

 

초6 2학기 후반이었나 중1 1학기 초반이었나 나는 C언어를 이용해서 그래픽을 구현할수는 없을까 하는 궁금증이 생겼고 이것저것 찾아본결과 Windows API라는것을 알게되었다. 나는 Windows API강좌를 찾아보던중 유튜브에서 1시간 정도 되는 영상이 2편으로 나눠져있는 Windows API명강의를 찾았다. Windows API로 프로그래밍을 할때 기본 틀을 설명하는 강의였는데 바로 그거 보고 따라서 실습해봤다. Windows API로는 어떻게 개발하는지 알게되었고 나는 이시점에서 연결리스트라는것을 사용해서 사람의 연락처나 집주소 등을 저장하는 연락처 프로그램을 만들고 싶어졌다. 그리고 MSDN뒤져가면서 함수 엄청나게 찾아대고 연결리스트 구현과정에서 포인터 잘못써서 디버깅도 엄청나게 해대고 아무튼 삽질이란 삽질은 다해가면서 2개월인가 3개월동안 프로젝트를 해냈다. 나혼자서 제대로 진지하게 진행했던 프로젝트는 이번이 처음이었다.

 

https://github.com/Sechack06/PhoneNumberbook

 

Sechack06/PhoneNumberbook

PC에서 연락처를 저장하고 보고 수정할 수 있는 PC용(Windows전용) 연락처입니다. Contribute to Sechack06/PhoneNumberbook development by creating an account on GitHub.

github.com

 

연락처 프로그램은 여기에 올려놨다. 사실 이걸 개발할 시점에는 컴퓨터를 너무 많이 해서 압수되고 휴대폰까지도 압수되어있을 시절이라서 usb하나 가지고 도서관 디지털 자료실 가서 계정 2개 돌려쓰면서 도서관 컴에 VS깔고 usb에 프로젝트 파서 했다. 도서관이 오후 6시 까지였는데 5시 반쯤 돠면 프젝 하던거 usb에 저장하고 드라이브에도 백업하는식으로 거의 매일매일 가서 하루종일 디지털자료실에만 있었다. 그리고 도서관이 좀 멀어서 버스를 타고 가야되는데 정류장에 버스가 언제 오는지 알려주는 전광판이 없어서 휴대폰도 없는 상황이라 버스가 늦으면 30분까지도 기다려야 하는데 진짜 기다리다가 울뻔한적도 있다. ㅋㅋ

 

 

 

아무튼 연락처 프로그램을 완성하고 중1 1학기 후반이었나? 시기가 잘 생각은 안난다. 암튼 중1때 한 학기가 끝나가던 시절에 동아리가 있었는데 뭐하는 동아리였는지는 잘 생각은 안난다. 아무튼 동아리에서 진도 다나가고 학기가 끝날때까지 앞으로는 책읽기를 한다고 했다. 그래서 원하는 책 한권씩 고르면 사놓는다고 하셨다. 매 시간마다 읽을 수 있는것이다. 나는 개꿀이라 생각하고 평소에 관심있었던 리버싱 관련 책을 샀다. 리버싱 입문 이라는 책이었는데 그 책에서 어셈블리어를 처음 접했다. 그냥 모든게 신기했다. 바이너리가 패치되는것과 핵이 만들어지는 원리 그냥 다 신기했다. 이때 abex crackme 5번문제까지 풀어보면서 나는 리버싱에 재미를 느꼈다. x64dbg를 키면 어셈블리어랑 메모리가 좌라락 나오는게 내가 전문가가 된 기분이었다.

 

 

 

그리고 중2가 왔다. 2019년 후반에 코로나가 터져서 방학이 연기되었다. 그래서 집에서 컴퓨터를 할 시간이 많아졌다. 사실 거지키우기를 만들때부터 내가 운영하는 DFIC라는 프로그래밍 관련 커뮤니티가 있었는데 지금은 신경 안써서 망하긴 했다. 아무튼 여기 공식사이트를 예전에 html잠깐 끄적여서 만들긴 했는데 로그인, 회원가입, 게시판 뭐 이런게 만들고 싶어진 것이다. 그래서 javscript공부를 시작했다. 디자인은 bootstrap이라는 좋은 디자인 라이브러리가 있길래 bootstrap으로 떡칠했다.

 

 

 

나는 javascript를 공부하고 서버를 어디서 돌리냐에 대한 고민을 했다. 나는 호스팅 비용을 매달 낼 자신이 없는 사람이기에... 수입이 정기적이지도 않다. 이때 서버측 언어를 하나도 모르긴 했는데 이미 이시점에서는 언어 하나정도는 금방 익힐 수준에 도달한지라... 그건 큰 문제가 되지는 않았다.

 

 

 

Github에서는 Client 즉 html, css, javascript로 이루어진 간단한 웹사이트만 호스팅 가능했다. php나 node.js로 이루어진 웹서버는 못돌리는것이다. 그리고 나는 firebase라는것을 알게되었다. NoSQL기반의 database이다. 근데 얘가 Client의 javascript에서도 사용이 가능한것이다. 그래서 나는 공식 문서를 읽고 삽질하면서 db관련한 모든것을 javascript파일에 때려넣었다. 그리고 원하는 결과물을 만들어냈지만 db와 상호작용하는 모든 로직이 Client에 있다는게 보안상으로 심각한 문제가 되었다. 개발자도구 이용해서 게시물 테러하는 사람도 있었고 다른사람 게시물도 건들수도 있었고. 나는 처음에 개발자도구를 막아버리고 소스코드 난독화하고 별의별짓을 다하다가 Client에 db와 상호작용 하는 로직을 넣은것 자체가 문제이고 답이 없다는걸 깨닫고 그냥 때려치고 html, css로 디자인만 넣어서 소개페이지로 만들었다.

 

 

 

그리고 javascript를 이용해서 Node.js라는 플랫폼으로 디스코드 봇을 만들수가 있더라. 그래서 나는 Node.js로 디스코드 서버의 모든 채널을 삭제하고 모든 유저들을 킥하고 그냥 서버를 날려버린다는 표현이 맞을정도로 복구 불능 상태로 만드는 디스코드 봇을 재미로 개발해봤다. 그리고 내 Github에 올렸는데 악용하는 사람들이 꽤 있길래 다시 내렸다.

 

 

 

오픈채팅이나 디스코드나 어딜가던 테러를 좋아하는 사람들이 꼭 있다. 왜 남의서버에 피해를 끼치는지 모르겠지만 나는 나의 개발지식을 이용해서 DFIC디스코드 서버를 대상으로 한 도배와 테러를 방어하는 봇을 2개 개발했다. 헤로쿠에 올려서 호스팅 돌렸는데 아직도 돌아가고 있다.

 

https://github.com/Sechack06/DFIC-Bot

 

Sechack06/DFIC-Bot

DFIC디스코드 서버를 관리해주는 디스코드 봇입니다. Contribute to Sechack06/DFIC-Bot development by creating an account on GitHub.

github.com

 

https://github.com/Sechack06/Anti-terrorbot

 

Sechack06/Anti-terrorbot

DFIC디스코드 서버를 대상으로한 테러를 막는 봇입니다. Contribute to Sechack06/Anti-terrorbot development by creating an account on GitHub.

github.com

 

 

얘네가 내가 개발한 디스코드 봇이다.

 

 

 

그리고 이제 나는 워게임이라는게 있다는걸 알게 되었다. 문제 출제자가 일부러 취약한 서비스를 구축해 놓으면 우리는 그 서비스를 해킹해서 플래그를 얻고 인증하거나 특정 행위가 성공하면 문제가 풀리는 그런 방식의 해킹 연습 문제들이 많이 있는 사이트이다. 이때당시에는 개발관련 지식만 있었기 때문에 써니나타스, webhacking.kr등등 유명한 워게임 사이트들 들어가봤지만 몇문제도 풀지 못했다. 그러던 도중 webhacking.kr디스코드 서버가 있다는것을 알게되고 들어가보았다. 그리고 바로 rubiya님한테 DM을 보냈다. 지금생각하면 무슨 배짱으로 그랬는지는 모르겠지만 다행히 rubiya님은 DM을 잘 받아주셨다. 나는 해킹을 잘하고 싶었기에 DM으로 어디서 어떻게 배우는지에 관해서 물어보았다. rubiya님이 dreamhack.io라는 곳을 알려주셨다. 이게 작년 중2때 9월쯤이었다.

 

 

 

이때부터 본격적으로 해킹을 시작했다. dreamhack.io가보니까 생긴지 얼마 안된 사이트였다. 그리고 뭔지는 모르겠지만 이미 회원가입이 되어있었다. 아마도 예전에 이곳저곳 해킹 관련 사이트들 찾아다니면서 여기도 회원가입 해놨던것 같았다. 아무튼 나는 여기서 웹 강좌를 보고 공부를 시작했다. 쿠키 변조부터 xss, csrf, sql injeciton, LFI 등등 많은 기법들을 공부하고 워게임 문제를 풀어보았다. 그리고 ctftime.org라는 사이트를 알게되었고 webhacking.kr에서 알게된 사람들이랑 같이 DarkCTF에 나가보았다. 이때는 진짜 백지수준인 입문자여서 웹 쉬운거 한두개 풀었다. 그것도 구글링하면 바로 나오는 php트릭 문제이다.

 

 

 

드림핵 워게임을 하나씩 풀다가 나는 의문점이 들었다. pwnable이 대체 뭐하는 분야길래 드림핵 워게임에도 많이보이고 CTF에서도 많이보일까? 마침 드림핵 강의에 pwnable관련 강의도 있길래 호기심으로 강의를 보기 시작했다. 그리고 이건 지금의 내가 web hacker가 아닌 pwner가 되는 계기가 되었다. 처음에 BOF를 이용해서 shellcode삽입해서 셸을 따내고 nop sled를 실습하고 하는 입문과정이 어려웠었다. 이때 드림핵 디스코드 서버에 질문도 많이 했었는데 고수분들이 답변해주셔서 도움이 많이 되었다. ROP는 드림핵보고 이해가 잘 안가서 잘 정리된 다른분들 블로그 보고 공부했다.

 

 

 

드림핵 워게임이 강의에서 나온 내용을 실습해보는 위주의 문제가 많이 있어서 수월하게 공부할 수 있었다. 수학으로 치면 기본 개념을 익히고 개념으로 구성된 기초 문제를 풀어보는거라고 할 수 있다. 아무튼 이렇게 드림핵에서 기법 학습하고 실제 CTF를 주말마다 해보면서 개념을 어떻게 응용할 수 있는지 기법이 어떻게 응용될 수 있는지 등등을 배웠다.

 

 

 

이때당시에 나는 드림핵에서 공부를 하면서 해킹 관련 오픈채팅방에도 많이 들어가있었다.

화이트해킹팀 TeamH4C 컴공 채팅방이라는 곳에도 들어가 있었는데 디스코드 서버도 있었다. 여기서 이런저런 질문도 하고 답변도 하고 꽤 채팅 많이 치고 했는데 갑자기 팀장님이 나에게 H4C들어오는것을 제안하셨다.

유튜브에서만 보던 TeamH4C에 들어간다니... 온라인상에서 사람을 만나는거에 대해서 안좋은 기억이 있어서 처음에는 무섭기도 하고 기대되기도 해서 고민좀 하다가 밑져야 본전이지 하는 생각으로 면접 날짜를 잡았다. 면접때 마지막에 포너블 2개 못풀어서 떨어질줄 알았는데 합격이다... 진짜 면접때 온몸 덜덜덜 다떨었다...

 

 

 

TeamH4C스터디그룹으로 들어오게 되었다. 들어오고나서 깨달은건데 TeamH4C에 들어오는걸 전혀 무서워할 필요가 없었다. 오히려 내 성장에 날개를 달아주는 팀이었다. 스터디그룹에 들어가고 CTF팀에도 들어가서 CTF를 했다.

내가 들어가고 얼마 안되서 희찬님하고 민욱님도 스카웃(?)되어서 팀에 들어왔다. 아는 형들과 CTF를 같이 하니까 기분이 좋았다.

 

 

 

그리고 드디어 CTF에서 첫 성과를 냈다. Shakti CTF에서 포너블 올클하고 (심지어 하나는 first blood까지 땄다.) TeamH4C이름을 걸고 6등을 했다. 물론 개인이 아니라 팀으로 나가서 팀원분들 도움으로 6등한거긴 한데 그래도 기분이 좋았다. 하지만 Shakti CTF는 상품은 여성만 받을 수 있는 여성 전용 CTF여서 문제 난이도가 하향평준화 된 CTF이다. 그래서 좋은 성적을 내는게 가능했던것같다. 상품 받으라는 메일이 왔는데 여성인걸 인증하고 뭐 그런 절차가 있길래 걍 메일 무시했다. 그리고 이날 이후로 민욱님, 희찬님과 함께 TeamH4C스터디그룹에서 공식그룹으로 올라가게 되었다.

 

 

 

공식그룹으로 올라가자마자 발표가 하나 있었다. 팀장님 대학 동아리에서 뭐 하는거였는데 그건 잘 모르겠고 아무튼 첫 발표를 했다. 첫 발표는 매우 기초적인 내용들 위주로 했다.

 

https://www.youtube.com/watch?v=flfY0_TU-2Y

 

내 발표 영상이다. 첫 발표인만큼 실수도 했고 설명도 잘 못했지만 어쨌든 성공적으로 마무리 되었다.

 

 

 

이후로 내가 포너블 처음 배울때 많은 도움을 주셨던 Ainsetin님도 TeamH4C에 들어오게 되었다. Shakti CTF가 끝나고 바로 들어오셨는데 자세한건 모르겠지만 Shakti CTF를 솔플로 4등을 하셔서 별다른 면접이나 절차 없이 바로 오신것 같다. 그리고 나는 지금 H4C 부엉이 세미나라는 큰 발표를 앞두고 있다. 내가 첫 발표고 내 뒤로 유명하신 분들의 발표가 있는지라... 매우 긴장된다. 최근에는 dCTF에서 top100안에 드는 성과를 냈다. 이것도 팀으로 나간거긴 하지만 포너블 하나빼고 다풀었고 웹이랑 크립토도 쉬운거 몇개 풀고 팀 내에서 내가 가장 높은 점수를 얻어서 만족하는 CTF였다. dCTF에서 printf함수 트릭하나 배우기도 했다. 현시점으로는 H4C 부엉이 세미나가 코앞이고 발표 끝나고 7월 초에 디미고에서 개최하는 전국 중학생 IT올림피아드가 있는데 해킹방어 부문에 나가기로 했다. 내일부터 신청기간이어서 내일 바로 신청할것이다. 이것도 준비해야되고 대회가 끝나면 8월쯤에 H4C CTF가 있을 예정인데(아직 정확한 일정이 확정된건 아니다.) 내가 문제 출제자중에 1명이어서 문제도 만들어야 한다. 바쁘다...ㅋㅋ

최근에는 H4C내부에서 B4C라는 버그바운티 팀도 생겨서 버그바운티도 도전해볼 생각이다. 그리고 드림핵에서 열심히 공부하고 열심히 풀었더니 지금은 워게임 순위 22위라는 top10안에는 들지 못하지만 나름 개인적으로 만족하는 성과도 내었다.

 

 

지금까지가 내가 처음 컴퓨터를 접할때부터 지금까지의 이야기였다.

 

 

 

사실 코로나가 터진 중2때부터는 온라인 수업 제대로 안하고 컴퓨터 공부에만 매진하였다. 정말 불행하게도 중2때부터 실제 내신에 반영되는 중간고사, 기말고사가 있어서 중1때나 그전에 공부한것들은 쓸모가 없었다. 컴퓨터만 한 나는 당연하게도 성적이 바닥이었다. 지금도 바닥이다... 중학교 3학년으로 올라와서 한국디지털미디어고등학교라는 학교를 알게되었는데 여기에 미칠듯이 들어가고 싶다. 하지만 성적이 바닥이다... 이번에 전국 중학생 IT올림피아드 해킹방어 부문에서 입상하게 된다면 대회특기자를 노려볼것이고 입상 못하면 자기추천으로 노려볼 생각이다. 성적이 평균만 되도 대회입상 하게된다면 걱정은 없을텐데 지금은 성적이 매우 낮아서 아무리 특별전형이더라도 들어갈 수 있을지 모르겠다...

지금이라도 성적 올리려고 나름 학원도 자진해서 다니면서 부족한 공부 하고있긴 한데... 그래도 지금까지의 성적이 너무 형편없어서 잘 모르겠다.

 

 

 

앞으로의 진로 계획은 디지털미디어고등학교에 합격하게 된다면 바로 TRUST나 STEALTH둘중에 하나 동아리 들어가서 해킹도 열심히 하고 공부도 열심히 하고 BOB도 지원해보고 여러가지 활동을 하고 대학도 숭실대나 아주대 성적이 된다면 고려대에 가서 나의 해킹 실력을 한층 더 업그레이드 시키고 싶다. 그리고 취업할 시기가 되면 Thori, STEALIEN, 라온화이트햇 같은 회사에 입사해서 보안 전문가로써 연구활동도 하고 실무도 하면서 보안계에서 이름을 날리는게 나의 최종 꿈이자 목표이다.

 

 

 

만약에 인문계에 가게 되면 나는 솔직히 공부만 하는 학교를 감당할 자신은 없다. 지금 중학교에서도 학교서 해킹이나 IT쪽 이런거 1도 안하고 공부만 가르치고 컴퓨터 관련 동아리도 없어서 싫은데 인문계 고등학교를 가게 된다면 공부량도 많아지고 학교도 늦게끝나서 해킹을 접고 아니 접지 않더라도 할 시간이 없을것같다. 아무튼 그래서 공부만 해야될텐데 나는 그걸 감당할 자신이 없다. 무엇보다도 주변에 해킹을 공부하는 친구들이 없어서 힘들것 같다. 인문계에 가서 내가 열심히 공부할 마음이 생길지는 모르겠지만 일단 BOB는 지원하고 볼것이다. BOB붙으면 수료기간동안 열심히 해서 해킹실력을 늘릴것이다. 그리고 만약에 인문계 환경을 진짜 못버티겠다 싶으면 최악의 경우에는 자퇴까지도 생각을 하고 있긴 하다. 아무튼 인문계가서 공부"만" 하기는 너무 싫다. 제발 디지털미디어고등학교 붙었으면 좋겠다...

반응형
Comments