2014년 3월 31일 월요일

Win32DiskImager로 부팅 가능한 USB 디스크 만들기

요즘 판매되는 노트북들 대부분이 태블릿과 유사하게 경량화를 추구하다 보니 가장 먼저 제거하는 부분이 디비디롬(DVD-ROM) 입니다. 그렇다 보니 윈도우나 리눅스 설치 시디만을 가지고 있는 사람들의 경우에는 어떻게 해야 될지 고민하게 됩니다.

그래서 윈도우 7에서부터는 USB를 부팅이 가능한 디스크로 만들어 윈도우를 설치 할 수 있도록 지원하고 있습니다. 그래서 저 역시 작년 12월에 구입한 노트북이 디비디롬이 제거된 경량화 버전이라, 윈도우 7과 윈도우 8.1을 설치 할 때 USB를 부팅 가능한 디스크로 만들어 노트북에 운영체제를 설치 할 수 있었습니다.

일반적으로 윈도우 7 이후 버전의 ISO 이미지 파일을 가지고 있는 경우에는, 네로(Nero)와 같은 디비디 레코딩 프로그램으로 디비디를 제작하던가 아니면 마이크로소프트에서 제공하는 "Windows 7 USB/DVD download tool"를 설치하여 부팅 가능한 USB 설치 디스크나 디비디로 제작을 할 수가 있습니다.


개인적으로 백트랙(BackTrack) 이후에 칼리(Kali) 리눅스에 관심이 있어, 개인적으로 친분이 있는 여성구씨가 번역한 "Kali Linux 실전 활용 70가지 예제로 익히는 모의침투 테스팅 툴킷 가이드"를 읽다 보니 USB를 부팅 디스크로 만들 수 있는 다른 방법이 있더군요.

해당 서적에서는 "Win32 Disk Imager"라는 공개용 도구를 이용하여 USB를 부팅 가능한 디스크로 제작할 수 있음을 알려주고 있습니다.

Win32DiskImager를 이용해 부팅 가능한 USB 디스크(FAT32 및 8 GB 이상)를 제작하기 위해서는 아래 이미지와 같이 Win32DiskImager를 실행 후 가지고 있는 ISO 파일 이미지를 선택 합니다.


그리고, "Device" 부분에서 현재 시스템에 연결되어 있는 USB 디스크의 드라이브를 지정해준 후, 하단에 위치한 "Write"를 클릭 합니다. 그렇다면 실제 USB 디스크에 ISO 이미지 파일의 내용을 쓰기 시작합니다.


USB 디스크에 쓰기가 완료되었다면, 아래 이미지와 같이 완료 메시지 창이 생성 되며, 사용하는 시스템의 BIOS에서 USB 부팅 기능이 지원된다면, 생성한 USB 디스크를 이용해 운영체제를 설치 할 수가 있습니다.


해당 Win32DiskImager로 부팅 가능한 USB 디스크를 만들면서 한 가지 재미 있는 사실을 알 수가 있었습니다.

백트랙, 칼리 및 우분투(Ubuntu)와 같은 리눅스 운영체제의 ISO 이미지 파일들은 해당 툴을 이용해 쉽게 부팅 가능한 USB 디스크를 생성 할 수가 있습니다. 하지만, 윈도우 운영체제의 ISO 이미지 파일의 경우에는 해당 툴을 이용해 부팅 가능한 USB 디스크를 만들 수가 없었습니다.

반대로 마이크로소프트에서 제공하는 Windows 7 USB/DVD download tool을 사용하는 경우에는 윈도우 운영체제의 ISO 이미지 파일을 이용해 쉽게 부팅 가능한 USB 디스크를 만들 수 있으나, 리눅스 운영체제의 ISO 이미지 파일들로 만들 수가 없었습니다.

이러한 결과가 나온 것에 대한 추정으로 파일 시스템(File System)의 구조가 서로 달라 이러한 현상이 나온 것이 아닌가 생각 됩니다.

결론적으로, 윈도우 운영체제가 대상이 되는 경우에는 Windows 7 USB/DVD download tool을 사용하고, 리눅스 운영체제가 대상이 되는 경우에는 Win32DiskImager을 사용하는 것이 좋을 것 같습니다.

2014년 3월 30일 일요일

세계 최고의 인재들은 왜 기본에 집중할까

만 11년 7개월을 근무한 직장을 떠나 온지도 어느덧 일주일이 지났습니다. 전 직장은 저의 첫 직장이었고, 대학도 졸업하지 않은 저에게 새로운 배움과 경험을 쌓을 수 있었던 기회들을 가질 수 있었던 곳이었습니다. 비록 새로운 경험과 기회를 위해 다른 길을 선택하여 떠나게 되었지만, 한 동안은 그 곳에서 경험한 많은 일들과 만났던 많은 좋은 분들에 대한 즐거운 기억들이 많이 생각 나게 될 것 같습니다.

전 직장을 떠나고 나서 오랫만에 여유롭게 강남 교보문고에서 책들을 훑어 보다 한 권의 책이 눈에 들어오더군요. 그 책 제목이 바로 "세계 최고의 인재들은 왜 기본에 집중할까 - 평생 성장을 멈추지 않는 사람들의 48가지 공통점" 입니다.


이런 자기 관리 및 자기 혁신과 관련된 서적들 일부는 납득하기 어려운 논리로 설명하는 서적도 있지만, 일부는 동, 서양을 막론하고 근본적인 핵심을 지적하는 논리를 가진 책들이 있습니다. 이 책은 두껍지 않는 분량에도 불구하고 앞서 설명한 바와 같이 근본적인 핵심을 언급하고 있는 서적 중 하나 입니다.

한국 사회에서는 20대 후반이 되면 대부분의 사람들은 직장을 구하고, 사회 생활을 시작하게 됩니다. 그 중에는 기본에 충실하면서, 다른 사회 구성원들과 조화롭게 이루어가는 지혜를 가진 젊은 친구들도 있지만, 일부는 정말 기본을 갖추지 못했다는 생각이 들 정도의 자기 중심적인 이기적인 생각과 행동으로 다른 사람과 조화를 이루어가지 못하는 젊은 친구들도 일부 있습니다. 저의 개인적인 경험에서도 그렇구요.

그래서 저자는 화려한 기교와 설명보다는 기본에 충실해야 된다며, 아래 4가지 구문으로 해당 서적의 전체 내용을 풀어가고 있습니다.

1) 다른 사람과의 "관계'를 소중히 여긴다.

저 역시 무척 공감하는 부분 중 하나 입니다. 전 직장을 떠난 후 둘러보니 저에게 남아 있는 것은 만 11년 7개월 동안 구매한 책들과 다양한 경험 및 배웠던 전문 지식들 그리고 마지막으로 그 동안 뵙고 알게 되었던 업계의 지인분들이었습니다. 여러 좋은 지인분들의 도움 덕분에 제가 이렇게까지 성장 할 수 있었던 것 같습니다.

2) "자기 계발"을 평생 지속한다.

이 화두는 동서 고금을 막론하고 어떠한 분야에서도 통하는 말이 아닌가 싶습니다. 예전 저보다 연배가 많으신 지인분께서 좋은 조언의 말씀들을 해주시면서 하신 말씀 중 하나가 "죽는 날까지 현역이다." 였습니다. 이 말이 곧 죽을 때까지 자기 계발을 지속적으로 하라는 조언 중 하나였습니다.

3) 하루도 빠짐 없이 "성과"를 낸다.

이 말은 모든 직장인들이 공감하는 구절이 아닌가 싶습니다. 저 역시 개인적으로 예전 조직에 있으면서 가장 뿌듯한 기분으로 퇴근 하는 날은 일찍 퇴근하는 날이나 새벽 별보며 퇴근 하는 날도 아니었습니다. 그 날 하루 동안 했는 일들이 같은 조직원들에게 도움이 되고 조직에 큰 도움이 되는 성과를 만들어 놓은 날이었습니다.

4) "글로벌 마인드"를 한 순간도 놓치지 않는다.

아내와 가끔씩 하는 이야기가 우리 자식들은 이제 더 이상 한국이라는 울타리에서만 살지는 않을 것이라는 것 입니다. 그 울타리를 벗어나 어느 나라에서 일하느냐가 중요한 것이 아니라, 어느 대륙에 있는 어떤 업종의 기업에서 일하느냐가 더 중요해질 것 같다는 것 입니다.

이 책을 다 읽는데 그리 많은 시간이 들지 않았습니다. 아마 조직 생활을 계속 하고 있었다면 출퇴근 길 2 ~ 3일이면 모두 읽었을 것 같습니다. 개인적으로 이 책은 그 동안 잠시 잊고 지냈던 조직과 사회 생활의 기본에 대해 다시 생각해보고 반문 해볼 수 있었던 좋은 기회가 되었습니다.

이 책을 이제 사회 생활을 시작한지 3년 이하의 젊은 친구들이 읽고 고민을 해본다면, 아마도 앞으로 계속 이어질 사회 생활에 많은 도움이 되지 않을까 싶습니다.

2011년 5월 SNS 보안 위협 사례 강연 자료

이제까지 외부에서 강연하거나 발표한 자료들 모두 제가 소속된 회사명으로 공개되었습니다. 하지만 오늘 발표 하는 자료는 처음으로 회사에 소속된 연구원이 아니 다른 조직에 속한 팀원이자 연구원으로 발표한 자료 입니다.

대략 7년 전 즈음에 (ISC)2에서 주관하는 CISSP(Certified Information Systems Security Professional)라는 보안 관련 인증을 접하고는 나름 열심히 공부해서 인증을 받을 수가 있었습니다.

인증을 획득한 그 이후에는 회사 업무와 개인적인 연구에만 집중하다 어느날 한국에 별도의 한국 CISSP 협회가 있고, 다양한 보안 분야에 있으신 분들이 그 곳에서 좋은 활동들을 많이 하시고 있다는 것을 알게 되었습니다.

그래서 저 역시 2011년부터 한국 CISSP 협회에서 간사로 활동하며, 협회에서 정기적으로 진행하는 정보보호리더세미나에서 발표한 자료 입니다.

비록 발표는 제가 하였지만 그 당시 같이 활동하였던 "SNS 보안팀" 팀원 모두가 주제에 대한 아이디어와 자료에 대한 검증에 참가하여 좋은 협업에 대한 경험이 아니었나 생각 됩니다.

발표 주제는 그 당시 소셜 네트워크(Social Network)라는 새로운 네트워킹 플랫폼에서 발생하는 다양한 보안 위협들에 대한 사례 연구와 향후 발생 가능성이 높은 보안 위협 형태에 대해 다루고 있습니다.

발표 주제는 "SNS에서 발생한 보안 위협 사례"이며 목차는 다음과 같습니다.

1. 소셜 네트워크 보안 위협 특징

2. 소셜 네트워크 보안 위협 사례

3. 향후 예측되는 보안 위협 형태



2014년 3월 26일 수요일

RemoteDLL을 이용한 실행 압축된 DLL 파일 분석

악성코드를 분석 하다보면 다양한 형태의 파일들을 마주치게 됩니다. 그 중에는 PE 파일 형태인 EXE, DLL와 SYS에서부터 스크립트(Script) 그리고 마이크로소프트(Microsoft) 오피스(Office)와 어도비 리더(Adobe Reader) 문서 파일까지 다양한 파일 형태들을 마주치게 됩니다.

분석 당시에 접하게 되는 다양한 파일 형태의 악성코드들을 살펴보면, 그 시대 상황에 맞는 악성코드 형태가 어떠한 것들인지 비교적 쉽게 알 수가 있습니다.

과거 제가 처음으로 악성코드 분석 업무를 시작하던 시기에는 악성코드 감염을 위한 테스트 시스템이 윈도우 98(Windows 98)을 사용했던 시기였으며, 악성코드들 역시 대부분이 EXE, COM과 PIF 파일 형태 였기 때문입니다.

하지만 시간이 지나면서 다양한 파일 형태의 악성코드들이 발견되기 시작하였고, 악성코드 제작자들 역시 악성코드 자기 보호를 위한 목적으로, 보안 업체의 분석 시간을 지연시키고 안티 바이러스 소프트웨어(Anti-Virus Software)의 탐지를 우회하기 위해 실행 압축(Packer)와 프로텍터(Protector)를 사용하기 시작하였습니다.

이러한 실행 압축 및 프로텍터 프로그램들은 악성코드 분석가 입장에서는 비교적 피곤하게 만드는 여러가지 요소들 중 하나입니다.

악성코드 분석가 입장에서는 분석을 맡게 된 파일들을 비교적 빠르게 악성코드 인지 아니면 정상 파일인지 판단하고, 진단을 위한 적절한 진단 기법을 선정하는 작업들을 진행해야 됩니다. 하지만, 실행 압축과 프로텍터로 제작된 파일들에 대한 분석을 맡게 되면 실행 압축을 모두 풀려면 시간 소요가 크기 때문에 분석 진행 속도가 늦어지게 되는 것을 고려하지 않을 수가 없습니다. 특히나, 분석을 맡게 된 파일이 특정 이슈가 존재하는 파일이라면 분석가 입장에서는 시간적인 압박을 받을 수 밖에 없습니다.

실행 압축과 프로텍터로 보호된 파일이라도 EXE 처럼 실행 가능한 파일이라면 동적 분석(Dynamic Analysis)를 통해 악의적인 기능이나 증상이 나타나면 그나마 비교적 쉽게 분석을 할 수 있지만, DLL 파일이 실행 압축이나 프로텍터로 보호된 파일이라면 고민이 되기 시작합니다.

그래서, 오늘 이야기 할 부분이 바로 실행 압축된 DLL(Dynamic Link Libraries) 파일에 대해 비교적 쉽고 빠르게 분석 할 수 있는 방법  입니다. PE 파일의 실행 압축 여부를 판단하는 기법들은 몇 가지가 있지만, 이는 다음 기회에 다루기로 하고 오늘은 실행 압축된 DLL 파일에 대한 이야기만 하려고 합니다. :)

개인적으로 좋아하는 악성코드 분석 관련 서적 중 하나인 "실전 악성코드와 멀웨어 분석 Practical Malware Analysis" 에서는 Rundll32.exe를 이용해 DLL 파일을 동적 분석 할 것을 알려주고 있습니다.

개인적인 경험으로 대부분의 DLL 파일을 동적 분석 할 때 Rundll32.exe가 요긴하지만, 일부 DLL 파일에 대해서는 해당 방법으로 분석이 가능한 것은 아닙니다. 그리고, DLL 파일을 분석 할 때 마다 커맨드라인(CommandLine) 명령을 입력하는 것은 여간 귀찮은 것이 아닙니다.

그래서, 실행 압축된 DLL 파일을 분석 할 때는 SecurityXploded에서 배포하는 "RemoteDLL"을 사용해, 분석 대상되는 DLL 파일을 특정 프로세스에 강제로 인젝션(Injection) 시킨 후 해당 DLL 파일에 대한 메모리 덤프(Memory Dump)를 생성하여 스트링(String)을 살펴본다면 비교적 빠르게 악의적인 기능 여부를 확인 할 수 있습니다.

우선 RemoteDLL의 외형을 살펴보면 기본적인 GUI는 아래 이미지와 같이 직관적으로 쉽게 사용 할 수 있게 되어 있습니다.

상단의 붉은 색 박스를 살펴보면, RemoteDLL의 기능은 2가지로, 특정 DLL 파일을 강제로 인젝션시키거나 이와 반대로 인젝션 되어 있거나 스레드(Thread)로 로딩되어 있는 DLL 파일을 풀기 위해 사용 할 수 있습니다.


그리고 아래 이미지의 붉은 색 박스와 같이 그 하단에는 선택한 DLL 파일을 어떠한 방식으로 인젝션 할 것인지 사용자가 선택 할 수 있습니다.


VMWare에 존재하는 윈도우 XP 32Bit 운영체제의 RemoteDLL은 선택 할 수 있는 인젝션 기법이 "CreateRemoteThread"와 "QueueUseAPC" 2개만이 존재 합니다. 하지만 64Bit 운영체제에서는 위 2개의 기법 외에도 "NtCreateThreadEx"를 추가로 선택 할 수 있습니다.

그리고, 그 하단에 윈치하는 윈도우 아이콘은 현재 RemoteDLL이 실행 중인 시스템에서 실행 중인 프로세스(Process) 리스트들이 나열 됩니다. 이는 현재 실행 중인 프로세스들 중 인젝션 대상이 되는 프로세스를 사용자가 임의로 선택 할 수 있습니다.


아래 이미지에 존재하는 붉은 색 박스에는 인젝션을 시킬 DLL 파일을 선택 할 수 가 있습니다. 다만 인젝션 시킬 DLL 파일의 확장자가 반드시 .dll로 정의되어 있어야 하며, 그렇지 않을 경우에는 인젝션 기능이 정상적으로 동작하지 않습니다.


인젝션 대상이 될 프로세스와 인젝션 시킬 DLL 파일이 모두 선택 되었다면, 하단에 존재하는 "Inject DLL" 버튼을 클릭하기만 하면 됩니다.

그렇다면 실제 실행 압축된 DLL 파일을 이용해 특정 프로세스에 인젝션 한 후 인젝션 된 DLL 파일의 메모리 덤프를 생성하여, 문자열 정보를 확인하는 과정을 살펴 보도록 하겠습니다.

테스트를 위해 "실전 악성코드와 멀웨어 분석 Practical Malware Analysis" 1장에서 제공하는 예제 DLL 파일을 UPX로 실행 압축하였습니다.


그리고, RemoteDLL을 실행 시킨 후 인젝션 대상이 될 프로세스를 위해 더미(Dummy) 프로그램으로 PEiD를 실행 합니다. 당연히 개인적인 취향에 따라 다른 프로그램을 실행 시켜도 무방합니다. 그리고 인젝션 된 DLL 파일의 메모리 덤프를 생성하기 위해 PETools를 실행 합니다. 이 역시 스레드 메모리 덤프를 생성 할 수 있는 다른 툴을 사용하여도 무방합니다.

이제 준비가 되었다면, 아래 이미지와 같이 "CreateRemoteThread" 를 선택 한 후에 앞서 설명한 바와 같이 인젝션 대상이 되는 프로세스인 PEiD를 선택 합니다. 인젝션 기법 중 "CreateRemoteThread" 을 선택한 이유는 개인적인 경험 상 가장 무난하게 인젝션이 성공하기 때문입니다.

인젝션 기법까지 모두 선택하였다면, 이제는 인젝션 시킬 DLL 파일을 선택 합니다.


모두 준비가 되었다면, 이제는 하단에 존재하는 "Inject DLL"을 클릭하여 인젝션 작업을 진행 합니다. 인젝션이 성공하게 되면, 아래 이미지와 같이 인젝션이 성공하였다는 로그가 남게 됩니다.


인젝션이 성공하게 되면 최초 실행하였던 PETools에서 아래 이미지와 같이 인젝션 대상이 되었던 PEiD 프로세스를 클릭 한 후 하단의 스레드 리스트 중 인젝션 시킬 DLL 파일을 선택 합니다. 그리고 오른쪽 마우스를 클릭하여 "Dump Full"을 클릭하여 적절한 위치에 메모리 덤프 파일을 생성 합니다.


그 이후에는 파일 내부의 스트링을 확인 할 수 있는 "BinText"와 같은 툴을 이용하여 DLL 파일 내부의 스트링을 확인 할 수 있습니다. 다만, 메모리 덤프를 통해 생성한 DLL 파일임으로 IAT(Import Address Table)이 손상되었음을 참고 할 필요는 있습니다.


이렇게 RemoteDLL을 이용해 실행 압축이나 프로텍트로 보호 된 DLL 파일에 대해 비교적 쉽고 빠르게 내부에 존재하는 스트링 확인을 통해, 악의적인 기능이 존재하는지 살펴볼 수 있습니다.

2014년 3월 25일 화요일

2011년 4월 보안 위협과 악성코드 분석 기법 강연 자료

이 자료 역시 2011년 4월 서울종합과학대학원 산업보안MBA 과정 학생들을 대상으로 이루어진 강연 자료 입니다.

강연 자료의 제목은 2010년 11월에 이루어졌던 강연 주제와 동일합니다만, 내용면에서는 변화를 가져가고 있습니다. 아래 목차에서도 알 수가 있지만, 해당 시기부터 외부 강연 자료에서 APT(Advanced Persistent Threat)에 대한 내용들을 포함하기 시작하였습니다.

이렇게 강연 내용에 APT 보안 위협을 다룰 수 있었던 것은 2010년 가을 2개월에 걸친 연구를 통해 "고도화된 보안 위협의 생산, APT (Advanced Persistent Threat)" 원고를 작성해서 해당 위협에 대한 지식을 학습 할 수 있었던 것이 크게 작용 한 것으로 보여집니다. 그리고, 몇 년에 걸친 사례 연구들을 통해 2013년 말에 작성 했던 "APT(Advanced Persistent Threat) 공격의 현재와 대응 방안"을 통해 그 이후에도 계속 연구 내용을 다듬을 수 있었기 때문으로 보여집니다.

1. 고도화된 보안 위협의 생산, APT
2. 악성코드의 특징과 진단 기법
3. 악성코드의 분석 기법
4. 악성코드의 분석 사례



2014년 3월 24일 월요일

디지털 포렌식(Digital Forensics)을 위한 운영체제, SANS SIFT 3.0 공개

일반적으로 디지털 포렌식을 위해서는 분석가의 능력이나 취향에 맞는 다양한 소프트웨어들을 많이 사용합니다. 윈도우 엔지니어인 저의 경우에는 악성코드 분석이나 멀웨어 포렌식(Malware Forensics)을 위해 사용하는 소프트웨어들 대부분이 마이크로소프트(Microsoft)의 윈도우(Windows) 운영체제에서 사용 가능한 것들 입니다.

그래서 일전에 공개한 "메모리 포렌식(Memory Forensic)을 위한 메모리 분석 툴 Mandiant Redline"이나 "볼라틸리티(Volatility)를 이용한 메모리 분석 사례" 블로그 글에서와 같이 윈도우 소프트웨어들이 주를 이루고 있습니다. 물론 그 중에는 백트랙(BackTrack)을 일부 사용하기도 하였지만, 이는 개인적인 연구 작업과 리눅스(Linux)를 익히기 위한 개인적인 취향으로 인한 부분들입니다.

악성코드 분석에서도 역시 "Windows 7에서 Windows XP Mode를 VMWare에 설치 하기" 블로그 글에서와 같이 윈도우 운영체제에 VMWare를 설치하여 분석 작업과 연구를하고 있습니다.

이렇듯 대부분의 악성코드나 취약점 그리고 디지털 포렌식 등을 전문으로 연구 하시는 분들은 특정 운영체제에 제한 받기 보다는 개인적으로 사용하기 편하고 작업 효율이 높은 운영체제를 선택해 사용하고 있습니다.

하지만 특이하게도, 전문적인 보안 대응 및 분석 기술을 강연하는 SANS에서는 별도의 리눅스 기반 운영체제를 제작하여 누구나 사용할 수 있도록 배포하고 있습니다. 그 중에는 악성코드 분석을 위해 제작된 "REMux(Reversing Engineering Malware liux)"와 디지털 포렌식을 위해 제작된 "SIFT(SANS Investigate Forensic Toolkit )"이 존재합니다. 

그래서 SANS에서 교육하는 악성코드 분석 과목과 디지털 포렌식 과목에서는 해당 운영체제를 사용해 분석을 진행하는 내용이 교재에 포함되어 있습니다. 그 중에서 REMux에 대한 이야기는 다음 기회에 실제 악성코드 분석 사례를 이용해 설명하기로 하고 오늘은 SIFT에 대해 이야기 하고자 합니다.

오늘 SANS 블로그 "SANS SIFT 3.0 Virtual Machine Released"을 통해 새로운 3,0 버전의 SIFT 가상화 이미지가 공개되었다는 글을 보게 되었습니다. 우선 이번 3.0 버전의 새로운 기능들로 SANS에서는 다음을 꼽고 있습니다.

Ubuntu LTS 12.04 Base
64 bit base system
Better memory utilization
Auto-DFIR package update and customizations
Latest forensic tools and techniques
VMware Appliance ready to tackle forensics
Cross compatibility between Linux and Windows
Option to install stand-alone via (.iso) or use via VMware Player/Workstation
Expanded Filesystem Support

우선, SIFT 3.0 가상화 이미지를 다운로드 하기 위해서는 위 블로그에 존재하는 링크인 "Download SIFT Workstation VMware Appliance Now - 1.5 GB"를 통해 다운로드 할 수 있습니다. 

다운로드 전에 SANS 계정이 필요한데, 이는 누구나 간단한 정보 입력만으로 만들 수 있습니다. 그 이후에는 간단하게 SIFT 3.0 가상화 이미지를 7Zip으로 압축한 "SIFT Workstation 3.0.7z" 1.44 GB 크기의 파일을 다운로드 할 수 있습니다. 100 MB 광랜을 사용하는 집에서 다운로드하는데 대략 3시간 정도 걸렸던 것 같습니다.

다운로드 한 "SIFT Workstation 3.0.7z" 파일을 적당한 폴더에 압축을 풀고 VMWare를 실행 한 후 아래 이미지와 같이 "File"에서 "Open"을 클릭 합니다.


그리고, "SIFT Workstation 3.0.7z" 압축을 푼 폴더로 이동하여 아래 이미지와 같이 "SIFT Workstation 3.0.vmx" 을 선택 합니다.


선택이 완료되면 VMWare에서는 아래 이미지와 같이 자동으로 새로운 게스트 탭(Guest Tab)을 생성하게 됩니다.


게스트 탭 생성이 완료되었다면 VMWare의 실행(Power On)을 클릭하여 SIFT 3.0 가상화 이미지를 실행 시킵니다. 부팅 과정이 짧게 진행 된 후에는 아래 이미지와 같이 변경된 새로운 SIFT 3.0 로그인 화면이 나타나게 됩니다.


로그인 화면이 나타났다면, SANS 블로그에 공개되어 있는 것과 같이 "sansforensics"의 비밀번호인 "forensics"을 입력하고 로그인을 합니다. 

로그인이 성공하게 되면 아래 이미지와 같이 터미널 창이 생성되어 있는 메인 화면을 볼 수가 있습니다. 사용하는 노트북 화면이 16:9 크기를 지원하는 사양이라 아래 이미지 역시 조금 길어져 보입니다.


앞서 설명한 바와 같이 우분투(Ubuntu) LTS 12.04 커널을 기본으로 하여 SIFT 3.0을 제작하였음으로, 이미 우분투 리눅스에 대한 경험이 있으신 분들은 비교적 빠르게 적응 하실 수 있을 것으로 보입니다.

우선 바탕화면을 살펴보면 총 8개의 PDF 파일이 존재하는데, SANS DFIR(Digital Forensics & Incident Response) 강의 소개와 관련된 PDF 파일인 "Brochure_SANSDFIR.pdf"와 "Poster_Fall_2013_Evidence_Of.pdf"가 있으며, SIFT 3.0을 활용하기 위한 가이드 문서인 "SIFT-Cheat-Sheet.pdf"가 있습니다. 

그 외에 윈도우와 리눅스 명령어를 담은 "windows-to-unix-cheatsheet.pdf", 침해 사고 현장에서 수집해야 될 로그들과 절차에 대한 "log2timeline-cheatsheet.pdf", 네트워크 포렌식을 위한 "network-forensics-cheatsheet.pdf" 그리고 메모리 포렌식을 위한 "Memory Forensics Cheat Sheet .pdf"과 함께 악성코드를 탐지하기 위한 방법론에 대해 다룬 "Memory Forensics Cheat Sheet .pdf"이 있습니다.

간단한게 살펴본 SIFT 3.0은 외형은 이러한 형태이며, 이제는 SIFT 3.0에 포함된 볼라틸리티(Volatility)와 DFF(Digital Forensics Framework)를 간단하게 살펴 보도록 하겠습니다.

우선 화면 왼쪽 상단에 포함된 터미널 아이콘을 클릭하면 아래 이미지와 같이 프롬프트가 생성됩니다. 여기서 간단하게 볼라틸리티의 약어인 "vol"과 도움말 명령인 "-h"을 이용해 SIFT 3.0에 포함된 볼라틸리티의 버전은 2.3.1 임을 알 수가 있습니다.


SIFT 3.0에는 기본적으로 DFF(Digital Forensics Framework)라는 포렌식 프레임워크가 포함되어 있습니다. DFF는 아래 이미지와 같이 왼편 하단에 아이콘이 존재하며 해당 아이콘을 클릭하면 DFF가 실행 됩니다. 


실행 후에는 생성한 메모리 덤프(Memory Dump) 파일과 디스크 이미지(Disk Image) 파일들을 읽어들여서 분석을 진행 할 수 있습니다. 

이상으로 SIFT 3.0에 대해 기본적인 사항들에 대해 살펴 보았습니다. 기본적으로 SIFT 3.0에는 다양한 디지털 포렌식 툴들이 포함되어 있으나, 우분투 리눅스를 이용하다 보니 저와 같이 리눅스에 익숙하지 않은 분들은 사용에 어려운 부분들은 있습니다. 

그래서, 일부 디지털 포렌식 커뮤니티에서는 "WinFE(Windows Forensic Environment)"라는 윈도우 기반의 포렌식 운영체제 제작 방법들을 소개하기도 합니다. WinFE와 관련된 사항들은 다음 기회에 다루어 보기로 하겠습니다.

2014년 3월 20일 목요일

2010년 11월 보안 위협과 악성코드 분석 기법 강연 자료


날씨가 다시 추워지는 것이 조금 쌀쌀 해지는군요. 이런 환절기에는 감기 조심하는 것이 중요한 것 같습니다.

오늘 공개하는 자료는 2010년 11월 서울종합과학대학원 산업보안MBA 과정 학생들을 대상으로한 강연 자료입니다. 자료 구성은 크게 현재 발생하는 보안 위협들에 대한 전반적인 이해와 이러한 보안 위협을 분석하기 위한 방법론과 사용 도구들 그리고 사례로 마무리를 하고 있습니다.

이제까지 강의 경험으로 보았을 때 MBA과정 학생들이 IT 지식에 대한 수준이 모두 달라서 2010년도와 2011년도 강연 자료는 특히나 어렵게 받아들였던 시기가 아니었나 생각 되네요.

강연자료는 크게 4가지 목차로 다음과 같습니다.

1. 블랙 마켓으로 인한 사이버 범죄

2. 악성코드의 특징과 진단 기법

3. 악성코드의 분석 기법

4. 악성코드의 분석 사례




2014년 3월 19일 수요일

2010년 10월 보안 위협 동향과 대응 방안 강연자료

대략 일주일 정도 블로그를 작성하지 않다가, 오늘에서야 다시 작성하게 되는군요. 한 동안 부모님 및 가족과 함께 시간을 보내면서 지내다 보니 이렇게 시간이 흘러가게 되었군요.

오늘 공유하는 자료는 2010년 10월 대구 대학교 전산 실무자 분들을 대상으로 강연한 "보안 위협 동향과 대응 방안" 입니다. 대구 대학교는 저의 본가가 있는 대구에 위치해 있어 덕분에 오랜만에 본가에도 잠시 들려 부모님을 뵐 수 있었던 기억이 나네요.

해당 강연 자료는 청중이 전산 실무자 분들을 대상으로 하다 보니, 관리자의 관점에서 보안을 어떻게 바라보고, 보안 관리와 정책을 운영을 해야 되는가와 관련된 부분들이 주된 내용 입니다.

목차는 아래와 같이 3 부분으로 나누어져 있습니다.

1. 보안 위협의 발전과 악성코드의 증가

2. 2010년 주요 보안 위협 이슈

3. 보안 관리자로서 보안 위협 대응 방안



2014년 3월 7일 금요일

Windows 7에서 Windows XP Mode를 VMWare에 설치 하기

악성코드를 분석 할 때 가상화 환경을 지원해주는 소프트웨어인 VMWareVirtualBox가 중요한 부분을 차지합니다. 특히 악성코드에 대한 동적 분석(Dynamic Analysis)를 진행 한 후에 감염된 윈도우 환경을 다시 빠르게 감염 이전의 초기 상태로 복원 시켜줌으로 분석 전반에 걸쳐 분석 시간을 단축 시켜주는 장점이 존재 합니다.

2002년 처음으로 악성코드 분석 업무를 담당할 때에는 이러한 가상화 소프트웨어가 없어 실제 윈도우 시스템에 노턴 고스트(Norton Ghost)를 설치하여 초기 이미지를 생성한 후 악성코드의 동적 분석을 진행 한 후 다시 초기 이미지로 복원하는 작업을 반복 하였습니다. 이러한 과정은 가상화 소프트웨어에 비해 상대적으로 시간 소요도 많을 뿐만 아니라 새로운 분석 툴을 설치하는 경우에는 다시 초기 이미지를 생성해야 되는 번거로움도 존재하였습니다.

그 이후에는 노턴 고백(Norton GoBack)으로 초기 이미지가 아닌 감염되기 이전 시점으로 복원을 하기도 하였습니다만, 아무래도 소프트웨어다 보니 악성코드 감염으로 인해 정상적으로 복원이 되지 않는 경우도 발생 하였습니다.

이렇게 편리한 가상화 환경이 악성코드 분석과 자동 분석에 많이 쓰여진다는 것이 알려진 이후에는 악성코드의 감염 환경이 가상화 인지 확인하는 코드들이 악성코드에 추가되기 시작하였습니다. 그래서 현재에는 실제 윈도우 시스템과 VMWare에 생성한 가상 윈도우 시스템 환경 이렇게 2개를 번갈아 가며 악성코드 분석에 사용하고 있습니다. 하지만, 대부분의 악성코드 분석 작업은 VMWare에 존재하는 가상 윈도우 시스템 환경을 이용하고 있습니다.

그래서 작년 12월 새롭게 노트북을 구매 한 이후 악성코드 분석 환경을 구축하기 위해 VMWare에 어떻게 윈도우 XP 환경을 설치할까 고민하는 과정에서 구글 검색을 통해 "Using Free Windows XP Mode as a VMware Virtual Machine"라는 좋은 블로그를 찾을 수 있었습니다.

Windows XP Mode는 윈도우 7 운영체제가 하위호환을 유지하기 위해 마이크로소프트(Microsoft)에서 별도의 윈도우 XP SP3 가상화 환경을 제공 해주는 것입니다만, 모든 윈도우 7 버전에서 설치가 가능한 것은 아니고 Professional, Ultimate와 Enterprise 이 3가지 버전에 한해서만 가능 합니다.

사용하는 환경이 윈도우 7이고 위 3가지 버전 중 하나라면 Windows XP Mode에서 정품 인증을 받은 후 WindowsXPMode_ko-kr.exe(558.4 MB), WindowsXPMode_K_ko-kr.exe(558.4 MB) 또는 WindowsXPMode_KN_ko-kr.exe(534.4 MB) 중 하나를 다운로드 할 수 있습니다.

다운로드 한 Windows XP Mode 설치를 완료하였다면, 이제는 VMWare를 실행 한 후 아래 이미지와 같이 VMWare의 "File" 메뉴에서 "Import Windows XP Mode VM"를 클릭 합니다.


그 후 VMware에서 아래 이미지와 같이 "VMWare vCenter Converter Standalone"이 필요하다는 팝업창을 보여주는데, "Yes"를 클릭하여 설치를 진행 합니다.


"VMWare vCenter Converter Standalone" 설치가 완료되었다면, 바탕화면에는 아래 이미지와 같이 "VMWare vCenter Converter Standalone Client"가 생성됩니다.


그렇다면 이제 다시 VMWare의 "File" 메뉴에서 "Import Windows XP Mode VM"를 클릭 하면, 아래 이미지와 같이 VMWare에 생성할 새로운 가상 환경의 명칭과 설치 경로를 지정 하는 팝업창이 생성됩니다.


여기에서 "Import"를 클릭하면 Windows XP Mode가 VMWare에 의해 변환이 진행되기 시작합니다.


변환 작업이 완료되면 아래 이미지와 같이 VMWare의 새로운 탭으로 "Windows XP Mode"가 생성된 것을 볼 수 있습니다.


새로 생성된 "Windows XP Mode" 탭의 가상 윈도우 환경을 실행하면, 이후에는 일반적으로 VMWare에 윈도우 XP 설치 CD를 이용하여 설치하는 과정과 동일하게 진행 됩니다. 다만 조금 다른 부분이 있다면, 라이센스에 필요한 CD-Key를 입력하는 단계가 없다는 것 정도 입니다.

설치 이후 특이점으로는 VirtualBox에서도 사용 가능한 OVF(Open Virtualization Format)으로 내보내기(Export)가 되지 않으며, Windows XP Mode가 설치되어 있지 않은 다른 윈도우 시스템의 VMWare에서는 설치 경로에 존재하는 "Windows XP Mode.vmx" 파일과 나머지 데이터 파일들을 읽어 올 수가 없다는 것 입니다.

이러한 사항들은 윈도우 라이센스와 관련된 사항이 아닌가 생각됩니다. 그래서 최초 윈도우 8.1 환경에서 Windows XP Mode를 VMWare에 설치하는 방법 역시 같이 다루고자 하였으나, 라이센스 문제가 있을 것 같아 다루지 않기로 하였습니다.

2014년 3월 6일 목요일

2010년 9월 "2010년 상반기 보안 위협 동향과 주요 보안 위협" 강연 자료

요즘 다시 날씨가 쌀쌀해지는 것이 외부 활동 일들이 있어서 다니기가 편하지는 않더군요. 일산을 갈 일이 있어 차를 운전해서 가는 꽃가루인지 먼지인지 모를 것이 살짝 날리길래 "이게 뭐지?" 했었는데, 저녁 뉴스를 보니 그게 눈이였다고 하더군요. 개구리가 깨어난다는 경칩이 오늘인데 나왔던 개구리들 동사 내지는 따뜻한 냄비를 찾아 갈 것 같은 날씨더군요.

오늘 공개하는 자료는 2010년 9월 SK Coms에서 개발자들과 보안 담당자들을 대상으로 한 "2010년 상반기 보안 위협 동향과 주요 보안 위협" 강연 자료 입니다. 그 당시 모바일 악성코드와 PC 악성코드 분야를 나누어서 강연들이 있었습니다만, 아쉽게도 2011년 7월에 언론을 통해 알려진 바와 같이 SK Coms에서 보안 사고가 있었습니다. 돌이켜서 생각해보면 참 아쉽고도, 아이러니컬하다는 생각이 많이 듭니다.

그 당시에 제가 강연하였던 주제는 2010년도 상반기 동안 발생 하였던 보안 위협들의 동향과 함께 주요 보안 위협들에 대한 것이 주를 이루었습니다.



2014년 3월 4일 화요일

볼라틸리티(Volatility)를 이용한 메모리 분석 사례

오늘 공유하는 자료는 2013년 하반기 대략 3개월 정도 연구 및 분석을 통해 작성한 자료 입니다. 최초에는 PPT 슬라이드 파일로 작성해서 공유를 했었는데, 2013년 12월 초 즈음에 회사 내부 기획 업무를 담당하시는 분께서 원고를 하나 써달라고 말씀을 하셔서, 슬라이드를 다시 원고로 작성한 글 입니다.

그래서, 슬라이드와 원고가 모두 존재하는 몇 개 않되는 외부 발표 자료인데 최초 제가 정한 제목은 "Memory forensics with volatility"였는데, 원고 담당자 분께서 적절하게 "볼라틸리티를 이용한 메모리 분석 사례"로 변경 해주셨습니다. 그리고 원고 분량 슬라이드는 70 페이지, A4로는 44 페이지 정도 되어서 아래와 같이 나누어서 보기 좋게 정리를 해주셨습니다.


블로그에 정리에는 슬라이드와 2개의 원고를 모두 합쳐셔, 블로그 글만 보셔도 전체를 보실 수 있게 꾸며 봤습니다.

슬라이드 목차는 아래와 같으며, 가급적이면 슬라이드 내용만 보시고도 따라 하실 수 있도록 쉽게 정리 했습니다.

01 Memory Forensics
02 Windows Memory
03 Windows Memory Dump and Analysis
04 What is Volatility
05 Installing Volatility on Windows and BackTrack
06 Memory analysis using Volatility
07 Case Study and Hands-on Lab
08 Conclusion



이런 슬라이드 내용을 정리한 원고가 아래와 같이 정리 했습니다.

+---------------

컴퓨터 포렌식과 침해 사고 대응

일반적으로 컴퓨터 포렌식 또는 디지털 포렌식(Digital Forensic)은 범죄 수사에서 적용되고 있는 과학적 증거 수집 및 분석기법의 일종으로, 각종 디지털 데이터 및 통화기록, 이메일 접속기록 등의 정보를 수집, 분석하여 DNAㆍ지문ㆍ핏자국 등 범행과 관련된 증거를 확보하는 수사기법을 의미한다.

최근 발생하는 APT(Advanced Persistent Threat)를 포함한 침해 사고에서 악성코드(Malware, Malicious Code)는 조직 내부의 중요 기밀 데이터를 유출하는 과정에서 핵심적인 역할을 하고 있다. 그러므로, 피해의 시작과 범위를 조사하고 분석하기 위한 목적으로 포렌식은 반드시 필요한 보안 기술로 인정받고 있다. 즉, 기업의 내부 네트워크에서 발생한 침해 사고가 어떠한 경로로 이루어졌고, 어떠한 악성코드에 의해, 어떠한 데이터가 외부로 유출하였는지를 조사 및 분석하는 과정을 타임라인(Timeline)에 기반해 파악하기 위해서는 컴퓨터 포렌식 기법들이 가장 적합하고 효율적이기 때문이다.

이러한 특징으로 인해 침해 사고 대응과 분석에 사용되는 컴퓨터 포렌식 기법을 멀웨어 포렌식(Malware Forensic)이라는 표현으로도 자주 사용하고 있다.

다양한 멀웨어 포렌식(Malware Forensic) 기법

앞서 언급한 바와 컴퓨터 포렌식 기법들 중에서 멀웨어 포렌식(Malware Forensic) 분야에서 언급되는 기법들을 관점이나 기준에 따라 여러 가지 형태로 나눌 수가 있지만, 기술적인 면을 기준으로 나누어 본다면 크게 5가지 정도로 나눌 수 있다.

첫 번째는 메모리 포렌식(Memory Forensic)으로 휘발성이 강하지만 고유의 독특한 정보가 많이 존재하는 물리적인 램(RAM)에 남아 있는 악성코드 감염과 관련된 다양한 흔적(파일 실행, 네트워크 접속 및 프로세스 정보 등)을 분석하는 기법이다.

두 번째로는 레지스트리 포렌식(Registry Forensic)이다. 일반적으로 대부분의 악성코드는 감염된 시스템이 재부팅을 하거나 시스템 사용자가 특정 행위를 수행했을 때 악성코드 자신이 실행되기 위해 윈도 시스템의 레지스트리에 새로운 키(Key)를 생성 및 변경한다. 이러한 악성코드의 특징에 기반해 레지스트리를 중심으로 분석이 이루어지는 기법이 레지스트리 포렌식이다.

세 번째는 인터넷 포렌식(Internet Forensic)이다. 인터넷 사용이 보편화 됨에 따라 이메일 클라이언트(E-Mail Client), 메신저(Instant Messanger) 그리고 웹 브라우저(Web Browser)와 같이 인터넷 활동과 관련된 애플리케이션(Applications)으로 인해 악성코드에 감염되는 사례가 다수를 차지하고 있다. 그러므로 인터넷 관련 애플리케이션의 행위와 흔적(Artifact) 분석을 통해 악성코드의 감염 경로와 감염 매개체를 파악할 수 있다.

네 번째로는 네트워크 포렌식(Network Forensic)이다. 현재 발생하는 대부분의 악성코드는 어떠한 방식으로든 인터넷에 존재하는 시스템과 네트워크 연결이 이루어짐으로써 네트워크 패킷(Packet)에 기반한 분석을 통해 감염 경로와 함께 감염 시스템을 추적하고 분류할 수 있다.

그리고 마지막 다섯 번째로는 파일 시스템 포렌식(File System Forensic, 또는 디스크 포렌식(Disk Forensic)이다. 파일 시스템 포렌식은 전통적인 컴퓨터 포렌식 분야에서 중요하게 언급하는 기법 중 하나로 악성코드 감염이 의심되는 시스템의 디스크 이미징(Disk Imaging)을 통해 생성한 디스크 복사본을 인케이스(EnCase)나 FTK(Forensic ToolKit)와 같은 파일 시스템 분석 소프트웨어를 이용해 디스크 전체를 분석하는 기법이다.

메모리 포렌식(Memory Forensic)의 필요성

멀웨어 포렌식의 여러 가지 기술적인 분류 중에서 메모리 포렌식은 앞서 언급한 바와 같이 여러 가지 포렌식 소프트웨어를 이용하여 물리적인 램을 분석하는 일련의 과정이다.

메모리 포렌식은 최근 몇 년 사이에 주목을 받고, 그에 따른 연구가 활발하게 이루어지고 있다. 그 이유는 컴퓨터 시스템은 구조적으로 중앙처리장치(CPU, Central Processing Unit)에 의해 연산이 이루어지는데, 여기서 어떠한 소프트웨어라도 메모리인 RAM에 그 데이터와 코드가 적재되어야만 중앙처리장치에서 연산이 가능하기 때문이다. 이러한 컴퓨터 시스템의 특성으로 인해 메모리에는 하드디스크와는 다른 소프트웨어 또는 파일이 실행되는 과정이나 실행되었던 특유의 정보가 존재한다.

일반적으로 메모리 포렌식 과정에서 획득할 수 있는 메모리 분석 정보는 크게 4가지 정도로 나눌 수 있다.

1) 프로세스(Process)와 쓰레드(Threads) 정보

프로그램이나 파일이 실행 중이거나 이미 종료되었지만 메모리에 남아 있는 정보 추출

2) 모듈(Modules)와 라이브러리(Libraries) 정보

프로그램이나 파일이 실행 중이거나 이미 종료된 프로세스 관련 모듈과 라이브러리 정보 추출

3) 실행된 파일과 소켓(Sockets) 정보

실행 중이거나 이미 종료된 파일에 대한 정보와 네트워크 연결을 위해 사용되었거나 사용중인 소켓 정보 추출

4) 다양한 데이터 구조 정보

메모리에만 존재하는 운영체제, 소프트웨어 및 파일과 관련된 다양한 데이터의 구조 정보 추출

이렇게 메모리 포렌식 기법을 통해 획득할 수 있는 정보의 특성으로 인해 메모리 포렌식은 침해 사고 대응과 분석 과정에서 악성코드의 감염과 관련된 여러 주요 데이터를 확인할 수가 있다.

32비트 윈도 운영체제 메모리 구조와 분석 대상

메모리 포렌식에 대해 조금 더 구체적으로 논의하기 전에 일반적인 컴퓨터 시스템 구조상에서 메모리 역할과 메모리 포렌식에서 분석 대상되는 부분에 대해 살펴보자.

일반적으로 32비트 윈도 운영체제에서는 특정 파일이 실행되기 위해 생성하는 모든 프로세스는 기본적으로 4GB의 가상 메모리(Virtual Memory)를 할당 받게 된다. 모든 프로세스가 할당 받게 되는 4GB 가상 메모리에는 아래 [그림 1]과 같이 2GB 크기의 유저 모드(User Mode)와 2GB 크기의 커널 모드(Kernel Mode)로 나누어 사용된다.


이렇게 윈도 운영체제로부터 4GB의 가상 메모리를 할당 받는 모든 프로세스는 개별적인 가상 주소(Virtual Address)를 가지고 있으며, 개별적인 가상 주소 영역에 포함된 코드들은 연산을 위해 다시 물리 메모리에 적재된다. 그러나, 윈도우 운영체제의 메모리 관리 구조는 물리적 크기 제한이 존재하는 램으로 인해 [그림 2]와 같이 주기적으로 가상 메모리의 내용을 하드 디스크에 존재하는 페이지 파일(Page File)로 이동하는 과정인 페이징(Paging)이 발생하는 형태를 가지고 있다.


이러한 구조를 가지고 있는 32비트 윈도 운영체제에서 메모리 포렌식의 분석 대상이 되는 곳은 [그림 2]에 표시되어 있는 바와 같이 물리적인 메모리 영역으로, 다양한 메모리 덤프(Memory Dump) 소프트웨어를 이용하여 해당 영역을 분석이 가능한 파일 형태로 생성한다.

그 외에도 특정 메모리 덤프 소프트웨어의 경우에는 페이징이 발생하는 페이지 파일 자체도 분석이 가능한 파일 형태로 추출해내기도 한다.

다양한 메모리 덤프 파일 생성 및 분석 소프트웨어

현재 인터넷과 시중에는 메모리 포렌식을 위해 다양한 형태의 메모리 덤프 소프트웨어와 이를 분석하기 위한 메모리 분석 소프트웨어가 존재한다. 각각의 소프트웨어는 공개용인지 상용으로 판매되는 소프트웨어 인지에 따라 기능적으로 조금씩 다른 특징이 있다.

여기에서는 일반적으로 많이 사용되는 공개용으로 알려진 소프트웨어를 중심으로 살펴보면 다음과 같다.

1) Win(32/64)dd.exe

Win(32/64)dd.exe는 메모리 덤프를 위해 2007년 마티유 시우슈(Matthieu Siuche)가 개발한 공개용 소프트웨어이다. 하지만 32비트와 64비트 버전이 별도로 존재함으로 메모리 포렌식의 대상이 되는 컴퓨터 시스템에 설치된 운영체제의 버전을 미리 확인해야 한다.

그리고 2008년부터 현재까지는 Moonsols(http://www.moonsols.com)에서 MoonSols Windows Memory Toolkit(http://www.moonsols.com/resources/)에 포함되어 무료로 배포 중이다.


2) DumpIt.exe

DumpIt.exe는 2007년 마티유 시우슈가 개발한 Win(32/64)dd.exe를 응용하여 제작된 공개용 소프트웨어로, 가장 큰 장점으로는 32비트 및 64비트 운영체제 버전에 상관 없이 메모리 덤프 파일을 생성 할 수 있다는 것이다. 그리고 메모리 덤프 파일 생성을 위해 특정 인자 값 입력 없이 dumpit.exe 실행만으로 해당 소프트웨어가 존재하는 동일 경로에 메모리 덤프 파일을 생성하는 것이 장점이다.

해당 소프트웨어 역시 2010년부터 Moonsols(http://www.moonsols.com)에서 MoonSols DumpIt (http://www.moonsols.com/resources/)으로 무료로 배포하고 있다.


3) FTK Imager Lite

FTK Imager Lite는 액세스데이터(AccessData, http://www.accessdata.com/)라는 상용 컴퓨터 포렌식 소프트웨어개발 업체에서 개발하는 FTK(Forensic Toolkit)의 일부 기능을 제한하여 공개한 무료 버전 (http://www.accessdata.com/support/product-downloads)이다.

상용 버전에 비해 기능적인 한계는 존재하나 메모리 캡처(Capture Memory), 디스크 이미지 생성(Create Disk Image) 및 이미지 마운팅(Image Mounting)과 같은 기본적인 기능은 자유롭게 사용 가능하다.


액세스데이터에서는 현재 FTK Imager Lite 3.1.1.8 버전을 무료로 제공 중이며, 이 파일은 전체 약 75MB 크기로 USB에 복사하여 침해 사고가 발생한 것으로 추정되는 컴퓨터 시스템에 연결한 후 바로 사용이 가능하다.

4) 볼라틸리티(Volatility)

볼라틸리티는 파이선썬(Python) 프로그래밍 언어로 제작 된 메모리 분석에 많이 사용되는 공개용 소프트웨어이다. 현재 볼라틸리티는 볼라틸 시스템즈(https://www.volatilesystems.com/)에 의해 볼라틸리티 프레임워크(Volatility Framework)를 오픈 소스(https://code.google.com/p/volatility/)로 공개하고 있다.


볼라틸리티가 공개용 소프트웨어로 배포 중이어서, 메모리 분석과 관련된 다양한 기능을 가진 공개용 플러그인(Plugin) 파일이 개발되고 있다. 그리고, 침투 테스트(Pentest)를 목적으로 개발된 우분투 커널(Ubuntu Kernel) 기반 운영체제인 백트랙(BackTrack, http://www.backtrack-linux.org/downloads/) 및 칼리 리눅스(Kali Linux, http://www.kali.org/downloads)에도 포함되어 있다.

5) 맨디언트 레드라인(Mandiant Redline)

레드라인(Redline, https://www.mandiant.com/resources/download/redline)은 얼마 전 파이어아이(FireEye)에 인수된 침해 사고 대응을 전문으로 하는 보안 업체인 맨디언트(Mandiant)에서 개발해 무료로 공개한 메모리 분석 소프트웨어이다.

레드라인은 윈도 GUI(Windows GUI)를 기반으로 하는 메모리 분석 소프트웨어임으로 사용이 비교적 간단하며, 다른 공개용 메모리 분석 소프트웨어에 비해 비교적 빠르게 메모리 분석을 진행 할 수 있다.


그리고 레드라인에는 맨디언트에서 정의한 MRI(Mandiant for Intelligent Response) 기능으로 메모리 분석 과정에서 메모리 덤프 파일에 존재하는 악성코드로 의심되는 항목을 별도의 붉은색으로 표기하여 메모리 분석 시에 분석 시간 단축을 위해 효율성을 높이고 있다.

그러나 테스트 과정에서는 일부 악성코드로 판단되는 항목을 붉은색으로 표기하지 못하는 것을 발견했다. 그러므로 레드라인을 이용한 메모리 분석시에 MRI만을 전적으로 신뢰하기는 어려우니, 참고 용도로 사용하는 것이 좋다.


이 외에 메모리 덤프 파일에 존재하는 여러 데이터를 조합하여 시간 순서로 정렬한 타임라인 기능으로 인해 악성코드로 의심되는 항목이 최초 컴퓨터 시스템에 실행되었던 시각을 역으로 추적 할 수 있게 해준다.


그러나, 레드라인을 이용해 메모리 덤프 파일을 생성하고 분석하기 위해서는 설치 및 실행을 위해 닷넷 프레임워크(.NET Framework) 4.0의 설치가 필요한 단점이 있다.

6) VMWare를 이용한 메모리 덤프 파일 생성과 분석

VMWare는 악성코드 동적 분석에도 많이 사용되는 가상화 소프트웨어로서, 2008년 브렛 셰이버(Brett Shavers)의 논문 ‘Virtual Forensics: A Discussion of Virtual Machines Related to Forensics Analysis’을 통해 VMWare를 이용한 메모리 덤프 생성과 분석이 공개됐다.

일반적으로 VMWare 소프트웨어에는 다음의 주요 확장자 파일로 구성된다.

.Log – 가상 머신(Virtual Machine)에 대한 일반적인 활동 기록 파일

.VMDK – 게스트 운영체제(Guest OS)에 대한 실질적인 가상 하드 드라이브(Virtual Hard Drive)

.VMEM – 게스트 운영체제에 대한 실질적인 가상 페이징 파일(Virtual Paging File)

.VMSN – VMWare에서 생성하는 스냅샷(Snapshot) 파일로, 게스트 운영체제에 대한 상태 저장

.VMSD – VMWare에서 생성한 스냅샷 파일에 대한 메타데이터(Metadata) 기록 파일

.NVRAM – 게스트 운영체제에 대한 바이오스(BIOS) 정보 기록 파일

.VMX – 게스트 운영체제에 대한 설정 기록 파일

.VMSS – 게스트 운영체제를 일시 중지(Suspend) 상태로 변경할 경우, 당시의 게스트 운영체제 상태를 저장한 파일

VMWare가 가지고 있는 위와 같은 주요 확장자 파일들 중 VMWare 소프트웨어에서 게스트 운영체제 상태로 가동 중인 시스템의 메모리 분석 대상은 .VMEM 확장자를 가진 파일이다. 게스트 운영체제에서 .VMEM 확장자 파일을 추출하기 위해서는 실행 중인 게스트 운영체제를 일시 중지 시켜 현재 메모리 상태를 저장해야 한다.


그리고 .VMEM 확장자를 가진 파일을 별도로 복사하여 메모리 분석을 위한 소프트웨어를 이용하여 분석을 진행할 수 있다.


볼라틸리티 프로젝트와 프레임워크

현재 메모리 분석을 위해 가장 널리 사용되고 있는 볼라틸리티는 최초 2006년 아론 월터스(Aaron Walters)의 메모리 분석 관련 FATKit 프로젝트에서 출발하여 볼라툴즈 프로젝트(Volatools Project)로 발전한 사례이다.

그 이후 2007년 아론 월터스에 의해 볼라틸리티 프레임워크 개발팀인 볼라틸 시스템즈가 만들어지고 해당 팀에 의해 현재 볼라틸리티 프레임워크는 공개용 소프트웨어로 자리잡았다.

현재 볼라틸 시스템즈에서는 볼라틸리티 프레임워크 개발과 함께 다양한 기능을 가진 플러그인 사용 및 제작에 대한 전문적인 강의를 진행 중이다.

볼라틸리티는 현재 2.3.1 버전이 공개 중이나 필자는 이 글에서는 버전 2.2 (https://code.google.com/p/volatility/wiki/Release22)를 기준으로 설명할 예정이다. 볼라틸리티 프레임워크 2.2 에서는 다음 운영체제 버전에서 생성된 메모리 덤프 파일에 대한 분석이 가능하다.

1) Windows (x86)

Windows XP Service Pack 2 and 3
Windows 2003 Server Service Pack 0, 1, 2
Windows Vista Service Pack 0, 1, 2
Windows 2008 Server Service Pack 1, 2
Windows 7 Service Pack 0, 1

2) Windows (x64)

Windows XP Service Pack 1 and 2
Windows 2003 Server Service Pack 1 and 2
Windows Vista Service Pack 0, 1, 2
Windows 2008 Server Service Pack 1 and 2
Windows 2008 R2 Server Service Pack 0 and 1
Windows 7 Service Pack 0 and 1

3) Linux

32-bit Linux kernels 2.6.11 to 3.5
64-bit Linux kernels 2.6.11 to 3.5

그리고 볼라틸리티 프레임워크 버전 2.2는 분석이 가능한 메모리 데이터 영역을 5가지로 구분하고 그와 관련된 다양한 명령어들이 존재하나, 이 글에서는 아래 3가지 영역만을 다룰 예정이다.

1) Windows Core

* Image Identification - imageinfo, kdbgscan, kpcrscan

* Processes and DLLs - pslist,pstree, psscan, psdispscan, dlllist, dlldump, handles, getsids, cmdscan, consoles, envars, verinfo, enumfunc

* Process Memory - memmap, memdump, procmemdump, procexedump, vadinfo, vadwalk, vadtree, vaddump, evtlogs

* Kernel Memory and Objects - modules, modscan, moddump, ssdt, driverscan, filescan, mutantscan, symlinkscan, thrdscan

* Networking - connections, connscan, sockets, sockscan, netscan

* Registry - hivescan, hivelist, printkey, hivedump, hashdump, lsadump, userassist, shellbags, shimcache, getservicesids

* Crash Dumps, Hibernation, and Conversion – crashinfo, hibinfo, imagecopy, raw2dmp

* Miscellaneous – strings, volshell, bioskbd, patcher, pagecheck

2) Windows GUI

sessions, wndscan, deskscan, atomscan, atoms, clipboard, eventhooks, gahti, messagehooks, screenshot, userhandles, gditimers, windows, wintree

3) Windows Malware

malfind, yarascan, svcscan, ldrmodules, impscan, apihooks, idt, gdt, threads, callbacks, driverirp, devicetree, psxview, timers

윈도와 백트랙에서 볼라틸리티 설치

현재까지 볼라틸리티 프레임워크는 일반적으로 많이 활용되고 있는 운영체제인 윈도 버전과 리눅스 버전 2개를 구분하여 공개 중에 있다.

이 중에서 윈도 환경에서는 다시 2가지 버전으로 구분되는데, 이 차이는 윈도 운영체제에서 단독으로 실행되느냐 설치가 필요한 패키지 버전이냐의 차이이다.

1) 단독 실행 형인 volatility-2.2.standalone.exe

볼라틸리티 2.2 단독형 윈도 프로그램 (https://volatility.googlecode.com/files/volatility-2.2.standalone.exe)


2) 설치를 필요로 하는 volatility-2.2.win32.exe

볼라틸리티 2.2 윈도 모듈 인스톨러(https://volatility.googlecode.com/files/volatility-2.2.win32.exe)

윈도 운영체제에 설치를 필요로 하는 패키지인 volatility-2.2.win32.exe의 경우에는 기본적으로 제공되는 플러그인과 별도로 공개되는 플러그인 모두를 사용하기 위해서는 파이썬 2.6 또는 2.7 버전을 추가로 설치해야 한다.

리눅스를 지원하는 볼라틸리티 프레임워크의 경우에는 앞서 언급한 바와 같이 침투 테스트를 위한 우분투 기반 운영체제인 백트랙과 칼리 리눅스에는 기본적으로 볼라틸리티 2.2 버전이 포함되어 있다.


이 외에 SANS에 개발하여 공개 중인 SIFT(SANS Investigate Forensic Toolkit, http://computer-forensics.sans.org/community/downloads)라는 컴퓨터 포렌식 목적으로 제작된 우분투 기반 리눅스 운영체제에도 볼라틸리티가 기본적으로 포함되어 있다. 그러나 현재 공개 중인 SIFT 2.14 버전에는 볼라틸리티 프레임워크 2.0 버전이다. 하지만 2014년 상반기 중으로 SIFT 3.0 버전이 공개 예정이라고 하니, 볼라틸리티 버전 역시 변경 될 것으로 예상된다.

이렇게 윈도 및 리눅스 운영체제 모두를 지원하는 볼라틸리티 프레임워크는 일반적으로 윈도 운영체제에서의 사용을 권장하지 않는다.

그 이유는 마이크로소프트사에서 제공하는 보안 패치로 인해 볼라틸리티를 이용한 메모리 분석 과정에서 실제와 다른 오류가 발생할 수 있기 때문이다. 그러므로 일반적인 메모리 분석 과정에서는 백트랙과 같은 리눅스 환경에서 작업을 권장한다.
이러한 사유로 이후부터 다루는 볼라틸리티를 이용한 메모리 분석 전 과정은 백트랙 운영체제를 통해 진행되었다.

볼라틸리티를 이용한 메모리 분석 방법론

침해 사고가 발생해 악성코드 감염이 의심되는 시스템에서 생성한 메모리 덤프 파일을 분석하기 위해서는 [그림 14]와 같은 6단계의 절차를 이용하여 메모리 분석을 진행할 수 있다.


볼라틸리티를 이용한 각 단계별 분석 과정과 주요 프레임워크 명령어는 다음과 같다.

1) 운영체제 분석

메모리 덤프 파일을 생성한 운영체제가 어떠한 버전의 운영체제인지 확인하는 과정을 거치게 된다. 이 단계에서 확인한 운영체제 버전에 따라 향후 이루어지는 메모리 분석의 방향과 분석에 적용될 볼라틸리티의 명령어가 다르게 사용될 수 있다.

 imageinfo - 생성한 메모리 덤프 파일의 운영체제, 서비스 팩(Service Pack)과 하드웨어 정보 나열

2) 프로세스 분석

윈도 시스템에서 동작하는 악성코드는 다른 일반적인 윈도우 프로그램과 유사한 구조를 가지고 있으므로, 악성코드 역시 자신의 코드를 메모리에 적재한 후에 자신의 프로세스와 쓰레드를 생성하여야만 실행이 가능하다. 그러므로 확보한 메모리 덤프 파일에서 실행 중이거나 은폐된 프로세스 및 그와 관련된 정보를 분석한다.
   
 pslist - 실행 중인 프로세스 정보 나열

 psscan - 실행 중인 프로세스 정보와 함께 이미 종료된 프로세스 정보 나열

 psxview – pslist 및 psscan에서 확인한 프로세스 정보를 비교하여 나열함으로써, 은폐된 프로세스 정보 획득

 pstree - pslist와 유사한 정보를 보여주나 부모(Parent) 프로세스와 자식(Child Process) 프로세스 간의 상관 관계 나열

 procexedump – 프로세스의 메모리 영역에서 빈 공간(Slack space)를 포함하지 않고 바이너리(Binary) 형태로 추출

 volshell – 메모리 덤프 파일 분석 시에 Windbg와 유사한 명령 형식으로 분석

3) 네트워크 정보

최근 발견되는 대부분의 악성코드는 감염된 윈도 시스템에서 외부 네트워크와 접속을 시도한다. 특히 침해 사고에서 많이 발견되는 원격 제어 형태의 악성코드는 메모리 덤프 파일 내부에서 공격자가 접속한 원격 시스템을 확인할 수 있는 다양한 정보가 포함되어 있다.

 connections –활성화 상태의 네트워크 연결 정보 나열 (Windows XP, Windows 2003 Server 만 사용 가능)

 connscan - 활성화 상태의 네트워크 연결 정보와 함께 이미 종료된 네트워크 연결 정보도 나열 (Windows XP, Windows 2003 Server 만 사용 가능)
 netscan – 활성화 상태의 네트워크 연결 정보를 보여주나 윈도 비스타와 7 그리고 윈도 2008 서버에서만 사용 가능

4) DLL 및 쓰레드 분석

일부 악성코드의 경우에는 특정 프로세스에 자신이 생성한 DLL 파일을 인젝션(Injection) 하거나 특정 시스템 프로세스의 특정 메모리 쓰레드 영역에 자신의 코드를 삽입하는 경우가 있다.

 dlllist - 특정 프로세스에서 로드 한 DLL의 정보 분석

 ldrmodules - 특정 프로세스나 DLL에 의해 은폐된 DLL 정보 분석

 dlldump - 특정 프로세스에서 로드한 DLL을 바이너리 형태로 추출

 Malfind – 사용자 모드 형태로 은폐되어 있거나 인젝션된 코드 또는 DLL 정보 분석

 apihooks – 사용자 및 커널 모드에서 API 후킹 정보 분석

5) String 분석

악성코드에 감염된 것으로 추정되는 시스템에서 생성한 메모리 덤프 파일에 존재하는 특정 프로세스의 메모리 영역 전체 또는 인젝션된 DLL 및 쓰레드 영역을 바이너리 형태로 추출한다. 그 이후 바이너리 형태로 추출해 낸 파일에서 악성코드와 관련된 문자열 및 관련 IP 주소 등을 검색 할 수 있다.

 yarascan - YARA를 이용하여, 사용자 및 커널 모드 메모리 영역에 포함된 바이트(Byte) 순서, ANSI 및 유니코드 (Unicode) 문자열 검색

 string – 문자열 검색을 위해 백트랙에 기본적으로 포함된 프로그램

6) 레지스트리 분석

일반적으로 악성코드는 감염된 윈도 시스템이 재부팅 되더라도 자동으로 재시작하기 위해 윈도 레지스트리(Windows Registry) 영역에 특정 키(Key)를 생성하거나 특정 값(Value) 등을 변경한다. 그러므로 메모리 덤프 파일 내부에 남아 있는 레지스트리 관련 데이터의 분석을 통해 악성코드로 의심되는 파일을 추출할 수 있다.

 printkey - 특정 레지스트리 키에 포함되어 있는 하위 키(Subkeys) 값과 데이터를 검색하여 나열

 userassist – 메모리 덤프 파일에서 UserAssist 관련 레지스트리 키 정보 추출

지금까지 볼라틸리티를 이용해 악성코드 감염이 의심되는 시스템에서 생성한 메모리 덤프 파일을 이용해 분석을 진행하는 방법론과 6단계에 걸친 분석 과정을 소개했다. 다음은 볼라틸리티를 이용해 실제 악성코드에 감염된 시스템에서 생성한 메모리 덤프 파일을 이용해 분석한 사례를 살펴보자.

볼라틸리티(Volatility)를 이용한 메모리 분석 사례

지금부터 소개할 볼라틸리티를 이용한 메모리 분석 사례는 실제 악성코드에 감염된 윈도 시스템에서 생성한 메모리 덤프 파일을 대상으로 이루어졌다. 전체적인 메모리 분석 과정은 앞서 지난 호에서 언급한 6 단계의 메모리 분석 방법론에 따라 이루어졌다.

Backdoor/Win32.Rbot.R327
(a.k.a Win32/IRCBot.worm.variant, W32.IRCBot, Backdoor.Win32.Rbot.aftu)

해당 Backdoor/Win32.Rbot.R327는 몇 년 전 지속적으로 그 변형이 발견되었던, IRCBot 웜의 변형 중 하나이다. 일반적으로 IRCBot 웜 변형들은 감염된 윈도 시스템에서 리버스 커넥션(Reverse Connection)을 통해 인터넷에 존재하는 악성코드 제작자 또는 유포자가 개설한 IRC 채널로부터 다양한 악의적인 공격 명령을 수신하여 이를 실행한다.

IRCBot 웜에 감염된 윈도 시스템에서 생성한 메모리 덤프 파일을 백트랙 운영체제에 설치되어 있는 볼라틸리티의 ‘imageinfo’ 명령으로 [그림 1]과 같이 감염된 시스템의 윈도 버전과 메모리 덤프 파일의 생성 시각을 확인한다.

[그림 1] ‘imageinfo’ 명령으로 윈도 버전과 메모리 덤프 파일 생성 시각 확인

‘imageinfo’ 명령으로 확인한 윈도 운영체제 버전을 바탕으로 향후 분석 방향이 수립되었다면, [그림 2]와 같이 ‘psscan’ 명령과 ‘pslist’ 명령이 조합된 ‘psxview’ 명령을 이용하여 메모리 덤프 파일을 생성한 윈도 시스템에서 은폐 기능으로 동작하는 프로세스가 존재하는지 확인한다.

[그림 2] ‘psxview’ 명령으로 은폐된 프로세스가 있는지 확인

[그림 2]에서는 ‘pslist’와 ‘psscan’에서 모두 ‘True’가 검색 되었으므로, 해당 윈도 시스템에서는 은폐형 기능으로 동작하는 프로세스는 존재하지 않는 것으로 판단 할 수 있다.

또한 메모리 덤프 파일을 생성할 당시에 감염된 윈도 시스템에서 동작 중인 프로세스의 생성 시간과 이미 종료된 프로세스의 종료 시간 정보를 획득 할 수 있는 ‘psscan’ 명령으로 [그림 3]과 같이 프로세스와 관련 추가적인 정보를 획득한다.

[그림 3] ‘psscan’ 명령으로 프로세스와 관련된 추가 정보 획득

그리고, 실행 중인 프로세스의 상관 관계 정보를 획득하기 위해 [그림 4]와 같이 ‘pstree’ 명령으로 추가적인 정보를 획득한다.

[그림 4] ‘pstree’ 명령으로 프로세스의 상관 관계 정보 획득

[그림 4]에 존재하는 붉은색 박스의 프로세스 항목을 확인 해보면 의심스러운 사항이 발견된다. 일반적으로 윈도 시스템에서 실행 중인 시스템 프로세스는 트리(Tree) 구조에서 시스템(System) 이라는 부모 프로세스 항목에 자식 프로세스 구조를 가지게 된다.

하지만 붉은색 박스의 ssms.exe 프로세스는 다른 시스템 프로세스와 상관 관계를 가지고 있지 않으면서, 시스템 프로세스와 유사한 파일명을 가지고 있다. 이를 의심스러운 프로세스로 추정 해 볼 수 있다.

그 다음으로는 메모리 덤프 파일을 생성할 당시의 감염된 윈도 시스템에서 발생하였던 네트워크 접속 관련 정보들을 획득하기 위해 [그림 5]와 같이 ‘connections’ 명령을 실행한다.

[그림 5] ‘connections’ 명령을 통해 네트워크 연결 정보 획득

[그림 5]에 존재하는 붉은색 박스를 살펴보면, 악성코드에 감염된 윈도 시스템은 메모리 덤프 파일을 생성할 당시에 프로세스 아이디(PID) 240번 프로세스에 의해 외부 인터넷에 존재하는 87.117.252.150 시스템의 65146번 포트로 접속 중인 상태이다.

외부 인터넷에 존재하는 시스템과 접속 중인 PID 240번인 프로세스를 확인 하기 위해 [그림 5]를 다시 확인 해보면, 이는 최초 의심스러운 프로세스로 추정했던 ssms.exe 프로세스인 것을 알 수 있다.

앞서 PID 240번 프로세스인 ssms.exe가 외부 인터넷에 존재하는 시스템과 접속 중이며, 시스템 프로세스 구조상 의심스러운 부분이 있다는 것을 확인했다. 해당 의심스러운 프로세스가 실제 악성코드가 정확한지 확인하기 위해 메모리 덤프 파일에서 [그림 6]과 같이 “procexedump” 명령을 실행한다.

해당 명령은 특정 프로세스의 메모리 영역 전체를 파일 형태로 추출할 수 있으며, 볼라틸리티에 의해 추출된 파일명은 executable.[PID].exe 형태를 가지게 된다.

[그림 6] ‘procexedump’ 명령으로 특정 프로세스 메모리 영역을 파일 형태로 추출

여기에서 주의할 점은 특정 프로세스 메모리 영역 전체를 파일 형태로 추출 할 수 있다고 하여, 추출한 해당 파일을 다른 윈도 시스템에서 실행을 통해 동적 분석을 수행 할 수는 없다.

이는 일반적으로 메모리에 적재된 파일들을 메모리 덤프를 통해 추출 해 낼 경우, 실제 디스크상에 존재하는 파일의 PE(Portable Executable) 파일 형식에서 IAT(Import Address Table)가 손상되어 실제 윈도 시스템에서는 정상적으로 실행 되지 않기 때문이다.

그러므로, 메모리 덤프를 통해 추출해낸 파일의 경우에는 인위적으로 IAT를 보정해주는 과정을 거쳐야 한다. 하지만, 해당 과정에 대한 설명은 본 원고의 주제를 벗어나는 부분임으로 다루지 않도록 한다.

의심스러운 프로세스인 ssms.exe의 메모리 영역 전체를 ‘procexedump’ 명령을 통해 파일 형태로 추출한 executable.240.exe에서, 사람이 읽을 수 있는 문자열들을 추출하기 위해 [그림 7]과 같이 백트랙에 포함된 ‘string’ 명령을 이용하여 임의로 텍스트 파일을 생성한다.

[그림 7] ‘string’ 명령으로 파일 형태의 프로세스 메모리 영역에서 문자열 추출

사람이 읽을 수 있는 문자열을 추출해 낸 텍스트 파일을 열어보면, [그림 7]과 같이 일반적으로 IRC 채널 접속을 위해 사용하는 IRC 명령어와 함께 윈도 시스템에 존재하는 레지스트리 키를 발견하게 된다.

[그림 8] ‘string’ 명령으로 파일 형태의 텍스트 파일에서 발견된 문자열

해당 단계에서 발견된 IRC 명령어와 레지스트리 및 다른 관련 문자열을 조합해 볼 때 PID 240번 프로세스인 ssms.exe는 기존에 많이 발견되었던 IRCBot 웜의 변형 중 하나일 것으로 판단할 수 있다.

[그림 8]에서 발견한 IRC 관련 명령어를 [그림 9]과 같이 “yara” 명령어를 이용하여 PID 240번을 가지는 ssms.exe 프로세스 메모리 전체 영역을 검색 해보면, 기존에 많이 발견되었던 IRCBot에서 사용되는 문자열을 추가적으로 발견할 수 있다.

[그림 9] ’yara’ 명령으로 특정 프로세스 메모리 영역에서 문자열 검색

 그리고, 해당 IRCBot 웜 변형이 윈도 시스템의 레지스트리에서 어떠한 부분에 자신과 관련된 키를 생성하였는지 확인 하기 위해, 메모리 덤프 파일에 존재하는 윈도 레지스트리 관련 정보를 추출하는 ‘printkey’ 명령과 함께 인자 값으로 [그림 10]에서 추출한 윈도 레지스트리 관련 문자열을 사용했다.

[그림 10] ‘printkey’ 명령으로 의심스러운 프로세스를 생성한 윈도 레지스트리 키 검색

이 과정에서 [그림 10]과 같이 윈도 시스템에서 일반적으로 악성코드가 자동 실행을 위해 많이 사용하는 레지스트리 위치에 ‘윈도 업데이트(Windows Update)’라는 키를 생성하고 자신을 데이터로 생성한 것을 확인 할 수 있다.

Trojan/Win32.Oficla
(a.k.a Win-Trojan/Oficla.82432.C, Trojan.Sasfis, Trojan.Win32.Oficla.bv)

Trojan/Win32.Oficla는 기존에 알려진 브레도랩(Bredolab) 트로이목마 변형 중 하나로서, 금융 정보 탈취를 목적으로 제작 및 유포되는 제우스(Zeus)와 스파이아이(SpyEye)의 소스코드(Source Code)에서 파생되어 제작되어진 형태이다.

그리고, 정상 시스템 프로세스인 svchost.exe 또는 explorer.exe의 프로세스 메모리 영역 중 하나 또는 그 이상의 쓰레드 영역을 생성하여 자신의 코드 또는 전체를 코드를 인젝션하여 동작한다. 감염이 성공적으로 이루어지면 외부 인터넷에 악성코드 제작자 또는 유포자가 생성한 C&C(Command and Control) 시스템으로부터 명령을 수신하여 다른 악성코드 다운로드 후 실행하는 기능 등을 수행한다.

Oficla 트로이목마에 감염된 윈도 시스템에서 생성한 메모리 덤프 파일을 백트랙 운영체제에 설치되어 있는 볼라틸리티의 “imageinfo” 명령으로 [그림 11]와 같이 감염된 시스템의 윈도 버전과 메모리 덤프 파일의 생성 시각을 확인한다.

[그림 11] ‘imageinfo’ 명령으로 윈도 버전과 메모리 덤프 파일 생성 시각 확인

‘imageinfo’ 명령으로 확인한 윈도 운영체제 버전을 바탕으로 향후 분석 방향이 수립되었다면, [그림 12]와 같이 ‘psscan’ 명령과 ‘pslist’ 명령이 조합된 ‘psxview’ 명령을 이용하여 메모리 덤프 파일을 생성한 윈도 시스템에서 은폐 기능으로 동작하는 프로세스가 존재하는지 확인한다.

[그림 12] ‘psxview’ 명령으로 은폐된 프로세스 존재 여부 분석

[그림 12]에서는 ‘pslist’와 ‘psscan’에서 모두 ‘True’가 검색 되었으므로, 해당 윈도 시스템에서는 은폐 기능으로 동작하는 프로세스는 존재하지 않는 것으로 판단할 수 있다.

메모리 덤프 파일을 생성 할 당시에 감염된 윈도 시스템에서 동작 중인 프로세스의 생성 시간과 이미 종료된 프로세스의 종료 시간 정보를 획득 할 수 있는 ‘psscan’ 명령으로 [그림 13]과 같이 프로세스와 관련 추가적인 정보를 획득한다.

[그림 13] ‘psscan’ 명령으로 프로세스와 관련 추가 정보 획득

그리고, 실행 중인 프로세스의 상관 관계 정보를 획득하기 위해 [그림 14]와 같이 ‘pstree’ 명령으로 추가적인 정보를 획득한다.

[그림 14] ‘pstree’ 명령으로 프로세스의 상관 관계 정보 획득

[그림 14]에 존재하는 붉은색 박스의 프로세스 항목을 확인 해보면 의심스러운 사항이 발견된다. 일반적으로 윈도 시스템에서 실행 중인 시스템 프로세스는 트리(Tree) 구조에서 시스템(System) 이라는 부모 프로세스 항목에 자식 프로세스 구조를 가지게 된다.

하지만 붉은색 박스의 svchost.exe 프로세스는 다른 시스템 프로세스와 상관 관계를 가지고 있지 않으면서, 시스템 프로세스와 동일한 프로세스 명을 가지고 있음으로 이를 의심스러운 프로세스로 추정 해 볼 수 있다.

그 다음으로는 메모리 덤프 파일을 생성할 당시의 감염된 윈도우 시스템에서 발생하였던 네트워크 접속 관련 정보들을 획득하기 위해, ‘connections’ 명령을 실행했다. 하지만, 그 당시에 외부 인터넷에 존재하는 시스템에 접속 중인 활성화 상태의 프로세스는 존재하지 않았다.

추가적으로, 이미 종료된 네트워크 접속 상태 정보들을 획득하기 위해 [그림 15]와 같이 ‘connscan’ 명령을 통해, 외부 네트워크로 접속했던 프로세스 리스트를 확인했다.

[그림 15] ‘connscan’ 명령을 통해 네트워크 연결 정보 획득

이 과정에서 최초 [그림 14]에서 의심스러운 프로세스로 추정했던 PID 192번 프로세스인 svchost.exe가 외부 네트워크로 접속을 하였던 흔적이 발견되었다.

해당 의심스러운 프로세스가 실제 악성코드가 정확한지 확인하기 위해 메모리 덤프 파일에서 첫 번째 분석 사례에서 언급한 [그림 6]과 같이 의심스러운 프로세스인 svchost.exe의 메모리 영역 전체를 ‘procexedump’ 명령을 통해 파일 형태로 추출했다.

그 이후, 사람이 읽을 수 있는 문자열을 추출하기 위해 파일에서 첫 번째 사례에서 언급한 [그림 7]과 같이 백트랙에 포함되어 있는 ‘string’ 명령을 이용하여 임의로 텍스트 파일을 생성하여, 문자열을 확인했다. 그러나 특별히 악성코드로 의심 할 수 있는 문자열을 확인하지 못했다.

의심스러운 프로세스인 svchost.exe의 메모리 영역 전체가 악성코드가 아닐 수도 있음으로, 해당 프로세스 메모리 영역에 코드 인젝션이 발생 한 것을 확인 하기 위해, [그림 16]와 같이 “malfind” 명령을 통해 PID 192번의 의심스러운 프로세스인 svchost.exe의 메모리 영역을 검사했다.

[그림 16] ‘malfind’ 명령을 이용해 특정 프로세스 메모리 영역의 코드 인젝션 정보 획득

이 과정에서 svchost.exe의 메모리 영역의 0x90000 주소에서 특정 코드가 인젝션이 된 것이 발견되었다. 해당 프로세스 메모리 영역에서 발견된 코드 인젝션에 대한 추가 정보 획득을 위해 [그림 17]과 같이 ‘volshell’ 명령을 실행 한 후 ‘CC’ 명령으로 PID 192번 svchost.exe의 메모리 영역을 호출하였다.

[그림 17] ‘volshell’ 명령 실행 후 ‘CC’ 명령으로 PID 192번 svchost.exe의 메모리 영역 호출

그리고, ‘volshell’ 명령 창에서 [그림 18]과 같이 ‘db’ 명령을 실행하여, 앞서 언급한 [그림 16]에서 확인한 코드 인젝션이 시작되는 0x90000 주소부터 호출하는 메모리 크기를 조금씩 늘려나가며 분석을 진행하였다.

[그림 18] ‘volshell’ 명령 실행 후 ‘db’ 명령으로 0x90000에서 640 바이트만큼 호출

크기를 조금씩 늘려나가며 분석하는 과정에서, 640 바이트(byte) 크기만큼 호출한 영역에서 [그림 18]의 붉은색 박스에서와 같이 의심스러운 문자열들을 확인 할 수 있었다. 인젝션 된 메모리 영역에서 “1.tmp” 이라는 문자열이 존재하므로 코드 인젝션이 DLL 파일에 의해 발생한 것으로 추정 할 수 있다.

의심스러운 프로세스로 추정했던 PID 192번 svchost.exe의 메모리 영역에 대한 모듈(module) 정보를 획득하기 위해 [그림 19]와 같이 “ldrmodules” 명령을 실행하여 로드 되었거나 인젝션 되어 있는 DLL 파일을 확인했다.

[그림 19] ‘ldrmodules’ 명령을 실행하여 로드 되거나 인젝션된 DLL 파일

이 과정에서 앞서 언급한 [그림 18]에서 발견된 [그림 19]의 붉은색 박스와 동일한 ‘1.tmp’ 파일이 PID 192번 svchost.exe의 쓰레드 영역에도 로드된 것을 확인 할 수 있었다. 여기에서 발견된 ‘1.tmp’가 악성코드인지 정확히 확인하기 위해 해당 ‘1.tmp’ 파일의 메모리 영역을 파일 형태로 추출이 필요하다. 이를 위해 [그림 20]과 같이 ‘dlldump’ 명령으로 ‘1.tmp’의 메모리 영역인 0x10000000부터 파일 형태로 추출하였다.

[그림 20] ‘dlldump’ 명령으로 ‘1.tmp’의 메모리 영역인 0x10000000부터 파일 형태로 추출

의심스러운 파일인 ‘1.tmp’의 메모리 영역 전체를 ‘dlldump’ 명령을 통해 파일 형태로 추출한 후, 사람이 읽을 수 있는 문자열을 추출하기 위해 [그림 21]과 같이 백트랙에 포함되어 있는 ‘string’ 명령을 이용하여 임의로 텍스트 파일을 생성한다.

[그림 21] ‘string’ 명령으로 파일 형태로 추출된 ‘1.tmp’ 메모리 영역에서 문자열 추출

사람이 읽을 수 있는 문자열을 추출 해낸 텍스트 파일을 열면, [그림 22]와 같이 특정 웹 사이트 주소 관련 문자열이 발견된다.

 [그림 22] ‘1.tmp’로부터 추출한 파일에서 발견된 특정 웹 사이트 문자열

[그림 22]에서 발견한 특정 웹 사이트 주소를 [그림 23]과 같이 ‘yara’ 명령어 키워드에 특정 웹사이트 주소를 이용하여 전체 메모리 덤프 파일을 대상으로 검색 해보면, 코드 인젝션이 발생한 PID 192번 프로세스인 svchost.exe만이 검색된다.

 [그림 23] ‘yara’ 명령으로 메모리 덤프 전체 영역에서 특정 웹 사이트 문자열 검색

이러한 일련의 분석 과정을 정리하자면, 최초 의심스러운 프로세스였던 PID 192번 svchost.exe에는 ‘1.tmp’ 라는 악성코드로 판단되는 파일이 ㅆ레드로 인젝션되어 svchost.exe 프로세스를 이용하여 외부 특정 시스템으로 역 접속을 시도했던 것으로 판단할 수 있다.

맺음말

앞서 우리는 컴퓨터 포렌식이 침해 사고 대응과 분석이 이루어지는 과정에서 어떠한 역할을 하는지 살펴보고, 여기서 다시 멀웨어 포렌식이라는 새로운 기술적인 영역이 악성코드의 감염 경로와 악성코드로 의심되는 파일들을 추출하기 위해 어떠한 세부 기술들이 사용되는지 알 수 있었다.

이러한 세부 기술들 중에서 메모리 분석을 위한 메모리 포렌식이 무엇이며, 어떠한 소프트웨어들로 분석이 가능한지도 알 수 있다. 그 중에서도 메모리 분석을 위해 가장 많이 사용되는 소프트웨어 중 하나인 볼라틸리티가 무엇이며, 볼라틸리티를 이용하여 실제 악성코드에 감염된 시스템에서 생성한 메모리 덤프 파일들의 분석 과정과 사례들을 살펴보았다.

볼라틸리티를 이용한 메모리 포렌식 분석 사례들을 통해 일련의 과정들을 살펴보면, 메모리 분석의 장ㆍ단점이 존재한다.
우선, 메모리 포렌식 분석은 메모리에만 존재하는 휘발성 정보들로부터 악성코드 감염 시스템에서 발생한 다양한 정황적 정보를 확보할 수 있음을 알 수 있다. 그리고 생성한 메모리 덤프 파일을 대상으로 추후에라도 다양한 메모리 분석 툴과 기법을 이용하여 반복적인 적용과 검토가 가능 하다는 장점이 존재한다.

이 외에도 메모리 포렌식 분석에 사용된 볼라틸리티와 관련 플러그인들 모두가 파이선으로 제작되어, 운영체제에 따른 제약을 받고 사용이 가능한 확장성이 뛰어나고, 시스템적인 자동화와 같은 부가적인 응용성이 뛰어나다고 볼 수 있다.

이러한 장점들이 존재하지만 메모리 포렌식 분석만으로는 악성코드에 감염된 시스템을 완벽하게 분석하기에는 많은 어려움이 따른다. 그러므로, 최초 앞부분에서 언급하였던 다른 멀웨어 포렌식 기법들과 병행이 되어야만이 조금 더 자세하게 분석을 진행 할 수 있다.

그리고, 볼라틸리티를 이용한 메모리 포렌식 분석에서는 메모리 덤프 파일에 존재하는 윈도 레지스트리 정보를 분석하기에는 많은 어려움이 따른다. 볼라틸리티를 이용한 메모리 분석 사례에서는 언급되지 않았지만 사용자와 커널 모드에서 은폐 기법을 사용하는 악성코드에 의해 생성된 프로세스 영역을 볼라틸리티에서는 은폐된 프로세스로 탐지는 가능하다. 하지만, 다른 형태와 기법 등으로 추가적인 분석을 진행하기에는 많은 제약이 따른다.

하지만, 전체적인 메모리 포렌식과 관련된 기술의 발전이 빠르게 진행되고 있다. 또한 다양한 컴퓨터 포렌식커뮤니티에서 이와 관련된 논의들이 자주 이루어지고, 메모리 포렌식만을 전문으로 하는 컨퍼런스가 해마다 개최되고 있다는 점에서 메모리 포렌식 기술의 발전은 긍정적이라고 할 수 있다.

그러므로, 향후에는 침해 사고 대응과 분석 과정에서 메모리 포렌식 분석이 차지하는 비중은 점점 커질 것이며, 이와 관련된 다양한 소프트웨어와 분석 기법들을 많이 등장하리라 판단된다.

[참고 문헌] 

인사이드 윈도우 포렌식 (Windows Forensic Analysis 2/e, 2009년), 할랜 카비 저, 정상민, 정명주 역, 박병익 감수, BJ 퍼블릭, 2010년
제 1장 실시간 대응: 휘발성 데이터 수집
제 2장 실시간 대응: 데이터 분석
제 3장 윈도우 메모리 분석

■ 윈도 포렌식 실전 가이드, 고원봉 저, 한빛 미디어, 2010년
1장 라이브 리스폰스
2장 메모리 분석

■ 악성코드와 멀웨어 포렌식 (Malware Forensics, 2008년), 제임스 아퀼리나, 에이헨 케이시, 카메론 말린 저, 박재호 역,
에이콘, 2012년
01장 멀웨어 사고 대응: 동작 중인 윈도우 시스템에서 휘발성 자료 수집과 검사
03장 메모리 포렌식: 멀웨어 관련 증거물에 대한 물리적 메모리 덤프와 프로세스 메모리 덤프 분석

■ 표적형 공격 보안 가이드, APT 공격, 실전 방어 및 대응 (HYOUTEKIGATA KOUGEKI SECURITY GUIDE, 2013년),
이와이 히로키 저, 박선필 역, BJ 퍼블릭, 2013년
6장 초동 대응
6-1 스냅샷 취득

■ Mastering Windows Network Forensics and Investigation, Second Edition, Steve Anson, Steve Bunting, Ryan Johnson, Scott Pearson 저, Sybex, 2012년
Chapter 6 Live-Analysis Techniques

■ Malware Forensics Field Guide for Windows System – Digital Forensics Field Guides, Cameron H. Malin, Eoghan Casey, James M. Aquilina 저, Syngress, 2012년
Chapter 2 Memory Forensics – Analyzing Physical and Process Memory Dumps for Malware Artifacts

■ SANS Forensic 508 Advanced Computer Forensic Analysis And Incident Response, Rob Lee 저, SANS Institute, 2011년
508.2 Live Response and Complex Evidence Acquisition
Windows Live Response

■ Virtual Forensics: A Discussion of Virtual Machines Related to Forensics Analysis
http://www.forensicfocus.com/downloads/virtual-machines-forensics-analysis.pdf

■ FATKit: A Framework for the Extraction and Analysis of Digital Forensic Data from Volatile System Memory
http://www.4tphi.net/fatkit/papers/dfrwswip.pdf

■ Volatools: Integrating Volatile Memory Forensics into the Digital Investigation Process
http://www.blackhat.com/presentations/bh-dc-07/Walters/Paper/bh-dc-07-Walters-WP.pdf

■ Open Memory Forensics Workshop (OMFW)
https://www.volatilesystems.com/volatility/omfw/Walters_OMFW_2008.pdf

■ Windows Memory Dump Analysis Volatility Plugin 을 이용한 Windows Memory Dump 분석
http://ls-al.org/wp-content/uploads/2012/07/volatility-plugin-manual11.pdf