def version(self, version): typeChecker(type(self).__name__, version, str, "version") categoryChecker( type(self).__name__, version, ["3.0", "4.0", "4.1"], "version") if self.__versions is UNSETVALUE: self.__versions = Versions() self.__versions.layer = version
def score(self, score): try: typeChecker(type(self).__name__, score, int, "score") self.__score = score except BadType: typeChecker(type(self).__name__, score, float, "score") self.__score = int(score)
def layer(self, layer): typeChecker(type(self).__name__, layer, str, "layer") categoryChecker(type(self).__name__, layer, ["3.0", "4.0"], "layer version") if layer == '3.0': print('[NOTICE] - Forcibly upgrading version from {} to 4.0.'.format(layer)) layer = "4.0" self.__layer = layer
def techniqueID(self, techniqueID): typeChecker(type(self).__name__, techniqueID, str, "techniqueID") if not techniqueID.startswith('T'): handler(type(self).__name__, '{} not a valid value for techniqueID' .format(techniqueID)) raise BadInput else: self.__techniqueID = techniqueID
def domain(self, domain): typeChecker(type(self).__name__, domain, str, "domain") dom = domain if dom.startswith('mitre'): dom = dom.split('-')[-1] + '-attack' categoryChecker(type(self).__name__, dom, ["enterprise-attack", "mobile-attack"], "domain") self.__domain = domain
def metadata(self, metadata): typeChecker(type(self).__name__, metadata, list, "metadata") self.__metadata = [] for entry in metadata: try: loadChecker(type(self).__name__, entry, ['name', 'value'], "metadata") self.__metadata.append(Metadata(entry['name'], entry['value'])) except MissingParameters as e: handler(type(self).__name__, 'Metadata {} is missing parameters: ' '{}. Skipping.' .format(entry, e))
def metadata(self, metadata): typeChecker(type(self).__name__, metadata, list, "metadata") self.__metadata = [] entry = "" try: for entry in metadata: self.__metadata.append(Metadata(entry['name'], entry['value'])) except KeyError as e: handler( type(self).__name__, 'Metadata {} is missing parameters: ' '{}. Unable to load.'.format(entry, e))
def navigator(self, navigator): typeChecker(type(self).__name__, navigator, str, "navigator") try: categoryChecker( type(self).__name__, navigator, ["4.0", "4.1"], "navigator version") except BadInput: print( f'[WARNING] - unrecognized navigator version {navigator}. Defaulting to the 4.1 schema, ' f'this may result in unexpected behavior.') self.__navigator = navigator
def versions(self, versions): typeChecker(type(self).__name__, versions, dict, "version") attack = UNSETVALUE if 'attack' in versions: attack = versions['attack'] try: loadChecker(type(self).__name__, versions, ['layer', 'navigator'], "versions") self.__versions = Versions(versions['layer'], attack, versions['navigator']) except MissingParameters as e: handler(type(self).__name__, 'versions {} is missing parameters: ' '{}. Skipping.' .format(versions, e))
def legendItems(self, legendItems): typeChecker(type(self).__name__, legendItems, list, "legendItems") self.__legendItems = [] for entry in legendItems: try: loadChecker(type(self).__name__, entry, ['label', 'color'], "legendItem") temp = LegendItem(entry['label'], entry['color']) self.__legendItems.append(temp) except MissingParameters as e: handler(type(self).__name__, 'Legend Item {} is missing parameters: ' '{}. Skipping.' .format(entry, e))
def legendItems(self, legendItems): typeChecker(type(self).__name__, legendItems, list, "legendItems") self.__legendItems = [] entry = "" try: for entry in legendItems: temp = LegendItem(entry['label'], entry['color']) self.__legendItems.append(temp) except KeyError as e: handler( type(self).__name__, 'LegendItem {} is missing parameters:' ' {}. Unable to load.'.format(entry, e))
def techniques(self, techniques): typeChecker(type(self).__name__, techniques, list, "techniques") self.__techniques = [] for entry in techniques: try: loadChecker(type(self).__name__, entry, ['techniqueID'], "technique") temp = Technique(entry['techniqueID']) temp._loader(entry) self.__techniques.append(temp) except MissingParameters as e: handler(type(self).__name__, 'Technique {} is missing parameters: ' '{}. Skipping.' .format(entry, e))
def techniques(self, techniques): typeChecker(type(self).__name__, techniques, list, "techniques") self.__techniques = [] entry = "" try: for entry in techniques: temp = Technique(entry['techniqueID']) temp._loader(entry) self.__techniques.append(temp) except KeyError as e: handler( type(self).__name__, "Unable to properly extract " "information from technique {}: {}.".format(entry, e)) raise BadInput
def layer(self, layer): typeChecker(type(self).__name__, layer, str, "layer") try: categoryChecker( type(self).__name__, layer, ["3.0", "4.0", "4.1"], "layer version") except BadInput: print( f'[WARNING] - unrecognized layer version {layer}. Defaulting to the 4.1 schema, this may result in ' f'unexpected behavior.') if layer == '3.0': print( f'[NOTICE] - Forcibly upgrading version from {layer} to 4.1.') layer = "4.1" self.__layer = layer
def sorting(self, sorting): typeChecker(type(self).__name__, sorting, int, "sorting") categoryChecker(type(self).__name__, sorting, [0, 1, 2, 3], "sorting") self.__sorting = sorting
def selectTechniquesAcrossTactics(self, selectTechniquesAcrossTactics): typeChecker( type(self).__name__, selectTechniquesAcrossTactics, bool, "selectTechniqueAcrossTactics") self.__selectTechniquesAcrossTactics = selectTechniquesAcrossTactics
def selectSubtechniquesWithParent(self, selectSubtechniquesWithParent): typeChecker( type(self).__name__, selectSubtechniquesWithParent, bool, "selectSubtechniquesWithParent") self.__selectSubtechniquesWithParent = selectSubtechniquesWithParent
def showTacticRowBackground(self, showTacticRowBackground): typeChecker( type(self).__name__, showTacticRowBackground, bool, "showTacticRowBackground") self.__showTacticRowBackground = showTacticRowBackground
def tacticRowBackground(self, tacticRowBackground): typeChecker( type(self).__name__, tacticRowBackground, str, "tacticRowBackground") self.__tacticRowBackground = tacticRowBackground
def enabled(self, enabled): typeChecker(type(self).__name__, enabled, bool, "enabled") self.__enabled = enabled
def tactic(self, tactic): typeChecker(type(self).__name__, tactic, str, "tactic") self.__tactic = tactic
def domain(self, domain): typeChecker(type(self).__name__, domain, str, "domain") categoryChecker( type(self).__name__, domain, ["mitre-enterprise", "mitre-mobile"], "domain") self.__domain = domain
def version(self, version): typeChecker(type(self).__name__, version, str, "version") categoryChecker(type(self).__name__, version, ["3.0"], "version") self.__version = version
def label(self, label): typeChecker(type(self).__name__, label, str, "label") self.__label = label
def showSubtechniques(self, showSubtechniques): typeChecker( type(self).__name__, showSubtechniques, bool, "showSubtechniques") self.__showSubtechniques = showSubtechniques
def color(self, color): typeChecker(type(self).__name__, color, str, "color") self.__color = color
def name(self, name): typeChecker(type(self).__name__, name, str, "name") self.__name = name
def hideDisabled(self, hideDisabled): typeChecker(type(self).__name__, hideDisabled, bool, "hideDisabled") self.__hideDisabled = hideDisabled
def description(self, description): typeChecker(type(self).__name__, description, str, "description") self.__description = description
def comment(self, comment): typeChecker(type(self).__name__, comment, str, "comment") self.__comment = comment