File size: 2,677 Bytes
de38b77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import requests
import json

class ThreatIntelligence:
    def __init__(self):
        self.api_keys = {}
        self.endpoints = {}
        self.threat_data = []

    def add_api_key(self, provider, api_key):
        self.api_keys[provider] = api_key

    def set_endpoint(self, provider, endpoint):
        self.endpoints[provider] = endpoint

    def fetch_threat_data(self, provider):
        if provider in self.api_keys and provider in self.endpoints:
            headers = {"Authorization": f"Bearer {self.api_keys[provider]}"}
            response = requests.get(self.endpoints[provider], headers=headers)
            if response.status_code == 200:
                self.threat_data.append(response.json())
            else:
                print(f"Failed to fetch data from {provider}: {response.status_code}")
        else:
            print(f"API key or endpoint for {provider} not set.")

    def aggregate_threat_data(self):
        aggregated_data = {}
        for data in self.threat_data:
            for item in data:
                threat_id = item.get("id")
                if threat_id not in aggregated_data:
                    aggregated_data[threat_id] = item
                else:
                    aggregated_data[threat_id].update(item)
        return aggregated_data

    def normalize_threat_data(self, data):
        normalized_data = []
        for item in data.values():
            normalized_item = {
                "id": item.get("id"),
                "type": item.get("type"),
                "description": item.get("description"),
                "severity": item.get("severity"),
                "source": item.get("source"),
                "timestamp": item.get("timestamp")
            }
            normalized_data.append(normalized_item)
        return normalized_data

    def integrate_with_misp(self, misp_url, misp_key):
        headers = {"Authorization": f"Bearer {misp_key}"}
        response = requests.get(misp_url, headers=headers)
        if response.status_code == 200:
            self.threat_data.append(response.json())
        else:
            print(f"Failed to integrate with MISP: {response.status_code}")

    def integrate_with_opencti(self, opencti_url, opencti_key):
        headers = {"Authorization": f"Bearer {opencti_key}"}
        response = requests.get(opencti_url, headers=headers)
        if response.status_code == 200:
            self.threat_data.append(response.json())
        else:
            print(f"Failed to integrate with OpenCTI: {response.status_code}")

    def get_threat_data(self):
        return self.threat_data

    def clear_threat_data(self):
        self.threat_data = []