Skip to content
Open
13 changes: 13 additions & 0 deletions pyoaev/contracts/contract_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,15 @@ class ContractConfig:
color_light: str


@dataclass
class Domain:
domain_id: str
domain_name: str
domain_color: str
domain_created_at: str
domain_updated_at: str


@dataclass
class Contract:
contract_id: str
Expand All @@ -141,6 +150,7 @@ class Contract:
is_atomic_testing: bool = True
platforms: List[str] = field(default_factory=list)
external_id: str = None
domains: List[Domain] = None

def add_attack_pattern(self, var: str):
self.contract_attack_patterns_external_ids.append(var)
Expand All @@ -163,6 +173,7 @@ def to_contract_add_input(self, source_id: str):
"contract_content": json.dumps(self, cls=utils.EnhancedJSONEncoder),
"is_atomic_testing": self.is_atomic_testing,
"contract_platforms": self.platforms,
"contract_domains": self.domains,
}

def to_contract_update_input(self):
Expand All @@ -174,6 +185,7 @@ def to_contract_update_input(self):
"contract_content": json.dumps(self, cls=utils.EnhancedJSONEncoder),
"is_atomic_testing": self.is_atomic_testing,
"contract_platforms": self.platforms,
"contract_domains": self.domains,
}


Expand Down Expand Up @@ -203,6 +215,7 @@ def prepare_contracts(contracts):
"contract_attack_patterns_external_ids": c.contract_attack_patterns_external_ids,
"contract_content": json.dumps(c, cls=utils.EnhancedJSONEncoder),
"contract_platforms": c.platforms,
"contract_domains": c.domains,
},
contracts,
)
Expand Down
Empty file.
27 changes: 27 additions & 0 deletions pyoaev/security_domain/builder.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from pyoaev.security_domain.types import SecurityDomains, SecurityDomainsKeyWords


class SecurityDomainBuilder:

def _find_in_keywords(self, keywords, search):
return any(keyword.lower() in search.lower() for keyword in keywords.value)

# Define the domain by item
def get_associated_security_domains(self, name):
domains = []
domains.append(SecurityDomains.ENDPOINT.value)

if self._find_in_keywords(SecurityDomainsKeyWords.NETWORK, name):
domains.append(SecurityDomains.NETWORK.value)
if self._find_in_keywords(SecurityDomainsKeyWords.WEB_APP, name):
domains.append(SecurityDomains.WEB_APP.value)
if self._find_in_keywords(SecurityDomainsKeyWords.EMAIL_INFILTRATION, name):
domains.append(SecurityDomains.EMAIL_INFILTRATION.value)
if self._find_in_keywords(SecurityDomainsKeyWords.DATA_EXFILTRATION, name):
domains.append(SecurityDomains.DATA_EXFILTRATION.value)
if self._find_in_keywords(SecurityDomainsKeyWords.URL_FILTERING, name):
domains.append(SecurityDomains.URL_FILTERING.value)
if self._find_in_keywords(SecurityDomainsKeyWords.CLOUD, name):
domains.append(SecurityDomains.CLOUD.value)

return domains
25 changes: 25 additions & 0 deletions pyoaev/security_domain/types.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from enum import Enum


class SecurityDomainsKeyWords(Enum):
NETWORK = ["network", "ftp", "smb", "llmnr", "nmap"]
WEB_APP = ["web"]
EMAIL_INFILTRATION = ["mail", "phishing"]
DATA_EXFILTRATION = ["exfiltrat"]
URL_FILTERING = ["bitsadmin"]
CLOUD = ["aws", "azure", "gcp"]


class SecurityDomains(Enum):
ENDPOINT = {"domain_name": "Endpoint", "domain_color": "#389CFF"}
NETWORK = {"domain_name": "Network", "domain_color": "#009933"}
WEB_APP = {"domain_name": "Web App", "domain_color": "#FF9933"}
EMAIL_INFILTRATION = {
"domain_name": "E-mail Infiltration",
"domain_color": "#FF6666",
}
DATA_EXFILTRATION = {"domain_name": "Data Exfiltration", "domain_color": "#9933CC"}
URL_FILTERING = {"domain_name": "Url Filtering", "domain_color": "#66CCFF"}
CLOUD = {"domain_name": "Cloud", "domain_color": "#9999CC"}
TABLE_TOP = {"domain_name": "Table Top", "domain_color": "#FFCC33"}
TOCLASSIFY = {"domain_name": "To classify", "domain_color": "#FFFFFF"}