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. 악성코드의 분석 사례