정보보호 (Security)

FireEye 오픈소스 도구 HX Tool 활용 보안 이벤트 수집 분석

날으는물고기 2024. 8. 26. 00:26

FireEye HX Tool은 FireEye가 제공하는 오픈소스 도구로, HX API를 사용하여 다양한 정보를 수집하고 관리할 수 있는 기능을 제공합니다. 이 도구는 FireEye HX의 기능을 확장하고, 보다 유연하게 보안 데이터를 수집하고 분석하는 데 도움을 줍니다. FireEye HX Tool을 사용하는 방법에 대해 설명하겠습니다.

FireEye HX Tool 개요

FireEye HX Tool은 Python으로 작성된 도구로, FireEye HX API를 쉽게 사용할 수 있게 해주는 스크립트와 라이브러리를 제공합니다. 이를 통해 다양한 보안 이벤트와 데이터를 수집하고 분석할 수 있습니다.

FireEye HX Tool 설치 및 구성

1. HX Tool 설치

HX Tool은 GitHub에서 제공됩니다. 다음 명령을 사용하여 설치할 수 있습니다.

git clone https://github.com/fireeye/HXTool.git
cd HXTool
pip install -r requirements.txt

2. 구성 파일 설정

HX Tool은 config.py 파일을 통해 설정됩니다. 이 파일에서 FireEye HX API의 URL, 사용자 이름, 비밀번호 등을 설정합니다.

# config.py 예시
HX_API_URL = "https://<fireeye_hx_url>/hx/api/v3"
HX_API_USERNAME = "your_api_username"
HX_API_PASSWORD = "your_api_password"

HXTool Dashboard

FireEye HX Tool 활용 방법

1. 기본 사용법

HX Tool을 사용하여 다양한 API 엔드포인트에 접근하고 데이터를 수집할 수 있습니다. 예를 들어, 에이전트 목록을 가져오는 스크립트를 작성할 수 있습니다.

import requests
from config import HX_API_URL, HX_API_USERNAME, HX_API_PASSWORD
import base64

def get_headers():
    auth_str = f'{HX_API_USERNAME}:{HX_API_PASSWORD}'
    b64_auth_str = base64.b64encode(auth_str.encode()).decode()
    headers = {
        'Accept': 'application/json',
        'Authorization': f'Basic {b64_auth_str}'
    }
    return headers

def get_agents():
    url = f'{HX_API_URL}/hosts'
    headers = get_headers()
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.json()
    else:
        print(f"Error: {response.status_code}")
        return None

agents = get_agents()
if agents:
    print(agents)

2. 이벤트 수집

HX Tool을 사용하여 특정 기간 동안 발생한 이벤트를 수집할 수 있습니다.

from datetime import datetime, timedelta

def get_events(start_time, end_time):
    url = f'{HX_API_URL}/alerts'
    headers = get_headers()
    params = {
        'start_time': start_time,
        'end_time': end_time
    }
    response = requests.get(url, headers=headers, params=params)
    if response.status_code == 200:
        return response.json()
    else:
        print(f"Error: {response.status_code}")
        return None

end_time = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ')
start_time = (datetime.utcnow() - timedelta(days=1)).strftime('%Y-%m-%dT%H:%M:%SZ')

events = get_events(start_time, end_time)
if events:
    print(events)

3. 데이터 분석 및 외부 시스템 연동

수집한 데이터를 Elasticsearch와 같은 외부 시스템에 전송하여 중앙에서 관리하고 분석할 수 있습니다.

from elasticsearch import Elasticsearch

es = Elasticsearch([{'host': 'localhost', 'port': 9200}])

def send_to_elasticsearch(events):
    for event in events['alerts']:
        es.index(index='fireeye-events', doc_type='_doc', body=event)

if events:
    send_to_elasticsearch(events)

자동화 및 스케줄링

주기적으로 데이터를 수집하고 전송하기 위해 스케줄링 도구를 사용할 수 있습니다. Python의 schedule 라이브러리를 사용하여 작업을 자동화할 수 있습니다.

import schedule
import time

def job():
    events = get_events(start_time, end_time)
    if events:
        send_to_elasticsearch(events)

schedule.every().hour.do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

FireEye HX Tool을 사용하면 FireEye HX API를 쉽게 활용하여 다양한 보안 데이터를 수집하고 분석할 수 있습니다. 이 도구는 설치 및 설정이 간단하며, Python 스크립트를 사용하여 데이터를 수집하고 외부 시스템과 연동할 수 있는 강력한 기능을 제공합니다. 이를 통해 조직의 보안 이벤트를 보다 효과적으로 모니터링하고 분석할 수 있습니다.

HXTool alerts view

FireEye HXTool을 Docker를 통해 구성하면 HXTool을 더 쉽게 설치하고 관리할 수 있습니다.

1. Docker 설치

Docker가 설치되지 않은 경우 Docker 공식 웹사이트에서 설치 방법을 참고하여 설치합니다.

2. HXTool Docker 이미지 설정

HXTool의 Docker 이미지를 설정하고 컨테이너를 실행하기 위해 Dockerfile을 작성해야 합니다.

Dockerfile 생성

프로젝트 디렉토리 내에 Dockerfile을 생성합니다.

# 베이스 이미지 설정
FROM python:3.8-slim

# 작업 디렉토리 설정
WORKDIR /app

# 필요 파일 복사
COPY . /app

# 필요 패키지 설치
RUN pip install --no-cache-dir -r requirements.txt

# HXTool 포트 설정
EXPOSE 8080

# 환경 변수 설정 (선택 사항)
ENV FLASK_APP hxtool.py

# HXTool 실행 명령어
CMD ["python", "hxtool.py"]

구성 파일 설정

HXTool의 구성 파일인 HXTool.conf를 설정합니다.

[feapi]
hostname = your_hx_server
port = 3000
user = your_username
password = your_password
hx_api_token = your_api_token

[webserver]
listen_port = 8080
ssl = False

3. Docker 이미지 빌드

작성한 Dockerfile을 사용하여 Docker 이미지를 빌드합니다. 터미널에서 다음 명령어를 실행합니다.

docker build -t hxtool .

4. Docker 컨테이너 실행

빌드된 Docker 이미지를 사용하여 HXTool 컨테이너를 실행합니다.

docker run -d -p 8080:8080 --name hxtool_container hxtool

HXTool 컨테이너를 백그라운드에서 실행하며, 로컬 호스트의 8080 포트를 컨테이너의 8080 포트에 매핑합니다.

5. HXTool 웹 인터페이스 접근

브라우저에서 http://localhost:8080으로 접속하여 HXTool 웹 인터페이스에 접근할 수 있습니다.

6. 에이전트 정보 수집 및 쿼리

HXTool 웹 인터페이스를 통해 에이전트 정보를 수집하고 데이터베이스를 쿼리할 수 있습니다. 웹 인터페이스 대신 API를 통해 수집 및 쿼리하는 방법의 코드입니다.

에이전트 정보 수집 스크립트

import json
import requests

# 구성 파일 로드
config = {
    "hostname": "your_hx_server",
    "port": 3000,
    "user": "your_username",
    "password": "your_password",
    "hx_api_token": "your_api_token"
}

# 기본 URL 설정
base_url = f"https://{config['hostname']}:{config['port']}"

# 인증 정보 설정
auth = (config['user'], config['password'])
headers = {
    'Accept': 'application/json',
    'Authorization': f'Bearer {config["hx_api_token"]}'
}

# 에이전트 목록 가져오기
response = requests.get(f"{base_url}/hx/api/v3/hosts", auth=auth, headers=headers, verify=False)

# 응답 처리
if response.status_code == 200:
    agents = response.json()
    for agent in agents['data']['entries']:
        print(f'Hostname: {agent["hostname"]}, IP: {agent["primary_ip"]}, Status: {agent["status"]}')
else:
    print(f'Error: {response.status_code} - {response.text}')

에이전트 데이터베이스 쿼리 스크립트

import json
import requests

# 구성 파일 로드
config = {
    "hostname": "your_hx_server",
    "port": 3000,
    "user": "your_username",
    "password": "your_password",
    "hx_api_token": "your_api_token"
}

# 기본 URL 설정
base_url = f"https://{config['hostname']}:{config['port']}"

# 인증 정보 설정
auth = (config['user'], config['password'])
headers = {
    'Accept': 'application/json',
    'Authorization': f'Bearer {config["hx_api_token"]}'
}

# 쿼리 파라미터 정의
hostname = "specific-hostname"
endpoint = f"{base_url}/hx/api/v3/hosts?hostname={hostname}"

# 쿼리 실행
response = requests.get(endpoint, auth=auth, headers=headers, verify=False)

# 응답 처리
if response.status_code == 200:
    results = response.json()
    for result in results['data']['entries']:
        print(f'Hostname: {result["hostname"]}, IP: {result["primary_ip"]}, Last Seen: {result["last_event_at"]}')
else:
    print(f'Error: {response.status_code} - {response.text}')

이렇게 Docker를 사용하여 FireEye HXTool을 설정하고 에이전트 정보를 수집 및 쿼리하는 방법을 설명드렸습니다. 이를 통해 더 쉽게 HXTool을 관리하고 운영할 수 있습니다.

HXTool alert investigation panel
Review multi-file acquisition results
Data stacking
HXTool-4.0-Technical-Documentation.pdf
2.75MB

728x90