1. 소개
1.1. 개요
YETI는 위협 인텔리전스의 구성 요소에 대한 구성과 분석이 가능한 일상 위협 인텔리전스 플랫폼(Your Everyday Threat Intelligence)으로 오픈소스이다.
MISP를 Feed로 사용할 수 있고, TheHive에 Yeti를 네트워크 아티팩트의 보강 소스로 사용 할 수 있다.
또한 침해사고 대응 플랫폼인 FIR, 악성코드 자동 분석 플랫폼인 FIME 등과 연동 가능하다.
공식사이트
GitHub
docker
라이선스는 Apache 2.0 이며, Apache 라이선스 명시만 되어 있으면 코드 공개 의무 없이 소스코드 수정 및 서비스 적용이 가능하다. (GPL이나 AGPL이 아니라 그런지 MISP보다 커밋이 적다)
1.2. 특징
기본적인 특징은 다음과 같다.
- 위협 관련 일반적 지식, 관측 요소, IoC, 전술과 기술 및 절차 (TTPs) 지원
- 기존 첩보 추가 통합과 추가 지표 강화 가능 (도메인, WHOIS 등)
- MISP 인스턴스(Insatnce), JSON과 XML 피드 (Feed), 여러 샌드박스 데이터 활용 가능
UI는 상당히 직관적이나 제공하는 기능은 많지 않다. 셋팅하고 DataFlow 항목에 들어가보면 사이버위협 관련 OSINT 들은 상당 부분 Feed로 수집 가능할 것으로 보인다.
- 보안 벤더를 제외한 유무료 OSINT 들을 확인할 수 있다 (VirusTotal, PhishTank, OpenPhish 등)
- 자체 셋팅한 MISP도 Feed로 사용할 수 있다.
관련 자료에 의하면 "분석가들은 공통 지표를 활용하여 각자의 방식으로 분석하기 때문에, YETI는 공통의 지표를 제공하는 것이 핵심 기능이다."라고 되어 있다. (인텔리전스 기반 사고대응 - 에이콘출판사)
악성코드, TTPs, 익스플로잇, 캠페인, 공격조직 등의 정보를 관리할 수 있지만, 일정 부분 수작업을 필요로 한다.
- 다수의 REST API를 제공하고, Apache 2.0 라이선스이므로 해당 라이선스들을 이용하여 자유롭게 커스터마이징 해서 사용할 수 있는 것은 장점이다.
- 그러나 제약이 없는 라이선스라서 사용 사례나 관련 자료를 찾는 것이 쉽지 않다.
공식적인 가이드는 없으나 yeti_to_elasticsearch.py 파일이 존재하는 것으로 보아 ElasticSearch와 연동 가능할 것으로 판단된다.
Docker 코드를 확인해보면 내부적으로 다음 도구들을 활용한 것으로 확인된다.
- MongoDB, Redis, Celery, nginx 등
- CentOS, Debian, Ubuntu 등 지원
- ElasticSearch 연동 가능
- FIR (Fast Incident Response), FAME (FAME Automates Malware Evaluation)와 연동 가능
TAXII는 구버전인 1.x 버전을 지원하는 것으로 파악되고, STIX는 명시적으로 기능을 명세하지 않았다.
Export 가이드도 일부 항목에 대한 CSV 추출 밖에 없는 점은 많이 아쉬운 부분이다. 대신 REST API를 통해 JSON 형태로 조회하거나 데이터 추출이 가능하다.
1.3. 예시
데이터 수집과 활용에 따라 다음과 같은 분석이 가능해진다. (출처 : https://yeti-platform.github.io/#blog)
Instantly search through millions of observables |
Easily track campaigns, related observables, malware, actors |
Enrich investigations with relationship graphs |
Easily add new data feeds |
Create custom analytics to automatically enrich observables |
2. Docker 셋팅 방법
Production 환경에서는 단계별로 셋팅하거나 Ensible을 활용한 셋팅이 필요하지만, 테스트와 기능 확인이 주 목적이므로 Docker를 이용한 셋팅을 진행한다.
폐쇄망이나 외부 통신이 제한되는 망에서는 Docker 이미지가 정상적으로 생성되지 않는다. 따라서 이런 환경에서 사용을 원하는 경우 인터넷 환경에서 Docker Image를 생성하고 옮기는 방식을 사용한다.
외부 통신이 제한 되는 경우 진행 불가
일반적으로 외부 통신이 제한 되는 경우 방화벽 정책으로 인해 외부 소스에 대한 접근이 어렵다. 보통 브라우저를 통한 80, 443 포트 이용은 가능하지만, 다른 툴들은 제약 사항이 많다.
YETI의 Dockerfile 코드를 살펴보면 외부 소스를 통해 apt 설치를 진행하는 부분이 존재한다.
따라서 외부 통신이 제한 되는 경우 내부의 사설 리파지토리를 통한 Docker 베이스 이미지를 가져오는 것은 정상적인 진행이 가능하지만, YETI 설치 스크립트에 포함된 외부 URL로 인해 Docker 이미지 생성이 불가능하다.
기본적인 Docker 이미지 생성은 다음 링크를 참고한다. (2021-05-26 현재 1.6.1 버전)
인터넷 환경에서 정상적으로 Docker 이미지가 생성되었고, docker save 명령을 이용하여 docker 이미지를 내부망으로 옮긴다.
docker save
# docker save 명령을 이용하면 image의 layer 정보를 유지한 상태로 tar 포맷으로 압축한다.
# export 명령은 layer 정보가 통합하여 tar 포맷으로 압축된다
# -o 옵션은 저장할 파일명을 지정할 수 있다.
# 해당 옵션이 없으면 stdout으로 지정되기 때문에 반드시 사용해야 한다.
> docker save -o redis.tar redis
> docker save -o mongo.tar mongo
> docker save -o yeti1-master.tar yeti1-master
tar 파일을 내부망으로 옮긴 다음 docker load 명령을 이용하여 docker 이미지를 로드한다. yeti1-master는 약 1.2G, mongo는 약 410M, redis는 약 106M 정도이다.
docker load
# docker save 명령을 이용하면 image의 layer 정보를 유지한 상태로 tar 포맷으로 압축한다.
# export 명령은 layer 정보가 통합하여 tar 포맷으로 압축된다
# -o 옵션은 로드할 파일명을 지정할 수 있다.
# 해당 옵션이 없으면 stdin으로 지정되기 때문에 반드시 사용해야 한다.
> docker load -i redis.tar
> docker load -i mongo.tar
> docker load -i yeti1-master.tar
위의 과정이 마무리되었으면 내부망에서 아래 경로의 코드를 다운로드하고 압축을 해제한다.
(굳이 git clone 할 필요 없이 zip 파일 다운로드해도 된다.)
터미널을 실행하고 압축을 해제하고 extras/docker/dev 경로로 이동하여 docker-compose up을 실행하면 정상적으로 실행된다.
실행이 완료되면 웹 브라우저를 실행하고 http://localhost:5000 포트로 접속하면 초기 화면을 확인할 수 있다.
- 다른 포트로 사용하고자 하는 경우 -p 옵션으로 다른 포트를 5000번 포트로 포워딩 해줘야 한다.
- 초기 화면이 로그인 화면이 아니라 기능 페이지이고, 로그인 로그아웃 기능은 정상 동작하지 않는다. (Production 환경은 다를 수 있음)
3. 기능 분석
3.1. 기능 확인
이제 무엇을 해야할지 막막하다면 당연하다. 오픈소스는 일반적으로 다음과 같은 공통 특징이 있다.
- UI/UX 완전 별로 (빠른 기능 파악은 거의 불가능)
- 매뉴얼 허접 (삽질 필요)
- 보안 오픈소스는 생각보다 자료가 많이 없음 (삽질 필요)
- 한글화는 진즉에 포기 (영어 공부 열심히)
매뉴얼은 다음 페이지를 참고한다. (w. 구글 번역) 생각보다 내용이 풍부하지 않다.
다른 플랫폼과 연동 관련 내용은 다음 문서를 참고한다.
3.2. Observables
관측 가능한 항목 (Observables)들을 검색하거나 추가하는 메뉴이다. 파일 업로드도 가능하고, 탐색 (Browse)도 가능하다.
3.3. Indicators
입력 된 Entities에 대한 탐지 항목을 확인할 수 있다. 정규 표현식 (Regex)과 Yara Rule을 지원한다.
TTPs, 행위자, 악성코드, 익스플로잇, 캠페인 등을 조합한 특정 조건을 만족하는 결과들을 Indicator로 조회 할 수 있다. IoC 정리에 유효할 것으로 판단된다.
3.4. Entities
TTPs, 행위자, 악성코드, 익스플로잇, 캠페인 등 인텔리전스에 사용되는 정보 요소들을 조회할 수 있다. 이러한 요소들을 조합하면 인텔리전스로 생산할 수 있다.
3.5. Investigations
수집한 Entities들을 조합하여 조사 및 분석을 진행하는 항목으로 그래프로 표현 가능하다. (그래프 정리는 수작업 필요)
3.6. New
새로운 Indicators, Entities, Investigations 들을 입력할 수 있다.
TTP는 사이버 킬체인 7단계를 제공한다.
3.7. Settings
Dataflows에서는 다양한 유무료 OSINT 외부 소스들을 사용할 수 있다. 자체 구축한 MISP도 사용 가능하다.
스케쥴링 기능이 있어 주기적으로 데이터를 자동으로 수집한다.
Export와 Templates도 제공하는데 CSV만 지원하는 것으로 보인다. (JSON도 가능하려나?)
일단 STIX는 지원 안하는 것 같다.
Analytics는 내부에 Entity에 특정 지표가 수집되면 외부 분석 시스템에 분석 정보를 조회해서 가져오는 기능을 수행하는 것으로 파악된다.
4. 결론
소규모로 인텔리전스 기능을 테스트하고 IoC와 TTPs, 공격 주체 등의 인텔리전스 지표 관리를 시도하기에는 적합한 것으로 보인다. (MISP나 CRITs는 난이도가 좀 높은 편이다)
- 그러나 대규모로 확장하는데는 무리가 있을 것 같다. (개발 소요 필요)
- 좋게 표현하면 자유도가 높은 것으로 해석할 수 있고, 그런 이유로 MISP를 Feed로 사용하여 부족한 기능을 보완하려는 것 같다.
- TheHive에 인텔리전스 지표를 제공할 수 있어 단독으로 사용하기 보다는 다른 플랫폼과 조합하는 것이 좋을 것으로 판단된다.
YETI는 현실적으로 고객사(일반 업체)의 보안 부서와 같이 보안에 투자를 많이 하기는 어렵거나 연구 목적으로 활용하기에 알맞은 플랫폼으로 보인다.
- YETI는 MISP나 CRITs와 달리 필수적인 핵심 기능만 제공하는 단순함과 외부 다양한 소스들을 쉽고 빠르게 가져올 수 있는 것이 장점이다.
- STIX와 TAXII만 지원이 되어도 활용도가 좋았을 것 같은데 많이 아쉬운 부분이다.
- 특히 TAXII는 구버전인 1.x 지원, STIX는 공식 문서에 스펙이 없는 것으로 보아 해당 부분을 사용하려면 상당한 작업이 소요될 것으로 예상된다.
YETI로 감을 좀 잡고 MISP나 CRITs를 도전하면 도움이 될 것으로 보인다.
참고로 MISP를 사용하기로 최종 결정했는데 이유는 다음과 같다.
- YETI도 지표 강화를 위해 MISP를 사용해야 한다.
- 심플한 기능이 장점인데, 곧 단점이다.
- 그래프 분석이 자동으로 되면 좋은데, 이태리 장인의 마음으로 한땀 한땀 연결해줘야 한다.
- MISP - YETI - TheHive 구성과 MISP - TheHive 구성이 가능하여 굳이 YETI를 써야 하나 하는 생각이 든다.
이러한 이유로 당분간 YETI 보다는 MISP에 집중할 계획이다.
'::: 정보보안 :::' 카테고리의 다른 글
MISP 사용해보기 2 - Feed 추가와 데이터 다운로드 (0) | 2021.06.09 |
---|---|
MISP 사용해보기 1 - 기본 설정과 이벤트 추가 (0) | 2021.06.09 |
TheHive: a Scalable, Open Source and Free Security Incident Response Platform (4) | 2021.06.08 |
CRITs (Collaborative Reseach Into Threats) (0) | 2021.06.07 |
MISP (Malware Information Sharing Platform) (0) | 2021.06.05 |