본문 바로가기
모의해킹 (WAPT)

OTX Threat Intelligence API 정보 수집 및 IoC Hunting 자동화

by 날으는물고기 2024. 10. 25.

OTX Threat Intelligence API 정보 수집 및 IoC Hunting 자동화

Threat Hunting - CommSec Cyber Security

OTX(Open Threat Exchange)는 AlienVault에서 운영하는 플랫폼으로, 여러 보안 위협 정보를 제공합니다. OTX Threat Intelligence(OTX TI) 정보를 API로 수집하는 방법입니다.

OTX API 사용하기

  1. API Key 발급
    • OTX API를 사용하려면 먼저 API 키를 발급받아야 합니다. OTX 웹사이트에서 회원가입 후 API 키를 생성할 수 있습니다.
  2. API 호출
    • OTX는 RESTful API를 제공하며, 다양한 엔드포인트를 통해 정보를 조회할 수 있습니다. 예를 들어, 특정 Indicators of Compromise(IoC)에 대한 정보를 조회하거나, 특정 그룹의 트랜드를 확인할 수 있습니다.
  3. 인증과 요청
    • API 요청 시 HTTP 요청을 보내고, 이를 인증하기 위해 발급받은 API 키를 사용합니다. 일반적으로 HTTP 요청의 Header에 API 키를 포함하여 전송합니다.
  4. 응답 처리
    • OTX API는 JSON 형식으로 응답을 제공합니다. 이를 파싱하여 필요한 정보를 추출하고, 보안 이벤트 모니터링이나 분석에 활용할 수 있습니다.

Python을 이용한 OTX API 호출

Python에서는 requests 라이브러리를 사용하여 OTX API를 호출할 수 있습니다. 예시 코드는 다음과 같습니다:

import requests

# OTX API 엔드포인트 URL
url = 'https://otx.alienvault.com/api/v1/indicators/domain/google.com/general'

# OTX에서 발급받은 API 키
api_key = 'your_api_key_here'

# HTTP Header 설정
headers = {
    'X-OTX-API-KEY': api_key,
}

# API 호출
response = requests.get(url, headers=headers)

# 응답 처리
if response.status_code == 200:
    data = response.json()
    # 여기서부터 원하는 데이터 처리 로직을 구현할 수 있습니다.
    print(data)
else:
    print(f"Error: {response.status_code}, {response.text}")
  • API 호출 시 허용된 데이터 사용 정책을 준수해야 합니다.
  • OTX API는 호출 제한과 인증 관리를 위해 API 키를 요구합니다. API 키는 안전하게 관리해야 합니다.
  • API 응답 데이터의 구조와 필드를 이해하고 적절히 처리하는 것이 중요합니다.

 

이와 같은 방법으로 OTX TI 정보를 API를 통해 쉽게 수집하고 활용할 수 있습니다. n8n을 사용하여 OTX에서 수집한 정보를 TheHive에 등록하는 작업을 알아보겠습니다. n8n은 워크플로 자동화 툴로, 다양한 서비스와 API를 연결하여 데이터 흐름을 관리할 수 있습니다. TheHive는 보안 사건 관리 플랫폼으로, 보안 이벤트를 수집하고 분석할 수 있는 기능을 제공합니다.

  1. n8n 설치 및 설정
    • n8n을 설치하고 실행합니다. n8n은 Docker, npm 등을 통해 설치할 수 있습니다.
    • 설치 후 웹 인터페이스에 접속하여 워크플로우를 생성합니다.
  2. TheHive API 키 준비
    • TheHive에서 API 키를 발급받습니다. API 키는 TheHive의 관리자 설정에서 생성할 수 있습니다.
  3. OTX API 키 준비
    • OTX에서 API 키를 발급받습니다. OTX API를 사용하여 보안 위협 정보를 가져올 예정입니다.

n8n 워크플로우 구성

1. OTX에서 데이터 수집하기

  • Trigger Node 설정: OTX에서 주기적으로 데이터를 가져오기 위해 Trigger Node을 설정합니다. 예를 들어, HTTP Request 노드를 사용하여 OTX API에 요청을 보내 데이터를 가져올 수 있습니다.
    • URL: OTX API 엔드포인트 URL
      (예: https://otx.alienvault.com/api/v1/indicators/domain/google.com/general)
    • Method: GET
    • Headers:
      Key: X-OTX-API-KEY
      Value: {{API_KEY}}
    • API_KEY는 n8n의 Credential에서 저장된 OTX API 키를 사용합니다.
  • Data Processor 노드: 받은 데이터를 처리하고 필요한 정보를 추출합니다. 예를 들어, OTX에서 가져온 Indicators of Compromise(IoC) 데이터를 가공하여 TheHive에 등록할 형식으로 변환할 수 있습니다.

2. TheHive에 데이터 등록하기

  • HTTP Request 노드 설정: TheHive API를 사용하여 데이터를 등록합니다. 이 과정에서 TheHive에 보낼 데이터 형식을 맞추기 위해 필요한 데이터 처리를 추가할 수 있습니다.
    • URL: TheHive API 엔드포인트 URL
      (예: https://your-thehive-instance/api/case)
    • Method: POST
    • Headers:
      Key: Content-Type
      Value: application/json
      Key: Authorization
      Value: Bearer {{API_KEY}}
    • Body: TheHive에 전송할 데이터를 JSON 형식으로 구성합니다. 예를 들어, TheHive에 등록할 사건(Case) 정보를 포함합니다.

 

다음은 n8n에서 OTX 데이터를 가져와서 TheHive에 등록하는 예시 코드입니다.

nodes:
  - name: Trigger_OTX
    type: n8n-nodes-base.httpRequest
    typeVersion: 1
    position: [100, 200]
    credentials: 
      - ot_x
    settings:
      method: GET
      url: 'https://otx.alienvault.com/api/v1/indicators/domain/google.com/general'
      headers:
        Content-Type: application/json
        X-OTX-API-KEY: '{{$node["Credentials"].json["ot_x_api_key"]}}'
  - name: Process_Data
    type: n8n-nodes-base.functionItem
    typeVersion: 1
    position: [300, 200]
    credentials: 
      - ot_x
    settings:
      functionCode: |
        const items = [];
        for (const item of Object.values(item)) {
          items.push({
            json: item,
          });
        }
  - name: Send_Data
    type: n8n-nodes-base.httpRequest
    typeVersion: 1
    position: [500, 200]
    credentials: 
      - the_hive
    settings:
      method: POST
      url: 'https://your-thehive-instance/api/case'
      headers:
        Content-Type: application/json
        Authorization: 'Bearer {{$node["Credentials"].json["the_hive_api_key"]}}'
      body: |
        {
          "title": "New Case from OTX",
          "description": "Case created automatically from OTX data.",
          "tags": ["OTX", "Security"],
          "customFields": {
            "source": "OTX"
          },
          "artifacts": [
            {
              "dataType": "domain",
              "data": "google.com"
            }
          ]
        }
  • n8n에서는 Credential을 사용하여 API 키를 안전하게 관리합니다. API 키는 코드에 하드코딩하지 않고, Credential로 설정하여 보안을 유지하는 것이 좋습니다.
  • TheHive에 데이터를 등록할 때는 적절한 사건 제목, 설명, 태그 등을 추가하여 정확한 사건 관리를 할 수 있습니다.
  • 실제 환경에서는 데이터 형식과 보안 정책을 준수하여 구성하는 것이 중요합니다.

 

이를 통해 n8n을 사용하여 OTX에서 수집한 데이터를 TheHive에 자동으로 등록할 수 있습니다. OTX를 통해 수집된 Threat Intelligence(TI) 정보를 활용하여 내부 시스템에 대한 헌팅을 수행하는 것은 보안 관리에서 매우 중요한 작업입니다.

1. 수집된 TI 정보 파악

OTX에서 수집한 TI 정보는 IoC(Indicators of Compromise)를 포함하며, 다음과 같은 요소들로 구성될 수 있습니다.

  • IP 주소
  • 도메인
  • URL
  • 파일 해시 (MD5, SHA1, SHA256 등)

2. 헌팅 방법론

헌팅 작업은 다음과 같은 단계로 수행할 수 있습니다.

  1. TI 정보 수집 및 분석: OTX API를 통해 최신 TI 정보를 수집하고 분석합니다.
  2. 내부 시스템에 대한 검색: 수집된 TI 정보를 기반으로 내부 시스템에서 해당 IoC가 존재하는지 검색합니다.
  3. 로그 분석: 로그 파일을 분석하여 IoC와 일치하는 활동을 식별합니다.
  4. 이벤트 조사: 의심스러운 이벤트를 조사하고, 추가적인 보안 조치를 수행합니다.

3. 수행 방법 및 예시

OTX API를 통해 TI 정보 수집

먼저 OTX API를 사용하여 TI 정보를 수집하는 예시입니다.

import requests

# OTX API 엔드포인트 URL
url = 'https://otx.alienvault.com/api/v1/indicators/domain/example.com/general'

# OTX에서 발급받은 API 키
api_key = 'your_api_key_here'

# HTTP Header 설정
headers = {
    'X-OTX-API-KEY': api_key,
}

# API 호출
response = requests.get(url, headers=headers)

# 응답 처리
if response.status_code == 200:
    data = response.json()
    # TI 정보 출력
    print(data)
else:
    print(f"Error: {response.status_code}, {response.text}")

내부 시스템에서 IoC 검색

수집된 TI 정보를 기반으로 내부 시스템에서 해당 IoC를 검색합니다. 여기서는 예시로 IP 주소를 검색하는 방법을 설명합니다.

# Linux 시스템에서 IP 주소 검색 예시
grep -r 'malicious_ip_address' /var/log/

# Windows 시스템에서 IP 주소 검색 예시
findstr /s /i "malicious_ip_address" C:\path\to\logs\*

로그 분석을 통한 IoC 탐지

로그 파일에서 수집된 IoC를 검색하여 의심스러운 활동을 식별합니다. 예를 들어, Apache 로그 파일에서 특정 IP 주소의 접근을 검색할 수 있습니다.

# Apache 로그에서 IP 주소 검색
grep 'malicious_ip_address' /var/log/apache2/access.log

이벤트 조사

의심스러운 이벤트를 조사하고 추가적인 보안 조치를 수행합니다. 예를 들어, SIEM(System Information and Event Management) 시스템을 사용하여 검색된 IoC와 관련된 이벤트를 분석할 수 있습니다.

SIEM 시스템을 통한 자동화된 헌팅

다음은 Elasticsearch와 Kibana를 사용하여 TI 정보를 기반으로 헌팅 작업을 수행하는 예시입니다.

  1. Elasticsearch에 IoC 인덱스 생성
    curl -X PUT "localhost:9200/ioc_index?pretty"
  2. IoC 데이터 삽입
    curl -X POST "localhost:9200/ioc_index/_doc/?pretty" -H 'Content-Type: application/json' -d'
    {
      "type": "ip",
      "value": "malicious_ip_address"
    }'
  3. Kibana에서 시각화 및 탐지 규칙 생성
    Kibana에서 IoC 인덱스를 시각화하고, 검색 쿼리를 작성하여 해당 IoC가 로그에 나타나는지 탐지할 수 있습니다.

Python을 통한 자동화

Python 스크립트를 사용하여 OTX에서 TI 정보를 수집하고, Elasticsearch를 통해 내부 시스템에서 IoC를 검색하는 자동화 예시입니다.

import requests
from elasticsearch import Elasticsearch

# OTX API 설정
otx_url = 'https://otx.alienvault.com/api/v1/indicators/domain/example.com/general'
api_key = 'your_api_key_here'
headers = {'X-OTX-API-KEY': api_key}

# Elasticsearch 설정
es = Elasticsearch(['http://localhost:9200'])
index_name = 'ioc_index'

# OTX에서 TI 정보 수집
response = requests.get(otx_url, headers=headers)
if response.status_code == 200:
    ti_data = response.json()
    for ioc in ti_data['indicators']:
        # IoC를 Elasticsearch에 삽입
        es.index(index=index_name, document=ioc)
else:
    print(f"Error: {response.status_code}, {response.text}")

# IoC 기반 내부 시스템 로그 검색
query = {
    "query": {
        "match": {
            "message": "malicious_ip_address"
        }
    }
}
results = es.search(index='logs', body=query)
print(results)

위와 같은 방법으로 OTX에서 수집된 TI 정보를 활용하여 내부 시스템에서 헌팅 작업을 수행할 수 있습니다. 이 과정에서는 수집된 IoC 정보를 기반으로 로그 파일을 검색하고, 의심스러운 이벤트를 분석하여 보안 조치를 취하는 것이 중요합니다.

728x90

댓글