All oversized iace files now comply with the 500-line hard cap: - hazard_library_ai_sw.go split into ai_sw (false_classification..communication) and ai_fw (unauthorized_access..update_failure) - hazard_library_software_hmi.go split into software_hmi (software_fault+hmi) and config_integration (configuration_error+logging+integration) - hazard_library_machine_safety.go split to keep mechanical/electrical/thermal/emc, safety_functions extracted into hazard_library_safety_functions.go - store_hazards.go split: hazard library queries moved to store_hazard_library.go - store_projects.go split: component and classification ops to store_components.go - store_mitigations.go split: evidence/verification/ref-data to store_evidence.go - hazard_library.go GetBuiltinHazardLibrary() updated to call all sub-functions - All iace tests pass (go test ./internal/iace/...) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
272 lines
14 KiB
Go
272 lines
14 KiB
Go
package iace
|
|
|
|
import "time"
|
|
|
|
// builtinHazardsSoftwareHMI returns hazard library entries for
|
|
// software faults and HMI errors.
|
|
func builtinHazardsSoftwareHMI() []HazardLibraryEntry {
|
|
now := time.Now()
|
|
|
|
return []HazardLibraryEntry{
|
|
// ====================================================================
|
|
// Category: software_fault (10 entries)
|
|
// ====================================================================
|
|
{
|
|
ID: hazardUUID("software_fault", 1),
|
|
Category: "software_fault",
|
|
Name: "Race Condition in Sicherheitsfunktion",
|
|
Description: "Zwei Tasks greifen ohne Synchronisation auf gemeinsame Ressourcen zu, was zu unvorhersehbarem Verhalten in sicherheitsrelevanten Funktionen fuehren kann.",
|
|
DefaultSeverity: 5,
|
|
DefaultProbability: 3,
|
|
ApplicableComponentTypes: []string{"software", "firmware"},
|
|
RegulationReferences: []string{"EU 2023/1230 Anhang I §1.2", "IEC 62304", "IEC 61508"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Mutex/Semaphor", "RTOS-Task-Prioritaeten", "WCET-Analyse"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
{
|
|
ID: hazardUUID("software_fault", 2),
|
|
Category: "software_fault",
|
|
Name: "Stack Overflow in Echtzeit-Task",
|
|
Description: "Ein rekursiver Aufruf oder grosse lokale Variablen fuehren zum Stack-Ueberlauf, was Safety-Tasks zum Absturz bringt.",
|
|
DefaultSeverity: 4,
|
|
DefaultProbability: 3,
|
|
ApplicableComponentTypes: []string{"software", "firmware"},
|
|
RegulationReferences: []string{"IEC 62304", "IEC 61508"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Stack-Groessen-Analyse", "Stack-Guard", "Statische Code-Analyse"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
{
|
|
ID: hazardUUID("software_fault", 3),
|
|
Category: "software_fault",
|
|
Name: "Integer Overflow in Sicherheitsberechnung",
|
|
Description: "Arithmetischer Ueberlauf bei der Berechnung sicherheitskritischer Grenzwerte fuehrt zu falschen Ergebnissen und unkontrolliertem Verhalten.",
|
|
DefaultSeverity: 5,
|
|
DefaultProbability: 2,
|
|
ApplicableComponentTypes: []string{"software", "firmware"},
|
|
RegulationReferences: []string{"IEC 62304", "MISRA-C", "IEC 61508"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Datentyp-Pruefung", "Overflow-Detection", "MISRA-C-Analyse"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
{
|
|
ID: hazardUUID("software_fault", 4),
|
|
Category: "software_fault",
|
|
Name: "Deadlock zwischen Safety-Tasks",
|
|
Description: "Gegenseitige Sperrung von Tasks durch zyklische Ressourcenabhaengigkeiten verhindert die Ausfuehrung sicherheitsrelevanter Funktionen.",
|
|
DefaultSeverity: 4,
|
|
DefaultProbability: 3,
|
|
ApplicableComponentTypes: []string{"software", "firmware"},
|
|
RegulationReferences: []string{"IEC 62304", "IEC 61508"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Ressourcen-Hierarchie", "Watchdog", "Deadlock-Analyse"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
{
|
|
ID: hazardUUID("software_fault", 5),
|
|
Category: "software_fault",
|
|
Name: "Memory Leak im Langzeitbetrieb",
|
|
Description: "Nicht freigegebener Heap-Speicher akkumuliert sich ueber Zeit, bis das System abstuerzt und Sicherheitsfunktionen nicht mehr verfuegbar sind.",
|
|
DefaultSeverity: 3,
|
|
DefaultProbability: 4,
|
|
ApplicableComponentTypes: []string{"software"},
|
|
RegulationReferences: []string{"IEC 62304", "IEC 61508"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Memory-Profiling", "Valgrind", "Statisches Speichermanagement"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
{
|
|
ID: hazardUUID("software_fault", 6),
|
|
Category: "software_fault",
|
|
Name: "Null-Pointer-Dereferenz in Safety-Code",
|
|
Description: "Zugriff auf einen Null-Zeiger fuehrt zu einem undefinierten Systemzustand oder Absturz des sicherheitsrelevanten Software-Moduls.",
|
|
DefaultSeverity: 4,
|
|
DefaultProbability: 3,
|
|
ApplicableComponentTypes: []string{"software", "firmware"},
|
|
RegulationReferences: []string{"IEC 62304", "MISRA-C"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Null-Check vor Zugriff", "Statische Analyse", "Defensiv-Programmierung"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
{
|
|
ID: hazardUUID("software_fault", 7),
|
|
Category: "software_fault",
|
|
Name: "Unbehandelte Ausnahme in Safety-Code",
|
|
Description: "Eine nicht abgefangene Ausnahme bricht die Ausfuehrung des sicherheitsrelevanten Codes ab und hinterlaesst das System in einem undefinierten Zustand.",
|
|
DefaultSeverity: 5,
|
|
DefaultProbability: 2,
|
|
ApplicableComponentTypes: []string{"software"},
|
|
RegulationReferences: []string{"IEC 62304", "IEC 61508"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Globaler Exception-Handler", "Exception-Safety-Analyse", "Fail-Safe-Rueckfall"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
{
|
|
ID: hazardUUID("software_fault", 8),
|
|
Category: "software_fault",
|
|
Name: "Korrupte Konfigurationsdaten",
|
|
Description: "Beschaedigte oder unvollstaendige Konfigurationsdaten werden ohne Validierung geladen und fuehren zu falschem Systemverhalten.",
|
|
DefaultSeverity: 4,
|
|
DefaultProbability: 3,
|
|
ApplicableComponentTypes: []string{"software", "firmware"},
|
|
RegulationReferences: []string{"IEC 62304", "Maschinenverordnung 2023/1230"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Konfig-Validierung", "CRC-Pruefung", "Fallback-Konfiguration"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
{
|
|
ID: hazardUUID("software_fault", 9),
|
|
Category: "software_fault",
|
|
Name: "Division durch Null in Regelkreis",
|
|
Description: "Ein Divisor im sicherheitsrelevanten Regelkreis erreicht den Wert Null, was zu einem Laufzeitfehler oder undefiniertem Ergebnis fuehrt.",
|
|
DefaultSeverity: 5,
|
|
DefaultProbability: 2,
|
|
ApplicableComponentTypes: []string{"software", "firmware"},
|
|
RegulationReferences: []string{"IEC 62304", "IEC 61508", "MISRA-C"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Vorbedingungspruefung", "Statische Analyse", "Defensiv-Programmierung"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
{
|
|
ID: hazardUUID("software_fault", 10),
|
|
Category: "software_fault",
|
|
Name: "Falscher Safety-Parameter durch Software-Bug",
|
|
Description: "Ein Software-Fehler setzt einen sicherheitsrelevanten Parameter auf einen falschen Wert, ohne dass eine Plausibilitaetspruefung dies erkennt.",
|
|
DefaultSeverity: 5,
|
|
DefaultProbability: 2,
|
|
ApplicableComponentTypes: []string{"software", "firmware"},
|
|
RegulationReferences: []string{"IEC 62304", "IEC 61508", "Maschinenverordnung 2023/1230"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Parametervalidierung", "Redundante Speicherung", "Diversitaere Pruefung"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
|
|
// ====================================================================
|
|
// Category: hmi_error (8 entries)
|
|
// ====================================================================
|
|
{
|
|
ID: hazardUUID("hmi_error", 1),
|
|
Category: "hmi_error",
|
|
Name: "Falsche Einheitendarstellung",
|
|
Description: "Das HMI zeigt Werte in einer falschen Masseinheit an (z.B. mm statt inch), was zu Fehlbedienung und Maschinenfehlern fuehren kann.",
|
|
DefaultSeverity: 4,
|
|
DefaultProbability: 3,
|
|
ApplicableComponentTypes: []string{"hmi", "software"},
|
|
RegulationReferences: []string{"Maschinenverordnung 2023/1230 Anhang III", "EN ISO 9241"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Einheiten-Label im UI", "Lokalisierungstests", "Einheiten-Konvertierungspruefung"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
{
|
|
ID: hazardUUID("hmi_error", 2),
|
|
Category: "hmi_error",
|
|
Name: "Fehlender oder stummer Sicherheitsalarm",
|
|
Description: "Ein kritisches Sicherheitsereignis wird dem Bediener nicht oder nicht rechtzeitig angezeigt, weil die Alarmfunktion deaktiviert oder fehlerhaft ist.",
|
|
DefaultSeverity: 5,
|
|
DefaultProbability: 2,
|
|
ApplicableComponentTypes: []string{"hmi", "software"},
|
|
RegulationReferences: []string{"Maschinenverordnung 2023/1230", "ISO 13849", "EN ISO 9241"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Alarmtest im Rahmen der Inbetriebnahme", "Akustischer Backup-Alarm", "Alarmverwaltungssystem"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
{
|
|
ID: hazardUUID("hmi_error", 3),
|
|
Category: "hmi_error",
|
|
Name: "Sprachfehler in Bedienoberflaeche",
|
|
Description: "Fehlerhafte oder mehrdeutige Bezeichnungen in der Benutzersprache fuehren zu Fehlbedienung sicherheitsrelevanter Funktionen.",
|
|
DefaultSeverity: 3,
|
|
DefaultProbability: 3,
|
|
ApplicableComponentTypes: []string{"hmi"},
|
|
RegulationReferences: []string{"Maschinenverordnung 2023/1230 Anhang III"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Usability-Test", "Lokalisierungs-Review", "Mehrsprachige Dokumentation"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
{
|
|
ID: hazardUUID("hmi_error", 4),
|
|
Category: "hmi_error",
|
|
Name: "Fehlende Eingabevalidierung im HMI",
|
|
Description: "Das HMI akzeptiert ausserhalb des gueltigen Bereichs liegende Eingaben ohne Warnung und leitet sie an die Steuerung weiter.",
|
|
DefaultSeverity: 4,
|
|
DefaultProbability: 3,
|
|
ApplicableComponentTypes: []string{"hmi", "software"},
|
|
RegulationReferences: []string{"Maschinenverordnung 2023/1230", "IEC 62304"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Grenzwertpruefung", "Eingabemaske mit Bereichen", "Warnung bei Grenzwertnaehe"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
{
|
|
ID: hazardUUID("hmi_error", 5),
|
|
Category: "hmi_error",
|
|
Name: "Defekter Statusindikator",
|
|
Description: "Ein LED, Anzeigeelement oder Softwaresymbol zeigt einen falschen Systemstatus an und verleitet den Bediener zu falschen Annahmen.",
|
|
DefaultSeverity: 4,
|
|
DefaultProbability: 3,
|
|
ApplicableComponentTypes: []string{"hmi"},
|
|
RegulationReferences: []string{"Maschinenverordnung 2023/1230 Anhang III"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Regelmaessige HMI-Tests", "Selbsttest beim Einschalten", "Redundante Statusanzeige"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
{
|
|
ID: hazardUUID("hmi_error", 6),
|
|
Category: "hmi_error",
|
|
Name: "Quittierung ohne Ursachenbehebung",
|
|
Description: "Der Bediener kann einen Sicherheitsalarm quittieren, ohne die zugrundeliegende Ursache behoben zu haben, was das Risiko wiederkehrender Ereignisse erhoet.",
|
|
DefaultSeverity: 4,
|
|
DefaultProbability: 3,
|
|
ApplicableComponentTypes: []string{"hmi", "software"},
|
|
RegulationReferences: []string{"Maschinenverordnung 2023/1230", "ISO 13849"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Ursachen-Checkliste vor Quittierung", "Pflicht-Ursachen-Eingabe", "Audit-Log der Quittierungen"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
{
|
|
ID: hazardUUID("hmi_error", 7),
|
|
Category: "hmi_error",
|
|
Name: "Veraltete Anzeige durch Caching-Fehler",
|
|
Description: "Die HMI-Anzeige wird nicht aktualisiert und zeigt veraltete Sensorwerte oder Zustaende an, was zu Fehlentscheidungen fuehrt.",
|
|
DefaultSeverity: 4,
|
|
DefaultProbability: 3,
|
|
ApplicableComponentTypes: []string{"hmi", "software"},
|
|
RegulationReferences: []string{"Maschinenverordnung 2023/1230 Anhang III"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Timestamp-Anzeige", "Refresh-Watchdog", "Verbindungsstatus-Indikator"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
{
|
|
ID: hazardUUID("hmi_error", 8),
|
|
Category: "hmi_error",
|
|
Name: "Fehlende Betriebsart-Kennzeichnung",
|
|
Description: "Die aktive Betriebsart (Automatik, Einrichten, Wartung) ist im HMI nicht eindeutig sichtbar, was zu unerwarteten Maschinenbewegungen fuehren kann.",
|
|
DefaultSeverity: 4,
|
|
DefaultProbability: 3,
|
|
ApplicableComponentTypes: []string{"hmi", "software"},
|
|
RegulationReferences: []string{"Maschinenverordnung 2023/1230", "ISO 13849"},
|
|
SuggestedMitigations: mustMarshalJSON([]string{"Dauerhafte Betriebsart-Anzeige", "Farbliche Kennzeichnung", "Bestaetigung bei Modewechsel"}),
|
|
IsBuiltin: true,
|
|
TenantID: nil,
|
|
CreatedAt: now,
|
|
},
|
|
}
|
|
}
|