본문 바로가기

나의 성장일기/컴퓨터

컴퓨터 보안 공부법

반응형

http://security-etiquette.tistory.com/150

 

보안 공부의 전반적인 접근법에 대해서


재미를 위하여 선배 해커들의 사례를 포함하였으며 System Hacking에 대한 공부를 예를 들어 공부 방법에 대해서 대략적으로 설명하였다. 그러나 이 공부 방법에 대한 과정은 정답이 될 수 없으며 그저 어느 정도의 객관적인 기준을 제시할 뿐이니 단순히 참고를 하시길 바란다. 또한 이 문서에서 설명한 내용들은 객관적인 자료를 참고한 것이 아니기 때문에 필자의 주관적인 생각이 많이 담겨있다는 것을 알린다.


1. 보안에 대한 접근


Security & Hacking을 공부하기로 마음은 먹었지만 뜻을 이루지 못한 분들이 많은 것 같습니다.

몇 년 전까지만 해도 정보 보안에 관련한 인력이나 시장이 그리 많지 않았습니다. 또한 소위 언더그라운드 해커 Crew는 자신들을 보호하기에 급급하였고 (여기서 보호란, 폐쇄와 같은 나쁜 의미를 뜻하는 것은 아닙니다. 실제로 해커들은 스스로를 보호해야 할 필요가 있었습니다.), 반대로 외부에서 활동하며 많은 정보 교류를 하고 싶었던 그룹들도 있었지만 법의 제재와 더불어 주위의 눈총 때문에 초보자를 위한 보안 가이드가 활발하지 못했습니다. (국내에는 자신을 드러내놓고 정보를 공유하려는 사람들에게 곱지 않은 시선을 보내는 비뚤어진 해커 정신을 가진 사람들이 많습니다.)

그래서 공부를 중도에 포기하신 분이 많이 계실 거라 생각됩니다.

정보 보안에 대한 학습에 어떻게 접근을 해야 할 지 그 방향에 대해서 언급하겠습니다.

보안을 공부하고 싶은 분들에게 가장 많이 듣는 질문은 ‘해킹은 도대체 어떻게 공부해야 하는 겁니까? 막연합니다.’ 입니다. 제가 처음 공부할 때 역시 이러한 정보를 얻을 길이 어디에도 없었기 때문에 공부를 시작하기가 막막했습니다. 제가 제시하는 방법을 말씀 드리기 앞서, 재미를 위하여 선배 해커들이 어떻게 공부를 시작했는지 몇 가지 선례에 대해서 알아보겠습니다. 선례는 실제 제 주변의 해커들에 대한 이야기를 상황 설명 식으로 표현하겠습니다.



2. 선배 해커들의 선례

해킹에 처음 관심을 가지게 된 계기는 게임을 공짜로 하기 위해서였습니다.

당시에는 온라인 유료 게임이 유행하고 있었는데 요금이 너무 많이 부과되어서 감당하기 힘들었습니다.

공짜로 게임을 즐길 수 있는 방법을 연구하다가 요금이 부과되는 서버를 거치지 않고 바로 게임 서버에 접근할 수 있는 방법을 알아냈습니다. 지금 생각하면 그저 Network Port를 찾아낸 초보적인 해킹 기법이지만 당시의 저에게는 이것이 큰 사건이었습니다. 그때 알아낸 포트는 4444 번이었는데, 저는 당시에 컴퓨터에 관한 지식이 거의 전무했던 터라 요즘처럼 포트 스캐너를 이용해서 발견한 것이 아니라 포트 1번부터 4444번까지 모두 손으로 일일이 접속하여 알아냈습니다. 이때부터 저의 목표였던 공짜 게임을 즐기는 것은 저에게 무의미해졌으며 좀 더 재미있는 해킹을 해보고 싶은 욕구가 생겼습니다.

포트를 쉽게 알아내기 위해 직접 프로그램을 만들었고 그 결과 거의 모든 온라인 게임에 공짜로 접속하는 방법을 알아내었습니다. 그 후 저는 좀 더 심화적인 해킹 기법에 관심이 생겼고 Linux를 직접 설치하여 운영하고, 프로그래밍도 지속적으로 학습하는 등, 지금도 높은 기술을 얻기 위해 공부하고 있습니다.


신문에서 국내에서 최초로 생겼었던 Wargame 사이트의 소개를 보게 된 것이 해킹을 공부하게 된 원인이었습니다.

사이트를 구경하다 호기심에 해당 사이트의 사람들이 모여있는 IRC에 접속해서 인사를 했습니다. 저의 질문들에 친절하게 대답해주시는 분들도 많았지만 그렇지 않은 사람들도 있었습니다. 실력이 없다고 저를 무시하기가 부지기수였고 저는 자극을 받아서 그 후부터 IRC 접속을 끊고 Linux와 프로그래밍, 네트워크 공부를 했습니다.

몇 달 후엔 스스로 모든 문제를 풀 수 있을 수준이 되었고 Wargame 사이트의 문제 이외에도 더 많이 공부해야 하는 것들이 있다는 것을 깨달았습니다. 그 후부터는 외국의 Advanced Buffer Overflow와 같은 문제를 풀어보기도 하고 어느 정도 숙련이 된 후에는 직접 새로운 공격 기법을 개발하기도 했습니다. 당시에는 저를 무시했던 사람들을 무시하기 위해 더 많이 공부했었지만, 지금 생각해보면 제가 해킹에 빠져들게 된 계기를 준 분들입니다.


대학에서 컴퓨터를 전공하고 취업을 한 후에 해킹을 접했습니다.

그전까지는 관심만 있었고 실제로 접해본 적은 없었는데 제가 관리하고 있던 서버가 해킹을 당하고 나서부터 보안에 관련된 공부를 시작했습니다. 해킹은 기존에 배웠던 분야와는 달라서 조금 생소했었지만 컴퓨터를 전공해서 그런지 큰 어려움 없이 공부를 할 수 있었습니다.

아무래도 해킹이란 것은 컴퓨터의 전반적인 지식이 기본이 되는 분야이기 때문에 제가 학교에서 배웠던 프로그래밍이나 운영체제, 네트워크 등에 대한 지식이 도움이 많이 되었습니다. 그러나 깊이 들어갈수록 단순히 알고, 배워야 하는 것보다는 스스로 연구해서 풀어나가야만 하는 것들이 많아서 고생도 했습니다. 무엇보다 센스나 창의력이 요구되는 분야이기 때문에 저도 이러한 능력을 키우기 위해 해킹을 위한 공부만을 따로 집중적으로 계획하여 시간을 투자하기도 합니다.



3. 공부 방향 설정

선례에 대해서 알아보았습니다. 제가 생각하기에 어떤 분야를 공부하려 할 때는 세 가지가 중요한 것 같습니다.

첫째. 왜 공부를 하려 하는가?

둘째. 성취하고자 하는 목표는 무엇인가?

셋째. 어떤 분야를 자신만의 전문 분야로 할 것인가?

첫째와 둘째의 경우는 사상에 관련한 문제이니 여기서는 다루지 않고 셋째만 다루겠습니다.

해킹이란 것은 컴퓨터 분야에 있어서 하나일 뿐이지만, 또한 그 해킹에서도 세부 분야로 나뉠 수 있습니다.

세부 분야의 각각에 대해서 최고인 사람은 있어도 모든 분야에 최고인 사람은 없다고 생각합니다. 꼭 이러한 이유가 아니더라도, 우선 어떤 분야를 전문 분야로 세우고 싶은지 계획하는 것은, 공부를 하기 위한 계기나 방향을 잡는데 도움이 될 수 있을 거라 생각합니다. Virus, System, Web, Network, OS, Embedded System, Wireless, CDMA, Radio Frequency 등 보안에 적용되는 분야는 여러 가지가 있습니다. 어느 것이 자신에게 적성이 맞을 지 우선 조금씩 맛보는 것이 필요합니다.



4. 구체적인 공부 방향 접근

Security & Hacking을 공부하는 절차는 Flow Chart처럼 표현할 수 있는 것은 아닙니다. 사람마다 공부하는 스타일이 다르기 때문에 어떤 것이 정답이라고 할 수는 없으나 객관적인 기준은 어느 정도 세울 수 있습니다. 모든 분야에 대한 설명을 하기엔 조금 무리가 있으므로 여기서는 System Hacking 공부에 대한 접근법을 예로 들어서 순차적으로 설명하겠습니다. (System Hacking에는 많은 잠재적인 공격 기법들이 포함되어 있습니다. 여기서는 설명을 위하여, System Hacking의 대표적이라 할 수 있는 BufferOverflow와 FormatString 공격 기법을 대상으로 합니다.)


(1) System Hacking은 무엇인가?

System Hacking은 Program의 취약성을 이용하여 Process의 진행 방향을 해커가 원하는 곳으로 바꿔서 System에서 부당한 권한을 획득할 수 있는 기법입니다. 그렇기 때문에 System에 대한 이해가 반드시 필요합니다.


(2) 어떤 지식들이 필요한가?

(원론적인 지식부터 설명하지 않고 배우기 쉬운 기법부터 설명하겠습니다.)

-1. Application Program의 소스를 분석하여 취약성을 발견하고 이를 공격에 응용할 수 있는 프로그래밍 능력. (대표적으로 C, C++언어)

-2. 소스가 공개되지 않은 Program을 분석하거나, 공격 시 Debug, 혹은 Process의 진행 구조를 파악하고 Shell Code 작성을 위한 Assembly 능력.

-3. Process들이 어떻게 실행되고 종료되는지 알아보기 위한 OS 스케줄링 연구


-4. 보다 심화적인 공격을 위한 (Process) File Format 구조, Memory Mapping 분석. (Linux에서는 ELF, Windows에서는 PE)

-5. Application Program뿐 아니라 Kernel 자체의 취약성을 연구하기 위해 OS 구조 연구.

그 외, System Hacking의 유형과 사례를 알아봄으로써 경험을 쌓기 위해 보안 권고문을 지속적으로 구독.


(3) 공부 방법

처음 공격을 시도할 땐 생각대로 잘 되지 않습니다. 낯설고 익숙하지 않은 환경에 실패를 거듭하다 보면 주눅이 들어서 포기하게 될 수도 있습니다. 그래서 아주 기초적인 공격 기법부터 차례대로 연습하는 것이 좋다고 생각합니다. 공격에 성공함으로써 얻는 사소한 자신감은 공부를 지속할 수 있는 계기가 될 수 있습니다.

우선 기존의 Wargame Site들은 처음 시작하는 초보자들을 위한 곳은 아닙니다. 그렇기 때문에 처음 공부하실 땐 Wargame Site보다는 공격에 성공할 수 있는, 처음부터 끝까지의 과정을 다룬 문서를 구하셔서 직접 자신의 컴퓨터에서 테스트를 해보는 것이 좋다고 생각합니다. 성공 하셨다면 성공했던 취약 소스를 조금씩 변경해보면서 다시 공격을 하고, 어느 정도 경험이 쌓이면 Wargame의 문제들을 풀어보는 것입니다. 문제들을 처음부터 끝까지 자신의 힘으로 푼다면 좋겠지만 정말 모를 경우엔 풀이를 다룬 문서를 구하셔서 공부하신 후 원리 파악에 집중하시기 바랍니다. 발전을 위해서 잠시 다른 사람의 정보를 이용하는 것은 전혀 나쁜 방법이 아닙니다. 인터넷에 공개되는 문서들은 다른 사람과 정보를 공유하기 위하여 만들어지는 것입니다.

그러나 Wargame의 문제들은 실전에서 나올 수 있는 취약성과는 조금 경향이 다릅니다. 물론 Wargame Site가 워낙 많기에 문제도 다양하고 기술적으로도 높은 수준을 요구하는 문제도 있지만 실전과는 조금 다르다고 볼 수 있습니다. 왜냐하면 실전에서는 Program 소스가 Wargame 문제처럼 짧지 않고 또 소스가 공개되지 않은 경우도 있기 때문입니다. 소스 중에 취약한 상황이 발생될 수 있는 함수만을 grep 하여 공격에 성공할 수도 있지만 요즘 같은 경우 유명한 Program에서 그런 간단한 취약성이 나올 경우는 거의 없습니다. 실전 Program의 취약성에 대한 연구와 사례에 대해서는 나중의 연재들에서 다루도록 하겠습니다.


(4) 심화 학습

어느 정도 지식을 숙지했다면 System Hacking을 구사하는 것은 어렵지 않습니다. 공격에 성공하기 위한 수작업도 필요하고 복잡한 HEX 코드가 잔뜩 있지만 원리만 정확히 파악하고 있으면 쉽게 할 수 있는 것이 System Hacking입니다.

그러나 전문 분야로 삼고 있다는 것은, 단순히 ‘알고 있다는 것’을 의미하는 것이 아닙니다. 보안 장치로 인해서 기존의 공격 기법들이 통하지 않을 때 이것을 우회할 수 있는 능력이 있어야 하며 더 똑똑하고, 쉽고, 간결한 기법을 만들 수 있는 창의력이 있어야 합니다. 이러한 모든 것은 기본 지식이 충실하게 갖추어져 있을 때만 가능하며 또 해당 분야에 대한 감각이 있어야 합니다. 심화 학습을 위한 좀 더 자세한 내용은 나중의 연재들에서 다루어보도록 하겠습니다.

반응형