jrcfore***
2022-02-22

오픈소스 소프트웨어 기드라를 이용해 실용적인 리버스 엔지니어링 기술을 해설한다. 실습을 중심으로 조작, 분석 방법을 효과적으로 배울 수 있다.
오랜만에무슨 생각인지 소프트웨어 정적 분석 책을 리뷰 도서로 신청했다.
책이 거의 900pg에 달하는 엄청난 분량을 자랑하는 책일 것이라곤생각도 못 한 채로 말이다. 하지만 이런 놀라움을 뒤로하고 이 책은 상당히 매력적인 책임엔 이견이 없었다. 특히 기드라라는 툴을 중심으로 리버스 엔지니어링과 나아가 유사 멀웨어를 통한 분석 과정에 대해서 자세히 다룬부분 (이 책의 95% 이상이 기드라를 다루고 있는듯싶다.)은 상당히 매력적이었기 때문이다.
나 같이 서버단 개발자로 커리어 방향을 튼 사람에게는 정적 분석 툴은 어찌 보면 한없이 거리가 있는 기술이라할 수 있다. 서버를 다루다 보면 정적 분석 같은 것은 보통 외부 업체가 제공하는 간단한 툴을 사용하는것에 그치기 때문이다.
그렇다고 해서 이 책이 서버 개발자와 1도 관계가 없다고는 단언할수 없다. 서버를 하다 보면 정적 분석을 요구하는 경우가 종종 있다.병목 구간을 찾거나 혹은 코드의 홀 포인트나 입력의 코너 케이스 등을 찾아낼 때는 어김없이 나만의 정적 분석 툴을 하나쯤 알아두면얼마나 좋았을까? 하고 후회하는 경우가 많기 때문이다.
이 책이 이런 욕구를 자연스레 긁어주기에 충분한 책이란 생각이 들었고 (내용만봐도 차고 넘치지 싶다.) 이와 별개로 이 책에 쓰여있는 아키텍처 마다의 특징과 정적 분석 과정에서의팁(기드라에 특성화된)들만 잘 알아둬도 어디 가서 리버싱조금은 안다!라고 말할 정도의 지식을 쌓기에 충분하다는 생각이 들었다.
다만 처음으로 리버싱을 접하거나 이런 툴 종류의 책을 접하는 사람에게는 선뜻 권하기 어려운 책임엔 틀림없다. 컴퓨터 아키텍처, 리버싱 되었을 때 메모리 어드레스, CPU 인스트럭션과 어셈블러 등등 기초 지식이 반드시 있어야만 이해할 수 있는 파트가 상당히 많기 때문이다.
따라서 본이니 어느 정도 CS에 기초 소양을 갖추었고 그중에서도 특히리버싱에 관심이 많다면 '기드라'와 함께 리버싱에 대해서실습하며 자기 개발을 해보는 것도 나쁘진 않을 것이란 생각이 들었다.
【책의 구성】 '리버스 엔지니어링 기드라 실전 가이드'의 책의 구성은 어떠한가.
이 책은 간단히 요약하자면 레퍼런스 책이다. 소위 말해 "베개"책이다.
이 책은 기드라를 설치하는 것부터 기드라를 이용하여 유사 멀웨어를 뜯어보며 리버싱 하는 엔지니어링을 하나하나아주 깨알 같은 곳까지도 설명한 책이다.
옆에 두고 책 전체 내용을 실습한다면, 웬만한 기드라의 기초와 중급자이상의 리버싱 스킬을 겸비할 수 있을 것이란 생각이 절로 들었다.
나 역시도 이 책을 전달받고 이미 알고 있는 부분을 넘기지 않았다면 한 달 내로 이 책의 반절은 학습하였을까라는의구심이 들 정도로 분량이 대단했고 초심자가 모든 것을 숙지하기엔 조금 벅찬? 그런 느낌의 책이었기때문이다.
구성은 유사 멀웨어나 예제 코드 등을 먼저 언급한 후 이를 세세히 나누어 코드나 부분적인 내용 등으로 세분화한후, 내용 하나하나 아주 디테일하게 독자의 가려움을 긁어주는 훌륭한 구성을 갖춘 책이다.(소위 베개라는 책들이 거의 이런 텐션을 유지하는 것 같다..) 다만몇 차례 강조한 것과 같이 웬만한 컴퓨터 구조에 대한 지식과 기초적인 언어 지식이 없다면 이 책을 통해 능수 능란하게 학습하긴 어려울 것이라 보인다. 따라서 본인이 C언어 포인트도 모른 다는 분이 이 책을 펼쳤다면, 살포시 책을 원래 있던 곳에 가져다 두시길 권한다.
그만큼 이 책은 전문성이 있는 책이고, 리버스 엔지니어링을 위한 전문툴을 다루는 책인 만큼 기초적인 소양을 충분히 갖춘 후에 접하길 권장한다.
1챕터 : 리버스 엔지니어링입문
리버스 엔지니어링에 필요한 것은 무엇일까?
리버스 엔지니어링에 가장 필요한 것은 본인이 리버스 엔지니어링을 시도하려는 머신의 CPU 스펙 + 정적 분석을 하고자 하는 타깃 바이너리 구조에 대한충분한 이해와 이를 분석할 줄 아는 능력이라 할 수 있다.
1장에서는 학부에서 컴퓨터 구조 수업을 한 번쯤 들었다면 충분히 이해하고도남을 지식들을 담고 있다. 따라서 미리 겁먹지 말고 차근차근 공부해 보길 권장한다.
2챕터 : 기드라 입문
기드라가 어떤 툴인지, 기드라가어떤 기능들을 제공하는지 UI/UX를 독자에게 제공해가며 아주 친절히 설명하고 있다. 심지어 설치까지도 친절히 가이드하고 있다 @_@ 이 정도 정성을들인 책이라면 개인 교습을 받는 것 그 이상의 친절함이라 생각된다.
이렇게 좋은 환경이 주어졌는데 공부를 게을리한다는 것은 어찌 보면 저자들에 대한 철저한 무관심일 수 있다. 따라서 책에 나와있는 가이드에 맞춰 잘 기드라를 설치한 후에 오버뷰, 흐름화살표, 코멘트 등을 비롯한 그 외 수많은 기능 윈도우들을 직접 켜가며 하나하나 그 기능 들을 탐독해보도록 하자.
5장 ELF 크랙미 분석
이 장에서는 크랙미라는 개념에 대해서 배운다. 그리고 크랙미를 직접 받아서 문제를 기드라를 활용하여 풀이해 보는 실습을 해본다. 이제 시작이다. 여기서 배운 기초적인 내용을 기반으로 하여 뒷장에있는 심화된 내용을 분석하게 될 것이다.
특히, 예전엔 스택 버퍼 플로우를 활용한 공격 기법이 상당히 유행했었다. (요즘도 그런지는 잘 모르겠지만 @_@..) 이 장에서 바로 그버퍼 오버 플로우 공격에 대해서 체험해 볼 수 있다. 거의 대부분의 내용이 실습과 그에 대한 자세한설명이기에 차근차근 학습한다면 큰 무리가 없을 것으로 보인다.
여러분이 생각하기에 strcpy 가 왜 strncpy로 변했을까? 아마 이 장을 꼼꼼히 살펴본 사람이라면그 이유를 금방 대답할 수 있을 것이다.
【 "기드라 실전 가이드'를 읽고…….】
이 책은 기드라라는 툴을 활용하여 다양한 환경에 대한 정적분석을 하는 방법에 대해 사전마냥 자세히 풀이한 실습서이다. 다만, 이런유의 책은 꾸준한 인내심과 끊기가 없이는 선뜻 끝까지 완주하기 힘든 책이다. (두께가 어마어마하다 @_@..) 그렇기에 본인이 정말 정적 분석에 크게 관심이 있고 추후 리버스 엔지니어로써 커리어를 쌓길 희망한다면이 책은 하나의 지평을 열어주기에 부족함이 없다고 생각된다.
#본도서는 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.