{% extends "base.html" %} {% set active_page = "attack_surface" %} {% block title %}FaultRay - Attack Surface Analysis{% endblock %} {% block page_title %}Attack Surface Analysis{% endblock %} {% block page_subtitle %}Map entry points, lateral paths, and high-value targets{% endblock %} {% block top_actions %} {% endblock %} {% block content %}

Attack Surface Score

Lower is better
{% set as_score = report.total_attack_surface_score if report else 0 %} {% if as_score <= 30 %} {% set sc_class = "score-good" %} {% set sc_label = "Low Risk" %} {% elif as_score <= 60 %} {% set sc_class = "score-warning" %} {% set sc_label = "Moderate" %} {% else %} {% set sc_class = "score-critical" %} {% set sc_label = "High Risk" %} {% endif %}
{{ "%.0f"|format(as_score) }}
{{ sc_label }}

Surface Summary

{% if report %}
{{ report.external_exposure }}
Internet-Facing
{{ report.entry_points|length }}
Entry Points
{{ report.lateral_paths|length }}
Lateral Paths
{{ "%.1f"|format(report.avg_defense_depth) }}
Avg Defense Depth
{% else %}

Run the analysis to see results.

{% endif %}

Entry Points

{% if report %} {% for ep in report.entry_points %} {% endfor %} {% else %} {% endif %}
Component Exposure Protocol Attack Vectors Defense
{{ ep.component_name }} {% if ep.exposure_type == "internet" %} Internet {% elif ep.exposure_type == "api" %} API {% else %} Internal {% endif %} {{ ep.protocol }} {{ ep.attack_vectors[:3]|join(", ") }} {% set def_pct = (ep.defense_score * 100)|int %} {% if def_pct >= 60 %} {{ def_pct }}% {% elif def_pct >= 30 %} {{ def_pct }}% {% else %} {{ def_pct }}% {% endif %}
No data yet. Run analysis above.

High-Value Targets

{% if report %} {% for ht in report.high_value_targets|sort(attribute='risk_score', reverse=true) %} {% endfor %} {% else %} {% endif %}
Component Value Type Risk Score Reachable From Min Hops Defense Depth
{{ ht.component_name }} {{ ht.value_type }} {% if ht.risk_score >= 7 %} {{ "%.1f"|format(ht.risk_score) }}/10 {% elif ht.risk_score >= 4 %} {{ "%.1f"|format(ht.risk_score) }}/10 {% else %} {{ "%.1f"|format(ht.risk_score) }}/10 {% endif %} {{ ht.reachable_from|length }} entry point(s) {{ ht.min_hops }} {% if ht.defense_depth == 0 %} None {% elif ht.defense_depth <= 2 %} {{ ht.defense_depth }} barrier(s) {% else %} {{ ht.defense_depth }} barrier(s) {% endif %}
No data yet. Run analysis above.
{% if report and report.attack_chains %}

Attack Chains

{% for chain in report.attack_chains %}

{{ chain.name }}

{% if chain.impact == "critical" %} {{ chain.impact|upper }} {% elif chain.impact == "high" %} {{ chain.impact|upper }} {% else %} {{ chain.impact|upper }} {% endif %} {{ chain.likelihood }} likelihood
{% for step in chain.steps %}
{{ step.component }}
{{ step.action }}
{% if not loop.last %} {% endif %} {% endfor %}
{% if chain.mitigations %}
Mitigations: {{ chain.mitigations[:3]|join("; ") }}
{% endif %}
{% endfor %}
{% endif %} {% if report and report.recommendations %}

Recommendations

{% for rec in report.recommendations %}
{{ loop.index }}. {{ rec }}
{% endfor %}
{% endif %}
{% endblock %}