1. 개요
DIKW 파라미드 라는 개념이 있다. 데이터가 쌓이면 정보가 만들어지고, 정보가 쌓이면 지식이 만들어 지고 이러한 지식은 지혜로 발전되어 간다는 의미를 가지고 있다. 과거 먼 조상들이 해온 모든 행동들이 쌓여 지금의 우리가 있듯이 이 파라미드 구조는 시대는 데이터가 쌓이고 많이 쌓여 빅데이터 시대가 왔고, 이 안에서 양질의 정보를 빼내기 위해 다양한 연구와 개발이 이루어지고 있다. 추출한 정보는 다시 하나의 새로운 지식의 밑거름이 되고 있다.
사이버 위협도 똑같다. 과거부터 지속되어 왔던 다양한 데이터들을 정리하고 분류하고 저장해두면 이는 새로운 위협에 대응할 수 있는 정보가 된다. 비록 아직은 각지에서 발생하는 데이터들이 하나로 취합하기엔 위협을 받은 기업의 소중한 데이터들이 공개될 수 있기에, 또한 공격자들이 또 다른 방법으로 새로운 위협을 가할 수 있기에 그리고 치고 빠지는 식의 실시간 공격을 공유하고 공개하기가 어려운 현실이다. 그럼에도 불구하고 신뢰할 수 있는 기관을 통해 다양한 정보들을 수집되고 가공될 필요가 있다.
해외에서는 미국 국방 기술 정보 센터(DTIC, Defense Technical Information Center)를 지원하는 미국 국방부(DoD, United States Department of Defense) 정보 분석 센터(IAC, Information Analysis Center)에 소속된 사이버 보안 및 정보 시스템 정보 분석 센터(CSIAC, Cyber Security & Information Systems Information Analysis Center)가 있다. 이 곳에서는 다양한 사이버 보안 분야의 정보를 이용하여 데이터를 가공해 정보를 생산하거나 시뮬레이션을 하고 있다. 이러한 활동은 사이버 보안 및 정보 기술에 관련있는 정보, 산업, 학계 등의 전문가들의 지식들을 활용한다.
국내의 대표적인 사례를 보자면, 2015년 1분기 KrCERT에서 발간한 사이버 침해사고 정보공유 세미나 자료집에서 상세히 설명하는 C-TAS (Cyber Threat Analysis & Share) 시스템이 있다. 소개 자료에서 C-TAS는 침해사고 정보 수집, 침해사고 종합 분석, 정보공유 3단계로 소개하고 있다. C-TAS는 기본적으로 정보를 교류하는 시스템이기 때문에 정보 제공을 해야 정보를 받아 볼 수 있는 구조를 가지고 있다. 국내 다양한 정보보안 분야의 기업들이 정보를 제공하고 제공받고 있지 않을까 생각한다.
이번 포스트는 GNU Affero GPL v3 라이선스를 사용하는 오픈소스 도구인 MISP(Malware Information Sharing Platform & Threat Sharing)를 소개한다. 이 도구 또한 사이버 위협을 공유하기 위해 제작된 도구로 사이버 보안에 있어 큰 과제인 조직간의 정보 공유를 위해 만들어졌다.
MISP 주요기능:
-
중앙 IOC 데이터베이스: 악성 코드 및 공격에 대한 기술적/비기술적 정보를 저장하고 외부 데이터 또한 로컬 데이터로 저장하여 운영할 수 있음
-
상관 관계: 자동으로 악성코드, 이벤트의 상관 관계를 샏성하고, 구조화된 형태로 데이터가 저장되는 특성을 가짐
-
내보내기: IDS 생성, OpenIOC, 일반 텍스트, xml 출력을 통한 다른 시스템과의 통합 (네트워크 IDS, 호스트 IDS, 기타 사용자 정의 도구 등)
-
가져오기: bulk 가져오기, batch 가져오기, OpenIOC로 부터 가져오기, GFI 샌드박스, ThreatConnect CSV 등 지원
-
데이터 공유: MISP를 사용하는 신뢰성 있는 집단간의 데이터 교환을 동기화를 통한 자동화 구현 가능
-
STIX 지원: STIX 형식으로 데이터를 내보내기 가능 (XML과 json)
2. 설치
Github 에서 INSTALL
디렉터리 안에 다양한 운영체제에서 설치하는 방법을 알려주고 있다. 이 중에 Ubuntu 14.04 에 설치하는 방법이 있는데, 데스크톱 버전이 아닌 서버 버전으로 제공하고 있다. 서버 버전의 설치과정에서 선택적으로 추가 설치가 가능한 패키지 중 LAMP와 OpenSSH Server가 있다. 하지만 데스크톱 버전에서는 직접 설치를 진행해야 한다.
또한 이 오픈소스는 다양한 보안적인 요소들도 함께 해결하며 설치를 진행한다. 이러한 이유로 사용자 계정에서 설치를 진행하다 중간에 막히는 경우가 있는데, 설정해야 하는 디렉터리가 관리자 계정이 아닌 경우 읽고 쓸 수 없도록 설정하기 때문이다. 이러한 이유로 root 계정으로 설치를 진행하는 것을 추천한다. (설치 명령에서 sudo 명령이 빠진 이유이기도 하다.)
2.1. 종속 패키지 설치
설정 파일의 수정이나 일부 특정 파일을 불러들이기 위해 다음과 같은 도구를 설치한다. 또한 MISP를 운영하기 위해 사용되는 응용 프로그램들을 설치하거나 운영하기 위해 종속되는 기타 다른 프로그램들을 설치한다.
apt-get update && upgrade
apt-get install vim curl zip python-dev python-pip make git redis-server libxml2-dev libxslt-dev zlib1g-dev
2.2. LAMP 설치
LAMP는 Linux, Apache, MySQL, PHP의 약자이다. 즉 웹 서버를 올리기 위한 웹 애플리케이션(Apache), 데이터베이스(MySQL), 웹 서버 언어(PHP)를 설치한다. 설치하는 과정에 발생하는 입력구간은 비밀번호를 입력한다.
apt-get install apache2 mysql-server php5-mysql php5 php5-dev libapache2-mod-php5 php5-mcrypt php-pear
그리고 PHP 언어의 확장 기능을 설치하기 위해 PHP Pear
도구를 설치하여 다음과 같이 추가 확장 기능을 설치한다.
pear install Crypt_GPG
pear install Net_GeoIP
2.3. MISP 소스코드 다운로드
MISP 소스코드는 웹 디렉터리인 /var/www/
디렉터리에 다운로드 받는다. 그리고 git과 파일 시스템 권한 차이를 무시하도록 설정한다.
cd /var/www/
git clone https://github.com/MISP/MISP.git
cd /var/www/MISP
git config core.filemode false
2.4. CybOX와 STIX 설치
앞서 설명한 것과 같이 STIX 형식은 XML과 json 형식을 의미하며, 이와 같은 방식으로 정보를 저장하고 교류하도록 만든 하나의 형태이다. 이 라이브러리가 사용하는 체계는 Mitre社에서 만들었다. 이 회사는 미연방정부의 지원하에 R&D사업을 운영하는 비영리단체로 사이버 시큐리티에서 발생 가능한 모든 것들을 다 정리하려고 하는 것 같다. 그들이 만드는 방대한 양의 자료와 체계들을 보고 있으면 "어떻게 저렇게 할 수 있을까?" 라는 생각이 든다. Mitre社의 STIX 정보를 활용하기 위해 다음과 같이 cybox
와 stix
파이썬 라이브러리를 설치한다.
cd /var/www/MISP/app/files/scripts
git clone https://github.com/CybOXProject/python-cybox.git
git clone https://github.com/STIXProject/python-stix.git
cd /var/www/MISP/app/files/scripts/python-cybox
python setup.py install
cd /var/www/MISP/app/files/scripts/python-stix
python setup.py install
2.5. CakePHP 설치
CakePHP
는 PHP로 만든 웹 프레임워크이다. 파이썬에서는 Django
, 루비에서는 Ruby on Rails
와 같이 언어별 웹 프레임워크들이 인기를 끌면서 만들게 되었다. MISP는 CakePHP
를 기반으로 운영되며 다음과 같이 설치를 진행할 수 있다. 추가로 CakeResque
플러그인을 설치하는데 이 플러그인은 백그라운드에서 동작하는 스케쥴러를 관리하는 역할을 한다.
apt-get install php5-redis
cd /var/www/MISP
git submodule init
git submodule update
cd /var/www/MISP/app
curl -s https://getcomposer.org/installer | php
php composer.phar require kamisama/cake-resque:4.1.2
php composer.phar config vendor-dir Vendor
php composer.phar install
pecl install redis
설치가 완료 되었으면 php.ini
파일에 다음과 같이 extension=redis.so
문자열을 추가하여 기능을 활성화 한다.
vim /etc/php5/apache2/php.ini
/etc/init.d/apache2 restart
다음과 같이 스케줄러에 등록하여 운영할 수 있게 설정 파일을 복사한다.
cp -fa /var/www/MISP/INSTALL/setup/config.php /var/www/MISP/app/Plugin/CakeResque/Config/config.php
3. 설정
앞서 설치한 도구들을 설정, 운영하는 웹 서버의 보안을 위한 설정 그리고 최종적으로 설정하고 운영하려고 하는 MISP 설정을 진행한다.
3.1. 퍼미션 설정
관리자를 제외한 다른 사용자들이 MISP의 운영과 관련된 설정을 할 수 없게 퍼미션을 설정한다. MISP 디렉터리의 사용자와 사용자 그룹은 www-data
로 설정한다.
chown -R www-data:www-data /var/www/MISP
chmod -R 750 /var/www/MISP
chmod -R g+ws /var/www/MISP/app/tmp
chmod -R g+ws /var/www/MISP/app/files
chmod -R g+ws /var/www/MISP/app/files/scripts/tmp
3.2. 데이터베이스 설정
설치한 mysql
데이터베이스 쉘에 접근하여 다음과 같이 명령을 입력한다. misp
데이터베이스를 생성하고 해당 데이터베이스는 로컬호스트만 접근이 가능하게, 그리고 해당 데이터베이스를 이용할 때 패스워드를 묻게 하기 위해 설정한다. 테스트를 위한 목적이기에 misp
데이터베이스 패스워드도 misp
로 설정한다.
mysql -u root -p
create database misp;
grant usage on *.* to misp@localhost identified by 'misp';
grant all privileges on misp.* to misp@localhost ;
exit
미리 구성된 MYSQL 쿼리문을 통해 misp
데이터베이스를 구성한다.
cd /var/www/MISP
mysql -u misp -p misp < INSTALL/MYSQL.sql
3.3. 아파치 설정
이제 웹 애플리케이션을 담당하는 아파치 서버를 설정한다. 설정이 끝나면 웹 애플리케이션 서비스를 재시작한다.
/var/www/MISP/app/webroot/
/var/www/MISP/INSTALL/apache.misp
cp /var/www/MISP/INSTALL/apache.misp /etc/apache2/sites-available/misp.conf
a2dissite 000-default
a2ensite misp
a2enmod rewrite
service apache2 reload
3.4. MISP 설정
MISP 설정을 하기 위해서 다음 4 가지 파일을 /var/www/MISP/app/Config
디렉터리에 복사한다.
cd /var/www/MISP/app/Config
cp -a bootstrap.default.php bootstrap.php
cp -a database.default.php database.php
cp -a core.default.php core.php
cp -a config.default.php config.php
database.php
파일에서는 데이터베이스를 위한 설정을 진행한다. 데이터베이스의 아이디, 패스워드, 포트, 데이터베이스 이름에 대해 설정을 한다. 해당 설정은 database.php
파일의 63 ~ 70 라인에서 확인할 수 있다.
bootstrap.php
에서는 미리 입력된 설정 내용인 맨 마지막 줄의 주석을 해제한다. 해당 부분은 bootstrap.php
의 147 ~ 149 라인에서 확인 할 수 있다.
core.php
또한 미리 설정된 내용인 맨 마지막 줄의 주석을 해제한다. 해당 부분은 core.php
의 281번 라인에서 확인 할 수 있다.
다음 설정은 /var/www/MISP/app/Config/config.php
파일에 설정되어 있는 salt 키를 수정하는 작업이다. 이 값은 임의의 값을 입력하면 된다.
소금을 의미하는 salt는 단방향 해시 함수를 보완하기 위해 나오는 암호화의 한 기술로, 임의의 값(salt)와 패스워드를 합쳐 해시 함수를 통과 시키면 암호 다이제스트를 생성해내는 역할을 한다.
현재 salt가 기본값으로 구성되어 있기 때문에 새로운 값으로 수정해야 하지만, 현재 테스트를 위해 설치하기 때문에 수정하지 않고 진행한다.
MISP 설정 파일의 퍼미션과 사용자 그룹을 설정한다.
chown -R www-data:www-data /var/www/MISP/app/Config
chmod -R 750 /var/www/MISP/app/Config
3.5. GnuPG 설정
이제 GnuPG
를 설정한다. GnuPG
는 통신하거나 데이터를 저장하는 과정에서 보안성을 향상시키기 위해 암호화하고 관리하는 도구이다. 해당 설치를 수월하게 하기 위해서 다음과 같이 추가 도구와 설정을 진행한다.
apt-get install rng-tools
다음 /etc/default/rng-tools
파일에 HRNGDEVIE=/dev/urandom
문자열을 추가한다.
설정이 끝나면 rng-tools
데몬을 재시작 한다.
/etc/init.d/rng-tools restart
설정하는 과정에서 추천하는 암호화 알고리즘은 RSA
이다. 그 외 설정은 기본 설정으로 GnuPG
설정을 마무리 지을 수 있다. 마지막 라인에서 입력하는 이메일은 설정하는 과정에서 입력한 이메일과 동일해야한다.
mkdir /var/www/MISP/.gnupg
chown www-data:www-data /var/www/MISP/.gnupg
chmod 700 /var/www/MISP/.gnupg
sudo -u www-data gpg --homedir /var/www/MISP/.gnupg --gen-key
sudo -u www-data gpg --homedir /var/www/MISP/.gnupg --export --armor hakawati@naver.com > /var/www/MISP/app/webroot/gpg.asc
4. MISP 시작
MISP 서비스를 백그라운드에서 동작하기 위해 미리 만들어진 배시 스크립트를 실행한다. 그림과 같이 초록색으로 Done
가 출력되는 것을 확인할 수 있다.
/var/www/MISP/app/Console/worker/start.sh
재 부팅시 자동으로 서비스가 동작하도록 rc.local
파일의 exit 0
다음 라인에 su www-data -c 'bash /var/www/MISP/app/Console/worker/start.sh'
추가한다.
chmod +x /var/www/MISP/app/Console/worker/start.sh
vim /etc/rc.local
MISP 운영과 설치하는 과정에서 문제가 발생할 시 다음 위치에 생성되는 로그 파일을 확인할 수 있다. 마지막 로그는 생성 된 날짜에 따라 파일명이 달라진다.
/var/www/MISP/app/tmp/logs/error.log
/var/www/MISP/app/tmp/logs/resque-worker-error.log
/var/www/MISP/app/tmp/logs/resque-scheduler-error.log
/var/www/MISP/app/tmp/logs/resque-2015-01-01.log
4.1. 로그인
이제 MISP 설치를 한 우분투 아이피로 브라우저로 웹 애플리케이션에 접속한다. 최초 로그인은 아이디 admin@admin.test
패스워드 admin
으로 접속이 가능하다.
최초 로그인 하면, 바로 비밀번호 변경을 강요한다. 비밀번호는 대문자, 소문자, 숫자, 특수문자를 섞어 만들어야 변경이 가능하다.
이제 MISP를 테스트 할 수 있다. 자세한 사용 방법은 해당 웹 애플리케이션에서 제공하는 가이드라인을 참조한다.
5. 참조 사이트
-
http://en.wikipedia.org/wiki/Cyber_Security_and_Information_Systems_Information_Analysis_Center
- https://www.krcert.or.kr/kor/data/reportView.jsp?p_bulletin_writing_sequence=22668&hc_location=ufi
- https://www.howtoforge.com/helping-the-random-number-generator-to-gain-enough-entropy-with-rng-tools-debian-lenny
'Information Security > OpenSource' 카테고리의 다른 글
How to install libemu & pylibemu on Ubuntu 14.04 (0) | 2015.06.30 |
---|---|
SPT (Simple Phishing Test) (0) | 2015.05.26 |
Cuckoo Sandbox 1.2 release (2) | 2015.03.05 |
How to install IDA(32bit) on Ubuntu(64bit) (0) | 2015.01.26 |
vt-tool - Find the name of the evil (0) | 2015.01.18 |