barox SecPen · Technischer Prüfbericht
| Kunde | {{ $customer?->name }} |
| Projekt | {{ $project?->name ?? '–' }} @if ($project?->reference) (Referenz {{ $project->reference }}) @endif |
| Testdatum | {{ $scans->min('started_at')?->format('d.m.Y') ?? '–' }} bis {{ $scans->max('finished_at')?->format('d.m.Y') ?? '–' }} |
| Erstellt am | {{ $generated_at->format('d.m.Y H:i') }} |
| Erstellt von | {{ $report->creator?->name }} |
| Scanberechtigung | {{ $project?->authorization_reference ?? '–' }}, bestätigt {{ $project?->authorization_confirmed_at?->format('d.m.Y') ?? '–' }} durch {{ $project?->authorizedBy?->name ?? '–' }} |
| Hostname | Management-IP | Hersteller / Modell | Firmware | Seriennummer | Umgebung |
|---|---|---|---|---|---|
| {{ $switch->hostname }} | {{ $switch->management_ip }} | {{ $switch->modelLabel() }} | {{ $switch->firmware_version ?: '–' }} | {{ $switch->serial_number ?: '–' }} | {{ $switch->is_production ? 'Produktivnetz' : 'Labor' }} |
| Scanprofil | {{ $scan->profile->name }} ({{ $scan->profile->intensityLabel() }}) |
| Engine | {{ $scan->profile->engine->label() }} |
| Scanparameter | T{{ data_get($scan->effective_options, 'options.timing', '–') }}, Rate {{ data_get($scan->effective_options, 'options.min_rate', '–') }}–{{ data_get($scan->effective_options, 'options.max_rate', '–') }} Pakete/s, Parallelität {{ data_get($scan->effective_options, 'options.max_parallelism', '–') }}, Diensterkennung {{ data_get($scan->effective_options, 'options.service_detection') ? 'aktiv' : 'inaktiv' }} |
| Ports | {{ data_get($scan->effective_options, 'all_tcp_ports') ? 'alle TCP-Ports' : implode(', ', (array) data_get($scan->effective_options, 'tcp_ports', [])) }} @if (data_get($scan->effective_options, 'udp_ports')) · UDP: {{ implode(', ', (array) data_get($scan->effective_options, 'udp_ports')) }} @endif |
| Zeitraum | {{ $scan->started_at?->format('d.m.Y H:i:s') ?? '–' }} bis {{ $scan->finished_at?->format('d.m.Y H:i:s') ?? '–' }} ({{ $scan->runtimeSeconds() !== null ? gmdate('H:i:s', $scan->runtimeSeconds()) : '–' }}) |
| Status | {{ $scan->status->label() }} @if ($scan->abort_reason) – {{ $scan->abort_reason }} @endif |
| Freigaben | Ausgeführt durch {{ $scan->creator?->name }}. @if ($scan->approver) Freigegeben durch {{ $scan->approver->name }}. @else Keine Freigabe erforderlich. @endif @if ($scan->maintenanceWindow) Wartungsfenster: {{ $scan->maintenanceWindow->name }}. @endif |
| Profil-Prüfsumme | {{ $scan->profile_snapshot_hash }} |
| Kategorie | Anzahl | Bedeutung |
|---|---|---|
| {{ $classification->label() }} | {{ ($findingsByClassification[$classification->value] ?? collect())->count() }} | @switch($classification) @case(\App\Enums\FindingClassification::Vulnerability) Bekannte Schwachstelle mit Referenz (CVE/Plugin). @break @case(\App\Enums\FindingClassification::Configuration) Abweichung von der empfohlenen Konfiguration, kein Softwarefehler. @break @case(\App\Enums\FindingClassification::LoadLimit) Grenze der Verarbeitungskapazität des Geräts, kein Sicherheitsproblem im engeren Sinn. @break @case(\App\Enums\FindingClassification::FirmwareDefect) Verhalten deutet auf einen Fehler der Gerätesoftware hin; Herstellerklärung erforderlich. @break @case(\App\Enums\FindingClassification::NotReproducible) Einmalig beobachtet, unter gleichen Bedingungen nicht erneut aufgetreten. @break @default Bewertung noch offen. @endswitch |
| Schweregrad | Anzahl |
|---|---|
| {{ \App\Enums\Severity::from($severity)->label() }} | {{ ($findingsBySeverity[$severity] ?? collect())->count() }} |
Es wurden keine offenen Ports festgestellt.
@else| Gerät | Port | Protokoll | Dienst / Version | CPE |
|---|---|---|---|---|
| {{ $port['hostname'] ?: $port['ip'] }} | {{ $port['port'] }} | {{ $port['protocol'] }} | {{ $port['service'] ?: '–' }} | {{ $port['cpe'] ?: '–' }} |
| Gerät | {{ $finding->switch?->hostname ?? '–' }} ({{ $finding->switch?->management_ip }}) |
| Quelle | {{ strtoupper($finding->source) }} @if ($finding->plugin_id) · Plugin {{ $finding->plugin_id }} @endif |
| Port | {{ $finding->port ? $finding->port.'/'.$finding->protocol : '–' }} |
| CVSS v3 / CVE | {{ $finding->cvss3_base ?? '–' }} · {{ implode(', ', (array) ($finding->cve ?? [])) ?: 'keine CVE-Referenz' }} |
| Klassifizierung | {{ $finding->classification->label() }} |
| Status | {{ $finding->status->label() }} |
| Erstmals / zuletzt gesehen | {{ $finding->first_seen_at?->format('d.m.Y') ?? '–' }} / {{ $finding->last_seen_at?->format('d.m.Y') ?? '–' }} |
{{ $finding->description }}
@endif @if ($finding->evidence)Nachweis:
{{ \Illuminate\Support\Str::limit($finding->evidence, 1200) }}
@endif @if ($finding->internal_assessment)Empfohlene Massnahme: {{ $finding->recommended_action }}
@elseif ($finding->solution)Lösungsempfehlung des Herstellers: {{ $finding->solution }}
@endif @emptyEs wurden keine Findings erfasst.
@endforelse {{-- --------------------------------------------------- Verhalten des Geräts --}}| CPU-Auslastung (Mittel / Maximum) | {{ $series['cpu_avg'] ?? '–' }} % / {{ $series['cpu_max'] ?? '–' }} % |
| Ping-Antwortzeit (Mittel / Maximum) | {{ $series['rtt_avg'] ?? '–' }} ms / {{ $series['rtt_max'] ?? '–' }} ms |
| Paketverlust (Maximum) | {{ $series['loss_max'] ?? '–' }} % |
| Ausfälle Webinterface | {{ $series['http_failures'] }} Messpunkte |
| Ausfälle SNMP | {{ $series['snmp_failures'] }} Messpunkte |
CPU-Verlauf
{!! $series['sparkline_cpu'] !!}Ping-Antwortzeit
{!! $series['sparkline_rtt'] !!}Paketverlust
{!! $series['sparkline_loss'] !!} @endforeachWährend der Prüfung wurde kein Neustart eines Geräts festgestellt.
@else| Gerät | Zeitpunkt | Beschreibung |
|---|---|---|
| {{ $incident->switch?->hostname }} | {{ $incident->started_at?->format('d.m.Y H:i:s') }} | {{ $incident->summary }} |
Keine auffälligen Topologieänderungen oder Link-Flaps.
@else| Gerät | Typ | Zeitpunkt | Beschreibung |
|---|---|---|---|
| {{ $incident->switch?->hostname }} | {{ $incident->type }} | {{ $incident->started_at?->format('d.m.Y H:i:s') }} | {{ $incident->summary }} |
Kein Scan musste automatisch abgebrochen werden.
@else @foreach ($autoAborts as $scan)| Zeitpunkt | Art | Ereignis |
|---|---|---|
| {{ $event->occurred_at->format('d.m. H:i:s') }} | {{ $event->severity }} | {{ $event->message }} |
Die Prüfung umfasste {{ $switches->count() }} Gerät(e) in {{ $scans->count() }} Scanläufen. Insgesamt wurden {{ $findings->count() }} Feststellungen erfasst, davon {{ ($findingsBySeverity['critical'] ?? collect())->count() + ($findingsBySeverity['high'] ?? collect())->count() }} mit hohem oder kritischem Schweregrad.
@php $loadLimits = $findingsByClassification[\App\Enums\FindingClassification::LoadLimit->value] ?? collect(); $firmware = $findingsByClassification[\App\Enums\FindingClassification::FirmwareDefect->value] ?? collect(); $open = $findingsByClassification[\App\Enums\FindingClassification::Undetermined->value] ?? collect(); @endphp @if ($autoAborts->isNotEmpty() || $loadLimits->isNotEmpty())| Priorität | Gerät | Feststellung | Massnahme |
|---|---|---|---|
| {{ $finding->severity->label() }} | {{ $finding->switch?->hostname ?? '–' }} | {{ $finding->title }} | {{ $finding->recommended_action ?: $finding->solution ?: 'Noch festzulegen.' }} |
| Scan | Datei | SHA-256 | Grösse |
|---|---|---|---|
| {{ $scan->name }} | {{ basename((string) $result->xml_path) }} | {{ $result->xml_sha256 }} | {{ $result->xml_bytes ? number_format($result->xml_bytes / 1024, 1).' KB' : '–' }} |
| {{ $scan->name }} | {{ basename((string) $nessus->export_path) }} | {{ $nessus->export_sha256 }} | {{ $nessus->export_bytes ? number_format($nessus->export_bytes / 1024, 1).' KB' : '–' }} |
Die Rohdateien liegen ausserhalb des Webverzeichnisses auf dem Prüfsystem und werden auf Anfrage bereitgestellt. Die Prüfsummen erlauben den Nachweis der Unverändertheit.