Unsachgemäßer Schutz für ausgehende Fehlermeldungen und Warnsignale
Beschreibung
Unsachgemäßer Schutz für ausgehende Fehlermeldungen und Warnsignale tritt auf, wenn nicht vertrauenswürdige Agenten Warnungen über Signalzustände, die Grenzwerte überschreiten, oder den Reaktionsmechanismus, der solche Warnungen verarbeitet, deaktivieren können. Hardware-Geräte verlassen sich auf Sensoren, um Betriebszustände außerhalb der Grenzen zu erkennen und Warnsignale auszulösen, die Abhilfemaßnahmen wie Abschaltung oder Drosselung einleiten. Wenn diesen schützenden Warnungen ordnungsgemäße Sicherheitskontrollen fehlen, kann bösartige Software sie maskieren oder deaktivieren, was insbesondere thermische und Leistungsverwaltungssysteme betrifft.
Risiko
Unsachgemäßer Warnungsschutz hat schwerwiegende Auswirkungen. Thermische Warnungen deaktiviert, was Überhitzung verursacht. Leistungswarnungen maskiert, was Schäden ermöglicht. Schutzabschaltungen verhindert. Hardwareschäden möglich. Denial of Service durch induzierte Ausfälle. Systeminstabilität. Sicherheitsmechanismen besiegt. Komponentenlebensdauer reduziert. Physischer Geräteschäden. Hohe Wahrscheinlichkeit wenn Warnungskonfigurationen für nicht vertrauenswürdige Software zugänglich sind.
Lösung
Warnsignale, die durch kritische Ereignisse erzeugt werden, sollten während der Architektur- und Entwurfsphase vor Zugriff durch nicht vertrauenswürdige Agenten geschützt werden. Nur Hardware oder vertrauenswürdige Firmware-Module sollten die Warnungskonfiguration ändern können. Implementieren Sie Zugriffskontrolle auf GPIO- und Interrupt-Konfigurationsregister. Sperren Sie Warnschwellenwerte nach sicherer Initialisierung. Verwenden Sie Hardware-Durchsetzung von Warnreaktionen, die von Software nicht überschrieben werden können.
Häufige Auswirkungen
| Auswirkung | Details |
|---|---|
| Verfügbarkeit | Bereich: Verfügbarkeit Systeminstabilität, Abstürze und Denial-of-Service durch deaktivierte Schutzwarnungen. |
| Integrität | Bereich: Integrität Sicherheitsmechanismen kompromittiert, die Betrieb außerhalb sicherer Parameter ermöglichen. |
Beispielcode und Lösung
Verwundbarer Code
// VERWUNDBAR: Thermischer Warn-Controller ohne Zugriffsschutz
module vulnerable_thermal_alert (
input wire clk,
input wire rst_n,
input wire [11:0] temperature,
input wire config_write_en,
input wire [11:0] config_threshold,
input wire config_alert_enable,
input wire [1:0] config_gpio_mask,
output reg alert_out,
output reg shutdown_request,
output reg [1:0] gpio_alert
);
reg [11:0] threshold_reg;
reg alert_enabled;
reg [1:0] gpio_mask;
// VERWUNDBAR: Jede Software kann Warnungskonfiguration ändern
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
threshold_reg <= 12'hFFF;
alert_enabled <= 1'b1;
gpio_mask <= 2'b11;
end else if (config_write_en) begin
// VERWUNDBAR: Keine Zugriffskontrolle
threshold_reg <= config_threshold;
alert_enabled <= config_alert_enable;
gpio_mask <= config_gpio_mask;
end
end
wire over_temp = (temperature > threshold_reg);
always @(posedge clk) begin
// VERWUNDBAR: Warnung kann von nicht vertrauenswürdiger Software deaktiviert werden
if (over_temp && alert_enabled) begin
alert_out <= 1'b1;
shutdown_request <= 1'b1;
gpio_alert <= gpio_mask;
end else begin
alert_out <= 1'b0;
shutdown_request <= 1'b0;
gpio_alert <= 2'b00;
end
end
endmodule
Sichere Lösung
// SICHER: Thermischer Warn-Controller mit Zugriffsschutz
module secure_thermal_alert (
input wire clk,
input wire rst_n,
input wire [11:0] temperature,
input wire config_write_en,
input wire [11:0] config_threshold,
input wire config_alert_enable,
input wire [1:0] config_gpio_mask,
input wire privileged_access, // SICHER: Berechtigungssignal
input wire boot_complete, // SICHER: Lebenszyklus-Signal
output reg alert_out,
output reg shutdown_request,
output reg [1:0] gpio_alert,
output reg config_denied,
output reg config_locked
);
reg [11:0] threshold_reg;
reg alert_enabled;
reg [1:0] gpio_mask;
localparam MIN_THRESHOLD = 12'h100;
localparam MAX_THRESHOLD = 12'hC00;
// SICHER: Konfiguration nach Boot sperren
always @(posedge clk or negedge rst_n) begin
if (!rst_n) config_locked <= 1'b0;
else if (boot_complete) config_locked <= 1'b1;
end
// SICHER: Geschützte Konfiguration mit Zugriffskontrolle
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
threshold_reg <= 12'h800;
alert_enabled <= 1'b1; // SICHER: Immer standardmäßig aktiviert
gpio_mask <= 2'b11;
config_denied <= 1'b0;
end else if (config_write_en) begin
config_denied <= 1'b0;
if (!privileged_access || config_locked) begin
config_denied <= 1'b1;
end else begin
if (config_threshold >= MIN_THRESHOLD && config_threshold <= MAX_THRESHOLD)
threshold_reg <= config_threshold;
else
config_denied <= 1'b1;
// SICHER: Warnung kann nicht deaktiviert werden
if (!config_alert_enable) config_denied <= 1'b1;
if (config_gpio_mask != 2'b00)
gpio_mask <= gpio_mask | config_gpio_mask;
end
end
end
wire over_temp = (temperature > threshold_reg);
// SICHER: Hardware-durchgesetzte Warnung, die nicht deaktiviert werden kann
always @(posedge clk) begin
alert_out <= over_temp;
shutdown_request <= over_temp;
gpio_alert <= over_temp ? gpio_mask : 2'b00;
end
endmodule
CVE-Beispiele
- CVE-2020-8693: Unsachgemäße Zugriffskontrolle für thermische Warnungen in Intel-Prozessoren ermöglichte Denial of Service.
- CVE-2019-11137: Unzureichende Zugriffskontrolle auf Leistungsverwaltungsschnittstellen.
Verwandte CWEs
- CWE-284: Improper Access Control (Eltern)
- CWE-1206: Power, Clock, Thermal, and Reset Concerns (Kategorie)
- CWE-1314: Missing Write Protection for Parametric Data Values (verwandt)
Referenzen
- MITRE Corporation. "CWE-1320: Improper Protection for Outbound Error Messages and Alert Signals." https://cwe.mitre.org/data/definitions/1320.html
- Intel. "Thermal Management Guidelines"
- JEDEC. "Power Management Standards"