2014년 2월 27일 목요일

scdbg를 이용한 셸코드(ShellCode) 분석 방안

며칠 전 여느 때와 다름없이 아침 출근 길에 간밤에 일어난 상황들을 주욱 살펴보고 있었습니다. 그런데 그 중 미국 보안 업체인 Zscaler에서 작성한 "Probing into the Flash Zero Day Exploit (CVE-2014-0502)" 블로그 글이 눈에 들어오던군요.

어도비(Adobe) 플래쉬 플레이어(Flahs Player)의 새로운 제로 데이(Zero Day) 취약점이 발견되고 이슈화 되었으며, 그에 따른 분석 내용을 다루고 있는 내용이었습니다.

사실 제로 데이 취약점들이 하루가 멀다하고 발견되다 보니 예전 만큼 호기심을 자극하는 것 은 없는 것 같습니다.

새로운 플래쉬 플레이어의 제로데이 취약점을 다룬 Zscaler 블로그 중에서 특히나 눈에 띄었던 부분은 아래 이미지입니다.


위 이미지는 scdbg라는 셸코드(ShellCode) 분석을 위한 도구인데, Zscaler에서는 플래쉬 파일(.swf) 파일에서 셸코드를 추출 한 후 scdbg를 이용해 분석한 결과를 보여준 것 입니다.

scdbg는 셸코드를 분석하기에는 아주 유용하고 편리한 도구이며, libemu라는 x86 Shellcode Emulation을 이용해서 셸코드를 에뮬레이션(Emulation) 해주므로 셸코드를 포함한 악성코드를 분석할 때 발생하는 여러가지 번거로움을 줄여주기도 합니다

일반적으로 셸코드는 위키피디아(Wikipedia)에서 정의해놓은 바와 같이 "In computer security, a shellcode is a small piece of code used as the payload in the exploitation of a software vulnerability." 입니다.

즉, 셸코드는 실행코드에 대한 페이로드로 동작하는 작은 코드 덩어리 입니다. 그래서 실제 셸코드는 아래 이미지와 같이 데이터 덩어리들입니다.


셸코드에 대한 내용들은 "The Shellcoder's Handbook: Discovering and Exploiting Security Holes"라는 책 한 권으로 다룰 정도 방대합니다.

이러한 셸코드라는 데이터 덩어리를 분석하기 위해 다양한 방법들이 사용되지만 그 중에서 간편하게 셸코드를 분석 할 수 있는 방법 중 하나가 바로 scdbg 입니다.

scdbg는 "scdbg download"에서 "Windows Native Source/Binaries"라고 표기 되어 있는 "Win32 Binaries"를 클릭하면 약 0.9 MB 크기의 scdbg.zip 파일을 하나 다운로드 할 수 있습니다.


해당 파일의 압축을 풀게 되면 2개의 실행 파일과 1개의 메뉴얼 파일이 나오는데, 그 중 gui_launcher.exe 파일은 윈도우에서 GUI 모드로 실행 가능하도록 해줍니다. 나머지 scdbg.exe는 커맨드라인(CommandLine) 명령으로 사용 할 수 있습니다.

gui_launcher.exe를 실행하고 아래 그림과 같이 "실전 악성코드와 멀웨어 분석 Practical Malware Analysis"에서 제공하는 예제 셸코드 파일을 드래그앤드롭으로 끌어다 놓습니다.


그 후에 Launch를 실행하면 아래 그림과 같이 셸코드를 에뮬레이션 한 결과가 별도의 커맨드라인 창으로 나타나게 됩니다.


위 그림의 붉은색 박스 안의 코드를 살펴보게 되면 예제로 사용한 셸코드는 다음과 같은 코드를 수행하도록 제작되어 있는 것을 알 수 있습니다.

우선, GetSystemDirectoryA 함수를 이용해 시스템의 시스템 디렉토리 위치를 얻어 온 후 URLDownloadToFileA 함수를 이용해서 특정 웹 사이트에서 "annoy_user.exe"를 윈도우 시스템 디렉토리에 "1.exe" 파일명으로 다운로드 하게 됩니다. 그리고 다운로드 한 파일을 WinExec 함수를 이용해서 실행하게 됩니다.

scdbg의 결과를 검증하기 위해 이제는 일반적으로 많이 사용하는 "Shellcode 2 EXE"에 셸코드를 업로드 한 후 EXE 파일로 만들어 Ollydbg를 이용해 디버깅을 해보았습니다. 이 과정에서도 역시 위 그림에서 보았던 동일한 코드들이 존재하는 것을 확인 할 수 있습니다.


앞서 살펴본 것 처럼 scdbg는 간편하게 셸코드를 분석 할 수 있도록 해주는 도구입니다. 그래서 비교적 간단한 포트 바인딩(Port Binding)이나 파일 다운로드 관련 셸코드는 에물레이션이 가능합니다만, 모든 셸코드를 충분히 분석이 가능하도록 지원하는 것은 아님으로 "Distorm Powerful Disassembler Library For x86/AMD64"와 같이 다르게 분석 할 수 있는 기법들 역시 파악하고 있는 것도 중요 합니다.

다음에는 시간적인 여유가 있을 때 실제 취약점이 존재하는 PDF와 DOC 같은 전자문서 파일에서 셸코드를 추출하여 scdbg와 Kali Linux를 이용한 분석 방안에 대해서도 다루어 보도록 하겠습니다.

2014년 2월 19일 수요일

2010년 2월 조선대 CERT팀에 대한 보안 강의

드디어 2010년 자료를 공유하는 시점까지 오게 되었네요. 2010년 첫 외부 강연은 2월 전라남도 광주에 위치한 조선대에서 이루어지게 되었습니다.

개인적으로 전라도 광주를 방문 해본적이 대학 1년 시절인 1995년이고, 그 이후로 처음 방문해보는 것이 새로운 여행지를 온듯한 느낌이 많았습니다. 조선대는 생각보다 크고 넓었으며, 캠퍼스 전체가 정갈하고 깔금하다는 느낌을 많이 받았습니다.

이번 외부 보안 강의는 이제까지 학부생들을 대상으로 해왔던 강의와는 조금 달리 조선대CERT(Computer Emergency Response Team)팀의 팀원들을 대상으로 진행하였습니다. 조선대CERT팀은 학내에서 발생하는 보안 사고들을 직접 교직원들과 함께 대응하는 업무도 담당하고 있어 생각보다 많은 부분들을 익히 알고 있었습니다.

해당 보안 강의는 총 3시간에 걸쳐서 진행되어 왔으며, 첫 번째 시간은 2009년 당시에 발생하는 보안 위협들에 대한 전반적인 현황과 특징들에 대해 설명하였습니다. 그리고, 두 번째 시간은 발생하는 보안 위협들을 분석하기 위한 방법론 중 동적 분석에 대해 살펴보고, 각 단계에서 사용하는 분석 도구들과 간단한 데모로 끝을 맺었습니다.

방학 기간이라 생각보다 많은 학생들을 강연을 들어오지 않았지만, 강연 후에 토론에 가까운 질문들이 이어져 저 역시 좋은 경험을 할 수 있었던 계기였었습니다.





2014년 2월 16일 일요일

자바(Java) 바이트코드(Bytecode) 디버깅(Debugging)

며칠 전 출근 길에 흥미로운 블로그 내용을 읽게 되었습니다. 제가 읽는 블로그 내용들이 대부분 새로운 악성코드 분석 정보나 이와 관련된 분석 기법들을 다루는 내용들이 대부분인데, 며칠 전 흥미롭게 읽은 블로그는 미국 보안 업체인 Crowdstrike에서 작성한 “Native Java Bytecode Debugging without Source Code” 입니다.

최근 몇 년 사이에 외국도 마찬가지이지만 한국에서도 역시 Gongda Web Exploit Toolkit에서 자바(Java)에 존재하는 여러 가지 취약점들을 악용하여 다른 악성코드를 드라이브 바이 다운로드(Drive By Download)으로 감염시키는 기법들이 많이 사용되고 있습니다. 그래서, 저 역시 취약점이 존재하는 자바 파일 형식인 JAR 파일들을 자주 접하게 됩니다.

일반적으로 자바에서 사용하는 JAR 파일 형식은 압축 파일 형식인 PKZip과 동일한 형태를 가지고 있어, 헥사 에디터(Hex Editor)로 JAR 파일을 살펴 보게 되면 다음과 같은 구조를 가지고 있습니다.


위 헥사 코드를 보면 파일 오프셋(Offset) 0h의 첫 번째 두 바이트(Byte)가 PKzip으로 압축된 파일과 동일한 시그니처(Signature)을 가지고 있고, 매니패스트(MANIFEST) 역시 정의되어 있는 것을 볼 수가 있습니다. 하지만, 경우에 따라 특정 JAR 파일의 경우에는 아래 헥사 코드처럼 매니패스트 없이 바로 클래스(Class) 파일명이 정의되어 있는 것도 볼 수가 있습니다.


그래서, JAR 파일은 7Zip과 같은 범용 압축 라이브러리(library)를 사용하는 압축 프로그램으로 압축을 풀 수 있으며, 파일이 손상되지 않은 경우에는 아래 이미지와 같이 내부에 포함되어 있는 클래스 파일을 볼 수가 있습니다.


압축 파일 형태를 가지는 JAR 파일에 대해 대부분의 안티 바이러스(Anti-Virus) 소프트웨어에서는 JAR 파일의 압축을 풀고 내부에 존재하는 클래스 파일에 존재하는 익스플로잇(Exploit) 코드들을 이용해 진단 합니다.

일반적으로 JAR 파일을 분석은 자바 디컴파일러(Java Decomplier)를 이용해 아래 이미지와 같이 JAR 파일 구조와 내부 클래스 파일들에 포함되어 있는 디컴파일된 코드들을 살펴볼 수가 있습니다.


자바 디컴파일러를 이용하는 경우에는 위 이미지에 존재하는 붉은 색 박스의 클래스 박스를 확장하면 내부 코드들을 확인 할 수가 있습니다. 그래서 비교적 간단한 JAR 파일들의 경우에는 자바 디컴파일러를 이용하여, 아래 이미지와 같이 클래스 파일의 코드들에 존재하는 악의적인 코드를 읽어 볼 수 있습니다.


이러한 방식은 일반적으로 비교적 간단한 JAR 파일을 디컴파일하여 볼 수 있는 방법이지만, 실제 코드를 디버깅하면서 볼 수 없기 때문에 실제 악의적인 코드의 흐름을 자세히 파악하기 어려운 부분이 있습니다.

그런데, 앞서 언급한 Crowdstrike 블로그에서는 몇 가지 프로그램들을 설치하여, JAR 파일을 디버깅(Debugging) 할 수 있는 방안을 설명하고 있습니다. 그래서 해당 업체에서 설명한 방안으로 실제 JAR 파일을 디버깅 가능한지 확인 해보았습니다.

우선 JAR 파일을 디버깅하기 위해서는 2개의 소프트웨어를 별도로 설치를 하여야 됩니다. 우선, 오라클(Oracle)에서 제공하는 자바 개발 도구(Java SE Development Kit 7)를 설치하여야 됩니다. 설치하고자 하는 버전은 오라클에서 항상 최신 버전을 제공해주고 있음으로 운영체제에 맞는 버전만 설치하면 됩니다.


자바 개발 도구(Java SE Development Kit 7) 설치가 완료되면, 두 번째로 필요한 소프트웨어는 자바 개발자용 이클립스 IDE(Eclipse IDE for Java Developers)가 필요 합니다. 이클립스의 경우에는 파일 설치 없이 압축 파일 다운로드 이후 내부에 존재하는 실행 파일 클릭만으로 바로 사용이 가능합니다.


JAR 파일을 분석하기 위해서는 추가적으로 이클립스 마켓플레이스(Eclipse Marketplace)에서 “Dr.Garbage’s Bytecode Visualizer” 프로그램을 하나 더 설치하여야 됩니다. 그러므로, 이클립스 마켓플레이스에서 검색을 통해 최신 버전인 “Bytecode Visualizer 4.3.5” 최신 버전을 설치 합니다.


“Bytecode Visualizer 4.3.5”가 설치 완료되면 자바 개발자용 이클립스 IDE가 재시작을 하면 이제 JAR 파일을 디버깅 할 수 있는 환경은 모두 완료되었다고 생각하시면 됩니다.

이제 실제 취약한 JAR 파일을 자바 개발자용 이클립스 IDE에서 읽어 들이기 위해 새로운 자바 프로젝트(Java Project)를 하나 생성합니다.


새로운 자바 프로젝트는 아래 이미지와 같이 간단하게 새로운 자바 프로젝트의 명칭만을 정의 해주고 다음을 클릭합니다.


여기에서 아래 이미지와 같이 새로운 자바 프로젝트의 환경 설정들이 나타나게 됩니다. 여기에서 상단의 “Libraries” 탭을 선택 한 후, 디버깅을 하고자 하는 취약한 JAR 파일을 지정해주기 위해 “Add External JARs”를 클릭합니다. 그리고 준비 한 취약한 JAR 파일을 선택 합니다.


준비한 취약한 JAR 파일을 새로운 프로젝트에서 읽어 들이게 되면 자바 디컴파일러에서 보아왔던 것과 동일하게 JAR 파일의 구조가 전부 보이게 됩니다. 여기에서 JAR 파일 내부에 존재하는 클래스 파일을 선택 한 후 오른쪽 마우스를 클릭하여 “Open with Bytecode Visualizer”를 선택 합니다.


해당 클래스 파일을 “Bytecode Visualizer”에서 읽어 들이게 되면 아래 이미지와 같은 코드들이 나타나며, IDA에서와 같이 전체 코드 플로우(Code Flow)와 함께 코드들이 나타나게 됩니다.


여기에서 코드 시작 부분을 오른쪽 마우스로 클릭하여 브레이크포인트(BreakPoint)를 설정한 후에 디버깅을 진행 할 준비를 합니다.


코드 시작 부분에 브레이크포인트 설정을 완료 했다면, 다시 클래스 파일에서 오른쪽 마우스를 클릭하여 나타나는 항목 중 “Debug As”를 선택 한 후 “Java Application”을 클릭해야 됩니다.


그런데, 제가 준비한 취약한 JAR 파일의 클래스 파일에서는 이상하게도 디버그 설정에 “Java Application”이 나타나지 않았습니다.

무언가 설정이 잘못되거나 준비한 JAR 파일에 문제가 있는지 구글(Google) 검색을 통해 확인 해보니 디버깅을 위한 JAR 파일 내부의 클래스 파일에 메인 코드 시작 부분이 존재해야 되었습니다.

즉, 윈도우(Windwos) PE 파일이 WinMain에서 시작하듯이 JAR 파일의 클래스 파일에서도 메인 코드(Main Code) 시작 부분이 존재하는데, 제가 준비한 JAR 파일에는 해당 메인 코드가 존재하지 않았기 때문에 디버그 설정에 “Java Application”이 나타나지 않았던 것으로 보입니다. 그래서 최근에 발견된 악의적인 JAR 파일들을 확인 해보니 모두 메인 코드가 존재하지 않는 샘플들이었습니다.

하지만, 이 부분은 조금 더 조사와 연구를 해보고 가능한 방법들이 있는지 찾아 봐야 할 것 같습니다. 이후에라도 가능한 방법들을 찾게 된다면 블로그를 업데이트 하도록 하겠습니다.

2014년 2월 11일 화요일

APT(Advanced Persistent Threat) 공격의 현재와 대응 방안

오늘은 두 개의 글을 포스팅하게 되는군요. 시간 날때 집에서 써야지 하다가다 애기의 장난과 저의 게으름에 그냥 지나치기 일쑤 인데, 오늘은 모처럼 시간을 내어 봅니다.

APT(Advanced Persistent Threat)와 관련된 원고도 과거에 한번 썼었던 적이 있었고, 외부 및 내부 강의로 인해 파워포인트(PowerPoint) 슬라이드도 버전만 조금씩 다르지 작성해 두었던 것이 제법 있었습니다.

오늘 공유하는 자료는 2014년 1월 초에 내용을 업데이트 한 자료인데, 당시 다른 메모리 포렌식(Memory Forensic) 관련 원고를 작성 중에 있던 시점이었습니다. 그래서, 원고를 담당하시는 담당자분께 파워포인트 슬라이드 파일만 전달 해드렸는데, 이를 원고로 보기좋게 정리를 하셔서 "월간 안" 2월호에 옮겨 주셨더군요.

그래서, 강남 성형외과 광고에 자주 보였던 문구 중 하나인 "비포(Before) & 애프터(After)"로 나누어, 초안이었던 PPT 슬라이더를 먼저 보여드리고, 그 아래 부분에 정리되어 실렸던 원고를 게시하였습니다.



초안이 되었던 PPT 슬라이드가 과거 자료와 다른 점은 마지막 3장에 조금 더 실질적이고 현실적인 대안이 "APT(Advanced Persistent Threat) 공격 예방적 System Hardening"와 "APT(Advanced Persistent Threat) 공격 탐지적 Network Control" 라는 내용으로 추가되었습니다.

이는 작년 가을 서울종합과학대학원 산업보안 MBA 과정에서 진행되었던 특강시에 받았던 여러 질문 중 하나가 "현실적으로 조치 할 수 있는 가이드라인(Guild-line)이 무엇이냐" 였습니다.

이 질문을 주신 분은 실제 기업 보안팀에서 현업 엔지니어로 근무하시는 분이라 개념적인 내용과 공격 기법 분석 역시 중요하지만, 방어적인 차원에서 삼을 수 있는 가이드라인이 필요하였던 분이었습니다. 그래서 내부 자료들을 정리하면서 가이드라인으로 삼을 수 있는 부분들을 추가하였습니다.

이런 초안이 아래와 같은 원고로 변경되어 "월간 안" 2월 호에 동일한 제목으로 "APT 공격의 현재와 대응 방안, APT 공격 예방을 위한 11가지 수칙"으로 공개되었습니다.

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

APT 공격 예방을 위한 11가지 수칙

인터넷으로 연결된 세상은 그야말로 그물망처럼 더욱 정교하고 공고해지고 있다. 이러한 환경은 악성코드가 서식하기에 더없이 좋은 조건이기도 하다. 신년인사나 청첩장, 이력서도 이메일이나 SNS를 통해 전달하는 것이 이젠 어색하지 않다. 그러나 무심코 열어본 이메일, 늘 사용하던 SNS에 생각지도 못한 악성코드의 위험이 도사리고 있다. 인터넷 환경이 발달할수록, 사용자가 많아질수록, 그 틈새를 노리는 악성코드도 더욱 교묘해지기 마련이다. 더욱이 공격 타깃이 불특정 다수가 아닌 특정 기업이나 기관, 사회기반 시설 등이 되고 있으며 그 파괴력 또한 상상을 초월한다. 이제 보안을 아는 사람이라면 더 이상이 낯설지 않게 되어 버린 APT. 2014년 현재 APT는 어느 수준이며 이에 대응하기 위한 방안은 무엇인지 다시 한번 점검해보자.

APT의 정의

2004년 6월 우리나라 정부와 기업들을 대상으로 한 핍뷰어(PeepViewer)라는 트로이목마가 유포된 사례가 있었다. 국가정보원에 따르면, 6개 공공기관의 PC 64대와 민간 기업의 PC 52대가 감염되었다. 이 트로이목마는 이메일로 ‘워크숍 내용과 일정.MDB’라는 첨부 파일을 전송하여 악성코드 감염을 시도한 것으로 나타났다. 이것은 정부와 일반 기업들을 대상으로 정부 기밀을 탈취하기 위한 국내 최초의 APT 공격 사례로 꼽히고 있다.

이후 국내에서 APT 공격 사례가 대거 나타나기 시작한 것은 2011년부터였다.

2011년 4월에 농협 전산망 마비 사고가 대표적이다. 외부 공격으로 인해 농협의 전산망 시스템이 손상되어 모든 업무가 마비되었다. 이 사고는 외주 직원의 노트북 PC를 감염시킨 후 내부 시스템으로 침입하는 기법을 사용했다. 공격자는 P2P 프로그램으로 악성코드를 유포한 후 7개월 동안 꾸준히 감시하면서 공격 시점을 엿보았던 것으로 드러났다.

같은 해 7월, 3500만 명의 고객 개인정보가 유출된 SK커뮤니케이션즈 침해 사고가 대한민국을 뒤흔들었다. 무료 소프트웨어 업데이트 서버를 해킹하여 정상 파일을 악성코드로 변경한 후 유포하는 방식을 이용하였다. 공격자는 8일 만에 DB 관리자 권한을 획득하였고 DB 데이터를 분할 압축하여 외부로 유출하였다.

해외에서는 2010년 이란 원자력 발전소의 시스템 파괴를 목적으로 한 스턱스넷(Stuxnet)이 발견되었다. 공격자는 MS 윈도의 알려진 취약점 3개와 제로데이 취약점 2개를 악용하여 악성코드를 유포하였다. 2011년에 보고된 듀크(Duqu)와 2012년 발견된 플레임(Flame) 모두 이란 원자력 발전소 관련 정보 수집을 목적으로 침투한 사건이었다.


2010년 1월에는 구글의 기업 기밀 정보를 탈취하기 위한 일명 오퍼레이션 오로라(Aurora)가 발생했다. 이 사고는 구글 외에 첨단 IT 기업 34개도 공격하였다. 마이크로소프트 인터넷 익스플로러의 제로데이 취약점을 악용했으며, 이메일과 메신저로 악의적인 웹 사이트로 접속하는 링크를 전달했다.


2011년 3월에는 EMC/RSA의 OTP(One Time Password) 제품 기밀 정보를 탈취하려는 시도가 있었다. 공격 대상을 선정하기 위해 소셜 네트워크로 내부 직원의 개인정보를 확보하였다는 점에서 본격적인 APT 침해 사고로 알려져 있다. 어도비 플래시 플레이어의 제로데이 취약점을 악용한 첨부 파일을 이메일로 전파, 사회공학적 기법으로 내부 직원의 악성코드 감염을 유도했다.


2012년 2월 CNN은 시리아 정부가 반정부 인사 감시를 위한 악성코드를 유포했다고 폭로했다. 이메일 첨부 파일, 허위 유튜브(Youtube) 페이지, 스카이프(skype)로 악성코드를 유포했으며 언더그라운드에 공개된 DarkComet RAT 악성코드 생성기로 악성코드를 제작한 것으로 알려졌다.

시리아, 이스라엘, 사우디아라비아, 레바논 등지의 PC가 주로 감염됐다.

2013년에 APT 공격은 더욱 기승을 부렸다.

1월에는 오퍼레이션 ‘붉은 10월(Red October)’이라는 악성코드가 동유럽 및 중앙아시아 국가의 기관들을 해킹하는 사건이 발생했다. 이 악성코드는 정부와 연구 기관 등을 타깃으로 정교한 공격을 시도한 것으로 알려졌다. 2월에는 뉴욕타임즈, 월스트리트저널 등 미국의 주요 언론사들이 이전에 해킹 시도가 있었다고 밝히면서 그 배후를 중국의 ‘APT 1’이라고 보도하여 논란이 되었다. 3월에는 인도의 해커 집단인 오퍼레이션 행오버(hangover)가 인근 국가의 정부기관을 해킹하는 사건이 발생했고, 우리나라에서는 KBS, MBC, YTN과 농협, 신한은행, 제주은행 등 방송ㆍ금융 6개사의 전산망이 마비되는 3ㆍ20 사이버테러가 발생했다.

4월에는 국제 해커 집단 윈티(Winnti)가 한국, 미국, 일본 등 전 세계 30여 개국의 온라인 게임 업체를 공격했다고 발표됐으며, 6월에는 악성코드 넷트래블러(NetTraveler)가 우리나라를 포함해 40개국 350개 기관을 공격한 것으로 드러났다. 또한 9월에는 한국과 일본의 주요 정부 기관과 기업들을 대상으로 공격을 시도한 소규모 사이버 용병 그룹인 아이스포그(Icefog), 중국에 거점을 둔 청부 해커 집단인 Hidden Lynx 등에 대한 실체가 드러났다. 이어 12월에는 중국의 해커 집단인 케상창(Ke3chang)이 G20 정상회담 직전 유럽 5개국 외교통상부 장관의 컴퓨터를 해킹한 사건이 보도됐다.


APT 공격 형태의 특징

공격 대상의 확대

인터넷과 컴퓨터의 발달로 정부 기관이나 각 기업에서 업무 자동화 시스템을 도입하고 있다. 따라서 모든 업무는 물론, 기밀 문서 역시 전자 문서와 같은 데이터 형태로 파일 서버에 보관하는 것이 일반적이다. 이러한 환경은 APT 형태의 타깃형 공격이 증가하기 좋은 토양이 된다.

APT 공격의 목적은 더욱 다양화되고 있으며 그 공격 대상 역시 확대되고 있다.

과거에는 정부나 군사 기관만이 주요 공격 대상이었으나, 지금은 경제적 고부가가치 데이터를 보유한 첨단 기업들을 포함한 민간 기업으로까지 확대됐다.

한국과 일본은 특히 금융기관, 언론사 및 온라인 게임 업체들이 주 대상이 되고 있다.



고도화된 공격 기법

웹과 소셜 네트워크의 발달은 공격 대상의 개인정보 수집이 용이한 상황을 만들어준다. 수집한 개인정보들로 공격 대상에게 최적화된 사회공학적 기법을 개발하고 적용하기 쉬워진 것이다. EMC/RSA 침해 사고도 내부 직원들에게 채용 정보 관련 메일로 위장한 것이었다.

또한, 악성코드 제작 및 취약점 개발 기술들의 발전은 보안 제품 탐지 우회와 APT 공격의 성공률을 높이는 데 기여하였다. 악성코드는 셀프 업데이트(self-update), 보안 제품 무력화 등 다수의 개별 기능을 가진 파일들을 조합하기도 한다. 취약점은 다양한 일반 소프트웨어의 알려진 취약점이나 제로데이 취약점을 악용하고 있다.

현재까지 APT 공격의 주요 기법은 이메일의 첨부 파일을 이용하는 형태였다. 이전에는 첨부 파일이 실행 가능한 파일이었으나 최근에는 전자 문서 형태로 변하고 있다. 우리나라에서는 무료 소프트웨어의 자동 업데이트 기능과 국산 P2P 프로그램을 악용하는 사례가 늘고 있다.



APT 공격 대응 방안

APT 공격 방식

APT 공격은 먼저 공격 대상을 정의하는 데서 시작한다. 공격 대상을 정하고 나면, 대상에 맞는 악성코드를 제작하거나 구매한다. 이후 공격 대상에 대해 연구하면서 내부 감염을 시도한다. 이때 사회공학적 기법을 이용한 타깃형 공격이 진행된다. 내부 감염이 성공하면 일단 거점이 확보된 것이다. 악성코드가 감염되었으면 공격자와 연결하기 위해 역 접속(reverse connection)으로 C&C 서버와 연결한다. 연결 후에는 C&C 서버를 통해 원격으로 제어하건 공격 명령을 지시할 수 있다. 이렇게 해서 내부 데이터를 탈취한 후에는 잠복 흔적을 제거함으로써 대상에서 빠져나 온다.



APT 통합 대응 전략

보안 위협에 대응하기 위해 위기 관리 기반의 기업 보안 정책을 수립하는 것이 선행돼야 한다.

또한 공격 표면 축소와 공격 탐지의 효율을 위해 심층 대응(Defense in Depth) 전략을 수립하고, 새로운 보안 위협에 대한 신속한 대응을 위해 시큐리티 인텔리전스(Security Intelligence)를 확보해야 한다.

보안 위협의 출발점이 내부 임직원인 경우가 많으므로, 주기적인 보안 인식 교육도 매우 중요하다.


APT 공격을 사전에 예방하기 위해서는 아래 사항을 빠짐없이 준수하여야 한다.

APT 공격 예방을 위한 시스템 강화

1. 모든 운영체제와 웹 애플리케이션 및 관련 서버는 최신 버전을 유지하고 보안 패치를 적용한다.

2. WSUS(Windows Server Update Services)로 최신 보안 패치를 배포하고 설치한다.

3. 모든 시스템에는 안티바이러스 소프트웨어를 설치하고 안티바이러스 관리 서버에서 모니터링한다.

4. 모든 운영체제에 존재하는 사용하지 않는 사용자 계정은 비활성화하거나 삭제한다.

5. HSM(Host Security Monitoring, HIPS) 설치 후 모니터링하고 주기적으로 분석한다.

6. 터미널 서버에는 공용 계정을 삭제하고 저장된 계정 정보와 암호를 모두 삭제한다.

7. 터미널 서버에는 업무 목적별로 개별 계정을 생성한 후에 로그인 로그를 생성하고 관리한다.

8. 데이터베이스의 xp_cmdshell Procedure를 삭제하고 관련 파일 xplog70.dll을 삭제한다.

9. 데이터베이스 정보는 암호화해서 관리하되, 웹 서버에서 암호화하여 데이터베이스로 전송한다.

10. 웹 서버에는 SSL(Secure Socket Layer)를 활성화 한다.

11. 윈도우 이벤트 로그 및 IIS 웹 로그는 통합하여 로그 매니지먼트 서버에서 관리한다.

APT 공격 탐지를 위한 네트워크 제어

1. 백본 스위치에서는 화이트리스트 및 블랙리스트를 이중 정책으로 설정해 관리한다.

2. 기업 외부 네트워크에서 기업 내부로 접속할 때 IPSec VPN 혹은 SSL VPN을 이용하도록 한다.

3. IPSec VPN 혹은 SSL VPN 연결 시마다 발생하는 모든 VPN 로그를 별도로 관리한다.

4. VPN 계정은 업무 목적별로 생성하고, 권한도 구분하여 적용한다.

5. 기업 내부 아웃바운드 패킷에 대한 필터링을 적용한다.

6. 기업 내부 HTTP 통신은 모두 웹 프록시를 거치도록 운영하고 관리한다.

7. 기업 내부에서는 파일 공유 서비스 대신 SFTP 또는 SCP(Secure Copy)만 사용하도록 한다.

8. NIDS와 같은 NSM(Network Security Monitoring) 247을 운영 및 관리한다.

9. NIDS 이벤트 및 전체 세션 데이터와 전체 패킷을 저장하고 분석한다.

10. 업무 영역별로 네트워크 분리 후 각 업무 영역마다 방화벽을 설치하고 관리한다.

11. 시스템, 네트워크 및 데이터베이스 등 IT 관리 부서는 일반 업무 영역과 별도로 구분한다.

윈도우 레지스트리(Windows Registry) 포렌식에 대한 이해를 위해

1월 초에 읽었던 기술 서적을 블로그에 포스팅 하려고 합니다. 작년 하반기부터 멀웨어 포렌식(Malware Forensic)에 대해 깊이 있게 파볼려고 4개 부분(메모리, 레지스트리, 네트워크, 파일 시스템)으로 나누어 연구와 실험을 계속 해오고 있습니다. 연구를 계속 할 수록 업무적으로 다루었던 사항들과 연결되는 부분들이 많이 있더군요..

이러한 연구에 대한 결과물로 메모리 포렌식(Memory Forensic)은 작년 초겨울 파워포인트(PowerPoint) 슬라이드로 만들어 내부적으로 공유도 했었고, 별도로 회사 간행물인 "월간 안"에 "볼라틸리티를 이용한 메모리 포렌식 분석"이라는 제목으로 이번 2월호에 원고가 게시 되었습니다. 해당 원고가 A4로 40 페이지가 넘다 보니, 담당자 분께서 깊은 고민 끝에 2부작으로 나누어 실어주셨습니다. 그래서 현재 1부만 게시되었고, 2부는 다음 3월호에 실릴 예정이라고 합니다.

이렇게 해서 메모리 포렌식에 대해서는 어느 정도 매듭을 지었고, 두 번째로 2013년 12월부터는 레지스트리 포렌식에 대한 서적들과 논문들을 읽으면서, 실험이 필요한 부분들은 직접 검증을 하며 연구를 진행 중에 있습니다.

이 레지스트 포렌식 연구 과정에서 제일 먼저 참고하여 읽었던 서적이 오늘 포스팅하는 "철통보안, 윈도우즈 레지스트리 포렌식 보안 전문가를 위한 디지털 포렌식 분석" 입니다.


이 책 역시 컴퓨터 포렌식(Computer Forensic) 분야에 정통한 할렌 카비(Harlan Carvey)가 저술하였으며, 윈도우(Windows) 시스템의 핵심 구성 요소 중 하나인 레지스트리와 이에 대한 포렌식 기법들에 대해 다루고 있습니다. 역자 역시 한국 CISSP 협회에서 몇 번 뵈었던 백제현 이사님으로 컴퓨터 포렌식 분야에 정통하신 분입니다. 그 덕분에 번역이 정갈하게 잘 되어 원서를 다시 찾아 보지 않아도 될 정도로 잘 정리 되었습니다.

이 책의 가장 큰 장점을 언급한다면, 윈도우 시스템에 존재하는 레지스트리에 대한 개론에서부터 이를 검증할 수 있는 다양한 툴과 기법들을 같이 소개하고 있다는 점입니다. 이러한 부분으로 인해 레지스트리 분석을 통해 시스템으로부터 얻을 수 있는 데이터에 대해 종합적으로 생각해 볼 수가 있었습니다.

하지만, 레지스트리 부분에 대한 기술적인 설명만을 놓고 본다면 "윈도우 인터널즈(WINDOWS INTERNALS(제5판) 마이크로소프트 윈도우 커널 공식 가이드)" 보다는 자세하지 않습니다. 하지만 이 "윈도우즈 레지스트리 포렌식" 책은 레지스트리 포렌식에 대한 전반적인 이해를 돕고자 쓰여진 책이므로, 사실상 목적이 다르다고 볼 수 있습니다. 이러한 목적에 부합하기 위해 레지스트리를 대상으로 실험 할 수 있는 다양한 툴들과 기법들에 대해서는 충실하게 설명이 되어 있습니다.

개인적으로 한가지 아쉬운 부분은 악성코드 분석과 관련하여 자동 실행을 위한 윈도우 레지스트 부분에 대한 자세한 설명이 부족하며, 이러한 부분의 분석을 위한 툴이나 기법 소개도 역시 생각보다 풍부하지는 않습니다. 그러나 앞서 설명한 바와 레지스트리 포렌식에 대한 전반적인 이해를 돕기 위한 책입니다.

그러므로, 악성코드 분석에 관심 있으신 분들이나, 컴퓨터 포렌식에 관심 있으신 분들 모두 읽어도 도움이 많이 되는 기술 서적이라고 할 수 있습니다. 물론, 윈도우 레지스트리를 많이 다루어 왔지만, 다시 한번 되짚어 보고자 하시는 전문가 분들에게도 도움이 되는 책이라고 할 수 있습니다.

2014년 2월 3일 월요일

2009년 10월 서울여대 정보보호학과 강의 자료

드디어 2009년의 마지막 자료까지 왔네요. 서울여대 강의는 기억에 참 많이 남습니다. 지금 근무하는 회사에서 처음으로 시도한 대학 강의였고, 저 역시 대학생 더군다나 여대생들을 대상으로 강의를 하게 된 좋은 경험이었던 것 같습니다.

특히나 2010년 2학기 강의에는 2009년 강의 실패를 교훈 삼아서 학생들의 눈높이에 맞추어 실무에 필요한 기본 지식부터 강의하자라는 생각으로 만든 자료 였었습니다. 그래서 시간적인 투자와 표현 방법들에 대한 노력에서부터 별도로 V3 365 패키지를 구매해서 중간 중간 간단한 퀴즈에 답변한 친구들에게 나누어주면서 흥미과 관심을 유발하고자 나름대로 교수법에까지 많은 노력을 했던 기억이 많이납니다.

그래서 인지 그 이후에 회사에 연수생으로 지원한 친구들 중에서 제 강의를 들었다는 친구들도 제법 있더군요.

2010년 10월 서울여대 정보보호학과 학생들을 대상으로 이루어진 보안 교육은 총 3일 9시간에 걸쳐서 이루어졌습니다. 그 덕분에 매주 서울여대를 방문해야 했고 그 때 마다 당시 담당 교수님이셨던 김명주 교수님께서 저녁을 사주시면서 이런 저런 말씀들을 나누었습니다.

아래는 그 당시에 강의 했던 자료로 총 6개의 자료가 강의에 사용되었으며, 강의 순서는 보안 위협 동향에서 윈도우 시스템과 파일 구조, 윈도우 커널과 루트킷(Rootkit), 리버싱(Reversing) 기초, 동적 분석 그리고 마지막으로 정적 분석으로 이어집니다.

1. 2009년 상반기 보안 위협 동향

첫 강의는 학생들이 앞으로 실무에서 맞주치게 될 보안 위협들에 대해 설명한 "Know Your Enemy" 컨셉의 강의로, 악성코드 개론에서부터 블랙 마켓과 언더그라운드 등에 대한 전반적인 내용들을 다루고 있습니다.



2. Windows System과 File Format

두 번째 강의는 윈도우 시스템에 대한 개략적인 이해와 Win32 API로 제작된 윈도우 실행 파일의 구조 그리고 DOC와 PDF 파일에 대한 개략적인 구조에 대해 설명하고 있습니다.



3. Windows System과 Rootkit

두 번째 강의에서 윈도우 시스템에서 개론적인 전체를 살펴봤다면, 세 번째 강의에서는 윈도우 시스템의 핵심인 커널과 이와 관련된 유저 모드(User Mode) 및 커널 모드(Kernel Mode) 루트킷들의 기법과 형태에 대해 다루고 있습니다.



4. Reverse Engineering Basic

리버스 엔지니어링에 대한 기본 개념과 로우 레벨(Low Level) 프로그래밍과 컴파일러(Compiler) 특징들에 대해 다루고 있습니다.



5. System Level Reversing

시스템 레벨 리버싱으로도 표현되는 동적 분석(Dynamic Analysis)에 대한 개념과 방법론들 이와 관련된 도구들에 대해 다루고 있습니다.



6. Code Level Reversing

정적 분석(Static Analysis)로 이야기 되는 코드 레벨 리버싱에 대한 개념과 어셈블리(Assembly) 언어 기본 그리고 디버깅(Debugging) 및 디스어셈블링(Dissembling) 기본에 대해 다루고 있습니다.



이렇게 해서 총 3일간의 강의는 끝이 나게 되었습니다.

항상 강의를 하고 나면 느끼지만, 자료를 정리하고 만드는 과정에서 저 역시 많이 배운다는 점입니다. 자료를 통해 평소에 잘 못 알고 있던 지식들도 고치고, 새로운 기법들도 배우게 됩니다.

그래서 평소에 책이나 자료를 보면서 지식들을 정리 해두는 것이 중요 한 것 같습니다.