본문으로 바로가기

목차

1. 쿡쿠 샌드박스 구축

쿡쿠 샌드박스를 운영하는데 있어 최소한으로 설치하는 방법을 언급하려고 한다. 최소한이라는 것은 다양한 기능을 활용하지 않고, 윈도우 악성코드만 자동으로 분석하는 것에만 초점을 맞춘다는 의미다. 우선 쿡쿠 샌드박스를 테스트하기 위해 다음과 같은 환경에서 테스트했다. 호스트 운영체제에 가상머신 소프트웨어인 VMware을 설치하고, 가상머신으로 우분투 16.04 데스크톱과 서버를 설치한다. 그리고 가상머신 안에 다시 가상머신으로 윈도우 7으로 구성한다. 별도로 운영체제를 설치하는 과정은 설명하지 않는다.

호스트 스펙

  • 운영체제: 윈도우 7 울티메이트 K SP1 64비트
  • 가상머신: VMware Workstation 12.5
  • CPU: i7-3630QM
  • 메모리: 16GB
  • 가상 아이피: 192.168.0.0/24

게스트 1 스펙 - Cuckoo-Server

  • 운영체제: 우분투 16.04.2 데스크톱 64비트
  • CPU: 가상 CPU 8코어
  • 메모리: 4GB
  • 아이피: 192.168.0.200
  • 웹 포트: 8000

게스트 2 스펙 - Cuckoo-DB-Server

  • 운영체제: 우분투 16.04.2 서버 64비트
  • CPU: 가상 CPU 4코어
  • 메모리: 1GB
  • 아이피: 192.168.0.251
  • DB 포트: 27018

게스트 인 게스트 스펙 - Sandbox

  • 운영체제: 윈도우 7 엔터프라이즈 SP1 32비트
  • 가상머신: 버추얼박스(Virtualbox)
  • CPU: 가상 CPU 1코어
  • 메모리: 512MB
  • 아이피: 192.168.0.10

본격적으로 쿡쿠 샌드박스를 설치하는데 이 구축은 크게 다섯 가지로 분류한다. 기본 패키지 & 라이브러리 설치 단계에서는 쿡쿠 샌드박스를 운영하기 위한 기본 도구와 라이브러리를 설치한다. 쿡쿠 코어 설치는 쿡쿠 샌드박스를 운영하는데 있어 필수적인 파이썬 라이브러리와 설정 파일을 구성한다. 샌드박스 구성은 쿡쿠 코어가 악성코드를 분석하기 위해 사용되는 안전한 환경인 샌드박스를 구성하는 것이다. 웹 인터페이스 데이터베이스 구성은 분석 결과를 표현하는 웹 인터페이스가 사용하는 데이터베이스를 구축한다. 마지막으로 쿡쿠 설정은 쿡쿠 엔진의 운영과 레포팅 기능 그리고 샌드박스 구성을 연동하기 위한 진행이다.

1.1. 기본 패키지 및 C 라이브러리 설치

쿡쿠 샌드박스에서 사용하는 다양한 파이썬 라이브러리를 설치하려면 다음 패키지와 라이브러리들을 설치해야 한다. 설치하는데 있어 중요한 부분은 sudo 명령과 함께 비밀번호를 입력하는 과정이 불편하여 root 권한을 부여하고 설치를 진행하는 경우가 많다. 이렇게 구성한 경우, 소유권 문제로 인해 쿡쿠 샌드박스가 원활하게 동작하지 않을 수 있다. 물론, 공격자가 시스템에 침투하게 되었을 때 root 권한을 얻을 수 있다는 문제도 발생한다. 리눅스가 제공하는 사용자 권한에 따른 운영방식을 이해하는 것과 쿡쿠 엔진의 운영과 기타 서비스의 운영에 따른 권한 문제가 발생하는 것을 해결하기 위해서는 root 권한으로 구축하는 것을 추천하지 않는다.

먼저 쿡쿠 샌드박스를 구축하는데 필요한 패키지와 다양한 기능을 사용하기 위해 설치하는 파이썬 라이브러리가 요구하는 C 라이브러리를 설치한다.

sudo apt-get install -y python-pip python-dev libssl-dev libjpeg-dev zlib1g-dev tcpdump apparmor-utils

설치하는 패키지를 살펴보면 다음과 같다.

  • python-pip: 파이썬 라이브러리를 쉽게 설치하도록 도와주는 도구다.
  • python-dev: 파이썬 헤더(python.h)를 제공하여 고성능을 위한 파이썬 확장을 위해 설치, 다양한 파이썬 라이브러리들이 퍼포먼스적인 측면을 위해 처리 기능을 C 언어로 구성된다.
  • libssl-dev: cryptography 파이썬 라이브러리를 설치하기 위해 설치하는 패키지로, 다양한 암호 기능을 제공한다.
  • libjpeg-dev: pillow 파이썬 라이브러리를 설치하기 위해 설치하는 패키지로, jpeg 이미지 파일을 위해 사용되는 C 라이브러리다.
  • zlib1g-dev: pillow파이썬 라이브러리를 설치하기 위해 설치하는 패키지로, gzip과 PKZIP를 지원하기 위해 제작되었지만, PNG 이미지 파일을 위해 사용되는 C 라이브러리다.
  • tcpdump: 패킷을 캡처를 위한 프로그램이다.
  • apparmor-utils: 앱 아머(AppArmor)는 Application Armor의 약자로 프로그램의 네트워크 접근, 파일 읽기, 쓰기 그리고 실행 같은 능력을 제어하여 접근 통제할 수 있는 리눅스 커널 보안 모듈로 이를 제어하기 위한 유틸리티다.

다음 쿡쿠 코어가 네트워크 패킷을 수집할 수 있게 다음과 같이 구성한다. aa-disable 명령으로 tcpdump를 보호하는 앱 아머를 비활성화하고, setcap 명령으로 일반 사용자가 root 권한 없이 tcpdump를 사용할 수 있게 설정한다.

sudo aa-disable /usr/sbin/tcpdump
sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

만약 setcap 명령을 사용할 수 없다면 libcap2-bin 패키지를 설치한다. 

sudo apt-get install libcap2-bin

이제 샌드박스로 사용할 가상머신인 버추얼박스(VirtualBox)를 설치한다. 버추얼박스는 현재 오라클(Oracle)에서 개발하고 관리하고 있으며, 무료로 사용할 수 있는 좋은 소프트웨어다. Cuckoo 2.0.0 공식 가이드에서 언급한 버추얼박스의 버전은 4.3, 5.0 그리고 5.1 버전이다. 다음과 같이 5.1 버전을 설치한다.

echo deb http://download.virtualbox.org/virtualbox/debian xenial contrib | sudo tee -a /etc/apt/sources.list.d/virtualbox.list
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install -y virtualbox-5.1

1.2. 쿡쿠 코어 설치

이제 쿡쿠 코어를 설치한다. 설치는 매우 편리하게 다음과 같으며, 최신 버전으로 설치한다.

sudo pip install cuckoo

만약 쿡쿠 코어 버전을 특정 버전으로 설치하고 싶다면 버전을 명시해서 사용한다. 버전을 기입하지 않으면 설치 가능한 버전 리스트를 볼 수 있다.

sudo pip install cuckoo==
The directory '/home/cuckoo/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/cuckoo/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting cuckoo==
  Could not find a version that satisfies the requirement cuckoo== (from versions: 2.0.0a1, 2.0.0, 2.0.1a1, 2.0.1a2, 2.0.1a3, 2.0.1, 2.0.2a1, 2.0.2a2, 2.0.2a3, 2.0.2a4, 2.0.2, 2.0.3a2, 2.0.3a3)
No matching distribution found for cuckoo==

쿡쿠 샌드박스가 2.0.x 버전으로 배포되기 전 가장 큰 문제는 버전관리가 매우 어려웠다. 새로운 버전이 개발되면 기존의 버전을 폐기하고 새롭게 설치하는 문제가 있었다. 하지만 이제는 pip 명령으로 설치하기에 기존의 버전과 업그레이드 버전을 통합하기 쉬워졌다. 최신 버전의 쿡쿠로 설치하려면 -U 옵션을 추가해 사용한다.

쿡쿠 버전은 정식 릴리즈인 2.0.x 버전이 있고, 개발자 릴리즈인 2.0.xax 버전이 있다. 예를 들어, 2.0.1 버전은 정식 릴리즈고, 2.0.2a3은 개발자 릴리즈다. -U 옵션을 사용하여 업그레이드하면 정식 릴리즈만 반영된다. 2.0.2a3 버전이 존재하더라도 2.0.1 버전으로 설치된다. 개발자 릴리즈로 구성하고 싶다면 명확한 버전을 명시하는 형태로 설치 가능하다.

sudo pip install -U cuckoo

설치 완료 후 터미널에서 cuckoo 명령을 입력하면, 다음과 같은 메시지를 볼 수 있다. cuckoo 명령을 입력해야 ~/.cuckoo 디렉터리가 생성된다. 이 디렉터리에서 쿡쿠 샌드박스 운영을 위한 다양한 설정을 할 수 있다.

리눅스에서 홈 디렉터리는 /home/ 에 사용자 계정으로 생성된다. 우분투 데스크톱을 구축할 때 설정한 사용자 계정이 cuckoo이기에 /home/cuckoo/로 표현된다. 현재 로그인한 사용자도 cuckoo 이이기에 /home/cuckoo/디렉터리에서 대부분 활동한다. 홈 디렉터리를 표현하는 기호로 물결표(~, Tilde)를 사용한다. 따라서 각자의 홈 디렉터리로 표현하기 위해 ~/ 로 표현했다.

쿡쿠 샌드박스의 설정을 할 수 있는 디렉터리의 위치는 설치한 사용자의 기준으로 ~/.cuckoo로 생성된다. 만약 adduser 명령으로 cuckoo2 사용자를 생성한 후 cuckoo 명령을 입력하면 /home/cuckoo2/.cuckoo 디렉터리가 생성되며 cuckoo2 사용자만을 위한 쿡쿠 설정과 코어를 운영할 수 있다. 이처럼 .cuckoo 디렉터리가 사용자마다 다르게 생성하고 구축할 수 있기에 이를 Cuckoo Working Directory로 부르며 줄여서 CWD라고 한다. 

만약 CWD를 다른 경로로 지정하고 싶다면 다음과 같이 --cwd 다음에 원하는 경로를 입력한다.

cuckoo --cwd ~/test
cuckoo

   ______   __  __   ______   ___   ___   ______   ______
  /_____/\ /_/\/_/\ /_____/\ /___/\/__/\ /_____/\ /_____/\
  \:::__\/ \:\ \:\ \\:::__\/ \::.\ \\ \ \\:::_ \ \\:::_ \ \
   \:\ \  __\:\ \:\ \\:\ \  __\:: \/_) \ \\:\ \ \ \\:\ \ \ \
    \:\ \/_/\\:\ \:\ \\:\ \/_/\\:. __  ( ( \:\ \ \ \\:\ \ \ \
     \:\_\ \ \\:\_\:\ \\:\_\ \ \\: \ )  \ \ \:\_\ \ \\:\_\ \ \
      \_____\/ \_____\/ \_____\/ \__\/\__\/  \_____\/ \_____\/

 Cuckoo Sandbox 2.0.1
 www.cuckoosandbox.org
 Copyright (c) 2010-2017

=======================================================================
    Welcome to Cuckoo Sandbox, this appears to be your first run!
    We will now set you up with our default configuration.
    You will be able to see and modify the Cuckoo configuration,
    Yara rules, Cuckoo Signatures, and much more to your likings
    by exploring the /home/cuckoo/.cuckoo directory.

    Among other configurable items of most interest is the
    new location for your Cuckoo configuration:
              /home/cuckoo/.cuckoo/conf
=======================================================================

Cuckoo has finished setting up the default configuration.
Please modify the default settings where required and
start Cuckoo again (by running `cuckoo` or `cuckoo -d`).

1.3. 샌드박스 구성

샌드박스(Sandbox)는 악성코드를 안전하게 분석할 수 있는 환경을 제공한다. 이러한 샌드박스를 쿡쿠 코어가 직접 통제하여 자동화된 형태로 운영할 수 있다. 샌드박스로 사용될 수 있는 운영체제는 윈도우, 리눅스, OS X가 있으며 추가로 안드로이드도 가능하다. 가장 기본적인 동작을 확인하기 위해 윈도우 운영체제 이미지를 구성한다.

샌드박스 구성은 다음과 같이 진행한다.

1.3.1. 가상머신 다운로드 및 가져오기

윈도우 운영체제는 유료이기에 구매해야 하지만, 간단한 테스트를 위해서 마이크로소프트에서 공식적으로 90일 제한이 되어 있는 가상머신 이미지를 제공한다. 이 이미지를 다운로드 받는 사이트는 다음과 같다.

https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/

쿡쿠 샌드박스의 분석 기능은 완전히 인터넷 익스플로러 11 버전과 엣지(Edge) 브라우저의 분석을 제공하지 않기에 낮은 버전의 브라우저를 선택한다. 그리고 윈도우 7 32비트 운영체제를 선택한다. 구성하려는 가상머신은 1.1. 기본 패키지 및 C 라이브러리 설치에서 선택한 VirtualBox로 선택한다.

우분투 데스크톱 버전에서 인터넷을 통해 다운로드 받을 때 저장되는 기본 위치는 ~/Download 디렉터리다. 다운로드한 파일은 zip으로 압축되어 있어 압축을 해제한다. 압축을 성공적으로 해제하면 IE8 - Win7.ova파일이 생성된다.

unzip ~/Download/IE8.Win7.For.Windows.VirtualBox.zip

이제 터미널에서 버추얼박스를 실행한다.

virtualbox

다음과 같이 창이 뜨는데, 최상단 바에서 File을 선택하고 Import Appliance... 를 클릭한다.

그리고 우측 폴더 아이콘을 클릭하여 방금 압축을 해제한 .ova 파일을 선택한다. 이제 Next > 버튼을 클릭한다.

이제 구체적인 시스템 구성 상태를 볼 수 있는데, 하단의 맥(MAC) 주소 초기화 버튼인 Reinitialize the MAC address of all network cards을 선택하고 Import를 클릭한다.

이제 윈도우 7 가상머신을 실행하여 부팅한다. 이 가상머신은 이미 가상머신 확장 도구가 설치되어 있기에 편리하게 이용할 수 있다. 부팅이 완료되면 시작 > Command Prompt 아이콘에서 우클릭한 후 Run as administrator를 선택하여 관리자모드로 윈도우 프롬프트에 접근한다. 이제 다음 명령을 입력하면 90일 테스트 제품으로 활성화된다.

slmgr /ato

1.3.2. 파이썬 2.7 다운로드 및 설치

악성코드를 분석하기 위해 쿡쿠 코어를 받으려면 샌드박스에 파이썬 2.7 버전을 설치해야 한다. 파이썬 2.7 버전을 다운로드하기 위해 윈도우의 인터넷 익스플로러 브라우저로 다음 사이트에 방문한다.

https://www.python.org/

상단의 다운로드를 클릭하면 다음과 같은 화면을 볼 수 있는데 Download Python 2.7.13을 클릭한다. 만약 파이썬 버전이 업데이트되었다면 마지막 숫자 13이 다른 숫자로 표기되어 있을 것이기에 당황하지 말자.

다운로드 페이지로 이동하는데, 하단으로 스크롤하여 Windows x86 MSI installer를 선택한다.

이러한 과정이 번거롭다면 다음 주소를 브라우저에 다음 주소를 입력하여 바로 다운로드를 진행할 수 있다.

https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi

다운로드가 끝나면 파이썬을 설치한다.

1.3.3. pillow 라이브러리 설치

파이썬 2.7 설치가 끝났다면 pillow 라이브러리를 설치한다. 이 라이브러리를 샌드박스에 설치하는 이유는 악성코드 분석을 진행할 때 윈도우 운영체제의 화면의 스크린샷을 찍어 상태를 파악하기 위함이다. 예를 들어 랜섬웨어 악성코드를 분석한다면, 사용자에게 협박하는 메시지를 볼 수 있을 것이다. 설치 방법은 단순하다. 먼저 윈도우 프롬프트를 열고 c:\python27\scripts 디렉터리의 pip 명령으로 pillow 라이브러리를 설치한다.

c:\Python27\Scripts\pip.exe install pillow

1.3.4. 네트워크 구성 및 아이피 고정

쿡쿠 코어가 샌드박스를 제어하는 것은 샌드박스에 설치된 에이전트를 통해 진행한다. 이 에이전트에 명령을 입력려면 쿡쿠 코어는 샌드박스의 아이피를 알아야한다. 하지만 아이피가 유동적으로 변경된다면 쿡쿠 코어는 샌드박스를 제어할 수 없게 된다. 따라서 샌드박스의 아이피를 직접 명시하여 고정한다. 또한 쿡쿠 엔진과 동일한 아이피 대역으로 설정하기 위해 브릿지 모드로 설정한다. 먼저 버추얼박스 상단의 Device에서 Network를 선택하고 Network Settings를 클릭한다.

다음 Attached to: 에서 Bridged Adapter를 선택하고 Name을 우분투 네트워크 인터페이스인 ens33을 선택한다.

이제 윈도우 운영체제에서 시작 > Control Panel > Network and Internet > Network and Sharing Center를 선택하고, 좌측의 Change adapter settings를 클릭한다. 윈도우 네트워크 인터페이스인 Local Area Connection 2가 나타나는데, 이 아이콘에서 마우스 우클릭을 한 후 Properties를 선택한다. 설정 창에서 Internet Protocol Version 4 (TCP/IPv4)를 선택하고 Properties를 클릭한다. 이제 다음 그림처럼 아이피와 DNS를 설정한다.

아이피 설정은 사용자마다 다르며, 브릿지 모드로 설정하기에 가상머신의 아이피 대역인 192.168.0.0/24를 고려하여 설정한다. 필자는 샌드박스를 192.168.0.10로 설정했다. DNS의 경우 구글의 DNS인 8.8.8.8과 8.8.4.4를 사용하는데, 때론 국가적으로 이슈가 된 공격은 국내 DNS에서 싱크홀(ShinkHole)을 운영하여 공격자와 통신을 차단하기에 구글의 DNS를 사용한다.

윈도우 커맨드로 들어가서 아이피가 잘 설정되어 있는지 ipconfig 명령으로 확인하고, 외부와 통신이 되는지 핑(ping) 테스트를 한다. 핑 테스트할 때 도메인을 이용해야 DNS까지 잘 동작하는지 확인할 수 있다.

1.3.5. 방화벽/업데이트 비활성화

쿡쿠 샌드박스는 허니팟에 기초한다. 악성코드가 잘 동작해야 효과적인 분석을 진행할 수 있기에 고의적으로 취약한 환경을 구성한다. 따라서 방화벽과 윈도우 업데이트를 비활성화한다. 시작 > Control Panel > System and Security를 선택한다. 여기서 Windows Firewall을 클릭하고 외측 항목에서 Turn Windows Firewall on or off를 클릭한다. 그리고 다음과 같이 두개의 Turn off Windows Firewall 항목을 선택한다.

다시 시작 > Control Panel > System and Security를 선택한다. 그리고 Windows Update를 클릭한다. 좌측 항목에서 Change settings를 클릭한다. 다음 그림과 같이 Important updates에서 Never check for updates (not recommended) 를 선택하여 윈도우 업데이트를 비활성화 한다.

1.3.6. Administrator 계정 활성화 및 로그인

관리자 계정을 활성화하고 로그인하는 이유는 앞서 설명한대로 악성코드가 동작하는데 방해가 없어야 하기 때문이다. 마치 리눅스의 root 계정으로 시스템을 운영하는 것과 같은 의미로 해석할 수 있다. 시작 버튼에서 Command Prompt 아이콘을 찾아 마우스 우클릭하고, Run as administrator를 선택하여 관리자 권한으로 윈도우 프롬프트를 실행한다. 그리고 다음 명령을 입력하여 관리자 계정을 활성화한다.

Net user administrator /active:yes

로그 아웃하면 관리자 계정이 활성화 되어 있는 것을 볼 수 있다. 관리자 계정에 비밀번호가 설정되어 있지 않고, 설정할 필요도 없기에 바로 관리자로 로그인한다. 로그인하면 시스인터널즈(Sysinternals) 도구 중 하나인 BGInfo의 실행 허가 알림창이 뜬다. 이 도구는 위 이미지의 바탕화면처럼 시스템의 정보를 출력하는 도구이기에 실행을 허가하든 하지 않든 중요하지 않다.

1.3.7. UAC 비활성화

UAC는 User Account Control의 약자로 말 그대로 사용자 계정을 제어하는데 사용된다. 윈도우 비스타 운영체제에서 처음 도입된 보안 기술로 리눅스의 사용자 권한 체계와 유사하게 이해하면 된다. 보안 관점에서 이해를 해보면, 공격자가 악성코드를 실행시킬 때 일반 사용자 A에서 동작시키면, 일반 사용자 B가 로그인했을 때 이 악성코드는 동작하지 않는다. 그렇다면 모든 사용자가 악성코드를 실행시키려면 관리자 권한으로 시스템에 동작시키는 것이 필요하다. 이 관점에서 UAC 우회라는 기술을 공격자가 자주 사용한다.

하지만 공격자가 악성코드를 감염시키기 전에 수행해야하는 공격이며, 악성코드를 분석하는 입장에서는 크게 필요가 없다. 문제는 자동화된 형태로 분석을 한다는 것은 사용자가 실행했다는 것을 증명할 수 없다. 더욱이 쿡쿠 코어는 일반 사용자로 접근해서 실행하는 것이 아닌 네트워크를 통해 받은 파일을 프로그램이 실행하기에 로그인한 계정 주체와 실행 주체가 달라 문제가 발생할 수 있다. 이러한 이유로 UAC를 비활성화 하는 작업이 필요하다. 시작에서 uac를 검색한다.

그리고 다음과 같이 왼쪽 UAC 제어 바를 최하단으로 위치시켜 비활성화한다.

1.3.8. agent.py 실행과 가상머신 스냅샷 구성

쿡쿠 코어를 설치하면서 받아온 파일 중 샌드박스화 시키는 agent.py를 윈도우 7에 구성한다. 윈도우 7 가상머신 상단의 Devices를 선택하고, Shared Folders의 Shared Folders Settings... 를 클릭한다.

다음 오른쪽의 폴더에 + 기호가 붙은 아이콘을 클릭하고 Folder Path: 를 선택한 다음 Other... 를 클릭한다. 그리고 다음과 같이 Directory: 에 ./cuckoo/agent를 입력한다. Choose 버튼이 비활성화 되더라도 엔터치면 연결이 이루어진다.

다음으로 Auto-mount와 Make Permanent를 활성화하고 OK 버튼을 누른다. Auto-mount는 설정과 동시에 공유 폴더와 연결되도록 설정하는 옵션이고, Make Permanent는 다음 번 부팅 시 공유 폴더를 이용하도록 설정하는 옵션이다. 간혹 Auto-mount로 공유 폴더와 연결이 잘 안되는 경우가 발생하는데 이 때 재부팅하면 Make Permanent에 의해 공유 폴더와 연결되어 있는 것을 볼 수 있다.

공유 폴더 설정이 끝났다면 시작버튼에서 마우스 우클릭을 한 후 Open Windows Explorer를 선택한다.

좌측 Network 항목에 VBOXSVR 공유 폴더가 활성화 된 것을 볼 수 있다. 이 폴더에는 방금 설정한 디렉터리와 연결되어 있으며, 여기서 agent.py를 가져올 수 있다.

agent.py를 바탕화면에 복사하고 실행한다.

이제 스냅샷을 찍고 저장하는 과정을 진행한다. 이 과정은 우분투 터미널에서 명령으로 제어 가능하며 쿡쿠 코어가 가상머신을 제어하는 방식으로 봐도 무방하다. 우분투 터미널에서 다음과 같이 명령을 입력하여 현재상태를 저장하고 스냅샷을 구성한다. 가상머신의 이름은 IE8 - Win7이고, 스냅샷 이름은 Snapshot1로 설정했다. 스냅샷 이름은 사용자가 원하는 이름으로 설정해도 된다. 쿡쿠 코어가 제어할 땐 최근에 찍은 스냅샷을 기준으로 제어하기 때문이다.

VBoxManage snapshot "IE8 - Win7" take "Snapshot1" --pause
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Snapshot taken. UUID: e2bc4426-6862-49fe-8ec2-4eb7dda4150c

제대로 스냅샷 설정이 되었는지 확인하기 위해 가상머신을 종료하고, 리스토어를 진행한다.

VBoxManage controlvm "IE8 - Win7" poweroff
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
VBoxManage snapshot "IE8 - Win7" restorecurrent
Restoring snapshot e2bc4426-6862-49fe-8ec2-4eb7dda4150c
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

그러면 버추얼박스에 표현되는 상태는 다음과 같으며 하나의 샌드박스 구성이 끝났다. 이제 버추얼박스를 종료하고 쿡쿠 설정을 진행한다.

1.4. 웹 인터페이스 데이터베이스 구성

쿡쿠 웹 인터페이스인 장고(Django)는 쿡쿠 코어 설치에서 설치했고, 이 웹 인터페이스가 사용하는 데이터베이스인 몽고DB(MongoDB)를 구축한다. 이 구성은 사용자가 편리하게 브라우저를 이용하여 분석을 요청하거나 분석된 결과를 볼 수 있게 도와준다. 추후에 스케줄링을 위한 데이터베이스와 검색을 위한 데이터베이스 구성 데이터베이스 서버에 구성할 예정이기에 쿡쿠 데이터베이스는 별도의 운영체제를 설치하여 네트워크로 연결한다.

문서 지향 데이터베이스의 장점은 관계형 데이터베이스에서 사용하는 테이블과 같은 경직된 구조로 데이터를 저장하지 않다는 점이다. 좀 더 풀어서 설명하자면 테이블의 열을 추가하려면 테이블 자체의 정의를 변경해야 하지만, 문서 지향 데이터베이스는 스키마를 사용하지 않도록 설계되어 있기에 별도의 변경없이 속성만 추가하면 된다. 즉, 데이터를 관리하는데 있어 매우 효율적이며 빠르다.

쿡쿠 데이터베이스 서버(192.168.0.251)에 몽고DB데이터베이스를 설치한다.

sudo apt-get install mongodb
그리고 외부에서 접근할 수 있게 몽고DB의 설정 파일에서 라인 11의 bind-ip 를 쿡쿠 데이터베이스 서버의 아이피로 수정한다.
sudo vim /etc/mongodb.conf
bind_ip = 192.168.0.251
서비스를 재시작하여 설정을 적용한다.
sudo systemctl restart mongodb
기본 형태로 사용하는 것은 몽고DB 데이터베이스에 사용자 인증 없이 바로 사용하게 된다. 따라서 몽고DB 데이터베이스에 사용자 계정과 비밀번호를 구성하고 연결하도록 설정한다. 먼저 몽고DB 쉘에 접속한다.
mongo 192.168.0.251
MongoDB shell version: 2.6.10
connecting to: 192.168.0.251/test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user
다음 명령으로 계정과 비밀번호 그리고 권한을 설정한다.
> use cuckoo
switched to db cuckoo
> db.createUser({user:"cuckoo",pwd:"Hakawati123!@#",roles:[{role:"readWrite",db:"cuckoo"}]})
Successfully added user: {
        "user" : "cuckoo",
        "roles" : [
                {
                        "role" : "readWrite",
                        "db" : "cuckoo"
                 }
        ]
}

1.5. 쿡쿠 설정

쿡쿠 코어와 샌드박스 그리고 웹 인터페이스와 데이터베이스 구성이 모두 끝났다. 그렇다면 엔진의 운영 방식과 엔진이 샌드박스를 인식할 수 있도록 설정파일을 수정한다. 쿡쿠 설정파일의 대부분은 $CWD/conf 디렉터리에 위치한다.

이 책을 집필하는 기준인 2.0.2버전에서는 총 15가지 설정파일이 존재한다. 모든 설정파일을 수정하지 않으며, 이 챕터에서는 기본으로 동작하기 위한 필수 설정만 수정한다. 이후 기능을 확장하는 과정마다 필요한 부분을 언급할 예정이다.

  • auxiliary.conf: 아래 다양한 설정 파일로 분류하기 애매한 부수적인 기능을 선택하고 설정하는 파일이다.
  • avd.conf: 안드로이드 분석으로 확장하는 과정에 가상머신의 요소로 선택하고 설정하는 파일이다.
  • cuckoo.conf: 쿡쿠 코어가 동작하는데 핵심적인 설정 파일이다.
  • esx.conf: 가상머신의 한 종류로 Tpye 1 하이퍼바이저 방식을 사용하고 있는 VMware의 ESX로 샌드박스를 구성할 때 선택하고 설정하는 파일이다.
  • kvm.conf: 가상머신의 한 종류로 Type 1 하이퍼바이저 방식을 사용하는 리눅스용 가상머신인 KVM으로 샌드박스를 구성할 때 선택하고 설정하는 파일이다.
  • memory.conf: Volatility 도구를 이용하여 메모리 포렌식을 진행할 때 필요한 기능을 선택하고 설정하는 파일이다.
  • physical.conf: Fog 프로젝트를 이용하여 샌드박스를 가상먼신이 아닌 리얼머신으로 구성할 때 선택하고 설정하는 파일이다.
  • processing.conf: 다양한 분석 기능을 선택하고 설정하는 파일이다.
  • qemu.conf: 가상머신의 한 종류로 Type 2 하이퍼바이저 방식을 사용하는 QEMU 로 샌드박스를 구성할 때 선택하고 설정하는 파일이다.
  • reporting.conf: 분석 결과를 반영하는 방식을 선택하고 설정하는 파일이다.
  • routing.conf: 다양한 네트워크 구성을 위해 사용하는 설정 파일이다.
  • virtualbox.conf: 가상머신의 한 종류로 Type 2 하이퍼바이저 방식을 사용하는 VIrtualBox로 샌드박스를 구성할 때 선택하고 설정하는 파일이다.
  • vmware.conf: 가상머신의 한 종류로 Type 2 하이퍼바이저 방식을 사용하는 VMware 로 샌드박스를 구성할 때 선택하고 설정하는 파일이다.
  • vsphere.conf: 가상머신의 한 종류로 VMware에서 제공하는 클라우드 컴퓨팅 가상화 플랫폼인 vSphere를 샌드박스로 선택하고 사용할 때 설정하는 파일이다.
  • xenserver.conf: 가상머신의 한 종류로 Type 1 하이퍼바이저 방식을 사용하는 리눅스용 가상머신인 xenserver으로 샌드박스를 구성할 때 선택하고 설정하는 파일이다.

설정 파일의 기본 구성은 섹션과 옵션으로 구성되어 있다. 섹션은 각괄호([모듈 섹션])로 표현되며 옵션은 변수명처럼 구성된다. 기능을 단순히 켜고 끄는 것은 [yes/no]로 구성되어 있고, 그 외엔 구성에 필요한 값을 입력하도록 구성되어 있다.

기본 설정에서 중요한 설정 파일은 cuckoo.conf, reporting.conf이며, 버추얼박스로 샌드박스를 구성했기에 virtualbox.conf도 중요한 설정 파일이다. 먼저 cuckoo.conf 설정을 살펴본다. 이 설정 파일에서 수정이 필요한 부분은 [resultserver] 섹션의 ip 옵션으로 샌드박스가 악성코드를 분석한 결과를 전달받는 쿡쿠 코어의 아이피로 수정하고 저장한다. 기본 포트는 2042인데, 필요에 따라 수정한다.

vim ~/.cuckoo/conf/cuckoo.conf
[resultserver]
# The Result Server is used to receive in real time the behavioral logs
# produced by the analyzer.
# Specify the IP address of the host. The analysis machines should be able
# to contact the host through such address, so make sure it's valid.
# NOTE: if you set resultserver IP to 0.0.0.0 you have to set the option
# `resultserver_ip` for all your virtual machines in machinery configuration.
ip = 192.168.0.200

# Specify a port number to bind the result server on.
port = 2042

reporting.conf에서 수정하는 부분은 1.4. 웹 인터페이스 데이터베이스 구성이 성공적으로 진행되어야 설정한 후 동작하는데 문제가 발생하지 않는다. [mongodb] 섹션에서 기능을 활성화하는 enabled 옵션 값을 yes로 변경하고, 쿡쿠 데이터베이스 서버 주소를 host 옵션에 입력한다. 그리고 몽고DB에 생성한 cuckoo 데이터베이스의 사용자 계정과 비밀번호를 username과 password 옵션에 입력한다.

vim ~/.cuckoo/conf/reporting.conf
[mongodb]
enabled = yes
host = 192.168.0.251
port = 27017
db = cuckoo
store_memdump = yes
paginate = 100
# MongoDB authentication (optional).
username = cuckoo
password = Hakawati123!@#

마지막으로 virtualbox.conf를 설정한다. 첫번째로 [virtualbox] 섹션의 mode 옵션을 gui로 변경한다. 이는 샌드박스가 화면에 보이도록 운영하여 제대로 동작하는지 확인하기 위한 목적이다. 기존의 headless를 사용하면 가상머신의 동작 과정이 화면에 보여지지 않고 분석하게 된다.

두번째로 interface 옵션으로 샌드박스가 사용하는 네트워크 인터페이스 이름을 입력한다. 브릿지 모드로 설정했기에 우분투에서 ifconfig 명령으로 확인할 수 있는 네트워크 인터페이스 이름인 ens33으로 설정한다. 참고로 이 값은 사용자마다 상이할 수 있다.

세번째로 machines옵션은 샌드박스의 구성을 설정하는 부분이다. 특히 machines에 설정한 cuckoo1은 그 아래에 있는 [cuckoo1] 섹션의 이름과 동일하게 구성되어야 쿡쿠 코어가 샌드박스의 정보를 읽을 수 있다. 이러한 방식으로 샌드박스를 여러개 구축할 수 있다.

vim ~/.cuckoo/conf/virtualbox.conf
[virtualbox]
# Specify which VirtualBox mode you want to run your machines on.
# Can be "gui" or "headless". Please refer to VirtualBox's official
# documentation to understand the differences.
mode = gui

# Path to the local installation of the VBoxManage utility.
path = /usr/bin/VBoxManage
# If you are running Cuckoo on Mac OS X you have to change the path as follows:
# path = /Applications/VirtualBox.app/Contents/MacOS/VBoxManage

# Default network interface.
interface = ens33

# Specify a comma-separated list of available machines to be used. For each
# specified ID you have to define a dedicated section containing the details
# on the respective machine. (E.g. cuckoo1,cuckoo2,cuckoo3)
machines = cuckoo1

[virtualbox] 섹션의 machines 옵션에 설정된 cuckoo1의 구성사항이다. label 옵션은 샌드박스의 이름이기에 IE8 - Win7으로 설정한다. 이 샌드박스에 설정한 아이피를 ip 옵션에 설정한다.

[cuckoo1]
# Specify the label name of the current machine as specified in your
# VirtualBox configuration.
label = IE8 - Win7

# Specify the operating system platform used by current machine
# [windows/darwin/linux].
platform = windows

# Specify the IP address of the current virtual machine. Make sure that the
# IP address is valid and that the host machine is able to reach it. If not,
# the analysis will fail.
ip = 192.168.0.10

2. 쿡쿠 샌드박스 기본 운영

쿡쿠 샌드박스 구축이 성공적이라면 쿡쿠 코어의 동작에 아무런 문제가 없을 것이다. 이제 쿡쿠 샌드박스를 운영하는 절차를 이해하고 동작시켜본다. 이 과정의 목차는 다음과 같다.

2.1. 쿡쿠 코어 실행

쿡쿠 코어를 다음과 같이 실행한다. 쿡쿠 샌드박스가 동작하는 과정에서 발생하는 문제를 출력할 수 있게 디버그 옵션인 -d를 함께 사용한다. cuckoo 명령은 환경변수로 등록되어 있어 어떤 위치에서 명령해도 잘 동작할 것이다. 코어가 잘 동작하면 다음과 같은 화면을 볼 수 있다.

cuckoo -d

            _       _                   _             _              _            _
          /\ \     /\_\               /\ \           /\_\           /\ \         /\ \
         /  \ \   / / /         _    /  \ \         / / /  _       /  \ \       /  \ \
        / /\ \ \  \ \ \__      /\_\ / /\ \ \       / / /  /\_\    / /\ \ \     / /\ \ \
       / / /\ \ \  \ \___\    / / // / /\ \ \     / / /__/ / /   / / /\ \ \   / / /\ \ \
      / / /  \ \_\  \__  /   / / // / /  \ \_\   / /\_____/ /   / / /  \ \_\ / / /  \ \_\
     / / /    \/_/  / / /   / / // / /    \/_/  / /\_______/   / / /   / / // / /   / / /
    / / /          / / /   / / // / /          / / /\ \ \     / / /   / / // / /   / / /
   / / /________  / / /___/ / // / /________  / / /  \ \ \   / / /___/ / // / /___/ / /
  / / /_________\/ / /____\/ // / /_________\/ / /    \ \ \ / / /____\/ // / /____\/ /
  \/____________/\/_________/ \/____________/\/_/      \_\_\\/_________/ \/_________/

 Cuckoo Sandbox 2.0.2
 www.cuckoosandbox.org
 Copyright (c) 2010-2017

 Checking for updates...
 You're good to go!
2017-04-17 15:46:25,624 [cuckoo.core.startup] DEBUG: Imported modules...
2017-04-17 15:46:25,636 [cuckoo.core.startup] DEBUG: Imported "auxiliary" modules:
2017-04-17 15:46:25,637 [cuckoo.core.startup] DEBUG: 	 |-- MITM
2017-04-17 15:46:25,637 [cuckoo.core.startup] DEBUG: 	 |-- Reboot
2017-04-17 15:46:25,637 [cuckoo.core.startup] DEBUG: 	 |-- Services
2017-04-17 15:46:25,637 [cuckoo.core.startup] DEBUG: 	 `-- Sniffer
2017-04-17 15:46:25,637 [cuckoo.core.startup] DEBUG: Imported "machinery" modules:
2017-04-17 15:46:25,638 [cuckoo.core.startup] DEBUG: 	 |-- vSphere
2017-04-17 15:46:25,638 [cuckoo.core.startup] DEBUG: 	 |-- KVM
2017-04-17 15:46:25,638 [cuckoo.core.startup] DEBUG: 	 |-- ESX
2017-04-17 15:46:25,638 [cuckoo.core.startup] DEBUG: 	 |-- XenServerMachinery
2017-04-17 15:46:25,638 [cuckoo.core.startup] DEBUG: 	 |-- VirtualBox
2017-04-17 15:46:25,638 [cuckoo.core.startup] DEBUG: 	 |-- Avd
2017-04-17 15:46:25,639 [cuckoo.core.startup] DEBUG: 	 |-- QEMU
2017-04-17 15:46:25,639 [cuckoo.core.startup] DEBUG: 	 |-- VMware
2017-04-17 15:46:25,639 [cuckoo.core.startup] DEBUG: 	 `-- Physical
2017-04-17 15:46:25,639 [cuckoo.core.startup] DEBUG: Imported "processing" modules:
2017-04-17 15:46:25,639 [cuckoo.core.startup] DEBUG: 	 |-- AnalysisInfo
2017-04-17 15:46:25,639 [cuckoo.core.startup] DEBUG: 	 |-- ApkInfo
2017-04-17 15:46:25,640 [cuckoo.core.startup] DEBUG: 	 |-- Baseline
2017-04-17 15:46:25,640 [cuckoo.core.startup] DEBUG: 	 |-- BehaviorAnalysis
2017-04-17 15:46:25,640 [cuckoo.core.startup] DEBUG: 	 |-- Debug
2017-04-17 15:46:25,640 [cuckoo.core.startup] DEBUG: 	 |-- Droidmon
2017-04-17 15:46:25,640 [cuckoo.core.startup] DEBUG: 	 |-- Dropped
2017-04-17 15:46:25,640 [cuckoo.core.startup] DEBUG: 	 |-- DroppedBuffer
2017-04-17 15:46:25,641 [cuckoo.core.startup] DEBUG: 	 |-- GooglePlay
2017-04-17 15:46:25,641 [cuckoo.core.startup] DEBUG: 	 |-- Irma
2017-04-17 15:46:25,641 [cuckoo.core.startup] DEBUG: 	 |-- Memory
2017-04-17 15:46:25,641 [cuckoo.core.startup] DEBUG: 	 |-- MetaInfo
2017-04-17 15:46:25,641 [cuckoo.core.startup] DEBUG: 	 |-- MISP
2017-04-17 15:46:25,641 [cuckoo.core.startup] DEBUG: 	 |-- NetworkAnalysis
2017-04-17 15:46:25,641 [cuckoo.core.startup] DEBUG: 	 |-- ProcessMemory
2017-04-17 15:46:25,642 [cuckoo.core.startup] DEBUG: 	 |-- Procmon
2017-04-17 15:46:25,642 [cuckoo.core.startup] DEBUG: 	 |-- Screenshots
2017-04-17 15:46:25,642 [cuckoo.core.startup] DEBUG: 	 |-- Snort
2017-04-17 15:46:25,642 [cuckoo.core.startup] DEBUG: 	 |-- Static
2017-04-17 15:46:25,642 [cuckoo.core.startup] DEBUG: 	 |-- Strings
2017-04-17 15:46:25,642 [cuckoo.core.startup] DEBUG: 	 |-- Suricata
2017-04-17 15:46:25,643 [cuckoo.core.startup] DEBUG: 	 |-- TargetInfo
2017-04-17 15:46:25,643 [cuckoo.core.startup] DEBUG: 	 |-- TLSMasterSecrets
2017-04-17 15:46:25,643 [cuckoo.core.startup] DEBUG: 	 `-- VirusTotal
2017-04-17 15:46:25,643 [cuckoo.core.startup] DEBUG: Imported "signatures" modules:
2017-04-17 15:46:25,643 [cuckoo.core.startup] DEBUG: 	 |-- CreatesExe
2017-04-17 15:46:25,643 [cuckoo.core.startup] DEBUG: 	 `-- SystemMetrics
2017-04-17 15:46:25,644 [cuckoo.core.startup] DEBUG: Imported "reporting" modules:
2017-04-17 15:46:25,644 [cuckoo.core.startup] DEBUG: 	 |-- ElasticSearch
2017-04-17 15:46:25,644 [cuckoo.core.startup] DEBUG: 	 |-- Feedback
2017-04-17 15:46:25,644 [cuckoo.core.startup] DEBUG: 	 |-- JsonDump
2017-04-17 15:46:25,644 [cuckoo.core.startup] DEBUG: 	 |-- Mattermost
2017-04-17 15:46:25,644 [cuckoo.core.startup] DEBUG: 	 |-- MISP
2017-04-17 15:46:25,645 [cuckoo.core.startup] DEBUG: 	 |-- Moloch
2017-04-17 15:46:25,645 [cuckoo.core.startup] DEBUG: 	 |-- MongoDB
2017-04-17 15:46:25,645 [cuckoo.core.startup] DEBUG: 	 |-- Notification
2017-04-17 15:46:25,645 [cuckoo.core.startup] DEBUG: 	 `-- SingleFile
2017-04-17 15:46:25,645 [cuckoo.core.startup] DEBUG: Checking for locked tasks..
2017-04-17 15:46:25,663 [cuckoo.core.startup] DEBUG: Checking for pending service tasks..2017-04-17 15:46:25,645 [cuckoo.core.startup] DEBUG: Checking for locked tasks..
2017-04-17 15:46:25,663 [cuckoo.core.startup] DEBUG: Checking for pending service tasks..
2017-04-17 15:46:25,674 [cuckoo.core.startup] WARNING: Unable to import yara (please compile from sources)
2017-04-17 15:46:25,675 [cuckoo.core.resultserver] DEBUG: ResultServer running on 192.168.0.200:2042.
2017-04-17 15:46:25,676 [cuckoo.core.scheduler] INFO: Using "virtualbox" as machine manager
2017-04-17 15:46:26,090 [cuckoo.machinery.virtualbox] DEBUG: Stopping vm IE8 - Win7
2017-04-17 15:46:26,285 [cuckoo.machinery.virtualbox] DEBUG: Restoring virtual machine IE8 - Win7 to its current snapshot
2017-04-17 15:46:26,404 [cuckoo.core.scheduler] INFO: Loaded 1 machine/s
2017-04-17 15:46:26,422 [cuckoo.core.scheduler] INFO: Waiting for analysis tasks.

샌드박스를 하나만 구성했기에 "Loaded 1 machine/s"가 출력된 것을 볼 수 있으며 어떠한 에러도 발생하지 않는다. 에러가 발생한다면 해당 에러를 잘 살펴보고 문제를 해결하는 것이 중요하다.

2.2. 쿡쿠 웹 서버 실행

이제 새로운 터미널을 열어 웹 서비스를 실행한다. 이 실행에 앞서 쿡쿠 코어 운영에 필요한 명령들을 살펴보자.

cuckoo --help

Usage: cuckoo [OPTIONS] COMMAND [ARGS]...

  Invokes the Cuckoo daemon or one of its subcommands.

  To be able to use different Cuckoo configurations on the same machine with
  the same Cuckoo installation, we use the so-called Cuckoo Working
  Directory (aka "CWD"). A default CWD is available, but may be overridden
  through the following options - listed in order of precedence.

  * Command-line option (--cwd)
  * Environment option ("CUCKOO_CWD")
  * Environment option ("CUCKOO")
  * Current directory (if the ".cwd" file exists)
  * Default value ("~/.cuckoo")

Options:
  -d, --debug             Enable verbose logging
  -q, --quiet             Only log warnings and critical messages
  --nolog                 Don't log to file.
  -m, --maxcount INTEGER  Maximum number of analyses to process
  --user TEXT             Drop privileges to this user
  --cwd TEXT              Cuckoo Working Directory
  --help                  Show this message and exit.

Commands:
  api          Operate the Cuckoo REST API.
  clean        Clean the CWD and associated databases.
  community    Fetch supplies from the Cuckoo Community.
  distributed  Distributed Cuckoo helper utilities.
  dnsserve     Custom DNS server.
  import       Imports an older Cuckoo setup into a new CWD.
  init         Initializes Cuckoo and its configuration.
  machine      Dynamically add/remove machines.
  migrate      Perform database migrations.
  process      Process raw task data into reports.
  rooter       Instantiates the Cuckoo Rooter.
  submit       Submit one or more files or URLs to Cuckoo.
  web          Operate the Cuckoo Web Interface.

옵션으로는 디버그 옵션, 경고와 크리티컬 에러 메시지만 출력하는 옵션, 로그를 남기지 않는 옵션, 분석 개수를 조절하는 옵션, 사용자 권한을 제어하는 옵션 그리고 CWD를 지정하는 옵션으로 구성된다. 명령으로는 api, clean등 다양한데 이들은 각각의 기능을 사용할 때 언급할 예정이다.

웹 서버를 실행하기 위한 명령으로는 web이 있다. 이 명령 뒤에 다시 --help 옵션을 사용하면 웹 서비스를 실행하기 위한 설정 방법을 볼 수 있다.

cuckoo web --help

Usage: cuckoo web [OPTIONS] [ARGS]...

  Operate the Cuckoo Web Interface.

  Use "--help" to get this help message and "help" to find Django's
  manage.py potential subcommands.

Options:
  -H, --host TEXT     Host to bind the Web Interface server on
  -p, --port INTEGER  Port to bind the Web Interface server on
  --uwsgi             Dump uWSGI configuration
  --nginx             Dump nginx configuration
  --help              Show this message and exit.

웹 서버는 -H 옵션 뒤에 호스트 아이피를, -p 옵션 뒤에 포트 번호를 입력하여 웹 서비스를 실행할 수 있다. 설명에 나와있듯이 --help 옵션이 아닌 help 옵션을 입력하면 장고 웹 인터페이스의 명령을 볼 수 있다. 어떤 옵션을 사용하든 기본으로 장고 웹 인터페이스를 사용한다.

cuckoo web -H 192.168.0.200 -p 8000

Performing system checks...

System check identified no issues (0 silenced).
April 17, 2017 - 15:55:06
Django version 1.8.4, using settings 'cuckoo.web.web.settings'
Starting development server at http://192.168.0.200:8000/
Quit the server with CONTROL-C.
[17/Apr/2017 15:55:30] "GET / HTTP/1.1" 200 21999

브라우저로 웹 서버에 접근하면 쿡쿠 웹 서비스를 볼 수 있다.

3. 마무리

쿡쿠 샌드박스의 가장 기초적인 동작을 기술해보았다. 쿡쿠 샌드박스는 이것만 있지 않다. 패턴 제작부터 기타 대형 오픈소스 프로젝트와의 연동 등 여러가지 형태로 확장할 수 있다. 이 모든 것을 다루기엔 많은 시간이 필요할 듯 싶다. 기회가 된다면 차근차근 하나씩 정리하고 싶다.

4. 참고 사이트


저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

댓글을 달아 주세요

티스토리 툴바