Projects STRLCPY SIEVA Commits 8f7a8e2d
🤬
Showing first 18 files as there are too many
  • ■ ■ ■ ■ ■ ■
    .dockerignore
     1 +.git
     2 +.editorconfig
     3 +/.vscode/*
     4 +/node_modules
     5 +/e2e
     6 +/docs
     7 +.gitignore
     8 +*.zip
     9 +/sieva_plots
     10 +/nav-app
     11 +venv/
     12 + 
  • ■ ■ ■ ■ ■ ■
    .gitignore
     1 +*.pyc
     2 +nav-app/node_modules/
     3 +sieva_plots/node_modules/
     4 +sieva_plots/.angular/
     5 +sieva_plots/dist/
     6 +#logs/
     7 +venv/
     8 + 
  • ■ ■ ■ ■ ■ ■
    .vscode/launch.json
     1 +{
     2 + // Use IntelliSense to learn about possible attributes.
     3 + // Hover to view descriptions of existing attributes.
     4 + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
     5 + "version": "0.2.0",
     6 + "configurations": [
     7 + 
     8 + 
     9 + {
     10 + "name": "Python: archivo actual",
     11 + "type": "python",
     12 + "request": "launch",
     13 + "program": "${file}",
     14 + "console": "internalConsole",
     15 + "justMyCode": true
     16 + }
     17 + ]
     18 +}
  • ■ ■ ■ ■ ■ ■
    AI_Engine/config_files/config.cfg
     1 +[paths]
     2 +train = "data/datasets/completeness/sp_format_entities.spacy"
     3 +dev = "data/datasets/completeness/sp_format_entities.spacy"
     4 +vectors = "en_core_web_lg"
     5 +init_tok2vec = null
     6 + 
     7 +[system]
     8 +gpu_allocator = null
     9 +seed = 0
     10 + 
     11 +[nlp]
     12 +lang = "en"
     13 +pipeline = ["tok2vec","ner"]
     14 +batch_size = 1000
     15 +disabled = []
     16 +before_creation = null
     17 +after_creation = null
     18 +after_pipeline_creation = null
     19 +tokenizer = {"@tokenizers":"spacy.Tokenizer.v1"}
     20 + 
     21 +[components]
     22 + 
     23 +[components.ner]
     24 +factory = "ner"
     25 +incorrect_spans_key = null
     26 +moves = null
     27 +scorer = {"@scorers":"spacy.ner_scorer.v1"}
     28 +update_with_oracle_cut_size = 100
     29 + 
     30 +[components.ner.model]
     31 +@architectures = "spacy.TransitionBasedParser.v2"
     32 +state_type = "ner"
     33 +extra_state_tokens = false
     34 +hidden_width = 64
     35 +maxout_pieces = 2
     36 +use_upper = true
     37 +nO = null
     38 + 
     39 +[components.ner.model.tok2vec]
     40 +@architectures = "spacy.Tok2VecListener.v1"
     41 +width = ${components.tok2vec.model.encode.width}
     42 +upstream = "*"
     43 + 
     44 +[components.tok2vec]
     45 +factory = "tok2vec"
     46 + 
     47 +[components.tok2vec.model]
     48 +@architectures = "spacy.Tok2Vec.v2"
     49 + 
     50 +[components.tok2vec.model.embed]
     51 +@architectures = "spacy.MultiHashEmbed.v2"
     52 +width = ${components.tok2vec.model.encode.width}
     53 +attrs = ["NORM","PREFIX","SUFFIX","SHAPE"]
     54 +rows = [5000,1000,2500,2500]
     55 +include_static_vectors = true
     56 + 
     57 +[components.tok2vec.model.encode]
     58 +@architectures = "spacy.MaxoutWindowEncoder.v2"
     59 +width = 256
     60 +depth = 8
     61 +window_size = 1
     62 +maxout_pieces = 3
     63 + 
     64 +[corpora]
     65 + 
     66 +[corpora.dev]
     67 +@readers = "spacy.Corpus.v1"
     68 +path = ${paths.dev}
     69 +max_length = 0
     70 +gold_preproc = false
     71 +limit = 0
     72 +augmenter = null
     73 + 
     74 +[corpora.train]
     75 +@readers = "spacy.Corpus.v1"
     76 +path = ${paths.train}
     77 +max_length = 0
     78 +gold_preproc = false
     79 +limit = 0
     80 +augmenter = null
     81 + 
     82 +[training]
     83 +dev_corpus = "corpora.dev"
     84 +train_corpus = "corpora.train"
     85 +seed = ${system.seed}
     86 +gpu_allocator = ${system.gpu_allocator}
     87 +dropout = 0.1
     88 +accumulate_gradient = 1
     89 +patience = 1600
     90 +max_epochs = 0
     91 +max_steps = 20000
     92 +eval_frequency = 200
     93 +frozen_components = []
     94 +annotating_components = []
     95 +before_to_disk = null
     96 + 
     97 +[training.batcher]
     98 +@batchers = "spacy.batch_by_words.v1"
     99 +discard_oversize = false
     100 +tolerance = 0.2
     101 +get_length = null
     102 + 
     103 +[training.batcher.size]
     104 +@schedules = "compounding.v1"
     105 +start = 100
     106 +stop = 1000
     107 +compound = 1.001
     108 +t = 0.0
     109 + 
     110 +[training.logger]
     111 +@loggers = "spacy.ConsoleLogger.v1"
     112 +progress_bar = false
     113 + 
     114 +[training.optimizer]
     115 +@optimizers = "Adam.v1"
     116 +beta1 = 0.9
     117 +beta2 = 0.999
     118 +L2_is_weight_decay = true
     119 +L2 = 0.01
     120 +grad_clip = 1.0
     121 +use_averages = false
     122 +eps = 0.00000001
     123 +learn_rate = 0.001
     124 + 
     125 +[training.score_weights]
     126 +ents_f = 1.0
     127 +ents_p = 0.0
     128 +ents_r = 0.0
     129 +ents_per_type = null
     130 + 
     131 +[pretraining]
     132 + 
     133 +[initialize]
     134 +vectors = ${paths.vectors}
     135 +init_tok2vec = ${paths.init_tok2vec}
     136 +vocab_data = null
     137 +lookups = null
     138 +before_init = null
     139 +after_init = null
     140 + 
     141 +[initialize.components]
     142 + 
     143 +[initialize.tokenizer]
  • ■ ■ ■ ■ ■ ■
    AI_Engine/config_files/config.ini
     1 +[PATH]
     2 +RAW_PATH = data/raw_data/
     3 +DATASET_PATH = data/datasets/
     4 +MODEL_PATH = data/model/
     5 +MODEL_PATH_COMPLETENESS = data/model/model-best
     6 +PREDICTIONS_PATH = data/predictions/
     7 + 
     8 +[ELASTIC]
     9 +CLIENT_HOST = 172.26.212.33
     10 + 
     11 +[OPTIONS]
     12 +FASTTEXT = True
     13 +RETRIEVE = True
     14 +PREPARE_DATA = True
     15 +RETRIEVE_COMPLETENESS = True
     16 + 
     17 +[MODELS]
     18 +FASTTEXT = 'model_fast.bin'
     19 +NOT_FASTTEXT = 'model_non_fast.plk'
     20 + 
     21 + 
     22 + 
     23 + 
  • ■ ■ ■ ■ ■ ■
    AI_Engine/core/data_handler.py
     1 +# This code has been developed by Fundació Privada Internet i Innovació Digital a Catalunya (i2CAT)
     2 +import AI_Engine.core.utils as utils
     3 +#import utils as utils
     4 +import pandas as pd
     5 +import numpy as np
     6 +import os
     7 +import re
     8 +import threading
     9 + 
     10 +from typing import Union
     11 +from tqdm import tqdm
     12 + 
     13 +from os.path import basename
     14 +from sklearn.model_selection import train_test_split
     15 + 
     16 +from gensim.utils import simple_preprocess
     17 + 
     18 +dataframe = pd.core.frame.DataFrame
     19 + 
     20 +TRAIN_idx_to_extract = ['dhcp-server-linux.txt', 'dns-generic.txt', 'dns-infoblox-nios.txt', 'firewall-fortigate.txt',
     21 + 'firewall-paloalto.txt', 'identity-service-cisco.txt', 'webproxy-squid.txt', 'webserver-generic.txt',
     22 + 'webserver-nginx.txt', 'microsoft-windows-evtx.txt', 'classification_validate_dataset.txt', 'index1.txt', 'index2.txt', 'index3.txt']
     23 + 
     24 + 
     25 +idx_pairs = {'webproxy-squid': 'webserver', 'webserver-generic': 'webserver', 'webserver-nginx': 'webserver', 'dns-infoblox-nios': 'dns', 'dns-generic': 'dns',
     26 + 'identity-service-cisco': 'identity', 'microsoft-windows-evtx': 'evtx', 'firewall-fortigate': 'firewall', 'firewall-paloalto': 'firewall',
     27 + 'dhcp-server-linux' : 'dhcp'}
     28 + 
     29 + 
     30 +def create_datasets(path_to_rawData : str = 'data/raw_data/', path_to_datasets : str = 'data/datasets/', training_data: bool = False,
     31 + predict: bool = False, idx_pairs: dict = idx_pairs, predict_idx = ["classification_validate_dataset.txt", 'index1', 'index2', 'index3']):
     32 + """
     33 + Use the raw data retrieved from elastic to create usable datasets to train a model
     34 + :param path_to_rawData: path to acces the raw data retrieved from elastic
     35 + :param path_to_datasets: path to save the processed datasets
     36 + :param fasttext: flag to whether use or not the fasttext library, thus processing the data in a way that fasttext can recognize
     37 + :return: tuple with train and test data
     38 + """
     39 + data = pd.DataFrame()
     40 + files = os.listdir(path_to_rawData) if os.path.isdir(path_to_rawData) else [path_to_rawData]
     41 + 
     42 + files = list(filter(lambda file: file.replace('.txt','') in idx_pairs.keys(), files)) if not predict else [pred_idx+'.txt' for pred_idx in predict_idx]
     43 + 
     44 + for file in files:
     45 + file_idx = file.replace('.txt','')
     46 + if file_idx in idx_pairs.keys() or file_idx in predict_idx and os.path.isfile(path_to_rawData+file):
     47 + # Obtaining the message column and the category in which belongs
     48 + x_data = pd.read_table(path_to_rawData+file, header = None, lineterminator='\n', on_bad_lines='skip')
     49 + y_data = idx_pairs[file_idx] if file_idx in idx_pairs.keys() else file_idx
     50 +
     51 + current = pd.concat([x_data,pd.Series(np.repeat(y_data,x_data.shape[0]))], axis=1, ignore_index=True)
     52 +
     53 + data = pd.concat([data,current],ignore_index=True)
     54 +
     55 + data.columns=['log', 'target: log-type']
     56 + data.applymap(str)
     57 + 
     58 + if training_data:
     59 + data = train_test_split(data,test_size = 0.24, random_state = 24, stratify = data.iloc[:,-1])
     60 + train, test = data[0],[1]
     61 +
     62 + train_path = fasttext_format(train, training_data=training_data, predict=False)
     63 + test_path = fasttext_format(test, training_data=training_data, predict=False)
     64 + 
     65 + return train_path, test_path
     66 + 
     67 + else:
     68 + if not predict:
     69 + data = data.loc[~data['target: log-type'].isin(predict_idx)]
     70 + train_path = fasttext_format(data, path_to_datasets, predict=predict)
     71 + 
     72 + return train_path, None
     73 + 
     74 + else:
     75 + test_paths = []
     76 + for idx in predict_idx:
     77 + data_idx = data.loc[data['target: log-type'] == idx]
     78 + test_path = fasttext_format(data_idx, path_to_datasets, predict=predict,idx_name=idx)
     79 + test_paths.append(test_path)
     80 +
     81 + return None, test_paths
     82 + 
     83 + 
     84 +def fasttext_format(data, path_to_datasets: str = "data/datasets/", training_data: bool = False, predict: bool = False, idx_name: str = 'classification_validate_dataset'):
     85 + """
     86 + Format the data in a way that the fasttext library can use
     87 + :param data: tuple of all the data retrieved, already splitted in train and test
     88 + :param path_to_datasets: path to save the processed datasets
     89 + """
     90 +
     91 + X, y = data.iloc[:,0], data.iloc[:,-1]
     92 + 
     93 + dataset = pd.DataFrame(list(zip(y,X)))
     94 + dataset.iloc[:,1] = dataset.iloc[:, 1].astype(str).apply(lambda x: ' '.join(simple_preprocess(x)))
     95 + dataset.iloc[:,0] = dataset.iloc[:,0].apply(lambda x: '__label__' + x) if not predict or training_data else None
     96 + 
     97 + data_path = path_to_datasets + "fasttext_train.txt" if not predict else path_to_datasets + f"fasttext_test-{idx_name}.txt"
     98 + 
     99 + dataset.to_csv(data_path, sep = " ", header = False, index = False)
     100 +
     101 + return data_path
     102 +
     103 + 
     104 + 
     105 + 
     106 +if __name__ == '__main__':
     107 + 
     108 + """
     109 + Only used for testing purposes, do not rely on the following code to extract information about the execution
     110 + """
     111 + config = utils.load_config("../config_files")
     112 + rawData_path = "data/raw_data/"
     113 + dataset_path = "data/datasets/"
     114 + 
     115 + db_host = "172.26.212.33"
     116 + 
     117 + fasttext = True
     118 +
     119 + print(os.path.exists("../../data/"))
     120 + # utils.get_datasets_elastic(client_host = db_host, datasets_path = rawData_path, all_idx=False)
     121 +
     122 + data = create_datasets(path_to_rawData = f"{rawData_path}", path_to_datasets = f"{dataset_path}", fasttext = fasttext)
     123 + #predict_index = 'classification_validate_dataset.txt'
     124 + 
     125 + print(data[0], data[1])
     126 + test_data = pd.read_csv(data[0])
     127 + train_data = pd.read_csv(data[1])
     128 + 
     129 + print(train_data)
     130 + print(test_data)
     131 +
     132 + 
     133 + 
     134 + 
     135 + 
     136 + #
  • ■ ■ ■ ■ ■ ■
    AI_Engine/core/mapping/mapping_techniques_data_sources.py
     1 +# This code has been developed by Fundació Privada Internet i Innovació Digital a Catalunya (i2CAT)
     2 +import pandas as pd
     3 +import json
     4 +import AI_Engine.core.utils as utils
     5 +from typing import List
     6 + 
     7 +"""
     8 + matchers = ['Application Log: Application Log Content', 'Firewall: Firewall Rule Modification', 'Firewall: Firewall Disable',
     9 + 'Firewall: Firewall Metadata ', 'Firewall: Firewall Enumeration', 'Network Traffic: Network Traffic Content',
     10 + 'Network Traffic: Network Traffic Flow', "Network Traffic: Network Connection Creation",
     11 + "Domain Name: Active DNS", "Certificate: Certificate Registration", "User Account: User Account Authentication",
     12 + "User Account: User Account Creation", "User Account: User Account Deletion",
     13 + "User Account: User Account Modification", "User Account: User Account Metadata",
     14 + "User Account: User Account Modification", "Process: OS API Execution", "Process: Process Access",
     15 + "Process: Process Creation", "Process: Process Metadata", "Process: Process Modification",
     16 + "Process: Process Termination", "Windows Registry: Windows Registry Key Access",
     17 + "Windows Registry: Windows Registry Key Creation", "Windows Registry: Windows Registry Key Deletion",
     18 + "Windows Registry: Windows Registry Key Modification"]
     19 +"""
     20 + 
     21 +def dataSources2techniques(used_data_sources: List) -> dict:
     22 + print(used_data_sources)
     23 + matchers = [matcher.split(': ')[1] for matcher in used_data_sources]
     24 + techniques_to_use = []
     25 + data_sources = pd.read_csv("data/mapping/data_sources.csv")
     26 + 
     27 + for _, row in data_sources.iterrows():
     28 + if row['data_component'] in matchers:
     29 + techniques_to_use.append(row['technique_id'])
     30 +
     31 + complete, partial, missing = [], [], []
     32 + techniques_dict = {}
     33 +
     34 + for _, technique in data_sources['technique_id'].iteritems():
     35 + tech_used_count = techniques_to_use.count(technique)
     36 + tech_count = (data_sources["technique_id"] == technique).sum()
     37 + if tech_used_count == 0: missing.append(technique)
     38 + elif tech_used_count < tech_count: partial.append(technique) # Aquí és on potser es pot usar el gradient
     39 + elif tech_used_count == tech_count: complete.append(technique)
     40 +
     41 + techniques_dict["#8cdd69"] = list(set(sorted(complete))) # Complete
     42 + techniques_dict["#ffd966"] = list(set(sorted(partial))) # Partial
     43 + techniques_dict["#ed4f4f"] = list(set(sorted(missing))) # Missing
     44 + 
     45 + techniques_dict = utils.exchange_key_value(techniques_dict)
     46 + 
     47 + return techniques_dict
     48 +
     49 + 
     50 + 
     51 + 
     52 + 
     53 + 
     54 + 
     55 + 
     56 + 
     57 + 
     58 + 
     59 + 
  • ■ ■ ■ ■ ■ ■
    AI_Engine/core/model.py
     1 +# This code has been developed by Fundació Privada Internet i Innovació Digital a Catalunya (i2CAT)
     2 +import numpy as np
     3 +import pandas as pd
     4 +import AI_Engine.core.utils as utils
     5 +#import utils
     6 +import os
     7 +import joblib
     8 + 
     9 +from gensim.utils import simple_preprocess
     10 + 
     11 +from fasttext import train_supervised, load_model
     12 +from sklearn.metrics import accuracy_score, recall_score, f1_score, classification_report
     13 + 
     14 +from sklearn.preprocessing import StandardScaler
     15 +from sklearn.utils import class_weight
     16 +from sklearn.model_selection import train_test_split
     17 + 
     18 +from xgboost import XGBClassifier
     19 + 
     20 + 
     21 +SS = StandardScaler()
     22 + 
     23 +def train_model(path_to_train_data: str = "data/datasets/train.txt", path_save_model: str = 'data/model/', fasttext_flag: bool = True):
     24 + """
     25 + Train a text classificator based on either the fasttext library or an own XGBoost from the library equally named. The frist model uses a bag of n-grams, with hashing to mantain fast and memory efficient mapping of the n-grams.
     26 + The classification task is made with a multinomial logistic regression. Goes through a softmax to obtain a probability distribution over pre-defined classes.
     27 + If the number of classes is large enough, Hierarchial Softmax is used, in which every node in a binary tree represents a probability, with the leafs of the tree representing the labels.
     28 + This reduce the computational complexity, with k being the number of classes and h the dimension of the text representation, from O(kh) to O(h*log(k)).
     29 + The second one, applies 3 folds of validation, generating a tree with at maximum depth = 12. It is executed concurrently among as much available threads possible.
     30 + :param path_to_train_data: path to the preprocessed dataset to train
     31 + :param path_save_model: path to save the trained model that can be used to predict afterwards
     32 + """
     33 + if fasttext_flag:
     34 + 
     35 + model = train_supervised(path_to_train_data)
     36 +
     37 + model.save_model(path_save_model)
     38 + return {'Model path:' : path_save_model}
     39 + 
     40 + 
     41 +def predict_fasttext(model, path_to_test_data: str = "data/datasets/test.txt", training_data: bool = False):
     42 + """
     43 + Make predictions with a presaved model from the fasttext library
     44 + :param model: the model object to use to make the predictions
     45 + :param path_to_test_data: the path to the data to make the predictions
     46 + :param training_data: flag, make predictions over a training context or not
     47 + """
     48 + #If we are training the model, the data will include the log type values, otherwise we just get the lines and we put it through the simple preprocess
     49 + test_df = pd.read_csv(path_to_test_data, sep = " ") if training_data else pd.Series(open(path_to_test_data, 'r').readlines()).astype(str).apply(lambda x: ' '.join(simple_preprocess(x)))
     50 +
     51 + if training_data: test_logs, test_labels = test_df.iloc[:,-1], test_df.iloc[:,0]
     52 + else: test_logs = test_df
     53 + 
     54 + predictions = []
     55 + for _, log in test_logs.astype(str).items():
     56 + predicted_label = model.predict(log.replace("\n",''))[0][0].replace('__label__', '')
     57 + predictions.append([log,predicted_label])
     58 +
     59 +
     60 + predictions = pd.DataFrame(predictions, columns = ['log_message', 'predicted_label'])
     61 + if training_data: y_true = test_labels.apply(lambda label: label.replace('__label__',''))
     62 + 
     63 + if training_data: return predictions, y_true
     64 + else: return predictions
     65 + 
     66 + 
     67 +def predict(path_to_test_data: str = "data/datasets/test.txt", path_to_model: str = 'data/model/model_fast.bin', path_to_predictions: str = "data/datasets/predictions/",
     68 + fasttext_flag: bool = True, training_data: bool = False):
     69 + """
     70 + Use a pre-trained text classificator to make predictions on a new corpus
     71 + :param path_to_test_data: path to the preprocessed dataset to test the model
     72 + :param path_to_model: path to acces the pre-trained model to make predictions
     73 + :param path_to_predictions: path to save the predictions made by the model
     74 + """
     75 + #We load the model from the path with the saved model
     76 + model = load_model(path_to_model)
     77 + 
     78 + if training_data:
     79 + y_pred, y_true = predict_fasttext(model, path_to_test_data, training_data)
     80 + else:
     81 + y_pred = predict_fasttext(model, path_to_test_data, training_data)
     82 + 
     83 + file_name = 'predictions.txt'
     84 +
     85 + y_pred.to_csv(path_to_predictions+file_name)
     86 +
     87 + 
     88 + if training_data:
     89 + return {
     90 + 'Path to predictions': path_to_predictions+file_name,
     91 + 'Accuracy' : accuracy_score(y_true.astype(str), y_pred.astype(str)),
     92 + 'Recall' : recall_score(y_true.astype(str), y_pred.astype(str), average='micro'),
     93 + 'F1 score' : f1_score(y_true.astype(str), y_pred.astype(str), average='micro'),
     94 + '\nclassification report ' : classification_report(y_true.astype(str), y_pred.astype(str), output_dict = True)
     95 + }
     96 + else: return {'Path to predictions': path_to_predictions+file_name }
     97 + 
     98 + 
     99 +if __name__ == '__main__':
     100 + #This section is just used for testing purposes
     101 + path_to_config = "AI_Engine/config_files"
     102 + config = utils.load_config(os.path.abspath(path_to_config))
     103 + dataset_path = config.get("PATH", "DATASET_PATH")
     104 + model_path = config.get("PATH", "MODEL_PATH")
     105 + predictions_path = config.get("PATH", "PREDICTIONS_PATH")
     106 +
     107 + fasttext_flag = False
     108 + 
     109 + 
     110 + for fasttext_flag in [False, True]:
     111 + train_path = 'fasttext_train_dataset.txt' if fasttext_flag else 'extracted_features_train.txt'#DEF-extracted_features_train.txt'
     112 + test_path = 'fasttext_test_dataset.txt' if fasttext_flag else 'predict_extracted_features_test.txt'
     113 + 
     114 + print('creuat path')
     115 + # to use the full set is required to modify the dataset to not have the pcap data and in order to see if we can obtain
     116 + # better predictions we must balance the quantity of the filebeat class
     117 + model_name = 'model_fast.bin' if fasttext_flag else 'model_non_fast.plk'
     118 + # print(train_model(dataset_path+train_path,model_path+model_name,fasttext_flag=fasttext_flag))
     119 + print(f'-------END TRAIN-------{fasttext_flag}\n')
     120 + # print(predict(dataset_path+test_path, model_path+model_name, predictions_path, fasttext_flag = fasttext_flag, training_data = False))
     121 + cat_percent = utils.category_percent("data/predictions/fasttext_predictions.txt") if fasttext_flag else utils.category_percent("data/predictions/feature_extraction_predictions.txt")
     122 + print(cat_percent)
  • AI_Engine/core/utils.py
    Diff is too large to be displayed.
  • ■ ■ ■ ■ ■ ■
    AI_Engine/main.py
     1 +# This code has been developed by Fundació Privada Internet i Innovació Digital a Catalunya (i2CAT)
     2 +import io
     3 +import AI_Engine.core.data_handler as data
     4 +import AI_Engine.core.utils as utils
     5 +import AI_Engine.core.model as model
     6 +import AI_Engine.core.mapping.mapping_techniques_data_sources as mapping
     7 +import pandas as pd
     8 +import spacy as sp
     9 + 
     10 +import logging
     11 +import os
     12 +import json
     13 +import sys
     14 +from logging.handlers import RotatingFileHandler
     15 + 
     16 + 
     17 +from fastapi.logger import logger
     18 +from typing import List
     19 +from fastapi import FastAPI, Request
     20 +from spacy import displacy
     21 +from tqdm import tqdm
     22 + 
     23 + 
     24 +from fastapi.responses import StreamingResponse
     25 + 
     26 +from fastapi.middleware.cors import CORSMiddleware
     27 + 
     28 +app = FastAPI()
     29 + 
     30 +#Preguntar si els possibles origins d'acces a la API han de ser part d'un input/fitxer de config
     31 +origins = [
     32 + "http://localhost",
     33 + "http://localhost:8081",
     34 + "http://localhost:4200",
     35 + "http://localhost:4201",
     36 + "http://localhost:9000",
     37 + "http://localhost:9001",
     38 + "http://172.26.212.33",
     39 + "http://172.26.212.33:8081",
     40 + "http://172.26.212.33:4200",
     41 + "http://172.26.212.33:4201",
     42 + "http://172.26.212.33:9000",
     43 + "http://172.26.212.33:9001",
     44 + 
     45 +]
     46 +app.add_middleware(
     47 + CORSMiddleware,
     48 + allow_origins=origins,
     49 + allow_credentials=True,
     50 + allow_methods=["*"],
     51 + allow_headers=["*"],
     52 +)
     53 + 
     54 + 
     55 +config = utils.load_config("AI_Engine/config_files/")
     56 +
     57 +dataset_path = config.get("PATH", "DATASET_PATH")
     58 +model_path = config.get("PATH", "MODEL_PATH")
     59 +rawData_path = config.get("PATH", "RAW_PATH")
     60 +predictions_path = config.get("PATH", "PREDICTIONS_PATH")
     61 + 
     62 +elastic_host = config.get("ELASTIC", "CLIENT_HOST")
     63 + 
     64 +@app.get("/train")
     65 +async def train_model(
     66 + train_pairs: str =
     67 + """
     68 + {"webserver" : ["webproxy-squid", "webserver-generic", "webserver-nginx"],
     69 + "dns" : ["dns-infoblox-nios", "dns-generic"],
     70 + "identity" : ["identity-service-cisco"],
     71 + "evtx" : ["microsoft-windows-evtx"],
     72 + "firewall" : ["firewall-fortigate","firewall-paloalto"]
     73 + }
     74 + """
     75 + ):
     76 + 
     77 + """
     78 + Endpoint to re-train the model selected through configuration file
     79 + :param train_pairs: str that represents a mapping between each category and each index used to train
     80 + """
     81 + logging.basicConfig(level=logging.DEBUG, filename='logs/train', filemode='w')
     82 + logger.addHandler(RotatingFileHandler("logs/train", maxBytes=1000,backupCount=0))
     83 + 
     84 + retrieve = config.getboolean("OPTIONS", "RETRIEVE")
     85 + prepare_data = config.getboolean("OPTIONS", "PREPARE_DATA")
     86 + fasttext_flag = config.getboolean("OPTIONS", "FASTTEXT")
     87 + False
     88 + global dataset_path, model_path, rawData_path, elastic_host
     89 +
     90 + logger.debug(f'[PATH] Dataset Path:{dataset_path}')
     91 + logger.debug(f'[PATH] Model Path:{model_path}')
     92 + logger.debug(f'[PATH] RawData Path:{rawData_path}')
     93 + logger.debug(f'[OPTIONS] FASTTEXT?:{fasttext_flag}')
     94 + logger.debug(f'[HOST] ElasticSearch database host: {elastic_host}')
     95 + logger.debug(f'[Model Type] Model used:{"fasttext multinomial logistic regression" if fasttext_flag else "XGBoost"}')
     96 + 
     97 + train_pairs = json.loads(train_pairs)
     98 + train_pairs = utils.exchange_key_value(train_pairs)
     99 + 
     100 +
     101 + if prepare_data:
     102 + print('entro')
     103 + if retrieve:
     104 + utils.get_datasets_elastic(client_host = elastic_host, datasets_path = rawData_path, search_object={"query": {"match_all": {}}}, all_idx=False,
     105 + idx_names = list(train_pairs.keys()))# list(train_pairs.values()))
     106 + 
     107 + if fasttext_flag:
     108 + train_path, _ = data.create_datasets(path_to_rawData = rawData_path, path_to_datasets = dataset_path+'fasttext_',
     109 + training_data=False, idx_pairs=train_pairs, predict = False)
     110 +
     111 + model_name = 'model.bin'
     112 + 
     113 + try:
     114 + model.train_model(train_path, path_save_model = model_path+model_name, fasttext_flag = fasttext_flag)
     115 +
     116 + config.set("PATH", "MODEL_PATH", model_path+model_name)
     117 + return {"model path" : model_path+model_name}
     118 +
     119 + except:
     120 + raise UnboundLocalError('Data is not saved, modify the config.ini: [PREPRARE_DATA]=True & [RETRIEVE]=True to retrieve the data')
     121 + 
     122 + 
     123 + 
     124 +
     125 + 
     126 +@app.get("/predict")
     127 +async def predict(predict_idxs: str = """["classification_validate_dataset","index1", "index2", "index3"]""", re_execution: str = "False"):
     128 + """
     129 + Endpoint that allows to Load a pretrained model to make predictions over data.
     130 + :param predict_idxs: str that represents a list of index names to extract the datsets to perform predictions on
     131 + """
     132 + logging.basicConfig(level=logging.DEBUG, filename='logs/predict', filemode='w')
     133 + 
     134 + re_execution = re_execution == "True"
     135 + model_path = config.get("PATH", "MODEL_PATH")
     136 + 
     137 + 
     138 + if re_execution or len(os.listdir('results')) == 0:
     139 + fasttext_flag = config.getboolean("OPTIONS", "FASTTEXT")
     140 + prepare_data = config.getboolean("OPTIONS", "PREPARE_DATA" )
     141 + retrieve = config.getboolean("OPTIONS", "RETRIEVE")
     142 + 
     143 + global dataset_path, rawData_path, elastic_host
     144 + 
     145 + predict_idxs = json.loads(predict_idxs)
     146 + 
     147 + if not os.path.isfile(model_path):
     148 + model_path = model_path + 'model.bin'
     149 +
     150 + if prepare_data:
     151 + if retrieve: utils.get_datasets_elastic(elastic_host, datasets_path = rawData_path, search_object={"query": {"match_all": {}}}, idx_names = predict_idxs, all_idx=False)
     152 + 
     153 + if fasttext_flag:
     154 + _ , test_path = data.create_datasets(path_to_rawData = rawData_path, path_to_datasets=dataset_path, training_data=False,
     155 + predict=True, predict_idx = predict_idxs, idx_pairs={})
     156 + 
     157 +
     158 + logger.debug(f'[PATH] Dataset Path:{dataset_path}')
     159 + logger.debug(f'[PATH] Model Path:{model_path}')
     160 + logger.debug(f'[PATH] Predictions Path:{predictions_path}')
     161 + logger.debug(f'[OPTIONS] FASTTEXT?:{fasttext_flag}')
     162 + 
     163 + output = {}
     164 + 
     165 + for predict_index in predict_idxs:
     166 + 
     167 + file_name = f'fasttext_test-{predict_index}.txt'
     168 + 
     169 + results = model.predict(dataset_path+file_name, model_path, predictions_path, fasttext_flag = fasttext_flag)
     170 + data_sources = utils.category_percent(results['Path to predictions'], data_sources = True).keys()
     171 +
     172 + output[predict_index] = {
     173 + "Category Split: Data types" : utils.category_percent(results['Path to predictions'], data_sources = False),
     174 + "Techniques" : mapping.dataSources2techniques(data_sources),
     175 + "Predictions Results / Path to predictions" : results
     176 + }
     177 +
     178 +
     179 + output['MITRE'] = utils.technique_overlapping(output)
     180 + output['log-entities'] = json.load(open("entities.json",))
     181 + print(output)
     182 + 
     183 + for key, _ in output.items():
     184 + if key in predict_idxs:
     185 + del output[key]["Techniques"]
     186 + 
     187 + from datetime import datetime
     188 + 
     189 + with open(f'results/{datetime.now()}.json', 'w') as results_file:
     190 + json.dump(output, results_file, indent = 4)
     191 +
     192 + else:
     193 + file = r'results/'+ str(max(os.listdir('results')))
     194 + output = json.load(open(file,))
     195 +
     196 + 
     197 + try:
     198 + os.path.isfile(model_path)
     199 + return output
     200 + except FileNotFoundError as fnf:
     201 + print(fnf)
     202 +
     203 + 
     204 +@app.get("/get_results")
     205 +async def get_results():
     206 + try:
     207 + file = r'results/'+ str(max(os.listdir('results')))
     208 + return json.load(open(file,))
     209 + except:
     210 + return "File not available"
     211 + 
     212 + 
     213 +@app.get("/assert_completeness")
     214 +async def predict_completeness(predict_idxs: str = """["webproxy-squid","webserver-nginx","webserver-generic"]"""):
     215 + 
     216 + """
     217 + Endpoint to assert the completeness over a set of given indexes
     218 + :param predict_idxs: str that represents a list of index names to extract the datsets to perform predictions on
     219 + """
     220 + 
     221 + model_path = config.get("PATH", "MODEL_PATH_COMPLETENESS")
     222 + rawData_path = config.get("PATH", "RAW_PATH")
     223 + retrieve = config.getboolean("OPTIONS", "RETRIEVE_COMPLETENESS")
     224 + 
     225 + logging.basicConfig(level=logging.DEBUG, filename='logs/predict', filemode='w')
     226 + logger.debug(f'[PATH] Model Path:{model_path}')
     227 + logger.debug(f'[PATH] RawData Path:{rawData_path}')
     228 + logger.debug(f'[OPTIONS] Data retrieved? :{retrieve}')
     229 + 
     230 + predict_idxs = json.loads(predict_idxs)
     231 + 
     232 + if retrieve: utils.get_datasets_elastic(elastic_host, datasets_path = rawData_path, search_object={"query": {"match_all": {}}}, idx_names = predict_idxs, all_idx=False)
     233 +
     234 + nlp_ner = sp.load(model_path)
     235 + 
     236 + output_dict = {}
     237 + named_entities = []
     238 + 
     239 + for idx in predict_idxs:
     240 + 
     241 + print('Extracting from ', idx)
     242 + test_data = open(f"{rawData_path}/{idx}.txt")
     243 + test_data_lines = test_data.read().splitlines()[0:100]
     244 + test_data.close()
     245 + 
     246 + for line in tqdm(test_data_lines):
     247 + doc = nlp_ner(line)
     248 + output_dict[line] = []
     249 + for ent in doc.ents:
     250 + output_dict[line].append((ent.text, ent.start_char, ent.end_char, ent.label_))
     251 + if ent.label_ not in named_entities:
     252 + named_entities.append(ent.label_)
     253 +
     254 + return {"named_entities" : named_entities,
     255 + "entities_by_point" : output_dict
     256 + }
     257 + 
     258 +
     259 + 
     260 +@app.get("/dummy")
     261 +async def dummy_endpoint():
     262 + idxs_sources = [ {
     263 + "index_1" :
     264 + {
     265 + "Network Traffic Content (webserver)": "64.8824296805",
     266 + "Domain Name: Active DNS": "86.136300963",
     267 + "Network Traffic Content": "19.0061410207",
     268 + "Filebeat values are waiting...": "12.7020491282",
     269 + "Network Traffic Content (DHCP)": "2.2477302618",
     270 + "User Account: User Account Authentication": "0.8545988715",
     271 + "User Account: User Account Creation": "0.8545988715",
     272 + "User Account: User Account Deletion": "0.8545988715",
     273 + "User Account: User Account Modification": "1.709197743",
     274 + "User Account: User Account Metadata": "0.8545988715",
     275 + "Process: OS API Execution": "0.3070510373",
     276 + "Process: Process Access": "0.3070510373",
     277 + "Process: Process Creation": "0.3070510373",
     278 + "Process: Process Metadata": "0.3070510373",
     279 + "Process: Process Modification": "0.3070510373",
     280 + "Process: Process Termination": "0.3070510373"
     281 + }
     282 + },
     283 +
     284 + {
     285 + "index_2" :
     286 + {
     287 + "Network Traffic Content (webserver)": "34.8824296805",
     288 + "Domain Name: Active DNS": "86.136300963",
     289 + "Network Traffic Content": "49.0061410207",
     290 + "Filebeat values are waiting...": "8.7020491282",
     291 + "Network Traffic Content (DHCP)": "2.2477302618",
     292 + "User Account: User Account Authentication": "4.8545988715",
     293 + "User Account: User Account Creation": "4.8545988715",
     294 + "User Account: User Account Deletion": "4.8545988715",
     295 + "User Account: User Account Modification": "1.709197743",
     296 + "User Account: User Account Metadata": "0.8545988715",
     297 + "Process: OS API Execution": "0.3070510373",
     298 + "Process: Process Access": "0.3070510373",
     299 + "Process: Process Creation": "0.3070510373",
     300 + "Process: Process Metadata": "0.3070510373",
     301 + "Process: Process Modification": "0.3070510373",
     302 + "Process: Process Termination": "0.3070510373"
     303 + }
     304 + },
     305 +
     306 + {
     307 + "index_3" :
     308 + {
     309 + "Network Traffic Content (webserver)": "64.8824296805",
     310 + "Domain Name: Active DNS": "46.136300963",
     311 + "Network Traffic Content": "19.0061410207",
     312 + "Filebeat values are waiting...": "12.7020491282",
     313 + "Network Traffic Content (DHCP)": "2.2477302618",
     314 + "User Account: User Account Authentication": "0.8545988715",
     315 + "User Account: User Account Creation": "0.8545988715",
     316 + "User Account: User Account Deletion": "0.8545988715",
     317 + "User Account: User Account Modification": "1.709197743",
     318 + "User Account: User Account Metadata": "0.8545988715",
     319 + "Process: OS API Execution": "20.3070510373",
     320 + "Process: Process Access": "20.3070510373",
     321 + "Process: Process Creation": "20.3070510373",
     322 + "Process: Process Metadata": "20.3070510373",
     323 + "Process: Process Modification": "20.3070510373",
     324 + "Process: Process Termination": "20.3070510373"
     325 + }
     326 + }
     327 + ]
     328 + idxs_types = [ {
     329 + "index_1" :
     330 + { "filebeat": "76.7458580307",
     331 + "evtx" : "12.5517246889",
     332 + "dns" : "9.4877857839",
     333 + "webserver" : "1.2146314965"
     334 + }
     335 + },
     336 +
     337 + {
     338 + "index_2" :
     339 + { "filebeat": "66.7458580307",
     340 + "evtx" : "17.5517246889",
     341 + "dns" : "14.4877857839",
     342 + "webserver" : "1.2146314965"
     343 + }
     344 + },
     345 +
     346 + {
     347 + "index_3" :
     348 + { "filebeat": "56.7458580307",
     349 + "evtx" : "22.5517246889",
     350 + "dns" : "19.4877857839",
     351 + "webserver" : "1.2146314965"
     352 + }
     353 + }
     354 + ]
     355 + 
     356 + mitre = json.load(open('AI_Engine/production_src/dummy_techniques.json',))
     357 + 
     358 + dummy_dict = {
     359 + "MITRE" : mitre,
     360 + "log-sources" : idxs_sources ,
     361 + "log-types" : idxs_types
     362 + }
     363 + 
     364 + return(json.dumps(dummy_dict, indent=4))
     365 + 
     366 + 
     367 +@app.get("/dummy__")
     368 +async def dummy_endpoint__():
     369 + 
     370 + idxs_sources = [ {
     371 + "index_1" :
     372 + {
     373 + "Network Traffic Content (webserver)": "64.8824296805",
     374 + "Domain Name: Active DNS": "86.136300963",
     375 + "Network Traffic Content": "19.0061410207",
     376 + "Filebeat values are waiting...": "12.7020491282",
     377 + "Network Traffic Content (DHCP)": "2.2477302618",
     378 + "User Account: User Account Authentication": "0.8545988715",
     379 + "User Account: User Account Creation": "0.8545988715",
     380 + "User Account: User Account Deletion": "0.8545988715",
     381 + "User Account: User Account Modification": "1.709197743",
     382 + "User Account: User Account Metadata": "0.8545988715",
     383 + "Process: OS API Execution": "0.3070510373",
     384 + "Process: Process Access": "0.3070510373",
     385 + "Process: Process Creation": "0.3070510373",
     386 + "Process: Process Metadata": "0.3070510373",
     387 + "Process: Process Modification": "0.3070510373",
     388 + "Process: Process Termination": "0.3070510373"
     389 + }
     390 + },
     391 +
     392 + {
     393 + "index_2" :
     394 + {
     395 + "Network Traffic Content (webserver)": "34.8824296805",
     396 + "Domain Name: Active DNS": "86.136300963",
     397 + "Network Traffic Content": "49.0061410207",
     398 + "Filebeat values are waiting...": "8.7020491282",
     399 + "Network Traffic Content (DHCP)": "2.2477302618",
     400 + "User Account: User Account Authentication": "4.8545988715",
     401 + "User Account: User Account Creation": "4.8545988715",
     402 + "User Account: User Account Deletion": "4.8545988715",
     403 + "User Account: User Account Modification": "1.709197743",
     404 + "User Account: User Account Metadata": "0.8545988715",
     405 + "Process: OS API Execution": "0.3070510373",
     406 + "Process: Process Access": "0.3070510373",
     407 + "Process: Process Creation": "0.3070510373",
     408 + "Process: Process Metadata": "0.3070510373",
     409 + "Process: Process Modification": "0.3070510373",
     410 + "Process: Process Termination": "0.3070510373"
     411 + }
     412 + },
     413 +
     414 + {
     415 + "index_3" :
     416 + {
     417 + "Network Traffic Content (webserver)": "64.8824296805",
     418 + "Domain Name: Active DNS": "46.136300963",
     419 + "Network Traffic Content": "19.0061410207",
     420 + "Filebeat values are waiting...": "12.7020491282",
     421 + "Network Traffic Content (DHCP)": "2.2477302618",
     422 + "User Account: User Account Authentication": "0.8545988715",
     423 + "User Account: User Account Creation": "0.8545988715",
     424 + "User Account: User Account Deletion": "0.8545988715",
     425 + "User Account: User Account Modification": "1.709197743",
     426 + "User Account: User Account Metadata": "0.8545988715",
     427 + "Process: OS API Execution": "20.3070510373",
     428 + "Process: Process Access": "20.3070510373",
     429 + "Process: Process Creation": "20.3070510373",
     430 + "Process: Process Metadata": "20.3070510373",
     431 + "Process: Process Modification": "20.3070510373",
     432 + "Process: Process Termination": "20.3070510373"
     433 + }
     434 + }
     435 + ]
     436 + idxs_types = [ {
     437 + "index_1" :
     438 + { "filebeat": "76.7458580307",
     439 + "evtx" : "12.5517246889",
     440 + "dns" : "9.4877857839",
     441 + "webserver" : "1.2146314965"
     442 + }
     443 + },
     444 +
     445 + {
     446 + "index_2" :
     447 + { "filebeat": "66.7458580307",
     448 + "evtx" : "17.5517246889",
     449 + "dns" : "14.4877857839",
     450 + "webserver" : "1.2146314965"
     451 + }
     452 + },
     453 +
     454 + {
     455 + "index_3" :
     456 + { "filebeat": "56.7458580307",
     457 + "evtx" : "22.5517246889",
     458 + "dns" : "19.4877857839",
     459 + "webserver" : "1.2146314965"
     460 + }
     461 + }
     462 + ]
     463 + entities = [ {
     464 + "index_1" :
     465 + {
     466 + "firewall": ["FILENAME", "PACKETS-SENT", "URL", "SORUCE", "APPLICATION", "PACKETS-RECEIVED", "BYTES-SENT", "BYTES-RECEIVED"],
     467 + "dns" : ["IP", "PROTOCOL", "CODE", "BYTES-SENT", "URL", "USER_AGENT"],
     468 + "webserver" : ["IP", "URL", "HTTP-CODE", "HTTP-METHOD"],
     469 + "evtx" : [],
     470 + "filebeat" : []
     471 + }
     472 + },
     473 + {
     474 + "index_2" :
     475 + {
     476 + "firewall": ["FILENAME", "URL", "SORUCE", "APPLICATION", "BYTES-SENT", "BYTES-RECEIVED"],
     477 + "dns" : ["IP", "PROTOCOL", "CODE", "URL"],
     478 + "webserver" : ["IP", "URL", "HTTP-CODE", "HTTP-METHOD"],
     479 + "evtx" : [],
     480 + "filebeat" : []
     481 + }
     482 + },
     483 + {
     484 + "index_3" :
     485 + {
     486 + "firewall": ["FILENAME", "PACKETS-SENT", "URL", "SORUCE", "APPLICATION", "PACKETS-RECEIVED"],
     487 + "dns" : ["IP", "PROTOCOL", "CODE", "BYTES-SENT", "URL"],
     488 + "webserver" : ["IP", "URL", "HTTP-METHOD"],
     489 + "evtx" : [],
     490 + "filebeat" : []
     491 + }
     492 + }
     493 + ]
     494 +
     495 + 
     496 + mitre = json.load(open('AI_Engine/production_src/dummy_techniques.json',))
     497 + 
     498 + dummy_out_full = {
     499 + "MITRE" : mitre,
     500 + "log-sources" : idxs_sources ,
     501 + "log-types" : idxs_types,
     502 + "log-entities" : entities
     503 + }
     504 + 
     505 + dummy_out_complete = [{'techniqueID' : technique, 'color': color} for technique, color in mitre.items() if color == "#8cdd69"]
     506 + dummy_out_partial = [{'techniqueID' : technique, 'color': color} for technique, color in mitre.items() if color == "#ffd966"]
     507 + dummy_out_missing = [{'techniqueID' : technique, 'color': color} for technique, color in mitre.items() if color == "#ed4f4f"]
     508 + 
     509 + saving_path = "data/api_out/"
     510 + files_paths = list(map(lambda file: saving_path+file, ['dummy_out_full.txt', 'dummy_out_complete.txt', 'dummy_out_partial.txt', 'dummy_out_missing.txt']))
     511 + 
     512 + outputs = [dummy_out_full, dummy_out_complete, dummy_out_partial, dummy_out_missing]
     513 + 
     514 + for path, output in zip(files_paths, outputs):
     515 + with open(path, 'w') as f:
     516 + json.dump(output, f, ensure_ascii=False, indent=4)
     517 + 
     518 + return dummy_out_full
     519 +
     520 +
     521 + 
     522 +@app.get("/loadConfig")
     523 +async def loadConfig():
     524 + 
     525 + with open("data/api_out/MatrixConfigurationFinal.json", "rb") as _fh:
     526 + return StreamingResponse(io.BytesIO(_fh.read()), media_type="application/json; charset=utf8")
     527 + 
     528 +@app.post("/uploadConfig")
     529 +async def uploadConfig(data: Request):
     530 + 
     531 + conf = await data.json()
     532 + try:
     533 + with open('data/api_out/MatrixConfigurationFinal.json', 'w', encoding='utf-8') as outfile:
     534 + json.dump(conf, outfile, ensure_ascii=True, indent=4)
     535 + return "OK"
     536 + except IOError as e:
     537 + return e
  • ■ ■ ■ ■ ■ ■
    Dockerfile
     1 + 
     2 +#FROM python:3.10.6
     3 +#WORKDIR /code
     4 +#COPY ./requeriments.txt ./requeriments.txt
     5 +#RUN pip install -r requeriments.txt
     6 +#EXPOSE 8081
     7 +#COPY . /code/src
     8 +#CMD ["uvicorn", "src.main:app", "--reload", "--host", "0.0.0.0", "--port", "8081"]
     9 + 
     10 +
     11 +
     12 +FROM python:3.9
     13 + 
     14 +WORKDIR /code
     15 +
     16 +COPY ./requeriments.txt /code/requeriments.txt
     17 + 
     18 +RUN pip install --no-cache-dir --upgrade -r /code/requeriments.txt
     19 + 
     20 +COPY . /code
     21 +RUN mkdir /code/logs
     22 +RUN mkdir /code/data/predictions
     23 + 
     24 +# COPY ./production_src /code/production_src
     25 + 
     26 +CMD ["uvicorn", "AI_Engine.main:app", "--host", "0.0.0.0", "--port", "8081"]
     27 + 
     28 + 
  • ■ ■ ■ ■ ■ ■
    data/api_out/MatrixConfigurationFinal.json
     1 +{
     2 + "name": "MITRE ATT&CK\u00ae",
     3 + "versions": {
     4 + "attack": "9",
     5 + "navigator": "4.5",
     6 + "layer": "4.3"
     7 + },
     8 + "domain": "enterprise-attack",
     9 + "description": "Mapping Elastic Secrity (https://www.elastic.co/security) Detection Rules to MITRE ATT&CK Navigator",
     10 + "filters": {},
     11 + "sorting": 0,
     12 + "layout": {
     13 + "layout": "side",
     14 + "showName": true,
     15 + "showID": true
     16 + },
     17 + "hideDisabled": false,
     18 + "legendItems": [
     19 + {
     20 + "label": "El.Sec. => Elastic Secrity",
     21 + "color": "#bbddff"
     22 + },
     23 + {
     24 + "label": "EQL => Event Query Language",
     25 + "color": "#fa744e"
     26 + },
     27 + {
     28 + "label": "ML => Machine Learning",
     29 + "color": "#0077cc"
     30 + },
     31 + {
     32 + "label": "Q => Query (KQL, Lucene, Elasticsearch DSL)",
     33 + "color": "#54bcb2"
     34 + },
     35 + {
     36 + "label": "TH => Threshold",
     37 + "color": "#fec514"
     38 + }
     39 + ],
     40 + "gradient": {
     41 + "colors": [
     42 + "#ed4f4f",
     43 + "#ffd966",
     44 + "#44ff66"
     45 + ],
     46 + "minValue": 0,
     47 + "maxValue": 100
     48 + },
     49 + "showTacticRowBackground": true,
     50 + "tacticRowBackground": "#bbddff",
     51 + "selectTechniquesAcrossTactics": false,
     52 + "selectSubtechniquesWithParent": false,
     53 + "metadata": [
     54 + {
     55 + "name": "Elastic Stack version",
     56 + "value": "8.4.1"
     57 + },
     58 + {
     59 + "name": "Metadata format",
     60 + "value": "<Severity> / <Risk_score>: <Name> [<Rule_type>]"
     61 + },
     62 + {
     63 + "name": "Github project",
     64 + "value": "https://github.com/ElasticSA/elsec_dr2an"
     65 + }
     66 + ],
     67 + "techniques": []
     68 +}
  • ■ ■ ■ ■ ■ ■
    data/api_out/dummy_out_complete.txt
     1 +[
     2 + {
     3 + "techniqueID": "T1548.004",
     4 + "color": "#8cdd69"
     5 + },
     6 + {
     7 + "techniqueID": "T1134",
     8 + "color": "#8cdd69"
     9 + },
     10 + {
     11 + "techniqueID": "T1134.004",
     12 + "color": "#8cdd69"
     13 + },
     14 + {
     15 + "techniqueID": "T1134.005",
     16 + "color": "#8cdd69"
     17 + },
     18 + {
     19 + "techniqueID": "T1134.001",
     20 + "color": "#8cdd69"
     21 + },
     22 + {
     23 + "techniqueID": "T1098.001",
     24 + "color": "#8cdd69"
     25 + },
     26 + {
     27 + "techniqueID": "T1098.004",
     28 + "color": "#8cdd69"
     29 + },
     30 + {
     31 + "techniqueID": "T1583",
     32 + "color": "#8cdd69"
     33 + },
     34 + {
     35 + "techniqueID": "T1583.004",
     36 + "color": "#8cdd69"
     37 + },
     38 + {
     39 + "techniqueID": "T1583.006",
     40 + "color": "#8cdd69"
     41 + },
     42 + {
     43 + "techniqueID": "T1595.001",
     44 + "color": "#8cdd69"
     45 + },
     46 + {
     47 + "techniqueID": "T1557.002",
     48 + "color": "#8cdd69"
     49 + },
     50 + {
     51 + "techniqueID": "T1071",
     52 + "color": "#8cdd69"
     53 + },
     54 + {
     55 + "techniqueID": "T1071.002",
     56 + "color": "#8cdd69"
     57 + },
     58 + {
     59 + "techniqueID": "T1071.003",
     60 + "color": "#8cdd69"
     61 + },
     62 + {
     63 + "techniqueID": "T1010",
     64 + "color": "#8cdd69"
     65 + },
     66 + {
     67 + "techniqueID": "T1560",
     68 + "color": "#8cdd69"
     69 + },
     70 + {
     71 + "techniqueID": "T1560.002",
     72 + "color": "#8cdd69"
     73 + },
     74 + {
     75 + "techniqueID": "T1560.001",
     76 + "color": "#8cdd69"
     77 + },
     78 + {
     79 + "techniqueID": "T1197",
     80 + "color": "#8cdd69"
     81 + },
     82 + {
     83 + "techniqueID": "T1547.002",
     84 + "color": "#8cdd69"
     85 + },
     86 + {
     87 + "techniqueID": "T1547.006",
     88 + "color": "#8cdd69"
     89 + },
     90 + {
     91 + "techniqueID": "T1547.008",
     92 + "color": "#8cdd69"
     93 + },
     94 + {
     95 + "techniqueID": "T1547.015",
     96 + "color": "#8cdd69"
     97 + },
     98 + {
     99 + "techniqueID": "T1547.012",
     100 + "color": "#8cdd69"
     101 + },
     102 + {
     103 + "techniqueID": "T1547.007",
     104 + "color": "#8cdd69"
     105 + },
     106 + {
     107 + "techniqueID": "T1547.005",
     108 + "color": "#8cdd69"
     109 + },
     110 + {
     111 + "techniqueID": "T1547.004",
     112 + "color": "#8cdd69"
     113 + },
     114 + {
     115 + "techniqueID": "T1547.013",
     116 + "color": "#8cdd69"
     117 + },
     118 + {
     119 + "techniqueID": "T1037.002",
     120 + "color": "#8cdd69"
     121 + },
     122 + {
     123 + "techniqueID": "T1176",
     124 + "color": "#8cdd69"
     125 + },
     126 + {
     127 + "techniqueID": "T1110",
     128 + "color": "#8cdd69"
     129 + },
     130 + {
     131 + "techniqueID": "T1110.001",
     132 + "color": "#8cdd69"
     133 + },
     134 + {
     135 + "techniqueID": "T1538",
     136 + "color": "#8cdd69"
     137 + },
     138 + {
     139 + "techniqueID": "T1619",
     140 + "color": "#8cdd69"
     141 + },
     142 + {
     143 + "techniqueID": "T1059.001",
     144 + "color": "#8cdd69"
     145 + },
     146 + {
     147 + "techniqueID": "T1059.004",
     148 + "color": "#8cdd69"
     149 + },
     150 + {
     151 + "techniqueID": "T1059.003",
     152 + "color": "#8cdd69"
     153 + },
     154 + {
     155 + "techniqueID": "T1092",
     156 + "color": "#8cdd69"
     157 + },
     158 + {
     159 + "techniqueID": "T1586.001",
     160 + "color": "#8cdd69"
     161 + },
     162 + {
     163 + "techniqueID": "T1554",
     164 + "color": "#8cdd69"
     165 + },
     166 + {
     167 + "techniqueID": "T1584.002",
     168 + "color": "#8cdd69"
     169 + },
     170 + {
     171 + "techniqueID": "T1584.001",
     172 + "color": "#8cdd69"
     173 + },
     174 + {
     175 + "techniqueID": "T1584.003",
     176 + "color": "#8cdd69"
     177 + },
     178 + {
     179 + "techniqueID": "T1609",
     180 + "color": "#8cdd69"
     181 + },
     182 + {
     183 + "techniqueID": "T1543.001",
     184 + "color": "#8cdd69"
     185 + },
     186 + {
     187 + "techniqueID": "T1543.004",
     188 + "color": "#8cdd69"
     189 + },
     190 + {
     191 + "techniqueID": "T1543.003",
     192 + "color": "#8cdd69"
     193 + },
     194 + {
     195 + "techniqueID": "T1555",
     196 + "color": "#8cdd69"
     197 + },
     198 + {
     199 + "techniqueID": "T1555.005",
     200 + "color": "#8cdd69"
     201 + },
     202 + {
     203 + "techniqueID": "T1486",
     204 + "color": "#8cdd69"
     205 + },
     206 + {
     207 + "techniqueID": "T1565",
     208 + "color": "#8cdd69"
     209 + },
     210 + {
     211 + "techniqueID": "T1565.003",
     212 + "color": "#8cdd69"
     213 + },
     214 + {
     215 + "techniqueID": "T1565.001",
     216 + "color": "#8cdd69"
     217 + },
     218 + {
     219 + "techniqueID": "T1074.002",
     220 + "color": "#8cdd69"
     221 + },
     222 + {
     223 + "techniqueID": "T1030",
     224 + "color": "#8cdd69"
     225 + },
     226 + {
     227 + "techniqueID": "T1530",
     228 + "color": "#8cdd69"
     229 + },
     230 + {
     231 + "techniqueID": "T1213",
     232 + "color": "#8cdd69"
     233 + },
     234 + {
     235 + "techniqueID": "T1213.003",
     236 + "color": "#8cdd69"
     237 + },
     238 + {
     239 + "techniqueID": "T1039",
     240 + "color": "#8cdd69"
     241 + },
     242 + {
     243 + "techniqueID": "T1622",
     244 + "color": "#8cdd69"
     245 + },
     246 + {
     247 + "techniqueID": "T1491.002",
     248 + "color": "#8cdd69"
     249 + },
     250 + {
     251 + "techniqueID": "T1587.003",
     252 + "color": "#8cdd69"
     253 + },
     254 + {
     255 + "techniqueID": "T1587.004",
     256 + "color": "#8cdd69"
     257 + },
     258 + {
     259 + "techniqueID": "T1006",
     260 + "color": "#8cdd69"
     261 + },
     262 + {
     263 + "techniqueID": "T1114",
     264 + "color": "#8cdd69"
     265 + },
     266 + {
     267 + "techniqueID": "T1114.001",
     268 + "color": "#8cdd69"
     269 + },
     270 + {
     271 + "techniqueID": "T1114.002",
     272 + "color": "#8cdd69"
     273 + },
     274 + {
     275 + "techniqueID": "T1573.002",
     276 + "color": "#8cdd69"
     277 + },
     278 + {
     279 + "techniqueID": "T1499",
     280 + "color": "#8cdd69"
     281 + },
     282 + {
     283 + "techniqueID": "T1499.003",
     284 + "color": "#8cdd69"
     285 + },
     286 + {
     287 + "techniqueID": "T1546.009",
     288 + "color": "#8cdd69"
     289 + },
     290 + {
     291 + "techniqueID": "T1546.011",
     292 + "color": "#8cdd69"
     293 + },
     294 + {
     295 + "techniqueID": "T1546.012",
     296 + "color": "#8cdd69"
     297 + },
     298 + {
     299 + "techniqueID": "T1546.002",
     300 + "color": "#8cdd69"
     301 + },
     302 + {
     303 + "techniqueID": "T1546.004",
     304 + "color": "#8cdd69"
     305 + },
     306 + {
     307 + "techniqueID": "T1480",
     308 + "color": "#8cdd69"
     309 + },
     310 + {
     311 + "techniqueID": "T1480.001",
     312 + "color": "#8cdd69"
     313 + },
     314 + {
     315 + "techniqueID": "T1048.002",
     316 + "color": "#8cdd69"
     317 + },
     318 + {
     319 + "techniqueID": "T1048.001",
     320 + "color": "#8cdd69"
     321 + },
     322 + {
     323 + "techniqueID": "T1048.003",
     324 + "color": "#8cdd69"
     325 + },
     326 + {
     327 + "techniqueID": "T1041",
     328 + "color": "#8cdd69"
     329 + },
     330 + {
     331 + "techniqueID": "T1052.001",
     332 + "color": "#8cdd69"
     333 + },
     334 + {
     335 + "techniqueID": "T1567",
     336 + "color": "#8cdd69"
     337 + },
     338 + {
     339 + "techniqueID": "T1203",
     340 + "color": "#8cdd69"
     341 + },
     342 + {
     343 + "techniqueID": "T1212",
     344 + "color": "#8cdd69"
     345 + },
     346 + {
     347 + "techniqueID": "T1210",
     348 + "color": "#8cdd69"
     349 + },
     350 + {
     351 + "techniqueID": "T1133",
     352 + "color": "#8cdd69"
     353 + },
     354 + {
     355 + "techniqueID": "T1222.001",
     356 + "color": "#8cdd69"
     357 + },
     358 + {
     359 + "techniqueID": "T1606.002",
     360 + "color": "#8cdd69"
     361 + },
     362 + {
     363 + "techniqueID": "T1606.001",
     364 + "color": "#8cdd69"
     365 + },
     366 + {
     367 + "techniqueID": "T1592.003",
     368 + "color": "#8cdd69"
     369 + },
     370 + {
     371 + "techniqueID": "T1592.002",
     372 + "color": "#8cdd69"
     373 + },
     374 + {
     375 + "techniqueID": "T1590",
     376 + "color": "#8cdd69"
     377 + },
     378 + {
     379 + "techniqueID": "T1590.001",
     380 + "color": "#8cdd69"
     381 + },
     382 + {
     383 + "techniqueID": "T1590.005",
     384 + "color": "#8cdd69"
     385 + },
     386 + {
     387 + "techniqueID": "T1590.006",
     388 + "color": "#8cdd69"
     389 + },
     390 + {
     391 + "techniqueID": "T1615",
     392 + "color": "#8cdd69"
     393 + },
     394 + {
     395 + "techniqueID": "T1564.008",
     396 + "color": "#8cdd69"
     397 + },
     398 + {
     399 + "techniqueID": "T1564.004",
     400 + "color": "#8cdd69"
     401 + },
     402 + {
     403 + "techniqueID": "T1564.007",
     404 + "color": "#8cdd69"
     405 + },
     406 + {
     407 + "techniqueID": "T1574",
     408 + "color": "#8cdd69"
     409 + },
     410 + {
     411 + "techniqueID": "T1574.002",
     412 + "color": "#8cdd69"
     413 + },
     414 + {
     415 + "techniqueID": "T1574.010",
     416 + "color": "#8cdd69"
     417 + },
     418 + {
     419 + "techniqueID": "T1562",
     420 + "color": "#8cdd69"
     421 + },
     422 + {
     423 + "techniqueID": "T1562.002",
     424 + "color": "#8cdd69"
     425 + },
     426 + {
     427 + "techniqueID": "T1562.001",
     428 + "color": "#8cdd69"
     429 + },
     430 + {
     431 + "techniqueID": "T1562.010",
     432 + "color": "#8cdd69"
     433 + },
     434 + {
     435 + "techniqueID": "T1525",
     436 + "color": "#8cdd69"
     437 + },
     438 + {
     439 + "techniqueID": "T1070",
     440 + "color": "#8cdd69"
     441 + },
     442 + {
     443 + "techniqueID": "T1070.003",
     444 + "color": "#8cdd69"
     445 + },
     446 + {
     447 + "techniqueID": "T1070.002",
     448 + "color": "#8cdd69"
     449 + },
     450 + {
     451 + "techniqueID": "T1105",
     452 + "color": "#8cdd69"
     453 + },
     454 + {
     455 + "techniqueID": "T1056.003",
     456 + "color": "#8cdd69"
     457 + },
     458 + {
     459 + "techniqueID": "T1534",
     460 + "color": "#8cdd69"
     461 + },
     462 + {
     463 + "techniqueID": "T1036",
     464 + "color": "#8cdd69"
     465 + },
     466 + {
     467 + "techniqueID": "T1036.007",
     468 + "color": "#8cdd69"
     469 + },
     470 + {
     471 + "techniqueID": "T1036.004",
     472 + "color": "#8cdd69"
     473 + },
     474 + {
     475 + "techniqueID": "T1556.004",
     476 + "color": "#8cdd69"
     477 + },
     478 + {
     479 + "techniqueID": "T1556.003",
     480 + "color": "#8cdd69"
     481 + },
     482 + {
     483 + "techniqueID": "T1578.001",
     484 + "color": "#8cdd69"
     485 + },
     486 + {
     487 + "techniqueID": "T1578.003",
     488 + "color": "#8cdd69"
     489 + },
     490 + {
     491 + "techniqueID": "T1601.001",
     492 + "color": "#8cdd69"
     493 + },
     494 + {
     495 + "techniqueID": "T1621",
     496 + "color": "#8cdd69"
     497 + },
     498 + {
     499 + "techniqueID": "T1104",
     500 + "color": "#8cdd69"
     501 + },
     502 + {
     503 + "techniqueID": "T1106",
     504 + "color": "#8cdd69"
     505 + },
     506 + {
     507 + "techniqueID": "T1599.001",
     508 + "color": "#8cdd69"
     509 + },
     510 + {
     511 + "techniqueID": "T1498",
     512 + "color": "#8cdd69"
     513 + },
     514 + {
     515 + "techniqueID": "T1003.004",
     516 + "color": "#8cdd69"
     517 + },
     518 + {
     519 + "techniqueID": "T1003.001",
     520 + "color": "#8cdd69"
     521 + },
     522 + {
     523 + "techniqueID": "T1027",
     524 + "color": "#8cdd69"
     525 + },
     526 + {
     527 + "techniqueID": "T1027.001",
     528 + "color": "#8cdd69"
     529 + },
     530 + {
     531 + "techniqueID": "T1027.005",
     532 + "color": "#8cdd69"
     533 + },
     534 + {
     535 + "techniqueID": "T1588.002",
     536 + "color": "#8cdd69"
     537 + },
     538 + {
     539 + "techniqueID": "T1137.001",
     540 + "color": "#8cdd69"
     541 + },
     542 + {
     543 + "techniqueID": "T1137.002",
     544 + "color": "#8cdd69"
     545 + },
     546 + {
     547 + "techniqueID": "T1137.005",
     548 + "color": "#8cdd69"
     549 + },
     550 + {
     551 + "techniqueID": "T1069",
     552 + "color": "#8cdd69"
     553 + },
     554 + {
     555 + "techniqueID": "T1069.003",
     556 + "color": "#8cdd69"
     557 + },
     558 + {
     559 + "techniqueID": "T1069.002",
     560 + "color": "#8cdd69"
     561 + },
     562 + {
     563 + "techniqueID": "T1598",
     564 + "color": "#8cdd69"
     565 + },
     566 + {
     567 + "techniqueID": "T1566.001",
     568 + "color": "#8cdd69"
     569 + },
     570 + {
     571 + "techniqueID": "T1542",
     572 + "color": "#8cdd69"
     573 + },
     574 + {
     575 + "techniqueID": "T1542.005",
     576 + "color": "#8cdd69"
     577 + },
     578 + {
     579 + "techniqueID": "T1057",
     580 + "color": "#8cdd69"
     581 + },
     582 + {
     583 + "techniqueID": "T1055.015",
     584 + "color": "#8cdd69"
     585 + },
     586 + {
     587 + "techniqueID": "T1055.008",
     588 + "color": "#8cdd69"
     589 + },
     590 + {
     591 + "techniqueID": "T1572",
     592 + "color": "#8cdd69"
     593 + },
     594 + {
     595 + "techniqueID": "T1090",
     596 + "color": "#8cdd69"
     597 + },
     598 + {
     599 + "techniqueID": "T1563",
     600 + "color": "#8cdd69"
     601 + },
     602 + {
     603 + "techniqueID": "T1563.001",
     604 + "color": "#8cdd69"
     605 + },
     606 + {
     607 + "techniqueID": "T1021.001",
     608 + "color": "#8cdd69"
     609 + },
     610 + {
     611 + "techniqueID": "T1091",
     612 + "color": "#8cdd69"
     613 + },
     614 + {
     615 + "techniqueID": "T1053.007",
     616 + "color": "#8cdd69"
     617 + },
     618 + {
     619 + "techniqueID": "T1053.005",
     620 + "color": "#8cdd69"
     621 + },
     622 + {
     623 + "techniqueID": "T1597.001",
     624 + "color": "#8cdd69"
     625 + },
     626 + {
     627 + "techniqueID": "T1596",
     628 + "color": "#8cdd69"
     629 + },
     630 + {
     631 + "techniqueID": "T1596.004",
     632 + "color": "#8cdd69"
     633 + },
     634 + {
     635 + "techniqueID": "T1596.001",
     636 + "color": "#8cdd69"
     637 + },
     638 + {
     639 + "techniqueID": "T1596.002",
     640 + "color": "#8cdd69"
     641 + },
     642 + {
     643 + "techniqueID": "T1593.002",
     644 + "color": "#8cdd69"
     645 + },
     646 + {
     647 + "techniqueID": "T1593.001",
     648 + "color": "#8cdd69"
     649 + },
     650 + {
     651 + "techniqueID": "T1594",
     652 + "color": "#8cdd69"
     653 + },
     654 + {
     655 + "techniqueID": "T1505.001",
     656 + "color": "#8cdd69"
     657 + },
     658 + {
     659 + "techniqueID": "T1129",
     660 + "color": "#8cdd69"
     661 + },
     662 + {
     663 + "techniqueID": "T1072",
     664 + "color": "#8cdd69"
     665 + },
     666 + {
     667 + "techniqueID": "T1608.004",
     668 + "color": "#8cdd69"
     669 + },
     670 + {
     671 + "techniqueID": "T1539",
     672 + "color": "#8cdd69"
     673 + },
     674 + {
     675 + "techniqueID": "T1558.002",
     676 + "color": "#8cdd69"
     677 + },
     678 + {
     679 + "techniqueID": "T1553.006",
     680 + "color": "#8cdd69"
     681 + },
     682 + {
     683 + "techniqueID": "T1553.001",
     684 + "color": "#8cdd69"
     685 + },
     686 + {
     687 + "techniqueID": "T1195",
     688 + "color": "#8cdd69"
     689 + },
     690 + {
     691 + "techniqueID": "T1195.001",
     692 + "color": "#8cdd69"
     693 + },
     694 + {
     695 + "techniqueID": "T1218",
     696 + "color": "#8cdd69"
     697 + },
     698 + {
     699 + "techniqueID": "T1218.002",
     700 + "color": "#8cdd69"
     701 + },
     702 + {
     703 + "techniqueID": "T1218.014",
     704 + "color": "#8cdd69"
     705 + },
     706 + {
     707 + "techniqueID": "T1218.011",
     708 + "color": "#8cdd69"
     709 + },
     710 + {
     711 + "techniqueID": "T1614",
     712 + "color": "#8cdd69"
     713 + },
     714 + {
     715 + "techniqueID": "T1216",
     716 + "color": "#8cdd69"
     717 + },
     718 + {
     719 + "techniqueID": "T1221",
     720 + "color": "#8cdd69"
     721 + },
     722 + {
     723 + "techniqueID": "T1205",
     724 + "color": "#8cdd69"
     725 + },
     726 + {
     727 + "techniqueID": "T1127",
     728 + "color": "#8cdd69"
     729 + },
     730 + {
     731 + "techniqueID": "T1199",
     732 + "color": "#8cdd69"
     733 + },
     734 + {
     735 + "techniqueID": "T1552.007",
     736 + "color": "#8cdd69"
     737 + },
     738 + {
     739 + "techniqueID": "T1552.001",
     740 + "color": "#8cdd69"
     741 + },
     742 + {
     743 + "techniqueID": "T1535",
     744 + "color": "#8cdd69"
     745 + },
     746 + {
     747 + "techniqueID": "T1550.001",
     748 + "color": "#8cdd69"
     749 + },
     750 + {
     751 + "techniqueID": "T1550.003",
     752 + "color": "#8cdd69"
     753 + },
     754 + {
     755 + "techniqueID": "T1550.004",
     756 + "color": "#8cdd69"
     757 + },
     758 + {
     759 + "techniqueID": "T1078.002",
     760 + "color": "#8cdd69"
     761 + },
     762 + {
     763 + "techniqueID": "T1125",
     764 + "color": "#8cdd69"
     765 + },
     766 + {
     767 + "techniqueID": "T1497.001",
     768 + "color": "#8cdd69"
     769 + },
     770 + {
     771 + "techniqueID": "T1497.003",
     772 + "color": "#8cdd69"
     773 + },
     774 + {
     775 + "techniqueID": "T1600",
     776 + "color": "#8cdd69"
     777 + },
     778 + {
     779 + "techniqueID": "T1600.001",
     780 + "color": "#8cdd69"
     781 + },
     782 + {
     783 + "techniqueID": "T1102",
     784 + "color": "#8cdd69"
     785 + },
     786 + {
     787 + "techniqueID": "T1102.002",
     788 + "color": "#8cdd69"
     789 + },
     790 + {
     791 + "techniqueID": "T1102.003",
     792 + "color": "#8cdd69"
     793 + },
     794 + {
     795 + "techniqueID": "T1220",
     796 + "color": "#8cdd69"
     797 + }
     798 +]
  • ■ ■ ■ ■ ■ ■
    data/api_out/dummy_out_full.txt
     1 +{
     2 + "MITRE": {
     3 + "T1548": "#ffd966",
     4 + "T1548.002": "#ffd966",
     5 + "T1548.004": "#8cdd69",
     6 + "T1548.001": "#ed4f4f",
     7 + "T1548.003": "#ed4f4f",
     8 + "T1134": "#8cdd69",
     9 + "T1134.002": "#ffd966",
     10 + "T1134.003": "#ffd966",
     11 + "T1134.004": "#8cdd69",
     12 + "T1134.005": "#8cdd69",
     13 + "T1134.001": "#8cdd69",
     14 + "T1531": "#ffd966",
     15 + "T1087": "#ed4f4f",
     16 + "T1087.004": "#ed4f4f",
     17 + "T1087.002": "#ffd966",
     18 + "T1087.003": "#ed4f4f",
     19 + "T1087.001": "#ed4f4f",
     20 + "T1098": "#ffd966",
     21 + "T1098.001": "#8cdd69",
     22 + "T1098.003": "#ffd966",
     23 + "T1098.002": "#ffd966",
     24 + "T1098.005": "#ed4f4f",
     25 + "T1098.004": "#8cdd69",
     26 + "T1583": "#8cdd69",
     27 + "T1583.005": "#ffd966",
     28 + "T1583.002": "#ed4f4f",
     29 + "T1583.001": "#ed4f4f",
     30 + "T1583.004": "#8cdd69",
     31 + "T1583.003": "#ed4f4f",
     32 + "T1583.006": "#8cdd69",
     33 + "T1595": "#ffd966",
     34 + "T1595.001": "#8cdd69",
     35 + "T1595.002": "#ed4f4f",
     36 + "T1595.003": "#ffd966",
     37 + "T1557": "#ffd966",
     38 + "T1557.002": "#8cdd69",
     39 + "T1557.003": "#ed4f4f",
     40 + "T1557.001": "#ed4f4f",
     41 + "T1071": "#8cdd69",
     42 + "T1071.004": "#ed4f4f",
     43 + "T1071.002": "#8cdd69",
     44 + "T1071.003": "#8cdd69",
     45 + "T1071.001": "#ffd966",
     46 + "T1010": "#8cdd69",
     47 + "T1560": "#8cdd69",
     48 + "T1560.003": "#ed4f4f",
     49 + "T1560.002": "#8cdd69",
     50 + "T1560.001": "#8cdd69",
     51 + "T1123": "#ed4f4f",
     52 + "T1119": "#ffd966",
     53 + "T1020": "#ffd966",
     54 + "T1020.001": "#ed4f4f",
     55 + "T1197": "#8cdd69",
     56 + "T1547": "#ffd966",
     57 + "T1547.014": "#ffd966",
     58 + "T1547.002": "#8cdd69",
     59 + "T1547.006": "#8cdd69",
     60 + "T1547.008": "#8cdd69",
     61 + "T1547.015": "#8cdd69",
     62 + "T1547.010": "#ffd966",
     63 + "T1547.012": "#8cdd69",
     64 + "T1547.007": "#8cdd69",
     65 + "T1547.001": "#ffd966",
     66 + "T1547.005": "#8cdd69",
     67 + "T1547.009": "#ed4f4f",
     68 + "T1547.003": "#ed4f4f",
     69 + "T1547.004": "#8cdd69",
     70 + "T1547.013": "#8cdd69",
     71 + "T1037": "#ffd966",
     72 + "T1037.002": "#8cdd69",
     73 + "T1037.001": "#ffd966",
     74 + "T1037.003": "#ed4f4f",
     75 + "T1037.004": "#ed4f4f",
     76 + "T1037.005": "#ed4f4f",
     77 + "T1217": "#ffd966",
     78 + "T1176": "#8cdd69",
     79 + "T1185": "#ed4f4f",
     80 + "T1110": "#8cdd69",
     81 + "T1110.004": "#ed4f4f",
     82 + "T1110.002": "#ffd966",
     83 + "T1110.001": "#8cdd69",
     84 + "T1110.003": "#ed4f4f",
     85 + "T1612": "#ffd966",
     86 + "T1115": "#ffd966",
     87 + "T1580": "#ed4f4f",
     88 + "T1538": "#8cdd69",
     89 + "T1526": "#ed4f4f",
     90 + "T1619": "#8cdd69",
     91 + "T1059": "#ffd966",
     92 + "T1059.002": "#ed4f4f",
     93 + "T1059.007": "#ffd966",
     94 + "T1059.008": "#ed4f4f",
     95 + "T1059.001": "#8cdd69",
     96 + "T1059.006": "#ffd966",
     97 + "T1059.004": "#8cdd69",
     98 + "T1059.005": "#ffd966",
     99 + "T1059.003": "#8cdd69",
     100 + "T1092": "#8cdd69",
     101 + "T1586": "#ed4f4f",
     102 + "T1586.002": "#ed4f4f",
     103 + "T1586.001": "#8cdd69",
     104 + "T1554": "#8cdd69",
     105 + "T1584": "#ed4f4f",
     106 + "T1584.005": "#ffd966",
     107 + "T1584.002": "#8cdd69",
     108 + "T1584.001": "#8cdd69",
     109 + "T1584.004": "#ed4f4f",
     110 + "T1584.003": "#8cdd69",
     111 + "T1584.006": "#ed4f4f",
     112 + "T1609": "#8cdd69",
     113 + "T1613": "#ffd966",
     114 + "T1136": "#ffd966",
     115 + "T1136.003": "#ed4f4f",
     116 + "T1136.002": "#ffd966",
     117 + "T1136.001": "#ffd966",
     118 + "T1543": "#ed4f4f",
     119 + "T1543.001": "#8cdd69",
     120 + "T1543.004": "#8cdd69",
     121 + "T1543.002": "#ffd966",
     122 + "T1543.003": "#8cdd69",
     123 + "T1555": "#8cdd69",
     124 + "T1555.003": "#ed4f4f",
     125 + "T1555.001": "#ed4f4f",
     126 + "T1555.005": "#8cdd69",
     127 + "T1555.002": "#ed4f4f",
     128 + "T1555.004": "#ed4f4f",
     129 + "T1485": "#ed4f4f",
     130 + "T1132": "#ed4f4f",
     131 + "T1132.002": "#ffd966",
     132 + "T1132.001": "#ffd966",
     133 + "T1486": "#8cdd69",
     134 + "T1565": "#8cdd69",
     135 + "T1565.003": "#8cdd69",
     136 + "T1565.001": "#8cdd69",
     137 + "T1565.002": "#ed4f4f",
     138 + "T1001": "#ed4f4f",
     139 + "T1001.001": "#ed4f4f",
     140 + "T1001.003": "#ffd966",
     141 + "T1001.002": "#ed4f4f",
     142 + "T1074": "#ed4f4f",
     143 + "T1074.001": "#ffd966",
     144 + "T1074.002": "#8cdd69",
     145 + "T1030": "#8cdd69",
     146 + "T1530": "#8cdd69",
     147 + "T1602": "#ffd966",
     148 + "T1602.002": "#ffd966",
     149 + "T1602.001": "#ffd966",
     150 + "T1213": "#8cdd69",
     151 + "T1213.003": "#8cdd69",
     152 + "T1213.001": "#ffd966",
     153 + "T1213.002": "#ed4f4f",
     154 + "T1005": "#ed4f4f",
     155 + "T1039": "#8cdd69",
     156 + "T1025": "#ed4f4f",
     157 + "T1622": "#8cdd69",
     158 + "T1491": "#ffd966",
     159 + "T1491.002": "#8cdd69",
     160 + "T1491.001": "#ed4f4f",
     161 + "T1140": "#ffd966",
     162 + "T1610": "#ed4f4f",
     163 + "T1587": "#ed4f4f",
     164 + "T1587.002": "#ed4f4f",
     165 + "T1587.003": "#8cdd69",
     166 + "T1587.004": "#8cdd69",
     167 + "T1587.001": "#ffd966",
     168 + "T1006": "#8cdd69",
     169 + "T1561": "#ffd966",
     170 + "T1561.001": "#ed4f4f",
     171 + "T1561.002": "#ed4f4f",
     172 + "T1484": "#ed4f4f",
     173 + "T1484.002": "#ffd966",
     174 + "T1484.001": "#ed4f4f",
     175 + "T1482": "#ed4f4f",
     176 + "T1189": "#ffd966",
     177 + "T1568": "#ed4f4f",
     178 + "T1568.003": "#ed4f4f",
     179 + "T1568.002": "#ffd966",
     180 + "T1568.001": "#ffd966",
     181 + "T1114": "#8cdd69",
     182 + "T1114.003": "#ed4f4f",
     183 + "T1114.001": "#8cdd69",
     184 + "T1114.002": "#8cdd69",
     185 + "T1573": "#ed4f4f",
     186 + "T1573.002": "#8cdd69",
     187 + "T1573.001": "#ed4f4f",
     188 + "T1499": "#8cdd69",
     189 + "T1499.003": "#8cdd69",
     190 + "T1499.004": "#ed4f4f",
     191 + "T1499.001": "#ffd966",
     192 + "T1499.002": "#ffd966",
     193 + "T1611": "#ed4f4f",
     194 + "T1585": "#ed4f4f",
     195 + "T1585.002": "#ed4f4f",
     196 + "T1585.001": "#ed4f4f",
     197 + "T1546": "#ed4f4f",
     198 + "T1546.008": "#ffd966",
     199 + "T1546.009": "#8cdd69",
     200 + "T1546.010": "#ed4f4f",
     201 + "T1546.011": "#8cdd69",
     202 + "T1546.001": "#ed4f4f",
     203 + "T1546.015": "#ffd966",
     204 + "T1546.014": "#ffd966",
     205 + "T1546.012": "#8cdd69",
     206 + "T1546.006": "#ed4f4f",
     207 + "T1546.007": "#ed4f4f",
     208 + "T1546.013": "#ffd966",
     209 + "T1546.002": "#8cdd69",
     210 + "T1546.005": "#ed4f4f",
     211 + "T1546.004": "#8cdd69",
     212 + "T1546.003": "#ed4f4f",
     213 + "T1480": "#8cdd69",
     214 + "T1480.001": "#8cdd69",
     215 + "T1048": "#ed4f4f",
     216 + "T1048.002": "#8cdd69",
     217 + "T1048.001": "#8cdd69",
     218 + "T1048.003": "#8cdd69",
     219 + "T1041": "#8cdd69",
     220 + "T1011": "#ffd966",
     221 + "T1011.001": "#ffd966",
     222 + "T1052": "#ed4f4f",
     223 + "T1052.001": "#8cdd69",
     224 + "T1567": "#8cdd69",
     225 + "T1567.002": "#ed4f4f",
     226 + "T1567.001": "#ffd966",
     227 + "T1190": "#ed4f4f",
     228 + "T1203": "#8cdd69",
     229 + "T1212": "#8cdd69",
     230 + "T1211": "#ffd966",
     231 + "T1068": "#ffd966",
     232 + "T1210": "#8cdd69",
     233 + "T1133": "#8cdd69",
     234 + "T1008": "#ed4f4f",
     235 + "T1083": "#ed4f4f",
     236 + "T1222": "#ed4f4f",
     237 + "T1222.002": "#ffd966",
     238 + "T1222.001": "#8cdd69",
     239 + "T1495": "#ed4f4f",
     240 + "T1187": "#ed4f4f",
     241 + "T1606": "#ed4f4f",
     242 + "T1606.002": "#8cdd69",
     243 + "T1606.001": "#8cdd69",
     244 + "T1592": "#ffd966",
     245 + "T1592.004": "#ed4f4f",
     246 + "T1592.003": "#8cdd69",
     247 + "T1592.001": "#ed4f4f",
     248 + "T1592.002": "#8cdd69",
     249 + "T1589": "#ffd966",
     250 + "T1589.001": "#ffd966",
     251 + "T1589.002": "#ed4f4f",
     252 + "T1589.003": "#ffd966",
     253 + "T1590": "#8cdd69",
     254 + "T1590.002": "#ffd966",
     255 + "T1590.001": "#8cdd69",
     256 + "T1590.005": "#8cdd69",
     257 + "T1590.006": "#8cdd69",
     258 + "T1590.004": "#ffd966",
     259 + "T1590.003": "#ffd966",
     260 + "T1591": "#ed4f4f",
     261 + "T1591.002": "#ffd966",
     262 + "T1591.001": "#ed4f4f",
     263 + "T1591.003": "#ed4f4f",
     264 + "T1591.004": "#ed4f4f",
     265 + "T1615": "#8cdd69",
     266 + "T1200": "#ed4f4f",
     267 + "T1564": "#ffd966",
     268 + "T1564.008": "#8cdd69",
     269 + "T1564.005": "#ed4f4f",
     270 + "T1564.001": "#ffd966",
     271 + "T1564.002": "#ffd966",
     272 + "T1564.003": "#ffd966",
     273 + "T1564.004": "#8cdd69",
     274 + "T1564.010": "#ed4f4f",
     275 + "T1564.009": "#ffd966",
     276 + "T1564.006": "#ed4f4f",
     277 + "T1564.007": "#8cdd69",
     278 + "T1574": "#8cdd69",
     279 + "T1574.012": "#ed4f4f",
     280 + "T1574.001": "#ffd966",
     281 + "T1574.002": "#8cdd69",
     282 + "T1574.004": "#ed4f4f",
     283 + "T1574.006": "#ffd966",
     284 + "T1574.005": "#ffd966",
     285 + "T1574.013": "#ffd966",
     286 + "T1574.007": "#ffd966",
     287 + "T1574.008": "#ed4f4f",
     288 + "T1574.009": "#ffd966",
     289 + "T1574.010": "#8cdd69",
     290 + "T1574.011": "#ffd966",
     291 + "T1562": "#8cdd69",
     292 + "T1562.008": "#ffd966",
     293 + "T1562.002": "#8cdd69",
     294 + "T1562.007": "#ffd966",
     295 + "T1562.004": "#ed4f4f",
     296 + "T1562.001": "#8cdd69",
     297 + "T1562.010": "#8cdd69",
     298 + "T1562.003": "#ffd966",
     299 + "T1562.006": "#ed4f4f",
     300 + "T1562.009": "#ffd966",
     301 + "T1525": "#8cdd69",
     302 + "T1070": "#8cdd69",
     303 + "T1070.003": "#8cdd69",
     304 + "T1070.002": "#8cdd69",
     305 + "T1070.001": "#ed4f4f",
     306 + "T1070.004": "#ffd966",
     307 + "T1070.005": "#ed4f4f",
     308 + "T1070.006": "#ffd966",
     309 + "T1202": "#ed4f4f",
     310 + "T1105": "#8cdd69",
     311 + "T1490": "#ffd966",
     312 + "T1056": "#ffd966",
     313 + "T1056.004": "#ffd966",
     314 + "T1056.002": "#ed4f4f",
     315 + "T1056.001": "#ed4f4f",
     316 + "T1056.003": "#8cdd69",
     317 + "T1559": "#ffd966",
     318 + "T1559.001": "#ed4f4f",
     319 + "T1559.002": "#ffd966",
     320 + "T1559.003": "#ffd966",
     321 + "T1534": "#8cdd69",
     322 + "T1570": "#ed4f4f",
     323 + "T1036": "#8cdd69",
     324 + "T1036.007": "#8cdd69",
     325 + "T1036.001": "#ffd966",
     326 + "T1036.004": "#8cdd69",
     327 + "T1036.005": "#ffd966",
     328 + "T1036.003": "#ffd966",
     329 + "T1036.002": "#ffd966",
     330 + "T1036.006": "#ed4f4f",
     331 + "T1556": "#ffd966",
     332 + "T1556.001": "#ffd966",
     333 + "T1556.004": "#8cdd69",
     334 + "T1556.002": "#ffd966",
     335 + "T1556.003": "#8cdd69",
     336 + "T1556.005": "#ed4f4f",
     337 + "T1578": "#ffd966",
     338 + "T1578.002": "#ffd966",
     339 + "T1578.001": "#8cdd69",
     340 + "T1578.003": "#8cdd69",
     341 + "T1578.004": "#ed4f4f",
     342 + "T1112": "#ffd966",
     343 + "T1601": "#ed4f4f",
     344 + "T1601.002": "#ffd966",
     345 + "T1601.001": "#8cdd69",
     346 + "T1111": "#ed4f4f",
     347 + "T1621": "#8cdd69",
     348 + "T1104": "#8cdd69",
     349 + "T1106": "#8cdd69",
     350 + "T1599": "#ffd966",
     351 + "T1599.001": "#8cdd69",
     352 + "T1498": "#8cdd69",
     353 + "T1498.001": "#ffd966",
     354 + "T1498.002": "#ffd966",
     355 + "T1046": "#ffd966",
     356 + "T1135": "#ed4f4f",
     357 + "T1040": "#ed4f4f",
     358 + "T1095": "#ffd966",
     359 + "T1571": "#ffd966",
     360 + "T1003": "#ffd966",
     361 + "T1003.008": "#ed4f4f",
     362 + "T1003.005": "#ed4f4f",
     363 + "T1003.006": "#ffd966",
     364 + "T1003.004": "#8cdd69",
     365 + "T1003.001": "#8cdd69",
     366 + "T1003.003": "#ffd966",
     367 + "T1003.007": "#ffd966",
     368 + "T1003.002": "#ffd966",
     369 + "T1027": "#8cdd69",
     370 + "T1027.001": "#8cdd69",
     371 + "T1027.004": "#ed4f4f",
     372 + "T1027.006": "#ed4f4f",
     373 + "T1027.005": "#8cdd69",
     374 + "T1027.002": "#ffd966",
     375 + "T1027.003": "#ed4f4f",
     376 + "T1588": "#ffd966",
     377 + "T1588.003": "#ffd966",
     378 + "T1588.004": "#ed4f4f",
     379 + "T1588.005": "#ed4f4f",
     380 + "T1588.001": "#ed4f4f",
     381 + "T1588.002": "#8cdd69",
     382 + "T1588.006": "#ffd966",
     383 + "T1137": "#ed4f4f",
     384 + "T1137.006": "#ffd966",
     385 + "T1137.001": "#8cdd69",
     386 + "T1137.002": "#8cdd69",
     387 + "T1137.003": "#ffd966",
     388 + "T1137.004": "#ffd966",
     389 + "T1137.005": "#8cdd69",
     390 + "T1201": "#ed4f4f",
     391 + "T1120": "#ffd966",
     392 + "T1069": "#8cdd69",
     393 + "T1069.003": "#8cdd69",
     394 + "T1069.002": "#8cdd69",
     395 + "T1069.001": "#ffd966",
     396 + "T1566": "#ffd966",
     397 + "T1598": "#8cdd69",
     398 + "T1598.002": "#ed4f4f",
     399 + "T1598.003": "#ffd966",
     400 + "T1598.001": "#ed4f4f",
     401 + "T1566.001": "#8cdd69",
     402 + "T1566.002": "#ed4f4f",
     403 + "T1566.003": "#ffd966",
     404 + "T1647": "#ed4f4f",
     405 + "T1542": "#8cdd69",
     406 + "T1542.003": "#ffd966",
     407 + "T1542.002": "#ffd966",
     408 + "T1542.004": "#ed4f4f",
     409 + "T1542.001": "#ffd966",
     410 + "T1542.005": "#8cdd69",
     411 + "T1057": "#8cdd69",
     412 + "T1055": "#ffd966",
     413 + "T1055.004": "#ed4f4f",
     414 + "T1055.001": "#ffd966",
     415 + "T1055.011": "#ed4f4f",
     416 + "T1055.015": "#8cdd69",
     417 + "T1055.002": "#ffd966",
     418 + "T1055.009": "#ffd966",
     419 + "T1055.013": "#ed4f4f",
     420 + "T1055.012": "#ed4f4f",
     421 + "T1055.008": "#8cdd69",
     422 + "T1055.003": "#ed4f4f",
     423 + "T1055.005": "#ed4f4f",
     424 + "T1055.014": "#ffd966",
     425 + "T1572": "#8cdd69",
     426 + "T1090": "#8cdd69",
     427 + "T1090.004": "#ed4f4f",
     428 + "T1090.002": "#ffd966",
     429 + "T1090.001": "#ffd966",
     430 + "T1090.003": "#ed4f4f",
     431 + "T1012": "#ed4f4f",
     432 + "T1620": "#ffd966",
     433 + "T1219": "#ffd966",
     434 + "T1563": "#8cdd69",
     435 + "T1563.002": "#ffd966",
     436 + "T1563.001": "#8cdd69",
     437 + "T1021": "#ed4f4f",
     438 + "T1021.003": "#ffd966",
     439 + "T1021.001": "#8cdd69",
     440 + "T1021.002": "#ffd966",
     441 + "T1021.004": "#ffd966",
     442 + "T1021.005": "#ffd966",
     443 + "T1021.006": "#ffd966",
     444 + "T1018": "#ed4f4f",
     445 + "T1091": "#8cdd69",
     446 + "T1496": "#ffd966",
     447 + "T1207": "#ed4f4f",
     448 + "T1014": "#ed4f4f",
     449 + "T1053": "#ffd966",
     450 + "T1053.002": "#ffd966",
     451 + "T1053.007": "#8cdd69",
     452 + "T1053.003": "#ffd966",
     453 + "T1053.005": "#8cdd69",
     454 + "T1053.006": "#ffd966",
     455 + "T1029": "#ffd966",
     456 + "T1113": "#ed4f4f",
     457 + "T1597": "#ed4f4f",
     458 + "T1597.002": "#ed4f4f",
     459 + "T1597.001": "#8cdd69",
     460 + "T1596": "#8cdd69",
     461 + "T1596.004": "#8cdd69",
     462 + "T1596.001": "#8cdd69",
     463 + "T1596.003": "#ffd966",
     464 + "T1596.005": "#ed4f4f",
     465 + "T1596.002": "#8cdd69",
     466 + "T1593": "#ffd966",
     467 + "T1593.002": "#8cdd69",
     468 + "T1593.001": "#8cdd69",
     469 + "T1594": "#8cdd69",
     470 + "T1505": "#ffd966",
     471 + "T1505.004": "#ed4f4f",
     472 + "T1505.001": "#8cdd69",
     473 + "T1505.005": "#ed4f4f",
     474 + "T1505.002": "#ffd966",
     475 + "T1505.003": "#ffd966",
     476 + "T1489": "#ffd966",
     477 + "T1129": "#8cdd69",
     478 + "T1072": "#8cdd69",
     479 + "T1518": "#ffd966",
     480 + "T1518.001": "#ffd966",
     481 + "T1608": "#ffd966",
     482 + "T1608.004": "#8cdd69",
     483 + "T1608.003": "#ffd966",
     484 + "T1608.005": "#ffd966",
     485 + "T1608.001": "#ed4f4f",
     486 + "T1608.002": "#ed4f4f",
     487 + "T1528": "#ed4f4f",
     488 + "T1539": "#8cdd69",
     489 + "T1558": "#ed4f4f",
     490 + "T1558.004": "#ffd966",
     491 + "T1558.001": "#ffd966",
     492 + "T1558.003": "#ffd966",
     493 + "T1558.002": "#8cdd69",
     494 + "T1553": "#ed4f4f",
     495 + "T1553.002": "#ed4f4f",
     496 + "T1553.006": "#8cdd69",
     497 + "T1553.001": "#8cdd69",
     498 + "T1553.004": "#ffd966",
     499 + "T1553.005": "#ed4f4f",
     500 + "T1553.003": "#ed4f4f",
     501 + "T1195": "#8cdd69",
     502 + "T1195.003": "#ffd966",
     503 + "T1195.001": "#8cdd69",
     504 + "T1195.002": "#ed4f4f",
     505 + "T1218": "#8cdd69",
     506 + "T1218.003": "#ed4f4f",
     507 + "T1218.001": "#ed4f4f",
     508 + "T1218.002": "#8cdd69",
     509 + "T1218.004": "#ed4f4f",
     510 + "T1218.014": "#8cdd69",
     511 + "T1218.013": "#ffd966",
     512 + "T1218.005": "#ffd966",
     513 + "T1218.007": "#ffd966",
     514 + "T1218.008": "#ffd966",
     515 + "T1218.009": "#ed4f4f",
     516 + "T1218.010": "#ffd966",
     517 + "T1218.011": "#8cdd69",
     518 + "T1218.012": "#ed4f4f",
     519 + "T1082": "#ffd966",
     520 + "T1614": "#8cdd69",
     521 + "T1614.001": "#ffd966",
     522 + "T1016": "#ed4f4f",
     523 + "T1016.001": "#ffd966",
     524 + "T1049": "#ffd966",
     525 + "T1033": "#ffd966",
     526 + "T1216": "#8cdd69",
     527 + "T1216.001": "#ffd966",
     528 + "T1007": "#ed4f4f",
     529 + "T1569": "#ffd966",
     530 + "T1569.001": "#ffd966",
     531 + "T1569.002": "#ffd966",
     532 + "T1529": "#ed4f4f",
     533 + "T1124": "#ed4f4f",
     534 + "T1080": "#ffd966",
     535 + "T1221": "#8cdd69",
     536 + "T1205": "#8cdd69",
     537 + "T1205.001": "#ffd966",
     538 + "T1537": "#ed4f4f",
     539 + "T1127": "#8cdd69",
     540 + "T1127.001": "#ed4f4f",
     541 + "T1199": "#8cdd69",
     542 + "T1552": "#ed4f4f",
     543 + "T1552.003": "#ffd966",
     544 + "T1552.005": "#ed4f4f",
     545 + "T1552.007": "#8cdd69",
     546 + "T1552.001": "#8cdd69",
     547 + "T1552.002": "#ffd966",
     548 + "T1552.006": "#ffd966",
     549 + "T1552.004": "#ffd966",
     550 + "T1535": "#8cdd69",
     551 + "T1550": "#ffd966",
     552 + "T1550.001": "#8cdd69",
     553 + "T1550.002": "#ffd966",
     554 + "T1550.003": "#8cdd69",
     555 + "T1550.004": "#8cdd69",
     556 + "T1204": "#ed4f4f",
     557 + "T1204.002": "#ffd966",
     558 + "T1204.003": "#ffd966",
     559 + "T1204.001": "#ffd966",
     560 + "T1078": "#ffd966",
     561 + "T1078.004": "#ed4f4f",
     562 + "T1078.001": "#ffd966",
     563 + "T1078.002": "#8cdd69",
     564 + "T1078.003": "#ed4f4f",
     565 + "T1125": "#8cdd69",
     566 + "T1497": "#ed4f4f",
     567 + "T1497.001": "#8cdd69",
     568 + "T1497.003": "#8cdd69",
     569 + "T1497.002": "#ffd966",
     570 + "T1600": "#8cdd69",
     571 + "T1600.002": "#ffd966",
     572 + "T1600.001": "#8cdd69",
     573 + "T1102": "#8cdd69",
     574 + "T1102.002": "#8cdd69",
     575 + "T1102.001": "#ed4f4f",
     576 + "T1102.003": "#8cdd69",
     577 + "T1047": "#ed4f4f",
     578 + "T1220": "#8cdd69"
     579 + },
     580 + "log-sources": [
     581 + {
     582 + "index_1": {
     583 + "Network Traffic Content (webserver)": "64.8824296805",
     584 + "Domain Name: Active DNS": "86.136300963",
     585 + "Network Traffic Content": "19.0061410207",
     586 + "Filebeat values are waiting...": "12.7020491282",
     587 + "Network Traffic Content (DHCP)": "2.2477302618",
     588 + "User Account: User Account Authentication": "0.8545988715",
     589 + "User Account: User Account Creation": "0.8545988715",
     590 + "User Account: User Account Deletion": "0.8545988715",
     591 + "User Account: User Account Modification": "1.709197743",
     592 + "User Account: User Account Metadata": "0.8545988715",
     593 + "Process: OS API Execution": "0.3070510373",
     594 + "Process: Process Access": "0.3070510373",
     595 + "Process: Process Creation": "0.3070510373",
     596 + "Process: Process Metadata": "0.3070510373",
     597 + "Process: Process Modification": "0.3070510373",
     598 + "Process: Process Termination": "0.3070510373"
     599 + }
     600 + },
     601 + {
     602 + "index_2": {
     603 + "Network Traffic Content (webserver)": "34.8824296805",
     604 + "Domain Name: Active DNS": "86.136300963",
     605 + "Network Traffic Content": "49.0061410207",
     606 + "Filebeat values are waiting...": "8.7020491282",
     607 + "Network Traffic Content (DHCP)": "2.2477302618",
     608 + "User Account: User Account Authentication": "4.8545988715",
     609 + "User Account: User Account Creation": "4.8545988715",
     610 + "User Account: User Account Deletion": "4.8545988715",
     611 + "User Account: User Account Modification": "1.709197743",
     612 + "User Account: User Account Metadata": "0.8545988715",
     613 + "Process: OS API Execution": "0.3070510373",
     614 + "Process: Process Access": "0.3070510373",
     615 + "Process: Process Creation": "0.3070510373",
     616 + "Process: Process Metadata": "0.3070510373",
     617 + "Process: Process Modification": "0.3070510373",
     618 + "Process: Process Termination": "0.3070510373"
     619 + }
     620 + },
     621 + {
     622 + "index_3": {
     623 + "Network Traffic Content (webserver)": "64.8824296805",
     624 + "Domain Name: Active DNS": "46.136300963",
     625 + "Network Traffic Content": "19.0061410207",
     626 + "Filebeat values are waiting...": "12.7020491282",
     627 + "Network Traffic Content (DHCP)": "2.2477302618",
     628 + "User Account: User Account Authentication": "0.8545988715",
     629 + "User Account: User Account Creation": "0.8545988715",
     630 + "User Account: User Account Deletion": "0.8545988715",
     631 + "User Account: User Account Modification": "1.709197743",
     632 + "User Account: User Account Metadata": "0.8545988715",
     633 + "Process: OS API Execution": "20.3070510373",
     634 + "Process: Process Access": "20.3070510373",
     635 + "Process: Process Creation": "20.3070510373",
     636 + "Process: Process Metadata": "20.3070510373",
     637 + "Process: Process Modification": "20.3070510373",
     638 + "Process: Process Termination": "20.3070510373"
     639 + }
     640 + }
     641 + ],
     642 + "log-types": [
     643 + {
     644 + "index_1": {
     645 + "filebeat": "76.7458580307",
     646 + "evtx": "12.5517246889",
     647 + "dns": "9.4877857839",
     648 + "webserver": "1.2146314965"
     649 + }
     650 + },
     651 + {
     652 + "index_2": {
     653 + "filebeat": "66.7458580307",
     654 + "evtx": "17.5517246889",
     655 + "dns": "14.4877857839",
     656 + "webserver": "1.2146314965"
     657 + }
     658 + },
     659 + {
     660 + "index_3": {
     661 + "filebeat": "56.7458580307",
     662 + "evtx": "22.5517246889",
     663 + "dns": "19.4877857839",
     664 + "webserver": "1.2146314965"
     665 + }
     666 + }
     667 + ],
     668 + "log-entities": [
     669 + {
     670 + "index_1": {
     671 + "firewall": [
     672 + "FILENAME",
     673 + "PACKETS-SENT",
     674 + "URL",
     675 + "SORUCE",
     676 + "APPLICATION",
     677 + "PACKETS-RECEIVED",
     678 + "BYTES-SENT",
     679 + "BYTES-RECEIVED"
     680 + ],
     681 + "dns": [
     682 + "IP",
     683 + "PROTOCOL",
     684 + "CODE",
     685 + "BYTES-SENT",
     686 + "URL",
     687 + "USER_AGENT"
     688 + ],
     689 + "webserver": [
     690 + "IP",
     691 + "URL",
     692 + "HTTP-CODE",
     693 + "HTTP-METHOD"
     694 + ],
     695 + "evtx": [],
     696 + "filebeat": []
     697 + }
     698 + },
     699 + {
     700 + "index_2": {
     701 + "firewall": [
     702 + "FILENAME",
     703 + "URL",
     704 + "SORUCE",
     705 + "APPLICATION",
     706 + "BYTES-SENT",
     707 + "BYTES-RECEIVED"
     708 + ],
     709 + "dns": [
     710 + "IP",
     711 + "PROTOCOL",
     712 + "CODE",
     713 + "URL"
     714 + ],
     715 + "webserver": [
     716 + "IP",
     717 + "URL",
     718 + "HTTP-CODE",
     719 + "HTTP-METHOD"
     720 + ],
     721 + "evtx": [],
     722 + "filebeat": []
     723 + }
     724 + },
     725 + {
     726 + "index_3": {
     727 + "firewall": [
     728 + "FILENAME",
     729 + "PACKETS-SENT",
     730 + "URL",
     731 + "SORUCE",
     732 + "APPLICATION",
     733 + "PACKETS-RECEIVED"
     734 + ],
     735 + "dns": [
     736 + "IP",
     737 + "PROTOCOL",
     738 + "CODE",
     739 + "BYTES-SENT",
     740 + "URL"
     741 + ],
     742 + "webserver": [
     743 + "IP",
     744 + "URL",
     745 + "HTTP-METHOD"
     746 + ],
     747 + "evtx": [],
     748 + "filebeat": []
     749 + }
     750 + }
     751 + ]
     752 +}
  • ■ ■ ■ ■ ■ ■
    data/api_out/dummy_out_missing.txt
     1 +[
     2 + {
     3 + "techniqueID": "T1548.001",
     4 + "color": "#ed4f4f"
     5 + },
     6 + {
     7 + "techniqueID": "T1548.003",
     8 + "color": "#ed4f4f"
     9 + },
     10 + {
     11 + "techniqueID": "T1087",
     12 + "color": "#ed4f4f"
     13 + },
     14 + {
     15 + "techniqueID": "T1087.004",
     16 + "color": "#ed4f4f"
     17 + },
     18 + {
     19 + "techniqueID": "T1087.003",
     20 + "color": "#ed4f4f"
     21 + },
     22 + {
     23 + "techniqueID": "T1087.001",
     24 + "color": "#ed4f4f"
     25 + },
     26 + {
     27 + "techniqueID": "T1098.005",
     28 + "color": "#ed4f4f"
     29 + },
     30 + {
     31 + "techniqueID": "T1583.002",
     32 + "color": "#ed4f4f"
     33 + },
     34 + {
     35 + "techniqueID": "T1583.001",
     36 + "color": "#ed4f4f"
     37 + },
     38 + {
     39 + "techniqueID": "T1583.003",
     40 + "color": "#ed4f4f"
     41 + },
     42 + {
     43 + "techniqueID": "T1595.002",
     44 + "color": "#ed4f4f"
     45 + },
     46 + {
     47 + "techniqueID": "T1557.003",
     48 + "color": "#ed4f4f"
     49 + },
     50 + {
     51 + "techniqueID": "T1557.001",
     52 + "color": "#ed4f4f"
     53 + },
     54 + {
     55 + "techniqueID": "T1071.004",
     56 + "color": "#ed4f4f"
     57 + },
     58 + {
     59 + "techniqueID": "T1560.003",
     60 + "color": "#ed4f4f"
     61 + },
     62 + {
     63 + "techniqueID": "T1123",
     64 + "color": "#ed4f4f"
     65 + },
     66 + {
     67 + "techniqueID": "T1020.001",
     68 + "color": "#ed4f4f"
     69 + },
     70 + {
     71 + "techniqueID": "T1547.009",
     72 + "color": "#ed4f4f"
     73 + },
     74 + {
     75 + "techniqueID": "T1547.003",
     76 + "color": "#ed4f4f"
     77 + },
     78 + {
     79 + "techniqueID": "T1037.003",
     80 + "color": "#ed4f4f"
     81 + },
     82 + {
     83 + "techniqueID": "T1037.004",
     84 + "color": "#ed4f4f"
     85 + },
     86 + {
     87 + "techniqueID": "T1037.005",
     88 + "color": "#ed4f4f"
     89 + },
     90 + {
     91 + "techniqueID": "T1185",
     92 + "color": "#ed4f4f"
     93 + },
     94 + {
     95 + "techniqueID": "T1110.004",
     96 + "color": "#ed4f4f"
     97 + },
     98 + {
     99 + "techniqueID": "T1110.003",
     100 + "color": "#ed4f4f"
     101 + },
     102 + {
     103 + "techniqueID": "T1580",
     104 + "color": "#ed4f4f"
     105 + },
     106 + {
     107 + "techniqueID": "T1526",
     108 + "color": "#ed4f4f"
     109 + },
     110 + {
     111 + "techniqueID": "T1059.002",
     112 + "color": "#ed4f4f"
     113 + },
     114 + {
     115 + "techniqueID": "T1059.008",
     116 + "color": "#ed4f4f"
     117 + },
     118 + {
     119 + "techniqueID": "T1586",
     120 + "color": "#ed4f4f"
     121 + },
     122 + {
     123 + "techniqueID": "T1586.002",
     124 + "color": "#ed4f4f"
     125 + },
     126 + {
     127 + "techniqueID": "T1584",
     128 + "color": "#ed4f4f"
     129 + },
     130 + {
     131 + "techniqueID": "T1584.004",
     132 + "color": "#ed4f4f"
     133 + },
     134 + {
     135 + "techniqueID": "T1584.006",
     136 + "color": "#ed4f4f"
     137 + },
     138 + {
     139 + "techniqueID": "T1136.003",
     140 + "color": "#ed4f4f"
     141 + },
     142 + {
     143 + "techniqueID": "T1543",
     144 + "color": "#ed4f4f"
     145 + },
     146 + {
     147 + "techniqueID": "T1555.003",
     148 + "color": "#ed4f4f"
     149 + },
     150 + {
     151 + "techniqueID": "T1555.001",
     152 + "color": "#ed4f4f"
     153 + },
     154 + {
     155 + "techniqueID": "T1555.002",
     156 + "color": "#ed4f4f"
     157 + },
     158 + {
     159 + "techniqueID": "T1555.004",
     160 + "color": "#ed4f4f"
     161 + },
     162 + {
     163 + "techniqueID": "T1485",
     164 + "color": "#ed4f4f"
     165 + },
     166 + {
     167 + "techniqueID": "T1132",
     168 + "color": "#ed4f4f"
     169 + },
     170 + {
     171 + "techniqueID": "T1565.002",
     172 + "color": "#ed4f4f"
     173 + },
     174 + {
     175 + "techniqueID": "T1001",
     176 + "color": "#ed4f4f"
     177 + },
     178 + {
     179 + "techniqueID": "T1001.001",
     180 + "color": "#ed4f4f"
     181 + },
     182 + {
     183 + "techniqueID": "T1001.002",
     184 + "color": "#ed4f4f"
     185 + },
     186 + {
     187 + "techniqueID": "T1074",
     188 + "color": "#ed4f4f"
     189 + },
     190 + {
     191 + "techniqueID": "T1213.002",
     192 + "color": "#ed4f4f"
     193 + },
     194 + {
     195 + "techniqueID": "T1005",
     196 + "color": "#ed4f4f"
     197 + },
     198 + {
     199 + "techniqueID": "T1025",
     200 + "color": "#ed4f4f"
     201 + },
     202 + {
     203 + "techniqueID": "T1491.001",
     204 + "color": "#ed4f4f"
     205 + },
     206 + {
     207 + "techniqueID": "T1610",
     208 + "color": "#ed4f4f"
     209 + },
     210 + {
     211 + "techniqueID": "T1587",
     212 + "color": "#ed4f4f"
     213 + },
     214 + {
     215 + "techniqueID": "T1587.002",
     216 + "color": "#ed4f4f"
     217 + },
     218 + {
     219 + "techniqueID": "T1561.001",
     220 + "color": "#ed4f4f"
     221 + },
     222 + {
     223 + "techniqueID": "T1561.002",
     224 + "color": "#ed4f4f"
     225 + },
     226 + {
     227 + "techniqueID": "T1484",
     228 + "color": "#ed4f4f"
     229 + },
     230 + {
     231 + "techniqueID": "T1484.001",
     232 + "color": "#ed4f4f"
     233 + },
     234 + {
     235 + "techniqueID": "T1482",
     236 + "color": "#ed4f4f"
     237 + },
     238 + {
     239 + "techniqueID": "T1568",
     240 + "color": "#ed4f4f"
     241 + },
     242 + {
     243 + "techniqueID": "T1568.003",
     244 + "color": "#ed4f4f"
     245 + },
     246 + {
     247 + "techniqueID": "T1114.003",
     248 + "color": "#ed4f4f"
     249 + },
     250 + {
     251 + "techniqueID": "T1573",
     252 + "color": "#ed4f4f"
     253 + },
     254 + {
     255 + "techniqueID": "T1573.001",
     256 + "color": "#ed4f4f"
     257 + },
     258 + {
     259 + "techniqueID": "T1499.004",
     260 + "color": "#ed4f4f"
     261 + },
     262 + {
     263 + "techniqueID": "T1611",
     264 + "color": "#ed4f4f"
     265 + },
     266 + {
     267 + "techniqueID": "T1585",
     268 + "color": "#ed4f4f"
     269 + },
     270 + {
     271 + "techniqueID": "T1585.002",
     272 + "color": "#ed4f4f"
     273 + },
     274 + {
     275 + "techniqueID": "T1585.001",
     276 + "color": "#ed4f4f"
     277 + },
     278 + {
     279 + "techniqueID": "T1546",
     280 + "color": "#ed4f4f"
     281 + },
     282 + {
     283 + "techniqueID": "T1546.010",
     284 + "color": "#ed4f4f"
     285 + },
     286 + {
     287 + "techniqueID": "T1546.001",
     288 + "color": "#ed4f4f"
     289 + },
     290 + {
     291 + "techniqueID": "T1546.006",
     292 + "color": "#ed4f4f"
     293 + },
     294 + {
     295 + "techniqueID": "T1546.007",
     296 + "color": "#ed4f4f"
     297 + },
     298 + {
     299 + "techniqueID": "T1546.005",
     300 + "color": "#ed4f4f"
     301 + },
     302 + {
     303 + "techniqueID": "T1546.003",
     304 + "color": "#ed4f4f"
     305 + },
     306 + {
     307 + "techniqueID": "T1048",
     308 + "color": "#ed4f4f"
     309 + },
     310 + {
     311 + "techniqueID": "T1052",
     312 + "color": "#ed4f4f"
     313 + },
     314 + {
     315 + "techniqueID": "T1567.002",
     316 + "color": "#ed4f4f"
     317 + },
     318 + {
     319 + "techniqueID": "T1190",
     320 + "color": "#ed4f4f"
     321 + },
     322 + {
     323 + "techniqueID": "T1008",
     324 + "color": "#ed4f4f"
     325 + },
     326 + {
     327 + "techniqueID": "T1083",
     328 + "color": "#ed4f4f"
     329 + },
     330 + {
     331 + "techniqueID": "T1222",
     332 + "color": "#ed4f4f"
     333 + },
     334 + {
     335 + "techniqueID": "T1495",
     336 + "color": "#ed4f4f"
     337 + },
     338 + {
     339 + "techniqueID": "T1187",
     340 + "color": "#ed4f4f"
     341 + },
     342 + {
     343 + "techniqueID": "T1606",
     344 + "color": "#ed4f4f"
     345 + },
     346 + {
     347 + "techniqueID": "T1592.004",
     348 + "color": "#ed4f4f"
     349 + },
     350 + {
     351 + "techniqueID": "T1592.001",
     352 + "color": "#ed4f4f"
     353 + },
     354 + {
     355 + "techniqueID": "T1589.002",
     356 + "color": "#ed4f4f"
     357 + },
     358 + {
     359 + "techniqueID": "T1591",
     360 + "color": "#ed4f4f"
     361 + },
     362 + {
     363 + "techniqueID": "T1591.001",
     364 + "color": "#ed4f4f"
     365 + },
     366 + {
     367 + "techniqueID": "T1591.003",
     368 + "color": "#ed4f4f"
     369 + },
     370 + {
     371 + "techniqueID": "T1591.004",
     372 + "color": "#ed4f4f"
     373 + },
     374 + {
     375 + "techniqueID": "T1200",
     376 + "color": "#ed4f4f"
     377 + },
     378 + {
     379 + "techniqueID": "T1564.005",
     380 + "color": "#ed4f4f"
     381 + },
     382 + {
     383 + "techniqueID": "T1564.010",
     384 + "color": "#ed4f4f"
     385 + },
     386 + {
     387 + "techniqueID": "T1564.006",
     388 + "color": "#ed4f4f"
     389 + },
     390 + {
     391 + "techniqueID": "T1574.012",
     392 + "color": "#ed4f4f"
     393 + },
     394 + {
     395 + "techniqueID": "T1574.004",
     396 + "color": "#ed4f4f"
     397 + },
     398 + {
     399 + "techniqueID": "T1574.008",
     400 + "color": "#ed4f4f"
     401 + },
     402 + {
     403 + "techniqueID": "T1562.004",
     404 + "color": "#ed4f4f"
     405 + },
     406 + {
     407 + "techniqueID": "T1562.006",
     408 + "color": "#ed4f4f"
     409 + },
     410 + {
     411 + "techniqueID": "T1070.001",
     412 + "color": "#ed4f4f"
     413 + },
     414 + {
     415 + "techniqueID": "T1070.005",
     416 + "color": "#ed4f4f"
     417 + },
     418 + {
     419 + "techniqueID": "T1202",
     420 + "color": "#ed4f4f"
     421 + },
     422 + {
     423 + "techniqueID": "T1056.002",
     424 + "color": "#ed4f4f"
     425 + },
     426 + {
     427 + "techniqueID": "T1056.001",
     428 + "color": "#ed4f4f"
     429 + },
     430 + {
     431 + "techniqueID": "T1559.001",
     432 + "color": "#ed4f4f"
     433 + },
     434 + {
     435 + "techniqueID": "T1570",
     436 + "color": "#ed4f4f"
     437 + },
     438 + {
     439 + "techniqueID": "T1036.006",
     440 + "color": "#ed4f4f"
     441 + },
     442 + {
     443 + "techniqueID": "T1556.005",
     444 + "color": "#ed4f4f"
     445 + },
     446 + {
     447 + "techniqueID": "T1578.004",
     448 + "color": "#ed4f4f"
     449 + },
     450 + {
     451 + "techniqueID": "T1601",
     452 + "color": "#ed4f4f"
     453 + },
     454 + {
     455 + "techniqueID": "T1111",
     456 + "color": "#ed4f4f"
     457 + },
     458 + {
     459 + "techniqueID": "T1135",
     460 + "color": "#ed4f4f"
     461 + },
     462 + {
     463 + "techniqueID": "T1040",
     464 + "color": "#ed4f4f"
     465 + },
     466 + {
     467 + "techniqueID": "T1003.008",
     468 + "color": "#ed4f4f"
     469 + },
     470 + {
     471 + "techniqueID": "T1003.005",
     472 + "color": "#ed4f4f"
     473 + },
     474 + {
     475 + "techniqueID": "T1027.004",
     476 + "color": "#ed4f4f"
     477 + },
     478 + {
     479 + "techniqueID": "T1027.006",
     480 + "color": "#ed4f4f"
     481 + },
     482 + {
     483 + "techniqueID": "T1027.003",
     484 + "color": "#ed4f4f"
     485 + },
     486 + {
     487 + "techniqueID": "T1588.004",
     488 + "color": "#ed4f4f"
     489 + },
     490 + {
     491 + "techniqueID": "T1588.005",
     492 + "color": "#ed4f4f"
     493 + },
     494 + {
     495 + "techniqueID": "T1588.001",
     496 + "color": "#ed4f4f"
     497 + },
     498 + {
     499 + "techniqueID": "T1137",
     500 + "color": "#ed4f4f"
     501 + },
     502 + {
     503 + "techniqueID": "T1201",
     504 + "color": "#ed4f4f"
     505 + },
     506 + {
     507 + "techniqueID": "T1598.002",
     508 + "color": "#ed4f4f"
     509 + },
     510 + {
     511 + "techniqueID": "T1598.001",
     512 + "color": "#ed4f4f"
     513 + },
     514 + {
     515 + "techniqueID": "T1566.002",
     516 + "color": "#ed4f4f"
     517 + },
     518 + {
     519 + "techniqueID": "T1647",
     520 + "color": "#ed4f4f"
     521 + },
     522 + {
     523 + "techniqueID": "T1542.004",
     524 + "color": "#ed4f4f"
     525 + },
     526 + {
     527 + "techniqueID": "T1055.004",
     528 + "color": "#ed4f4f"
     529 + },
     530 + {
     531 + "techniqueID": "T1055.011",
     532 + "color": "#ed4f4f"
     533 + },
     534 + {
     535 + "techniqueID": "T1055.013",
     536 + "color": "#ed4f4f"
     537 + },
     538 + {
     539 + "techniqueID": "T1055.012",
     540 + "color": "#ed4f4f"
     541 + },
     542 + {
     543 + "techniqueID": "T1055.003",
     544 + "color": "#ed4f4f"
     545 + },
     546 + {
     547 + "techniqueID": "T1055.005",
     548 + "color": "#ed4f4f"
     549 + },
     550 + {
     551 + "techniqueID": "T1090.004",
     552 + "color": "#ed4f4f"
     553 + },
     554 + {
     555 + "techniqueID": "T1090.003",
     556 + "color": "#ed4f4f"
     557 + },
     558 + {
     559 + "techniqueID": "T1012",
     560 + "color": "#ed4f4f"
     561 + },
     562 + {
     563 + "techniqueID": "T1021",
     564 + "color": "#ed4f4f"
     565 + },
     566 + {
     567 + "techniqueID": "T1018",
     568 + "color": "#ed4f4f"
     569 + },
     570 + {
     571 + "techniqueID": "T1207",
     572 + "color": "#ed4f4f"
     573 + },
     574 + {
     575 + "techniqueID": "T1014",
     576 + "color": "#ed4f4f"
     577 + },
     578 + {
     579 + "techniqueID": "T1113",
     580 + "color": "#ed4f4f"
     581 + },
     582 + {
     583 + "techniqueID": "T1597",
     584 + "color": "#ed4f4f"
     585 + },
     586 + {
     587 + "techniqueID": "T1597.002",
     588 + "color": "#ed4f4f"
     589 + },
     590 + {
     591 + "techniqueID": "T1596.005",
     592 + "color": "#ed4f4f"
     593 + },
     594 + {
     595 + "techniqueID": "T1505.004",
     596 + "color": "#ed4f4f"
     597 + },
     598 + {
     599 + "techniqueID": "T1505.005",
     600 + "color": "#ed4f4f"
     601 + },
     602 + {
     603 + "techniqueID": "T1608.001",
     604 + "color": "#ed4f4f"
     605 + },
     606 + {
     607 + "techniqueID": "T1608.002",
     608 + "color": "#ed4f4f"
     609 + },
     610 + {
     611 + "techniqueID": "T1528",
     612 + "color": "#ed4f4f"
     613 + },
     614 + {
     615 + "techniqueID": "T1558",
     616 + "color": "#ed4f4f"
     617 + },
     618 + {
     619 + "techniqueID": "T1553",
     620 + "color": "#ed4f4f"
     621 + },
     622 + {
     623 + "techniqueID": "T1553.002",
     624 + "color": "#ed4f4f"
     625 + },
     626 + {
     627 + "techniqueID": "T1553.005",
     628 + "color": "#ed4f4f"
     629 + },
     630 + {
     631 + "techniqueID": "T1553.003",
     632 + "color": "#ed4f4f"
     633 + },
     634 + {
     635 + "techniqueID": "T1195.002",
     636 + "color": "#ed4f4f"
     637 + },
     638 + {
     639 + "techniqueID": "T1218.003",
     640 + "color": "#ed4f4f"
     641 + },
     642 + {
     643 + "techniqueID": "T1218.001",
     644 + "color": "#ed4f4f"
     645 + },
     646 + {
     647 + "techniqueID": "T1218.004",
     648 + "color": "#ed4f4f"
     649 + },
     650 + {
     651 + "techniqueID": "T1218.009",
     652 + "color": "#ed4f4f"
     653 + },
     654 + {
     655 + "techniqueID": "T1218.012",
     656 + "color": "#ed4f4f"
     657 + },
     658 + {
     659 + "techniqueID": "T1016",
     660 + "color": "#ed4f4f"
     661 + },
     662 + {
     663 + "techniqueID": "T1007",
     664 + "color": "#ed4f4f"
     665 + },
     666 + {
     667 + "techniqueID": "T1529",
     668 + "color": "#ed4f4f"
     669 + },
     670 + {
     671 + "techniqueID": "T1124",
     672 + "color": "#ed4f4f"
     673 + },
     674 + {
     675 + "techniqueID": "T1537",
     676 + "color": "#ed4f4f"
     677 + },
     678 + {
     679 + "techniqueID": "T1127.001",
     680 + "color": "#ed4f4f"
     681 + },
     682 + {
     683 + "techniqueID": "T1552",
     684 + "color": "#ed4f4f"
     685 + },
     686 + {
     687 + "techniqueID": "T1552.005",
     688 + "color": "#ed4f4f"
     689 + },
     690 + {
     691 + "techniqueID": "T1204",
     692 + "color": "#ed4f4f"
     693 + },
     694 + {
     695 + "techniqueID": "T1078.004",
     696 + "color": "#ed4f4f"
     697 + },
     698 + {
     699 + "techniqueID": "T1078.003",
     700 + "color": "#ed4f4f"
     701 + },
     702 + {
     703 + "techniqueID": "T1497",
     704 + "color": "#ed4f4f"
     705 + },
     706 + {
     707 + "techniqueID": "T1102.001",
     708 + "color": "#ed4f4f"
     709 + },
     710 + {
     711 + "techniqueID": "T1047",
     712 + "color": "#ed4f4f"
     713 + }
     714 +]
  • ■ ■ ■ ■ ■ ■
    data/api_out/dummy_out_partial.txt
     1 +[
     2 + {
     3 + "techniqueID": "T1548",
     4 + "color": "#ffd966"
     5 + },
     6 + {
     7 + "techniqueID": "T1548.002",
     8 + "color": "#ffd966"
     9 + },
     10 + {
     11 + "techniqueID": "T1134.002",
     12 + "color": "#ffd966"
     13 + },
     14 + {
     15 + "techniqueID": "T1134.003",
     16 + "color": "#ffd966"
     17 + },
     18 + {
     19 + "techniqueID": "T1531",
     20 + "color": "#ffd966"
     21 + },
     22 + {
     23 + "techniqueID": "T1087.002",
     24 + "color": "#ffd966"
     25 + },
     26 + {
     27 + "techniqueID": "T1098",
     28 + "color": "#ffd966"
     29 + },
     30 + {
     31 + "techniqueID": "T1098.003",
     32 + "color": "#ffd966"
     33 + },
     34 + {
     35 + "techniqueID": "T1098.002",
     36 + "color": "#ffd966"
     37 + },
     38 + {
     39 + "techniqueID": "T1583.005",
     40 + "color": "#ffd966"
     41 + },
     42 + {
     43 + "techniqueID": "T1595",
     44 + "color": "#ffd966"
     45 + },
     46 + {
     47 + "techniqueID": "T1595.003",
     48 + "color": "#ffd966"
     49 + },
     50 + {
     51 + "techniqueID": "T1557",
     52 + "color": "#ffd966"
     53 + },
     54 + {
     55 + "techniqueID": "T1071.001",
     56 + "color": "#ffd966"
     57 + },
     58 + {
     59 + "techniqueID": "T1119",
     60 + "color": "#ffd966"
     61 + },
     62 + {
     63 + "techniqueID": "T1020",
     64 + "color": "#ffd966"
     65 + },
     66 + {
     67 + "techniqueID": "T1547",
     68 + "color": "#ffd966"
     69 + },
     70 + {
     71 + "techniqueID": "T1547.014",
     72 + "color": "#ffd966"
     73 + },
     74 + {
     75 + "techniqueID": "T1547.010",
     76 + "color": "#ffd966"
     77 + },
     78 + {
     79 + "techniqueID": "T1547.001",
     80 + "color": "#ffd966"
     81 + },
     82 + {
     83 + "techniqueID": "T1037",
     84 + "color": "#ffd966"
     85 + },
     86 + {
     87 + "techniqueID": "T1037.001",
     88 + "color": "#ffd966"
     89 + },
     90 + {
     91 + "techniqueID": "T1217",
     92 + "color": "#ffd966"
     93 + },
     94 + {
     95 + "techniqueID": "T1110.002",
     96 + "color": "#ffd966"
     97 + },
     98 + {
     99 + "techniqueID": "T1612",
     100 + "color": "#ffd966"
     101 + },
     102 + {
     103 + "techniqueID": "T1115",
     104 + "color": "#ffd966"
     105 + },
     106 + {
     107 + "techniqueID": "T1059",
     108 + "color": "#ffd966"
     109 + },
     110 + {
     111 + "techniqueID": "T1059.007",
     112 + "color": "#ffd966"
     113 + },
     114 + {
     115 + "techniqueID": "T1059.006",
     116 + "color": "#ffd966"
     117 + },
     118 + {
     119 + "techniqueID": "T1059.005",
     120 + "color": "#ffd966"
     121 + },
     122 + {
     123 + "techniqueID": "T1584.005",
     124 + "color": "#ffd966"
     125 + },
     126 + {
     127 + "techniqueID": "T1613",
     128 + "color": "#ffd966"
     129 + },
     130 + {
     131 + "techniqueID": "T1136",
     132 + "color": "#ffd966"
     133 + },
     134 + {
     135 + "techniqueID": "T1136.002",
     136 + "color": "#ffd966"
     137 + },
     138 + {
     139 + "techniqueID": "T1136.001",
     140 + "color": "#ffd966"
     141 + },
     142 + {
     143 + "techniqueID": "T1543.002",
     144 + "color": "#ffd966"
     145 + },
     146 + {
     147 + "techniqueID": "T1132.002",
     148 + "color": "#ffd966"
     149 + },
     150 + {
     151 + "techniqueID": "T1132.001",
     152 + "color": "#ffd966"
     153 + },
     154 + {
     155 + "techniqueID": "T1001.003",
     156 + "color": "#ffd966"
     157 + },
     158 + {
     159 + "techniqueID": "T1074.001",
     160 + "color": "#ffd966"
     161 + },
     162 + {
     163 + "techniqueID": "T1602",
     164 + "color": "#ffd966"
     165 + },
     166 + {
     167 + "techniqueID": "T1602.002",
     168 + "color": "#ffd966"
     169 + },
     170 + {
     171 + "techniqueID": "T1602.001",
     172 + "color": "#ffd966"
     173 + },
     174 + {
     175 + "techniqueID": "T1213.001",
     176 + "color": "#ffd966"
     177 + },
     178 + {
     179 + "techniqueID": "T1491",
     180 + "color": "#ffd966"
     181 + },
     182 + {
     183 + "techniqueID": "T1140",
     184 + "color": "#ffd966"
     185 + },
     186 + {
     187 + "techniqueID": "T1587.001",
     188 + "color": "#ffd966"
     189 + },
     190 + {
     191 + "techniqueID": "T1561",
     192 + "color": "#ffd966"
     193 + },
     194 + {
     195 + "techniqueID": "T1484.002",
     196 + "color": "#ffd966"
     197 + },
     198 + {
     199 + "techniqueID": "T1189",
     200 + "color": "#ffd966"
     201 + },
     202 + {
     203 + "techniqueID": "T1568.002",
     204 + "color": "#ffd966"
     205 + },
     206 + {
     207 + "techniqueID": "T1568.001",
     208 + "color": "#ffd966"
     209 + },
     210 + {
     211 + "techniqueID": "T1499.001",
     212 + "color": "#ffd966"
     213 + },
     214 + {
     215 + "techniqueID": "T1499.002",
     216 + "color": "#ffd966"
     217 + },
     218 + {
     219 + "techniqueID": "T1546.008",
     220 + "color": "#ffd966"
     221 + },
     222 + {
     223 + "techniqueID": "T1546.015",
     224 + "color": "#ffd966"
     225 + },
     226 + {
     227 + "techniqueID": "T1546.014",
     228 + "color": "#ffd966"
     229 + },
     230 + {
     231 + "techniqueID": "T1546.013",
     232 + "color": "#ffd966"
     233 + },
     234 + {
     235 + "techniqueID": "T1011",
     236 + "color": "#ffd966"
     237 + },
     238 + {
     239 + "techniqueID": "T1011.001",
     240 + "color": "#ffd966"
     241 + },
     242 + {
     243 + "techniqueID": "T1567.001",
     244 + "color": "#ffd966"
     245 + },
     246 + {
     247 + "techniqueID": "T1211",
     248 + "color": "#ffd966"
     249 + },
     250 + {
     251 + "techniqueID": "T1068",
     252 + "color": "#ffd966"
     253 + },
     254 + {
     255 + "techniqueID": "T1222.002",
     256 + "color": "#ffd966"
     257 + },
     258 + {
     259 + "techniqueID": "T1592",
     260 + "color": "#ffd966"
     261 + },
     262 + {
     263 + "techniqueID": "T1589",
     264 + "color": "#ffd966"
     265 + },
     266 + {
     267 + "techniqueID": "T1589.001",
     268 + "color": "#ffd966"
     269 + },
     270 + {
     271 + "techniqueID": "T1589.003",
     272 + "color": "#ffd966"
     273 + },
     274 + {
     275 + "techniqueID": "T1590.002",
     276 + "color": "#ffd966"
     277 + },
     278 + {
     279 + "techniqueID": "T1590.004",
     280 + "color": "#ffd966"
     281 + },
     282 + {
     283 + "techniqueID": "T1590.003",
     284 + "color": "#ffd966"
     285 + },
     286 + {
     287 + "techniqueID": "T1591.002",
     288 + "color": "#ffd966"
     289 + },
     290 + {
     291 + "techniqueID": "T1564",
     292 + "color": "#ffd966"
     293 + },
     294 + {
     295 + "techniqueID": "T1564.001",
     296 + "color": "#ffd966"
     297 + },
     298 + {
     299 + "techniqueID": "T1564.002",
     300 + "color": "#ffd966"
     301 + },
     302 + {
     303 + "techniqueID": "T1564.003",
     304 + "color": "#ffd966"
     305 + },
     306 + {
     307 + "techniqueID": "T1564.009",
     308 + "color": "#ffd966"
     309 + },
     310 + {
     311 + "techniqueID": "T1574.001",
     312 + "color": "#ffd966"
     313 + },
     314 + {
     315 + "techniqueID": "T1574.006",
     316 + "color": "#ffd966"
     317 + },
     318 + {
     319 + "techniqueID": "T1574.005",
     320 + "color": "#ffd966"
     321 + },
     322 + {
     323 + "techniqueID": "T1574.013",
     324 + "color": "#ffd966"
     325 + },
     326 + {
     327 + "techniqueID": "T1574.007",
     328 + "color": "#ffd966"
     329 + },
     330 + {
     331 + "techniqueID": "T1574.009",
     332 + "color": "#ffd966"
     333 + },
     334 + {
     335 + "techniqueID": "T1574.011",
     336 + "color": "#ffd966"
     337 + },
     338 + {
     339 + "techniqueID": "T1562.008",
     340 + "color": "#ffd966"
     341 + },
     342 + {
     343 + "techniqueID": "T1562.007",
     344 + "color": "#ffd966"
     345 + },
     346 + {
     347 + "techniqueID": "T1562.003",
     348 + "color": "#ffd966"
     349 + },
     350 + {
     351 + "techniqueID": "T1562.009",
     352 + "color": "#ffd966"
     353 + },
     354 + {
     355 + "techniqueID": "T1070.004",
     356 + "color": "#ffd966"
     357 + },
     358 + {
     359 + "techniqueID": "T1070.006",
     360 + "color": "#ffd966"
     361 + },
     362 + {
     363 + "techniqueID": "T1490",
     364 + "color": "#ffd966"
     365 + },
     366 + {
     367 + "techniqueID": "T1056",
     368 + "color": "#ffd966"
     369 + },
     370 + {
     371 + "techniqueID": "T1056.004",
     372 + "color": "#ffd966"
     373 + },
     374 + {
     375 + "techniqueID": "T1559",
     376 + "color": "#ffd966"
     377 + },
     378 + {
     379 + "techniqueID": "T1559.002",
     380 + "color": "#ffd966"
     381 + },
     382 + {
     383 + "techniqueID": "T1559.003",
     384 + "color": "#ffd966"
     385 + },
     386 + {
     387 + "techniqueID": "T1036.001",
     388 + "color": "#ffd966"
     389 + },
     390 + {
     391 + "techniqueID": "T1036.005",
     392 + "color": "#ffd966"
     393 + },
     394 + {
     395 + "techniqueID": "T1036.003",
     396 + "color": "#ffd966"
     397 + },
     398 + {
     399 + "techniqueID": "T1036.002",
     400 + "color": "#ffd966"
     401 + },
     402 + {
     403 + "techniqueID": "T1556",
     404 + "color": "#ffd966"
     405 + },
     406 + {
     407 + "techniqueID": "T1556.001",
     408 + "color": "#ffd966"
     409 + },
     410 + {
     411 + "techniqueID": "T1556.002",
     412 + "color": "#ffd966"
     413 + },
     414 + {
     415 + "techniqueID": "T1578",
     416 + "color": "#ffd966"
     417 + },
     418 + {
     419 + "techniqueID": "T1578.002",
     420 + "color": "#ffd966"
     421 + },
     422 + {
     423 + "techniqueID": "T1112",
     424 + "color": "#ffd966"
     425 + },
     426 + {
     427 + "techniqueID": "T1601.002",
     428 + "color": "#ffd966"
     429 + },
     430 + {
     431 + "techniqueID": "T1599",
     432 + "color": "#ffd966"
     433 + },
     434 + {
     435 + "techniqueID": "T1498.001",
     436 + "color": "#ffd966"
     437 + },
     438 + {
     439 + "techniqueID": "T1498.002",
     440 + "color": "#ffd966"
     441 + },
     442 + {
     443 + "techniqueID": "T1046",
     444 + "color": "#ffd966"
     445 + },
     446 + {
     447 + "techniqueID": "T1095",
     448 + "color": "#ffd966"
     449 + },
     450 + {
     451 + "techniqueID": "T1571",
     452 + "color": "#ffd966"
     453 + },
     454 + {
     455 + "techniqueID": "T1003",
     456 + "color": "#ffd966"
     457 + },
     458 + {
     459 + "techniqueID": "T1003.006",
     460 + "color": "#ffd966"
     461 + },
     462 + {
     463 + "techniqueID": "T1003.003",
     464 + "color": "#ffd966"
     465 + },
     466 + {
     467 + "techniqueID": "T1003.007",
     468 + "color": "#ffd966"
     469 + },
     470 + {
     471 + "techniqueID": "T1003.002",
     472 + "color": "#ffd966"
     473 + },
     474 + {
     475 + "techniqueID": "T1027.002",
     476 + "color": "#ffd966"
     477 + },
     478 + {
     479 + "techniqueID": "T1588",
     480 + "color": "#ffd966"
     481 + },
     482 + {
     483 + "techniqueID": "T1588.003",
     484 + "color": "#ffd966"
     485 + },
     486 + {
     487 + "techniqueID": "T1588.006",
     488 + "color": "#ffd966"
     489 + },
     490 + {
     491 + "techniqueID": "T1137.006",
     492 + "color": "#ffd966"
     493 + },
     494 + {
     495 + "techniqueID": "T1137.003",
     496 + "color": "#ffd966"
     497 + },
     498 + {
     499 + "techniqueID": "T1137.004",
     500 + "color": "#ffd966"
     501 + },
     502 + {
     503 + "techniqueID": "T1120",
     504 + "color": "#ffd966"
     505 + },
     506 + {
     507 + "techniqueID": "T1069.001",
     508 + "color": "#ffd966"
     509 + },
     510 + {
     511 + "techniqueID": "T1566",
     512 + "color": "#ffd966"
     513 + },
     514 + {
     515 + "techniqueID": "T1598.003",
     516 + "color": "#ffd966"
     517 + },
     518 + {
     519 + "techniqueID": "T1566.003",
     520 + "color": "#ffd966"
     521 + },
     522 + {
     523 + "techniqueID": "T1542.003",
     524 + "color": "#ffd966"
     525 + },
     526 + {
     527 + "techniqueID": "T1542.002",
     528 + "color": "#ffd966"
     529 + },
     530 + {
     531 + "techniqueID": "T1542.001",
     532 + "color": "#ffd966"
     533 + },
     534 + {
     535 + "techniqueID": "T1055",
     536 + "color": "#ffd966"
     537 + },
     538 + {
     539 + "techniqueID": "T1055.001",
     540 + "color": "#ffd966"
     541 + },
     542 + {
     543 + "techniqueID": "T1055.002",
     544 + "color": "#ffd966"
     545 + },
     546 + {
     547 + "techniqueID": "T1055.009",
     548 + "color": "#ffd966"
     549 + },
     550 + {
     551 + "techniqueID": "T1055.014",
     552 + "color": "#ffd966"
     553 + },
     554 + {
     555 + "techniqueID": "T1090.002",
     556 + "color": "#ffd966"
     557 + },
     558 + {
     559 + "techniqueID": "T1090.001",
     560 + "color": "#ffd966"
     561 + },
     562 + {
     563 + "techniqueID": "T1620",
     564 + "color": "#ffd966"
     565 + },
     566 + {
     567 + "techniqueID": "T1219",
     568 + "color": "#ffd966"
     569 + },
     570 + {
     571 + "techniqueID": "T1563.002",
     572 + "color": "#ffd966"
     573 + },
     574 + {
     575 + "techniqueID": "T1021.003",
     576 + "color": "#ffd966"
     577 + },
     578 + {
     579 + "techniqueID": "T1021.002",
     580 + "color": "#ffd966"
     581 + },
     582 + {
     583 + "techniqueID": "T1021.004",
     584 + "color": "#ffd966"
     585 + },
     586 + {
     587 + "techniqueID": "T1021.005",
     588 + "color": "#ffd966"
     589 + },
     590 + {
     591 + "techniqueID": "T1021.006",
     592 + "color": "#ffd966"
     593 + },
     594 + {
     595 + "techniqueID": "T1496",
     596 + "color": "#ffd966"
     597 + },
     598 + {
     599 + "techniqueID": "T1053",
     600 + "color": "#ffd966"
     601 + },
     602 + {
     603 + "techniqueID": "T1053.002",
     604 + "color": "#ffd966"
     605 + },
     606 + {
     607 + "techniqueID": "T1053.003",
     608 + "color": "#ffd966"
     609 + },
     610 + {
     611 + "techniqueID": "T1053.006",
     612 + "color": "#ffd966"
     613 + },
     614 + {
     615 + "techniqueID": "T1029",
     616 + "color": "#ffd966"
     617 + },
     618 + {
     619 + "techniqueID": "T1596.003",
     620 + "color": "#ffd966"
     621 + },
     622 + {
     623 + "techniqueID": "T1593",
     624 + "color": "#ffd966"
     625 + },
     626 + {
     627 + "techniqueID": "T1505",
     628 + "color": "#ffd966"
     629 + },
     630 + {
     631 + "techniqueID": "T1505.002",
     632 + "color": "#ffd966"
     633 + },
     634 + {
     635 + "techniqueID": "T1505.003",
     636 + "color": "#ffd966"
     637 + },
     638 + {
     639 + "techniqueID": "T1489",
     640 + "color": "#ffd966"
     641 + },
     642 + {
     643 + "techniqueID": "T1518",
     644 + "color": "#ffd966"
     645 + },
     646 + {
     647 + "techniqueID": "T1518.001",
     648 + "color": "#ffd966"
     649 + },
     650 + {
     651 + "techniqueID": "T1608",
     652 + "color": "#ffd966"
     653 + },
     654 + {
     655 + "techniqueID": "T1608.003",
     656 + "color": "#ffd966"
     657 + },
     658 + {
     659 + "techniqueID": "T1608.005",
     660 + "color": "#ffd966"
     661 + },
     662 + {
     663 + "techniqueID": "T1558.004",
     664 + "color": "#ffd966"
     665 + },
     666 + {
     667 + "techniqueID": "T1558.001",
     668 + "color": "#ffd966"
     669 + },
     670 + {
     671 + "techniqueID": "T1558.003",
     672 + "color": "#ffd966"
     673 + },
     674 + {
     675 + "techniqueID": "T1553.004",
     676 + "color": "#ffd966"
     677 + },
     678 + {
     679 + "techniqueID": "T1195.003",
     680 + "color": "#ffd966"
     681 + },
     682 + {
     683 + "techniqueID": "T1218.013",
     684 + "color": "#ffd966"
     685 + },
     686 + {
     687 + "techniqueID": "T1218.005",
     688 + "color": "#ffd966"
     689 + },
     690 + {
     691 + "techniqueID": "T1218.007",
     692 + "color": "#ffd966"
     693 + },
     694 + {
     695 + "techniqueID": "T1218.008",
     696 + "color": "#ffd966"
     697 + },
     698 + {
     699 + "techniqueID": "T1218.010",
     700 + "color": "#ffd966"
     701 + },
     702 + {
     703 + "techniqueID": "T1082",
     704 + "color": "#ffd966"
     705 + },
     706 + {
     707 + "techniqueID": "T1614.001",
     708 + "color": "#ffd966"
     709 + },
     710 + {
     711 + "techniqueID": "T1016.001",
     712 + "color": "#ffd966"
     713 + },
     714 + {
     715 + "techniqueID": "T1049",
     716 + "color": "#ffd966"
     717 + },
     718 + {
     719 + "techniqueID": "T1033",
     720 + "color": "#ffd966"
     721 + },
     722 + {
     723 + "techniqueID": "T1216.001",
     724 + "color": "#ffd966"
     725 + },
     726 + {
     727 + "techniqueID": "T1569",
     728 + "color": "#ffd966"
     729 + },
     730 + {
     731 + "techniqueID": "T1569.001",
     732 + "color": "#ffd966"
     733 + },
     734 + {
     735 + "techniqueID": "T1569.002",
     736 + "color": "#ffd966"
     737 + },
     738 + {
     739 + "techniqueID": "T1080",
     740 + "color": "#ffd966"
     741 + },
     742 + {
     743 + "techniqueID": "T1205.001",
     744 + "color": "#ffd966"
     745 + },
     746 + {
     747 + "techniqueID": "T1552.003",
     748 + "color": "#ffd966"
     749 + },
     750 + {
     751 + "techniqueID": "T1552.002",
     752 + "color": "#ffd966"
     753 + },
     754 + {
     755 + "techniqueID": "T1552.006",
     756 + "color": "#ffd966"
     757 + },
     758 + {
     759 + "techniqueID": "T1552.004",
     760 + "color": "#ffd966"
     761 + },
     762 + {
     763 + "techniqueID": "T1550",
     764 + "color": "#ffd966"
     765 + },
     766 + {
     767 + "techniqueID": "T1550.002",
     768 + "color": "#ffd966"
     769 + },
     770 + {
     771 + "techniqueID": "T1204.002",
     772 + "color": "#ffd966"
     773 + },
     774 + {
     775 + "techniqueID": "T1204.003",
     776 + "color": "#ffd966"
     777 + },
     778 + {
     779 + "techniqueID": "T1204.001",
     780 + "color": "#ffd966"
     781 + },
     782 + {
     783 + "techniqueID": "T1078",
     784 + "color": "#ffd966"
     785 + },
     786 + {
     787 + "techniqueID": "T1078.001",
     788 + "color": "#ffd966"
     789 + },
     790 + {
     791 + "techniqueID": "T1497.002",
     792 + "color": "#ffd966"
     793 + },
     794 + {
     795 + "techniqueID": "T1600.002",
     796 + "color": "#ffd966"
     797 + }
     798 +]
  • ■ ■ ■ ■ ■ ■
    data/mapping/Mapping.txt
     1 +MITRE_MAPPING = {
     2 + "firewall-fortigate" : ["Firewall:*", "Network Traffic: Network Connection Creation"],
     3 + "firewall-paloalto" : ["Firewall:*", "Network Traffic: Network Connection Creation"],
     4 + "firewall-sample" : ["Firewall:*", "Network Traffic: Network Connection Creation"],
     5 + "dns-generic" : ["Network Traffic Content", "Domain Name: Active DNS"],
     6 + "dns-infoblox-nios" : ["Network Traffic Content", "Domain Name: Active DNS"],
     7 + "webproxy-squid" : ["Network Traffic Content", "Domain Name: Active DNS"],
     8 + "webserver-nginx" : ["Network Traffic Content (webserver)", "Domain Name: Active DNS"],
     9 + "webserver-generic" : ["Network Traffic Content (webserver)", "Domain Name: Active DNS"],
     10 + "dhcp-server-linux" : ["Network Traffic Content (DHCP)", "Domain Name: Active DNS"],
     11 + "win-system-cert_util" : ["Certificate: Certificate Registration"],
     12 + "identity-service-cisco": ["User Account: User Account Authentication", "User Account: User Account Creation", "User Account: User Account Deletion", "User Account: User Account Modification", "User Account: User Account Metadata", "User Account: User Account Modification"],
     13 + "microsoft-windows-evtx": ["Process: OS API Execution", "Process: Process Access", "Process: Process Creation", "Process: Process Metadata", "Process: Process Modification", "Process: Process Termination"],
     14 + "winlogbeat-*" : ["Process: OS API Execution", "Process: Process Access", "Process: Process Creation", "Process: Process Metadata", "Process: Process Modification", "Process: Process Termination", "Windows Registry: Windows Registry Key Access", "Windows Registry: Windows Registry Key Creation", "Windows Registry: Windows Registry Key Deletion", "Windows Registry: Windows Registry Key Modification"]
     15 + }
     16 + 
     17 + 
     18 +MITRE_MAPPING = {
     19 + "firewall" : ["Firewall:*", "Network Traffic: Network Connection Creation"],
     20 + "dns" : ["Network Traffic Content", "Domain Name: Active DNS"],
     21 + "webserver" : ["Network Traffic Content (webserver)", "Domain Name: Active DNS"],
     22 + "dhcp" : ["Network Traffic Content (DHCP)", "Domain Name: Active DNS"],
     23 + "win-cert" : ["Certificate: Certificate Registration"],
     24 + "identity" : ["User Account: User Account Authentication", "User Account: User Account Creation", "User Account: User Account Deletion", "User Account: User Account Modification", "User Account: User Account Metadata", "User Account: User Account Modification"],
     25 + "evtx" : ["Process: OS API Execution", "Process: Process Access", "Process: Process Creation", "Process: Process Metadata", "Process: Process Modification", "Process: Process Termination"],
     26 + "filebeat" : ["Waiting..."],
     27 + "winlogbeat-*" : ["Process: OS API Execution", "Process: Process Access", "Process: Process Creation", "Process: Process Metadata", "Process: Process Modification", "Process: Process Termination", "Windows Registry: Windows Registry Key Access", "Windows Registry: Windows Registry Key Creation", "Windows Registry: Windows Registry Key Deletion", "Windows Registry: Windows Registry Key Modification"]
     28 + }
     29 + 
  • ■ ■ ■ ■ ■ ■
    data/mapping/data-sources.json
     1 +[
     2 + {
     3 + "data source": "Application Log",
     4 + "data component": " Application Log Content"
     5 + },
     6 + {
     7 + "data source": "Network Traffic",
     8 + "data component": " Network Traffic Content"
     9 + },
     10 + {
     11 + "data source": "Network Traffic",
     12 + "data component": " Network Traffic Flow"
     13 + },
     14 + {
     15 + "data source": "Network Traffic",
     16 + "data component": " Network Connection Creation"
     17 + },
     18 + {
     19 + "data source": "Domain Name",
     20 + "data component": " Active DNS"
     21 + },
     22 + {
     23 + "data source": "Certificate",
     24 + "data component": " Certificate Registration"
     25 + },
     26 + {
     27 + "data source": "User Account",
     28 + "data component": " User Account Authentication"
     29 + },
     30 + {
     31 + "data source": "User Account",
     32 + "data component": " User Account Creation"
     33 + },
     34 + {
     35 + "data source": "User Account",
     36 + "data component": " User Account Deletion"
     37 + },
     38 + {
     39 + "data source": "User Account",
     40 + "data component": " User Account Modification"
     41 + },
     42 + {
     43 + "data source": "User Account",
     44 + "data component": " User Account Metadata"
     45 + },
     46 + {
     47 + "data source": "User Account",
     48 + "data component": " User Account Modification"
     49 + },
     50 + {
     51 + "data source": "Process",
     52 + "data component": " OS API Execution"
     53 + },
     54 + {
     55 + "data source": "Process",
     56 + "data component": " Process Access"
     57 + },
     58 + {
     59 + "data source": "Process",
     60 + "data component": " Process Creation"
     61 + },
     62 + {
     63 + "data source": "Process",
     64 + "data component": " Process Metadata"
     65 + },
     66 + {
     67 + "data source": "Process",
     68 + "data component": " Process Modification"
     69 + },
     70 + {
     71 + "data source": "Process",
     72 + "data component": " Process Termination"
     73 + },
     74 + {
     75 + "data source": "Windows Registry",
     76 + "data component": " Windows Registry Key Access"
     77 + },
     78 + {
     79 + "data source": "Windows Registry",
     80 + "data component": " Windows Registry Key Creation"
     81 + },
     82 + {
     83 + "data source": "Windows Registry",
     84 + "data component": " Windows Registry Key Deletion"
     85 + },
     86 + {
     87 + "data source": "Windows Registry",
     88 + "data component": " Windows Registry Key Modification"
     89 + }
     90 +]
Please wait...
Page is in error, reload to recover