def store_mitigations_on_mongo(): stix2_mitigations = MitreApiInterface.get_all_mitigations() mongo_mitigations = AttackMitigations.dict_from_stix2_attack_patterns( MitreApiInterface.get_all_attack_techniques()) mitigation_technique_relationships = MitreApiInterface.get_technique_and_mitigation_relationships( ) for relationship in mitigation_technique_relationships: mongo_mitigations[relationship['target_ref']].add_mitigation( stix2_mitigations[relationship['source_ref']]) for relationship in mitigation_technique_relationships: mongo_mitigations[relationship['target_ref']].\ add_no_mitigations_info(stix2_mitigations[relationship['source_ref']]) for key, mongo_object in mongo_mitigations.items(): mongo_object.save()
def test_get_all_mitigations(self): mitigations = MitreApiInterface.get_all_mitigations() self.assertIsNotNone((len(mitigations.items()) >= 282)) mitigation = next(iter(mitigations.values())) self.assertEqual(mitigation['type'], "course-of-action") self.assertIsNotNone(mitigation['name']) self.assertIsNotNone(mitigation['description']) self.assertIsNotNone(mitigation['external_references'])
def test_get_all_mitigations(): mitigations = MitreApiInterface.get_all_mitigations() assert len(mitigations.items()) >= 282 mitigation = next(iter(mitigations.values())) assert mitigation["type"] == "course-of-action" assert mitigation["name"] is not None assert mitigation["description"] is not None assert mitigation["external_references"] is not None
def add_no_mitigations_info(self, mitigation: CourseOfAction): mitigation_external_ref_id = MitreApiInterface.get_stix2_external_reference_id( mitigation) if mitigation_external_ref_id.startswith("T") and len( self.mitigations) == 0: mitigation_mongo_object = Mitigation.get_from_stix2_data( mitigation) mitigation_mongo_object["description"] = mitigation_mongo_object[ "description"].splitlines()[0] mitigation_mongo_object["url"] = "" self.mitigations.append(mitigation_mongo_object)
def get_from_stix2_data(mitigation: CourseOfAction): name = mitigation["name"] description = mitigation["description"] url = MitreApiInterface.get_stix2_external_reference_url(mitigation) return Mitigation(name=name, description=description, url=url)
def mitigations_from_attack_pattern(attack_pattern: AttackPattern): return AttackMitigations( technique_id=MitreApiInterface.get_stix2_external_reference_id( attack_pattern), mitigations=[], )
def add_mitigation(self, mitigation: CourseOfAction): mitigation_external_ref_id = MitreApiInterface.get_stix2_external_reference_id( mitigation) if mitigation_external_ref_id.startswith("M"): self.mitigations.append(Mitigation.get_from_stix2_data(mitigation))