OpenCTI : Effective Cyber Threat Intelligence framework

서론

사이버 보안의 중요성은 기술의 발전과 함께 날로 증가하고 있으며, 이러한 환경에서 전문가들 간의 침해 지표(IoC) 및 위협 정보의 공유는 사이버 위협에 대응하고 예방하는 데 있어 점점 더 중요해지고 있다. 이러한 정보 공유는 조직이 사이버 공격의 초기 단계에서부터 위협을 식별하고 대응할 수 있게 해준다.

오늘은 이러한 필요에 부응하는 도구 중 하나인 OpenCTI(Open Cyber Threat Intelligence)에 대해 자세히 살펴보고자 한다. OpenCTI는 사이버 위협 인텔리전스를 관리하고 분석하는 오픈 소스 플랫폼으로, 다양한 출처의 위협 정보를 통합하고 이를 체계적으로 분석할 수 있는 기능을 제공한다.
이 플랫폼은 사용자가 위협 인텔리전스 데이터를 효과적으로 수집, 관리 및 공유할 수 있도록 지원하며, 이를 통해 보다 신속하고 정확한 사이버 위협 대응 전략을 수립할 수 있다.

이 글에서는 OpenCTI의 구축 방법과 OSINT 정보를 연결하는 방법을 설명할 예정이다.


OpenCTI란?

OpenCTI 대시보드 - 1

이전에 IoC에 대한 글을 작성하며 침해지표 공유에 대한 강조를 한 적이 있다.
OpenCTI는 이러한 침해지표를 공유하기 위한 사이버 위협 인텔리전스 플랫폼으로서 위협 정보의 구조화, 관리, 공유 및 분석을 가능하게 한다.


이 플랫폼은 보안 전문가들이 침해 지표를 더욱 효과적으로 처리하고, 위협 정보를 더 잘 이해하며, 보안 조치를 신속하게 취하는 것을 목적으로 설계되었다.

OpenCTI의 주요 특징은 다음과 같다.

주요 특징

데이터 통합: OpenCTI는 다양한 소스로부터 데이터를 수집하고 통합할 수 있는 능력을 제공한다. 이는 조직이 다양한 형태의 위협 인텔리전스를 하나의 플랫폼에서 관리하는 것을 가능하게 한다.

데이터 시각화: 사용자는 OpenCTI를 통해 통합된 데이터를 시각화할 수 있다. 이는 무수히 많은 침해정보를 분석가가 대략적으로 이해하는 데에 큰 도움이 된다.

확장성: OpenCTI는 확장 가능한 아키텍처를 가지고 있으며, 사용자의 능력만 있다면 조직의 요구에 맞게 맞춤화가 가능하다.

커뮤니티 지원: OpenCTI는 오픈 소스로 현재까지도 지속적인 업데이트와 개선이 이루어지고 있다.

데모 페이지도 운영하고 있으니 한번 확인해 보자.

OpenCTI - Cyber Threat Intelligence Platform

OpenCTI 환경 구축

그러면 직접 OpenCTI 환경을 구축해보자.일괄적으로 관리하는 위협 정보의 개수가 많은 만큼 어느 정도는 서버의 성능을 맞춰줄 필요가 있다.
본문에서 사용한 환경은 다음과 같다.

구축 환경

Ubuntu 20.04 LTS VM
vCPU 4개
16GB RAM
200GB HDD

OpenCTI는 Github, apt, Docker 등 여러 방식으로 배포가 되고 있는데, 본문에선 Docker를 통해 설치를 진행한다.

Docker 설치(Portainer)

  1. 본격적인 설치 전, repository를 업데이트하고 사전 요구 사항을 설치한다.
sudo apt get update
sudo apt get upgrade
sudo apt-get install apt-transport-https
sudo apt-get install ca-certificates
sudo apt-get install curl
sudo apt-get install gnupg-agent
sudo apt-get install software-properties-common

  1. GPG key를 추가한다. 정상적으로 추가되면 Fingerprint를 확인 가능하다.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88

  1. Docker 설치를 위한 Repository를 추가 후 설치를 진행한다.
    User 단위로 Docker 관리를 하기 위해 추가적인 권한 설정을 하면 편리하다.
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose
sudo docker version
sudo usermod -aG docker $USER

  1. 컨테이너를 일괄적으로 관리하기 위한 docker swarm을 설정해준다.
sudo docker swarm init --advertise-addr <IP>

  1. Docker Stack 사용을 위한 Portainer 설정 파일을 받아준다.
    Portainer는 컨테이너를 웹 기반으로 편하게 관리해줄 수 있는 도구다.
sudo mkdir -p /opt/portainer && cd /opt/portainer
sudo curl -L https://downloads.portainer.io/portainer-agent-stack.yml -o portainer-agent-stack.yml

  1. 설정 파일을 열고, ports 설정 부분을 다음과 같이 수정해준다.
    포트 충돌을 방지하기 위한 부분이다.
sudo vim portainer-agent-stack.yml
	> ...
	> ports:
	>   - "9443:9443"
	>   - "19000:9000"     # "9000:9000"을 "19000:9000" 으로 변경
	>   - "18000:8000"     # "8000:8000"을 "18000:8000" 으로 변경
	> ...

  1. 설정이 끝났다면, 다음 명령어를 통해 Portainer 실행을 위한 Docker Stack을 배포한다.
sudo docker stack deploy --compose-file=portainer-agent-stack.yml portainer

OpenCTI 설치

정상적으로 설치가 완료되었다면, {서버 주소}:19000 주소로 접속할 경우 Portainer 로그인 화면이 나온다.
계정을 생성 후 로그인 하자.

  1. 로그인을 하면 여러가지 메뉴가 보인다.
    현재는 OpenCTI Stack의 배포가 목적이니 Stack 메뉴에 들어가 "Add Stack"을 선택한다.
Portainer 메인 화면
  1. 이제 OpenCTI를 배포하기 위한 Compose 파일과, 설정 파일에서 사용하는 환경 변수 정의(.env)가 필요하다.
    두 파일 모두 OpenCTI의 Github Repository에서 배포하고 있으며, Compose 파일의 경우 그대로 복사해 붙여 넣으면 된다.
    Compose file env file
스택 생성 화면 - 1
스택 생성 화면 - 2
  1. .env 파일의 경우 수정이 필요하다.
    OpenCTI에서 사용할 계정 정보, *MinIO에서 사용할 계정 정보, 식별자로 사용할 UUIDv4가 필요하다.
    계정 정보의 경우 사용자에 맞게 수정해서 사용하면 되며, UUID의 경우 다음 사이트에서 발급해 사용하면 된다.
💡
*MinIO: Docker 버킷 및 데이터 관리 도구
Online UUID Generator Tool
  1. 설정이 완료되었다면 "Deploy the stack"을 누르고 배포를 시작한다.
    {서버 주소}:8080으로 접속할 수 있다.

OSINT 연결(Connector)

정상적으로 로그인했다면 아무 정보가 없는 대시보드 화면이 보인다.

OpenCTI 대시보드 - 2

위협 인텔리전스 플랫폼인 만큼 이를 관리하기 위한 정보를 추가해야한다.
OSINT 정보를 공유하고 있는 플랫폼은 여러 종류가 있는데, 규격에만 맞다면 어느 정보를 사용해도 상관 없다.

OSINT 채널 예시

AlienVault
C-TAS
Mandiant
MITRE ATT&CK
URLHaus
vxVault
...

다음으로 외부 플랫폼에서 API를 제공받아 OSINT 정보를 연결해보자.
별도로 사용하는 상용 서비스가 있다면 이를 추가해서 사용하는 것도 좋다.

  1. OpenCTI 스택 수정으로 이동해 이전 스택 구축 시 진행했던 화면으로 돌아간다.
  2. OpenCTI Connector 배포 페이지에서 OSINT를 제공받을 플랫폼 선택 후, compose 파일을 복사한다.
connectors/external-import at master · OpenCTI-Platform/connectors
OpenCTI Connectors. Contribute to OpenCTI-Platform/connectors development by creating an account on GitHub.

  1. 붙여넣기 전에 OpenCTI 주소나 UUID 등 수정 사항을 적용한다. 블록 최하단에 opencti 의존성을 추가해주자.
💡
UUID는 OpenCTI Stack에 사용한 것이 아닌 새로운 것이 필요하다.
Connector Compose - 1
Connector Compose - 2
  1. 수정한 Compose 파일을 기존 OpenCTI Compose 파일 하단에 구조에 맞춰 붙여넣는다.
    yaml 구조 상 Services 키 하위에 붙여넣으면 된다.
Connector Compose - 3
  1. "Update the Stack"을 누르면 이후 자동으로 연결이 진행되며, 대시 보드에서 업데이트 된 현황을 확인할 수 있다.
Connector 업데이트 후 OpenCTI 대시보드


마치며

지금까지 OpenCTI에 대한 간단한 설명과 환경 구축 방법에 대해 알아보았다.
OpenCTI는 사이버 위협 인텔리전스를 통합적으로 관리하고 분석하는 데 매우 유용한 도구이다. 사용자는 다양한 출처에서 수집된 정보를 한 곳에서 관리할 수 있으며, 사용자의 편의성과 더불어 좀 더 신속하고 효과적인 위협 대응이 가능해진다.

추후에는 사이버 위협 인텔리전스의 표현 규격인 STIX(Structured Threat Information eXpression)와 이를 공유하기 위한 프로토콜인 TAXII(Trusted Automated eXchange of Intelligence Information)에 대해 설명하고자 한다.

You've successfully subscribed to PLAINBIT
Great! Next, complete checkout to get full access to all premium content.
Error! Could not sign up. invalid link.
Welcome back! You've successfully signed in.
Error! Could not sign in. Please try again.
Success! Your account is fully activated, you now have access to all content.
Error! Stripe checkout failed.
Success! Your billing info is updated.
Error! Billing info update failed.