Fehlende Unterstützung für Sicherheitsfunktionen in On-Chip Fabrics oder Bussen
Beschreibung
Fehlende Unterstützung für Sicherheitsfunktionen in On-Chip Fabrics oder Bussen tritt auf, wenn On-Chip Fabrics oder Busse entweder keine Berechtigungstrennung oder andere Sicherheitsfunktionen wie Zugriffskontrolle unterstützen oder nicht dafür konfiguriert sind. Die Schwachstelle zeigt sich, wenn die On-Chip-Kommunikationsinfrastruktur keine Mechanismen zum Transport von Sicherheitsattributen (Berechtigungsstufen, Identität, Zugriffskontrolldaten) zwischen Bus-Mastern und Slaves besitzt. Selbst wenn unterstützt, können diese Funktionen während der RTL-Generierung unkonfiguriert bleiben, was sie unwirksam macht und sicherheitskritische Kommunikation ungeschützt lässt.
Risiko
Fehlende Sicherheitsfunktionen in Fabrics haben schwerwiegende Auswirkungen. Keine Berechtigungstrennung möglich. Sicherheitsattribute nicht transportiert. Zugriffskontrolle nicht durchsetzbar. Alle Master erscheinen gleich vertrauenswürdig. Geschützte Peripheriegeräte für jeden zugänglich. Sichere und nicht-sichere Welten nicht trennbar. TrustZone-artige Isolation versagt. Seitenkanalangriffe zwischen Domänen. Mittlere Wahrscheinlichkeit bei Verwendung von Protokollen mit optionaler Sicherheit oder bei kostenoptimierten Designs.
Lösung
Implementieren Sie Sicherheitsprüfungen an Fabric-Bridges oder Zwischenmodulen. Trennen Sie ungesicherte Busse von sicherheitskritischen Peripheriegeräten. Verbinden Sie sicherheitssensitive Assets mit Bussen, die Sicherheitsfunktionen unterstützen. Konfigurieren Sie optionale Sicherheitssignale (z.B. MReqInfo/SRespInfo in OCP, AxPROT in AXI) während der RTL-Generierung. Führen Sie Architektur- und Entwurfsprüfungen durch, um sicherzustellen, dass Fabric-Spezifikationen die erforderlichen Sicherheitssignale enthalten.
Häufige Auswirkungen
| Auswirkung | Details |
|---|---|
| Zugriffskontrolle | Bereich: Zugriffskontrolle Berechtigungstrennung oder Zugriffsbeschränkungen nicht durchsetzbar. |
| Vertraulichkeit | Bereich: Vertraulichkeit Unbefugter Speicherlesezugriff durch fehlende Sicherheitsattribute. |
| Integrität | Bereich: Integrität Speicheränderung möglich wenn Zugriffskontrolle nicht durchgesetzt werden kann. |
| Verfügbarkeit | Bereich: Verfügbarkeit Denial of Service durch unbefugten Zugriff auf kritische Ressourcen. |
Beispielcode und Lösung
Verwundbarer Code
// VERWUNDBAR: APB-Bus ohne ausreichende Sicherheitssignale
module vulnerable_apb_interconnect (
input wire clk,
input wire rst_n,
input wire [31:0] master_paddr,
input wire [31:0] master_pwdata,
input wire master_pwrite,
input wire master_psel,
input wire master_penable,
// VERWUNDBAR: Kein PPROT-Signal!
output reg [31:0] slave0_paddr,
output reg [31:0] slave0_pwdata,
output reg slave0_pwrite,
output reg slave0_psel,
output reg slave0_penable,
output reg [31:0] slave1_paddr,
output reg [31:0] slave1_pwdata,
output reg slave1_pwrite,
output reg slave1_psel,
output reg slave1_penable
);
wire select_slave0 = (master_paddr[31:16] == 16'h4000);
wire select_slave1 = (master_paddr[31:16] == 16'h4001);
// VERWUNDBAR: Keine Sicherheitsattribut-Weiterleitung
// Kann sichere von nicht-sicheren Transaktionen nicht unterscheiden
always @(*) begin
slave0_paddr = master_paddr;
slave0_pwdata = master_pwdata;
slave0_pwrite = master_pwrite;
slave0_psel = master_psel && select_slave0;
slave0_penable = master_penable;
// VERWUNDBAR: Keine Schutzsignale zum Slave!
slave1_paddr = master_paddr;
slave1_pwdata = master_pwdata;
slave1_pwrite = master_pwrite;
slave1_psel = master_psel && select_slave1;
slave1_penable = master_penable;
end
endmodule
Sichere Lösung
// SICHER: APB-Verbindung mit Sicherheitssignalen
module secure_apb_interconnect (
input wire clk,
input wire rst_n,
input wire [31:0] master_paddr,
input wire [31:0] master_pwdata,
input wire master_pwrite,
input wire master_psel,
input wire master_penable,
input wire [2:0] master_pprot, // SICHER: Schutzsignale
output reg [31:0] slave0_paddr,
output reg [31:0] slave0_pwdata,
output reg slave0_pwrite,
output reg slave0_psel,
output reg slave0_penable,
output reg [2:0] slave0_pprot, // SICHER: Schutz weiterleiten
output reg [31:0] slave1_paddr,
output reg [31:0] slave1_pwdata,
output reg slave1_pwrite,
output reg slave1_psel,
output reg slave1_penable,
output reg [2:0] slave1_pprot,
output reg access_denied
);
wire select_slave0 = (master_paddr[31:16] == 16'h4000);
wire select_slave1 = (master_paddr[31:16] == 16'h4001);
// SICHER: Zugangskontrolle für sicheren Slave
wire slave0_access_ok = (master_pprot[0] == 1'b1) && // Privilegiert
(master_pprot[1] == 1'b0); // Sicher
always @(*) begin
access_denied = 1'b0;
slave0_paddr = master_paddr;
slave0_pwdata = master_pwdata;
slave0_pwrite = master_pwrite;
slave0_pprot = master_pprot;
if (select_slave0) begin
if (slave0_access_ok) begin
slave0_psel = master_psel;
slave0_penable = master_penable;
end else begin
// SICHER: Nicht-sicheren oder nicht-privilegierten Zugriff blockieren
slave0_psel = 1'b0;
slave0_penable = 1'b0;
access_denied = 1'b1;
end
end else begin
slave0_psel = 1'b0;
slave0_penable = 1'b0;
end
slave1_paddr = master_paddr;
slave1_pwdata = master_pwdata;
slave1_pwrite = master_pwrite;
slave1_psel = master_psel && select_slave1;
slave1_penable = master_penable;
slave1_pprot = master_pprot;
end
endmodule
CVE-Beispiele
- CVE-2020-8705: Plattform-Fabric in Intel-Prozessoren hatte keine ordnungsgemäße Sicherheitssignal-Verbreitung.
- CVE-2019-0090: Intel CSME verwendete Busse ohne angemessene Sicherheitsfunktions-Unterstützung.
Verwandte CWEs
- CWE-693: Protection Mechanism Failure (Eltern)
- CWE-1198: Privilege Separation and Access Control Issues (Kategorie)
- CWE-1311: Improper Translation of Security Attributes by Fabric Bridge (verwandt)
- CWE-1317: Improper Access Control in Fabric Bridge (verwandt)
Referenzen
- MITRE Corporation. "CWE-1318: Missing Support for Security Features in On-chip Fabrics or Buses." https://cwe.mitre.org/data/definitions/1318.html
- ARM. "AMBA APB Protocol Specification"
- OCP-IP. "Open Core Protocol Specification"
- ARM. "AMBA AXI and ACE Protocol Specification"