05
21

안녕하세요, LowAngle 입니다.
오늘은 대학교 3학년이라는, 어떻게 보면 남들보다 늦은 시기에 보안이라는 관심분야가 생기게 된 저의 이야기를 하려합니다.
 
 


시작은 평범한 컴공생

제목에서 말씀드린 것처럼 저는 현재 컴퓨터공학과 3학년에 재학중인 대학생입니다!
제가 컴퓨터에 관심을 가지게 된것은 고등학교 1학년 때였습니다. 교과목 중에 '정보' 과목이 있었는데, 이 수업에서 저는 코딩을 처음 접하게 되었습니다. 그렇게 제가 원하는 것들을 코드로 한줄한줄 작성하는데... 그게 실제로 프로그램으로 동작하더라구요?!?! 생각이 실현된다는 그 자체가 너무 신기하였습니다. 그러면서 이거 만들어볼까? 저것도 만들어볼까? 하면서 점점 프로그래밍에 흥미가 생기게 되었습니다.
 
그렇게 프로그래밍에 관심이 생긴 저는 어느날, 국내 한 기업의 캠페인 영상을 보게 되었습니다.
AI스피커와 IoT기술이 척수장애를 입은 한 아버지의 손과 발이 되어주는 내용의 영상이었습니다.
해당 영상을 보고, 정보통신 기술의 발전이 이렇게 도움을 줄 수 있다니..? 나도 이렇게 사람들에게 도움을 주는 프로그램을 만들어야겠어!! 라는 생각이 들었고, 이 일을 계기로 저는 컴퓨터공학과에 진학하게 되었습니다.
 
 
 

어느날 찾아온 번아웃

그렇게 대학교에 진학 후 저는 학교 수업을 열심히 들었습니다! 덕분에 좋은 성적도 받으며 정말 별탈 없이 지냈던 것 같아요.  이렇게 무난무난해보였던 저는 3학년 개강을 맞이한 얼마 안된 시점에 매너리즘에 빠지게 되었습니다. 대학교에 진학할 때만해도 그렇게 좋아했던 코딩이 어느순간 지루하게 느껴지고 하기 싫어지더라구요.. 더불어 공부도 집중이 안되었고, 이대로 가다가는 지금까지 공부한거도 흐지부지 될것 같다는 생각이 들어 저는 휴학을 결심하게 되었습니다.
휴학을 하는 동안 저는 알바도 하고, 가보고 싶었던 곳도 놀러가며 스스로 재정비하는 데 시간을 보냈던 것 같아요.
 
 
 

그러던 중, 시작하게 된 해킹 공부

이렇게 쉬면서 시간을 보내던 저는 어느날 유튜브에서 Normaltic님의 취업반 스터디 모집글을 보게 되었습니다!
취업반 스터디를 운영하신다는 것은 예전에 알게 되었으나, 알게된 그 당시에는 이미 취업반 스터디 모집이 완료된 이후였습니다.. 그래서 다음에라도 혹시 취업반 스터디를 모집하신다면, 나도 배워보고 싶다! 라는 생각을 가지고 있었는데, 마침 제가 휴학을 한 시점에 모집글이 올라왔더라구요?! 그래서 저는 바로 스터디에 신청을 하게 되었고, 이렇게 해킹 · 보안 분야에 처음 입문하게 되었습니다!
 
 
 
 

컴퓨터 학과니까, 해킹 공부 어렵지 않았겠네요?!

아니었습니다.. 스터디를 들으면서 느꼈던 것은, 그동안 제가 학교에서 배웠던 컴퓨터 관련 내용과 해킹은 또다른 영역이라는 것이었습니다. 그래서 이 분야를 처음 접하는 저로서는 초반에 어렵기도 하였고, 문제를 풀때도 어떻게 해결해야할지 헤매기도 하였습니다.
사실 저는 스터디를 수강하기 전까지 CTF라는 것이 무엇인지도 모르는 정도였습니다...ㅎㅎ

 스터디를 통해, 해킹 기법을 배울때는 "어떻게 이런생각을 했지??" 하며 신기해하고, CTF 문제를 풀때는 어떻게 취약점을 찾을 수 있을까 고심하기도 하면서 하나하나 배워갔던 것 같아요.
어떤 때는 CTF문제 하나를 푸는데 몇시간이 소요되기도 하고, 결국 해결되지 않아 다음날까지 풀기도 하고 그랬습니다.
 
아! 생각나는 일화가 하나 있습니다..! 한번은 제가 문제를 푸는데, 해결책이라고 생각하였던 방법들이 모두 통하지 않았어요. 그래서 끝까지 고민하다가 그 당시 유일하게 발견하였던 취약점을 통해, 거의 1시간 동안 300여개가 넘는 서버의 모든 컬럼 이름을 찾아내고, 300개를 일일히 매핑해보며 제가 찾는 값이 있는지 확인하였던 적이 있습니다.
그렇게 결국 문제를 풀긴 하였지만, "이렇게 푸는거 아닐거 같은데..." 라는 반신반의한 생각으로 넘어갔었습니다.
시간이 좀 지나고, 어느날 다시 복습하면서 그 문제를 다시 마주하게 되었는데, 그제서야 저는 문제에서 의도한 방법을 찾아냈습니다. 첫번째 제가 풀었을 때의 무차별적인(?) 방법과는 전혀 다른 효율적인 방법이었습니다.
그런데 그때 저의 생각은 "이전에 시간 낭비했었다" 가 아닌, "어? 그럼 이 문제의 취약점을 하나 더 찾은거네?" 였습니다. 
 
이처럼 스스로 고민하면서 배우는 점도 많았고, 끝내 문제를 해결하였을 때의 그 성취감은 정말 컸습니다.
이런 과정을 통해 점점 해킹 공부에 익숙해졌고, 한가지를 깨닫게 되었습니다.
"아, 처음에 해킹공부가 어렵다고 느꼈던 것은, 단지 처음 접하게 된 분야에 대한 낯설음 때문이었구나"
 
이렇게 저는 해킹 공부에 점점 재미를 느끼게 되었습니다.

 

 

저의 공부 방법

1. 취약점 찾기

저의 경우, CTF문제를 풀때나 모의해킹 프로젝트를 수행할 때 답답하였던 부분 중 하나가 바로 취약점을 찾을 수 없을 때였던 것 같습니다. "내가 통하지 않는 방법을 시도하고 있는것인지" 아니면 "정말 취약점이 없는 부분인것인지" 코드를 직접 확인하는 것이 아니고서는 알 수가 없었기 때문입니다.

 

이렇듯 취약점 여부를 확신할 수 없을 때, 저는 스터디 첫 한달동안 해두었던 웹 개발을 활용하였습니다.

취약점을 찾는 페이지에 대하여, "쿼리문이 이렇게 구성되어있겠다" 라고 추측을 해보고, 그것처럼 동작하는 페이지를 먼저 제 웹페이지에서 제작해보았어요. 이후 제 페이지에서 공격 쿼리를 하나씩 테스트 해보면서, 쿼리문을 실행할때마다 데이터가 어떻게 응답되는지, 어떤 컬럼이 선택되는지를 직접 확인해보고, 그에 따른 공격 구문을 최대한 많이 정리해두었습니다.

이후, 다시 원래 취약점을 찾는 페이지로 돌아가, 제가 정리해두었던 공격 구문이 통하는지 테스트를 해봤습니다.

만약 정리해둔 공격구문이 전부 통하지 않았다면 다른 쿼리로 다시 추측해보고, 정리해둔 공격구문 중 일부는 취약점을 유발하고 나머지 일부는 통하지 않는다면 공격이 통한 쿼리들을 다시 모아 그 속에서 공통점을 발견하고자 하였습니다. (사실 하나라도 공격이 통하면 그 공격구문을 사용하면 그만이지만, 저는 실제 페이지의 쿼리문까지도 어떻게 구성되어있는지 알고싶었던 욕심이 컸던 것 같습니다..!) 그리고 다시 공통점을 토대로 쿼리문을 다시 추측하여 제작해보고, 다시 공격 쿼리를 정리해보고, 실제 페이지에 적용해보고하는 과정을 반복해나갔습니다.

 

실제로 저는 로그인 페이지에서의 SQL Injection을 찾을 때, 거의 이 방법을 사용하였던 것 같아요.

덕분에 실제 SQL쿼리문이 어떻게 구성되어있는지 알아낸 경험도 있었습니다. SQL 쿼리문을 알아냈기 때문에 이를 우회하는 방법을 찾는 것은 더 쉬운 일이었던 것 같아요. 그래서 아이디 입력칸에 아이디를 입력하지 않아도, 해당 아이디로 로그인 되는 방법 등 다양한 공격 쿼리들을 찾아보기도 하였습니다.

 

제 웹서버에서는 제가 실행한 쿼리문의 결과가 어떻게 수행되는지를 직접 볼 수 있다보니까, 제가 생각한 결과와 실제 결과가 다르더라도 그 이유가 무엇인지도 바로 파악할 수 있다는 것이 장점이었던 것 같아요.

꼭 이 방법이 아니더라도, 이렇게 각자 자신만의 취약점을 찾는 팁 하나씩 가지고 계시면 좋을 것 같습니다!

 

2. 블로그 정리

다른 무엇보다도 저는, 블로그 정리를 열심히 해두시는 것을 정말 추천드립니다..!

 

저의 경우 수업을 듣고 그 내용을 블로그에 정리할 때 저만을 위한 것이 아닌, 다른 누군가가 보더라도 충분히 이해될 수 있도록 친절하게(?) 정리하는 것에 항상 초점을 두었습니다. 그래서 웹서버의 웹 루트 경로를 정리할 때는 트리 다이어그램을 그려 첨부하기도 하고, SQL Injection을 정리할 때는 어떤 쿼리문을 삽입하였을 때 서버 내부에서는 어떤 쿼리가 완성되어 실행되는지 쿼리문을 작성하고, 어떤 공격에 단계가 존재한다면, Step별로 결과를 정리하는 등 최대한 자세히 정리하고자 하였습니다.

 

또 CTF를 정리할 때는 그 문제를 해결하는 것에만 초점을 두는 것이 아니라, 그 문제를 풀 때 내가 어떤 방법을 어떤 생각으로 시도하였는지도 정리하였습니다. 꼭 최종 정답만을 기재하는 것이 아닌, 어떤 방법이 통하지 않았더라도 그 방법을 시도한 저의 의도까지도 최대한 담아내고자 하였습니다!

이런 기록들이 있다보니까, 그 문제에서 통하지 않았던 방법들을 다른 문제를 풀때 적용해보기도 하고, 또 실제로 다른 문제에서는 통했던 경험이 있었습니다.

 

그렇기 때문에 저는 수업을 들으면서 필기한 시간보다 블로그를 정리할 때의 시간이 몇배는 더 걸렸던 것 같아요.

한번 정리를 끝내두어도, 나중에 더 좋은 자료 같은게 있다면 추가하여 수정하기도 하고 그랬습니다.

 

블로그 정리에 시간을 많이 소요하는 것이 아깝다고 생각하시는 분들이 있을 수도 있을것 같아요..

하지만 그 투자한 시간이 나중에 큰 도움이 되실거에요!

실제로 저는, 스터디에서 모의해킹 프로젝트를 수행할때부터 오프라인 시험을 치를때까지 제 블로그만을 참고하여 프로젝트를 수행하였습니다. 정리를 잘 해둔 덕분에 헷갈리는 부분이 생겨도 바로바로 찾아볼 수 있었어요!

그렇기 때문에 다른 분들도 블로그 정리는 잘 해두시는것을 정말 추천드립니다!

 

 

 

마치며

이렇게 모의해킹 스터디와 휴학기간이 동시에 끝이난 저는, 다시 3학년을 맞이하였습니다.

번아웃 기간에 맞이하였던 웹 해킹 공부는 정말 좋은 경험이었던 것 같아요.

수업을 들으면서 Blind SQL Injection 자동화 프로그램을 개발할 때, 특정 웹페이지에만 적용되는 초기 버전에서 - URL과 파라미터들을 입력하면 자동으로 그 웹서버의 DB데이터를 추출해주는 버전 - 그 데이터들을 자동으로 액셀 파일로 자동 생성해주는 최종버전까지 점차 발전 시켜갔었는데, 프로그래밍에 지루함을 느끼고 있었던 저조차 그 순간만큼은 코딩하는 과정이 즐겁더라구요?! 점점 더 많은 기능을 넣어보고 싶고, 확장성을 추가해보고 싶고.. 무뎌져버린 코딩의 즐거움을 다시 일깨워주는 순간이었어요. 또 스터디를 듣기 전까지는 관심분야 없이 그저 학교 수업만 열심히 들었었는데,  스터디를 통해 모의해킹 분야에서 일을 하고 싶다는 목표가 생겼어요.

 

비록 지금은 학교 과제에 치여 사는 삶을 보내고 있지만, 배웠던 내용을 잊어버리지 않기 위해 평소에도 이것저것 해보고 싶은 것들을 생각해보며 종강 후에 무엇을 할지 생각해보며 지내고 있어요. 아! 얼마전에는 운영체제 강의 시간에 배웠던 내용을 활용하여 DoS 공격 시나리오를 생각해보고 제 웹사이트에서 테스트해보기도 했답니다!

 

주변을 살펴보면 대학교 1학년때부터, 더 일찍 고등학교때부터 진로나 관심분야를 정한 분들이 많더라구요.

그에 비하면 저는 대학교 3학년이라는 어떻게 보면 남들보다는 조금 늦은 시기에 '모의해킹' 이라는 관심분야가 생기게 되었지만, 조급함이라기보다는 즐거운 마음으로 계속 공부해가고 있습니다!

 

그렇기 때문에 혹시라도 저와 같은 고민이 있는 분들에게 제 글이 도움이 되었으면 좋겠습니다!

- LowAngle

COMMENT