Sicherheitssensible Hardware-Kontrollen mit fehlendem Sperrbit-Schutz
Beschreibung
Sicherheitssensible Hardware-Kontrollen mit fehlendem Sperrbit-Schutz treten auf, wenn ein Produkt Register-Sperrbit-Schutz implementiert, aber nicht sicherstellt, dass das Sperrbit die Modifikation aller Systemregister verhindert, die wichtige Hardware-Konfiguration ändern könnten. Hardware-Geräte verwenden häufig vertrauenswürdige Sperrbits, um Schreibvorgänge auf geschützte Register nach der initialen Firmware-Konfiguration zu deaktivieren. Diese Schwachstelle tritt auf, wenn das Sperrbit nicht alle Systemregister oder -kontrollen effektiv schreibschützt, die die geschützte Systemkonfiguration modifizieren könnten, was Angreifern ermöglicht, den Schutz durch ungeschützte verwandte Register zu umgehen.
Risiko
Fehlender Sperrbit-Schutz für sensible Kontrollen hat schwerwiegende Sicherheitsauswirkungen. Verwandte Konfigurationsregister können modifizierbar sein. Kalibrierungsdaten können geändert werden, um geschützte Funktionen zu beeinflussen. Indirekte Kontrollpfade können Sperren umgehen. Sicherheitskritische Kontrollen können deaktiviert werden. Sicherheitsfunktionen können durch ungeschützte Register umgangen werden.
Lösung
Identifizieren Sie alle Register, die die sicherheitssensible Konfiguration beeinflussen können. Stellen Sie sicher, dass Sperrbits alle verwandten Register und Kontrollen schützen. Überprüfen Sie indirekte Pfade zu geschützter Funktionalität. Testen Sie, dass gesperrte Konfigurationen auf keine Weise modifiziert werden können. Dokumentieren Sie, welche Register durch jede Sperre geschützt sind. Implementieren Sie umfassende Sperrabdeckungsanalyse. Berücksichtigen Sie transitive Abhängigkeiten beim Design von Sperren.
Häufige Auswirkungen
| Auswirkung | Details |
|---|---|
| Zugriffskontrolle | Bereich: Zugriffskontrolle Speicher modifizieren – Durch Sperrbit geschützte Systemkonfiguration kann durch ungeschützte verwandte Register modifiziert werden, was die Zugriffskontrolle verletzt. |
Beispielcode und Lösung
Verwundbarer Code
// VERWUNDBAR: Sperre schützt nicht alle verwandten Register
module vulnerable_thermal_sensor (
input wire clk,
input wire reset_n,
input wire [31:0] write_data,
input wire write_enable,
input wire [7:0] register_select,
input wire set_lock,
output reg [31:0] critical_temp_limit, // Durch Sperre geschützt
output reg [31:0] calibration_offset, // NICHT durch Sperre geschützt!
output reg shutdown_enable, // NICHT durch Sperre geschützt!
output reg sensor_locked
);
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
critical_temp_limit <= 32'd100;
calibration_offset <= 32'd0;
shutdown_enable <= 1'b1;
sensor_locked <= 1'b0;
end
else begin
if (set_lock) sensor_locked <= 1'b1;
if (write_enable) begin
case (register_select)
8'h00: if (!sensor_locked) critical_temp_limit <= write_data;
8'h01: calibration_offset <= write_data; // VERWUNDBAR: Nicht geschützt!
8'h02: shutdown_enable <= write_data[0]; // VERWUNDBAR: Nicht geschützt!
endcase
end
end
end
// Angriff: Auch mit gesperrtem critical_temp_limit bei 100:
// 1. calibration_offset auf -100 setzen (Messung zeigt immer 0)
// 2. Oder shutdown_enable auf 0 setzen (löst nie Abschaltung aus)
endmodule
Sichere Lösung
// SICHER: Sperre schützt alle verwandten Sicherheitskontrollen
module secure_thermal_sensor (
input wire clk,
input wire reset_n,
input wire [31:0] write_data,
input wire write_enable,
input wire [7:0] register_select,
input wire set_lock,
output reg [31:0] critical_temp_limit,
output reg [31:0] calibration_offset,
output reg shutdown_enable,
output reg sensor_locked
);
always @(posedge clk or negedge reset_n) begin
if (!reset_n) begin
critical_temp_limit <= 32'd100;
calibration_offset <= 32'd0;
shutdown_enable <= 1'b1;
sensor_locked <= 1'b0;
end
else begin
if (set_lock) sensor_locked <= 1'b1;
if (write_enable) begin
case (register_select)
8'h00: if (!sensor_locked) critical_temp_limit <= write_data;
8'h01: if (!sensor_locked) calibration_offset <= write_data; // Jetzt geschützt
8'h02: if (!sensor_locked) shutdown_enable <= write_data[0]; // Jetzt geschützt
endcase
end
end
end
endmodule
CVE-Beispiele
- CVE-2018-9085: Schreibschutzsperre nach Boot nicht gesetzt
- CVE-2014-8273: Race Condition zwischen Interrupt-Handler-Erkennung und Sperrbit-Reset
Verwandte CWEs
- CWE-284: Improper Access Control (übergeordnet)
- CWE-667: Improper Locking (verwandt)
- CWE-1231: Improper Prevention of Lock Bit Modification (verwandt)
Referenzen
- MITRE Corporation. "CWE-1233: Security-Sensitive Hardware Controls with Missing Lock Bit Protection." https://cwe.mitre.org/data/definitions/1233.html
- Hardware-Sperrabdeckungsanalyse
- Richtlinien zum Schutz von Sicherheitsregistern