2014년 10월 11일 토요일

[Cuckoo SandBox 1.1.1] What is Cuckoo?

오늘은 Cuckoo Sandbox 에 대해 정리합니다.

https://cuckoo.readthedocs.org/en/latest/ 에서 정보를 찾을 수 있는데,

다음 번엔 영어로 읽지 않기 위해 이 글을 작성합니다. 


Cuckoo는 malware를 자동으로 분석할 수 있는 시스템입니다. 
무료로 사용할 수 있습니다.

Malware를 독립적인 윈도우 시스템에 실행시키고 그것의 행위들에 대해 종합적인 결과를 수집합니다.

  • Malware가 생성하는 모든 프로세스에 의해 수행되는 win32 API 호출 흔적
  • Malware가 실행되는 동안 다운로드, 생성, 삭제되는 파일에 대한 정보
  • Malware 프로세스의 메모리 덤프 
  • 네트워크 트래픽을 추적한 PCAP 파일
  • Malware가 실행되는 동안의 윈도우 데스크탑의 스크린 샷
  • 전체 메모리 덤프 

오....어렵게만 느껴지는 악성코드 분석이 쉬워질 수 도 있겠다는 생각이 듭니다.


History of Cuckoo


Cuckoo 샌드박스는 honey net 프로젝트에 속한 "Google Summer of Code 2010" 에서 시작합니다. "Google Summer of Code" 에서 지원을 받아 2011년 2월 5일, 처음 beta 버전이 배포되고, 그 해에도 같은 프로젝트에서 지원을 받게 됩니다. 계속된 버전 업그레이드를 진행해 왔습니다. 2014년 4월 7일 Cuckoo Sandbox 1.1이 배포되었고 현재 가장 최신 버전은 1.1.1 입니다.(2014년 10월 7일)

1.0에서 1.1로  바뀐 정보는 아래와 같습니다. cuckoo sandbox.org 에서 확인할 수 있습니다.

[Cuckoo Sandbox 1.1] changelog

다른 리포팅 모듈로 우선수위를 갖는 Django 웹 인터페이스에 대한 개선과 URLs 검색 기능이 추가 되었습니다. 파일의 라이브러리를 이용하여 해시값을 계산하는 imphash 를 정식 패치하였고, 이를 이용해 검색도 할 수 있습니다.
음... 아직 Cuckoo를 이용해 분석을  안 해봐서 수정된 것들이 얼마나 좋은 건지 잘 모르겠습니다.ㅎㅎㅎ 아무래도 1.0버전과 직접 비교해 보는게 좋겠습니다...!! 전 해볼겁니다

배포판에 대한 자세한 설명은 위의 두 사이트를 참고하시길 바랍니다.


Cuckoo: 분석 가능한 것들


무엇을 분석할 수 있는 지 알게 되면, Cuckoo를 더 빨리 설치하고 싶어 질 것입니다.

  • 일반적인 윈도우 실행파일
  • DLL 파일
  • PDF 문서
  • Microsoft Office 문서
  • URLs, HTML 파일
  • PHP 스크립트 
  • CPL 파일 
  • Visual Basic 스크립트
  • ZIP 파일
  • Java JAR
  • 그 외 대부분
따란~! 강력한 모듈성과 스크립팅으로 대부분의 확장자를 분석할 수 있습니다.


Cuckoo: 시스템 구성


이제, Cuckoo Sandbox의 시스템 구성을 한번 보겠습니다.
구성도를 이해하고 설치하는 것이 중요합니다.

../../_images/architecture-main.png
[Cuckoo Sandbox] Architecture

Cuckoo Sandbox는 샘플을 실행하고 분석을 다루는 중앙 관리 소프트웨어로 구성되어있습니다. 그림에서 확인할 수 있듯이, 분석이 실행되는 VM(Virtual Machine)은 독립적인 가상 네트워크입니다.

Host Machine은 sandbox의 핵심 요소로, 전체 분석 과정과 Guest 머신을 관리합니다.

Guest  Machine(분석을 위한 VM)은 Sandbox의 역할로, 독립적인 환경에서 malware를 실행하고 안전하게 분석합니다.

간단하게 보이지만 악성코드가 만만한 녀석이 아니라 그런지,

Cuckoo Sandbox를 설치하는 과정은 꽤 복잡합니다.


다음 글에서 현재(2014.10.11) 가장 최근 버전인 1.1.1을 사용을 위한 준비를 하겠습니다.


2014년 10월 7일 화요일

[Regular Expression] 정규 표현식 소개

정규 표현식은 특정한 규칙을 가진 문자열의 집합을 표현하는 언어입니다.
Regexp or Regex로 줄여서 말하기도 합니다.

이를 이용하여 문자열을 검색하거나 치환하는 것으로 응용할 수 있습니다.

이제 정규표현식의 규칙을 살펴보겠습니다.

문자
설명
비고
*
앞의 문자나 부분식을 0개 이상 찾음
{0, }과 같음
+
앞의 문자나 부분식을 1개 이상 찾음
{1, }과 같음
?
앞의 문자나 부분식을 0개나 1개 찾습니다
{0, 1}과 같음
.
\n을 제외한 모든 글자를 의미

[a-z]( [^a-z])
[ ]안의 범위에 해당하는 문자를 검색([ ]안의 범위에 해당하지 않는 문자를 검색)
범위를 특정 값으로 정할 수도 있음
) [abc]
\b(\B)
단어와 공백 사이의 위치를 검색(\b를 제외한 전부를 검색)

\d(\D)
숫자를 의미

\n
줄바꿈 문자를 의미

\r
캐리지 리턴 문자를 의미

\s(\S)
공백, 탭 용지 공급 등 모든 공백문자를 의미(공백을 제외하는 것을 의미)

\t
탭 문자를 의미
`
^
문자열의 시작위치에서 검색

$
문자열의 끝 위치에서 검색

{n}
{}앞에 글자를 n개 반복함을 의미

{n,m}
n m 사이의 수만큼 반복함을 의미

\
다음에 오는 문자를 특수문자, 리터럴, 역참조, 8진수, 이스케이프로 인식

(pattern)
패턴을 체크하고 체크한 값을 변수로 저장

(?:pattern)
패턴을 체크하고 체크한 값을 변수로 저장하지 않음




 규칙만 읽어보면 아직 뭐라는 건지, 어떻게 찾는 지 감이 잘 오지 않습니다.

 http://www.regexr.com/ 에서 온라인으로 정규 표현식을 연습할 수 있습니다.


http://www.regexr.com: 사이트 화면


 다음 글에서는 예를 통해 정규 표현식과 YARA를 이용하여 특정문자열을 검색하는 rule을 작성해 보겠습니다.  :-)

2014년 9월 30일 화요일

YARA..그 놈 (feat.사랑..그 놈) [STEP 02]

YARA 설치

먼저 설치하는 방법은 간단하다.

OS별 다를것 같지만 설치하는 파일만 다를뿐 그다지 설정을 할것이 없기 때문이다.

https://code.google.com/p/yara-project/downloads/list 여기 링크된 곳을 들어가면 아래의 그림과 같이 설치를 할 수 있는 곳이 나오는데, 자신의 운영체제(OS)에 맞게 설치를 해주면된다.


여기에서는 Ubuntu 14.04.1으로 진행할 것으로,  리눅스용으로 설치를 할 것이다. 
yara-1.7.tar.gz으로 설치를 하겠다.

 설치를 하게되면 다운로드 폴더에 yara-1.7.tar.gz이라는 압축파일이 있는 것을 확인할 수 있다.

터미널을 열고(Ubuntu 는 alt + ctrl + t 명령어로 터미널을 열 수 있다.) 아래의 압축을 푸는 명령어를 입력한다
tar -zxvf yara-1.7.tar.gz
을 입력하면 압축이 풀린 폴더가 생성된다.  폴더로 들어 간다. 그럼 아래와 같은 파일들이 있는 것을 확인 할 수 있다.

여기서 configure이라는 실행파일이 있는 것을 확인 할 수 있다. 시스템 패키지를 설치하는 실행파일인데 이전에 PCRE*, g++파일을 먼저 설치를 해주어야 한다.
sudo apt-get install lipcre3-dev
sudo apt-get install g++ 
보통 g++은 리눅스에 설치가 기본적으로 되어 있는 경우가 많다.

여기서  PCRE(Perl Compatible Regular Expressions)라는 생소한 단어가 나오는데 이를 간단하게 말하면  말그대로의 표현은 Perl 호환 정규 표현식이라는 뜻이다.  PCRE 라이브러리는 Perl 5와 같은 구문과 의미를 사용하여 정규식 패턴 일치를 구현하는 함수의 집합이다.

자체 native API 뿐만아니라  POSIX 정규식 API에 대응하는 래퍼함수의 집합도 포함하고 있다.

자세한 내용은 http://www.pcre.org/ 에서 참고를 하시기 바랍니다.

PCRE를 간단하게 살펴 보았는데 왜 설치를 해야 하는지 이유가 나옵니다. YARA가 패턴으로 악성코드를 탐지하는 기법이라고 했는데, 그중에 정규표현식이 들어 가기 때문이라는 것을 대충 감이 오게 됩니다.

자 간단하게 설치를 마치고 나면 configure 파일을 설치를 해줍니다. 위에서 말했듯이, 시스템 패키지를 설치하는 실행 파일입니다.
./configure
라고 명령어를 입력하게 되면(리눅스에서 실행파일을 실행 시키는 방법은 <[./]실행파일> 라고 입력을 하게 되면 실행이 된다.) 각종 configure에 관련된 파일들이 설치되는 것을 확인 하실 수 있습니다.

다음은 소스코드 패키지 컴파일을 위해서 아래의 명령을 입력한다.
 make
라고 입력을 해줍니다. 다음 (만약 permission denied라고 뜨면 앞에 sudo 권한을 준 후 실행) 설치를 하기 위해서 아래의 명령을 입력한다.
make install
아래의 그림은 위의 절차를 거치고 난 후의 yara-1.7 디렉터리의 파일들이다.

위의 디렉터리 파일내의 그림과, 지금의 그림의 차이가 느껴지십니까? 네. 여기서는 yara라는 실행파일이 생성된 것을 확인 할 수 있습니다.

그럼 되는지 안되는지 확인을 해봐야죠? yara라고 한번 쳐봅니다.


위의 그림 처럼 옵션관련된 것들이 나오는데, 이렇게 뜨면 성공을 한겁니다.

위처럼 리눅스를 이용하여 yara를 설치하는 것을 포스팅하였지만, OS X에서는 리눅스와 사용하는 법이 비슷하기 때문에 이 설치법을 따라하는 것도 문제는 없습니다.

고생하셨습니다. 만약 설치를 하는데 error가 나오거나, 궁금한 것이 있으면, 댓글으로 질문 해주시면 확인 후에 답변 드리겠습니다.

2014년 9월 29일 월요일

YARA..그 놈 (feat.사랑..그 놈) [STEP 01]

YARA란 무엇인가?

YARA는 악성코드의 시그니처를 패턴을 이용하여 악성 여부를 확인하고, 그 특징에 따라 분류하기 위한 목적으로 사용되는 도구이다.

간단한 문법( C와 Pyhon 형태의 문법)으로 YARA Rule을 작성하는 것으로도 악성코드(파일, 프로세스)이 어떤 기능을 하는지, 조건이 포함되는지 여부를 확인할 수 있어서 악성코드에 대해 공부를 하고 있다는 사람들은 많이 사용하고 있다.

또한 단순히 텍스트 스티링과 바이너리 패턴만을 이용해 파일의 시그니처를 찾는 것 뿐만 아니라 , 특정 EP(Entry Point)값을 지정하거나 File Offset, Virtual Memory Address를 제시하고, 정규 표현식(Regular Expression)을 이용하여 효율적인 패턴 매칭 작업이 가능하도록 한다.

YARA는 악성코드를 방지하는 목적이 아니라 이미 나온 것을 대응하는 침해대응에 가깝다.

YARA는 2008년 최초 1.0v 으로 나와 오픈소스로 관리되고 있으며, 2014년 기준 1.7v 까지 나와 있으며이 링크에서 https://code.google.com/p/yara-project/downloads/list 확인을 할 수 있고, 다운로드를 받을 수 있다. VirusTotal에서 최초 제작을 하고, 현재 소스 관리는 Google에서 하고 있다.

YARA는 Windows, MAC OS X, Linux건 상관없이 모든 플랫폼에서 사용할 수 있고, 지원한다.