★ 이 책의 특징 ★
■ 악성코드 분석에 필요한 온라인/오프라인 서비스 완벽가이드 제시
■ 파이썬 오픈소스 도구를 통한 악성코드 특징 분석
■ 정적/동석 분석 심화분석 사례를 통한 악성코드 분석 가이드
■ 악성코드 침해사고 대응에 필요한 파이썬 오픈소스 도구 활용 제시
■ 메모리 분석 기법을 활용한 침해사고 대응 기법 제시
★ 이 책의 대상 독자 ★
이 책은 악성코드 분석 업무에 흥미를 느끼는 입문자와 관련 실무자를 대상으로 쓰여졌다. 다음과 같은 독자들에게 이 책을 추천한다.
■ 파이썬 오픈소스 도구를 이해하고 활용하고 싶은 독자
■ 다양한 디바이스에서의 악성코드 분석을 이해하고 싶은 독자
■ IT 보안실무자 입장에서 악성코드 분석 환경을 구축하고 싶은 독자
■ 악성코드로 인한 침해사고 대응 프로세스를 이해하고 싶은 독자
★ 이 책의 구성 ★
1장에서는 오픈소스 도구와 파이썬 개발 환경을 이해하는 데 중점을 둔다. 이 책은 파이썬 오픈소스 도구 중심으로 다루기 때문에 이를 분석하고 개발하기 위한 환경을 먼저 잘 이해해둬야 한다. 깃허브(Github)와 이클립스, 그리고 플러그인 등으로 파이썬 프로그래밍 환경을 구성한다.
2장에서는 윈도우 실행 파일인 PE 포맷을 설명한다. 개인 사용자들이 제일 많이 사용하는 윈도우 운영체제의 파일 실행 포맷인 PE 파일을 이해해야 악성코드 분석에 이용할 수 있는 악성코드 특징들을 파악해본다. peframe 파이썬 오픈소스 도구를 분석하면서 PE 파일을 이해하는 시간을 갖는다.
3장에서는 악성코드 분석 관련 온라인 서비스를 살펴본다. 악성코드를 분석할 때 빠른 대응을 위해 다양한 온라인 서비스를 활용할 수 있다. 파일 분석, 도메인 주소 분석, 평판 시스템 등의 다양한 결과를 통해 내부적으로 위협을 줄 수 있는 사이트들을 검색하고 빠르게 판단하는 데 온라인 서비스가 도움을 줄 수 있다. 대표적으로 사용되는 바이러스토탈 서비스와 이 서비스의 API를 활용한 도구들을 집중적으로 다룬다.
4장에서는 악성코드 오프라인 분석 서비스에 대해 살펴본다. 3장에서 다룬 온라인 서비스에서 기반으로 하고 있는 샌드박스 구축이 주요 내용이다. 내부적으로 분석 환경을 구성하면 오프라인에서도 동일한 기능의 환경을 구성할 수 있다. 대표적으로 쿠쿠 샌드박스를 이용한 환경 구성 방법과 실제 악성코드 샘플을 가지고 도구를 다루는 과정을 상세히 설명한다.
5장에서는 악성코드 상세 분석 단계를 이해하는 데 중점을 둔다. 4장에서 자동 분석 서비스를 통해 다뤘던 샘플을 수동으로 정적/동적 분석하는 과정을 단계별로 설명한다. 자동 분석에서도 어느 정도 악성코드 여부를 판단할 수 있지만, 상세 분석을 통해 명확하게 판단한 뒤에 악성코드 확진을 차단하는 것이 목적이 되어야 한다.
6장에서는 기타 악성코드 분석 도구의 활용 방법에 대해 설명한다. 악성코드 진단 과정에서 추가로 활용할 수 있는 파이썬 기반의 도구를 다룬다. 악성코드를 수집하고 분석한 뒤에 어떻게 관리해서 데이터베이스화할 수 있는지 오픈소스를 토대로 살펴본다. 파일 분석, 네트워크 패킷 분석, PDF 파일 분석 등 다양한 환경에서 분석할 수 있는 도구도 간단히 소개한다.
7장에서는 메모리 포렌식 분석 활용을 다룬다. 메모리 포렌식 기법을 활용하면 악성코드의 휘발성 정보 및 연관성을 신속하게 분석할 수 있다. 침해사고 대응을 할 때 의심되는 악성코드를 빠르게 찾아내서 추가적인 위험이 발생하지 않도록 조치하는 것이 중요하다. 메모리 포렌식 오픈소스 도구로 활용할 수 있는 볼라틸리티(Volatility) 도구와 이를 활용한 다양한 오픈소스 도구의 활용법을 설명한다.
★ 지은이의 말 ★
내 첫 직업은 모의 해킹 컨설턴트였다. 모의 해킹 컨설턴트로 활동하면서 악성코드를 접하는 일은 많지 않았다. 1년에 한두 번 정도 고객사에서 침해사고 대응 업무를 수행하다가 악성코드가 발견되면 추가적으로 분석하는 정도였다. 모의 해킹 컨설턴트로 5년 동안 활동하고, 이제 관리실무자로 5년차를 맞이하고 있다. 관리실무에서는 회사 자산을 보호하기 위해 취약점 진단뿐만 아니라 침해사고 대응 업무, 보안 솔루션 운영까지 도맡고 있다. 이 과정에서 외부로부터 대외 서비스를 통해 침투하는 것을 차단하는 것도 중요하지만, 사용자 단말이 악성 사이트에 접근해 악성코드에 감염되는 것을 모니터링하는 과정도 중요하다는 사실을 깨달았다. 백신이 설치되어 있다고 하더라도 악성코드 감염이 모두 차단되는 것은 아니기 때문에, 보안 솔루션에서 발생되는 이벤트들에 집중하고 효율적으로 대응할 수 있는 방법이 필요했다.
관리실무를 시작하면서 디지털 포렌식, 악성코드 대응을 주제로 ‘보안 프로젝트’에서 장기 과제를 진행했다. 실무를 진행하면서 필요한 사항들을 멤버들과 공유했고, 오픈소스 도구를 활용해 전문 분석가 입장과 실무자 입장에서 다른 고민들을 했다. 이렇게 진행했던 프로젝트가 책 한 권의 결과물로 나왔다. 악성코드 전문 분석가 입장에서 분석된 많은 샘플 사례들보다는 오픈소스 도구를 이용해서 악성코드의 행위를 판단할 수 있는 환경 구축에 초점을 맞췄다. 이 책이 악성코드 분석의 끝은 아니다. 이제 시작일 뿐이고, 빅데이터 관리, 개인 단말 중요 프로세스의 실시간 모니터링과 효율적인 차단 방법에 대해 현재 연구 중이다. 이것에 대한 성과는 또 다른 결과물로 볼 수 있을 것이라 생각한다.
- 조정원
악성코드 분석은 흔히 알려진 정적 분석, 동적 분석의 형태로 진행된다. 기본적이면서도 잊어서는 안 될 가장 기본 형태이며, 이 형태에서 응용될 때 그 난이도는 기하급수적으로 높아지게 된다. 그래서 좀 더 효율적인 방법이나 기술을 찾을 수 있지 않을까?
게다가 공격자는 산업화되었고, IT가 발전하는 만큼 자동화해 너무나 많은 악성코드가 디자인되며 생성되고 있다. 이젠 악성코드를 전문적으로 분석하는 기업이 아닌 이상 정적/동적 분석으로 대응할 수 없기에 일반 개인과 기업은 악성코드 분석에 대해 너무나 열악할 수밖에 없다. 그래서 이 책은 흔히 알고 있는 악성코드 분석 방법을 오픈소스 도구에 의존해 확인할 수 있고, 더 나아가 자동화된 시스템으로 자동화 분석하도록 도와줄 수 있다.
‘라이프 해킹’이라는 용어가 있다. 이 용어는 생활 속에서 미처 깨닫지 못하거나 불편함에 길들여졌던 문제를 효율적으로 쉽게 고쳐나가 생활할 수 있는 아이디어나 기술을 의미한다. 여기서 나의 고민은 수많은 악성코드와 그 변종들을 기존의 방식으로 처리할 시간이 없기에 이를 최대한 자동화해 분석한 데이터를 받아 가공하고 싶다는 데 있었다. 또한 이러한 도구를 개발할 실력도 시간도 없었다. 이러한 문제를 오픈소스 도구의 힘을 빌려 좀 더 편하게 분석할 수 있는 해답을 이 책은 가지고 있다.
내가 이 책에서 담당한 파트에서는 쿠쿠 샌드박스(Cuckoo Sandbox)를 다룬다. 나는 0.3 버전부터 꾸준히 구축해 사용하고 있으며, 현재는 새로운 버전이 나올 때마다 구축하고 테스트해서 결과 보고서를 작성한 후 교육에 활용하고 있다. 또한 악성코드 관련 이슈가 발생했을 때 적극 활용해 분석 보고서를 만들고 있다. 비록 첫 구축이 오래 걸리고 이해하기에도 긴 시간이 소요되는 많은 기술들을 사용하고 있지만, 구축 후 웹으로 접속해 편리하게 얻을 수 있는 간편화된 시스템에 매료되었다. 그리고 올리디버거(OllyDbg)나 아이다(IDA)와 같은 도구를 잘 다루지 못하는 내게는 악성코드 분석을 위한 최고의 시스템이다.
- 최우석
악성코드 분석이라고 하면 흔히 ‘리버싱(Reverse Engineering)(코드 분석)’을 먼저 떠올리는 경우가 많다. 하지만 악성코드 분석은 상황과 환경에 따라 그리고 분석가의 기량에 따라 분석하는 방법이 천차만별이며, 빠른 시간 내에 대응하길 원하는 경우라면 리버싱 하나에 의존해서는 효과적인 결과물을 얻기가 어렵다.
당연한 얘기지만 그 예로, 도구를 활용하지 않고 코드를 분석하는 경우와 비교해보면 효율적인 도구와 리버싱을 병행해 분석할 때 그 시간을 절반 이상으로 줄일 수 있다. 이처럼 도구 활용은 리버싱 기술과 떼려야 뗄 수 없는 관계다.
이 책은 이러한 점들을 사전에 인지함으로써 도구 활용에 중점을 두고 서술하고 있으며, 특히 오픈소스를 활용한 도구들을 다룬다는 점에서 매력적이다. 오픈소스의 가장 큰 장점은 소스 코드가 공개되어 있어 대부분 무료로 사용할 수 있을 뿐 아니라 그 소스 코드를 활용해 최적의 환경으로 커스터마이징할 수 있다는 데 있다. 이 책은 오픈소스 도구의 장점을 활용한 악성코드 분석 방법을 설명하는 데 초점을 맞춰 구성되었다.
많은 독자들이 이 책을 통해 좀 더 넓고 깊이 있는 경험과 지식을 쌓게 되길 간절히 바란다.
- 이도경
보안 프로젝트 활동을 시작하기 전, 보안 프로젝트 가입을 고민하던 때가 생각난다. 당시 나는 먼저 활동하고 있던 친구의 소개를 통해 보안 프로젝트를 처음 알게 되었다. 그때는 전역하고 나서 1년 정도가 지난 시점이었고, 동시에 정보보안 동아리 활동을 시작하면서 보안 분야를 공부하기 시작한 지 반 년 정도의 시간이 흐른 시점이었다. 당시의 나는 여럿이 함께하는 프로젝트 활동을 하기에는 스스로가 너무도 부족해 다른 사람들에게 피해를 주게 될지도 모른다고 생각하며 보안 프로젝트 가입을 주저하고 있었다. 그러던 중, 보안 프로젝트 운영자 조정원 선배님을 뵐 수 있는 기회가 생겨 보안 프로젝트 가입에 대한 나의 고민을 직접 털어놓았었다.
당시 나의 이런 고민에 대해 조정원 선배님이 해준 조언이 아직도 기억에 생생하다. “실력을 갖춰서 들어오는 것은 좋다. 하지만 실력을 갖추기 위해 혼자서 공부하는 동안에 보안 프로젝트의 멤버들은 함께 공부하며 더 빠른 속도로 실력을 쌓아나간다. 그러면 그 차이를 다시금 메우기 위해 또 다시 혼자서 공부하며 준비해야 하는 것 아닌가.”라는 가입 자체에 대한 조언과 더불어 “프로젝트 활동에서 다뤄지는 내용의 수준(난이도)을 1에서 10으로 표현했을 때, 7, 8 정도인 높은 수준의 내용을 다루는 멤버들도 있고, 5, 6 정도의 수준에서 내용을 다루는 멤버들도 있다. 지금 당신의 실력이 그들보다 못하다고 생각한다면, 그들이 당연하게 여겨 놓칠 수 있는 2, 3 정도 수준의 내용을 당신이 채워보라. 그것을 시작으로 다른 멤버들이 작성한 프로젝트 내용을 습득하고, 나아가 더 높은 수준의 내용을 다룰 수 있도록 공부해보라.”라는 활동에 대한 조언이었다. 이러한 조언을 듣고 나서 다음 날 나는 보안 프로젝트에 가입했다. 그리고 그날을 시작으로 스스로 공부한 내용도 정리해보고 다른 사람이 정리한 내용을 바탕으로 공부하며, 나의 시선에서 더할 수 있는 내용을 추가하거나 궁금한 부분에 대해 질문하고 간단한 토론을 진행하는 등의 활동을 통해 많은 공부를 할 수 있었다. 이후 스스로 주제를 정해 프로젝트를 진행하는 정도로 발전했고, 지금과 같이 이 책을 함께 저술할 수 있는 기회도 얻게 되었다.
개인적으로 이 책을 저술하면서 스스로 부족하다고 여겨 보안 프로젝트 가입조차도 주저하던 내가 많은 멤버들과 운영자 조정원 선배님의 도움을 통해 이렇게나 성장했다는 사실에 뿌듯하기도 했지만, 반면에 집필하는 동안 몇 번씩 마주했던 지식의 한계를 통해 아직은 많이 부족하다는 사실도 깨닫게 되었다.
이 책을 출판하기까지 오랜 기간 더 좋은 내용을 담기 위해 노력한 모든 멤버들에게 많은 도움을 드리지 못해 죄송한 마음을 전하고, 함께할 수 있도록 기회를 주신 점에 감사한다.
- 정지훈