Added a graceful quit when the MITRE's CTI server cannot be reached

master
Marcus Bakker 2021-02-10 13:17:46 +01:00
parent 5d211341c6
commit 701516e481
2 changed files with 12 additions and 3 deletions

View File

@ -1,5 +1,6 @@
import json import json
from attackcti import attack_client from attackcti import attack_client
from requests import exceptions
FILE_DATA_SOURCES = 'data_sources.json' FILE_DATA_SOURCES = 'data_sources.json'
FILE_TECHNIQUES = 'techniques.json' FILE_TECHNIQUES = 'techniques.json'
@ -13,7 +14,11 @@ class ATTACKData():
""" """
def __init__(self): def __init__(self):
self.mitre = attack_client() try:
self.mitre = attack_client()
except exceptions.ConnectionError:
print("[!] Cannot connect to MITRE's CTI TAXII server")
quit()
self.attack_cti_techniques = self.mitre.get_enterprise_techniques() self.attack_cti_techniques = self.mitre.get_enterprise_techniques()
self.attack_cti_techniques = self.mitre.remove_revoked(self.attack_cti_techniques) self.attack_cti_techniques = self.mitre.remove_revoked(self.attack_cti_techniques)
self.attack_cti_techniques = self.mitre.remove_deprecated(self.attack_cti_techniques) self.attack_cti_techniques = self.mitre.remove_deprecated(self.attack_cti_techniques)

View File

@ -8,6 +8,7 @@ from ruamel.yaml.timestamp import TimeStamp as ruamelTimeStamp
from upgrade import upgrade_yaml_file, check_yaml_updated_to_sub_techniques from upgrade import upgrade_yaml_file, check_yaml_updated_to_sub_techniques
from constants import * from constants import *
from health import check_yaml_file_health from health import check_yaml_file_health
from requests import exceptions
# Due to performance reasons the import of attackcti is within the function that makes use of this library. # Due to performance reasons the import of attackcti is within the function that makes use of this library.
@ -54,8 +55,11 @@ def load_attack_data(data_type):
if not (dt.now() - write_time).total_seconds() >= EXPIRE_TIME: if not (dt.now() - write_time).total_seconds() >= EXPIRE_TIME:
# the first item in the list contains the ATT&CK data # the first item in the list contains the ATT&CK data
return cached[0] return cached[0]
try:
mitre = attack_client() mitre = attack_client()
except exceptions.ConnectionError:
print("[!] Cannot connect to MITRE's CTI TAXII server")
quit()
attack_data = None attack_data = None
if data_type == DATA_TYPE_STIX_ALL_RELATIONSHIPS: if data_type == DATA_TYPE_STIX_ALL_RELATIONSHIPS: