The Risk Engine module (modules/risk_engine.py) performs comprehensive risk assessment by analyzing port exposure, vulnerabilities, CVE data, and exploitability. It calculates risk scores using CVSS methodology and generates prioritized remediation recommendations.
Calculates risk score for individual ports based on multiple factors.
risk_engine.py:41-94
def calculate_port_risk(self, port_data, vulnerabilities, cves): """Calculate risk for a specific port""" risk_score = 0 risk_factors = [] port_num = port_data.get('port') service = port_data.get('service', '').lower() # Base risk for port exposure if port_num < 1024: # Well-known ports risk_score += 1 risk_factors.append("Well-known port exposed") # Check for sensitive services sensitive_services = ['ftp', 'telnet', 'smtp', 'mysql', 'postgresql', 'microsoft-ds', 'netbios-ssn', 'rdp'] if any(svc in service for svc in sensitive_services): risk_score += 2 risk_factors.append(f"Sensitive service exposed: {service}") # Check vulnerabilities for this port port_vulns = [v for v in vulnerabilities if v.get('port') == port_num] for vuln in port_vulns: severity = vuln.get('severity', 'UNKNOWN') risk_score += self.risk_scores.get(severity, 1) risk_factors.append(f"{severity} vulnerability: {vuln.get('name')}") if vuln.get('exploitable', False): risk_score *= 1.5 # 50% increase for exploitable vulns risk_factors.append("Exploitable vulnerability detected") # Check CVEs for this port port_cves = [c for c in cves if c.get('port') == port_num] for cve in port_cves: cvss = cve.get('cvss_score', 0) risk_score += cvss / 2 # Weight CVE score if cve.get('exploitable', False): risk_score *= 1.3 # 30% increase for CVE with exploit risk_factors.append(f"CVE with public exploit: {cve.get('cve_id')}") # Normalize to 0-10 scale normalized_score = min(risk_score, 10.0) return { 'port': port_num, 'service': service, 'risk_score': round(normalized_score, 2), 'risk_level': self.calculate_cvss_risk(normalized_score), 'risk_factors': risk_factors }
Risk Calculation Factors:
Port Exposure
Well-known ports (< 1024) add +1 base risk due to higher visibility and targeting.
Sensitive Services
Services like FTP, Telnet, RDP, SMB add +2 risk due to common exploitation and credential attacks.
Vulnerability Severity
Each vulnerability adds its severity score (CRITICAL=10, HIGH=7, MEDIUM=4, LOW=2).
Exploitability
Exploitable vulnerabilities multiply the risk score by 1.5 (50% increase).
CVE Presence
CVEs add half their CVSS score to the risk. CVEs with public exploits multiply by 1.3 (30% increase).
Generates actionable remediation recommendations based on risk assessment.
risk_engine.py:165-195
def generate_recommendations(self, risk_breakdown): """Generate prioritized security recommendations""" recommendations = [] # Critical vulnerabilities if risk_breakdown['critical_count'] > 0: recommendations.append({ 'priority': 'CRITICAL', 'action': 'Patch critical vulnerabilities immediately', 'details': f"{risk_breakdown['critical_count']} critical issues found" }) # Sensitive service exposure for port_risk in risk_breakdown['port_risks']: if any('Sensitive service' in factor for factor in port_risk['risk_factors']): recommendations.append({ 'priority': 'HIGH', 'action': f"Secure or disable {port_risk['service']} on port {port_risk['port']}", 'details': 'Consider firewall restrictions or VPN-only access' }) # Exploitable vulnerabilities exploitable_ports = [p for p in risk_breakdown['port_risks'] if any('Exploitable' in f for f in p['risk_factors'])] if exploitable_ports: recommendations.append({ 'priority': 'HIGH', 'action': 'Address exploitable vulnerabilities', 'details': f"{len(exploitable_ports)} ports have exploitable issues" }) return recommendations