본문 바로가기

[☩ Security ☩]

해커의 조건

해커에 대해서 알고싶거가 오해해 소지가 없어지길 바라며 이글을 올려봅니다.^^

저자 : 최효식/ 충남대학교

1. 해커의 조건

해커에 대한 막연한 이상을 가진 사람들이 많다. 모두들 해커가 되고 싶어 하지만, 해커가 되기 위해서 어떤 것들이 필요한지 잘 모르는 것이 현실이다. 해커로 다가서기 위해 어떤 정신과 자질이 필요한지 살펴보자.

일반인들이 생각하는 해킹과 해커의 이미지는 아직도 ‘악의적인 행위 일색의 컴퓨터 전문가’로 국한되는 경향이 있다. 그렇다면 과연 해커는 어떤 사람일까? 유명한 해커인 에릭 레이몬드(Eric Steven Raymond)는 그의 저서에서 해커와 크래커에 대한 정의를 명확히 할 필요가 있다고 강조했다. 그는 시스템에 침투해 데이터를 조작하는 등의 악의적인 행위를 일삼는 사람을 크래커라고 했다.

이에 반해 해커에 대한 정의는 많은 논란이 일 정도로 다양하게 정의되어 왔으며, 현재는 기술적으로 정통한 사람들과 그런 기술적인 문제들을 해결하고 한계를 극복하려고 끊임없이 노력하는 사람들을 해커로 정의했다. 또한 일반인은 해커를 컴퓨터 분야의 전문가로만 여기지만, 해커들은 이런 컴퓨터 분야에만 그치지 않고, 전자공학이나 음악, 기타 과학의 최상위 그룹들에서도 해당 분야의 연구에 매진하고 있다. 해커와 크래커는 단적으로 <그림 1>과 같이 끊임없는 자기 개발과 연구를 통해 어떤 것을 만들어내는 사람과 만들어낸 것을 부수는 사람으로 비교될 수 있다.

해커에게 해킹은 수단이 아니다

해커가 되기 위해서는 개인이 쌓아야 할 소양이 많고, 스스로가 아니라 많은 사람들이 인정해주는 상황이 되었을 때, 다시 말해 많은 사람들이 해커라고 불러주길 기다려야 한다. 기술적인 요소보다 오히려 그것을 익히고 접하는 사람의 마인드가 중요하다.

필자는 애플리케이션을 개발한 후, 가끔 테스트상의 이유로 여러 가지 알려진 공격들을 해본다. 바쁜 개발 일정이나 잘못된 프로그래밍 습관으로 인해 범하는 각종 취약점을 찾아내는 것에서 일종의 쾌락을 느끼는 것이다. 하지만 취약점을 찾아낸 후 꼭 잊지 않는 것이 있다. 그것은 테스트한 애플리케이션이 가진 문제점을 정리해서 보완하는 것이다. 다시 말해 해커는 취약점을 찾아내는 행위를 즐기는 것이지 발견한 취약점을 이용해 제2의 목적을 달성하려는 의도는 없다. 앞에서 강조한 크래커와의 차이를 상기하면 해커의 정신을 어렴풋이 짐작할 수 있는 것이다. 해커는 해킹을 자신의 삶의 목적이자 신이 자신에게 부여한 선물이라고 생각한다. 해커에게 해킹은 수단이 될 수 없다.

이런 해커 정신의 고양은 많은 시간 투자를 요구한다. 국내의 경우 많은 해커들이 존재하지만, 그들이 사회에 진출해서 자신들의 실력을 펼치지 못하는 것은 그만큼 국내 현실이 외국에 비해 척박하며, 해커 문화를 인정해줄 만큼 성숙하지 않았기 때문이다. 이런 현실에도 음지에서 활동하는 언더그라운드 해커들이 존재하고 해커가 되고자 꿈을 키우고 있는 사람들이 있다는 것은 그들을 지탱해주는 힘, 정신이 그들의 가슴 속에 살아 있기 때문이다.

<그림 1> 해커와 크래커

<화면 1> 케빈 미트닉(Kevin Mitnick)과 리차드 스톨먼(Richard Stallman)

사람들은 전설적인 해커로 케빈 미트닉(Kevin Mitnick)을 많이 꼽는다. 그의 저서인 『속임수의 미학(The Art of Deception)』을 읽으면 사회 공학적(social engineering) 해킹의 심각함과 미국 해커 역사에 대해 생각하게 되지만 진정으로 그에게 본받아야 할 부분은 기술과 아이디어다. 그는 폰 프래킹(phone phreaking)부터 해킹과 관련한 많은 분야의 기술적인 근간을 제공했지만 해커는 크래커라는 동일성을 확실히 심어준 사람이다. 국내에서도 프로그래밍에 몰두하는 사람들이 해킹에 관심을 갖고 자연스럽게 해킹 도구들을 접하다보니 스크립트 키디(script kiddy)와 크래커를 거쳐 해커에 다가선다고 생각한다. 하지만 중요한 것은 크래커의 실험 대상이 자신의 영역을 벗어날 때 바로 범죄로 이어질 수 있다는 사실이다. 물론 ‘호기심이 죄’라는 말도 있지만, 그 호기심을 순수 프로그래밍에 대한 열정으로 표현한다면 그러한 불상사는 발생하지 않을 것이다.

비교의 대상으로서는 무리가 있지만 리차드 스톨먼(Richard Stallman)에 대해 언급하면, 그에게 같이 따라오는 수식어는 GNU 선언문, 자유 소프트웨어(Free Software), GPL(General Public License) 등이다. 스톨먼 역시 해커로써 유명지만 그는 무엇인가 계속 연구해서 만들어내고 있다. 그리고 그 결과물들이 여러 사람들을 위해 커뮤니티를 만들어 힘을 실어주는 데 사용되고 있다.

해커의 자질

이 글을 읽고 있다면 적어도 한두 가지 프로그래밍 언어에 대해 어느 정도 경험을 가지고 있을 것이다. 해커와 해킹에 관심 있는 IT 분야의 학생들이나 일반인들에게 적어도 <표 1>과 같은 내용은 강조하고 싶다.

새로운 생각을 하는 것이 어려운 일이지 그 일을 컴퓨터에게 전달하는 과정은 어려운 것이 아니다. 그러나 아무리 좋은 아이디어를 가지고 있어도 그것을 컴퓨터가 전달할 수 없다면, 그 누구도 그런 사람을 해커라고 생각하지 않는다.

일반적으로 처음 접하는 프로그래밍 언어는 C 언어인 경우가 많다. 물론 객체지향 프로그래밍(Object Oriented Programming) 개념을 위해 자바를 먼저 배우기도 한다. 이외의 프로그래밍 언어는 다양하고 각 분야에 나름의 장점을 가지고 사용되고 있어 어떤 언어가 좋고 나쁨을 판단하기는 힘들다. C 언어는 컴파일 이후의 실행 속도나 표현할 수 있는 영역 측면에서 볼 때는 매우 좋은 언어이지만, 개발자에게 자유로운 개발 환경을 제공하는 만큼 여러 부분을 직접 제어해야 하는 전문성을 요한다.

이밖에도 역동적인 웹 페이지를 구성하는 데 많이 쓰이는 Perl이나 PHP 같은 언어들도 있으며, 앞서 언급한 자바와 같이 훌륭한 객체지향 이념이나 이식성을 갖고 있는 언어도 있다. 파이썬과 같이 프로그래밍을 하면서 아름답다고 느낄 수 있는 것도 있으며, LISP 같이 독특하고 심오한 맛을 가진 언어도 있다.

해커의 입장에서 어떤 언어를 먼저 배우고, 어떤 언어가 가장 효율적인지 고민할 수 있지만, 한두 가지 언어를 사용할 줄 안다고 쉽게 해커가 되는 것은 아니다. 일반적인 프로그래머들도 많은 언어들을 사용할 줄 알고, 한두 가지 언어에는 능통하다. 실력 있는 해커들은 그런 프로그래머들에게 뒤지지 않을 정도의 센스를 가지고 있으며, 처음 보는 언어도 상당한 수준에 이르는데 그리 오랜 시간이 걸리지 않는다. 해커에게 프로그래밍 언어는 글 쓰는 것이 주업인 작가의 표현력과 같은 의미이기에 그만큼 중요하다.

<그림 2> 해커의 미래에 대한 청사진

<표 1> 해커가 되기 위해 필요한 자질

해커가 가져야 할 자질
개발 방법
해커 정신 오픈소스에의 헌신
프로그래밍 스킬 다수의 프로그래밍 언어 습득과 언어로부터의 독립
자신만의 안목 자신만이 가질 수 있느 재능과 안목의 개발
자유스러움과 고집 자기 고유의 개발방식 및 생활패턴의 형성과 고수
세계화와 커뮤니케이션 커뮤니케이션 방법의 습득

<표 2> 해커가 되기 위한 참고 사항

구분
세부사항
프로그래밍 언어 Perl, 스크립트(PHP, ASP, JSP), HTML, C, C, 자바, 파이썬, LISP, 어셈블리
참고 서적 GNU 선언문, Practical Unix and Internet Security(3판),
Hackong Exposed(4판), Operation System Concepts(6판),
TCP/IP Illustrated
참고 사이트
국내
해커스쿨, 해커스랩. 와우해커, 널루트 등
국외
시큐리티 포커스(securityfocus), 프랙(phrack), 소스포지(sourceforge),
데프콘(defcon), 블랙햇(blackhat), cnhonker, xfocus, bugtraq, vulnwatch,
packetstormsecurity 등

<그림 3> 미국 해커 컨퍼런스

<그림 4> 국내 해커그룹 연대표

하지만 더욱 중요한 것은 프로그래밍 언어 지식보다는 많은 프로그래밍 언어를 알고 있음으로 인해 생기는 적응력이다. 앞서 언급한 바와 같이 각 언어가 특징적으로 빈번하게 사용되는 분야가 있는 것처럼 해커는 해킹을 함에 있어 자신의 생각을 표현할 무기로써 프로그래밍 언어를 선택한다. 무기가 몇 가지 없는데 고르라고 하면 그만큼 좁은 시야 안에서 선택하게 되므로 프로그래밍 언어의 중요성은 크다. 또 프로그래밍 언어를 배움에 있어 간과하지 말아야 할 부분은 방대하게 아는 것도 중요하지만, 한두 가지 언어에 대해서는 깊은 지식을 가지고 있어야 한다.

근래에는 C 언어가 해커에게 필수적이며, 그 밖에 Perl과 스크립트 언어인 PHP, ASP, JSP 정도가 활용되고 있다. 해커 입문을 위해 한 가지 언어를 추천한다면 그것은 스크립트 언어다. 현재의 크래킹 출발지가 웹 해킹이 될 정도로 웹 환경은 대중화되었으며, 웹 서버와 웹 애플리케이션이 가진 취약점은 많다. 또한 단순히 배우기 쉽고 눈에 보이는 것이 많아 프로그래밍하고 취약점을 공부하고 익히는 데 더할 나위 없이 좋다. 어느 정도 스크립트 프로그래밍에 대한 이해가 생겼다면 C 언어도 추천한다. C 언어가 가지고 있는 범용성은 C 언어를 좋아하던 좋아하지 않던 누구나 배우게 하는 마력을 가지고 있다.

어느 정도 프로그래밍에 대한 자신감을 갖고 있다면 자신만의 안목도 필요하다. 여기서 안목이란 다른 사람들과 구별되는 그 무엇을 말하는데, 같은 기능의 프로그램이라도 사용될 수 있는 알고리즘이 다양한 것처럼 어떤 문제를 해결하기 위해 바라보는 자신만의 시각을 가져야 한다. 또한 해커 문화가 강조하는 자유스러움과 고집은 해커라는 전문가만이 가지는 삶의 방식이다. 자신의 실력에 대한 믿음과 자부심이 바탕이 되지 않으면 이런 문화 역시 탄생할 수 없었을 것이다.

마지막으로 해커가 되기 위해 필요한 자질로 강조하고 싶은 것은 커뮤니케이션과 세계화에 대한 부분이다. 국내외에는 많은 해커그룹들이 존재한다. 그들이 그룹으로 활동하는 이유는 어느 국가 기관이나 단체와 마찬가지로 자신들이 연구하는 분야를 선정해 자신들만의 영향력을 갖기 위해서다. 특히 국외의 드러난 해커들의 경우 소속된 그룹이 함께 유명한 경우가 많다. 해커 개인이 아무리 뛰어난 지식을 갖고 있어도 자신이 연구한 바를 컴퓨터 속에 꽁꽁 숨겨놓고 있다면 그것은 죽은 지식이다. 그래서 그들은 지식을 공유하기를 원하고, 공유된 지식은 어떤 방법으로든 이용되길 원한다. 물론 아쉽게도 크래킹에 많은 부분이 이용되지만, 이런 해커와 해커 소속 그룹간의 커뮤니케이션은 해커 사회에서는 없어서는 안 될 채널이다. 해커 문화에 관심이 많다면 유명 해커그룹의 커뮤니티에서 활동을 열심히 하는 것도 한 방법이다. 하나 더 말하자면 영어의 중요성이다. 컴퓨터를 공부하는 사람들이 아이러니컬하게도 골치를 썩는 부분 중 하나가 영어이다. 굳이 세계화라는 단어를 붙이지 않아도 요즘은 살아남기 위해서는 영어를 해야 한다. 특히 해커가 되고자 하는 사람들은 양질의 문서들이 대부분 영어로 되어 있고, 유수의 해커 컨퍼런스가 영어로 진행되기 때문에 필히 친숙해져야 한다.

해커들은 폐쇄적이라는 말을 많이 듣는다. 일반인들의 시선이 크래커와 동일하기 때문에 마치 범죄자처럼 움츠려든다고 생각할 수도 있으며, 해커그룹들 간의 교류 역시 활발하지 않은 것이 사실이다. 미국의 해커들이 <그림 3>과 같이 다양한 컨퍼런스를 기반으로 해커그룹들의 기술 지식을 모으고, 문화를 부흥시키려는 노력이 활발한 것에 비해 국내의 경우 해커그룹간의 교류는 거의 없는 것 같다. 아마도 국내의 경우 해킹과 관련된 사항을 범죄로 치부해 너무나도 엄격하게 단속을 한 것이 큰 원인이 아닐까 생각한다. 국내의 해커그룹이 <그림 4>와 같은 단계를 밟아오던 국내 해커그룹이 올해에는 과연 기존의 활동들과 어떤 차이를 보여줄지 기대한다.

공부를 하면서 개개인이 생각해봐야 할 것은 어떤 해커가 될 것인가이다. 국내외에는 수많은 해커들이 있다. 일부는 스스로를 해커라고 생각하지 않지만 많은 이들이 그들을 해커라고 인정한다. 또 일부는 자신들의 실력만을 내세워 크래킹을 일삼고 오만함에 빠져 있는 사람들이 스스로를 해커라고 부른다. 스스로의 모습을 갖춰가는 것은 독자들의 몫이다. 해커들의 기술적인 지식은 계속 앞서갈 것이나 해커를 크래커로 전락시키지 않는 마인드는 우리 스스로 키워야 할 숙제이다.