데비안 운영체제를 이용해 서버의 개념과 주요 서비스 구축은 물론 리눅스 기반 운영체제에서 설정해야 할 각종 보안 설정 등을 소개했다. 다시 말해 전반부에서 리눅스 개념과 기본 명령어, 그리고 주요 인터넷 서비스 설치와 설정을 설명했고, 후반부에서는 데비안 기반의 각종 보안 설정을 설명했다.
아무쪼록 이 책이 국내 사용자들에게 데비안에 대한 기본뿐만 아니라 우분투와 칼리 등에 대한 기본을 확립하는 데 일익을 담당한다면 더할 나위 없는 보람일 듯싶다.
지금 뒤돌아 보면 내가 관공서에서 정보 기술 분야를 강의한 지도 벌써 15년이 흘렀다. 그동안 강의했던 내용을 기반으로 2015년 생애 처음으로 내 책을 출간했다. 바로 『칼리 리눅스 입문자를 위한 메타스플로잇 중심의 모의 침투』(2019)다. 이후 6권의 책을 더 출간했다. 그리고 이제 이 책은 나의 8번째 저서이자 3번째 공저다.
이 책의 주제는 파이썬 3 버전을 이용한 TCP/IP 소켓 구현과 응용이다. 다시 말해, 이전에 내가 출간한 『해킹 입문자를 위한 TCP/IP 이론과 보안 2/e』(2019)과 『해커의 언어 파이썬 3 입문』(2018) 다음 내용에 해당하는 책이 바로 이 책이다. 그런 만큼 이 책을 완전히 소화하기 위해서는 『해킹 입문자를 위한 TCP/IP 이론과 보안 2/e』에서 다루는 내용을 충분히 이해한 뒤 『해커의 언어 파이썬 3 입문』을 통해 파이썬 3 버전의 기본 문법을 숙지해야 한다. 이는 이 책에서 TCP/IP 이론에 대한 설명이나 기본 문법 내용이 빠진 이유이기도 하다. 이런 내용까지 이 책에 모두 담는다면 분량이 너무 많아졌을 것이다.
이 책에서는 파이썬 3 버전을 이용해 TCP/IP 소켓을 구현하는 과정을 소개하고, 그러한 소켓 구현 지식을 기반으로 가장 대표적인 모의 침투 도구를 구현하는 과정을 소개한다. 그러나 모의 침투 도구의 종류는 무수히 많기 때문에 이 책에서 모든 내용을 소개할 수는 없다. 이 책의 기본 내용을 완전히 터득한다면 나머지 도구들은 독자의 필요에 따라 스스로 구현할 수 있으리라 확신한다.
이런 점에서 본다면 이 책은 모의 침투 전문가를 지향하는 독자에게 파이썬 3 버전을 이용한 TCP/IP 소켓 구현과 그에 기반한 응용 과정을 제시하는 데 목적이 있다.
전반부, 다시 말해 제1장부터 제10장까지는 내가 2019년 1월과 2월 사이에 주도적으로 집필했다. 전반부에서는 파이썬 3 버전을 이용해 TCP/IP 소켓을 구현하는 내용을 소개했다. 다양한 침투 도구를 개발하기에 앞서 해당 내용을 완전히 터득할 때까지 반복해 익히기 바란다. 제11장부터 제15장까지가 후반부로서 박재유 선생님이 2020년 1월과 2월 사이에 주도적으로 집필한 부분이다. 후반부에서는 전반부에서 익힌 내용을 기반으로 가장 대표적인 침투 도구를 구현하는 과정을 소개했다. 좀 더 많은 유형을 담으면 좋았겠지만 늘 제한적인 지면을 고려해야 하는 만큼 유형을 선정하는 데 많은 고심을 해야 했다. 특히, 제15장은 국내 서적에서는 좀처럼 확인하기 어려운 내용을 담았다. 개인적으로 볼 때 박재유 선생님의 탁월한 기량이 나타난 부분이 제15장이라고 생각한다.
다른 분야와 마찬가지로 사이버 보안 분야 역시 한 권의 책으로 모든 내용을 담을 수는 없다. 그래서 늘 다양한 책을 통해서 지식을 습득할 수밖에 없는 실정이다. 파이썬 언어의 매력과 활용은 무궁무진하다. 이 책은 파이썬의 무궁한 활용 분야 중 소켓에 초점을 두고 그에 기반한 응용 방식을 소개했다. 아울러 TCP/IP 이론을 숙지한 독자 또는 파이썬 3의 기본 문법을 숙지한 독자, 데비안/우분투 환경에 익숙한 독자, 모의 침투 기량을 한 단계 높이려는 독자, 대학교와 대학원에서 정보 보안을 전공하는 독자 등을 대상으로 집필했다. 이런 분들에게 이 책이 일익을 담당할 수 있다면 우리에게는 더할 나위 없을 기쁨이겠다.
칼리 리눅스는 전 세계적으로 가장 많은 사용자를 보유한 모의 침투 운영 체제다. 그러나 칼리 운영 체제는 데비안 운영 체제를 기반으로 설계했기 때문에 버전업이 이루어질 때마다 점차 무거워지는 경향이 있다. 그러다 보니 좀 더 가벼운 모의 침투 운영 체제에 관심을 가지면서 모의 침투 전문가들 사이에서 백박스 리눅스가 점차 주목받기 시작했다.
백박스 운영 체제는 우분투 운영 체제를 기반으로 설계했기 때문에 우분투의 편리성과 경량성 등을 고스란히 간직한 모의 침투 운영 체제라고 할 수 있다. 국내에서 출간된 백박스 운영 체제 도서는 스테판 위미트 위구르(Stefan Umit Uygur)의 『BackBox를 활용한 침투 테스트와 모의 해킹』(에이콘, 2014)이 유일하다. 그러나 적은 분량으로 인해 다양한 도구 활용 예제가 부족하고, 책에서 설명한 설정 내용을 실제로 적용하면 설치, 설정 등에서 차이가 많이 생기는 아쉬움이 있다. 책에서 소개한 도구 중 일부는 아예 백박스에 없는 경우도 있는 실정이다.
이에 따라 최신 백박스 버전을 이용해 기존에 출간한 『BackBox를 활용한 침투 테스트와 모의 해킹』을 기반으로 좀 더 상세하게 주요 모의 침투 도구 사용법을 소개할 필요가 있다고 느꼈다. 더욱이 『칼리 리눅스 입문자를 위한 메타스플로잇 중심의 모의 침투』(에이콘, 2015)는 MSF 도구 중심으로 모의 침투를 설명하다 보니 여타의 침투 도구에 대한 설명이 부족했다. 이처럼 MSF 도구와 이 밖의 여타 침투 도구에 대한 설명을 최근 계속 주목받는 백박스 운영 체제를 통해 보충하고자 했다. 다시 말해, 이 책은 가볍고 깔끔하면서도 칼리 리눅스에 견줄만큼 높은 완성도와 안정성을 자랑하는 백박스 리눅스를 이용해 사이버 보안 감사에 필요한 다양한 모의 침투 도구를 소개하면서 전작의 후속작으로 기획했다.
나는 지난 2월 한 달 내내 이 책을 집필하는 데 매진했다. 잘못된 입력에서 잘못된 출력이 나타난다는 전산의 기본 법칙을 알기 때문에 사소한 오류가 독자 여러분에게 잘못된 지식으로 전해지는 두려움을 떠안으며 한 자 한 자 정성을 들였다. 그럼에도 내가 간과한 오류가 있을 수 있다. 나의 이러한 노력만이라도 가상히 여겨 너무 심하지 않게 질책하기 바랄 뿐이다.
컴퓨터 언어는 전산학 전공자나 정보 보안 전공자에게는 사실상 모국어와 같다. 전산학 전공자는 알고리즘을 개발하기 위해 언어를 이용하고 정보 보안 전공자는 개발한 알고리즘에서 취약점을 검사하기 위해 언어를 이용한다. 컴퓨터는 분명 하드웨어라는 기계를 기반으로한 장치지만 실제 동작은 언어에 기반하기 때문에 컴퓨터를 다루는 이상 언어에 대한 학습은 절대 피해갈 수 없는 숙명과도 같다. 이것은 마치 수학이 없으면 천문학을 이해할 수 없는 이치와 다를 바 없다.
나는 원래 인문 계열 출신이라 컴퓨터 언어를 접할 기회 자체가 거의 없었다. 가까운 친척이나 지인조차 전산 분야와는 너무나 거리가 먼 사람들이었기 때문에 컴퓨터 언어라는 단어조차 생소했다.
전산 분야로 방향을 튼 이후로 C 언어와 자바 언어 등을 접했지만 성취감보다는 좌절감만 느껴야 했다. 알고리즘 사고가 빈약한 것이 주요한 원인이었고, 다음으로는 학습 방법의 부적응 때문이었다. 특히, C 언어의 경우에는 유닉스 시스템이라는 기계의 구조와 동작을 선행적으로 이해한 상태에서 접근해야 할 언어임에도 이러한 과정을 생략하다 보니 많은 사람들처럼 포인터 부분에서 지루한 교착 상태에 빠지곤 했다. 그러다 결국 중도 포기를 여러 번 반복했다. 자바 언어의 경우에는 객체 지향의 이론은 터득했지만 복잡하게 느껴지는 설정과 군더더기와 같은 소스 코드 등이 거부감으로 작용해 객체 지향의 이론만 머리에 간직한 채 내 스스로 사장시킨 언어였다.
강사로서 나는 늘 찜찜함이 묻어 있는 삶을 사는 기분이었다. 컴퓨터 분야에서 생계를 이어가면서도 자신만의 컴퓨터 언어가 없다는 것은 마치 화장실에서 휴지가 없어 뒤처리를 못한 상황과 다를 바 없었다.
그러다 지난 2012년 중앙 공무원 교육원에서 당시 경찰 수사 연수원 교수로 재직 중이었던 유현 교수님을 통해 '백트랙(BackTrack)'과 '파이썬(Python)'이란 왠지 멋있어보이는 존재를 처음 알았다. 불혹을 넘긴 나이로 전산 분야의 강사로 살면서 수강생으로부터 백트랙과 파이썬의 존재를 비로소 알았다는 것은 무척 부끄러운 일이었지만 그것은 내 강사 생활에 있어 일대 전환점이기도 했다.
이후 화두를 간직한 채 참선에 열중하는 스님처럼 내 머리에는 늘 백트랙과 파이썬이란 말이 떠나질 않았고 그 때문에 내 관심사는 오직 이 두 개에만 쏠려 있었다. 나는 지도만을 손에 쥐고 마치 보석을 찾아나선 사람처럼 틈만 나면 백트랙 정복에 몰두했다. 그런 나의 고단했던 노력은 작년에 『칼리 리눅스 입문자를 위한 메타스플로잇 중심의 모의 침투』로 결실을 맺었다.
내 생애 처음 출간한 책이었기 때문에 무척 기뻤지만 환희의 포만감은 금방 꺼지고 말았다. 피자는 있지만 콜라가 빠진 식탁에 앉은 기분이었다. 그래서 곧바로 착수한 일이 TCP/IP 분야와 파이썬에 대한 원고 집필이었다.
두 개의 분야를 동시에 집필하는 일은 결코 쉬운 작업이 아니었지만 10년 이상 강의했던 TCP/IP 분야를 기반으로 소켓 프로그래밍을 다루는 작업이었기 때문에 동시 집필 작업에서 일어날 수 있는 난관은 용케도 피해갔다. 내 적성에 가장 부합하는 언어를 모색하는 오랜 방황이 있었던 이유 때문인지는 몰라도 파이썬 기반의 소켓 내용을 다루는 원고 집필은 일사천리로 진행됐다.
4년 전 유 교수님으로부터 처음 들었던 백트랙과 파이썬 덕분에 이제야 비로소 피자와 콜라로 채운 식탁을 차릴 수 있게 됐다.
"Life is too short, You need python(인생은 짧기에 파이썬이 필요해)."라는 말처럼 파이썬의 생명은 간결성이다. 간결성은 곧 경제성이기도 하다. 자바에서는 간단한 문자열을 출력하는 것조차 이러저러한 설정이 있어야 하지만 파이썬에서는 단지 print 문만 있으면 충분하다. 이런 장점 때문에 파이썬은 이미 오래 전에 다양한 분야에서 환영을 받는 언어로 자리매김했다. 특히, 365일 24시간 마치 서버의 동작처럼 일상 대부분을 컴퓨터 앞에 앉아 생활하는 해커들은 파이썬의 장점을 일찍부터 간파해 이미 오래 전부터 보안 진단 도구를 파이썬으로 작성했다. 칼리 또는 백박스 등과 같은 모의 침투 운영체제에 기본으로 내장한 SQLMap이나 SET(Social Engineer Toolkit) 등이 대표적인 파이썬 기반의 도구들이다.
이 책은 파이썬 기반으로 소켓 프로그래밍을 시작하려는 사람들을 대상으로 한다. 따라서 최소한 프로그래밍에서 사용하는 변수나 함수 개념 정도는 알고 있으며, TCP/IP 이론을 어느 정도 아는 사람에게 적합한 책이다. 이 말을 뒤집어 말하면, 프로그래밍에 대한 개념이나 TCP/IP 이론을 전혀 모르는 사람에게는 별다른 감흥이 없을 수도 있다는 말이다.
2장부터 11장까지는 파이썬에서 사용하는 문법을 중심으로 설명한다. 문법 내용을 다시 세부적으로 구분하면, 2장부터 6장까지는 파이썬에서 처리하는 데이터 타입을 설명하고, 7장에서는 제어문을 설명한다. 그리고 8장부터 10장까지 설정 규모에 따라 함수와 모듈, 클래스를 차례대로 살펴보고, 11장에서는 예외 처리에 대해 알아본다. 각 장의 순서는 단계별로 이전 내용을 반영한 내용인 만큼 가급적 순서대로 학습하는 것을 추천한다.
12장부터 14장까지는 소켓 프로그래밍을 위해 반드시 필요한 내용을 다룬다. 특히, 데이터 전송 단위나 각 헤더의 구조는 파이썬 코드에 역점을 두고 설명한다. 독자 여러분들도 TCP/IP 동작 관점이 아닌 코드 구현 측면에서 각 내용을 학습했으면 한다. 15장에서는 본격적인 소켓 프로그래밍을 시작하기에 앞서 핵심적인 관련 모듈 기능을 다양한 예제를 통해 설명한다. 이 중에서 struct 모듈은 C 언어의 API 호출과 관련이 깊다. 따라서 해당 장을 학습하면서 C 언어 기반의 소켓 구조도 함께 확인해 본다면 더욱 좋을 듯하다. 파이썬에서 struct 모듈이 중요한 이유는 비록 파이썬 문법에 따라 소켓을 생성하더라도 실제 소켓 실행은 C 언어로 처리하기 때문이다.
16장부터 20장까지가 본격적인 소켓 프로그래밍을 소개한 내용이다. 이 중 18장과 19장에서는 상위 계층과 하위 계층 측면에서 로우 소켓을 설명한다. 로우 소켓을 생성하기 위해서는 특히 데이터 전송 단위와 헤더 구조를 염두에 둬야 하는 만큼 13장과 14장의 내용을 다시 한 번 확인한 후 시작하는 것이 좋다.
이 책을 통해 파이썬 기반의 소켓 기본기를 터득해 진정한 해커로 도약할 수 있기를 바란다.
2년 만에 다시 국가 공무원 인재 개발원(구 중앙 공무원 교육원)으로 출강하기 시작했다. 국가 공무원 인재 개발원으로부터 다양한 과목을 의뢰 받았는데 그 중 한 과목이 바로 IDS(침입 탐지 장비)와 IPS(침입 방지 장비) 기능을 소개하는 과정이었다.
해당 과목을 준비하면서 IDS와 IPS에 접근하기 위해서는 반드시 스노트(Snort)와 IPTables 내용을 알아야 한다는 점을 깨달았다.
왜냐하면 형태와 부가 기능을 달리할 뿐 전 세계 IDS와 IPS 대부분은 스노트와 IPTables에 기반하기 때문이다. 다시 말해 IDS와 IPS의 원리와 구성을 이해하기 위해서는 스노트와 IPTables의 원리와 구성을 자세히 숙지할 필요가 있음을 깨달았다. 그래서 관련 책자부터 검색했지만 사실상 국내 출판 서적 중 스노트와 IPTables 등을 설명한 책이 없었다. 강의를 앞둔 시점에서 자료가 전무하다는 사실에 당혹감이 몰려들었다. 사이버 보안에서 IDS와 IPS의 역할은 사활적임에도 국내 출판 시장에는 관련 책이 없었다. 그러다 우연히 『스노트 2.0 마술상자』(에이콘, 2003)라는 책을 알게 됐다. 그러나 기쁨도 아주 잠시였다. 그 책은 절판 상태였기 때문이다. 혹시라도 보관용 재고가 있을까 싶어 에이콘출판사 측에 전화해 해당 책을 문의했다. 보관용 재고조차 없다는 담당자의 이야기를 들었을 때는 한 가닥 희망마저 무너진 기분이었다.
물론 내가 『데비안 리눅스 활용과 보안』(에이콘, 2017)이라는 공저를 통해 스노트와 IPTables를 다루긴 했지만 이것은 데비안 운영체제의 확장 기능 차원에서 스노트와 IPTables를 소개하는 수준이었기 때문에 체계적인 설명이 빈약하다. 다시 말해 초보자들이 책을 읽으면서 스노트와 IPTables 등을 설치하고 설정하는 데 무리가 있는 책이다.
불행 중 다행으로 강의 직전 에이콘출판사에서 출간한 『리눅스 방화벽』(에이콘, 2008)이란 책을 통해 그나마 강의에 부합한 내용을 준비할 수 있었다. 위기에 처한 나를 구해준 『리눅스 방화벽』은 탁월한 책이다. 그러나 이 책은 초보자보다는 중급자에게 초점을 두고 서술한 책이라 스노트와 IPTables에 처음 접근하는 사람들에게는 부담스러운 내용이 많다. 또한 레드햇 운영체제 기반으로 설치와 설정이 모두 수동 방식이기 때문에 이것 역시도 초보자들에게는 상당한 부담을 준다.
이러한 일련의 경험과 사실을 통해 IDS와 IPS에 대한 책을 집필해야겠다는 각오가 생겼다. 그래서 2017년 8월초부터 『우분투 리눅스 기반의 IDS/IPS 설치와 운영』 집필에 몰두했다.
이 책을 구상하면서 최근 사이버 보안 실습 환경에 부합하도록 우분투 리눅스를 선택했다. 우분투 리눅스는 데스크톱 환경에 부합하도록 설계한 운영체제로서 이미 전 세계 많은 사람들이 사용하고 있을 뿐 아니라 백박스 등과 같은 모의 침투 운영체제의 근간을 이루는 운영체제이기도 하다. 따라서 『스노트 2.0 마술상자』)와 『리눅스 방화벽』 등이 레드햇 운영체제에 기반한 IDS와 IPS 책이라고 한다면 내가 저술한 『우분투 리눅스 기반의 IDS/IPS 설치와 운영』은 제목 그대로 우분투 운영체제에 기반한 IDS와 IPS 책이라고 할 수 있다. 그러나 단순히 운영체제 환경만 바꾼 것이 아니라 접근하는 방식도 중급자가 아닌 초급자의 관점을 채택했다. 그런 만큼 집필 과정에서 스노트와 IPTables에 처음 접근하는 입문자의 지식 수준을 최대한 반영하고자 노력했다.
나는 이미 『데비안 리눅스 활용과 보안』이란 책을 집필하면서 공저를 경험했다(이 책의 9장까지 집필하고 이후 장은 이태희 씨가 집필했다). 분량을 구분해 저술하면 빠른 완성이라는 장점이 있지만 문체가 달라지는 단점이 있다. 이것은 독자들에게 조금은 당혹감을 줄 수 있기 때문에 이번 공저는 사수와 부사수의 개념을 도입했다. 다시 말해 이 책의 모든 내용은 내가 주도적으로 집필했고 집필 과정에 필요한 실습 내용은 추다영 씨가 담당했다. 처음부터 끝까지 집필하는 방식 때문에 자칫 오랜 시간이 걸리지 않을까 우려했지만 추다영씨가 워낙 영민하고 감각이 좋아 필요한 내용이 생길 때마다 바로 바로 결과물을 보내줬기 때문에 한 달이라는 기간 동안 원고 전체를 마무리할 수 있었다. 결론적으로 공저의 방식을 선택하고 추다영 씨를 공동 저자로 선정한 일은 매우 성공적이었다고 생각한다.
이 책은 단순히 나만의 지식 경험을 전달하는 내용이 아니다. 그동안 국가 공무원 인재 개발원에서 실무자를 대상으로 강의하는 동안 필요한 요구 사항을 반영한 내용이기도 하다. 그런 만큼 IDS와 IPS 또는 스노트와 IPTables에 처음 접근하는 사람들에게 좋은 안내서 역할을 제공할 수 있다고 확신한다.
또한 본문 중간 중간에 세계의 주요 국가 정보 기관을 소개했다. 전 세계적으로 빈번하게 이뤄지는 사이버 전쟁을 정보 기관에서 수행하기 때문이다. 그런 만큼 사이버 보안인이라면 사이버 전쟁을 주도하는 정보 기관에 대한 기본 지식이 필요하다고 판단해 수록했다. 참고로 해당 글들은 내가 평소 모의 침투 연구회(cafe.naver.com/kalilinux)에 연재했던 게시물을 조금 수정한 내용이다.
끝으로 글쓰기의 어려움을 말하고자 한다. 글쓰기에는 크게 두 가지가 있다. 이백식 글쓰기가 있고 두보식 글쓰기가 있다. 이백은 술 한 잔 마시고 내뱉는 말이 곧 시(詩)였다. 그야말로 거침없는 글쓰기다. 반면 두보는 밤새도록 한 글자 한 글자마다 수정을 반복했다. 나는 두보의 글쓰기를 닮았다. 특히 세종(世宗)의 『훈민정음서(訓民正音序)』를 우리 민족 최대의 명문으로 간주하는 나로서는 한 단어, 한 문장, 한 단락마다 절차탁마(切磋琢磨)했다. 불판에 놓인 오징어가 온몸을 비틀며 지글지글 오그라들 듯한 여름 날씨에 이런 작업은 진을 빼는 작업이었다. 그렇지만 한 순간도 글 다듬는 작업을 소홀히 하지 않았다. 잘못된 입력에서 잘못된 출력이 나온다는 전산의 기본 법칙처럼 사소한 오류가 독자 여러분에게 잘못된 지식으로 전해질까 싶은 두려움 때문이었다. 그래서 타 들어가는 정신을 가다듬으며 열심히 읽고 또 읽었다. 그럼에도 내가 미처 못 보고 넘긴 오류가 분명 있을 것이다. 나의 이러한 노력만이라도 가상히 여겨 너무 심하지 않게 질책해 주기 바랄 뿐이다.
伏望聖上陛下 諒狂簡之裁 赦妄作之罪 雖不足藏之名山 庶無使墁之醬瓿
(엎드려 바라오니 성상 폐하께서 소루한 편찬을 양해해 주시고 망작의 죄마저 용서해 주시니 비록 명산에 비장할 바는 아니오나 간장 항아리 덮개로만은 쓰지 말아 주시옵소서)
-김부식(金富軾)의 『삼국사기(三國史記)』 서문에서
지난 2006년 5월 사이버 모의 침투 사용에 최적화한 백트랙 운영체제가 처음 등장했다.
우분투 운영체제에 기반한 백트랙 운영체제에는 사이버 보안 감사를 수행하기 위한 다양한 도구를 정착했기 때문에 많은 사이버 보안 전문가에게 백트랙 운영체제는 맥가이버 칼과도 같은 유용한 수단이었다. 이후 백트랙 리눅스는 버전업을 계속 진행하며 발전하다 지난 2011년 3월에 5 R3 버전을 마지막으로 업데이트 작업을 중단했다. 사실상 모의 침투 운영체제로서 수명을 마친 셈이다.
백트랙 등장 이후 약 6년 동안 국내에는 백트랙 사용법을 설명한 책이 없었기 때문에 인터넷을 통해 해당 문서나 동영상 등을 참고해 백트랙을 익혀야 하는 실정이었다. 인터넷에는 워낙 미검증 자료가 많아 초보자가 백트랙에서 제공하는 기능을 익히는 데도 많은 시간이 필요했다. 이런 상황에서 지난 2011년 7월 『BackTrack 4 한국어판』(에이콘, 2011)이 발간됐다. 나처럼 체계적인 백트랙 사용법에 목말랐던 사람에게는 단비 같은 책이었다. 그러나 백트랙 5 R3 버전이 나온 시점에서 백트랙 4 버전에 대한 책은 많은 아쉬움을 남길 수밖에 없었다. 다행스럽게도 이후 에이콘출판사에서는 칼리 리눅스와 백박스, 메타스플로잇 같은 관련 번역서를 열정적으로 출판하기 시작했다. 마치 모의 침투 분야의 춘추전국시대를 방불케 했다.
내 책상 위에는 그동안 출판된 관련 서적이 무려 12권이나 놓여 있다. 『(개정판) 칼리 리눅스와 백트랙을 활용한 모의 해킹』(에이콘, 2014)처럼 국내서도 있지만 대부분이 번역서다. 모의 침투 운영체제 관련 서적이 홍수를 이루는 상황에서 우리 나라 전문가가 모국어로 집필한 책이 조금은 부족하다고 생각했다. 이것은 단지 자국 중심적 사고방식이 아니라 좀더 이해하기 쉬운 모국언어를 통한 내용 전달의 문제와 우리 현실에 맞는 상황 설명에 대한 절실함 때문이다. 김치와 된장국 냄새가 풀풀 나는 우리나라 사람의 말과 글로 설명할 수 있는 모의 침투 분야의 책이 필요했다. 그중에서도 모의 침투의 핵심을 이루는 메타스플로잇에 대한 책을 갈망했다. 그렇지만 능력 부족인 나로서는 이육사 시인이 갈망했던 광야의 초인을 그저 기다릴 수밖에 없었다. 그러던 중 집필을 결심하게 된 계기는 금년 상반기에 있었던 경찰교육원 출강 때문이었다. 경찰교육원 특성상 시중 교재가 아닌 자체 교재를 사용해야 하기 때문에 그동안 강의하면서 숙독했던 모의 침투 분야 서적과 강의안 등을 기반으로 해당 원고를 집필하기 시작했다. 또한 비슷한 시기에 사이버 보안 실무라는 사이버 강좌를 설계하면서 내부 교재보다 더욱 정교한 필치가 필요한 원고를 집필해야 했다. 두 번의 집필 경험은 나에게 작은 자신감을 안겨주었다.
이 책은 모의 침투 입문자들을 대상으로 그동안 강의를 준비하면서 참조해온 다양한 책과 강의안 그리고 이전에 사용했던 내부 교재 내용 등을 토대로 다음과 같은 점을 염두에 두면서 집필했다. 기존 모의 침투 출간 서적과 비교해서도, 메타스플로잇의 내용을 중심으로 입문자들에게 모의 침투의 개념을 최대한 알기 쉽게 이해시키고자 노력했다. 다시 말해, 칼리 리눅스에 기반해 메타스플로잇이라는 침투 도구를 중심으로 모의 침투 과정에 필요한 핵심적인 도구를 소개하고자 했다. 이를 위해 이미 나온 책 거의 대부분을 세심하게 검토해 내용상 오류가 있는 부분이나 누락 부분 등을 정리했는데, 칼리 리눅스 2.0과 백박스 4.3 두 개를 이용하면서 이러한 검토 작업을 진행했다.
다음으로 각 장의 흐름을 중시했다. 모의 침투 흐름의 연관성 등을 고려해 목차를 작성했다. 일례로 본문 내용 중 메타스플로잇 기반의 정보 수집을 설명한 뒤 메타스플로잇 보조 기능과 엔맵을 이용해 무차별 대입 공격 등을 다뤘다. 또한 운영체제 취약점을 이용한 침투 과정 전반을 설명한 뒤 tRJ 사용법 일반을 설명하고 침투 이후 tRJ 사용법을 설명했으며 스푸핑 기법을 소개한 뒤 사회공학 도구와 결합해 사용할 수 있는 방법 등을 설명했다. 전후 흐름과 연관성을 고려했기 때문이다. 자칫 맥락을 무시하고 단편적인 내용에 매몰되어 메타스플로잇에서 의도했던 중요한 내용을 놓치지 않도록 노력했다. 즉 조준하고 격발하고 발견하는 비순차적인 내용을, 발견하고 조준하고 격발하는 순서에 따라 해당 내용을 재구성했다.
또한 루비 또는 기계어 수준에서 수행하는 소스 코드 분석과 응용 등은 과감히 생략했다. 입문자는 무엇보다 메타스플로잇 환경과 각 사용법 등에 익숙해져야 한다는 취지 때문이다. 모의 침투 분야에 갓 입문한 사람에게 기계어 수준에서 메타스플로잇 모듈 응용까지 다룬다는 것은 마치 검도 초보자에게 진검부터 던져주고 전장에 내보내는 것과 같다. 실전에서는 항상 일대일 대결만 일어나는 것이 아니다. 두 명 이상이 덤빌 수도 있다. 반칙도 없다. 뒤에서 자신을 향해 칼을 내리칠 수도 있다. 이런 상황에 대처할 수 있는 능력은 목검부터 잡는 법을 알려주는 기초 훈련부터 시작하지 않으면 달리 방도가 없다. 다양한 상황을 염두에 두면서 그에 대응하는 반복적인 연습이 있어야만 실전에서 응용 능력을 발휘할 수 있다. 이것이 실전 과정에서 요구하는 분석과 응용 부분을 생략한 이유다. 그렇지만 버퍼 오버플로 공격과 방어 등에 대한 설명이나 메타스플로잇 모듈의 배치 구조에 대한 이해 등을 통해 메타스플로잇 고급 과정으로 넘어가기 위한 가교를 마련해두었다.
더불어 내 강의 경험을 최대한 반영하고자 노력했다. 그동안 강의를 통해 수강생들이 자주 실수하고 어려워하는 부분이 무엇인지 또한 무엇에 흥미를 많이 느끼는지 무수하게 경험했다. 각 장마다 이런 경험을 토대로 최대한 쉬운 문장으로 작성했다. 강사에게 는 숙명과도 같은 수강생, 아니 이제는 독자의 지식 편차를 특히 배려했다. VMware가 어떤 용도의 소프트웨어이고, 리눅스는 운영체제가 아닌 커널을 의미하고, 칼리 리눅스나 메타스플로잇 등이 오피스 도구가 아니라 해킹 도구라는 정도를 아는 사람이라면 누구나 쉽게 이해할 수 있도록 서술했다.
사회공학에 대한 중요성도 강조했다. 흔히 해킹이란 과정을 기술적인 측면만 생각하는 경우가 있다. 이것은 순전히 영화와 드라마 등에 의한 폐해다. 식자우환(識字憂患)이라고 했다. 잘못된 정보는 차라리 모르는 편이 좋다. 해킹은 단순히 기술적인 취약점 등만을 이용하는 것이 아니다. 가뭄에 콩 나듯 보안상 허점을 발견한 경우 드라마처럼 멋진 장면을 연출할 수 있다. 그렇지만 예외적인 것이 일반적인 것은 아니다. 해킹은 기술적인 측면과 비기술적인 측면 모두를 만족할 때 비로소 성공한다. 뒤집어 말해 안전한 사이버 공간 실현은 기술적인 측면과 비기술적인 측면 모두를 고려해야 한다는 의미다. 이런 관점에서 사회공학의 위험성 등을 자주 언급했다.
마지막으로, 영화와 드라마에 관한 이야기를 많이 실었다. 전쟁 영화 <라이언 일병 구하기>에서 압권은 전반부 20분 동안 묘사한 상륙 작전 장면들이다. 해병대에서 시청각 교육 자료로 많이 활용한다. 또한 전쟁 드라마 <밴드 오브 브라더스> 2회 초반 강하 장면은 육군 특전사에서 특히 중요한 시청각 교육 자료다. 1장 뒤에 실린 '쉼터' 꼭지에 사이버 보안을 다룬 작품을 소개한 이유도 바로 이런 관점을 내보이기 위함이다. 기술 부분을 다룬 영화에서부터 IT 기반의 미래 사회 전반까지 다룬 영화까지 선정했다. 특히 이 '쉼터'에서 다룬 드라마 <유령>을 통해 사이버 보안 분야 전반에서 필요한 각각의 내용과 추천 도서 등을 제시했다. 영상물도 효과적인 학습 도구일 수 있다는 내 의도가 잘 전해질 수 있으면 한다. 원래 이 책은 '드라마 <유령>의 주요 장면으로 배우는 메타스플로잇 중심의 모의 침투'라는 제목으로 기획했지만 방영한 지 몇 년이 지난 드라마라는 시의적인 문제를 고려해 지금과 같은 제목과 내용으로 대폭 수정했음을 참고로 밝혀 둔다.
내 경험상 대한민국 사이버 수사관들은 국내 최고의 기량자들이다. 전국에서 모여든 전산 보안 수재들 중 치열한 경쟁을 뚫고 합격한 사람들이다. 그들은 1년 가까운 시간 동안 형법과 수사 기법 등으로 교육받은 사람들이기도 하다. 그중에는 대한민국 최고의 교육 기관인 경찰 대학 출신도 많이 있다. 과거 선관위 디도스 공격 사건처럼 어설픈 사자성어 따위로 공자님 앞에서 덤비는 일은 부디 없었으면 한다.
모의 침투 분야에 관심이 있는 분과 백박스와 칼리 리눅스 등을 설치한 직후 무엇부터 시작해야 하는지 모르는 분, 메타스플로잇 전반을 체계적으로 배우고자 하는 분과 메타스플로잇에서 고급 과정으로 넘어가는 데 필요한 내용을 알고자 하는 분, 자체 전산망에 대한 보안 점검 항목이 필요한 분과 칼리 리눅스 또는 메타스플로잇 과정을 강의하고자 하는 분에게 이 책이 어두운 바다에서 작은 등불로 남아주었으면 한다
仰不愧於天 俯不?於人(하늘을 올려다 보아도 부끄럽지 아니하고 사람을 내려다 보아도 부끄럽지 아니하다)
- 『孟子(맹자)』의 「진심편(盡心篇)」 중에서
흔히 모의 해킹 또는 침투 테스트 등으로 부르는 모의 침투(Penetration Testing)란, 전산 시스템에서 나타날 수 있는 취약점 여부를 사전에 점검함으로써 외부의 공격 위협으로부터 전산 자원을 보호하기 위한 일련의 과정을 의미한다. 훈련이 불충분한 상태에서 실전에 참여할 경우 무수한 희생을 감수해야 하는 것과 마찬가지로 인터넷 공간을 대상으로 서비스를 개시하기 전 모의 침투 과정을 생략한다면 사소한 설정 실수만으로도 재앙적인 결과를 초래할 수 있다.
미국 전쟁 드라마 <밴드 오브 브라더스(Band of Brothers)>의 1회와 2회에서는 훈련과 실전에서 강하의 차이점을 극명하게 보여주는 장면이 나온다. 1회에서는 안정적인 고도와 속도에서 진행하는 강하 훈련 장면이 나오지만, 제2회에서는 독일군의 대공포에 항공기가 피격당하면서 기내의 공수 대원들이 아비규환에 처한다. 훈련과는 완전히 다른 상황이었다. 그러나 강하 이후 공수 부대원들의 활약은 훈련 상황보다 더욱 탁월했다. 실존 인물들은 2회 시작 화면에서 전투에 투입되기 직전까지 반복적으로 기초 훈련을 했기에 가능한 일이었다고 증언한다.
2016년 한 해 동안 6,435개의 취약점이 홍수처럼 쏟아졌다. 취약점 중에는 사물 인터넷(IoT)에 대한 취약점도 있었다(cve-2016-1000245/cve-2016-1000246 등). 특히 2016년 10월 미라이 봇넷(Mirai Botnet)의 출현을 놓고 많은 사이버 보안 전문가들은 본격적인 사물 인터넷 공격 시대를 알리는 사건이라고 평했다. 소스 코드의 취약점이 더 이상 사이버 공간에 갇혀 있지 않고 현실 공간으로 기어 나오는 상황까지 온 것이다. 그러나 소스 코드의 취약점은 현실의 사물 위협에 멈추지 않고 인간에게까지 파고들 가능성이 크다.
작은 컴퓨팅 칩을 인체에 주입해 환자의 건강 상태를 원격으로 확인할 수 있는 기술은 인간의 생명까지도 앗아갈 수도 있다. 2016년 12월 미국 식품 의약국(FDA)에서 인공 심장 박동기를 비롯한 의료 기기의 사이버 보안 취약성을 가려내고 이를 완화할 방안을 담은 지침서를 발표했다는 소식은 소스 코드의 취약점이 사물 파괴는 물론 인간의 존엄성마저 위협할 수 있음을 방증한다. 실제로 미국의 전 부통령 딕 체니(Richard Bruce Cheney)는 2013년 10월 인공 심장 박동기의 무선 기능을 중지시켰는데, 그 이유는 해킹의 위협을 느꼈기 때문이라고 한다.
가까운 미래에는 방화벽 기능이 달린 방어복을 입어야 하고 모의 침투 역량에 따라 인간의 삶과 죽음이 갈릴 수도 있다. 다시 말해 모의 침투 기법의 중요성을 더욱 실감하는 날이 곧 온다는 의미다.
이처럼 모의 침투 기법은 사이버 공간과 사물 인터넷 분야는 물론 인간에게까지 적용 범위를 확대시킬 수 있다는 점에서 전산 보안 담당자라면 반드시 숙지해야 할 기본 분야가 아닐 수 없다.
일반 사용자들의 사이버 보안 의식을 점검하기 위해서도 모의 침투 기법은 필요하다.
서버 보안과 비교할 때 클라이언트 보안은 상대적으로 취약하다. 좀 더 정확히 말하면 보안 의식이 부재한 상황이다. 서버 운영체제는 전산 지식이 풍부한 관리자가 관리하지만 클라이언트 운영체제는 해당 소유자뿐만 아니라 경우에 따라서는 타인이 사용하기도 한다. 가정에서는 가족이 공동으로 사용하는 경우가 일반적이다. 보안 의식 수준이 천차만별일 수밖에 없다. 또한 서버를 운영하는 경우에는 일반적으로 방화벽 등을 구비하지만 가정에서 PC를 사용하기 위해 방화벽까지 도입하는 경우는 드물다. 보안 의식도 취약한 상황에서 보안 방비까지도 취약하다. 더구나 가정에서의 PC 사용 습관은 사무실에서도 부지불식간에 일어나곤 한다. 이런 상황을 개선하기 위해서는 수시로 모의 침투를 수행해 사용자의 보안 의식을 지속적으로 환기시킬 수밖에 없다.
마지막으로 모의 침투에 대한 학습은 전산 시스템 전반을 배우는 기회이기도 하다. 취약점을 알기 위해서는 시스템 전체의 동작 원리를 알아야 한다. 즉, 취약점 분석을 통해 각 분야에서 사용하는 시스템 구조와 동작 등을 종합적으로 익힐 수 있다. 이는 영화를 통해 음악과 미술을 동시에 접하는 것와 같다. 웹 서비스를 대상으로 모의 침투를 수행하면 웹 분야를 이해할 수 있고 데이터베이스 서비스를 대상으로 모의 침투를 수행하면 데이터베이스 분야를 이해할 수 있다.
지난 2015년 10월 이 책을 출간한 이후 약 1년 6개월이 흘렀다. 그동안 칼리 운영체제도 2.0 버전에서 2016.2 버전으로 올라갔다. 메타스플로잇 프레임워크(MSF)도 4.11.4 버전에서 4.13.14 버전으로 올라갔다. 나이를 먹으면 주름이 늘어나는 것처럼 MSF에서 제공하는 1,467개의 침투 기능(Exploits)과 840개의 보조 기능(Auxiliary)도 각각 1,613개와 915개로 늘어났다. 버전에 변화가 생기면서 이전에는 사용할 수 있었던 도구가 아예 사라진 경우도 생겼고, 기존 기능이 남아 있더라도 더 이상 사용할 수 없는 경우도 생겼다.
그러다 보니 출간한 책으로 강의하는 동안 본문의 내용 전개가 매끄럽지 않은 부분도 눈에 띄기 시작했다. 마치 5년 동안 입을 옷을 한 벌 마련했는데 생각보다 빨리 해지기 시작했다고나 할까? 그럴 때마다 헝겊을 이용해 해진 부분을 정신없이 바늘로 꿰매다 보니 어느 순간 옷이라고 부르기도 민망할 만큼 지저분한 누더기로 변해 있었다. 이에 따라 기존의 원고를 보완하기보다는 처음부터 새롭게 집필할 필요성을 느끼던 차에 오는 2017년 6월부터 KLCP(Kali Linux Certified Professional)라는 자격증 시험을 시행한다는 소식을 접했다.
MCSE(Microsoft Certified Solutions Expert)가 윈도우 운영체제의 전반적인 기능을 측정하는 자격증인 것처럼 KLCP는 칼리 운영체제의 전반적인 기능을 측정하는 자격증이다. KLCP는 점증하는 모의 침투의 중요성과 그에 따른 칼리 운영체제의 빈번한 사용 등을 고려해 준비한 자격증이다. 아직은 시행 전이라 단정하기 어렵지만, 본격적인 모의 침투를 수행하기에 앞서 칼리 운영체제의 전반적인 개념과 기본 기능 등을 평가하는 자격증으로 보인다.
이는 나로 하여금 전면 개정 작업을 결심케 한 결정적 계기였다.
아무쪼록 이전보다 더욱 정교하게 다듬어진 이 책이 모의 침투 분야에 관심이 있는 사람, KLCP 시험을 준비하는 사람, 자체 전산망에 대한 보안 점검 항목이 필요한 사람, 모의 침투 운영체제 또는 MSF 과정을 강의하고자 하는 사람 등에게 좋은 지침서가 되기를 바란다.
끝으로 일부 몰지각한 사람들은 모의 침투 운영체제를 점검 도구가 아닌 공격 무기로 간주하는 경향이 있다. 맥가이버 칼을 돌격 소총(Assault Rifle)으로 착각하는 경우와 다를 바 없다. 부디 모의 침투 운영체제라는 탁월한 점검 도구를 흉악한 공격 무기로 오용하는 어리석음을 범하지 말기 바란다.
2018년 여름은 그 어느 때보다 폭염으로 얼룩진 날들이었다. 지친 몸을 다스리면서 가을의 정취를 즐기던 중 출판사로부터 연락을 받았다. 이 책의 2판을 증쇄할 예정인데 오탈자 확인을 부탁한다는 내용이었다.
나는 오탈자를 확인하는 과정에서 강의의 자연스런 흐름이 어디에 있고, 그동안 칼리의 업데이트도 이어졌다는 것을 문득 깨달았다. 그래서 곧바로 3판 집필로 전환했다.
1판과 비교할 때 2판에서는 많은 수정이 있었다. 그러나 3판은 2판과 달리 대폭적인 수정은 없다. 수정한 내용이라고 해봤자 그동안 이 책으로 관련 내용을 강의하면서 자연스런 흐름에 부합하도록 일부 장의 순서를 변경했고, 칼리 리눅스 업데이트에 따른 주요 도구의 버전 정보를 수정한 수준에 불과하다(2판에서는 칼리 2016.2 버전에 기반했고, 3판에서는 칼리 2018.3a 버전에 기반했다). 사실상 2판에서 내가 원하는 내용은 다 넣었다고 간주하기 때문이다. 또한 이후 『데비안 리눅스의 활용과 보안』(에이콘, 2017)과 『백박스 리눅스를 활용한 모의 침투』(에이콘, 2017)를 추가적으로 출판하면서 이 책의 부족한 내용을 일정 부분 보충했다고 믿기 때문이기도 하다.
업데이트가 생길 때마다 동작에도 늘 변화가 생긴다(3판 원고를 넘기기 직전에 칼리 2018.4 버전이 또 나왔다). 어떤 경우에는 이전과 달리 동작이 안 될 수도 있다. 이런 변경 사항까지 교재에 모두 담을 수는 없다. 인터넷 커뮤니티 활동이나 구글 검색 등을 이용할 수 있는 혜안이 필요하겠다.
끝으로 이 책을 집필하면서 내가 느끼고, 말하고 싶은 것은 1판 서문과 2판 서문을 통해 이미 충분히 밝혔다. 본문을 읽기 전에 꼭 읽어주기 바란다.
아무쪼록 이 책이 모의 침투 입문자에게 작은 도움이라도 된다면 나로서는 더할 나위 없을 기쁨이겠다.
이 책의 4판을 집필한 이유는 칼리 운영체제의 변화가 생겼기 때문이다. 자세히 말하면 2020년에 칼리 운영체제는 이전과 다른 특성을 반영했다. 먼저 설치 시 활성화시켰던 루트 계정을 더 이상 지원하지 않고 일반 사용자 계정으로 전환했다. 배시 쉘에서 명령어 입력도 변화가 생겼다. 이에 따라 기존 침투 도구의 설정에도 약간의 변화가 생겨 4판에 반영했다. 또한 기존의 내용을 전면 검토해 산만하게 느껴지는 내용들을 분야별로 다시 정리하면서 추가가 필요한 부분에는 새로운 내용을 추가했다. 7장 이터널블루에 대한 내용이 단적인 일례다. 따라서 독자들은 이전 판보다 좀 더 체계적인 일례를 통해 모의 침투에 접근할 수 있을 것이다.
이 책은 내 생애 최초의 저술이다. 그러나 모의 침투 입문자가 가장 먼저 볼 만한 책은 아니다. 입문자라면 나의 졸저 『해킹 입문자를 위한 TCP/IP 이론과 보안 2/e』(에이콘, 2019)을 가장 먼저 추천한다. 이 책을 통해 전산 체계 전반을 이해할 수 있을 것으로 확신한다. 그리고 나의 공저 『데비안 리눅스 활용과 보안』(에이콘, 2017)을 읽어 주길 바란다. 이 책을 통해 칼리 운영체제 환경에 비로소 익숙해질 수 있을 것이다. 그 다음에 비로소 이 책을 읽는다면 독자 스스로가 보다 능동적이고 적극적으로 칼리 운영체제에서 제공하는 각종 침투 도구들을 사용할 수 있을 것이다. 아울러 『백박스 리눅스를 활용한 모의 침투』(에이콘, 2017)는 이 책과 상호 보완적인 관계에 있다. 이 책에서 다 소개하지 못한 부분을 백박스 리눅스를 통해 소개했다. 물론 백박스 리눅스가 아닌 칼리 리눅스에서도 해당 내용을 확인할 수 있는 만큼 따로 백박스 리눅스를 설치할 필요는 없다. 모의 침투 학습서 선택에 참고가 되기 바란다.
나는 『모의 침투 입문자를 위한 파이썬 3 활용』(에이콘, 2020)이라는 책을 박재유 씨와 공저한 적이 있다. 그런데 그 공저가 2020년 세종 도서 학술 부문 선정 도서가 되는 기쁨을 경험했다. 이 책도 그 이상의 가치가 있다고 스스로 자부한다.
공대생들에게 수학은 필수 과목이다. 그렇다고 공대생들이 수학 전공자가 배우는 모든 분야를 배우는 것은 아니다. 공대생들은 공업 수학(engineering mathematics)을 통해 자신의 전공에 부합하는 수학적 지식만을 선택해 학습한다. 공업 수학은 상미분 방정식과 편미분 방정식 그리고 벡터 미적분과 푸리에 해석 등과 같이 공학에서 필요한 부분만을 엄선해 반영하기 때문이다. 공업 수학이 없었다면 공대생들은 수학 과목에 자신의 전공 과목까지 익혀야 하는 이중고에 시달릴 수밖에 없었을 것이다.
이 책을 구상한 이유도 바로 이런 인식 선상에 있다. 해커에게 파이썬은 해킹을 구현하기 위한 도구일 뿐 파이썬 그 자체에 의미를 두는 것은 아니다. 다시 말해 해커는 게임을 개발하거나 통계를 분석하기 위해 파이썬을 사용하는 것이 아니다. 그렇기 때문에 해커에게는 파이썬의 광범위한 문법 중에서도 해킹에 필요한 문법이 우선적으로 필요하다. 공대생에게는 집합론이나 유클리드 기하학이 아닌 공업 수학이 필요한 이유와 같은 이치다.
이 책은 이제 막 컴퓨터 언어를 시작하려고 하는 사람을 대상으로 하기보다는 해킹에 관심과 열정을 보이는 초보 해커를 염두에 두고 해킹 단계가 높아질수록 필수적으로 요구하는 파이썬 문법에 부합하도록 구성했다. 다시 말해 파이썬을 이용한 해킹 도구를 소개하거나 이러저러한 분야에서 활용할 수 있다는 백화점 식 예제를 지양하고 보안 분야에서 가장 필요한 파이썬 문법 체계에 초점을 뒀다.
이 책은 다음과 같은 점을 염두에 두고 집필했다.
1. 해커에게 친숙한 데비안/우분투(Debian/Ubuntu) 기반의 운영 체제 환경에서 파이썬 3 언어를 소개했다. 이 책에서는 모의 침투 운영 체제인 백박스(BackBox) 4.7 버전 환경을 사용했다. 터득한 파이썬 문법과 기능을 이용해 곧바로 침투 도구 분석이나 제작에 접목하라는 의도다.
2. 복잡할 수 있는 개념을 단편적으로 분리해서 소개했다. 길고 복잡한 소스 코드로 이루어진 예제는 산만해지기 쉽기 때문에 짧고 간결한 소스 코드만으로 이루어진 예제를 통해 문법 내용에 집중할 수 있도록 구성했다. 중학생 이상이면 쉽게 이해할 수 있는 소스 코드 예제를 실었다.
3. 순수 파이썬 입문자도 볼 수 있게 체계적으로 구성하기 위해 노력했다. 일례로 데이터 타입을 설명하면서 제어문 내용을 전혀 사용하지 않았고, 함수와 클래스 내용도 전혀 사용하지 않았다. 수학적 체계성에 충실하고자 노력했다.
4. 강의 교재로 사용할 수 있도록 5일, 35시간 기준 분량으로 내용을 구성했다. 최근 코딩 교육 강화 추세를 고려해 고등학교 등에서도 사용할 수 있도록 집필했다.
필자는 작년 12월 한 달 내내 이 책을 집필하는데 매진했다. 잘못된 입력에서 잘못된 출력이 나온다는 전산의 기본 법칙을 알기 때문에 사소한 오류가 독자 여러분에게 잘못된 지식으로 전해지는 두려움을 안고 한 자 한 자마다 정성을 들였다. 그럼에도 놓친 오류가 있을 수 있다. 이러한 노력을 가상히 여겨 너무 심하지 않게 질책해 주기 바랄 뿐이다.
지금으로부터 15년 전, 그러니까 내가 30대 중반에 접어들 당시 하이텔 근무를 시작하면서 TCP/IP 분야를 처음 접했다. 그 전까지는 사실상 TCP/IP 분야에 무지한 상태였다. 어문을 전공했기에 TCP/IP 분야는 물론, 전산 일반에 대해서도 무지했다. 그뿐 아니라, 한국통신에 근무할 당시에도 영업부 직원으로 있었기 때문에 TCP/IP는 교육을 통해 지나가는 이야기로만 들었을 뿐 실제 내 생활과는 아주 거리가 먼 내용이기도 했다.
30대 중반에야 비로소 생전 처음 TCP/IP에 기반한 라우팅과 스위칭 등을 접해야 했던 나로서는 아주 곤혹스럽기도 했지만, 하이텔 근무 환경을 좋아했던 탓인지 몰라도 TCP/IP 분야를 열심히 배우고 익혔다. 그야말로 백지 상태에서 시작한 TCP/IP 분야이지만, 이를 계기로 CCNA/CCNP 자격증까지 취득했고 CCNA/CCNP 강사로도 생활할 수 있었다. 이후 국가공무원인재개발원과 서울시 인재개발원 등으로 출강하면서 지금처럼 정보 보안 기사와 모의 침투 분야 등을 강의하는 데 있어 하이텔에서 배우고 익혔던 TCP/IP 이론은 아주 중요한 밑거름이었다. 이러한 성장 과정을 통해 나는 자연스럽게 사이버 보안의 출발점이 TCP/IP 분야일 수밖에 없음을 뼛속 깊이 체득할 수 있었다.
전산직 공무원을 대상으로 10년 이상 전산 보안 분야를 강의하면서 그분들이 해당 분야를 어려워하는 이유를 많이 고민했다. 고민 끝에 전산 시스템 근간을 이루는 TCP/IP 분야부터 시작하지 않았기 때문이라는 결론을 내렸다. 이것은 전산 보안 문외한이었던 내가 TCP/IP 분야부터 시작해 오늘날과 같은 자리에 설 수 있었던 성장 과정을 뒤돌아볼 수 있는 계기였다. 동시에, 이 책을 집필해야겠다고 결심한 이유이기도 했다.
이 책은 사이버 보안 분야에 처음 입문하는 사람, 대학교와 대학원 등에서 TCP/IP 과목을 배우는 사람, TCP/IP 구조를 체계적으로 정리하고자 하는 사람, 정보 보안 기사를 준비하는 사람, 네트워크 보안을 구축하는 데 기초가 부족한 사람, 현업 전산망에 대한 보안 점검 항목이 필요한 사람, 소켓 개발을 시작하는 사람을 대상으로 집필했다.
15년 전, TCP/IP 분야에 백지 상태였던 나를 염두에 두면서 이 책을 집필했다. 윈도우 명령 프롬프트 창에서 IP 주소를 확인하는 내용부터 TCP/IP 이론을 시작한 이유다. 누구든지 태어날 때부터 전문가로 태어나진 않는다. 무수한 시행착오와 나선과도 같은 반복적 경험을 통해 해당 분야의 정점에 올라갈 수 있다. 이런 학습 과정이야말로 입문자에게 가장 좋은 접근법이라고 믿기 때문에 이 책 역시 어렵고 까다롭다고 생각하는 부분을 자주 반복해 설명한다. 그렇지만 단순히 물레방아 쳇바퀴 돌 듯 똑같은 내용을 그저 반복한 것이 아니다. 반복할 때마다 새로운 내용을 추가해 또 다른 각도에서 대상을 해석할 수 있게 함으로써 지식의 수위를 높이는 방향으로 이끌었다.
일례로, LAN 영역을 정의하면서 네트워크 ID 측면에 따라 정의할 수 있음을 보였고, 스위칭 통신을 적용해 내부 통신이란 측면에서도 정의할 수 있음을 보였으며, ARP 영역에 따라 정의할 수 있음을 보였다.
TCP/IP 구조에 대한 설명 역시 마찬가지다. TCP/IP 전체 내용을 다룬 뒤 각 계층별로 해당 이론을 설명했고, 다시 취약점 측면에서 각 계층별로 해당 공격을 설명했다. 이처럼 동일한 내용을 다양한 관점에 따라 각도를 비틀어가며 반복적으로 설명하면서 이론의 깊이를 더하는 방식으로 TCP/IP 분야 전반을 설명했다.
이런 서술은 앞에서 이미 밝힌 바와 같이, 문외한이었던 내가 오늘날과 같은 자리에 설 수 있었던 성장 과정을 투영한 방식이기도 하지만, 그동안 현장에서 전산직 공무원을 대상으로 수행했던 일련의 강의를 통해 터득한 강의 기법이기도 하다.
더불어, 얼마 전부터 전 세계적으로 코딩 교육을 강화하는 추세를 일부 반영했기 때문이다. 서울의 모 대학교에서는 모든 재학생에게 컴퓨터 프로그래밍 교육을 의무적으로 이수하게 했다. 오는 2018년부터 소프트웨어 과목을 강화한다는 발표도 나왔다. 이런 상황에서 가장 각광받고 있는 언어가 바로 파이썬이다. 현 추세를 고려하면 파이썬 언어의 위상은 더욱 높아질 전망이다. 그런 만큼 앞으로는 파이썬 언어를 자주 접할 수밖에 없다. 이 책에서 각 장마다 파이썬 언어를 소개한 이유이기도 하지만, 진정한 이유는 해커에게 가장 유용한 언어이기 때문이다. 이미 상당 정도의 모의 침투 도구가 파이썬 언어로 이루어졌다. 나는 이 책을 구상할 때부터 해커 입문자를 염두에 두면서 집필했다. 그래서 파이썬 언어가 왜 해커 입문자에게 가장 좋은지를 보여주기 위해 파이썬 언어 내용을 넣었다. 동시에, 파이썬 기반의 소켓 내용을 소개함으로써 TCP/IP 프로토콜을 단순히 수동적으로만 이해하고 사용하는 수준이 아니라, 자신의 의지를 담아 TCP/IP 프로토콜을 능동적으로도 사용할 수 있음을 보여주고자 했다. 파이썬 언어 입문서가 아니기 때문에 기초부터 차례대로 소개한 내용은 결코 아니다. 그렇지만 조금씩 따라 하다 보면, 사이버 보안에서 왜 파이썬 언어가 유용한지를 느낄 수 있을 뿐만 아니라 지금보다는 파이썬 언어에 대한 관심을 더욱 높일 수 있는 계기가 되어준다면 내가 의도한 바는 충분히 이루었다고 생각한다.
국가 기관에서 정보 보안 분야를 강의한 지도 어느덧 15년 이상 흘렀다. 강의할 때마다 언제나 느끼는 것이지만 TCP/IP 이론과 보안은 오랜 시간이 지나도 정보 보안 분야에서 매우 중요하다. 전투 경험이 많은 장군일수록 경례 자세를 가장 중요하게 여기는 것처럼, 정보 보안에 대한 지식의 깊이가 깊어질수록 다시금 뒤돌아보면서 기본을 되새기는 분야가 바로 TCP/IP 이론과 보안이다. 더불어 내가 가장 애착을 느끼고 가장 자신 있게 강의할 수 있는 분야이기도 하다.
2판에서는 1판이 출간된 이후 발견된 오탈자와 오류 내용을 모두 수정했다. 또한 1판에서 중간중간 소개했던 파이썬 내용은 모두 생략했다. 이미 파이썬에 대한 좋은 책들이 시중에 넘치기 때문이다. 그런 만큼 처음부터 끝까지 TCP/IP 이론과 보안에만 집중해서 읽어주면 좋겠다.
2판도 1판과 마찬가지로 윈도우 운영체제를 기반으로 TCP/IP 네트워크 전반을 설명한 뒤 TCP/IP 프로토콜을 계층별 데이터 전송 단위 중심으로 각 계층의 기능과 특징을 설명했다. 또한 TCP/IP 프로토콜 구성과 동작을 기반으로 TCP/IP 네트워크의 취약점과 다양한 공격 유형을 설명했다. 그런 만큼 반드시 1장부터 순서대로 읽기를 바란다. 특히 사이버 보안에 처음 뛰어들었다면 이 책의 서문부터 꼭 읽어 줬으면 좋겠다.
아무쪼록 이 책이 모의 침투 입문자에게 작은 도움이라도 된다면 나에게는 더할 나위 없을 기쁨이겠다.