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

AuswirkungDetails
ZugriffskontrolleBereich: 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

  1. MITRE Corporation. "CWE-1233: Security-Sensitive Hardware Controls with Missing Lock Bit Protection." https://cwe.mitre.org/data/definitions/1233.html
  2. Hardware-Sperrabdeckungsanalyse
  3. Richtlinien zum Schutz von Sicherheitsregistern