::: 정보보안 :::

MISP (Malware Information Sharing Platform)

곰탱이푸우 2021. 6. 5. 02:24

1. 소개

1.1. 개요

MISP는 악성코드 기반의 위협 데이터를 관리하는 악성코드 첩보 공유 플랫폼(Malware Information Sharing Platform)으로 오픈소스이다.

보안관제나 CERT, 또는 정보보안 부서에서 많이 활용하고 있는 것으로 알려져 있고, 오픈소스 TI 플랫폼 중에서 CRITs, YETI에 비해 가장 적극적으로 릴리즈 되고 있다.

 

공식 사이트

 

MISP - Open Source Threat Intelligence Platform & Open Standards For Threat Information Sharing (formely known as Malware Inform

The key is Automation Isn't it sad to have a lot of data and not use it because it's too much work? Thanks to MISP you can store your IOCs in a structured manner, and thus enjoy the correlation, automated exports for IDS, or SIEM, in STIX or OpenIOC and sy

www.misp-project.org

공식 GitHub

 

MISP Project

MISP Project - Open Source Threat Intelligence Platform & Open Standards For Threat Information Sharing - MISP Project

github.com

 

공식 Docker

 

MISP/misp-docker

MISP Docker (XME edition). Contribute to MISP/misp-docker development by creating an account on GitHub.

github.com

 

CoolAcid Docker
아래 Docker 이미지를 사용하면 실제 Production에 더 가까운 환경을 구성할 수 있다.

 

Docker Hub

 

registry.hub.docker.com

 

coolacid/docker-misp

A (nearly) production ready Dockered MISP. Contribute to coolacid/docker-misp development by creating an account on GitHub.

github.com

docker-compose.yml 파일과 DockerFile 파일 내에 git clone 코드 없이 Docker만 Pull 하므로 별도의 빌드 과정이 필요하지 않다.

라이선스는 AGPL 3.0 (GNU Affero GPL) 이다. 네트워크로 연결 된 경우, 즉 외부 사용자에게 서비스를 제공하는 경우에는 사용자에게 소스코드를 공개해야 한다.

 

 

 

1.2. 기능 설명

공식 홈페이지에서 제공하는 내용을 정리하면 다음과 같다.

1.2.1. 저장

  • 악성코드, 위협 정보, 사건, 공격자, 인텔리전스의 IoC와 지표를 저장하는 효율적인 데이터베이스
  • 위협 인텔리전스, 사고, 관련 요소의 복잡한 객체의 표현과 연결 가능한 데이터 모델
  • 구조화 된 형식의 데이터 저장으로 다양한 목적의 데이터베이스 자동화 (범죄 지표 + 사이버 보안 지표 결합)
  • 다양한 포맷의 가져오기 (OpenIOC, PlainText, GFI sandbox, Threat Connect CSV, MISP 포맷의 Bulk, Batch, free-text import)
  • 구조화 되지 않은 보고서를 MISP에 쉽게 통합 할 수 있는 유연한 free-text 가져오기
  • 외부 Threat Intel, OSINT, MISP 피드의 기본 목록 제공으로 가져오기와 통합 가능

1.2.2. 분석

  • 악성코드, 공격 캠페인, 분석 정보에서 특성과 지표 간의 자동 상관 관계 분석 (속성, 퍼지 해싱, CIDR 블록 매칭 등)
  • 이벤트의 그래프 표현으로 개체와 특성의 관계 분석
  • 분석가의 이벤트와 속성 정보 제공에 필요한 고급 필터링과 경고 목록 제공
  • 자체 분류 체계 (Taxonomy) 사용 가능, MISP 기존 분류 체계와 잘 알려진 분류 및 분류 체계 제공
  • 기존 위협 행위자, 멀웨어, RAT, 랜섬웨어 또는 MITER ATT & CK 등 MISP Galaxy 인텔리전스 용어집 제공
  • 이벤트, 속성, 지표의 생성과 업데이트, 공유를 위한 직관적인 그래픽 사용자 인터페이스 (그러나 직관적이지 않은..)

1.2.3. 공유

  • 다양한 배포 모델을 통한 공유와 자동 교환 가능
  • 외부 소스, 여러 MISP간의 이벤트와 속성을 자동으로 동기화
  • MISP 사용자가 속성과 지표에 대한 수정과 갱신 제안 가능
  • 다양한 포맷의 내보내기로 다른 시스템과 통합 (IDS - Suritaca, Snort, Bro, OpenIOC, PlainText, CSV, XML, JSON)
  • STIX 2.0 형식의 XML과 JSON의 내보내기/가져오기 가능
  • ZMQ, Kafaka를 통한 모든 변경 사항에 대한 실시간 배포와 구독 채널 제공
  • 공유 된 지표와 속성의 강조 기능 제공 (MISP UI, MISP 문서와 STIX의 API)

1.2.4. 확장

  • 자체 솔루션과 통합 가능한 다양한 PyMISP 라이브러리 제공, 자체 제작 API 사용 가능
  • misp-modulesPython의 확장 모듈 을 사용하여 MISP 확장 또는 보유 서비스와 통합

 

 

1.3. 특징 요약

위의 내용을 간략하게 요약하면 다음과 같다.

  • 공격 관련 기술/비기술 첩보 저장 위한 DB 포함
  • 위협 관련 첩보의 상관 관계 계산과 공유 용이
  • OpenIOC, 평문 (Plain Text), CSV, MISP, XML, JSON 포맷 지원
  • 침입 탐지와 차단 지원 (Snort, Suritaca, Yara 등 룰 생성과 내보내기 가능)

다양한 분석 도구 및 벤더 제품과 연동 가능하다. ELK와도 연동할 수 있다.

 

Tools

Many open source and proprietary tools integrate MISP support (MISP format or API) in order to extend their tools or MISP itself. A series of additional software are supported and handled by the MISP project. The additional software supported by the MISP p

www.misp-project.org

Docker 코드를 확인해보면 내부적으로 다음 도구들을 활용한 것으로 확인된다.

  • MySQL, REDIS, Apache 웹서버, PHP
  • OS는 Ubuntu, Kali, CentOS (RHEL), Debian, OpenBSD, NetBSD 등 지원 (공식적인 테스트는 Ubuntu, Kali 진행)
  • 기능 확장을 위한 PyMISP 지원

1.4. 예시

데이터 수집과 활용에 따라 다음과 같은 분석이 가능해진다. (출처 : https://github.com/MISP)

 

 

1.5. AGPL 라이선스 관련

개인적으로 연구하는 경우 개선/수정 사항은 라이선스 정책에 따라 '공개'하는게 좋다고 생각한다.

특히 기능 개선을 위해 코드를 수정을 진행한 경우 오픈소스 컨트리뷰터로 참여하는 것도 좋다. 개인적으로 의미있는 이력이 될 수 있다. (물론 코드 머지가 되어야 공식 컨트리뷰터로 인정 받는다.)

 

그러나 오픈소스를 회사에서 업무적으로 활용하는 경우에는 라이선스에 대한 사전 확인이 필수다.

오픈소스 라이선스의 공개 정책과 회사의 보안 규정에 명시 된 비공개 원칙이 자주 충돌하기 때문이다.

 

라이선스 관련 내용은 다음을 참고한다.

더보기

AGPL 라이선스에 대해 조사한 바에 의하면 데이터를 송수신하거나 파일로 저장하여 전달하는 것은 라이선스 정책을 위반하는 것이 아니다. (라이선스 전염이라는 표현을 사용한다.)

  • 사내에서만 사용 - 개인 또는 내부 사용 부합 (코드 공개 대상 아님)
  • 통신 대상이 사내 인프라인 경우 내부 사용 부합 (코드 공개 대상 아님)

사내 다른 인프라가 직접 MISP에 직접 접속하여 데이터를 가져가면 라이선스 전염이 발생한다.

  • MISP를 운영하는 부서의 구성원이 직접 접속하여 사용하는 것은 예외 (내부 사용이므로...)
  • 데이터 전달은 파일로 떨구거나 REST API 또는 메시지 큐 (Kafka, REDIS) 이

필요한 데이터를 메시지 큐나 파일을 통해서 서로 전달하면 코드 공개 의무가 소멸된다. (회피 가능)

  • AGPL 내부에 저장된 데이터는 AGPL이 아니다.
  • 문서작성 프로그램이 AGPL이라도 문서 파일은 AGPL이 아니기 때문이다

메시지 큐를 사용하는 경우 다음과 같은 방법을 생각해 볼 수 있다.

  • Kafka와 같은 메시지 큐를 구독하는 서비스를 MISP 앞단에 둔다.
  • 사내 인프라가 특정 정보가 필요한 경우 정보를 요청하는 메시지를 발행한다.
  • 메시지 큐에 수신한 요청이 존재하면 해당 메시지를 구독하여 MISP에서 처리하고 결과를 다시 메시지큐에 발행한다.
  • 사내 다른 인프라는 해당 메시지큐를 구독하고 처리 결과가 존재하면 가져와서 원하는 방식으로 처리한다

정리하면 다음과 같다

  • 조직 외부 사용자가 직접 접속하여 서비스를 사용하는 경우 코드 공개 필요
  • 사내에서 사용하고 통신하는 대상이 사내 인프라인 경우 코드 공개 대상 아님

즉 외부에 상용/무료 공개 및 직접 접근 가능 여부가 핵심

2. Docker 셋팅 방법

Production 환경에서는 단계별로 셋팅하거나 Ansible을 활용한 셋팅이 필요하지만, 테스트와 기능 확인이 주 목적이므로 Docker를 이용한 셋팅을 진행한다.

 

Docker 이미지를 빌드하는 것은 다음 링크를 중심으로 설명한다. (2021-05-25 현재 2.1.413 버전)
https://github.com/MISP/misp-docker

일단 Production 환경이 아닌, 테스트 목적의 이미지를 빌드하는 것에 중점을 둔다.

  • Production 환경은 본문 상단의 coolacid의 Docker 이미지를 활용하는 것이 좋다.
  • coolacid의 Docker 이미지는 이미 빌드가 다 된 Docker Image를 Docker Hub에서 pull하고, 별도로 docker-compose up만 하므로 보다 쉽게 실행 가능하다
github 접근이 차단 된 경우 진행 불가

GitHub 접근이 불가능하거나, git clone 명령을 사용하는 것을 차단한 환경에서는 해당 Docker 이미지 빌드가 불가능하다.

MISP 설치 스크립트를 살펴보면 다음과 같이 git clone이 다수 사용된 것을 확인할 수 있다.
따라서 Private Repository를 활용한 Docker 베이스 이미지를 가져오는 것은 가능하지만, MISP 설치 스크립트에 포함된 git clone 명령이 응답 없음 처리가 되므로 Docker 이미지 생성이 불가능하다.

2.1. Docker 이미지 빌드

github의 misp-docker 소스 코드를 다운로드하고 압축을 해제한다. 또는 git clone으로 해당 커밋을 클론한다.

 

docker-compose build 명령 수행 전에 .env 파일을 수정한다.

  • MISP_BASEURL=https://127.0.0.1/
  • url prefix (https:// )가 없으면 웹페이지 생성때 URL이 꼬여서 내부 URL이 정상적으로 생성되지 않는다.

압축을 해제한 폴더에서 docker-compose up을 실행한다.

MISP를 인터넷이나 github 이용이 제한되는 곳에서 사용하기 원하는 경우 아래를 참고한다.

 

 

2.2. 인터넷 또는 github 이용이 제한되는 경우

폐쇄망이나 github 활용이 제한적인 네트워크 환경에서는 Docker 이미지가 정상적으로 생성되지 않기 때문에 인터넷망에서 Docker Image를 생성하고 옮기는 방식을 사용한다.

  • MISP는 feed 기능을 통해 외부 공개 정보를 제공 받을 수 있는데, 네트워크 환경 제약이 많은 경우 이러한 정보를 활용할 수 없다.
  • MISP는 다수의 MISP가 연동할 수 있으므로, 인터넷 환경의 외부 feed용 MISP를 구축하고 내부 MISP와 연동하는 방식을 고려해야 한다.
  • 인터넷 환경의 MISP를 우선 구축하고 (익숙해지고), 이후 내부망으로 확장하여 기존 데이터로 확장하는 것을 추천한다.

구체적인 진행 방법은 다음을 참고한다.

더보기

2.2.1. docker 이미지 파일 저장

인터넷망에서 정상적으로 Docker 이미지가 생성되었고, docker save 명령을 이용하여 docker 이미지를 내부망으로 옮긴다.

docker save

# docker save 명령을 이용하면 image의 layer 정보를 유지한 상태로 tar 포맷으로 압축한다.
# (export 명령은 layer 정보가 통합하여 tar 포맷으로 압축된다) 

# -o 옵션은 저장할 파일명을 지정할 수 있다. 
# 해당 옵션이 없으면 stdout으로 지정되기 때문에 반드시 사용해야 한다. 

> docker save -o misp_web.tar misp_web 
> docker save -o misp_db.tar misp_db

 

 

2.2.2. docker 이미지 파일 로드

tar 파일을 내부망으로 옮긴 다음 docker load 명령을 이용하여 docker 이미지를 로드한다. misp_web은 약 4.3G, misp_db는 약 600M 정도이다.

docker load

# docker load 명령을 이용하면 tar 포맷으로 압축 된 image의 layer 정보를 유지한 상태로 읽어온다. 
# (import= 명령은 layer 정보가 통합한 tar 포맷을 읽는데 사용한다.) 

# -i 옵션은 로드할 파일명을 지정할 수 있다. 
# 해당 옵션이 없으면 stdin으로 지정되기 때문에 반드시 사용해야 한다. 

> docker load -i misp_web.tar 
> docker load -i misp_db.tar

2.2.3. docker-compose 코드 다운로드 및 실행

위의 과정이 마무리되었으면 샘플망에서 아래 경로의 코드를 다운로드하고 압축을 해제한다. (굳이 git clone 할 필요 없이 zip 파일 다운로드해도 된다.)
https://github.com/MISP/misp-docker

터미널을 실행하고 압축을 해제한 경로로 이동하여 docker-compose up을 실행하면 정상적으로 실행된다.

2.3. MISP 실행

처음 실행한 경우 db 테이블과 MISP 코드를 초기화 하는 과정이 진행되어 약 2~3분간 기다려야 한다.

다음과 같은 화면이 나오면 정상적으로 시작된 것이다.

실행이 완료되면 웹 브라우저를 실행하고 MISP_BASEURL 옵션에 지정한 경로로 이동하면 다음과 같은 로그인 창을 확인할 수 있다.

3. MISP 사용

3.1. 초기 로그인

초기 로그인 계정 정보는 admin@admin.test와 admin이고 로그인 직후 패스워드를 수정해야 한다.

(대문자, 소문자, 숫자 포함 10자 이상)

3.2. 초기 화면

비밀번호를 수정하고 상단 메뉴의 Home으로 이동하면 다음과 같은 화면이 출력된다.

3.3. 기능 확인

이제 무엇을 해야할지 막막하다면 당연하다. 오픈소스는 일반적으로 다음과 같은 공통 특징이 있다.

  • UI/UX 완전 별로 (빠른 기능 파악은 거의 불가능)
  • 매뉴얼 허접 (삽질 필요)
  • 보안 오픈소스는 생각보다 자료가 많이 없음 (삽질 필요)
  • 한글화는 진즉에 포기 (영어 공부 열심히)

4. 참고 자료

4.1. 공식 매뉴얼

매뉴얼은 다음 페이지를 참고한다. (w. 구글 번역)

HTML 페이지가 가장 보기 편한 구조로 되어있다.

 

Introduction · User guide of MISP intelligence sharing platform

Last modified: Tue Apr 13 2021 14:18:34 GMT+0200 (Central European Summer Time) Introduction User guide for MISP - The Open Source Threat Intelligence Sharing Platform. This user guide is intended for ICT professionals such as security analysts, security i

www.circl.lu

역할에 따른 목적별 Quick Guide는 다음 문서를 참고한다.

 

User stories · User guide of MISP intelligence sharing platform

No results matching ""

www.circl.lu

즉, 이제부터 삽질의 시간이다.

단기간에 정리 될 것은 아니므로, 천천히 매뉴얼을 참고하여 사용해보면서 주요 기능들을 정리한다.
(MISP는 더 많은 테스트를 진행하고 추가 포스팅을 진행할 예정이다)

 

 

4.2. 활용 참고자료

MISP에 대한 자료는 공식 문서 말고는 의외로 찾아보기 많이 어렵다. 특히 한글 문서는 찾아보기가 매우 어렵다.
해당 툴의 보안업계 평판에 비해서는 의외이긴 한데 생각해보면 충분히 그럴 수 있는 부분이다.

  • 보안 업체는 오픈소스 사용에 적극적이지 않다 (특히 국내 업체의 경우)
  • 일반 업체의 보안 부서가 경제적으로 여유가 있는 경우 보안 업체의 상용 제품을 사용한다. (오픈소스로 고생할 필요가??)
  • 일반 업체의 보안 부서가 경제적으로 여유가 없는 경우 오픈소스로 삽질할 여유도 없다.
  • 개인 (보안 연구가?)이 활용하는 경우가 있을텐데, 정보 공개를 꺼리는 국내 정보보안 문화와 보안 데이터의 민감성을 고려하면 오픈하기 쉽지 않다.

이러한 이유로 정보를 찾아보던 중 Youtube 동영상을 찾았는데 Quick Start로 경험하기 상당히 괜찮은 것 같아서 링크를 먼저 공유한다.
(해당 영상을 보고 따라하고 내용을 정리할 예정이다)

 

4.2.1. MISP 공식 튜토리얼

아래 펼치기를 누르면 MISP의 주요 공식 튜토리얼 영상을 확인 할 수 있다.

더보기
MISP Tutorial - Enablings Feeds
MISP Tutorial - Create an Event - Part1
MISP Event graph demo

Jordan M. Schroeder 

 

Jordan M. Schroeder

"Making CISOs Work" for business, people, and the future of the profession. Whether you are a CISO, a business leader, a cyber security leader, or someone starting out in the information security field, you will learn the non-technical areas of security, i

www.youtube.com

초반엔 열심히 찍다가 요즘 구독자와 조회수가 별로 없어서 그런지 잘 안올리는 것 같다. (구독자 484명이다.)
보안 주제는 구독자를 늘리기 어렵다는 걸 몰랐나보다.
Quick Start로 제공하는 영상을 상당히 잘 정리한 영상이다. (자료 찾기 너무 힘들었는데 정리를 잘해줘서 구독했다..)

아래 펼치기를 누르면 주요 튜토리얼 영상을 확인 할 수 있다.

더보기
What is MISP | Non-technical explainer
Intro to MISP | Demo of the MISP virtual machine
Enhance Security Event Data Using MISP | Demo Using the MISP VM
Bulk IoC Research with MISP | Demo with the MISP VM

5. 결론

User Manual의 Quick Guide를 보고 따라해 보는 것이 좋을 것 같다.

  • 단, 저자들도 tl;dr (too long, don't read - 너무 길어서 읽지 않았다라는 인터넷 속어)로 표기해놓은 것으로 보아서는 삽질이 필요해보인다. (천천히 진행하자)
  • 침해사고 대응 플랫폼인 TheHive가 MISP와 연동이 아주 잘 된다고 하니, TheHive 구축까지 진행해보고 사용 방법을 정리하는 것이 좋을 것 같다

MISP의 경우 UI는 진짜 허접 느낌이 많이 들지만, 위의 동영상과 기술 문서를 읽어보면 활용도가 무궁무진하다.
특히 내부 보안 인프라에 연동하거나, STIX 기반으로 조직 내부와 외부의 인텔리전스들을 활용할 수 있는 점이 상당히 매력적이다.


MISP외에도 CRITs와 YETI를 검토했는데 MISP를 선택했다.
CRITs와 YETI에 대해 정리한 이후에 MISP의 추가 기능들을 정리할 계획이다.

 

진짜 결론!!
일단 MISP 기능 정리는 여기까지!