diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html index 4960e6e..05f37f9 100644 --- a/404.html +++ b/404.html @@ -1 +1 @@ - 404: Page not found | MITRE EMB3D™
404: Page not found

Device Properties:

© - The MITRE Corporation. All Rights Reserved.
Privacy Policy | MITRE


MITRE is a registered trademark of The MITRE Corporation.
Material on this site may be copied and distributed with permission only.
Approved for public release; Distribution unlimited. Public release case number: 24-1429.

Using the Chirpy theme for Jekyll.

Cookie Preferences
+ 404: Page not found | MITRE EMB3D™
404: Page not found

Device Properties:

diff --git a/_data/mitigations_threat_mappings.json b/_data/mitigations_threat_mappings.json new file mode 100644 index 0000000..bd14395 --- /dev/null +++ b/_data/mitigations_threat_mappings.json @@ -0,0 +1,1440 @@ +{ + "mitigations": [ + { + "id": "MID-001", + "name": "Software Only Bootloader Authentication", + "text": "Software Only Bootloader Authentication", + "level": "foundational", + "threats": [ + { + "id": "TID-201", + "text": "Inadequate Bootloader Protection and Verification" + }, + { + "id": "TID-203", + "text": "Malicious OS Kernel Driver/Module Installable" + }, + { + "id": "TID-211", + "text": "Device Allows Unauthenticated Firmware Installation" + }, + { + "id": "TID-213", + "text": "Faulty FW/SW Update Integrity Verification" + }, + { + "id": "TID-218", + "text": "Operating System Susceptible to Rootkit" + }, + { + "id": "TID-301", + "text": "Applications Binaries Modified" + } + ] + }, + { + "id": "MID-002", + "name": "Hardware-backed Bootloader Authentication", + "text": "Hardware-backed Bootloader Authentication", + "level": "intermediate", + "threats": [ + { + "id": "TID-201", + "text": "Inadequate Bootloader Protection and Verification" + }, + { + "id": "TID-203", + "text": "Malicious OS Kernel Driver/Module Installable" + }, + { + "id": "TID-211", + "text": "Device Allows Unauthenticated Firmware Installation" + }, + { + "id": "TID-213", + "text": "Faulty FW/SW Update Integrity Verification" + }, + { + "id": "TID-218", + "text": "Operating System Susceptible to Rootkit" + }, + { + "id": "TID-301", + "text": "Applications Binaries Modified" + } + ] + }, + { + "id": "MID-003", + "name": "Periodic/Continuous Integrity Measurement and Remote Attestation", + "text": "Periodic/Continuous Integrity Measurement and Remote Attestation", + "level": "leading", + "threats": [ + { + "id": "TID-201", + "text": "Inadequate Bootloader Protection and Verification" + }, + { + "id": "TID-203", + "text": "Malicious OS Kernel Driver/Module Installable" + }, + { + "id": "TID-213", + "text": "Faulty FW/SW Update Integrity Verification" + }, + { + "id": "TID-218", + "text": "Operating System Susceptible to Rootkit" + }, + { + "id": "TID-301", + "text": "Applications Binaries Modified" + }, + { + "id": "TID-302", + "text": "Install Untrusted Application" + } + ] + }, + { + "id": "MID-004", + "name": "Memory Hardening Against Code Injection", + "text": "Memory Hardening Against Code Injection", + "level": "foundational", + "threats": [ + { + "id": "TID-202", + "text": "Exploitable System Network Stack Component" + }, + { + "id": "TID-206", + "text": "Memory Management Protections Subverted" + }, + { + "id": "TID-219", + "text": "OS/Kernel Privilege Escalation" + }, + { + "id": "TID-327", + "text": "Out of Bounds Memory Access" + } + ] + }, + { + "id": "MID-005", + "name": "Memory Safe Programming Languages", + "text": "Memory Safe Programming Languages", + "level": "intermediate", + "threats": [ + { + "id": "TID-202", + "text": "Exploitable System Network Stack Component" + }, + { + "id": "TID-206", + "text": "Memory Management Protections Subverted" + }, + { + "id": "TID-219", + "text": "OS/Kernel Privilege Escalation" + }, + { + "id": "TID-327", + "text": "Out of Bounds Memory Access" + } + ] + }, + { + "id": "MID-006", + "name": "Driver Memory Isolation", + "text": "Driver Memory Isolation", + "level": "leading", + "threats": [ + { + "id": "TID-202", + "text": "Exploitable System Network Stack Component" + }, + { + "id": "TID-327", + "text": "Out of Bounds Memory Access" + } + ] + }, + { + "id": "MID-007", + "name": "Control Flow Manipulation Protections", + "text": "Control Flow Manipulation Protections", + "level": "intermediate", + "threats": [ + { + "id": "TID-202", + "text": "Exploitable System Network Stack Component" + }, + { + "id": "TID-206", + "text": "Memory Management Protections Subverted" + } + ] + }, + { + "id": "MID-008", + "name": "Decidable Protocols and Parsers", + "text": "Decidable Protocols and Parsers", + "level": "intermediate", + "threats": [ + { + "id": "TID-202", + "text": "Exploitable System Network Stack Component" + }, + { + "id": "TID-309", + "text": "Device Exploits Engineering Workstation" + }, + { + "id": "TID-404", + "text": "Remotely Triggerable Deadlock/DoS" + }, + { + "id": "TID-405", + "text": "Network Stack Resource Exhaustion" + } + ] + }, + { + "id": "MID-009", + "name": "Operating System-based Runtime Integrity Check", + "text": "Operating System-based Runtime Integrity Check", + "level": "intermediate", + "threats": [ + { + "id": "TID-203", + "text": "Malicious OS Kernel Driver/Module Installable" + }, + { + "id": "TID-218", + "text": "Operating System Susceptible to Rootkit" + }, + { + "id": "TID-301", + "text": "Applications Binaries Modified" + }, + { + "id": "TID-302", + "text": "Install Untrusted Application" + }, + { + "id": "TID-304", + "text": "Manipulate Runtime Environment" + } + ] + }, + { + "id": "MID-010", + "name": "No Runtime OS Driver Load", + "text": "No Runtime OS Driver Load", + "level": "foundational", + "threats": [ + { + "id": "TID-203", + "text": "Malicious OS Kernel Driver/Module Installable" + } + ] + }, + { + "id": "MID-011", + "name": "OS Driver/Peripheral Authentication", + "text": "OS Driver/Peripheral Authentication", + "level": "foundational", + "threats": [ + { + "id": "TID-203", + "text": "Malicious OS Kernel Driver/Module Installable" + }, + { + "id": "TID-113", + "text": "Unverified Peripheral Firmware Loaded" + } + ] + }, + { + "id": "MID-012", + "name": "OS-based Access Control Mechanisms", + "text": "OS-based Access Control Mechanisms", + "level": "foundational", + "threats": [ + { + "id": "TID-204", + "text": "Untrusted Programs Can Access Privileged OS Functions" + }, + { + "id": "TID-205", + "text": "Existing OS Tools Maliciously Used for Device Manipulation" + }, + { + "id": "TID-219", + "text": "OS/Kernel Privilege Escalation" + }, + { + "id": "TID-304", + "text": "Manipulate Runtime Environment" + }, + { + "id": "TID-305", + "text": "Program Executes Dangerous System Calls" + }, + { + "id": "TID-306", + "text": "Sandboxed Environments Escaped" + } + ] + }, + { + "id": "MID-013", + "name": "Process and Thread Memory Segmentation", + "text": "Process and Thread Memory Segmentation", + "level": "foundational", + "threats": [ + { + "id": "TID-204", + "text": "Untrusted Programs Can Access Privileged OS Functions" + }, + { + "id": "TID-304", + "text": "Manipulate Runtime Environment" + }, + { + "id": "TID-327", + "text": "Out of Bounds Memory Access" + } + ] + }, + { + "id": "MID-014", + "name": "Sandboxing", + "text": "Sandboxing", + "level": "intermediate", + "threats": [ + { + "id": "TID-103", + "text": "Cache Timing Analysis Side Channel" + }, + { + "id": "TID-110", + "text": "Hardware Fault Injection – Data Manipulation" + }, + { + "id": "TID-202", + "text": "Exploitable System Network Stack Component" + }, + { + "id": "TID-204", + "text": "Untrusted Programs Can Access Privileged OS Functions" + }, + { + "id": "TID-205", + "text": "Existing OS Tools Maliciously Used for Device Manipulation" + }, + { + "id": "TID-304", + "text": "Manipulate Runtime Environment" + }, + { + "id": "TID-305", + "text": "Program Executes Dangerous System Calls" + } + ] + }, + { + "id": "MID-015", + "name": "Containerization", + "text": "Containerization", + "level": "intermediate", + "threats": [ + { + "id": "TID-204", + "text": "Untrusted Programs Can Access Privileged OS Functions" + }, + { + "id": "TID-205", + "text": "Existing OS Tools Maliciously Used for Device Manipulation" + }, + { + "id": "TID-304", + "text": "Manipulate Runtime Environment" + }, + { + "id": "TID-305", + "text": "Program Executes Dangerous System Calls" + } + ] + }, + { + "id": "MID-016", + "name": "Least Functionality", + "text": "Least Functionality", + "level": "foundational", + "threats": [ + { + "id": "TID-205", + "text": "Existing OS Tools Maliciously Used for Device Manipulation" + } + ] + }, + { + "id": "MID-017", + "name": "Security-relevant Auditing and Logging", + "text": "Security-relevant Auditing and Logging", + "level": "foundational", + "threats": [ + { + "id": "TID-205", + "text": "Existing OS Tools Maliciously Used for Device Manipulation" + }, + { + "id": "TID-308", + "text": "Code Overwritten to Avoid Detection" + }, + { + "id": "TID-315", + "text": "Password Retrieval Mechanism Abused" + }, + { + "id": "TID-412", + "text": "Network Routing Capability Abuse" + } + ] + }, + { + "id": "MID-018", + "name": "Require Authentication for Privileged Functions", + "text": "Require Authentication for Privileged Functions", + "level": "foundational", + "threats": [ + { + "id": "TID-205", + "text": "Existing OS Tools Maliciously Used for Device Manipulation" + }, + { + "id": "TID-224", + "text": "Excessive Access via Software Diagnostic Features" + }, + { + "id": "TID-412", + "text": "Network Routing Capability Abuse" + } + ] + }, + { + "id": "MID-019", + "name": "ROP Gadget Minimization", + "text": "ROP Gadget Minimization", + "level": "intermediate", + "threats": [ + { + "id": "TID-206", + "text": "Memory Management Protections Subverted" + } + ] + }, + { + "id": "MID-020", + "name": "Pointer Authentication", + "text": "Pointer Authentication", + "level": "intermediate", + "threats": [ + { + "id": "TID-206", + "text": "Memory Management Protections Subverted" + } + ] + }, + { + "id": "MID-021", + "name": "VM Hardening", + "text": "VM Hardening", + "level": "foundational", + "threats": [ + { + "id": "TID-208", + "text": "Virtual Machine Escape" + } + ] + }, + { + "id": "MID-022", + "name": "Segmentation Through Hardware-assisted VMs", + "text": "Segmentation Through Hardware-assisted VMs", + "level": "intermediate", + "threats": [ + { + "id": "TID-207", + "text": "Container Escape" + }, + { + "id": "TID-306", + "text": "Sandboxed Environments Escaped" + } + ] + }, + { + "id": "MID-023", + "name": "Hypervisor Hardening", + "text": "Hypervisor Hardening", + "level": "intermediate", + "threats": [ + { + "id": "TID-208", + "text": "Virtual Machine Escape" + }, + { + "id": "TID-209", + "text": "Host Can Manipulate Guest Virtual Machines" + } + ] + }, + { + "id": "MID-024", + "name": "Encrypted VM Isolation", + "text": "Encrypted VM Isolation", + "level": "leading", + "threats": [ + { + "id": "TID-209", + "text": "Host Can Manipulate Guest Virtual Machines" + } + ] + }, + { + "id": "MID-025", + "name": "End-of-Life Management Features", + "text": "End-of-Life Management Features", + "level": "leading", + "threats": [ + { + "id": "TID-210", + "text": "Device Vulnerabilities Unpatchable" + } + ] + }, + { + "id": "MID-026", + "name": "Secure Firmware Update", + "text": "Secure Firmware Update", + "level": "foundational", + "threats": [ + { + "id": "TID-210", + "text": "Device Vulnerabilities Unpatchable" + }, + { + "id": "TID-211", + "text": "Device Allows Unauthenticated Firmware Installation" + }, + { + "id": "TID-212", + "text": "FW/SW Update Integrity Shared Secrets Extraction" + }, + { + "id": "TID-213", + "text": "Faulty FW/SW Update Integrity Verification" + }, + { + "id": "TID-215", + "text": "Unencrypted SW/FW Updates" + }, + { + "id": "TID-217", + "text": "Remotely Initiated Updates Can Cause DoS" + } + ] + }, + { + "id": "MID-027", + "name": "Validated Cryptographic Libraries", + "text": "Validated Cryptographic Libraries", + "level": "foundational", + "threats": [ + { + "id": "TID-101", + "text": "Power Consumption Analysis Side Channel" + }, + { + "id": "TID-102", + "text": "Electromagnetic Analysis Side Channel" + }, + { + "id": "TID-213", + "text": "Faulty FW/SW Update Integrity Verification" + }, + { + "id": "TID-316", + "text": "Incorrect Certificate Verification Allows Authentication Bypass" + }, + { + "id": "TID-318", + "text": "Insecure Cryptographic Implementation" + }, + { + "id": "TID-330", + "text": "Cryptographic Timing Side-Channel" + } + ] + }, + { + "id": "MID-028", + "name": "Hardware-backed Key Storage", + "text": "Hardware-backed Key Storage", + "level": "intermediate", + "threats": [ + { + "id": "TID-214", + "text": "Secrets Extracted from Device Root of Trust" + } + ] + }, + { + "id": "MID-029", + "name": "Hardware Root of Trust", + "text": "Hardware Root of Trust", + "level": "intermediate", + "threats": [ + { + "id": "TID-201", + "text": "Inadequate Bootloader Protection and Verification" + } + ] + }, + { + "id": "MID-030", + "name": "Firmware Rollback Protections", + "text": "Firmware Rollback Protections", + "level": "foundational", + "threats": [ + { + "id": "TID-216", + "text": "Firmware Update Rollbacks Allowed" + } + ] + }, + { + "id": "MID-031", + "name": "Physical Presence Validation", + "text": "Physical Presence Validation", + "level": "foundational", + "threats": [ + { + "id": "TID-217", + "text": "Remotely Initiated Updates Can Cause DoS" + }, + { + "id": "TID-222", + "text": "Critical System Service May Be Disabled" + }, + { + "id": "TID-302", + "text": "Install Untrusted Application" + }, + { + "id": "TID-412", + "text": "Network Routing Capability Abuse" + } + ] + }, + { + "id": "MID-032", + "name": "System Service Availability Manager", + "text": "System Service Availability Manager", + "level": "foundational", + "threats": [ + { + "id": "TID-217", + "text": "Remotely Initiated Updates Can Cause DoS" + }, + { + "id": "TID-222", + "text": "Critical System Service May Be Disabled" + }, + { + "id": "TID-404", + "text": "Remotely Triggerable Deadlock/DoS" + }, + { + "id": "TID-405", + "text": "Network Stack Resource Exhaustion" + } + ] + }, + { + "id": "MID-033", + "name": "Unique Factory Preinstalled Secret Keys", + "text": "Unique Factory Preinstalled Secret Keys", + "level": "intermediate", + "threats": [ + { + "id": "TID-212", + "text": "FW/SW Update Integrity Shared Secrets Extraction" + }, + { + "id": "TID-220", + "text": "Unpatchable Hardware Root of Trust" + }, + { + "id": "TID-317", + "text": "Predictable Cryptographic Key" + } + ] + }, + { + "id": "MID-034", + "name": "Authenticate Network Messages", + "text": "Authenticate Network Messages", + "level": "foundational", + "threats": [ + { + "id": "TID-310", + "text": "Remotely Accessible Unauthenticated Services" + }, + { + "id": "TID-406", + "text": "Unauthorized Messages or Connections" + } + ] + }, + { + "id": "MID-035", + "name": "Encrypt Network Traffic", + "text": "Encrypt Network Traffic", + "level": "foundational", + "threats": [ + { + "id": "TID-321", + "text": "HTTP Application Session Hijacking" + }, + { + "id": "TID-408", + "text": "Unencrypted Sensitive Data Communication" + } + ] + }, + { + "id": "MID-036", + "name": "Cryptographic Nonces", + "text": "Cryptographic Nonces", + "level": "foundational", + "threats": [ + { + "id": "TID-221", + "text": "Authentication Bypass By Message Replay" + }, + { + "id": "TID-407", + "text": "Missing Message Replay Protection" + } + ] + }, + { + "id": "MID-037", + "name": "Network Timestamps", + "text": "Network Timestamps", + "level": "foundational", + "threats": [ + { + "id": "TID-221", + "text": "Authentication Bypass By Message Replay" + }, + { + "id": "TID-407", + "text": "Missing Message Replay Protection" + } + ] + }, + { + "id": "MID-038", + "name": "Authenticate for Administrative Actions", + "text": "Authenticate for Administrative Actions", + "level": "foundational", + "threats": [ + { + "id": "TID-222", + "text": "Critical System Service May Be Disabled" + }, + { + "id": "TID-302", + "text": "Install Untrusted Application" + }, + { + "id": "TID-312", + "text": "Credential Change Mechanism Can Be Abused" + }, + { + "id": "TID-313", + "text": "Unauthenticated Session Changes Credential" + }, + { + "id": "TID-412", + "text": "Network Routing Capability Abuse" + } + ] + }, + { + "id": "MID-039", + "name": "Restrict Software Diagnostic Functions", + "text": "Restrict Software Diagnostic Functions", + "level": "foundational", + "threats": [ + { + "id": "TID-224", + "text": "Excessive Access via Software Diagnostic Features" + } + ] + }, + { + "id": "MID-040", + "name": "Cryptographically Signed Custom Programs", + "text": "Cryptographically Signed Custom Programs", + "level": "intermediate", + "threats": [ + { + "id": "TID-302", + "text": "Install Untrusted Application" + } + ] + }, + { + "id": "MID-041", + "name": "Cryptographically Signed Vendor-supplied Programs", + "text": "Cryptographically Signed Vendor-supplied Programs", + "level": "foundational", + "threats": [ + { + "id": "TID-302", + "text": "Install Untrusted Application" + }, + { + "id": "TID-303", + "text": "Excessive Trust in Offboard Management/IDE Software" + } + ] + }, + { + "id": "MID-042", + "name": "Device Checks Consistency Between Binary/Running Code and Textual Code", + "text": "Device Checks Consistency Between Binary/Running Code and Textual Code", + "level": "foundational", + "threats": [ + { + "id": "TID-303", + "text": "Excessive Trust in Offboard Management/IDE Software" + }, + { + "id": "TID-307", + "text": "Device Code Representations Inconsistent" + } + ] + }, + { + "id": "MID-043", + "name": "Manage Default Login Credentials", + "text": "Manage Default Login Credentials", + "level": "foundational", + "threats": [ + { + "id": "TID-311", + "text": "Default Credentials" + }, + { + "id": "TID-328", + "text": "Hardcoded Credentials" + } + ] + }, + { + "id": "MID-044", + "name": "Strong Cryptographic Algorithms and Protocols", + "text": "Strong Cryptographic Algorithms and Protocols", + "level": "foundational", + "threats": [ + { + "id": "TID-330", + "text": "Cryptographic Timing Side-Channel" + }, + { + "id": "TID-410", + "text": "Cryptographic Protocol Side Channel" + }, + { + "id": "TID-411", + "text": "Weak/Insecure Cryptographic Protocol" + } + ] + }, + { + "id": "MID-045", + "name": "Multi-factor Authentication", + "text": "Multi-factor Authentication", + "level": "intermediate", + "threats": [ + { + "id": "TID-314", + "text": "Passwords Can Be Guessed Using Brute-Force Attempts" + } + ] + }, + { + "id": "MID-046", + "name": "Authentication Attempts Timeouts and Lockouts", + "text": "Authentication Attempts Timeouts and Lockouts", + "level": "foundational", + "threats": [ + { + "id": "TID-314", + "text": "Passwords Can Be Guessed Using Brute-Force Attempts" + } + ] + }, + { + "id": "MID-047", + "name": "Sufficient Entropy for Keys", + "text": "Sufficient Entropy for Keys", + "level": "foundational", + "threats": [ + { + "id": "TID-317", + "text": "Predictable Cryptographic Key" + } + ] + }, + { + "id": "MID-048", + "name": "Hardware Random Number Generator", + "text": "Hardware Random Number Generator", + "level": "intermediate", + "threats": [ + { + "id": "TID-317", + "text": "Predictable Cryptographic Key" + } + ] + }, + { + "id": "MID-049", + "name": "Secure Password Storage", + "text": "Secure Password Storage", + "level": "foundational", + "threats": [ + { + "id": "TID-329", + "text": "Improper Password Storage" + } + ] + }, + { + "id": "MID-050", + "name": "Operating System Defenses Against Microarchitecture Feature Side Channels", + "text": "Operating System Defenses Against Microarchitecture Feature Side Channels", + "level": "foundational", + "threats": [ + { + "id": "TID-103", + "text": "Cache Timing Analysis Side Channel" + } + ] + }, + { + "id": "MID-051", + "name": "Disallow User-Provided Code", + "text": "Disallow User-Provided Code", + "level": "foundational", + "threats": [ + { + "id": "TID-103", + "text": "Cache Timing Analysis Side Channel" + }, + { + "id": "TID-110", + "text": "Hardware Fault Injection – Data Manipulation" + }, + { + "id": "TID-302", + "text": "Install Untrusted Application" + } + ] + }, + { + "id": "MID-052", + "name": "Physically Protect Circuit Board Traces and Chip Pins", + "text": "Physically Protect Circuit Board Traces and Chip Pins", + "level": "foundational", + "threats": [ + { + "id": "TID-106", + "text": "Data Bus Interception" + }, + { + "id": "TID-108", + "text": "ROM/NVRAM Data Extraction or Modification" + }, + { + "id": "TID-109", + "text": "RAM Chip Contents Readout" + }, + { + "id": "TID-114", + "text": "Peripheral Data Bus Interception" + } + ] + }, + { + "id": "MID-053", + "name": "Use IOMMU to Implement DMA Access Controls", + "text": "Use IOMMU to Implement DMA Access Controls", + "level": "intermediate", + "threats": [ + { + "id": "TID-107", + "text": "Unauthorized Direct Memory Access (DMA)" + } + ] + }, + { + "id": "MID-054", + "name": "Encrypt and Authenticate Non-volatile Storage Contents", + "text": "Encrypt and Authenticate Non-volatile Storage Contents", + "level": "foundational", + "threats": [ + { + "id": "TID-106", + "text": "Data Bus Interception" + }, + { + "id": "TID-108", + "text": "ROM/NVRAM Data Extraction or Modification" + } + ] + }, + { + "id": "MID-055", + "name": "Use Highly Integrated Processors to Avoid Physical Attacks", + "text": "Use Highly Integrated Processors to Avoid Physical Attacks", + "level": "intermediate", + "threats": [ + { + "id": "TID-109", + "text": "RAM Chip Contents Readout" + }, + { + "id": "TID-106", + "text": "Data Bus Interception" + }, + { + "id": "TID-108", + "text": "ROM/NVRAM Data Extraction or Modification" + }, + { + "id": "TID-114", + "text": "Peripheral Data Bus Interception" + } + ] + }, + { + "id": "MID-056", + "name": "Allow Device Administrators to Disable Removable Storage Support", + "text": "Allow Device Administrators to Disable Removable Storage Support", + "level": "foundational", + "threats": [ + { + "id": "TID-111", + "text": "Untrusted External Storage" + } + ] + }, + { + "id": "MID-057", + "name": "Disable Physical Development and Debugging Ports", + "text": "Disable Physical Development and Debugging Ports", + "level": "foundational", + "threats": [ + { + "id": "TID-115", + "text": "Firmware/Data Extraction via Hardware Interface" + }, + { + "id": "TID-116", + "text": "Latent Privileged Access Port" + }, + { + "id": "TID-119", + "text": "Latent Hardware Debug Port Allows Memory/Code Manipulation" + } + ] + }, + { + "id": "MID-058", + "name": "Engage Hardware Readout Protection Mechanisms", + "text": "Engage Hardware Readout Protection Mechanisms", + "level": "foundational", + "threats": [ + { + "id": "TID-115", + "text": "Firmware/Data Extraction via Hardware Interface" + }, + { + "id": "TID-119", + "text": "Latent Hardware Debug Port Allows Memory/Code Manipulation" + } + ] + }, + { + "id": "MID-059", + "name": "Software Patterns for Side Channel Resistance", + "text": "Software Patterns for Side Channel Resistance", + "level": "intermediate", + "threats": [ + { + "id": "TID-101", + "text": "Power Consumption Analysis Side Channel" + }, + { + "id": "TID-102", + "text": "Electromagnetic Analysis Side Channel" + } + ] + }, + { + "id": "MID-060", + "name": "Dedicated Hardware Cryptographic Modules", + "text": "Dedicated Hardware Cryptographic Modules", + "level": "intermediate", + "threats": [ + { + "id": "TID-101", + "text": "Power Consumption Analysis Side Channel" + }, + { + "id": "TID-102", + "text": "Electromagnetic Analysis Side Channel" + }, + { + "id": "TID-214", + "text": "Secrets Extracted from Device Root of Trust" + }, + { + "id": "TID-317", + "text": "Predictable Cryptographic Key" + }, + { + "id": "TID-318", + "text": "Insecure Cryptographic Implementation" + } + ] + }, + { + "id": "MID-061", + "name": "Use Separate Processors for Isolation", + "text": "Use Separate Processors for Isolation", + "level": "intermediate", + "threats": [ + { + "id": "TID-103", + "text": "Cache Timing Analysis Side Channel" + } + ] + }, + { + "id": "MID-062", + "name": "Hardware Mitigations for Fault Injection", + "text": "Hardware Mitigations for Fault Injection", + "level": "leading", + "threats": [ + { + "id": "TID-105", + "text": "Hardware Fault Injection – Control Flow Modification" + } + ] + }, + { + "id": "MID-063", + "name": "Software Mitigations for Fault Injection", + "text": "Software Mitigations for Fault Injection", + "level": "intermediate", + "threats": [ + { + "id": "TID-105", + "text": "Hardware Fault Injection – Control Flow Modification" + } + ] + }, + { + "id": "MID-064", + "name": "Store Critical Code and Data in On-Chip Memory", + "text": "Store Critical Code and Data in On-Chip Memory", + "level": "intermediate", + "threats": [ + { + "id": "TID-106", + "text": "Data Bus Interception" + }, + { + "id": "TID-108", + "text": "ROM/NVRAM Data Extraction or Modification" + } + ] + }, + { + "id": "MID-065", + "name": "RAM Encryption", + "text": "RAM Encryption", + "level": "intermediate", + "threats": [ + { + "id": "TID-106", + "text": "Data Bus Interception" + }, + { + "id": "TID-107", + "text": "Unauthorized Direct Memory Access (DMA)" + }, + { + "id": "TID-109", + "text": "RAM Chip Contents Readout" + }, + { + "id": "TID-110", + "text": "Hardware Fault Injection – Data Manipulation" + }, + { + "id": "TID-223", + "text": "System Susceptible to RAM Scraping" + } + ] + }, + { + "id": "MID-066", + "name": "Implement Redundant Processing and Memory", + "text": "Implement Redundant Processing and Memory", + "level": "intermediate", + "threats": [ + { + "id": "TID-105", + "text": "Hardware Fault Injection – Control Flow Modification" + }, + { + "id": "TID-110", + "text": "Hardware Fault Injection – Data Manipulation" + } + ] + }, + { + "id": "MID-067", + "name": "Implement DRAM RowHammer-resistant DRAM and Memory Controllers", + "text": "Implement DRAM RowHammer-resistant DRAM and Memory Controllers", + "level": "intermediate", + "threats": [ + { + "id": "TID-110", + "text": "Hardware Fault Injection – Data Manipulation" + } + ] + }, + { + "id": "MID-068", + "name": "Data Bus Encryption and Message Authentication", + "text": "Data Bus Encryption and Message Authentication", + "level": "intermediate", + "threats": [ + { + "id": "TID-114", + "text": "Peripheral Data Bus Interception" + } + ] + }, + { + "id": "MID-069", + "name": "Electrical Fault Protection", + "text": "Electrical Fault Protection", + "level": "intermediate", + "threats": [ + { + "id": "TID-118", + "text": "Weak Peripheral Port Electrical Damage Protection" + } + ] + }, + { + "id": "MID-070", + "name": "Peripheral Component Authentication", + "text": "Peripheral Component Authentication", + "level": "leading", + "threats": [ + { + "id": "TID-107", + "text": "Unauthorized Direct Memory Access (DMA)" + }, + { + "id": "TID-113", + "text": "Unverified Peripheral Firmware Loaded" + } + ] + }, + { + "id": "MID-071", + "name": "Sanitized and Escaped User Data for Web Applications", + "text": "Sanitized and Escaped User Data for Web Applications", + "level": "foundational", + "threats": [ + { + "id": "TID-319", + "text": "Cross Site Scripting (XSS)" + } + ] + }, + { + "id": "MID-072", + "name": "Parameterized SQL Queries", + "text": "Parameterized SQL Queries", + "level": "foundational", + "threats": [ + { + "id": "TID-320", + "text": "SQL Injection" + } + ] + }, + { + "id": "MID-073", + "name": "Secure HTTP Session Management", + "text": "Secure HTTP Session Management", + "level": "foundational", + "threats": [ + { + "id": "TID-321", + "text": "HTTP Application Session Hijacking" + } + ] + }, + { + "id": "MID-074", + "name": "Cross Site Request Forgery Mitigations", + "text": "Cross Site Request Forgery Mitigations", + "level": "foundational", + "threats": [ + { + "id": "TID-322", + "text": "Cross Site Request Forgery (CSRF)" + } + ] + }, + { + "id": "MID-075", + "name": "Path Traversal Protections", + "text": "Path Traversal Protections", + "level": "foundational", + "threats": [ + { + "id": "TID-323", + "text": "HTTP Path Traversal" + } + ] + }, + { + "id": "MID-076", + "name": "Web Direct Object Reference Authentication", + "text": "Web Direct Object Reference Authentication", + "level": "foundational", + "threats": [ + { + "id": "TID-324", + "text": "HTTP Direct Object Reference" + } + ] + }, + { + "id": "MID-077", + "name": "Secure Deserialization", + "text": "Secure Deserialization", + "level": "foundational", + "threats": [ + { + "id": "TID-326", + "text": "Insecure Deserialization" + } + ] + }, + { + "id": "MID-078", + "name": "HTTP Request/Response Validation", + "text": "HTTP Request/Response Validation", + "level": "foundational", + "threats": [ + { + "id": "TID-325", + "text": "HTTP Injection/Response Splitting" + } + ] + }, + { + "id": "MID-079", + "name": "Remove Undocumented Network Functionality", + "text": "Remove Undocumented Network Functionality", + "level": "foundational", + "threats": [ + { + "id": "TID-401", + "text": "Undocumented Protocol Features" + } + ] + }, + { + "id": "MID-080", + "name": "Network Request Processing Limits", + "text": "Network Request Processing Limits", + "level": "foundational", + "threats": [ + { + "id": "TID-405", + "text": "Network Stack Resource Exhaustion" + } + ] + }, + { + "id": "MID-081", + "name": "Secure Network Tunnels", + "text": "Secure Network Tunnels", + "level": "intermediate", + "threats": [ + { + "id": "TID-406", + "text": "Unauthorized Messages or Connections" + }, + { + "id": "TID-408", + "text": "Unencrypted Sensitive Data Communication" + } + ] + }, + { + "id": "MID-082", + "name": "Post-quantum Cryptography", + "text": "Post-quantum Cryptography", + "level": "intermediate", + "threats": [ + { + "id": "TID-411", + "text": "Weak/Insecure Cryptographic Protocol" + } + ] + }, + { + "id": "MID-083", + "name": "Network Firewall/Access Control List", + "text": "Network Firewall/Access Control List", + "level": "foundational", + "threats": [ + { + "id": "TID-412", + "text": "Network Routing Capability Abuse" + } + ] + } + ] +} \ No newline at end of file diff --git a/_data/properties_threat_mappings.json b/_data/properties_threat_mappings.json new file mode 100644 index 0000000..ecf7492 --- /dev/null +++ b/_data/properties_threat_mappings.json @@ -0,0 +1,969 @@ +{ + "properties": [ + { + "id": "PID-11", + "text": "Device includes a microprocessor", + "category": "Hardware", + "isparentProp": true, + "subProps": [], + "parentProp": "", + "threats": [ + { + "id": "TID-101", + "text": "Power Consumption Analysis Side Channel" + }, + { + "id": "TID-102", + "text": "Electromagnetic Analysis Side Channel" + }, + { + "id": "TID-103", + "text": "Cache Timing Analysis Side Channel" + }, + { + "id": "TID-105", + "text": "Hardware Fault Injection \u2013 Control Flow Modification" + } + ] + }, + { + "id": "PID-12", + "text": "Device includes Memory/Storage (external to CPU)", + "category": "Hardware", + "isparentProp": true, + "subProps": [ + "PID-121", + "PID-122", + "PID-123", + "PID-124" + ], + "parentProp": "", + "threats": [] + }, + { + "id": "PID-121", + "text": "Device includes buses for external memory/storage", + "category": "Hardware", + "isparentProp": false, + "subProps": [], + "parentProp": "PID-12", + "threats": [ + { + "id": "TID-106", + "text": "Data Bus Interception" + } + ] + }, + { + "id": "PID-122", + "text": "Device includes discrete chips/devices that have access to the same physical memory", + "category": "Hardware", + "isparentProp": false, + "subProps": [], + "parentProp": "PID-12", + "threats": [ + { + "id": "TID-107", + "text": "Unauthorized Direct Memory Access (DMA)" + } + ] + }, + { + "id": "PID-123", + "text": "Device includes ROM, VRAM, or removable Storage", + "category": "Hardware", + "isparentProp": false, + "subProps": [], + "parentProp": "PID-12", + "threats": [ + { + "id": "TID-108", + "text": "ROM/NVRAM Data Extraction or Modification" + } + ] + }, + { + "id": "PID-124", + "text": "Device includes Random Access Memory (RAM) chips", + "category": "Hardware", + "isparentProp": false, + "subProps": [ + "PID-1241" + ], + "parentProp": "PID-12", + "threats": [ + { + "id": "TID-109", + "text": "RAM Chip Contents Readout" + } + ] + }, + { + "id": "PID-1241", + "text": "Device includes DDR DRAM", + "category": "Hardware", + "isparentProp": false, + "subProps": [], + "parentProp": "PID-12", + "threats": [ + { + "id": "TID-110", + "text": "Hardware Fault Injection \u2013 Data Manipulation" + } + ] + }, + { + "id": "PID-13", + "text": "Device includes peripheral chips and integrated data buses", + "category": "Hardware", + "isparentProp": true, + "subProps": [], + "parentProp": "", + "threats": [ + { + "id": "TID-113", + "text": "Unverified Peripheral Firmware Loaded" + }, + { + "id": "TID-114", + "text": "Peripheral Data Bus Interception" + } + ] + }, + { + "id": "PID-14", + "text": "Device includes external peripheral interconnects (e.g., USB, Serial)", + "category": "Hardware", + "isparentProp": true, + "subProps": [], + "parentProp": "", + "threats": [ + { + "id": "TID-111", + "text": "Untrusted External Storage" + }, + { + "id": "TID-118", + "text": "Weak Peripheral Port Electrical Damage Protection" + } + ] + }, + { + "id": "PID-15", + "text": "Device includes a hardware access port (e.g., UART, JTAG)", + "category": "Hardware", + "isparentProp": true, + "subProps": [], + "parentProp": "", + "threats": [ + { + "id": "TID-115", + "text": "Firmware/Data Extraction via Hardware Interface" + }, + { + "id": "TID-116", + "text": "Latent Privileged Access Port" + }, + { + "id": "TID-119", + "text": "Latent Hardware Debug Port Allows Memory/Code Manipulation" + } + ] + }, + { + "id": "PID-21", + "text": "Device includes a bootloader", + "category": "System Software", + "isparentProp": true, + "subProps": [], + "parentProp": "", + "threats": [ + { + "id": "TID-201", + "text": "Inadequate Bootloader Protection and Verification" + } + ] + }, + { + "id": "PID-22", + "text": "Device includes a debugging capabilities", + "category": "System Software", + "isparentProp": true, + "subProps": [], + "parentProp": "", + "threats": [ + { + "id": "TID-224", + "text": "Excessive Access via Software Diagnostic Features" + } + ] + }, + { + "id": "PID-23", + "text": "Device includes OS/kernel", + "category": "System Software", + "isparentProp": true, + "subProps": [ + "PID-231", + "PID-232" + ], + "parentProp": "", + "threats": [ + { + "id": "TID-202", + "text": "Exploitable System Network Stack Component" + }, + { + "id": "TID-218", + "text": "Operating System Susceptible to Rootkit" + } + ] + }, + { + "id": "PID-231", + "text": "Device includes an operating system that uses drivers/modules that can be loaded", + "category": "System Software", + "isparentProp": false, + "subProps": [], + "parentProp": "PID-23", + "threats": [ + { + "id": "TID-203", + "text": "Malicious OS Kernel Driver/Module Installable" + } + ] + }, + { + "id": "PID-232", + "text": "Device includes separate users/processes with access to different OS data or functions", + "category": "System Software", + "isparentProp": false, + "subProps": [ + "PID-2321", + "PID-2322" + ], + "parentProp": "PID-23", + "threats": [] + }, + { + "id": "PID-2321", + "text": "Device lacks an access enforcement/privilege mechanism", + "category": "System Software", + "isparentProp": false, + "subProps": [], + "parentProp": "PID-23", + "threats": [ + { + "id": "TID-204", + "text": "Untrusted Programs Can Access Privileged OS Functions" + } + ] + }, + { + "id": "PID-2322", + "text": "Device deploys an access enforcement/privilege mechanism", + "category": "System Software", + "isparentProp": false, + "subProps": [ + "PID-23221", + "PID-23222" + ], + "parentProp": "PID-23", + "threats": [] + }, + { + "id": "PID-23221", + "text": "Device includes and enforces OS user accounts", + "category": "System Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-205", + "text": "Existing OS Tools Maliciously Used for Device Manipulation" + }, + { + "id": "TID-219", + "text": "OS/Kernel Privilege Escalation" + } + ], + "parentProp": "PID-23" + }, + { + "id": "PID-23222", + "text": "Device includes a memory management model, including protections of memory access (read-only/, executable, writable)", + "category": "System Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-206", + "text": "Memory Management Protections Subverted" + }, + { + "id": "TID-223", + "text": "System Susceptible to RAM Scraping" + } + ], + "parentProp": "PID-23" + }, + { + "id": "PID-24", + "text": "Device includes virtualization and containers", + "category": "System Software", + "isparentProp": true, + "subProps": [ + "PID-241", + "PID-242" + ], + "threats": [], + "parentProp": "" + }, + { + "id": "PID-241", + "text": "Device includes containers", + "category": "System Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-207", + "text": "Container Escape" + } + ], + "parentProp": "PID-24" + }, + { + "id": "PID-242", + "text": "Device includes hypervisor", + "category": "System Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-208", + "text": "Virtual Machine Escape" + }, + { + "id": "TID-209", + "text": "Host Can Manipulate Guest Virtual Machines" + } + ], + "parentProp": "PID-24" + }, + { + "id": "PID-25", + "text": "Device includes software/hardware root of trust", + "category": "System Software", + "isparentProp": true, + "subProps": [ + "PID-251", + "PID-252" + ], + "threats": [], + "parentProp": "" + }, + { + "id": "PID-251", + "text": "Root of Trust is physically accessible or is not immutable", + "category": "System Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-214", + "text": "Secrets Extracted from Device Root of Trust" + } + ], + "parentProp": "PID-25" + }, + { + "id": "PID-252", + "text": "Root of Trust is immutable", + "category": "System Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-220", + "text": "Unpatchable Hardware Root of Trust" + } + ], + "parentProp": "PID-25" + }, + { + "id": "PID-26", + "text": "Device lacks firmware/software update support", + "category": "System Software", + "isparentProp": true, + "subProps": [], + "threats": [ + { + "id": "TID-210", + "text": "Device Vulnerabilities Unpatchable" + } + ], + "parentProp": "" + }, + { + "id": "PID-27", + "text": "Device includes support for firmware/software updates", + "category": "System Software", + "isparentProp": true, + "subProps": [ + "PID-271", + "PID-272", + "PID-273", + "PID-274", + "PID-275" + ], + "threats": [], + "parentProp": "" + }, + { + "id": "PID-271", + "text": "Device has firmware or software that is not cryptographically checked for integrity validation", + "category": "System Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-211", + "text": "Device Allows Unauthenticated Firmware Installation" + } + ], + "parentProp": "PID-27" + }, + { + "id": "PID-272", + "text": "Device includes cryptographic firmware/software integrity protection mechanisms", + "category": "System Software", + "isparentProp": false, + "subProps": [ + "PID-2721", + "PID-2722" + ], + "threats": [ + { + "id": "TID-214", + "text": "Secrets Extracted from Device Root of Trust" + }, + { + "id": "TID-330", + "text": "Cryptographic Timing Side-Channel" + } + ], + "parentProp": "PID-27" + }, + { + "id": "PID-2721", + "text": "Device includes a shared key for firmware integrity validation", + "category": "System Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-212", + "text": "FW/SW Update Integrity Shared Secrets Extraction" + } + ], + "parentProp": "PID-27" + }, + { + "id": "PID-2722", + "text": "Device includes digitally signed firmware (with private key)", + "category": "System Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-213", + "text": "Faulty FW/SW Update Integrity Verification" + } + ], + "parentProp": "PID-27" + }, + { + "id": "PID-273", + "text": "Device has unencrypted firmware updates", + "category": "System Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-215", + "text": "Unencrypted SW/FW Updates" + } + ], + "parentProp": "PID-27" + }, + { + "id": "PID-274", + "text": "Device includes user firmware/software version selection during updates", + "category": "System Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-216", + "text": "Firmware Update Rollbacks Allowed" + } + ], + "parentProp": "PID-27" + }, + { + "id": "PID-275", + "text": "Device includes remotely-initiated firmware/software updates", + "category": "System Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-217", + "text": "Remotely Initiated Updates Can Cause DoS" + } + ], + "parentProp": "PID-27" + }, + { + "id": "PID-31", + "text": "Application-level software is present and running on the device", + "category": "Application Software", + "isparentProp": true, + "subProps": [ + "PID-311", + "PID-312" + ], + "threats": [ + { + "id": "TID-301", + "text": "Applications Binaries Modified" + } + ], + "parentProp": "" + }, + { + "id": "PID-311", + "text": "Device includes the usage of a web/HTTP applications", + "category": "Application Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-319", + "text": "Cross Site Scripting (XSS)" + }, + { + "id": "TID-320", + "text": "SQL Injection" + }, + { + "id": "TID-321", + "text": "HTTP Application Session Hijacking" + }, + { + "id": "TID-322", + "text": "Cross Site Request Forgery (CSRF)" + }, + { + "id": "TID-323", + "text": "HTTP Path Traversal" + }, + { + "id": "TID-324", + "text": "HTTP Direct Object Reference" + }, + { + "id": "TID-325", + "text": "HTTP Injection/Response Splitting" + } + ], + "parentProp": "PID-31" + }, + { + "id": "PID-312", + "text": "Device includes programming languages and libraries", + "category": "Application Software", + "isparentProp": false, + "subProps": [ + "PID-3121", + "PID-3122" + ], + "threats": [], + "parentProp": "PID-31" + }, + { + "id": "PID-3121", + "text": "Device includes support for object oriented programming languages(e.g., Java, Python, PHP, C++)", + "category": "Application Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-326", + "text": "Insecure Deserialization" + } + ], + "parentProp": "PID-31" + }, + { + "id": "PID-3122", + "text": "Device includes support for manual memory management programming languages (e.g. C, C++)", + "category": "Application Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-327", + "text": "Out of Bounds Memory Access" + } + ], + "parentProp": "PID-31" + }, + { + "id": "PID-32", + "text": "Device includes the ability to deploy custom or external programs (e.g., ladder logic, compiled binaries)", + "category": "Application Software", + "isparentProp": true, + "subProps": [ + "PID-321", + "PID-322", + "PID-323", + "PID-324" + ], + "threats": [ + { + "id": "TID-302", + "text": "Install Untrusted Application" + } + ], + "parentProp": "" + }, + { + "id": "PID-321", + "text": "Device includes ability to deploy custom programs from engineering software or IDE", + "category": "Application Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-303", + "text": "Excessive Trust in Offboard Management/IDE Software" + } + ], + "parentProp": "PID-32" + }, + { + "id": "PID-322", + "text": "Device includes a program runtime environment for custom or external programs", + "category": "Application Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-304", + "text": "Manipulate Runtime Environment" + } + ], + "parentProp": "PID-32" + }, + { + "id": "PID-323", + "text": "Device includes support for program executable formats", + "category": "Application Software", + "isparentProp": false, + "subProps": [ + "PID-3231", + "PID-3232" + ], + "threats": [], + "parentProp": "PID-32" + }, + { + "id": "PID-3231", + "text": "Device includes ability to run custom/external programs as native binary without a confined/restricted environment", + "category": "Application Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-305", + "text": "Program Executes Dangerous System Calls" + } + ], + "parentProp": "PID-32" + }, + { + "id": "PID-3232", + "text": "Device includes ability to run custom/external programs/processes through an execution sandboxed environment", + "category": "Application Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-306", + "text": "Sandboxed Environments Escaped" + } + ], + "parentProp": "PID-32" + }, + { + "id": "PID-324", + "text": "Device includes support for \"program uploads\" to retrieve programs from the device from an engineering workstation", + "category": "Application Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-307", + "text": "Device Code Representations Inconsistent" + }, + { + "id": "TID-308", + "text": "Code Overwritten to Avoid Detection" + }, + { + "id": "TID-309", + "text": "Device Exploits Engineering Workstation" + } + ], + "parentProp": "PID-32" + }, + { + "id": "PID-33", + "text": "Device includes interactive services (e.g., Telnet, SSH)", + "category": "Application Software", + "isparentProp": true, + "subProps": [ + "PID-331", + "PID-332" + ], + "threats": [], + "parentProp": "" + }, + { + "id": "PID-331", + "text": "Device includes unauthenticated services", + "category": "Application Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-310", + "text": "Remotely Accessible Unauthenticated Services" + } + ], + "parentProp": "PID-33" + }, + { + "id": "PID-332", + "text": "Device includes authenticated services", + "category": "Application Software", + "isparentProp": false, + "subProps": [ + "PID-3321", + "PID-3322" + ], + "threats": [ + { + "id": "TID-311", + "text": "Default Credentials" + }, + { + "id": "TID-312", + "text": "Credential Change Mechanism Can Be Abused" + }, + { + "id": "TID-313", + "text": "Unauthenticated Session Changes Credential" + }, + { + "id": "TID-328", + "text": "Hardcoded Credentials" + } + ], + "parentProp": "PID-33" + }, + { + "id": "PID-3321", + "text": "Device includes passwords to authenticate the users", + "category": "Application Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-314", + "text": "Passwords Can Be Guessed Using Brute-Force Attempts" + }, + { + "id": "TID-315", + "text": "Password Retrieval Mechanism Abused" + }, + { + "id": "TID-329", + "text": "Improper Password Storage" + } + ], + "parentProp": "PID-33" + }, + { + "id": "PID-3322", + "text": "Device includes cryptographic mechanism to authenticate users and sessions", + "category": "Application Software", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-316", + "text": "Incorrect Certificate Verification Allows Authentication Bypass" + }, + { + "id": "TID-317", + "text": "Predictable Cryptographic Key" + }, + { + "id": "TID-318", + "text": "Insecure Cryptographic Implementation" + }, + { + "id": "TID-330", + "text": "Cryptographic Timing Side-Channel" + }, + { + "id": "TID-411", + "text": "Weak/Insecure Cryptographic Protocol" + } + ], + "parentProp": "PID-33" + }, + { + "id": "PID-41", + "text": "Device exposes remote network services", + "category": "Networking", + "isparentProp": true, + "subProps": [ + "PID-411" + ], + "threats": [ + { + "id": "TID-222", + "text": "Critical System Service May Be Disabled" + }, + { + "id": "TID-310", + "text": "Remotely Accessible Unauthenticated Services" + }, + { + "id": "TID-401", + "text": "Undocumented Protocol Features" + }, + { + "id": "TID-404", + "text": "Remotely Triggerable Deadlock/DoS" + }, + { + "id": "TID-405", + "text": "Network Stack Resource Exhaustion" + }, + { + "id": "TID-407", + "text": "Missing Message Replay Protection" + } + ], + "parentProp": "" + }, + { + "id": "PID-411", + "text": "Device exposes remote services with the ability to send, receive, view or modify sensitive information or configurations", + "category": "Networking", + "isparentProp": false, + "subProps": [ + "PID-4111", + "PID-4112", + "PID-4113" + ], + "threats": [], + "parentProp": "PID-41" + }, + { + "id": "PID-4111", + "text": "Device lacks protocol support for message authentication", + "category": "Networking", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-406", + "text": "Unauthorized Messages or Connections" + } + ], + "parentProp": "PID-41" + }, + { + "id": "PID-4112", + "text": "Device lacks protocol support for message encryption", + "category": "Networking", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-408", + "text": "Unencrypted Sensitive Data Communication" + } + ], + "parentProp": "PID-41" + }, + { + "id": "PID-4113", + "text": "Device includes cryptographic functions for sensitive data, such as encryption or authentication", + "category": "Networking", + "isparentProp": false, + "subProps": [], + "threats": [ + { + "id": "TID-221", + "text": "Authentication Bypass By Message Replay" + }, + { + "id": "TID-316", + "text": "Incorrect Certificate Verification Allows Authentication Bypass" + }, + { + "id": "TID-317", + "text": "Predictable Cryptographic Key" + }, + { + "id": "TID-318", + "text": "Insecure Cryptographic Implementation" + }, + { + "id": "TID-330", + "text": "Cryptographic Timing Side-Channel" + }, + { + "id": "TID-410", + "text": "Cryptographic Protocol Side Channel" + }, + { + "id": "TID-411", + "text": "Weak/Insecure Cryptographic Protocol" + } + ], + "parentProp": "PID-41" + }, + { + "id": "PID-42", + "text": "Device includes procedure to forward or route network messages", + "category": "Networking", + "isparentProp": true, + "subProps": [], + "threats": [ + { + "id": "TID-412", + "text": "Network Routing Capability Abuse" + } + ], + "parentProp": "" + } + ] +} \ No newline at end of file diff --git a/_data/threats.json b/_data/threats.json new file mode 100644 index 0000000..7ce8307 --- /dev/null +++ b/_data/threats.json @@ -0,0 +1,1555 @@ +{ + "threats": [ + { + "id": "TID-101", + "text": "Power Consumption Analysis Side Channel", + "category": "Hardware", + "properties": [ + { + "id": "PID-11" + } + ], + "mitigations": [ + { + "id": "MID-027" + }, + { + "id": "MID-059" + }, + { + "id": "MID-060" + } + ] + }, + { + "id": "TID-102", + "text": "Electromagnetic Analysis Side Channel", + "category": "Hardware", + "properties": [ + { + "id": "PID-11" + } + ], + "mitigations": [ + { + "id": "MID-027" + }, + { + "id": "MID-059" + }, + { + "id": "MID-060" + } + ] + }, + { + "id": "TID-103", + "text": "Cache Timing Analysis Side Channel", + "category": "Hardware", + "properties": [ + { + "id": "PID-11" + } + ], + "mitigations": [ + { + "id": "MID-014" + }, + { + "id": "MID-050" + }, + { + "id": "MID-051" + }, + { + "id": "MID-061" + } + ] + }, + { + "id": "TID-105", + "text": "Hardware Fault Injection – Control Flow Modification", + "category": "Hardware", + "properties": [ + { + "id": "PID-11" + } + ], + "mitigations": [ + { + "id": "MID-062" + }, + { + "id": "MID-063" + }, + { + "id": "MID-066" + } + ] + }, + { + "id": "TID-106", + "text": "Data Bus Interception", + "category": "Hardware", + "properties": [ + { + "id": "PID-121" + } + ], + "mitigations": [ + { + "id": "MID-052" + }, + { + "id": "MID-054" + }, + { + "id": "MID-055" + }, + { + "id": "MID-064" + }, + { + "id": "MID-065" + } + ] + }, + { + "id": "TID-107", + "text": "Unauthorized Direct Memory Access (DMA)", + "category": "Hardware", + "properties": [ + { + "id": "PID-122" + } + ], + "mitigations": [ + { + "id": "MID-053" + }, + { + "id": "MID-065" + }, + { + "id": "MID-070" + } + ] + }, + { + "id": "TID-108", + "text": "ROM/NVRAM Data Extraction or Modification", + "category": "Hardware", + "properties": [ + { + "id": "PID-123" + } + ], + "mitigations": [ + { + "id": "MID-052" + }, + { + "id": "MID-054" + }, + { + "id": "MID-055" + }, + { + "id": "MID-064" + } + ] + }, + { + "id": "TID-109", + "text": "RAM Chip Contents Readout", + "category": "Hardware", + "properties": [ + { + "id": "PID-124" + } + ], + "mitigations": [ + { + "id": "MID-052" + }, + { + "id": "MID-055" + }, + { + "id": "MID-065" + } + ] + }, + { + "id": "TID-110", + "text": "Hardware Fault Injection – Data Manipulation", + "category": "Hardware", + "properties": [ + { + "id": "PID-1241" + } + ], + "mitigations": [ + { + "id": "MID-014" + }, + { + "id": "MID-051" + }, + { + "id": "MID-065" + }, + { + "id": "MID-066" + }, + { + "id": "MID-067" + } + ] + }, + { + "id": "TID-111", + "text": "Untrusted External Storage", + "category": "Hardware", + "properties": [ + { + "id": "PID-14" + } + ], + "mitigations": [ + { + "id": "MID-056" + } + ] + }, + { + "id": "TID-113", + "text": "Unverified Peripheral Firmware Loaded", + "category": "Hardware", + "properties": [ + { + "id": "PID-13" + } + ], + "mitigations": [ + { + "id": "MID-011" + }, + { + "id": "MID-070" + } + ] + }, + { + "id": "TID-114", + "text": "Peripheral Data Bus Interception", + "category": "Hardware", + "properties": [ + { + "id": "PID-13" + } + ], + "mitigations": [ + { + "id": "MID-052" + }, + { + "id": "MID-055" + }, + { + "id": "MID-068" + } + ] + }, + { + "id": "TID-115", + "text": "Firmware/Data Extraction via Hardware Interface", + "category": "Hardware", + "properties": [ + { + "id": "PID-15" + } + ], + "mitigations": [ + { + "id": "MID-057" + }, + { + "id": "MID-058" + } + ] + }, + { + "id": "TID-116", + "text": "Latent Privileged Access Port", + "category": "Hardware", + "properties": [ + { + "id": "PID-15" + } + ], + "mitigations": [ + { + "id": "MID-057" + } + ] + }, + { + "id": "TID-118", + "text": "Weak Peripheral Port Electrical Damage Protection", + "category": "Hardware", + "properties": [ + { + "id": "PID-14" + } + ], + "mitigations": [ + { + "id": "MID-069" + } + ] + }, + { + "id": "TID-119", + "text": "Latent Hardware Debug Port Allows Memory/Code Manipulation", + "category": "Hardware", + "properties": [ + { + "id": "PID-15" + } + ], + "mitigations": [ + { + "id": "MID-057" + }, + { + "id": "MID-058" + } + ] + }, + { + "id": "TID-201", + "text": "Inadequate Bootloader Protection and Verification", + "category": "System Software", + "properties": [ + { + "id": "PID-21" + } + ], + "mitigations": [ + { + "id": "MID-001" + }, + { + "id": "MID-002" + }, + { + "id": "MID-003" + }, + { + "id": "MID-029" + } + ] + }, + { + "id": "TID-202", + "text": "Exploitable System Network Stack Component", + "category": "System Software", + "properties": [ + { + "id": "PID-23" + } + ], + "mitigations": [ + { + "id": "MID-004" + }, + { + "id": "MID-005" + }, + { + "id": "MID-006" + }, + { + "id": "MID-007" + }, + { + "id": "MID-008" + }, + { + "id": "MID-014" + } + ] + }, + { + "id": "TID-203", + "text": "Malicious OS Kernel Driver/Module Installable", + "category": "System Software", + "properties": [ + { + "id": "PID-231" + } + ], + "mitigations": [ + { + "id": "MID-001" + }, + { + "id": "MID-002" + }, + { + "id": "MID-003" + }, + { + "id": "MID-009" + }, + { + "id": "MID-010" + }, + { + "id": "MID-011" + } + ] + }, + { + "id": "TID-204", + "text": "Untrusted Programs Can Access Privileged OS Functions", + "category": "System Software", + "properties": [ + { + "id": "PID-2321" + } + ], + "mitigations": [ + { + "id": "MID-012" + }, + { + "id": "MID-013" + }, + { + "id": "MID-014" + }, + { + "id": "MID-015" + } + ] + }, + { + "id": "TID-205", + "text": "Existing OS Tools Maliciously Used for Device Manipulation", + "category": "System Software", + "properties": [ + { + "id": "PID-23221" + } + ], + "mitigations": [ + { + "id": "MID-012" + }, + { + "id": "MID-014" + }, + { + "id": "MID-015" + }, + { + "id": "MID-016" + }, + { + "id": "MID-017" + }, + { + "id": "MID-018" + } + ] + }, + { + "id": "TID-206", + "text": "Memory Management Protections Subverted", + "category": "System Software", + "properties": [ + { + "id": "PID-23222" + } + ], + "mitigations": [ + { + "id": "MID-004" + }, + { + "id": "MID-005" + }, + { + "id": "MID-007" + }, + { + "id": "MID-019" + }, + { + "id": "MID-020" + } + ] + }, + { + "id": "TID-207", + "text": "Container Escape", + "category": "System Software", + "properties": [ + { + "id": "PID-241" + } + ], + "mitigations": [ + { + "id": "MID-022" + } + ] + }, + { + "id": "TID-208", + "text": "Virtual Machine Escape", + "category": "System Software", + "properties": [ + { + "id": "PID-242" + } + ], + "mitigations": [ + { + "id": "MID-021" + }, + { + "id": "MID-023" + } + ] + }, + { + "id": "TID-209", + "text": "Host Can Manipulate Guest Virtual Machines", + "category": "System Software", + "properties": [ + { + "id": "PID-242" + } + ], + "mitigations": [ + { + "id": "MID-023" + }, + { + "id": "MID-024" + } + ] + }, + { + "id": "TID-210", + "text": "Device Vulnerabilities Unpatchable", + "category": "System Software", + "properties": [ + { + "id": "PID-26" + } + ], + "mitigations": [ + { + "id": "MID-025" + }, + { + "id": "MID-026" + } + ] + }, + { + "id": "TID-211", + "text": "Device Allows Unauthenticated Firmware Installation", + "category": "System Software", + "properties": [ + { + "id": "PID-271" + } + ], + "mitigations": [ + { + "id": "MID-001" + }, + { + "id": "MID-002" + }, + { + "id": "MID-026" + } + ] + }, + { + "id": "TID-212", + "text": "FW/SW Update Integrity Shared Secrets Extraction", + "category": "System Software", + "properties": [ + { + "id": "PID-2721" + } + ], + "mitigations": [ + { + "id": "MID-026" + }, + { + "id": "MID-033" + } + ] + }, + { + "id": "TID-213", + "text": "Faulty FW/SW Update Integrity Verification", + "category": "System Software", + "properties": [ + { + "id": "PID-2722" + } + ], + "mitigations": [ + { + "id": "MID-001" + }, + { + "id": "MID-002" + }, + { + "id": "MID-003" + }, + { + "id": "MID-026" + }, + { + "id": "MID-027" + } + ] + }, + { + "id": "TID-214", + "text": "Secrets Extracted from Device Root of Trust", + "category": "System Software", + "properties": [ + { + "id": "PID-251" + }, + { + "id": "PID-272" + } + ], + "mitigations": [ + { + "id": "MID-028" + }, + { + "id": "MID-060" + } + ] + }, + { + "id": "TID-215", + "text": "Unencrypted SW/FW Updates", + "category": "System Software", + "properties": [ + { + "id": "PID-273" + } + ], + "mitigations": [ + { + "id": "MID-026" + } + ] + }, + { + "id": "TID-216", + "text": "Firmware Update Rollbacks Allowed", + "category": "System Software", + "properties": [ + { + "id": "PID-274" + } + ], + "mitigations": [ + { + "id": "MID-030" + } + ] + }, + { + "id": "TID-217", + "text": "Remotely Initiated Updates Can Cause DoS", + "category": "System Software", + "properties": [ + { + "id": "PID-275" + } + ], + "mitigations": [ + { + "id": "MID-026" + }, + { + "id": "MID-031" + }, + { + "id": "MID-032" + } + ] + }, + { + "id": "TID-218", + "text": "Operating System Susceptible to Rootkit", + "category": "System Software", + "properties": [ + { + "id": "PID-23" + } + ], + "mitigations": [ + { + "id": "MID-001" + }, + { + "id": "MID-002" + }, + { + "id": "MID-003" + }, + { + "id": "MID-009" + } + ] + }, + { + "id": "TID-219", + "text": "OS/Kernel Privilege Escalation", + "category": "System Software", + "properties": [ + { + "id": "PID-23221" + } + ], + "mitigations": [ + { + "id": "MID-004" + }, + { + "id": "MID-005" + }, + { + "id": "MID-012" + } + ] + }, + { + "id": "TID-220", + "text": "Unpatchable Hardware Root of Trust", + "category": "System Software", + "properties": [ + { + "id": "PID-252" + } + ], + "mitigations": [ + { + "id": "MID-033" + } + ] + }, + { + "id": "TID-221", + "text": "Authentication Bypass By Message Replay", + "category": "System Software", + "properties": [ + { + "id": "PID-4113" + } + ], + "mitigations": [ + { + "id": "MID-036" + }, + { + "id": "MID-037" + } + ] + }, + { + "id": "TID-222", + "text": "Critical System Service May Be Disabled", + "category": "System Software", + "properties": [ + { + "id": "PID-41" + } + ], + "mitigations": [ + { + "id": "MID-031" + }, + { + "id": "MID-032" + }, + { + "id": "MID-038" + } + ] + }, + { + "id": "TID-223", + "text": "System Susceptible to RAM Scraping", + "category": "System Software", + "properties": [ + { + "id": "PID-23222" + } + ], + "mitigations": [ + { + "id": "MID-065" + } + ] + }, + { + "id": "TID-224", + "text": "Excessive Access via Software Diagnostic Features", + "category": "System Software", + "properties": [ + { + "id": "PID-22" + } + ], + "mitigations": [ + { + "id": "MID-018" + }, + { + "id": "MID-039" + } + ] + }, + { + "id": "TID-301", + "text": "Applications Binaries Modified", + "category": "Application Software", + "properties": [ + { + "id": "PID-31" + } + ], + "mitigations": [ + { + "id": "MID-001" + }, + { + "id": "MID-002" + }, + { + "id": "MID-003" + }, + { + "id": "MID-009" + } + ] + }, + { + "id": "TID-302", + "text": "Install Untrusted Application", + "category": "Application Software", + "properties": [ + { + "id": "PID-32" + } + ], + "mitigations": [ + { + "id": "MID-003" + }, + { + "id": "MID-009" + }, + { + "id": "MID-031" + }, + { + "id": "MID-038" + }, + { + "id": "MID-040" + }, + { + "id": "MID-041" + }, + { + "id": "MID-051" + } + ] + }, + { + "id": "TID-303", + "text": "Excessive Trust in Offboard Management/IDE Software", + "category": "Application Software", + "properties": [ + { + "id": "PID-321" + } + ], + "mitigations": [ + { + "id": "MID-041" + }, + { + "id": "MID-042" + } + ] + }, + { + "id": "TID-304", + "text": "Manipulate Runtime Environment", + "category": "Application Software", + "properties": [ + { + "id": "PID-322" + } + ], + "mitigations": [ + { + "id": "MID-009" + }, + { + "id": "MID-012" + }, + { + "id": "MID-013" + }, + { + "id": "MID-014" + }, + { + "id": "MID-015" + } + ] + }, + { + "id": "TID-305", + "text": "Program Executes Dangerous System Calls", + "category": "Application Software", + "properties": [ + { + "id": "PID-3231" + } + ], + "mitigations": [ + { + "id": "MID-012" + }, + { + "id": "MID-014" + }, + { + "id": "MID-015" + } + ] + }, + { + "id": "TID-306", + "text": "Sandboxed Environments Escaped", + "category": "Application Software", + "properties": [ + { + "id": "PID-3232" + } + ], + "mitigations": [ + { + "id": "MID-012" + }, + { + "id": "MID-022" + } + ] + }, + { + "id": "TID-307", + "text": "Device Code Representations Inconsistent", + "category": "Application Software", + "properties": [ + { + "id": "PID-324" + } + ], + "mitigations": [ + { + "id": "MID-042" + } + ] + }, + { + "id": "TID-308", + "text": "Code Overwritten to Avoid Detection", + "category": "Application Software", + "properties": [ + { + "id": "PID-324" + } + ], + "mitigations": [ + { + "id": "MID-017" + } + ] + }, + { + "id": "TID-309", + "text": "Device Exploits Engineering Workstation", + "category": "Application Software", + "properties": [ + { + "id": "PID-324" + } + ], + "mitigations": [ + { + "id": "MID-008" + } + ] + }, + { + "id": "TID-310", + "text": "Remotely Accessible Unauthenticated Services", + "category": "Application Software", + "properties": [ + { + "id": "PID-331" + }, + { + "id": "PID-41" + } + ], + "mitigations": [ + { + "id": "MID-034" + } + ] + }, + { + "id": "TID-311", + "text": "Default Credentials", + "category": "Application Software", + "properties": [ + { + "id": "PID-332" + } + ], + "mitigations": [ + { + "id": "MID-043" + } + ] + }, + { + "id": "TID-312", + "text": "Credential Change Mechanism Can Be Abused", + "category": "Application Software", + "properties": [ + { + "id": "PID-332" + } + ], + "mitigations": [ + { + "id": "MID-038" + } + ] + }, + { + "id": "TID-313", + "text": "Unauthenticated Session Changes Credential", + "category": "Application Software", + "properties": [ + { + "id": "PID-332" + } + ], + "mitigations": [ + { + "id": "MID-038" + } + ] + }, + { + "id": "TID-314", + "text": "Passwords Can Be Guessed Using Brute-Force Attempts", + "category": "Application Software", + "properties": [ + { + "id": "PID-3321" + } + ], + "mitigations": [ + { + "id": "MID-045" + }, + { + "id": "MID-046" + } + ] + }, + { + "id": "TID-315", + "text": "Password Retrieval Mechanism Abused", + "category": "Application Software", + "properties": [ + { + "id": "PID-3321" + } + ], + "mitigations": [ + { + "id": "MID-017" + } + ] + }, + { + "id": "TID-316", + "text": "Incorrect Certificate Verification Allows Authentication Bypass", + "category": "Application Software", + "properties": [ + { + "id": "PID-3322" + }, + { + "id": "PID-4113" + } + ], + "mitigations": [ + { + "id": "MID-027" + } + ] + }, + { + "id": "TID-317", + "text": "Predictable Cryptographic Key", + "category": "Application Software", + "properties": [ + { + "id": "PID-3322" + }, + { + "id": "PID-4113" + } + ], + "mitigations": [ + { + "id": "MID-033" + }, + { + "id": "MID-047" + }, + { + "id": "MID-048" + }, + { + "id": "MID-060" + } + ] + }, + { + "id": "TID-318", + "text": "Insecure Cryptographic Implementation", + "category": "Application Software", + "properties": [ + { + "id": "PID-3322" + }, + { + "id": "PID-4113" + } + ], + "mitigations": [ + { + "id": "MID-027" + }, + { + "id": "MID-060" + } + ] + }, + { + "id": "TID-319", + "text": "Cross Site Scripting (XSS)", + "category": "Application Software", + "properties": [ + { + "id": "PID-311" + } + ], + "mitigations": [ + { + "id": "MID-071" + } + ] + }, + { + "id": "TID-320", + "text": "SQL Injection", + "category": "Application Software", + "properties": [ + { + "id": "PID-311" + } + ], + "mitigations": [ + { + "id": "MID-072" + } + ] + }, + { + "id": "TID-321", + "text": "HTTP Application Session Hijacking", + "category": "Application Software", + "properties": [ + { + "id": "PID-311" + } + ], + "mitigations": [ + { + "id": "MID-035" + }, + { + "id": "MID-073" + } + ] + }, + { + "id": "TID-322", + "text": "Cross Site Request Forgery (CSRF)", + "category": "Application Software", + "properties": [ + { + "id": "PID-311" + } + ], + "mitigations": [ + { + "id": "MID-074" + } + ] + }, + { + "id": "TID-323", + "text": "HTTP Path Traversal", + "category": "Application Software", + "properties": [ + { + "id": "PID-311" + } + ], + "mitigations": [ + { + "id": "MID-075" + } + ] + }, + { + "id": "TID-324", + "text": "HTTP Direct Object Reference", + "category": "Application Software", + "properties": [ + { + "id": "PID-311" + } + ], + "mitigations": [ + { + "id": "MID-076" + } + ] + }, + { + "id": "TID-325", + "text": "HTTP Injection/Response Splitting", + "category": "Application Software", + "properties": [ + { + "id": "PID-311" + } + ], + "mitigations": [ + { + "id": "MID-078" + } + ] + }, + { + "id": "TID-326", + "text": "Insecure Deserialization", + "category": "Application Software", + "properties": [ + { + "id": "PID-3121" + } + ], + "mitigations": [ + { + "id": "MID-077" + } + ] + }, + { + "id": "TID-327", + "text": "Out of Bounds Memory Access", + "category": "Application Software", + "properties": [ + { + "id": "PID-3122" + } + ], + "mitigations": [ + { + "id": "MID-004" + }, + { + "id": "MID-005" + }, + { + "id": "MID-006" + }, + { + "id": "MID-013" + } + ] + }, + { + "id": "TID-328", + "text": "Hardcoded Credentials", + "category": "Application Software", + "properties": [ + { + "id": "PID-332" + } + ], + "mitigations": [ + { + "id": "MID-043" + } + ] + }, + { + "id": "TID-329", + "text": "Improper Password Storage", + "category": "Application Software", + "properties": [ + { + "id": "PID-3321" + } + ], + "mitigations": [ + { + "id": "MID-049" + } + ] + }, + { + "id": "TID-330", + "text": "Cryptographic Timing Side-Channel", + "category": "Application Software", + "properties": [ + { + "id": "PID-272" + }, + { + "id": "PID-3322" + }, + { + "id": "PID-4113" + } + ], + "mitigations": [ + { + "id": "MID-027" + }, + { + "id": "MID-044" + } + ] + }, + { + "id": "TID-401", + "text": "Undocumented Protocol Features", + "category": "Networking", + "properties": [ + { + "id": "PID-41" + } + ], + "mitigations": [ + { + "id": "MID-079" + } + ] + }, + { + "id": "TID-404", + "text": "Remotely Triggerable Deadlock/DoS", + "category": "Networking", + "properties": [ + { + "id": "PID-41" + } + ], + "mitigations": [ + { + "id": "MID-008" + }, + { + "id": "MID-032" + } + ] + }, + { + "id": "TID-405", + "text": "Network Stack Resource Exhaustion", + "category": "Networking", + "properties": [ + { + "id": "PID-41" + } + ], + "mitigations": [ + { + "id": "MID-008" + }, + { + "id": "MID-032" + }, + { + "id": "MID-080" + } + ] + }, + { + "id": "TID-406", + "text": "Unauthorized Messages or Connections", + "category": "Networking", + "properties": [ + { + "id": "PID-4111" + } + ], + "mitigations": [ + { + "id": "MID-034" + }, + { + "id": "MID-081" + } + ] + }, + { + "id": "TID-407", + "text": "Missing Message Replay Protection", + "category": "Networking", + "properties": [ + { + "id": "PID-41" + } + ], + "mitigations": [ + { + "id": "MID-036" + }, + { + "id": "MID-037" + } + ] + }, + { + "id": "TID-408", + "text": "Unencrypted Sensitive Data Communication", + "category": "Networking", + "properties": [ + { + "id": "PID-4112" + } + ], + "mitigations": [ + { + "id": "MID-035" + }, + { + "id": "MID-081" + } + ] + }, + { + "id": "TID-410", + "text": "Cryptographic Protocol Side Channel", + "category": "Networking", + "properties": [ + { + "id": "PID-4113" + } + ], + "mitigations": [ + { + "id": "MID-044" + } + ] + }, + { + "id": "TID-411", + "text": "Weak/Insecure Cryptographic Protocol", + "category": "Networking", + "properties": [ + { + "id": "PID-4113" + }, + { + "id": "PID-3322" + } + ], + "mitigations": [ + { + "id": "MID-044" + }, + { + "id": "MID-082" + } + ] + }, + { + "id": "TID-412", + "text": "Network Routing Capability Abuse", + "category": "Networking", + "properties": [ + { + "id": "PID-42" + } + ], + "mitigations": [ + { + "id": "MID-017" + }, + { + "id": "MID-018" + }, + { + "id": "MID-031" + }, + { + "id": "MID-038" + }, + { + "id": "MID-083" + } + ] + } + ] +} \ No newline at end of file diff --git a/_data/threats_properties_mitigations_mappings.json b/_data/threats_properties_mitigations_mappings.json new file mode 100644 index 0000000..5d78f37 --- /dev/null +++ b/_data/threats_properties_mitigations_mappings.json @@ -0,0 +1,2028 @@ +{ + "threats": [ + { + "id": "TID-101", + "text": "Power Consumption Analysis Side Channel", + "category": "Hardware", + "properties": [ + { + "id": "PID-11", + "text": "Device includes a microprocessor" + } + ], + "mitigations": [ + { + "id": "MID-027", + "text": "Validated Cryptographic Libraries", + "level": "foundational" + }, + { + "id": "MID-059", + "text": "Software Patterns for Side Channel Resistance", + "level": "intermediate" + }, + { + "id": "MID-060", + "text": "Dedicated Hardware Cryptographic Modules", + "level": "intermediate" + } + ] + }, + { + "id": "TID-102", + "text": "Electromagnetic Analysis Side Channel", + "category": "Hardware", + "properties": [ + { + "id": "PID-11", + "text": "Device includes a microprocessor" + } + ], + "mitigations": [ + { + "id": "MID-027", + "text": "Validated Cryptographic Libraries", + "level": "foundational" + }, + { + "id": "MID-059", + "text": "Software Patterns for Side Channel Resistance", + "level": "intermediate" + }, + { + "id": "MID-060", + "text": "Dedicated Hardware Cryptographic Modules", + "level": "intermediate" + } + ] + }, + { + "id": "TID-103", + "text": "Cache Timing Analysis Side Channel", + "category": "Hardware", + "properties": [ + { + "id": "PID-11", + "text": "Device includes a microprocessor" + } + ], + "mitigations": [ + { + "id": "MID-014", + "text": "Sandboxing", + "level": "intermediate" + }, + { + "id": "MID-050", + "text": "Operating System Defenses Against Microarchitecture Feature Side Channels", + "level": "foundational" + }, + { + "id": "MID-051", + "text": "Disallow User-Provided Code", + "level": "foundational" + }, + { + "id": "MID-061", + "text": "Use Separate Processors for Isolation", + "level": "intermediate" + } + ] + }, + { + "id": "TID-105", + "text": "Hardware Fault Injection \u2013 Control Flow Modification", + "category": "Hardware", + "properties": [ + { + "id": "PID-11", + "text": "Device includes a microprocessor" + } + ], + "mitigations": [ + { + "id": "MID-062", + "text": "Hardware Mitigations for Fault Injection", + "level": "leading" + }, + { + "id": "MID-063", + "text": "Software Mitigations for Fault Injection", + "level": "intermediate" + }, + { + "id": "MID-066", + "text": "Implement Redundant Processing and Memory", + "level": "intermediate" + } + ] + }, + { + "id": "TID-106", + "text": "Data Bus Interception", + "category": "Hardware", + "properties": [ + { + "id": "PID-121", + "text": "Device includes buses for external memory/storage" + } + ], + "mitigations": [ + { + "id": "MID-052", + "text": "Physically Protect Circuit Board Traces and Chip Pins", + "level": "foundational" + }, + { + "id": "MID-054", + "text": "Encrypt and Authenticate Non-volatile Storage Contents", + "level": "foundational" + }, + { + "id": "MID-055", + "text": "Use Highly Integrated Processors to Avoid Physical Attacks", + "level": "intermediate" + }, + { + "id": "MID-064", + "text": "Store Critical Code and Data in On-Chip Memory", + "level": "intermediate" + }, + { + "id": "MID-065", + "text": "RAM Encryption", + "level": "intermediate" + } + ] + }, + { + "id": "TID-107", + "text": "Unauthorized Direct Memory Access (DMA)", + "category": "Hardware", + "properties": [ + { + "id": "PID-122", + "text": "Device includes discrete chips/devices that have access to the same physical memory" + } + ], + "mitigations": [ + { + "id": "MID-053", + "text": "Use IOMMU to Implement DMA Access Controls", + "level": "intermediate" + }, + { + "id": "MID-065", + "text": "RAM Encryption", + "level": "intermediate" + }, + { + "id": "MID-070", + "text": "Peripheral Component Authentication", + "level": "leading" + } + ] + }, + { + "id": "TID-108", + "text": "ROM/NVRAM Data Extraction or Modification", + "category": "Hardware", + "properties": [ + { + "id": "PID-123", + "text": "Device includes ROM, VRAM, or removable Storage" + } + ], + "mitigations": [ + { + "id": "MID-052", + "text": "Physically Protect Circuit Board Traces and Chip Pins", + "level": "foundational" + }, + { + "id": "MID-054", + "text": "Encrypt and Authenticate Non-volatile Storage Contents", + "level": "foundational" + }, + { + "id": "MID-055", + "text": "Use Highly Integrated Processors to Avoid Physical Attacks", + "level": "intermediate" + }, + { + "id": "MID-064", + "text": "Store Critical Code and Data in On-Chip Memory", + "level": "intermediate" + } + ] + }, + { + "id": "TID-109", + "text": "RAM Chip Contents Readout", + "category": "Hardware", + "properties": [ + { + "id": "PID-124", + "text": "Device includes Random Access Memory (RAM) chips" + } + ], + "mitigations": [ + { + "id": "MID-052", + "text": "Physically Protect Circuit Board Traces and Chip Pins", + "level": "foundational" + }, + { + "id": "MID-055", + "text": "Use Highly Integrated Processors to Avoid Physical Attacks", + "level": "intermediate" + }, + { + "id": "MID-065", + "text": "RAM Encryption", + "level": "intermediate" + } + ] + }, + { + "id": "TID-110", + "text": "Hardware Fault Injection \u2013 Data Manipulation", + "category": "Hardware", + "properties": [ + { + "id": "PID-1241", + "text": "Device includes DDR DRAM" + } + ], + "mitigations": [ + { + "id": "MID-014", + "text": "Sandboxing", + "level": "intermediate" + }, + { + "id": "MID-051", + "text": "Disallow User-Provided Code", + "level": "foundational" + }, + { + "id": "MID-065", + "text": "RAM Encryption", + "level": "intermediate" + }, + { + "id": "MID-066", + "text": "Implement Redundant Processing and Memory", + "level": "intermediate" + }, + { + "id": "MID-067", + "text": "Implement DRAM RowHammer-resistant DRAM and Memory Controllers", + "level": "intermediate" + } + ] + }, + { + "id": "TID-111", + "text": "Untrusted External Storage", + "category": "Hardware", + "properties": [ + { + "id": "PID-14", + "text": "Device includes external peripheral interconnects (e.g., USB, Serial)" + } + ], + "mitigations": [ + { + "id": "MID-056", + "text": "Allow Device Administrators to Disable Removable Storage Support", + "level": "foundational" + } + ] + }, + { + "id": "TID-113", + "text": "Unverified Peripheral Firmware Loaded", + "category": "Hardware", + "properties": [ + { + "id": "PID-13", + "text": "Device includes peripheral chips and integrated data buses" + } + ], + "mitigations": [ + { + "id": "MID-011", + "text": "OS Driver/Peripheral Authentication", + "level": "foundational" + }, + { + "id": "MID-070", + "text": "Peripheral Component Authentication", + "level": "leading" + } + ] + }, + { + "id": "TID-114", + "text": "Peripheral Data Bus Interception", + "category": "Hardware", + "properties": [ + { + "id": "PID-13", + "text": "Device includes peripheral chips and integrated data buses" + } + ], + "mitigations": [ + { + "id": "MID-052", + "text": "Physically Protect Circuit Board Traces and Chip Pins", + "level": "foundational" + }, + { + "id": "MID-055", + "text": "Use Highly Integrated Processors to Avoid Physical Attacks", + "level": "intermediate" + }, + { + "id": "MID-068", + "text": "Data Bus Encryption and Message Authentication", + "level": "intermediate" + } + ] + }, + { + "id": "TID-115", + "text": "Firmware/Data Extraction via Hardware Interface", + "category": "Hardware", + "properties": [ + { + "id": "PID-15", + "text": "Device includes a hardware access port (e.g., UART, JTAG)" + } + ], + "mitigations": [ + { + "id": "MID-057", + "text": "Disable Physical Development and Debugging Ports", + "level": "foundational" + }, + { + "id": "MID-058", + "text": "Engage Hardware Readout Protection Mechanisms", + "level": "foundational" + } + ] + }, + { + "id": "TID-116", + "text": "Latent Privileged Access Port", + "category": "Hardware", + "properties": [ + { + "id": "PID-15", + "text": "Device includes a hardware access port (e.g., UART, JTAG)" + } + ], + "mitigations": [ + { + "id": "MID-057", + "text": "Disable Physical Development and Debugging Ports", + "level": "foundational" + } + ] + }, + { + "id": "TID-118", + "text": "Weak Peripheral Port Electrical Damage Protection", + "category": "Hardware", + "properties": [ + { + "id": "PID-14", + "text": "Device includes external peripheral interconnects (e.g., USB, Serial)" + } + ], + "mitigations": [ + { + "id": "MID-069", + "text": "Electrical Fault Protection", + "level": "intermediate" + } + ] + }, + { + "id": "TID-119", + "text": "Latent Hardware Debug Port Allows Memory/Code Manipulation", + "category": "Hardware", + "properties": [ + { + "id": "PID-15", + "text": "Device includes a hardware access port (e.g., UART, JTAG)" + } + ], + "mitigations": [ + { + "id": "MID-057", + "text": "Disable Physical Development and Debugging Ports", + "level": "foundational" + }, + { + "id": "MID-058", + "text": "Engage Hardware Readout Protection Mechanisms", + "level": "foundational" + } + ] + }, + { + "id": "TID-201", + "text": "Inadequate Bootloader Protection and Verification", + "category": "System Software", + "properties": [ + { + "id": "PID-21", + "text": "Device includes a bootloader" + } + ], + "mitigations": [ + { + "id": "MID-001", + "text": "Software Only Bootloader Authentication", + "level": "foundational" + }, + { + "id": "MID-002", + "text": "Hardware-backed Bootloader Authentication", + "level": "intermediate" + }, + { + "id": "MID-003", + "text": "Periodic/Continuous Integrity Measurement and Remote Attestation", + "level": "leading" + }, + { + "id": "MID-029", + "text": "Hardware Root of Trust", + "level": "intermediate" + } + ] + }, + { + "id": "TID-202", + "text": "Exploitable System Network Stack Component", + "category": "System Software", + "properties": [ + { + "id": "PID-23", + "text": "Device includes OS/kernel" + } + ], + "mitigations": [ + { + "id": "MID-004", + "text": "Memory Hardening Against Code Injection", + "level": "foundational" + }, + { + "id": "MID-005", + "text": "Memory Safe Programming Languages", + "level": "intermediate" + }, + { + "id": "MID-006", + "text": "Driver Memory Isolation", + "level": "leading" + }, + { + "id": "MID-007", + "text": "Control Flow Manipulation Protections", + "level": "intermediate" + }, + { + "id": "MID-008", + "text": "Decidable Protocols and Parsers", + "level": "intermediate" + }, + { + "id": "MID-014", + "text": "Sandboxing", + "level": "intermediate" + } + ] + }, + { + "id": "TID-203", + "text": "Malicious OS Kernel Driver/Module Installable", + "category": "System Software", + "properties": [ + { + "id": "PID-231", + "text": "Device includes an operating system that uses drivers/modules that can be loaded" + } + ], + "mitigations": [ + { + "id": "MID-001", + "text": "Software Only Bootloader Authentication", + "level": "foundational" + }, + { + "id": "MID-002", + "text": "Hardware-backed Bootloader Authentication", + "level": "intermediate" + }, + { + "id": "MID-003", + "text": "Periodic/Continuous Integrity Measurement and Remote Attestation", + "level": "leading" + }, + { + "id": "MID-009", + "text": "Operating System-based Runtime Integrity Check", + "level": "intermediate" + }, + { + "id": "MID-010", + "text": "No Runtime OS Driver Load", + "level": "foundational" + }, + { + "id": "MID-011", + "text": "OS Driver/Peripheral Authentication", + "level": "foundational" + } + ] + }, + { + "id": "TID-204", + "text": "Untrusted Programs Can Access Privileged OS Functions", + "category": "System Software", + "properties": [ + { + "id": "PID-2321", + "text": "Device lacks an access enforcement/privilege mechanism" + } + ], + "mitigations": [ + { + "id": "MID-012", + "text": "OS-based Access Control Mechanisms", + "level": "foundational" + }, + { + "id": "MID-013", + "text": "Process and Thread Memory Segmentation", + "level": "foundational" + }, + { + "id": "MID-014", + "text": "Sandboxing", + "level": "intermediate" + }, + { + "id": "MID-015", + "text": "Containerization", + "level": "intermediate" + } + ] + }, + { + "id": "TID-205", + "text": "Existing OS Tools Maliciously Used for Device Manipulation", + "category": "System Software", + "properties": [ + { + "id": "PID-23221", + "text": "Device includes and enforces OS user accounts" + } + ], + "mitigations": [ + { + "id": "MID-012", + "text": "OS-based Access Control Mechanisms", + "level": "foundational" + }, + { + "id": "MID-014", + "text": "Sandboxing", + "level": "intermediate" + }, + { + "id": "MID-015", + "text": "Containerization", + "level": "intermediate" + }, + { + "id": "MID-016", + "text": "Least Functionality", + "level": "foundational" + }, + { + "id": "MID-017", + "text": "Security-relevant Auditing and Logging", + "level": "foundational" + }, + { + "id": "MID-018", + "text": "Require Authentication for Privileged Functions", + "level": "foundational" + } + ] + }, + { + "id": "TID-206", + "text": "Memory Management Protections Subverted", + "category": "System Software", + "properties": [ + { + "id": "PID-23222", + "text": "Device includes a memory management model, including protections of memory access (read-only/, executable, writable)" + } + ], + "mitigations": [ + { + "id": "MID-004", + "text": "Memory Hardening Against Code Injection", + "level": "foundational" + }, + { + "id": "MID-005", + "text": "Memory Safe Programming Languages", + "level": "intermediate" + }, + { + "id": "MID-007", + "text": "Control Flow Manipulation Protections", + "level": "intermediate" + }, + { + "id": "MID-019", + "text": "ROP Gadget Minimization", + "level": "intermediate" + }, + { + "id": "MID-020", + "text": "Pointer Authentication", + "level": "intermediate" + } + ] + }, + { + "id": "TID-207", + "text": "Container Escape", + "category": "System Software", + "properties": [ + { + "id": "PID-241", + "text": "Device includes containers" + } + ], + "mitigations": [ + { + "id": "MID-022", + "text": "Segmentation Through Hardware-assisted VMs", + "level": "intermediate" + } + ] + }, + { + "id": "TID-208", + "text": "Virtual Machine Escape", + "category": "System Software", + "properties": [ + { + "id": "PID-242", + "text": "Device includes hypervisor" + } + ], + "mitigations": [ + { + "id": "MID-021", + "text": "VM Hardening", + "level": "foundational" + }, + { + "id": "MID-023", + "text": "Hypervisor Hardening", + "level": "intermediate" + } + ] + }, + { + "id": "TID-209", + "text": "Host Can Manipulate Guest Virtual Machines", + "category": "System Software", + "properties": [ + { + "id": "PID-242", + "text": "Device includes hypervisor" + } + ], + "mitigations": [ + { + "id": "MID-023", + "text": "Hypervisor Hardening", + "level": "intermediate" + }, + { + "id": "MID-024", + "text": "Encrypted VM Isolation", + "level": "leading" + } + ] + }, + { + "id": "TID-210", + "text": "Device Vulnerabilities Unpatchable", + "category": "System Software", + "properties": [ + { + "id": "PID-26", + "text": "Device lacks firmware/software update support" + } + ], + "mitigations": [ + { + "id": "MID-025", + "text": "End-of-Life Management Features", + "level": "leading" + }, + { + "id": "MID-026", + "text": "Secure Firmware Update", + "level": "foundational" + } + ] + }, + { + "id": "TID-211", + "text": "Device Allows Unauthenticated Firmware Installation", + "category": "System Software", + "properties": [ + { + "id": "PID-271", + "text": "Device has firmware or software that is not cryptographically checked for integrity validation" + } + ], + "mitigations": [ + { + "id": "MID-001", + "text": "Software Only Bootloader Authentication", + "level": "foundational" + }, + { + "id": "MID-002", + "text": "Hardware-backed Bootloader Authentication", + "level": "intermediate" + }, + { + "id": "MID-026", + "text": "Secure Firmware Update", + "level": "foundational" + } + ] + }, + { + "id": "TID-212", + "text": "FW/SW Update Integrity Shared Secrets Extraction", + "category": "System Software", + "properties": [ + { + "id": "PID-2721", + "text": "Device includes a shared key for firmware integrity validation" + } + ], + "mitigations": [ + { + "id": "MID-026", + "text": "Secure Firmware Update", + "level": "foundational" + }, + { + "id": "MID-033", + "text": "Unique Factory Preinstalled Secret Keys", + "level": "intermediate" + } + ] + }, + { + "id": "TID-213", + "text": "Faulty FW/SW Update Integrity Verification", + "category": "System Software", + "properties": [ + { + "id": "PID-2722", + "text": "Device includes digitally signed firmware (with private key)" + } + ], + "mitigations": [ + { + "id": "MID-001", + "text": "Software Only Bootloader Authentication", + "level": "foundational" + }, + { + "id": "MID-002", + "text": "Hardware-backed Bootloader Authentication", + "level": "intermediate" + }, + { + "id": "MID-003", + "text": "Periodic/Continuous Integrity Measurement and Remote Attestation", + "level": "leading" + }, + { + "id": "MID-026", + "text": "Secure Firmware Update", + "level": "foundational" + }, + { + "id": "MID-027", + "text": "Validated Cryptographic Libraries", + "level": "foundational" + } + ] + }, + { + "id": "TID-214", + "text": "Secrets Extracted from Device Root of Trust", + "category": "System Software", + "properties": [ + { + "id": "PID-251", + "text": "Root of Trust is physically accessible or is not immutable" + }, + { + "id": "PID-272", + "text": "Device includes cryptographic firmware/software integrity protection mechanisms" + } + ], + "mitigations": [ + { + "id": "MID-028", + "text": "Hardware-backed Key Storage", + "level": "intermediate" + }, + { + "id": "MID-060", + "text": "Dedicated Hardware Cryptographic Modules", + "level": "intermediate" + } + ] + }, + { + "id": "TID-215", + "text": "Unencrypted SW/FW Updates", + "category": "System Software", + "properties": [ + { + "id": "PID-273", + "text": "Device has unencrypted firmware updates" + } + ], + "mitigations": [ + { + "id": "MID-026", + "text": "Secure Firmware Update", + "level": "foundational" + } + ] + }, + { + "id": "TID-216", + "text": "Firmware Update Rollbacks Allowed", + "category": "System Software", + "properties": [ + { + "id": "PID-274", + "text": "Device includes user firmware/software version selection during updates" + } + ], + "mitigations": [ + { + "id": "MID-030", + "text": "Firmware Rollback Protections", + "level": "foundational" + } + ] + }, + { + "id": "TID-217", + "text": "Remotely Initiated Updates Can Cause DoS", + "category": "System Software", + "properties": [ + { + "id": "PID-275", + "text": "Device includes remotely-initiated firmware/software updates" + } + ], + "mitigations": [ + { + "id": "MID-026", + "text": "Secure Firmware Update", + "level": "foundational" + }, + { + "id": "MID-031", + "text": "Physical Presence Validation", + "level": "foundational" + }, + { + "id": "MID-032", + "text": "System Service Availability Manager", + "level": "foundational" + } + ] + }, + { + "id": "TID-218", + "text": "Operating System Susceptible to Rootkit", + "category": "System Software", + "properties": [ + { + "id": "PID-23", + "text": "Device includes OS/kernel" + } + ], + "mitigations": [ + { + "id": "MID-001", + "text": "Software Only Bootloader Authentication", + "level": "foundational" + }, + { + "id": "MID-002", + "text": "Hardware-backed Bootloader Authentication", + "level": "intermediate" + }, + { + "id": "MID-003", + "text": "Periodic/Continuous Integrity Measurement and Remote Attestation", + "level": "leading" + }, + { + "id": "MID-009", + "text": "Operating System-based Runtime Integrity Check", + "level": "intermediate" + } + ] + }, + { + "id": "TID-219", + "text": "OS/Kernel Privilege Escalation", + "category": "System Software", + "properties": [ + { + "id": "PID-23221", + "text": "Device includes and enforces OS user accounts" + } + ], + "mitigations": [ + { + "id": "MID-004", + "text": "Memory Hardening Against Code Injection", + "level": "foundational" + }, + { + "id": "MID-005", + "text": "Memory Safe Programming Languages", + "level": "intermediate" + }, + { + "id": "MID-012", + "text": "OS-based Access Control Mechanisms", + "level": "foundational" + } + ] + }, + { + "id": "TID-220", + "text": "Unpatchable Hardware Root of Trust", + "category": "System Software", + "properties": [ + { + "id": "PID-252", + "text": "Root of Trust is immutable" + } + ], + "mitigations": [ + { + "id": "MID-033", + "text": "Unique Factory Preinstalled Secret Keys", + "level": "intermediate" + } + ] + }, + { + "id": "TID-221", + "text": "Authentication Bypass By Message Replay", + "category": "System Software", + "properties": [ + { + "id": "PID-4113", + "text": "Device includes cryptographic functions for sensitive data, such as encryption or authentication" + } + ], + "mitigations": [ + { + "id": "MID-036", + "text": "Cryptographic Nonces", + "level": "foundational" + }, + { + "id": "MID-037", + "text": "Network Timestamps", + "level": "foundational" + } + ] + }, + { + "id": "TID-222", + "text": "Critical System Service May Be Disabled", + "category": "System Software", + "properties": [ + { + "id": "PID-41", + "text": "Device exposes remote network services" + } + ], + "mitigations": [ + { + "id": "MID-031", + "text": "Physical Presence Validation", + "level": "foundational" + }, + { + "id": "MID-032", + "text": "System Service Availability Manager", + "level": "foundational" + }, + { + "id": "MID-038", + "text": "Authenticate for Administrative Actions", + "level": "foundational" + } + ] + }, + { + "id": "TID-223", + "text": "System Susceptible to RAM Scraping", + "category": "System Software", + "properties": [ + { + "id": "PID-23222", + "text": "Device includes a memory management model, including protections of memory access (read-only/, executable, writable)" + } + ], + "mitigations": [ + { + "id": "MID-065", + "text": "RAM Encryption", + "level": "intermediate" + } + ] + }, + { + "id": "TID-224", + "text": "Excessive Access via Software Diagnostic Features", + "category": "System Software", + "properties": [ + { + "id": "PID-22", + "text": "Device includes a debugging capabilities" + } + ], + "mitigations": [ + { + "id": "MID-018", + "text": "Require Authentication for Privileged Functions", + "level": "foundational" + }, + { + "id": "MID-039", + "text": "Restrict Software Diagnostic Functions", + "level": "foundational" + } + ] + }, + { + "id": "TID-301", + "text": "Applications Binaries Modified", + "category": "Application Software", + "properties": [ + { + "id": "PID-31", + "text": "Application-level software is present and running on the device" + } + ], + "mitigations": [ + { + "id": "MID-001", + "text": "Software Only Bootloader Authentication", + "level": "foundational" + }, + { + "id": "MID-002", + "text": "Hardware-backed Bootloader Authentication", + "level": "intermediate" + }, + { + "id": "MID-003", + "text": "Periodic/Continuous Integrity Measurement and Remote Attestation", + "level": "leading" + }, + { + "id": "MID-009", + "text": "Operating System-based Runtime Integrity Check", + "level": "intermediate" + } + ] + }, + { + "id": "TID-302", + "text": "Install Untrusted Application", + "category": "Application Software", + "properties": [ + { + "id": "PID-32", + "text": "Device includes the ability to deploy custom or external programs (e.g., ladder logic, compiled binaries)" + } + ], + "mitigations": [ + { + "id": "MID-003", + "text": "Periodic/Continuous Integrity Measurement and Remote Attestation", + "level": "leading" + }, + { + "id": "MID-009", + "text": "Operating System-based Runtime Integrity Check", + "level": "intermediate" + }, + { + "id": "MID-031", + "text": "Physical Presence Validation", + "level": "foundational" + }, + { + "id": "MID-038", + "text": "Authenticate for Administrative Actions", + "level": "foundational" + }, + { + "id": "MID-040", + "text": "Cryptographically Signed Custom Programs", + "level": "intermediate" + }, + { + "id": "MID-041", + "text": "Cryptographically Signed Vendor-supplied Programs", + "level": "foundational" + }, + { + "id": "MID-051", + "text": "Disallow User-Provided Code", + "level": "foundational" + } + ] + }, + { + "id": "TID-303", + "text": "Excessive Trust in Offboard Management/IDE Software", + "category": "Application Software", + "properties": [ + { + "id": "PID-321", + "text": "Device includes ability to deploy custom programs from engineering software or IDE" + } + ], + "mitigations": [ + { + "id": "MID-041", + "text": "Cryptographically Signed Vendor-supplied Programs", + "level": "foundational" + }, + { + "id": "MID-042", + "text": "Device Checks Consistency Between Binary/Running Code and Textual Code", + "level": "foundational" + } + ] + }, + { + "id": "TID-304", + "text": "Manipulate Runtime Environment", + "category": "Application Software", + "properties": [ + { + "id": "PID-322", + "text": "Device includes a program runtime environment for custom or external programs" + } + ], + "mitigations": [ + { + "id": "MID-009", + "text": "Operating System-based Runtime Integrity Check", + "level": "intermediate" + }, + { + "id": "MID-012", + "text": "OS-based Access Control Mechanisms", + "level": "foundational" + }, + { + "id": "MID-013", + "text": "Process and Thread Memory Segmentation", + "level": "foundational" + }, + { + "id": "MID-014", + "text": "Sandboxing", + "level": "intermediate" + }, + { + "id": "MID-015", + "text": "Containerization", + "level": "intermediate" + } + ] + }, + { + "id": "TID-305", + "text": "Program Executes Dangerous System Calls", + "category": "Application Software", + "properties": [ + { + "id": "PID-3231", + "text": "Device includes ability to run custom/external programs as native binary without a confined/restricted environment" + } + ], + "mitigations": [ + { + "id": "MID-012", + "text": "OS-based Access Control Mechanisms", + "level": "foundational" + }, + { + "id": "MID-014", + "text": "Sandboxing", + "level": "intermediate" + }, + { + "id": "MID-015", + "text": "Containerization", + "level": "intermediate" + } + ] + }, + { + "id": "TID-306", + "text": "Sandboxed Environments Escaped", + "category": "Application Software", + "properties": [ + { + "id": "PID-3232", + "text": "Device includes ability to run custom/external programs/processes through an execution sandboxed environment" + } + ], + "mitigations": [ + { + "id": "MID-012", + "text": "OS-based Access Control Mechanisms", + "level": "foundational" + }, + { + "id": "MID-022", + "text": "Segmentation Through Hardware-assisted VMs", + "level": "intermediate" + } + ] + }, + { + "id": "TID-307", + "text": "Device Code Representations Inconsistent", + "category": "Application Software", + "properties": [ + { + "id": "PID-324", + "text": "Device includes support for \"program uploads\" to retrieve programs from the device from an engineering workstation" + } + ], + "mitigations": [ + { + "id": "MID-042", + "text": "Device Checks Consistency Between Binary/Running Code and Textual Code", + "level": "foundational" + } + ] + }, + { + "id": "TID-308", + "text": "Code Overwritten to Avoid Detection", + "category": "Application Software", + "properties": [ + { + "id": "PID-324", + "text": "Device includes support for \"program uploads\" to retrieve programs from the device from an engineering workstation" + } + ], + "mitigations": [ + { + "id": "MID-017", + "text": "Security-relevant Auditing and Logging", + "level": "foundational" + } + ] + }, + { + "id": "TID-309", + "text": "Device Exploits Engineering Workstation", + "category": "Application Software", + "properties": [ + { + "id": "PID-324", + "text": "Device includes support for \"program uploads\" to retrieve programs from the device from an engineering workstation" + } + ], + "mitigations": [ + { + "id": "MID-008", + "text": "Decidable Protocols and Parsers", + "level": "intermediate" + } + ] + }, + { + "id": "TID-310", + "text": "Remotely Accessible Unauthenticated Services", + "category": "Application Software", + "properties": [ + { + "id": "PID-331", + "text": "Device includes unauthenticated services" + }, + { + "id": "PID-41", + "text": "Device exposes remote network services" + } + ], + "mitigations": [ + { + "id": "MID-034", + "text": "Authenticate Network Messages", + "level": "foundational" + } + ] + }, + { + "id": "TID-311", + "text": "Default Credentials", + "category": "Application Software", + "properties": [ + { + "id": "PID-332", + "text": "Device includes authenticated services" + } + ], + "mitigations": [ + { + "id": "MID-043", + "text": "Manage Default Login Credentials", + "level": "foundational" + } + ] + }, + { + "id": "TID-312", + "text": "Credential Change Mechanism Can Be Abused", + "category": "Application Software", + "properties": [ + { + "id": "PID-332", + "text": "Device includes authenticated services" + } + ], + "mitigations": [ + { + "id": "MID-038", + "text": "Authenticate for Administrative Actions", + "level": "foundational" + } + ] + }, + { + "id": "TID-313", + "text": "Unauthenticated Session Changes Credential", + "category": "Application Software", + "properties": [ + { + "id": "PID-332", + "text": "Device includes authenticated services" + } + ], + "mitigations": [ + { + "id": "MID-038", + "text": "Authenticate for Administrative Actions", + "level": "foundational" + } + ] + }, + { + "id": "TID-314", + "text": "Passwords Can Be Guessed Using Brute-Force Attempts", + "category": "Application Software", + "properties": [ + { + "id": "PID-3321", + "text": "Device includes passwords to authenticate the users" + } + ], + "mitigations": [ + { + "id": "MID-045", + "text": "Multi-factor Authentication", + "level": "intermediate" + }, + { + "id": "MID-046", + "text": "Authentication Attempts Timeouts and Lockouts", + "level": "foundational" + } + ] + }, + { + "id": "TID-315", + "text": "Password Retrieval Mechanism Abused", + "category": "Application Software", + "properties": [ + { + "id": "PID-3321", + "text": "Device includes passwords to authenticate the users" + } + ], + "mitigations": [ + { + "id": "MID-017", + "text": "Security-relevant Auditing and Logging", + "level": "foundational" + } + ] + }, + { + "id": "TID-316", + "text": "Incorrect Certificate Verification Allows Authentication Bypass", + "category": "Application Software", + "properties": [ + { + "id": "PID-3322", + "text": "Device includes cryptographic mechanism to authenticate users and sessions" + }, + { + "id": "PID-4113", + "text": "Device includes cryptographic functions for sensitive data, such as encryption or authentication" + } + ], + "mitigations": [ + { + "id": "MID-027", + "text": "Validated Cryptographic Libraries", + "level": "foundational" + } + ] + }, + { + "id": "TID-317", + "text": "Predictable Cryptographic Key", + "category": "Application Software", + "properties": [ + { + "id": "PID-3322", + "text": "Device includes cryptographic mechanism to authenticate users and sessions" + }, + { + "id": "PID-4113", + "text": "Device includes cryptographic functions for sensitive data, such as encryption or authentication" + } + ], + "mitigations": [ + { + "id": "MID-033", + "text": "Unique Factory Preinstalled Secret Keys", + "level": "intermediate" + }, + { + "id": "MID-047", + "text": "Sufficient Entropy for Keys", + "level": "foundational" + }, + { + "id": "MID-048", + "text": "Hardware Random Number Generator", + "level": "intermediate" + }, + { + "id": "MID-060", + "text": "Dedicated Hardware Cryptographic Modules", + "level": "intermediate" + } + ] + }, + { + "id": "TID-318", + "text": "Insecure Cryptographic Implementation", + "category": "Application Software", + "properties": [ + { + "id": "PID-3322", + "text": "Device includes cryptographic mechanism to authenticate users and sessions" + }, + { + "id": "PID-4113", + "text": "Device includes cryptographic functions for sensitive data, such as encryption or authentication" + } + ], + "mitigations": [ + { + "id": "MID-027", + "text": "Validated Cryptographic Libraries", + "level": "foundational" + }, + { + "id": "MID-060", + "text": "Dedicated Hardware Cryptographic Modules", + "level": "intermediate" + } + ] + }, + { + "id": "TID-319", + "text": "Cross Site Scripting (XSS)", + "category": "Application Software", + "properties": [ + { + "id": "PID-311", + "text": "Device includes the usage of a web/HTTP applications" + } + ], + "mitigations": [ + { + "id": "MID-071", + "text": "Sanitized and Escaped User Data for Web Applications", + "level": "foundational" + } + ] + }, + { + "id": "TID-320", + "text": "SQL Injection", + "category": "Application Software", + "properties": [ + { + "id": "PID-311", + "text": "Device includes the usage of a web/HTTP applications" + } + ], + "mitigations": [ + { + "id": "MID-072", + "text": "Parameterized SQL Queries", + "level": "foundational" + } + ] + }, + { + "id": "TID-321", + "text": "HTTP Application Session Hijacking", + "category": "Application Software", + "properties": [ + { + "id": "PID-311", + "text": "Device includes the usage of a web/HTTP applications" + } + ], + "mitigations": [ + { + "id": "MID-035", + "text": "Encrypt Network Traffic", + "level": "foundational" + }, + { + "id": "MID-073", + "text": "Secure HTTP Session Management", + "level": "foundational" + } + ] + }, + { + "id": "TID-322", + "text": "Cross Site Request Forgery (CSRF)", + "category": "Application Software", + "properties": [ + { + "id": "PID-311", + "text": "Device includes the usage of a web/HTTP applications" + } + ], + "mitigations": [ + { + "id": "MID-074", + "text": "Cross Site Request Forgery Mitigations", + "level": "foundational" + } + ] + }, + { + "id": "TID-323", + "text": "HTTP Path Traversal", + "category": "Application Software", + "properties": [ + { + "id": "PID-311", + "text": "Device includes the usage of a web/HTTP applications" + } + ], + "mitigations": [ + { + "id": "MID-075", + "text": "Path Traversal Protections", + "level": "foundational" + } + ] + }, + { + "id": "TID-324", + "text": "HTTP Direct Object Reference", + "category": "Application Software", + "properties": [ + { + "id": "PID-311", + "text": "Device includes the usage of a web/HTTP applications" + } + ], + "mitigations": [ + { + "id": "MID-076", + "text": "Web Direct Object Reference Authentication", + "level": "foundational" + } + ] + }, + { + "id": "TID-325", + "text": "HTTP Injection/Response Splitting", + "category": "Application Software", + "properties": [ + { + "id": "PID-311", + "text": "Device includes the usage of a web/HTTP applications" + } + ], + "mitigations": [ + { + "id": "MID-078", + "text": "HTTP Request/Response Validation", + "level": "foundational" + } + ] + }, + { + "id": "TID-326", + "text": "Insecure Deserialization", + "category": "Application Software", + "properties": [ + { + "id": "PID-3121", + "text": "Device includes support for object oriented programming languages(e.g., Java, Python, PHP, C++)" + } + ], + "mitigations": [ + { + "id": "MID-077", + "text": "Secure Deserialization", + "level": "foundational" + } + ] + }, + { + "id": "TID-327", + "text": "Out of Bounds Memory Access", + "category": "Application Software", + "properties": [ + { + "id": "PID-3122", + "text": "Device includes support for manual memory management programming languages (e.g. C, C++)" + } + ], + "mitigations": [ + { + "id": "MID-004", + "text": "Memory Hardening Against Code Injection", + "level": "foundational" + }, + { + "id": "MID-005", + "text": "Memory Safe Programming Languages", + "level": "intermediate" + }, + { + "id": "MID-006", + "text": "Driver Memory Isolation", + "level": "leading" + }, + { + "id": "MID-013", + "text": "Process and Thread Memory Segmentation", + "level": "foundational" + } + ] + }, + { + "id": "TID-328", + "text": "Hardcoded Credentials", + "category": "Application Software", + "properties": [ + { + "id": "PID-332", + "text": "Device includes authenticated services" + } + ], + "mitigations": [ + { + "id": "MID-043", + "text": "Manage Default Login Credentials", + "level": "foundational" + } + ] + }, + { + "id": "TID-329", + "text": "Improper Password Storage", + "category": "Application Software", + "properties": [ + { + "id": "PID-3321", + "text": "Device includes passwords to authenticate the users" + } + ], + "mitigations": [ + { + "id": "MID-049", + "text": "Secure Password Storage", + "level": "foundational" + } + ] + }, + { + "id": "TID-330", + "text": "Cryptographic Timing Side-Channel", + "category": "Application Software", + "properties": [ + { + "id": "PID-272", + "text": "Device includes cryptographic firmware/software integrity protection mechanisms" + }, + { + "id": "PID-3322", + "text": "Device includes cryptographic mechanism to authenticate users and sessions" + }, + { + "id": "PID-4113", + "text": "Device includes cryptographic functions for sensitive data, such as encryption or authentication" + } + ], + "mitigations": [ + { + "id": "MID-027", + "text": "Validated Cryptographic Libraries", + "level": "foundational" + }, + { + "id": "MID-044", + "text": "Strong Cryptographic Algorithms and Protocols", + "level": "foundational" + } + ] + }, + { + "id": "TID-401", + "text": "Undocumented Protocol Features", + "category": "Networking", + "properties": [ + { + "id": "PID-41", + "text": "Device exposes remote network services" + } + ], + "mitigations": [ + { + "id": "MID-079", + "text": "Remove Undocumented Network Functionality", + "level": "foundational" + } + ] + }, + { + "id": "TID-404", + "text": "Remotely Triggerable Deadlock/DoS", + "category": "Networking", + "properties": [ + { + "id": "PID-41", + "text": "Device exposes remote network services" + } + ], + "mitigations": [ + { + "id": "MID-008", + "text": "Decidable Protocols and Parsers", + "level": "intermediate" + }, + { + "id": "MID-032", + "text": "System Service Availability Manager", + "level": "foundational" + } + ] + }, + { + "id": "TID-405", + "text": "Network Stack Resource Exhaustion", + "category": "Networking", + "properties": [ + { + "id": "PID-41", + "text": "Device exposes remote network services" + } + ], + "mitigations": [ + { + "id": "MID-008", + "text": "Decidable Protocols and Parsers", + "level": "intermediate" + }, + { + "id": "MID-032", + "text": "System Service Availability Manager", + "level": "foundational" + }, + { + "id": "MID-080", + "text": "Network Request Processing Limits", + "level": "foundational" + } + ] + }, + { + "id": "TID-406", + "text": "Unauthorized Messages or Connections", + "category": "Networking", + "properties": [ + { + "id": "PID-4111", + "text": "Device lacks protocol support for message authentication" + } + ], + "mitigations": [ + { + "id": "MID-034", + "text": "Authenticate Network Messages", + "level": "foundational" + }, + { + "id": "MID-081", + "text": "Secure Network Tunnels", + "level": "intermediate" + } + ] + }, + { + "id": "TID-407", + "text": "Missing Message Replay Protection", + "category": "Networking", + "properties": [ + { + "id": "PID-41", + "text": "Device exposes remote network services" + } + ], + "mitigations": [ + { + "id": "MID-036", + "text": "Cryptographic Nonces", + "level": "foundational" + }, + { + "id": "MID-037", + "text": "Network Timestamps", + "level": "foundational" + } + ] + }, + { + "id": "TID-408", + "text": "Unencrypted Sensitive Data Communication", + "category": "Networking", + "properties": [ + { + "id": "PID-4112", + "text": "Device lacks protocol support for message encryption" + } + ], + "mitigations": [ + { + "id": "MID-035", + "text": "Encrypt Network Traffic", + "level": "foundational" + }, + { + "id": "MID-081", + "text": "Secure Network Tunnels", + "level": "intermediate" + } + ] + }, + { + "id": "TID-410", + "text": "Cryptographic Protocol Side Channel", + "category": "Networking", + "properties": [ + { + "id": "PID-4113", + "text": "Device includes cryptographic functions for sensitive data, such as encryption or authentication" + } + ], + "mitigations": [ + { + "id": "MID-044", + "text": "Strong Cryptographic Algorithms and Protocols", + "level": "foundational" + } + ] + }, + { + "id": "TID-411", + "text": "Weak/Insecure Cryptographic Protocol", + "category": "Networking", + "properties": [ + { + "id": "PID-4113", + "text": "Device includes cryptographic functions for sensitive data, such as encryption or authentication" + }, + { + "id": "PID-3322", + "text": "Device includes cryptographic mechanism to authenticate users and sessions" + } + ], + "mitigations": [ + { + "id": "MID-044", + "text": "Strong Cryptographic Algorithms and Protocols", + "level": "foundational" + }, + { + "id": "MID-082", + "text": "Post-quantum Cryptography", + "level": "intermediate" + } + ] + }, + { + "id": "TID-412", + "text": "Network Routing Capability Abuse", + "category": "Networking", + "properties": [ + { + "id": "PID-42", + "text": "Device includes procedure to forward or route network messages" + } + ], + "mitigations": [ + { + "id": "MID-017", + "text": "Security-relevant Auditing and Logging", + "level": "foundational" + }, + { + "id": "MID-018", + "text": "Require Authentication for Privileged Functions", + "level": "foundational" + }, + { + "id": "MID-031", + "text": "Physical Presence Validation", + "level": "foundational" + }, + { + "id": "MID-038", + "text": "Authenticate for Administrative Actions", + "level": "foundational" + }, + { + "id": "MID-083", + "text": "Network Firewall/Access Control List", + "level": "foundational" + } + ] + } + ] +} \ No newline at end of file diff --git a/about/index.html b/about/index.html index 05f61ea..6b6bf7c 100644 --- a/about/index.html +++ b/about/index.html @@ -1 +1 @@ - About | MITRE EMB3D™
About

Acknowledgements

The model is a result of a collaborative effort by MITRE, Niyo Little Thunder Pearson, Red Balloon Security, and Narf Industries.

After garnering significant interest for peer review across diverse industries, numerous organizations piloted the threat model, offering invaluable feedback. We appreciate the interest and feedback from vendors and integrators across many industries including energy, water, manufacturing, robotics, aerospace, health, automotive, as well as researchers and threat tool vendors. This ongoing collaborative effort has been instrumental in refining and enhancing the model’s content and useability. We look forward to continued collaboration to strengthen the ability of the model to enable “secure by design.”

Contact Us

Please send inquiries about EMB3D to emb3d@mitre.org  

Legal

Material on this site is ©2024 The MITRE Corporation and may be copied and distributed with permission only.

This project makes use of MITRE ATT&CK®.
ATT&CK® Terms of Use - https://attack.mitre.org/resources/legal-and-branding/terms-of-use/
See the ATT&CK® FAQ for more information on how to use and represent the ATT&CK name.

© - The MITRE Corporation. All Rights Reserved.
Privacy Policy | MITRE


MITRE is a registered trademark of The MITRE Corporation.
Material on this site may be copied and distributed with permission only.
Approved for public release; Distribution unlimited. Public release case number: 24-1429.

Using the Chirpy theme for Jekyll.

Cookie Preferences
+ About | MITRE EMB3D™
About

Acknowledgements

The model is a result of a collaborative effort by MITRE, Niyo Little Thunder Pearson, Red Balloon Security, and Narf Industries.

After garnering significant interest for peer review across diverse industries, numerous organizations piloted the threat model, offering invaluable feedback. We appreciate the interest and feedback from vendors and integrators across many industries including energy, water, manufacturing, robotics, aerospace, health, automotive, as well as researchers and threat tool vendors. This ongoing collaborative effort has been instrumental in refining and enhancing the model’s content and useability. We look forward to continued collaboration to strengthen the ability of the model to enable “secure by design.”

Contact Us

Please send inquiries about EMB3D to emb3d@mitre.org  

Legal

Material on this site is ©2024 The MITRE Corporation. The EMBED framework and web site content may be used according to the Terms of Use.

This project makes use of MITRE ATT&CK®.
ATT&CK® Terms of Use - https://attack.mitre.org/resources/legal-and-branding/terms-of-use/
See the ATT&CK® FAQ for more information on how to use and represent the ATT&CK name.

diff --git a/assets/EMB3D_Paper_09-23-24.pdf b/assets/EMB3D_Paper_09-23-24.pdf new file mode 100644 index 0000000..d7d518e Binary files /dev/null and b/assets/EMB3D_Paper_09-23-24.pdf differ diff --git a/assets/EMB3D_Paper_v2_2024-05-13.pdf b/assets/EMB3D_Paper_v2_2024-05-13.pdf deleted file mode 100644 index 3251933..0000000 Binary files a/assets/EMB3D_Paper_v2_2024-05-13.pdf and /dev/null differ diff --git a/assets/css/jekyll-theme-chirpy.css b/assets/css/jekyll-theme-chirpy.css index c440968..cf22492 100644 --- a/assets/css/jekyll-theme-chirpy.css +++ b/assets/css/jekyll-theme-chirpy.css @@ -1 +1 @@ -header .post-desc,#search-results a,h5,h4,h3,h2,h1{color:var(--heading-color);font-weight:400;font-family:Lato,"Microsoft Yahei",sans-serif}main h5,main h4,main h3,main h2{margin-top:2.5rem;margin-bottom:1.25rem}main h5:focus,main h4:focus,main h3:focus,main h2:focus{outline:none}h5 .anchor,h4 .anchor,h3 .anchor,h2 .anchor{font-size:80%}@media(hover: hover){h5 .anchor,h4 .anchor,h3 .anchor,h2 .anchor{visibility:hidden;opacity:0;transition:opacity .25s ease-in,visibility 0s ease-in .25s}h5:hover .anchor,h4:hover .anchor,h3:hover .anchor,h2:hover .anchor{visibility:visible;opacity:1;transition:opacity .25s ease-in,visibility 0s ease-in 0s}}.post-tags .post-tag:hover,.tag:hover{background:var(--tag-hover);transition:background .35s ease-in-out}.table-wrapper>table tbody tr td,.table-wrapper>table thead th{padding:.4rem 1rem;font-size:95%;white-space:nowrap}.post-tags .post-tag:hover,.post-tail-wrapper .license-wrapper>a:hover,#search-results a:hover,#topbar #breadcrumb a:hover,.content a:not(.img-link):hover,.post-meta a:not([class]):hover,#access-lastmod a:hover,footer a:hover{color:#d2603a !important;border-bottom:1px solid #d2603a;text-decoration:none}#search-results a,#search-hints .post-tag,a{color:var(--link-color)}.post-tail-wrapper .post-meta a:not(:hover),.content a:not(.img-link){border-bottom:1px solid var(--link-underline-color)}#sidebar .sidebar-bottom a,#sidebar .site-title a,#sidebar .profile-wrapper{transition:all .3s ease-in-out}#sidebar .sidebar-bottom .icon-border,.content a.popup,i.far,i.fas,.code-header{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.post-tags .post-tag:hover,#search-results a,main .categories a:not(:hover),main #tags a:not(:hover),main #archives a:not(:hover),#access-lastmod a{border-bottom:none}.post-tail-wrapper .share-wrapper .share-icons button,#search-cancel,.code-header button{cursor:pointer}#related-posts time,#post-list .card .card-body .post-meta em,.post-meta em{font-style:normal}.embed-video,.post-preview::before,.post-preview,blockquote[class^=prompt-],.code-header button,div[class^=language-],.highlight{border-radius:.625rem}.embed-video+em,.content a.popup+em{display:block;text-align:center;font-style:normal;font-size:80%;padding:0;color:#6d6c6c}#sidebar .sidebar-bottom .mode-toggle,#sidebar a{color:var(--sidebar-muted-color);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#related-posts .card h4,#post-list .card .card-body .card-text.content p,#post-list .card .card-body .card-title{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical}.post-tail-wrapper .license-wrapper>a,header .post-meta em,header .post-meta time,footer em,footer a{color:var(--text-muted-hightlight-color);font-weight:600}.post-tail-wrapper .license-wrapper span:last-child,.post-tail-wrapper,.post-meta{font-size:.85rem}#related-posts time,footer{font-size:.8rem}sup:target,.footnotes>ol>li:target{background-color:var(--footnote-target-bg);width:-moz-fit-content;width:-webkit-fit-content;width:fit-content;transition:background-color 1.75s ease-in-out}@media(prefers-color-scheme: light){html:not([data-mode]),html[data-mode=light]{--language-border-color: #ececec;--highlight-bg-color: #f6f8fa;--highlighter-rouge-color: #3f596f;--highlight-lineno-color: #9e9e9e;--inline-code-bg: #f6f6f7;--code-color: #3a3a3a;--code-header-text-color: #a3a3a3;--code-header-muted-color: #e5e5e5;--code-header-icon-color: #c9c8c8;--clipboard-checked-color: #43c743}html:not([data-mode]) [class^=prompt-],html[data-mode=light] [class^=prompt-]{--inline-code-bg: #fbfafa}html:not([data-mode]) .highlight table td,html[data-mode=light] .highlight table td{padding:5px}html:not([data-mode]) .highlight table pre,html[data-mode=light] .highlight table pre{margin:0}html:not([data-mode]) .highlight,html:not([data-mode]) .highlight .w,html[data-mode=light] .highlight,html[data-mode=light] .highlight .w{color:#24292f;background-color:#f6f8fa}html:not([data-mode]) .highlight .k,html:not([data-mode]) .highlight .kd,html:not([data-mode]) .highlight .kn,html:not([data-mode]) .highlight .kp,html:not([data-mode]) .highlight .kr,html:not([data-mode]) .highlight .kt,html:not([data-mode]) .highlight .kv,html[data-mode=light] .highlight .k,html[data-mode=light] .highlight .kd,html[data-mode=light] .highlight .kn,html[data-mode=light] .highlight .kp,html[data-mode=light] .highlight .kr,html[data-mode=light] .highlight .kt,html[data-mode=light] .highlight .kv{color:#cf222e}html:not([data-mode]) .highlight .gr,html[data-mode=light] .highlight .gr{color:#f6f8fa}html:not([data-mode]) .highlight .gd,html[data-mode=light] .highlight .gd{color:#82071e;background-color:#ffebe9}html:not([data-mode]) .highlight .nb,html[data-mode=light] .highlight .nb{color:#953800}html:not([data-mode]) .highlight .nc,html[data-mode=light] .highlight .nc{color:#953800}html:not([data-mode]) .highlight .no,html[data-mode=light] .highlight .no{color:#953800}html:not([data-mode]) .highlight .nn,html[data-mode=light] .highlight .nn{color:#953800}html:not([data-mode]) .highlight .sr,html[data-mode=light] .highlight .sr{color:#116329}html:not([data-mode]) .highlight .na,html[data-mode=light] .highlight .na{color:#116329}html:not([data-mode]) .highlight .nt,html[data-mode=light] .highlight .nt{color:#116329}html:not([data-mode]) .highlight .gi,html[data-mode=light] .highlight .gi{color:#116329;background-color:#dafbe1}html:not([data-mode]) .highlight .kc,html[data-mode=light] .highlight .kc{color:#0550ae}html:not([data-mode]) .highlight .l,html:not([data-mode]) .highlight .ld,html:not([data-mode]) .highlight .m,html:not([data-mode]) .highlight .mb,html:not([data-mode]) .highlight .mf,html:not([data-mode]) .highlight .mh,html:not([data-mode]) .highlight .mi,html:not([data-mode]) .highlight .il,html:not([data-mode]) .highlight .mo,html:not([data-mode]) .highlight .mx,html[data-mode=light] .highlight .l,html[data-mode=light] .highlight .ld,html[data-mode=light] .highlight .m,html[data-mode=light] .highlight .mb,html[data-mode=light] .highlight .mf,html[data-mode=light] .highlight .mh,html[data-mode=light] .highlight .mi,html[data-mode=light] .highlight .il,html[data-mode=light] .highlight .mo,html[data-mode=light] .highlight .mx{color:#0550ae}html:not([data-mode]) .highlight .sb,html[data-mode=light] .highlight .sb{color:#0550ae}html:not([data-mode]) .highlight .bp,html[data-mode=light] .highlight .bp{color:#0550ae}html:not([data-mode]) .highlight .ne,html[data-mode=light] .highlight .ne{color:#0550ae}html:not([data-mode]) .highlight .nl,html[data-mode=light] .highlight .nl{color:#0550ae}html:not([data-mode]) .highlight .py,html[data-mode=light] .highlight .py{color:#0550ae}html:not([data-mode]) .highlight .nv,html:not([data-mode]) .highlight .vc,html:not([data-mode]) .highlight .vg,html:not([data-mode]) .highlight .vi,html:not([data-mode]) .highlight .vm,html[data-mode=light] .highlight .nv,html[data-mode=light] .highlight .vc,html[data-mode=light] .highlight .vg,html[data-mode=light] .highlight .vi,html[data-mode=light] .highlight .vm{color:#0550ae}html:not([data-mode]) .highlight .o,html:not([data-mode]) .highlight .ow,html[data-mode=light] .highlight .o,html[data-mode=light] .highlight .ow{color:#0550ae}html:not([data-mode]) .highlight .gh,html[data-mode=light] .highlight .gh{color:#0550ae;font-weight:bold}html:not([data-mode]) .highlight .gu,html[data-mode=light] .highlight .gu{color:#0550ae;font-weight:bold}html:not([data-mode]) .highlight .s,html:not([data-mode]) .highlight .sa,html:not([data-mode]) .highlight .sc,html:not([data-mode]) .highlight .dl,html:not([data-mode]) .highlight .sd,html:not([data-mode]) .highlight .s2,html:not([data-mode]) .highlight .se,html:not([data-mode]) .highlight .sh,html:not([data-mode]) .highlight .sx,html:not([data-mode]) .highlight .s1,html:not([data-mode]) .highlight .ss,html[data-mode=light] .highlight .s,html[data-mode=light] .highlight .sa,html[data-mode=light] .highlight .sc,html[data-mode=light] .highlight .dl,html[data-mode=light] .highlight .sd,html[data-mode=light] .highlight .s2,html[data-mode=light] .highlight .se,html[data-mode=light] .highlight .sh,html[data-mode=light] .highlight .sx,html[data-mode=light] .highlight .s1,html[data-mode=light] .highlight .ss{color:#0a3069}html:not([data-mode]) .highlight .nd,html[data-mode=light] .highlight .nd{color:#8250df}html:not([data-mode]) .highlight .nf,html:not([data-mode]) .highlight .fm,html[data-mode=light] .highlight .nf,html[data-mode=light] .highlight .fm{color:#8250df}html:not([data-mode]) .highlight .err,html[data-mode=light] .highlight .err{color:#f6f8fa;background-color:#82071e}html:not([data-mode]) .highlight .c,html:not([data-mode]) .highlight .ch,html:not([data-mode]) .highlight .cd,html:not([data-mode]) .highlight .cm,html:not([data-mode]) .highlight .cp,html:not([data-mode]) .highlight .cpf,html:not([data-mode]) .highlight .c1,html:not([data-mode]) .highlight .cs,html[data-mode=light] .highlight .c,html[data-mode=light] .highlight .ch,html[data-mode=light] .highlight .cd,html[data-mode=light] .highlight .cm,html[data-mode=light] .highlight .cp,html[data-mode=light] .highlight .cpf,html[data-mode=light] .highlight .c1,html[data-mode=light] .highlight .cs{color:#68717a}html:not([data-mode]) .highlight .gl,html[data-mode=light] .highlight .gl{color:#68717a}html:not([data-mode]) .highlight .gt,html[data-mode=light] .highlight .gt{color:#68717a}html:not([data-mode]) .highlight .ni,html[data-mode=light] .highlight .ni{color:#24292f}html:not([data-mode]) .highlight .si,html[data-mode=light] .highlight .si{color:#24292f}html:not([data-mode]) .highlight .ge,html[data-mode=light] .highlight .ge{color:#24292f;font-style:italic}html:not([data-mode]) .highlight .gs,html[data-mode=light] .highlight .gs{color:#24292f;font-weight:bold}html[data-mode=dark]{--language-border-color: #2d2d2d;--highlight-bg-color: #151515;--highlighter-rouge-color: #c9def1;--highlight-lineno-color: #808080;--inline-code-bg: #323238;--code-color: #b0b0b0;--code-header-text-color: #6a6a6a;--code-header-muted-color: #353535;--code-header-icon-color: #565656;--clipboard-checked-color: #2bcc2b;--filepath-text-color: #cacaca}html[data-mode=dark] .highlight .gp{color:#87939d}html[data-mode=dark] .highlight table td{padding:5px}html[data-mode=dark] .highlight table pre{margin:0}html[data-mode=dark] .highlight,html[data-mode=dark] .highlight .w{color:#d0d0d0;background-color:#151515}html[data-mode=dark] .highlight .err{color:#151515;background-color:#ac4142}html[data-mode=dark] .highlight .c,html[data-mode=dark] .highlight .ch,html[data-mode=dark] .highlight .cd,html[data-mode=dark] .highlight .cm,html[data-mode=dark] .highlight .cpf,html[data-mode=dark] .highlight .c1,html[data-mode=dark] .highlight .cs{color:#848484}html[data-mode=dark] .highlight .cp{color:#f4bf75}html[data-mode=dark] .highlight .nt{color:#f4bf75}html[data-mode=dark] .highlight .o,html[data-mode=dark] .highlight .ow{color:#d0d0d0}html[data-mode=dark] .highlight .p,html[data-mode=dark] .highlight .pi{color:#d0d0d0}html[data-mode=dark] .highlight .gi{color:#90a959}html[data-mode=dark] .highlight .gd{color:#f08a8b;background-color:#320000}html[data-mode=dark] .highlight .gh{color:#6a9fb5;background-color:#151515;font-weight:bold}html[data-mode=dark] .highlight .k,html[data-mode=dark] .highlight .kn,html[data-mode=dark] .highlight .kp,html[data-mode=dark] .highlight .kr,html[data-mode=dark] .highlight .kv{color:#aa759f}html[data-mode=dark] .highlight .kc{color:#d28445}html[data-mode=dark] .highlight .kt{color:#d28445}html[data-mode=dark] .highlight .kd{color:#d28445}html[data-mode=dark] .highlight .s,html[data-mode=dark] .highlight .sb,html[data-mode=dark] .highlight .sc,html[data-mode=dark] .highlight .dl,html[data-mode=dark] .highlight .sd,html[data-mode=dark] .highlight .s2,html[data-mode=dark] .highlight .sh,html[data-mode=dark] .highlight .sx,html[data-mode=dark] .highlight .s1{color:#90a959}html[data-mode=dark] .highlight .sa{color:#aa759f}html[data-mode=dark] .highlight .sr{color:#75b5aa}html[data-mode=dark] .highlight .si{color:#b76d45}html[data-mode=dark] .highlight .se{color:#b76d45}html[data-mode=dark] .highlight .nn{color:#f4bf75}html[data-mode=dark] .highlight .nc{color:#f4bf75}html[data-mode=dark] .highlight .no{color:#f4bf75}html[data-mode=dark] .highlight .na{color:#6a9fb5}html[data-mode=dark] .highlight .m,html[data-mode=dark] .highlight .mb,html[data-mode=dark] .highlight .mf,html[data-mode=dark] .highlight .mh,html[data-mode=dark] .highlight .mi,html[data-mode=dark] .highlight .il,html[data-mode=dark] .highlight .mo,html[data-mode=dark] .highlight .mx{color:#90a959}html[data-mode=dark] .highlight .ss{color:#90a959}}@media(prefers-color-scheme: dark){html:not([data-mode]),html[data-mode=dark]{--language-border-color: #2d2d2d;--highlight-bg-color: #151515;--highlighter-rouge-color: #c9def1;--highlight-lineno-color: #808080;--inline-code-bg: #323238;--code-color: #b0b0b0;--code-header-text-color: #6a6a6a;--code-header-muted-color: #353535;--code-header-icon-color: #565656;--clipboard-checked-color: #2bcc2b;--filepath-text-color: #cacaca}html:not([data-mode]) .highlight .gp,html[data-mode=dark] .highlight .gp{color:#87939d}html:not([data-mode]) .highlight table td,html[data-mode=dark] .highlight table td{padding:5px}html:not([data-mode]) .highlight table pre,html[data-mode=dark] .highlight table pre{margin:0}html:not([data-mode]) .highlight,html:not([data-mode]) .highlight .w,html[data-mode=dark] .highlight,html[data-mode=dark] .highlight .w{color:#d0d0d0;background-color:#151515}html:not([data-mode]) .highlight .err,html[data-mode=dark] .highlight .err{color:#151515;background-color:#ac4142}html:not([data-mode]) .highlight .c,html:not([data-mode]) .highlight .ch,html:not([data-mode]) .highlight .cd,html:not([data-mode]) .highlight .cm,html:not([data-mode]) .highlight .cpf,html:not([data-mode]) .highlight .c1,html:not([data-mode]) .highlight .cs,html[data-mode=dark] .highlight .c,html[data-mode=dark] .highlight .ch,html[data-mode=dark] .highlight .cd,html[data-mode=dark] .highlight .cm,html[data-mode=dark] .highlight .cpf,html[data-mode=dark] .highlight .c1,html[data-mode=dark] .highlight .cs{color:#848484}html:not([data-mode]) .highlight .cp,html[data-mode=dark] .highlight .cp{color:#f4bf75}html:not([data-mode]) .highlight .nt,html[data-mode=dark] .highlight .nt{color:#f4bf75}html:not([data-mode]) .highlight .o,html:not([data-mode]) .highlight .ow,html[data-mode=dark] .highlight .o,html[data-mode=dark] .highlight .ow{color:#d0d0d0}html:not([data-mode]) .highlight .p,html:not([data-mode]) .highlight .pi,html[data-mode=dark] .highlight .p,html[data-mode=dark] .highlight .pi{color:#d0d0d0}html:not([data-mode]) .highlight .gi,html[data-mode=dark] .highlight .gi{color:#90a959}html:not([data-mode]) .highlight .gd,html[data-mode=dark] .highlight .gd{color:#f08a8b;background-color:#320000}html:not([data-mode]) .highlight .gh,html[data-mode=dark] .highlight .gh{color:#6a9fb5;background-color:#151515;font-weight:bold}html:not([data-mode]) .highlight .k,html:not([data-mode]) .highlight .kn,html:not([data-mode]) .highlight .kp,html:not([data-mode]) .highlight .kr,html:not([data-mode]) .highlight .kv,html[data-mode=dark] .highlight .k,html[data-mode=dark] .highlight .kn,html[data-mode=dark] .highlight .kp,html[data-mode=dark] .highlight .kr,html[data-mode=dark] .highlight .kv{color:#aa759f}html:not([data-mode]) .highlight .kc,html[data-mode=dark] .highlight .kc{color:#d28445}html:not([data-mode]) .highlight .kt,html[data-mode=dark] .highlight .kt{color:#d28445}html:not([data-mode]) .highlight .kd,html[data-mode=dark] .highlight .kd{color:#d28445}html:not([data-mode]) .highlight .s,html:not([data-mode]) .highlight .sb,html:not([data-mode]) .highlight .sc,html:not([data-mode]) .highlight .dl,html:not([data-mode]) .highlight .sd,html:not([data-mode]) .highlight .s2,html:not([data-mode]) .highlight .sh,html:not([data-mode]) .highlight .sx,html:not([data-mode]) .highlight .s1,html[data-mode=dark] .highlight .s,html[data-mode=dark] .highlight .sb,html[data-mode=dark] .highlight .sc,html[data-mode=dark] .highlight .dl,html[data-mode=dark] .highlight .sd,html[data-mode=dark] .highlight .s2,html[data-mode=dark] .highlight .sh,html[data-mode=dark] .highlight .sx,html[data-mode=dark] .highlight .s1{color:#90a959}html:not([data-mode]) .highlight .sa,html[data-mode=dark] .highlight .sa{color:#aa759f}html:not([data-mode]) .highlight .sr,html[data-mode=dark] .highlight .sr{color:#75b5aa}html:not([data-mode]) .highlight .si,html[data-mode=dark] .highlight .si{color:#b76d45}html:not([data-mode]) .highlight .se,html[data-mode=dark] .highlight .se{color:#b76d45}html:not([data-mode]) .highlight .nn,html[data-mode=dark] .highlight .nn{color:#f4bf75}html:not([data-mode]) .highlight .nc,html[data-mode=dark] .highlight .nc{color:#f4bf75}html:not([data-mode]) .highlight .no,html[data-mode=dark] .highlight .no{color:#f4bf75}html:not([data-mode]) .highlight .na,html[data-mode=dark] .highlight .na{color:#6a9fb5}html:not([data-mode]) .highlight .m,html:not([data-mode]) .highlight .mb,html:not([data-mode]) .highlight .mf,html:not([data-mode]) .highlight .mh,html:not([data-mode]) .highlight .mi,html:not([data-mode]) .highlight .il,html:not([data-mode]) .highlight .mo,html:not([data-mode]) .highlight .mx,html[data-mode=dark] .highlight .m,html[data-mode=dark] .highlight .mb,html[data-mode=dark] .highlight .mf,html[data-mode=dark] .highlight .mh,html[data-mode=dark] .highlight .mi,html[data-mode=dark] .highlight .il,html[data-mode=dark] .highlight .mo,html[data-mode=dark] .highlight .mx{color:#90a959}html:not([data-mode]) .highlight .ss,html[data-mode=dark] .highlight .ss{color:#90a959}html[data-mode=light]{--language-border-color: #ececec;--highlight-bg-color: #f6f8fa;--highlighter-rouge-color: #3f596f;--highlight-lineno-color: #9e9e9e;--inline-code-bg: #f6f6f7;--code-color: #3a3a3a;--code-header-text-color: #a3a3a3;--code-header-muted-color: #e5e5e5;--code-header-icon-color: #c9c8c8;--clipboard-checked-color: #43c743}html[data-mode=light] [class^=prompt-]{--inline-code-bg: #fbfafa}html[data-mode=light] .highlight table td{padding:5px}html[data-mode=light] .highlight table pre{margin:0}html[data-mode=light] .highlight,html[data-mode=light] .highlight .w{color:#24292f;background-color:#f6f8fa}html[data-mode=light] .highlight .k,html[data-mode=light] .highlight .kd,html[data-mode=light] .highlight .kn,html[data-mode=light] .highlight .kp,html[data-mode=light] .highlight .kr,html[data-mode=light] .highlight .kt,html[data-mode=light] .highlight .kv{color:#cf222e}html[data-mode=light] .highlight .gr{color:#f6f8fa}html[data-mode=light] .highlight .gd{color:#82071e;background-color:#ffebe9}html[data-mode=light] .highlight .nb{color:#953800}html[data-mode=light] .highlight .nc{color:#953800}html[data-mode=light] .highlight .no{color:#953800}html[data-mode=light] .highlight .nn{color:#953800}html[data-mode=light] .highlight .sr{color:#116329}html[data-mode=light] .highlight .na{color:#116329}html[data-mode=light] .highlight .nt{color:#116329}html[data-mode=light] .highlight .gi{color:#116329;background-color:#dafbe1}html[data-mode=light] .highlight .kc{color:#0550ae}html[data-mode=light] .highlight .l,html[data-mode=light] .highlight .ld,html[data-mode=light] .highlight .m,html[data-mode=light] .highlight .mb,html[data-mode=light] .highlight .mf,html[data-mode=light] .highlight .mh,html[data-mode=light] .highlight .mi,html[data-mode=light] .highlight .il,html[data-mode=light] .highlight .mo,html[data-mode=light] .highlight .mx{color:#0550ae}html[data-mode=light] .highlight .sb{color:#0550ae}html[data-mode=light] .highlight .bp{color:#0550ae}html[data-mode=light] .highlight .ne{color:#0550ae}html[data-mode=light] .highlight .nl{color:#0550ae}html[data-mode=light] .highlight .py{color:#0550ae}html[data-mode=light] .highlight .nv,html[data-mode=light] .highlight .vc,html[data-mode=light] .highlight .vg,html[data-mode=light] .highlight .vi,html[data-mode=light] .highlight .vm{color:#0550ae}html[data-mode=light] .highlight .o,html[data-mode=light] .highlight .ow{color:#0550ae}html[data-mode=light] .highlight .gh{color:#0550ae;font-weight:bold}html[data-mode=light] .highlight .gu{color:#0550ae;font-weight:bold}html[data-mode=light] .highlight .s,html[data-mode=light] .highlight .sa,html[data-mode=light] .highlight .sc,html[data-mode=light] .highlight .dl,html[data-mode=light] .highlight .sd,html[data-mode=light] .highlight .s2,html[data-mode=light] .highlight .se,html[data-mode=light] .highlight .sh,html[data-mode=light] .highlight .sx,html[data-mode=light] .highlight .s1,html[data-mode=light] .highlight .ss{color:#0a3069}html[data-mode=light] .highlight .nd{color:#8250df}html[data-mode=light] .highlight .nf,html[data-mode=light] .highlight .fm{color:#8250df}html[data-mode=light] .highlight .err{color:#f6f8fa;background-color:#82071e}html[data-mode=light] .highlight .c,html[data-mode=light] .highlight .ch,html[data-mode=light] .highlight .cd,html[data-mode=light] .highlight .cm,html[data-mode=light] .highlight .cp,html[data-mode=light] .highlight .cpf,html[data-mode=light] .highlight .c1,html[data-mode=light] .highlight .cs{color:#68717a}html[data-mode=light] .highlight .gl{color:#68717a}html[data-mode=light] .highlight .gt{color:#68717a}html[data-mode=light] .highlight .ni{color:#24292f}html[data-mode=light] .highlight .si{color:#24292f}html[data-mode=light] .highlight .ge{color:#24292f;font-style:italic}html[data-mode=light] .highlight .gs{color:#24292f;font-weight:bold}}div[class^=language-],figure.highlight,.highlight{background-color:var(--highlight-bg-color)}td.rouge-code{padding-left:1rem;padding-right:1.5rem}.highlighter-rouge{color:var(--highlighter-rouge-color);margin-top:.5rem;margin-bottom:1.2em}.highlight{overflow:auto;padding-bottom:.75rem}.highlight pre{margin-bottom:0;font-size:.85rem;line-height:1.4rem;word-wrap:normal}.highlight table td:first-child{display:inline-block;margin-left:1rem;margin-right:.75rem}.highlight table td:last-child{padding-right:2rem !important}.highlight table td pre{overflow:visible;word-break:normal}.highlight .lineno{text-align:right;color:var(--highlight-lineno-color);-webkit-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none}code{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;color:var(--code-color)}code.highlighter-rouge{font-size:.85rem;padding:3px 5px;word-break:break-word;border-radius:4px;background-color:var(--inline-code-bg)}code.filepath{background-color:inherit;color:var(--filepath-text-color);font-weight:600;padding:0}a>code.highlighter-rouge{padding-bottom:0;color:inherit}a:hover>code.highlighter-rouge{border-bottom:none}blockquote code{color:inherit}td.rouge-code a{color:inherit !important;border-bottom:none !important;pointer-events:none}div[class^=language-]{box-shadow:var(--language-border-color) 0 0 0 1px}.content>div[class^=language-]{margin-left:-1rem;margin-right:-1rem;border-radius:0}div[class^=language-] .highlight{border-top-left-radius:0;border-top-right-radius:0}div.nolineno td:first-child,div.language-plaintext td:first-child,div.language-console td:first-child,div.language-terminal td:first-child{padding:0 !important;margin-right:0}div.nolineno td:first-child .lineno,div.language-plaintext td:first-child .lineno,div.language-console td:first-child .lineno,div.language-terminal td:first-child .lineno{display:none}.code-header{display:flex;justify-content:space-between;align-items:center;height:2.25rem;margin-left:.75rem;margin-right:.25rem}.code-header span{line-height:2.25rem}.code-header span i{font-size:1rem;width:1.75rem;color:var(--code-header-icon-color)}.code-header span i.small{font-size:70%}[file] .code-header span>i{position:relative;top:1px}.code-header span::after{content:attr(data-label-text);font-size:.85rem;font-weight:600;color:var(--code-header-text-color)}.code-header button{border:1px solid rgba(0,0,0,0);height:2.25rem;width:2.25rem;padding:0;background-color:inherit}.code-header button i{color:var(--code-header-icon-color)}.code-header button[timeout]:hover{border-color:var(--clipboard-checked-color)}.code-header button[timeout] i{color:var(--clipboard-checked-color)}.code-header button:focus{outline:none}.code-header button:not([timeout]):hover{background-color:rgba(128,128,128,.37)}.code-header button:not([timeout]):hover i{color:#fff}@media all and (min-width: 576px){.content>div[class^=language-]{margin-left:0;margin-right:0;border-radius:.625rem}div[class^=language-] .code-header{margin-left:0;margin-right:0}div[class^=language-] .code-header::before{content:"";display:inline-block;margin-left:1rem;width:.75rem;height:.75rem;border-radius:50%;background-color:var(--code-header-muted-color);box-shadow:1.25rem 0 0 var(--code-header-muted-color),2.5rem 0 0 var(--code-header-muted-color)}div[class^=language-] .code-header span{margin-left:-0.875rem}}html{font-size:16px}@media(prefers-color-scheme: light){html:not([data-mode]),html[data-mode=light]{--main-bg: white;--mask-bg: #c1c3c5;--main-border-color: #f3f3f3;--text-color: #34343c;--text-muted-color: #757575;--text-muted-hightlight-color: inherit;--heading-color: #2a2a2a;--label-color: #585858;--blockquote-border-color: #eeeeee;--blockquote-text-color: #757575;--link-color: #0056b2;--link-underline-color: #dee2e6;--button-bg: #ffffff;--btn-border-color: #e9ecef;--btn-backtotop-color: #686868;--btn-backtotop-border-color: #f1f1f1;--btn-box-shadow: #eaeaea;--checkbox-color: #c5c5c5;--checkbox-checked-color: #07a8f7;--row-cell-color: rgb(223, 233, 241, 0.64);--img-bg: radial-gradient( circle, rgb(255, 255, 255) 0%, rgb(239, 239, 239) 100% );--shimmer-bg: linear-gradient( 90deg, rgba(250, 250, 250, 0) 0%, rgba(232, 230, 230, 1) 50%, rgba(250, 250, 250, 0) 100% );--site-title-color: rgb(113, 113, 113);--site-subtitle-color: #717171;--sidebar-bg: #f6f8fa;--sidebar-border-color: #efefef;--sidebar-muted-color: #545454;--sidebar-active-color: #1d1d1d;--sidebar-hover-bg: rgb(223, 233, 241, 0.64);--sidebar-btn-bg: white;--sidebar-btn-color: #8e8e8e;--avatar-border-color: white;--topbar-bg: rgb(255, 255, 255, 0.7);--topbar-text-color: rgb(78, 78, 78);--search-border-color: rgb(240, 240, 240);--search-icon-color: #c2c6cc;--input-focus-border-color: #b8b8b8;--post-list-text-color: dimgray;--btn-patinator-text-color: #555555;--btn-paginator-hover-color: var(--sidebar-bg);--toc-highlight: #0550ae;--btn-share-color: gray;--btn-share-hover-color: #0d6efd;--card-bg: white;--card-hovor-bg: #e2e2e2;--card-shadow: rgb(104, 104, 104, 0.05) 0 2px 6px 0, rgba(211, 209, 209, 0.15) 0 0 0 1px;--footnote-target-bg: lightcyan;--tb-odd-bg: #fbfcfd;--tb-border-color: #eaeaea;--dash-color: silver;--kbd-wrap-color: #bdbdbd;--kbd-text-color: var(--text-color);--kbd-bg-color: white;--prompt-text-color: rgb(46, 46, 46, 0.77);--prompt-tip-bg: rgb(123, 247, 144, 0.2);--prompt-tip-icon-color: #03b303;--prompt-info-bg: #e1f5fe;--prompt-info-icon-color: #0070cb;--prompt-warning-bg: rgb(255, 243, 205);--prompt-warning-icon-color: #ef9c03;--prompt-danger-bg: rgb(248, 215, 218, 0.56);--prompt-danger-icon-color: #df3c30;--tag-border: #dee2e6;--tag-shadow: var(--btn-border-color);--tag-hover: rgb(222, 226, 230);--search-tag-bg: #f8f9fa;--categories-border: rgba(0, 0, 0, 0.125);--categories-hover-bg: var(--btn-border-color);--categories-icon-hover-color: darkslategray;--timeline-color: rgba(0, 0, 0, 0.075);--timeline-node-bg: #c2c6cc;--timeline-year-dot-color: #ffffff}html:not([data-mode]) [class^=prompt-],html[data-mode=light] [class^=prompt-]{--link-underline-color: rgb(219, 216, 216)}html:not([data-mode]) .dark,html[data-mode=light] .dark{display:none}html[data-mode=dark]{--main-bg: rgb(27, 27, 30);--mask-bg: rgb(68, 69, 70);--main-border-color: rgb(44, 45, 45);--text-color: rgb(175, 176, 177);--text-muted-color: #868686;--text-muted-hightlight-color: #aeaeae;--heading-color: #cccccc;--label-color: #a7a7a7;--blockquote-border-color: rgb(66, 66, 66);--blockquote-text-color: #868686;--link-color: rgb(138, 180, 248);--link-underline-color: rgb(82, 108, 150);--button-bg: #1e1e1e;--btn-border-color: #2e2f31;--btn-backtotop-color: var(--text-color);--btn-backtotop-border-color: #212122;--btn-box-shadow: var(--main-bg);--card-header-bg: #292929;--checkbox-color: rgb(118, 120, 121);--checkbox-checked-color: var(--link-color);--row-cell-color:#262626;--img-bg: radial-gradient(circle, rgb(22, 22, 24) 0%, rgb(32, 32, 32) 100%);--shimmer-bg: linear-gradient( 90deg, rgba(255, 255, 255, 0) 0%, rgba(58, 55, 55, 0.4) 50%, rgba(255, 255, 255, 0) 100% );--site-title-color: #717070;--site-subtitle-color: #868686;--sidebar-bg: #1e1e1e;--sidebar-border-color: #292929;--sidebar-muted-color: #868686;--sidebar-active-color: rgb(255, 255, 255, 0.95);--sidebar-hover-bg: #262626;--sidebar-btn-bg: #232328;--sidebar-btn-color: #787878;--avatar-border-color: rgb(206, 206, 206, 0.9);--topbar-bg: rgb(27, 27, 30, 0.64);--topbar-text-color: var(--text-color);--search-border-color: rgb(55, 55, 55);--search-icon-color: rgb(100, 102, 105);--input-focus-border-color: rgb(112, 114, 115);--post-list-text-color: rgb(175, 176, 177);--btn-patinator-text-color: var(--text-color);--btn-paginator-hover-color: #2e2e2e;--toc-highlight: rgb(116, 178, 243);--tag-hover: rgb(43, 56, 62);--tb-odd-bg: #252526;--tb-even-bg: rgb(31, 31, 34);--tb-border-color: var(--tb-odd-bg);--footnote-target-bg: rgb(63, 81, 181);--btn-share-color: #6c757d;--btn-share-hover-color: #bfc1ca;--card-bg: #1e1e1e;--card-hovor-bg: #464d51;--card-shadow: rgb(21, 21, 21, 0.72) 0 6px 18px 0, rgb(137, 135, 135, 0.24) 0 0 0 1px;--kbd-wrap-color: #6a6a6a;--kbd-text-color: #d3d3d3;--kbd-bg-color: #242424;--prompt-text-color: rgb(216, 212, 212, 0.75);--prompt-tip-bg: rgb(22, 60, 36, 0.64);--prompt-tip-icon-color: rgb(15, 164, 15, 0.81);--prompt-info-bg: rgb(7, 59, 104, 0.8);--prompt-info-icon-color: #0075d1;--prompt-warning-bg: rgb(90, 69, 3, 0.88);--prompt-warning-icon-color: rgb(255, 165, 0, 0.8);--prompt-danger-bg: rgb(86, 28, 8, 0.8);--prompt-danger-icon-color: #cd0202;--tag-border: rgb(59, 79, 88);--tag-shadow: rgb(32, 33, 33);--dash-color: rgb(63, 65, 68);--search-tag-bg: #292828;--categories-border: rgb(64, 66, 69, 0.5);--categories-hover-bg: rgb(73, 75, 76);--categories-icon-hover-color: white;--timeline-node-bg: rgb(150, 152, 156);--timeline-color: rgb(63, 65, 68);--timeline-year-dot-color: var(--timeline-color);color-scheme:dark}html[data-mode=dark] .light{display:none}html[data-mode=dark] .categories.card,html[data-mode=dark] .list-group-item{background-color:var(--card-bg)}html[data-mode=dark] .categories .card-header{background-color:var(--card-header-bg)}html[data-mode=dark] .categories .list-group-item{border-left:none;border-right:none;padding-left:2rem;border-color:var(--categories-border)}html[data-mode=dark] .categories .list-group-item:last-child{border-bottom-color:var(--card-bg)}html[data-mode=dark] #archives li:nth-child(odd){background-image:linear-gradient(to left, rgb(26, 26, 30), rgb(39, 39, 45), rgb(39, 39, 45), rgb(39, 39, 45), rgb(26, 26, 30))}html[data-mode=dark] #disqus_thread{color-scheme:none}}@media(prefers-color-scheme: dark){html:not([data-mode]),html[data-mode=dark]{--main-bg: rgb(27, 27, 30);--mask-bg: rgb(68, 69, 70);--main-border-color: rgb(44, 45, 45);--text-color: rgb(175, 176, 177);--text-muted-color: #868686;--text-muted-hightlight-color: #aeaeae;--heading-color: #cccccc;--label-color: #a7a7a7;--blockquote-border-color: rgb(66, 66, 66);--blockquote-text-color: #868686;--link-color: rgb(138, 180, 248);--link-underline-color: rgb(82, 108, 150);--button-bg: #1e1e1e;--btn-border-color: #2e2f31;--btn-backtotop-color: var(--text-color);--btn-backtotop-border-color: #212122;--btn-box-shadow: var(--main-bg);--card-header-bg: #292929;--checkbox-color: rgb(118, 120, 121);--checkbox-checked-color: var(--link-color);--row-cell-color:#262626;--img-bg: radial-gradient(circle, rgb(22, 22, 24) 0%, rgb(32, 32, 32) 100%);--shimmer-bg: linear-gradient( 90deg, rgba(255, 255, 255, 0) 0%, rgba(58, 55, 55, 0.4) 50%, rgba(255, 255, 255, 0) 100% );--site-title-color: #717070;--site-subtitle-color: #868686;--sidebar-bg: #1e1e1e;--sidebar-border-color: #292929;--sidebar-muted-color: #868686;--sidebar-active-color: rgb(255, 255, 255, 0.95);--sidebar-hover-bg: #262626;--sidebar-btn-bg: #232328;--sidebar-btn-color: #787878;--avatar-border-color: rgb(206, 206, 206, 0.9);--topbar-bg: rgb(27, 27, 30, 0.64);--topbar-text-color: var(--text-color);--search-border-color: rgb(55, 55, 55);--search-icon-color: rgb(100, 102, 105);--input-focus-border-color: rgb(112, 114, 115);--post-list-text-color: rgb(175, 176, 177);--btn-patinator-text-color: var(--text-color);--btn-paginator-hover-color: #2e2e2e;--toc-highlight: rgb(116, 178, 243);--tag-hover: rgb(43, 56, 62);--tb-odd-bg: #252526;--tb-even-bg: rgb(31, 31, 34);--tb-border-color: var(--tb-odd-bg);--footnote-target-bg: rgb(63, 81, 181);--btn-share-color: #6c757d;--btn-share-hover-color: #bfc1ca;--card-bg: #1e1e1e;--card-hovor-bg: #464d51;--card-shadow: rgb(21, 21, 21, 0.72) 0 6px 18px 0, rgb(137, 135, 135, 0.24) 0 0 0 1px;--kbd-wrap-color: #6a6a6a;--kbd-text-color: #d3d3d3;--kbd-bg-color: #242424;--prompt-text-color: rgb(216, 212, 212, 0.75);--prompt-tip-bg: rgb(22, 60, 36, 0.64);--prompt-tip-icon-color: rgb(15, 164, 15, 0.81);--prompt-info-bg: rgb(7, 59, 104, 0.8);--prompt-info-icon-color: #0075d1;--prompt-warning-bg: rgb(90, 69, 3, 0.88);--prompt-warning-icon-color: rgb(255, 165, 0, 0.8);--prompt-danger-bg: rgb(86, 28, 8, 0.8);--prompt-danger-icon-color: #cd0202;--tag-border: rgb(59, 79, 88);--tag-shadow: rgb(32, 33, 33);--dash-color: rgb(63, 65, 68);--search-tag-bg: #292828;--categories-border: rgb(64, 66, 69, 0.5);--categories-hover-bg: rgb(73, 75, 76);--categories-icon-hover-color: white;--timeline-node-bg: rgb(150, 152, 156);--timeline-color: rgb(63, 65, 68);--timeline-year-dot-color: var(--timeline-color);color-scheme:dark}html:not([data-mode]) .light,html[data-mode=dark] .light{display:none}html:not([data-mode]) .categories.card,html:not([data-mode]) .list-group-item,html[data-mode=dark] .categories.card,html[data-mode=dark] .list-group-item{background-color:var(--card-bg)}html:not([data-mode]) .categories .card-header,html[data-mode=dark] .categories .card-header{background-color:var(--card-header-bg)}html:not([data-mode]) .categories .list-group-item,html[data-mode=dark] .categories .list-group-item{border-left:none;border-right:none;padding-left:2rem;border-color:var(--categories-border)}html:not([data-mode]) .categories .list-group-item:last-child,html[data-mode=dark] .categories .list-group-item:last-child{border-bottom-color:var(--card-bg)}html:not([data-mode]) #archives li:nth-child(odd),html[data-mode=dark] #archives li:nth-child(odd){background-image:linear-gradient(to left, rgb(26, 26, 30), rgb(39, 39, 45), rgb(39, 39, 45), rgb(39, 39, 45), rgb(26, 26, 30))}html:not([data-mode]) #disqus_thread,html[data-mode=dark] #disqus_thread{color-scheme:none}html[data-mode=light]{--main-bg: white;--mask-bg: #c1c3c5;--main-border-color: #f3f3f3;--text-color: #34343c;--text-muted-color: #757575;--text-muted-hightlight-color: inherit;--heading-color: #2a2a2a;--label-color: #585858;--blockquote-border-color: #eeeeee;--blockquote-text-color: #757575;--link-color: #0056b2;--link-underline-color: #dee2e6;--button-bg: #ffffff;--btn-border-color: #e9ecef;--btn-backtotop-color: #686868;--btn-backtotop-border-color: #f1f1f1;--btn-box-shadow: #eaeaea;--checkbox-color: #c5c5c5;--checkbox-checked-color: #07a8f7;--row-cell-color: rgb(223, 233, 241, 0.64);--img-bg: radial-gradient( circle, rgb(255, 255, 255) 0%, rgb(239, 239, 239) 100% );--shimmer-bg: linear-gradient( 90deg, rgba(250, 250, 250, 0) 0%, rgba(232, 230, 230, 1) 50%, rgba(250, 250, 250, 0) 100% );--site-title-color: rgb(113, 113, 113);--site-subtitle-color: #717171;--sidebar-bg: #f6f8fa;--sidebar-border-color: #efefef;--sidebar-muted-color: #545454;--sidebar-active-color: #1d1d1d;--sidebar-hover-bg: rgb(223, 233, 241, 0.64);--sidebar-btn-bg: white;--sidebar-btn-color: #8e8e8e;--avatar-border-color: white;--topbar-bg: rgb(255, 255, 255, 0.7);--topbar-text-color: rgb(78, 78, 78);--search-border-color: rgb(240, 240, 240);--search-icon-color: #c2c6cc;--input-focus-border-color: #b8b8b8;--post-list-text-color: dimgray;--btn-patinator-text-color: #555555;--btn-paginator-hover-color: var(--sidebar-bg);--toc-highlight: #0550ae;--btn-share-color: gray;--btn-share-hover-color: #0d6efd;--card-bg: white;--card-hovor-bg: #e2e2e2;--card-shadow: rgb(104, 104, 104, 0.05) 0 2px 6px 0, rgba(211, 209, 209, 0.15) 0 0 0 1px;--footnote-target-bg: lightcyan;--tb-odd-bg: #fbfcfd;--tb-border-color: #eaeaea;--dash-color: silver;--kbd-wrap-color: #bdbdbd;--kbd-text-color: var(--text-color);--kbd-bg-color: white;--prompt-text-color: rgb(46, 46, 46, 0.77);--prompt-tip-bg: rgb(123, 247, 144, 0.2);--prompt-tip-icon-color: #03b303;--prompt-info-bg: #e1f5fe;--prompt-info-icon-color: #0070cb;--prompt-warning-bg: rgb(255, 243, 205);--prompt-warning-icon-color: #ef9c03;--prompt-danger-bg: rgb(248, 215, 218, 0.56);--prompt-danger-icon-color: #df3c30;--tag-border: #dee2e6;--tag-shadow: var(--btn-border-color);--tag-hover: rgb(222, 226, 230);--search-tag-bg: #f8f9fa;--categories-border: rgba(0, 0, 0, 0.125);--categories-hover-bg: var(--btn-border-color);--categories-icon-hover-color: darkslategray;--timeline-color: rgba(0, 0, 0, 0.075);--timeline-node-bg: #c2c6cc;--timeline-year-dot-color: #ffffff}html[data-mode=light] [class^=prompt-]{--link-underline-color: rgb(219, 216, 216)}html[data-mode=light] .dark{display:none}}body{background:var(--main-bg);padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);color:var(--text-color);-webkit-font-smoothing:antialiased;font-family:"Source Sans Pro","Microsoft Yahei",sans-serif}h1{font-size:1.92rem}h2{font-size:1.54rem}h3{font-size:1.36rem}h4{font-size:1.18rem}h5{font-size:1rem}a{text-decoration:none}img{max-width:100%;height:auto;transition:all .35s ease-in-out}.blur img{-webkit-filter:blur(20px);filter:blur(20px)}blockquote{border-left:5px solid var(--blockquote-border-color);padding-left:1rem;color:var(--blockquote-text-color)}blockquote>p:last-child{margin-bottom:0}blockquote[class^=prompt-]{border-left:0;position:relative;padding:1rem 1rem 1rem 3rem;color:var(--prompt-text-color)}blockquote[class^=prompt-]::before{text-align:center;width:3rem;position:absolute;left:.25rem;margin-top:.4rem;text-rendering:auto;-webkit-font-smoothing:antialiased}blockquote.prompt-tip{background-color:var(--prompt-tip-bg)}blockquote.prompt-tip::before{content:"";color:var(--prompt-tip-icon-color);font:var(--fa-font-regular)}blockquote.prompt-info{background-color:var(--prompt-info-bg)}blockquote.prompt-info::before{content:"";color:var(--prompt-info-icon-color);font:var(--fa-font-solid)}blockquote.prompt-warning{background-color:var(--prompt-warning-bg)}blockquote.prompt-warning::before{content:"";color:var(--prompt-warning-icon-color);font:var(--fa-font-solid)}blockquote.prompt-danger{background-color:var(--prompt-danger-bg)}blockquote.prompt-danger::before{content:"";color:var(--prompt-danger-icon-color);font:var(--fa-font-solid)}kbd{font-family:inherit;display:inline-block;vertical-align:middle;line-height:1.3rem;min-width:1.75rem;text-align:center;margin:0 .3rem;padding-top:.1rem;color:var(--kbd-text-color);background-color:var(--kbd-bg-color);border-radius:.25rem;border:solid 1px var(--kbd-wrap-color);box-shadow:inset 0 -2px 0 var(--kbd-wrap-color)}hr{border-color:var(--main-border-color);opacity:1}footer{background-color:var(--main-bg);height:6rem;border-top:1px solid var(--main-border-color);display:flex}footer p{text-align:center;margin-bottom:0}.access{top:2rem;transition:top .2s ease-in-out;margin-top:3rem;margin-bottom:4rem}.access:only-child{position:-webkit-sticky;position:sticky}.access>section{padding-left:1rem;border-left:1px solid var(--main-border-color)}.access>section:not(:last-child){margin-bottom:4rem}.access .content{font-size:.9rem}#panel-wrapper .panel-heading{font-family:inherit;line-height:inherit;color:var(--label-color);font-size:inherit;font-weight:600}#panel-wrapper .post-tag{line-height:1.05rem;font-size:.85rem;border-radius:.8rem;padding:.3rem .5rem;margin:0 .35rem .5rem 0}#panel-wrapper .post-tag:hover{transition:all .3s ease-in}#access-lastmod a{color:inherit}.footnotes>ol{padding-left:2rem;margin-top:.5rem}.footnotes>ol>li:not(:last-child){margin-bottom:.3rem}.footnotes>ol>li>p{margin-left:.25em;margin-top:0;margin-bottom:0}a.footnote{margin-left:1px;margin-right:1px;padding-left:2px;padding-right:2px;border-bottom-style:none !important}a.reversefootnote{font-size:.6rem;line-height:1;position:relative;bottom:.25em;margin-left:.25em;border-bottom-style:none !important}.table-wrapper{overflow-x:auto;margin-bottom:1.5rem}.table-wrapper>table{min-width:100%;overflow-x:auto;border-spacing:0}.table-wrapper>table thead{border-bottom:solid 2px rgba(210,215,217,.75)}.table-wrapper>table tbody tr{border-bottom:1px solid var(--tb-border-color)}.table-wrapper>table tbody tr:nth-child(2n){background-color:var(--tb-even-bg)}.table-wrapper>table tbody tr:nth-child(2n+1){background-color:var(--tb-odd-bg)}.post-preview{border:0;background:var(--card-bg);box-shadow:var(--card-shadow)}.post-preview::before{content:"";width:100%;height:100%;position:absolute;background-color:var(--card-hovor-bg);opacity:0;transition:opacity .35s ease-in-out}.post-preview:hover::before{opacity:.3}main{line-height:1.75}main h1{margin-top:2rem;margin-bottom:1.5rem}main p>a.popup:not(.normal):not(.left):not(.right){position:relative;left:50%;transform:translateX(-50%)}.content{font-size:1.08rem;margin-top:2rem;overflow-wrap:break-word}.content a.popup{margin-top:.5rem;margin-bottom:.5rem;cursor:zoom-in}.content ol:not([class]),.content ol.task-list,.content ul:not([class]),.content ul.task-list{-webkit-padding-start:1.75rem;padding-inline-start:1.75rem}.content ol:not([class]) li,.content ol.task-list li,.content ul:not([class]) li,.content ul.task-list li{margin:.25rem 0;padding-left:.25rem}.content ol:not([class]) ol,.content ol:not([class]) ul,.content ol.task-list ol,.content ol.task-list ul,.content ul:not([class]) ol,.content ul:not([class]) ul,.content ul.task-list ol,.content ul.task-list ul{-webkit-padding-start:1.25rem;padding-inline-start:1.25rem;margin:.5rem 0}.content ul.task-list{-webkit-padding-start:1.25rem;padding-inline-start:1.25rem}.content ul.task-list li{list-style-type:none;padding-left:0}.content ul.task-list li>i{width:2rem;margin-left:-1.25rem;color:var(--checkbox-color)}.content ul.task-list li>i.checked{color:var(--checkbox-checked-color)}.content ul.task-list li ul{-webkit-padding-start:1.75rem;padding-inline-start:1.75rem}.content ul.task-list input[type=checkbox]{margin:0 .5rem .2rem -1.3rem;vertical-align:middle}.content dl>dd{margin-left:1rem}.content ::marker{color:var(--text-muted-color)}.post-tag{display:inline-block;min-width:2rem;text-align:center;border-radius:.5rem;border:1px solid var(--btn-border-color);padding:0 .4rem;color:var(--text-muted-color);line-height:1.3rem}.post-tag:not(:last-child){margin-right:.2rem}.rounded-10{border-radius:10px !important}.img-link{color:rgba(0,0,0,0);display:inline-flex}.shimmer{width:80%;margin-left:auto;margin-right:auto}.embed-video{width:100%;height:100%;margin-bottom:1rem;aspect-ratio:16/9}.embed-video.twitch{aspect-ratio:310/189}.embed-video.file{display:block;width:auto;height:auto;max-width:100%;max-height:100%;margin:auto;margin-bottom:0}.btn-lang{border:1px solid !important;padding:1px 3px;border-radius:3px;color:var(--link-color)}.btn-lang:focus{box-shadow:none}.loaded{display:block !important}.d-flex.loaded{display:flex !important}.unloaded{display:none !important}.visible{visibility:visible !important}.hidden{visibility:hidden !important}.flex-grow-1{flex-grow:1 !important}.btn-box-shadow{box-shadow:var(--card-shadow)}.text-muted{color:var(--text-muted-color) !important}.tooltip-inner{font-size:.7rem;max-width:220px;text-align:left}.btn.btn-outline-primary:not(.disabled):hover{border-color:#007bff !important}.disabled{color:#cec4c4;pointer-events:auto;cursor:not-allowed}.hide-border-bottom{border-bottom:none !important}.input-focus{box-shadow:none;border-color:var(--input-focus-border-color) !important;background:center !important;transition:background-color .15s ease-in-out,border-color .15s ease-in-out}.left{float:left;margin:.75rem 1rem 1rem 0}.right{float:right;margin:.75rem 0 1rem 1rem}figure .mfp-title{text-align:center;padding-right:0;margin-top:.5rem}.mfp-img{transition:none}.mermaid{text-align:center}mjx-container{overflow-y:hidden;min-width:auto !important}#sidebar{padding-left:0;padding-right:0;position:fixed;top:0;left:0;height:100%;overflow-y:auto;width:260px;z-index:99;background:var(--sidebar-bg);border-right:1px solid var(--sidebar-border-color);-ms-overflow-style:none;scrollbar-width:none}#sidebar::-webkit-scrollbar{display:none}#sidebar .sidebar-bottom .mode-toggle:hover,#sidebar .sidebar-bottom a:hover,#sidebar .site-title a:hover{color:var(--sidebar-active-color)}#sidebar #avatar{display:block;width:14rem;height:5rem;overflow:hidden;box-shadow:var(--avatar-border-color) 0 0 0 2px;transform:translateZ(0);background:#1e1e1e}#sidebar #avatar img{margin-top:25px;padding-left:10px;padding-right:10px;transition:transform .5s}#sidebar #avatar img:hover{transform:scale(1.1)}#sidebar .profile-wrapper{margin-top:2.5rem;margin-bottom:2.5rem;padding-left:1.25rem;padding-right:1.25rem;width:100%}#sidebar .site-title{font-family:inherit;font-weight:900;font-size:1.75rem;line-height:1.2;letter-spacing:.25px;margin-top:1.25rem;margin-bottom:.5rem;margin-left:1rem}#sidebar .site-title a{color:var(--site-title-color)}#sidebar .site-subtitle{font-size:95%;color:var(--site-subtitle-color);margin-top:.25rem;word-spacing:1px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#sidebar ul{margin-bottom:2rem}#sidebar ul li.nav-item{width:100%;padding-left:1rem;padding-right:1.5rem}#sidebar ul li.nav-item a.nav-link{padding-top:.6rem;padding-bottom:.6rem;display:flex;align-items:center;border-radius:.75rem;font-weight:600}#sidebar ul li.nav-item a.nav-link:hover{background-color:var(--sidebar-hover-bg)}#sidebar ul li.nav-item a.nav-link i{font-size:95%;margin-right:1.5rem}#sidebar ul li.nav-item a.nav-link span{font-size:90%;letter-spacing:.2px}#sidebar ul li.nav-item .nav-link-sub{width:155px}#sidebar ul li.nav-item.active .nav-link{color:var(--sidebar-active-color);background-color:var(--sidebar-hover-bg)}#sidebar ul li.nav-item.active .nav-link span{opacity:1}#sidebar ul li.nav-item:not(:first-child){margin-top:.25rem}#sidebar .ul-sublist{margin-bottom:0rem}#sidebar .sidebar-bottom{padding-left:2rem;padding-right:6rem;margin-bottom:1.5rem}#sidebar .sidebar-bottom .mode-toggle,#sidebar .sidebar-bottom a{width:1.75rem;height:1.75rem;margin-bottom:.5rem;border-radius:50%;color:var(--sidebar-btn-color);background-color:var(--sidebar-btn-bg);text-align:center;display:flex;align-items:center;justify-content:center;box-shadow:var(--sidebar-border-color) 0 0 0 1px}#sidebar .sidebar-bottom .mode-toggle:hover,#sidebar .sidebar-bottom a:hover{background-color:var(--sidebar-hover-bg)}#sidebar .sidebar-bottom a:not(:last-child){margin-right:.8rem}#sidebar .sidebar-bottom i{line-height:1.75rem}#sidebar .sidebar-bottom .mode-toggle{padding:0;border:0}#sidebar .sidebar-bottom .icon-border{margin-left:calc((.8rem - 3px)/2);margin-right:calc((.8rem - 3px)/2);background-color:var(--sidebar-btn-color);content:"";width:3px;height:3px;border-radius:50%;margin-bottom:.5rem}@media(hover: hover){#sidebar ul>li:last-child::after{transition:top .5s ease}.nav-link{transition:background-color .3s ease-in-out}.post-preview{transition:background-color .35s ease-in-out}}#search-result-wrapper{display:none;height:100%;width:100%;overflow:auto}#search-result-wrapper .content{margin-top:2rem}#topbar-wrapper{height:3rem;background-color:var(--topbar-bg)}#topbar button i{color:#999}#topbar #breadcrumb{font-size:1rem;color:var(--text-muted-color);padding-left:.5rem}#topbar #breadcrumb span:not(:last-child)::after{content:"›";padding:0 .3rem}::-webkit-input-placeholder{color:var(--text-muted-color) !important}::-moz-placeholder{color:var(--text-muted-color) !important}:-ms-input-placeholder{color:var(--text-muted-color) !important}::-ms-input-placeholder{color:var(--text-muted-color) !important}::placeholder{color:var(--text-muted-color) !important}:focus::-webkit-input-placeholder{opacity:.6}:focus::-moz-placeholder{opacity:.6}:focus:-ms-input-placeholder{opacity:.6}:focus::-ms-input-placeholder{opacity:.6}:focus::placeholder{opacity:.6}search{display:flex;width:100%;border-radius:1rem;border:1px solid var(--search-border-color);background:var(--main-bg);padding:0 .5rem}search i{z-index:2;font-size:.9rem;color:var(--search-icon-color)}#sidebar-trigger,#search-trigger{display:none}#search-cancel{color:var(--link-color);display:none;white-space:nowrap}#search-input{background:center;border:0;border-radius:0;padding:.18rem .3rem;color:var(--text-color);height:auto}#search-input:focus{box-shadow:none}#search-hints{padding:0 1rem}#search-hints h4{margin-bottom:1.5rem}#search-hints .post-tag{display:inline-block;line-height:1rem;font-size:1rem;background:var(--search-tag-bg);border:none;padding:.5rem;margin:0 1.25rem 1rem 0}#search-hints .post-tag::before{content:"#";color:var(--text-muted-color);padding-right:.2rem}#search-results{padding-bottom:3rem}#search-results a{font-size:1.4rem;line-height:2.5rem}#search-results>article{width:100%}#search-results>article:not(:last-child){margin-bottom:1rem}#search-results>article i{color:#818182;margin-right:.15rem;font-size:80%}#search-results>article>p{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}#topbar-title{display:none;font-size:1.1rem;font-weight:600;font-family:sans-serif;color:var(--topbar-text-color);text-align:center;width:70%;overflow:hidden;text-overflow:ellipsis;word-break:keep-all;white-space:nowrap}#mask{display:none;position:fixed;inset:0 0 0 0;height:100%;width:100%;z-index:1}[sidebar-display] #mask{display:block !important}#main-wrapper{position:relative;padding-left:0;padding-right:0}#main-wrapper>.container{min-height:100vh}#topbar-wrapper.row,#main-wrapper>.container>.row,#search-result-wrapper>.row{margin-left:0;margin-right:0}#tail-wrapper>:not(script){margin-top:3rem}#back-to-top{display:none;z-index:1;cursor:pointer;position:fixed;right:1rem;bottom:4.625rem;background:var(--button-bg);color:var(--btn-backtotop-color);padding:0;width:2.75rem;height:2.75rem;border-radius:50%;border:1px solid var(--btn-backtotop-border-color);transition:transform .2s ease-out;-webkit-transition:transform .2s ease-out}#back-to-top:hover{transform:translate3d(0, -5px, 0);-webkit-transform:translate3d(0, -5px, 0)}#back-to-top i{line-height:2.75rem;position:relative;bottom:2px}@-webkit-keyframes popup{from{opacity:0;bottom:0}}@keyframes popup{from{opacity:0;bottom:0}}#notification .toast-header{background:none;border-bottom:none;color:inherit}#notification .toast-body{font-family:Lato,sans-serif;line-height:1.25rem}#notification .toast-body button{font-size:90%;min-width:4rem}#notification.toast.show{display:block;min-width:20rem;border-radius:.5rem;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background-color:rgba(255,255,255,.5);color:rgba(27,27,30,.7294117647);position:fixed;left:50%;bottom:20%;transform:translateX(-50%);-webkit-animation:popup .8s;animation:popup .8s}@media all and (max-width: 576px){main .content>blockquote[class^=prompt-]{margin-left:-1rem;margin-right:-1rem;border-radius:0;max-width:none}#avatar{width:5rem;height:5rem}}@media all and (max-width: 768px){#main-wrapper>.container,#topbar{max-width:100%}#main-wrapper>.container{padding-left:0;padding-right:0}}@media all and (max-width: 849px){footer{transition:transform .4s ease;height:6rem;padding:1.5rem 0}.sidebarImg{position:relative !important}[sidebar-display] #sidebar{transform:translateX(0)}[sidebar-display] #main-wrapper{transform:translateX(260px)}[sidebar-display] #back-to-top{visibility:hidden}#sidebar{transition:transform .4s ease;transform:translateX(-260px);-webkit-transform:translateX(-260px)}#main-wrapper{transition:transform .4s ease}#topbar,#main-wrapper>.container{max-width:100%}#search-result-wrapper{width:100%}#breadcrumb,search{display:none}#topbar-wrapper{transition:transform .4s ease,top .2s ease;left:0}main,#panel-wrapper{margin-top:0}#topbar-title,#sidebar-trigger,#search-trigger{display:block}#search-result-wrapper .content{letter-spacing:0}#tags{justify-content:center !important}h1.dynamic-title{display:none}h1.dynamic-title~.content{margin-top:2.5rem}.shimmer{width:100%}}@media all and (min-width: 850px){html{overflow-y:scroll}#main-wrapper{margin-left:260px}#sidebar .profile-wrapper{margin-top:3rem}#search-hints{display:none}search{max-width:200px}#search-result-wrapper{max-width:1700px;justify-content:start !important}main h1{margin-top:3rem}div.content .table-wrapper>table{min-width:70%}#back-to-top{right:5%;bottom:4.625rem}#topbar-title{text-align:left}}@media all and (max-width: 991px){.threats{overflow-y:visible !important;height:auto !important;margin-left:0px !important}footer{display:block !important}}@media all and (min-width: 992px)and (max-width: 1199px){#main-wrapper>.container .col-lg-11{flex:0 0 96%;max-width:96%}}@media all and (min-width: 850px)and (max-width: 1199px){#search-results>div{max-width:700px}#breadcrumb{width:65%;overflow:hidden;text-overflow:ellipsis;word-break:keep-all;white-space:nowrap}}@media all and (max-width: 1199px){#panel-wrapper{display:none}#main-wrapper>.container>div.row{justify-content:center !important}}@media all and (min-width: 1200px){search{margin-right:4rem}#search-input{transition:all .3s ease-in-out}#search-results>article{width:45%}#search-results>article:nth-child(odd){margin-right:1.5rem}#search-results>article:nth-child(even){margin-left:1.5rem}#search-results>article:last-child:nth-child(odd){position:relative;right:24.3%}.content{font-size:1.03rem}}@media all and (min-width: 1400px){#back-to-top{right:calc((100vw - 260px - 1140px)/2 + 3rem)}}@media all and (min-width: 1550px){#main-wrapper{margin-left:300px}#topbar-wrapper{left:300px}search{margin-right:calc(225px - .75rem)}#main-wrapper>.container{max-width:1250px;padding-left:1.75rem !important;padding-right:1.75rem !important}main.col-12,#tail-wrapper{padding-right:4.5rem !important}#back-to-top{right:calc((100vw - 300px - 1700px)/2 + 2rem)}}@media all and (min-width: 1551px){#main-wrapper{margin-left:300px}#topbar-wrapper{left:300px}search{margin-right:calc(225px - .75rem)}#main-wrapper>.container{max-width:1700px;padding-left:1.75rem !important;padding-right:1.75rem !important}main.col-12,#tail-wrapper{padding-right:4.5rem !important}#back-to-top{right:calc((100vw - 300px - 1700px)/2 + 2rem)}}#post-list{margin-top:2rem}#post-list .card-wrapper:hover{text-decoration:none}#post-list .card-wrapper:not(:last-child){margin-bottom:1.25rem}#post-list .card{border:0;background:none}#post-list .card .preview-img img,#post-list .card .preview-img{border-radius:.625rem .625rem 0 0}#post-list .card .card-body{height:100%;padding:1rem}#post-list .card .card-body .card-title{color:var(--heading-color) !important;font-size:1.25rem}#post-list .card .card-body .post-meta,#post-list .card .card-body .card-text.content{color:var(--text-muted-color) !important}#post-list .card .card-body .card-text.content p{line-height:1.5;margin:0}#post-list .card .card-body .post-meta i:not(:first-child){margin-left:1.5rem}#post-list .card .card-body .post-meta em{color:inherit}#post-list .card .card-body .post-meta>div:first-child{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pagination{color:var(--text-color);font-family:Lato,sans-serif;justify-content:space-evenly}.pagination a:hover{text-decoration:none}.pagination .page-item .page-link{color:var(--btn-patinator-text-color);padding:0 .6rem;display:-webkit-box;-webkit-box-pack:center;-webkit-box-align:center;border-radius:.5rem;border:0;background-color:inherit}.pagination .page-item.active .page-link{background-color:var(--btn-paginator-hover-color)}.pagination .page-item:not(.active) .page-link:hover{box-shadow:inset var(--btn-border-color) 0 0 0 1px}.pagination .page-item.disabled{cursor:not-allowed}.pagination .page-item.disabled .page-link{color:rgba(108,117,125,.57)}@media all and (min-width: 768px){#post-list .card .preview-img,#post-list .card .preview-img img{border-radius:0 .625rem .625rem 0}#post-list .card .card-body{padding:1.75rem 1.75rem 1.25rem 1.75rem}#post-list .card .card-body .card-text{display:inherit !important}#post-list .card .card-body .post-meta i:not(:first-child){margin-left:1.75rem}}@media all and (max-width: 830px){.pagination .page-item:not(:first-child):not(:last-child){display:none}}@media all and (min-width: 831px){#post-list{margin-top:2.5rem}.pagination{font-size:.85rem;justify-content:center}.pagination .page-item:not(:last-child){margin-right:.7rem}.pagination .page-index{display:none}}.post-navigation .btn.disabled,.post-navigation .btn{width:50%;position:relative;border-color:var(--btn-border-color)}header .post-desc{font-size:1.125rem;line-height:1.6}header .post-meta span+span::before{content:"•";padding-left:.25rem;padding-right:.25rem}header .post-meta em a{color:inherit}.post-tail-wrapper{margin-top:6rem;border-bottom:1px double var(--main-border-color)}.post-tail-wrapper .license-wrapper{line-height:1.2rem}.post-tail-wrapper .share-wrapper{vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.post-tail-wrapper .share-wrapper .share-icons>*,.post-tail-wrapper .share-wrapper .share-icons i{font-size:1.125rem}.post-tail-wrapper .share-wrapper .share-icons{display:flex}.post-tail-wrapper .share-wrapper .share-icons i{color:var(--btn-share-color)}.post-tail-wrapper .share-wrapper .share-icons>*{margin-left:.5rem}.post-tail-wrapper .share-wrapper .share-icons button{padding:0;border:none;line-height:inherit}.share-mastodon{--wc-stm-font-family: $font-family-base;--wc-stm-dialog-background-color: var(--card-bg);--wc-stm-form-button-border: 1px solid var(--btn-border-color);--wc-stm-form-submit-background-color: var(--sidebar-btn-bg);--wc-stm-form-cancel-background-color: var(--sidebar-btn-bg);--wc-stm-form-button-background-color-hover: #007bff;--wc-stm-form-button-color-hover: white;font-size:1rem}.post-tags{line-height:2rem}.post-navigation .btn:not(:hover){color:var(--link-color)}.post-navigation .btn:hover:not(.disabled)::before{color:#f5f5f5}.post-navigation .btn.disabled{pointer-events:auto;cursor:not-allowed;background:none;color:gray}.post-navigation .btn.btn-outline-primary.disabled:focus{box-shadow:none}.post-navigation .btn::before{color:var(--text-muted-color);font-size:.65rem;text-transform:uppercase;content:attr(aria-label)}.post-navigation .btn:first-child{border-radius:.625rem 0 0 .625rem;left:.5px}.post-navigation .btn:last-child{border-radius:0 .625rem .625rem 0;right:.5px}.post-navigation p{font-size:1.1rem;line-height:1.5rem;margin-top:.3rem;white-space:normal}@media(hover: hover){.post-navigation .btn,.post-navigation .btn::before{transition:all .35s ease-in-out}}@-webkit-keyframes fade-up{from{opacity:0;position:relative;top:2rem}to{opacity:1;position:relative;top:0}}@keyframes fade-up{from{opacity:0;position:relative;top:2rem}to{opacity:1;position:relative;top:0}}#toc-wrapper{border-left:1px solid rgba(158,158,158,.17);position:-webkit-sticky;position:sticky;top:4rem;transition:top .2s ease-in-out;-webkit-animation:fade-up .8s;animation:fade-up .8s}#toc-wrapper ul{list-style:none;font-size:.85rem;line-height:1.25;padding-left:0}#toc-wrapper ul li:not(:last-child){margin:.4rem 0}#toc-wrapper ul li a{padding:.2rem 0 .2rem 1.25rem}#toc-wrapper ul .toc-link{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#toc-wrapper ul .toc-link:hover{color:var(--toc-highlight);text-decoration:none}#toc-wrapper ul .toc-link::before{display:none}#toc-wrapper ul .is-active-link{color:var(--toc-highlight) !important;font-weight:600}#toc-wrapper ul .is-active-link::before{display:inline-block;width:1px;left:-1px;height:1.25rem;background-color:var(--toc-highlight) !important}#toc-wrapper ul ul{padding-left:.75rem}#related-posts>h3{color:var(--label-color);font-size:1.1rem;font-weight:600}#related-posts time{color:var(--text-muted-color)}#related-posts p{font-size:.9rem;margin-bottom:.5rem;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}#disqus_thread{min-height:8.5rem}.utterances{max-width:100%}.post-tail-wrapper .share-wrapper .share-icons>*:hover i{color:var(--btn-share-hover-color) !important}.share-label{color:inherit;font-size:inherit;font-weight:400}.share-label::after{content:":"}@media all and (max-width: 576px){.post-tail-bottom{flex-wrap:wrap-reverse !important}.post-tail-bottom>div:first-child{width:100%;margin-top:1rem}}@media all and (max-width: 768px){.content>p>img{max-width:calc(100% + 1rem)}}@media all and (max-width: 849px){.post-navigation{padding-left:0;padding-right:0;margin-left:-0.5rem;margin-right:-0.5rem}}.threats{margin-left:27px;display:inline-block;position:sticky;top:0;overflow-y:scroll;height:100vh}.devprops{display:inline-block}.labelCheckbox{margin-left:10px}.outerCheckbox{display:flex}.threatsHeader{display:flex}.downloadCSV{margin-top:2.5rem;margin-left:20px;height:min-content}.relatedthreats{font-size:1.36rem}.btn-home{margin-right:15px;margin-bottom:5px}.threatLinks ins{text-decoration:none !important}.propertiesTable{border:1px solid}.propertiesTable td:nth-child(even){background-color:var(--row-cell-color)}.propertiesTable td{border:1px solid;border-collapse:collapse;text-align:center}.propertiesTable .rowTIDPropTable{border:0px;border-right:1px solid;border-bottom:1px solid;width:5%}.propertiesTable .rowDescPropTable{border:0px;border-bottom:1px solid;width:30%}.propertiesTable .categoryName{position:sticky;top:0;background:var(--main-bg);padding:5px}tr:last-child>td{border-bottom:0px !important}.threatType{text-align:center;word-wrap:break-word;position:sticky;top:0;background:var(--main-bg);padding:5px}.threatEnteries{border-right:1px solid;border-left:1px solid}.threatEnteries .threatContent{border-bottom:1px solid;border-top:1px solid;padding:5px;text-align:center;word-wrap:break-word}.threatEnteries .threatContent:nth-child(odd){background-color:var(--row-cell-color)}.dropdown-btn{text-decoration:none;color:var(--sidebar-muted-color);display:block;border:none;background:none;text-align:left}.dropdown-list{display:none;padding-left:35px}.row-dropdown{display:flex;--bs-gutter-x: 4.2rem;display:flex;margin-left:calc(-0.5*var(--bs-gutter-x));max-width:100%;padding-right:calc(var(--bs-gutter-x)*.1);padding-left:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col-dropdown{width:105%;margin:auto}i.fa-fw.fas.fa-circle-arrow-down{padding-right:25px;padding-left:10px;padding-top:10px;padding-bottom:10px;border-radius:.75rem}i.fa-fw.fas.fa-circle-arrow-down:hover{background-color:var(--sidebar-hover-bg)}i.fa-fw.fas.fa-circle-arrow-up{display:none;padding-right:25px;padding-left:10px;padding-top:10px;padding-bottom:10px;border-radius:.75rem}i.fa-fw.fas.fa-circle-arrow-up:hover{background-color:var(--sidebar-hover-bg)}.sidebarImg{position:sticky;top:0;background:var(--sidebar-bg)}/*# sourceMappingURL=jekyll-theme-chirpy.css.map */ \ No newline at end of file +header .post-desc,#search-results a,h5,h4,h3,h2,h1{color:var(--heading-color);font-weight:400;font-family:Lato,"Microsoft Yahei",sans-serif}main h5,main h4,main h3,main h2{margin-top:2.5rem;margin-bottom:1.25rem}main h5:focus,main h4:focus,main h3:focus,main h2:focus{outline:none}h5 .anchor,h4 .anchor,h3 .anchor,h2 .anchor{font-size:80%}@media(hover: hover){h5 .anchor,h4 .anchor,h3 .anchor,h2 .anchor{visibility:hidden;opacity:0;transition:opacity .25s ease-in,visibility 0s ease-in .25s}h5:hover .anchor,h4:hover .anchor,h3:hover .anchor,h2:hover .anchor{visibility:visible;opacity:1;transition:opacity .25s ease-in,visibility 0s ease-in 0s}}.post-tags .post-tag:hover,.tag:hover{background:var(--tag-hover);transition:background .35s ease-in-out}.table-wrapper>table tbody tr td,.table-wrapper>table thead th{padding:.4rem 1rem;font-size:95%;white-space:nowrap}.post-tags .post-tag:hover,.post-tail-wrapper .license-wrapper>a:hover,#search-results a:hover,#topbar #breadcrumb a:hover,.content a:not(.img-link):hover,.post-meta a:not([class]):hover,#access-lastmod a:hover,footer a:hover{color:#d2603a !important;border-bottom:1px solid #d2603a;text-decoration:none}#search-results a,#search-hints .post-tag,a{color:var(--link-color)}.post-tail-wrapper .post-meta a:not(:hover),.content a:not(.img-link){border-bottom:1px solid var(--link-underline-color)}#sidebar .sidebar-bottom a,#sidebar .site-title a,#sidebar .profile-wrapper{transition:all .3s ease-in-out}#sidebar .sidebar-bottom .icon-border,.content a.popup,i.far,i.fas,.code-header{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.post-tags .post-tag:hover,#search-results a,main .categories a:not(:hover),main #tags a:not(:hover),main #archives a:not(:hover),#access-lastmod a{border-bottom:none}.post-tail-wrapper .share-wrapper .share-icons button,#search-cancel,.code-header button{cursor:pointer}#related-posts time,#post-list .card .card-body .post-meta em,.post-meta em{font-style:normal}.embed-video,.post-preview::before,.post-preview,blockquote[class^=prompt-],.code-header button,div[class^=language-],.highlight{border-radius:.625rem}.embed-video+em,.content a.popup+em{display:block;text-align:center;font-style:normal;font-size:80%;padding:0;color:#6d6c6c}#sidebar .sidebar-bottom .mode-toggle,#sidebar a{color:var(--sidebar-muted-color);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#related-posts .card h4,#post-list .card .card-body .card-text.content p,#post-list .card .card-body .card-title{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical}.post-tail-wrapper .license-wrapper>a,header .post-meta em,header .post-meta time,footer em,footer a{color:var(--text-muted-hightlight-color);font-weight:600}.post-tail-wrapper .license-wrapper span:last-child,.post-tail-wrapper,.post-meta{font-size:.85rem}#related-posts time,footer{font-size:.8rem}sup:target,.footnotes>ol>li:target{background-color:var(--footnote-target-bg);width:-moz-fit-content;width:-webkit-fit-content;width:fit-content;transition:background-color 1.75s ease-in-out}@media(prefers-color-scheme: light){html:not([data-mode]),html[data-mode=light]{--language-border-color: #ececec;--highlight-bg-color: #f6f8fa;--highlighter-rouge-color: #3f596f;--highlight-lineno-color: #9e9e9e;--inline-code-bg: #f6f6f7;--code-color: #3a3a3a;--code-header-text-color: #a3a3a3;--code-header-muted-color: #e5e5e5;--code-header-icon-color: #c9c8c8;--clipboard-checked-color: #43c743}html:not([data-mode]) [class^=prompt-],html[data-mode=light] [class^=prompt-]{--inline-code-bg: #fbfafa}html:not([data-mode]) .highlight table td,html[data-mode=light] .highlight table td{padding:5px}html:not([data-mode]) .highlight table pre,html[data-mode=light] .highlight table pre{margin:0}html:not([data-mode]) .highlight,html:not([data-mode]) .highlight .w,html[data-mode=light] .highlight,html[data-mode=light] .highlight .w{color:#24292f;background-color:#f6f8fa}html:not([data-mode]) .highlight .k,html:not([data-mode]) .highlight .kd,html:not([data-mode]) .highlight .kn,html:not([data-mode]) .highlight .kp,html:not([data-mode]) .highlight .kr,html:not([data-mode]) .highlight .kt,html:not([data-mode]) .highlight .kv,html[data-mode=light] .highlight .k,html[data-mode=light] .highlight .kd,html[data-mode=light] .highlight .kn,html[data-mode=light] .highlight .kp,html[data-mode=light] .highlight .kr,html[data-mode=light] .highlight .kt,html[data-mode=light] .highlight .kv{color:#cf222e}html:not([data-mode]) .highlight .gr,html[data-mode=light] .highlight .gr{color:#f6f8fa}html:not([data-mode]) .highlight .gd,html[data-mode=light] .highlight .gd{color:#82071e;background-color:#ffebe9}html:not([data-mode]) .highlight .nb,html[data-mode=light] .highlight .nb{color:#953800}html:not([data-mode]) .highlight .nc,html[data-mode=light] .highlight .nc{color:#953800}html:not([data-mode]) .highlight .no,html[data-mode=light] .highlight .no{color:#953800}html:not([data-mode]) .highlight .nn,html[data-mode=light] .highlight .nn{color:#953800}html:not([data-mode]) .highlight .sr,html[data-mode=light] .highlight .sr{color:#116329}html:not([data-mode]) .highlight .na,html[data-mode=light] .highlight .na{color:#116329}html:not([data-mode]) .highlight .nt,html[data-mode=light] .highlight .nt{color:#116329}html:not([data-mode]) .highlight .gi,html[data-mode=light] .highlight .gi{color:#116329;background-color:#dafbe1}html:not([data-mode]) .highlight .kc,html[data-mode=light] .highlight .kc{color:#0550ae}html:not([data-mode]) .highlight .l,html:not([data-mode]) .highlight .ld,html:not([data-mode]) .highlight .m,html:not([data-mode]) .highlight .mb,html:not([data-mode]) .highlight .mf,html:not([data-mode]) .highlight .mh,html:not([data-mode]) .highlight .mi,html:not([data-mode]) .highlight .il,html:not([data-mode]) .highlight .mo,html:not([data-mode]) .highlight .mx,html[data-mode=light] .highlight .l,html[data-mode=light] .highlight .ld,html[data-mode=light] .highlight .m,html[data-mode=light] .highlight .mb,html[data-mode=light] .highlight .mf,html[data-mode=light] .highlight .mh,html[data-mode=light] .highlight .mi,html[data-mode=light] .highlight .il,html[data-mode=light] .highlight .mo,html[data-mode=light] .highlight .mx{color:#0550ae}html:not([data-mode]) .highlight .sb,html[data-mode=light] .highlight .sb{color:#0550ae}html:not([data-mode]) .highlight .bp,html[data-mode=light] .highlight .bp{color:#0550ae}html:not([data-mode]) .highlight .ne,html[data-mode=light] .highlight .ne{color:#0550ae}html:not([data-mode]) .highlight .nl,html[data-mode=light] .highlight .nl{color:#0550ae}html:not([data-mode]) .highlight .py,html[data-mode=light] .highlight .py{color:#0550ae}html:not([data-mode]) .highlight .nv,html:not([data-mode]) .highlight .vc,html:not([data-mode]) .highlight .vg,html:not([data-mode]) .highlight .vi,html:not([data-mode]) .highlight .vm,html[data-mode=light] .highlight .nv,html[data-mode=light] .highlight .vc,html[data-mode=light] .highlight .vg,html[data-mode=light] .highlight .vi,html[data-mode=light] .highlight .vm{color:#0550ae}html:not([data-mode]) .highlight .o,html:not([data-mode]) .highlight .ow,html[data-mode=light] .highlight .o,html[data-mode=light] .highlight .ow{color:#0550ae}html:not([data-mode]) .highlight .gh,html[data-mode=light] .highlight .gh{color:#0550ae;font-weight:bold}html:not([data-mode]) .highlight .gu,html[data-mode=light] .highlight .gu{color:#0550ae;font-weight:bold}html:not([data-mode]) .highlight .s,html:not([data-mode]) .highlight .sa,html:not([data-mode]) .highlight .sc,html:not([data-mode]) .highlight .dl,html:not([data-mode]) .highlight .sd,html:not([data-mode]) .highlight .s2,html:not([data-mode]) .highlight .se,html:not([data-mode]) .highlight .sh,html:not([data-mode]) .highlight .sx,html:not([data-mode]) .highlight .s1,html:not([data-mode]) .highlight .ss,html[data-mode=light] .highlight .s,html[data-mode=light] .highlight .sa,html[data-mode=light] .highlight .sc,html[data-mode=light] .highlight .dl,html[data-mode=light] .highlight .sd,html[data-mode=light] .highlight .s2,html[data-mode=light] .highlight .se,html[data-mode=light] .highlight .sh,html[data-mode=light] .highlight .sx,html[data-mode=light] .highlight .s1,html[data-mode=light] .highlight .ss{color:#0a3069}html:not([data-mode]) .highlight .nd,html[data-mode=light] .highlight .nd{color:#8250df}html:not([data-mode]) .highlight .nf,html:not([data-mode]) .highlight .fm,html[data-mode=light] .highlight .nf,html[data-mode=light] .highlight .fm{color:#8250df}html:not([data-mode]) .highlight .err,html[data-mode=light] .highlight .err{color:#f6f8fa;background-color:#82071e}html:not([data-mode]) .highlight .c,html:not([data-mode]) .highlight .ch,html:not([data-mode]) .highlight .cd,html:not([data-mode]) .highlight .cm,html:not([data-mode]) .highlight .cp,html:not([data-mode]) .highlight .cpf,html:not([data-mode]) .highlight .c1,html:not([data-mode]) .highlight .cs,html[data-mode=light] .highlight .c,html[data-mode=light] .highlight .ch,html[data-mode=light] .highlight .cd,html[data-mode=light] .highlight .cm,html[data-mode=light] .highlight .cp,html[data-mode=light] .highlight .cpf,html[data-mode=light] .highlight .c1,html[data-mode=light] .highlight .cs{color:#68717a}html:not([data-mode]) .highlight .gl,html[data-mode=light] .highlight .gl{color:#68717a}html:not([data-mode]) .highlight .gt,html[data-mode=light] .highlight .gt{color:#68717a}html:not([data-mode]) .highlight .ni,html[data-mode=light] .highlight .ni{color:#24292f}html:not([data-mode]) .highlight .si,html[data-mode=light] .highlight .si{color:#24292f}html:not([data-mode]) .highlight .ge,html[data-mode=light] .highlight .ge{color:#24292f;font-style:italic}html:not([data-mode]) .highlight .gs,html[data-mode=light] .highlight .gs{color:#24292f;font-weight:bold}html[data-mode=dark]{--language-border-color: #2d2d2d;--highlight-bg-color: #151515;--highlighter-rouge-color: #c9def1;--highlight-lineno-color: #808080;--inline-code-bg: #323238;--code-color: #b0b0b0;--code-header-text-color: #6a6a6a;--code-header-muted-color: #353535;--code-header-icon-color: #565656;--clipboard-checked-color: #2bcc2b;--filepath-text-color: #cacaca}html[data-mode=dark] .highlight .gp{color:#87939d}html[data-mode=dark] .highlight table td{padding:5px}html[data-mode=dark] .highlight table pre{margin:0}html[data-mode=dark] .highlight,html[data-mode=dark] .highlight .w{color:#d0d0d0;background-color:#151515}html[data-mode=dark] .highlight .err{color:#151515;background-color:#ac4142}html[data-mode=dark] .highlight .c,html[data-mode=dark] .highlight .ch,html[data-mode=dark] .highlight .cd,html[data-mode=dark] .highlight .cm,html[data-mode=dark] .highlight .cpf,html[data-mode=dark] .highlight .c1,html[data-mode=dark] .highlight .cs{color:#848484}html[data-mode=dark] .highlight .cp{color:#f4bf75}html[data-mode=dark] .highlight .nt{color:#f4bf75}html[data-mode=dark] .highlight .o,html[data-mode=dark] .highlight .ow{color:#d0d0d0}html[data-mode=dark] .highlight .p,html[data-mode=dark] .highlight .pi{color:#d0d0d0}html[data-mode=dark] .highlight .gi{color:#90a959}html[data-mode=dark] .highlight .gd{color:#f08a8b;background-color:#320000}html[data-mode=dark] .highlight .gh{color:#6a9fb5;background-color:#151515;font-weight:bold}html[data-mode=dark] .highlight .k,html[data-mode=dark] .highlight .kn,html[data-mode=dark] .highlight .kp,html[data-mode=dark] .highlight .kr,html[data-mode=dark] .highlight .kv{color:#aa759f}html[data-mode=dark] .highlight .kc{color:#d28445}html[data-mode=dark] .highlight .kt{color:#d28445}html[data-mode=dark] .highlight .kd{color:#d28445}html[data-mode=dark] .highlight .s,html[data-mode=dark] .highlight .sb,html[data-mode=dark] .highlight .sc,html[data-mode=dark] .highlight .dl,html[data-mode=dark] .highlight .sd,html[data-mode=dark] .highlight .s2,html[data-mode=dark] .highlight .sh,html[data-mode=dark] .highlight .sx,html[data-mode=dark] .highlight .s1{color:#90a959}html[data-mode=dark] .highlight .sa{color:#aa759f}html[data-mode=dark] .highlight .sr{color:#75b5aa}html[data-mode=dark] .highlight .si{color:#b76d45}html[data-mode=dark] .highlight .se{color:#b76d45}html[data-mode=dark] .highlight .nn{color:#f4bf75}html[data-mode=dark] .highlight .nc{color:#f4bf75}html[data-mode=dark] .highlight .no{color:#f4bf75}html[data-mode=dark] .highlight .na{color:#6a9fb5}html[data-mode=dark] .highlight .m,html[data-mode=dark] .highlight .mb,html[data-mode=dark] .highlight .mf,html[data-mode=dark] .highlight .mh,html[data-mode=dark] .highlight .mi,html[data-mode=dark] .highlight .il,html[data-mode=dark] .highlight .mo,html[data-mode=dark] .highlight .mx{color:#90a959}html[data-mode=dark] .highlight .ss{color:#90a959}}@media(prefers-color-scheme: dark){html:not([data-mode]),html[data-mode=dark]{--language-border-color: #2d2d2d;--highlight-bg-color: #151515;--highlighter-rouge-color: #c9def1;--highlight-lineno-color: #808080;--inline-code-bg: #323238;--code-color: #b0b0b0;--code-header-text-color: #6a6a6a;--code-header-muted-color: #353535;--code-header-icon-color: #565656;--clipboard-checked-color: #2bcc2b;--filepath-text-color: #cacaca}html:not([data-mode]) .highlight .gp,html[data-mode=dark] .highlight .gp{color:#87939d}html:not([data-mode]) .highlight table td,html[data-mode=dark] .highlight table td{padding:5px}html:not([data-mode]) .highlight table pre,html[data-mode=dark] .highlight table pre{margin:0}html:not([data-mode]) .highlight,html:not([data-mode]) .highlight .w,html[data-mode=dark] .highlight,html[data-mode=dark] .highlight .w{color:#d0d0d0;background-color:#151515}html:not([data-mode]) .highlight .err,html[data-mode=dark] .highlight .err{color:#151515;background-color:#ac4142}html:not([data-mode]) .highlight .c,html:not([data-mode]) .highlight .ch,html:not([data-mode]) .highlight .cd,html:not([data-mode]) .highlight .cm,html:not([data-mode]) .highlight .cpf,html:not([data-mode]) .highlight .c1,html:not([data-mode]) .highlight .cs,html[data-mode=dark] .highlight .c,html[data-mode=dark] .highlight .ch,html[data-mode=dark] .highlight .cd,html[data-mode=dark] .highlight .cm,html[data-mode=dark] .highlight .cpf,html[data-mode=dark] .highlight .c1,html[data-mode=dark] .highlight .cs{color:#848484}html:not([data-mode]) .highlight .cp,html[data-mode=dark] .highlight .cp{color:#f4bf75}html:not([data-mode]) .highlight .nt,html[data-mode=dark] .highlight .nt{color:#f4bf75}html:not([data-mode]) .highlight .o,html:not([data-mode]) .highlight .ow,html[data-mode=dark] .highlight .o,html[data-mode=dark] .highlight .ow{color:#d0d0d0}html:not([data-mode]) .highlight .p,html:not([data-mode]) .highlight .pi,html[data-mode=dark] .highlight .p,html[data-mode=dark] .highlight .pi{color:#d0d0d0}html:not([data-mode]) .highlight .gi,html[data-mode=dark] .highlight .gi{color:#90a959}html:not([data-mode]) .highlight .gd,html[data-mode=dark] .highlight .gd{color:#f08a8b;background-color:#320000}html:not([data-mode]) .highlight .gh,html[data-mode=dark] .highlight .gh{color:#6a9fb5;background-color:#151515;font-weight:bold}html:not([data-mode]) .highlight .k,html:not([data-mode]) .highlight .kn,html:not([data-mode]) .highlight .kp,html:not([data-mode]) .highlight .kr,html:not([data-mode]) .highlight .kv,html[data-mode=dark] .highlight .k,html[data-mode=dark] .highlight .kn,html[data-mode=dark] .highlight .kp,html[data-mode=dark] .highlight .kr,html[data-mode=dark] .highlight .kv{color:#aa759f}html:not([data-mode]) .highlight .kc,html[data-mode=dark] .highlight .kc{color:#d28445}html:not([data-mode]) .highlight .kt,html[data-mode=dark] .highlight .kt{color:#d28445}html:not([data-mode]) .highlight .kd,html[data-mode=dark] .highlight .kd{color:#d28445}html:not([data-mode]) .highlight .s,html:not([data-mode]) .highlight .sb,html:not([data-mode]) .highlight .sc,html:not([data-mode]) .highlight .dl,html:not([data-mode]) .highlight .sd,html:not([data-mode]) .highlight .s2,html:not([data-mode]) .highlight .sh,html:not([data-mode]) .highlight .sx,html:not([data-mode]) .highlight .s1,html[data-mode=dark] .highlight .s,html[data-mode=dark] .highlight .sb,html[data-mode=dark] .highlight .sc,html[data-mode=dark] .highlight .dl,html[data-mode=dark] .highlight .sd,html[data-mode=dark] .highlight .s2,html[data-mode=dark] .highlight .sh,html[data-mode=dark] .highlight .sx,html[data-mode=dark] .highlight .s1{color:#90a959}html:not([data-mode]) .highlight .sa,html[data-mode=dark] .highlight .sa{color:#aa759f}html:not([data-mode]) .highlight .sr,html[data-mode=dark] .highlight .sr{color:#75b5aa}html:not([data-mode]) .highlight .si,html[data-mode=dark] .highlight .si{color:#b76d45}html:not([data-mode]) .highlight .se,html[data-mode=dark] .highlight .se{color:#b76d45}html:not([data-mode]) .highlight .nn,html[data-mode=dark] .highlight .nn{color:#f4bf75}html:not([data-mode]) .highlight .nc,html[data-mode=dark] .highlight .nc{color:#f4bf75}html:not([data-mode]) .highlight .no,html[data-mode=dark] .highlight .no{color:#f4bf75}html:not([data-mode]) .highlight .na,html[data-mode=dark] .highlight .na{color:#6a9fb5}html:not([data-mode]) .highlight .m,html:not([data-mode]) .highlight .mb,html:not([data-mode]) .highlight .mf,html:not([data-mode]) .highlight .mh,html:not([data-mode]) .highlight .mi,html:not([data-mode]) .highlight .il,html:not([data-mode]) .highlight .mo,html:not([data-mode]) .highlight .mx,html[data-mode=dark] .highlight .m,html[data-mode=dark] .highlight .mb,html[data-mode=dark] .highlight .mf,html[data-mode=dark] .highlight .mh,html[data-mode=dark] .highlight .mi,html[data-mode=dark] .highlight .il,html[data-mode=dark] .highlight .mo,html[data-mode=dark] .highlight .mx{color:#90a959}html:not([data-mode]) .highlight .ss,html[data-mode=dark] .highlight .ss{color:#90a959}html[data-mode=light]{--language-border-color: #ececec;--highlight-bg-color: #f6f8fa;--highlighter-rouge-color: #3f596f;--highlight-lineno-color: #9e9e9e;--inline-code-bg: #f6f6f7;--code-color: #3a3a3a;--code-header-text-color: #a3a3a3;--code-header-muted-color: #e5e5e5;--code-header-icon-color: #c9c8c8;--clipboard-checked-color: #43c743}html[data-mode=light] [class^=prompt-]{--inline-code-bg: #fbfafa}html[data-mode=light] .highlight table td{padding:5px}html[data-mode=light] .highlight table pre{margin:0}html[data-mode=light] .highlight,html[data-mode=light] .highlight .w{color:#24292f;background-color:#f6f8fa}html[data-mode=light] .highlight .k,html[data-mode=light] .highlight .kd,html[data-mode=light] .highlight .kn,html[data-mode=light] .highlight .kp,html[data-mode=light] .highlight .kr,html[data-mode=light] .highlight .kt,html[data-mode=light] .highlight .kv{color:#cf222e}html[data-mode=light] .highlight .gr{color:#f6f8fa}html[data-mode=light] .highlight .gd{color:#82071e;background-color:#ffebe9}html[data-mode=light] .highlight .nb{color:#953800}html[data-mode=light] .highlight .nc{color:#953800}html[data-mode=light] .highlight .no{color:#953800}html[data-mode=light] .highlight .nn{color:#953800}html[data-mode=light] .highlight .sr{color:#116329}html[data-mode=light] .highlight .na{color:#116329}html[data-mode=light] .highlight .nt{color:#116329}html[data-mode=light] .highlight .gi{color:#116329;background-color:#dafbe1}html[data-mode=light] .highlight .kc{color:#0550ae}html[data-mode=light] .highlight .l,html[data-mode=light] .highlight .ld,html[data-mode=light] .highlight .m,html[data-mode=light] .highlight .mb,html[data-mode=light] .highlight .mf,html[data-mode=light] .highlight .mh,html[data-mode=light] .highlight .mi,html[data-mode=light] .highlight .il,html[data-mode=light] .highlight .mo,html[data-mode=light] .highlight .mx{color:#0550ae}html[data-mode=light] .highlight .sb{color:#0550ae}html[data-mode=light] .highlight .bp{color:#0550ae}html[data-mode=light] .highlight .ne{color:#0550ae}html[data-mode=light] .highlight .nl{color:#0550ae}html[data-mode=light] .highlight .py{color:#0550ae}html[data-mode=light] .highlight .nv,html[data-mode=light] .highlight .vc,html[data-mode=light] .highlight .vg,html[data-mode=light] .highlight .vi,html[data-mode=light] .highlight .vm{color:#0550ae}html[data-mode=light] .highlight .o,html[data-mode=light] .highlight .ow{color:#0550ae}html[data-mode=light] .highlight .gh{color:#0550ae;font-weight:bold}html[data-mode=light] .highlight .gu{color:#0550ae;font-weight:bold}html[data-mode=light] .highlight .s,html[data-mode=light] .highlight .sa,html[data-mode=light] .highlight .sc,html[data-mode=light] .highlight .dl,html[data-mode=light] .highlight .sd,html[data-mode=light] .highlight .s2,html[data-mode=light] .highlight .se,html[data-mode=light] .highlight .sh,html[data-mode=light] .highlight .sx,html[data-mode=light] .highlight .s1,html[data-mode=light] .highlight .ss{color:#0a3069}html[data-mode=light] .highlight .nd{color:#8250df}html[data-mode=light] .highlight .nf,html[data-mode=light] .highlight .fm{color:#8250df}html[data-mode=light] .highlight .err{color:#f6f8fa;background-color:#82071e}html[data-mode=light] .highlight .c,html[data-mode=light] .highlight .ch,html[data-mode=light] .highlight .cd,html[data-mode=light] .highlight .cm,html[data-mode=light] .highlight .cp,html[data-mode=light] .highlight .cpf,html[data-mode=light] .highlight .c1,html[data-mode=light] .highlight .cs{color:#68717a}html[data-mode=light] .highlight .gl{color:#68717a}html[data-mode=light] .highlight .gt{color:#68717a}html[data-mode=light] .highlight .ni{color:#24292f}html[data-mode=light] .highlight .si{color:#24292f}html[data-mode=light] .highlight .ge{color:#24292f;font-style:italic}html[data-mode=light] .highlight .gs{color:#24292f;font-weight:bold}}div[class^=language-],figure.highlight,.highlight{background-color:var(--highlight-bg-color)}td.rouge-code{padding-left:1rem;padding-right:1.5rem}.highlighter-rouge{color:var(--highlighter-rouge-color);margin-top:.5rem;margin-bottom:1.2em}.highlight{overflow:auto;padding-bottom:.75rem}.highlight pre{margin-bottom:0;font-size:.85rem;line-height:1.4rem;word-wrap:normal}.highlight table td:first-child{display:inline-block;margin-left:1rem;margin-right:.75rem}.highlight table td:last-child{padding-right:2rem !important}.highlight table td pre{overflow:visible;word-break:normal}.highlight .lineno{text-align:right;color:var(--highlight-lineno-color);-webkit-user-select:none;-moz-user-select:none;-o-user-select:none;-ms-user-select:none;user-select:none}code{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;color:var(--code-color)}code.highlighter-rouge{font-size:.85rem;padding:3px 5px;word-break:break-word;border-radius:4px;background-color:var(--inline-code-bg)}code.filepath{background-color:inherit;color:var(--filepath-text-color);font-weight:600;padding:0}a>code.highlighter-rouge{padding-bottom:0;color:inherit}a:hover>code.highlighter-rouge{border-bottom:none}blockquote code{color:inherit}td.rouge-code a{color:inherit !important;border-bottom:none !important;pointer-events:none}div[class^=language-]{box-shadow:var(--language-border-color) 0 0 0 1px}.content>div[class^=language-]{margin-left:-1rem;margin-right:-1rem;border-radius:0}div[class^=language-] .highlight{border-top-left-radius:0;border-top-right-radius:0}div.nolineno td:first-child,div.language-plaintext td:first-child,div.language-console td:first-child,div.language-terminal td:first-child{padding:0 !important;margin-right:0}div.nolineno td:first-child .lineno,div.language-plaintext td:first-child .lineno,div.language-console td:first-child .lineno,div.language-terminal td:first-child .lineno{display:none}.code-header{display:flex;justify-content:space-between;align-items:center;height:2.25rem;margin-left:.75rem;margin-right:.25rem}.code-header span{line-height:2.25rem}.code-header span i{font-size:1rem;width:1.75rem;color:var(--code-header-icon-color)}.code-header span i.small{font-size:70%}[file] .code-header span>i{position:relative;top:1px}.code-header span::after{content:attr(data-label-text);font-size:.85rem;font-weight:600;color:var(--code-header-text-color)}.code-header button{border:1px solid rgba(0,0,0,0);height:2.25rem;width:2.25rem;padding:0;background-color:inherit}.code-header button i{color:var(--code-header-icon-color)}.code-header button[timeout]:hover{border-color:var(--clipboard-checked-color)}.code-header button[timeout] i{color:var(--clipboard-checked-color)}.code-header button:focus{outline:none}.code-header button:not([timeout]):hover{background-color:rgba(128,128,128,.37)}.code-header button:not([timeout]):hover i{color:#fff}@media all and (min-width: 576px){.content>div[class^=language-]{margin-left:0;margin-right:0;border-radius:.625rem}div[class^=language-] .code-header{margin-left:0;margin-right:0}div[class^=language-] .code-header::before{content:"";display:inline-block;margin-left:1rem;width:.75rem;height:.75rem;border-radius:50%;background-color:var(--code-header-muted-color);box-shadow:1.25rem 0 0 var(--code-header-muted-color),2.5rem 0 0 var(--code-header-muted-color)}div[class^=language-] .code-header span{margin-left:-0.875rem}}html{font-size:16px}@media(prefers-color-scheme: light){html:not([data-mode]),html[data-mode=light]{--main-bg: white;--mask-bg: #c1c3c5;--main-border-color: #f3f3f3;--text-color: #34343c;--text-muted-color: #757575;--text-muted-hightlight-color: inherit;--heading-color: #2a2a2a;--label-color: #585858;--blockquote-border-color: #eeeeee;--blockquote-text-color: #757575;--link-color: #0056b2;--link-underline-color: #dee2e6;--button-bg: #ffffff;--btn-border-color: #e9ecef;--btn-backtotop-color: #686868;--btn-backtotop-border-color: #f1f1f1;--btn-box-shadow: #eaeaea;--checkbox-color: #c5c5c5;--checkbox-checked-color: #07a8f7;--row-cell-color: rgb(223, 233, 241, 0.64);--img-bg: radial-gradient( circle, rgb(255, 255, 255) 0%, rgb(239, 239, 239) 100% );--shimmer-bg: linear-gradient( 90deg, rgba(250, 250, 250, 0) 0%, rgba(232, 230, 230, 1) 50%, rgba(250, 250, 250, 0) 100% );--site-title-color: rgb(113, 113, 113);--site-subtitle-color: #717171;--sidebar-bg: #f6f8fa;--sidebar-border-color: #efefef;--sidebar-muted-color: #545454;--sidebar-active-color: #1d1d1d;--sidebar-hover-bg: rgb(223, 233, 241, 0.64);--sidebar-btn-bg: white;--sidebar-btn-color: #8e8e8e;--avatar-border-color: white;--topbar-bg: rgb(255, 255, 255, 0.7);--topbar-text-color: rgb(78, 78, 78);--search-border-color: rgb(240, 240, 240);--search-icon-color: #c2c6cc;--input-focus-border-color: #b8b8b8;--post-list-text-color: dimgray;--btn-patinator-text-color: #555555;--btn-paginator-hover-color: var(--sidebar-bg);--toc-highlight: #0550ae;--btn-share-color: gray;--btn-share-hover-color: #0d6efd;--card-bg: white;--card-hovor-bg: #e2e2e2;--card-shadow: rgb(104, 104, 104, 0.05) 0 2px 6px 0, rgba(211, 209, 209, 0.15) 0 0 0 1px;--footnote-target-bg: lightcyan;--tb-odd-bg: #fbfcfd;--tb-border-color: #eaeaea;--dash-color: silver;--kbd-wrap-color: #bdbdbd;--kbd-text-color: var(--text-color);--kbd-bg-color: white;--prompt-text-color: rgb(46, 46, 46, 0.77);--prompt-tip-bg: rgb(123, 247, 144, 0.2);--prompt-tip-icon-color: #03b303;--prompt-info-bg: #e1f5fe;--prompt-info-icon-color: #0070cb;--prompt-warning-bg: rgb(255, 243, 205);--prompt-warning-icon-color: #ef9c03;--prompt-danger-bg: rgb(248, 215, 218, 0.56);--prompt-danger-icon-color: #df3c30;--tag-border: #dee2e6;--tag-shadow: var(--btn-border-color);--tag-hover: rgb(222, 226, 230);--search-tag-bg: #f8f9fa;--categories-border: rgba(0, 0, 0, 0.125);--categories-hover-bg: var(--btn-border-color);--categories-icon-hover-color: darkslategray;--timeline-color: rgba(0, 0, 0, 0.075);--timeline-node-bg: #c2c6cc;--timeline-year-dot-color: #ffffff}html:not([data-mode]) [class^=prompt-],html[data-mode=light] [class^=prompt-]{--link-underline-color: rgb(219, 216, 216)}html:not([data-mode]) .dark,html[data-mode=light] .dark{display:none}html[data-mode=dark]{--main-bg: rgb(27, 27, 30);--mask-bg: rgb(68, 69, 70);--main-border-color: rgb(44, 45, 45);--text-color: rgb(175, 176, 177);--text-muted-color: #868686;--text-muted-hightlight-color: #aeaeae;--heading-color: #cccccc;--label-color: #a7a7a7;--blockquote-border-color: rgb(66, 66, 66);--blockquote-text-color: #868686;--link-color: rgb(138, 180, 248);--link-underline-color: rgb(82, 108, 150);--button-bg: #1e1e1e;--btn-border-color: #2e2f31;--btn-backtotop-color: var(--text-color);--btn-backtotop-border-color: #212122;--btn-box-shadow: var(--main-bg);--card-header-bg: #292929;--checkbox-color: rgb(118, 120, 121);--checkbox-checked-color: var(--link-color);--row-cell-color:#262626;--img-bg: radial-gradient(circle, rgb(22, 22, 24) 0%, rgb(32, 32, 32) 100%);--shimmer-bg: linear-gradient( 90deg, rgba(255, 255, 255, 0) 0%, rgba(58, 55, 55, 0.4) 50%, rgba(255, 255, 255, 0) 100% );--site-title-color: #717070;--site-subtitle-color: #868686;--sidebar-bg: #1e1e1e;--sidebar-border-color: #292929;--sidebar-muted-color: #868686;--sidebar-active-color: rgb(255, 255, 255, 0.95);--sidebar-hover-bg: #262626;--sidebar-btn-bg: #232328;--sidebar-btn-color: #787878;--avatar-border-color: rgb(206, 206, 206, 0.9);--topbar-bg: rgb(27, 27, 30, 0.64);--topbar-text-color: var(--text-color);--search-border-color: rgb(55, 55, 55);--search-icon-color: rgb(100, 102, 105);--input-focus-border-color: rgb(112, 114, 115);--post-list-text-color: rgb(175, 176, 177);--btn-patinator-text-color: var(--text-color);--btn-paginator-hover-color: #2e2e2e;--toc-highlight: rgb(116, 178, 243);--tag-hover: rgb(43, 56, 62);--tb-odd-bg: #252526;--tb-even-bg: rgb(31, 31, 34);--tb-border-color: var(--tb-odd-bg);--footnote-target-bg: rgb(63, 81, 181);--btn-share-color: #6c757d;--btn-share-hover-color: #bfc1ca;--card-bg: #1e1e1e;--card-hovor-bg: #464d51;--card-shadow: rgb(21, 21, 21, 0.72) 0 6px 18px 0, rgb(137, 135, 135, 0.24) 0 0 0 1px;--kbd-wrap-color: #6a6a6a;--kbd-text-color: #d3d3d3;--kbd-bg-color: #242424;--prompt-text-color: rgb(216, 212, 212, 0.75);--prompt-tip-bg: rgb(22, 60, 36, 0.64);--prompt-tip-icon-color: rgb(15, 164, 15, 0.81);--prompt-info-bg: rgb(7, 59, 104, 0.8);--prompt-info-icon-color: #0075d1;--prompt-warning-bg: rgb(90, 69, 3, 0.88);--prompt-warning-icon-color: rgb(255, 165, 0, 0.8);--prompt-danger-bg: rgb(86, 28, 8, 0.8);--prompt-danger-icon-color: #cd0202;--tag-border: rgb(59, 79, 88);--tag-shadow: rgb(32, 33, 33);--dash-color: rgb(63, 65, 68);--search-tag-bg: #292828;--categories-border: rgb(64, 66, 69, 0.5);--categories-hover-bg: rgb(73, 75, 76);--categories-icon-hover-color: white;--timeline-node-bg: rgb(150, 152, 156);--timeline-color: rgb(63, 65, 68);--timeline-year-dot-color: var(--timeline-color);color-scheme:dark}html[data-mode=dark] .light{display:none}html[data-mode=dark] .categories.card,html[data-mode=dark] .list-group-item{background-color:var(--card-bg)}html[data-mode=dark] .categories .card-header{background-color:var(--card-header-bg)}html[data-mode=dark] .categories .list-group-item{border-left:none;border-right:none;padding-left:2rem;border-color:var(--categories-border)}html[data-mode=dark] .categories .list-group-item:last-child{border-bottom-color:var(--card-bg)}html[data-mode=dark] #archives li:nth-child(odd){background-image:linear-gradient(to left, rgb(26, 26, 30), rgb(39, 39, 45), rgb(39, 39, 45), rgb(39, 39, 45), rgb(26, 26, 30))}html[data-mode=dark] #disqus_thread{color-scheme:none}}@media(prefers-color-scheme: dark){html:not([data-mode]),html[data-mode=dark]{--main-bg: rgb(27, 27, 30);--mask-bg: rgb(68, 69, 70);--main-border-color: rgb(44, 45, 45);--text-color: rgb(175, 176, 177);--text-muted-color: #868686;--text-muted-hightlight-color: #aeaeae;--heading-color: #cccccc;--label-color: #a7a7a7;--blockquote-border-color: rgb(66, 66, 66);--blockquote-text-color: #868686;--link-color: rgb(138, 180, 248);--link-underline-color: rgb(82, 108, 150);--button-bg: #1e1e1e;--btn-border-color: #2e2f31;--btn-backtotop-color: var(--text-color);--btn-backtotop-border-color: #212122;--btn-box-shadow: var(--main-bg);--card-header-bg: #292929;--checkbox-color: rgb(118, 120, 121);--checkbox-checked-color: var(--link-color);--row-cell-color:#262626;--img-bg: radial-gradient(circle, rgb(22, 22, 24) 0%, rgb(32, 32, 32) 100%);--shimmer-bg: linear-gradient( 90deg, rgba(255, 255, 255, 0) 0%, rgba(58, 55, 55, 0.4) 50%, rgba(255, 255, 255, 0) 100% );--site-title-color: #717070;--site-subtitle-color: #868686;--sidebar-bg: #1e1e1e;--sidebar-border-color: #292929;--sidebar-muted-color: #868686;--sidebar-active-color: rgb(255, 255, 255, 0.95);--sidebar-hover-bg: #262626;--sidebar-btn-bg: #232328;--sidebar-btn-color: #787878;--avatar-border-color: rgb(206, 206, 206, 0.9);--topbar-bg: rgb(27, 27, 30, 0.64);--topbar-text-color: var(--text-color);--search-border-color: rgb(55, 55, 55);--search-icon-color: rgb(100, 102, 105);--input-focus-border-color: rgb(112, 114, 115);--post-list-text-color: rgb(175, 176, 177);--btn-patinator-text-color: var(--text-color);--btn-paginator-hover-color: #2e2e2e;--toc-highlight: rgb(116, 178, 243);--tag-hover: rgb(43, 56, 62);--tb-odd-bg: #252526;--tb-even-bg: rgb(31, 31, 34);--tb-border-color: var(--tb-odd-bg);--footnote-target-bg: rgb(63, 81, 181);--btn-share-color: #6c757d;--btn-share-hover-color: #bfc1ca;--card-bg: #1e1e1e;--card-hovor-bg: #464d51;--card-shadow: rgb(21, 21, 21, 0.72) 0 6px 18px 0, rgb(137, 135, 135, 0.24) 0 0 0 1px;--kbd-wrap-color: #6a6a6a;--kbd-text-color: #d3d3d3;--kbd-bg-color: #242424;--prompt-text-color: rgb(216, 212, 212, 0.75);--prompt-tip-bg: rgb(22, 60, 36, 0.64);--prompt-tip-icon-color: rgb(15, 164, 15, 0.81);--prompt-info-bg: rgb(7, 59, 104, 0.8);--prompt-info-icon-color: #0075d1;--prompt-warning-bg: rgb(90, 69, 3, 0.88);--prompt-warning-icon-color: rgb(255, 165, 0, 0.8);--prompt-danger-bg: rgb(86, 28, 8, 0.8);--prompt-danger-icon-color: #cd0202;--tag-border: rgb(59, 79, 88);--tag-shadow: rgb(32, 33, 33);--dash-color: rgb(63, 65, 68);--search-tag-bg: #292828;--categories-border: rgb(64, 66, 69, 0.5);--categories-hover-bg: rgb(73, 75, 76);--categories-icon-hover-color: white;--timeline-node-bg: rgb(150, 152, 156);--timeline-color: rgb(63, 65, 68);--timeline-year-dot-color: var(--timeline-color);color-scheme:dark}html:not([data-mode]) .light,html[data-mode=dark] .light{display:none}html:not([data-mode]) .categories.card,html:not([data-mode]) .list-group-item,html[data-mode=dark] .categories.card,html[data-mode=dark] .list-group-item{background-color:var(--card-bg)}html:not([data-mode]) .categories .card-header,html[data-mode=dark] .categories .card-header{background-color:var(--card-header-bg)}html:not([data-mode]) .categories .list-group-item,html[data-mode=dark] .categories .list-group-item{border-left:none;border-right:none;padding-left:2rem;border-color:var(--categories-border)}html:not([data-mode]) .categories .list-group-item:last-child,html[data-mode=dark] .categories .list-group-item:last-child{border-bottom-color:var(--card-bg)}html:not([data-mode]) #archives li:nth-child(odd),html[data-mode=dark] #archives li:nth-child(odd){background-image:linear-gradient(to left, rgb(26, 26, 30), rgb(39, 39, 45), rgb(39, 39, 45), rgb(39, 39, 45), rgb(26, 26, 30))}html:not([data-mode]) #disqus_thread,html[data-mode=dark] #disqus_thread{color-scheme:none}html[data-mode=light]{--main-bg: white;--mask-bg: #c1c3c5;--main-border-color: #f3f3f3;--text-color: #34343c;--text-muted-color: #757575;--text-muted-hightlight-color: inherit;--heading-color: #2a2a2a;--label-color: #585858;--blockquote-border-color: #eeeeee;--blockquote-text-color: #757575;--link-color: #0056b2;--link-underline-color: #dee2e6;--button-bg: #ffffff;--btn-border-color: #e9ecef;--btn-backtotop-color: #686868;--btn-backtotop-border-color: #f1f1f1;--btn-box-shadow: #eaeaea;--checkbox-color: #c5c5c5;--checkbox-checked-color: #07a8f7;--row-cell-color: rgb(223, 233, 241, 0.64);--img-bg: radial-gradient( circle, rgb(255, 255, 255) 0%, rgb(239, 239, 239) 100% );--shimmer-bg: linear-gradient( 90deg, rgba(250, 250, 250, 0) 0%, rgba(232, 230, 230, 1) 50%, rgba(250, 250, 250, 0) 100% );--site-title-color: rgb(113, 113, 113);--site-subtitle-color: #717171;--sidebar-bg: #f6f8fa;--sidebar-border-color: #efefef;--sidebar-muted-color: #545454;--sidebar-active-color: #1d1d1d;--sidebar-hover-bg: rgb(223, 233, 241, 0.64);--sidebar-btn-bg: white;--sidebar-btn-color: #8e8e8e;--avatar-border-color: white;--topbar-bg: rgb(255, 255, 255, 0.7);--topbar-text-color: rgb(78, 78, 78);--search-border-color: rgb(240, 240, 240);--search-icon-color: #c2c6cc;--input-focus-border-color: #b8b8b8;--post-list-text-color: dimgray;--btn-patinator-text-color: #555555;--btn-paginator-hover-color: var(--sidebar-bg);--toc-highlight: #0550ae;--btn-share-color: gray;--btn-share-hover-color: #0d6efd;--card-bg: white;--card-hovor-bg: #e2e2e2;--card-shadow: rgb(104, 104, 104, 0.05) 0 2px 6px 0, rgba(211, 209, 209, 0.15) 0 0 0 1px;--footnote-target-bg: lightcyan;--tb-odd-bg: #fbfcfd;--tb-border-color: #eaeaea;--dash-color: silver;--kbd-wrap-color: #bdbdbd;--kbd-text-color: var(--text-color);--kbd-bg-color: white;--prompt-text-color: rgb(46, 46, 46, 0.77);--prompt-tip-bg: rgb(123, 247, 144, 0.2);--prompt-tip-icon-color: #03b303;--prompt-info-bg: #e1f5fe;--prompt-info-icon-color: #0070cb;--prompt-warning-bg: rgb(255, 243, 205);--prompt-warning-icon-color: #ef9c03;--prompt-danger-bg: rgb(248, 215, 218, 0.56);--prompt-danger-icon-color: #df3c30;--tag-border: #dee2e6;--tag-shadow: var(--btn-border-color);--tag-hover: rgb(222, 226, 230);--search-tag-bg: #f8f9fa;--categories-border: rgba(0, 0, 0, 0.125);--categories-hover-bg: var(--btn-border-color);--categories-icon-hover-color: darkslategray;--timeline-color: rgba(0, 0, 0, 0.075);--timeline-node-bg: #c2c6cc;--timeline-year-dot-color: #ffffff}html[data-mode=light] [class^=prompt-]{--link-underline-color: rgb(219, 216, 216)}html[data-mode=light] .dark{display:none}}body{background:var(--main-bg);padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);color:var(--text-color);-webkit-font-smoothing:antialiased;font-family:"Source Sans Pro","Microsoft Yahei",sans-serif}h1{font-size:1.92rem}h2{font-size:1.54rem}h3{font-size:1.36rem}h4{font-size:1.18rem}h5{font-size:1rem}a{text-decoration:none}img{max-width:100%;height:auto;transition:all .35s ease-in-out}.blur img{-webkit-filter:blur(20px);filter:blur(20px)}blockquote{border-left:5px solid var(--blockquote-border-color);padding-left:1rem;color:var(--blockquote-text-color)}blockquote>p:last-child{margin-bottom:0}blockquote[class^=prompt-]{border-left:0;position:relative;padding:1rem 1rem 1rem 3rem;color:var(--prompt-text-color)}blockquote[class^=prompt-]::before{text-align:center;width:3rem;position:absolute;left:.25rem;margin-top:.4rem;text-rendering:auto;-webkit-font-smoothing:antialiased}blockquote.prompt-tip{background-color:var(--prompt-tip-bg)}blockquote.prompt-tip::before{content:"";color:var(--prompt-tip-icon-color);font:var(--fa-font-regular)}blockquote.prompt-info{background-color:var(--prompt-info-bg)}blockquote.prompt-info::before{content:"";color:var(--prompt-info-icon-color);font:var(--fa-font-solid)}blockquote.prompt-warning{background-color:var(--prompt-warning-bg)}blockquote.prompt-warning::before{content:"";color:var(--prompt-warning-icon-color);font:var(--fa-font-solid)}blockquote.prompt-danger{background-color:var(--prompt-danger-bg)}blockquote.prompt-danger::before{content:"";color:var(--prompt-danger-icon-color);font:var(--fa-font-solid)}kbd{font-family:inherit;display:inline-block;vertical-align:middle;line-height:1.3rem;min-width:1.75rem;text-align:center;margin:0 .3rem;padding-top:.1rem;color:var(--kbd-text-color);background-color:var(--kbd-bg-color);border-radius:.25rem;border:solid 1px var(--kbd-wrap-color);box-shadow:inset 0 -2px 0 var(--kbd-wrap-color)}hr{border-color:var(--main-border-color);opacity:1}footer{background-color:var(--main-bg);height:6rem;border-top:1px solid var(--main-border-color);display:flex}footer p{text-align:center;margin-bottom:0}.access{top:2rem;transition:top .2s ease-in-out;margin-top:3rem;margin-bottom:4rem}.access:only-child{position:-webkit-sticky;position:sticky}.access>section{padding-left:1rem;border-left:1px solid var(--main-border-color)}.access>section:not(:last-child){margin-bottom:4rem}.access .content{font-size:.9rem}#panel-wrapper .panel-heading{font-family:inherit;line-height:inherit;color:var(--label-color);font-size:inherit;font-weight:600}#panel-wrapper .post-tag{line-height:1.05rem;font-size:.85rem;border-radius:.8rem;padding:.3rem .5rem;margin:0 .35rem .5rem 0}#panel-wrapper .post-tag:hover{transition:all .3s ease-in}#access-lastmod a{color:inherit}.footnotes>ol{padding-left:2rem;margin-top:.5rem}.footnotes>ol>li:not(:last-child){margin-bottom:.3rem}.footnotes>ol>li>p{margin-left:.25em;margin-top:0;margin-bottom:0}a.footnote{margin-left:1px;margin-right:1px;padding-left:2px;padding-right:2px;border-bottom-style:none !important}a.reversefootnote{font-size:.6rem;line-height:1;position:relative;bottom:.25em;margin-left:.25em;border-bottom-style:none !important}.table-wrapper{overflow-x:auto;margin-bottom:1.5rem}.table-wrapper>table{min-width:100%;overflow-x:auto;border-spacing:0}.table-wrapper>table thead{border-bottom:solid 2px rgba(210,215,217,.75)}.table-wrapper>table tbody tr{border-bottom:1px solid var(--tb-border-color)}.table-wrapper>table tbody tr:nth-child(2n){background-color:var(--tb-even-bg)}.table-wrapper>table tbody tr:nth-child(2n+1){background-color:var(--tb-odd-bg)}.post-preview{border:0;background:var(--card-bg);box-shadow:var(--card-shadow)}.post-preview::before{content:"";width:100%;height:100%;position:absolute;background-color:var(--card-hovor-bg);opacity:0;transition:opacity .35s ease-in-out}.post-preview:hover::before{opacity:.3}main{line-height:1.75}main h1{margin-top:2rem;margin-bottom:1.5rem}main p>a.popup:not(.normal):not(.left):not(.right){position:relative;left:50%;transform:translateX(-50%)}.content{font-size:1.08rem;margin-top:2rem;overflow-wrap:break-word}.content a.popup{margin-top:.5rem;margin-bottom:.5rem;cursor:zoom-in}.content ol:not([class]),.content ol.task-list,.content ul:not([class]),.content ul.task-list{-webkit-padding-start:1.75rem;padding-inline-start:1.75rem}.content ol:not([class]) li,.content ol.task-list li,.content ul:not([class]) li,.content ul.task-list li{margin:.25rem 0;padding-left:.25rem}.content ol:not([class]) ol,.content ol:not([class]) ul,.content ol.task-list ol,.content ol.task-list ul,.content ul:not([class]) ol,.content ul:not([class]) ul,.content ul.task-list ol,.content ul.task-list ul{-webkit-padding-start:1.25rem;padding-inline-start:1.25rem;margin:.5rem 0}.content ul.task-list{-webkit-padding-start:1.25rem;padding-inline-start:1.25rem}.content ul.task-list li{list-style-type:none;padding-left:0}.content ul.task-list li>i{width:2rem;margin-left:-1.25rem;color:var(--checkbox-color)}.content ul.task-list li>i.checked{color:var(--checkbox-checked-color)}.content ul.task-list li ul{-webkit-padding-start:1.75rem;padding-inline-start:1.75rem}.content ul.task-list input[type=checkbox]{margin:0 .5rem .2rem -1.3rem;vertical-align:middle}.content dl>dd{margin-left:1rem}.content ::marker{color:var(--text-muted-color)}.post-tag{display:inline-block;min-width:2rem;text-align:center;border-radius:.5rem;border:1px solid var(--btn-border-color);padding:0 .4rem;color:var(--text-muted-color);line-height:1.3rem}.post-tag:not(:last-child){margin-right:.2rem}.rounded-10{border-radius:10px !important}.img-link{color:rgba(0,0,0,0);display:inline-flex}.shimmer{width:80%;margin-left:auto;margin-right:auto}.embed-video{width:100%;height:100%;margin-bottom:1rem;aspect-ratio:16/9}.embed-video.twitch{aspect-ratio:310/189}.embed-video.file{display:block;width:auto;height:auto;max-width:100%;max-height:100%;margin:auto;margin-bottom:0}.btn-lang{border:1px solid !important;padding:1px 3px;border-radius:3px;color:var(--link-color)}.btn-lang:focus{box-shadow:none}.loaded{display:block !important}.d-flex.loaded{display:flex !important}.unloaded{display:none !important}.visible{visibility:visible !important}.hidden{visibility:hidden !important}.flex-grow-1{flex-grow:1 !important}.btn-box-shadow{box-shadow:var(--card-shadow)}.text-muted{color:var(--text-muted-color) !important}.tooltip-inner{font-size:.7rem;max-width:220px;text-align:left}.btn.btn-outline-primary:not(.disabled):hover{border-color:#007bff !important}.disabled{color:#cec4c4;pointer-events:auto;cursor:not-allowed}.hide-border-bottom{border-bottom:none !important}.input-focus{box-shadow:none;border-color:var(--input-focus-border-color) !important;background:center !important;transition:background-color .15s ease-in-out,border-color .15s ease-in-out}.left{float:left;margin:.75rem 1rem 1rem 0}.right{float:right;margin:.75rem 0 1rem 1rem}figure .mfp-title{text-align:center;padding-right:0;margin-top:.5rem}.mfp-img{transition:none}.mermaid{text-align:center}mjx-container{overflow-y:hidden;min-width:auto !important}#sidebar{padding-left:0;padding-right:0;position:fixed;top:0;left:0;height:100%;overflow-y:auto;width:260px;z-index:99;background:var(--sidebar-bg);border-right:1px solid var(--sidebar-border-color);-ms-overflow-style:none;scrollbar-width:none}#sidebar::-webkit-scrollbar{display:none}#sidebar .sidebar-bottom .mode-toggle:hover,#sidebar .sidebar-bottom a:hover,#sidebar .site-title a:hover{color:var(--sidebar-active-color)}#sidebar #avatar{display:block;width:14rem;height:5rem;overflow:hidden;box-shadow:var(--avatar-border-color) 0 0 0 2px;transform:translateZ(0);background:#1e1e1e}#sidebar #avatar img{margin-top:25px;padding-left:10px;padding-right:10px;transition:transform .5s}#sidebar #avatar img:hover{transform:scale(1.1)}#sidebar .profile-wrapper{margin-top:2.5rem;margin-bottom:2.5rem;padding-left:1.25rem;padding-right:1.25rem;width:100%}#sidebar .site-title{font-family:inherit;font-weight:900;font-size:1.75rem;line-height:1.2;letter-spacing:.25px;margin-top:1.25rem;margin-bottom:.5rem;margin-left:1rem}#sidebar .site-title a{color:var(--site-title-color)}#sidebar .site-subtitle{font-size:95%;color:var(--site-subtitle-color);margin-top:.25rem;word-spacing:1px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#sidebar ul{margin-bottom:2rem}#sidebar ul li.nav-item{width:100%;padding-left:1rem;padding-right:1.5rem}#sidebar ul li.nav-item a.nav-link{padding-top:.6rem;padding-bottom:.6rem;display:flex;align-items:center;border-radius:.75rem;font-weight:600}#sidebar ul li.nav-item a.nav-link:hover{background-color:var(--sidebar-hover-bg)}#sidebar ul li.nav-item a.nav-link i{font-size:95%;margin-right:1.5rem}#sidebar ul li.nav-item a.nav-link span{font-size:90%;letter-spacing:.2px}#sidebar ul li.nav-item .nav-link-sub{width:168px}#sidebar ul li.nav-item.active .nav-link{color:var(--sidebar-active-color);background-color:var(--sidebar-hover-bg)}#sidebar ul li.nav-item.active .nav-link span{opacity:1}#sidebar ul li.nav-item:not(:first-child){margin-top:.25rem}#sidebar .ul-sublist{margin-bottom:0rem}#sidebar .sidebar-bottom{padding-left:2rem;padding-right:6rem;margin-bottom:1.5rem}#sidebar .sidebar-bottom .mode-toggle,#sidebar .sidebar-bottom a{width:1.75rem;height:1.75rem;margin-bottom:.5rem;border-radius:50%;color:var(--sidebar-btn-color);background-color:var(--sidebar-btn-bg);text-align:center;display:flex;align-items:center;justify-content:center;box-shadow:var(--sidebar-border-color) 0 0 0 1px}#sidebar .sidebar-bottom .mode-toggle:hover,#sidebar .sidebar-bottom a:hover{background-color:var(--sidebar-hover-bg)}#sidebar .sidebar-bottom a:not(:last-child){margin-right:.8rem}#sidebar .sidebar-bottom i{line-height:1.75rem}#sidebar .sidebar-bottom .mode-toggle{padding:0;border:0}#sidebar .sidebar-bottom .icon-border{margin-left:calc((.8rem - 3px)/2);margin-right:calc((.8rem - 3px)/2);background-color:var(--sidebar-btn-color);content:"";width:3px;height:3px;border-radius:50%;margin-bottom:.5rem}@media(hover: hover){#sidebar ul>li:last-child::after{transition:top .5s ease}.nav-link{transition:background-color .3s ease-in-out}.post-preview{transition:background-color .35s ease-in-out}}#search-result-wrapper{display:none;height:100%;width:100%;overflow:auto}#search-result-wrapper .content{margin-top:2rem}#topbar-wrapper{height:3rem;background-color:var(--topbar-bg)}#topbar button i{color:#999}#topbar #breadcrumb{font-size:1rem;color:var(--text-muted-color);padding-left:.5rem}#topbar #breadcrumb span:not(:last-child)::after{content:"›";padding:0 .3rem}::-webkit-input-placeholder{color:var(--text-muted-color) !important}::-moz-placeholder{color:var(--text-muted-color) !important}:-ms-input-placeholder{color:var(--text-muted-color) !important}::-ms-input-placeholder{color:var(--text-muted-color) !important}::placeholder{color:var(--text-muted-color) !important}:focus::-webkit-input-placeholder{opacity:.6}:focus::-moz-placeholder{opacity:.6}:focus:-ms-input-placeholder{opacity:.6}:focus::-ms-input-placeholder{opacity:.6}:focus::placeholder{opacity:.6}search{display:flex;width:100%;border-radius:1rem;border:1px solid var(--search-border-color);background:var(--main-bg);padding:0 .5rem}search i{z-index:2;font-size:.9rem;color:var(--search-icon-color)}#sidebar-trigger,#search-trigger{display:none}#search-cancel{color:var(--link-color);display:none;white-space:nowrap}#search-input{background:center;border:0;border-radius:0;padding:.18rem .3rem;color:var(--text-color);height:auto}#search-input:focus{box-shadow:none}#search-hints{padding:0 1rem}#search-hints h4{margin-bottom:1.5rem}#search-hints .post-tag{display:inline-block;line-height:1rem;font-size:1rem;background:var(--search-tag-bg);border:none;padding:.5rem;margin:0 1.25rem 1rem 0}#search-hints .post-tag::before{content:"#";color:var(--text-muted-color);padding-right:.2rem}#search-results{padding-bottom:3rem}#search-results a{font-size:1.4rem;line-height:2.5rem}#search-results>article{width:100%}#search-results>article:not(:last-child){margin-bottom:1rem}#search-results>article i{color:#818182;margin-right:.15rem;font-size:80%}#search-results>article>p{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}#topbar-title{display:none;font-size:1.1rem;font-weight:600;font-family:sans-serif;color:var(--topbar-text-color);text-align:center;width:70%;overflow:hidden;text-overflow:ellipsis;word-break:keep-all;white-space:nowrap}#mask{display:none;position:fixed;inset:0 0 0 0;height:100%;width:100%;z-index:1}[sidebar-display] #mask{display:block !important}#main-wrapper{position:relative;padding-left:0;padding-right:0}#main-wrapper>.container{min-height:100vh}#topbar-wrapper.row,#main-wrapper>.container>.row,#search-result-wrapper>.row{margin-left:0;margin-right:0}#tail-wrapper>:not(script){margin-top:3rem}#back-to-top{display:none;z-index:1;cursor:pointer;position:fixed;right:1rem;bottom:4.625rem;background:var(--button-bg);color:var(--btn-backtotop-color);padding:0;width:2.75rem;height:2.75rem;border-radius:50%;border:1px solid var(--btn-backtotop-border-color);transition:transform .2s ease-out;-webkit-transition:transform .2s ease-out}#back-to-top:hover{transform:translate3d(0, -5px, 0);-webkit-transform:translate3d(0, -5px, 0)}#back-to-top i{line-height:2.75rem;position:relative;bottom:2px}@-webkit-keyframes popup{from{opacity:0;bottom:0}}@keyframes popup{from{opacity:0;bottom:0}}#notification .toast-header{background:none;border-bottom:none;color:inherit}#notification .toast-body{font-family:Lato,sans-serif;line-height:1.25rem}#notification .toast-body button{font-size:90%;min-width:4rem}#notification.toast.show{display:block;min-width:20rem;border-radius:.5rem;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background-color:rgba(255,255,255,.5);color:rgba(27,27,30,.7294117647);position:fixed;left:50%;bottom:20%;transform:translateX(-50%);-webkit-animation:popup .8s;animation:popup .8s}@media all and (max-width: 576px){main .content>blockquote[class^=prompt-]{margin-left:-1rem;margin-right:-1rem;border-radius:0;max-width:none}#avatar{width:5rem;height:5rem}}@media all and (max-width: 768px){#main-wrapper>.container,#topbar{max-width:100%}#main-wrapper>.container{padding-left:0;padding-right:0}}@media all and (max-width: 849px){footer{transition:transform .4s ease;height:6rem;padding:1.5rem 0}.sidebarImg{position:relative !important}[sidebar-display] #sidebar{transform:translateX(0)}[sidebar-display] #main-wrapper{transform:translateX(260px)}[sidebar-display] #back-to-top{visibility:hidden}#sidebar{transition:transform .4s ease;transform:translateX(-260px);-webkit-transform:translateX(-260px)}#main-wrapper{transition:transform .4s ease}#topbar,#main-wrapper>.container{max-width:100%}#search-result-wrapper{width:100%}#breadcrumb,search{display:none}#topbar-wrapper{transition:transform .4s ease,top .2s ease;left:0}main,#panel-wrapper{margin-top:0}#topbar-title,#sidebar-trigger,#search-trigger{display:block}#search-result-wrapper .content{letter-spacing:0}#tags{justify-content:center !important}h1.dynamic-title{display:none}h1.dynamic-title~.content{margin-top:2.5rem}.shimmer{width:100%}}@media all and (min-width: 850px){html{overflow-y:scroll}#main-wrapper{margin-left:260px}#sidebar .profile-wrapper{margin-top:3rem}#search-hints{display:none}search{max-width:200px}#search-result-wrapper{max-width:1700px;justify-content:start !important}main h1{margin-top:3rem}div.content .table-wrapper>table{min-width:70%}#back-to-top{right:5%;bottom:4.625rem}#topbar-title{text-align:left}}@media all and (max-width: 991px){.threats{overflow-y:visible !important;height:auto !important;margin-left:0px !important}footer{display:block !important}}@media all and (min-width: 992px)and (max-width: 1199px){#main-wrapper>.container .col-lg-11{flex:0 0 96%;max-width:96%}}@media all and (min-width: 850px)and (max-width: 1199px){#search-results>div{max-width:700px}#breadcrumb{width:65%;overflow:hidden;text-overflow:ellipsis;word-break:keep-all;white-space:nowrap}}@media all and (max-width: 1199px){#panel-wrapper{display:none}#main-wrapper>.container>div.row{justify-content:center !important}}@media all and (min-width: 1200px){search{margin-right:4rem}#search-input{transition:all .3s ease-in-out}#search-results>article{width:45%}#search-results>article:nth-child(odd){margin-right:1.5rem}#search-results>article:nth-child(even){margin-left:1.5rem}#search-results>article:last-child:nth-child(odd){position:relative;right:24.3%}.content{font-size:1.03rem}}@media all and (min-width: 1400px){#back-to-top{right:calc((100vw - 260px - 1140px)/2 + 3rem)}}@media all and (min-width: 1550px){#main-wrapper{margin-left:300px}#topbar-wrapper{left:300px}search{margin-right:calc(225px - .75rem)}#main-wrapper>.container{max-width:1250px;padding-left:1.75rem !important;padding-right:1.75rem !important}main.col-12,#tail-wrapper{padding-right:4.5rem !important}#back-to-top{right:calc((100vw - 300px - 1700px)/2 + 2rem)}}@media all and (min-width: 1551px){#main-wrapper{margin-left:300px}#topbar-wrapper{left:300px}search{margin-right:calc(225px - .75rem)}#main-wrapper>.container{max-width:1700px;padding-left:1.75rem !important;padding-right:1.75rem !important}main.col-12,#tail-wrapper{padding-right:4.5rem !important}#back-to-top{right:calc((100vw - 300px - 1700px)/2 + 2rem)}}#post-list{margin-top:2rem}#post-list .card-wrapper:hover{text-decoration:none}#post-list .card-wrapper:not(:last-child){margin-bottom:1.25rem}#post-list .card{border:0;background:none}#post-list .card .preview-img img,#post-list .card .preview-img{border-radius:.625rem .625rem 0 0}#post-list .card .card-body{height:100%;padding:1rem}#post-list .card .card-body .card-title{color:var(--heading-color) !important;font-size:1.25rem}#post-list .card .card-body .post-meta,#post-list .card .card-body .card-text.content{color:var(--text-muted-color) !important}#post-list .card .card-body .card-text.content p{line-height:1.5;margin:0}#post-list .card .card-body .post-meta i:not(:first-child){margin-left:1.5rem}#post-list .card .card-body .post-meta em{color:inherit}#post-list .card .card-body .post-meta>div:first-child{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pagination{color:var(--text-color);font-family:Lato,sans-serif;justify-content:space-evenly}.pagination a:hover{text-decoration:none}.pagination .page-item .page-link{color:var(--btn-patinator-text-color);padding:0 .6rem;display:-webkit-box;-webkit-box-pack:center;-webkit-box-align:center;border-radius:.5rem;border:0;background-color:inherit}.pagination .page-item.active .page-link{background-color:var(--btn-paginator-hover-color)}.pagination .page-item:not(.active) .page-link:hover{box-shadow:inset var(--btn-border-color) 0 0 0 1px}.pagination .page-item.disabled{cursor:not-allowed}.pagination .page-item.disabled .page-link{color:rgba(108,117,125,.57)}@media all and (min-width: 768px){#post-list .card .preview-img,#post-list .card .preview-img img{border-radius:0 .625rem .625rem 0}#post-list .card .card-body{padding:1.75rem 1.75rem 1.25rem 1.75rem}#post-list .card .card-body .card-text{display:inherit !important}#post-list .card .card-body .post-meta i:not(:first-child){margin-left:1.75rem}}@media all and (max-width: 830px){.pagination .page-item:not(:first-child):not(:last-child){display:none}}@media all and (min-width: 831px){#post-list{margin-top:2.5rem}.pagination{font-size:.85rem;justify-content:center}.pagination .page-item:not(:last-child){margin-right:.7rem}.pagination .page-index{display:none}}.post-navigation .btn.disabled,.post-navigation .btn{width:50%;position:relative;border-color:var(--btn-border-color)}header .post-desc{font-size:1.125rem;line-height:1.6}header .post-meta span+span::before{content:"•";padding-left:.25rem;padding-right:.25rem}header .post-meta em a{color:inherit}.post-tail-wrapper{margin-top:6rem;border-bottom:1px double var(--main-border-color)}.post-tail-wrapper .license-wrapper{line-height:1.2rem}.post-tail-wrapper .share-wrapper{vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.post-tail-wrapper .share-wrapper .share-icons>*,.post-tail-wrapper .share-wrapper .share-icons i{font-size:1.125rem}.post-tail-wrapper .share-wrapper .share-icons{display:flex}.post-tail-wrapper .share-wrapper .share-icons i{color:var(--btn-share-color)}.post-tail-wrapper .share-wrapper .share-icons>*{margin-left:.5rem}.post-tail-wrapper .share-wrapper .share-icons button{padding:0;border:none;line-height:inherit}.share-mastodon{--wc-stm-font-family: $font-family-base;--wc-stm-dialog-background-color: var(--card-bg);--wc-stm-form-button-border: 1px solid var(--btn-border-color);--wc-stm-form-submit-background-color: var(--sidebar-btn-bg);--wc-stm-form-cancel-background-color: var(--sidebar-btn-bg);--wc-stm-form-button-background-color-hover: #007bff;--wc-stm-form-button-color-hover: white;font-size:1rem}.post-tags{line-height:2rem}.post-navigation .btn:not(:hover){color:var(--link-color)}.post-navigation .btn:hover:not(.disabled)::before{color:#f5f5f5}.post-navigation .btn.disabled{pointer-events:auto;cursor:not-allowed;background:none;color:gray}.post-navigation .btn.btn-outline-primary.disabled:focus{box-shadow:none}.post-navigation .btn::before{color:var(--text-muted-color);font-size:.65rem;text-transform:uppercase;content:attr(aria-label)}.post-navigation .btn:first-child{border-radius:.625rem 0 0 .625rem;left:.5px}.post-navigation .btn:last-child{border-radius:0 .625rem .625rem 0;right:.5px}.post-navigation p{font-size:1.1rem;line-height:1.5rem;margin-top:.3rem;white-space:normal}@media(hover: hover){.post-navigation .btn,.post-navigation .btn::before{transition:all .35s ease-in-out}}@-webkit-keyframes fade-up{from{opacity:0;position:relative;top:2rem}to{opacity:1;position:relative;top:0}}@keyframes fade-up{from{opacity:0;position:relative;top:2rem}to{opacity:1;position:relative;top:0}}#toc-wrapper{border-left:1px solid rgba(158,158,158,.17);position:-webkit-sticky;position:sticky;top:4rem;transition:top .2s ease-in-out;-webkit-animation:fade-up .8s;animation:fade-up .8s}#toc-wrapper ul{list-style:none;font-size:.85rem;line-height:1.25;padding-left:0}#toc-wrapper ul li:not(:last-child){margin:.4rem 0}#toc-wrapper ul li a{padding:.2rem 0 .2rem 1.25rem}#toc-wrapper ul .toc-link{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#toc-wrapper ul .toc-link:hover{color:var(--toc-highlight);text-decoration:none}#toc-wrapper ul .toc-link::before{display:none}#toc-wrapper ul .is-active-link{color:var(--toc-highlight) !important;font-weight:600}#toc-wrapper ul .is-active-link::before{display:inline-block;width:1px;left:-1px;height:1.25rem;background-color:var(--toc-highlight) !important}#toc-wrapper ul ul{padding-left:.75rem}#related-posts>h3{color:var(--label-color);font-size:1.1rem;font-weight:600}#related-posts time{color:var(--text-muted-color)}#related-posts p{font-size:.9rem;margin-bottom:.5rem;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}#disqus_thread{min-height:8.5rem}.utterances{max-width:100%}.post-tail-wrapper .share-wrapper .share-icons>*:hover i{color:var(--btn-share-hover-color) !important}.share-label{color:inherit;font-size:inherit;font-weight:400}.share-label::after{content:":"}@media all and (max-width: 576px){.post-tail-bottom{flex-wrap:wrap-reverse !important}.post-tail-bottom>div:first-child{width:100%;margin-top:1rem}}@media all and (max-width: 768px){.content>p>img{max-width:calc(100% + 1rem)}}@media all and (max-width: 849px){.post-navigation{padding-left:0;padding-right:0;margin-left:-0.5rem;margin-right:-0.5rem}}.threats{margin-left:27px;display:inline-block;position:sticky;top:0;overflow-y:scroll;height:100vh}.devprops{display:inline-block}.labelCheckbox{margin-left:10px}.outerCheckbox{display:flex}.threatsHeader{display:flex}.downloadCSV{margin-top:2.5rem;margin-left:20px;height:min-content}.btn-home{margin-right:15px;margin-bottom:5px}.threatLinks ins{text-decoration:none !important}.propertiesTable{border:1px solid}.propertiesTable td:nth-child(even){background-color:var(--row-cell-color)}.propertiesTable td{border:1px solid;border-collapse:collapse;text-align:center}.propertiesTable .rowTIDPropTable{border:0px;border-right:1px solid;border-bottom:1px solid;width:5%}.propertiesTable .rowDescPropTable{border:0px;border-bottom:1px solid;width:30%}.propertiesTable .categoryName{position:sticky;top:0;background:var(--main-bg);padding:5px}tr:last-child>td{border-bottom:0px !important}.threatType{text-align:center;word-wrap:break-word;position:sticky;top:0;background:var(--main-bg);padding:5px}.threatEnteries{border-right:1px solid;border-left:1px solid}.threatEnteries .threatContent{border-bottom:1px solid;border-top:1px solid;padding:5px;text-align:center;word-wrap:break-word}.threatEnteries .threatContent:nth-child(odd){background-color:var(--row-cell-color)}.mitigationsTableOnThreat{border:1px solid}.mitigationsTableOnThreat td{border:1px solid;border-collapse:collapse;padding:10px;width:20rem}.mitigationsTableOnThreat .mitigationTableoOnThreatRow{text-align:center}.dropdown-btn{text-decoration:none;color:var(--sidebar-muted-color);display:block;border:none;background:none;text-align:left}.dropdown-list{display:none;padding-left:35px}.row-dropdown{display:flex;--bs-gutter-x: 4.2rem;display:flex;margin-left:calc(-0.5*var(--bs-gutter-x));max-width:100%;padding-right:calc(var(--bs-gutter-x)*.1);padding-left:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col-dropdown{width:110%;margin:auto}i.fa-fw.fas.fa-circle-arrow-down{padding-right:25px;padding-left:10px;padding-top:10px;padding-bottom:10px;border-radius:.75rem}i.fa-fw.fas.fa-circle-arrow-down:hover{background-color:var(--sidebar-hover-bg)}i.fa-fw.fas.fa-circle-arrow-up{display:none;padding-right:25px;padding-left:10px;padding-top:10px;padding-bottom:10px;border-radius:.75rem}i.fa-fw.fas.fa-circle-arrow-up:hover{background-color:var(--sidebar-hover-bg)}.sidebarImg{position:sticky;top:0;background:var(--sidebar-bg)}/*# sourceMappingURL=jekyll-theme-chirpy.css.map */ \ No newline at end of file diff --git a/assets/css/jekyll-theme-chirpy.css.map b/assets/css/jekyll-theme-chirpy.css.map index 3bfef04..01ed00d 100644 --- a/assets/css/jekyll-theme-chirpy.css.map +++ b/assets/css/jekyll-theme-chirpy.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../_sass/addon/module.scss","../../_sass/addon/variables.scss","../../_sass/addon/syntax.scss","../../_sass/colors/syntax-light.scss","../../_sass/colors/syntax-dark.scss","../../_sass/addon/commons.scss","../../_sass/colors/typography-light.scss","../../_sass/colors/typography-dark.scss","../../_sass/layout/home.scss","../../_sass/layout/post.scss","jekyll-theme-chirpy.scss"],"names":[],"mappings":"CAMA,mDACE,2BACA,gBACA,YCuBoB,kCDnBpB,gCACE,kBACA,sBAEA,wDACE,aAMJ,4CACE,cAGF,qBACE,4CACE,kBACA,UACA,2DAIA,oEACE,mBACA,UACA,0DAMR,sCACE,4BACA,uCAGF,+DACE,mBACA,cACA,mBAGF,kOACE,yBACA,gCACA,qBAGF,4CACE,wBAGF,sEACE,oDAGF,4EACE,+BAGF,gFACE,yBACA,sBACA,qBACA,iBAGF,oJACE,mBAGF,yFACE,eAGF,4EACE,kBAGF,iIACE,cC5EY,QDgFZ,oCACE,cACA,kBACA,kBACA,cACA,UACA,cAIJ,iDACE,iCACA,yBACA,sBACA,qBACA,iBAGF,iHACE,oBACA,gBACA,uBACA,qBACA,4BAGF,qGACE,yCACA,gBAGF,kFACE,iBAGF,2BACE,gBAIA,mCACE,2CACA,uBACA,0BACA,kBACA,8CEvIF,oCACE,4CCHF,iCACA,8BACA,mCACA,kCACA,0BACA,sBACA,kCACA,mCACA,kCACA,mCAEA,8EACE,0BAKF,oFACE,YAGF,sFACE,SAGF,0IAEE,cACA,yBAGF,ogBAOE,cAGF,0EACE,cAGF,0EACE,cACA,yBAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cACA,yBAGF,0EACE,cAGF,guBAUE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,kXAKE,cAGF,kJAEE,cAGF,0EACE,cACA,iBAGF,0EACE,cACA,iBAGF,4yBAWE,cAGF,0EACE,cAGF,oJAEE,cAGF,4EACE,cACA,yBAGF,glBAQE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cACA,kBAGF,0EACE,cACA,iBDrMA,qBETF,iCACA,8BACA,mCACA,kCACA,0BACA,sBACA,kCACA,mCACA,kCACA,mCACA,+BAEA,oCACE,cAKF,yCACE,YAGF,0CACE,SAGF,mEAEE,cACA,yBAGF,qCACE,cACA,yBAGF,4PAOE,cAGF,oCACE,cAGF,oCACE,cAGF,uEAEE,cAGF,uEAEE,cAGF,oCACE,cAGF,oCACE,cACA,yBAGF,oCACE,cACA,yBACA,iBAGF,mLAKE,cAGF,oCACE,cAGF,oCACE,cAGF,oCACE,cAGF,mUASE,cAGF,oCACE,cAGF,oCACE,cAGF,oCACE,cAGF,oCACE,cAGF,oCACE,cAGF,oCACE,cAGF,oCACE,cAGF,oCACE,cAGF,+RAQE,cAGF,oCACE,eF9IF,mCACE,2CEfF,iCACA,8BACA,mCACA,kCACA,0BACA,sBACA,kCACA,mCACA,kCACA,mCACA,+BAEA,yEACE,cAKF,mFACE,YAGF,qFACE,SAGF,wIAEE,cACA,yBAGF,2EACE,cACA,yBAGF,+fAOE,cAGF,yEACE,cAGF,yEACE,cAGF,gJAEE,cAGF,gJAEE,cAGF,yEACE,cAGF,yEACE,cACA,yBAGF,yEACE,cACA,yBACA,iBAGF,2WAKE,cAGF,yEACE,cAGF,yEACE,cAGF,yEACE,cAGF,+oBASE,cAGF,yEACE,cAGF,yEACE,cAGF,yEACE,cAGF,yEACE,cAGF,yEACE,cAGF,yEACE,cAGF,yEACE,cAGF,yEACE,cAGF,skBAQE,cAGF,yEACE,cFxIA,sBCnBF,iCACA,8BACA,mCACA,kCACA,0BACA,sBACA,kCACA,mCACA,kCACA,mCAEA,uCACE,0BAKF,0CACE,YAGF,2CACE,SAGF,qEAEE,cACA,yBAGF,kQAOE,cAGF,qCACE,cAGF,qCACE,cACA,yBAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cACA,yBAGF,qCACE,cAGF,gXAUE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,yLAKE,cAGF,yEAEE,cAGF,qCACE,cACA,iBAGF,qCACE,cACA,iBAGF,sZAWE,cAGF,qCACE,cAGF,0EAEE,cAGF,sCACE,cACA,yBAGF,wSAQE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cACA,kBAGF,qCACE,cACA,kBDlLJ,kDACE,2CAGF,cACE,kBACA,qBAGF,mBACE,qCACA,iBACA,oBAGF,WAQE,cACA,sBAEA,eACE,gBACA,UDtCa,OCuCb,mBACA,iBAKE,gCACE,qBACA,iBACA,oBAGF,+BACE,8BAGF,wBACE,iBACA,kBAKN,mBACE,iBACA,oCACA,yBACA,sBACA,oBACA,qBACA,iBAIJ,KACE,qBACA,iBACA,aACA,wBAEA,uBACE,UDhFa,OCiFb,gBACA,sBACA,kBACA,uCAGF,cACE,yBACA,iCACA,gBACA,UAGF,yBACE,iBACA,cAGF,+BACE,mBAGF,gBACE,cAWF,gBACE,yBACA,8BACA,oBAIJ,sBAIE,kDAEA,+BFIA,YEHiB,MFIjB,aEJiB,MAEf,gBAGF,iCACE,yBACA,0BAUA,2IACE,qBACA,eAEA,2KACE,aAMR,aAGE,aACA,8BACA,mBACA,ODlKmB,QCmKnB,mBACA,oBAGA,kBACE,YDxKiB,QC2KjB,oBACE,eACA,MD1KY,QC2KZ,oCAEA,0BACE,cAIK,2BACP,kBACA,QAIF,yBACE,8BACA,iBACA,gBACA,oCAKJ,oBAIE,+BACA,ODzMiB,QC0MjB,MD1MiB,QC2MjB,UACA,yBAEA,sBACE,oCAIA,mCACE,4CAGF,+BACE,qCAIJ,0BACE,aAGF,yCACE,uCAEA,2CACE,WAMR,kCAEI,+BFzGF,YE0GmB,EFzGnB,aEyGmB,EAEf,cDrPQ,QCwPV,mCF/GF,YEgHmB,EF/GnB,aE+GmB,EAIf,2CACE,WACA,qBACA,YALW,KAMX,MD1PQ,OC2PR,OD3PQ,OC4PR,kBACA,gDACA,gGAMF,wCAEE,uBG7RR,KAuBE,eAtBA,oCACE,4CCEF,iBACA,mBACA,6BAGA,sBACA,4BACA,uCACA,yBACA,uBACA,mCACA,iCACA,sBACA,gCACA,qBACA,4BACA,+BACA,sCACA,0BACA,0BACA,kCACA,2CACA,oFAKA,2HAQA,uCACA,+BACA,sBACA,gCACA,+BACA,gCACA,6CACA,wBACA,6BACA,6BAGA,qCACA,qCACA,0CACA,6BACA,oCAGA,gCACA,oCACA,+CAGA,yBACA,wBACA,iCACA,iBACA,yBACA,yFAEA,gCACA,qBACA,2BACA,qBACA,0BACA,oCACA,sBACA,2CACA,yCACA,iCACA,0BACA,kCACA,wCACA,qCACA,6CACA,oCAGA,sBACA,sCACA,gCACA,yBAWA,0CACA,+CACA,6CAGA,uCACA,4BACA,mCAhBA,8EACE,2CAGF,wDACE,aD3FA,qBEHF,2BACA,2BACA,qCAGA,iCACA,4BACA,uCACA,yBACA,uBACA,2CACA,iCACA,iCACA,0CACA,qBACA,4BACA,yCACA,sCACA,iCACA,0BACA,qCACA,4CACA,yBACA,4EACA,0HAQA,4BACA,+BACA,sBACA,gCACA,+BACA,iDACA,4BACA,0BACA,6BACA,+CAGA,mCACA,uCACA,uCACA,wCACA,+CAGA,2CACA,8CACA,qCAGA,oCACA,6BACA,qBACA,8BACA,oCACA,uCACA,2BACA,iCACA,mBACA,yBACA,sFAEA,0BACA,0BACA,wBACA,8CACA,uCACA,gDACA,uCACA,kCACA,0CACA,mDACA,wCACA,oCAGA,8BACA,8BACA,8BACA,yBAGA,0CACA,uCACA,qCAGA,uCACA,kCACA,iDAwCA,kBAtCA,4BACE,aAIF,4EAEE,gCAIA,8CACE,uCAGF,kDACE,iBACA,kBACA,kBACA,sCAEA,6DACE,mCAKN,iDACE,+HAaF,oCACE,mBFnIF,mCACE,2CETF,2BACA,2BACA,qCAGA,iCACA,4BACA,uCACA,yBACA,uBACA,2CACA,iCACA,iCACA,0CACA,qBACA,4BACA,yCACA,sCACA,iCACA,0BACA,qCACA,4CACA,yBACA,4EACA,0HAQA,4BACA,+BACA,sBACA,gCACA,+BACA,iDACA,4BACA,0BACA,6BACA,+CAGA,mCACA,uCACA,uCACA,wCACA,+CAGA,2CACA,8CACA,qCAGA,oCACA,6BACA,qBACA,8BACA,oCACA,uCACA,2BACA,iCACA,mBACA,yBACA,sFAEA,0BACA,0BACA,wBACA,8CACA,uCACA,gDACA,uCACA,kCACA,0CACA,mDACA,wCACA,oCAGA,8BACA,8BACA,8BACA,yBAGA,0CACA,uCACA,qCAGA,uCACA,kCACA,iDAwCA,kBAtCA,yDACE,aAIF,0JAEE,gCAIA,6FACE,uCAGF,qGACE,iBACA,kBACA,kBACA,sCAEA,2HACE,mCAKN,mGACE,+HAaF,yEACE,kBF7HA,sBCdF,iBACA,mBACA,6BAGA,sBACA,4BACA,uCACA,yBACA,uBACA,mCACA,iCACA,sBACA,gCACA,qBACA,4BACA,+BACA,sCACA,0BACA,0BACA,kCACA,2CACA,oFAKA,2HAQA,uCACA,+BACA,sBACA,gCACA,+BACA,gCACA,6CACA,wBACA,6BACA,6BAGA,qCACA,qCACA,0CACA,6BACA,oCAGA,gCACA,oCACA,+CAGA,yBACA,wBACA,iCACA,iBACA,yBACA,yFAEA,gCACA,qBACA,2BACA,qBACA,0BACA,oCACA,sBACA,2CACA,yCACA,iCACA,0BACA,kCACA,wCACA,qCACA,6CACA,oCAGA,sBACA,sCACA,gCACA,yBAWA,0CACA,+CACA,6CAGA,uCACA,4BACA,mCAhBA,uCACE,2CAGF,4BACE,cDxEJ,KACE,0BACA,kHAEA,wBACA,mCACA,YJHiB,+CISjB,GAeI,kBAfJ,GAeI,kBAfJ,GAeI,kBAfJ,GAeI,kBAfJ,GAiBI,eAKN,EAGE,qBAGF,IACE,eACA,YACA,gCAEA,UAGE,0BACA,kBAIJ,WACE,qDACA,kBACA,mCAEA,wBACE,gBAGF,2BACE,cACA,kBACA,4BACA,+BAIA,mCACE,kBACA,WACA,kBACA,YACA,iBACA,oBACA,mCLqFJ,sBACE,sCAEA,8BACE,QKrFmB,ILsFnB,mCACA,4BANJ,uBACE,uCAEA,+BACE,QKpFoB,ILqFpB,oCACA,0BANJ,0BACE,0CAEA,kCACE,QKnFuB,ILoFvB,uCACA,0BANJ,yBACE,yCAEA,iCACE,QKlFsB,ILmFtB,sCACA,0BKjFN,IACE,oBACA,qBACA,sBACA,mBACA,kBACA,kBACA,eACA,kBACA,4BACA,qCACA,qBACA,uCACA,gDAGF,GACE,sCACA,UAGF,OACE,gCACA,OJ3Hc,KI4Hd,8CACA,aAgBA,SACE,kBACA,gBAcJ,QACE,SACA,+BACA,gBACA,mBAEA,mBACE,wBACA,gBAGF,gBACE,kBACA,+CAEA,iCACE,mBAIJ,iBACE,gBAMF,8BACE,oBACA,oBLvBF,MADwD,mBAExD,UKwBiB,QLvBjB,YAH2C,IK6B3C,yBACE,oBACA,iBACA,oBACA,oBACA,wBAEA,+BACE,2BAMJ,kBAOE,cAIJ,cACE,kBACA,iBAGE,kCACE,oBAKF,mBACE,kBACA,aACA,gBAMK,WLhGT,YKiGiB,ILhGjB,aKgGiB,ILvFjB,aKwFiB,ILvFjB,cKuFiB,IAEf,oCASO,kBACP,gBACA,cACA,kBACA,aACA,kBACA,oCAOJ,eACE,gBACA,qBAEA,qBACE,eACA,gBACA,iBAEA,2BACE,8CAQA,8BACE,+CAEA,4CACE,mCAGF,8CACE,kCAsCV,cAGE,SACA,0BACA,8BAEA,sBAGE,WACA,WACA,YACA,kBACA,sCACA,UACA,oCAIA,4BACE,WAKN,KACE,iBAEA,QACE,gBACA,qBAKE,mDLjMJ,kBACA,SACA,2BK4NF,SACE,kBACA,gBACA,yBAGE,iBLtQF,WKyQmB,MLxQnB,cKwQmB,MAEf,eAcF,8FAEE,8BACA,6BAEA,0GACE,gBACA,oBAGF,oNAEE,8BACA,6BACA,eAKN,sBACE,8BACA,6BAEA,yBACE,qBACA,eAGA,2BACE,WACA,qBACA,4BAEA,mCACE,oCAIJ,4BACE,8BACA,6BAIJ,2CACE,6BACA,sBAIJ,eACE,iBAGF,kBACE,8BAQJ,UACE,qBACA,eACA,kBACA,oBACA,yCACA,gBACA,8BACA,mBAEA,2BACE,mBAIJ,YACE,8BAGF,UACE,oBACA,oBAGF,SACE,UACA,iBACA,kBAuCF,aACE,WACA,YACA,mBACA,kBAIA,oBACE,qBAGF,kBACE,cACA,WACA,YACA,eACA,gBACA,YACA,gBAOJ,UACE,4BACA,gBACA,kBACA,wBAEA,gBACE,gBAMJ,QACE,yBAES,eACP,wBAIJ,UACE,wBAGF,SACE,8BAGF,QACE,6BAGF,aACE,uBAGF,gBACE,8BAIF,YACE,yCAIF,eACE,gBACA,gBACA,gBAKA,8CACE,gCAIJ,UACE,cACA,oBACA,mBAGF,oBACE,8BAGF,aACE,gBACA,wDACA,6BACA,2EAGF,MACE,WACA,0BAGF,OACE,YACA,0BAOF,kBACE,kBACA,gBACA,iBAGF,SACE,gBAIF,SACE,kBAIF,cACE,kBACA,0BASF,SL3hBE,aK4hBe,EL3hBf,cK2hBe,EAEf,eACA,MACA,OACA,YACA,gBACA,MJlsBc,MImsBd,WACA,6BACA,mDAQA,wBACA,qBANA,4BACE,aAQA,0GACE,kCAQJ,iBACE,cACA,YACA,YACA,gBACA,gDACA,wBACA,mBACA,qBACE,gBACA,kBACA,mBACA,yBAEA,2BACE,qBAKN,0BL9lBA,WK+lBiB,OL9lBjB,cK8lBiB,OAGf,qBACA,sBACA,WAGF,qBACE,oBACA,gBACA,kBACA,gBACA,qBACA,mBACA,oBACA,iBAEA,uBAIE,8BAIJ,wBACE,cACA,iCACA,kBACA,iBACA,kBACA,yBACA,sBACA,qBACA,iBAGF,YACE,mBAEA,wBACE,WACA,kBACA,qBAEA,mCLnoBJ,YKooBqB,MLnoBrB,eKmoBqB,MAEf,aACA,mBACA,qBACA,gBAEA,yCACE,yCAGF,qCACE,cACA,oBAGF,wCACE,cACA,oBAGJ,sCACE,YAIA,yCACE,kCACA,yCAEA,8CACE,UAKN,0CACE,kBAIN,qBACE,mBAGF,yBACE,kBACA,mBACA,qBAIA,iEACE,MAHS,QAIT,OAJS,QAKT,cA7JG,MA8JH,kBACA,+BACA,uCACA,kBACA,aACA,mBACA,uBACA,iDAEA,6EACE,yCASF,4CACE,aJx2BK,MI42BT,2BACE,YA/BS,QAkCX,sCACE,UACA,SAOF,sCLtuBF,YKwuBmB,sBLvuBnB,aKuuBmB,sBAEf,0CACA,WACA,MA1Ma,IA2Mb,OA3Ma,IA4Mb,kBACA,cA5MG,MAiNT,qBACE,iCACE,wBAGF,UACE,4CAGF,cACE,8CAIJ,uBACE,aACA,YACA,WACA,cAEA,gCACE,gBAMJ,gBACE,OJ95Bc,KI+5Bd,kCAIA,iBACE,WAGF,oBACE,eACA,8BACA,mBAQI,iDACE,YACA,gBAOV,4BL9xBE,yCKkyBF,mBLlyBE,yCKsyBF,uBLtyBE,yCK0yBF,wBL1yBE,yCK8yBF,cL9yBE,yCKkzBF,kCL9yBE,WKkzBF,yBLlzBE,WKszBF,6BLtzBE,WK0zBF,8BL1zBE,WK8zBF,oBL9zBE,WKk0BF,OACE,aACA,WACA,mBACA,4CACA,0BACA,gBAEA,SACE,UACA,gBACA,+BAIJ,iCAEE,aAIF,eACE,wBACA,aACA,mBAKF,cACE,kBACA,SACA,gBACA,qBACA,wBACA,YAEA,oBACE,gBAIJ,cACE,eAEA,iBACE,qBAGF,wBACE,qBACA,iBACA,eACA,gCACA,YACA,cACA,wBAEA,gCACE,YACA,8BACA,oBAON,gBACE,oBAEA,kBASE,iBACA,mBAGF,wBACE,WAEA,yCACE,mBAIF,0BACE,cACA,oBACA,cAGF,0BACE,gBACA,uBACA,oBACA,qBACA,4BAKN,cACE,aACA,iBACA,gBACA,uBACA,+BACA,kBACA,UACA,gBACA,uBACA,oBACA,mBAGF,MACE,aACA,eACA,cACA,YACA,WACA,UAES,wBACP,yBAMJ,cACE,kBLr9BA,aKu9Be,ELt9Bf,cKs9Be,EAEf,yBACE,iBAIJ,8ELx+BE,YK2+Be,EL1+Bf,aK0+Be,EAIf,2BACE,gBAMJ,aACE,aACA,UACA,eACA,eACA,WACA,gBACA,4BACA,iCACA,UACA,MJxoCc,QIyoCd,OJzoCc,QI0oCd,kBACA,mDACA,kCACA,0CAEA,mBACE,kCACA,0CAGF,eACE,YJrpCY,QIspCZ,kBACA,WAKF,yBACE,KACE,UACA,UAIJ,iBACE,KACE,UACA,UAIJ,4BACE,gBACA,mBACA,cAGF,0BACE,4BACA,oBAEA,iCACE,cACA,eAKF,yBACE,cACA,gBACA,oBACA,mCACA,2BACA,sCACA,iCACA,eACA,SACA,WACA,2BACA,4BACA,oBAcN,kCAGM,yCLjlCJ,YKklCqB,MLjlCrB,aKilCqB,MAEf,gBACA,eAKN,QACE,WACA,aAIJ,kCACE,iCACE,eAOF,yBL/lCA,aKimCiB,ELhmCjB,cKgmCiB,GAKnB,kCAWE,OAJI,WALM,mBAYR,OJzwCkB,KI0wClB,iBAGF,YACE,6BAIA,2BACE,wBAGF,gCACE,4BAGF,+BACE,kBAIJ,SA7BI,WALM,mBAqCR,6BACA,qCAGF,cApCI,WALM,mBA6CV,iCAEE,eAGF,uBACE,WAGF,mBAEE,aAGF,gBAxDI,2CA2DF,OAGF,oBAEE,aAGF,+CAGE,cAGF,gCACE,iBAGF,MACE,kCAGF,iBACE,aAEA,0BACE,kBAIJ,SACE,YAKJ,kCAEE,KACE,kBAGF,cACE,YJh3CY,MIo3CZ,0BACE,gBAIJ,cACE,aAGF,OACE,UJt3Ce,MIy3CjB,uBACE,UJv3CqB,OIw3CrB,iCAIA,QACE,gBAIJ,iCACE,cAIF,aACE,SACA,gBAGF,cACE,iBAIJ,kCACE,SACE,8BACA,uBACA,2BAEF,OACE,0BAIJ,yDACE,oCACE,aACA,eAKJ,yDACE,oBACE,gBAGF,YACE,UACA,gBACA,uBACA,oBACA,oBAKJ,mCACE,eACE,aAGF,iCACE,mCAMJ,mCACE,OACE,kBAGF,cACE,+BAGF,wBACE,UAEA,uCACE,oBAGF,wCACE,mBAGF,kDACE,kBACA,YAIJ,SACE,mBAIJ,mCACE,aACE,+CAIJ,mCAGE,cACE,YJj/CkB,MIo/CpB,gBACE,KJr/CkB,MIw/CpB,OACE,kCAKF,yBACE,iBACA,gCACA,iCAGF,0BAEE,gCAGF,aACE,+CAMJ,mCAGE,cACE,YJphDkB,MIuhDpB,gBACE,KJxhDkB,MI2hDpB,OACE,kCAKF,yBACE,UJxhDqB,OIyhDrB,gCACA,iCAGF,0BAEE,gCAGF,aACE,+CGhjDJ,WACE,gBAGE,+BACE,qBAGF,0CACE,sBAIJ,iBACE,SACA,gBAEA,gEACE,kCAWF,4BACE,YACA,aAEA,wCAGE,sCACA,kBAGF,sFACE,yCAMA,iDAGE,gBACA,SAQA,2DACE,mBAIJ,0CAGE,cAGF,uDACE,cACA,mBACA,gBACA,uBAOV,YACE,wBACA,4BACA,6BAEA,oBACE,qBAIA,kCACE,sCACA,gBACA,oBACA,wBACA,yBACA,oBACA,SACA,yBAIA,yCACE,kDAMA,qDACE,mDAKN,gCACE,mBAEA,2CACE,4BAOR,kCACE,gEACE,kCAKE,4BACE,wCAEA,uCACE,2BAKE,2DACE,qBAUd,kCAGM,0DACE,cAOR,kCACE,WACE,kBAGF,YACE,iBACA,uBAGE,wCACE,mBAIJ,wBACE,cCrLN,qDACE,UACA,kBACA,qCAUA,kBAGE,mBACA,gBAIA,oCAdF,YACA,aAFc,OAGd,cAH4B,OAyBxB,uBACE,cAMR,mBAGE,gBACA,kDAEA,oCACE,mBAmBF,kCACE,sBACA,yBACA,sBACA,qBACA,iBAEA,kGACE,mBAGF,+CACE,aAEA,iDACE,6BAKF,iDAGE,kBASF,sDACE,UACA,YACA,oBAQR,gBAEE,wCACA,iDACA,+DACA,6DACA,6DACA,qDACA,wCAEA,eAGF,WACE,iBAeE,kCACE,wBAIA,mDACE,cAIJ,+BAGE,oBACA,mBACA,gBACA,WAGF,yDACE,gBAGF,8BACE,8BACA,iBACA,yBACA,yBAGF,kCACE,kCACA,UAGF,iCACE,kCACA,WAIJ,mBACE,iBACA,mBACA,iBACA,mBAIJ,qBAEI,oDAEE,iCAKN,2BACE,KACE,UACA,kBACA,SAGF,GACE,UACA,kBACA,OAIJ,mBACE,KACE,UACA,kBACA,SAGF,GACE,UACA,kBACA,OAIJ,aACE,4CACA,wBACA,gBACA,SACA,+BACA,8BACA,sBAEA,gBACE,gBACA,iBACA,iBACA,eAGE,oCACE,eAGF,qBACE,8BAMJ,0BACE,cACA,mBACA,gBACA,uBAEA,gCACE,2BACA,qBAGF,kCACE,aAIJ,gCACE,sCACA,gBAEA,wCACE,qBACA,UACA,UACA,eACA,iDAIJ,mBACE,oBAQJ,kBTjHA,MADwD,mBAExD,USiHiB,OThHjB,YSgHyB,IAGzB,oBAIE,8BAGF,iBACE,gBACA,oBACA,gBACA,uBACA,oBACA,qBACA,4BAWJ,eACE,kBAGF,YACE,eAGF,yDACE,8CAGF,aT1JE,MS2J6B,QT1J7B,US0Je,QTzJf,YSyJwB,IAExB,oBACE,YAIJ,kCACE,kBACE,kCAEA,kCACE,WACA,iBAKN,kCACE,eACE,6BAKJ,kCACE,iBACE,eACA,gBACA,oBACA,sBCrWJ,SACE,iBACA,qBACA,gBACA,MACA,kBACA,aAGF,UACE,qBAGF,eACE,iBAGF,eACE,aAGF,eACE,aAGF,aACE,kBACA,iBACA,mBAGF,gBACE,kBAGF,UACE,kBACA,kBAIA,iBACE,gCAKJ,iBACE,iBACA,oCACE,uCAEF,oBACE,iBACA,yBACA,kBAEF,kCACE,WACA,uBACA,wBACA,SAEF,mCACE,WACA,wBACA,UAEF,+BACE,gBACA,MACA,0BACA,YAIJ,iBACE,6BAIF,YACE,kBACA,qBACA,gBACA,MACA,0BACA,YAGF,gBACE,uBACA,sBACA,+BACE,wBACA,qBACA,YACA,kBACA,qBACA,8CACE,uCAMN,cACE,qBACA,iCACA,cACA,YACA,gBACA,gBAGF,eACE,aACA,kBAGF,cACE,aACA,sBACA,aACA,0CACA,eACA,0CACA,yCACA,8BAGF,cACE,WACA,YAGF,iCACE,mBACA,kBACA,iBACA,oBACA,qBACA,uCACE,yCAIJ,+BACE,aACA,mBACA,kBACA,iBACA,oBACA,qBACA,qCACE,yCAIJ,YACE,gBACA,MACA","sourcesContent":["/*\n* Mainly scss modules, only imported to `assets/css/main.scss`\n*/\n\n/* ---------- scss placeholder --------- */\n\n%heading {\n color: var(--heading-color);\n font-weight: 400;\n font-family: $font-family-heading;\n}\n\n%section {\n main & {\n margin-top: 2.5rem;\n margin-bottom: 1.25rem;\n\n &:focus {\n outline: none; /* avoid outline in Safari */\n }\n }\n}\n\n%anchor {\n .anchor {\n font-size: 80%;\n }\n\n @media (hover: hover) {\n .anchor {\n visibility: hidden;\n opacity: 0;\n transition: opacity 0.25s ease-in, visibility 0s ease-in 0.25s;\n }\n\n &:hover {\n .anchor {\n visibility: visible;\n opacity: 1;\n transition: opacity 0.25s ease-in, visibility 0s ease-in 0s;\n }\n }\n }\n}\n\n%tag-hover {\n background: var(--tag-hover);\n transition: background 0.35s ease-in-out;\n}\n\n%table-cell {\n padding: 0.4rem 1rem;\n font-size: 95%;\n white-space: nowrap;\n}\n\n%link-hover {\n color: #d2603a !important;\n border-bottom: 1px solid #d2603a;\n text-decoration: none;\n}\n\n%link-color {\n color: var(--link-color);\n}\n\n%link-underline {\n border-bottom: 1px solid var(--link-underline-color);\n}\n\n%clickable-transition {\n transition: all 0.3s ease-in-out;\n}\n\n%no-cursor {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n%no-bottom-border {\n border-bottom: none;\n}\n\n%cursor-pointer {\n cursor: pointer;\n}\n\n%normal-font-style {\n font-style: normal;\n}\n\n%rounded {\n border-radius: $base-radius;\n}\n\n%img-caption {\n + em {\n display: block;\n text-align: center;\n font-style: normal;\n font-size: 80%;\n padding: 0;\n color: #6d6c6c;\n }\n}\n\n%sidebar-links {\n color: var(--sidebar-muted-color);\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n%text-clip {\n display: -webkit-box;\n overflow: hidden;\n text-overflow: ellipsis;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n%text-highlight {\n color: var(--text-muted-hightlight-color);\n font-weight: 600;\n}\n\n%text-sm {\n font-size: 0.85rem;\n}\n\n%text-xs {\n font-size: 0.8rem;\n}\n\n%sup-fn-target {\n &:target {\n background-color: var(--footnote-target-bg);\n width: -moz-fit-content;\n width: -webkit-fit-content;\n width: fit-content;\n transition: background-color 1.75s ease-in-out;\n }\n}\n\n/* ---------- scss mixin --------- */\n\n@mixin mt-mb($value) {\n margin-top: $value;\n margin-bottom: $value;\n}\n\n@mixin ml-mr($value) {\n margin-left: $value;\n margin-right: $value;\n}\n\n@mixin pt-pb($val) {\n padding-top: $val;\n padding-bottom: $val;\n}\n\n@mixin pl-pr($val) {\n padding-left: $val;\n padding-right: $val;\n}\n\n@mixin placeholder {\n color: var(--text-muted-color) !important;\n}\n\n@mixin placeholder-focus {\n opacity: 0.6;\n}\n\n@mixin label($font-size: 1rem, $font-weight: 600, $color: var(--label-color)) {\n color: $color;\n font-size: $font-size;\n font-weight: $font-weight;\n}\n\n@mixin align-center {\n position: relative;\n left: 50%;\n transform: translateX(-50%);\n}\n\n@mixin prompt($type, $fa-content, $fa-style: 'solid') {\n &.prompt-#{$type} {\n background-color: var(--prompt-#{$type}-bg);\n\n &::before {\n content: $fa-content;\n color: var(--prompt-#{$type}-icon-color);\n font: var(--fa-font-#{$fa-style});\n }\n }\n}\n","/*\n * The SCSS variables\n */\n\n/* sidebar */\n\n$sidebar-width: 260px !default; /* the basic width */\n$sidebar-width-large: 300px !default; /* screen width: >= 1650px */\n$sb-btn-gap: 0.8rem !default;\n$sb-btn-gap-lg: 1rem !default;\n\n/* other framework sizes */\n\n$topbar-height: 3rem !default;\n$search-max-width: 200px !default;\n$footer-height: 6rem !default;\n$footer-height-large: 6rem !default; /* screen width: < 850px */\n$main-content-max-width: 1700px !default;\n$base-radius: 0.625rem !default;\n$back2top-size: 2.75rem !default;\n\n/* syntax highlight */\n\n$code-font-size: 0.85rem !default;\n$code-header-height: 2.25rem !default;\n$code-dot-size: 0.75rem !default;\n$code-dot-gap: 0.5rem !default;\n$code-icon-width: 1.75rem !default;\n\n/* fonts */\n\n$font-family-base: 'Source Sans Pro', 'Microsoft Yahei', sans-serif !default;\n$font-family-heading: Lato, 'Microsoft Yahei', sans-serif !default;\n","/*\n* The syntax highlight.\n*/\n\n@import 'colors/syntax-light';\n@import 'colors/syntax-dark';\n\nhtml {\n @media (prefers-color-scheme: light) {\n &:not([data-mode]),\n &[data-mode='light'] {\n @include light-syntax;\n }\n\n &[data-mode='dark'] {\n @include dark-syntax;\n }\n }\n\n @media (prefers-color-scheme: dark) {\n &:not([data-mode]),\n &[data-mode='dark'] {\n @include dark-syntax;\n }\n\n &[data-mode='light'] {\n @include light-syntax;\n }\n }\n}\n\n/* -- code snippets -- */\n\n%code-snippet-bg {\n background-color: var(--highlight-bg-color);\n}\n\n%code-snippet-padding {\n padding-left: 1rem;\n padding-right: 1.5rem;\n}\n\n.highlighter-rouge {\n color: var(--highlighter-rouge-color);\n margin-top: 0.5rem;\n margin-bottom: 1.2em; /* Override BS Inline-code style */\n}\n\n.highlight {\n @extend %rounded;\n @extend %code-snippet-bg;\n\n @at-root figure#{&} {\n @extend %code-snippet-bg;\n }\n\n overflow: auto;\n padding-bottom: 0.75rem;\n\n pre {\n margin-bottom: 0;\n font-size: $code-font-size;\n line-height: 1.4rem;\n word-wrap: normal; /* Fixed Safari overflow-x */\n }\n\n table {\n td {\n &:first-child {\n display: inline-block;\n margin-left: 1rem;\n margin-right: 0.75rem;\n }\n\n &:last-child {\n padding-right: 2rem !important;\n }\n\n pre {\n overflow: visible; /* Fixed iOS safari overflow-x */\n word-break: normal; /* Fixed iOS safari linenos code break */\n }\n }\n }\n\n .lineno {\n text-align: right;\n color: var(--highlight-lineno-color);\n -webkit-user-select: none;\n -moz-user-select: none;\n -o-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n} /* .highlight */\n\ncode {\n -webkit-hyphens: none;\n -ms-hyphens: none;\n hyphens: none;\n color: var(--code-color);\n\n &.highlighter-rouge {\n font-size: $code-font-size;\n padding: 3px 5px;\n word-break: break-word;\n border-radius: 4px;\n background-color: var(--inline-code-bg);\n }\n\n &.filepath {\n background-color: inherit;\n color: var(--filepath-text-color);\n font-weight: 600;\n padding: 0;\n }\n\n a > &.highlighter-rouge {\n padding-bottom: 0; /* show link's underlinke */\n color: inherit;\n }\n\n a:hover > &.highlighter-rouge {\n border-bottom: none;\n }\n\n blockquote & {\n color: inherit;\n }\n}\n\ntd.rouge-code {\n @extend %code-snippet-padding;\n\n /*\n Prevent some browser extends from\n changing the URL string of code block.\n */\n a {\n color: inherit !important;\n border-bottom: none !important;\n pointer-events: none;\n }\n}\n\ndiv[class^='language-'] {\n @extend %rounded;\n @extend %code-snippet-bg;\n\n box-shadow: var(--language-border-color) 0 0 0 1px;\n\n .content > & {\n @include ml-mr(-1rem);\n\n border-radius: 0;\n }\n\n .highlight {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n/* Hide line numbers for default, console, and terminal code snippets */\ndiv {\n &.nolineno,\n &.language-plaintext,\n &.language-console,\n &.language-terminal {\n td:first-child {\n padding: 0 !important;\n margin-right: 0;\n\n .lineno {\n display: none;\n }\n }\n }\n}\n\n.code-header {\n @extend %no-cursor;\n\n display: flex;\n justify-content: space-between;\n align-items: center;\n height: $code-header-height;\n margin-left: 0.75rem;\n margin-right: 0.25rem;\n\n /* the label block */\n span {\n line-height: $code-header-height;\n\n /* label icon */\n i {\n font-size: 1rem;\n width: $code-icon-width;\n color: var(--code-header-icon-color);\n\n &.small {\n font-size: 70%;\n }\n }\n\n @at-root [file] #{&} > i {\n position: relative;\n top: 1px; /* center the file icon */\n }\n\n /* label text */\n &::after {\n content: attr(data-label-text);\n font-size: 0.85rem;\n font-weight: 600;\n color: var(--code-header-text-color);\n }\n }\n\n /* clipboard */\n button {\n @extend %cursor-pointer;\n @extend %rounded;\n\n border: 1px solid transparent;\n height: $code-header-height;\n width: $code-header-height;\n padding: 0;\n background-color: inherit;\n\n i {\n color: var(--code-header-icon-color);\n }\n\n &[timeout] {\n &:hover {\n border-color: var(--clipboard-checked-color);\n }\n\n i {\n color: var(--clipboard-checked-color);\n }\n }\n\n &:focus {\n outline: none;\n }\n\n &:not([timeout]):hover {\n background-color: rgba(128, 128, 128, 0.37);\n\n i {\n color: white;\n }\n }\n }\n}\n\n@media all and (min-width: 576px) {\n div[class^='language-'] {\n .content > & {\n @include ml-mr(0);\n\n border-radius: $base-radius;\n }\n\n .code-header {\n @include ml-mr(0);\n\n $dot-margin: 1rem;\n\n &::before {\n content: '';\n display: inline-block;\n margin-left: $dot-margin;\n width: $code-dot-size;\n height: $code-dot-size;\n border-radius: 50%;\n background-color: var(--code-header-muted-color);\n box-shadow: ($code-dot-size + $code-dot-gap) 0 0\n var(--code-header-muted-color),\n ($code-dot-size + $code-dot-gap) * 2 0 0\n var(--code-header-muted-color);\n }\n\n span {\n // center the text of label\n margin-left: calc(($dot-margin + $code-dot-size) / 2 * -1);\n }\n }\n }\n}\n","/*\n * The syntax light mode code snippet colors.\n */\n\n@mixin light-syntax {\n /* --- custom light colors --- */\n --language-border-color: #ececec;\n --highlight-bg-color: #f6f8fa;\n --highlighter-rouge-color: #3f596f;\n --highlight-lineno-color: #9e9e9e;\n --inline-code-bg: #f6f6f7;\n --code-color: #3a3a3a;\n --code-header-text-color: #a3a3a3;\n --code-header-muted-color: #e5e5e5;\n --code-header-icon-color: #c9c8c8;\n --clipboard-checked-color: #43c743;\n\n [class^='prompt-'] {\n --inline-code-bg: #fbfafa;\n }\n\n /* --- Syntax highlight theme from `rougify style github` --- */\n\n .highlight table td {\n padding: 5px;\n }\n\n .highlight table pre {\n margin: 0;\n }\n\n .highlight,\n .highlight .w {\n color: #24292f;\n background-color: #f6f8fa;\n }\n\n .highlight .k,\n .highlight .kd,\n .highlight .kn,\n .highlight .kp,\n .highlight .kr,\n .highlight .kt,\n .highlight .kv {\n color: #cf222e;\n }\n\n .highlight .gr {\n color: #f6f8fa;\n }\n\n .highlight .gd {\n color: #82071e;\n background-color: #ffebe9;\n }\n\n .highlight .nb {\n color: #953800;\n }\n\n .highlight .nc {\n color: #953800;\n }\n\n .highlight .no {\n color: #953800;\n }\n\n .highlight .nn {\n color: #953800;\n }\n\n .highlight .sr {\n color: #116329;\n }\n\n .highlight .na {\n color: #116329;\n }\n\n .highlight .nt {\n color: #116329;\n }\n\n .highlight .gi {\n color: #116329;\n background-color: #dafbe1;\n }\n\n .highlight .kc {\n color: #0550ae;\n }\n\n .highlight .l,\n .highlight .ld,\n .highlight .m,\n .highlight .mb,\n .highlight .mf,\n .highlight .mh,\n .highlight .mi,\n .highlight .il,\n .highlight .mo,\n .highlight .mx {\n color: #0550ae;\n }\n\n .highlight .sb {\n color: #0550ae;\n }\n\n .highlight .bp {\n color: #0550ae;\n }\n\n .highlight .ne {\n color: #0550ae;\n }\n\n .highlight .nl {\n color: #0550ae;\n }\n\n .highlight .py {\n color: #0550ae;\n }\n\n .highlight .nv,\n .highlight .vc,\n .highlight .vg,\n .highlight .vi,\n .highlight .vm {\n color: #0550ae;\n }\n\n .highlight .o,\n .highlight .ow {\n color: #0550ae;\n }\n\n .highlight .gh {\n color: #0550ae;\n font-weight: bold;\n }\n\n .highlight .gu {\n color: #0550ae;\n font-weight: bold;\n }\n\n .highlight .s,\n .highlight .sa,\n .highlight .sc,\n .highlight .dl,\n .highlight .sd,\n .highlight .s2,\n .highlight .se,\n .highlight .sh,\n .highlight .sx,\n .highlight .s1,\n .highlight .ss {\n color: #0a3069;\n }\n\n .highlight .nd {\n color: #8250df;\n }\n\n .highlight .nf,\n .highlight .fm {\n color: #8250df;\n }\n\n .highlight .err {\n color: #f6f8fa;\n background-color: #82071e;\n }\n\n .highlight .c,\n .highlight .ch,\n .highlight .cd,\n .highlight .cm,\n .highlight .cp,\n .highlight .cpf,\n .highlight .c1,\n .highlight .cs {\n color: #68717a;\n }\n\n .highlight .gl {\n color: #68717a;\n }\n\n .highlight .gt {\n color: #68717a;\n }\n\n .highlight .ni {\n color: #24292f;\n }\n\n .highlight .si {\n color: #24292f;\n }\n\n .highlight .ge {\n color: #24292f;\n font-style: italic;\n }\n\n .highlight .gs {\n color: #24292f;\n font-weight: bold;\n }\n} /* light-syntax */\n","/*\n * The syntax dark mode styles.\n */\n\n@mixin dark-syntax {\n --language-border-color: #2d2d2d;\n --highlight-bg-color: #151515;\n --highlighter-rouge-color: #c9def1;\n --highlight-lineno-color: #808080;\n --inline-code-bg: #323238;\n --code-color: #b0b0b0;\n --code-header-text-color: #6a6a6a;\n --code-header-muted-color: #353535;\n --code-header-icon-color: #565656;\n --clipboard-checked-color: #2bcc2b;\n --filepath-text-color: #cacaca;\n\n .highlight .gp {\n color: #87939d;\n }\n\n /* --- Syntax highlight theme from `rougify style base16.dark` --- */\n\n .highlight table td {\n padding: 5px;\n }\n\n .highlight table pre {\n margin: 0;\n }\n\n .highlight,\n .highlight .w {\n color: #d0d0d0;\n background-color: #151515;\n }\n\n .highlight .err {\n color: #151515;\n background-color: #ac4142;\n }\n\n .highlight .c,\n .highlight .ch,\n .highlight .cd,\n .highlight .cm,\n .highlight .cpf,\n .highlight .c1,\n .highlight .cs {\n color: #848484;\n }\n\n .highlight .cp {\n color: #f4bf75;\n }\n\n .highlight .nt {\n color: #f4bf75;\n }\n\n .highlight .o,\n .highlight .ow {\n color: #d0d0d0;\n }\n\n .highlight .p,\n .highlight .pi {\n color: #d0d0d0;\n }\n\n .highlight .gi {\n color: #90a959;\n }\n\n .highlight .gd {\n color: #f08a8b;\n background-color: #320000;\n }\n\n .highlight .gh {\n color: #6a9fb5;\n background-color: #151515;\n font-weight: bold;\n }\n\n .highlight .k,\n .highlight .kn,\n .highlight .kp,\n .highlight .kr,\n .highlight .kv {\n color: #aa759f;\n }\n\n .highlight .kc {\n color: #d28445;\n }\n\n .highlight .kt {\n color: #d28445;\n }\n\n .highlight .kd {\n color: #d28445;\n }\n\n .highlight .s,\n .highlight .sb,\n .highlight .sc,\n .highlight .dl,\n .highlight .sd,\n .highlight .s2,\n .highlight .sh,\n .highlight .sx,\n .highlight .s1 {\n color: #90a959;\n }\n\n .highlight .sa {\n color: #aa759f;\n }\n\n .highlight .sr {\n color: #75b5aa;\n }\n\n .highlight .si {\n color: #b76d45;\n }\n\n .highlight .se {\n color: #b76d45;\n }\n\n .highlight .nn {\n color: #f4bf75;\n }\n\n .highlight .nc {\n color: #f4bf75;\n }\n\n .highlight .no {\n color: #f4bf75;\n }\n\n .highlight .na {\n color: #6a9fb5;\n }\n\n .highlight .m,\n .highlight .mb,\n .highlight .mf,\n .highlight .mh,\n .highlight .mi,\n .highlight .il,\n .highlight .mo,\n .highlight .mx {\n color: #90a959;\n }\n\n .highlight .ss {\n color: #90a959;\n }\n}\n","/* The common styles */\n\nhtml {\n @media (prefers-color-scheme: light) {\n &:not([data-mode]),\n &[data-mode='light'] {\n @include light-scheme;\n }\n\n &[data-mode='dark'] {\n @include dark-scheme;\n }\n }\n\n @media (prefers-color-scheme: dark) {\n &:not([data-mode]),\n &[data-mode='dark'] {\n @include dark-scheme;\n }\n\n &[data-mode='light'] {\n @include light-scheme;\n }\n }\n\n font-size: 16px;\n}\n\nbody {\n background: var(--main-bg);\n padding: env(safe-area-inset-top) env(safe-area-inset-right)\n env(safe-area-inset-bottom) env(safe-area-inset-left);\n color: var(--text-color);\n -webkit-font-smoothing: antialiased;\n font-family: $font-family-base;\n}\n\n/* --- Typography --- */\n\n@for $i from 1 through 5 {\n h#{$i} {\n @extend %heading;\n\n @if $i > 1 {\n @extend %section;\n @extend %anchor;\n }\n\n @if $i < 5 {\n $factor: 0.18rem;\n\n @if $i == 1 {\n $factor: 0.23rem;\n }\n\n font-size: 1rem + (5 - $i) * $factor;\n } @else {\n font-size: 1rem;\n }\n }\n}\n\na {\n @extend %link-color;\n\n text-decoration: none;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n transition: all 0.35s ease-in-out;\n\n .blur & {\n $blur: 20px;\n\n -webkit-filter: blur($blur);\n filter: blur($blur);\n }\n}\n\nblockquote {\n border-left: 5px solid var(--blockquote-border-color);\n padding-left: 1rem;\n color: var(--blockquote-text-color);\n\n > p:last-child {\n margin-bottom: 0;\n }\n\n &[class^='prompt-'] {\n border-left: 0;\n position: relative;\n padding: 1rem 1rem 1rem 3rem;\n color: var(--prompt-text-color);\n\n @extend %rounded;\n\n &::before {\n text-align: center;\n width: 3rem;\n position: absolute;\n left: 0.25rem;\n margin-top: 0.4rem;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n }\n }\n\n @include prompt('tip', '\\f0eb', 'regular');\n @include prompt('info', '\\f06a');\n @include prompt('warning', '\\f06a');\n @include prompt('danger', '\\f071');\n}\n\nkbd {\n font-family: inherit;\n display: inline-block;\n vertical-align: middle;\n line-height: 1.3rem;\n min-width: 1.75rem;\n text-align: center;\n margin: 0 0.3rem;\n padding-top: 0.1rem;\n color: var(--kbd-text-color);\n background-color: var(--kbd-bg-color);\n border-radius: 0.25rem;\n border: solid 1px var(--kbd-wrap-color);\n box-shadow: inset 0 -2px 0 var(--kbd-wrap-color);\n}\n\nhr {\n border-color: var(--main-border-color);\n opacity: 1;\n}\n\nfooter {\n background-color: var(--main-bg);\n height: $footer-height;\n border-top: 1px solid var(--main-border-color);\n display: flex;\n\n @extend %text-xs;\n\n a {\n @extend %text-highlight;\n\n &:hover {\n @extend %link-hover;\n }\n }\n\n em {\n @extend %text-highlight;\n }\n\n p {\n text-align: center;\n margin-bottom: 0;\n }\n}\n\n/* fontawesome icons */\ni {\n &.far,\n &.fas {\n @extend %no-cursor;\n }\n}\n\n/* --- Panels --- */\n\n.access {\n top: 2rem;\n transition: top 0.2s ease-in-out;\n margin-top: 3rem;\n margin-bottom: 4rem;\n\n &:only-child {\n position: -webkit-sticky;\n position: sticky;\n }\n\n > section {\n padding-left: 1rem;\n border-left: 1px solid var(--main-border-color);\n\n &:not(:last-child) {\n margin-bottom: 4rem;\n }\n }\n\n .content {\n font-size: 0.9rem;\n }\n}\n\n#panel-wrapper {\n /* the headings */\n .panel-heading {\n font-family: inherit;\n line-height: inherit;\n\n @include label(inherit);\n }\n\n .post-tag {\n line-height: 1.05rem;\n font-size: 0.85rem;\n border-radius: 0.8rem;\n padding: 0.3rem 0.5rem;\n margin: 0 0.35rem 0.5rem 0;\n\n &:hover {\n transition: all 0.3s ease-in;\n }\n }\n}\n\n#access-lastmod {\n a {\n &:hover {\n @extend %link-hover;\n }\n\n @extend %no-bottom-border;\n\n color: inherit;\n }\n}\n\n.footnotes > ol {\n padding-left: 2rem;\n margin-top: 0.5rem;\n\n > li {\n &:not(:last-child) {\n margin-bottom: 0.3rem;\n }\n\n @extend %sup-fn-target;\n\n > p {\n margin-left: 0.25em;\n margin-top: 0;\n margin-bottom: 0;\n }\n }\n}\n\n.footnote {\n @at-root a#{&} {\n @include ml-mr(1px);\n @include pl-pr(2px);\n\n border-bottom-style: none !important;\n }\n}\n\nsup {\n @extend %sup-fn-target;\n}\n\n.reversefootnote {\n @at-root a#{&} {\n font-size: 0.6rem;\n line-height: 1;\n position: relative;\n bottom: 0.25em;\n margin-left: 0.25em;\n border-bottom-style: none !important;\n }\n}\n\n/* --- Begin of Markdown table style --- */\n\n/* it will be created by Liquid */\n.table-wrapper {\n overflow-x: auto;\n margin-bottom: 1.5rem;\n\n > table {\n min-width: 100%;\n overflow-x: auto;\n border-spacing: 0;\n\n thead {\n border-bottom: solid 2px rgba(210, 215, 217, 0.75);\n\n th {\n @extend %table-cell;\n }\n }\n\n tbody {\n tr {\n border-bottom: 1px solid var(--tb-border-color);\n\n &:nth-child(2n) {\n background-color: var(--tb-even-bg);\n }\n\n &:nth-child(2n + 1) {\n background-color: var(--tb-odd-bg);\n }\n\n td {\n @extend %table-cell;\n }\n }\n } /* tbody */\n } /* table */\n}\n\n/* --- post --- */\n\n// .preview-img {\n// aspect-ratio: 40 / 21;\n// width: 100%;\n// height: 100%;\n// overflow: hidden;\n\n// @extend %rounded;\n\n// &:not(.no-bg) {\n// background: var(--img-bg);\n// }\n\n// img {\n// height: 100%;\n// -o-object-fit: cover;\n// object-fit: cover;\n\n// @extend %rounded;\n\n// @at-root #post-list & {\n// width: 100%;\n// }\n// }\n// }\n\n.post-preview {\n @extend %rounded;\n\n border: 0;\n background: var(--card-bg);\n box-shadow: var(--card-shadow);\n\n &::before {\n @extend %rounded;\n\n content: '';\n width: 100%;\n height: 100%;\n position: absolute;\n background-color: var(--card-hovor-bg);\n opacity: 0;\n transition: opacity 0.35s ease-in-out;\n }\n\n &:hover {\n &::before {\n opacity: 0.3;\n }\n }\n}\n\nmain {\n line-height: 1.75;\n\n h1 {\n margin-top: 2rem;\n margin-bottom: 1.5rem;\n }\n\n p {\n > a.popup {\n &:not(.normal):not(.left):not(.right) {\n @include align-center;\n }\n }\n }\n\n .categories,\n #tags,\n #archives {\n a:not(:hover) {\n @extend %no-bottom-border;\n }\n }\n}\n\n.post-meta {\n @extend %text-sm;\n\n a {\n &:not([class]):hover {\n @extend %link-hover;\n }\n }\n\n em {\n @extend %normal-font-style;\n }\n}\n\n.content {\n font-size: 1.08rem;\n margin-top: 2rem;\n overflow-wrap: break-word;\n\n a {\n &.popup {\n @extend %no-cursor;\n @extend %img-caption;\n @include mt-mb(0.5rem);\n\n cursor: zoom-in;\n }\n\n &:not(.img-link) {\n @extend %link-underline;\n\n &:hover {\n @extend %link-hover;\n }\n }\n }\n\n ol,\n ul {\n &:not([class]),\n &.task-list {\n -webkit-padding-start: 1.75rem;\n padding-inline-start: 1.75rem;\n\n li {\n margin: 0.25rem 0;\n padding-left: 0.25rem;\n }\n\n ol,\n ul {\n -webkit-padding-start: 1.25rem;\n padding-inline-start: 1.25rem;\n margin: 0.5rem 0;\n }\n }\n }\n\n ul.task-list {\n -webkit-padding-start: 1.25rem;\n padding-inline-start: 1.25rem;\n\n li {\n list-style-type: none;\n padding-left: 0;\n\n /* checkbox icon */\n > i {\n width: 2rem;\n margin-left: -1.25rem;\n color: var(--checkbox-color);\n\n &.checked {\n color: var(--checkbox-checked-color);\n }\n }\n\n ul {\n -webkit-padding-start: 1.75rem;\n padding-inline-start: 1.75rem;\n }\n }\n\n input[type='checkbox'] {\n margin: 0 0.5rem 0.2rem -1.3rem;\n vertical-align: middle;\n }\n } /* ul */\n\n dl > dd {\n margin-left: 1rem;\n }\n\n ::marker {\n color: var(--text-muted-color);\n }\n} /* .content */\n\n.tag:hover {\n @extend %tag-hover;\n}\n\n.post-tag {\n display: inline-block;\n min-width: 2rem;\n text-align: center;\n border-radius: 0.5rem;\n border: 1px solid var(--btn-border-color);\n padding: 0 0.4rem;\n color: var(--text-muted-color);\n line-height: 1.3rem;\n\n &:not(:last-child) {\n margin-right: 0.2rem;\n }\n}\n\n.rounded-10 {\n border-radius: 10px !important;\n}\n\n.img-link {\n color: transparent;\n display: inline-flex;\n}\n\n.shimmer {\n width: 80%;\n margin-left: auto;\n margin-right: auto;\n}\n\n// .shimmer {\n// overflow: hidden;\n// position: relative;\n// background: var(--img-bg);\n\n// &::before {\n// content: '';\n// position: absolute;\n// background: var(--shimmer-bg);\n// height: 100%;\n// width: 100%;\n// -webkit-animation: shimmer 1.3s infinite;\n// animation: shimmer 1.3s infinite;\n// }\n\n// @-webkit-keyframes shimmer {\n// 0% {\n// transform: translateX(-100%);\n// }\n\n// 100% {\n// transform: translateX(100%);\n// }\n// }\n\n// @keyframes shimmer {\n// 0% {\n// transform: translateX(-100%);\n// }\n\n// 100% {\n// transform: translateX(100%);\n// }\n// }\n// }\n\n.embed-video {\n width: 100%;\n height: 100%;\n margin-bottom: 1rem;\n aspect-ratio: 16 / 9;\n\n @extend %rounded;\n\n &.twitch {\n aspect-ratio: 310 / 189;\n }\n\n &.file {\n display: block;\n width: auto;\n height: auto;\n max-width: 100%;\n max-height: 100%;\n margin: auto;\n margin-bottom: 0;\n }\n\n @extend %img-caption;\n}\n\n/* --- buttons --- */\n.btn-lang {\n border: 1px solid !important;\n padding: 1px 3px;\n border-radius: 3px;\n color: var(--link-color);\n\n &:focus {\n box-shadow: none;\n }\n}\n\n/* --- Effects classes --- */\n\n.loaded {\n display: block !important;\n\n @at-root .d-flex#{&} {\n display: flex !important;\n }\n}\n\n.unloaded {\n display: none !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.hidden {\n visibility: hidden !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.btn-box-shadow {\n box-shadow: var(--card-shadow);\n}\n\n/* overwrite bootstrap muted */\n.text-muted {\n color: var(--text-muted-color) !important;\n}\n\n/* Overwrite bootstrap tooltip */\n.tooltip-inner {\n font-size: 0.7rem;\n max-width: 220px;\n text-align: left;\n}\n\n/* Overwrite bootstrap outline button */\n.btn.btn-outline-primary {\n &:not(.disabled):hover {\n border-color: #007bff !important;\n }\n}\n\n.disabled {\n color: rgb(206, 196, 196);\n pointer-events: auto;\n cursor: not-allowed;\n}\n\n.hide-border-bottom {\n border-bottom: none !important;\n}\n\n.input-focus {\n box-shadow: none;\n border-color: var(--input-focus-border-color) !important;\n background: center !important;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n.left {\n float: left;\n margin: 0.75rem 1rem 1rem 0;\n}\n\n.right {\n float: right;\n margin: 0.75rem 0 1rem 1rem;\n}\n\n/* --- Overriding --- */\n\n/* magnific-popup */\n\nfigure .mfp-title {\n text-align: center;\n padding-right: 0;\n margin-top: 0.5rem;\n}\n\n.mfp-img {\n transition: none;\n}\n\n/* mermaid */\n.mermaid {\n text-align: center;\n}\n\n/* MathJax */\nmjx-container {\n overflow-y: hidden;\n min-width: auto !important;\n}\n\n/* --- sidebar layout --- */\n\n$sidebar-display: 'sidebar-display';\n$btn-border-width: 3px;\n$btn-mb: 0.5rem;\n\n#sidebar {\n @include pl-pr(0);\n\n position: fixed;\n top: 0;\n left: 0;\n height: 100%;\n overflow-y: auto;\n width: $sidebar-width;\n z-index: 99;\n background: var(--sidebar-bg);\n border-right: 1px solid var(--sidebar-border-color);\n\n /* Hide scrollbar for Chrome, Safari and Opera */\n &::-webkit-scrollbar {\n display: none;\n }\n\n /* Hide scrollbar for IE, Edge and Firefox */\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n\n %sidebar-link-hover {\n &:hover {\n color: var(--sidebar-active-color);\n }\n }\n\n a {\n @extend %sidebar-links;\n }\n\n #avatar {\n display: block;\n width: 14rem;\n height: 5rem;\n overflow: hidden;\n box-shadow: var(--avatar-border-color) 0 0 0 2px;\n transform: translateZ(0); /* fixed the zoom in Safari */\n background: #1e1e1e;\n img {\n margin-top: 25px;\n padding-left: 10px;\n padding-right: 10px;\n transition: transform 0.5s;\n\n &:hover {\n transform: scale(1.1);\n }\n }\n }\n\n .profile-wrapper {\n @include mt-mb(2.5rem);\n @extend %clickable-transition;\n\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n width: 100%;\n }\n\n .site-title {\n font-family: inherit;\n font-weight: 900;\n font-size: 1.75rem;\n line-height: 1.2;\n letter-spacing: 0.25px;\n margin-top: 1.25rem;\n margin-bottom: 0.5rem;\n margin-left: 1rem;\n\n a {\n @extend %clickable-transition;\n @extend %sidebar-link-hover;\n\n color: var(--site-title-color);\n }\n }\n\n .site-subtitle {\n font-size: 95%;\n color: var(--site-subtitle-color);\n margin-top: 0.25rem;\n word-spacing: 1px;\n text-align: center;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n ul {\n margin-bottom: 2rem;\n\n li.nav-item {\n width: 100%;\n padding-left: 1rem;\n padding-right: 1.5rem;\n\n a.nav-link {\n @include pt-pb(0.6rem);\n\n display: flex;\n align-items: center;\n border-radius: 0.75rem;\n font-weight: 600;\n\n &:hover {\n background-color: var(--sidebar-hover-bg);\n }\n\n i {\n font-size: 95%;\n margin-right: 1.5rem;\n }\n\n span {\n font-size: 90%;\n letter-spacing: 0.2px;\n }\n }\n .nav-link-sub {\n width: 155px;\n }\n\n &.active {\n .nav-link {\n color: var(--sidebar-active-color);\n background-color: var(--sidebar-hover-bg);\n\n span {\n opacity: 1;\n }\n }\n }\n\n &:not(:first-child) {\n margin-top: 0.25rem;\n }\n }\n }\n .ul-sublist {\n margin-bottom: 0rem;\n }\n\n .sidebar-bottom {\n padding-left: 2rem;\n padding-right: 6rem;\n margin-bottom: 1.5rem;\n\n $btn-size: 1.75rem;\n\n %button {\n width: $btn-size;\n height: $btn-size;\n margin-bottom: $btn-mb; // multi line gap\n border-radius: 50%;\n color: var(--sidebar-btn-color);\n background-color: var(--sidebar-btn-bg);\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: var(--sidebar-border-color) 0 0 0 1px;\n\n &:hover {\n background-color: var(--sidebar-hover-bg);\n }\n }\n\n a {\n @extend %button;\n @extend %sidebar-link-hover;\n @extend %clickable-transition;\n\n &:not(:last-child) {\n margin-right: $sb-btn-gap;\n }\n }\n\n i {\n line-height: $btn-size;\n }\n\n .mode-toggle {\n padding: 0;\n border: 0;\n\n @extend %button;\n @extend %sidebar-links;\n @extend %sidebar-link-hover;\n }\n\n .icon-border {\n @extend %no-cursor;\n @include ml-mr(calc(($sb-btn-gap - $btn-border-width) / 2));\n\n background-color: var(--sidebar-btn-color);\n content: '';\n width: $btn-border-width;\n height: $btn-border-width;\n border-radius: 50%;\n margin-bottom: $btn-mb;\n }\n } /* .sidebar-bottom */\n} /* #sidebar */\n\n@media (hover: hover) {\n #sidebar ul > li:last-child::after {\n transition: top 0.5s ease;\n }\n\n .nav-link {\n transition: background-color 0.3s ease-in-out;\n }\n\n .post-preview {\n transition: background-color 0.35s ease-in-out;\n }\n}\n\n#search-result-wrapper {\n display: none;\n height: 100%;\n width: 100%;\n overflow: auto;\n\n .content {\n margin-top: 2rem;\n }\n}\n\n/* --- top-bar --- */\n\n#topbar-wrapper {\n height: $topbar-height;\n background-color: var(--topbar-bg);\n}\n\n#topbar {\n button i {\n color: #999999;\n }\n\n #breadcrumb {\n font-size: 1rem;\n color: var(--text-muted-color);\n padding-left: 0.5rem;\n\n a:hover {\n @extend %link-hover;\n }\n\n span {\n &:not(:last-child) {\n &::after {\n content: '›';\n padding: 0 0.3rem;\n }\n }\n }\n }\n} /* #topbar */\n\n::-webkit-input-placeholder {\n @include placeholder;\n}\n\n::-moz-placeholder {\n @include placeholder;\n}\n\n:-ms-input-placeholder {\n @include placeholder;\n}\n\n::-ms-input-placeholder {\n @include placeholder;\n}\n\n::placeholder {\n @include placeholder;\n}\n\n:focus::-webkit-input-placeholder {\n @include placeholder-focus;\n}\n\n:focus::-moz-placeholder {\n @include placeholder-focus;\n}\n\n:focus:-ms-input-placeholder {\n @include placeholder-focus;\n}\n\n:focus::-ms-input-placeholder {\n @include placeholder-focus;\n}\n\n:focus::placeholder {\n @include placeholder-focus;\n}\n\nsearch {\n display: flex;\n width: 100%;\n border-radius: 1rem;\n border: 1px solid var(--search-border-color);\n background: var(--main-bg);\n padding: 0 0.5rem;\n\n i {\n z-index: 2;\n font-size: 0.9rem;\n color: var(--search-icon-color);\n }\n}\n\n#sidebar-trigger,\n#search-trigger {\n display: none;\n}\n\n/* 'Cancel' link */\n#search-cancel {\n color: var(--link-color);\n display: none;\n white-space: nowrap;\n\n @extend %cursor-pointer;\n}\n\n#search-input {\n background: center;\n border: 0;\n border-radius: 0;\n padding: 0.18rem 0.3rem;\n color: var(--text-color);\n height: auto;\n\n &:focus {\n box-shadow: none;\n }\n}\n\n#search-hints {\n padding: 0 1rem;\n\n h4 {\n margin-bottom: 1.5rem;\n }\n\n .post-tag {\n display: inline-block;\n line-height: 1rem;\n font-size: 1rem;\n background: var(--search-tag-bg);\n border: none;\n padding: 0.5rem;\n margin: 0 1.25rem 1rem 0;\n\n &::before {\n content: '#';\n color: var(--text-muted-color);\n padding-right: 0.2rem;\n }\n\n @extend %link-color;\n }\n}\n\n#search-results {\n padding-bottom: 3rem;\n\n a {\n &:hover {\n @extend %link-hover;\n }\n\n @extend %link-color;\n @extend %no-bottom-border;\n @extend %heading;\n\n font-size: 1.4rem;\n line-height: 2.5rem;\n }\n\n > article {\n width: 100%;\n\n &:not(:last-child) {\n margin-bottom: 1rem;\n }\n\n /* icons */\n i {\n color: #818182;\n margin-right: 0.15rem;\n font-size: 80%;\n }\n\n > p {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n }\n }\n} /* #search-results */\n\n#topbar-title {\n display: none;\n font-size: 1.1rem;\n font-weight: 600;\n font-family: sans-serif;\n color: var(--topbar-text-color);\n text-align: center;\n width: 70%;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: keep-all;\n white-space: nowrap;\n}\n\n#mask {\n display: none;\n position: fixed;\n inset: 0 0 0 0;\n height: 100%;\n width: 100%;\n z-index: 1;\n\n @at-root [#{$sidebar-display}] & {\n display: block !important;\n }\n}\n\n/* --- basic wrappers --- */\n\n#main-wrapper {\n position: relative;\n\n @include pl-pr(0);\n\n > .container {\n min-height: 100vh;\n }\n}\n\n#topbar-wrapper.row,\n#main-wrapper > .container > .row,\n#search-result-wrapper > .row {\n @include ml-mr(0);\n}\n\n#tail-wrapper {\n > :not(script) {\n margin-top: 3rem;\n }\n}\n\n/* --- button back-to-top --- */\n\n#back-to-top {\n display: none;\n z-index: 1;\n cursor: pointer;\n position: fixed;\n right: 1rem;\n bottom: calc($footer-height-large - $back2top-size / 2);\n background: var(--button-bg);\n color: var(--btn-backtotop-color);\n padding: 0;\n width: $back2top-size;\n height: $back2top-size;\n border-radius: 50%;\n border: 1px solid var(--btn-backtotop-border-color);\n transition: transform 0.2s ease-out;\n -webkit-transition: transform 0.2s ease-out;\n\n &:hover {\n transform: translate3d(0, -5px, 0);\n -webkit-transform: translate3d(0, -5px, 0);\n }\n\n i {\n line-height: $back2top-size;\n position: relative;\n bottom: 2px;\n }\n}\n\n#notification {\n @-webkit-keyframes popup {\n from {\n opacity: 0;\n bottom: 0;\n }\n }\n\n @keyframes popup {\n from {\n opacity: 0;\n bottom: 0;\n }\n }\n\n .toast-header {\n background: none;\n border-bottom: none;\n color: inherit;\n }\n\n .toast-body {\n font-family: Lato, sans-serif;\n line-height: 1.25rem;\n\n button {\n font-size: 90%;\n min-width: 4rem;\n }\n }\n\n &.toast {\n &.show {\n display: block;\n min-width: 20rem;\n border-radius: 0.5rem;\n -webkit-backdrop-filter: blur(10px);\n backdrop-filter: blur(10px);\n background-color: rgba(255, 255, 255, 0.5);\n color: #1b1b1eba;\n position: fixed;\n left: 50%;\n bottom: 20%;\n transform: translateX(-50%);\n -webkit-animation: popup 0.8s;\n animation: popup 0.8s;\n }\n }\n}\n\n/*\n Responsive Design:\n\n {sidebar, content, panel} >= 1200px screen width\n {sidebar, content} >= 850px screen width\n {content} <= 849px screen width\n\n*/\n\n@media all and (max-width: 576px) {\n main {\n .content {\n > blockquote[class^='prompt-'] {\n @include ml-mr(-1rem);\n\n border-radius: 0;\n max-width: none;\n }\n }\n }\n\n #avatar {\n width: 5rem;\n height: 5rem;\n }\n}\n\n@media all and (max-width: 768px) {\n %full-width {\n max-width: 100%;\n }\n\n #topbar {\n @extend %full-width;\n }\n\n #main-wrapper > .container {\n @extend %full-width;\n @include pl-pr(0);\n }\n}\n\n/* hide sidebar and panel */\n@media all and (max-width: 849px) {\n @mixin slide($append: null) {\n $basic: transform 0.4s ease;\n\n @if $append {\n transition: $basic, $append;\n } @else {\n transition: $basic;\n }\n }\n\n footer {\n @include slide;\n\n height: $footer-height-large;\n padding: 1.5rem 0;\n }\n\n .sidebarImg {\n position: relative !important;\n }\n\n [#{$sidebar-display}] {\n #sidebar {\n transform: translateX(0);\n }\n\n #main-wrapper {\n transform: translateX($sidebar-width);\n }\n\n #back-to-top {\n visibility: hidden;\n }\n }\n\n #sidebar {\n @include slide;\n\n transform: translateX(-$sidebar-width); /* hide */\n -webkit-transform: translateX(-$sidebar-width);\n }\n\n #main-wrapper {\n @include slide;\n }\n\n #topbar,\n #main-wrapper > .container {\n max-width: 100%;\n }\n\n #search-result-wrapper {\n width: 100%;\n }\n\n #breadcrumb,\n search {\n display: none;\n }\n\n #topbar-wrapper {\n @include slide(top 0.2s ease);\n\n left: 0;\n }\n\n main,\n #panel-wrapper {\n margin-top: 0;\n }\n\n #topbar-title,\n #sidebar-trigger,\n #search-trigger {\n display: block;\n }\n\n #search-result-wrapper .content {\n letter-spacing: 0;\n }\n\n #tags {\n justify-content: center !important;\n }\n\n h1.dynamic-title {\n display: none;\n\n ~ .content {\n margin-top: 2.5rem;\n }\n }\n\n .shimmer {\n width: 100%;\n }\n} /* max-width: 849px */\n\n/* Sidebar is visible */\n@media all and (min-width: 850px) {\n /* Solved jumping scrollbar */\n html {\n overflow-y: scroll;\n }\n\n #main-wrapper {\n margin-left: $sidebar-width;\n }\n\n #sidebar {\n .profile-wrapper {\n margin-top: 3rem;\n }\n }\n\n #search-hints {\n display: none;\n }\n\n search {\n max-width: $search-max-width;\n }\n\n #search-result-wrapper {\n max-width: $main-content-max-width;\n justify-content: start !important;\n }\n\n main {\n h1 {\n margin-top: 3rem;\n }\n }\n\n div.content .table-wrapper > table {\n min-width: 70%;\n }\n\n /* button 'back-to-Top' position */\n #back-to-top {\n right: 5%;\n bottom: calc($footer-height - $back2top-size / 2);\n }\n\n #topbar-title {\n text-align: left;\n }\n}\n\n@media all and (max-width: 991px) {\n .threats {\n overflow-y: visible !important;\n height: auto !important;\n margin-left: 0px !important;\n }\n footer {\n display: block !important;\n }\n}\n/* Pad horizontal */\n@media all and (min-width: 992px) and (max-width: 1199px) {\n #main-wrapper > .container .col-lg-11 {\n flex: 0 0 96%;\n max-width: 96%;\n }\n}\n\n/* Compact icons in sidebar & panel hidden */\n@media all and (min-width: 850px) and (max-width: 1199px) {\n #search-results > div {\n max-width: 700px;\n }\n\n #breadcrumb {\n width: 65%;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: keep-all;\n white-space: nowrap;\n }\n}\n\n/* panel hidden */\n@media all and (max-width: 1199px) {\n #panel-wrapper {\n display: none;\n }\n\n #main-wrapper > .container > div.row {\n justify-content: center !important;\n }\n}\n\n/* --- desktop mode, both sidebar and panel are visible --- */\n\n@media all and (min-width: 1200px) {\n search {\n margin-right: 4rem;\n }\n\n #search-input {\n transition: all 0.3s ease-in-out;\n }\n\n #search-results > article {\n width: 45%;\n\n &:nth-child(odd) {\n margin-right: 1.5rem;\n }\n\n &:nth-child(even) {\n margin-left: 1.5rem;\n }\n\n &:last-child:nth-child(odd) {\n position: relative;\n right: 24.3%;\n }\n }\n\n .content {\n font-size: 1.03rem;\n }\n}\n\n@media all and (min-width: 1400px) {\n #back-to-top {\n right: calc((100vw - $sidebar-width - 1140px) / 2 + 3rem);\n }\n}\n\n@media all and (min-width: 1550px) {\n $icon-gap: 1rem;\n\n #main-wrapper {\n margin-left: $sidebar-width-large;\n }\n\n #topbar-wrapper {\n left: $sidebar-width-large;\n }\n\n search {\n margin-right: calc(\n $main-content-max-width / 4 - $search-max-width - 0.75rem\n );\n }\n\n #main-wrapper > .container {\n max-width: $main-content-max-width - 450;\n padding-left: 1.75rem !important;\n padding-right: 1.75rem !important;\n }\n\n main.col-12,\n #tail-wrapper {\n padding-right: 4.5rem !important;\n }\n\n #back-to-top {\n right: calc(\n (100vw - $sidebar-width-large - $main-content-max-width) / 2 + 2rem\n );\n }\n} /* min-width: 1550px */\n\n@media all and (min-width: 1551px) {\n $icon-gap: 1rem;\n\n #main-wrapper {\n margin-left: $sidebar-width-large;\n }\n\n #topbar-wrapper {\n left: $sidebar-width-large;\n }\n\n search {\n margin-right: calc(\n $main-content-max-width / 4 - $search-max-width - 0.75rem\n );\n }\n\n #main-wrapper > .container {\n max-width: $main-content-max-width;\n padding-left: 1.75rem !important;\n padding-right: 1.75rem !important;\n }\n\n main.col-12,\n #tail-wrapper {\n padding-right: 4.5rem !important;\n }\n\n #back-to-top {\n right: calc(\n (100vw - $sidebar-width-large - $main-content-max-width) / 2 + 2rem\n );\n }\n} /* min-width: 1551px */","/*\n * The syntax light mode typography colors\n */\n\n@mixin light-scheme {\n /* Framework color */\n --main-bg: white;\n --mask-bg: #c1c3c5;\n --main-border-color: #f3f3f3;\n\n /* Common color */\n --text-color: #34343c;\n --text-muted-color: #757575;\n --text-muted-hightlight-color: inherit;\n --heading-color: #2a2a2a;\n --label-color: #585858;\n --blockquote-border-color: #eeeeee;\n --blockquote-text-color: #757575;\n --link-color: #0056b2;\n --link-underline-color: #dee2e6;\n --button-bg: #ffffff;\n --btn-border-color: #e9ecef;\n --btn-backtotop-color: #686868;\n --btn-backtotop-border-color: #f1f1f1;\n --btn-box-shadow: #eaeaea;\n --checkbox-color: #c5c5c5;\n --checkbox-checked-color: #07a8f7;\n --row-cell-color: rgb(223, 233, 241, 0.64);\n --img-bg: radial-gradient(\n circle,\n rgb(255, 255, 255) 0%,\n rgb(239, 239, 239) 100%\n );\n --shimmer-bg: linear-gradient(\n 90deg,\n rgba(250, 250, 250, 0) 0%,\n rgba(232, 230, 230, 1) 50%,\n rgba(250, 250, 250, 0) 100%\n );\n\n /* Sidebar */\n --site-title-color: rgb(113, 113, 113);\n --site-subtitle-color: #717171;\n --sidebar-bg: #f6f8fa;\n --sidebar-border-color: #efefef;\n --sidebar-muted-color: #545454;\n --sidebar-active-color: #1d1d1d;\n --sidebar-hover-bg: rgb(223, 233, 241, 0.64);\n --sidebar-btn-bg: white;\n --sidebar-btn-color: #8e8e8e;\n --avatar-border-color: white;\n\n /* Topbar */\n --topbar-bg: rgb(255, 255, 255, 0.7);\n --topbar-text-color: rgb(78, 78, 78);\n --search-border-color: rgb(240, 240, 240);\n --search-icon-color: #c2c6cc;\n --input-focus-border-color: #b8b8b8;\n\n /* Home page */\n --post-list-text-color: dimgray;\n --btn-patinator-text-color: #555555;\n --btn-paginator-hover-color: var(--sidebar-bg);\n\n /* Posts */\n --toc-highlight: #0550ae;\n --btn-share-color: gray;\n --btn-share-hover-color: #0d6efd;\n --card-bg: white;\n --card-hovor-bg: #e2e2e2;\n --card-shadow: rgb(104, 104, 104, 0.05) 0 2px 6px 0,\n rgba(211, 209, 209, 0.15) 0 0 0 1px;\n --footnote-target-bg: lightcyan;\n --tb-odd-bg: #fbfcfd;\n --tb-border-color: #eaeaea;\n --dash-color: silver;\n --kbd-wrap-color: #bdbdbd;\n --kbd-text-color: var(--text-color);\n --kbd-bg-color: white;\n --prompt-text-color: rgb(46, 46, 46, 0.77);\n --prompt-tip-bg: rgb(123, 247, 144, 0.2);\n --prompt-tip-icon-color: #03b303;\n --prompt-info-bg: #e1f5fe;\n --prompt-info-icon-color: #0070cb;\n --prompt-warning-bg: rgb(255, 243, 205);\n --prompt-warning-icon-color: #ef9c03;\n --prompt-danger-bg: rgb(248, 215, 218, 0.56);\n --prompt-danger-icon-color: #df3c30;\n\n /* Tags */\n --tag-border: #dee2e6;\n --tag-shadow: var(--btn-border-color);\n --tag-hover: rgb(222, 226, 230);\n --search-tag-bg: #f8f9fa;\n\n [class^='prompt-'] {\n --link-underline-color: rgb(219, 216, 216);\n }\n\n .dark {\n display: none;\n }\n\n /* Categories */\n --categories-border: rgba(0, 0, 0, 0.125);\n --categories-hover-bg: var(--btn-border-color);\n --categories-icon-hover-color: darkslategray;\n\n /* Archive */\n --timeline-color: rgba(0, 0, 0, 0.075);\n --timeline-node-bg: #c2c6cc;\n --timeline-year-dot-color: #ffffff;\n} /* light-scheme */\n","/*\n * The main dark mode styles\n */\n\n@mixin dark-scheme {\n /* Framework color */\n --main-bg: rgb(27, 27, 30);\n --mask-bg: rgb(68, 69, 70);\n --main-border-color: rgb(44, 45, 45);\n\n /* Common color */\n --text-color: rgb(175, 176, 177);\n --text-muted-color: #868686;\n --text-muted-hightlight-color: #aeaeae;\n --heading-color: #cccccc;\n --label-color: #a7a7a7;\n --blockquote-border-color: rgb(66, 66, 66);\n --blockquote-text-color: #868686;\n --link-color: rgb(138, 180, 248);\n --link-underline-color: rgb(82, 108, 150);\n --button-bg: #1e1e1e;\n --btn-border-color: #2e2f31;\n --btn-backtotop-color: var(--text-color);\n --btn-backtotop-border-color: #212122;\n --btn-box-shadow: var(--main-bg);\n --card-header-bg: #292929;\n --checkbox-color: rgb(118, 120, 121);\n --checkbox-checked-color: var(--link-color);\n --row-cell-color:#262626;\n --img-bg: radial-gradient(circle, rgb(22, 22, 24) 0%, rgb(32, 32, 32) 100%);\n --shimmer-bg: linear-gradient(\n 90deg,\n rgba(255, 255, 255, 0) 0%,\n rgba(58, 55, 55, 0.4) 50%,\n rgba(255, 255, 255, 0) 100%\n );\n\n /* Sidebar */\n --site-title-color: #717070;\n --site-subtitle-color: #868686;\n --sidebar-bg: #1e1e1e;\n --sidebar-border-color: #292929;\n --sidebar-muted-color: #868686;\n --sidebar-active-color: rgb(255, 255, 255, 0.95);\n --sidebar-hover-bg: #262626;\n --sidebar-btn-bg: #232328;\n --sidebar-btn-color: #787878;\n --avatar-border-color: rgb(206, 206, 206, 0.9);\n\n /* Topbar */\n --topbar-bg: rgb(27, 27, 30, 0.64);\n --topbar-text-color: var(--text-color);\n --search-border-color: rgb(55, 55, 55);\n --search-icon-color: rgb(100, 102, 105);\n --input-focus-border-color: rgb(112, 114, 115);\n\n /* Home page */\n --post-list-text-color: rgb(175, 176, 177);\n --btn-patinator-text-color: var(--text-color);\n --btn-paginator-hover-color: #2e2e2e;\n\n /* Posts */\n --toc-highlight: rgb(116, 178, 243);\n --tag-hover: rgb(43, 56, 62);\n --tb-odd-bg: #252526; /* odd rows of the posts' table */\n --tb-even-bg: rgb(31, 31, 34); /* even rows of the posts' table */\n --tb-border-color: var(--tb-odd-bg);\n --footnote-target-bg: rgb(63, 81, 181);\n --btn-share-color: #6c757d;\n --btn-share-hover-color: #bfc1ca;\n --card-bg: #1e1e1e;\n --card-hovor-bg: #464d51;\n --card-shadow: rgb(21, 21, 21, 0.72) 0 6px 18px 0,\n rgb(137, 135, 135, 0.24) 0 0 0 1px;\n --kbd-wrap-color: #6a6a6a;\n --kbd-text-color: #d3d3d3;\n --kbd-bg-color: #242424;\n --prompt-text-color: rgb(216, 212, 212, 0.75);\n --prompt-tip-bg: rgb(22, 60, 36, 0.64);\n --prompt-tip-icon-color: rgb(15, 164, 15, 0.81);\n --prompt-info-bg: rgb(7, 59, 104, 0.8);\n --prompt-info-icon-color: #0075d1;\n --prompt-warning-bg: rgb(90, 69, 3, 0.88);\n --prompt-warning-icon-color: rgb(255, 165, 0, 0.8);\n --prompt-danger-bg: rgb(86, 28, 8, 0.8);\n --prompt-danger-icon-color: #cd0202;\n\n /* tags */\n --tag-border: rgb(59, 79, 88);\n --tag-shadow: rgb(32, 33, 33);\n --dash-color: rgb(63, 65, 68);\n --search-tag-bg: #292828;\n\n /* categories */\n --categories-border: rgb(64, 66, 69, 0.5);\n --categories-hover-bg: rgb(73, 75, 76);\n --categories-icon-hover-color: white;\n\n /* archives */\n --timeline-node-bg: rgb(150, 152, 156);\n --timeline-color: rgb(63, 65, 68);\n --timeline-year-dot-color: var(--timeline-color);\n\n .light {\n display: none;\n }\n\n /* categories */\n .categories.card,\n .list-group-item {\n background-color: var(--card-bg);\n }\n\n .categories {\n .card-header {\n background-color: var(--card-header-bg);\n }\n\n .list-group-item {\n border-left: none;\n border-right: none;\n padding-left: 2rem;\n border-color: var(--categories-border);\n\n &:last-child {\n border-bottom-color: var(--card-bg);\n }\n }\n }\n\n #archives li:nth-child(odd) {\n background-image: linear-gradient(\n to left,\n rgb(26, 26, 30),\n rgb(39, 39, 45),\n rgb(39, 39, 45),\n rgb(39, 39, 45),\n rgb(26, 26, 30)\n );\n }\n\n color-scheme: dark;\n\n /* stylelint-disable-next-line selector-id-pattern */\n #disqus_thread {\n color-scheme: none;\n }\n} /* dark-scheme */\n","/*\n Style for Homepage\n*/\n\n#post-list {\n margin-top: 2rem;\n\n .card-wrapper {\n &:hover {\n text-decoration: none;\n }\n\n &:not(:last-child) {\n margin-bottom: 1.25rem;\n }\n }\n\n .card {\n border: 0;\n background: none;\n\n %img-radius {\n border-radius: $base-radius $base-radius 0 0;\n }\n\n .preview-img {\n @extend %img-radius;\n\n img {\n @extend %img-radius;\n }\n }\n\n .card-body {\n height: 100%;\n padding: 1rem;\n\n .card-title {\n @extend %text-clip;\n\n color: var(--heading-color) !important;\n font-size: 1.25rem;\n }\n\n %muted {\n color: var(--text-muted-color) !important;\n }\n\n .card-text.content {\n @extend %muted;\n\n p {\n @extend %text-clip;\n\n line-height: 1.5;\n margin: 0;\n }\n }\n\n .post-meta {\n @extend %muted;\n\n i {\n &:not(:first-child) {\n margin-left: 1.5rem;\n }\n }\n\n em {\n @extend %normal-font-style;\n\n color: inherit;\n }\n\n > div:first-child {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n }\n }\n} /* #post-list */\n\n.pagination {\n color: var(--text-color);\n font-family: Lato, sans-serif;\n justify-content: space-evenly;\n\n a:hover {\n text-decoration: none;\n }\n\n .page-item {\n .page-link {\n color: var(--btn-patinator-text-color);\n padding: 0 0.6rem;\n display: -webkit-box;\n -webkit-box-pack: center;\n -webkit-box-align: center;\n border-radius: 0.5rem;\n border: 0;\n background-color: inherit;\n }\n\n &.active {\n .page-link {\n background-color: var(--btn-paginator-hover-color);\n }\n }\n\n &:not(.active) {\n .page-link {\n &:hover {\n box-shadow: inset var(--btn-border-color) 0 0 0 1px;\n }\n }\n }\n\n &.disabled {\n cursor: not-allowed;\n\n .page-link {\n color: rgba(108, 117, 125, 0.57);\n }\n }\n } /* .page-item */\n} /* .pagination */\n\n/* Tablet */\n@media all and (min-width: 768px) {\n %img-radius {\n border-radius: 0 $base-radius $base-radius 0;\n }\n\n #post-list {\n .card {\n .card-body {\n padding: 1.75rem 1.75rem 1.25rem 1.75rem;\n\n .card-text {\n display: inherit !important;\n }\n\n .post-meta {\n i {\n &:not(:first-child) {\n margin-left: 1.75rem;\n }\n }\n }\n }\n }\n }\n}\n\n/* Hide SideBar and TOC */\n@media all and (max-width: 830px) {\n .pagination {\n .page-item {\n &:not(:first-child):not(:last-child) {\n display: none;\n }\n }\n }\n}\n\n/* Sidebar is visible */\n@media all and (min-width: 831px) {\n #post-list {\n margin-top: 2.5rem;\n }\n\n .pagination {\n font-size: 0.85rem;\n justify-content: center;\n\n .page-item {\n &:not(:last-child) {\n margin-right: 0.7rem;\n }\n }\n\n .page-index {\n display: none;\n }\n } /* .pagination */\n}\n","/*\n Post-specific style\n*/\n\n%btn-post-nav {\n width: 50%;\n position: relative;\n border-color: var(--btn-border-color);\n}\n\n@mixin dot($pl: 0.25rem, $pr: 0.25rem) {\n content: '\\2022';\n padding-left: $pl;\n padding-right: $pr;\n}\n\nheader {\n .post-desc {\n @extend %heading;\n\n font-size: 1.125rem;\n line-height: 1.6;\n }\n\n .post-meta {\n span + span::before {\n @include dot;\n }\n\n em,\n time {\n @extend %text-highlight;\n }\n\n em {\n a {\n color: inherit;\n }\n }\n }\n}\n\n.post-tail-wrapper {\n @extend %text-sm;\n\n margin-top: 6rem;\n border-bottom: 1px double var(--main-border-color);\n\n .license-wrapper {\n line-height: 1.2rem;\n\n > a {\n @extend %text-highlight;\n\n &:hover {\n @extend %link-hover;\n }\n }\n\n span:last-child {\n @extend %text-sm;\n }\n } /* .license-wrapper */\n\n .post-meta a:not(:hover) {\n @extend %link-underline;\n }\n\n .share-wrapper {\n vertical-align: middle;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n %icon-size {\n font-size: 1.125rem;\n }\n\n .share-icons {\n display: flex;\n\n i {\n color: var(--btn-share-color);\n\n @extend %icon-size;\n }\n\n > * {\n @extend %icon-size;\n\n margin-left: 0.5rem;\n\n &:hover {\n i {\n @extend %btn-share-hovor;\n }\n }\n }\n\n button {\n padding: 0;\n border: none;\n line-height: inherit;\n\n @extend %cursor-pointer;\n }\n } /* .share-icons */\n } /* .share-wrapper */\n}\n\n.share-mastodon {\n /* See: https://github.com/justinribeiro/share-to-mastodon#properties */\n --wc-stm-font-family: $font-family-base;\n --wc-stm-dialog-background-color: var(--card-bg);\n --wc-stm-form-button-border: 1px solid var(--btn-border-color);\n --wc-stm-form-submit-background-color: var(--sidebar-btn-bg);\n --wc-stm-form-cancel-background-color: var(--sidebar-btn-bg);\n --wc-stm-form-button-background-color-hover: #007bff;\n --wc-stm-form-button-color-hover: white;\n\n font-size: 1rem;\n}\n\n.post-tags {\n line-height: 2rem;\n\n .post-tag {\n &:hover {\n @extend %link-hover;\n @extend %tag-hover;\n @extend %no-bottom-border;\n }\n }\n}\n\n.post-navigation {\n .btn {\n @extend %btn-post-nav;\n\n &:not(:hover) {\n color: var(--link-color);\n }\n\n &:hover {\n &:not(.disabled)::before {\n color: whitesmoke;\n }\n }\n\n &.disabled {\n @extend %btn-post-nav;\n\n pointer-events: auto;\n cursor: not-allowed;\n background: none;\n color: gray;\n }\n\n &.btn-outline-primary.disabled:focus {\n box-shadow: none;\n }\n\n &::before {\n color: var(--text-muted-color);\n font-size: 0.65rem;\n text-transform: uppercase;\n content: attr(aria-label);\n }\n\n &:first-child {\n border-radius: $base-radius 0 0 $base-radius;\n left: 0.5px;\n }\n\n &:last-child {\n border-radius: 0 $base-radius $base-radius 0;\n right: 0.5px;\n }\n }\n\n p {\n font-size: 1.1rem;\n line-height: 1.5rem;\n margin-top: 0.3rem;\n white-space: normal;\n }\n} /* .post-navigation */\n\n@media (hover: hover) {\n .post-navigation {\n .btn,\n .btn::before {\n transition: all 0.35s ease-in-out;\n }\n }\n}\n\n@-webkit-keyframes fade-up {\n from {\n opacity: 0;\n position: relative;\n top: 2rem;\n }\n\n to {\n opacity: 1;\n position: relative;\n top: 0;\n }\n}\n\n@keyframes fade-up {\n from {\n opacity: 0;\n position: relative;\n top: 2rem;\n }\n\n to {\n opacity: 1;\n position: relative;\n top: 0;\n }\n}\n\n#toc-wrapper {\n border-left: 1px solid rgba(158, 158, 158, 0.17);\n position: -webkit-sticky;\n position: sticky;\n top: 4rem;\n transition: top 0.2s ease-in-out;\n -webkit-animation: fade-up 0.8s;\n animation: fade-up 0.8s;\n\n ul {\n list-style: none;\n font-size: 0.85rem;\n line-height: 1.25;\n padding-left: 0;\n\n li {\n &:not(:last-child) {\n margin: 0.4rem 0;\n }\n\n a {\n padding: 0.2rem 0 0.2rem 1.25rem;\n }\n }\n\n /* Overwrite TOC plugin style */\n\n .toc-link {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:hover {\n color: var(--toc-highlight);\n text-decoration: none;\n }\n\n &::before {\n display: none;\n }\n }\n\n .is-active-link {\n color: var(--toc-highlight) !important;\n font-weight: 600;\n\n &::before {\n display: inline-block;\n width: 1px;\n left: -1px;\n height: 1.25rem;\n background-color: var(--toc-highlight) !important;\n }\n }\n\n ul {\n padding-left: 0.75rem;\n }\n }\n}\n\n/* --- Related Posts --- */\n\n#related-posts {\n > h3 {\n @include label(1.1rem, 600);\n }\n\n time {\n @extend %normal-font-style;\n @extend %text-xs;\n\n color: var(--text-muted-color);\n }\n\n p {\n font-size: 0.9rem;\n margin-bottom: 0.5rem;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n }\n\n .card {\n h4 {\n @extend %text-clip;\n }\n }\n}\n\n/* stylelint-disable-next-line selector-id-pattern */\n#disqus_thread {\n min-height: 8.5rem;\n}\n\n.utterances {\n max-width: 100%;\n}\n\n%btn-share-hovor {\n color: var(--btn-share-hover-color) !important;\n}\n\n.share-label {\n @include label(inherit, 400, inherit);\n\n &::after {\n content: ':';\n }\n}\n\n@media all and (max-width: 576px) {\n .post-tail-bottom {\n flex-wrap: wrap-reverse !important;\n\n > div:first-child {\n width: 100%;\n margin-top: 1rem;\n }\n }\n}\n\n@media all and (max-width: 768px) {\n .content > p > img {\n max-width: calc(100% + 1rem);\n }\n}\n\n/* Hide SideBar and TOC */\n@media all and (max-width: 849px) {\n .post-navigation {\n padding-left: 0;\n padding-right: 0;\n margin-left: -0.5rem;\n margin-right: -0.5rem;\n }\n}\n","@import \"main\";\n/*\n Style for Archives\n*/\n\n// css for properties page mapper\n.threats {\n margin-left: 27px;\n display: inline-block;\n position: sticky;\n top: 0;\n overflow-y: scroll;\n height: 100vh;\n}\n\n.devprops {\n display: inline-block;\n}\n\n.labelCheckbox {\n margin-left: 10px;\n}\n\n.outerCheckbox {\n display: flex;\n}\n\n.threatsHeader {\n display: flex;\n}\n\n.downloadCSV {\n margin-top: 2.5rem;\n margin-left: 20px;\n height: min-content;\n}\n\n.relatedthreats {\n font-size: 1.36rem;\n}\n\n.btn-home {\n margin-right: 15px;\n margin-bottom: 5px;\n}\n\n.threatLinks {\n ins {\n text-decoration: none !important;\n }\n}\n\n// css for properties page table\n.propertiesTable {\n border: 1px solid;\n td:nth-child(even) {\n background-color: var(--row-cell-color);\n }\n td {\n border: 1px solid;\n border-collapse: collapse;\n text-align: center;\n }\n .rowTIDPropTable {\n border: 0px;\n border-right: 1px solid;\n border-bottom: 1px solid;\n width: 5%;\n }\n .rowDescPropTable {\n border: 0px;\n border-bottom: 1px solid;\n width: 30%;\n }\n .categoryName {\n position: sticky;\n top: 0;\n background: var(--main-bg);\n padding: 5px;\n }\n}\n\ntr:last-child > td {\n border-bottom: 0px !important;\n}\n\n// css for threats page table\n.threatType {\n text-align: center;\n word-wrap: break-word;\n position: sticky;\n top: 0;\n background: var(--main-bg);\n padding: 5px;\n}\n\n.threatEnteries {\n border-right: 1px solid;\n border-left: 1px solid;\n .threatContent {\n border-bottom: 1px solid;\n border-top: 1px solid;\n padding: 5px;\n text-align: center;\n word-wrap: break-word;\n &:nth-child(odd) {\n background-color: var(--row-cell-color);\n }\n }\n}\n\n// css for sidebar\n.dropdown-btn {\n text-decoration: none;\n color: var(--sidebar-muted-color);\n display: block;\n border: none;\n background: none;\n text-align: left;\n}\n\n.dropdown-list {\n display: none;\n padding-left: 35px;\n}\n\n.row-dropdown {\n display: flex;\n --bs-gutter-x: 4.2rem;\n display: flex;\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.1);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col-dropdown {\n width: 105%;\n margin: auto;\n}\n\ni.fa-fw.fas.fa-circle-arrow-down {\n padding-right: 25px;\n padding-left: 10px;\n padding-top: 10px;\n padding-bottom: 10px;\n border-radius: 0.75rem;\n &:hover {\n background-color: var(--sidebar-hover-bg);\n }\n}\n\ni.fa-fw.fas.fa-circle-arrow-up {\n display: none;\n padding-right: 25px;\n padding-left: 10px;\n padding-top: 10px;\n padding-bottom: 10px;\n border-radius: 0.75rem;\n &:hover {\n background-color: var(--sidebar-hover-bg);\n }\n}\n\n.sidebarImg {\n position: sticky;\n top: 0;\n background: var(--sidebar-bg);\n}\n"],"file":"jekyll-theme-chirpy.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../_sass/addon/module.scss","../../_sass/addon/variables.scss","../../_sass/addon/syntax.scss","../../_sass/colors/syntax-light.scss","../../_sass/colors/syntax-dark.scss","../../_sass/addon/commons.scss","../../_sass/colors/typography-light.scss","../../_sass/colors/typography-dark.scss","../../_sass/layout/home.scss","../../_sass/layout/post.scss","jekyll-theme-chirpy.scss"],"names":[],"mappings":"CAMA,mDACE,2BACA,gBACA,YCuBoB,kCDnBpB,gCACE,kBACA,sBAEA,wDACE,aAMJ,4CACE,cAGF,qBACE,4CACE,kBACA,UACA,2DAIA,oEACE,mBACA,UACA,0DAMR,sCACE,4BACA,uCAGF,+DACE,mBACA,cACA,mBAGF,kOACE,yBACA,gCACA,qBAGF,4CACE,wBAGF,sEACE,oDAGF,4EACE,+BAGF,gFACE,yBACA,sBACA,qBACA,iBAGF,oJACE,mBAGF,yFACE,eAGF,4EACE,kBAGF,iIACE,cC5EY,QDgFZ,oCACE,cACA,kBACA,kBACA,cACA,UACA,cAIJ,iDACE,iCACA,yBACA,sBACA,qBACA,iBAGF,iHACE,oBACA,gBACA,uBACA,qBACA,4BAGF,qGACE,yCACA,gBAGF,kFACE,iBAGF,2BACE,gBAIA,mCACE,2CACA,uBACA,0BACA,kBACA,8CEvIF,oCACE,4CCHF,iCACA,8BACA,mCACA,kCACA,0BACA,sBACA,kCACA,mCACA,kCACA,mCAEA,8EACE,0BAKF,oFACE,YAGF,sFACE,SAGF,0IAEE,cACA,yBAGF,ogBAOE,cAGF,0EACE,cAGF,0EACE,cACA,yBAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cACA,yBAGF,0EACE,cAGF,guBAUE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,kXAKE,cAGF,kJAEE,cAGF,0EACE,cACA,iBAGF,0EACE,cACA,iBAGF,4yBAWE,cAGF,0EACE,cAGF,oJAEE,cAGF,4EACE,cACA,yBAGF,glBAQE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cAGF,0EACE,cACA,kBAGF,0EACE,cACA,iBDrMA,qBETF,iCACA,8BACA,mCACA,kCACA,0BACA,sBACA,kCACA,mCACA,kCACA,mCACA,+BAEA,oCACE,cAKF,yCACE,YAGF,0CACE,SAGF,mEAEE,cACA,yBAGF,qCACE,cACA,yBAGF,4PAOE,cAGF,oCACE,cAGF,oCACE,cAGF,uEAEE,cAGF,uEAEE,cAGF,oCACE,cAGF,oCACE,cACA,yBAGF,oCACE,cACA,yBACA,iBAGF,mLAKE,cAGF,oCACE,cAGF,oCACE,cAGF,oCACE,cAGF,mUASE,cAGF,oCACE,cAGF,oCACE,cAGF,oCACE,cAGF,oCACE,cAGF,oCACE,cAGF,oCACE,cAGF,oCACE,cAGF,oCACE,cAGF,+RAQE,cAGF,oCACE,eF9IF,mCACE,2CEfF,iCACA,8BACA,mCACA,kCACA,0BACA,sBACA,kCACA,mCACA,kCACA,mCACA,+BAEA,yEACE,cAKF,mFACE,YAGF,qFACE,SAGF,wIAEE,cACA,yBAGF,2EACE,cACA,yBAGF,+fAOE,cAGF,yEACE,cAGF,yEACE,cAGF,gJAEE,cAGF,gJAEE,cAGF,yEACE,cAGF,yEACE,cACA,yBAGF,yEACE,cACA,yBACA,iBAGF,2WAKE,cAGF,yEACE,cAGF,yEACE,cAGF,yEACE,cAGF,+oBASE,cAGF,yEACE,cAGF,yEACE,cAGF,yEACE,cAGF,yEACE,cAGF,yEACE,cAGF,yEACE,cAGF,yEACE,cAGF,yEACE,cAGF,skBAQE,cAGF,yEACE,cFxIA,sBCnBF,iCACA,8BACA,mCACA,kCACA,0BACA,sBACA,kCACA,mCACA,kCACA,mCAEA,uCACE,0BAKF,0CACE,YAGF,2CACE,SAGF,qEAEE,cACA,yBAGF,kQAOE,cAGF,qCACE,cAGF,qCACE,cACA,yBAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cACA,yBAGF,qCACE,cAGF,gXAUE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,yLAKE,cAGF,yEAEE,cAGF,qCACE,cACA,iBAGF,qCACE,cACA,iBAGF,sZAWE,cAGF,qCACE,cAGF,0EAEE,cAGF,sCACE,cACA,yBAGF,wSAQE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cAGF,qCACE,cACA,kBAGF,qCACE,cACA,kBDlLJ,kDACE,2CAGF,cACE,kBACA,qBAGF,mBACE,qCACA,iBACA,oBAGF,WAQE,cACA,sBAEA,eACE,gBACA,UDtCa,OCuCb,mBACA,iBAKE,gCACE,qBACA,iBACA,oBAGF,+BACE,8BAGF,wBACE,iBACA,kBAKN,mBACE,iBACA,oCACA,yBACA,sBACA,oBACA,qBACA,iBAIJ,KACE,qBACA,iBACA,aACA,wBAEA,uBACE,UDhFa,OCiFb,gBACA,sBACA,kBACA,uCAGF,cACE,yBACA,iCACA,gBACA,UAGF,yBACE,iBACA,cAGF,+BACE,mBAGF,gBACE,cAWF,gBACE,yBACA,8BACA,oBAIJ,sBAIE,kDAEA,+BFIA,YEHiB,MFIjB,aEJiB,MAEf,gBAGF,iCACE,yBACA,0BAUA,2IACE,qBACA,eAEA,2KACE,aAMR,aAGE,aACA,8BACA,mBACA,ODlKmB,QCmKnB,mBACA,oBAGA,kBACE,YDxKiB,QC2KjB,oBACE,eACA,MD1KY,QC2KZ,oCAEA,0BACE,cAIK,2BACP,kBACA,QAIF,yBACE,8BACA,iBACA,gBACA,oCAKJ,oBAIE,+BACA,ODzMiB,QC0MjB,MD1MiB,QC2MjB,UACA,yBAEA,sBACE,oCAIA,mCACE,4CAGF,+BACE,qCAIJ,0BACE,aAGF,yCACE,uCAEA,2CACE,WAMR,kCAEI,+BFzGF,YE0GmB,EFzGnB,aEyGmB,EAEf,cDrPQ,QCwPV,mCF/GF,YEgHmB,EF/GnB,aE+GmB,EAIf,2CACE,WACA,qBACA,YALW,KAMX,MD1PQ,OC2PR,OD3PQ,OC4PR,kBACA,gDACA,gGAMF,wCAEE,uBG7RR,KAuBE,eAtBA,oCACE,4CCEF,iBACA,mBACA,6BAGA,sBACA,4BACA,uCACA,yBACA,uBACA,mCACA,iCACA,sBACA,gCACA,qBACA,4BACA,+BACA,sCACA,0BACA,0BACA,kCACA,2CACA,oFAKA,2HAQA,uCACA,+BACA,sBACA,gCACA,+BACA,gCACA,6CACA,wBACA,6BACA,6BAGA,qCACA,qCACA,0CACA,6BACA,oCAGA,gCACA,oCACA,+CAGA,yBACA,wBACA,iCACA,iBACA,yBACA,yFAEA,gCACA,qBACA,2BACA,qBACA,0BACA,oCACA,sBACA,2CACA,yCACA,iCACA,0BACA,kCACA,wCACA,qCACA,6CACA,oCAGA,sBACA,sCACA,gCACA,yBAWA,0CACA,+CACA,6CAGA,uCACA,4BACA,mCAhBA,8EACE,2CAGF,wDACE,aD3FA,qBEHF,2BACA,2BACA,qCAGA,iCACA,4BACA,uCACA,yBACA,uBACA,2CACA,iCACA,iCACA,0CACA,qBACA,4BACA,yCACA,sCACA,iCACA,0BACA,qCACA,4CACA,yBACA,4EACA,0HAQA,4BACA,+BACA,sBACA,gCACA,+BACA,iDACA,4BACA,0BACA,6BACA,+CAGA,mCACA,uCACA,uCACA,wCACA,+CAGA,2CACA,8CACA,qCAGA,oCACA,6BACA,qBACA,8BACA,oCACA,uCACA,2BACA,iCACA,mBACA,yBACA,sFAEA,0BACA,0BACA,wBACA,8CACA,uCACA,gDACA,uCACA,kCACA,0CACA,mDACA,wCACA,oCAGA,8BACA,8BACA,8BACA,yBAGA,0CACA,uCACA,qCAGA,uCACA,kCACA,iDAwCA,kBAtCA,4BACE,aAIF,4EAEE,gCAIA,8CACE,uCAGF,kDACE,iBACA,kBACA,kBACA,sCAEA,6DACE,mCAKN,iDACE,+HAaF,oCACE,mBFnIF,mCACE,2CETF,2BACA,2BACA,qCAGA,iCACA,4BACA,uCACA,yBACA,uBACA,2CACA,iCACA,iCACA,0CACA,qBACA,4BACA,yCACA,sCACA,iCACA,0BACA,qCACA,4CACA,yBACA,4EACA,0HAQA,4BACA,+BACA,sBACA,gCACA,+BACA,iDACA,4BACA,0BACA,6BACA,+CAGA,mCACA,uCACA,uCACA,wCACA,+CAGA,2CACA,8CACA,qCAGA,oCACA,6BACA,qBACA,8BACA,oCACA,uCACA,2BACA,iCACA,mBACA,yBACA,sFAEA,0BACA,0BACA,wBACA,8CACA,uCACA,gDACA,uCACA,kCACA,0CACA,mDACA,wCACA,oCAGA,8BACA,8BACA,8BACA,yBAGA,0CACA,uCACA,qCAGA,uCACA,kCACA,iDAwCA,kBAtCA,yDACE,aAIF,0JAEE,gCAIA,6FACE,uCAGF,qGACE,iBACA,kBACA,kBACA,sCAEA,2HACE,mCAKN,mGACE,+HAaF,yEACE,kBF7HA,sBCdF,iBACA,mBACA,6BAGA,sBACA,4BACA,uCACA,yBACA,uBACA,mCACA,iCACA,sBACA,gCACA,qBACA,4BACA,+BACA,sCACA,0BACA,0BACA,kCACA,2CACA,oFAKA,2HAQA,uCACA,+BACA,sBACA,gCACA,+BACA,gCACA,6CACA,wBACA,6BACA,6BAGA,qCACA,qCACA,0CACA,6BACA,oCAGA,gCACA,oCACA,+CAGA,yBACA,wBACA,iCACA,iBACA,yBACA,yFAEA,gCACA,qBACA,2BACA,qBACA,0BACA,oCACA,sBACA,2CACA,yCACA,iCACA,0BACA,kCACA,wCACA,qCACA,6CACA,oCAGA,sBACA,sCACA,gCACA,yBAWA,0CACA,+CACA,6CAGA,uCACA,4BACA,mCAhBA,uCACE,2CAGF,4BACE,cDxEJ,KACE,0BACA,kHAEA,wBACA,mCACA,YJHiB,+CISjB,GAeI,kBAfJ,GAeI,kBAfJ,GAeI,kBAfJ,GAeI,kBAfJ,GAiBI,eAKN,EAGE,qBAGF,IACE,eACA,YACA,gCAEA,UAGE,0BACA,kBAIJ,WACE,qDACA,kBACA,mCAEA,wBACE,gBAGF,2BACE,cACA,kBACA,4BACA,+BAIA,mCACE,kBACA,WACA,kBACA,YACA,iBACA,oBACA,mCLqFJ,sBACE,sCAEA,8BACE,QKrFmB,ILsFnB,mCACA,4BANJ,uBACE,uCAEA,+BACE,QKpFoB,ILqFpB,oCACA,0BANJ,0BACE,0CAEA,kCACE,QKnFuB,ILoFvB,uCACA,0BANJ,yBACE,yCAEA,iCACE,QKlFsB,ILmFtB,sCACA,0BKjFN,IACE,oBACA,qBACA,sBACA,mBACA,kBACA,kBACA,eACA,kBACA,4BACA,qCACA,qBACA,uCACA,gDAGF,GACE,sCACA,UAGF,OACE,gCACA,OJ3Hc,KI4Hd,8CACA,aAgBA,SACE,kBACA,gBAcJ,QACE,SACA,+BACA,gBACA,mBAEA,mBACE,wBACA,gBAGF,gBACE,kBACA,+CAEA,iCACE,mBAIJ,iBACE,gBAMF,8BACE,oBACA,oBLvBF,MADwD,mBAExD,UKwBiB,QLvBjB,YAH2C,IK6B3C,yBACE,oBACA,iBACA,oBACA,oBACA,wBAEA,+BACE,2BAMJ,kBAOE,cAIJ,cACE,kBACA,iBAGE,kCACE,oBAKF,mBACE,kBACA,aACA,gBAMK,WLhGT,YKiGiB,ILhGjB,aKgGiB,ILvFjB,aKwFiB,ILvFjB,cKuFiB,IAEf,oCASO,kBACP,gBACA,cACA,kBACA,aACA,kBACA,oCAOJ,eACE,gBACA,qBAEA,qBACE,eACA,gBACA,iBAEA,2BACE,8CAQA,8BACE,+CAEA,4CACE,mCAGF,8CACE,kCAsCV,cAGE,SACA,0BACA,8BAEA,sBAGE,WACA,WACA,YACA,kBACA,sCACA,UACA,oCAIA,4BACE,WAKN,KACE,iBAEA,QACE,gBACA,qBAKE,mDLjMJ,kBACA,SACA,2BK4NF,SACE,kBACA,gBACA,yBAGE,iBLtQF,WKyQmB,MLxQnB,cKwQmB,MAEf,eAcF,8FAEE,8BACA,6BAEA,0GACE,gBACA,oBAGF,oNAEE,8BACA,6BACA,eAKN,sBACE,8BACA,6BAEA,yBACE,qBACA,eAGA,2BACE,WACA,qBACA,4BAEA,mCACE,oCAIJ,4BACE,8BACA,6BAIJ,2CACE,6BACA,sBAIJ,eACE,iBAGF,kBACE,8BAQJ,UACE,qBACA,eACA,kBACA,oBACA,yCACA,gBACA,8BACA,mBAEA,2BACE,mBAIJ,YACE,8BAGF,UACE,oBACA,oBAGF,SACE,UACA,iBACA,kBAuCF,aACE,WACA,YACA,mBACA,kBAIA,oBACE,qBAGF,kBACE,cACA,WACA,YACA,eACA,gBACA,YACA,gBAOJ,UACE,4BACA,gBACA,kBACA,wBAEA,gBACE,gBAMJ,QACE,yBAES,eACP,wBAIJ,UACE,wBAGF,SACE,8BAGF,QACE,6BAGF,aACE,uBAGF,gBACE,8BAIF,YACE,yCAIF,eACE,gBACA,gBACA,gBAKA,8CACE,gCAIJ,UACE,cACA,oBACA,mBAGF,oBACE,8BAGF,aACE,gBACA,wDACA,6BACA,2EAGF,MACE,WACA,0BAGF,OACE,YACA,0BAOF,kBACE,kBACA,gBACA,iBAGF,SACE,gBAIF,SACE,kBAIF,cACE,kBACA,0BASF,SL3hBE,aK4hBe,EL3hBf,cK2hBe,EAEf,eACA,MACA,OACA,YACA,gBACA,MJlsBc,MImsBd,WACA,6BACA,mDAQA,wBACA,qBANA,4BACE,aAQA,0GACE,kCAQJ,iBACE,cACA,YACA,YACA,gBACA,gDACA,wBACA,mBACA,qBACE,gBACA,kBACA,mBACA,yBAEA,2BACE,qBAKN,0BL9lBA,WK+lBiB,OL9lBjB,cK8lBiB,OAGf,qBACA,sBACA,WAGF,qBACE,oBACA,gBACA,kBACA,gBACA,qBACA,mBACA,oBACA,iBAEA,uBAIE,8BAIJ,wBACE,cACA,iCACA,kBACA,iBACA,kBACA,yBACA,sBACA,qBACA,iBAGF,YACE,mBAEA,wBACE,WACA,kBACA,qBAEA,mCLnoBJ,YKooBqB,MLnoBrB,eKmoBqB,MAEf,aACA,mBACA,qBACA,gBAEA,yCACE,yCAGF,qCACE,cACA,oBAGF,wCACE,cACA,oBAGJ,sCACE,YAIA,yCACE,kCACA,yCAEA,8CACE,UAKN,0CACE,kBAIN,qBACE,mBAGF,yBACE,kBACA,mBACA,qBAIA,iEACE,MAHS,QAIT,OAJS,QAKT,cA7JG,MA8JH,kBACA,+BACA,uCACA,kBACA,aACA,mBACA,uBACA,iDAEA,6EACE,yCASF,4CACE,aJx2BK,MI42BT,2BACE,YA/BS,QAkCX,sCACE,UACA,SAOF,sCLtuBF,YKwuBmB,sBLvuBnB,aKuuBmB,sBAEf,0CACA,WACA,MA1Ma,IA2Mb,OA3Ma,IA4Mb,kBACA,cA5MG,MAiNT,qBACE,iCACE,wBAGF,UACE,4CAGF,cACE,8CAIJ,uBACE,aACA,YACA,WACA,cAEA,gCACE,gBAMJ,gBACE,OJ95Bc,KI+5Bd,kCAIA,iBACE,WAGF,oBACE,eACA,8BACA,mBAQI,iDACE,YACA,gBAOV,4BL9xBE,yCKkyBF,mBLlyBE,yCKsyBF,uBLtyBE,yCK0yBF,wBL1yBE,yCK8yBF,cL9yBE,yCKkzBF,kCL9yBE,WKkzBF,yBLlzBE,WKszBF,6BLtzBE,WK0zBF,8BL1zBE,WK8zBF,oBL9zBE,WKk0BF,OACE,aACA,WACA,mBACA,4CACA,0BACA,gBAEA,SACE,UACA,gBACA,+BAIJ,iCAEE,aAIF,eACE,wBACA,aACA,mBAKF,cACE,kBACA,SACA,gBACA,qBACA,wBACA,YAEA,oBACE,gBAIJ,cACE,eAEA,iBACE,qBAGF,wBACE,qBACA,iBACA,eACA,gCACA,YACA,cACA,wBAEA,gCACE,YACA,8BACA,oBAON,gBACE,oBAEA,kBASE,iBACA,mBAGF,wBACE,WAEA,yCACE,mBAIF,0BACE,cACA,oBACA,cAGF,0BACE,gBACA,uBACA,oBACA,qBACA,4BAKN,cACE,aACA,iBACA,gBACA,uBACA,+BACA,kBACA,UACA,gBACA,uBACA,oBACA,mBAGF,MACE,aACA,eACA,cACA,YACA,WACA,UAES,wBACP,yBAMJ,cACE,kBLr9BA,aKu9Be,ELt9Bf,cKs9Be,EAEf,yBACE,iBAIJ,8ELx+BE,YK2+Be,EL1+Bf,aK0+Be,EAIf,2BACE,gBAMJ,aACE,aACA,UACA,eACA,eACA,WACA,gBACA,4BACA,iCACA,UACA,MJxoCc,QIyoCd,OJzoCc,QI0oCd,kBACA,mDACA,kCACA,0CAEA,mBACE,kCACA,0CAGF,eACE,YJrpCY,QIspCZ,kBACA,WAKF,yBACE,KACE,UACA,UAIJ,iBACE,KACE,UACA,UAIJ,4BACE,gBACA,mBACA,cAGF,0BACE,4BACA,oBAEA,iCACE,cACA,eAKF,yBACE,cACA,gBACA,oBACA,mCACA,2BACA,sCACA,iCACA,eACA,SACA,WACA,2BACA,4BACA,oBAcN,kCAGM,yCLjlCJ,YKklCqB,MLjlCrB,aKilCqB,MAEf,gBACA,eAKN,QACE,WACA,aAIJ,kCACE,iCACE,eAOF,yBL/lCA,aKimCiB,ELhmCjB,cKgmCiB,GAKnB,kCAWE,OAJI,WALM,mBAYR,OJzwCkB,KI0wClB,iBAGF,YACE,6BAIA,2BACE,wBAGF,gCACE,4BAGF,+BACE,kBAIJ,SA7BI,WALM,mBAqCR,6BACA,qCAGF,cApCI,WALM,mBA6CV,iCAEE,eAGF,uBACE,WAGF,mBAEE,aAGF,gBAxDI,2CA2DF,OAGF,oBAEE,aAGF,+CAGE,cAGF,gCACE,iBAGF,MACE,kCAGF,iBACE,aAEA,0BACE,kBAIJ,SACE,YAKJ,kCAEE,KACE,kBAGF,cACE,YJh3CY,MIo3CZ,0BACE,gBAIJ,cACE,aAGF,OACE,UJt3Ce,MIy3CjB,uBACE,UJv3CqB,OIw3CrB,iCAIA,QACE,gBAIJ,iCACE,cAIF,aACE,SACA,gBAGF,cACE,iBAIJ,kCACE,SACE,8BACA,uBACA,2BAEF,OACE,0BAIJ,yDACE,oCACE,aACA,eAKJ,yDACE,oBACE,gBAGF,YACE,UACA,gBACA,uBACA,oBACA,oBAKJ,mCACE,eACE,aAGF,iCACE,mCAMJ,mCACE,OACE,kBAGF,cACE,+BAGF,wBACE,UAEA,uCACE,oBAGF,wCACE,mBAGF,kDACE,kBACA,YAIJ,SACE,mBAIJ,mCACE,aACE,+CAIJ,mCAGE,cACE,YJj/CkB,MIo/CpB,gBACE,KJr/CkB,MIw/CpB,OACE,kCAKF,yBACE,iBACA,gCACA,iCAGF,0BAEE,gCAGF,aACE,+CAMJ,mCAGE,cACE,YJphDkB,MIuhDpB,gBACE,KJxhDkB,MI2hDpB,OACE,kCAKF,yBACE,UJxhDqB,OIyhDrB,gCACA,iCAGF,0BAEE,gCAGF,aACE,+CGhjDJ,WACE,gBAGE,+BACE,qBAGF,0CACE,sBAIJ,iBACE,SACA,gBAEA,gEACE,kCAWF,4BACE,YACA,aAEA,wCAGE,sCACA,kBAGF,sFACE,yCAMA,iDAGE,gBACA,SAQA,2DACE,mBAIJ,0CAGE,cAGF,uDACE,cACA,mBACA,gBACA,uBAOV,YACE,wBACA,4BACA,6BAEA,oBACE,qBAIA,kCACE,sCACA,gBACA,oBACA,wBACA,yBACA,oBACA,SACA,yBAIA,yCACE,kDAMA,qDACE,mDAKN,gCACE,mBAEA,2CACE,4BAOR,kCACE,gEACE,kCAKE,4BACE,wCAEA,uCACE,2BAKE,2DACE,qBAUd,kCAGM,0DACE,cAOR,kCACE,WACE,kBAGF,YACE,iBACA,uBAGE,wCACE,mBAIJ,wBACE,cCrLN,qDACE,UACA,kBACA,qCAUA,kBAGE,mBACA,gBAIA,oCAdF,YACA,aAFc,OAGd,cAH4B,OAyBxB,uBACE,cAMR,mBAGE,gBACA,kDAEA,oCACE,mBAmBF,kCACE,sBACA,yBACA,sBACA,qBACA,iBAEA,kGACE,mBAGF,+CACE,aAEA,iDACE,6BAKF,iDAGE,kBASF,sDACE,UACA,YACA,oBAQR,gBAEE,wCACA,iDACA,+DACA,6DACA,6DACA,qDACA,wCAEA,eAGF,WACE,iBAeE,kCACE,wBAIA,mDACE,cAIJ,+BAGE,oBACA,mBACA,gBACA,WAGF,yDACE,gBAGF,8BACE,8BACA,iBACA,yBACA,yBAGF,kCACE,kCACA,UAGF,iCACE,kCACA,WAIJ,mBACE,iBACA,mBACA,iBACA,mBAIJ,qBAEI,oDAEE,iCAKN,2BACE,KACE,UACA,kBACA,SAGF,GACE,UACA,kBACA,OAIJ,mBACE,KACE,UACA,kBACA,SAGF,GACE,UACA,kBACA,OAIJ,aACE,4CACA,wBACA,gBACA,SACA,+BACA,8BACA,sBAEA,gBACE,gBACA,iBACA,iBACA,eAGE,oCACE,eAGF,qBACE,8BAMJ,0BACE,cACA,mBACA,gBACA,uBAEA,gCACE,2BACA,qBAGF,kCACE,aAIJ,gCACE,sCACA,gBAEA,wCACE,qBACA,UACA,UACA,eACA,iDAIJ,mBACE,oBAQJ,kBTjHA,MADwD,mBAExD,USiHiB,OThHjB,YSgHyB,IAGzB,oBAIE,8BAGF,iBACE,gBACA,oBACA,gBACA,uBACA,oBACA,qBACA,4BAWJ,eACE,kBAGF,YACE,eAGF,yDACE,8CAGF,aT1JE,MS2J6B,QT1J7B,US0Je,QTzJf,YSyJwB,IAExB,oBACE,YAIJ,kCACE,kBACE,kCAEA,kCACE,WACA,iBAKN,kCACE,eACE,6BAKJ,kCACE,iBACE,eACA,gBACA,oBACA,sBCrWJ,SACE,iBACA,qBACA,gBACA,MACA,kBACA,aAGF,UACE,qBAGF,eACE,iBAGF,eACE,aAGF,eACE,aAGF,aACE,kBACA,iBACA,mBAGF,UACE,kBACA,kBAIA,iBACE,gCAKJ,iBACE,iBACA,oCACE,uCAEF,oBACE,iBACA,yBACA,kBAEF,kCACE,WACA,uBACA,wBACA,SAEF,mCACE,WACA,wBACA,UAEF,+BACE,gBACA,MACA,0BACA,YAIJ,iBACE,6BAIF,YACE,kBACA,qBACA,gBACA,MACA,0BACA,YAGF,gBACE,uBACA,sBACA,+BACE,wBACA,qBACA,YACA,kBACA,qBACA,8CACE,uCAKN,0BACE,iBACA,6BACE,iBACA,yBACA,aACA,YAEF,uDACE,kBAKJ,cACE,qBACA,iCACA,cACA,YACA,gBACA,gBAGF,eACE,aACA,kBAGF,cACE,aACA,sBACA,aACA,0CACA,eACA,0CACA,yCACA,8BAGF,cACE,WACA,YAGF,iCACE,mBACA,kBACA,iBACA,oBACA,qBACA,uCACE,yCAIJ,+BACE,aACA,mBACA,kBACA,iBACA,oBACA,qBACA,qCACE,yCAIJ,YACE,gBACA,MACA","sourcesContent":["/*\n* Mainly scss modules, only imported to `assets/css/main.scss`\n*/\n\n/* ---------- scss placeholder --------- */\n\n%heading {\n color: var(--heading-color);\n font-weight: 400;\n font-family: $font-family-heading;\n}\n\n%section {\n main & {\n margin-top: 2.5rem;\n margin-bottom: 1.25rem;\n\n &:focus {\n outline: none; /* avoid outline in Safari */\n }\n }\n}\n\n%anchor {\n .anchor {\n font-size: 80%;\n }\n\n @media (hover: hover) {\n .anchor {\n visibility: hidden;\n opacity: 0;\n transition: opacity 0.25s ease-in, visibility 0s ease-in 0.25s;\n }\n\n &:hover {\n .anchor {\n visibility: visible;\n opacity: 1;\n transition: opacity 0.25s ease-in, visibility 0s ease-in 0s;\n }\n }\n }\n}\n\n%tag-hover {\n background: var(--tag-hover);\n transition: background 0.35s ease-in-out;\n}\n\n%table-cell {\n padding: 0.4rem 1rem;\n font-size: 95%;\n white-space: nowrap;\n}\n\n%link-hover {\n color: #d2603a !important;\n border-bottom: 1px solid #d2603a;\n text-decoration: none;\n}\n\n%link-color {\n color: var(--link-color);\n}\n\n%link-underline {\n border-bottom: 1px solid var(--link-underline-color);\n}\n\n%clickable-transition {\n transition: all 0.3s ease-in-out;\n}\n\n%no-cursor {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n%no-bottom-border {\n border-bottom: none;\n}\n\n%cursor-pointer {\n cursor: pointer;\n}\n\n%normal-font-style {\n font-style: normal;\n}\n\n%rounded {\n border-radius: $base-radius;\n}\n\n%img-caption {\n + em {\n display: block;\n text-align: center;\n font-style: normal;\n font-size: 80%;\n padding: 0;\n color: #6d6c6c;\n }\n}\n\n%sidebar-links {\n color: var(--sidebar-muted-color);\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n%text-clip {\n display: -webkit-box;\n overflow: hidden;\n text-overflow: ellipsis;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n%text-highlight {\n color: var(--text-muted-hightlight-color);\n font-weight: 600;\n}\n\n%text-sm {\n font-size: 0.85rem;\n}\n\n%text-xs {\n font-size: 0.8rem;\n}\n\n%sup-fn-target {\n &:target {\n background-color: var(--footnote-target-bg);\n width: -moz-fit-content;\n width: -webkit-fit-content;\n width: fit-content;\n transition: background-color 1.75s ease-in-out;\n }\n}\n\n/* ---------- scss mixin --------- */\n\n@mixin mt-mb($value) {\n margin-top: $value;\n margin-bottom: $value;\n}\n\n@mixin ml-mr($value) {\n margin-left: $value;\n margin-right: $value;\n}\n\n@mixin pt-pb($val) {\n padding-top: $val;\n padding-bottom: $val;\n}\n\n@mixin pl-pr($val) {\n padding-left: $val;\n padding-right: $val;\n}\n\n@mixin placeholder {\n color: var(--text-muted-color) !important;\n}\n\n@mixin placeholder-focus {\n opacity: 0.6;\n}\n\n@mixin label($font-size: 1rem, $font-weight: 600, $color: var(--label-color)) {\n color: $color;\n font-size: $font-size;\n font-weight: $font-weight;\n}\n\n@mixin align-center {\n position: relative;\n left: 50%;\n transform: translateX(-50%);\n}\n\n@mixin prompt($type, $fa-content, $fa-style: 'solid') {\n &.prompt-#{$type} {\n background-color: var(--prompt-#{$type}-bg);\n\n &::before {\n content: $fa-content;\n color: var(--prompt-#{$type}-icon-color);\n font: var(--fa-font-#{$fa-style});\n }\n }\n}\n","/*\n * The SCSS variables\n */\n\n/* sidebar */\n\n$sidebar-width: 260px !default; /* the basic width */\n$sidebar-width-large: 300px !default; /* screen width: >= 1650px */\n$sb-btn-gap: 0.8rem !default;\n$sb-btn-gap-lg: 1rem !default;\n\n/* other framework sizes */\n\n$topbar-height: 3rem !default;\n$search-max-width: 200px !default;\n$footer-height: 6rem !default;\n$footer-height-large: 6rem !default; /* screen width: < 850px */\n$main-content-max-width: 1700px !default;\n$base-radius: 0.625rem !default;\n$back2top-size: 2.75rem !default;\n\n/* syntax highlight */\n\n$code-font-size: 0.85rem !default;\n$code-header-height: 2.25rem !default;\n$code-dot-size: 0.75rem !default;\n$code-dot-gap: 0.5rem !default;\n$code-icon-width: 1.75rem !default;\n\n/* fonts */\n\n$font-family-base: 'Source Sans Pro', 'Microsoft Yahei', sans-serif !default;\n$font-family-heading: Lato, 'Microsoft Yahei', sans-serif !default;\n","/*\n* The syntax highlight.\n*/\n\n@import 'colors/syntax-light';\n@import 'colors/syntax-dark';\n\nhtml {\n @media (prefers-color-scheme: light) {\n &:not([data-mode]),\n &[data-mode='light'] {\n @include light-syntax;\n }\n\n &[data-mode='dark'] {\n @include dark-syntax;\n }\n }\n\n @media (prefers-color-scheme: dark) {\n &:not([data-mode]),\n &[data-mode='dark'] {\n @include dark-syntax;\n }\n\n &[data-mode='light'] {\n @include light-syntax;\n }\n }\n}\n\n/* -- code snippets -- */\n\n%code-snippet-bg {\n background-color: var(--highlight-bg-color);\n}\n\n%code-snippet-padding {\n padding-left: 1rem;\n padding-right: 1.5rem;\n}\n\n.highlighter-rouge {\n color: var(--highlighter-rouge-color);\n margin-top: 0.5rem;\n margin-bottom: 1.2em; /* Override BS Inline-code style */\n}\n\n.highlight {\n @extend %rounded;\n @extend %code-snippet-bg;\n\n @at-root figure#{&} {\n @extend %code-snippet-bg;\n }\n\n overflow: auto;\n padding-bottom: 0.75rem;\n\n pre {\n margin-bottom: 0;\n font-size: $code-font-size;\n line-height: 1.4rem;\n word-wrap: normal; /* Fixed Safari overflow-x */\n }\n\n table {\n td {\n &:first-child {\n display: inline-block;\n margin-left: 1rem;\n margin-right: 0.75rem;\n }\n\n &:last-child {\n padding-right: 2rem !important;\n }\n\n pre {\n overflow: visible; /* Fixed iOS safari overflow-x */\n word-break: normal; /* Fixed iOS safari linenos code break */\n }\n }\n }\n\n .lineno {\n text-align: right;\n color: var(--highlight-lineno-color);\n -webkit-user-select: none;\n -moz-user-select: none;\n -o-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n} /* .highlight */\n\ncode {\n -webkit-hyphens: none;\n -ms-hyphens: none;\n hyphens: none;\n color: var(--code-color);\n\n &.highlighter-rouge {\n font-size: $code-font-size;\n padding: 3px 5px;\n word-break: break-word;\n border-radius: 4px;\n background-color: var(--inline-code-bg);\n }\n\n &.filepath {\n background-color: inherit;\n color: var(--filepath-text-color);\n font-weight: 600;\n padding: 0;\n }\n\n a > &.highlighter-rouge {\n padding-bottom: 0; /* show link's underlinke */\n color: inherit;\n }\n\n a:hover > &.highlighter-rouge {\n border-bottom: none;\n }\n\n blockquote & {\n color: inherit;\n }\n}\n\ntd.rouge-code {\n @extend %code-snippet-padding;\n\n /*\n Prevent some browser extends from\n changing the URL string of code block.\n */\n a {\n color: inherit !important;\n border-bottom: none !important;\n pointer-events: none;\n }\n}\n\ndiv[class^='language-'] {\n @extend %rounded;\n @extend %code-snippet-bg;\n\n box-shadow: var(--language-border-color) 0 0 0 1px;\n\n .content > & {\n @include ml-mr(-1rem);\n\n border-radius: 0;\n }\n\n .highlight {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n/* Hide line numbers for default, console, and terminal code snippets */\ndiv {\n &.nolineno,\n &.language-plaintext,\n &.language-console,\n &.language-terminal {\n td:first-child {\n padding: 0 !important;\n margin-right: 0;\n\n .lineno {\n display: none;\n }\n }\n }\n}\n\n.code-header {\n @extend %no-cursor;\n\n display: flex;\n justify-content: space-between;\n align-items: center;\n height: $code-header-height;\n margin-left: 0.75rem;\n margin-right: 0.25rem;\n\n /* the label block */\n span {\n line-height: $code-header-height;\n\n /* label icon */\n i {\n font-size: 1rem;\n width: $code-icon-width;\n color: var(--code-header-icon-color);\n\n &.small {\n font-size: 70%;\n }\n }\n\n @at-root [file] #{&} > i {\n position: relative;\n top: 1px; /* center the file icon */\n }\n\n /* label text */\n &::after {\n content: attr(data-label-text);\n font-size: 0.85rem;\n font-weight: 600;\n color: var(--code-header-text-color);\n }\n }\n\n /* clipboard */\n button {\n @extend %cursor-pointer;\n @extend %rounded;\n\n border: 1px solid transparent;\n height: $code-header-height;\n width: $code-header-height;\n padding: 0;\n background-color: inherit;\n\n i {\n color: var(--code-header-icon-color);\n }\n\n &[timeout] {\n &:hover {\n border-color: var(--clipboard-checked-color);\n }\n\n i {\n color: var(--clipboard-checked-color);\n }\n }\n\n &:focus {\n outline: none;\n }\n\n &:not([timeout]):hover {\n background-color: rgba(128, 128, 128, 0.37);\n\n i {\n color: white;\n }\n }\n }\n}\n\n@media all and (min-width: 576px) {\n div[class^='language-'] {\n .content > & {\n @include ml-mr(0);\n\n border-radius: $base-radius;\n }\n\n .code-header {\n @include ml-mr(0);\n\n $dot-margin: 1rem;\n\n &::before {\n content: '';\n display: inline-block;\n margin-left: $dot-margin;\n width: $code-dot-size;\n height: $code-dot-size;\n border-radius: 50%;\n background-color: var(--code-header-muted-color);\n box-shadow: ($code-dot-size + $code-dot-gap) 0 0\n var(--code-header-muted-color),\n ($code-dot-size + $code-dot-gap) * 2 0 0\n var(--code-header-muted-color);\n }\n\n span {\n // center the text of label\n margin-left: calc(($dot-margin + $code-dot-size) / 2 * -1);\n }\n }\n }\n}\n","/*\n * The syntax light mode code snippet colors.\n */\n\n@mixin light-syntax {\n /* --- custom light colors --- */\n --language-border-color: #ececec;\n --highlight-bg-color: #f6f8fa;\n --highlighter-rouge-color: #3f596f;\n --highlight-lineno-color: #9e9e9e;\n --inline-code-bg: #f6f6f7;\n --code-color: #3a3a3a;\n --code-header-text-color: #a3a3a3;\n --code-header-muted-color: #e5e5e5;\n --code-header-icon-color: #c9c8c8;\n --clipboard-checked-color: #43c743;\n\n [class^='prompt-'] {\n --inline-code-bg: #fbfafa;\n }\n\n /* --- Syntax highlight theme from `rougify style github` --- */\n\n .highlight table td {\n padding: 5px;\n }\n\n .highlight table pre {\n margin: 0;\n }\n\n .highlight,\n .highlight .w {\n color: #24292f;\n background-color: #f6f8fa;\n }\n\n .highlight .k,\n .highlight .kd,\n .highlight .kn,\n .highlight .kp,\n .highlight .kr,\n .highlight .kt,\n .highlight .kv {\n color: #cf222e;\n }\n\n .highlight .gr {\n color: #f6f8fa;\n }\n\n .highlight .gd {\n color: #82071e;\n background-color: #ffebe9;\n }\n\n .highlight .nb {\n color: #953800;\n }\n\n .highlight .nc {\n color: #953800;\n }\n\n .highlight .no {\n color: #953800;\n }\n\n .highlight .nn {\n color: #953800;\n }\n\n .highlight .sr {\n color: #116329;\n }\n\n .highlight .na {\n color: #116329;\n }\n\n .highlight .nt {\n color: #116329;\n }\n\n .highlight .gi {\n color: #116329;\n background-color: #dafbe1;\n }\n\n .highlight .kc {\n color: #0550ae;\n }\n\n .highlight .l,\n .highlight .ld,\n .highlight .m,\n .highlight .mb,\n .highlight .mf,\n .highlight .mh,\n .highlight .mi,\n .highlight .il,\n .highlight .mo,\n .highlight .mx {\n color: #0550ae;\n }\n\n .highlight .sb {\n color: #0550ae;\n }\n\n .highlight .bp {\n color: #0550ae;\n }\n\n .highlight .ne {\n color: #0550ae;\n }\n\n .highlight .nl {\n color: #0550ae;\n }\n\n .highlight .py {\n color: #0550ae;\n }\n\n .highlight .nv,\n .highlight .vc,\n .highlight .vg,\n .highlight .vi,\n .highlight .vm {\n color: #0550ae;\n }\n\n .highlight .o,\n .highlight .ow {\n color: #0550ae;\n }\n\n .highlight .gh {\n color: #0550ae;\n font-weight: bold;\n }\n\n .highlight .gu {\n color: #0550ae;\n font-weight: bold;\n }\n\n .highlight .s,\n .highlight .sa,\n .highlight .sc,\n .highlight .dl,\n .highlight .sd,\n .highlight .s2,\n .highlight .se,\n .highlight .sh,\n .highlight .sx,\n .highlight .s1,\n .highlight .ss {\n color: #0a3069;\n }\n\n .highlight .nd {\n color: #8250df;\n }\n\n .highlight .nf,\n .highlight .fm {\n color: #8250df;\n }\n\n .highlight .err {\n color: #f6f8fa;\n background-color: #82071e;\n }\n\n .highlight .c,\n .highlight .ch,\n .highlight .cd,\n .highlight .cm,\n .highlight .cp,\n .highlight .cpf,\n .highlight .c1,\n .highlight .cs {\n color: #68717a;\n }\n\n .highlight .gl {\n color: #68717a;\n }\n\n .highlight .gt {\n color: #68717a;\n }\n\n .highlight .ni {\n color: #24292f;\n }\n\n .highlight .si {\n color: #24292f;\n }\n\n .highlight .ge {\n color: #24292f;\n font-style: italic;\n }\n\n .highlight .gs {\n color: #24292f;\n font-weight: bold;\n }\n} /* light-syntax */\n","/*\n * The syntax dark mode styles.\n */\n\n@mixin dark-syntax {\n --language-border-color: #2d2d2d;\n --highlight-bg-color: #151515;\n --highlighter-rouge-color: #c9def1;\n --highlight-lineno-color: #808080;\n --inline-code-bg: #323238;\n --code-color: #b0b0b0;\n --code-header-text-color: #6a6a6a;\n --code-header-muted-color: #353535;\n --code-header-icon-color: #565656;\n --clipboard-checked-color: #2bcc2b;\n --filepath-text-color: #cacaca;\n\n .highlight .gp {\n color: #87939d;\n }\n\n /* --- Syntax highlight theme from `rougify style base16.dark` --- */\n\n .highlight table td {\n padding: 5px;\n }\n\n .highlight table pre {\n margin: 0;\n }\n\n .highlight,\n .highlight .w {\n color: #d0d0d0;\n background-color: #151515;\n }\n\n .highlight .err {\n color: #151515;\n background-color: #ac4142;\n }\n\n .highlight .c,\n .highlight .ch,\n .highlight .cd,\n .highlight .cm,\n .highlight .cpf,\n .highlight .c1,\n .highlight .cs {\n color: #848484;\n }\n\n .highlight .cp {\n color: #f4bf75;\n }\n\n .highlight .nt {\n color: #f4bf75;\n }\n\n .highlight .o,\n .highlight .ow {\n color: #d0d0d0;\n }\n\n .highlight .p,\n .highlight .pi {\n color: #d0d0d0;\n }\n\n .highlight .gi {\n color: #90a959;\n }\n\n .highlight .gd {\n color: #f08a8b;\n background-color: #320000;\n }\n\n .highlight .gh {\n color: #6a9fb5;\n background-color: #151515;\n font-weight: bold;\n }\n\n .highlight .k,\n .highlight .kn,\n .highlight .kp,\n .highlight .kr,\n .highlight .kv {\n color: #aa759f;\n }\n\n .highlight .kc {\n color: #d28445;\n }\n\n .highlight .kt {\n color: #d28445;\n }\n\n .highlight .kd {\n color: #d28445;\n }\n\n .highlight .s,\n .highlight .sb,\n .highlight .sc,\n .highlight .dl,\n .highlight .sd,\n .highlight .s2,\n .highlight .sh,\n .highlight .sx,\n .highlight .s1 {\n color: #90a959;\n }\n\n .highlight .sa {\n color: #aa759f;\n }\n\n .highlight .sr {\n color: #75b5aa;\n }\n\n .highlight .si {\n color: #b76d45;\n }\n\n .highlight .se {\n color: #b76d45;\n }\n\n .highlight .nn {\n color: #f4bf75;\n }\n\n .highlight .nc {\n color: #f4bf75;\n }\n\n .highlight .no {\n color: #f4bf75;\n }\n\n .highlight .na {\n color: #6a9fb5;\n }\n\n .highlight .m,\n .highlight .mb,\n .highlight .mf,\n .highlight .mh,\n .highlight .mi,\n .highlight .il,\n .highlight .mo,\n .highlight .mx {\n color: #90a959;\n }\n\n .highlight .ss {\n color: #90a959;\n }\n}\n","/* The common styles */\n\nhtml {\n @media (prefers-color-scheme: light) {\n &:not([data-mode]),\n &[data-mode='light'] {\n @include light-scheme;\n }\n\n &[data-mode='dark'] {\n @include dark-scheme;\n }\n }\n\n @media (prefers-color-scheme: dark) {\n &:not([data-mode]),\n &[data-mode='dark'] {\n @include dark-scheme;\n }\n\n &[data-mode='light'] {\n @include light-scheme;\n }\n }\n\n font-size: 16px;\n}\n\nbody {\n background: var(--main-bg);\n padding: env(safe-area-inset-top) env(safe-area-inset-right)\n env(safe-area-inset-bottom) env(safe-area-inset-left);\n color: var(--text-color);\n -webkit-font-smoothing: antialiased;\n font-family: $font-family-base;\n}\n\n/* --- Typography --- */\n\n@for $i from 1 through 5 {\n h#{$i} {\n @extend %heading;\n\n @if $i > 1 {\n @extend %section;\n @extend %anchor;\n }\n\n @if $i < 5 {\n $factor: 0.18rem;\n\n @if $i == 1 {\n $factor: 0.23rem;\n }\n\n font-size: 1rem + (5 - $i) * $factor;\n } @else {\n font-size: 1rem;\n }\n }\n}\n\na {\n @extend %link-color;\n\n text-decoration: none;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n transition: all 0.35s ease-in-out;\n\n .blur & {\n $blur: 20px;\n\n -webkit-filter: blur($blur);\n filter: blur($blur);\n }\n}\n\nblockquote {\n border-left: 5px solid var(--blockquote-border-color);\n padding-left: 1rem;\n color: var(--blockquote-text-color);\n\n > p:last-child {\n margin-bottom: 0;\n }\n\n &[class^='prompt-'] {\n border-left: 0;\n position: relative;\n padding: 1rem 1rem 1rem 3rem;\n color: var(--prompt-text-color);\n\n @extend %rounded;\n\n &::before {\n text-align: center;\n width: 3rem;\n position: absolute;\n left: 0.25rem;\n margin-top: 0.4rem;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n }\n }\n\n @include prompt('tip', '\\f0eb', 'regular');\n @include prompt('info', '\\f06a');\n @include prompt('warning', '\\f06a');\n @include prompt('danger', '\\f071');\n}\n\nkbd {\n font-family: inherit;\n display: inline-block;\n vertical-align: middle;\n line-height: 1.3rem;\n min-width: 1.75rem;\n text-align: center;\n margin: 0 0.3rem;\n padding-top: 0.1rem;\n color: var(--kbd-text-color);\n background-color: var(--kbd-bg-color);\n border-radius: 0.25rem;\n border: solid 1px var(--kbd-wrap-color);\n box-shadow: inset 0 -2px 0 var(--kbd-wrap-color);\n}\n\nhr {\n border-color: var(--main-border-color);\n opacity: 1;\n}\n\nfooter {\n background-color: var(--main-bg);\n height: $footer-height;\n border-top: 1px solid var(--main-border-color);\n display: flex;\n\n @extend %text-xs;\n\n a {\n @extend %text-highlight;\n\n &:hover {\n @extend %link-hover;\n }\n }\n\n em {\n @extend %text-highlight;\n }\n\n p {\n text-align: center;\n margin-bottom: 0;\n }\n}\n\n/* fontawesome icons */\ni {\n &.far,\n &.fas {\n @extend %no-cursor;\n }\n}\n\n/* --- Panels --- */\n\n.access {\n top: 2rem;\n transition: top 0.2s ease-in-out;\n margin-top: 3rem;\n margin-bottom: 4rem;\n\n &:only-child {\n position: -webkit-sticky;\n position: sticky;\n }\n\n > section {\n padding-left: 1rem;\n border-left: 1px solid var(--main-border-color);\n\n &:not(:last-child) {\n margin-bottom: 4rem;\n }\n }\n\n .content {\n font-size: 0.9rem;\n }\n}\n\n#panel-wrapper {\n /* the headings */\n .panel-heading {\n font-family: inherit;\n line-height: inherit;\n\n @include label(inherit);\n }\n\n .post-tag {\n line-height: 1.05rem;\n font-size: 0.85rem;\n border-radius: 0.8rem;\n padding: 0.3rem 0.5rem;\n margin: 0 0.35rem 0.5rem 0;\n\n &:hover {\n transition: all 0.3s ease-in;\n }\n }\n}\n\n#access-lastmod {\n a {\n &:hover {\n @extend %link-hover;\n }\n\n @extend %no-bottom-border;\n\n color: inherit;\n }\n}\n\n.footnotes > ol {\n padding-left: 2rem;\n margin-top: 0.5rem;\n\n > li {\n &:not(:last-child) {\n margin-bottom: 0.3rem;\n }\n\n @extend %sup-fn-target;\n\n > p {\n margin-left: 0.25em;\n margin-top: 0;\n margin-bottom: 0;\n }\n }\n}\n\n.footnote {\n @at-root a#{&} {\n @include ml-mr(1px);\n @include pl-pr(2px);\n\n border-bottom-style: none !important;\n }\n}\n\nsup {\n @extend %sup-fn-target;\n}\n\n.reversefootnote {\n @at-root a#{&} {\n font-size: 0.6rem;\n line-height: 1;\n position: relative;\n bottom: 0.25em;\n margin-left: 0.25em;\n border-bottom-style: none !important;\n }\n}\n\n/* --- Begin of Markdown table style --- */\n\n/* it will be created by Liquid */\n.table-wrapper {\n overflow-x: auto;\n margin-bottom: 1.5rem;\n\n > table {\n min-width: 100%;\n overflow-x: auto;\n border-spacing: 0;\n\n thead {\n border-bottom: solid 2px rgba(210, 215, 217, 0.75);\n\n th {\n @extend %table-cell;\n }\n }\n\n tbody {\n tr {\n border-bottom: 1px solid var(--tb-border-color);\n\n &:nth-child(2n) {\n background-color: var(--tb-even-bg);\n }\n\n &:nth-child(2n + 1) {\n background-color: var(--tb-odd-bg);\n }\n\n td {\n @extend %table-cell;\n }\n }\n } /* tbody */\n } /* table */\n}\n\n/* --- post --- */\n\n// .preview-img {\n// aspect-ratio: 40 / 21;\n// width: 100%;\n// height: 100%;\n// overflow: hidden;\n\n// @extend %rounded;\n\n// &:not(.no-bg) {\n// background: var(--img-bg);\n// }\n\n// img {\n// height: 100%;\n// -o-object-fit: cover;\n// object-fit: cover;\n\n// @extend %rounded;\n\n// @at-root #post-list & {\n// width: 100%;\n// }\n// }\n// }\n\n.post-preview {\n @extend %rounded;\n\n border: 0;\n background: var(--card-bg);\n box-shadow: var(--card-shadow);\n\n &::before {\n @extend %rounded;\n\n content: '';\n width: 100%;\n height: 100%;\n position: absolute;\n background-color: var(--card-hovor-bg);\n opacity: 0;\n transition: opacity 0.35s ease-in-out;\n }\n\n &:hover {\n &::before {\n opacity: 0.3;\n }\n }\n}\n\nmain {\n line-height: 1.75;\n\n h1 {\n margin-top: 2rem;\n margin-bottom: 1.5rem;\n }\n\n p {\n > a.popup {\n &:not(.normal):not(.left):not(.right) {\n @include align-center;\n }\n }\n }\n\n .categories,\n #tags,\n #archives {\n a:not(:hover) {\n @extend %no-bottom-border;\n }\n }\n}\n\n.post-meta {\n @extend %text-sm;\n\n a {\n &:not([class]):hover {\n @extend %link-hover;\n }\n }\n\n em {\n @extend %normal-font-style;\n }\n}\n\n.content {\n font-size: 1.08rem;\n margin-top: 2rem;\n overflow-wrap: break-word;\n\n a {\n &.popup {\n @extend %no-cursor;\n @extend %img-caption;\n @include mt-mb(0.5rem);\n\n cursor: zoom-in;\n }\n\n &:not(.img-link) {\n @extend %link-underline;\n\n &:hover {\n @extend %link-hover;\n }\n }\n }\n\n ol,\n ul {\n &:not([class]),\n &.task-list {\n -webkit-padding-start: 1.75rem;\n padding-inline-start: 1.75rem;\n\n li {\n margin: 0.25rem 0;\n padding-left: 0.25rem;\n }\n\n ol,\n ul {\n -webkit-padding-start: 1.25rem;\n padding-inline-start: 1.25rem;\n margin: 0.5rem 0;\n }\n }\n }\n\n ul.task-list {\n -webkit-padding-start: 1.25rem;\n padding-inline-start: 1.25rem;\n\n li {\n list-style-type: none;\n padding-left: 0;\n\n /* checkbox icon */\n > i {\n width: 2rem;\n margin-left: -1.25rem;\n color: var(--checkbox-color);\n\n &.checked {\n color: var(--checkbox-checked-color);\n }\n }\n\n ul {\n -webkit-padding-start: 1.75rem;\n padding-inline-start: 1.75rem;\n }\n }\n\n input[type='checkbox'] {\n margin: 0 0.5rem 0.2rem -1.3rem;\n vertical-align: middle;\n }\n } /* ul */\n\n dl > dd {\n margin-left: 1rem;\n }\n\n ::marker {\n color: var(--text-muted-color);\n }\n} /* .content */\n\n.tag:hover {\n @extend %tag-hover;\n}\n\n.post-tag {\n display: inline-block;\n min-width: 2rem;\n text-align: center;\n border-radius: 0.5rem;\n border: 1px solid var(--btn-border-color);\n padding: 0 0.4rem;\n color: var(--text-muted-color);\n line-height: 1.3rem;\n\n &:not(:last-child) {\n margin-right: 0.2rem;\n }\n}\n\n.rounded-10 {\n border-radius: 10px !important;\n}\n\n.img-link {\n color: transparent;\n display: inline-flex;\n}\n\n.shimmer {\n width: 80%;\n margin-left: auto;\n margin-right: auto;\n}\n\n// .shimmer {\n// overflow: hidden;\n// position: relative;\n// background: var(--img-bg);\n\n// &::before {\n// content: '';\n// position: absolute;\n// background: var(--shimmer-bg);\n// height: 100%;\n// width: 100%;\n// -webkit-animation: shimmer 1.3s infinite;\n// animation: shimmer 1.3s infinite;\n// }\n\n// @-webkit-keyframes shimmer {\n// 0% {\n// transform: translateX(-100%);\n// }\n\n// 100% {\n// transform: translateX(100%);\n// }\n// }\n\n// @keyframes shimmer {\n// 0% {\n// transform: translateX(-100%);\n// }\n\n// 100% {\n// transform: translateX(100%);\n// }\n// }\n// }\n\n.embed-video {\n width: 100%;\n height: 100%;\n margin-bottom: 1rem;\n aspect-ratio: 16 / 9;\n\n @extend %rounded;\n\n &.twitch {\n aspect-ratio: 310 / 189;\n }\n\n &.file {\n display: block;\n width: auto;\n height: auto;\n max-width: 100%;\n max-height: 100%;\n margin: auto;\n margin-bottom: 0;\n }\n\n @extend %img-caption;\n}\n\n/* --- buttons --- */\n.btn-lang {\n border: 1px solid !important;\n padding: 1px 3px;\n border-radius: 3px;\n color: var(--link-color);\n\n &:focus {\n box-shadow: none;\n }\n}\n\n/* --- Effects classes --- */\n\n.loaded {\n display: block !important;\n\n @at-root .d-flex#{&} {\n display: flex !important;\n }\n}\n\n.unloaded {\n display: none !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.hidden {\n visibility: hidden !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.btn-box-shadow {\n box-shadow: var(--card-shadow);\n}\n\n/* overwrite bootstrap muted */\n.text-muted {\n color: var(--text-muted-color) !important;\n}\n\n/* Overwrite bootstrap tooltip */\n.tooltip-inner {\n font-size: 0.7rem;\n max-width: 220px;\n text-align: left;\n}\n\n/* Overwrite bootstrap outline button */\n.btn.btn-outline-primary {\n &:not(.disabled):hover {\n border-color: #007bff !important;\n }\n}\n\n.disabled {\n color: rgb(206, 196, 196);\n pointer-events: auto;\n cursor: not-allowed;\n}\n\n.hide-border-bottom {\n border-bottom: none !important;\n}\n\n.input-focus {\n box-shadow: none;\n border-color: var(--input-focus-border-color) !important;\n background: center !important;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n.left {\n float: left;\n margin: 0.75rem 1rem 1rem 0;\n}\n\n.right {\n float: right;\n margin: 0.75rem 0 1rem 1rem;\n}\n\n/* --- Overriding --- */\n\n/* magnific-popup */\n\nfigure .mfp-title {\n text-align: center;\n padding-right: 0;\n margin-top: 0.5rem;\n}\n\n.mfp-img {\n transition: none;\n}\n\n/* mermaid */\n.mermaid {\n text-align: center;\n}\n\n/* MathJax */\nmjx-container {\n overflow-y: hidden;\n min-width: auto !important;\n}\n\n/* --- sidebar layout --- */\n\n$sidebar-display: 'sidebar-display';\n$btn-border-width: 3px;\n$btn-mb: 0.5rem;\n\n#sidebar {\n @include pl-pr(0);\n\n position: fixed;\n top: 0;\n left: 0;\n height: 100%;\n overflow-y: auto;\n width: $sidebar-width;\n z-index: 99;\n background: var(--sidebar-bg);\n border-right: 1px solid var(--sidebar-border-color);\n\n /* Hide scrollbar for Chrome, Safari and Opera */\n &::-webkit-scrollbar {\n display: none;\n }\n\n /* Hide scrollbar for IE, Edge and Firefox */\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n\n %sidebar-link-hover {\n &:hover {\n color: var(--sidebar-active-color);\n }\n }\n\n a {\n @extend %sidebar-links;\n }\n\n #avatar {\n display: block;\n width: 14rem;\n height: 5rem;\n overflow: hidden;\n box-shadow: var(--avatar-border-color) 0 0 0 2px;\n transform: translateZ(0); /* fixed the zoom in Safari */\n background: #1e1e1e;\n img {\n margin-top: 25px;\n padding-left: 10px;\n padding-right: 10px;\n transition: transform 0.5s;\n\n &:hover {\n transform: scale(1.1);\n }\n }\n }\n\n .profile-wrapper {\n @include mt-mb(2.5rem);\n @extend %clickable-transition;\n\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n width: 100%;\n }\n\n .site-title {\n font-family: inherit;\n font-weight: 900;\n font-size: 1.75rem;\n line-height: 1.2;\n letter-spacing: 0.25px;\n margin-top: 1.25rem;\n margin-bottom: 0.5rem;\n margin-left: 1rem;\n\n a {\n @extend %clickable-transition;\n @extend %sidebar-link-hover;\n\n color: var(--site-title-color);\n }\n }\n\n .site-subtitle {\n font-size: 95%;\n color: var(--site-subtitle-color);\n margin-top: 0.25rem;\n word-spacing: 1px;\n text-align: center;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n ul {\n margin-bottom: 2rem;\n\n li.nav-item {\n width: 100%;\n padding-left: 1rem;\n padding-right: 1.5rem;\n\n a.nav-link {\n @include pt-pb(0.6rem);\n\n display: flex;\n align-items: center;\n border-radius: 0.75rem;\n font-weight: 600;\n\n &:hover {\n background-color: var(--sidebar-hover-bg);\n }\n\n i {\n font-size: 95%;\n margin-right: 1.5rem;\n }\n\n span {\n font-size: 90%;\n letter-spacing: 0.2px;\n }\n }\n .nav-link-sub {\n width: 168px;\n }\n\n &.active {\n .nav-link {\n color: var(--sidebar-active-color);\n background-color: var(--sidebar-hover-bg);\n\n span {\n opacity: 1;\n }\n }\n }\n\n &:not(:first-child) {\n margin-top: 0.25rem;\n }\n }\n }\n .ul-sublist {\n margin-bottom: 0rem;\n }\n\n .sidebar-bottom {\n padding-left: 2rem;\n padding-right: 6rem;\n margin-bottom: 1.5rem;\n\n $btn-size: 1.75rem;\n\n %button {\n width: $btn-size;\n height: $btn-size;\n margin-bottom: $btn-mb; // multi line gap\n border-radius: 50%;\n color: var(--sidebar-btn-color);\n background-color: var(--sidebar-btn-bg);\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: var(--sidebar-border-color) 0 0 0 1px;\n\n &:hover {\n background-color: var(--sidebar-hover-bg);\n }\n }\n\n a {\n @extend %button;\n @extend %sidebar-link-hover;\n @extend %clickable-transition;\n\n &:not(:last-child) {\n margin-right: $sb-btn-gap;\n }\n }\n\n i {\n line-height: $btn-size;\n }\n\n .mode-toggle {\n padding: 0;\n border: 0;\n\n @extend %button;\n @extend %sidebar-links;\n @extend %sidebar-link-hover;\n }\n\n .icon-border {\n @extend %no-cursor;\n @include ml-mr(calc(($sb-btn-gap - $btn-border-width) / 2));\n\n background-color: var(--sidebar-btn-color);\n content: '';\n width: $btn-border-width;\n height: $btn-border-width;\n border-radius: 50%;\n margin-bottom: $btn-mb;\n }\n } /* .sidebar-bottom */\n} /* #sidebar */\n\n@media (hover: hover) {\n #sidebar ul > li:last-child::after {\n transition: top 0.5s ease;\n }\n\n .nav-link {\n transition: background-color 0.3s ease-in-out;\n }\n\n .post-preview {\n transition: background-color 0.35s ease-in-out;\n }\n}\n\n#search-result-wrapper {\n display: none;\n height: 100%;\n width: 100%;\n overflow: auto;\n\n .content {\n margin-top: 2rem;\n }\n}\n\n/* --- top-bar --- */\n\n#topbar-wrapper {\n height: $topbar-height;\n background-color: var(--topbar-bg);\n}\n\n#topbar {\n button i {\n color: #999999;\n }\n\n #breadcrumb {\n font-size: 1rem;\n color: var(--text-muted-color);\n padding-left: 0.5rem;\n\n a:hover {\n @extend %link-hover;\n }\n\n span {\n &:not(:last-child) {\n &::after {\n content: '›';\n padding: 0 0.3rem;\n }\n }\n }\n }\n} /* #topbar */\n\n::-webkit-input-placeholder {\n @include placeholder;\n}\n\n::-moz-placeholder {\n @include placeholder;\n}\n\n:-ms-input-placeholder {\n @include placeholder;\n}\n\n::-ms-input-placeholder {\n @include placeholder;\n}\n\n::placeholder {\n @include placeholder;\n}\n\n:focus::-webkit-input-placeholder {\n @include placeholder-focus;\n}\n\n:focus::-moz-placeholder {\n @include placeholder-focus;\n}\n\n:focus:-ms-input-placeholder {\n @include placeholder-focus;\n}\n\n:focus::-ms-input-placeholder {\n @include placeholder-focus;\n}\n\n:focus::placeholder {\n @include placeholder-focus;\n}\n\nsearch {\n display: flex;\n width: 100%;\n border-radius: 1rem;\n border: 1px solid var(--search-border-color);\n background: var(--main-bg);\n padding: 0 0.5rem;\n\n i {\n z-index: 2;\n font-size: 0.9rem;\n color: var(--search-icon-color);\n }\n}\n\n#sidebar-trigger,\n#search-trigger {\n display: none;\n}\n\n/* 'Cancel' link */\n#search-cancel {\n color: var(--link-color);\n display: none;\n white-space: nowrap;\n\n @extend %cursor-pointer;\n}\n\n#search-input {\n background: center;\n border: 0;\n border-radius: 0;\n padding: 0.18rem 0.3rem;\n color: var(--text-color);\n height: auto;\n\n &:focus {\n box-shadow: none;\n }\n}\n\n#search-hints {\n padding: 0 1rem;\n\n h4 {\n margin-bottom: 1.5rem;\n }\n\n .post-tag {\n display: inline-block;\n line-height: 1rem;\n font-size: 1rem;\n background: var(--search-tag-bg);\n border: none;\n padding: 0.5rem;\n margin: 0 1.25rem 1rem 0;\n\n &::before {\n content: '#';\n color: var(--text-muted-color);\n padding-right: 0.2rem;\n }\n\n @extend %link-color;\n }\n}\n\n#search-results {\n padding-bottom: 3rem;\n\n a {\n &:hover {\n @extend %link-hover;\n }\n\n @extend %link-color;\n @extend %no-bottom-border;\n @extend %heading;\n\n font-size: 1.4rem;\n line-height: 2.5rem;\n }\n\n > article {\n width: 100%;\n\n &:not(:last-child) {\n margin-bottom: 1rem;\n }\n\n /* icons */\n i {\n color: #818182;\n margin-right: 0.15rem;\n font-size: 80%;\n }\n\n > p {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n }\n }\n} /* #search-results */\n\n#topbar-title {\n display: none;\n font-size: 1.1rem;\n font-weight: 600;\n font-family: sans-serif;\n color: var(--topbar-text-color);\n text-align: center;\n width: 70%;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: keep-all;\n white-space: nowrap;\n}\n\n#mask {\n display: none;\n position: fixed;\n inset: 0 0 0 0;\n height: 100%;\n width: 100%;\n z-index: 1;\n\n @at-root [#{$sidebar-display}] & {\n display: block !important;\n }\n}\n\n/* --- basic wrappers --- */\n\n#main-wrapper {\n position: relative;\n\n @include pl-pr(0);\n\n > .container {\n min-height: 100vh;\n }\n}\n\n#topbar-wrapper.row,\n#main-wrapper > .container > .row,\n#search-result-wrapper > .row {\n @include ml-mr(0);\n}\n\n#tail-wrapper {\n > :not(script) {\n margin-top: 3rem;\n }\n}\n\n/* --- button back-to-top --- */\n\n#back-to-top {\n display: none;\n z-index: 1;\n cursor: pointer;\n position: fixed;\n right: 1rem;\n bottom: calc($footer-height-large - $back2top-size / 2);\n background: var(--button-bg);\n color: var(--btn-backtotop-color);\n padding: 0;\n width: $back2top-size;\n height: $back2top-size;\n border-radius: 50%;\n border: 1px solid var(--btn-backtotop-border-color);\n transition: transform 0.2s ease-out;\n -webkit-transition: transform 0.2s ease-out;\n\n &:hover {\n transform: translate3d(0, -5px, 0);\n -webkit-transform: translate3d(0, -5px, 0);\n }\n\n i {\n line-height: $back2top-size;\n position: relative;\n bottom: 2px;\n }\n}\n\n#notification {\n @-webkit-keyframes popup {\n from {\n opacity: 0;\n bottom: 0;\n }\n }\n\n @keyframes popup {\n from {\n opacity: 0;\n bottom: 0;\n }\n }\n\n .toast-header {\n background: none;\n border-bottom: none;\n color: inherit;\n }\n\n .toast-body {\n font-family: Lato, sans-serif;\n line-height: 1.25rem;\n\n button {\n font-size: 90%;\n min-width: 4rem;\n }\n }\n\n &.toast {\n &.show {\n display: block;\n min-width: 20rem;\n border-radius: 0.5rem;\n -webkit-backdrop-filter: blur(10px);\n backdrop-filter: blur(10px);\n background-color: rgba(255, 255, 255, 0.5);\n color: #1b1b1eba;\n position: fixed;\n left: 50%;\n bottom: 20%;\n transform: translateX(-50%);\n -webkit-animation: popup 0.8s;\n animation: popup 0.8s;\n }\n }\n}\n\n/*\n Responsive Design:\n\n {sidebar, content, panel} >= 1200px screen width\n {sidebar, content} >= 850px screen width\n {content} <= 849px screen width\n\n*/\n\n@media all and (max-width: 576px) {\n main {\n .content {\n > blockquote[class^='prompt-'] {\n @include ml-mr(-1rem);\n\n border-radius: 0;\n max-width: none;\n }\n }\n }\n\n #avatar {\n width: 5rem;\n height: 5rem;\n }\n}\n\n@media all and (max-width: 768px) {\n %full-width {\n max-width: 100%;\n }\n\n #topbar {\n @extend %full-width;\n }\n\n #main-wrapper > .container {\n @extend %full-width;\n @include pl-pr(0);\n }\n}\n\n/* hide sidebar and panel */\n@media all and (max-width: 849px) {\n @mixin slide($append: null) {\n $basic: transform 0.4s ease;\n\n @if $append {\n transition: $basic, $append;\n } @else {\n transition: $basic;\n }\n }\n\n footer {\n @include slide;\n\n height: $footer-height-large;\n padding: 1.5rem 0;\n }\n\n .sidebarImg {\n position: relative !important;\n }\n\n [#{$sidebar-display}] {\n #sidebar {\n transform: translateX(0);\n }\n\n #main-wrapper {\n transform: translateX($sidebar-width);\n }\n\n #back-to-top {\n visibility: hidden;\n }\n }\n\n #sidebar {\n @include slide;\n\n transform: translateX(-$sidebar-width); /* hide */\n -webkit-transform: translateX(-$sidebar-width);\n }\n\n #main-wrapper {\n @include slide;\n }\n\n #topbar,\n #main-wrapper > .container {\n max-width: 100%;\n }\n\n #search-result-wrapper {\n width: 100%;\n }\n\n #breadcrumb,\n search {\n display: none;\n }\n\n #topbar-wrapper {\n @include slide(top 0.2s ease);\n\n left: 0;\n }\n\n main,\n #panel-wrapper {\n margin-top: 0;\n }\n\n #topbar-title,\n #sidebar-trigger,\n #search-trigger {\n display: block;\n }\n\n #search-result-wrapper .content {\n letter-spacing: 0;\n }\n\n #tags {\n justify-content: center !important;\n }\n\n h1.dynamic-title {\n display: none;\n\n ~ .content {\n margin-top: 2.5rem;\n }\n }\n\n .shimmer {\n width: 100%;\n }\n} /* max-width: 849px */\n\n/* Sidebar is visible */\n@media all and (min-width: 850px) {\n /* Solved jumping scrollbar */\n html {\n overflow-y: scroll;\n }\n\n #main-wrapper {\n margin-left: $sidebar-width;\n }\n\n #sidebar {\n .profile-wrapper {\n margin-top: 3rem;\n }\n }\n\n #search-hints {\n display: none;\n }\n\n search {\n max-width: $search-max-width;\n }\n\n #search-result-wrapper {\n max-width: $main-content-max-width;\n justify-content: start !important;\n }\n\n main {\n h1 {\n margin-top: 3rem;\n }\n }\n\n div.content .table-wrapper > table {\n min-width: 70%;\n }\n\n /* button 'back-to-Top' position */\n #back-to-top {\n right: 5%;\n bottom: calc($footer-height - $back2top-size / 2);\n }\n\n #topbar-title {\n text-align: left;\n }\n}\n\n@media all and (max-width: 991px) {\n .threats {\n overflow-y: visible !important;\n height: auto !important;\n margin-left: 0px !important;\n }\n footer {\n display: block !important;\n }\n}\n/* Pad horizontal */\n@media all and (min-width: 992px) and (max-width: 1199px) {\n #main-wrapper > .container .col-lg-11 {\n flex: 0 0 96%;\n max-width: 96%;\n }\n}\n\n/* Compact icons in sidebar & panel hidden */\n@media all and (min-width: 850px) and (max-width: 1199px) {\n #search-results > div {\n max-width: 700px;\n }\n\n #breadcrumb {\n width: 65%;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: keep-all;\n white-space: nowrap;\n }\n}\n\n/* panel hidden */\n@media all and (max-width: 1199px) {\n #panel-wrapper {\n display: none;\n }\n\n #main-wrapper > .container > div.row {\n justify-content: center !important;\n }\n}\n\n/* --- desktop mode, both sidebar and panel are visible --- */\n\n@media all and (min-width: 1200px) {\n search {\n margin-right: 4rem;\n }\n\n #search-input {\n transition: all 0.3s ease-in-out;\n }\n\n #search-results > article {\n width: 45%;\n\n &:nth-child(odd) {\n margin-right: 1.5rem;\n }\n\n &:nth-child(even) {\n margin-left: 1.5rem;\n }\n\n &:last-child:nth-child(odd) {\n position: relative;\n right: 24.3%;\n }\n }\n\n .content {\n font-size: 1.03rem;\n }\n}\n\n@media all and (min-width: 1400px) {\n #back-to-top {\n right: calc((100vw - $sidebar-width - 1140px) / 2 + 3rem);\n }\n}\n\n@media all and (min-width: 1550px) {\n $icon-gap: 1rem;\n\n #main-wrapper {\n margin-left: $sidebar-width-large;\n }\n\n #topbar-wrapper {\n left: $sidebar-width-large;\n }\n\n search {\n margin-right: calc(\n $main-content-max-width / 4 - $search-max-width - 0.75rem\n );\n }\n\n #main-wrapper > .container {\n max-width: $main-content-max-width - 450;\n padding-left: 1.75rem !important;\n padding-right: 1.75rem !important;\n }\n\n main.col-12,\n #tail-wrapper {\n padding-right: 4.5rem !important;\n }\n\n #back-to-top {\n right: calc(\n (100vw - $sidebar-width-large - $main-content-max-width) / 2 + 2rem\n );\n }\n} /* min-width: 1550px */\n\n@media all and (min-width: 1551px) {\n $icon-gap: 1rem;\n\n #main-wrapper {\n margin-left: $sidebar-width-large;\n }\n\n #topbar-wrapper {\n left: $sidebar-width-large;\n }\n\n search {\n margin-right: calc(\n $main-content-max-width / 4 - $search-max-width - 0.75rem\n );\n }\n\n #main-wrapper > .container {\n max-width: $main-content-max-width;\n padding-left: 1.75rem !important;\n padding-right: 1.75rem !important;\n }\n\n main.col-12,\n #tail-wrapper {\n padding-right: 4.5rem !important;\n }\n\n #back-to-top {\n right: calc(\n (100vw - $sidebar-width-large - $main-content-max-width) / 2 + 2rem\n );\n }\n} /* min-width: 1551px */","/*\n * The syntax light mode typography colors\n */\n\n@mixin light-scheme {\n /* Framework color */\n --main-bg: white;\n --mask-bg: #c1c3c5;\n --main-border-color: #f3f3f3;\n\n /* Common color */\n --text-color: #34343c;\n --text-muted-color: #757575;\n --text-muted-hightlight-color: inherit;\n --heading-color: #2a2a2a;\n --label-color: #585858;\n --blockquote-border-color: #eeeeee;\n --blockquote-text-color: #757575;\n --link-color: #0056b2;\n --link-underline-color: #dee2e6;\n --button-bg: #ffffff;\n --btn-border-color: #e9ecef;\n --btn-backtotop-color: #686868;\n --btn-backtotop-border-color: #f1f1f1;\n --btn-box-shadow: #eaeaea;\n --checkbox-color: #c5c5c5;\n --checkbox-checked-color: #07a8f7;\n --row-cell-color: rgb(223, 233, 241, 0.64);\n --img-bg: radial-gradient(\n circle,\n rgb(255, 255, 255) 0%,\n rgb(239, 239, 239) 100%\n );\n --shimmer-bg: linear-gradient(\n 90deg,\n rgba(250, 250, 250, 0) 0%,\n rgba(232, 230, 230, 1) 50%,\n rgba(250, 250, 250, 0) 100%\n );\n\n /* Sidebar */\n --site-title-color: rgb(113, 113, 113);\n --site-subtitle-color: #717171;\n --sidebar-bg: #f6f8fa;\n --sidebar-border-color: #efefef;\n --sidebar-muted-color: #545454;\n --sidebar-active-color: #1d1d1d;\n --sidebar-hover-bg: rgb(223, 233, 241, 0.64);\n --sidebar-btn-bg: white;\n --sidebar-btn-color: #8e8e8e;\n --avatar-border-color: white;\n\n /* Topbar */\n --topbar-bg: rgb(255, 255, 255, 0.7);\n --topbar-text-color: rgb(78, 78, 78);\n --search-border-color: rgb(240, 240, 240);\n --search-icon-color: #c2c6cc;\n --input-focus-border-color: #b8b8b8;\n\n /* Home page */\n --post-list-text-color: dimgray;\n --btn-patinator-text-color: #555555;\n --btn-paginator-hover-color: var(--sidebar-bg);\n\n /* Posts */\n --toc-highlight: #0550ae;\n --btn-share-color: gray;\n --btn-share-hover-color: #0d6efd;\n --card-bg: white;\n --card-hovor-bg: #e2e2e2;\n --card-shadow: rgb(104, 104, 104, 0.05) 0 2px 6px 0,\n rgba(211, 209, 209, 0.15) 0 0 0 1px;\n --footnote-target-bg: lightcyan;\n --tb-odd-bg: #fbfcfd;\n --tb-border-color: #eaeaea;\n --dash-color: silver;\n --kbd-wrap-color: #bdbdbd;\n --kbd-text-color: var(--text-color);\n --kbd-bg-color: white;\n --prompt-text-color: rgb(46, 46, 46, 0.77);\n --prompt-tip-bg: rgb(123, 247, 144, 0.2);\n --prompt-tip-icon-color: #03b303;\n --prompt-info-bg: #e1f5fe;\n --prompt-info-icon-color: #0070cb;\n --prompt-warning-bg: rgb(255, 243, 205);\n --prompt-warning-icon-color: #ef9c03;\n --prompt-danger-bg: rgb(248, 215, 218, 0.56);\n --prompt-danger-icon-color: #df3c30;\n\n /* Tags */\n --tag-border: #dee2e6;\n --tag-shadow: var(--btn-border-color);\n --tag-hover: rgb(222, 226, 230);\n --search-tag-bg: #f8f9fa;\n\n [class^='prompt-'] {\n --link-underline-color: rgb(219, 216, 216);\n }\n\n .dark {\n display: none;\n }\n\n /* Categories */\n --categories-border: rgba(0, 0, 0, 0.125);\n --categories-hover-bg: var(--btn-border-color);\n --categories-icon-hover-color: darkslategray;\n\n /* Archive */\n --timeline-color: rgba(0, 0, 0, 0.075);\n --timeline-node-bg: #c2c6cc;\n --timeline-year-dot-color: #ffffff;\n} /* light-scheme */\n","/*\n * The main dark mode styles\n */\n\n@mixin dark-scheme {\n /* Framework color */\n --main-bg: rgb(27, 27, 30);\n --mask-bg: rgb(68, 69, 70);\n --main-border-color: rgb(44, 45, 45);\n\n /* Common color */\n --text-color: rgb(175, 176, 177);\n --text-muted-color: #868686;\n --text-muted-hightlight-color: #aeaeae;\n --heading-color: #cccccc;\n --label-color: #a7a7a7;\n --blockquote-border-color: rgb(66, 66, 66);\n --blockquote-text-color: #868686;\n --link-color: rgb(138, 180, 248);\n --link-underline-color: rgb(82, 108, 150);\n --button-bg: #1e1e1e;\n --btn-border-color: #2e2f31;\n --btn-backtotop-color: var(--text-color);\n --btn-backtotop-border-color: #212122;\n --btn-box-shadow: var(--main-bg);\n --card-header-bg: #292929;\n --checkbox-color: rgb(118, 120, 121);\n --checkbox-checked-color: var(--link-color);\n --row-cell-color:#262626;\n --img-bg: radial-gradient(circle, rgb(22, 22, 24) 0%, rgb(32, 32, 32) 100%);\n --shimmer-bg: linear-gradient(\n 90deg,\n rgba(255, 255, 255, 0) 0%,\n rgba(58, 55, 55, 0.4) 50%,\n rgba(255, 255, 255, 0) 100%\n );\n\n /* Sidebar */\n --site-title-color: #717070;\n --site-subtitle-color: #868686;\n --sidebar-bg: #1e1e1e;\n --sidebar-border-color: #292929;\n --sidebar-muted-color: #868686;\n --sidebar-active-color: rgb(255, 255, 255, 0.95);\n --sidebar-hover-bg: #262626;\n --sidebar-btn-bg: #232328;\n --sidebar-btn-color: #787878;\n --avatar-border-color: rgb(206, 206, 206, 0.9);\n\n /* Topbar */\n --topbar-bg: rgb(27, 27, 30, 0.64);\n --topbar-text-color: var(--text-color);\n --search-border-color: rgb(55, 55, 55);\n --search-icon-color: rgb(100, 102, 105);\n --input-focus-border-color: rgb(112, 114, 115);\n\n /* Home page */\n --post-list-text-color: rgb(175, 176, 177);\n --btn-patinator-text-color: var(--text-color);\n --btn-paginator-hover-color: #2e2e2e;\n\n /* Posts */\n --toc-highlight: rgb(116, 178, 243);\n --tag-hover: rgb(43, 56, 62);\n --tb-odd-bg: #252526; /* odd rows of the posts' table */\n --tb-even-bg: rgb(31, 31, 34); /* even rows of the posts' table */\n --tb-border-color: var(--tb-odd-bg);\n --footnote-target-bg: rgb(63, 81, 181);\n --btn-share-color: #6c757d;\n --btn-share-hover-color: #bfc1ca;\n --card-bg: #1e1e1e;\n --card-hovor-bg: #464d51;\n --card-shadow: rgb(21, 21, 21, 0.72) 0 6px 18px 0,\n rgb(137, 135, 135, 0.24) 0 0 0 1px;\n --kbd-wrap-color: #6a6a6a;\n --kbd-text-color: #d3d3d3;\n --kbd-bg-color: #242424;\n --prompt-text-color: rgb(216, 212, 212, 0.75);\n --prompt-tip-bg: rgb(22, 60, 36, 0.64);\n --prompt-tip-icon-color: rgb(15, 164, 15, 0.81);\n --prompt-info-bg: rgb(7, 59, 104, 0.8);\n --prompt-info-icon-color: #0075d1;\n --prompt-warning-bg: rgb(90, 69, 3, 0.88);\n --prompt-warning-icon-color: rgb(255, 165, 0, 0.8);\n --prompt-danger-bg: rgb(86, 28, 8, 0.8);\n --prompt-danger-icon-color: #cd0202;\n\n /* tags */\n --tag-border: rgb(59, 79, 88);\n --tag-shadow: rgb(32, 33, 33);\n --dash-color: rgb(63, 65, 68);\n --search-tag-bg: #292828;\n\n /* categories */\n --categories-border: rgb(64, 66, 69, 0.5);\n --categories-hover-bg: rgb(73, 75, 76);\n --categories-icon-hover-color: white;\n\n /* archives */\n --timeline-node-bg: rgb(150, 152, 156);\n --timeline-color: rgb(63, 65, 68);\n --timeline-year-dot-color: var(--timeline-color);\n\n .light {\n display: none;\n }\n\n /* categories */\n .categories.card,\n .list-group-item {\n background-color: var(--card-bg);\n }\n\n .categories {\n .card-header {\n background-color: var(--card-header-bg);\n }\n\n .list-group-item {\n border-left: none;\n border-right: none;\n padding-left: 2rem;\n border-color: var(--categories-border);\n\n &:last-child {\n border-bottom-color: var(--card-bg);\n }\n }\n }\n\n #archives li:nth-child(odd) {\n background-image: linear-gradient(\n to left,\n rgb(26, 26, 30),\n rgb(39, 39, 45),\n rgb(39, 39, 45),\n rgb(39, 39, 45),\n rgb(26, 26, 30)\n );\n }\n\n color-scheme: dark;\n\n /* stylelint-disable-next-line selector-id-pattern */\n #disqus_thread {\n color-scheme: none;\n }\n} /* dark-scheme */\n","/*\n Style for Homepage\n*/\n\n#post-list {\n margin-top: 2rem;\n\n .card-wrapper {\n &:hover {\n text-decoration: none;\n }\n\n &:not(:last-child) {\n margin-bottom: 1.25rem;\n }\n }\n\n .card {\n border: 0;\n background: none;\n\n %img-radius {\n border-radius: $base-radius $base-radius 0 0;\n }\n\n .preview-img {\n @extend %img-radius;\n\n img {\n @extend %img-radius;\n }\n }\n\n .card-body {\n height: 100%;\n padding: 1rem;\n\n .card-title {\n @extend %text-clip;\n\n color: var(--heading-color) !important;\n font-size: 1.25rem;\n }\n\n %muted {\n color: var(--text-muted-color) !important;\n }\n\n .card-text.content {\n @extend %muted;\n\n p {\n @extend %text-clip;\n\n line-height: 1.5;\n margin: 0;\n }\n }\n\n .post-meta {\n @extend %muted;\n\n i {\n &:not(:first-child) {\n margin-left: 1.5rem;\n }\n }\n\n em {\n @extend %normal-font-style;\n\n color: inherit;\n }\n\n > div:first-child {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n }\n }\n} /* #post-list */\n\n.pagination {\n color: var(--text-color);\n font-family: Lato, sans-serif;\n justify-content: space-evenly;\n\n a:hover {\n text-decoration: none;\n }\n\n .page-item {\n .page-link {\n color: var(--btn-patinator-text-color);\n padding: 0 0.6rem;\n display: -webkit-box;\n -webkit-box-pack: center;\n -webkit-box-align: center;\n border-radius: 0.5rem;\n border: 0;\n background-color: inherit;\n }\n\n &.active {\n .page-link {\n background-color: var(--btn-paginator-hover-color);\n }\n }\n\n &:not(.active) {\n .page-link {\n &:hover {\n box-shadow: inset var(--btn-border-color) 0 0 0 1px;\n }\n }\n }\n\n &.disabled {\n cursor: not-allowed;\n\n .page-link {\n color: rgba(108, 117, 125, 0.57);\n }\n }\n } /* .page-item */\n} /* .pagination */\n\n/* Tablet */\n@media all and (min-width: 768px) {\n %img-radius {\n border-radius: 0 $base-radius $base-radius 0;\n }\n\n #post-list {\n .card {\n .card-body {\n padding: 1.75rem 1.75rem 1.25rem 1.75rem;\n\n .card-text {\n display: inherit !important;\n }\n\n .post-meta {\n i {\n &:not(:first-child) {\n margin-left: 1.75rem;\n }\n }\n }\n }\n }\n }\n}\n\n/* Hide SideBar and TOC */\n@media all and (max-width: 830px) {\n .pagination {\n .page-item {\n &:not(:first-child):not(:last-child) {\n display: none;\n }\n }\n }\n}\n\n/* Sidebar is visible */\n@media all and (min-width: 831px) {\n #post-list {\n margin-top: 2.5rem;\n }\n\n .pagination {\n font-size: 0.85rem;\n justify-content: center;\n\n .page-item {\n &:not(:last-child) {\n margin-right: 0.7rem;\n }\n }\n\n .page-index {\n display: none;\n }\n } /* .pagination */\n}\n","/*\n Post-specific style\n*/\n\n%btn-post-nav {\n width: 50%;\n position: relative;\n border-color: var(--btn-border-color);\n}\n\n@mixin dot($pl: 0.25rem, $pr: 0.25rem) {\n content: '\\2022';\n padding-left: $pl;\n padding-right: $pr;\n}\n\nheader {\n .post-desc {\n @extend %heading;\n\n font-size: 1.125rem;\n line-height: 1.6;\n }\n\n .post-meta {\n span + span::before {\n @include dot;\n }\n\n em,\n time {\n @extend %text-highlight;\n }\n\n em {\n a {\n color: inherit;\n }\n }\n }\n}\n\n.post-tail-wrapper {\n @extend %text-sm;\n\n margin-top: 6rem;\n border-bottom: 1px double var(--main-border-color);\n\n .license-wrapper {\n line-height: 1.2rem;\n\n > a {\n @extend %text-highlight;\n\n &:hover {\n @extend %link-hover;\n }\n }\n\n span:last-child {\n @extend %text-sm;\n }\n } /* .license-wrapper */\n\n .post-meta a:not(:hover) {\n @extend %link-underline;\n }\n\n .share-wrapper {\n vertical-align: middle;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n %icon-size {\n font-size: 1.125rem;\n }\n\n .share-icons {\n display: flex;\n\n i {\n color: var(--btn-share-color);\n\n @extend %icon-size;\n }\n\n > * {\n @extend %icon-size;\n\n margin-left: 0.5rem;\n\n &:hover {\n i {\n @extend %btn-share-hovor;\n }\n }\n }\n\n button {\n padding: 0;\n border: none;\n line-height: inherit;\n\n @extend %cursor-pointer;\n }\n } /* .share-icons */\n } /* .share-wrapper */\n}\n\n.share-mastodon {\n /* See: https://github.com/justinribeiro/share-to-mastodon#properties */\n --wc-stm-font-family: $font-family-base;\n --wc-stm-dialog-background-color: var(--card-bg);\n --wc-stm-form-button-border: 1px solid var(--btn-border-color);\n --wc-stm-form-submit-background-color: var(--sidebar-btn-bg);\n --wc-stm-form-cancel-background-color: var(--sidebar-btn-bg);\n --wc-stm-form-button-background-color-hover: #007bff;\n --wc-stm-form-button-color-hover: white;\n\n font-size: 1rem;\n}\n\n.post-tags {\n line-height: 2rem;\n\n .post-tag {\n &:hover {\n @extend %link-hover;\n @extend %tag-hover;\n @extend %no-bottom-border;\n }\n }\n}\n\n.post-navigation {\n .btn {\n @extend %btn-post-nav;\n\n &:not(:hover) {\n color: var(--link-color);\n }\n\n &:hover {\n &:not(.disabled)::before {\n color: whitesmoke;\n }\n }\n\n &.disabled {\n @extend %btn-post-nav;\n\n pointer-events: auto;\n cursor: not-allowed;\n background: none;\n color: gray;\n }\n\n &.btn-outline-primary.disabled:focus {\n box-shadow: none;\n }\n\n &::before {\n color: var(--text-muted-color);\n font-size: 0.65rem;\n text-transform: uppercase;\n content: attr(aria-label);\n }\n\n &:first-child {\n border-radius: $base-radius 0 0 $base-radius;\n left: 0.5px;\n }\n\n &:last-child {\n border-radius: 0 $base-radius $base-radius 0;\n right: 0.5px;\n }\n }\n\n p {\n font-size: 1.1rem;\n line-height: 1.5rem;\n margin-top: 0.3rem;\n white-space: normal;\n }\n} /* .post-navigation */\n\n@media (hover: hover) {\n .post-navigation {\n .btn,\n .btn::before {\n transition: all 0.35s ease-in-out;\n }\n }\n}\n\n@-webkit-keyframes fade-up {\n from {\n opacity: 0;\n position: relative;\n top: 2rem;\n }\n\n to {\n opacity: 1;\n position: relative;\n top: 0;\n }\n}\n\n@keyframes fade-up {\n from {\n opacity: 0;\n position: relative;\n top: 2rem;\n }\n\n to {\n opacity: 1;\n position: relative;\n top: 0;\n }\n}\n\n#toc-wrapper {\n border-left: 1px solid rgba(158, 158, 158, 0.17);\n position: -webkit-sticky;\n position: sticky;\n top: 4rem;\n transition: top 0.2s ease-in-out;\n -webkit-animation: fade-up 0.8s;\n animation: fade-up 0.8s;\n\n ul {\n list-style: none;\n font-size: 0.85rem;\n line-height: 1.25;\n padding-left: 0;\n\n li {\n &:not(:last-child) {\n margin: 0.4rem 0;\n }\n\n a {\n padding: 0.2rem 0 0.2rem 1.25rem;\n }\n }\n\n /* Overwrite TOC plugin style */\n\n .toc-link {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:hover {\n color: var(--toc-highlight);\n text-decoration: none;\n }\n\n &::before {\n display: none;\n }\n }\n\n .is-active-link {\n color: var(--toc-highlight) !important;\n font-weight: 600;\n\n &::before {\n display: inline-block;\n width: 1px;\n left: -1px;\n height: 1.25rem;\n background-color: var(--toc-highlight) !important;\n }\n }\n\n ul {\n padding-left: 0.75rem;\n }\n }\n}\n\n/* --- Related Posts --- */\n\n#related-posts {\n > h3 {\n @include label(1.1rem, 600);\n }\n\n time {\n @extend %normal-font-style;\n @extend %text-xs;\n\n color: var(--text-muted-color);\n }\n\n p {\n font-size: 0.9rem;\n margin-bottom: 0.5rem;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n }\n\n .card {\n h4 {\n @extend %text-clip;\n }\n }\n}\n\n/* stylelint-disable-next-line selector-id-pattern */\n#disqus_thread {\n min-height: 8.5rem;\n}\n\n.utterances {\n max-width: 100%;\n}\n\n%btn-share-hovor {\n color: var(--btn-share-hover-color) !important;\n}\n\n.share-label {\n @include label(inherit, 400, inherit);\n\n &::after {\n content: ':';\n }\n}\n\n@media all and (max-width: 576px) {\n .post-tail-bottom {\n flex-wrap: wrap-reverse !important;\n\n > div:first-child {\n width: 100%;\n margin-top: 1rem;\n }\n }\n}\n\n@media all and (max-width: 768px) {\n .content > p > img {\n max-width: calc(100% + 1rem);\n }\n}\n\n/* Hide SideBar and TOC */\n@media all and (max-width: 849px) {\n .post-navigation {\n padding-left: 0;\n padding-right: 0;\n margin-left: -0.5rem;\n margin-right: -0.5rem;\n }\n}\n","@import \"main\";\n/*\n Style for Archives\n*/\n\n// css for properties page mapper\n.threats {\n margin-left: 27px;\n display: inline-block;\n position: sticky;\n top: 0;\n overflow-y: scroll;\n height: 100vh;\n}\n\n.devprops {\n display: inline-block;\n}\n\n.labelCheckbox {\n margin-left: 10px;\n}\n\n.outerCheckbox {\n display: flex;\n}\n\n.threatsHeader {\n display: flex;\n}\n\n.downloadCSV {\n margin-top: 2.5rem;\n margin-left: 20px;\n height: min-content;\n}\n\n.btn-home {\n margin-right: 15px;\n margin-bottom: 5px;\n}\n\n.threatLinks {\n ins {\n text-decoration: none !important;\n }\n}\n\n// css for properties page table\n.propertiesTable {\n border: 1px solid;\n td:nth-child(even) {\n background-color: var(--row-cell-color);\n }\n td {\n border: 1px solid;\n border-collapse: collapse;\n text-align: center;\n }\n .rowTIDPropTable {\n border: 0px;\n border-right: 1px solid;\n border-bottom: 1px solid;\n width: 5%;\n }\n .rowDescPropTable {\n border: 0px;\n border-bottom: 1px solid;\n width: 30%;\n }\n .categoryName {\n position: sticky;\n top: 0;\n background: var(--main-bg);\n padding: 5px;\n }\n}\n\ntr:last-child > td {\n border-bottom: 0px !important;\n}\n\n// css for threats page table\n.threatType {\n text-align: center;\n word-wrap: break-word;\n position: sticky;\n top: 0;\n background: var(--main-bg);\n padding: 5px;\n}\n\n.threatEnteries {\n border-right: 1px solid;\n border-left: 1px solid;\n .threatContent {\n border-bottom: 1px solid;\n border-top: 1px solid;\n padding: 5px;\n text-align: center;\n word-wrap: break-word;\n &:nth-child(odd) {\n background-color: var(--row-cell-color);\n }\n }\n}\n// css for mitigations on threat pages\n.mitigationsTableOnThreat {\n border: 1px solid;\n td {\n border: 1px solid;\n border-collapse: collapse;\n padding: 10px;\n width: 20rem;\n }\n .mitigationTableoOnThreatRow {\n text-align: center;\n }\n}\n\n// css for sidebar\n.dropdown-btn {\n text-decoration: none;\n color: var(--sidebar-muted-color);\n display: block;\n border: none;\n background: none;\n text-align: left;\n}\n\n.dropdown-list {\n display: none;\n padding-left: 35px;\n}\n\n.row-dropdown {\n display: flex;\n --bs-gutter-x: 4.2rem;\n display: flex;\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.1);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col-dropdown {\n width: 110%;\n margin: auto;\n}\n\ni.fa-fw.fas.fa-circle-arrow-down {\n padding-right: 25px;\n padding-left: 10px;\n padding-top: 10px;\n padding-bottom: 10px;\n border-radius: 0.75rem;\n &:hover {\n background-color: var(--sidebar-hover-bg);\n }\n}\n\ni.fa-fw.fas.fa-circle-arrow-up {\n display: none;\n padding-right: 25px;\n padding-left: 10px;\n padding-top: 10px;\n padding-bottom: 10px;\n border-radius: 0.75rem;\n &:hover {\n background-color: var(--sidebar-hover-bg);\n }\n}\n\n.sidebarImg {\n position: sticky;\n top: 0;\n background: var(--sidebar-bg);\n}\n"],"file":"jekyll-theme-chirpy.css"} \ No newline at end of file diff --git a/assets/deviceprops.json b/assets/deviceprops.json deleted file mode 100644 index 90063f9..0000000 --- a/assets/deviceprops.json +++ /dev/null @@ -1,1078 +0,0 @@ -{ - "categories": [ - { - "id": "hardware", - "name": "Hardware", - "mainprops": [ - { - "id": "PID-11", - "text": "Device includes a microprocessor", - "subprops": [] - }, - { - "id": "PID-12", - "text": "Device includes Memory/Storage (external to CPU)", - "subprops": [ - { - "id": "PID-121", - "text": "Device includes buses for external memory/storage" - }, - { - "id": "PID-122", - "text": "Device includes discrete chips/devices that have access to the same physical memory" - }, - { - "id": "PID-123", - "text": "Device includes ROM, VRAM, or removable Storage" - }, - { - "id": "PID-124", - "text": "Device includes Random Access Memory (RAM) chips" - }, - { - "id": "PID-1241", - "text": "Device includes DDR DRAM" - } - ] - }, - { - "id": "PID-13", - "text": "Device includes peripheral chips and integrated data buses", - "subprops": [] - }, - { - "id": "PID-14", - "text": "Device includes external peripheral interconnects (e.g., USB, Serial)", - "subprops": [] - }, - { - "id": "PID-15", - "text": "Device includes a hardware access port (e.g., UART, JTAG)", - "subprops": [] - } - ] - }, - { - "id": "system", - "name": "System Software", - "mainprops": [ - { - "id": "PID-21", - "text": "Device includes a bootloader", - "subprops": [] - }, - { - "id": "PID-22", - "text": "Device includes a debugging capabilities", - "subprops": [] - }, - { - "id": "PID-23", - "text": "Device includes OS/kernel", - "subprops": [ - { - "id": "PID-231", - "text": "Device includes an operating system that uses drivers/modules that can be loaded" - }, - { - "id": "PID-232", - "text": "Device includes separate users/processes with access to different OS data or functions" - }, - { - "id": "PID-2321", - "text": "Device lacks an access enforcement/privilege mechanism" - }, - { - "id": "PID-2322", - "text": "Device deploys an access enforcement/privilege mechanism" - }, - { - "id": "PID-23221", - "text": "Device includes and enforces OS user accounts" - }, - { - "id": "PID-23222", - "text": "Device includes a memory management model, including protections of memory access (read-only/, executable, writable)" - } - ] - }, - { - "id": "PID-24", - "text": "Device includes virtualization and containers", - "subprops": [ - { - "id": "PID-241", - "text": "Device includes containers" - }, - { - "id": "PID-242", - "text": "Device includes hypervisor" - } - ] - }, - { - "id": "PID-25", - "text": "Device includes software/hardware root of trust", - "subprops": [ - { - "id": "PID-251", - "text": "Root of Trust is physically accessible or is not immutable" - }, - { - "id": "PID-252", - "text": "Root of Trust is immutable" - } - ] - }, - { - "id": "PID-26", - "text": "Device lacks firmware/software update support", - "subprops": [] - }, - { - "id": "PID-27", - "text": "Device includes support for firmware/software updates", - "subprops": [ - { - "id": "PID-271", - "text": "Device has firmware or software that is not cryptographically checked for integrity validation" - }, - { - "id": "PID-272", - "text": "Device includes cryptographic firmware/software integrity protection mechanisms" - }, - { - "id": "PID-2721", - "text": "Device includes a shared key for firmware integrity validation" - }, - { - "id": "PID-2722", - "text": "Device includes digitally signed firmware (with private key)" - }, - { - "id": "PID-273", - "text": "Device has unencrypted firmware updates" - }, - { - "id": "PID-274", - "text": "Device includes user firmware/software version selection during updates" - }, - { - "id": "PID-275", - "text": "Device includes remotely-initiated firmware/software updates" - } - ] - } - ] - }, - { - "id": "application", - "name": "Application Software", - "mainprops": [ - { - "id": "PID-31", - "text": "Application-level software is present and running on the device", - "subprops": [ - { - "id": "PID-311", - "text": "Device includes the usage of a web/HTTP applications" - }, - { - "id": "PID-312", - "text": "Device includes programming languages and libraries" - }, - { - "id": "PID-3121", - "text": "Device includes support for object oriented programming languages(e.g., Java, Python, PHP, C++)" - }, - { - "id": "PID-3122", - "text": "Device includes support for manual memory management programming languages (e.g. C, C++)" - } - ] - }, - { - "id": "PID-32", - "text": "Device includes the ability to deploy custom or external programs (e.g., ladder logic, compiled binaries)", - "subprops": [ - { - "id": "PID-321", - "text": "Device includes ability to deploy custom programs from engineering software or IDE" - }, - { - "id": "PID-322", - "text": "Device includes a program runtime environment for custom or external programs" - }, - { - "id": "PID-323", - "text": "Device includes support for program executable formats" - }, - { - "id": "PID-3231", - "text": "Device includes ability to run custom/external programs as native binary without a confined/restricted environment" - }, - { - "id": "PID-3232", - "text": "Device includes ability to run custom/external programs/processes through an execution sandboxed environment" - }, - { - "id": "PID-324", - "text": "Device includes support for \"program uploads\" to retrieve programs from the device from an engineering workstation" - } - ] - }, - { - "id": "PID-33", - "text": "Device includes interactive services (e.g., Telnet, SSH)", - "subprops": [ - { - "id": "PID-331", - "text": "Device includes unauthenticated services" - }, - { - "id": "PID-332", - "text": "Device includes authenticated services" - }, - { - "id": "PID-3321", - "text": "Device includes passwords to authenticate the users" - }, - { - "id": "PID-3322", - "text": "Device includes cryptographic mechanism to authenticate users and sessions" - } - ] - } - ] - }, - { - "id": "networking", - "name": "Networking", - "mainprops": [ - { - "id": "PID-41", - "text": "Device exposes remote network services", - "subprops": [ - { - "id": "PID-411", - "text": "Device exposes remote services with the ability to send, receive, view or modify sensitive information or configurations" - }, - { - "id": "PID-4111", - "text": "Device lacks protocol support for message authentication" - }, - { - "id": "PID-4112", - "text": "Device lacks protocol support for message encryption" - }, - { - "id": "PID-4113", - "text": "Device includes cryptographic functions for sensitive data, such as encryption or authentication" - } - ] - }, - { - "id": "PID-42", - "text": "Device includes procedure to forward or route network messages", - "subprops": [] - } - ] - } - ], - "deviceprops": [ - { - "id": "PID-11", - "text": "Device includes a microprocessor", - "category": "Hardware", - "threats": [ - { - "id": "TID-101", - "threatShort": "Power Consumption Analysis Side Channel" - }, - { - "id": "TID-102", - "threatShort": "Electromagnetic Analysis Side Channel" - }, - { - "id": "TID-103", - "threatShort": "Cache Timing Analysis Side Channel" - }, - { - "id": "TID-105", - "threatShort": "Hardware Fault Injection – Control Flow Modification" - } - ], - "subProps": [] - }, - { - "id": "PID-12", - "text": "Device includes Memory/Storage (external to CPU)", - "category": "Hardware", - "threats": [], - "subProps": ["PID-121", "PID-122", "PID-123", "PID-124"] - }, - { - "id": "PID-121", - "text": "Device includes buses for external memory/storage", - "category": "Hardware", - "threats": [ - { - "id": "TID-106", - "threatShort": "Data Bus Interception" - } - ], - "subProps": [] - }, - { - "id": "PID-122", - "text": "Device includes discrete chips/devices that have access to the same physical memory", - "category": "Hardware", - "threats": [ - { - "id": "TID-107", - "threatShort": "Unauthorized Direct Memory Access (DMA)" - } - ], - "subProps": [] - }, - { - "id": "PID-123", - "text": "Device includes ROM, VRAM, or removable Storage", - "category": "Hardware", - "threats": [ - { - "id": "TID-108", - "threatShort": "ROM/NVRAM Data Extraction or Modification" - } - ], - "subProps": [] - }, - { - "id": "PID-124", - "text": "Device includes Random Access Memory (RAM) chips", - "category": "Hardware", - "threats": [ - { - "id": "TID-109", - "threatShort": "RAM Chip Contents Readout" - } - ], - "subProps": ["PID-1241"] - }, - { - "id": "PID-1241", - "text": "Device includes DDR DRAM", - "category": "Hardware", - "threats": [ - { - "id": "TID-110", - "threatShort": "Hardware Fault Injection – Data Manipulation" - } - ], - "subProps": [] - }, - { - "id": "PID-13", - "text": "Device includes peripheral chips and integrated data buses", - "category": "Hardware", - "threats": [ - { - "id": "TID-113", - "threatShort": "Unverified Peripheral Firmware Loaded" - }, - { - "id": "TID-114", - "threatShort": "Peripheral Data Bus Interception" - } - ], - "subProps": [] - }, - { - "id": "PID-14", - "text": "Device includes external peripheral interconnects (e.g., USB, Serial)", - "category": "Hardware", - "threats": [ - { - "id": "TID-111", - "threatShort": "Untrusted External Storage" - }, - { - "id": "TID-118", - "threatShort": "Weak Peripheral Port Electrical Damage Protection" - } - ], - "subProps": [] - }, - { - "id": "PID-15", - "text": "Device includes a hardware access port (e.g., UART, JTAG)", - "category": "Hardware", - "threats": [ - { - "id": "TID-115", - "threatShort": "Firmware/Data Extraction via Hardware Interface" - }, - { - "id": "TID-116", - "threatShort": "Latent Privileged Access Port" - }, - { - "id": "TID-119", - "threatShort": "Latent Hardware Debug Port Allows Memory/Code Manipulation" - } - ], - "subProps": [] - }, - { - "id": "PID-21", - "text": "Device includes a bootloader", - "category": "System Software", - "threats": [ - { - "id": "TID-201", - "threatShort": "Inadequate Bootloader Protection and Verification" - } - ], - "subProps": [] - }, - { - "id": "PID-22", - "text": "Device includes a debugging capabilities", - "category": "System Software", - "threats": [ - { - "id": "TID-224", - "threatShort": "Excessive Access via Software Diagnostic Features" - } - ], - "subProps": [] - }, - { - "id": "PID-23", - "text": "Device includes OS/kernel", - "category": "System Software", - "threats": [ - { - "id": "TID-202", - "threatShort": "Exploitable System Network Stack Component" - }, - { - "id": "TID-218", - "threatShort": "Operating System Susceptible to Rootkit" - } - ], - "subProps": ["PID-231", "PID-232"] - }, - { - "id": "PID-231", - "text": "Device includes an operating system that uses drivers/modules that can be loaded", - "category": "System Software", - "threats": [ - { - "id": "TID-203", - "threatShort": "Malicious OS Kernel Driver/Module Installable" - } - ], - "subProps": [] - }, - { - "id": "PID-232", - "text": "Device includes separate users/processes with access to different OS data or functions", - "category": "System Software", - "threats": [], - "subProps": ["PID-2321", "PID-2322"] - }, - { - "id": "PID-2321", - "text": "Device lacks an access enforcement/privilege mechanism", - "category": "System Software", - "threats": [ - { - "id": "TID-204", - "threatShort": "Untrusted Programs Can Access Privileged OS Functions" - } - ], - "subProps": [] - }, - { - "id": "PID-2322", - "text": "Device deploys an access enforcement/privilege mechanism", - "category": "System Software", - "threats": [], - "subProps": ["PID-23221", "PID-23222"] - }, - { - "id": "PID-23221", - "text": "Device includes and enforces OS user accounts", - "category": "System Software", - "threats": [ - { - "id": "TID-205", - "threatShort": "Existing OS Tools Maliciously Used for Device Manipulation" - }, - { - "id": "TID-219", - "threatShort": "OS/Kernel Privilege Escalation" - } - ], - "subProps": [] - }, - { - "id": "PID-23222", - "text": "Device includes a memory management model, including protections of memory access (read-only/, executable, writable)", - "category": "System Software", - "threats": [ - { - "id": "TID-206", - "threatShort": "Memory Management Protections Subverted" - }, - { - "id": "TID-223", - "threatShort": "System Susceptible to RAM Scraping" - } - ], - "subProps": [] - }, - { - "id": "PID-24", - "text": "Device includes virtualization and containers", - "category": "System Software", - "threats": [], - "subProps": ["PID-241", "PID-242"] - }, - { - "id": "PID-241", - "text": "Device includes containers", - "category": "System Software", - "threats": [ - { - "id": "TID-207", - "threatShort": "Container Escape" - } - ], - "subProps": [] - }, - { - "id": "PID-242", - "text": "Device includes hypervisor", - "category": "System Software", - "threats": [ - { - "id": "TID-208", - "threatShort": "Virtual Machine Escape" - }, - { - "id": "TID-209", - "threatShort": "Host Can Manipulate Guest Virtual Machines" - } - ], - "subProps": [] - }, - { - "id": "PID-25", - "text": "Device includes software/hardware root of trust", - "category": "System Software", - "threats": [], - "subProps": ["PID-251", "PID-252"] - }, - { - "id": "PID-251", - "text": "Root of Trust is physically accessible or is not immutable", - "category": "System Software", - "threats": [ - { - "id": "TID-214", - "threatShort": "Secrets Extracted from Device Root of Trust" - } - ], - "subProps": [] - }, - { - "id": "PID-252", - "text": "Root of Trust is immutable", - "category": "System Software", - "threats": [ - { - "id": "TID-220", - "threatShort": "Unpatchable Hardware Root of Trust" - } - ], - "subProps": [] - }, - { - "id": "PID-26", - "text": "Device lacks firmware/software update support", - "category": "System Software", - "threats": [ - { - "id": "TID-210", - "threatShort": "Device Vulnerabilities Unpatchable" - } - ], - "subProps": [] - }, - { - "id": "PID-27", - "text": "Device includes support for firmware/software updates", - "category": "System Software", - "threats": [], - "subProps": ["PID-271", "PID-272", "PID-273", "PID-274", "PID-275"] - }, - { - "id": "PID-271", - "text": "Device has firmware or software that is not cryptographically checked for integrity validation", - "category": "System Software", - "threats": [ - { - "id": "TID-211", - "threatShort": "Device Allows Unauthenticated Firmware Installation" - } - ], - "subProps": [] - }, - { - "id": "PID-272", - "text": "Device includes cryptographic firmware/software integrity protection mechanisms", - "category": "System Software", - "threats": [ - { - "id": "TID-330", - "threatShort": "Cryptographic Timing Side-Channel" - }, - { - "id": "TID-214", - "threatShort": "Secrets Extracted from Device Root of Trust" - } - ], - "subProps": ["PID-2721", "PID-2722"] - }, - { - "id": "PID-2721", - "text": "Device includes a shared key for firmware integrity validation", - "category": "System Software", - "threats": [ - { - "id": "TID-212", - "threatShort": "FW/SW Update Integrity Shared Secrets Extraction" - } - ], - "subProps": [] - }, - { - "id": "PID-2722", - "text": "Device includes digitally signed firmware (with private key)", - "category": "System Software", - "threats": [ - { - "id": "TID-213", - "threatShort": "Faulty FW/SW Update Integrity Verification" - } - ], - "subProps": [] - }, - { - "id": "PID-273", - "text": "Device has unencrypted firmware updates", - "category": "System Software", - "threats": [ - { - "id": "TID-215", - "threatShort": "Unencrypted SW/FW Updates" - } - ], - "subProps": [] - }, - { - "id": "PID-274", - "text": "Device includes user firmware/software version selection during updates", - "category": "System Software", - "threats": [ - { - "id": "TID-216", - "threatShort": "Firmware Update Rollbacks Allowed" - } - ], - "subProps": [] - }, - { - "id": "PID-275", - "text": "Device includes remotely-initiated firmware/software updates", - "category": "System Software", - "threats": [ - { - "id": "TID-217", - "threatShort": "Remotely Initiated Updates Can Cause DoS" - } - ], - "subProps": [] - }, - { - "id": "PID-31", - "text": "Application-level software is present and running on the device", - "category": "Application Software", - "threats": [ - { - "id": "TID-301", - "threatShort": "Applications Binaries Modified" - } - ], - "subProps": ["PID-311", "PID-312"] - }, - { - "id": "PID-311", - "text": "Device includes the usage of a web/HTTP applications", - "category": "Application Software", - "threats": [ - { - "id": "TID-319", - "threatShort": "Cross Site Scripting (XSS)" - }, - { - "id": "TID-320", - "threatShort": "SQL Injection" - }, - { - "id": "TID-321", - "threatShort": "HTTP Application Session Hijacking" - }, - { - "id": "TID-322", - "threatShort": "Cross Site Request Forgery (CSRF)" - }, - { - "id": "TID-323", - "threatShort": "HTTP Path Traversal" - }, - { - "id": "TID-324", - "threatShort": "HTTP Direct Object Reference" - }, - { - "id": "TID-325", - "threatShort": "HTTP Injection/Response Splitting" - } - ], - "subProps": [] - }, - { - "id": "PID-312", - "text": "Device includes programming languages and libraries", - "category": "Application Software", - "threats": [], - "subProps": ["PID-3121", "PID-3122"] - }, - { - "id": "PID-3121", - "text": "Device includes support for object oriented programming languages(e.g., Java, Python, PHP, C++)", - "category": "Application Software", - "threats": [ - { - "id": "TID-326", - "threatShort": "Insecure Deserialization" - } - ], - "subProps": [] - }, - { - "id": "PID-3122", - "text": "Device includes support for manual memory management programming languages (e.g. C, C++)", - "category": "Application Software", - "threats": [ - { - "id": "TID-327", - "threatShort": "Out of Bounds Memory Access" - } - ], - "subProps": [] - }, - { - "id": "PID-32", - "text": "Device includes the ability to deploy custom or external programs (e.g., ladder logic, compiled binaries)", - "category": "Application Software", - "threats": [ - { - "id": "TID-302", - "threatShort": "Install Untrusted Application" - } - ], - "subProps": ["PID-321", "PID-322", "PID-323", "PID-324"] - }, - { - "id": "PID-321", - "text": "Device includes ability to deploy custom programs from engineering software or IDE", - "category": "Application Software", - "threats": [ - { - "id": "TID-303", - "threatShort": "Excessive Trust in Offboard Management/IDE Software" - } - ], - "subProps": [] - }, - { - "id": "PID-322", - "text": "Device includes a program runtime environment for custom or external programs", - "category": "Application Software", - "threats": [ - { - "id": "TID-304", - "threatShort": "Manipulate Runtime Environment" - } - ], - "subProps": [] - }, - { - "id": "PID-323", - "text": "Device includes support for program executable formats", - "category": "Application Software", - "threats": [], - "subProps": ["PID-3231", "PID-3232"] - }, - { - "id": "PID-3231", - "text": "Device includes ability to run custom/external programs as native binary without a confined/restricted environment", - "category": "Application Software", - "threats": [ - { - "id": "TID-305", - "threatShort": "Program Executes Dangerous System Calls" - } - ], - "subProps": [] - }, - { - "id": "PID-3232", - "text": "Device includes ability to run custom/external programs/processes through an execution sandboxed environment", - "category": "Application Software", - "threats": [ - { - "id": "TID-306", - "threatShort": "Sandboxed Environments Escaped" - } - ], - "subProps": [] - }, - { - "id": "PID-324", - "text": "Device includes support for \"program uploads\" to retrieve programs from the device from an engineering workstation", - "category": "Application Software", - "threats": [ - { - "id": "TID-307", - "threatShort": "Device Code Representations Inconsistent" - }, - { - "id": "TID-308", - "threatShort": "Code Overwritten to Avoid Detection" - }, - { - "id": "TID-309", - "threatShort": "Device Exploits Engineering Workstation" - } - ], - "subProps": [] - }, - { - "id": "PID-33", - "text": "Device includes interactive services (e.g., Telnet, SSH)", - "category": "Application Software", - "threats": [], - "subProps": ["PID-331", "PID-332"] - }, - { - "id": "PID-331", - "text": "Device includes unauthenticated services", - "category": "Application Software", - "threats": [ - { - "id": "TID-310", - "threatShort": "Remotely Accessible Unauthenticated Services" - } - ], - "subProps": [] - }, - { - "id": "PID-332", - "text": "Device includes authenticated services", - "category": "Application Software", - "threats": [ - { - "id": "TID-328", - "threatShort": "Hardcoded Credentials" - }, - { - "id": "TID-311", - "threatShort": "Default Credentials" - }, - { - "id": "TID-312", - "threatShort": "Credential Change Mechanism Can Be Abused" - }, - { - "id": "TID-313", - "threatShort": "Unauthenticated Session Changes Credential" - } - ], - "subProps": ["PID-3321", "PID-3322"] - }, - { - "id": "PID-3321", - "text": "Device includes passwords to authenticate the users", - "category": "Application Software", - "threats": [ - { - "id": "TID-314", - "threatShort": "Passwords Can Be Guessed Using Brute-Force Attempts" - }, - { - "id": "TID-329", - "threatShort": "Improper Password Storage" - }, - { - "id": "TID-315", - "threatShort": "Password Retrieval Mechanism Abused" - } - ], - "subProps": [] - }, - { - "id": "PID-3322", - "text": "Device includes cryptographic mechanism to authenticate users and sessions", - "category": "Application Software", - "threats": [ - { - "id": "TID-316", - "threatShort": "Incorrect Certificate Verification Allows Authentication Bypass" - }, - { - "id": "TID-317", - "threatShort": "Predictable Cryptographic Key" - }, - { - "id": "TID-411", - "threatShort": "Weak/Insecure Cryptographic Protocol" - }, - { - "id": "TID-330", - "threatShort": "Cryptographic Timing Side-Channel" - }, - { - "id": "TID-318", - "threatShort": "Insecure Cryptographic Implementation" - } - ], - "subProps": [] - }, - { - "id": "PID-41", - "text": "Device exposes remote network services", - "category": "Networking", - "threats": [ - { - "id": "TID-401", - "threatShort": "Undocumented Protocol Features" - }, - { - "id": "TID-310", - "threatShort": "Remotely Accessible Unauthenticated Services" - }, - { - "id": "TID-222", - "threatShort": "Critical System Service May Be Disabled" - }, - { - "id": "TID-404", - "threatShort": "Remotely Triggerable Deadlock/DoS" - }, - { - "id": "TID-405", - "threatShort": "Network Stack Resource Exhaustion" - }, - { - "id": "TID-407", - "threatShort": "Missing Message Replay Protection" - } - ], - "subProps": ["PID-411"] - }, - { - "id": "PID-411", - "text": "Device exposes remote services with the ability to send, receive, view or modify sensitive information or configurations", - "category": "Networking", - "threats": [], - "subProps": ["PID-4111", "PID-4112", "PID-4113"] - }, - { - "id": "PID-4111", - "text": "Device lacks protocol support for message authentication", - "category": "Networking", - "threats": [ - { - "id": "TID-406", - "threatShort": "Unauthorized Messages or Connections" - } - ], - "subProps": [] - }, - { - "id": "PID-4112", - "text": "Device lacks protocol support for message encryption", - "category": "Networking", - "threats": [ - { - "id": "TID-408", - "threatShort": "Unencrypted Sensitive Data Communication" - } - ], - "subProps": [] - }, - { - "id": "PID-4113", - "text": "Device includes cryptographic functions for sensitive data, such as encryption or authentication", - "category": "Networking", - "threats": [ - { - "id": "TID-318", - "threatShort": "Insecure Cryptographic Implementation" - }, - { - "id": "TID-221", - "threatShort": "Authentication Bypass By Message Replay" - }, - { - "id": "TID-410", - "threatShort": "Cryptographic Protocol Side Channel" - }, - { - "id": "TID-316", - "threatShort": "Incorrect Certificate Verification Allows Authentication Bypass" - }, - { - "id": "TID-317", - "threatShort": "Predictable Cryptographic Key" - }, - { - "id": "TID-330", - "threatShort": "Cryptographic Timing Side-Channel" - }, - { - "id": "TID-411", - "threatShort": "Weak/Insecure Cryptographic Protocol" - } - ], - "subProps": [] - }, - { - "id": "PID-42", - "category": "Networking", - "text": "Device includes procedure to forward or route network messages", - "threats": [ - { - "id": "TID-412", - "threatShort": "Network Routing Capability Abuse" - } - ], - "subProps": [] - } - ] -} diff --git a/assets/js/data/search.json b/assets/js/data/search.json index ba924a5..fe4d16e 100644 --- a/assets/js/data/search.json +++ b/assets/js/data/search.json @@ -1 +1 @@ -[ { "title": "Home", "url": "https://emb3d.mitre.org", "categories": "", "tags": "", "date": "", "snippet": " MITRE EMB3D™ MITRE EMB3D™ A knowledge base of cyber threats to embedded devices HOME BACKGROUND ...", "content": " MITRE EMB3D™ MITRE EMB3D™ A knowledge base of cyber threats to embedded devices HOME BACKGROUND GETTING STARTED PROPERTIES LIST PROPERTIES MAPPER THREATS HARDWARE TID-101 TID-102 TID-103 TID-105 TID-106 TID-107 TID-108 TID-109 TID-110 TID-111 TID-113 TID-114 TID-115 TID-116 TID-118 TID-119 SYSTEM SOFTWARE TID-201 TID-202 TID-203 TID-204 TID-205 TID-206 TID-207 TID-208 TID-209 TID-210 TID-211 TID-212 TID-213 TID-214 TID-215 TID-216 TID-217 TID-218 TID-219 TID-220 TID-221 TID-222 TID-223 TID-224 APPLICATION SOFTWARE TID-301 TID-302 TID-303 TID-304 TID-305 TID-306 TID-307 TID-308 TID-309 TID-310 TID-311 TID-312 TID-313 TID-314 TID-315 TID-316 TID-317 TID-318 TID-319 TID-320 TID-321 TID-322 TID-323 TID-324 TID-325 TID-326 TID-327 TID-328 TID-329 TID-330 NETWORKING TID-401 TID-404 TID-405 TID-406 TID-407 TID-408 TID-410 TID-411 TID-412 ABOUT Home MITRE EMB3D™ Cancel The MITRE EMB3D™ Threat Model The EMB3D Threat Model provides a cultivated knowledge base of cyber threats to embedded devices, providing a common understanding of these threats with security mechanisms to mitigate them. This initial release of EMB3D includes the Device Properties and Threats enumerations. The full set of Mitigations will be available in the Summer 2024 update.What is EMB3D™ EMB3D is a threat model for embedded devices found in industries such as critical infrastructure, Internet of Things, automotive, healthcare, manufacturing, and many more. The threat model is intended to be a resource to help vendors, asset owners/operators, test organizations, and security researchers to improve the overall security of embedded devices' hardware and software. This threat model aims to serve as a central repository of information, defining known threats to embedded devices and their unique device features/properties that enable specific threat actions. By mapping the threats to the associated device features/properties, the user can easily enumerate threat exposure based on the known device features. Device Properties Device properties describe a device's hardware and software components and capabilities of a device. These include physical hardware, network services and protocols, software, and firmware. Each category is further divided into sub-properties that are then mapped to a set of threats. By mapping properties, users can identify the threats associated with a given device property. Threats EMB3D threats identify how a threat actor can achieve a specific objective or effect on a system or device. Each threat description includes (i) information about the technical features that are targeted by the threat; (ii) the actions that must be performed by the threat actor to cause the threat's effect, including the impact or effect the threat will have on the device; and (iii) the vulnerabilities or weaknesses within that mechanism that enable the threat actions. Mitigations Mitigation strategies and techniques are described for each threat. These can be leveraged by device vendors to prevent and reduce the risk of a threat, and by end users to validate that devices are sufficiently protected against that threat. The mitigations define the mechanisms or technologies that protect against the threat while remaining flexible in how mitigations can be implemented within the device's unique constraints. EMB3D Users Device Vendors Support device threat models and provide guidelines for mitigations requirements/designs. Develop device roadmaps for evaluating device risk and prioritizing mitigation efforts. Asset Owners & Operators Inform acquisition requirements and decisions about unmitigated threats/risks. Support acquisition efforts related to evaluating a device's security capabilities. Guide the development and deployment of compensating controls around unmitigated threats. Security Researchers/Testers Scope assessment activities and outcomes. Help identify potential trouble spots for deeper investigation. Contribute to research efforts around novel threats and mitigations. More Information Background Getting Started Whitepaper Contact Us © 2023-2024 The MITRE Corporation. All Rights Reserved. Privacy Policy | MITRE MITRE is a registered trademark of The MITRE Corporation. Material on this site may be copied and distributed with permission only. Approved for public release; Distribution unlimited. Public release case number: 24-1429. Using the Chirpy theme for Jekyll. Cookie Preferences " }, { "title": "Background", "url": "/background/", "categories": "", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "EMB3D™ BackgroundThe EMB3D Threat Model provides a cultivated knowledge base of cyber threats to embedded devices, providing a common understanding of these threats with security mechanisms to miti...", "content": "EMB3D™ BackgroundThe EMB3D Threat Model provides a cultivated knowledge base of cyber threats to embedded devices, providing a common understanding of these threats with security mechanisms to mitigate them.Leveraging established models to strengthen embedded device security​​EMB3D aligns with and expands on several existing models like Common Weakness Enumeration, MITRE ATT&CK®, and Common Vulnerabilities and Exposures, specifically focusing on embedded devices. ​EMB3D provides a cultivated knowledge base of cyber threats to devices, including those observed in the field environment or demonstrated through proofs-of-concept and theoretic research. Mapping these threats to device properties helps users develop and tailor accurate threat models for specific embedded devices. For each threat, suggested mitigations are provided for technical mechanisms that device vendors should implement to mitigate the given threat by building security into the device. EMB3D is a comprehensive framework for the entire security ecosystem — device vendors, asset owners and operators, security researchers, and testing organizations.A framework for a dynamic threat landscapeEMB3D is a living framework that will be updated with new threats and mitigations as security researchers discover new vulnerabilities, threats, and security defenses. EMB3D is a public, community resource where all information is openly available, and the security community can submit additions and revisions.More InformationWhitepaper" }, { "title": "Getting Started", "url": "/getting-started/", "categories": "", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "Applying EMB3D™Step 1. Enumerate device properties and map to threats First, identify the set of Device Properties List that apply to the device being evaluated based on device knowl...", "content": "Applying EMB3D™Step 1. Enumerate device properties and map to threats First, identify the set of Device Properties List that apply to the device being evaluated based on device knowledge and documentation. While a vendor may be able to fully enumerate all properties, an asset operator or security researcher may need to review available documentation or perform initial device testing or decomposition to fully enumerate the relevant properties. Select the applicable properties in the Properties Mapper Tool to generate the list of Threats the device may be exposed to because it incorporates those properties and features. Properties to Threats MapperStep 2. Enumerate threats and evaluate their relevance/risk After identifying the device’s properties list and obtaining the candidate threat mapping, the next step is to review each potential threat to determine if it truly applies to the device and how much risk it poses. For additional details, follow the threat detail links output by the Mapper Tool or look up the associated Threat ID (TID) in the Threats catalog. Each threat description provides additional information about that threat, including its maturity level, documented threat evidence and CVEs, and associated weaknesses from the CWE database. This information helps to better understand the mechanics of the threat, its prerequisites, how it manifests on embedded devices, and how threat actors might utilize it, which can be used to better understand the risk of that threat to the device in question. Step 3. Identify required mitigations Equipped with a list of threats that pose a viable risk to the device, the next step is to determine if the device sufficiently defends against those threats. Coming in the next release of EMB3D in Summer 2024, each threat description will include a set of Foundational, Intermediate, and Leading mitigations. These mitigations will provide guidance on what technical mechanisms can best prevent or reduce the risk of that threat. Mitigations will include references to guidance documents and best practices, along with information about potential limitations and challenges when deploying each mitigation. The mitigation recommendations can then be used to make decisions and plans about the device. Device vendors may use the mitigations mapping to prioritize their security engineering efforts and choose technical security mechanisms that will be most effective against current and future threats. Asset owners and operators may use it to inform acquisitions, make judgements about the risks of devices deployed in their environments, or what additional environmental-level mitigations they wish to make to address residual risk. Finally, security researchers can use this information to organize and triage their efforts to determine which aspects of a device are worth deeper investigation. " }, { "title": "Properties List", "url": "/properties-list/", "categories": "", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": " EMB3D™ Device Properties Hardware Device ...", "content": " EMB3D™ Device Properties Hardware Device Properties Threats PID-11 Device includes a microprocessor TID-101 Power Consumption Analysis Side Channel TID-102 Electromagnetic Analysis Side Channel TID-103 Cache Timing Analysis Side Channel TID-105 Hardware Fault Injection – Control Flow Modification PID-121 Device includes buses for external memory/storage TID-106 Data Bus Interception PID-122 Device includes discrete chips/devices that have access to the same physical memory TID-107 Unauthorized Direct Memory Access (DMA) PID-123 Device includes ROM, VRAM, or removable Storage TID-108 ROM/NVRAM Data Extraction or Modification PID-124 Device includes Random Access Memory (RAM) chips TID-109 RAM Chip Contents Readout PID-1241 Device includes DDR DRAM TID-110 Hardware Fault Injection – Data Manipulation PID-13 Device includes peripheral chips and integrated data buses TID-113 Unverified Peripheral Firmware Loaded TID-114 Peripheral Data Bus Interception PID-14 Device includes external peripheral interconnects (e.g., USB, Serial) TID-111 Untrusted External Storage TID-118 Weak Peripheral Port Electrical Damage Protection PID-15 Device includes a hardware access port (e.g., UART, JTAG) TID-115 Firmware/Data Extraction via Hardware Interface TID-116 Latent Privileged Access Port TID-119 Latent Hardware Debug Port Allows Memory/Code Manipulation System Software Device Properties Threats PID-21 Device includes a bootloader TID-201 Inadequate Bootloader Protection and Verification PID-22 Device includes a debugging capabilities TID-224 Excessive Access via Software Diagnostic Features PID-23 Device includes OS/kernel TID-202 Exploitable System Network Stack Component TID-218 Operating System Susceptible to Rootkit PID-231 Device includes an operating system that uses drivers/modules that can be loaded TID-203 Malicious OS Kernel Driver/Module Installable PID-2321 Device lacks an access enforcement/privilege mechanism TID-204 Untrusted Programs Can Access Privileged OS Functions PID-23221 Device includes and enforces OS user accounts TID-205 Existing OS Tools Maliciously Used for Device Manipulation TID-219 OS/Kernel Privilege Escalation PID-23222 Device includes a memory management model, including protections of memory access (read-only/, executable, writable) TID-206 Memory Management Protections Subverted TID-223 System Susceptible to RAM Scraping PID-241 Device includes containers TID-207 Container Escape PID-242 Device includes hypervisor TID-208 Virtual Machine Escape TID-209 Host Can Manipulate Guest Virtual Machines PID-251 Root of Trust is physically accessible or is not immutable TID-214 Secrets Extracted from Device Root of Trust PID-252 Root of Trust is immutable TID-220 Unpatchable Hardware Root of Trust PID-26 Device lacks firmware/software update support TID-210 Device Vulnerabilities Unpatchable PID-271 Device has firmware or software that is not cryptographically checked for integrity validation TID-211 Device Allows Unauthenticated Firmware Installation PID-272 Device includes cryptographic firmware/software integrity protection mechanisms TID-330 Cryptographic Timing Side-Channel TID-214 Secrets Extracted from Device Root of Trust PID-2721 Device includes a shared key for firmware integrity validation TID-212 FW/SW Update Integrity Shared Secrets Extraction PID-2722 Device includes digitally signed firmware (with private key) TID-213 Faulty FW/SW Update Integrity Verification PID-273 Device has unencrypted firmware updates TID-215 Unencrypted SW/FW Updates PID-274 Device includes user firmware/software version selection during updates TID-216 Firmware Update Rollbacks Allowed PID-275 Device includes remotely-initiated firmware/software updates TID-217 Remotely Initiated Updates Can Cause DoS Application Software Device Properties Threats PID-31 Application-level software is present and running on the device TID-301 Applications Binaries Modified PID-311 Device includes the usage of a web/HTTP applications TID-319 Cross Site Scripting (XSS) TID-320 SQL Injection TID-321 HTTP Application Session Hijacking TID-322 Cross Site Request Forgery (CSRF) TID-323 HTTP Path Traversal TID-324 HTTP Direct Object Reference TID-325 HTTP Injection/Response Splitting PID-3121 Device includes support for object oriented programming languages(e.g., Java, Python, PHP, C++) TID-326 Insecure Deserialization PID-3122 Device includes support for manual memory management programming languages (e.g. C, C++) TID-327 Out of Bounds Memory Access PID-32 Device includes the ability to deploy custom or external programs (e.g., ladder logic, compiled binaries) TID-302 Install Untrusted Application PID-321 Device includes ability to deploy custom programs from engineering software or IDE TID-303 Excessive Trust in Offboard Management/IDE Software PID-322 Device includes a program runtime environment for custom or external programs TID-304 Manipulate Runtime Environment PID-3231 Device includes ability to run custom/external programs as native binary without a confined/restricted environment TID-305 Program Executes Dangerous System Calls PID-3232 Device includes ability to run custom/external programs/processes through an execution sandboxed environment TID-306 Sandboxed Environments Escaped PID-324 Device includes support for \"program uploads\" to retrieve programs from the device from an engineering workstation TID-307 Device Code Representations Inconsistent TID-308 Code Overwritten to Avoid Detection TID-309 Device Exploits Engineering Workstation PID-331 Device includes unauthenticated services TID-310 Remotely Accessible Unauthenticated Services PID-332 Device includes authenticated services TID-328 Hardcoded Credentials TID-311 Default Credentials TID-312 Credential Change Mechanism Can Be Abused TID-313 Unauthenticated Session Changes Credential PID-3321 Device includes passwords to authenticate the users TID-314 Passwords Can Be Guessed Using Brute-Force Attempts TID-329 Improper Password Storage TID-315 Password Retrieval Mechanism Abused PID-3322 Device includes cryptographic mechanism to authenticate users and sessions TID-316 Incorrect Certificate Verification Allows Authentication Bypass TID-317 Predictable Cryptographic Key TID-411 Weak/Insecure Cryptographic Protocol TID-330 Cryptographic Timing Side-Channel TID-318 Insecure Cryptographic Implementation Networking Device Properties Threats PID-41 Device exposes remote network services TID-401 Undocumented Protocol Features TID-310 Remotely Accessible Unauthenticated Services TID-222 Critical System Service May Be Disabled TID-404 Remotely Triggerable Deadlock/DoS TID-405 Network Stack Resource Exhaustion TID-407 Missing Message Replay Protection PID-4111 Device lacks protocol support for message authentication TID-406 Unauthorized Messages or Connections PID-4112 Device lacks protocol support for message encryption TID-408 Unencrypted Sensitive Data Communication PID-4113 Device includes cryptographic functions for sensitive data, such as encryption or authentication TID-318 Insecure Cryptographic Implementation TID-221 Authentication Bypass By Message Replay TID-410 Cryptographic Protocol Side Channel TID-316 Incorrect Certificate Verification Allows Authentication Bypass TID-317 Predictable Cryptographic Key TID-330 Cryptographic Timing Side-Channel TID-411 Weak/Insecure Cryptographic Protocol PID-42 Device includes procedure to forward or route network messages TID-412 Network Routing Capability Abuse " }, { "title": "Properties Mapper", "url": "/properties-mapper/", "categories": "", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": " EMB3D™ Properties to Threats Mapping The properties tool encodes the mapping from Device Properties to EMB3D Threats. Start by selecting the properties relevant to the device you ar...", "content": " EMB3D™ Properties to Threats Mapping The properties tool encodes the mapping from Device Properties to EMB3D Threats. Start by selecting the properties relevant to the device you are mapping from using the checkboxes in each of the four categories below. As you select properties, additional sub-properties may be uncovered, and the Applicable Threats list is populated with entries that may be relevant to your device. When finished, you may save a copy of the threats report by clicking the 'Download CSV' button. Properties List Device Properties: Hardware: PID-11 - Device includes a microprocessor PID-12 - Device includes Memory/Storage (external to CPU) PID-121 - Device includes buses for external memory/storage PID-122 - Device includes discrete chips/devices that have access to the same physical memory PID-123 - Device includes ROM, VRAM, or removable Storage PID-124 - Device includes Random Access Memory (RAM) chips PID-1241 - Device includes DDR DRAM PID-13 - Device includes peripheral chips and integrated data buses PID-14 - Device includes external peripheral interconnects (e.g., USB, Serial) PID-15 - Device includes a hardware access port (e.g., UART, JTAG) System Software: PID-21 - Device includes a bootloader PID-22 - Device includes a debugging capabilities PID-23 - Device includes OS/kernel PID-231 - Device includes an operating system that uses drivers/modules that can be loaded PID-232 - Device includes separate users/processes with access to different OS data or functions PID-2321 - Device lacks an access enforcement/privilege mechanism PID-2322 - Device deploys an access enforcement/privilege mechanism PID-23221 - Device includes and enforces OS user accounts PID-23222 - Device includes a memory management model, including protections of memory access (read-only/, executable, writable) PID-24 - Device includes virtualization and containers PID-241 - Device includes containers PID-242 - Device includes hypervisor PID-25 - Device includes software/hardware root of trust PID-251 - Root of Trust is physically accessible or is not immutable PID-252 - Root of Trust is immutable PID-26 - Device lacks firmware/software update support PID-27 - Device includes support for firmware/software updates PID-271 - Device has firmware or software that is not cryptographically checked for integrity validation PID-272 - Device includes cryptographic firmware/software integrity protection mechanisms PID-2721 - Device includes a shared key for firmware integrity validation PID-2722 - Device includes digitally signed firmware (with private key) PID-273 - Device has unencrypted firmware updates PID-274 - Device includes user firmware/software version selection during updates PID-275 - Device includes remotely-initiated firmware/software updates Application Software: PID-31 - Application-level software is present and running on the device PID-311 - Device includes the usage of a web/HTTP applications PID-312 - Device includes programming languages and libraries PID-3121 - Device includes support for object oriented programming languages(e.g., Java, Python, PHP, C++) PID-3122 - Device includes support for manual memory management programming languages (e.g. C, C++) PID-32 - Device includes the ability to deploy custom or external programs (e.g., ladder logic, compiled binaries) PID-321 - Device includes ability to deploy custom programs from engineering software or IDE PID-322 - Device includes a program runtime environment for custom or external programs PID-323 - Device includes support for program executable formats PID-3231 - Device includes ability to run custom/external programs as native binary without a confined/restricted environment PID-3232 - Device includes ability to run custom/external programs/processes through an execution sandboxed environment PID-324 - Device includes support for \"program uploads\" to retrieve programs from the device from an engineering workstation PID-33 - Device includes interactive services (e.g., Telnet, SSH) PID-331 - Device includes unauthenticated services PID-332 - Device includes authenticated services PID-3321 - Device includes passwords to authenticate the users PID-3322 - Device includes cryptographic mechanism to authenticate users and sessions Networking: PID-41 - Device exposes remote network services PID-411 - Device exposes remote services with the ability to send, receive, view or modify sensitive information or configurations PID-4111 - Device lacks protocol support for message authentication PID-4112 - Device lacks protocol support for message encryption PID-4113 - Device includes cryptographic functions for sensitive data, such as encryption or authentication PID-42 - Device includes procedure to forward or route network messages Applicable Threats: Download CSV " }, { "title": "Threats", "url": "/threats/", "categories": "", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": " EMB3D™ Threats Enumeration Hardware TID-101: Power Consumption Analysis Side Channel ...", "content": " EMB3D™ Threats Enumeration Hardware TID-101: Power Consumption Analysis Side Channel TID-102: Electromagnetic Analysis Side Channel TID-103: Cache Timing Analysis Side Channel TID-105: Hardware Fault Injection – Control Flow Modification TID-106: Data Bus Interception TID-107: Unauthorized Direct Memory Access (DMA) TID-108: ROM/NVRAM Data Extraction or Modification TID-109: RAM Chip Contents Readout TID-110: Hardware Fault Injection – Data Manipulation TID-111: Untrusted External Storage TID-113: Unverified Peripheral Firmware Loaded TID-114: Peripheral Data Bus Interception TID-115: Firmware/Data Extraction via Hardware Interface TID-116: Latent Privileged Access Port TID-118: Weak Peripheral Port Electrical Damage Protection TID-119: Latent Hardware Debug Port Allows Memory/Code Manipulation System Software TID-201: Inadequate Bootloader Protection and Verification TID-202: Exploitable System Network Stack Component TID-203: Malicious OS Kernel Driver/Module Installable TID-204: Untrusted Programs Can Access Privileged OS Functions TID-205: Existing OS Tools Maliciously Used for Device Manipulation TID-206: Memory Management Protections Subverted TID-207: Container Escape TID-208: Virtual Machine Escape TID-209: Host Can Manipulate Guest Virtual Machines TID-210: Device Vulnerabilities Unpatchable TID-211: Device Allows Unauthenticated Firmware Installation TID-212: FW/SW Update Integrity Shared Secrets Extraction TID-213: Faulty FW/SW Update Integrity Verification TID-214: Secrets Extracted from Device Root of Trust TID-215: Unencrypted SW/FW Updates TID-216: Firmware Update Rollbacks Allowed TID-217: Remotely Initiated Updates Can Cause DoS TID-218: Operating System Susceptible to Rootkit TID-219: OS/Kernel Privilege Escalation TID-220: Unpatchable Hardware Root of Trust TID-221: Authentication Bypass By Message Replay TID-222: Critical System Service May Be Disabled TID-223: System Susceptible to RAM Scraping TID-224: Excessive Access via Software Diagnostic Features Application Software TID-301: Applications Binaries Modified TID-302: Install Untrusted Application TID-303: Excessive Trust in Offboard Management/IDE Software TID-304: Manipulate Runtime Environment TID-305: Program Executes Dangerous System Calls TID-306: Sandboxed Environments Escaped TID-307: Device Code Representations Inconsistent TID-308: Code Overwritten to Avoid Detection TID-309: Device Exploits Engineering Workstation TID-310: Remotely Accessible Unauthenticated Services TID-311: Default Credentials TID-312: Credential Change Mechanism Can Be Abused TID-313: Unauthenticated Session Changes Credential TID-314: Passwords Can Be Guessed Using Brute-Force Attempts TID-315: Password Retrieval Mechanism Abused TID-316: Incorrect Certificate Verification Allows Authentication Bypass TID-317: Predictable Cryptographic Key TID-318: Insecure Cryptographic Implementation TID-319: Cross Site Scripting (XSS) TID-320: SQL Injection TID-321: HTTP Application Session Hijacking TID-322: Cross Site Request Forgery (CSRF) TID-323: HTTP Path Traversal TID-324: HTTP Direct Object Reference TID-325: HTTP Injection/Response Splitting TID-326: Insecure Deserialization TID-327: Out of Bounds Memory Access TID-328: Hardcoded Credentials TID-329: Improper Password Storage TID-330: Cryptographic Timing Side-Channel Networking TID-401: Undocumented Protocol Features TID-404: Remotely Triggerable Deadlock/DoS TID-405: Network Stack Resource Exhaustion TID-406: Unauthorized Messages or Connections TID-407: Missing Message Replay Protection TID-408: Unencrypted Sensitive Data Communication TID-410: Cryptographic Protocol Side Channel TID-411: Weak/Insecure Cryptographic Protocol TID-412: Network Routing Capability Abuse " }, { "title": "About", "url": "/about/", "categories": "", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "AcknowledgementsThe model is a result of a collaborative effort by MITRE, Niyo Little Thunder Pearson, Red Balloon Security, and Narf Industries.After garnering significant interest for peer review...", "content": "AcknowledgementsThe model is a result of a collaborative effort by MITRE, Niyo Little Thunder Pearson, Red Balloon Security, and Narf Industries.After garnering significant interest for peer review across diverse industries, numerous organizations piloted the threat model, offering invaluable feedback. We appreciate the interest and feedback from vendors and integrators across many industries including energy, water, manufacturing, robotics, aerospace, health, automotive, as well as researchers and threat tool vendors. This ongoing collaborative effort has been instrumental in refining and enhancing the model’s content and useability. We look forward to continued collaboration to strengthen the ability of the model to enable “secure by design.”Contact UsPlease send inquiries about EMB3D to emb3d@mitre.org  LegalMaterial on this site is ©2024 The MITRE Corporation and may be copied and distributed with permission only.This project makes use of MITRE ATT&CK®.ATT&CK® Terms of Use - https://attack.mitre.org/resources/legal-and-branding/terms-of-use/See the ATT&CK® FAQ for more information on how to use and represent the ATT&CK name." } , { "title": "Hardware", "url": "/threats/hardware.html", "categories": "", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "Hardware TID-101 - Power Consumption Analysis Side Channel TID-102 - Electromagnetic Analysis Side Channel TID-103 - Cache Timing Analysis Side Channel TID-105 - Hardware Fault Injection – Cont...", "content": "Hardware TID-101 - Power Consumption Analysis Side Channel TID-102 - Electromagnetic Analysis Side Channel TID-103 - Cache Timing Analysis Side Channel TID-105 - Hardware Fault Injection – Control Flow Modification TID-106 - Data Bus Interception TID-107 - Unauthorized Direct Memory Access (DMA) TID-108 - ROM/NVRAM Data Extraction or Modification TID-109 - RAM Chip Contents Readout TID-110 - Hardware Fault Injection – Data Manipulation TID-111 - Untrusted External Storage TID-113 - Unverified Peripheral Firmware Loaded TID-114 - Peripheral Data Bus Interception TID-115 - Firmware/Data Extraction via Hardware Interface TID-116 - Latent Privileged Access Port TID-118 - Weak Peripheral Port Electrical Damage Protection TID-119 - Latent Hardware Debug Port Allows Memory/Code Manipulation" }, { "title": "System Software", "url": "/threats/system-software.html", "categories": "", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "System Software TID-201 - Inadequate Bootloader Protection and Verification TID-202 - Exploitable System Network Stack Component TID-218 - Operating System Susceptible to Rootkit TID-203 - Mali...", "content": "System Software TID-201 - Inadequate Bootloader Protection and Verification TID-202 - Exploitable System Network Stack Component TID-218 - Operating System Susceptible to Rootkit TID-203 - Malicious OS Kernel Driver/Module Installable TID-204 - Untrusted Programs Can Access Privileged OS Functions TID-205 - Existing OS Tools Maliciously Used for Device Manipulation TID-206 - Memory Management Protections Subverted TID-207 - Container Escape TID-208 - Virtual Machine Escape TID-209 - Host Can Manipulate Guest Virtual Machines TID-210 - Device Vulnerabilities Unpatchable TID-211 - Device Allows Unauthenticated Firmware Installation TID-212 - FW/SW Update Integrity Shared Secrets Extraction TID-213 - Faulty FW/SW Update Integrity Verification TID-214 - Secrets Extracted from Device Root of Trust TID-215 - Unencrypted SW/FW Updates TID-216 - Firmware Update Rollbacks Allowed TID-217 - Remotely Initiated Updates Can Cause DoS TID-219 - OS/Kernel Privilege Escalation TID-220 - Unpatchable Hardware Root of Trust TID-221 - Authentication Bypass By Message Replay TID-222 - Critical System Service May Be Disabled TID-223 - System Susceptible to RAM Scraping TID-224 - Excessive Access via Software Diagnostic Features" }, { "title": "Application Software", "url": "/threats/application-software.html", "categories": "", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "Application Software TID-301 - Applications Binaries Modified TID-302 - Install Untrusted Application TID-303 - Excessive Trust in Offboard Management/IDE Software TID-304 - Manipulate Runtime ...", "content": "Application Software TID-301 - Applications Binaries Modified TID-302 - Install Untrusted Application TID-303 - Excessive Trust in Offboard Management/IDE Software TID-304 - Manipulate Runtime Environment TID-305 - Program Executes Dangerous System Calls TID-306 - Sandboxed Environments Escaped TID-307 - Device Code Representations Inconsistent TID-308 - Code Overwritten to Avoid Detection TID-309 - Device Exploits Engineering Workstation TID-310 - Remotely Accessible Unauthenticated Services TID-328 - Hardcoded Credentials TID-311 - Default Credentials TID-312 - Credential Change Mechanism Can Be Abused TID-313 - Unauthenticated Session Changes Credential TID-314 - Passwords Can Be Guessed Using Brute-Force Attempts TID-315 - Password Retrieval Mechanism Abused TID-316 - Incorrect Certificate Verification Allows Authentication Bypass TID-317 - Predictable Cryptographic Key TID-318 - Insecure Cryptographic Implementation TID-319 - Cross Site Scripting (XSS) TID-320 - SQL Injection TID-321 - HTTP Application Session Hijacking TID-322 - Cross Site Request Forgery (CSRF) TID-323 - HTTP Path Traversal TID-324 - HTTP Direct Object Reference TID-325 - HTTP Injection/Response Splitting TID-326 - Insecure Deserialization TID-327 - Out of Bounds Memory Access TID-329 - Improper Password Storage TID-330 - Cryptographic Timing Side-Channel" }, { "title": "Networking", "url": "/threats/networking.html", "categories": "", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "Networking TID-401 - Undocumented Protocol Features TID-404 - Remotely Triggerable Deadlock/DoS TID-405 - Network Stack Resource Exhaustion TID-406 - Unauthorized Messages or Connections TID-4...", "content": "Networking TID-401 - Undocumented Protocol Features TID-404 - Remotely Triggerable Deadlock/DoS TID-405 - Network Stack Resource Exhaustion TID-406 - Unauthorized Messages or Connections TID-407 - Missing Message Replay Protection TID-408 - Unencrypted Sensitive Data Communication TID-410 - Cryptographic Protocol Side Channel TID-411 - Weak/Insecure Cryptographic Protocol TID-412 - Network Routing Capability Abuse" } , { "title": "TID-101", "url": "/threats/TID-101.html", "categories": "Hardware", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-101: Power Consumption Analysis Side ChannelThreat DescriptionDevices will oftentimes consume variable amounts of power depending on the operations the device is performing. Power consumption a...", "content": "TID-101: Power Consumption Analysis Side ChannelThreat DescriptionDevices will oftentimes consume variable amounts of power depending on the operations the device is performing. Power consumption analysis involves the reading and analyzing of power usage of a device.If a device is vulnerable to a power consumption analysis attack, it may be possible to extract or deduce information about the operating state of the device. This can include extracting secrets/keys, discovering operations conducted on sections of memory, and device control flow. A threat actor can therefore physically monitor the power consumption of a device during an execution of a cryptographic operation to create a trace of its power usage over time. By leveraging the understanding of the operations of common cryptographic properties, the power usage traces can be used to infer various information, such as the cryptographic keys.Threat Maturity and EvidenceProof of ConceptDifferential power analysis (DPA) and correlation power analysis (CPA) on Arduino Uno Researchers “demonstrate that both DPA and CPA techniques are viable in deducing the full 16-byte key of AES-128 by monitoring the power consumption of an Arduino Uno which implements the AddRoundKey and SubBytes steps in round 1 of AES.”CWECWE-1300: Improper Protection of Physical Side Channels (Base) “The device does not contain sufficient protection mechanisms to prevent physical side channels from exposing sensitive information due to patterns in physically observable phenomena such as variations in power consumption, electromagnetic emissions (EME), or acoustic emissions.”CWE-1255: Comparison Logic is Vulnerable to Power Side-Channel Attacks (Variant) “A device’s real time power consumption may be monitored during security token evaluation and the information gleaned may be used to determine the value of the reference token.”CVE" }, { "title": "TID-102", "url": "/threats/TID-102.html", "categories": "Hardware", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-102: Electromagnetic Analysis Side ChannelThreat DescriptionDevices will oftentimes emit different electromagnetic signals during different operations. Electromagnetic analysis involves the col...", "content": "TID-102: Electromagnetic Analysis Side ChannelThreat DescriptionDevices will oftentimes emit different electromagnetic signals during different operations. Electromagnetic analysis involves the collection and analysis of these signals.If devices are vulnerable to electromagnetic analysis attacks, it may be possible for attackers with physical device presence to extract secrets, such as encryption keys, by analyzing the electromagnetic radiation that is emitted by the device. By analyzing these frequencies and comparing them against one another, it may be possible to derive information about device data or operations.Threat Maturity and EvidenceProof of ConceptDifferential Electromagnetic Analysis (DEMA) on FPGA Researchers demonstrated “that DEMA can be performed against hardware implementation of AES using an FPGA.”CWECWE-1300: Improper Protection of Physical Side Channels (Base) “The device does not contain sufficient protection mechanisms to prevent physical side channels from exposing sensitive information due to patterns in physically observable phenomena such as variations in power consumption, electromagnetic emissions (EME), or acoustic emissions.”CVE" }, { "title": "TID-103", "url": "/threats/TID-103.html", "categories": "Hardware", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-103: Cache Timing Analysis Side ChannelThreat DescriptionCache-based timing analysis attacks exploit variations in timing used for memory access, across both cached and uncached memory, to infe...", "content": "TID-103: Cache Timing Analysis Side ChannelThreat DescriptionCache-based timing analysis attacks exploit variations in timing used for memory access, across both cached and uncached memory, to infer the contents of memory. This bypasses existing OS privilege mechanisms.If a threat actor capable of executing arbitrary code on the device, they may be able to use a cache-based side-channel attack to extract data and sensitive information from more privileged processes or areas of memory on a device (e.g., passwords, keys). Executing a cache-based attack assumes the threat actor can deploy custom software to the device (including scripts).Threat Maturity and EvidenceKnown Exploitable WeaknessSpectre and Meltdown Cache Timing Cache Timing was used to create micro-architecture side-channels in devices to read whether data was in the cache or not for the Spectre/Meltdown based-attacks. Through this side-channel data leak, it would be possible to dump entire sections of program memory in the case of Spectre/Meltdown, and kernel memory in the case of Meltdown. Both Spectre and Meltdown have been observed in the wild.CWECVECVE-2017-5754 (Meltdown) “Systems with microprocessors utilizing speculative execution and indirect branch prediction may allow unauthorized disclosure of information to an attacker with local user access via a side-channel analysis of the data cache.”CVE-2017-5753 (Spectre) “Systems with microprocessors utilizing speculative execution and branch prediction may allow unauthorized disclosure of information to an attacker with local user access via a side-channel analysis.”" }, { "title": "TID-105", "url": "/threats/TID-105.html", "categories": "Hardware", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-105: Hardware Fault Injection – Control Flow ModificationThreat DescriptionA threat actor with physical access to a device may be able to manipulate the processor’s intended code execution by s...", "content": "TID-105: Hardware Fault Injection – Control Flow ModificationThreat DescriptionA threat actor with physical access to a device may be able to manipulate the processor’s intended code execution by subjecting it to hardware faults or “glitching”. Hardware faults can be induced by various methods, including voltage fault injection (power glitching), electromagnetic pulses (EM glitching), and optical fault injection. Glitching can be used to bypass various security protections on a device, such as skipping a firmware integrity check during a secure boot process or protections against firmware or data read-out from the device. This threat requires physical access to the device to perform the glitching, and also typically requires substantial iterative testing to identify the precise nature, magnitude, and timing of signals that need to be injected to cause the glitch condition.Threat Maturity and EvidenceKnown Exploitable WeaknessGlitching the Switch In pursuit of extracting the 1st stage boot ROM code from the Nvidia Tegra X1 SoC, the researchers implemented a power glitching attack against the processor to prevent the bootloader from enabling the SoC’s readout protection for that code segment. The glitch interrupts the boot ROM code from writing to a security configuration register, leaving the processor in a state that allows exporting the code responsible for the establishing the processor’s root of trust for secure boot. Analysis of the bootloader code yielded an exploitable buffer overflow in a USB protocol implementation (see TID-327) used to inject code that bypasses secure boot and allows executing unauthorized firmware. The presence of this flaw in the unmodifiable initial boot ROM prevents patching this vulnerability in already deployed devices (see TID-220).Proof of ConceptElectromagnetic Fault Injection: Towards a Fault Model on a 32-bit Microcontroller “These experiments confirm the fact that an attacker could change an instruction into another one and change the value of a piece of data loaded from the Flash memory. But they also provide a more accurate fault model, in which some instructions or registers seem to be more vulnerable than others”Oops..! I Glitched It Again! How to Multi-Glitch the Glitching-Protections on ARM TrustZone-M “In this paper, we present μ-Glitch, the first Voltage Fault Injection (VFI) platform which is capable of injecting multiple, coordinated voltage faults into a target device, requiring only a single trigger signal…We evaluate and showcase the effectiveness and practicality of our attack platform on four real-world chips, featuring TrustZone-M”CWECWE-1247: Improper Protection Against Voltage and Clock Glitches (Base) “The device does not contain or contains incorrectly implemented circuitry or sensors to detect and mitigate voltage and clock glitches and protect sensitive information or software contained on the device.”CWE-1319: Improper Protection against Electromagnetic Fault Injection (EM-FI) (Base) “The device is susceptible to electromagnetic fault injection attacks, causing device internal information to be compromised or security mechanisms to be bypassed.”CVE" }, { "title": "TID-106", "url": "/threats/TID-106.html", "categories": "Hardware", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-106: Data Bus InterceptionThreat DescriptionA threat actor could intercept data across a data bus used to connect a process to either volatile memory or non-volatile storage (e.g. ROM, NVRAM, d...", "content": "TID-106: Data Bus InterceptionThreat DescriptionA threat actor could intercept data across a data bus used to connect a process to either volatile memory or non-volatile storage (e.g. ROM, NVRAM, disk). Depending on the scope of the interception, it may be possible to read and/or perform an adversary-in-the-middle (AITM) attack to write information going over the bus, especially if it lacks adequate encryption and authentication. For example, if a device has discrete RAM external from the processor, it may be possible to tap the address and data lines to observe and capture memory contents as they are loaded and stored for processing. Similar attacks can also be performed in software. Captured data may leak sensitive information (e.g., keys, cleartext firmware code) that can aid in reverse engineering or executing other stages of an attack. Interception and modification may enable an adversary to alter a device’s behavior, achieve persistence, evade detection, or other objectives.NOTE: This is different from TID-114 in that this threat refers to data moving between the processor and storage devices, whereas TID-114 refers to the data moving between the main board or processing chip to a peripheral device.Threat Maturity and EvidenceProof of ConceptAn Off-Chip Attack on Hardware Enclaves via the Memory Bus “This paper shows how an attacker can break the confidentiality of a hardware enclave with MEMBUSTER, an off-chip attack based on snooping the memory bus. An attacker with physical access can observe an unencrypted address bus and extract fine-grained memory access patterns of the victim”CWECWE-311: Missing Encryption of Sensitive Data (Class) “The product does not encrypt sensitive or critical information before storage or transmission.”CWE-319: Cleartext Transmission of Sensitive Information (Base) “The product transmits sensitive or security-critical data in cleartext in a communication channel that can be sniffed by unauthorized actors.”CVE" }, { "title": "TID-107", "url": "/threats/TID-107.html", "categories": "Hardware", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-107: Unauthorized Direct Memory Access (DMA)Threat DescriptionIf separate discrete chips/peripherals that have access to the same physical memory, a threat actor with access to one peripheral c...", "content": "TID-107: Unauthorized Direct Memory Access (DMA)Threat DescriptionIf separate discrete chips/peripherals that have access to the same physical memory, a threat actor with access to one peripheral could perform a Direct Memory Access (DMA) attack to maliciously read/write memory from a connected chip or peripheral. This threat is especially relevant if there is insufficient hardware or software restrictions on what memory can be accessed/manipulated. A DMA attack can be used to extract cryptographic keys or other sensitive data, and also to manipulate the operation of the chip.Threat Maturity and EvidenceProof of ConceptHigh-Speed DMA Attacks Bypass Built-in Hardware Protections on Enterprise Devices “Eclypsium’s latest research shows that enterprise laptops, servers, and cloud environments continue to be vulnerable to powerful Direct Memory Access (DMA) attacks, even in the presence of protections such as UEFI Secure Boot, Intel Boot Guard, HP Sure Start, and Microsoft Virtualization-Based Security.”Exploiting an I/OMMU vulnerability In the 2010 5th International Conference on Malicious and Unwanted Software, researchers demonstrated how vulnerabilities on Intel’s VT-d could be exploited via a DMA attack.Thunderspy “The attack involved opening the device’s back cover, connecting a hacking device called a Bus Pirate to the SPI flash interface associated with the Thunderbolt controller firmware, connecting the Bus Pirate to the attacker’s laptop, copying the Thunderbolt firmware using a tool called Flashrom, modifying the Thunderbolt firmware to disable all Thunderbolt security, and writing it back to the targeted device. The attacker then connects a Thunderbolt-based direct memory access (DMA) attack device running PCILeech to the targeted PC, and uses it to load a kernel module that allows them to bypass the Windows login screen.”CWECWE-1260: Improper Handling of Overlap Between Protected Memory Ranges (Base) “The product allows address regions to overlap, which can result in the bypassing of intended memory protection.”CWE-119: Improper Restriction of Operations within the Bounds of a Memory Buffer “The product performs operations on a memory buffer, but it can read from or write to a memory location that is outside of the intended boundary of the buffer.”CWE-284: Improper Access Control “The product does not restrict or incorrectly restricts access to a resource from an unauthorized actor.”CVE" }, { "title": "TID-108", "url": "/threats/TID-108.html", "categories": "Hardware", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-108: ROM/NVRAM Data Extraction or ModificationThreat DescriptionContents of non-volatile memory chips or non-fixed storage (e.g., SD cards, Compact Flash, hard disks, USB sticks) can be directl...", "content": "TID-108: ROM/NVRAM Data Extraction or ModificationThreat DescriptionContents of non-volatile memory chips or non-fixed storage (e.g., SD cards, Compact Flash, hard disks, USB sticks) can be directly read out for examination or modification by a chip reader. In some cases this may be possible without removing the chip from the circuit board, but most often this will involve physically desoldering the chip and non-destructively removing it from the device. By reading information from ROM or NVRAM, a threat actor would be able to extract any secrets stored on it.If the extracted storage contents contain unencrypted firmware (even partial), this can ease reverse engineering by an adversary to identify other potential vulnerabilities or security-relevant data (e.g., passwords, cryptographic keys).Threat actors may also be able to load malicious changes to the ROM/NVRAM, potentially giving them increased and unauthorized access to the device.Threat Maturity and EvidenceProof of ConceptUprooting Trust: Learnings from an Unpatchable Hardware Root-of-Trust Vulnerability in Siemens S7-1500 PLCs “This Siemens S7-1500 uses two non-volatile NAND flash memories as primary storage for the main SoC. We identified these two non-volatile NAND flash memory chips as W29N01HV (1G-bit) NAND Flash memory [35]. We desoldered the two NAND chips from the device’s PCB and used the Xgecu Minipro TL866II [36] NAND programmer to extract the content of them.”CWECWE-311: Missing Encryption of Sensitive Data “The product does not encrypt sensitive or critical information before storage or transmission.”CWE-312: Cleartext Storage of Sensitive Information “The product stores sensitive information in cleartext within a resource that might be accessible to another control sphere.”CWE-1282: Assumed-Immutable Data is Stored in Writable Memory “Immutable data, such as a first-stage bootloader, device identifiers, and “write-once” configuration settings are stored in writable memory that can be re-programmed or updated in the field.”CVE" }, { "title": "TID-109", "url": "/threats/TID-109.html", "categories": "Hardware", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-109: RAM Chip Contents ReadoutThreat DescriptionIf a threat actor can physically access a RAM chip, they may be able to readout the contents of the chip. Multiple techniques can be used to extr...", "content": "TID-109: RAM Chip Contents ReadoutThreat DescriptionIf a threat actor can physically access a RAM chip, they may be able to readout the contents of the chip. Multiple techniques can be used to extract the contents of RAM, including both runtime and physical access, such as the threat actor can use a Cold-boot attack to physically cool the RAM to minimize the decay of the electrical charge and then physically copy the contents of that RAMThrough these methods, critical data, including firmware or secrets (such as passwords and cryptographic keys), may therefore be vulnerable to extraction. Extraction of this information could then lead to reverse engineering to identify vulnerabilities, abusing secrets to gain unauthorized access, or subverting at-rest encryption schemes.Threat Maturity and EvidenceProof of ConceptCold Boot Attacks “We provide an independent study based on 12 computer systems with different hardware configurations that verifies the empirical practicability of cold boot attacks against DDR1 and DDR2”Cryo-Mechanical RAM Content Extraction Against Modern Embedded Systems CWECWE-311: Missing Encryption of Sensitive Data “The product does not encrypt sensitive or critical information before storage or transmission.”CWE-1384: Improper Handling of Physical or Environmental Conditions“Hardware products are typically only guaranteed to behave correctly within certain physical limits or environmental conditions. Such products cannot necessarily control the physical or external conditions to which they are subjected. However, the inability to handle such conditions can undermine a product’s security. For example, an unexpected physical or environmental condition may cause the flipping of a bit that is used for an authentication decision. This unexpected condition could occur naturally or be induced artificially by an adversary.”CVE" }, { "title": "TID-110", "url": "/threats/TID-110.html", "categories": "Hardware", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-110: Hardware Fault Injection – Data ManipulationThreat DescriptionIf a device uses certain types of vulnerable dynamic random access memory (DRAM), a threat actor with malicious software insta...", "content": "TID-110: Hardware Fault Injection – Data ManipulationThreat DescriptionIf a device uses certain types of vulnerable dynamic random access memory (DRAM), a threat actor with malicious software installed on the device may be manipulate the contents of memory by repeatedly accessing physically nearby memory cells.An example of this is Rowhammer, where a threat actor can deploy code (including written in JavaScript loaded from a web site) that performs many repeated memory access attempts. This repeated access causes a leakage of electric charge within memory, leading to a manipulation of the charge of nearby memory locations. This charge manipulation results in a manipulation of the contents of memory itself. By manipulating the contents of memory, the threat actor may be able to escalate privileges on a device or otherwise bypass security controls.Threat Maturity and EvidenceProof of ConceptRowHammer In 2014 and thereafter, researchers demonstrated the ability to corrupt data in nearby DDR3 and DDR4 DRAM rows by repeatedly accessing data from the same row. It is possible to turn this phenomenon into exploits through various means.CWECWE-1256: Improper Restriction of Software Interfaces to Hardware Interfaces “The product provides software-controllable device functionality for capabilities such as power and clock management, but it does not properly limit functionality that can lead to modification of hardware memory or register bits, or the ability to observe physical side channels.”CVE" }, { "title": "TID-111", "url": "/threats/TID-111.html", "categories": "Hardware", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-111: Untrusted External StorageThreat DescriptionAn untrusted storage peripheral (e.g., USB) could be installed on the device. If malicious code is executed from the untrusted storage, or trans...", "content": "TID-111: Untrusted External StorageThreat DescriptionAn untrusted storage peripheral (e.g., USB) could be installed on the device. If malicious code is executed from the untrusted storage, or transferred to the device, it could provide a way for a threat actor to get unauthorized code to execute on the device. Further, any files transferred from the untrusted storage could potentially be used to modify critical device configurations or settings files.Threat Maturity and EvidenceProof of ConceptBadUSB “The malware they created, called BadUSB, can be installed on a USB device to completely take over a PC, invisibly alter files installed from the memory stick, or even redirect the user’s internet traffic. …Because BadUSB resides not in the flash memory storage of USB devices, but in the firmware that controls their basic functions, the attack code can remain hidden long after the contents of the device’s memory would appear to the average user to be deleted.”CWECWE-1299: Missing Protection Mechanism for Alternate Hardware Interface (Base) “The lack of protections on alternate paths to access control-protected assets (such as unprotected shadow registers and other external facing unguarded interfaces) allows an attacker to bypass existing protections to the asset that are only performed against the primary path.”CVE" }, { "title": "TID-113", "url": "/threats/TID-113.html", "categories": "Hardware", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-113: Unverified Peripheral Firmware LoadedThreat DescriptionA threat actor could manipulate the firmware associated with a peripheral prior to it being loaded and executed. The attackers may be...", "content": "TID-113: Unverified Peripheral Firmware LoadedThreat DescriptionA threat actor could manipulate the firmware associated with a peripheral prior to it being loaded and executed. The attackers may be able to manipulate actions on the device by sending it commands that were not the original intention of the user or by manipulating a bitstream before it is loaded, There are multiple possible cases where this could occur, including:Case 1: Peripheral firmware is stored in a dedicated ROM/NVRAM chip. An adversary with physical access to the device might alter the contents of the peripheral firmware storage to alter peripheral behavior.Case 2: Peripheral firmware stored as a file in the parent processor’s context. An adversary able to execute code in the parent processor context could replace or alter the firmware image before it is loaded into the peripheral during bootup or other initialization process.Case 3: The parent processor’s context has privileged access to peripherals and malicious code running there could alter peripheral firmware dynamically (e.g., through shared memory).Threat Maturity and EvidenceObserved Adversary BehaviorEQUATION GROUP: QUESTIONS AND ANSWERS “Although the implementation of their malware systems is incredibly complex, surpassing even Regin in sophistication, there is one aspect of the EQUATION group’s attack technologies that exceeds anything we have ever seen before. This is the ability to infect the hard drive firmware… The plugin supports two main functions: reprogramming the HDD firmware with a custom payload from the EQUATION group, and providing an API into a set of hidden sectors (or data storage) of the hard drive. This achieves several important things: Extreme persistence that survives disk formatting and OS reinstall. an invisible, persistent storage hidden inside the hard drive.”Proof of ConceptPERILOUS PERIPHERALS: THE HIDDEN DANGERS INSIDE WINDOWS & LINUX COMPUTERS “In new research, Eclypsium found unsigned firmware in WiFi adapters, USB hubs, trackpads, and cameras used in computers from Lenovo, Dell, HP and other major manufacturers. We then demonstrated a successful attack on a server via a network interface card with unsigned firmware used by each of the big three server manufacturers.”CWECWE-1299: Missing Protection Mechanism for Alternate Hardware Interface (Base) “The lack of protections on alternate paths to access control-protected assets (such as unprotected shadow registers and other external facing unguarded interfaces) allows an attacker to bypass existing protections to the asset that are only performed against the primary path.”CWE-1316: Fabric-Address Map Allows Programming of Unwarranted Overlaps of Protected and Unprotected Ranges (Base) “The address map of the on-chip fabric has protected and unprotected regions overlapping, allowing an attacker to bypass access control to the overlapping portion of the protected region.”CVE" }, { "title": "TID-114", "url": "/threats/TID-114.html", "categories": "Hardware", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-114: Peripheral Data Bus InterceptionThreat DescriptionMessages and data passing between discrete sub-components and peripherals may be intercepted and/or modified from through the peripheral b...", "content": "TID-114: Peripheral Data Bus InterceptionThreat DescriptionMessages and data passing between discrete sub-components and peripherals may be intercepted and/or modified from through the peripheral bus (e.g., SPI, I2C, ISA, PCI, USB). Captured data may leak sensitive information (e.g., keys, cleartext firmware code) that can aid in reverse engineering and extracting data needed for other stages of an attack. Additionally, threat actors may be able to alter sensitive information in transit to cause malicious effects through data manipulation or interaction in transit over the bus.NOTE: This is different from TID-106 in that this threat refers to the data moving between the main board or processing chip to a peripheral device, whereas TID-106 refers to data moving between the processor and storage devices.Threat Maturity and EvidenceProof of ConceptToward a hardware man-in-the-middle attack on PCIe bus “In this paper, we present a new attack vector on PCIe based on a hardware Man-in-the-Middle. This system allows real-time data analysis, data-replay, and a copy technique inspired by the shadow-copy principle. Through this one, it is possible to locate, duplicate, and replay sensitive data.”Critical Architectural Vulnerabilities in Siemens SIMATIC S7-1500 Series Allow for Bypass of All Protected Boot Features “An attacker with physical access to the device can either attach to the I2C communication bus or extract the physical ATECC chip from the PLC’s PCB to falsely authenticate and use it as an oracle to generate firmware decryption material. “CWECWE-311: Missing Encryption of Sensitive Data “The product does not encrypt sensitive or critical information before storage or transmission.”CWE-319: Cleartext Transmission of Sensitive Information “The product transmits sensitive or security-critical data in cleartext in a communication channel that can be sniffed by unauthorized actors.”CVE" }, { "title": "TID-115", "url": "/threats/TID-115.html", "categories": "Hardware", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-115: Firmware/Data Extraction via Hardware InterfaceThreat DescriptionUnprotected programming or debugging interfaces may be used to extract device firmware, exposing it to reverse engineering ...", "content": "TID-115: Firmware/Data Extraction via Hardware InterfaceThreat DescriptionUnprotected programming or debugging interfaces may be used to extract device firmware, exposing it to reverse engineering that may reveal proprietary information, other exploitable vulnerabilities, or security-sensitive data stored in the firmware (such as keys and passwords). Examples include the Joint Test Action Group (JTAG) interface.Threat Maturity and EvidenceProof of ConceptExtracting firmware from devices using JTAG Researcher Sergio Prado demonstrates in this article how to use the JTAG interface to extract firmware from a device.CWECWE-1299: Missing Protection Mechanism for Alternate Hardware Interface “The lack of protections on alternate paths to access control-protected assets (such as unprotected shadow registers and other external facing unguarded interfaces) allows an attacker to bypass existing protections to the asset that are only performed against the primary path.”CWE-1191: On-Chip Debug and Test Interface With Improper Access Control “The chip does not implement or does not correctly perform access control to check whether users are authorized to access internal registers and test modes through the physical debug/test interface.”CVE" }, { "title": "TID-116", "url": "/threats/TID-116.html", "categories": "Hardware", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-116: Latent Privileged Access PortThreat DescriptionIf a device has a latent user access port, it may be possible for attackers to leverage physical access to obtain privileges that were not ac...", "content": "TID-116: Latent Privileged Access PortThreat DescriptionIf a device has a latent user access port, it may be possible for attackers to leverage physical access to obtain privileges that were not accounted for when considering software or remote access controls.Threat Maturity and EvidenceProof of ConceptHow to Hack Hardware using UART - Black Hills Researchers from Black Hills demonstrate how to gain root access to a device through shell access granted and transmitted over UART.IoT Devices - The Not-So-Hidden Risk of UART Interface Satish S demonstrates how to gain root access to a device over a UART interface.CWECWE-1299: Missing Protection Mechanism for Alternate Hardware Interface “The lack of protections on alternate paths to access control-protected assets (such as unprotected shadow registers and other external facing unguarded interfaces) allows an attacker to bypass existing protections to the asset that are only performed against the primary path.”CWE-1191: On-Chip Debug and Test Interface With Improper Access Control “The chip does not implement or does not correctly perform access control to check whether users are authorized to access internal registers and test modes through the physical debug/test interface.”CVECVE-2022-29402 “TP-Link TL-WR840N EU v6.20 was discovered to contain insecure protections for its UART console. This vulnerability allows attackers to connect to the UART port via a serial connection and execute commands as the root user without authentication.”" }, { "title": "TID-118", "url": "/threats/TID-118.html", "categories": "Hardware", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-118: Weak Peripheral Port Electrical Damage ProtectionThreat DescriptionIf a threat actor has physical access to a device, they may be able to cause physical damage to the circuit board of a de...", "content": "TID-118: Weak Peripheral Port Electrical Damage ProtectionThreat DescriptionIf a threat actor has physical access to a device, they may be able to cause physical damage to the circuit board of a device, in some cases even destroying the device. A malicious actor may short circuit or introduce out-of-spec voltages and currents to pins on external connectors. This can lead to effects as mild as interrupting device functionality, by causing crashes or reboots, or as significant as corrupting data, corrupting firmware, or permanent hardware damage. Depending on how robust the hardware design is, physical damage may be limited to a single affected peripheral port or as extensive as destroying the entire device.Threat Maturity and EvidenceKnown Exploitable WeaknessUSBKILL “The USBKill is a device that stress tests hardware. When plugged in power is taken from a USB-Port, multiplied, and discharged into the data-lines, typically disabling an unprotected device.”CWECWE-1384: Improper Handling of Physical or Environmental Conditions “The product does not properly handle unexpected physical or environmental conditions that occur naturally or are artificially induced.”CVE" }, { "title": "TID-119", "url": "/threats/TID-119.html", "categories": "Hardware", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-119: Latent Hardware Debug Port Allows Memory/Code ManipulationThreat DescriptionHardware debugging ports (e.g., JTAG) oftentimes have high privileges or direct access to the running device’s m...", "content": "TID-119: Latent Hardware Debug Port Allows Memory/Code ManipulationThreat DescriptionHardware debugging ports (e.g., JTAG) oftentimes have high privileges or direct access to the running device’s memory and integrated hardware. By leveraging one of these hardware debugging ports, an adversary may be able to read memory values off of the device, change the value of a section of memory during runtime, or control the execution of code on the processor. This can give threat actors increased privileges on the device or bypass other security protections.Threat Maturity and EvidenceProof of Concepthw-101-jtag (Parts 1, 2 and 3) Researchers at River Loop Security demonstrate here how to manipulate and read memory from a JTAG port.CWECWE-1191: On-Chip Debug and Test Interface With Improper Access Control “The chip does not implement or does not correctly perform access control to check whether users are authorized to access internal registers and test modes through the physical debug/test interface.”CVE" }, { "title": "TID-201", "url": "/threats/TID-201.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-201: Inadequate Bootloader Protection and VerificationThreat DescriptionSome devices utilize bootloaders that are either stored in writable memory or memory that can be made writable. It may th...", "content": "TID-201: Inadequate Bootloader Protection and VerificationThreat DescriptionSome devices utilize bootloaders that are either stored in writable memory or memory that can be made writable. It may then be possible for a threat actor to alter the contents of the device’s designated boot code storage locations to inject malicious code or modify the bootloader’s operation. This could allow the installation of a “bootkit”, which is loaded before the operating system and can undermine any security protections within the bootloader or operating system. Typically this is done through a vulnerability or lack of write protections in the bootloader loader/runtime environment.Threat Maturity and EvidenceObserved Adversarial BehaviorATT&CK Technique: Pre-OS Boot: Bootkit (T1542.003) “Adversaries may use bootkits to persist on systems. Bootkits reside at a layer below the operating system and may make it difficult to perform full remediation unless an organization suspects one was used and can act accordingly.”Detecting UEFI Bootkits in the Wild (Part 1) “As UEFI boot systems are going mainstream, the bootkits are also shifting to an implementation of infecting firmware in a flash chip on the motherboard instead of the MBR/VBR on the hard drive. The first PoC of UEFI bootkits was presented in 2013 and the threats have been observed in the wild since 2018.”LOJAX First UEFI rootkit found in the wild, courtesy of the Sednit group “Sednit also known as APT28, Sofacy, Strontium and Fancy Bear – has been operating since at least 2004, and has made headlines frequently in the past years: it is believed to be behind major, high profile attacks. … this white paper details the first time this group is known to have used a UEFI rootkit.”MosaicRegressor: Lurking in the Shadows of UEFI “During an investigation, we came across several suspicious UEFI firmware images. A deeper inspection revealed that they contained four components that had an unusual proximity in their assigned GUID values, those were two DXE drivers and two UEFI applications. After further analysis we were able to determine that they were based on the leaked source code of HackingTeam’s VectorEDK bootkit, with minor customizations.”TRICKBOT NOW OFFERS ‘TRICKBOOT’: PERSIST, BRICK, PROFIT “This new functionality, which we have dubbed “TrickBoot,” makes use of readily available tools to check devices for well-known vulnerabilities that can allow attackers to read, write, or erase the UEFI/BIOS firmware of a device. “CWECWE-693: Protection Mechanisms Failure (Pillar) “The product does not use or incorrectly uses a protection mechanism that provides sufficient defense against directed attacks against the product.”CWE-284: Improper Access Control “The product does not restrict or incorrectly restricts access to a resource from an unauthorized actor.”CVE" }, { "title": "TID-202", "url": "/threats/TID-202.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-202: Exploitable System Network Stack ComponentThreat DescriptionDevices may have vulnerabilities within software used to parse various network protocols. If the device does not properly parse...", "content": "TID-202: Exploitable System Network Stack ComponentThreat DescriptionDevices may have vulnerabilities within software used to parse various network protocols. If the device does not properly parse a protocol, a threat actor can send improperly formatted messages to the device, which may result in memory corruptions. Vulnerabilities resulting from protocol manipulation can then be used to perform remote code execution or to perform a denial of service attack on the device. There are a number of known complexities with network protocol parsing, including unclear protocol specifications or parsing expectation.Threat Maturity and EvidenceKnown Exploitable WeaknessBroadpwn: Remotely Compromising Android and iOS via a Bug in Broadcom’s Wi-Fi Chipsets “Broadpwn is a fully remote attack against Broadcom’s BCM43xx family of WiFi chipsets, which allows for code execution on the main application processor in both Android and iOS. It is based on an unusually powerful 0-day that allowed us to leverage it into a reliable, fully remote exploit.”Ripple20 “Ripple20 vulnerabilities are unique both in their widespread effect and impact due to supply chain effect and being vulnerabilities allowing attackers to bypass NAT and firewalls and take control of devices undetected, with no user interaction required. This is due to the vulnerabilities being in a low level TCP/IP stack, and the fact that for many of the vulnerabilities, the packets sent are very similar to valid packets, or, in some cases are completely valid packets. This enables the attack to pass as legitimate traffic.”Urgent/11 “The Armis research team, Armis Labs, has discovered 11 zero-day vulnerabilities in VxWorks®, the most widely used operating system you may have never heard about. VxWorks is used by over 2 billion devices including critical industrial, medical and enterprise devices. Dubbed “URGENT/11,” the vulnerabilities reside in VxWorks’ TCP/IP stack (IPnet), impacting all versions since version 6.5, and are a rare example of vulnerabilities found to affect the operating system over the last 13 years. Armis has worked closely with Wind River®, the maintainer of VxWorks, and the latest VxWorks 7 released on July 19 contains fixes for all the discovered vulnerabilities.”AMNESIA:33 “In this study, we discuss the results of the security analysis of seven open source TCP/IP stacks and report a bundle of 33 new vulnerabilities found in four of the seven analyzed stacks that are used by major IoT, OT and IT device vendors”CWECWE-20: Improper Input Validation (Class) “The product receives input or data, but it does not validate or incorrectly validates that the input has the properties that are required to process the data safely and correctly.”CWE-121: Stack-based Buffer Overflow (Simple) “A stack-based buffer overflow condition is a condition on where the buffer being overwritten is allocated on the stack (i.e., is a local variable or, rarely, a parameter to a function).”CVEICSA-13-291-01B “An attacker could cause the software to go into an infinite loop with a specifically crafted TCP packet, causing the process to crash. The system must be restarted manually to clear the condition.”CVE-2013-2811: GE Proficy HMI/SCADA DNP3 Driver Input Validation “The DNP master station server (DNPDrv.exe) that processes incoming messages via Serial, IP, or Modem does not validate all inputs and can be exploited to generate an unhandled exception or denial of service.”CVE-2019-6529: Kunbus PR100088 Modbus Gateway “An attacker could specially craft an FTP request that could crash the device.”CVE-2013-0662: Schneider Electric Serial Modbus Driver Buffer Overflow “The Modbus Serial Driver creates a listener on Port 27700/TCP. When a connection is made, the Modbus Application Header is first read into a buffer. If a large buffer size is specified in this header, a stack-based buffer overflow results. A second overflow problem can then be exploited by overwriting the return address, allowing the attacker to execute arbitrary code with the permission of the user running the software.”" }, { "title": "TID-203", "url": "/threats/TID-203.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-203: Malicious OS Kernel Driver/Module InstallableThreat DescriptionThreat actors may be able to install a driver or kernel module with malicious code to load a rootkit and manipulate the OS. D...", "content": "TID-203: Malicious OS Kernel Driver/Module InstallableThreat DescriptionThreat actors may be able to install a driver or kernel module with malicious code to load a rootkit and manipulate the OS. Drivers and kernel modules generally operate with a high-level privileges (e.g. Ring 0) and therefore can be used to manipulate the operation of the existing OS. OS kernel modules and drivers can typically be installed by any users with root/administrative permissions, though some OSes require that drivers be digitally signed by a trusted OEM before they can be installed on a device.Threat Maturity and EvidenceObserved Adversary BehaviorSyslogk Rootkit “The Syslogk rootkit installed itself as a Linux kernel module where it had the ability to hook functions/syscalls, manipulate and create its own syscalls, and launch a payload that contains a backdoor at the request of remote threat actors.”CWECWE-306 Missing Authentication for Critical Function “The product does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.”CVE" }, { "title": "TID-204", "url": "/threats/TID-204.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-204: Untrusted Programs Can Access Privileged OS FunctionsThreat DescriptionWithout a correctly enforced operating system privilege model, a compromised or untrusted application program could a...", "content": "TID-204: Untrusted Programs Can Access Privileged OS FunctionsThreat DescriptionWithout a correctly enforced operating system privilege model, a compromised or untrusted application program could access to data, memory, or programs associated with the underlying OS or other applications. This could also be used to further manipulate the underlying OS.Threat Maturity and EvidenceProof of ConceptSecurity Issues In Compiled PLC Logic (CoDeSys & ProConOs) - Reid Wightman (Dragos) (at S4x23) Researcher Reid Wightman demonstrated that it is possible to compromise a given feature of a controller, in this example the network protocol handler, and leverage that to overwrite memory in other critical portions of the CoDeSys and ProConOs runtime environments.CWECWE-693: Protection Mechanisms Failure (Pillar) “The product does not use or incorrectly uses a protection mechanism that provides sufficient defense against directed attacks against the product.”CVE" }, { "title": "TID-205", "url": "/threats/TID-205.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-205: Existing OS Tools Maliciously Used for Device ManipulationThreat DescriptionIf a threat actor has access to a valid OS account, they can utilize existing OS tools and system calls to insta...", "content": "TID-205: Existing OS Tools Maliciously Used for Device ManipulationThreat DescriptionIf a threat actor has access to a valid OS account, they can utilize existing OS tools and system calls to install malicious code or manipulate device operations. If the account and privileges are not sufficiently restricted, the threat actor may be able to add their own tools, modify other application layer programs, or even execute commands with elevated privileges (e.g., setuid/setgid). Further, threat actors can perform a living-off-the-land attack, where they choose to only use pre-installed functionality and install nothing else on the device. These types of attacks can be hard to detect because malicious behavior may be implemented using tools and functions with legitimate purposes.Threat Maturity and EvidenceObserved Adversarial BehaviorATT&CK Technique: Graphical User Interface (T0823) Procedure Example: 2015 Ukraine Electric Power Attack (C0028) “During the 2015 Ukraine Electric Power Attack, Sandworm Team utilized HMI GUIs in the SCADA environment to open breakers.”Volt Typhoon targets US critical infrastructure with living-off-the-land techniques “To achieve their objective, the threat actor puts strong emphasis on stealth in this campaign, relying almost exclusively on living-off-the-land techniques and hands-on-keyboard activity. “CWECWE-693: Protection Mechanisms Failure (Pillar) “The product does not use or incorrectly uses a protection mechanism that provides sufficient defense against directed attacks against the product.”CVE" }, { "title": "TID-206", "url": "/threats/TID-206.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-206: Memory Management Protections SubvertedThreat DescriptionWhile the use of memory permissions, such as non-executable stack and heap memory, can prevent threat actors from injecting and exe...", "content": "TID-206: Memory Management Protections SubvertedThreat DescriptionWhile the use of memory permissions, such as non-executable stack and heap memory, can prevent threat actors from injecting and executing malicious code, it is still possible to leverage a process’s existing code to perform a malicious function. For example, Return Oriented Programming (ROP) is a technique used by threat actors where once a process’s stack can be overwritten, a series of “returns” to portions of code within the process can be leveraged to cause an intended malicious function. This can include “returns” to existing libraries (e.g., libc), or other instruction sequences already in memory of that process.The exploitation of this threat may be possible through TID-219, and may also be enabled by the exploitation of TID-219.Threat Maturity and EvidenceKnown Exploitable WeaknessATT&CK Technique: Process Injection: Proc Memory (T1055.09) “Proc memory injection involves enumerating the memory of a process via the /proc filesystem (/proc/[pid]) then crafting a return-oriented programming (ROP) payload with available gadgets/instructions.”CWECVECVE-2024-28115 “FreeRTOS is a real-time operating system for microcontrollers. FreeRTOS Kernel versions through 10.6.1 do not sufficiently protect against local privilege escalation via Return Oriented Programming techniques should a vulnerability exist that allows code injection and execution. These issues affect ARMv7-M MPU ports, and ARMv8-M ports with Memory Protected Unit (MPU) support enabled (i.e. configENABLE_MPU set to 1). These issues are fixed in version 10.6.2 with a new MPU wrapper.”" }, { "title": "TID-207", "url": "/threats/TID-207.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-207: Container EscapeThreat DescriptionContainer environments, such as Docker and Kubernetes, share the same underlying kernel as the host operating system. Therefore, a kernel or container vul...", "content": "TID-207: Container EscapeThreat DescriptionContainer environments, such as Docker and Kubernetes, share the same underlying kernel as the host operating system. Therefore, a kernel or container vulnerability that allows the execution of unauthorized code could be used to escape the container. Further, container environments with incorrect configurations or excessive privileges could also allow a container escape. By escaping the container, the threat actor could manipulate the underlying OS or applications/data within other containers hosted on that device.Threat Maturity and EvidenceKnown Exploitable WeaknessATT&CK Technique: Escape to Host (T1611) “Adversaries may break out of a container to gain access to the underlying host. This can allow an adversary access to other containerized resources from the host level or to the host itself. In principle, containerized resources should provide a clear separation of application functionality and be isolated from the host environment.”Proof of ConceptBreaking out of Docker via runC – Explaining CVE-2019-5736 “A vulnerability in runc allows a malicious container to overwrite the host runc binary and thus gain root-level code execution on the host. The level of user interaction is being able to run any command… as root within a container in two possible contexts.”Crowdstrike: CVE-2022-0185: Kubernetes Container Escape Using Linux Kernel Exploit “On Jan. 18, 2022, researchers found a heap base buffer overflow flaw (CVE-2022-0185) in the Linux kernel (5.1-rc1+) function “legacy_parse_param” of filesystem context functionality, which allows an out-of-bounds write in kernel memory. Using this primitive, an unprivileged attacker can escalate its privilege to root, bypassing any Linux namespace restrictions.” Threat actors can then leverage this namespace restriction bypass and root level privilege to break out of the Kubernetes container.CWECVECVE-2019-5736 “runc through 1.0-rc6, as used in Docker before 18.09.2 and other products, allows attackers to overwrite the host runc binary (and consequently obtain host root access) by leveraging the ability to execute a command as root within one of these types of containers: (1) a new container with an attacker-controlled image, or (2) an existing container, to which the attacker previously had write access, that can be attached with docker exec. This occurs because of file-descriptor mishandling, related to /proc/self/exe.”CVE-2022-0185 “A heap-based buffer overflow flaw was found in the way the legacy_parse_param function in the Filesystem Context functionality of the Linux kernel verified the supplied parameters length. An unprivileged (in case of unprivileged user namespaces enabled, otherwise needs namespace CAP_SYS_ADMIN privilege) local user able to open a filesystem that does not support the Filesystem Context API (and thus fallbacks to legacy handling) could use this flaw to escalate their privileges on the system.”" }, { "title": "TID-208", "url": "/threats/TID-208.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-208: Virtual Machine EscapeThreat DescriptionVirtualized environments will oftentimes share the same underlying hardware as the hypervisor. A hypervisor or virtualized environment vulnerability...", "content": "TID-208: Virtual Machine EscapeThreat DescriptionVirtualized environments will oftentimes share the same underlying hardware as the hypervisor. A hypervisor or virtualized environment vulnerability that allows the execution of unauthorized code could be used to escape the virtualized environments. By escaping the environment, a threat actor could manipulate the underlying hypervisor, operating system, or application/data within other environments hosted on that device.Threat Maturity and EvidenceKnown Exploitable WeaknessVMWare Security Advisory (VMSA-2024-0006.1) “A malicious actor with local administrative privileges on a virtual machine may exploit this issue to execute code as the virtual machine’s VMX process running on the host. On ESXi, the exploitation is contained within the VMX sandbox whereas, on Workstation and Fusion, this may lead to code execution on the machine where Workstation or Fusion is installed.”“A malicious actor with privileges within the VMX process may trigger an out-of-bounds write leading to an escape of the sandbox.”CWECWE-693: Protection Mechanisms Failure (Pillar) “The product does not use or incorrectly uses a protection mechanism that provides sufficient defense against directed attacks against the product.”CVEImplementing Hypervisor-Specific Mitigations for Microarchitectural Data Sampling (MDS) Vulnerabilities (CVE-2018-12126, CVE-2018-12127, CVE-2018-12130, and CVE-2019-11091) in vSphere (67577) “Intel has disclosed details on a new wave of speculative-execution vulnerabilities known collectively as “Microarchitectural Data Sampling (MDS)” that can occur on Intel microarchitecture prior to 2nd Generation Intel® Xeon® Scalable Processors (formerly known as Cascade Lake). These issues may allow a malicious user who can locally execute code on a system to infer the values of data otherwise protected by architectural mechanisms.”Patch now! VMWare escape flaws are so serious even end-of-life software gets a fix VMware ESXi, Workstation, and Fusion updates address multiple security vulnerabilities (CVE-2024-22252, CVE-2024-22253, CVE-2024-22254, CVE-2024-22255) “VMWare’s decision to offer fixes for end-of-life software is because the vulnerabilities patched in these updates are escape flaws that allow a computer program to breack of the confines of a VM and affect the host operating system. Specifically, an attacker with privileged access, such as root or administrator, on a guest VM can access the hypervisor on the host.”" }, { "title": "TID-209", "url": "/threats/TID-209.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-209: Host Can Manipulate Guest Virtual MachinesThreat DescriptionIf a threat actor can access a hypervisor’s host infrastructure, such as through existing management interfaces, they could use ...", "content": "TID-209: Host Can Manipulate Guest Virtual MachinesThreat DescriptionIf a threat actor can access a hypervisor’s host infrastructure, such as through existing management interfaces, they could use that access to manipulate associated guest/virtualized systems. Since the hypervisor runs underneath the virtual machines, this threat will go undetected by the individual guest environments.Threat Maturity and EvidenceObserved Adversary BehaviorSandworm Disrupts Power in Ukraine Using a Novel Attack Against Operational Technology “Sandworm gained access to the OT environment through a hypervisor that hosted a supervisory control and data acquisition (SCADA) management instance for the victim’s substation environment…On October 10, the actor leveraged an optical disc (ISO) image named “a.iso” to execute a native MicroSCADA binary in a likely attempt to execute malicious control commands to switch off substations.”Bad VIB(E)s Mandiant Discoveries Researchers at Mandiant discovered adversarial usage of malware that runs on VM hosting machines. The malware is able to “1) maintain persistent administrative access to the hypervisor; 2) send commands to the hypervisor that will be routed to the guest VM for execution; 3) transfer files between the ESXi hypervisor and guest machines running beneath it; 4) tamper with logging services on the hypervisor; 5) execute arbitrary commands from one guest VM to another guest VM running on the same hypervisor”VMware ESXi Zero-Day Used by Chinese Espionage Actor to Perform Privileged Guest Operations on Compromised Hypervisors “Exploiting a zero-day vulnerability (CVE-2023-20867) that enabled the execution of privileged commands across Windows, Linux, and PhotonOS (vCenter) guest VMs without authentication of guest credentials from a compromised ESXi host and no default logging on guest VMs”CWECWE-306: Missing Authentication for Critical Function “The product does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.”CVECVE-2023-20867 “A fully compromised ESXi host can force VMware Tools to fail to authenticate host-to-guest operations, impacting the confidentiality and integrity of the guest virtual machine.”" }, { "title": "TID-210", "url": "/threats/TID-210.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-210: Device Vulnerabilities UnpatchableThreat DescriptionThreat actors will frequently target device components, like firmware, that have already known vulnerabilities instead of expending the ...", "content": "TID-210: Device Vulnerabilities UnpatchableThreat DescriptionThreat actors will frequently target device components, like firmware, that have already known vulnerabilities instead of expending the effort to discover new ones. If a device cannot update its firmware, especially upon the discovery of a vulnerability, threat actors may be able to target these vulnerabilities. This is because a vulnerability that is found once will be exploitable on all devices running that firmware in perpetuity. Threat actors’ ability to achieve their goals will depend on the nature of the unpatched vulnerability.If identified threats cannot be mitigated due to the inability to disable or update vulnerable components, the device will remain vulnerable. This may also be the result of the device reaching its End-of-Service/Support date, where it is no longer being supported by the vendor.Threat Maturity and EvidenceKnown Exploitable WeaknessRegarding Unit 42 New Mirai Variant Targeting Network Security Devices Some of the IoT devices targeted by the Mirai botnet could not be patched because the device had reached the vendor stated End of Service/Support date.CWECWE-1277: Firmware Not Updateable “The product does not provide its users with the ability to update or patch its firmware to address any vulnerabilities or weaknesses that may be present.”CWE-1329: Reliance on Component That is Not Updateable “The product contains a component that cannot be updated or patched in order to remove vulnerabilities or significant bugs.”CVE" }, { "title": "TID-211", "url": "/threats/TID-211.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-211: Device Allows Unauthenticated Firmware InstallationThreat DescriptionIf a device does not have a mechanism to authenticate firmware updates, a threat actor may be able to install malicious...", "content": "TID-211: Device Allows Unauthenticated Firmware InstallationThreat DescriptionIf a device does not have a mechanism to authenticate firmware updates, a threat actor may be able to install malicious or corrupt firmware on the device. In such cases, an adversary may craft a customized or maliciously modified firmware update package that, if properly formed, the device will install it without challenge. The unauthorized firmware could then be used to (i) “brick” the device and prevent it from being reset, (ii) install malicious logic on the device, including to gain persistence, or (iii) enable access to ease reverse engineering the device to identify remotely exploitable vulnerabilities, depending on how the firmware was formed and how the target device responds to it. Devices that perform only error checking of update packages prior to installation (e.g., parity checks, hash checks without a cryptographic signature, etc.) will be susceptible to this threat.This threat also includes any firmware authentication mechanisms that are not enforced on the device. If devices don’t check firmware integrity/download command authenticity on-device, threat actors may be able to falsely attest that their firmware is secure, thereby bypassing firmware integrity checks. One mechanism through which threat actors could perform this action is by taking advantage of a device’s reliance on a separate management device or service to check firmware. Threat actors may be able to spoof the management device firmware check and successfully initiate a malicious firmware download.Threat Maturity and EvidenceObserved Adversary BehaviorEQUATION GROUP: QUESTIONS AND ANSWERS “Although the implementation of their malware systems is incredibly complex, surpassing even Regin in sophistication, there is one aspect of the EQUATION group’s attack technologies that exceeds anything we have ever seen before. This is the ability to infect the hard drive firmware… The plugin supports two main functions: reprogramming the HDD firmware with a custom payload from the EQUATION group, and providing an API into a set of hidden sectors (or data storage) of the hard drive. This achieves several important things: Extreme persistence that survives disk formatting and OS reinstall. an invisible, persistent storage hidden inside the hard drive.”ATT&CK Technique: System Firmware (T0857)Procedure Example: 2015 Ukraine Electric Power Attack (C0028) “During the 2015 Ukraine Electric Power Attack, Sandworm Team overwrote the serial-to-ethernet gateways with custom firmware to make systems either disabled, shutdown, and/or unrecoverable.”Proof of ConceptOn the recent vulnerability in Diebold Nixdorf ATMs Researchers from Positive Technologies were able to demonstrate that it was possible to exploit a vulnerability that allowed them to upload valid firmware without a valid encryption key. From there, attackers or researchers would be able to modify the ATM firmware however they like.CWECWE-306: Missing Authentication for Critical Function “The product does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.”CVERockwell Automation Micrologix Remote Code Execution - CVE-2015-6492 Researchers at CyberX Threat Intelligence developed custom firmware that allowed them to perform memory dumps. Through these memory dumps, they were able to find memory vulnerabilities that allowed them to develop remote code execution exploits for Rockwell Automatic Micrologix controllers. They were then able to upload malicious firmware to the device." }, { "title": "TID-212", "url": "/threats/TID-212.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-212: FW/SW Update Integrity Shared Secrets ExtractionThreat DescriptionSome devices utilize a shared secret authentication scheme to verify firmware updates. This is an improvement over unauthe...", "content": "TID-212: FW/SW Update Integrity Shared Secrets ExtractionThreat DescriptionSome devices utilize a shared secret authentication scheme to verify firmware updates. This is an improvement over unauthenticated updates (as in TID-211) and can be coupled with or implemented as symmetric key encryption for added confidentiality. This process requires the shared secret to be present on the device for verification (or decryption). Often the same shared secret will be used across many or all examples of that model device, therefore if the secret is compromised on one device it makes all others vulnerable. A threat actor may extract the secret via various means then use it to fabricate a malicious firmware update that is accepted by all devices that use the same integrity mechanism and shared secret.Malicious firmware or software could then be installed to (i) “brick” the device and prevent it from being reset, (ii) install malicious logic on the device, including to gain persistence, or (iii) enable access to ease reverse engineering the device to identify remotely exploitable vulnerabilities on the device.Threat Maturity and EvidenceProof of ConceptSiemens SIMATIC S7-1500 Series Allow for Bypass of All Protected Boot Features “The Siemens S7-1500 series PLCs implement a boot-time firmware validation scheme using a combination of hardware-enabled firmware decryption and binary integrity validation in the Siemens ADONIS operating system. Multiple architectural vulnerabilities exist which allow attackers to bypass all protected boot features, resulting in persistent arbitrary modification of operating code and data. With physical access to a single device, attackers can exploit the vulnerabilities to generate valid AES keys for most of the S7-1500 series firmwares, including the one modified by attackers. The custom-modified firmware can be authenticated and decrypted by the original boot process. By flashing this malicious firmware on a target device, either physically or by exploiting an existing remote code execution vulnerability, attackers could persistently gain arbitrary code execution and potentially circumvent any official security and firmware updates, without the user’s knowledge.”CWECVECVE-2022-38773 “Affected devices do not contain an Immutable Root of Trust in Hardware. With this the integrity of the code executed on the device can not be validated during load-time. An attacker with physical access to the device could use this to replace the boot image of the device and execute arbitrary code.”" }, { "title": "TID-213", "url": "/threats/TID-213.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-213: Faulty FW/SW Update Integrity VerificationThreat DescriptionTo avoid the weaknesses of a shared secret verification (see TID-212), devices may utilize a digital signature verification sche...", "content": "TID-213: Faulty FW/SW Update Integrity VerificationThreat DescriptionTo avoid the weaknesses of a shared secret verification (see TID-212), devices may utilize a digital signature verification scheme based on asymmetric public key cryptography. However, if the device does not correctly verify a firmware/software signature correctly, a threat actor can bypass the device’s authenticity checking mechanisms to upload malicious or corrupt version. The unauthorized firmware could “brick” the device, preventing it from being reset. This could also be used to install malicious logic on the device.NOTE: firmware/software signature here refers to processes that use cryptographic keys to verify firmware integrity and origin. These can include keyed hashes and/or asymmetric key signing. This does not include encrypting firmware with no other integrity verification mechanisms in-place.Threat Maturity and EvidenceKnown Exploitable WeaknessKEV - CVE-2023-41991 “Apple iOS, iPadOS, macOS, and watchOS contain an improper certificate validation vulnerability that can allow a malicious app to bypass signature validation.”CWECWE-347: Improper Verification of Cryptographic Signature “The product does not verify, or incorrectly verifies, the cryptographic signature for data.”CVECVE-2021-43394 “STMicroelectronics STSAFE-J 1.1.4, J-SAFE3 1.2.5, and J-SIGN sometimes allow attackers to abuse signature verification. This is associated with the ECDSA signature algorithm on the Java Card J-SAFE3 and STSAFE-J platforms exposing a 3.0.4 Java Card API…”CVE-2023-33768 “Incorrect signature verification of the firmware during the Device Firmware Update process of Belkin Wemo Smart Plug WSP080 v1.2 allows attackers to cause a Denial of Service (DoS) via a crafted firmware file.”Cisco IOS XE Software Digital Signature Verification Bypass Vulnerability - CVE-2020-3209 “A vulnerability in software image verification in Cisco IOS XE Software could allow an unauthenticated, physical attacker to install and boot a malicious software image or execute unsigned binaries on an affected device.The vulnerability is due to an improper check on the area of code that manages the verification of the digital signatures of system image files during the initial boot process. An attacker could exploit this vulnerability by loading unsigned software on an affected device. A successful exploit could allow the attacker to install and boot a malicious software image or execute unsigned binaries on the targeted device.”CVE-2023-41991 “A certificate validation issue was addressed. This issue is fixed in macOS Ventura 13.6, iOS 16.7 and iPadOS 16.7. A malicious app may be able to bypass signature validation. Apple is aware of a report that this issue may have been actively exploited against versions of iOS before iOS 16.7.”" }, { "title": "TID-214", "url": "/threats/TID-214.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-214: Secrets Extracted from Device Root of TrustThreat DescriptionSome device have mutable or immutable secure Roots of Trust (ROTs) that may store keys or secrets. If the device has a ROT mech...", "content": "TID-214: Secrets Extracted from Device Root of TrustThreat DescriptionSome device have mutable or immutable secure Roots of Trust (ROTs) that may store keys or secrets. If the device has a ROT mechanism to validate the authenticity of the firmware/software, the ROT can be either a software or hardware mechanisms, such as a Trusted Platform Module (TPM), firmware TPM (fTPM), Secure Element, or similar security module. If a threat actor can access authentication material on the ROT, such as the keys or other secrets, they can potentially use them to sign a malicious version of firmware/software which can then be installed on the device.Threat Maturity and EvidenceProof of ConceptUprooting Trust: Learnings from an Unpatchable Hardware Root-of-Trust Vulnerability in Siemens S7-1500 PLCs “Specifically, this assessment is conducted by uncovering novel vulnerabilities related to the discrete RoT implementation on the Siemens S7-1500 series Programmable Logic Controllers (PLCs). Our findings are cautionary evidence of how flawed assumptions related to RoT implementation may allow malicious actors to spoof authentication credentials, re-encrypt firmware, and ultimately gain covert, privileged control over these devices without invasive or destructive practices.”100 Seconds of Solitude: Defeating Cisco Trust Anchor With FPGA Bitstream Shenanigans “A vulnerability in the logic that handles access control to one of the hardware components in Cisco’s proprietary Secure Boot implementation could allow an authenticated, local attacker to write a modified firmware image to the component. This vulnerability affects multiple Cisco products that support hardware-based Secure Boot functionality.”faulTPM: Exposing AMD fTPMs’ Deepest Secrets “In this paper, we show that AMD’s fTPMs are vulnerable to physical attacks against their execution environment: the AMD-SP. Our attack utilizes the AMD-SP’s vulnerability to voltage fault injection attacks to extract a chip-unique secret from the targeted CPU. This secret is subsequently used to derive the storage and integrity keys protecting the fTPM’s non-volatile (NV) data stored on the Basic Input/Output System (BIOS) flash chip.”CWECWE-1326: Missing Immutable Root of Trust in Hardware “A missing immutable root of trust in the hardware results in the ability to bypass secure boot or execute untrusted or adversarial boot code.”CVECVE-2022-38773 “Affected devices do not contain an Immutable Root of Trust in Hardware. With this the integrity of the code executed on the device can not be validated during load-time. An attacker with physical access to the device could use this to replace the boot image of the device and execute arbitrary code.”" }, { "title": "TID-215", "url": "/threats/TID-215.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-215: Unencrypted SW/FW UpdatesThreat DescriptionIf the firmware/software update is not encrypted at rest in storage it can be reverse engineered to identify potential vulnerabilities or extract...", "content": "TID-215: Unencrypted SW/FW UpdatesThreat DescriptionIf the firmware/software update is not encrypted at rest in storage it can be reverse engineered to identify potential vulnerabilities or extract other information needed to protect devices (e.g., passwords, cryptographic keys). Firmware/software updates can often be directly downloaded from the Internet and reverse engineered, however, firmware/software updates that are unencrypted in transit may also be intercepted and analyzed over-the-wire.Threat Maturity and EvidenceProof of Concept Reverse Engineering Obfuscated Firmware for Vulnerability Analysis Nozomi researchers demonstrated how the ability to reverse engineer firmware gives attackers the ability to find novel vulnerabilities, or the presence of older vulnerabilities, on a given device.CWECWE-311: Missing Encryption of Sensitive Data “The product does not encrypt sensitive or critical information before storage or transmission.”CVE" }, { "title": "TID-216", "url": "/threats/TID-216.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-216: Firmware Update Rollbacks AllowedThreat DescriptionFirmware updates will oftentimes include fixes to security vulnerabilities, meaning that past versions will contain security threats to t...", "content": "TID-216: Firmware Update Rollbacks AllowedThreat DescriptionFirmware updates will oftentimes include fixes to security vulnerabilities, meaning that past versions will contain security threats to the devices. If a threat actor can initiate a firmware update on the device, they may be able to “upgrade” to a previous firmware version with known vulnerabilities. By completing an “upgrade” to a version with vulnerabilities, the threat actor could then potentially exploit that device to gain additional access or privileges.Threat Maturity and EvidenceKnown Exploitable WeaknessChina APT Cracks Cisco Firmware in Attacks Against the US and Japan Threat group BlackTech (Palmerworm, Temp.Overboard, Circuit Panda, and Radio Panda) has been performing firmware downgrade attacks. Once the firmware is downgraded, BlackTech can leverage older vulnerabilities to “hot patch old firmware in memory” with custom firmware code. They then can achieve persistence and pivot from “smaller, international subsidiaries to headquarters of affected organizations.”Proof of ConceptPT-2021-01: Encryption bypass when downloading a firmware update in Diebold-Nixdorf CMDv5 “With access to the dispenser controller USB port, an attacker can install an outdated or modified firmware version (with malicious content) to bypass the encryption and withdraw cash.”CWECVECVE-2018-9099 “Encryption bypass when downloading a firmware update in Diebold-Nixdorf CMDv5” The researches demonstrated this exploit by loading outdated and vulnerable firmware." }, { "title": "TID-217", "url": "/threats/TID-217.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-217: Remotely Initiated Updates Can Cause DoSThreat DescriptionWhen firmware/software update process is initiated on a device, it may enter a different operational mode where it stops performin...", "content": "TID-217: Remotely Initiated Updates Can Cause DoSThreat DescriptionWhen firmware/software update process is initiated on a device, it may enter a different operational mode where it stops performing key functions, including networking, data collection, or control functions. Therefore a threat actor could remotely initiate the firmware/software update to cause a denial of service on the device.Threat Maturity and EvidenceObserved Adversary BehaviorATT&CK Technique: Activate Firmware Update Mode (T0800) Procedure Example: Industroyer (S0604) “The Industroyer SIPROTEC DoS module places the victim device into firmware update mode. This is a legitimate use case under normal circumstances, but in this case is used the adversary to prevent the SIPROTEC from performing its designed protective functions. As a result the normal safeguards are disabled, leaving an unprotected link in the electric transmission.”CWECWE-400: Uncontrolled Resource Consumption “The product does not properly control the allocation and maintenance of a limited resource, thereby enabling an actor to influence the amount of resources consumed, eventually leading to the exhaustion of available resources.”CVECRASHOVERRIDE - CVE-2015-5374 “Specially crafted packets sent to port 50000/UDP could cause a denial-of-service of the affected device. A manual reboot may be required to recover the service of the device.” “The DoS condition places the victim SIPROTEC device in “firmware update” mode. The effect triggered is practical and useful in legitimate firmware update instances given the limited resources available to legacy SIPROTEC devices (especially for memory).”" }, { "title": "TID-218", "url": "/threats/TID-218.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-218: Operating System Susceptible to RootkitThreat DescriptionA threat actor may be able to install a rootkit that can manipulate the operating system (OS). Rootkits can evade OS protections b...", "content": "TID-218: Operating System Susceptible to RootkitThreat DescriptionA threat actor may be able to install a rootkit that can manipulate the operating system (OS). Rootkits can evade OS protections by installing themselves at the same privilege-level as the OS. A threat actor can use a rootkit to maintain persistence on the device, evade detection, or execute malicious programs/logic.Threat Maturity and EvidenceKnown Exploitable WeaknessATT&CK Technique: Rootkit (T0851) Procedure Example: Stuxnet (S0603) “One of Stuxnet’s rootkits is contained entirely in the fake s7otbxdx.dll. In order to continue existing undetected on the PLC it needs to account for at least the following situations: read requests for its own malicious code blocks, read requests for infected blocks (OB1, OB35, DP_RECV), and write requests that could overwrite Stuxnets [sic] own code. Stuxnet contains code to monitor and intercept these types of requests. The rootkit modifies these requests so that Stuxnets [sic] PLC code is not discovered or damaged.”Proof of ConceptGhost in the PLC Researchers Abbasi and Hasemi were able to create the Ghost in the PLC rootkit. This rootkit is able to embed itself in a PLC with detection evasion mechanisms. It is then able to achieve arbitrary read/write in registers with/without root access.Air Force Institute of Technology (AFIT) “Researchers with the U.S. Air Force Institute of Technology (AFIT) have created a prototype rootkit that can sit undetected in the firmware of a programmable logic controller (PLC) device and corrupt utility and plant floor operations.”CWECWE-693: Protection Mechanisms Failure (Pillar) “The product does not use or incorrectly uses a protection mechanism that provides sufficient defense against directed attacks against the product.”CVE" }, { "title": "TID-219", "url": "/threats/TID-219.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-219: OS/Kernel Privilege EscalationThreat DescriptionOperating Systems and Kernels frequently run at the highest levels of permissions. If processes with lower permissions are able to exploit a...", "content": "TID-219: OS/Kernel Privilege EscalationThreat DescriptionOperating Systems and Kernels frequently run at the highest levels of permissions. If processes with lower permissions are able to exploit a vulnerability in the OS or Kernel (such as a vulnerability enabled by TID-206), they may be able to raise the privileges of their process. If a threat actor were to exploit this vulnerability, they may be able to raise the permissions of a malicious process, thereby granting themselves greater access to the device.Threat Maturity and EvidenceObserved Adversary BehaviorATT&CK Technique: Exploitation for Privilege Escalation (T0890) Procedure Example: Triton (S1009) “Triton leverages a previously-unknown vulnerability affecting Tricon MP3008 firmware versions 10.010.4 allows an insecurely-written system call to be exploited to achieve an arbitrary 2-byte write primitive, which is then used to gain supervisor privileges.”CWECWE-250: Execution with Unnecessary Privileges “The product performs an operation at a privilege level that is higher than the minimum level required, which creates new weaknesses or amplifies the consequences of other weaknesses.”CVE" }, { "title": "TID-220", "url": "/threats/TID-220.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-220: Unpatchable Hardware Root of TrustThreat DescriptionHardware roots of trust can be used to support many desirable device security functions, such as secure key and secret storage, secure b...", "content": "TID-220: Unpatchable Hardware Root of TrustThreat DescriptionHardware roots of trust can be used to support many desirable device security functions, such as secure key and secret storage, secure boot, and firmware integrity measurement. These functions often rely on the root of trust being immutable, preventing a threat actor from making changes to code or data in the root of trust that would undermine the security functions built atop them. However, if the root of trust implementation is flawed, immutability prevents the revocation and replacement of compromised keys, and prevents patching vulnerable code. Therefore, if threat actors have access to a mechanism to obtain the secret data or code, and/or those secrets and code are shared over multiple devices and threat actors can obtain them, then devices will remain vulnerable past threat disclosure and may have to be removed from operation and replaced with new patched versions.Threat Maturity and EvidenceKnown Exploitable WeaknessGlitching the Switch The researchers show how they identified an exploitable flaw in the immutable 1st stage boot ROM code of the Nvidia Tegra X1 SoC, which the Nintendo Switch game console is built upon. The secret boot ROM code serves as the root of trust for secure verified boot on the Tegra X1 platform. A buffer overflow vulnerability in the recovery mode of the boot ROM allows a threat actor to bypass firmware verification and execute unauthorize custom or modified firmware on the device. Because the flawed code is stored in unmodifiable memory within the X1 system-on-chip, this vulnerability cannot be patched in hardware revisions that contain it and could only be fixed on newly manufactured Switch consoles.Proof of ConceptUprooting Trust: Learnings from an Unpatchable Hardware Root-of-Trust Vulnerability in Siemens S7-1500 PLCs “The vulnerable ATECC-based RoT hardware implementation is deployed across the Siemens S7-1500 series product line. Because each device is loaded with the exact same cryptographic material used to generate decryption seeds and keys, adversaries may abuse the hardware RoT to decrypt, modify, and re-encrypt firmware for all devices within this family. For example, an ATECC RoT chip may be removed or instrumented from one specific S7-1500 series device, and used to generate valid tampered firmware for a separate device.”CWECWE-1329: Reliance on Component That is Not Updateable “The product contains a component that cannot be updated or patched in order to remove vulnerabilities or significant bugs.”CVE" }, { "title": "TID-221", "url": "/threats/TID-221.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-221: Authentication Bypass By Message ReplayThreat DescriptionSome devices will allow for authentication over the network, but do not implement mechanisms (i.e. nonces, timestamps) to ensure th...", "content": "TID-221: Authentication Bypass By Message ReplayThreat DescriptionSome devices will allow for authentication over the network, but do not implement mechanisms (i.e. nonces, timestamps) to ensure that messages containing credentials cannot be reused. Devices like these are potentially vulnerable to replay attacks. In these attacks, threat actors may be able to take legitimate packets that were sent over the network, capture them, and send them again to the device. If the device accepts these packets, threat actors may be able to initiate unauthorized actions. Additionally, if threat actors are able to edit the contents of those packets, they can potentially control the device remotely.Threat Maturity and EvidenceObserved Adversary BehaviorATT&CK T1212 Exploitation for Credential Access “Another example of this is replay attacks, in which the adversary intercepts data packets sent between parties and then later replays these packets. If services don’t properly validate authentication requests, these replayed packets may allow an adversary to impersonate one of the parties and gain unauthorized access or privileges.”CWECWE-294: Authentication Bypass by Capture-replay “A capture-replay flaw exists when the design of the product makes it possible for a malicious user to sniff network traffic and bypass authentication by replaying it to the server in question to the same effect as the original message (or with minor changes).”CVE" }, { "title": "TID-222", "url": "/threats/TID-222.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-222: Critical System Service May Be DisabledThreat DescriptionVarious devices and associated services are necessary to support communications and connections on a network. If a key service is d...", "content": "TID-222: Critical System Service May Be DisabledThreat DescriptionVarious devices and associated services are necessary to support communications and connections on a network. If a key service is disabled, terminated, or reconfigured, a threat actor can disrupt or disable communications on a network. This could occur on various network equipment, such as switches, firewalls, or routers, along with other devices which may have dedicated processes to facilitate communication with specific protocols or physical mediums (e.g., serial).Threat Maturity and EvidenceObserved Adversary BehaviorATT&CK Technique: Service Stop (T0881) Procedure Example: Industroyer (S0604) “Industroyer has the capability to stop a service itself, or to login as a user and stop a service as that user.”Procedure Example: Industroyer2 (S1072) “Industroyer2 has the capability to terminate specified processes (i.e., PServiceControl.exe and PService_PDD.exe) and rename each process to prevent restart. These are defined through a hardcoded configuration.”CWECWE-306 Missing Authentication for Critical Function “The product does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.”CWE-15: External Control of System or Configuration Setting “One or more system settings or configuration elements can be externally controlled by a user.”CVE" }, { "title": "TID-223", "url": "/threats/TID-223.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-223: System Susceptible to RAM ScrapingThreat DescriptionIf the threat actor can obtain sufficient privileges on the devices, they may be able to install runtime tools to directly extract the c...", "content": "TID-223: System Susceptible to RAM ScrapingThreat DescriptionIf the threat actor can obtain sufficient privileges on the devices, they may be able to install runtime tools to directly extract the contents of some or all of the system RAM. This can grant the actor access to the internal state of other applications executing on the device as they process potentially sensitive data (e.g., password, keys, credentials, financial data, PII, etc.) even if that data is never committed to storage in a file or database. If the access extends to physical RAM, this can enable the threat actor to bypass other inter-process security boundaries created by the operating system.Threat Maturity and EvidenceKnown Exploitable WeaknessHow RAM Scrapers Work: The Sneaky Tools Behind the Latest Credit Card Hacks “There are more than a dozen RAM scrapers sold in the underground market these days. There’s Dexter, Soraya, ChewBacca and BlackPOS to name a few… Once on a targeted system, RAM scrapers work by examining the list of processes that are running on the system and inspecting the memory for data that matches the structure of credit card data, such as the account number, expiration date, and other information stored on a card’s magnetic stripe. Some scrapers are efficient and grab only the golden numbers the attackers seek; others are more sloppy and grab a lot of dirt with their gold.”CWECVE" }, { "title": "TID-224", "url": "/threats/TID-224.html", "categories": "System Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-224: Excessive Access via Software Diagnostic FeaturesThreat DescriptionIf a device has debugging capabilities (e.g., diagnostic tools, debug logs, etc.) that are not authenticated or can be ac...", "content": "TID-224: Excessive Access via Software Diagnostic FeaturesThreat DescriptionIf a device has debugging capabilities (e.g., diagnostic tools, debug logs, etc.) that are not authenticated or can be accessed in unintended ways, it may be possible for a threat actor to attach to these debuggers. Debuggers frequently have privileged access, which would give the threat actors increased access over the device.Threat Maturity and EvidenceObserved Adversary BehaviorATT&CK T1623 Command and Scripting Interpreter “Most systems come with some built-in command-line interface and scripting capabilities, for example, Android is a UNIX-like OS and includes a basic Unix Shell that can be accessed via the Android Debug Bridge (ADB)”Proof of ConceptATM logic attacks: scenarios, 2018 “Starting the ATM operating system in a special mode can offer a way to bypass security… After starting the ATM in debug mode and connecting to the COM ports, an attacker can seize full control of the ATM by using the WinDbg utility.”CWECWE-1295: Debug Messages Revealing Unnecessary Information “The product fails to adequately prevent the revealing of unnecessary and potentially sensitive system information within debugging messages.”CVE" }, { "title": "TID-301", "url": "/threats/TID-301.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-301: Applications Binaries ModifiedThreat DescriptionA threat actor could modify application-level binaries or libraries on the device to introduce unauthorized code, maintain persistence, or e...", "content": "TID-301: Applications Binaries ModifiedThreat DescriptionA threat actor could modify application-level binaries or libraries on the device to introduce unauthorized code, maintain persistence, or evade detection. This could also include the modification of runtime libraries used to support the execution of programs, along with key PLC function blocks used to structure the execution of application function blocks, such as organizational blocks.Threat Maturity and EvidenceObserved Adversarial TechniqueATT&CK Technique: Modify Controller Tasking (T0821) Procedure Example: Stuxnet (S0603) “Stuxnet infects OB1 so that its malicious code sequence is executed at the start of a cycle. It also infects OB35. OB35 acts as a watchdog, and on certain conditions, it can stop the execution of OB1.”CWECWE-862: Missing Authorization “The product does not perform an authorization check when an actor attempts to access a resource or perform an action.”CVE" }, { "title": "TID-302", "url": "/threats/TID-302.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-302: Install Untrusted ApplicationThreat DescriptionA threat actor can install a malicious program to the device to manipulate its operations or prevent the device from operating as expected. D...", "content": "TID-302: Install Untrusted ApplicationThreat DescriptionA threat actor can install a malicious program to the device to manipulate its operations or prevent the device from operating as expected. Devices can utilize a variety of different approaches to support the download, modification, and execution of programs/logic. For example, some devices might support program downloads through traditional operating system interfaces (e.g., Telnet, SSH, RDP), while other devices, such as PLCs, often use proprietary interfaces to deploy and execute IEC 61131 based logic programs. Devices are often dependent on a remote system, such as a Windows workstations, with a vendor-specific application program or IDE to develop and transfer the programs to the device. However, devices often assume that all code originates from that trusted program/IDE, and therefore do not perform any integrity checking of the code before downloading or executing it.Threat Maturity and EvidenceObserved Adversarial TechniqueATT&CK Technique: Program Download (T0843) Procedure Example: Triton (S1009) “Triton leveraged the TriStation protocol to download programs onto Triconex Safety Instrumented System”.Procedure Example: Incontroller (S1045) “The Incontroller software was able to perform program downloads to a controller through a self-contained API.”CWECWE-494: Download of Code Without Integrity Check “The product downloads source code or an executable from a remote location and executes the code without sufficiently verifying the origin and integrity of the code.”CVE" }, { "title": "TID-303", "url": "/threats/TID-303.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-303: Excessive Trust in Offboard Management/IDE SoftwareThreat DescriptionIf device management is intended to be performed by a dedicated engineering software platform or integrated development...", "content": "TID-303: Excessive Trust in Offboard Management/IDE SoftwareThreat DescriptionIf device management is intended to be performed by a dedicated engineering software platform or integrated development environment (IDE), the threat actor could potentially modify the software platform, such as by manipulating key .dlls, to install malicious code or manipulate the operation of the device. This can provide the threat actor with a mechanism to bypass protections/countermeasures.Threat Maturity and EvidenceObserved Adversarial TechniqueATT&CK Technique: Rootkit (T0851) Procedure Example: Stuxnet (S0603) “Stuxnet has the capability, through malicious .DLLs, to intercept read requests and write requests, include those the could overwrite code on the device”Proof of ConceptApplying a Stuxnet Type Attack to a Modicon PLC “Implementing Stuxnet type attacks on PLC’s from other manufacturers is possible. In the case of the Modicon M340, this porting is easier because the PLC executes ARM bytecode natively (and not proprietary assembly code).This exercise gives us the opportunity to extend M340 functionality by developing automation code directly in C. Now we can perform low level actions which are very difficult to do with other languages (e.g Ladder, Grafcet).We developed a program that allows the changing of logical programs on the fly (no need for recompilation – stop – upload – start steps in Unity)”The Old Switcheroo: Hiding Code on Rockwell Automation PLCs “Team82 decided to test for these Stuxnet-type of attacks on the Rockwell Automation PLC platform. Our research uncovered two vulnerabilities that expose the company’s Logix Controllers and Logix Designer application for engineering workstations to attacks that allow threat actors to stealthily modify automation processes.Programmable logic and predefined variables drive these processes, and changes to either will alter normal operation of the PLC and the process it manages. An attacker with the ability to modify PLC logic could cause physical damage to factories that affect the safety of manufacturing assembly lines, the reliability of robotic devices, or in a much more dramatic example, as we saw with Stuxnet, attackers could damage centrifuges at the core of uranium enrichment at a nuclear facility.”CWECWE-114: Process Control (Class) “Executing commands or loading libraries from an untrusted source or in an untrusted environment can cause an application to execute malicious commands (and payloads) on behalf of an attacker.”CVECVE-2022-1159 “Rockwell Automation Studio 5000 Logix Designer (all versions) are vulnerable when an attacker who achieves administrator access on a workstation running Studio 5000 Logix Designer could inject controller code undetectable to a user.”" }, { "title": "TID-304", "url": "/threats/TID-304.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-304: Manipulate Runtime EnvironmentThreat DescriptionA threat actor can manipulate the runtime environments on a device to maintain persistence on the device and overwrite various functionaliti...", "content": "TID-304: Manipulate Runtime EnvironmentThreat DescriptionA threat actor can manipulate the runtime environments on a device to maintain persistence on the device and overwrite various functionalities, such as protocol handlers. If the application program (which the threat actor can deploy on the device through a program download) has access to memory where the runtime environment and libraries are located, they could overwrite these libraries with malicious code. This is especially risky because runtime environments often must allow the dynamic addition of modules/functions to support user-specific customization or configuration of devices, which may require that the runtime support writeable memory.NOTE: This differs from TID-305 because this threat has a focus on code being used to manipulate the device runtime environment itself. TID-305 on the other hand pertains to a malicious program itself being used to perform device actions.Threat Maturity and EvidenceProof of ConceptSecurity Issues In Compiled PLC Logic (CoDeSys & ProConOs) At S4x23, Reid Wightman demonstrated that if memory space is shared between program runtime, program logic, and other device functions such as network handling, it is possible to create malicious programs that can manipulate a device’s runtime environment from the application program.CWECWE-119: Improper Restriction of Operations within the Bounds of a Memory Buffer “The product performs operations on a memory buffer, but it can read from or write to a memory location that is outside of the intended boundary of the buffer.”CVECODESYS Security Advisory 2023-04 (CVE-2022-4046, CVE-2023-28355) “The CODESYS Control V3 runtime system does not restrict the memory accesses of the PLC application code to the PLC application data and does not sufficiently check the integrity of the application code by default. This could be exploited by authenticated PLC programmers.”" }, { "title": "TID-305", "url": "/threats/TID-305.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-305: Program Executes Dangerous System CallsThreat DescriptionIf the device allows the downloading and execution of native binaries on the device, a threat actor can deploy a malicious program ...", "content": "TID-305: Program Executes Dangerous System CallsThreat DescriptionIf the device allows the downloading and execution of native binaries on the device, a threat actor can deploy a malicious program that leverages the environment’s privileges to gain unwanted or excessive access to the device, such as through “dangerous” system calls. These system calls could be used to manipulate the device’s firmware, maintain persistence, execute unwanted logic, or obtain a C2 channel.Additionally, the device may assume the program comes from a trusted integrated development environment (IDE), and therefore does not restrict the privileges or system calls the program can access. However, if the threat actor compiles the program without the IDE, they can violate this assumption.NOTE: This differs from TID-304 because this threat has a focus on a malicious program itself being used to perform device actions. TID-304 on the other hand pertains to code being used to manipulate the device runtime environment itself.Threat Maturity and EvidenceObserved Adversarial TechniqueATT&CK Technique: Exploitation for Privilege Escalation (T0890) Procedure Example: Triton (S1009) “Triton leverages a previously-unknown vulnerability affecting Tricon MP3008 firmware versions 10.010.4 allows an insecurely-written system call to be exploited to achieve an arbitrary 2-byte write primitive, which is then used to gain supervisor privileges.”ATT&CK Technique: Native API (T0834) Procedure Example: Stuxnet (S0603) “Stuxnet calls system function blocks which are part of the operating system running on the PLC. They’re used to execute system tasks, such as reading the system clock (SFC1) and generating data blocks on the fly.”CWE[CWE-250: Execution with Unnecessary Privileges (Base)] “The product performs an operation at a privilege level that is higher than the minimum level required, which creates new weaknesses or amplifies the consequences of other weaknesses.”CVECVE-2018-8872 “In Schneider Electric Triconex Tricon MP model 3008 firmware versions 10.0-10.4, system calls read directly from memory addresses within the control program area without any verification. Manipulating this data could allow attacker data to be copied anywhere within memory.”" }, { "title": "TID-306", "url": "/threats/TID-306.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-306: Sandboxed Environments EscapedThreat DescriptionWhile restricting the execution of external programs within a sandboxed execution environment can mitigate the threat of programs having exc...", "content": "TID-306: Sandboxed Environments EscapedThreat DescriptionWhile restricting the execution of external programs within a sandboxed execution environment can mitigate the threat of programs having excessive privileges or memory access, vulnerabilities within that environment could be exploited to escape the sandbox. This would allow the threat actor to escalate their privileges to more broadly manipulate the device’s operation and evade detections.Threat Maturity and EvidenceProof of ConceptThe Race to Native Code Execution in PLCs Claroty demonstrated in their research that it was possible to break out of the runtime environment on a PLC and execute code natively in protected areas of memory. “Escaping the sandbox means an attacker would be able to read and write from anywhere on the PLC, and could patch an existing VM opcode in memory with malicious code to root the device.”CWECWE-693: Protection Mechanism Failure “The product does not use or incorrectly uses a protection mechanism that provides sufficient defense against directed attacks against the product.”CVECVE-2020-15782 “A vulnerability has been identified in [Siemens devices]… Affected devices are vulnerable to a memory protection bypass through a specific operation. A remote unauthenticated attacker with network access to port 102/tcp could potentially write arbitrary data and code to protected memory areas or read sensitive data to launch further attacks.”" }, { "title": "TID-307", "url": "/threats/TID-307.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-307: Device Code Representations InconsistentThreat DescriptionMany devices that allow the execution of custom application programs, such as IEC 61131 based programs, also support “program uplo...", "content": "TID-307: Device Code Representations InconsistentThreat DescriptionMany devices that allow the execution of custom application programs, such as IEC 61131 based programs, also support “program uploads” to extract the running code from the device for various diagnostic functions. To support the program upload function, the device must provide the IDE with machine readable and human-presentable source code, rather than the executable compiled code. Therefore, the device must store two copies of the code, the source code (used to inform program upload function) and the executed compiled code. If a threat actor can modify the source code in memory, it will prevent the program upload function from accurately uploading/reporting the actual code executing on the device and allow any later downloaded malicious code to stay undetected.Threat Maturity and EvidenceProof of ConceptThe Old Switcheroo: Hiding Code on Rockwell Automation PLCs Claroty researchers were able to edit the code representation that gets uploaded to the EWS during a program upload without having their malicious machine-code also getting uploaded. This resulted in operators seeing code after the program upload that wasn’t the actual code on the machine, which was the Claroty malicious machine code.CWECWE-829: Inclusion of Functionality from Untrusted Control Sphere “The product imports, requires, or includes executable functionality (such as a library) from a source that is outside of the intended control sphere.”CVECVE-2022-1161 “An attacker with the ability to modify a user program may change user program code on some ControlLogix, CompactLogix, and GuardLogix Control systems. Studio 5000 Logix Designer writes user-readable program code to a separate location than the executed compiled code allowing an attacker to change one and not the other.”" }, { "title": "TID-308", "url": "/threats/TID-308.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-308: Code Overwritten to Avoid DetectionThreat DescriptionThe threat actor can overwrite a previously deployed/installed malicious program with a dummy program in order to evade the detection o...", "content": "TID-308: Code Overwritten to Avoid DetectionThreat DescriptionThe threat actor can overwrite a previously deployed/installed malicious program with a dummy program in order to evade the detection of the malicious program. This can be used to prevent detection by monitoring tools or engineering software that performs periodic “Program Uploads” to inspect the contents of a program on the device.While some devices utilize error detection codes, such as CRCs or Checksums, these are not cryptographically strong and a threat actor can easily generate a program with the same CRC/Checksum (i.e., by simply padding the program).Threat Maturity and EvidenceObserved Adversarial TechniqueATT&CK Technique: Indicator Removal on Host (T0872) Procedure Example: Triton (S1009) “Triton would reset the controller to the previous state over TriStation and if this failed it would write a dummy program to memory in what was likely an attempt at anti-forensics.”CWECWE-223: Omission of Security-relevant Information “The product does not record or display information that would be important for identifying the source or nature of an attack, or determining if an action is safe.”CWE-778: Insufficient Logging “When a security-critical event occurs, the product either does not record the event or omits important details about the event when logging it.”CVE" }, { "title": "TID-309", "url": "/threats/TID-309.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-309: Device Exploits Engineering WorkstationThreat DescriptionIf the integrated development environment (IDE) or vendor software that is used to manage a device is not sufficiently secure, it c...", "content": "TID-309: Device Exploits Engineering WorkstationThreat DescriptionIf the integrated development environment (IDE) or vendor software that is used to manage a device is not sufficiently secure, it could be exploited or crashed when it connects to the device, such as during a file transfer or program upload. A threat actor could use a compromised device, such as a PLC, to exploit a vulnerability within the engineering software/IDE used to manage that device. This could be used to (i) gain unauthorized access to the workstation, (ii) perform a DoS on the workstation, or (iii) propagate to other devices managed by that workstation.Threat Maturity and EvidenceProof of ConceptEVIL PLC ATTACK: WEAPONIZING PLCS Claroty was able to install a malicious program on the PLC that would infect a connected EWS upon a program upload. In some cases, they were able to achieve arbitrary code execution on the EWS.Denial of Engineering Operations Attacks in Industrial Control Systems “Specifcally, the attacker can deceive the engineering software during attempts to retrieve the ladder logic program from a programmable logic controller (PLC) by manipulating the ladder logic on the PLC, such that the software is unable to process it while the PLC continues to execute it successfully. This attack vector can provide sufficient cover for the attacker’s actual scenario to play out while the owner tries to understand the problem and reestablish positive operational control.”CWECWE-20: Improper Input Validation “The product receives input or data, but it does not validate or incorrectly validates that the input has the properties that are required to process the data safely and correctly.”CVECVE-2021-22289 “Improper Input Validation vulnerability in the project upload mechanism in B&R Automation Studio version >4.0 may allow an unauthenticated network attacker to execute code.”" }, { "title": "TID-310", "url": "/threats/TID-310.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-310: Remotely Accessible Unauthenticated ServicesThreat DescriptionIf an application does not authenticate all connections from a remote device or system, a threat actor can remotely establish ...", "content": "TID-310: Remotely Accessible Unauthenticated ServicesThreat DescriptionIf an application does not authenticate all connections from a remote device or system, a threat actor can remotely establish a connection to the device to access confidential data or make unwanted changes to device status or configuration.Threat Maturity and EvidenceObserved Adversary TechniqueATT&CK Technique: Unauthorized Command Message (T0855) Procedure Example: Industroyer (S0604) “Using its protocol payloads, Industroyer sends unauthorized commands to RTUs to change the state of equipment.”Procedure Example: Industroyer2 (S1072) “Industroyer2 is capable of sending command messages from the compromised device to target remote stations to open data channels, retrieve the location and values of Information Object Addresses (IOAs), and modify the IO state values through Select Before Operate I/O, Select/Execute, and Invert Default State operations.”CWECWE-285: Improper Authorization “The product does not perform or incorrectly performs an authorization check when an actor attempts to access a resource or perform an action.”CVE" }, { "title": "TID-311", "url": "/threats/TID-311.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-311: Default CredentialsThreat DescriptionDevices often include default credentials from the vendor. Default credentials can be changed, but are often overlooked when devices are commissioned....", "content": "TID-311: Default CredentialsThreat DescriptionDevices often include default credentials from the vendor. Default credentials can be changed, but are often overlooked when devices are commissioned. If left unchanged, a threat actor may discover and use these credentials to gain unauthorized access to the device. Non-unique or predictable default credentials can lead to device compromise.Threat Maturity and EvidenceObserved Adversarial TechniqueIRGC-Affiliated Cyber Actors Exploit PLCs in Multiple Sectors, Including U.S. Water and Wastewater Systems Facilities “Since at least November 22, 2023, these IRGC-affiliated cyber actors have continued to compromise default credentials in Unitronics devices.”CWECWE-1392: Use of Default Credentials (Base) “The product uses default credentials (such as passwords or cryptographic keys) for potentially critical functionality.”CWE-1393: Use of Default Password (Base) “The product uses default passwords for potentially critical functionality.”CVEICEFALL - CVE-2022-29962 “The Emerson DeltaV Distributed Control System (DCS) controllers and IO cards through 2022-04-29 misuse passwords. FTP has hardcoded credentials (but may often be disabled in production).”CVE-2021-22681, CISA Alert A hardcoded key in the Studio 5000 Logix Designer software and related PLCs would allow actors who can extract the key from the software to authenticate to controllers without going through the software or normal authentication process." }, { "title": "TID-312", "url": "/threats/TID-312.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-312: Credential Change Mechanism Can Be AbusedThreat DescriptionA device’s credential change mechanisms can be abused to lock out users from their own devices by changing credentials to somethi...", "content": "TID-312: Credential Change Mechanism Can Be AbusedThreat DescriptionA device’s credential change mechanisms can be abused to lock out users from their own devices by changing credentials to something unknown to the legitimate user. This could impair the legitimate user from accessing the device and may also render the device permanently inoperable. This could also be coupled with unwanted device configuration changes before the user is locked out.Threat Maturity and EvidenceObserved Adversarial TechniqueATT&CK Technique: Change Credential (T0892) “A chain of incidents occurred in Germany, where adversaries locked operators out of their building automation system (BAS) controllers by enabling a previously unset BCU key.”ATT&CK Technique: Account Access Removal (T1531) “Accounts may be deleted, locked, or manipulated (ex: changed credentials) to remove access to accounts.”CWECWE-645: Overly Restrictive Account Lockout Mechanism (Base) “The product contains an account lockout protection mechanism, but the mechanism is too restrictive and can be triggered too easily, which allows attackers to deny service to legitimate users by causing their accounts to be locked out.”CVEKunbus PR100088 Modbus Gateway (Update B) | CISA, CVE-2019-6527 “PR100088 Modbus gateway versions prior to Release R02 (or Software Version 1.1.13166) may allow an attacker to be able to change the password for an admin user who is currently or previously logged in, provided the device has not been restarted.”" }, { "title": "TID-313", "url": "/threats/TID-313.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-313: Unauthenticated Session Changes CredentialThreat DescriptionA threat actor can change or reset a password or credential without being authenticated. This can be used by a threat actor to s...", "content": "TID-313: Unauthenticated Session Changes CredentialThreat DescriptionA threat actor can change or reset a password or credential without being authenticated. This can be used by a threat actor to set the credential to a known value and then use this to authenticate to the device.Threat Maturity and EvidenceKnown Exploitable WeaknessATT&CK Technique: Create Account: Local Account (T1136.001) “Adversaries may create a local account to maintain access to victim systems. Local accounts are those configured by an organization for use by users, remote support, services, or for administration on a single system or service.”CWECWE-287: Improper Authentication “When an actor claims to have a given identity, the product does not prove or insufficiently proves that the claim is correct.”CVEKunbus PR100088 Modbus Gateway (Update B) | CISA, CVE-2019-6527 “An attacker may be able change the password for an admin user who is currently or previously logged in, provided the device has not been restarted.”" }, { "title": "TID-314", "url": "/threats/TID-314.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-314: Passwords Can Be Guessed Using Brute-Force AttemptsThreat DescriptionA threat actor could gain unauthorized access by continually guessing passwords. This could be because the device allow...", "content": "TID-314: Passwords Can Be Guessed Using Brute-Force AttemptsThreat DescriptionA threat actor could gain unauthorized access by continually guessing passwords. This could be because the device allows passwords with insufficient entropy, short password lengths, or does not have a mechanism to increase the time it takes to randomly guess passwords, such as password lockouts or cooldowns between guesses.Threat Maturity and EvidenceObserved Adversary BehaviorAPT Cyber Tools Targeting ICS/SCADA Devices “Brute-force Schneider Electric PLC passwords using CODESYS and other available device protocols via UDP port 1740 against defaults or a dictionary word list (Note: this capability may work against other CODESYS-based devices depending on individual design and function, and this report will be updated as more information becomes available);”CWECWE-334: Small Space of Random Values “The number of possible random values is smaller than needed by the product, making it more susceptible to brute force attacks.”CWE-307: Improper Restriction of Excessive Authentication Attempts “The product does not implement sufficient measures to prevent multiple failed authentication attempts within a short time frame, making it more susceptible to brute force attacks.”CVE" }, { "title": "TID-315", "url": "/threats/TID-315.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-315: Password Retrieval Mechanism AbusedThreat DescriptionIf the device includes a password retrieval mechanism, a threat actor could use that mechanism to retrieve a valid credential and then ...", "content": "TID-315: Password Retrieval Mechanism AbusedThreat DescriptionIf the device includes a password retrieval mechanism, a threat actor could use that mechanism to retrieve a valid credential and then access the device. Password retrieval functions are typically intended to be used to support access from dedicated device management tools, but these functions may be reverse engineered and then initiated by the threat actor to gain valid credentials on a device.Threat Maturity and EvidenceProof of ConceptAutomationDirect DirectLOGIC with Serial Communication - CVE-2022-2003, Research By Sam Hanson of Dragos “The product is vulnerable to a specifically crafted serial message to the CPU serial port that will cause the PLC to respond with the PLC password in cleartext. This could allow an attacker to access and make unauthorized changes.”CWECWE-319: Cleartext Transmission of Sensitive Information “The product transmits sensitive or security-critical data in cleartext in a communication channel that can be sniffed by unauthorized actors.”CVECVE-2022-2003 “The product is vulnerable to a specifically crafted serial message to the CPU serial port that will cause the PLC to respond with the PLC password in cleartext. This could allow an attacker to access and make unauthorized changes.”CVE-2022-31205 “The password to access the Web UI can be read from memory using the Omron FINS protocol without any further authentication.”" }, { "title": "TID-316", "url": "/threats/TID-316.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-316: Incorrect Certificate Verification Allows Authentication BypassThreat DescriptionCertificate-based authentication depends on the correct parsing and validation of an X.509 certificate. How...", "content": "TID-316: Incorrect Certificate Verification Allows Authentication BypassThreat DescriptionCertificate-based authentication depends on the correct parsing and validation of an X.509 certificate. However, if the certificate is not properly parsed and all fields are not validated, a threat actor could potentially bypass authentication using a fraudulent certificate.Threat Maturity and EvidenceKnown Exploitable WeaknessCVE-2020-0601 “Microsoft Windows CryptoAPI (Crypt32.dll) contains a spoofing vulnerability in the way it validates Elliptic Curve Cryptography (ECC) certificates. An attacker could exploit the vulnerability by using a spoofed code-signing certificate to sign a malicious executable, making it appear the file was from a trusted, legitimate source. A successful exploit could also allow the attacker to conduct man-in-the-middle attacks and decrypt confidential information on user connections to the affected software. The vulnerability is also known under the moniker of CurveBall.”CVE-2023-41991 “Apple iOS, iPadOS, macOS, and watchOS contain an improper certificate validation vulnerability that can allow a malicious app to bypass signature validation.”CWECVEVulnerability Spotlight: WolfSSL library X.509 Certificate Text Parsing Code Execution Vulnerability “Talos is disclosing TALOS-2017-0293 / CVE 2017-2800, a code execution vulnerability in WolfSSL. WolfSSL is a lightweight SSL/TLS library targeted specifically for embedded and RTOS (Real-Time Operating System) environments, due largely to its small size and performance. WolfSSL is used in a wide range of products including ICS and IoT devices.”Siemens RuggedCom ROX-based Devices Certificate Verification Vulnerability and GnuTLS Certificate Error handling Vulnerability, CVE-2014-0092 “lib/x509/verify.c in GnuTLS before 3.1.22 and 3.2.x before 3.2.12 does not properly handle unspecified errors when verifying X.509 certificates from SSL servers, which allows man-in-the-middle attackers to spoof servers via a crafted certificate.”" }, { "title": "TID-317", "url": "/threats/TID-317.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-317: Predictable Cryptographic KeyThreat DescriptionIf the device does not generate sufficiently random cryptographic primitives, a threat actor could predict or brute-force guess a key to eith...", "content": "TID-317: Predictable Cryptographic KeyThreat DescriptionIf the device does not generate sufficiently random cryptographic primitives, a threat actor could predict or brute-force guess a key to either gain unauthorized access to the device or decrypt a connection. Cryptographic keys that are not generated with random “seed” information, including from Pseudo-Random Number Generators (PRNG), will lack sufficient entropy. For example, researchers have demonstrated that a large number of Internet exposed devices with TLS or SSH services utilized the same RSA moduli, which could be then used to determine the device’s private key and then used to remotely authenticate with the device.Threat Maturity and EvidenceProof of ConceptHeninger, N. et al. “Mining Your Ps and Qs: Detection of Widespread Weak Keys in Network Devices” Researchers demonstrated that many internet connected devices had insufficient randomness in their TLS certificates. Additionaly, many of these devices had the same key as other devices. Lastly, for some of these keys, it was possible for researchers to derive private keys.CWECWE-331: Insufficient Entropy (Base) “The product uses an algorithm or scheme that produces insufficient entropy, leaving patterns or clusters of values that are more likely to occur than others.”CWE-338: Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG) (Base)“The product uses a Pseudo-Random Number Generator (PRNG) in a security context, but the PRNG’s algorithm is not cryptographically strong.”CVEHoneywell OneWireless Wireless Device Manager | CISA - CVE-2022-43485 “Use of Insufficiently Random Values in Honeywell OneWireless. This vulnerability may allow attacker to manipulate claims in client’s JWT token. This issue affects OneWireless version 322.1”Tropos Wireless Mesh Routers | CISA - CVE-2012-4898 “Mesh OS before 7.9.1.1 on Tropos wireless mesh routers does not use a sufficient source of entropy for SSH keys, which makes it easier for man-in-the-middle attackers to spoof a device or modify a client-server data stream by leveraging knowledge of a key from a product installation elsewhere.”" }, { "title": "TID-318", "url": "/threats/TID-318.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-318: Insecure Cryptographic ImplementationThreat DescriptionThe device uses a cryptographic library or implementation that either introduces an additional software vulnerability within the libr...", "content": "TID-318: Insecure Cryptographic ImplementationThreat DescriptionThe device uses a cryptographic library or implementation that either introduces an additional software vulnerability within the library. A threat actor can exploit these weaknesses or vulnerablities to gain unauthorized access to the device or bypass the protections provided by the cryptographic protocol.Threat Maturity and EvidenceObserved Adversary UseAttackers Exploit the Heartbleed OpenSSL Vulnerability to Circumvent Multi-factor Authentication on VPNs “Beginning on April 8, an attacker leveraged the Heartbleed vulnerability against a VPN appliance and hijacked multiple active user sessions. Specifically, the attacker repeatedly sent malformed heartbeat requests to the HTTPS web server running on the VPN device, which was compiled with a vulnerable version of OpenSSL, to obtain active session tokens for currently authenticated users. With an active session token, the attacker successfully hijacked multiple active user sessions and convinced the VPN concentrator that he/she was legitimately authenticated. The attack bypassed both the organization’s multifactor authentication and the VPN client software used to validate that systems connecting to the VPN were owned by the organization and running specific security software.”CWECVEHeartbleed Bug and Subsequent Exploitation CVE-2014-0160 “The (1) TLS and (2) DTLS implementations in OpenSSL 1.0.1 before 1.0.1g do not properly handle Heartbeat Extension packets, which allows remote attackers to obtain sensitive information from process memory via crafted packets that trigger a buffer over-read, as demonstrated by reading private keys, related to d1_both.c and t1_lib.c, aka the Heartbleed bug.”Siemens RuggedCom ROX-based Devices Certificate Verification Vulnerability and GnuTLS Certificate Error handling Vulnerability CVE-2014-0092 “lib/x509/verify.c in GnuTLS before 3.1.22 and 3.2.x before 3.2.12 does not properly handle unspecified errors when verifying X.509 certificates from SSL servers, which allows man-in-the-middle attackers to spoof servers via a crafted certificate.”" }, { "title": "TID-319", "url": "/threats/TID-319.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-319: Cross Site Scripting (XSS)Threat DescriptionThe device does not properly restrict, filter, or validate the content of web-based requests or outputs, especially content used to construct HT...", "content": "TID-319: Cross Site Scripting (XSS)Threat DescriptionThe device does not properly restrict, filter, or validate the content of web-based requests or outputs, especially content used to construct HTTP or JavaScript elements within a web page. A threat actor can add malicious JavaScript to an HTTP request, including through a GET/POST parameter or HTTP header fields, which then executes on the browser of an unsuspecting user. The malicious JavaScript can then be used to steal session tokens or send malicious requests (especially leveraging XMLHttpRequest) to change device configurations or data.Threat Maturity and EvidenceKnown Exploitable WeaknessATT&CK Technique: Drive-by Compromise (T1189) “Multiple ways of delivering exploit code to a browser exist (i.e., Drive-by Target), including: A legitimate website is compromised where adversaries have injected some form of malicious code such as JavaScript, iFrames, and cross-site scripting.”CWECWE-79: Improper Neutralization of Input During Web Page Generation (‘Cross-site Scripting’) (Base) “The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.”CVENetComm Wireless 4G LTE Light Industrial M2M Router - CVE-2018-14784 “The device is vulnerable to several cross-site scripting attacks, allowing a remote attacker to run arbitrary code on the device.”Siemens SIMATIC S7-1500 CPU Firmware Vulnerabilities, CISA “The integrated web server may … be vulnerable to cross-site request forgery (CSRF), cross-site scripting (XSS), header injection, and open redirect attacks as well as privilege escalation.”" }, { "title": "TID-320", "url": "/threats/TID-320.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-320: SQL InjectionThreat DescriptionThe device does not property restrict, filter, or validate the content of web-based requests, especially content used to construct SQL commands or HTTP pages...", "content": "TID-320: SQL InjectionThreat DescriptionThe device does not property restrict, filter, or validate the content of web-based requests, especially content used to construct SQL commands or HTTP pages. A threat actor can add malicious content to these messages to cause unwanted code to execute on the device. SQL injection can be used to execute unauthorized commands (e.g., xp_cmdshell), or to manipulate or extract sensitive data within the database.Threat Maturity and EvidenceKnown Exploitable WeaknessATT&CK Technique: Server Software Component: SQL Stored Procedures (T1505.001) Procedure Example: Stuxnet (S0603) “Stuxnet used xp_cmdshell to store and execute SQL code.”ATT&CK Technique: Exploit Public-Facing Application (T1190) Various threat actors have leveraged SQL injection to gain initial access to publicly facing web applications, including APT28, APT 39, and DragonFly.CWECWE-89: Improper Neutralization of Special Elements used in an SQL Command (‘SQL Injection’) “The product constructs all or part of an SQL command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended SQL command when it is sent to a downstream component.”CVECSWorks Software SQL Injection Vulnerability, CISA - CVE-2014-2351 “The CSWorks software does not properly sanitize or validate the data used to construct read and write paths, which may make applications built with the affected product to be susceptible to an SQL injection attack. Depending on the intended use of the application, an attacker may be able to exploit this vulnerability to achieve remote code execution.”Navis WebAccess SQL Injection Vulnerability, CISA “The WebAccess application does not properly sanitize input that may allow a remote attacker to read, modify, and affect availability of data in the SQL database.”" }, { "title": "TID-321", "url": "/threats/TID-321.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-321: HTTP Application Session HijackingThreat DescriptionA threat actor can hijack an insufficiently protected HTTP session token to gain unauthorized access to a device. HTTP session tokens ca...", "content": "TID-321: HTTP Application Session HijackingThreat DescriptionA threat actor can hijack an insufficiently protected HTTP session token to gain unauthorized access to a device. HTTP session tokens can be obtained by a threat actor if they’re sent unencrypted over the network or if the site is vulnerable to cross-site scripting (XSS).Threat Maturity and EvidenceKnown Exploitable WeaknessATT&CK T1539 Steal Web Session Cookie “An adversary may steal web application or service session cookies and use them to gain access to web applications or Internet services as an authenticated user without needing credentials.”CWECWE-384: Session Fixation (Composite) “Authenticating a user, or otherwise establishing a new user session, without invalidating any existing session identifier gives an attacker the opportunity to steal authenticated sessions.”CVESiemens SICAM Q100 - CVE-2022-43398 Siemens SICAM Q100 devices does not renew session tokens/cookies between logins.MOXA NPort IAW5000A-I/O Series - CVE-2020-25198 The built-in WEB server for MOXA NPort IAW5000A-I/O firmware version 2.1 or lower has incorrectly implemented protections from session fixation, which may allow an attacker to gain access to a session and hijack it by stealing the user’s cookies." }, { "title": "TID-322", "url": "/threats/TID-322.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-322: Cross Site Request Forgery (CSRF)Threat DescriptionIf a threat actor can include malicious JavaScript within a page viewed by a legitimate device user, that script can send malicious authe...", "content": "TID-322: Cross Site Request Forgery (CSRF)Threat DescriptionIf a threat actor can include malicious JavaScript within a page viewed by a legitimate device user, that script can send malicious authenticated HTTP requests (using XMLHttpRequest) to the device. Due to the Same Origin Policy defined by most web browsers, the HTTP requests sent to the device will include any valid session tokens the user/browser has previously established for that device. Therefore, this could be used to send malicious requests to a device to change key functions or configurations, including changing device credentials. This requires that the threat actor tricks the user into viewing another page while they have an authenticated session with the device.Threat Maturity and EvidenceObserved Adversarial TechniqueRouter Exploit Kits: An overview of RouterCSRF attacks and DNS hijacking in Brazil “From February 1 until March 30, 2019, Avast’s Web Shield blocked more than 4.6 million cross-site request forgery (CSRF) web-based attacks in Brazil, attempting to silently modify DNS settings on routers.”Web-based attack targeting home routers, the Brazilian way “We spotted an interesting attack from Brazilian bad guys aiming to change the DNS settings of home routers by using a web-based attack, some social engineering, and malicious websites. In these attacks the malicious DNS servers configured in the user’s network device are pointed towards phishing pages of Brazilian Banks, programmed to steal financial credentials.”CWECWE-352: Cross-Site Request Forgery (CSRF) (Compound) “The web application does not, or can not, sufficiently verify whether a well-formed, valid, consistent request was intentionally provided by the user who submitted the request.”CVEXZERES 442SR Wind Turbine CSRF Vulnerability - CVE-2015-3950 “The 442SR OS recognizes both the POST and GET methods for data input. By using the GET method, an attacker may retrieve the ID from the browser and will allow the default user ID to be changed. The default user has admin rights to the entire system.”Fox DataDiode Proxy Server CSRF Vulnerability - CVE-2014-2358 “The administrative web interface of the Fox DataDiode proxy server is vulnerable to CSRF. By changing the configuration, the attacker can effectively disrupt the flow of information through the Fox DataDiode, resulting in a DoS.”Siemens SIMATIC S7-1200 CSRF Vulnerability - CVE-2015-5698 “The integrated web server (Port 80/TCP and Port 443/TCP) of the affected programmable logic controllers (PLCs) could allow remote attackers to perform actions with the permissions of a victim user, provided the victim user has an active session and is induced to trigger the malicious request.”Schneider Electric ION Power Meter CSRF Vulnerability “NCCIC/ICS-CERT is aware of a public report of a cross site request forgery (CSRF) vulnerability with proof-of-concept (PoC) exploit code affecting Schneider Electric’s ION Power Meter products. According to this report, exploitation of this vulnerability can allow unauthorized actions on the device, such as configuration parameter changes and saving modified configuration.”NetComm Wireless 4G LTE Light Industrial M2M Router - CVE-2018-14783 “A cross-site request forgery condition can occur, allowing an attacker to change passwords of the device remotely.”" }, { "title": "TID-323", "url": "/threats/TID-323.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-323: HTTP Path TraversalThreat DescriptionA threat actor can send requests for files or content that resides in different directories from those intended to be accessible by the a web server. T...", "content": "TID-323: HTTP Path TraversalThreat DescriptionA threat actor can send requests for files or content that resides in different directories from those intended to be accessible by the a web server. This can be used to gain access to data that is not intended to be remotely accessible through the web servers, such as files from the operating system or other applications. This threat is primarily a result of the web server having excessive privileges regarding files and directories on the deviceThreat Maturity and EvidenceObserved Adversary BehaviorFortinet FortiOS SSL VPN Path Traversal Vulnerability “Fortinet FortiOS SSL VPN web portal contains a path traversal vulnerability that may allow an unauthenticated attacker to download FortiOS system files through specially crafted HTTP resource requests.”CWECWE-22: Path Traversal “The product uses external input to construct a pathname that is intended to identify a file or directory that is located underneath a restricted parent directory, but the product does not properly neutralize special elements within the pathname that can cause the pathname to resolve to a location that is outside of the restricted directory.”CVECVE-2018-13379 “An Improper Limitation of a Pathname to a Restricted Directory (“Path Traversal”) in Fortinet FortiOS 6.0.0 to 6.0.4, 5.6.3 to 5.6.7 and 5.4.6 to 5.4.12 and FortiProxy 2.0.0, 1.2.0 to 1.2.8, 1.1.0 to 1.1.6, 1.0.0 to 1.0.7 under SSL VPN web portal allows an unauthenticated attacker to download system files via special crafted HTTP resource requests.”CVE-2023-39810 “An issue in the CPIO command of Busybox v1.33.2 allows attackers to execute a directory traversal.”IDS RTU 850 Directory Traversal Vulnerability - CVE-2015-3939 “Using this vulnerability, an attacker is able to access some files from the internal service interface of the communication module. One of the accessible files contains the credentials (passwords) to access the internal service interface via telnet.”Honeywell XL Web Controller Directory Traversal Vulnerability - CVE-2015-0984 “By using a directory traversal vulnerability in the FTP server, it is possible to gain access to the web root directory.”" }, { "title": "TID-324", "url": "/threats/TID-324.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-324: HTTP Direct Object ReferenceThreat DescriptionIf a device does not properly authenticate all HTTP requests, a threat actor can directly send a request to a specific URL to access data or i...", "content": "TID-324: HTTP Direct Object ReferenceThreat DescriptionIf a device does not properly authenticate all HTTP requests, a threat actor can directly send a request to a specific URL to access data or initiate a device function. This could be used to access/download sensitive data or perform unwanted changes to settings or functions on a device. This typically requires that the threat actor directly knows the URL of the specific file/object/page, rather than depending on the existing links provided by the web application. This is especially problematic for files hosted on a web server (e.g., txt, pdf) since the authentication mechanisms provided by the web application framework may not enforce access controls on those files.Threat Maturity and EvidenceKnown Exploitable WeaknessTelerik UI for ASP.NET AJAX Insecure Direct Object Reference Vulnerability “Telerik UI for ASP.NET AJAX contains an insecure direct object reference vulnerability in RadAsyncUpload that can result in file uploads in a limited location and/or remote code execution.”CWECWE-639: Authorization Bypass Through User-Controlled Key “The system’s authorization functionality does not prevent one user from gaining access to another user’s data or record by modifying the key value identifying the data.”CVEIagona ScrutisWeb - CVE-2023-38257 “Iagona ScrutisWeb versions 2.1.37 and prior are vulnerable to an insecure direct object reference vulnerability that could allow an unauthenticated user to view profile information, including user login names and encrypted passwords.”" }, { "title": "TID-325", "url": "/threats/TID-325.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-325: HTTP Injection/Response SplittingThreat DescriptionThe device uses HTTP headers that are unencrypted, not-validated, and/or unauthenticated. This means that the device may accept and proce...", "content": "TID-325: HTTP Injection/Response SplittingThreat DescriptionThe device uses HTTP headers that are unencrypted, not-validated, and/or unauthenticated. This means that the device may accept and process arbitrary data coming to the receiving web-server over the network. Threat actors may therefore be able to inject their own information into the header, possibly using their input to get more information than they should have access to or exploiting a vulnerability on the receiving device.Threat Maturity and EvidenceProof of Concept“Divide and Conquer”: HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topics White paper This white paper describes the outlines of how an HTTP Response Splitting attack can take place, the follow-up attacks that are possible, and the impact they can have on machines. He conducts sample attacks in a lab environment.CWECVECogent DataHub XSS and CRLF - CVE-2012-0310 “An HTTP header injection vulnerability (also known as carriage return line feed) exists in the Cogent DataHub application as the product does not validate or incorrectly validates input that can affect the control flow or data flow of a program.”" }, { "title": "TID-326", "url": "/threats/TID-326.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-326: Insecure DeserializationThreat DescriptionMany object oriented languages use serialization to convert class objects into byte strings for more efficient storage or transmission. However, ...", "content": "TID-326: Insecure DeserializationThreat DescriptionMany object oriented languages use serialization to convert class objects into byte strings for more efficient storage or transmission. However, if an untrusted byte string is deserialized without properly validating its contents, it could be used to exploit a vulnerability in the associated library. A threat actor could send a maliciously crafted serialized object to a device to exploit a deserialization vulnerability within a device.Threat Maturity and EvidenceObserved Adversary BehaviorNow You Serial, Now You Don’t — Systematically Hunting for Deserialization Exploits Mandiant has reported that between the years 2019-2021 APT41 used .NET ViewState and Java deserialization vulnerabilities in their campaigns.Known Exploited VulnerabilityKentico Xperience Deserialization of Untrusted Data Vulnerability “An issue was discovered in Kentico 12.0.x before 12.0.15, 11.0.x before 11.0.48, 10.0.x before 10.0.52, and 9.x versions. Due to a failure to validate security headers, it was possible for a specially crafted request to the staging service to bypass the initial authentication and proceed to deserialize user-controlled .NET object input. This deserialization then led to unauthenticated remote code execution on the server where the Kentico instance was hosted.”CWECWE-502: Deserialization of Untrusted Data (Base) “The product deserializes untrusted data without sufficiently verifying that the resulting data will be valid.”CVERockwell Automation ISaGRAF - CVE-2022-1118 “Connected Components Workbench, ISaGRAF Workbench, and Safety Instrumented System Workstation do not limit the objects that can be deserialized. This allows attackers to craft a malicious serialized object that, if opened by a local user in Connected Components Workbench, may result in arbitrary code execution. This vulnerability requires user interaction to be successfully exploited.”Medtronic Paceart Optima System - CVE-2023-31222 “Deserialization of untrusted data in Microsoft Messaging Queuing Service in Medtronic’s Paceart Optima versions 1.11 and earlier on Windows allows an unauthorized user to impact a healthcare delivery organization’s Paceart Optima system cardiac device causing data to be deleted, stolen, or modified, or the Paceart Optima system being used for further network penetration via network connectivity.”CVE-2021-4104 “JMSAppender in Log4j 1.2 is vulnerable to deserialization of untrusted data when the attacker has write access to the Log4j configuration. The attacker can provide TopicBindingName and TopicConnectionFactoryBindingName configurations causing JMSAppender to perform JNDI requests that result in remote code execution in a similar fashion to CVE-2021-44228.”" }, { "title": "TID-327", "url": "/threats/TID-327.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-327: Out of Bounds Memory AccessThreat DescriptionIf an application does not properly restrict data writes to allocated memory locations, a threat actor could send an input or message that writ...", "content": "TID-327: Out of Bounds Memory AccessThreat DescriptionIf an application does not properly restrict data writes to allocated memory locations, a threat actor could send an input or message that writes data outside of intended or allowed memory locations. By overwriting memory locations, an attacker can possibly hijack the control-flow of the program to remotely execute their own code or cause a DoS on the device.Threat Maturity and EvidenceKnown Exploitable WeaknessTenda AC11 Router Stack Buffer Overflow Vulnerability “Tenda AC11 devices contain a stack buffer overflow vulnerability in /goform/setmac which allows attackers to execute code via a crafted post request.”Tenda AC11 Router Stack Buffer Overflow Vulnerability “An issue was discovered on Tenda AC11 devices with firmware through 02.03.01.104_CN. A stack buffer overflow vulnerability in /goform/setmac allows attackers to execute arbitrary code on the system via a crafted post request.”Amcrest Cameras and NVR Stack-based Buffer Overflow Vulnerability “Amcrest cameras and NVR contain a stack-based buffer overflow vulnerability through port 37777 that allows an unauthenticated, remote attacker to crash the device and possibly execute code.”CWECWE 1218: Memory Buffer Errors This a weakness category related to the handling of memory buffers within a software system. It is possible that any of these weaknesses can lead to the development of a vulnerability to exploit in a given device.CVESiemens ICS Switches Hit With Buffer Overflow, Authentication Bugs A buffer overflow present on Siemens ICS switches could allow threat actors to gain the ability to take administrative actions on switches." }, { "title": "TID-328", "url": "/threats/TID-328.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-328: Hardcoded CredentialsThreat DescriptionHardcoded credentials typically cannot be changed by end-users and are often undocumented, leaving the end-user unaware of the risk. If a threat acto...", "content": "TID-328: Hardcoded CredentialsThreat DescriptionHardcoded credentials typically cannot be changed by end-users and are often undocumented, leaving the end-user unaware of the risk. If a threat actor is able to discover the credentials for a device (or family of devices with the same password), they may be able to exploit multiple devices with no known device-level mitigation. Hardcoded credentials are often intended for vendor-specific diagnostic functions or to authenticate components designed to communicate together (e.g., a PLC and associated IED), but can be abused by threat actors when discovered.Threat Maturity and EvidenceObserved Adversary BehaviorATT&CK Technique: Hardcoded Credentials (T0891) Procedure Example: Incontroller (S1045) “INCONTROLLER can login to Omron PLCs using hardcoded credentials, which is documented in CVE-2022-34151”Known Exploitable WeaknessZyxel Multiple Products Use of Hard-Coded Credentials Vulnerability “Zyxel firewalls (ATP, USG, VM) and AP Controllers (NXC2500 and NXC5500) contain a use of hard-coded credentials vulnerability in an undocumented account (“zyfwp”) with an unchangeable password.”CWECWE-798: Use of Hard-coded Credentials “The product contains hard-coded credentials, such as a password or cryptographic key, which it uses for its own inbound authentication, outbound communication to external components, or encryption of internal data.”CVE" }, { "title": "TID-329", "url": "/threats/TID-329.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-329: Improper Password StorageThreat DescriptionIf a device stores passwords in an unsafe manner (e.g., in a cleartext file with no read restrictions) it may be possible for threat actors to re...", "content": "TID-329: Improper Password StorageThreat DescriptionIf a device stores passwords in an unsafe manner (e.g., in a cleartext file with no read restrictions) it may be possible for threat actors to retrieve system or user account passwords for that device. Threat actors can then use obtained passwords to increase their privileges and perform actions on the device or move laterally to other systems. Unsafe storage techniques can include storing passwords in cleartext, encrypting instead of hashing passwords, using weak hashing algorithms, or not using salted hashes.Threat Maturity and EvidenceKnown Exploitable WeaknessD-Link DIR-300 Router Cleartext Storage of a Password Vulnerability“The D-Link DIR-300 router stores cleartext passwords, which allows context-dependent attackers to obtain sensitive information.”CWECWE-257: Storing Passwords in a Recoverable Format “The storage of passwords in a recoverable format makes them subject to password reuse attacks by malicious users. In fact, it should be noted that recoverable encrypted passwords provide no significant benefit over plaintext passwords since they are subject not only to reuse by malicious attackers but also by malicious insiders. If a system administrator can recover a password directly, or use a brute force search on the available information, the administrator can use the password on other accounts.”CVESiemens S7-1200 Insecure Storage of HTTPS CA Certificate - CVE-2012-3037 “The certificate authority (CA) for HTTPS connections, which is installed on Siemens SIMATIC S7-1200 PLC, stores its private key insecurely. This key is used for signing certificates. Once this key is obtained, an attacker may create a forged certificate. This can then be used to complete a Man-in-the-Middle attack on a browser that already trusts this device’s CA.”" }, { "title": "TID-330", "url": "/threats/TID-330.html", "categories": "Application Software", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-330: Cryptographic Timing Side-ChannelThreat DescriptionAlgorithms or code implementations of cryptographic processes will sometimes leak information by ending operations early or late based on...", "content": "TID-330: Cryptographic Timing Side-ChannelThreat DescriptionAlgorithms or code implementations of cryptographic processes will sometimes leak information by ending operations early or late based on, and correlated with, the input/key.If a threat actor is able to execute code on a processor performing a cryptographic operation, they may be able to infer the resulting key from that operation by measuring the timing it takes to perform the various functions.For example, if a function like memcpy (which performs byte-by byte comparison) is used to check an HMAC value, by measuring the time it takes for the function to execute, the length of time needed to brute force guess a key can be significantly reduced.Threat Maturity and EvidenceKnown Exploitable WeaknessXBOX 360 HMAC Comparison “A memcmp function is used to check the CB-auth HMAC-hash value. The value is 16-bytes long and is done byte-by-byte wise. By changing one byte at a time it’s possible to determine if a byte is the valid (true) by measuring the time to compare a false and a true value. Measuring each byte will in the end reveal the correct hash and the boot process can continue.The time differences for a valid and false value is about 2200 microseconds.Possibilities: 16 bytes * 256 different possibility for each byte, total 4096 tries. Statistically only half has to be tried, 2048 tries.”CWECWE-208: Observable Timing Discrepancy (Base) “Two separate operations in a product require different amounts of time to complete, in a way that is observable to an actor and reveals security-relevant information about the state of the product, such as whether a particular operation was successful or not.”CWE-1254: Incorrect Comparison Logic Granularity (Base) “The product’s comparison logic is performed over a series of steps rather than across the entire string in one operation. If there is a comparison logic failure on one of these steps, the operation may be vulnerable to a timing attack that can result in the interception of the process for nefarious purposes.”CVE" }, { "title": "TID-401", "url": "/threats/TID-401.html", "categories": "Networking", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-401: Undocumented Protocol FeaturesThreat DescriptionSome devices may support proprietary protocols, or may add proprietary functionality to open protocols. Many of the custom functions or comm...", "content": "TID-401: Undocumented Protocol FeaturesThreat DescriptionSome devices may support proprietary protocols, or may add proprietary functionality to open protocols. Many of the custom functions or commands may not be sufficiently documented. If users aren’t aware of these functions/commands, they cannot be expected to properly configure the device to remove unwanted functionality. Further, they are limited in their ability to monitor the device for any potential malicious use of these functions/commands to exploit devices.Threat Maturity and EvidenceProof of ConceptThe Vulnerability Can Lead to Native Remote-Code-Execution on Vulnerable PLCs “Armis researchers discovered a new vulnerability (CVE-2021-22779) in Schneider Electric (SE) Modicon PLCs that bypasses security mechanisms added to these PLCs to prevent abuse of undocumented Modbus commands. These undocumented commands can allow full control over the PLC — overwriting critical memory regions, leaking sensitive memory content, or invoking internal functions.”CWECWE-1371: ICS Supply Chain: Poorly Documented or Undocumented Features “Undocumented capabilities and configurations pose a risk by not having a clear understanding of what the device is specifically supposed to do and only do. Therefore possibly opening up the attack surface and vulnerabilities.”CWE-912: Hidden Functionality (Class) “The product contains functionality that is not documented, not part of the specification, and not accessible through an interface or command sequence that is obvious to the product’s users or administrators.”CWE-1059: Insufficient Technical Documentation “The product does not contain sufficient technical or engineering documentation (whether on paper or in electronic form) that contains descriptions of all the relevant software/hardware elements of the product, such as its usage, structure, architectural components, interfaces, design, implementation, configuration, operation, etc.”CVESixnet Universal Protocol Undocumented Function Codes - CVE-2013-2802 Sixnet devices use a universal protocol with 6 undocumented opcodes that can perform remote management functions (e.g., code execution) without authenticationSchneider Electric Modicon Controllers and Software - CVE-2021-22779 “An authentication bypass by spoofing vulnerability exists that could cause unauthorized access in read and write mode to the controller by spoofing the Modbus communication between the engineering software and the controller.”" }, { "title": "TID-404", "url": "/threats/TID-404.html", "categories": "Networking", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-404: Remotely Triggerable Deadlock/DoSThreat DescriptionSome devices will have operating modes that put the device in an inoperable state. Devices may also have network parsing or protocol vuln...", "content": "TID-404: Remotely Triggerable Deadlock/DoSThreat DescriptionSome devices will have operating modes that put the device in an inoperable state. Devices may also have network parsing or protocol vulnerabilities that can put the device in a deadlocked or otherwise unresponsive state. A threat actor may therefore be able to send a message to a device that causes it to enter one of these deadlocked or unresponsive states, rendering the device non-functional or leaving it in an otherwise degraded state. Additionally, if the device does not have a mechanism to reset or recover from this state, it may remain unavailable until it is reset or rebooted, which may require physical operator presence.Threat Maturity and EvidenceObserved Adversary TechniqueATT&CK Technique: Denial of Service (T0814) Procedure Example: Industroyer (S0604) “The Industroyer SIPROTEC DoS module exploits the CVE-2015-5374 vulnerability in order to render a Siemens SIPROTEC device unresponsive. Once this vulnerability is successfully exploited, the target device stops responding to any commands until it is rebooted manually. Once the tool is executed it sends specifically crafted packets to port 50,000 of the target IP addresses using UDP. The UDP packet contains the following 18 byte payload: 0x11 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 9E.”Procedure Example: Backdoor.Oldrea (S0093) “The Backdoor.Oldrea payload has caused multiple common OPC platforms to intermittently crash. This could cause a denial of service effect on applications reliant on OPC communications.”CWECWE-833: Deadlock “The product contains multiple threads or executable segments that are waiting for each other to release a necessary lock, resulting in deadlock.”CVECVE-2015-5374 “Specially crafted packets sent to port 50000/UDP could cause a denial-of-service of the affected device. A manual reboot may be required to recover the service of the device.”" }, { "title": "TID-405", "url": "/threats/TID-405.html", "categories": "Networking", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-405: Network Stack Resource ExhaustionThreat DescriptionRemote connections and communications can consume various device resources (e.g., network stack buffers, packet processing, socket connec...", "content": "TID-405: Network Stack Resource ExhaustionThreat DescriptionRemote connections and communications can consume various device resources (e.g., network stack buffers, packet processing, socket connections) that, if exhausted, could lead to the device entering an unresponsive state. A threat actor may attempt to intentionally cause this by sending either repetitive or specially crafted messages to a device to consume resources and cause the device to become unresponsive. The unresponsive state will typically continue for at least the duration of the attack. In some cases it may persist until the device is reset or rebooted, which may require physical operator presence.Threat Maturity and EvidenceObserved Adversary TechniqueATT&CK Technique: Service Stop (T0881) Procedure Example: Industroyer2 (S1072) ”Killing the ‘PService_PDD.exe’ service causes the interruption of any existing communication with target IEC-104 servers, which usually supports at most one active connection at a time. Having interrupted existing connections, Industroyer2 is free to connect to the targets.” This action will prevent other devices from connecting to the IEC-104 servers for as long as the Industroyer2 connection is active.Cisco IOS XR Software DVMRP Memory Exhaustion Vulnerability “Cisco IOS XR Distance Vector Multicast Routing Protocol (DVMRP) incorrectly handles Internet Group Management Protocol (IGMP) packets. Exploitation could allow an unauthenticated, remote attacker to immediately crash the IGMP process or make it consume available memory and eventually crash.”CWECWE-400: Uncontrolled Resource Consumption “The product does not properly control the allocation and maintenance of a limited resource, thereby enabling an actor to influence the amount of resources consumed, eventually leading to the exhaustion of available resources.”CWE-410: Insufficient Resource Pool “The product’s resource pool is not large enough to handle peak demand, which allows an attacker to prevent others from accessing the resource by using a (relatively) large number of requests for resources.”CVE" }, { "title": "TID-406", "url": "/threats/TID-406.html", "categories": "Networking", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-406: Unauthorized Messages or ConnectionsThreat DescriptionSome devices operate using protocols that have no capacity for network-level authentication, connection, or creation of sessions on-de...", "content": "TID-406: Unauthorized Messages or ConnectionsThreat DescriptionSome devices operate using protocols that have no capacity for network-level authentication, connection, or creation of sessions on-device, therefore allowing a threat actor to establish malicious connections or send malicious data to the device. Authentication mechanisms include passwords and cryptographic keys/certificates.Threat Maturity and EvidenceObserved Adversary TechniqueATT&CK T0860 Wireless Compromise “During the Polish Train incident, a teenager was able to program a remote with commands to operate and change junctions on the tracks. The teenager was able to then send those commands, without authentication, to operate the junctions.”ATT&CK Technique: Unauthorized Command Message (T0855) Procedure Example: INCONTROLLER (S1045) “INCONTROLLER can send custom Modbus commands to write register values on Schneider PLCs.”CWECWE-306: Missing Authentication for Critical Function (Base) “The product does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.”CWE-287: Improper Authentication (Class) “When an actor claims to have a given identity, the product does not prove or insufficiently proves that the claim is correct.”CVECVE-2022-30266 / CVE-2022-33139 / CVE-2019-18250 (OT-ICEFALL) Many devices in the OT-ICEFALL report had authentication on the client-side, but not for the protocol. What this means is that while users may think actions are authenticated, actors who are able to send/receive traffic over the network may be able to issue commands without proper authentication.CVE-2019-6533 “Registers used to store Modbus values can be read and written from the web interface without authentication in the PR100088 Modbus gateway versions prior to Release R02 (or Software Version 1.1.13166).”" }, { "title": "TID-407", "url": "/threats/TID-407.html", "categories": "Networking", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-407: Missing Message Replay ProtectionThreat DescriptionThreat actors may be able to replay a message to a device to cause an unwanted function, send an unwanted command, or gain access to priv...", "content": "TID-407: Missing Message Replay ProtectionThreat DescriptionThreat actors may be able to replay a message to a device to cause an unwanted function, send an unwanted command, or gain access to privileged data. Message replaying can be used to bypass non-existant or poorly designed authentication mechanisms lacking proper protections, such as a nonce or timestamp.Threat Maturity and EvidenceObserved Adversary TechniqueATT&CK T0887 Wireless Sniffing “In the Dallas Siren incident, adversaries were able to send command messages to activate tornado alarm systems across the city without an impending tornado or other disaster.”“In Dallas’ case, there are a number of ways that the attack could have been carried out, but the most likely is that someone carried out a “radio replay” attack, which involves recording the radio signal that was broadcast during the latest monthly test of the emergency siren system and playing it back repeatedly on Friday, according to Bastille, a security firm specializing in finding and remediating radio frequency vulnerabilities.”CWECWE-294: Authentication Bypass by Capture-replay (Base) “A capture-replay flaw exists when the design of the product makes it possible for a malicious user to sniff network traffic and bypass authentication by replaying it to the server in question to the same effect as the original message (or with minor changes).”CVESchneider Electric Modicon Modbus Protocol - CVE-2017-6034 “Sensitive information is transmitted in cleartext in the Modicon Modbus protocol, which may allow an attacker to replay the following commands: run, stop, upload, and download.”Sierra Wireless AirLink Raven X EV-DO Vulnerabilities - CVE-2013-2820 “The AirLink Raven X EV-DO is vulnerable to replay attacks that bypass authentication. By sending a series of crafted packets to Port 17336/UDP and Port 17388/UDP, an attacker could reprogram the device’s firmware image. This could allow the attacker to affect the availability of the firmware.”" }, { "title": "TID-408", "url": "/threats/TID-408.html", "categories": "Networking", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-408: Unencrypted Sensitive Data CommunicationThreat DescriptionSome devices do not adequately encrypt communications that includes operational or management information. Without adequate encryp...", "content": "TID-408: Unencrypted Sensitive Data CommunicationThreat DescriptionSome devices do not adequately encrypt communications that includes operational or management information. Without adequate encryption, a threat actor can eavesdrop on the communications to gain access to device operational information, management information, or authentication information such as credentials or keys.Threat Maturity and EvidenceKnown Exploitable WeaknessATT&CK T0842 Network Sniffing “Network sniffing is the practice of using a network interface on a computer system to monitor or capture information regardless of whether it is the specified destination for the information.”ATT&CK T0887 Wireless Sniffing “Adversaries may seek to capture radio frequency (RF) communication used for remote control and reporting in distributed environments.”CWECVESierra Wireless AirLink Raven X EV-DO Vulnerabilities “The AirLink Raven X EV-DO does not use encryption in the update and reprogramming process. By using the passwords and user names that are stored in plain text, an attacker could reprogram the firmware.”OT-ICEFALL - CVE-2022-29954“The BSAP/IP protocol transmits passwords in plaintext”OT-ICEFALL - CVE-2022-30261“The ROC protocol transmits passwords in plaintext.”OT-ICEFALL - CVE-2022-30266“The SRTP protocol transmits passwords in plaintext”OT-ICEFALL - CVE-2022-30312“The Inter-controller (IC) protocol transmits PINs, usernames and passwords in plaintext”OT-ICEFALL - CVE-2022-31204“The password used to restrict engineering operations is transmitted in plaintext”OT-ICEFALL - CVE-2022-29519The ResConf protocol transmits usernames, passwords and session tokens in plaintext.”" }, { "title": "TID-410", "url": "/threats/TID-410.html", "categories": "Networking", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-410: Cryptographic Protocol Side ChannelThreat DescriptionWhile encrypting data can prevent a threat actor from directly obtaining the plaintext communication, a threat actor may be able to inf...", "content": "TID-410: Cryptographic Protocol Side ChannelThreat DescriptionWhile encrypting data can prevent a threat actor from directly obtaining the plaintext communication, a threat actor may be able to infer information about the device or communicated data through side-channel and metadata analysis of encrypted communication sessions. For example, a threat actor could use information about message lengths, sequences, and frequency to infer some or all of the plaintext content of messages.Threat Maturity and EvidenceProof of ConceptClassifying IoT devices in smart environments using network traffic characteristics “This paper shows that IoT devices can be identified with high accuracy based on their network behavior, and sets the stage for future work in detecting misbehaviors resulting from security breaches in teh [sic] smart environment.”Traffic Fingerprinting Attacks on Internet of Things using Machine Learning “However, even if encryption was in place, characteristics of the traffic, such as packet sizes and traffic rates, may expose the user’s current activities”Privacy Attacks to the 4G and 5G Cellular Paging Protocols Using Side Channel Information “Our paper sheds light on an inherent design weakness of the 4G/5G cellular paging protocol which can be exploited by an attacker to not only obtain the victim’s paging occasionbut also to identify the victim’s presence in a particular cell area just from the victim’s soft-identity (e.g., phone number, Twitter handle) with a novel attack called ToRPEDO.”CWECWE-1230: Exposure of Sensitive Information Through Metadata “The product prevents direct access to a resource containing sensitive information, but it does not sufficiently limit access to metadata that is derived from the original, sensitive information.”CVE" }, { "title": "TID-411", "url": "/threats/TID-411.html", "categories": "Networking", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-411: Weak/Insecure Cryptographic ProtocolThreat DescriptionThe device utilizes a weak or insecure cryptographic protocol or algorithm that can be broken or undermined. This could allow the thre...", "content": "TID-411: Weak/Insecure Cryptographic ProtocolThreat DescriptionThe device utilizes a weak or insecure cryptographic protocol or algorithm that can be broken or undermined. This could allow the threat actor to extract plaintext information from encrypted communications, extract cryptographic keys, or bypass authentication mechanisms.A threat actor can utilize various techniques to manipulate these protocols, including brute-force guessing of keys or using cryptanalysis to decipher the text.Threat Maturity and EvidenceKnown Exploitable WeaknessWi-Fi hack caused TK Maxx security breach “TK Maxx’s parent company, TJX, had secured its wireless network using Wired Equivalent Privacy (WEP) — one of the weakest forms of security for wireless LANs… hackers cracked the WEP encryption protocol used to transmit data between price-checking devices, cash registers and computers at a store in Minnesota.”CWECVEEmpirical Study of PLC Authentication Protocols in Industrial Control Systems Researchers Adeen Ayub, Hyunguk Yoo, and Irfan Ahmed discovered eight protocol level authentication vulnerabilities between 5 PLCs. One of the classes of vulnerabilities they discovered was weak encryption schemes.OT-ICEFALL - CVE-2022-30273 “The MDLC protocol offers a legacy encryption mode that encrypts traffic using the Tiny Encryption Algorithm (TEA) block-cipher in ECB mode, which offers no message integrity and reduced confidentiality.”OT-ICEFALL - Weak Cryptography on CODESYS V3 “The encryption scheme uses an insecure mode of operation. The code is encrypted in ECB mode without additional cryptographic authentication and integrity over the ciphertext as a whole.”OT-ICEFALL - CVE-2022-29955 “The BSAP/IP protocol uses weak encryption to transmit passwords.”OT-ICEFALL - CVE-2022-29960 “DES with hardcoded cryptographic keys is used to protect system credentials, engineering files, and sensitive utilities.”" }, { "title": "TID-412", "url": "/threats/TID-412.html", "categories": "Networking", "tags": "", "date": "2024-05-29 13:37:39 -0400", "snippet": "TID-412: Network Routing Capability AbuseThreat DescriptionSome devices will allow for the forwarding of packets to other connected devices (e.g., routing, port forwarding, tunneling, VPN). If the ...", "content": "TID-412: Network Routing Capability AbuseThreat DescriptionSome devices will allow for the forwarding of packets to other connected devices (e.g., routing, port forwarding, tunneling, VPN). If the device is used to forward or route communications, a threat actor could change the forwarding rules or routes. This feature could be used by the threat actor to either (i) disable required forwarding rules to prevent authorized communications or (ii) add new rules that allow unauthorized access to other devices. The threat actor could potentially use this to gain access to devices that are within protected networks or zones.Threat Maturity and EvidenceObserved Adversary TechniqueATT&CK Technique: Connection Proxy (T0884) Procedure Example: Incontroller (S1045) “The INCONTROLLER PLCProxy module can add an IP route to the CODESYS gateway running on Schneider PLCs to allow it to route messages through the PLC to other devices on that network. This allows the malware to bypass firewall rules that prevent it from directly communicating with devices on the same network as the PLC.”CWECWE-306: Missing Authentication for Critical Function (Base) “The product does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.”CWE-15: External Control of System or Configuration Setting “One or more system settings or configuration elements can be externally controlled by a user.”CVE" } ] +[ { "title": "Home", "url": "https://emb3d.mitre.org", "categories": "", "tags": "", "date": "", "snippet": " MITRE EMB3D™ MITRE EMB3D™ A knowledge base of cyber threats and associated mitigations for embedded devices HOME BACKGROUND ...", "content": " MITRE EMB3D™ MITRE EMB3D™ A knowledge base of cyber threats and associated mitigations for embedded devices HOME BACKGROUND GETTING STARTED PROPERTIES LIST PROPERTIES MAPPER THREATS HARDWARE TID-101 TID-102 TID-103 TID-105 TID-106 TID-107 TID-108 TID-109 TID-110 TID-111 TID-113 TID-114 TID-115 TID-116 TID-118 TID-119 SYSTEM SOFTWARE TID-201 TID-202 TID-203 TID-204 TID-205 TID-206 TID-207 TID-208 TID-209 TID-210 TID-211 TID-212 TID-213 TID-214 TID-215 TID-216 TID-217 TID-218 TID-219 TID-220 TID-221 TID-222 TID-223 TID-224 APPLICATION SOFTWARE TID-301 TID-302 TID-303 TID-304 TID-305 TID-306 TID-307 TID-308 TID-309 TID-310 TID-311 TID-312 TID-313 TID-314 TID-315 TID-316 TID-317 TID-318 TID-319 TID-320 TID-321 TID-322 TID-323 TID-324 TID-325 TID-326 TID-327 TID-328 TID-329 TID-330 NETWORKING TID-401 TID-404 TID-405 TID-406 TID-407 TID-408 TID-410 TID-411 TID-412 MITIGATIONS FOUNDATIONAL MID-001 MID-004 MID-010 MID-011 MID-012 MID-013 MID-016 MID-017 MID-018 MID-021 MID-026 MID-027 MID-030 MID-031 MID-032 MID-034 MID-035 MID-036 MID-037 MID-038 MID-039 MID-041 MID-042 MID-043 MID-044 MID-046 MID-047 MID-049 MID-050 MID-051 MID-052 MID-054 MID-056 MID-057 MID-058 MID-071 MID-072 MID-073 MID-074 MID-075 MID-076 MID-077 MID-078 MID-079 MID-080 MID-083 INTERMEDIATE MID-002 MID-005 MID-007 MID-008 MID-009 MID-014 MID-015 MID-019 MID-020 MID-022 MID-023 MID-028 MID-029 MID-033 MID-040 MID-045 MID-048 MID-053 MID-055 MID-059 MID-060 MID-061 MID-063 MID-064 MID-065 MID-066 MID-067 MID-068 MID-069 MID-081 MID-082 LEADING MID-003 MID-006 MID-024 MID-025 MID-062 MID-070 ABOUT TERMS OF USE Home MITRE EMB3D™ Cancel The MITRE EMB3D™ Threat Model The EMB3D Threat Model provides a cultivated knowledge base of cyber threats to embedded devices, providing a common understanding of these threats with security mechanisms to mitigate them. New: We have just released the EMB3D Mitigations! See the the new Mitigations tab on the left and the mappings added into each Threat page. The EMB3D Whitepaper was also updated to include our methodology for choosing and categorizing mitigations.What is EMB3D™ EMB3D is a threat model for embedded devices found in industries such as critical infrastructure, Internet of Things, automotive, healthcare, manufacturing, and many more. The threat model is intended to be a resource to help vendors, asset owners/operators, test organizations, and security researchers to improve the overall security of embedded devices' hardware and software. This threat model aims to serve as a central repository of information, defining known threats to embedded devices and their unique device features/properties that enable specific threat actions. By mapping the threats to the associated device features/properties, the user can easily enumerate threat exposure based on the known device features. Device Properties Device properties describe a device's hardware and software components and capabilities of a device. These include physical hardware, network services and protocols, software, and firmware. Each category is further divided into sub-properties that are then mapped to a set of threats. By mapping properties, users can identify the threats associated with a given device property. Threats EMB3D threats identify how a threat actor can achieve a specific objective or effect on a system or device. Each threat description includes (i) information about the technical features that are targeted by the threat; (ii) the actions that must be performed by the threat actor to cause the threat's effect, including the impact or effect the threat will have on the device; and (iii) the vulnerabilities or weaknesses within that mechanism that enable the threat actions. Mitigations Mitigation strategies and techniques are described for each threat. These can be leveraged by device vendors to prevent and reduce the risk of a threat, and by end users to validate that devices are sufficiently protected against that threat. The mitigations define the mechanisms or technologies that protect against the threat while remaining flexible in how mitigations can be implemented within the device's unique constraints. EMB3D Users Device Vendors Support device threat models and provide guidelines for mitigations requirements/designs. Develop device roadmaps for evaluating device risk and prioritizing mitigation efforts. Asset Owners & Operators Inform acquisition requirements and decisions about unmitigated threats/risks. Support acquisition efforts related to evaluating a device's security capabilities. Guide the development and deployment of compensating controls around unmitigated threats. Security Researchers/Testers Scope assessment activities and outcomes. Help identify potential trouble spots for deeper investigation. Contribute to research efforts around novel threats and mitigations. More Information Background Getting Started Whitepaper Contact Us Cookie Preferences Privacy Policy © 2023-2024 The MITRE Corporation. Terms of Use. MITRE is a registered trademark of The MITRE Corporation. Using the Chirpy theme for Jekyll. " }, { "title": "Background", "url": "/background/", "categories": "", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "EMB3D™ BackgroundThe EMB3D Threat Model provides a cultivated knowledge base of cyber threats to embedded devices, providing a common understanding of these threats with security mechanisms to miti...", "content": "EMB3D™ BackgroundThe EMB3D Threat Model provides a cultivated knowledge base of cyber threats to embedded devices, providing a common understanding of these threats with security mechanisms to mitigate them.Leveraging established models to strengthen embedded device security​​EMB3D aligns with and expands on several existing models like Common Weakness Enumeration, MITRE ATT&CK®, and Common Vulnerabilities and Exposures, specifically focusing on embedded devices. ​EMB3D provides a cultivated knowledge base of cyber threats to devices, including those observed in the field environment or demonstrated through proofs-of-concept and theoretic research. Mapping these threats to device properties helps users develop and tailor accurate threat models for specific embedded devices. For each threat, suggested mitigations are provided for technical mechanisms that device vendors should implement to mitigate the given threat by building security into the device. EMB3D is a comprehensive framework for the entire security ecosystem — device vendors, asset owners and operators, security researchers, and testing organizations.A framework for a dynamic threat landscapeEMB3D is a living framework that will be updated with new threats and mitigations as security researchers discover new vulnerabilities, threats, and security defenses. EMB3D is a public, community resource where all information is openly available, and the security community can submit additions and revisions.More InformationWhitepaper" }, { "title": "Getting Started", "url": "/getting-started/", "categories": "", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "Applying EMB3D™Step 1. Enumerate device properties and map to threats First, identify the set of Device Properties List that apply to the device being evaluated based on device knowl...", "content": "Applying EMB3D™Step 1. Enumerate device properties and map to threats First, identify the set of Device Properties List that apply to the device being evaluated based on device knowledge and documentation. While a vendor may be able to fully enumerate all properties, an asset operator or security researcher may need to review available documentation or perform initial device testing or decomposition to fully enumerate the relevant properties. Select the applicable properties in the Properties Mapper Tool to generate the list of Threats the device may be exposed to because it incorporates those properties and features. Properties to Threats MapperStep 2. Enumerate threats and evaluate their relevance/risk After identifying the device’s properties list and obtaining the candidate threat mapping, the next step is to review each potential threat to determine if it truly applies to the device and how much risk it poses. For additional details, follow the threat detail links output by the Mapper Tool or look up the associated Threat ID (TID) in the Threats catalog. Each threat description provides additional information about that threat, including its maturity level, documented threat evidence and CVEs, and associated weaknesses from the CWE database. This information helps to better understand the mechanics of the threat, its prerequisites, how it manifests on embedded devices, and how threat actors might utilize it, which can be used to better understand the risk of that threat to the device in question. Step 3. Identify required mitigations Equipped with a list of threats that pose a viable risk to the device, the next step is to determine if the device sufficiently defends against those threats. Each threat description includes a set of Foundational, Intermediate, and Leading mitigations. These mitigations provide guidance on what technical mechanisms can best prevent or reduce the risk of that threat. Mitigations will include references to guidance documents and best practices, along with information about potential limitations and challenges when deploying each mitigation. The mitigation recommendations can then be used to make decisions and plans about the device. Device vendors may use the mitigations mapping to prioritize their security engineering efforts and choose technical security mechanisms that will be most effective against current and future threats. Asset owners and operators may use it to inform acquisitions, make judgements about the risks of devices deployed in their environments, or what additional environmental-level mitigations they wish to make to address residual risk. Finally, security researchers can use this information to organize and triage their efforts to determine which aspects of a device are worth deeper investigation. " }, { "title": "Properties List", "url": "/properties-list/", "categories": "", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": " EMB3D™ Device Properties Download CSV Hardware ...", "content": " EMB3D™ Device Properties Download CSV Hardware Device Properties Threats PID-11 Device includes a microprocessor TID-101 Power Consumption Analysis Side Channel TID-102 Electromagnetic Analysis Side Channel TID-103 Cache Timing Analysis Side Channel TID-105 Hardware Fault Injection – Control Flow Modification PID-121 Device includes buses for external memory/storage TID-106 Data Bus Interception PID-122 Device includes discrete chips/devices that have access to the same physical memory TID-107 Unauthorized Direct Memory Access (DMA) PID-123 Device includes ROM, VRAM, or removable Storage TID-108 ROM/NVRAM Data Extraction or Modification PID-124 Device includes Random Access Memory (RAM) chips TID-109 RAM Chip Contents Readout PID-1241 Device includes DDR DRAM TID-110 Hardware Fault Injection – Data Manipulation PID-13 Device includes peripheral chips and integrated data buses TID-113 Unverified Peripheral Firmware Loaded TID-114 Peripheral Data Bus Interception PID-14 Device includes external peripheral interconnects (e.g., USB, Serial) TID-111 Untrusted External Storage TID-118 Weak Peripheral Port Electrical Damage Protection PID-15 Device includes a hardware access port (e.g., UART, JTAG) TID-115 Firmware/Data Extraction via Hardware Interface TID-116 Latent Privileged Access Port TID-119 Latent Hardware Debug Port Allows Memory/Code Manipulation System Software Device Properties Threats PID-21 Device includes a bootloader TID-201 Inadequate Bootloader Protection and Verification PID-22 Device includes a debugging capabilities TID-224 Excessive Access via Software Diagnostic Features PID-23 Device includes OS/kernel TID-202 Exploitable System Network Stack Component TID-218 Operating System Susceptible to Rootkit PID-231 Device includes an operating system that uses drivers/modules that can be loaded TID-203 Malicious OS Kernel Driver/Module Installable PID-2321 Device lacks an access enforcement/privilege mechanism TID-204 Untrusted Programs Can Access Privileged OS Functions PID-23221 Device includes and enforces OS user accounts TID-205 Existing OS Tools Maliciously Used for Device Manipulation TID-219 OS/Kernel Privilege Escalation PID-23222 Device includes a memory management model, including protections of memory access (read-only/, executable, writable) TID-206 Memory Management Protections Subverted TID-223 System Susceptible to RAM Scraping PID-241 Device includes containers TID-207 Container Escape PID-242 Device includes hypervisor TID-208 Virtual Machine Escape TID-209 Host Can Manipulate Guest Virtual Machines PID-251 Root of Trust is physically accessible or is not immutable TID-214 Secrets Extracted from Device Root of Trust PID-252 Root of Trust is immutable TID-220 Unpatchable Hardware Root of Trust PID-26 Device lacks firmware/software update support TID-210 Device Vulnerabilities Unpatchable PID-271 Device has firmware or software that is not cryptographically checked for integrity validation TID-211 Device Allows Unauthenticated Firmware Installation PID-272 Device includes cryptographic firmware/software integrity protection mechanisms TID-214 Secrets Extracted from Device Root of Trust TID-330 Cryptographic Timing Side-Channel PID-2721 Device includes a shared key for firmware integrity validation TID-212 FW/SW Update Integrity Shared Secrets Extraction PID-2722 Device includes digitally signed firmware (with private key) TID-213 Faulty FW/SW Update Integrity Verification PID-273 Device has unencrypted firmware updates TID-215 Unencrypted SW/FW Updates PID-274 Device includes user firmware/software version selection during updates TID-216 Firmware Update Rollbacks Allowed PID-275 Device includes remotely-initiated firmware/software updates TID-217 Remotely Initiated Updates Can Cause DoS Application Software Device Properties Threats PID-31 Application-level software is present and running on the device TID-301 Applications Binaries Modified PID-311 Device includes the usage of a web/HTTP applications TID-319 Cross Site Scripting (XSS) TID-320 SQL Injection TID-321 HTTP Application Session Hijacking TID-322 Cross Site Request Forgery (CSRF) TID-323 HTTP Path Traversal TID-324 HTTP Direct Object Reference TID-325 HTTP Injection/Response Splitting PID-3121 Device includes support for object oriented programming languages(e.g., Java, Python, PHP, C++) TID-326 Insecure Deserialization PID-3122 Device includes support for manual memory management programming languages (e.g. C, C++) TID-327 Out of Bounds Memory Access PID-32 Device includes the ability to deploy custom or external programs (e.g., ladder logic, compiled binaries) TID-302 Install Untrusted Application PID-321 Device includes ability to deploy custom programs from engineering software or IDE TID-303 Excessive Trust in Offboard Management/IDE Software PID-322 Device includes a program runtime environment for custom or external programs TID-304 Manipulate Runtime Environment PID-3231 Device includes ability to run custom/external programs as native binary without a confined/restricted environment TID-305 Program Executes Dangerous System Calls PID-3232 Device includes ability to run custom/external programs/processes through an execution sandboxed environment TID-306 Sandboxed Environments Escaped PID-324 Device includes support for \"program uploads\" to retrieve programs from the device from an engineering workstation TID-307 Device Code Representations Inconsistent TID-308 Code Overwritten to Avoid Detection TID-309 Device Exploits Engineering Workstation PID-331 Device includes unauthenticated services TID-310 Remotely Accessible Unauthenticated Services PID-332 Device includes authenticated services TID-311 Default Credentials TID-312 Credential Change Mechanism Can Be Abused TID-313 Unauthenticated Session Changes Credential TID-328 Hardcoded Credentials PID-3321 Device includes passwords to authenticate the users TID-314 Passwords Can Be Guessed Using Brute-Force Attempts TID-315 Password Retrieval Mechanism Abused TID-329 Improper Password Storage PID-3322 Device includes cryptographic mechanism to authenticate users and sessions TID-316 Incorrect Certificate Verification Allows Authentication Bypass TID-317 Predictable Cryptographic Key TID-318 Insecure Cryptographic Implementation TID-330 Cryptographic Timing Side-Channel TID-411 Weak/Insecure Cryptographic Protocol Networking Device Properties Threats PID-41 Device exposes remote network services TID-222 Critical System Service May Be Disabled TID-310 Remotely Accessible Unauthenticated Services TID-401 Undocumented Protocol Features TID-404 Remotely Triggerable Deadlock/DoS TID-405 Network Stack Resource Exhaustion TID-407 Missing Message Replay Protection PID-4111 Device lacks protocol support for message authentication TID-406 Unauthorized Messages or Connections PID-4112 Device lacks protocol support for message encryption TID-408 Unencrypted Sensitive Data Communication PID-4113 Device includes cryptographic functions for sensitive data, such as encryption or authentication TID-221 Authentication Bypass By Message Replay TID-316 Incorrect Certificate Verification Allows Authentication Bypass TID-317 Predictable Cryptographic Key TID-318 Insecure Cryptographic Implementation TID-330 Cryptographic Timing Side-Channel TID-410 Cryptographic Protocol Side Channel TID-411 Weak/Insecure Cryptographic Protocol PID-42 Device includes procedure to forward or route network messages TID-412 Network Routing Capability Abuse " }, { "title": "Properties Mapper", "url": "/properties-mapper/", "categories": "", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": " EMB3D™ Properties to Threats Mapping The properties tool encodes the mapping from Device Properties to EMB3D Threats. Start by selecting the properties relevant to the device you ar...", "content": " EMB3D™ Properties to Threats Mapping The properties tool encodes the mapping from Device Properties to EMB3D Threats. Start by selecting the properties relevant to the device you are mapping from using the checkboxes in each of the four categories below. As you select properties, additional sub-properties may be uncovered, and the Applicable Threats list is populated with entries that may be relevant to your device. When finished, you may save a copy of the threats report by clicking the 'Download CSV' button. Properties List Device Properties: Hardware: PID-11 - Device includes a microprocessor PID-12 - Device includes Memory/Storage (external to CPU) PID-121 - Device includes buses for external memory/storage PID-122 - Device includes discrete chips/devices that have access to the same physical memory PID-123 - Device includes ROM, VRAM, or removable Storage PID-124 - Device includes Random Access Memory (RAM) chips PID-1241 - Device includes DDR DRAM PID-13 - Device includes peripheral chips and integrated data buses PID-14 - Device includes external peripheral interconnects (e.g., USB, Serial) PID-15 - Device includes a hardware access port (e.g., UART, JTAG) System Software: PID-21 - Device includes a bootloader PID-22 - Device includes a debugging capabilities PID-23 - Device includes OS/kernel PID-231 - Device includes an operating system that uses drivers/modules that can be loaded PID-232 - Device includes separate users/processes with access to different OS data or functions PID-2321 - Device lacks an access enforcement/privilege mechanism PID-2322 - Device deploys an access enforcement/privilege mechanism PID-23221 - Device includes and enforces OS user accounts PID-23222 - Device includes a memory management model, including protections of memory access (read-only/, executable, writable) PID-24 - Device includes virtualization and containers PID-241 - Device includes containers PID-242 - Device includes hypervisor PID-25 - Device includes software/hardware root of trust PID-251 - Root of Trust is physically accessible or is not immutable PID-252 - Root of Trust is immutable PID-26 - Device lacks firmware/software update support PID-27 - Device includes support for firmware/software updates PID-271 - Device has firmware or software that is not cryptographically checked for integrity validation PID-272 - Device includes cryptographic firmware/software integrity protection mechanisms PID-2721 - Device includes a shared key for firmware integrity validation PID-2722 - Device includes digitally signed firmware (with private key) PID-273 - Device has unencrypted firmware updates PID-274 - Device includes user firmware/software version selection during updates PID-275 - Device includes remotely-initiated firmware/software updates Application Software: PID-31 - Application-level software is present and running on the device PID-311 - Device includes the usage of a web/HTTP applications PID-312 - Device includes programming languages and libraries PID-3121 - Device includes support for object oriented programming languages(e.g., Java, Python, PHP, C++) PID-3122 - Device includes support for manual memory management programming languages (e.g. C, C++) PID-32 - Device includes the ability to deploy custom or external programs (e.g., ladder logic, compiled binaries) PID-321 - Device includes ability to deploy custom programs from engineering software or IDE PID-322 - Device includes a program runtime environment for custom or external programs PID-323 - Device includes support for program executable formats PID-3231 - Device includes ability to run custom/external programs as native binary without a confined/restricted environment PID-3232 - Device includes ability to run custom/external programs/processes through an execution sandboxed environment PID-324 - Device includes support for \"program uploads\" to retrieve programs from the device from an engineering workstation PID-33 - Device includes interactive services (e.g., Telnet, SSH) PID-331 - Device includes unauthenticated services PID-332 - Device includes authenticated services PID-3321 - Device includes passwords to authenticate the users PID-3322 - Device includes cryptographic mechanism to authenticate users and sessions Networking: PID-41 - Device exposes remote network services PID-411 - Device exposes remote services with the ability to send, receive, view or modify sensitive information or configurations PID-4111 - Device lacks protocol support for message authentication PID-4112 - Device lacks protocol support for message encryption PID-4113 - Device includes cryptographic functions for sensitive data, such as encryption or authentication PID-42 - Device includes procedure to forward or route network messages Applicable Threats: Download CSV " }, { "title": "Threats", "url": "/threats/", "categories": "", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": " EMB3D™ Threats Enumeration Hardware TID-101: Power Consumption Analysis Side Channel ...", "content": " EMB3D™ Threats Enumeration Hardware TID-101: Power Consumption Analysis Side Channel TID-102: Electromagnetic Analysis Side Channel TID-103: Cache Timing Analysis Side Channel TID-105: Hardware Fault Injection – Control Flow Modification TID-106: Data Bus Interception TID-107: Unauthorized Direct Memory Access (DMA) TID-108: ROM/NVRAM Data Extraction or Modification TID-109: RAM Chip Contents Readout TID-110: Hardware Fault Injection – Data Manipulation TID-111: Untrusted External Storage TID-113: Unverified Peripheral Firmware Loaded TID-114: Peripheral Data Bus Interception TID-115: Firmware/Data Extraction via Hardware Interface TID-116: Latent Privileged Access Port TID-118: Weak Peripheral Port Electrical Damage Protection TID-119: Latent Hardware Debug Port Allows Memory/Code Manipulation System Software TID-201: Inadequate Bootloader Protection and Verification TID-202: Exploitable System Network Stack Component TID-203: Malicious OS Kernel Driver/Module Installable TID-204: Untrusted Programs Can Access Privileged OS Functions TID-205: Existing OS Tools Maliciously Used for Device Manipulation TID-206: Memory Management Protections Subverted TID-207: Container Escape TID-208: Virtual Machine Escape TID-209: Host Can Manipulate Guest Virtual Machines TID-210: Device Vulnerabilities Unpatchable TID-211: Device Allows Unauthenticated Firmware Installation TID-212: FW/SW Update Integrity Shared Secrets Extraction TID-213: Faulty FW/SW Update Integrity Verification TID-214: Secrets Extracted from Device Root of Trust TID-215: Unencrypted SW/FW Updates TID-216: Firmware Update Rollbacks Allowed TID-217: Remotely Initiated Updates Can Cause DoS TID-218: Operating System Susceptible to Rootkit TID-219: OS/Kernel Privilege Escalation TID-220: Unpatchable Hardware Root of Trust TID-221: Authentication Bypass By Message Replay TID-222: Critical System Service May Be Disabled TID-223: System Susceptible to RAM Scraping TID-224: Excessive Access via Software Diagnostic Features Application Software TID-301: Applications Binaries Modified TID-302: Install Untrusted Application TID-303: Excessive Trust in Offboard Management/IDE Software TID-304: Manipulate Runtime Environment TID-305: Program Executes Dangerous System Calls TID-306: Sandboxed Environments Escaped TID-307: Device Code Representations Inconsistent TID-308: Code Overwritten to Avoid Detection TID-309: Device Exploits Engineering Workstation TID-310: Remotely Accessible Unauthenticated Services TID-311: Default Credentials TID-312: Credential Change Mechanism Can Be Abused TID-313: Unauthenticated Session Changes Credential TID-314: Passwords Can Be Guessed Using Brute-Force Attempts TID-315: Password Retrieval Mechanism Abused TID-316: Incorrect Certificate Verification Allows Authentication Bypass TID-317: Predictable Cryptographic Key TID-318: Insecure Cryptographic Implementation TID-319: Cross Site Scripting (XSS) TID-320: SQL Injection TID-321: HTTP Application Session Hijacking TID-322: Cross Site Request Forgery (CSRF) TID-323: HTTP Path Traversal TID-324: HTTP Direct Object Reference TID-325: HTTP Injection/Response Splitting TID-326: Insecure Deserialization TID-327: Out of Bounds Memory Access TID-328: Hardcoded Credentials TID-329: Improper Password Storage TID-330: Cryptographic Timing Side-Channel Networking TID-401: Undocumented Protocol Features TID-404: Remotely Triggerable Deadlock/DoS TID-405: Network Stack Resource Exhaustion TID-406: Unauthorized Messages or Connections TID-407: Missing Message Replay Protection TID-408: Unencrypted Sensitive Data Communication TID-410: Cryptographic Protocol Side Channel TID-411: Weak/Insecure Cryptographic Protocol TID-412: Network Routing Capability Abuse " }, { "title": "Mitigations", "url": "/mitigations/", "categories": "", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": " EMB3D™ Mitigations MID-001: Software Only Bootloader Authentication MID-002: Hardware-backed Bootloader Authentication MID-0...", "content": " EMB3D™ Mitigations MID-001: Software Only Bootloader Authentication MID-002: Hardware-backed Bootloader Authentication MID-003: Periodic/Continuous Integrity Measurement and Remote Attestation MID-004: Memory Hardening Against Code Injection MID-005: Memory Safe Programming Languages MID-006: Driver Memory Isolation MID-007: Control Flow Manipulation Protections MID-008: Decidable Protocols and Parsers MID-009: Operating System-based Runtime Integrity Check MID-010: No Runtime OS Driver Load MID-011: OS Driver/Peripheral Authentication MID-012: OS-based Access Control Mechanisms MID-013: Process and Thread Memory Segmentation MID-014: Sandboxing MID-015: Containerization MID-016: Least Functionality MID-017: Security-relevant Auditing and Logging MID-018: Require Authentication for Privileged Functions MID-019: ROP Gadget Minimization MID-020: Pointer Authentication MID-021: VM Hardening MID-022: Segmentation Through Hardware-assisted VMs MID-023: Hypervisor Hardening MID-024: Encrypted VM Isolation MID-025: End-of-Life Management Features MID-026: Secure Firmware Update MID-027: Validated Cryptographic Libraries MID-028: Hardware-backed Key Storage MID-029: Hardware Root of Trust MID-030: Firmware Rollback Protections MID-031: Physical Presence Validation MID-032: System Service Availability Manager MID-033: Unique Factory Preinstalled Secret Keys MID-034: Authenticate Network Messages MID-035: Encrypt Network Traffic MID-036: Cryptographic Nonces MID-037: Network Timestamps MID-038: Authenticate for Administrative Actions MID-039: Restrict Software Diagnostic Functions MID-040: Cryptographically Signed Custom Programs MID-041: Cryptographically Signed Vendor-supplied Programs MID-042: Device Checks Consistency Between Binary/Running Code and Textual Code MID-043: Manage Default Login Credentials MID-044: Strong Cryptographic Algorithms and Protocols MID-045: Multi-factor Authentication MID-046: Authentication Attempts Timeouts and Lockouts MID-047: Sufficient Entropy for Keys MID-048: Hardware Random Number Generator MID-049: Secure Password Storage MID-050: Operating System Defenses Against Microarchitecture Feature Side Channels MID-051: Disallow User-Provided Code MID-052: Physically Protect Circuit Board Traces and Chip Pins MID-053: Use IOMMU to Implement DMA Access Controls MID-054: Encrypt and Authenticate Non-volatile Storage Contents MID-055: Use Highly Integrated Processors to Avoid Physical Attacks MID-056: Allow Device Administrators to Disable Removable Storage Support MID-057: Disable Physical Development and Debugging Ports MID-058: Engage Hardware Readout Protection Mechanisms MID-059: Software Patterns for Side Channel Resistance MID-060: Dedicated Hardware Cryptographic Modules MID-061: Use Separate Processors for Isolation MID-062: Hardware Mitigations for Fault Injection MID-063: Software Mitigations for Fault Injection MID-064: Store Critical Code and Data in On-Chip Memory MID-065: RAM Encryption MID-066: Implement Redundant Processing and Memory MID-067: Implement DRAM RowHammer-resistant DRAM and Memory Controllers MID-068: Data Bus Encryption and Message Authentication MID-069: Electrical Fault Protection MID-070: Peripheral Component Authentication MID-071: Sanitized and Escaped User Data for Web Applications MID-072: Parameterized SQL Queries MID-073: Secure HTTP Session Management MID-074: Cross Site Request Forgery Mitigations MID-075: Path Traversal Protections MID-076: Web Direct Object Reference Authentication MID-077: Secure Deserialization MID-078: HTTP Request/Response Validation MID-079: Remove Undocumented Network Functionality MID-080: Network Request Processing Limits MID-081: Secure Network Tunnels MID-082: Post-quantum Cryptography MID-083: Network Firewall/Access Control List " }, { "title": "About", "url": "/about/", "categories": "", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "AcknowledgementsThe model is a result of a collaborative effort by MITRE, Niyo Little Thunder Pearson, Red Balloon Security, and Narf Industries.After garnering significant interest for peer review...", "content": "AcknowledgementsThe model is a result of a collaborative effort by MITRE, Niyo Little Thunder Pearson, Red Balloon Security, and Narf Industries.After garnering significant interest for peer review across diverse industries, numerous organizations piloted the threat model, offering invaluable feedback. We appreciate the interest and feedback from vendors and integrators across many industries including energy, water, manufacturing, robotics, aerospace, health, automotive, as well as researchers and threat tool vendors. This ongoing collaborative effort has been instrumental in refining and enhancing the model’s content and useability. We look forward to continued collaboration to strengthen the ability of the model to enable “secure by design.”Contact UsPlease send inquiries about EMB3D to emb3d@mitre.org  LegalMaterial on this site is ©2024 The MITRE Corporation. The EMBED framework and web site content may be used according to the Terms of Use.This project makes use of MITRE ATT&CK®.ATT&CK® Terms of Use - https://attack.mitre.org/resources/legal-and-branding/terms-of-use/See the ATT&CK® FAQ for more information on how to use and represent the ATT&CK name." }, { "title": "Terms Of Use", "url": "/terms-of-use/", "categories": "", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "Terms of UseLICENSEThe MITRE Corporation (MITRE) hereby grants you a non-exclusive, royalty-free license to use EMB3D™ for internal business purposes only. Any copy you make for such purposes is au...", "content": "Terms of UseLICENSEThe MITRE Corporation (MITRE) hereby grants you a non-exclusive, royalty-free license to use EMB3D™ for internal business purposes only. Any copy you make for such purposes is authorized provided that you reproduce MITRE’s copyright designation and this license in any such copy.“© 2024 The MITRE Corporation. This work is reproduced and distributed with the permission of The MITRE Corporation.”For all other uses of EMB3D™, contact MITRE at emb3d@mitre.org.DISCLAIMERSMITRE does not claim EMB3D™ enumerates all possibilities for the types of actions and behaviors documented as part of EMB3D™’s adversary model and framework of techniques. Using the information contained within EMB3D™ to address or cover full categories of techniques will not guarantee full defensive coverage as there may be undisclosed techniques or variations on existing techniques not documented by EMB3D™.ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN ARE PROVIDED ON AN “AS IS” BASIS AND THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE MITRE CORPORATION, ITS BOARD OF TRUSTEES, OFFICERS, AGENTS, AND EMPLOYEES, DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY THAT THE USE OF THE INFORMATION THEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF ACCURACY, NONINFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE." } , { "title": "Hardware", "url": "/threats/hardware.html", "categories": "", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "Hardware TID-101 - Power Consumption Analysis Side Channel TID-102 - Electromagnetic Analysis Side Channel TID-103 - Cache Timing Analysis Side Channel TID-105 - Hardware Fault Injection – Cont...", "content": "Hardware TID-101 - Power Consumption Analysis Side Channel TID-102 - Electromagnetic Analysis Side Channel TID-103 - Cache Timing Analysis Side Channel TID-105 - Hardware Fault Injection – Control Flow Modification TID-106 - Data Bus Interception TID-107 - Unauthorized Direct Memory Access (DMA) TID-108 - ROM/NVRAM Data Extraction or Modification TID-109 - RAM Chip Contents Readout TID-110 - Hardware Fault Injection – Data Manipulation TID-111 - Untrusted External Storage TID-113 - Unverified Peripheral Firmware Loaded TID-114 - Peripheral Data Bus Interception TID-115 - Firmware/Data Extraction via Hardware Interface TID-116 - Latent Privileged Access Port TID-118 - Weak Peripheral Port Electrical Damage Protection TID-119 - Latent Hardware Debug Port Allows Memory/Code Manipulation" }, { "title": "System Software", "url": "/threats/system-software.html", "categories": "", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "System Software TID-201 - Inadequate Bootloader Protection and Verification TID-202 - Exploitable System Network Stack Component TID-218 - Operating System Susceptible to Rootkit TID-203 - Mali...", "content": "System Software TID-201 - Inadequate Bootloader Protection and Verification TID-202 - Exploitable System Network Stack Component TID-218 - Operating System Susceptible to Rootkit TID-203 - Malicious OS Kernel Driver/Module Installable TID-204 - Untrusted Programs Can Access Privileged OS Functions TID-205 - Existing OS Tools Maliciously Used for Device Manipulation TID-206 - Memory Management Protections Subverted TID-207 - Container Escape TID-208 - Virtual Machine Escape TID-209 - Host Can Manipulate Guest Virtual Machines TID-210 - Device Vulnerabilities Unpatchable TID-211 - Device Allows Unauthenticated Firmware Installation TID-212 - FW/SW Update Integrity Shared Secrets Extraction TID-213 - Faulty FW/SW Update Integrity Verification TID-214 - Secrets Extracted from Device Root of Trust TID-215 - Unencrypted SW/FW Updates TID-216 - Firmware Update Rollbacks Allowed TID-217 - Remotely Initiated Updates Can Cause DoS TID-219 - OS/Kernel Privilege Escalation TID-220 - Unpatchable Hardware Root of Trust TID-221 - Authentication Bypass By Message Replay TID-222 - Critical System Service May Be Disabled TID-223 - System Susceptible to RAM Scraping TID-224 - Excessive Access via Software Diagnostic Features" }, { "title": "Application Software", "url": "/threats/application-software.html", "categories": "", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "Application Software TID-301 - Applications Binaries Modified TID-302 - Install Untrusted Application TID-303 - Excessive Trust in Offboard Management/IDE Software TID-304 - Manipulate Runtime ...", "content": "Application Software TID-301 - Applications Binaries Modified TID-302 - Install Untrusted Application TID-303 - Excessive Trust in Offboard Management/IDE Software TID-304 - Manipulate Runtime Environment TID-305 - Program Executes Dangerous System Calls TID-306 - Sandboxed Environments Escaped TID-307 - Device Code Representations Inconsistent TID-308 - Code Overwritten to Avoid Detection TID-309 - Device Exploits Engineering Workstation TID-310 - Remotely Accessible Unauthenticated Services TID-328 - Hardcoded Credentials TID-311 - Default Credentials TID-312 - Credential Change Mechanism Can Be Abused TID-313 - Unauthenticated Session Changes Credential TID-314 - Passwords Can Be Guessed Using Brute-Force Attempts TID-315 - Password Retrieval Mechanism Abused TID-316 - Incorrect Certificate Verification Allows Authentication Bypass TID-317 - Predictable Cryptographic Key TID-318 - Insecure Cryptographic Implementation TID-319 - Cross Site Scripting (XSS) TID-320 - SQL Injection TID-321 - HTTP Application Session Hijacking TID-322 - Cross Site Request Forgery (CSRF) TID-323 - HTTP Path Traversal TID-324 - HTTP Direct Object Reference TID-325 - HTTP Injection/Response Splitting TID-326 - Insecure Deserialization TID-327 - Out of Bounds Memory Access TID-329 - Improper Password Storage TID-330 - Cryptographic Timing Side-Channel" }, { "title": "Networking", "url": "/threats/networking.html", "categories": "", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "Networking TID-401 - Undocumented Protocol Features TID-404 - Remotely Triggerable Deadlock/DoS TID-405 - Network Stack Resource Exhaustion TID-406 - Unauthorized Messages or Connections TID-4...", "content": "Networking TID-401 - Undocumented Protocol Features TID-404 - Remotely Triggerable Deadlock/DoS TID-405 - Network Stack Resource Exhaustion TID-406 - Unauthorized Messages or Connections TID-407 - Missing Message Replay Protection TID-408 - Unencrypted Sensitive Data Communication TID-410 - Cryptographic Protocol Side Channel TID-411 - Weak/Insecure Cryptographic Protocol TID-412 - Network Routing Capability Abuse" } , { "title": "TID-101", "url": "/threats/TID-101.html", "categories": "Hardware", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-101: Power Consumption Analysis Side ChannelThreat DescriptionDevices will oftentimes consume variable amounts of power depending on the operations the device is performing. Power consumption a...", "content": "TID-101: Power Consumption Analysis Side ChannelThreat DescriptionDevices will oftentimes consume variable amounts of power depending on the operations the device is performing. Power consumption analysis involves the reading and analyzing of power usage of a device.If a device is vulnerable to a power consumption analysis attack, it may be possible to extract or deduce information about the operating state of the device. This can include extracting secrets/keys, discovering operations conducted on sections of memory, and device control flow. A threat actor can therefore physically monitor the power consumption of a device during an execution of a cryptographic operation to create a trace of its power usage over time. By leveraging the understanding of the operations of common cryptographic properties, the power usage traces can be used to infer various information, such as the cryptographic keys.Threat Maturity and EvidenceProof of ConceptDifferential power analysis (DPA) and correlation power analysis (CPA) on Arduino Uno Researchers “demonstrate that both DPA and CPA techniques are viable in deducing the full 16-byte key of AES-128 by monitoring the power consumption of an Arduino Uno which implements the AddRoundKey and SubBytes steps in round 1 of AES.”CWECWE-1300: Improper Protection of Physical Side Channels (Base) “The device does not contain sufficient protection mechanisms to prevent physical side channels from exposing sensitive information due to patterns in physically observable phenomena such as variations in power consumption, electromagnetic emissions (EME), or acoustic emissions.”CWE-1255: Comparison Logic is Vulnerable to Power Side-Channel Attacks (Variant) “A device’s real time power consumption may be monitored during security token evaluation and the information gleaned may be used to determine the value of the reference token.”CVE" }, { "title": "TID-102", "url": "/threats/TID-102.html", "categories": "Hardware", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-102: Electromagnetic Analysis Side ChannelThreat DescriptionDevices will oftentimes emit different electromagnetic signals during different operations. Electromagnetic analysis involves the col...", "content": "TID-102: Electromagnetic Analysis Side ChannelThreat DescriptionDevices will oftentimes emit different electromagnetic signals during different operations. Electromagnetic analysis involves the collection and analysis of these signals.If devices are vulnerable to electromagnetic analysis attacks, it may be possible for attackers with physical device presence to extract secrets, such as encryption keys, by analyzing the electromagnetic radiation that is emitted by the device. By analyzing these frequencies and comparing them against one another, it may be possible to derive information about device data or operations.Threat Maturity and EvidenceProof of ConceptDifferential Electromagnetic Analysis (DEMA) on FPGA Researchers demonstrated “that DEMA can be performed against hardware implementation of AES using an FPGA.”CWECWE-1300: Improper Protection of Physical Side Channels (Base) “The device does not contain sufficient protection mechanisms to prevent physical side channels from exposing sensitive information due to patterns in physically observable phenomena such as variations in power consumption, electromagnetic emissions (EME), or acoustic emissions.”CVE" }, { "title": "TID-103", "url": "/threats/TID-103.html", "categories": "Hardware", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-103: Cache Timing Analysis Side ChannelThreat DescriptionCache-based timing analysis attacks exploit variations in timing used for memory access, across both cached and uncached memory, to infe...", "content": "TID-103: Cache Timing Analysis Side ChannelThreat DescriptionCache-based timing analysis attacks exploit variations in timing used for memory access, across both cached and uncached memory, to infer the contents of memory. This bypasses existing OS privilege mechanisms.If a threat actor capable of executing arbitrary code on the device, they may be able to use a cache-based side-channel attack to extract data and sensitive information from more privileged processes or areas of memory on a device (e.g., passwords, keys). Executing a cache-based attack assumes the threat actor can deploy custom software to the device (including scripts).Threat Maturity and EvidenceKnown Exploitable WeaknessSpectre and Meltdown Cache Timing Cache Timing was used to create micro-architecture side-channels in devices to read whether data was in the cache or not for the Spectre/Meltdown based-attacks. Through this side-channel data leak, it would be possible to dump entire sections of program memory in the case of Spectre/Meltdown, and kernel memory in the case of Meltdown. Both Spectre and Meltdown have been observed in the wild.CWECVECVE-2017-5754 (Meltdown) “Systems with microprocessors utilizing speculative execution and indirect branch prediction may allow unauthorized disclosure of information to an attacker with local user access via a side-channel analysis of the data cache.”CVE-2017-5753 (Spectre) “Systems with microprocessors utilizing speculative execution and branch prediction may allow unauthorized disclosure of information to an attacker with local user access via a side-channel analysis.”" }, { "title": "TID-105", "url": "/threats/TID-105.html", "categories": "Hardware", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-105: Hardware Fault Injection – Control Flow ModificationThreat DescriptionA threat actor with physical access to a device may be able to manipulate the processor’s intended code execution by s...", "content": "TID-105: Hardware Fault Injection – Control Flow ModificationThreat DescriptionA threat actor with physical access to a device may be able to manipulate the processor’s intended code execution by subjecting it to hardware faults or “glitching”. Hardware faults can be induced by various methods, including voltage fault injection (power glitching), electromagnetic pulses (EM glitching), and optical fault injection. Glitching can be used to bypass various security protections on a device, such as skipping a firmware integrity check during a secure boot process or protections against firmware or data read-out from the device. This threat requires physical access to the device to perform the glitching, and also typically requires substantial iterative testing to identify the precise nature, magnitude, and timing of signals that need to be injected to cause the glitch condition.Threat Maturity and EvidenceKnown Exploitable WeaknessGlitching the Switch In pursuit of extracting the 1st stage boot ROM code from the Nvidia Tegra X1 SoC, the researchers implemented a power glitching attack against the processor to prevent the bootloader from enabling the SoC’s readout protection for that code segment. The glitch interrupts the boot ROM code from writing to a security configuration register, leaving the processor in a state that allows exporting the code responsible for the establishing the processor’s root of trust for secure boot. Analysis of the bootloader code yielded an exploitable buffer overflow in a USB protocol implementation (see TID-327) used to inject code that bypasses secure boot and allows executing unauthorized firmware. The presence of this flaw in the unmodifiable initial boot ROM prevents patching this vulnerability in already deployed devices (see TID-220).Proof of ConceptElectromagnetic Fault Injection: Towards a Fault Model on a 32-bit Microcontroller “These experiments confirm the fact that an attacker could change an instruction into another one and change the value of a piece of data loaded from the Flash memory. But they also provide a more accurate fault model, in which some instructions or registers seem to be more vulnerable than others”Oops..! I Glitched It Again! How to Multi-Glitch the Glitching-Protections on ARM TrustZone-M “In this paper, we present μ-Glitch, the first Voltage Fault Injection (VFI) platform which is capable of injecting multiple, coordinated voltage faults into a target device, requiring only a single trigger signal…We evaluate and showcase the effectiveness and practicality of our attack platform on four real-world chips, featuring TrustZone-M”CWECWE-1247: Improper Protection Against Voltage and Clock Glitches (Base) “The device does not contain or contains incorrectly implemented circuitry or sensors to detect and mitigate voltage and clock glitches and protect sensitive information or software contained on the device.”CWE-1319: Improper Protection against Electromagnetic Fault Injection (EM-FI) (Base) “The device is susceptible to electromagnetic fault injection attacks, causing device internal information to be compromised or security mechanisms to be bypassed.”CVE" }, { "title": "TID-106", "url": "/threats/TID-106.html", "categories": "Hardware", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-106: Data Bus InterceptionThreat DescriptionA threat actor could intercept data across a data bus used to connect a process to either volatile memory or non-volatile storage (e.g. ROM, NVRAM, d...", "content": "TID-106: Data Bus InterceptionThreat DescriptionA threat actor could intercept data across a data bus used to connect a process to either volatile memory or non-volatile storage (e.g. ROM, NVRAM, disk). Depending on the scope of the interception, it may be possible to read and/or perform an adversary-in-the-middle (AITM) attack to write information going over the bus, especially if it lacks adequate encryption and authentication. For example, if a device has discrete RAM external from the processor, it may be possible to tap the address and data lines to observe and capture memory contents as they are loaded and stored for processing. Similar attacks can also be performed in software. Captured data may leak sensitive information (e.g., keys, cleartext firmware code) that can aid in reverse engineering or executing other stages of an attack. Interception and modification may enable an adversary to alter a device’s behavior, achieve persistence, evade detection, or other objectives.NOTE: This is different from TID-114 in that this threat refers to data moving between the processor and storage devices, whereas TID-114 refers to the data moving between the main board or processing chip to a peripheral device.Threat Maturity and EvidenceProof of ConceptAn Off-Chip Attack on Hardware Enclaves via the Memory Bus “This paper shows how an attacker can break the confidentiality of a hardware enclave with MEMBUSTER, an off-chip attack based on snooping the memory bus. An attacker with physical access can observe an unencrypted address bus and extract fine-grained memory access patterns of the victim”CWECWE-311: Missing Encryption of Sensitive Data (Class) “The product does not encrypt sensitive or critical information before storage or transmission.”CWE-319: Cleartext Transmission of Sensitive Information (Base) “The product transmits sensitive or security-critical data in cleartext in a communication channel that can be sniffed by unauthorized actors.”CVE" }, { "title": "TID-107", "url": "/threats/TID-107.html", "categories": "Hardware", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-107: Unauthorized Direct Memory Access (DMA)Threat DescriptionIf separate discrete chips/peripherals that have access to the same physical memory, a threat actor with access to one peripheral c...", "content": "TID-107: Unauthorized Direct Memory Access (DMA)Threat DescriptionIf separate discrete chips/peripherals that have access to the same physical memory, a threat actor with access to one peripheral could perform a Direct Memory Access (DMA) attack to maliciously read/write memory from a connected chip or peripheral. This threat is especially relevant if there is insufficient hardware or software restrictions on what memory can be accessed/manipulated. A DMA attack can be used to extract cryptographic keys or other sensitive data, and also to manipulate the operation of the chip.Threat Maturity and EvidenceProof of ConceptHigh-Speed DMA Attacks Bypass Built-in Hardware Protections on Enterprise Devices “Eclypsium’s latest research shows that enterprise laptops, servers, and cloud environments continue to be vulnerable to powerful Direct Memory Access (DMA) attacks, even in the presence of protections such as UEFI Secure Boot, Intel Boot Guard, HP Sure Start, and Microsoft Virtualization-Based Security.”Exploiting an I/OMMU vulnerability In the 2010 5th International Conference on Malicious and Unwanted Software, researchers demonstrated how vulnerabilities on Intel’s VT-d could be exploited via a DMA attack.Thunderspy “The attack involved opening the device’s back cover, connecting a hacking device called a Bus Pirate to the SPI flash interface associated with the Thunderbolt controller firmware, connecting the Bus Pirate to the attacker’s laptop, copying the Thunderbolt firmware using a tool called Flashrom, modifying the Thunderbolt firmware to disable all Thunderbolt security, and writing it back to the targeted device. The attacker then connects a Thunderbolt-based direct memory access (DMA) attack device running PCILeech to the targeted PC, and uses it to load a kernel module that allows them to bypass the Windows login screen.”CWECWE-1260: Improper Handling of Overlap Between Protected Memory Ranges (Base) “The product allows address regions to overlap, which can result in the bypassing of intended memory protection.”CWE-119: Improper Restriction of Operations within the Bounds of a Memory Buffer “The product performs operations on a memory buffer, but it can read from or write to a memory location that is outside of the intended boundary of the buffer.”CWE-284: Improper Access Control “The product does not restrict or incorrectly restricts access to a resource from an unauthorized actor.”CVE" }, { "title": "TID-108", "url": "/threats/TID-108.html", "categories": "Hardware", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-108: ROM/NVRAM Data Extraction or ModificationThreat DescriptionContents of non-volatile memory chips or non-fixed storage (e.g., SD cards, Compact Flash, hard disks, USB sticks) can be directl...", "content": "TID-108: ROM/NVRAM Data Extraction or ModificationThreat DescriptionContents of non-volatile memory chips or non-fixed storage (e.g., SD cards, Compact Flash, hard disks, USB sticks) can be directly read out for examination or modification by a chip reader. In some cases this may be possible without removing the chip from the circuit board, but most often this will involve physically desoldering the chip and non-destructively removing it from the device. By reading information from ROM or NVRAM, a threat actor would be able to extract any secrets stored on it.If the extracted storage contents contain unencrypted firmware (even partial), this can ease reverse engineering by an adversary to identify other potential vulnerabilities or security-relevant data (e.g., passwords, cryptographic keys).Threat actors may also be able to load malicious changes to the ROM/NVRAM, potentially giving them increased and unauthorized access to the device.Threat Maturity and EvidenceProof of ConceptUprooting Trust: Learnings from an Unpatchable Hardware Root-of-Trust Vulnerability in Siemens S7-1500 PLCs “This Siemens S7-1500 uses two non-volatile NAND flash memories as primary storage for the main SoC. We identified these two non-volatile NAND flash memory chips as W29N01HV (1G-bit) NAND Flash memory [35]. We desoldered the two NAND chips from the device’s PCB and used the Xgecu Minipro TL866II [36] NAND programmer to extract the content of them.”CWECWE-311: Missing Encryption of Sensitive Data “The product does not encrypt sensitive or critical information before storage or transmission.”CWE-312: Cleartext Storage of Sensitive Information “The product stores sensitive information in cleartext within a resource that might be accessible to another control sphere.”CWE-1282: Assumed-Immutable Data is Stored in Writable Memory “Immutable data, such as a first-stage bootloader, device identifiers, and “write-once” configuration settings are stored in writable memory that can be re-programmed or updated in the field.”CVE" }, { "title": "TID-109", "url": "/threats/TID-109.html", "categories": "Hardware", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-109: RAM Chip Contents ReadoutThreat DescriptionIf a threat actor can physically access a RAM chip, they may be able to readout the contents of the chip. Multiple techniques can be used to extr...", "content": "TID-109: RAM Chip Contents ReadoutThreat DescriptionIf a threat actor can physically access a RAM chip, they may be able to readout the contents of the chip. Multiple techniques can be used to extract the contents of RAM, including both runtime and physical access, such as the threat actor can use a Cold-boot attack to physically cool the RAM to minimize the decay of the electrical charge and then physically copy the contents of that RAMThrough these methods, critical data, including firmware or secrets (such as passwords and cryptographic keys), may therefore be vulnerable to extraction. Extraction of this information could then lead to reverse engineering to identify vulnerabilities, abusing secrets to gain unauthorized access, or subverting at-rest encryption schemes.Threat Maturity and EvidenceProof of ConceptCold Boot Attacks “We provide an independent study based on 12 computer systems with different hardware configurations that verifies the empirical practicability of cold boot attacks against DDR1 and DDR2”Cryo-Mechanical RAM Content Extraction Against Modern Embedded Systems CWECWE-311: Missing Encryption of Sensitive Data “The product does not encrypt sensitive or critical information before storage or transmission.”CWE-1384: Improper Handling of Physical or Environmental Conditions“Hardware products are typically only guaranteed to behave correctly within certain physical limits or environmental conditions. Such products cannot necessarily control the physical or external conditions to which they are subjected. However, the inability to handle such conditions can undermine a product’s security. For example, an unexpected physical or environmental condition may cause the flipping of a bit that is used for an authentication decision. This unexpected condition could occur naturally or be induced artificially by an adversary.”CVE" }, { "title": "TID-110", "url": "/threats/TID-110.html", "categories": "Hardware", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-110: Hardware Fault Injection – Data ManipulationThreat DescriptionIf a device uses certain types of vulnerable dynamic random access memory (DRAM), a threat actor with malicious software insta...", "content": "TID-110: Hardware Fault Injection – Data ManipulationThreat DescriptionIf a device uses certain types of vulnerable dynamic random access memory (DRAM), a threat actor with malicious software installed on the device may be manipulate the contents of memory by repeatedly accessing physically nearby memory cells.An example of this is Rowhammer, where a threat actor can deploy code (including written in JavaScript loaded from a web site) that performs many repeated memory access attempts. This repeated access causes a leakage of electric charge within memory, leading to a manipulation of the charge of nearby memory locations. This charge manipulation results in a manipulation of the contents of memory itself. By manipulating the contents of memory, the threat actor may be able to escalate privileges on a device or otherwise bypass security controls.Threat Maturity and EvidenceProof of ConceptRowHammer In 2014 and thereafter, researchers demonstrated the ability to corrupt data in nearby DDR3 and DDR4 DRAM rows by repeatedly accessing data from the same row. It is possible to turn this phenomenon into exploits through various means.CWECWE-1256: Improper Restriction of Software Interfaces to Hardware Interfaces “The product provides software-controllable device functionality for capabilities such as power and clock management, but it does not properly limit functionality that can lead to modification of hardware memory or register bits, or the ability to observe physical side channels.”CVE" }, { "title": "TID-111", "url": "/threats/TID-111.html", "categories": "Hardware", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-111: Untrusted External StorageThreat DescriptionAn untrusted storage peripheral (e.g., USB) could be installed on the device. If malicious code is executed from the untrusted storage, or trans...", "content": "TID-111: Untrusted External StorageThreat DescriptionAn untrusted storage peripheral (e.g., USB) could be installed on the device. If malicious code is executed from the untrusted storage, or transferred to the device, it could provide a way for a threat actor to get unauthorized code to execute on the device. Further, any files transferred from the untrusted storage could potentially be used to modify critical device configurations or settings files.Threat Maturity and EvidenceProof of ConceptBadUSB “The malware they created, called BadUSB, can be installed on a USB device to completely take over a PC, invisibly alter files installed from the memory stick, or even redirect the user’s internet traffic. …Because BadUSB resides not in the flash memory storage of USB devices, but in the firmware that controls their basic functions, the attack code can remain hidden long after the contents of the device’s memory would appear to the average user to be deleted.”CWECWE-1299: Missing Protection Mechanism for Alternate Hardware Interface (Base) “The lack of protections on alternate paths to access control-protected assets (such as unprotected shadow registers and other external facing unguarded interfaces) allows an attacker to bypass existing protections to the asset that are only performed against the primary path.”CVE" }, { "title": "TID-113", "url": "/threats/TID-113.html", "categories": "Hardware", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-113: Unverified Peripheral Firmware LoadedThreat DescriptionA threat actor could manipulate the firmware associated with a peripheral prior to it being loaded and executed. The attackers may be...", "content": "TID-113: Unverified Peripheral Firmware LoadedThreat DescriptionA threat actor could manipulate the firmware associated with a peripheral prior to it being loaded and executed. The attackers may be able to manipulate actions on the device by sending it commands that were not the original intention of the user or by manipulating a bitstream before it is loaded, There are multiple possible cases where this could occur, including:Case 1: Peripheral firmware is stored in a dedicated ROM/NVRAM chip. An adversary with physical access to the device might alter the contents of the peripheral firmware storage to alter peripheral behavior.Case 2: Peripheral firmware stored as a file in the parent processor’s context. An adversary able to execute code in the parent processor context could replace or alter the firmware image before it is loaded into the peripheral during bootup or other initialization process.Case 3: The parent processor’s context has privileged access to peripherals and malicious code running there could alter peripheral firmware dynamically (e.g., through shared memory).Threat Maturity and EvidenceObserved Adversary BehaviorEQUATION GROUP: QUESTIONS AND ANSWERS “Although the implementation of their malware systems is incredibly complex, surpassing even Regin in sophistication, there is one aspect of the EQUATION group’s attack technologies that exceeds anything we have ever seen before. This is the ability to infect the hard drive firmware… The plugin supports two main functions: reprogramming the HDD firmware with a custom payload from the EQUATION group, and providing an API into a set of hidden sectors (or data storage) of the hard drive. This achieves several important things: Extreme persistence that survives disk formatting and OS reinstall. an invisible, persistent storage hidden inside the hard drive.”Proof of ConceptPERILOUS PERIPHERALS: THE HIDDEN DANGERS INSIDE WINDOWS & LINUX COMPUTERS “In new research, Eclypsium found unsigned firmware in WiFi adapters, USB hubs, trackpads, and cameras used in computers from Lenovo, Dell, HP and other major manufacturers. We then demonstrated a successful attack on a server via a network interface card with unsigned firmware used by each of the big three server manufacturers.”CWECWE-1299: Missing Protection Mechanism for Alternate Hardware Interface (Base) “The lack of protections on alternate paths to access control-protected assets (such as unprotected shadow registers and other external facing unguarded interfaces) allows an attacker to bypass existing protections to the asset that are only performed against the primary path.”CWE-1316: Fabric-Address Map Allows Programming of Unwarranted Overlaps of Protected and Unprotected Ranges (Base) “The address map of the on-chip fabric has protected and unprotected regions overlapping, allowing an attacker to bypass access control to the overlapping portion of the protected region.”CVE" }, { "title": "TID-114", "url": "/threats/TID-114.html", "categories": "Hardware", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-114: Peripheral Data Bus InterceptionThreat DescriptionMessages and data passing between discrete sub-components and peripherals may be intercepted and/or modified from through the peripheral b...", "content": "TID-114: Peripheral Data Bus InterceptionThreat DescriptionMessages and data passing between discrete sub-components and peripherals may be intercepted and/or modified from through the peripheral bus (e.g., SPI, I2C, ISA, PCI, USB). Captured data may leak sensitive information (e.g., keys, cleartext firmware code) that can aid in reverse engineering and extracting data needed for other stages of an attack. Additionally, threat actors may be able to alter sensitive information in transit to cause malicious effects through data manipulation or interaction in transit over the bus.NOTE: This is different from TID-106 in that this threat refers to the data moving between the main board or processing chip to a peripheral device, whereas TID-106 refers to data moving between the processor and storage devices.Threat Maturity and EvidenceProof of ConceptToward a hardware man-in-the-middle attack on PCIe bus “In this paper, we present a new attack vector on PCIe based on a hardware Man-in-the-Middle. This system allows real-time data analysis, data-replay, and a copy technique inspired by the shadow-copy principle. Through this one, it is possible to locate, duplicate, and replay sensitive data.”Critical Architectural Vulnerabilities in Siemens SIMATIC S7-1500 Series Allow for Bypass of All Protected Boot Features “An attacker with physical access to the device can either attach to the I2C communication bus or extract the physical ATECC chip from the PLC’s PCB to falsely authenticate and use it as an oracle to generate firmware decryption material. “CWECWE-311: Missing Encryption of Sensitive Data “The product does not encrypt sensitive or critical information before storage or transmission.”CWE-319: Cleartext Transmission of Sensitive Information “The product transmits sensitive or security-critical data in cleartext in a communication channel that can be sniffed by unauthorized actors.”CVE" }, { "title": "TID-115", "url": "/threats/TID-115.html", "categories": "Hardware", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-115: Firmware/Data Extraction via Hardware InterfaceThreat DescriptionUnprotected programming or debugging interfaces may be used to extract device firmware, exposing it to reverse engineering ...", "content": "TID-115: Firmware/Data Extraction via Hardware InterfaceThreat DescriptionUnprotected programming or debugging interfaces may be used to extract device firmware, exposing it to reverse engineering that may reveal proprietary information, other exploitable vulnerabilities, or security-sensitive data stored in the firmware (such as keys and passwords). Examples include the Joint Test Action Group (JTAG) interface.Threat Maturity and EvidenceProof of ConceptExtracting firmware from devices using JTAG Researcher Sergio Prado demonstrates in this article how to use the JTAG interface to extract firmware from a device.CWECWE-1299: Missing Protection Mechanism for Alternate Hardware Interface “The lack of protections on alternate paths to access control-protected assets (such as unprotected shadow registers and other external facing unguarded interfaces) allows an attacker to bypass existing protections to the asset that are only performed against the primary path.”CWE-1191: On-Chip Debug and Test Interface With Improper Access Control “The chip does not implement or does not correctly perform access control to check whether users are authorized to access internal registers and test modes through the physical debug/test interface.”CVE" }, { "title": "TID-116", "url": "/threats/TID-116.html", "categories": "Hardware", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-116: Latent Privileged Access PortThreat DescriptionIf a device has a latent user access port, it may be possible for attackers to leverage physical access to obtain privileges that were not ac...", "content": "TID-116: Latent Privileged Access PortThreat DescriptionIf a device has a latent user access port, it may be possible for attackers to leverage physical access to obtain privileges that were not accounted for when considering software or remote access controls.Threat Maturity and EvidenceProof of ConceptHow to Hack Hardware using UART - Black Hills Researchers from Black Hills demonstrate how to gain root access to a device through shell access granted and transmitted over UART.IoT Devices - The Not-So-Hidden Risk of UART Interface Satish S demonstrates how to gain root access to a device over a UART interface.CWECWE-1299: Missing Protection Mechanism for Alternate Hardware Interface “The lack of protections on alternate paths to access control-protected assets (such as unprotected shadow registers and other external facing unguarded interfaces) allows an attacker to bypass existing protections to the asset that are only performed against the primary path.”CWE-1191: On-Chip Debug and Test Interface With Improper Access Control “The chip does not implement or does not correctly perform access control to check whether users are authorized to access internal registers and test modes through the physical debug/test interface.”CVECVE-2022-29402 “TP-Link TL-WR840N EU v6.20 was discovered to contain insecure protections for its UART console. This vulnerability allows attackers to connect to the UART port via a serial connection and execute commands as the root user without authentication.”" }, { "title": "TID-118", "url": "/threats/TID-118.html", "categories": "Hardware", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-118: Weak Peripheral Port Electrical Damage ProtectionThreat DescriptionIf a threat actor has physical access to a device, they may be able to cause physical damage to the circuit board of a de...", "content": "TID-118: Weak Peripheral Port Electrical Damage ProtectionThreat DescriptionIf a threat actor has physical access to a device, they may be able to cause physical damage to the circuit board of a device, in some cases even destroying the device. A malicious actor may short circuit or introduce out-of-spec voltages and currents to pins on external connectors. This can lead to effects as mild as interrupting device functionality, by causing crashes or reboots, or as significant as corrupting data, corrupting firmware, or permanent hardware damage. Depending on how robust the hardware design is, physical damage may be limited to a single affected peripheral port or as extensive as destroying the entire device.Threat Maturity and EvidenceKnown Exploitable WeaknessUSBKILL “The USBKill is a device that stress tests hardware. When plugged in power is taken from a USB-Port, multiplied, and discharged into the data-lines, typically disabling an unprotected device.”CWECWE-1384: Improper Handling of Physical or Environmental Conditions “The product does not properly handle unexpected physical or environmental conditions that occur naturally or are artificially induced.”CVE" }, { "title": "TID-119", "url": "/threats/TID-119.html", "categories": "Hardware", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-119: Latent Hardware Debug Port Allows Memory/Code ManipulationThreat DescriptionHardware debugging ports (e.g., JTAG) oftentimes have high privileges or direct access to the running device’s m...", "content": "TID-119: Latent Hardware Debug Port Allows Memory/Code ManipulationThreat DescriptionHardware debugging ports (e.g., JTAG) oftentimes have high privileges or direct access to the running device’s memory and integrated hardware. By leveraging one of these hardware debugging ports, an adversary may be able to read memory values off of the device, change the value of a section of memory during runtime, or control the execution of code on the processor. This can give threat actors increased privileges on the device or bypass other security protections.Threat Maturity and EvidenceProof of Concepthw-101-jtag (Parts 1, 2 and 3) Researchers at River Loop Security demonstrate here how to manipulate and read memory from a JTAG port.CWECWE-1191: On-Chip Debug and Test Interface With Improper Access Control “The chip does not implement or does not correctly perform access control to check whether users are authorized to access internal registers and test modes through the physical debug/test interface.”CVE" }, { "title": "TID-201", "url": "/threats/TID-201.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-201: Inadequate Bootloader Protection and VerificationThreat DescriptionSome devices utilize bootloaders that are either stored in writable memory or memory that can be made writable. It may th...", "content": "TID-201: Inadequate Bootloader Protection and VerificationThreat DescriptionSome devices utilize bootloaders that are either stored in writable memory or memory that can be made writable. It may then be possible for a threat actor to alter the contents of the device’s designated boot code storage locations to inject malicious code or modify the bootloader’s operation. This could allow the installation of a “bootkit”, which is loaded before the operating system and can undermine any security protections within the bootloader or operating system. Typically this is done through a vulnerability or lack of write protections in the bootloader loader/runtime environment.Threat Maturity and EvidenceObserved Adversarial BehaviorATT&CK Technique: Pre-OS Boot: Bootkit (T1542.003) “Adversaries may use bootkits to persist on systems. Bootkits reside at a layer below the operating system and may make it difficult to perform full remediation unless an organization suspects one was used and can act accordingly.”Detecting UEFI Bootkits in the Wild (Part 1) “As UEFI boot systems are going mainstream, the bootkits are also shifting to an implementation of infecting firmware in a flash chip on the motherboard instead of the MBR/VBR on the hard drive. The first PoC of UEFI bootkits was presented in 2013 and the threats have been observed in the wild since 2018.”LOJAX First UEFI rootkit found in the wild, courtesy of the Sednit group “Sednit also known as APT28, Sofacy, Strontium and Fancy Bear – has been operating since at least 2004, and has made headlines frequently in the past years: it is believed to be behind major, high profile attacks. … this white paper details the first time this group is known to have used a UEFI rootkit.”MosaicRegressor: Lurking in the Shadows of UEFI “During an investigation, we came across several suspicious UEFI firmware images. A deeper inspection revealed that they contained four components that had an unusual proximity in their assigned GUID values, those were two DXE drivers and two UEFI applications. After further analysis we were able to determine that they were based on the leaked source code of HackingTeam’s VectorEDK bootkit, with minor customizations.”TRICKBOT NOW OFFERS ‘TRICKBOOT’: PERSIST, BRICK, PROFIT “This new functionality, which we have dubbed “TrickBoot,” makes use of readily available tools to check devices for well-known vulnerabilities that can allow attackers to read, write, or erase the UEFI/BIOS firmware of a device. “CWECWE-693: Protection Mechanisms Failure (Pillar) “The product does not use or incorrectly uses a protection mechanism that provides sufficient defense against directed attacks against the product.”CWE-284: Improper Access Control “The product does not restrict or incorrectly restricts access to a resource from an unauthorized actor.”CVE" }, { "title": "TID-202", "url": "/threats/TID-202.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-202: Exploitable System Network Stack ComponentThreat DescriptionDevices may have vulnerabilities within software used to parse various network protocols. If the device does not properly parse...", "content": "TID-202: Exploitable System Network Stack ComponentThreat DescriptionDevices may have vulnerabilities within software used to parse various network protocols. If the device does not properly parse a protocol, a threat actor can send improperly formatted messages to the device, which may result in memory corruptions. Vulnerabilities resulting from protocol manipulation can then be used to perform remote code execution or to perform a denial of service attack on the device. There are a number of known complexities with network protocol parsing, including unclear protocol specifications or parsing expectation.Threat Maturity and EvidenceKnown Exploitable WeaknessBroadpwn: Remotely Compromising Android and iOS via a Bug in Broadcom’s Wi-Fi Chipsets “Broadpwn is a fully remote attack against Broadcom’s BCM43xx family of WiFi chipsets, which allows for code execution on the main application processor in both Android and iOS. It is based on an unusually powerful 0-day that allowed us to leverage it into a reliable, fully remote exploit.”Ripple20 “Ripple20 vulnerabilities are unique both in their widespread effect and impact due to supply chain effect and being vulnerabilities allowing attackers to bypass NAT and firewalls and take control of devices undetected, with no user interaction required. This is due to the vulnerabilities being in a low level TCP/IP stack, and the fact that for many of the vulnerabilities, the packets sent are very similar to valid packets, or, in some cases are completely valid packets. This enables the attack to pass as legitimate traffic.”Urgent/11 “The Armis research team, Armis Labs, has discovered 11 zero-day vulnerabilities in VxWorks®, the most widely used operating system you may have never heard about. VxWorks is used by over 2 billion devices including critical industrial, medical and enterprise devices. Dubbed “URGENT/11,” the vulnerabilities reside in VxWorks’ TCP/IP stack (IPnet), impacting all versions since version 6.5, and are a rare example of vulnerabilities found to affect the operating system over the last 13 years. Armis has worked closely with Wind River®, the maintainer of VxWorks, and the latest VxWorks 7 released on July 19 contains fixes for all the discovered vulnerabilities.”AMNESIA:33 “In this study, we discuss the results of the security analysis of seven open source TCP/IP stacks and report a bundle of 33 new vulnerabilities found in four of the seven analyzed stacks that are used by major IoT, OT and IT device vendors”CWECWE-20: Improper Input Validation (Class) “The product receives input or data, but it does not validate or incorrectly validates that the input has the properties that are required to process the data safely and correctly.”CWE-121: Stack-based Buffer Overflow (Simple) “A stack-based buffer overflow condition is a condition on where the buffer being overwritten is allocated on the stack (i.e., is a local variable or, rarely, a parameter to a function).”CVEICSA-13-291-01B “An attacker could cause the software to go into an infinite loop with a specifically crafted TCP packet, causing the process to crash. The system must be restarted manually to clear the condition.”CVE-2013-2811: GE Proficy HMI/SCADA DNP3 Driver Input Validation “The DNP master station server (DNPDrv.exe) that processes incoming messages via Serial, IP, or Modem does not validate all inputs and can be exploited to generate an unhandled exception or denial of service.”CVE-2019-6529: Kunbus PR100088 Modbus Gateway “An attacker could specially craft an FTP request that could crash the device.”CVE-2013-0662: Schneider Electric Serial Modbus Driver Buffer Overflow “The Modbus Serial Driver creates a listener on Port 27700/TCP. When a connection is made, the Modbus Application Header is first read into a buffer. If a large buffer size is specified in this header, a stack-based buffer overflow results. A second overflow problem can then be exploited by overwriting the return address, allowing the attacker to execute arbitrary code with the permission of the user running the software.”" }, { "title": "TID-203", "url": "/threats/TID-203.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-203: Malicious OS Kernel Driver/Module InstallableThreat DescriptionThreat actors may be able to install a driver or kernel module with malicious code to load a rootkit and manipulate the OS. D...", "content": "TID-203: Malicious OS Kernel Driver/Module InstallableThreat DescriptionThreat actors may be able to install a driver or kernel module with malicious code to load a rootkit and manipulate the OS. Drivers and kernel modules generally operate with a high-level privileges (e.g. Ring 0) and therefore can be used to manipulate the operation of the existing OS. OS kernel modules and drivers can typically be installed by any users with root/administrative permissions, though some OSes require that drivers be digitally signed by a trusted OEM before they can be installed on a device.Threat Maturity and EvidenceObserved Adversary BehaviorSyslogk Rootkit “The Syslogk rootkit installed itself as a Linux kernel module where it had the ability to hook functions/syscalls, manipulate and create its own syscalls, and launch a payload that contains a backdoor at the request of remote threat actors.”CWECWE-306 Missing Authentication for Critical Function “The product does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.”CVE" }, { "title": "TID-204", "url": "/threats/TID-204.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-204: Untrusted Programs Can Access Privileged OS FunctionsThreat DescriptionWithout a correctly enforced operating system privilege model, a compromised or untrusted application program could a...", "content": "TID-204: Untrusted Programs Can Access Privileged OS FunctionsThreat DescriptionWithout a correctly enforced operating system privilege model, a compromised or untrusted application program could access to data, memory, or programs associated with the underlying OS or other applications. This could also be used to further manipulate the underlying OS.Threat Maturity and EvidenceProof of ConceptSecurity Issues In Compiled PLC Logic (CoDeSys & ProConOs) - Reid Wightman (Dragos) (at S4x23) Researcher Reid Wightman demonstrated that it is possible to compromise a given feature of a controller, in this example the network protocol handler, and leverage that to overwrite memory in other critical portions of the CoDeSys and ProConOs runtime environments.CWECWE-693: Protection Mechanisms Failure (Pillar) “The product does not use or incorrectly uses a protection mechanism that provides sufficient defense against directed attacks against the product.”CVE" }, { "title": "TID-205", "url": "/threats/TID-205.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-205: Existing OS Tools Maliciously Used for Device ManipulationThreat DescriptionIf a threat actor has access to a valid OS account, they can utilize existing OS tools and system calls to insta...", "content": "TID-205: Existing OS Tools Maliciously Used for Device ManipulationThreat DescriptionIf a threat actor has access to a valid OS account, they can utilize existing OS tools and system calls to install malicious code or manipulate device operations. If the account and privileges are not sufficiently restricted, the threat actor may be able to add their own tools, modify other application layer programs, or even execute commands with elevated privileges (e.g., setuid/setgid). Further, threat actors can perform a living-off-the-land attack, where they choose to only use pre-installed functionality and install nothing else on the device. These types of attacks can be hard to detect because malicious behavior may be implemented using tools and functions with legitimate purposes.Threat Maturity and EvidenceObserved Adversarial BehaviorATT&CK Technique: Graphical User Interface (T0823) Procedure Example: 2015 Ukraine Electric Power Attack (C0028) “During the 2015 Ukraine Electric Power Attack, Sandworm Team utilized HMI GUIs in the SCADA environment to open breakers.”Volt Typhoon targets US critical infrastructure with living-off-the-land techniques “To achieve their objective, the threat actor puts strong emphasis on stealth in this campaign, relying almost exclusively on living-off-the-land techniques and hands-on-keyboard activity. “CWECWE-693: Protection Mechanisms Failure (Pillar) “The product does not use or incorrectly uses a protection mechanism that provides sufficient defense against directed attacks against the product.”CVE" }, { "title": "TID-206", "url": "/threats/TID-206.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-206: Memory Management Protections SubvertedThreat DescriptionWhile the use of memory permissions, such as non-executable stack and heap memory, can prevent threat actors from injecting and exe...", "content": "TID-206: Memory Management Protections SubvertedThreat DescriptionWhile the use of memory permissions, such as non-executable stack and heap memory, can prevent threat actors from injecting and executing malicious code, it is still possible to leverage a process’s existing code to perform a malicious function. For example, Return Oriented Programming (ROP) is a technique used by threat actors where once a process’s stack can be overwritten, a series of “returns” to portions of code within the process can be leveraged to cause an intended malicious function. This can include “returns” to existing libraries (e.g., libc), or other instruction sequences already in memory of that process.The exploitation of this threat may be possible through TID-219, and may also be enabled by the exploitation of TID-219.Threat Maturity and EvidenceKnown Exploitable WeaknessATT&CK Technique: Process Injection: Proc Memory (T1055.09) “Proc memory injection involves enumerating the memory of a process via the /proc filesystem (/proc/[pid]) then crafting a return-oriented programming (ROP) payload with available gadgets/instructions.”CWECVECVE-2024-28115 “FreeRTOS is a real-time operating system for microcontrollers. FreeRTOS Kernel versions through 10.6.1 do not sufficiently protect against local privilege escalation via Return Oriented Programming techniques should a vulnerability exist that allows code injection and execution. These issues affect ARMv7-M MPU ports, and ARMv8-M ports with Memory Protected Unit (MPU) support enabled (i.e. configENABLE_MPU set to 1). These issues are fixed in version 10.6.2 with a new MPU wrapper.”" }, { "title": "TID-207", "url": "/threats/TID-207.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-207: Container EscapeThreat DescriptionContainer environments, such as Docker and Kubernetes, share the same underlying kernel as the host operating system. Therefore, a kernel or container vul...", "content": "TID-207: Container EscapeThreat DescriptionContainer environments, such as Docker and Kubernetes, share the same underlying kernel as the host operating system. Therefore, a kernel or container vulnerability that allows the execution of unauthorized code could be used to escape the container. Further, container environments with incorrect configurations or excessive privileges could also allow a container escape. By escaping the container, the threat actor could manipulate the underlying OS or applications/data within other containers hosted on that device.Threat Maturity and EvidenceKnown Exploitable WeaknessATT&CK Technique: Escape to Host (T1611) “Adversaries may break out of a container to gain access to the underlying host. This can allow an adversary access to other containerized resources from the host level or to the host itself. In principle, containerized resources should provide a clear separation of application functionality and be isolated from the host environment.”Proof of ConceptBreaking out of Docker via runC – Explaining CVE-2019-5736 “A vulnerability in runc allows a malicious container to overwrite the host runc binary and thus gain root-level code execution on the host. The level of user interaction is being able to run any command… as root within a container in two possible contexts.”Crowdstrike: CVE-2022-0185: Kubernetes Container Escape Using Linux Kernel Exploit “On Jan. 18, 2022, researchers found a heap base buffer overflow flaw (CVE-2022-0185) in the Linux kernel (5.1-rc1+) function “legacy_parse_param” of filesystem context functionality, which allows an out-of-bounds write in kernel memory. Using this primitive, an unprivileged attacker can escalate its privilege to root, bypassing any Linux namespace restrictions.” Threat actors can then leverage this namespace restriction bypass and root level privilege to break out of the Kubernetes container.CWECVECVE-2019-5736 “runc through 1.0-rc6, as used in Docker before 18.09.2 and other products, allows attackers to overwrite the host runc binary (and consequently obtain host root access) by leveraging the ability to execute a command as root within one of these types of containers: (1) a new container with an attacker-controlled image, or (2) an existing container, to which the attacker previously had write access, that can be attached with docker exec. This occurs because of file-descriptor mishandling, related to /proc/self/exe.”CVE-2022-0185 “A heap-based buffer overflow flaw was found in the way the legacy_parse_param function in the Filesystem Context functionality of the Linux kernel verified the supplied parameters length. An unprivileged (in case of unprivileged user namespaces enabled, otherwise needs namespace CAP_SYS_ADMIN privilege) local user able to open a filesystem that does not support the Filesystem Context API (and thus fallbacks to legacy handling) could use this flaw to escalate their privileges on the system.”" }, { "title": "TID-208", "url": "/threats/TID-208.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-208: Virtual Machine EscapeThreat DescriptionVirtualized environments will oftentimes share the same underlying hardware as the hypervisor. A hypervisor or virtualized environment vulnerability...", "content": "TID-208: Virtual Machine EscapeThreat DescriptionVirtualized environments will oftentimes share the same underlying hardware as the hypervisor. A hypervisor or virtualized environment vulnerability that allows the execution of unauthorized code could be used to escape the virtualized environments. By escaping the environment, a threat actor could manipulate the underlying hypervisor, operating system, or application/data within other environments hosted on that device.Threat Maturity and EvidenceKnown Exploitable WeaknessVMWare Security Advisory (VMSA-2024-0006.1) “A malicious actor with local administrative privileges on a virtual machine may exploit this issue to execute code as the virtual machine’s VMX process running on the host. On ESXi, the exploitation is contained within the VMX sandbox whereas, on Workstation and Fusion, this may lead to code execution on the machine where Workstation or Fusion is installed.”“A malicious actor with privileges within the VMX process may trigger an out-of-bounds write leading to an escape of the sandbox.”CWECWE-693: Protection Mechanisms Failure (Pillar) “The product does not use or incorrectly uses a protection mechanism that provides sufficient defense against directed attacks against the product.”CVEImplementing Hypervisor-Specific Mitigations for Microarchitectural Data Sampling (MDS) Vulnerabilities (CVE-2018-12126, CVE-2018-12127, CVE-2018-12130, and CVE-2019-11091) in vSphere (67577) “Intel has disclosed details on a new wave of speculative-execution vulnerabilities known collectively as “Microarchitectural Data Sampling (MDS)” that can occur on Intel microarchitecture prior to 2nd Generation Intel® Xeon® Scalable Processors (formerly known as Cascade Lake). These issues may allow a malicious user who can locally execute code on a system to infer the values of data otherwise protected by architectural mechanisms.”Patch now! VMWare escape flaws are so serious even end-of-life software gets a fix VMware ESXi, Workstation, and Fusion updates address multiple security vulnerabilities (CVE-2024-22252, CVE-2024-22253, CVE-2024-22254, CVE-2024-22255) “VMWare’s decision to offer fixes for end-of-life software is because the vulnerabilities patched in these updates are escape flaws that allow a computer program to breack of the confines of a VM and affect the host operating system. Specifically, an attacker with privileged access, such as root or administrator, on a guest VM can access the hypervisor on the host.”" }, { "title": "TID-209", "url": "/threats/TID-209.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-209: Host Can Manipulate Guest Virtual MachinesThreat DescriptionIf a threat actor can access a hypervisor’s host infrastructure, such as through existing management interfaces, they could use ...", "content": "TID-209: Host Can Manipulate Guest Virtual MachinesThreat DescriptionIf a threat actor can access a hypervisor’s host infrastructure, such as through existing management interfaces, they could use that access to manipulate associated guest/virtualized systems. Since the hypervisor runs underneath the virtual machines, this threat will go undetected by the individual guest environments.Threat Maturity and EvidenceObserved Adversary BehaviorSandworm Disrupts Power in Ukraine Using a Novel Attack Against Operational Technology “Sandworm gained access to the OT environment through a hypervisor that hosted a supervisory control and data acquisition (SCADA) management instance for the victim’s substation environment…On October 10, the actor leveraged an optical disc (ISO) image named “a.iso” to execute a native MicroSCADA binary in a likely attempt to execute malicious control commands to switch off substations.”Bad VIB(E)s Mandiant Discoveries Researchers at Mandiant discovered adversarial usage of malware that runs on VM hosting machines. The malware is able to “1) maintain persistent administrative access to the hypervisor; 2) send commands to the hypervisor that will be routed to the guest VM for execution; 3) transfer files between the ESXi hypervisor and guest machines running beneath it; 4) tamper with logging services on the hypervisor; 5) execute arbitrary commands from one guest VM to another guest VM running on the same hypervisor”VMware ESXi Zero-Day Used by Chinese Espionage Actor to Perform Privileged Guest Operations on Compromised Hypervisors “Exploiting a zero-day vulnerability (CVE-2023-20867) that enabled the execution of privileged commands across Windows, Linux, and PhotonOS (vCenter) guest VMs without authentication of guest credentials from a compromised ESXi host and no default logging on guest VMs”CWECWE-306: Missing Authentication for Critical Function “The product does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.”CVECVE-2023-20867 “A fully compromised ESXi host can force VMware Tools to fail to authenticate host-to-guest operations, impacting the confidentiality and integrity of the guest virtual machine.”" }, { "title": "TID-210", "url": "/threats/TID-210.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-210: Device Vulnerabilities UnpatchableThreat DescriptionThreat actors will frequently target device components, like firmware, that have already known vulnerabilities instead of expending the ...", "content": "TID-210: Device Vulnerabilities UnpatchableThreat DescriptionThreat actors will frequently target device components, like firmware, that have already known vulnerabilities instead of expending the effort to discover new ones. If a device cannot update its firmware, especially upon the discovery of a vulnerability, threat actors may be able to target these vulnerabilities. This is because a vulnerability that is found once will be exploitable on all devices running that firmware in perpetuity. Threat actors’ ability to achieve their goals will depend on the nature of the unpatched vulnerability.If identified threats cannot be mitigated due to the inability to disable or update vulnerable components, the device will remain vulnerable. This may also be the result of the device reaching its End-of-Service/Support date, where it is no longer being supported by the vendor.Threat Maturity and EvidenceKnown Exploitable WeaknessRegarding Unit 42 New Mirai Variant Targeting Network Security Devices Some of the IoT devices targeted by the Mirai botnet could not be patched because the device had reached the vendor stated End of Service/Support date.CWECWE-1277: Firmware Not Updateable “The product does not provide its users with the ability to update or patch its firmware to address any vulnerabilities or weaknesses that may be present.”CWE-1329: Reliance on Component That is Not Updateable “The product contains a component that cannot be updated or patched in order to remove vulnerabilities or significant bugs.”CVE" }, { "title": "TID-211", "url": "/threats/TID-211.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-211: Device Allows Unauthenticated Firmware InstallationThreat DescriptionIf a device does not have a mechanism to authenticate firmware updates, a threat actor may be able to install malicious...", "content": "TID-211: Device Allows Unauthenticated Firmware InstallationThreat DescriptionIf a device does not have a mechanism to authenticate firmware updates, a threat actor may be able to install malicious or corrupt firmware on the device. In such cases, an adversary may craft a customized or maliciously modified firmware update package that, if properly formed, the device will install it without challenge. The unauthorized firmware could then be used to (i) “brick” the device and prevent it from being reset, (ii) install malicious logic on the device, including to gain persistence, or (iii) enable access to ease reverse engineering the device to identify remotely exploitable vulnerabilities, depending on how the firmware was formed and how the target device responds to it. Devices that perform only error checking of update packages prior to installation (e.g., parity checks, hash checks without a cryptographic signature, etc.) will be susceptible to this threat.This threat also includes any firmware authentication mechanisms that are not enforced on the device. If devices don’t check firmware integrity/download command authenticity on-device, threat actors may be able to falsely attest that their firmware is secure, thereby bypassing firmware integrity checks. One mechanism through which threat actors could perform this action is by taking advantage of a device’s reliance on a separate management device or service to check firmware. Threat actors may be able to spoof the management device firmware check and successfully initiate a malicious firmware download.Threat Maturity and EvidenceObserved Adversary BehaviorEQUATION GROUP: QUESTIONS AND ANSWERS “Although the implementation of their malware systems is incredibly complex, surpassing even Regin in sophistication, there is one aspect of the EQUATION group’s attack technologies that exceeds anything we have ever seen before. This is the ability to infect the hard drive firmware… The plugin supports two main functions: reprogramming the HDD firmware with a custom payload from the EQUATION group, and providing an API into a set of hidden sectors (or data storage) of the hard drive. This achieves several important things: Extreme persistence that survives disk formatting and OS reinstall. an invisible, persistent storage hidden inside the hard drive.”ATT&CK Technique: System Firmware (T0857)Procedure Example: 2015 Ukraine Electric Power Attack (C0028) “During the 2015 Ukraine Electric Power Attack, Sandworm Team overwrote the serial-to-ethernet gateways with custom firmware to make systems either disabled, shutdown, and/or unrecoverable.”Proof of ConceptOn the recent vulnerability in Diebold Nixdorf ATMs Researchers from Positive Technologies were able to demonstrate that it was possible to exploit a vulnerability that allowed them to upload valid firmware without a valid encryption key. From there, attackers or researchers would be able to modify the ATM firmware however they like.CWECWE-306: Missing Authentication for Critical Function “The product does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.”CVERockwell Automation Micrologix Remote Code Execution - CVE-2015-6492 Researchers at CyberX Threat Intelligence developed custom firmware that allowed them to perform memory dumps. Through these memory dumps, they were able to find memory vulnerabilities that allowed them to develop remote code execution exploits for Rockwell Automatic Micrologix controllers. They were then able to upload malicious firmware to the device." }, { "title": "TID-212", "url": "/threats/TID-212.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-212: FW/SW Update Integrity Shared Secrets ExtractionThreat DescriptionSome devices utilize a shared secret authentication scheme to verify firmware updates. This is an improvement over unauthe...", "content": "TID-212: FW/SW Update Integrity Shared Secrets ExtractionThreat DescriptionSome devices utilize a shared secret authentication scheme to verify firmware updates. This is an improvement over unauthenticated updates (as in TID-211) and can be coupled with or implemented as symmetric key encryption for added confidentiality. This process requires the shared secret to be present on the device for verification (or decryption). Often the same shared secret will be used across many or all examples of that model device, therefore if the secret is compromised on one device it makes all others vulnerable. A threat actor may extract the secret via various means then use it to fabricate a malicious firmware update that is accepted by all devices that use the same integrity mechanism and shared secret.Malicious firmware or software could then be installed to (i) “brick” the device and prevent it from being reset, (ii) install malicious logic on the device, including to gain persistence, or (iii) enable access to ease reverse engineering the device to identify remotely exploitable vulnerabilities on the device.Threat Maturity and EvidenceProof of ConceptSiemens SIMATIC S7-1500 Series Allow for Bypass of All Protected Boot Features “The Siemens S7-1500 series PLCs implement a boot-time firmware validation scheme using a combination of hardware-enabled firmware decryption and binary integrity validation in the Siemens ADONIS operating system. Multiple architectural vulnerabilities exist which allow attackers to bypass all protected boot features, resulting in persistent arbitrary modification of operating code and data. With physical access to a single device, attackers can exploit the vulnerabilities to generate valid AES keys for most of the S7-1500 series firmwares, including the one modified by attackers. The custom-modified firmware can be authenticated and decrypted by the original boot process. By flashing this malicious firmware on a target device, either physically or by exploiting an existing remote code execution vulnerability, attackers could persistently gain arbitrary code execution and potentially circumvent any official security and firmware updates, without the user’s knowledge.”CWECVECVE-2022-38773 “Affected devices do not contain an Immutable Root of Trust in Hardware. With this the integrity of the code executed on the device can not be validated during load-time. An attacker with physical access to the device could use this to replace the boot image of the device and execute arbitrary code.”" }, { "title": "TID-213", "url": "/threats/TID-213.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-213: Faulty FW/SW Update Integrity VerificationThreat DescriptionTo avoid the weaknesses of a shared secret verification (see TID-212), devices may utilize a digital signature verification sche...", "content": "TID-213: Faulty FW/SW Update Integrity VerificationThreat DescriptionTo avoid the weaknesses of a shared secret verification (see TID-212), devices may utilize a digital signature verification scheme based on asymmetric public key cryptography. However, if the device does not correctly verify a firmware/software signature correctly, a threat actor can bypass the device’s authenticity checking mechanisms to upload malicious or corrupt version. The unauthorized firmware could “brick” the device, preventing it from being reset. This could also be used to install malicious logic on the device.NOTE: firmware/software signature here refers to processes that use cryptographic keys to verify firmware integrity and origin. These can include keyed hashes and/or asymmetric key signing. This does not include encrypting firmware with no other integrity verification mechanisms in-place.Threat Maturity and EvidenceKnown Exploitable WeaknessKEV - CVE-2023-41991 “Apple iOS, iPadOS, macOS, and watchOS contain an improper certificate validation vulnerability that can allow a malicious app to bypass signature validation.”CWECWE-347: Improper Verification of Cryptographic Signature “The product does not verify, or incorrectly verifies, the cryptographic signature for data.”CVECVE-2021-43394 “STMicroelectronics STSAFE-J 1.1.4, J-SAFE3 1.2.5, and J-SIGN sometimes allow attackers to abuse signature verification. This is associated with the ECDSA signature algorithm on the Java Card J-SAFE3 and STSAFE-J platforms exposing a 3.0.4 Java Card API…”CVE-2023-33768 “Incorrect signature verification of the firmware during the Device Firmware Update process of Belkin Wemo Smart Plug WSP080 v1.2 allows attackers to cause a Denial of Service (DoS) via a crafted firmware file.”Cisco IOS XE Software Digital Signature Verification Bypass Vulnerability - CVE-2020-3209 “A vulnerability in software image verification in Cisco IOS XE Software could allow an unauthenticated, physical attacker to install and boot a malicious software image or execute unsigned binaries on an affected device.The vulnerability is due to an improper check on the area of code that manages the verification of the digital signatures of system image files during the initial boot process. An attacker could exploit this vulnerability by loading unsigned software on an affected device. A successful exploit could allow the attacker to install and boot a malicious software image or execute unsigned binaries on the targeted device.”CVE-2023-41991 “A certificate validation issue was addressed. This issue is fixed in macOS Ventura 13.6, iOS 16.7 and iPadOS 16.7. A malicious app may be able to bypass signature validation. Apple is aware of a report that this issue may have been actively exploited against versions of iOS before iOS 16.7.”" }, { "title": "TID-214", "url": "/threats/TID-214.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-214: Secrets Extracted from Device Root of TrustThreat DescriptionSome device have mutable or immutable secure Roots of Trust (ROTs) that may store keys or secrets. If the device has a ROT mech...", "content": "TID-214: Secrets Extracted from Device Root of TrustThreat DescriptionSome device have mutable or immutable secure Roots of Trust (ROTs) that may store keys or secrets. If the device has a ROT mechanism to validate the authenticity of the firmware/software, the ROT can be either a software or hardware mechanisms, such as a Trusted Platform Module (TPM), firmware TPM (fTPM), Secure Element, or similar security module. If a threat actor can access authentication material on the ROT, such as the keys or other secrets, they can potentially use them to sign a malicious version of firmware/software which can then be installed on the device.Threat Maturity and EvidenceProof of ConceptUprooting Trust: Learnings from an Unpatchable Hardware Root-of-Trust Vulnerability in Siemens S7-1500 PLCs “Specifically, this assessment is conducted by uncovering novel vulnerabilities related to the discrete RoT implementation on the Siemens S7-1500 series Programmable Logic Controllers (PLCs). Our findings are cautionary evidence of how flawed assumptions related to RoT implementation may allow malicious actors to spoof authentication credentials, re-encrypt firmware, and ultimately gain covert, privileged control over these devices without invasive or destructive practices.”100 Seconds of Solitude: Defeating Cisco Trust Anchor With FPGA Bitstream Shenanigans “A vulnerability in the logic that handles access control to one of the hardware components in Cisco’s proprietary Secure Boot implementation could allow an authenticated, local attacker to write a modified firmware image to the component. This vulnerability affects multiple Cisco products that support hardware-based Secure Boot functionality.”faulTPM: Exposing AMD fTPMs’ Deepest Secrets “In this paper, we show that AMD’s fTPMs are vulnerable to physical attacks against their execution environment: the AMD-SP. Our attack utilizes the AMD-SP’s vulnerability to voltage fault injection attacks to extract a chip-unique secret from the targeted CPU. This secret is subsequently used to derive the storage and integrity keys protecting the fTPM’s non-volatile (NV) data stored on the Basic Input/Output System (BIOS) flash chip.”CWECWE-1326: Missing Immutable Root of Trust in Hardware “A missing immutable root of trust in the hardware results in the ability to bypass secure boot or execute untrusted or adversarial boot code.”CVECVE-2022-38773 “Affected devices do not contain an Immutable Root of Trust in Hardware. With this the integrity of the code executed on the device can not be validated during load-time. An attacker with physical access to the device could use this to replace the boot image of the device and execute arbitrary code.”" }, { "title": "TID-215", "url": "/threats/TID-215.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-215: Unencrypted SW/FW UpdatesThreat DescriptionIf the firmware/software update is not encrypted at rest in storage it can be reverse engineered to identify potential vulnerabilities or extract...", "content": "TID-215: Unencrypted SW/FW UpdatesThreat DescriptionIf the firmware/software update is not encrypted at rest in storage it can be reverse engineered to identify potential vulnerabilities or extract other information needed to protect devices (e.g., passwords, cryptographic keys). Firmware/software updates can often be directly downloaded from the Internet and reverse engineered, however, firmware/software updates that are unencrypted in transit may also be intercepted and analyzed over-the-wire.Threat Maturity and EvidenceProof of Concept Reverse Engineering Obfuscated Firmware for Vulnerability Analysis Nozomi researchers demonstrated how the ability to reverse engineer firmware gives attackers the ability to find novel vulnerabilities, or the presence of older vulnerabilities, on a given device.CWECWE-311: Missing Encryption of Sensitive Data “The product does not encrypt sensitive or critical information before storage or transmission.”CVE" }, { "title": "TID-216", "url": "/threats/TID-216.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-216: Firmware Update Rollbacks AllowedThreat DescriptionFirmware updates will oftentimes include fixes to security vulnerabilities, meaning that past versions will contain security threats to t...", "content": "TID-216: Firmware Update Rollbacks AllowedThreat DescriptionFirmware updates will oftentimes include fixes to security vulnerabilities, meaning that past versions will contain security threats to the devices. If a threat actor can initiate a firmware update on the device, they may be able to “upgrade” to a previous firmware version with known vulnerabilities. By completing an “upgrade” to a version with vulnerabilities, the threat actor could then potentially exploit that device to gain additional access or privileges.Threat Maturity and EvidenceKnown Exploitable WeaknessChina APT Cracks Cisco Firmware in Attacks Against the US and Japan Threat group BlackTech (Palmerworm, Temp.Overboard, Circuit Panda, and Radio Panda) has been performing firmware downgrade attacks. Once the firmware is downgraded, BlackTech can leverage older vulnerabilities to “hot patch old firmware in memory” with custom firmware code. They then can achieve persistence and pivot from “smaller, international subsidiaries to headquarters of affected organizations.”Proof of ConceptPT-2021-01: Encryption bypass when downloading a firmware update in Diebold-Nixdorf CMDv5 “With access to the dispenser controller USB port, an attacker can install an outdated or modified firmware version (with malicious content) to bypass the encryption and withdraw cash.”CWECVECVE-2018-9099 “Encryption bypass when downloading a firmware update in Diebold-Nixdorf CMDv5” The researches demonstrated this exploit by loading outdated and vulnerable firmware." }, { "title": "TID-217", "url": "/threats/TID-217.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-217: Remotely Initiated Updates Can Cause DoSThreat DescriptionWhen firmware/software update process is initiated on a device, it may enter a different operational mode where it stops performin...", "content": "TID-217: Remotely Initiated Updates Can Cause DoSThreat DescriptionWhen firmware/software update process is initiated on a device, it may enter a different operational mode where it stops performing key functions, including networking, data collection, or control functions. Therefore a threat actor could remotely initiate the firmware/software update to cause a denial of service on the device.Threat Maturity and EvidenceObserved Adversary BehaviorATT&CK Technique: Activate Firmware Update Mode (T0800) Procedure Example: Industroyer (S0604) “The Industroyer SIPROTEC DoS module places the victim device into firmware update mode. This is a legitimate use case under normal circumstances, but in this case is used the adversary to prevent the SIPROTEC from performing its designed protective functions. As a result the normal safeguards are disabled, leaving an unprotected link in the electric transmission.”CWECWE-400: Uncontrolled Resource Consumption “The product does not properly control the allocation and maintenance of a limited resource, thereby enabling an actor to influence the amount of resources consumed, eventually leading to the exhaustion of available resources.”CVECRASHOVERRIDE - CVE-2015-5374 “Specially crafted packets sent to port 50000/UDP could cause a denial-of-service of the affected device. A manual reboot may be required to recover the service of the device.” “The DoS condition places the victim SIPROTEC device in “firmware update” mode. The effect triggered is practical and useful in legitimate firmware update instances given the limited resources available to legacy SIPROTEC devices (especially for memory).”" }, { "title": "TID-218", "url": "/threats/TID-218.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-218: Operating System Susceptible to RootkitThreat DescriptionA threat actor may be able to install a rootkit that can manipulate the operating system (OS). Rootkits can evade OS protections b...", "content": "TID-218: Operating System Susceptible to RootkitThreat DescriptionA threat actor may be able to install a rootkit that can manipulate the operating system (OS). Rootkits can evade OS protections by installing themselves at the same privilege-level as the OS. A threat actor can use a rootkit to maintain persistence on the device, evade detection, or execute malicious programs/logic.Threat Maturity and EvidenceKnown Exploitable WeaknessATT&CK Technique: Rootkit (T0851) Procedure Example: Stuxnet (S0603) “One of Stuxnet’s rootkits is contained entirely in the fake s7otbxdx.dll. In order to continue existing undetected on the PLC it needs to account for at least the following situations: read requests for its own malicious code blocks, read requests for infected blocks (OB1, OB35, DP_RECV), and write requests that could overwrite Stuxnets [sic] own code. Stuxnet contains code to monitor and intercept these types of requests. The rootkit modifies these requests so that Stuxnets [sic] PLC code is not discovered or damaged.”Proof of ConceptGhost in the PLC Researchers Abbasi and Hasemi were able to create the Ghost in the PLC rootkit. This rootkit is able to embed itself in a PLC with detection evasion mechanisms. It is then able to achieve arbitrary read/write in registers with/without root access.Air Force Institute of Technology (AFIT) “Researchers with the U.S. Air Force Institute of Technology (AFIT) have created a prototype rootkit that can sit undetected in the firmware of a programmable logic controller (PLC) device and corrupt utility and plant floor operations.”CWECWE-693: Protection Mechanisms Failure (Pillar) “The product does not use or incorrectly uses a protection mechanism that provides sufficient defense against directed attacks against the product.”CVE" }, { "title": "TID-219", "url": "/threats/TID-219.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-219: OS/Kernel Privilege EscalationThreat DescriptionOperating Systems and Kernels frequently run at the highest levels of permissions. If processes with lower permissions are able to exploit a...", "content": "TID-219: OS/Kernel Privilege EscalationThreat DescriptionOperating Systems and Kernels frequently run at the highest levels of permissions. If processes with lower permissions are able to exploit a vulnerability in the OS or Kernel (such as a vulnerability enabled by TID-206), they may be able to raise the privileges of their process. If a threat actor were to exploit this vulnerability, they may be able to raise the permissions of a malicious process, thereby granting themselves greater access to the device.Threat Maturity and EvidenceObserved Adversary BehaviorATT&CK Technique: Exploitation for Privilege Escalation (T0890) Procedure Example: Triton (S1009) “Triton leverages a previously-unknown vulnerability affecting Tricon MP3008 firmware versions 10.010.4 allows an insecurely-written system call to be exploited to achieve an arbitrary 2-byte write primitive, which is then used to gain supervisor privileges.”CWECWE-250: Execution with Unnecessary Privileges “The product performs an operation at a privilege level that is higher than the minimum level required, which creates new weaknesses or amplifies the consequences of other weaknesses.”CVE" }, { "title": "TID-220", "url": "/threats/TID-220.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-220: Unpatchable Hardware Root of TrustThreat DescriptionHardware roots of trust can be used to support many desirable device security functions, such as secure key and secret storage, secure b...", "content": "TID-220: Unpatchable Hardware Root of TrustThreat DescriptionHardware roots of trust can be used to support many desirable device security functions, such as secure key and secret storage, secure boot, and firmware integrity measurement. These functions often rely on the root of trust being immutable, preventing a threat actor from making changes to code or data in the root of trust that would undermine the security functions built atop them. However, if the root of trust implementation is flawed, immutability prevents the revocation and replacement of compromised keys, and prevents patching vulnerable code. Therefore, if threat actors have access to a mechanism to obtain the secret data or code, and/or those secrets and code are shared over multiple devices and threat actors can obtain them, then devices will remain vulnerable past threat disclosure and may have to be removed from operation and replaced with new patched versions.Threat Maturity and EvidenceKnown Exploitable WeaknessGlitching the Switch The researchers show how they identified an exploitable flaw in the immutable 1st stage boot ROM code of the Nvidia Tegra X1 SoC, which the Nintendo Switch game console is built upon. The secret boot ROM code serves as the root of trust for secure verified boot on the Tegra X1 platform. A buffer overflow vulnerability in the recovery mode of the boot ROM allows a threat actor to bypass firmware verification and execute unauthorize custom or modified firmware on the device. Because the flawed code is stored in unmodifiable memory within the X1 system-on-chip, this vulnerability cannot be patched in hardware revisions that contain it and could only be fixed on newly manufactured Switch consoles.Proof of ConceptUprooting Trust: Learnings from an Unpatchable Hardware Root-of-Trust Vulnerability in Siemens S7-1500 PLCs “The vulnerable ATECC-based RoT hardware implementation is deployed across the Siemens S7-1500 series product line. Because each device is loaded with the exact same cryptographic material used to generate decryption seeds and keys, adversaries may abuse the hardware RoT to decrypt, modify, and re-encrypt firmware for all devices within this family. For example, an ATECC RoT chip may be removed or instrumented from one specific S7-1500 series device, and used to generate valid tampered firmware for a separate device.”CWECWE-1329: Reliance on Component That is Not Updateable “The product contains a component that cannot be updated or patched in order to remove vulnerabilities or significant bugs.”CVE" }, { "title": "TID-221", "url": "/threats/TID-221.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-221: Authentication Bypass By Message ReplayThreat DescriptionSome devices will allow for authentication over the network, but do not implement mechanisms (i.e. nonces, timestamps) to ensure th...", "content": "TID-221: Authentication Bypass By Message ReplayThreat DescriptionSome devices will allow for authentication over the network, but do not implement mechanisms (i.e. nonces, timestamps) to ensure that messages containing credentials cannot be reused. Devices like these are potentially vulnerable to replay attacks. In these attacks, threat actors may be able to take legitimate packets that were sent over the network, capture them, and send them again to the device. If the device accepts these packets, threat actors may be able to initiate unauthorized actions. Additionally, if threat actors are able to edit the contents of those packets, they can potentially control the device remotely.Threat Maturity and EvidenceObserved Adversary BehaviorATT&CK T1212 Exploitation for Credential Access “Another example of this is replay attacks, in which the adversary intercepts data packets sent between parties and then later replays these packets. If services don’t properly validate authentication requests, these replayed packets may allow an adversary to impersonate one of the parties and gain unauthorized access or privileges.”CWECWE-294: Authentication Bypass by Capture-replay “A capture-replay flaw exists when the design of the product makes it possible for a malicious user to sniff network traffic and bypass authentication by replaying it to the server in question to the same effect as the original message (or with minor changes).”CVE" }, { "title": "TID-222", "url": "/threats/TID-222.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-222: Critical System Service May Be DisabledThreat DescriptionVarious devices and associated services are necessary to support communications and connections on a network. If a key service is d...", "content": "TID-222: Critical System Service May Be DisabledThreat DescriptionVarious devices and associated services are necessary to support communications and connections on a network. If a key service is disabled, terminated, or reconfigured, a threat actor can disrupt or disable communications on a network. This could occur on various network equipment, such as switches, firewalls, or routers, along with other devices which may have dedicated processes to facilitate communication with specific protocols or physical mediums (e.g., serial).Threat Maturity and EvidenceObserved Adversary BehaviorATT&CK Technique: Service Stop (T0881) Procedure Example: Industroyer (S0604) “Industroyer has the capability to stop a service itself, or to login as a user and stop a service as that user.”Procedure Example: Industroyer2 (S1072) “Industroyer2 has the capability to terminate specified processes (i.e., PServiceControl.exe and PService_PDD.exe) and rename each process to prevent restart. These are defined through a hardcoded configuration.”CWECWE-306 Missing Authentication for Critical Function “The product does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.”CWE-15: External Control of System or Configuration Setting “One or more system settings or configuration elements can be externally controlled by a user.”CVE" }, { "title": "TID-223", "url": "/threats/TID-223.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-223: System Susceptible to RAM ScrapingThreat DescriptionIf the threat actor can obtain sufficient privileges on the devices, they may be able to install runtime tools to directly extract the c...", "content": "TID-223: System Susceptible to RAM ScrapingThreat DescriptionIf the threat actor can obtain sufficient privileges on the devices, they may be able to install runtime tools to directly extract the contents of some or all of the system RAM. This can grant the actor access to the internal state of other applications executing on the device as they process potentially sensitive data (e.g., password, keys, credentials, financial data, PII, etc.) even if that data is never committed to storage in a file or database. If the access extends to physical RAM, this can enable the threat actor to bypass other inter-process security boundaries created by the operating system.Threat Maturity and EvidenceKnown Exploitable WeaknessHow RAM Scrapers Work: The Sneaky Tools Behind the Latest Credit Card Hacks “There are more than a dozen RAM scrapers sold in the underground market these days. There’s Dexter, Soraya, ChewBacca and BlackPOS to name a few… Once on a targeted system, RAM scrapers work by examining the list of processes that are running on the system and inspecting the memory for data that matches the structure of credit card data, such as the account number, expiration date, and other information stored on a card’s magnetic stripe. Some scrapers are efficient and grab only the golden numbers the attackers seek; others are more sloppy and grab a lot of dirt with their gold.”CWECVE" }, { "title": "TID-224", "url": "/threats/TID-224.html", "categories": "System Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-224: Excessive Access via Software Diagnostic FeaturesThreat DescriptionIf a device has debugging capabilities (e.g., diagnostic tools, debug logs, etc.) that are not authenticated or can be ac...", "content": "TID-224: Excessive Access via Software Diagnostic FeaturesThreat DescriptionIf a device has debugging capabilities (e.g., diagnostic tools, debug logs, etc.) that are not authenticated or can be accessed in unintended ways, it may be possible for a threat actor to attach to these debuggers. Debuggers frequently have privileged access, which would give the threat actors increased access over the device.Threat Maturity and EvidenceObserved Adversary BehaviorATT&CK T1623 Command and Scripting Interpreter “Most systems come with some built-in command-line interface and scripting capabilities, for example, Android is a UNIX-like OS and includes a basic Unix Shell that can be accessed via the Android Debug Bridge (ADB)”Proof of ConceptATM logic attacks: scenarios, 2018 “Starting the ATM operating system in a special mode can offer a way to bypass security… After starting the ATM in debug mode and connecting to the COM ports, an attacker can seize full control of the ATM by using the WinDbg utility.”CWECWE-1295: Debug Messages Revealing Unnecessary Information “The product fails to adequately prevent the revealing of unnecessary and potentially sensitive system information within debugging messages.”CVE" }, { "title": "TID-301", "url": "/threats/TID-301.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-301: Applications Binaries ModifiedThreat DescriptionA threat actor could modify application-level binaries or libraries on the device to introduce unauthorized code, maintain persistence, or e...", "content": "TID-301: Applications Binaries ModifiedThreat DescriptionA threat actor could modify application-level binaries or libraries on the device to introduce unauthorized code, maintain persistence, or evade detection. This could also include the modification of runtime libraries used to support the execution of programs, along with key PLC function blocks used to structure the execution of application function blocks, such as organizational blocks.Threat Maturity and EvidenceObserved Adversarial TechniqueATT&CK Technique: Modify Controller Tasking (T0821) Procedure Example: Stuxnet (S0603) “Stuxnet infects OB1 so that its malicious code sequence is executed at the start of a cycle. It also infects OB35. OB35 acts as a watchdog, and on certain conditions, it can stop the execution of OB1.”CWECWE-862: Missing Authorization “The product does not perform an authorization check when an actor attempts to access a resource or perform an action.”CVE" }, { "title": "TID-302", "url": "/threats/TID-302.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-302: Install Untrusted ApplicationThreat DescriptionA threat actor can install a malicious program to the device to manipulate its operations or prevent the device from operating as expected. D...", "content": "TID-302: Install Untrusted ApplicationThreat DescriptionA threat actor can install a malicious program to the device to manipulate its operations or prevent the device from operating as expected. Devices can utilize a variety of different approaches to support the download, modification, and execution of programs/logic. For example, some devices might support program downloads through traditional operating system interfaces (e.g., Telnet, SSH, RDP), while other devices, such as PLCs, often use proprietary interfaces to deploy and execute IEC 61131 based logic programs. Devices are often dependent on a remote system, such as a Windows workstations, with a vendor-specific application program or IDE to develop and transfer the programs to the device. However, devices often assume that all code originates from that trusted program/IDE, and therefore do not perform any integrity checking of the code before downloading or executing it.Threat Maturity and EvidenceObserved Adversarial TechniqueATT&CK Technique: Program Download (T0843) Procedure Example: Triton (S1009) “Triton leveraged the TriStation protocol to download programs onto Triconex Safety Instrumented System”.Procedure Example: Incontroller (S1045) “The Incontroller software was able to perform program downloads to a controller through a self-contained API.”CWECWE-494: Download of Code Without Integrity Check “The product downloads source code or an executable from a remote location and executes the code without sufficiently verifying the origin and integrity of the code.”CVE" }, { "title": "TID-303", "url": "/threats/TID-303.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-303: Excessive Trust in Offboard Management/IDE SoftwareThreat DescriptionIf device management is intended to be performed by a dedicated engineering software platform or integrated development...", "content": "TID-303: Excessive Trust in Offboard Management/IDE SoftwareThreat DescriptionIf device management is intended to be performed by a dedicated engineering software platform or integrated development environment (IDE), the threat actor could potentially modify the software platform, such as by manipulating key .dlls, to install malicious code or manipulate the operation of the device. This can provide the threat actor with a mechanism to bypass protections/countermeasures.Threat Maturity and EvidenceObserved Adversarial TechniqueATT&CK Technique: Rootkit (T0851) Procedure Example: Stuxnet (S0603) “Stuxnet has the capability, through malicious .DLLs, to intercept read requests and write requests, include those the could overwrite code on the device”Proof of ConceptApplying a Stuxnet Type Attack to a Modicon PLC “Implementing Stuxnet type attacks on PLC’s from other manufacturers is possible. In the case of the Modicon M340, this porting is easier because the PLC executes ARM bytecode natively (and not proprietary assembly code).This exercise gives us the opportunity to extend M340 functionality by developing automation code directly in C. Now we can perform low level actions which are very difficult to do with other languages (e.g Ladder, Grafcet).We developed a program that allows the changing of logical programs on the fly (no need for recompilation – stop – upload – start steps in Unity)”The Old Switcheroo: Hiding Code on Rockwell Automation PLCs “Team82 decided to test for these Stuxnet-type of attacks on the Rockwell Automation PLC platform. Our research uncovered two vulnerabilities that expose the company’s Logix Controllers and Logix Designer application for engineering workstations to attacks that allow threat actors to stealthily modify automation processes.Programmable logic and predefined variables drive these processes, and changes to either will alter normal operation of the PLC and the process it manages. An attacker with the ability to modify PLC logic could cause physical damage to factories that affect the safety of manufacturing assembly lines, the reliability of robotic devices, or in a much more dramatic example, as we saw with Stuxnet, attackers could damage centrifuges at the core of uranium enrichment at a nuclear facility.”CWECWE-114: Process Control (Class) “Executing commands or loading libraries from an untrusted source or in an untrusted environment can cause an application to execute malicious commands (and payloads) on behalf of an attacker.”CVECVE-2022-1159 “Rockwell Automation Studio 5000 Logix Designer (all versions) are vulnerable when an attacker who achieves administrator access on a workstation running Studio 5000 Logix Designer could inject controller code undetectable to a user.”" }, { "title": "TID-304", "url": "/threats/TID-304.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-304: Manipulate Runtime EnvironmentThreat DescriptionA threat actor can manipulate the runtime environments on a device to maintain persistence on the device and overwrite various functionaliti...", "content": "TID-304: Manipulate Runtime EnvironmentThreat DescriptionA threat actor can manipulate the runtime environments on a device to maintain persistence on the device and overwrite various functionalities, such as protocol handlers. If the application program (which the threat actor can deploy on the device through a program download) has access to memory where the runtime environment and libraries are located, they could overwrite these libraries with malicious code. This is especially risky because runtime environments often must allow the dynamic addition of modules/functions to support user-specific customization or configuration of devices, which may require that the runtime support writeable memory.NOTE: This differs from TID-305 because this threat has a focus on code being used to manipulate the device runtime environment itself. TID-305 on the other hand pertains to a malicious program itself being used to perform device actions.Threat Maturity and EvidenceProof of ConceptSecurity Issues In Compiled PLC Logic (CoDeSys & ProConOs) At S4x23, Reid Wightman demonstrated that if memory space is shared between program runtime, program logic, and other device functions such as network handling, it is possible to create malicious programs that can manipulate a device’s runtime environment from the application program.CWECWE-119: Improper Restriction of Operations within the Bounds of a Memory Buffer “The product performs operations on a memory buffer, but it can read from or write to a memory location that is outside of the intended boundary of the buffer.”CVECODESYS Security Advisory 2023-04 (CVE-2022-4046, CVE-2023-28355) “The CODESYS Control V3 runtime system does not restrict the memory accesses of the PLC application code to the PLC application data and does not sufficiently check the integrity of the application code by default. This could be exploited by authenticated PLC programmers.”" }, { "title": "TID-305", "url": "/threats/TID-305.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-305: Program Executes Dangerous System CallsThreat DescriptionIf the device allows the downloading and execution of native binaries on the device, a threat actor can deploy a malicious program ...", "content": "TID-305: Program Executes Dangerous System CallsThreat DescriptionIf the device allows the downloading and execution of native binaries on the device, a threat actor can deploy a malicious program that leverages the environment’s privileges to gain unwanted or excessive access to the device, such as through “dangerous” system calls. These system calls could be used to manipulate the device’s firmware, maintain persistence, execute unwanted logic, or obtain a C2 channel.Additionally, the device may assume the program comes from a trusted integrated development environment (IDE), and therefore does not restrict the privileges or system calls the program can access. However, if the threat actor compiles the program without the IDE, they can violate this assumption.NOTE: This differs from TID-304 because this threat has a focus on a malicious program itself being used to perform device actions. TID-304 on the other hand pertains to code being used to manipulate the device runtime environment itself.Threat Maturity and EvidenceObserved Adversarial TechniqueATT&CK Technique: Exploitation for Privilege Escalation (T0890) Procedure Example: Triton (S1009) “Triton leverages a previously-unknown vulnerability affecting Tricon MP3008 firmware versions 10.010.4 allows an insecurely-written system call to be exploited to achieve an arbitrary 2-byte write primitive, which is then used to gain supervisor privileges.”ATT&CK Technique: Native API (T0834) Procedure Example: Stuxnet (S0603) “Stuxnet calls system function blocks which are part of the operating system running on the PLC. They’re used to execute system tasks, such as reading the system clock (SFC1) and generating data blocks on the fly.”CWE[CWE-250: Execution with Unnecessary Privileges (Base)] “The product performs an operation at a privilege level that is higher than the minimum level required, which creates new weaknesses or amplifies the consequences of other weaknesses.”CVECVE-2018-8872 “In Schneider Electric Triconex Tricon MP model 3008 firmware versions 10.0-10.4, system calls read directly from memory addresses within the control program area without any verification. Manipulating this data could allow attacker data to be copied anywhere within memory.”" }, { "title": "TID-306", "url": "/threats/TID-306.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-306: Sandboxed Environments EscapedThreat DescriptionWhile restricting the execution of external programs within a sandboxed execution environment can mitigate the threat of programs having exc...", "content": "TID-306: Sandboxed Environments EscapedThreat DescriptionWhile restricting the execution of external programs within a sandboxed execution environment can mitigate the threat of programs having excessive privileges or memory access, vulnerabilities within that environment could be exploited to escape the sandbox. This would allow the threat actor to escalate their privileges to more broadly manipulate the device’s operation and evade detections.Threat Maturity and EvidenceProof of ConceptThe Race to Native Code Execution in PLCs Claroty demonstrated in their research that it was possible to break out of the runtime environment on a PLC and execute code natively in protected areas of memory. “Escaping the sandbox means an attacker would be able to read and write from anywhere on the PLC, and could patch an existing VM opcode in memory with malicious code to root the device.”CWECWE-693: Protection Mechanism Failure “The product does not use or incorrectly uses a protection mechanism that provides sufficient defense against directed attacks against the product.”CVECVE-2020-15782 “A vulnerability has been identified in [Siemens devices]… Affected devices are vulnerable to a memory protection bypass through a specific operation. A remote unauthenticated attacker with network access to port 102/tcp could potentially write arbitrary data and code to protected memory areas or read sensitive data to launch further attacks.”" }, { "title": "TID-307", "url": "/threats/TID-307.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-307: Device Code Representations InconsistentThreat DescriptionMany devices that allow the execution of custom application programs, such as IEC 61131 based programs, also support “program uplo...", "content": "TID-307: Device Code Representations InconsistentThreat DescriptionMany devices that allow the execution of custom application programs, such as IEC 61131 based programs, also support “program uploads” to extract the running code from the device for various diagnostic functions. To support the program upload function, the device must provide the IDE with machine readable and human-presentable source code, rather than the executable compiled code. Therefore, the device must store two copies of the code, the source code (used to inform program upload function) and the executed compiled code. If a threat actor can modify the source code in memory, it will prevent the program upload function from accurately uploading/reporting the actual code executing on the device and allow any later downloaded malicious code to stay undetected.Threat Maturity and EvidenceProof of ConceptThe Old Switcheroo: Hiding Code on Rockwell Automation PLCs Claroty researchers were able to edit the code representation that gets uploaded to the EWS during a program upload without having their malicious machine-code also getting uploaded. This resulted in operators seeing code after the program upload that wasn’t the actual code on the machine, which was the Claroty malicious machine code.CWECWE-829: Inclusion of Functionality from Untrusted Control Sphere “The product imports, requires, or includes executable functionality (such as a library) from a source that is outside of the intended control sphere.”CVECVE-2022-1161 “An attacker with the ability to modify a user program may change user program code on some ControlLogix, CompactLogix, and GuardLogix Control systems. Studio 5000 Logix Designer writes user-readable program code to a separate location than the executed compiled code allowing an attacker to change one and not the other.”" }, { "title": "TID-308", "url": "/threats/TID-308.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-308: Code Overwritten to Avoid DetectionThreat DescriptionThe threat actor can overwrite a previously deployed/installed malicious program with a dummy program in order to evade the detection o...", "content": "TID-308: Code Overwritten to Avoid DetectionThreat DescriptionThe threat actor can overwrite a previously deployed/installed malicious program with a dummy program in order to evade the detection of the malicious program. This can be used to prevent detection by monitoring tools or engineering software that performs periodic “Program Uploads” to inspect the contents of a program on the device.While some devices utilize error detection codes, such as CRCs or Checksums, these are not cryptographically strong and a threat actor can easily generate a program with the same CRC/Checksum (i.e., by simply padding the program).Threat Maturity and EvidenceObserved Adversarial TechniqueATT&CK Technique: Indicator Removal on Host (T0872) Procedure Example: Triton (S1009) “Triton would reset the controller to the previous state over TriStation and if this failed it would write a dummy program to memory in what was likely an attempt at anti-forensics.”CWECWE-223: Omission of Security-relevant Information “The product does not record or display information that would be important for identifying the source or nature of an attack, or determining if an action is safe.”CWE-778: Insufficient Logging “When a security-critical event occurs, the product either does not record the event or omits important details about the event when logging it.”CVE" }, { "title": "TID-309", "url": "/threats/TID-309.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-309: Device Exploits Engineering WorkstationThreat DescriptionIf the integrated development environment (IDE) or vendor software that is used to manage a device is not sufficiently secure, it c...", "content": "TID-309: Device Exploits Engineering WorkstationThreat DescriptionIf the integrated development environment (IDE) or vendor software that is used to manage a device is not sufficiently secure, it could be exploited or crashed when it connects to the device, such as during a file transfer or program upload. A threat actor could use a compromised device, such as a PLC, to exploit a vulnerability within the engineering software/IDE used to manage that device. This could be used to (i) gain unauthorized access to the workstation, (ii) perform a DoS on the workstation, or (iii) propagate to other devices managed by that workstation.Threat Maturity and EvidenceProof of ConceptEVIL PLC ATTACK: WEAPONIZING PLCS Claroty was able to install a malicious program on the PLC that would infect a connected EWS upon a program upload. In some cases, they were able to achieve arbitrary code execution on the EWS.Denial of Engineering Operations Attacks in Industrial Control Systems “Specifcally, the attacker can deceive the engineering software during attempts to retrieve the ladder logic program from a programmable logic controller (PLC) by manipulating the ladder logic on the PLC, such that the software is unable to process it while the PLC continues to execute it successfully. This attack vector can provide sufficient cover for the attacker’s actual scenario to play out while the owner tries to understand the problem and reestablish positive operational control.”CWECWE-20: Improper Input Validation “The product receives input or data, but it does not validate or incorrectly validates that the input has the properties that are required to process the data safely and correctly.”CVECVE-2021-22289 “Improper Input Validation vulnerability in the project upload mechanism in B&R Automation Studio version >4.0 may allow an unauthenticated network attacker to execute code.”" }, { "title": "TID-310", "url": "/threats/TID-310.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-310: Remotely Accessible Unauthenticated ServicesThreat DescriptionIf an application does not authenticate all connections from a remote device or system, a threat actor can remotely establish ...", "content": "TID-310: Remotely Accessible Unauthenticated ServicesThreat DescriptionIf an application does not authenticate all connections from a remote device or system, a threat actor can remotely establish a connection to the device to access confidential data or make unwanted changes to device status or configuration.Threat Maturity and EvidenceObserved Adversary TechniqueATT&CK Technique: Unauthorized Command Message (T0855) Procedure Example: Industroyer (S0604) “Using its protocol payloads, Industroyer sends unauthorized commands to RTUs to change the state of equipment.”Procedure Example: Industroyer2 (S1072) “Industroyer2 is capable of sending command messages from the compromised device to target remote stations to open data channels, retrieve the location and values of Information Object Addresses (IOAs), and modify the IO state values through Select Before Operate I/O, Select/Execute, and Invert Default State operations.”CWECWE-285: Improper Authorization “The product does not perform or incorrectly performs an authorization check when an actor attempts to access a resource or perform an action.”CVE" }, { "title": "TID-311", "url": "/threats/TID-311.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-311: Default CredentialsThreat DescriptionDevices often include default credentials from the vendor. Default credentials can be changed, but are often overlooked when devices are commissioned....", "content": "TID-311: Default CredentialsThreat DescriptionDevices often include default credentials from the vendor. Default credentials can be changed, but are often overlooked when devices are commissioned. If left unchanged, a threat actor may discover and use these credentials to gain unauthorized access to the device. Non-unique or predictable default credentials can lead to device compromise.Threat Maturity and EvidenceObserved Adversarial TechniqueIRGC-Affiliated Cyber Actors Exploit PLCs in Multiple Sectors, Including U.S. Water and Wastewater Systems Facilities “Since at least November 22, 2023, these IRGC-affiliated cyber actors have continued to compromise default credentials in Unitronics devices.”CWECWE-1392: Use of Default Credentials (Base) “The product uses default credentials (such as passwords or cryptographic keys) for potentially critical functionality.”CWE-1393: Use of Default Password (Base) “The product uses default passwords for potentially critical functionality.”CVEICEFALL - CVE-2022-29962 “The Emerson DeltaV Distributed Control System (DCS) controllers and IO cards through 2022-04-29 misuse passwords. FTP has hardcoded credentials (but may often be disabled in production).”CVE-2021-22681, CISA Alert A hardcoded key in the Studio 5000 Logix Designer software and related PLCs would allow actors who can extract the key from the software to authenticate to controllers without going through the software or normal authentication process." }, { "title": "TID-312", "url": "/threats/TID-312.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-312: Credential Change Mechanism Can Be AbusedThreat DescriptionA device’s credential change mechanisms can be abused to lock out users from their own devices by changing credentials to somethi...", "content": "TID-312: Credential Change Mechanism Can Be AbusedThreat DescriptionA device’s credential change mechanisms can be abused to lock out users from their own devices by changing credentials to something unknown to the legitimate user. This could impair the legitimate user from accessing the device and may also render the device permanently inoperable. This could also be coupled with unwanted device configuration changes before the user is locked out.Threat Maturity and EvidenceObserved Adversarial TechniqueATT&CK Technique: Change Credential (T0892) “A chain of incidents occurred in Germany, where adversaries locked operators out of their building automation system (BAS) controllers by enabling a previously unset BCU key.”ATT&CK Technique: Account Access Removal (T1531) “Accounts may be deleted, locked, or manipulated (ex: changed credentials) to remove access to accounts.”CWECWE-645: Overly Restrictive Account Lockout Mechanism (Base) “The product contains an account lockout protection mechanism, but the mechanism is too restrictive and can be triggered too easily, which allows attackers to deny service to legitimate users by causing their accounts to be locked out.”CVEKunbus PR100088 Modbus Gateway (Update B) | CISA, CVE-2019-6527 “PR100088 Modbus gateway versions prior to Release R02 (or Software Version 1.1.13166) may allow an attacker to be able to change the password for an admin user who is currently or previously logged in, provided the device has not been restarted.”" }, { "title": "TID-313", "url": "/threats/TID-313.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-313: Unauthenticated Session Changes CredentialThreat DescriptionA threat actor can change or reset a password or credential without being authenticated. This can be used by a threat actor to s...", "content": "TID-313: Unauthenticated Session Changes CredentialThreat DescriptionA threat actor can change or reset a password or credential without being authenticated. This can be used by a threat actor to set the credential to a known value and then use this to authenticate to the device.Threat Maturity and EvidenceKnown Exploitable WeaknessATT&CK Technique: Create Account: Local Account (T1136.001) “Adversaries may create a local account to maintain access to victim systems. Local accounts are those configured by an organization for use by users, remote support, services, or for administration on a single system or service.”CWECWE-287: Improper Authentication “When an actor claims to have a given identity, the product does not prove or insufficiently proves that the claim is correct.”CVEKunbus PR100088 Modbus Gateway (Update B) | CISA, CVE-2019-6527 “An attacker may be able change the password for an admin user who is currently or previously logged in, provided the device has not been restarted.”" }, { "title": "TID-314", "url": "/threats/TID-314.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-314: Passwords Can Be Guessed Using Brute-Force AttemptsThreat DescriptionA threat actor could gain unauthorized access by continually guessing passwords. This could be because the device allow...", "content": "TID-314: Passwords Can Be Guessed Using Brute-Force AttemptsThreat DescriptionA threat actor could gain unauthorized access by continually guessing passwords. This could be because the device allows passwords with insufficient entropy, short password lengths, or does not have a mechanism to increase the time it takes to randomly guess passwords, such as password lockouts or cooldowns between guesses.Threat Maturity and EvidenceObserved Adversary BehaviorAPT Cyber Tools Targeting ICS/SCADA Devices “Brute-force Schneider Electric PLC passwords using CODESYS and other available device protocols via UDP port 1740 against defaults or a dictionary word list (Note: this capability may work against other CODESYS-based devices depending on individual design and function, and this report will be updated as more information becomes available);”CWECWE-334: Small Space of Random Values “The number of possible random values is smaller than needed by the product, making it more susceptible to brute force attacks.”CWE-307: Improper Restriction of Excessive Authentication Attempts “The product does not implement sufficient measures to prevent multiple failed authentication attempts within a short time frame, making it more susceptible to brute force attacks.”CVE" }, { "title": "TID-315", "url": "/threats/TID-315.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-315: Password Retrieval Mechanism AbusedThreat DescriptionIf the device includes a password retrieval mechanism, a threat actor could use that mechanism to retrieve a valid credential and then ...", "content": "TID-315: Password Retrieval Mechanism AbusedThreat DescriptionIf the device includes a password retrieval mechanism, a threat actor could use that mechanism to retrieve a valid credential and then access the device. Password retrieval functions are typically intended to be used to support access from dedicated device management tools, but these functions may be reverse engineered and then initiated by the threat actor to gain valid credentials on a device.Threat Maturity and EvidenceProof of ConceptAutomationDirect DirectLOGIC with Serial Communication - CVE-2022-2003, Research By Sam Hanson of Dragos “The product is vulnerable to a specifically crafted serial message to the CPU serial port that will cause the PLC to respond with the PLC password in cleartext. This could allow an attacker to access and make unauthorized changes.”CWECWE-319: Cleartext Transmission of Sensitive Information “The product transmits sensitive or security-critical data in cleartext in a communication channel that can be sniffed by unauthorized actors.”CVECVE-2022-2003 “The product is vulnerable to a specifically crafted serial message to the CPU serial port that will cause the PLC to respond with the PLC password in cleartext. This could allow an attacker to access and make unauthorized changes.”CVE-2022-31205 “The password to access the Web UI can be read from memory using the Omron FINS protocol without any further authentication.”" }, { "title": "TID-316", "url": "/threats/TID-316.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-316: Incorrect Certificate Verification Allows Authentication BypassThreat DescriptionCertificate-based authentication depends on the correct parsing and validation of an X.509 certificate. How...", "content": "TID-316: Incorrect Certificate Verification Allows Authentication BypassThreat DescriptionCertificate-based authentication depends on the correct parsing and validation of an X.509 certificate. However, if the certificate is not properly parsed and all fields are not validated, a threat actor could potentially bypass authentication using a fraudulent certificate.Threat Maturity and EvidenceKnown Exploitable WeaknessCVE-2020-0601 “Microsoft Windows CryptoAPI (Crypt32.dll) contains a spoofing vulnerability in the way it validates Elliptic Curve Cryptography (ECC) certificates. An attacker could exploit the vulnerability by using a spoofed code-signing certificate to sign a malicious executable, making it appear the file was from a trusted, legitimate source. A successful exploit could also allow the attacker to conduct man-in-the-middle attacks and decrypt confidential information on user connections to the affected software. The vulnerability is also known under the moniker of CurveBall.”CVE-2023-41991 “Apple iOS, iPadOS, macOS, and watchOS contain an improper certificate validation vulnerability that can allow a malicious app to bypass signature validation.”CWECVEVulnerability Spotlight: WolfSSL library X.509 Certificate Text Parsing Code Execution Vulnerability “Talos is disclosing TALOS-2017-0293 / CVE 2017-2800, a code execution vulnerability in WolfSSL. WolfSSL is a lightweight SSL/TLS library targeted specifically for embedded and RTOS (Real-Time Operating System) environments, due largely to its small size and performance. WolfSSL is used in a wide range of products including ICS and IoT devices.”Siemens RuggedCom ROX-based Devices Certificate Verification Vulnerability and GnuTLS Certificate Error handling Vulnerability, CVE-2014-0092 “lib/x509/verify.c in GnuTLS before 3.1.22 and 3.2.x before 3.2.12 does not properly handle unspecified errors when verifying X.509 certificates from SSL servers, which allows man-in-the-middle attackers to spoof servers via a crafted certificate.”" }, { "title": "TID-317", "url": "/threats/TID-317.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-317: Predictable Cryptographic KeyThreat DescriptionIf the device does not generate sufficiently random cryptographic primitives, a threat actor could predict or brute-force guess a key to eith...", "content": "TID-317: Predictable Cryptographic KeyThreat DescriptionIf the device does not generate sufficiently random cryptographic primitives, a threat actor could predict or brute-force guess a key to either gain unauthorized access to the device or decrypt a connection. Cryptographic keys that are not generated with random “seed” information, including from Pseudo-Random Number Generators (PRNG), will lack sufficient entropy. For example, researchers have demonstrated that a large number of Internet exposed devices with TLS or SSH services utilized the same RSA moduli, which could be then used to determine the device’s private key and then used to remotely authenticate with the device.Threat Maturity and EvidenceProof of ConceptHeninger, N. et al. “Mining Your Ps and Qs: Detection of Widespread Weak Keys in Network Devices” Researchers demonstrated that many internet connected devices had insufficient randomness in their TLS certificates. Additionaly, many of these devices had the same key as other devices. Lastly, for some of these keys, it was possible for researchers to derive private keys.CWECWE-331: Insufficient Entropy (Base) “The product uses an algorithm or scheme that produces insufficient entropy, leaving patterns or clusters of values that are more likely to occur than others.”CWE-338: Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG) (Base)“The product uses a Pseudo-Random Number Generator (PRNG) in a security context, but the PRNG’s algorithm is not cryptographically strong.”CVEHoneywell OneWireless Wireless Device Manager | CISA - CVE-2022-43485 “Use of Insufficiently Random Values in Honeywell OneWireless. This vulnerability may allow attacker to manipulate claims in client’s JWT token. This issue affects OneWireless version 322.1”Tropos Wireless Mesh Routers | CISA - CVE-2012-4898 “Mesh OS before 7.9.1.1 on Tropos wireless mesh routers does not use a sufficient source of entropy for SSH keys, which makes it easier for man-in-the-middle attackers to spoof a device or modify a client-server data stream by leveraging knowledge of a key from a product installation elsewhere.”" }, { "title": "TID-318", "url": "/threats/TID-318.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-318: Insecure Cryptographic ImplementationThreat DescriptionThe device uses a cryptographic library or implementation that either introduces an additional software vulnerability within the libr...", "content": "TID-318: Insecure Cryptographic ImplementationThreat DescriptionThe device uses a cryptographic library or implementation that either introduces an additional software vulnerability within the library. A threat actor can exploit these weaknesses or vulnerablities to gain unauthorized access to the device or bypass the protections provided by the cryptographic protocol.Threat Maturity and EvidenceObserved Adversary UseAttackers Exploit the Heartbleed OpenSSL Vulnerability to Circumvent Multi-factor Authentication on VPNs “Beginning on April 8, an attacker leveraged the Heartbleed vulnerability against a VPN appliance and hijacked multiple active user sessions. Specifically, the attacker repeatedly sent malformed heartbeat requests to the HTTPS web server running on the VPN device, which was compiled with a vulnerable version of OpenSSL, to obtain active session tokens for currently authenticated users. With an active session token, the attacker successfully hijacked multiple active user sessions and convinced the VPN concentrator that he/she was legitimately authenticated. The attack bypassed both the organization’s multifactor authentication and the VPN client software used to validate that systems connecting to the VPN were owned by the organization and running specific security software.”CWECVEHeartbleed Bug and Subsequent Exploitation CVE-2014-0160 “The (1) TLS and (2) DTLS implementations in OpenSSL 1.0.1 before 1.0.1g do not properly handle Heartbeat Extension packets, which allows remote attackers to obtain sensitive information from process memory via crafted packets that trigger a buffer over-read, as demonstrated by reading private keys, related to d1_both.c and t1_lib.c, aka the Heartbleed bug.”Siemens RuggedCom ROX-based Devices Certificate Verification Vulnerability and GnuTLS Certificate Error handling Vulnerability CVE-2014-0092 “lib/x509/verify.c in GnuTLS before 3.1.22 and 3.2.x before 3.2.12 does not properly handle unspecified errors when verifying X.509 certificates from SSL servers, which allows man-in-the-middle attackers to spoof servers via a crafted certificate.”" }, { "title": "TID-319", "url": "/threats/TID-319.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-319: Cross Site Scripting (XSS)Threat DescriptionThe device does not properly restrict, filter, or validate the content of web-based requests or outputs, especially content used to construct HT...", "content": "TID-319: Cross Site Scripting (XSS)Threat DescriptionThe device does not properly restrict, filter, or validate the content of web-based requests or outputs, especially content used to construct HTTP or JavaScript elements within a web page. A threat actor can add malicious JavaScript to an HTTP request, including through a GET/POST parameter or HTTP header fields, which then executes on the browser of an unsuspecting user. The malicious JavaScript can then be used to steal session tokens or send malicious requests (especially leveraging XMLHttpRequest) to change device configurations or data.Threat Maturity and EvidenceKnown Exploitable WeaknessATT&CK Technique: Drive-by Compromise (T1189) “Multiple ways of delivering exploit code to a browser exist (i.e., Drive-by Target), including: A legitimate website is compromised where adversaries have injected some form of malicious code such as JavaScript, iFrames, and cross-site scripting.”CWECWE-79: Improper Neutralization of Input During Web Page Generation (‘Cross-site Scripting’) (Base) “The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.”CVENetComm Wireless 4G LTE Light Industrial M2M Router - CVE-2018-14784 “The device is vulnerable to several cross-site scripting attacks, allowing a remote attacker to run arbitrary code on the device.”Siemens SIMATIC S7-1500 CPU Firmware Vulnerabilities, CISA “The integrated web server may … be vulnerable to cross-site request forgery (CSRF), cross-site scripting (XSS), header injection, and open redirect attacks as well as privilege escalation.”" }, { "title": "TID-320", "url": "/threats/TID-320.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-320: SQL InjectionThreat DescriptionThe device does not property restrict, filter, or validate the content of web-based requests, especially content used to construct SQL commands or HTTP pages...", "content": "TID-320: SQL InjectionThreat DescriptionThe device does not property restrict, filter, or validate the content of web-based requests, especially content used to construct SQL commands or HTTP pages. A threat actor can add malicious content to these messages to cause unwanted code to execute on the device. SQL injection can be used to execute unauthorized commands (e.g., xp_cmdshell), or to manipulate or extract sensitive data within the database.Threat Maturity and EvidenceKnown Exploitable WeaknessATT&CK Technique: Server Software Component: SQL Stored Procedures (T1505.001) Procedure Example: Stuxnet (S0603) “Stuxnet used xp_cmdshell to store and execute SQL code.”ATT&CK Technique: Exploit Public-Facing Application (T1190) Various threat actors have leveraged SQL injection to gain initial access to publicly facing web applications, including APT28, APT 39, and DragonFly.CWECWE-89: Improper Neutralization of Special Elements used in an SQL Command (‘SQL Injection’) “The product constructs all or part of an SQL command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended SQL command when it is sent to a downstream component.”CVECSWorks Software SQL Injection Vulnerability, CISA - CVE-2014-2351 “The CSWorks software does not properly sanitize or validate the data used to construct read and write paths, which may make applications built with the affected product to be susceptible to an SQL injection attack. Depending on the intended use of the application, an attacker may be able to exploit this vulnerability to achieve remote code execution.”Navis WebAccess SQL Injection Vulnerability, CISA “The WebAccess application does not properly sanitize input that may allow a remote attacker to read, modify, and affect availability of data in the SQL database.”" }, { "title": "TID-321", "url": "/threats/TID-321.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-321: HTTP Application Session HijackingThreat DescriptionA threat actor can hijack an insufficiently protected HTTP session token to gain unauthorized access to a device. HTTP session tokens ca...", "content": "TID-321: HTTP Application Session HijackingThreat DescriptionA threat actor can hijack an insufficiently protected HTTP session token to gain unauthorized access to a device. HTTP session tokens can be obtained by a threat actor if they’re sent unencrypted over the network or if the site is vulnerable to cross-site scripting (XSS).Threat Maturity and EvidenceKnown Exploitable WeaknessATT&CK T1539 Steal Web Session Cookie “An adversary may steal web application or service session cookies and use them to gain access to web applications or Internet services as an authenticated user without needing credentials.”CWECWE-384: Session Fixation (Composite) “Authenticating a user, or otherwise establishing a new user session, without invalidating any existing session identifier gives an attacker the opportunity to steal authenticated sessions.”CVESiemens SICAM Q100 - CVE-2022-43398 Siemens SICAM Q100 devices does not renew session tokens/cookies between logins.MOXA NPort IAW5000A-I/O Series - CVE-2020-25198 The built-in WEB server for MOXA NPort IAW5000A-I/O firmware version 2.1 or lower has incorrectly implemented protections from session fixation, which may allow an attacker to gain access to a session and hijack it by stealing the user’s cookies." }, { "title": "TID-322", "url": "/threats/TID-322.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-322: Cross Site Request Forgery (CSRF)Threat DescriptionIf a threat actor can include malicious JavaScript within a page viewed by a legitimate device user, that script can send malicious authe...", "content": "TID-322: Cross Site Request Forgery (CSRF)Threat DescriptionIf a threat actor can include malicious JavaScript within a page viewed by a legitimate device user, that script can send malicious authenticated HTTP requests (using XMLHttpRequest) to the device. Due to the Same Origin Policy defined by most web browsers, the HTTP requests sent to the device will include any valid session tokens the user/browser has previously established for that device. Therefore, this could be used to send malicious requests to a device to change key functions or configurations, including changing device credentials. This requires that the threat actor tricks the user into viewing another page while they have an authenticated session with the device.Threat Maturity and EvidenceObserved Adversarial TechniqueRouter Exploit Kits: An overview of RouterCSRF attacks and DNS hijacking in Brazil “From February 1 until March 30, 2019, Avast’s Web Shield blocked more than 4.6 million cross-site request forgery (CSRF) web-based attacks in Brazil, attempting to silently modify DNS settings on routers.”Web-based attack targeting home routers, the Brazilian way “We spotted an interesting attack from Brazilian bad guys aiming to change the DNS settings of home routers by using a web-based attack, some social engineering, and malicious websites. In these attacks the malicious DNS servers configured in the user’s network device are pointed towards phishing pages of Brazilian Banks, programmed to steal financial credentials.”CWECWE-352: Cross-Site Request Forgery (CSRF) (Compound) “The web application does not, or can not, sufficiently verify whether a well-formed, valid, consistent request was intentionally provided by the user who submitted the request.”CVEXZERES 442SR Wind Turbine CSRF Vulnerability - CVE-2015-3950 “The 442SR OS recognizes both the POST and GET methods for data input. By using the GET method, an attacker may retrieve the ID from the browser and will allow the default user ID to be changed. The default user has admin rights to the entire system.”Fox DataDiode Proxy Server CSRF Vulnerability - CVE-2014-2358 “The administrative web interface of the Fox DataDiode proxy server is vulnerable to CSRF. By changing the configuration, the attacker can effectively disrupt the flow of information through the Fox DataDiode, resulting in a DoS.”Siemens SIMATIC S7-1200 CSRF Vulnerability - CVE-2015-5698 “The integrated web server (Port 80/TCP and Port 443/TCP) of the affected programmable logic controllers (PLCs) could allow remote attackers to perform actions with the permissions of a victim user, provided the victim user has an active session and is induced to trigger the malicious request.”Schneider Electric ION Power Meter CSRF Vulnerability “NCCIC/ICS-CERT is aware of a public report of a cross site request forgery (CSRF) vulnerability with proof-of-concept (PoC) exploit code affecting Schneider Electric’s ION Power Meter products. According to this report, exploitation of this vulnerability can allow unauthorized actions on the device, such as configuration parameter changes and saving modified configuration.”NetComm Wireless 4G LTE Light Industrial M2M Router - CVE-2018-14783 “A cross-site request forgery condition can occur, allowing an attacker to change passwords of the device remotely.”" }, { "title": "TID-323", "url": "/threats/TID-323.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-323: HTTP Path TraversalThreat DescriptionA threat actor can send requests for files or content that resides in different directories from those intended to be accessible by the a web server. T...", "content": "TID-323: HTTP Path TraversalThreat DescriptionA threat actor can send requests for files or content that resides in different directories from those intended to be accessible by the a web server. This can be used to gain access to data that is not intended to be remotely accessible through the web servers, such as files from the operating system or other applications. This threat is primarily a result of the web server having excessive privileges regarding files and directories on the deviceThreat Maturity and EvidenceObserved Adversary BehaviorFortinet FortiOS SSL VPN Path Traversal Vulnerability “Fortinet FortiOS SSL VPN web portal contains a path traversal vulnerability that may allow an unauthenticated attacker to download FortiOS system files through specially crafted HTTP resource requests.”CWECWE-22: Path Traversal “The product uses external input to construct a pathname that is intended to identify a file or directory that is located underneath a restricted parent directory, but the product does not properly neutralize special elements within the pathname that can cause the pathname to resolve to a location that is outside of the restricted directory.”CVECVE-2018-13379 “An Improper Limitation of a Pathname to a Restricted Directory (“Path Traversal”) in Fortinet FortiOS 6.0.0 to 6.0.4, 5.6.3 to 5.6.7 and 5.4.6 to 5.4.12 and FortiProxy 2.0.0, 1.2.0 to 1.2.8, 1.1.0 to 1.1.6, 1.0.0 to 1.0.7 under SSL VPN web portal allows an unauthenticated attacker to download system files via special crafted HTTP resource requests.”CVE-2023-39810 “An issue in the CPIO command of Busybox v1.33.2 allows attackers to execute a directory traversal.”IDS RTU 850 Directory Traversal Vulnerability - CVE-2015-3939 “Using this vulnerability, an attacker is able to access some files from the internal service interface of the communication module. One of the accessible files contains the credentials (passwords) to access the internal service interface via telnet.”Honeywell XL Web Controller Directory Traversal Vulnerability - CVE-2015-0984 “By using a directory traversal vulnerability in the FTP server, it is possible to gain access to the web root directory.”" }, { "title": "TID-324", "url": "/threats/TID-324.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-324: HTTP Direct Object ReferenceThreat DescriptionIf a device does not properly authenticate all HTTP requests, a threat actor can directly send a request to a specific URL to access data or i...", "content": "TID-324: HTTP Direct Object ReferenceThreat DescriptionIf a device does not properly authenticate all HTTP requests, a threat actor can directly send a request to a specific URL to access data or initiate a device function. This could be used to access/download sensitive data or perform unwanted changes to settings or functions on a device. This typically requires that the threat actor directly knows the URL of the specific file/object/page, rather than depending on the existing links provided by the web application. This is especially problematic for files hosted on a web server (e.g., txt, pdf) since the authentication mechanisms provided by the web application framework may not enforce access controls on those files.Threat Maturity and EvidenceKnown Exploitable WeaknessTelerik UI for ASP.NET AJAX Insecure Direct Object Reference Vulnerability “Telerik UI for ASP.NET AJAX contains an insecure direct object reference vulnerability in RadAsyncUpload that can result in file uploads in a limited location and/or remote code execution.”CWECWE-639: Authorization Bypass Through User-Controlled Key “The system’s authorization functionality does not prevent one user from gaining access to another user’s data or record by modifying the key value identifying the data.”CVEIagona ScrutisWeb - CVE-2023-38257 “Iagona ScrutisWeb versions 2.1.37 and prior are vulnerable to an insecure direct object reference vulnerability that could allow an unauthenticated user to view profile information, including user login names and encrypted passwords.”" }, { "title": "TID-325", "url": "/threats/TID-325.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-325: HTTP Injection/Response SplittingThreat DescriptionThe device uses HTTP headers that are unencrypted, not-validated, and/or unauthenticated. This means that the device may accept and proce...", "content": "TID-325: HTTP Injection/Response SplittingThreat DescriptionThe device uses HTTP headers that are unencrypted, not-validated, and/or unauthenticated. This means that the device may accept and process arbitrary data coming to the receiving web-server over the network. Threat actors may therefore be able to inject their own information into the header, possibly using their input to get more information than they should have access to or exploiting a vulnerability on the receiving device.Threat Maturity and EvidenceProof of Concept“Divide and Conquer”: HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topics White paper This white paper describes the outlines of how an HTTP Response Splitting attack can take place, the follow-up attacks that are possible, and the impact they can have on machines. He conducts sample attacks in a lab environment.CWECVECogent DataHub XSS and CRLF - CVE-2012-0310 “An HTTP header injection vulnerability (also known as carriage return line feed) exists in the Cogent DataHub application as the product does not validate or incorrectly validates input that can affect the control flow or data flow of a program.”" }, { "title": "TID-326", "url": "/threats/TID-326.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-326: Insecure DeserializationThreat DescriptionMany object oriented languages use serialization to convert class objects into byte strings for more efficient storage or transmission. However, ...", "content": "TID-326: Insecure DeserializationThreat DescriptionMany object oriented languages use serialization to convert class objects into byte strings for more efficient storage or transmission. However, if an untrusted byte string is deserialized without properly validating its contents, it could be used to exploit a vulnerability in the associated library. A threat actor could send a maliciously crafted serialized object to a device to exploit a deserialization vulnerability within a device.Threat Maturity and EvidenceObserved Adversary BehaviorNow You Serial, Now You Don’t — Systematically Hunting for Deserialization Exploits Mandiant has reported that between the years 2019-2021 APT41 used .NET ViewState and Java deserialization vulnerabilities in their campaigns.Known Exploited VulnerabilityKentico Xperience Deserialization of Untrusted Data Vulnerability “An issue was discovered in Kentico 12.0.x before 12.0.15, 11.0.x before 11.0.48, 10.0.x before 10.0.52, and 9.x versions. Due to a failure to validate security headers, it was possible for a specially crafted request to the staging service to bypass the initial authentication and proceed to deserialize user-controlled .NET object input. This deserialization then led to unauthenticated remote code execution on the server where the Kentico instance was hosted.”CWECWE-502: Deserialization of Untrusted Data (Base) “The product deserializes untrusted data without sufficiently verifying that the resulting data will be valid.”CVERockwell Automation ISaGRAF - CVE-2022-1118 “Connected Components Workbench, ISaGRAF Workbench, and Safety Instrumented System Workstation do not limit the objects that can be deserialized. This allows attackers to craft a malicious serialized object that, if opened by a local user in Connected Components Workbench, may result in arbitrary code execution. This vulnerability requires user interaction to be successfully exploited.”Medtronic Paceart Optima System - CVE-2023-31222 “Deserialization of untrusted data in Microsoft Messaging Queuing Service in Medtronic’s Paceart Optima versions 1.11 and earlier on Windows allows an unauthorized user to impact a healthcare delivery organization’s Paceart Optima system cardiac device causing data to be deleted, stolen, or modified, or the Paceart Optima system being used for further network penetration via network connectivity.”CVE-2021-4104 “JMSAppender in Log4j 1.2 is vulnerable to deserialization of untrusted data when the attacker has write access to the Log4j configuration. The attacker can provide TopicBindingName and TopicConnectionFactoryBindingName configurations causing JMSAppender to perform JNDI requests that result in remote code execution in a similar fashion to CVE-2021-44228.”" }, { "title": "TID-327", "url": "/threats/TID-327.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-327: Out of Bounds Memory AccessThreat DescriptionIf an application does not properly restrict data writes to allocated memory locations, a threat actor could send an input or message that writ...", "content": "TID-327: Out of Bounds Memory AccessThreat DescriptionIf an application does not properly restrict data writes to allocated memory locations, a threat actor could send an input or message that writes data outside of intended or allowed memory locations. By overwriting memory locations, an attacker can possibly hijack the control-flow of the program to remotely execute their own code or cause a DoS on the device.Threat Maturity and EvidenceKnown Exploitable WeaknessTenda AC11 Router Stack Buffer Overflow Vulnerability “Tenda AC11 devices contain a stack buffer overflow vulnerability in /goform/setmac which allows attackers to execute code via a crafted post request.”Tenda AC11 Router Stack Buffer Overflow Vulnerability “An issue was discovered on Tenda AC11 devices with firmware through 02.03.01.104_CN. A stack buffer overflow vulnerability in /goform/setmac allows attackers to execute arbitrary code on the system via a crafted post request.”Amcrest Cameras and NVR Stack-based Buffer Overflow Vulnerability “Amcrest cameras and NVR contain a stack-based buffer overflow vulnerability through port 37777 that allows an unauthenticated, remote attacker to crash the device and possibly execute code.”CWECWE 1218: Memory Buffer Errors This a weakness category related to the handling of memory buffers within a software system. It is possible that any of these weaknesses can lead to the development of a vulnerability to exploit in a given device.CVESiemens ICS Switches Hit With Buffer Overflow, Authentication Bugs A buffer overflow present on Siemens ICS switches could allow threat actors to gain the ability to take administrative actions on switches." }, { "title": "TID-328", "url": "/threats/TID-328.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-328: Hardcoded CredentialsThreat DescriptionHardcoded credentials typically cannot be changed by end-users and are often undocumented, leaving the end-user unaware of the risk. If a threat acto...", "content": "TID-328: Hardcoded CredentialsThreat DescriptionHardcoded credentials typically cannot be changed by end-users and are often undocumented, leaving the end-user unaware of the risk. If a threat actor is able to discover the credentials for a device (or family of devices with the same password), they may be able to exploit multiple devices with no known device-level mitigation. Hardcoded credentials are often intended for vendor-specific diagnostic functions or to authenticate components designed to communicate together (e.g., a PLC and associated IED), but can be abused by threat actors when discovered.Threat Maturity and EvidenceObserved Adversary BehaviorATT&CK Technique: Hardcoded Credentials (T0891) Procedure Example: Incontroller (S1045) “INCONTROLLER can login to Omron PLCs using hardcoded credentials, which is documented in CVE-2022-34151”Known Exploitable WeaknessZyxel Multiple Products Use of Hard-Coded Credentials Vulnerability “Zyxel firewalls (ATP, USG, VM) and AP Controllers (NXC2500 and NXC5500) contain a use of hard-coded credentials vulnerability in an undocumented account (“zyfwp”) with an unchangeable password.”CWECWE-798: Use of Hard-coded Credentials “The product contains hard-coded credentials, such as a password or cryptographic key, which it uses for its own inbound authentication, outbound communication to external components, or encryption of internal data.”CVE" }, { "title": "TID-329", "url": "/threats/TID-329.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-329: Improper Password StorageThreat DescriptionIf a device stores passwords in an unsafe manner (e.g., in a cleartext file with no read restrictions) it may be possible for threat actors to re...", "content": "TID-329: Improper Password StorageThreat DescriptionIf a device stores passwords in an unsafe manner (e.g., in a cleartext file with no read restrictions) it may be possible for threat actors to retrieve system or user account passwords for that device. Threat actors can then use obtained passwords to increase their privileges and perform actions on the device or move laterally to other systems. Unsafe storage techniques can include storing passwords in cleartext, encrypting instead of hashing passwords, using weak hashing algorithms, or not using salted hashes.Threat Maturity and EvidenceKnown Exploitable WeaknessD-Link DIR-300 Router Cleartext Storage of a Password Vulnerability“The D-Link DIR-300 router stores cleartext passwords, which allows context-dependent attackers to obtain sensitive information.”CWECWE-257: Storing Passwords in a Recoverable Format “The storage of passwords in a recoverable format makes them subject to password reuse attacks by malicious users. In fact, it should be noted that recoverable encrypted passwords provide no significant benefit over plaintext passwords since they are subject not only to reuse by malicious attackers but also by malicious insiders. If a system administrator can recover a password directly, or use a brute force search on the available information, the administrator can use the password on other accounts.”CVESiemens S7-1200 Insecure Storage of HTTPS CA Certificate - CVE-2012-3037 “The certificate authority (CA) for HTTPS connections, which is installed on Siemens SIMATIC S7-1200 PLC, stores its private key insecurely. This key is used for signing certificates. Once this key is obtained, an attacker may create a forged certificate. This can then be used to complete a Man-in-the-Middle attack on a browser that already trusts this device’s CA.”" }, { "title": "TID-330", "url": "/threats/TID-330.html", "categories": "Application Software", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-330: Cryptographic Timing Side-ChannelThreat DescriptionAlgorithms or code implementations of cryptographic processes will sometimes leak information by ending operations early or late based on...", "content": "TID-330: Cryptographic Timing Side-ChannelThreat DescriptionAlgorithms or code implementations of cryptographic processes will sometimes leak information by ending operations early or late based on, and correlated with, the input/key.If a threat actor is able to execute code on a processor performing a cryptographic operation, they may be able to infer the resulting key from that operation by measuring the timing it takes to perform the various functions.For example, if a function like memcpy (which performs byte-by byte comparison) is used to check an HMAC value, by measuring the time it takes for the function to execute, the length of time needed to brute force guess a key can be significantly reduced.Threat Maturity and EvidenceKnown Exploitable WeaknessXBOX 360 HMAC Comparison “A memcmp function is used to check the CB-auth HMAC-hash value. The value is 16-bytes long and is done byte-by-byte wise. By changing one byte at a time it’s possible to determine if a byte is the valid (true) by measuring the time to compare a false and a true value. Measuring each byte will in the end reveal the correct hash and the boot process can continue.The time differences for a valid and false value is about 2200 microseconds.Possibilities: 16 bytes * 256 different possibility for each byte, total 4096 tries. Statistically only half has to be tried, 2048 tries.”CWECWE-208: Observable Timing Discrepancy (Base) “Two separate operations in a product require different amounts of time to complete, in a way that is observable to an actor and reveals security-relevant information about the state of the product, such as whether a particular operation was successful or not.”CWE-1254: Incorrect Comparison Logic Granularity (Base) “The product’s comparison logic is performed over a series of steps rather than across the entire string in one operation. If there is a comparison logic failure on one of these steps, the operation may be vulnerable to a timing attack that can result in the interception of the process for nefarious purposes.”CVE" }, { "title": "TID-401", "url": "/threats/TID-401.html", "categories": "Networking", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-401: Undocumented Protocol FeaturesThreat DescriptionSome devices may support proprietary protocols, or may add proprietary functionality to open protocols. Many of the custom functions or comm...", "content": "TID-401: Undocumented Protocol FeaturesThreat DescriptionSome devices may support proprietary protocols, or may add proprietary functionality to open protocols. Many of the custom functions or commands may not be sufficiently documented. If users aren’t aware of these functions/commands, they cannot be expected to properly configure the device to remove unwanted functionality. Further, they are limited in their ability to monitor the device for any potential malicious use of these functions/commands to exploit devices.Threat Maturity and EvidenceProof of ConceptThe Vulnerability Can Lead to Native Remote-Code-Execution on Vulnerable PLCs “Armis researchers discovered a new vulnerability (CVE-2021-22779) in Schneider Electric (SE) Modicon PLCs that bypasses security mechanisms added to these PLCs to prevent abuse of undocumented Modbus commands. These undocumented commands can allow full control over the PLC — overwriting critical memory regions, leaking sensitive memory content, or invoking internal functions.”CWECWE-1371: ICS Supply Chain: Poorly Documented or Undocumented Features “Undocumented capabilities and configurations pose a risk by not having a clear understanding of what the device is specifically supposed to do and only do. Therefore possibly opening up the attack surface and vulnerabilities.”CWE-912: Hidden Functionality (Class) “The product contains functionality that is not documented, not part of the specification, and not accessible through an interface or command sequence that is obvious to the product’s users or administrators.”CWE-1059: Insufficient Technical Documentation “The product does not contain sufficient technical or engineering documentation (whether on paper or in electronic form) that contains descriptions of all the relevant software/hardware elements of the product, such as its usage, structure, architectural components, interfaces, design, implementation, configuration, operation, etc.”CVESixnet Universal Protocol Undocumented Function Codes - CVE-2013-2802 Sixnet devices use a universal protocol with 6 undocumented opcodes that can perform remote management functions (e.g., code execution) without authenticationSchneider Electric Modicon Controllers and Software - CVE-2021-22779 “An authentication bypass by spoofing vulnerability exists that could cause unauthorized access in read and write mode to the controller by spoofing the Modbus communication between the engineering software and the controller.”" }, { "title": "TID-404", "url": "/threats/TID-404.html", "categories": "Networking", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-404: Remotely Triggerable Deadlock/DoSThreat DescriptionSome devices will have operating modes that put the device in an inoperable state. Devices may also have network parsing or protocol vuln...", "content": "TID-404: Remotely Triggerable Deadlock/DoSThreat DescriptionSome devices will have operating modes that put the device in an inoperable state. Devices may also have network parsing or protocol vulnerabilities that can put the device in a deadlocked or otherwise unresponsive state. A threat actor may therefore be able to send a message to a device that causes it to enter one of these deadlocked or unresponsive states, rendering the device non-functional or leaving it in an otherwise degraded state. Additionally, if the device does not have a mechanism to reset or recover from this state, it may remain unavailable until it is reset or rebooted, which may require physical operator presence.Threat Maturity and EvidenceObserved Adversary TechniqueATT&CK Technique: Denial of Service (T0814) Procedure Example: Industroyer (S0604) “The Industroyer SIPROTEC DoS module exploits the CVE-2015-5374 vulnerability in order to render a Siemens SIPROTEC device unresponsive. Once this vulnerability is successfully exploited, the target device stops responding to any commands until it is rebooted manually. Once the tool is executed it sends specifically crafted packets to port 50,000 of the target IP addresses using UDP. The UDP packet contains the following 18 byte payload: 0x11 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 9E.”Procedure Example: Backdoor.Oldrea (S0093) “The Backdoor.Oldrea payload has caused multiple common OPC platforms to intermittently crash. This could cause a denial of service effect on applications reliant on OPC communications.”CWECWE-833: Deadlock “The product contains multiple threads or executable segments that are waiting for each other to release a necessary lock, resulting in deadlock.”CVECVE-2015-5374 “Specially crafted packets sent to port 50000/UDP could cause a denial-of-service of the affected device. A manual reboot may be required to recover the service of the device.”" }, { "title": "TID-405", "url": "/threats/TID-405.html", "categories": "Networking", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-405: Network Stack Resource ExhaustionThreat DescriptionRemote connections and communications can consume various device resources (e.g., network stack buffers, packet processing, socket connec...", "content": "TID-405: Network Stack Resource ExhaustionThreat DescriptionRemote connections and communications can consume various device resources (e.g., network stack buffers, packet processing, socket connections) that, if exhausted, could lead to the device entering an unresponsive state. A threat actor may attempt to intentionally cause this by sending either repetitive or specially crafted messages to a device to consume resources and cause the device to become unresponsive. The unresponsive state will typically continue for at least the duration of the attack. In some cases it may persist until the device is reset or rebooted, which may require physical operator presence.Threat Maturity and EvidenceObserved Adversary TechniqueATT&CK Technique: Service Stop (T0881) Procedure Example: Industroyer2 (S1072) ”Killing the ‘PService_PDD.exe’ service causes the interruption of any existing communication with target IEC-104 servers, which usually supports at most one active connection at a time. Having interrupted existing connections, Industroyer2 is free to connect to the targets.” This action will prevent other devices from connecting to the IEC-104 servers for as long as the Industroyer2 connection is active.Cisco IOS XR Software DVMRP Memory Exhaustion Vulnerability “Cisco IOS XR Distance Vector Multicast Routing Protocol (DVMRP) incorrectly handles Internet Group Management Protocol (IGMP) packets. Exploitation could allow an unauthenticated, remote attacker to immediately crash the IGMP process or make it consume available memory and eventually crash.”CWECWE-400: Uncontrolled Resource Consumption “The product does not properly control the allocation and maintenance of a limited resource, thereby enabling an actor to influence the amount of resources consumed, eventually leading to the exhaustion of available resources.”CWE-410: Insufficient Resource Pool “The product’s resource pool is not large enough to handle peak demand, which allows an attacker to prevent others from accessing the resource by using a (relatively) large number of requests for resources.”CVE" }, { "title": "TID-406", "url": "/threats/TID-406.html", "categories": "Networking", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-406: Unauthorized Messages or ConnectionsThreat DescriptionSome devices operate using protocols that have no capacity for network-level authentication, connection, or creation of sessions on-de...", "content": "TID-406: Unauthorized Messages or ConnectionsThreat DescriptionSome devices operate using protocols that have no capacity for network-level authentication, connection, or creation of sessions on-device, therefore allowing a threat actor to establish malicious connections or send malicious data to the device. Authentication mechanisms include passwords and cryptographic keys/certificates.Threat Maturity and EvidenceObserved Adversary TechniqueATT&CK T0860 Wireless Compromise “During the Polish Train incident, a teenager was able to program a remote with commands to operate and change junctions on the tracks. The teenager was able to then send those commands, without authentication, to operate the junctions.”ATT&CK Technique: Unauthorized Command Message (T0855) Procedure Example: INCONTROLLER (S1045) “INCONTROLLER can send custom Modbus commands to write register values on Schneider PLCs.”CWECWE-306: Missing Authentication for Critical Function (Base) “The product does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.”CWE-287: Improper Authentication (Class) “When an actor claims to have a given identity, the product does not prove or insufficiently proves that the claim is correct.”CVECVE-2022-30266 / CVE-2022-33139 / CVE-2019-18250 (OT-ICEFALL) Many devices in the OT-ICEFALL report had authentication on the client-side, but not for the protocol. What this means is that while users may think actions are authenticated, actors who are able to send/receive traffic over the network may be able to issue commands without proper authentication.CVE-2019-6533 “Registers used to store Modbus values can be read and written from the web interface without authentication in the PR100088 Modbus gateway versions prior to Release R02 (or Software Version 1.1.13166).”" }, { "title": "TID-407", "url": "/threats/TID-407.html", "categories": "Networking", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-407: Missing Message Replay ProtectionThreat DescriptionThreat actors may be able to replay a message to a device to cause an unwanted function, send an unwanted command, or gain access to priv...", "content": "TID-407: Missing Message Replay ProtectionThreat DescriptionThreat actors may be able to replay a message to a device to cause an unwanted function, send an unwanted command, or gain access to privileged data. Message replaying can be used to bypass non-existant or poorly designed authentication mechanisms lacking proper protections, such as a nonce or timestamp.Threat Maturity and EvidenceObserved Adversary TechniqueATT&CK T0887 Wireless Sniffing “In the Dallas Siren incident, adversaries were able to send command messages to activate tornado alarm systems across the city without an impending tornado or other disaster.”“In Dallas’ case, there are a number of ways that the attack could have been carried out, but the most likely is that someone carried out a “radio replay” attack, which involves recording the radio signal that was broadcast during the latest monthly test of the emergency siren system and playing it back repeatedly on Friday, according to Bastille, a security firm specializing in finding and remediating radio frequency vulnerabilities.”CWECWE-294: Authentication Bypass by Capture-replay (Base) “A capture-replay flaw exists when the design of the product makes it possible for a malicious user to sniff network traffic and bypass authentication by replaying it to the server in question to the same effect as the original message (or with minor changes).”CVESchneider Electric Modicon Modbus Protocol - CVE-2017-6034 “Sensitive information is transmitted in cleartext in the Modicon Modbus protocol, which may allow an attacker to replay the following commands: run, stop, upload, and download.”Sierra Wireless AirLink Raven X EV-DO Vulnerabilities - CVE-2013-2820 “The AirLink Raven X EV-DO is vulnerable to replay attacks that bypass authentication. By sending a series of crafted packets to Port 17336/UDP and Port 17388/UDP, an attacker could reprogram the device’s firmware image. This could allow the attacker to affect the availability of the firmware.”" }, { "title": "TID-408", "url": "/threats/TID-408.html", "categories": "Networking", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-408: Unencrypted Sensitive Data CommunicationThreat DescriptionSome devices do not adequately encrypt communications that includes operational or management information. Without adequate encryp...", "content": "TID-408: Unencrypted Sensitive Data CommunicationThreat DescriptionSome devices do not adequately encrypt communications that includes operational or management information. Without adequate encryption, a threat actor can eavesdrop on the communications to gain access to device operational information, management information, or authentication information such as credentials or keys.Threat Maturity and EvidenceKnown Exploitable WeaknessATT&CK T0842 Network Sniffing “Network sniffing is the practice of using a network interface on a computer system to monitor or capture information regardless of whether it is the specified destination for the information.”ATT&CK T0887 Wireless Sniffing “Adversaries may seek to capture radio frequency (RF) communication used for remote control and reporting in distributed environments.”CWECVESierra Wireless AirLink Raven X EV-DO Vulnerabilities “The AirLink Raven X EV-DO does not use encryption in the update and reprogramming process. By using the passwords and user names that are stored in plain text, an attacker could reprogram the firmware.”OT-ICEFALL - CVE-2022-29954“The BSAP/IP protocol transmits passwords in plaintext”OT-ICEFALL - CVE-2022-30261“The ROC protocol transmits passwords in plaintext.”OT-ICEFALL - CVE-2022-30266“The SRTP protocol transmits passwords in plaintext”OT-ICEFALL - CVE-2022-30312“The Inter-controller (IC) protocol transmits PINs, usernames and passwords in plaintext”OT-ICEFALL - CVE-2022-31204“The password used to restrict engineering operations is transmitted in plaintext”OT-ICEFALL - CVE-2022-29519The ResConf protocol transmits usernames, passwords and session tokens in plaintext.”" }, { "title": "TID-410", "url": "/threats/TID-410.html", "categories": "Networking", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-410: Cryptographic Protocol Side ChannelThreat DescriptionWhile encrypting data can prevent a threat actor from directly obtaining the plaintext communication, a threat actor may be able to inf...", "content": "TID-410: Cryptographic Protocol Side ChannelThreat DescriptionWhile encrypting data can prevent a threat actor from directly obtaining the plaintext communication, a threat actor may be able to infer information about the device or communicated data through side-channel and metadata analysis of encrypted communication sessions. For example, a threat actor could use information about message lengths, sequences, and frequency to infer some or all of the plaintext content of messages.Threat Maturity and EvidenceProof of ConceptClassifying IoT devices in smart environments using network traffic characteristics “This paper shows that IoT devices can be identified with high accuracy based on their network behavior, and sets the stage for future work in detecting misbehaviors resulting from security breaches in teh [sic] smart environment.”Traffic Fingerprinting Attacks on Internet of Things using Machine Learning “However, even if encryption was in place, characteristics of the traffic, such as packet sizes and traffic rates, may expose the user’s current activities”Privacy Attacks to the 4G and 5G Cellular Paging Protocols Using Side Channel Information “Our paper sheds light on an inherent design weakness of the 4G/5G cellular paging protocol which can be exploited by an attacker to not only obtain the victim’s paging occasionbut also to identify the victim’s presence in a particular cell area just from the victim’s soft-identity (e.g., phone number, Twitter handle) with a novel attack called ToRPEDO.”CWECWE-1230: Exposure of Sensitive Information Through Metadata “The product prevents direct access to a resource containing sensitive information, but it does not sufficiently limit access to metadata that is derived from the original, sensitive information.”CVE" }, { "title": "TID-411", "url": "/threats/TID-411.html", "categories": "Networking", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-411: Weak/Insecure Cryptographic ProtocolThreat DescriptionThe device utilizes a weak or insecure cryptographic protocol or algorithm that can be broken or undermined. This could allow the thre...", "content": "TID-411: Weak/Insecure Cryptographic ProtocolThreat DescriptionThe device utilizes a weak or insecure cryptographic protocol or algorithm that can be broken or undermined. This could allow the threat actor to extract plaintext information from encrypted communications, extract cryptographic keys, or bypass authentication mechanisms.A threat actor can utilize various techniques to manipulate these protocols, including brute-force guessing of keys or using cryptanalysis to decipher the text.Threat Maturity and EvidenceKnown Exploitable WeaknessWi-Fi hack caused TK Maxx security breach “TK Maxx’s parent company, TJX, had secured its wireless network using Wired Equivalent Privacy (WEP) — one of the weakest forms of security for wireless LANs… hackers cracked the WEP encryption protocol used to transmit data between price-checking devices, cash registers and computers at a store in Minnesota.”CWECVEEmpirical Study of PLC Authentication Protocols in Industrial Control Systems Researchers Adeen Ayub, Hyunguk Yoo, and Irfan Ahmed discovered eight protocol level authentication vulnerabilities between 5 PLCs. One of the classes of vulnerabilities they discovered was weak encryption schemes.OT-ICEFALL - CVE-2022-30273 “The MDLC protocol offers a legacy encryption mode that encrypts traffic using the Tiny Encryption Algorithm (TEA) block-cipher in ECB mode, which offers no message integrity and reduced confidentiality.”OT-ICEFALL - Weak Cryptography on CODESYS V3 “The encryption scheme uses an insecure mode of operation. The code is encrypted in ECB mode without additional cryptographic authentication and integrity over the ciphertext as a whole.”OT-ICEFALL - CVE-2022-29955 “The BSAP/IP protocol uses weak encryption to transmit passwords.”OT-ICEFALL - CVE-2022-29960 “DES with hardcoded cryptographic keys is used to protect system credentials, engineering files, and sensitive utilities.”" }, { "title": "TID-412", "url": "/threats/TID-412.html", "categories": "Networking", "tags": "", "date": "2024-09-24 15:31:21 -0400", "snippet": "TID-412: Network Routing Capability AbuseThreat DescriptionSome devices will allow for the forwarding of packets to other connected devices (e.g., routing, port forwarding, tunneling, VPN). If the ...", "content": "TID-412: Network Routing Capability AbuseThreat DescriptionSome devices will allow for the forwarding of packets to other connected devices (e.g., routing, port forwarding, tunneling, VPN). If the device is used to forward or route communications, a threat actor could change the forwarding rules or routes. This feature could be used by the threat actor to either (i) disable required forwarding rules to prevent authorized communications or (ii) add new rules that allow unauthorized access to other devices. The threat actor could potentially use this to gain access to devices that are within protected networks or zones.Threat Maturity and EvidenceObserved Adversary TechniqueATT&CK Technique: Connection Proxy (T0884) Procedure Example: Incontroller (S1045) “The INCONTROLLER PLCProxy module can add an IP route to the CODESYS gateway running on Schneider PLCs to allow it to route messages through the PLC to other devices on that network. This allows the malware to bypass firewall rules that prevent it from directly communicating with devices on the same network as the PLC.”CWECWE-306: Missing Authentication for Critical Function (Base) “The product does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.”CWE-15: External Control of System or Configuration Setting “One or more system settings or configuration elements can be externally controlled by a user.”CVE" } ] diff --git a/assets/js/data/swconf.js b/assets/js/data/swconf.js index 1bef91a..1c7d7c5 100644 --- a/assets/js/data/swconf.js +++ b/assets/js/data/swconf.js @@ -1 +1 @@ -const swconf = { cacheName: 'chirpy-1717004261',resources: [ '/assets/css/jekyll-theme-chirpy.css', '/', '/background/', '/getting-started/', '/properties-list/', '/properties-mapper/', '/threats/', '/about/', '/assets/js/dist/categories.min.js', '/assets/js/dist/commons.min.js', '/assets/js/dist/home.min.js', '/assets/js/dist/misc.min.js', '/assets/js/dist/page.min.js', '/assets/js/dist/post.min.js' ],allowHosts: [ 'fonts.googleapis.com', 'fonts.gstatic.com', 'fonts.googleapis.com', 'cdn.jsdelivr.net', 'cdnjs.cloudflare.com' ],denyPaths: [ ], purge: false }; +const swconf = { cacheName: 'chirpy-1727206285',resources: [ '/assets/css/jekyll-theme-chirpy.css', '/', '/background/', '/getting-started/', '/properties-list/', '/properties-mapper/', '/threats/', '/mitigations/', '/about/', '/terms-of-use/', '/assets/js/dist/categories.min.js', '/assets/js/dist/commons.min.js', '/assets/js/dist/home.min.js', '/assets/js/dist/misc.min.js', '/assets/js/dist/page.min.js', '/assets/js/dist/post.min.js' ],allowHosts: [ 'fonts.googleapis.com', 'fonts.gstatic.com', 'fonts.googleapis.com', 'cdn.jsdelivr.net', 'cdnjs.cloudflare.com' ],denyPaths: [ ], purge: false }; diff --git a/background/index.html b/background/index.html index 64a7fe9..5292305 100644 --- a/background/index.html +++ b/background/index.html @@ -1 +1 @@ - Background | MITRE EMB3D™
Background

EMB3D™ Background

The EMB3D Threat Model provides a cultivated knowledge base of cyber threats to embedded devices, providing a common understanding of these threats with security mechanisms to mitigate them.

Leveraging established models to strengthen embedded device security

​​EMB3D aligns with and expands on several existing models like Common Weakness Enumeration, MITRE ATT&CK®, and Common Vulnerabilities and Exposures, specifically focusing on embedded devices. ​EMB3D provides a cultivated knowledge base of cyber threats to devices, including those observed in the field environment or demonstrated through proofs-of-concept and theoretic research. Mapping these threats to device properties helps users develop and tailor accurate threat models for specific embedded devices. For each threat, suggested mitigations are provided for technical mechanisms that device vendors should implement to mitigate the given threat by building security into the device. EMB3D is a comprehensive framework for the entire security ecosystem — device vendors, asset owners and operators, security researchers, and testing organizations.

EMB3D

A framework for a dynamic threat landscape

EMB3D is a living framework that will be updated with new threats and mitigations as security researchers discover new vulnerabilities, threats, and security defenses. EMB3D is a public, community resource where all information is openly available, and the security community can submit additions and revisions.

More Information

Whitepaper

© - The MITRE Corporation. All Rights Reserved.
Privacy Policy | MITRE


MITRE is a registered trademark of The MITRE Corporation.
Material on this site may be copied and distributed with permission only.
Approved for public release; Distribution unlimited. Public release case number: 24-1429.

Using the Chirpy theme for Jekyll.

Cookie Preferences
+ Background | MITRE EMB3D™
Background

EMB3D™ Background

The EMB3D Threat Model provides a cultivated knowledge base of cyber threats to embedded devices, providing a common understanding of these threats with security mechanisms to mitigate them.

Leveraging established models to strengthen embedded device security

​​EMB3D aligns with and expands on several existing models like Common Weakness Enumeration, MITRE ATT&CK®, and Common Vulnerabilities and Exposures, specifically focusing on embedded devices. ​EMB3D provides a cultivated knowledge base of cyber threats to devices, including those observed in the field environment or demonstrated through proofs-of-concept and theoretic research. Mapping these threats to device properties helps users develop and tailor accurate threat models for specific embedded devices. For each threat, suggested mitigations are provided for technical mechanisms that device vendors should implement to mitigate the given threat by building security into the device. EMB3D is a comprehensive framework for the entire security ecosystem — device vendors, asset owners and operators, security researchers, and testing organizations.

EMB3D

A framework for a dynamic threat landscape

EMB3D is a living framework that will be updated with new threats and mitigations as security researchers discover new vulnerabilities, threats, and security defenses. EMB3D is a public, community resource where all information is openly available, and the security community can submit additions and revisions.

More Information

Whitepaper

diff --git a/feed.xml b/feed.xml index 51daaf7..bff567d 100644 --- a/feed.xml +++ b/feed.xml @@ -1 +1 @@ - https://emb3d.mitre.org/MITRE EMB3D&trade;MITRE EMB3D&trade;, a cultivated knowledge base of cyber threats to embedded devices 2024-05-29T13:37:39-04:00 The MITRE Corporation https://emb3d.mitre.org/ Jekyll © 2024 The MITRE Corporation /assets/img/favicons/favicon.ico /assets/img/favicons/favicon-96x96.png + https://emb3d.mitre.org/MITRE EMB3D&trade;MITRE EMB3D&trade;, a cultivated knowledge base of cyber threats and mitigations for embedded devices 2024-09-24T15:31:21-04:00 The MITRE Corporation https://emb3d.mitre.org/ Jekyll © 2024 The MITRE Corporation /assets/img/favicons/favicon.ico /assets/img/favicons/favicon-96x96.png diff --git a/getting-started/index.html b/getting-started/index.html index affe2e7..256e938 100644 --- a/getting-started/index.html +++ b/getting-started/index.html @@ -1 +1 @@ - Getting Started | MITRE EMB3D™
Getting Started

Applying EMB3D™

Step 1. Enumerate device properties and map to threats

Step 1. Enumerate device properties and map to threats

First, identify the set of Device Properties List that apply to the device being evaluated based on device knowledge and documentation. While a vendor may be able to fully enumerate all properties, an asset operator or security researcher may need to review available documentation or perform initial device testing or decomposition to fully enumerate the relevant properties.

Select the applicable properties in the Properties Mapper Tool to generate the list of Threats the device may be exposed to because it incorporates those properties and features.

Properties to Threats Mapper

Step 2. Enumerate threats and evaluate their relevance/risk

After identifying the device’s properties list and obtaining the candidate threat mapping, the next step is to review each potential threat to determine if it truly applies to the device and how much risk it poses. For additional details, follow the threat detail links output by the Mapper Tool or look up the associated Threat ID (TID) in the Threats catalog. Each threat description provides additional information about that threat, including its maturity level, documented threat evidence and CVEs, and associated weaknesses from the CWE database. This information helps to better understand the mechanics of the threat, its prerequisites, how it manifests on embedded devices, and how threat actors might utilize it, which can be used to better understand the risk of that threat to the device in question.

Step 3. Identify required mitigations

Step 2. Enumerate threats and evaluate their relevance/risk

Equipped with a list of threats that pose a viable risk to the device, the next step is to determine if the device sufficiently defends against those threats. Coming in the next release of EMB3D in Summer 2024, each threat description will include a set of Foundational, Intermediate, and Leading mitigations. These mitigations will provide guidance on what technical mechanisms can best prevent or reduce the risk of that threat. Mitigations will include references to guidance documents and best practices, along with information about potential limitations and challenges when deploying each mitigation.

The mitigation recommendations can then be used to make decisions and plans about the device. Device vendors may use the mitigations mapping to prioritize their security engineering efforts and choose technical security mechanisms that will be most effective against current and future threats. Asset owners and operators may use it to inform acquisitions, make judgements about the risks of devices deployed in their environments, or what additional environmental-level mitigations they wish to make to address residual risk. Finally, security researchers can use this information to organize and triage their efforts to determine which aspects of a device are worth deeper investigation.

© - The MITRE Corporation. All Rights Reserved.
Privacy Policy | MITRE


MITRE is a registered trademark of The MITRE Corporation.
Material on this site may be copied and distributed with permission only.
Approved for public release; Distribution unlimited. Public release case number: 24-1429.

Using the Chirpy theme for Jekyll.

Cookie Preferences
+ Getting Started | MITRE EMB3D™
Getting Started

Applying EMB3D™

Step 1. Enumerate device properties and map to threats

Step 1. Enumerate device properties and map to threats

First, identify the set of Device Properties List that apply to the device being evaluated based on device knowledge and documentation. While a vendor may be able to fully enumerate all properties, an asset operator or security researcher may need to review available documentation or perform initial device testing or decomposition to fully enumerate the relevant properties.

Select the applicable properties in the Properties Mapper Tool to generate the list of Threats the device may be exposed to because it incorporates those properties and features.

Properties to Threats Mapper

Step 2. Enumerate threats and evaluate their relevance/risk

After identifying the device’s properties list and obtaining the candidate threat mapping, the next step is to review each potential threat to determine if it truly applies to the device and how much risk it poses. For additional details, follow the threat detail links output by the Mapper Tool or look up the associated Threat ID (TID) in the Threats catalog. Each threat description provides additional information about that threat, including its maturity level, documented threat evidence and CVEs, and associated weaknesses from the CWE database. This information helps to better understand the mechanics of the threat, its prerequisites, how it manifests on embedded devices, and how threat actors might utilize it, which can be used to better understand the risk of that threat to the device in question.

Step 3. Identify required mitigations

Step 2. Enumerate threats and evaluate their relevance/risk

Equipped with a list of threats that pose a viable risk to the device, the next step is to determine if the device sufficiently defends against those threats. Each threat description includes a set of Foundational, Intermediate, and Leading mitigations. These mitigations provide guidance on what technical mechanisms can best prevent or reduce the risk of that threat. Mitigations will include references to guidance documents and best practices, along with information about potential limitations and challenges when deploying each mitigation.

The mitigation recommendations can then be used to make decisions and plans about the device. Device vendors may use the mitigations mapping to prioritize their security engineering efforts and choose technical security mechanisms that will be most effective against current and future threats. Asset owners and operators may use it to inform acquisitions, make judgements about the risks of devices deployed in their environments, or what additional environmental-level mitigations they wish to make to address residual risk. Finally, security researchers can use this information to organize and triage their efforts to determine which aspects of a device are worth deeper investigation.

diff --git a/index.html b/index.html index da98df8..88faa58 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ - MITRE EMB3D™
MITRE EMB3D™

The MITRE EMB3D™ Threat Model

The EMB3D Threat Model provides a cultivated knowledge base of cyber threats to embedded devices, providing a common understanding of these threats with security mechanisms to mitigate them.

This initial release of EMB3D includes the Device Properties and Threats enumerations. The full set of Mitigations will be available in the Summer 2024 update.

What is EMB3D™

EMB3D is a threat model for embedded devices found in industries such as critical infrastructure, Internet of Things, automotive, healthcare, manufacturing, and many more. The threat model is intended to be a resource to help vendors, asset owners/operators, test organizations, and security researchers to improve the overall security of embedded devices' hardware and software. This threat model aims to serve as a central repository of information, defining known threats to embedded devices and their unique device features/properties that enable specific threat actions. By mapping the threats to the associated device features/properties, the user can easily enumerate threat exposure based on the known device features.

EMB3D Workflow: Identify device properties. Map properties to potential threats and weaknesses. Evaluate each threat to determine if the device is vulnerable or if the threat is mitigated.

Device Properties

Device properties describe a device's hardware and software components and capabilities of a device. These include physical hardware, network services and protocols, software, and firmware. Each category is further divided into sub-properties that are then mapped to a set of threats. By mapping properties, users can identify the threats associated with a given device property.

Threats

EMB3D threats identify how a threat actor can achieve a specific objective or effect on a system or device. Each threat description includes (i) information about the technical features that are targeted by the threat; (ii) the actions that must be performed by the threat actor to cause the threat's effect, including the impact or effect the threat will have on the device; and (iii) the vulnerabilities or weaknesses within that mechanism that enable the threat actions.

Mitigations

Mitigation strategies and techniques are described for each threat. These can be leveraged by device vendors to prevent and reduce the risk of a threat, and by end users to validate that devices are sufficiently protected against that threat. The mitigations define the mechanisms or technologies that protect against the threat while remaining flexible in how mitigations can be implemented within the device's unique constraints.

EMB3D Users

Device Vendors

Support device threat models and provide guidelines for mitigations requirements/designs. Develop device roadmaps for evaluating device risk and prioritizing mitigation efforts.

Asset Owners & Operators

Inform acquisition requirements and decisions about unmitigated threats/risks. Support acquisition efforts related to evaluating a device's security capabilities. Guide the development and deployment of compensating controls around unmitigated threats.

Security Researchers/Testers

Scope assessment activities and outcomes. Help identify potential trouble spots for deeper investigation. Contribute to research efforts around novel threats and mitigations.

More Information

Background Getting Started Whitepaper Contact Us

© - The MITRE Corporation. All Rights Reserved.
Privacy Policy | MITRE


MITRE is a registered trademark of The MITRE Corporation.
Material on this site may be copied and distributed with permission only.
Approved for public release; Distribution unlimited. Public release case number: 24-1429.

Using the Chirpy theme for Jekyll.

Cookie Preferences
+ MITRE EMB3D™
MITRE EMB3D™

The MITRE EMB3D™ Threat Model

The EMB3D Threat Model provides a cultivated knowledge base of cyber threats to embedded devices, providing a common understanding of these threats with security mechanisms to mitigate them.

What is EMB3D™

EMB3D is a threat model for embedded devices found in industries such as critical infrastructure, Internet of Things, automotive, healthcare, manufacturing, and many more. The threat model is intended to be a resource to help vendors, asset owners/operators, test organizations, and security researchers to improve the overall security of embedded devices' hardware and software. This threat model aims to serve as a central repository of information, defining known threats to embedded devices and their unique device features/properties that enable specific threat actions. By mapping the threats to the associated device features/properties, the user can easily enumerate threat exposure based on the known device features.

EMB3D Workflow: Identify device properties. Map properties to potential threats and weaknesses. Evaluate each threat to determine if the device is vulnerable or if the threat is mitigated.

Device Properties

Device properties describe a device's hardware and software components and capabilities of a device. These include physical hardware, network services and protocols, software, and firmware. Each category is further divided into sub-properties that are then mapped to a set of threats. By mapping properties, users can identify the threats associated with a given device property.

Threats

EMB3D threats identify how a threat actor can achieve a specific objective or effect on a system or device. Each threat description includes (i) information about the technical features that are targeted by the threat; (ii) the actions that must be performed by the threat actor to cause the threat's effect, including the impact or effect the threat will have on the device; and (iii) the vulnerabilities or weaknesses within that mechanism that enable the threat actions.

Mitigations

Mitigation strategies and techniques are described for each threat. These can be leveraged by device vendors to prevent and reduce the risk of a threat, and by end users to validate that devices are sufficiently protected against that threat. The mitigations define the mechanisms or technologies that protect against the threat while remaining flexible in how mitigations can be implemented within the device's unique constraints.

EMB3D Users

Device Vendors

Support device threat models and provide guidelines for mitigations requirements/designs. Develop device roadmaps for evaluating device risk and prioritizing mitigation efforts.

Asset Owners & Operators

Inform acquisition requirements and decisions about unmitigated threats/risks. Support acquisition efforts related to evaluating a device's security capabilities. Guide the development and deployment of compensating controls around unmitigated threats.

Security Researchers/Testers

Scope assessment activities and outcomes. Help identify potential trouble spots for deeper investigation. Contribute to research efforts around novel threats and mitigations.

More Information

Background Getting Started Whitepaper Contact Us

diff --git a/loadRelated.js b/loadRelated.js deleted file mode 100644 index e3090bc..0000000 --- a/loadRelated.js +++ /dev/null @@ -1,68 +0,0 @@ -var threatData; - -//Load the json file that contains the threat and device properties mapping -window.onload = (event) => { - fetch('/assets/deviceprops.json') - .then((res) => { - if (!res.ok) { - throw new Error(`HTTP error! Status: ${res.status}`); - } - return res.json(); - }) - .then((json) => { - threatData = json; - var threatTitle = document - .getElementById('threattitle') - .innerHTML.replaceAll('\n', '') - .replaceAll(' ', ''); - getRelatedThreats(threatTitle); - }); -}; - -// Get device properties and threats related to the current one and display as a list on the threat description page -function getRelatedThreats(threatTitle) { - var foundRelated = false; - var devpropsID = []; - var devpropsDesc = []; - var selectedIDs = []; - for (let i = 0; i < threatData.deviceprops.length; i++) { - for (let j = 0; j < threatData.deviceprops[i].threats.length; j++) { - if (threatTitle == threatData.deviceprops[i].threats[j].id) { - for (let k = 0; k < threatData.deviceprops[i].threats.length; k++) { - if (threatTitle == threatData.deviceprops[i].threats[k].id) { - devpropsID.push(threatData.deviceprops[i].id); - devpropsDesc.push(threatData.deviceprops[i].text); - continue; - } - selectedIDs.push(threatData.deviceprops[i].threats[k].id); - foundRelated = true; - } - } - } - } - var threatsDiv = document.getElementById('relatedthreats'); - var propertiesDiv = document.getElementById('devprops'); - if(selectedIDs.length != 0){ - var threatsDiv_inner = '

Related Threats:

'; - for (var i = 0; i < selectedIDs.length - 1; i++) { - threatsDiv_inner += - "" + - selectedIDs[i] + - ', '; - } - threatsDiv_inner += - "" + - selectedIDs[selectedIDs.length - 1] + - ''; - threatsDiv.innerHTML = threatsDiv_inner; - } - var propertiesDiv_inner = ''; - for (var i = 0; i < devpropsID.length; i++) { - propertiesDiv_inner += devpropsID[i] + " - " + devpropsDesc[i] + "
" - } - propertiesDiv.innerHTML = propertiesDiv_inner; -} diff --git a/loadThreatsPropertiesforThreats.js b/loadThreatsPropertiesforThreats.js new file mode 100644 index 0000000..e1d1b4d --- /dev/null +++ b/loadThreatsPropertiesforThreats.js @@ -0,0 +1,146 @@ +var threatData; +var mitigationsData; +//Load the json file that contains the threat and device properties mapping +window.onload = () => { + fetch("../_data/properties_threat_mappings.json") + .then((res) => { + if (!res.ok) { + throw new Error(`HTTP error! Status: ${res.status}`); + } + return res.json(); + }) + .then((json) => { + threatData = json; + var threatTitle = document + .getElementById("threattitle") + .innerHTML.replaceAll("\n", "") + .replaceAll(" ", ""); + getRelatedThreats(threatTitle); + }); + + //Load the json file that contains the threat, device properties and mitigation mappings + fetch("../_data/threats_properties_mitigations_mappings.json") + .then((res) => { + if (!res.ok) { + throw new Error(`HTTP error! Status: ${res.status}`); + } + return res.json(); + }) + .then((json) => { + mitigationsData = json; + var threatTitle = document + .getElementById("threattitle") + .innerHTML.replaceAll("\n", "") + .replaceAll(" ", ""); + getRelatedMitigations(threatTitle); + }); +}; + +// Get device properties and threats related to the current one and display as a list on the threat description page +function getRelatedThreats(threatTitle) { + var foundRelated = false; + var devpropsID = []; + var devpropsDesc = []; + var selectedIDs = []; + for (let i = 0; i < threatData.properties.length; i++) { + for (let j = 0; j < threatData.properties[i].threats.length; j++) { + if (threatTitle == threatData.properties[i].threats[j].id) { + for (let k = 0; k < threatData.properties[i].threats.length; k++) { + if (threatTitle == threatData.properties[i].threats[k].id) { + devpropsID.push(threatData.properties[i].id); + devpropsDesc.push(threatData.properties[i].text); + continue; + } + selectedIDs.push(threatData.properties[i].threats[k].id); + foundRelated = true; + } + } + } + } + var threatsDiv = document.getElementById("relatedthreats"); + var propertiesDiv = document.getElementById("devprops"); + if (selectedIDs.length != 0) { + var threatsDiv_inner = "

Related Threats:

"; + for (var i = 0; i < selectedIDs.length - 1; i++) { + threatsDiv_inner += + "" + + selectedIDs[i] + + ", "; + } + threatsDiv_inner += + "" + + selectedIDs[selectedIDs.length - 1] + + ""; + threatsDiv.innerHTML = threatsDiv_inner; + } + var propertiesDiv_inner = ""; + for (var i = 0; i < devpropsID.length; i++) { + propertiesDiv_inner += + "" + + devpropsID[i] + + "" + + " - " + + devpropsDesc[i] + + "
"; + } + propertiesDiv.innerHTML = propertiesDiv_inner; +} + +// Get mitigations for the current threat +function getRelatedMitigations(threatTitle) { + var mitigations = []; + for (let i = 0; i < mitigationsData.threats.length; i++) { + if (threatTitle == mitigationsData.threats[i].id) { + for (let j = 0; j < mitigationsData.threats[i].mitigations.length; j++) { + mitigations.push({ + id: mitigationsData.threats[i].mitigations[j].id, + desc: mitigationsData.threats[i].mitigations[j].text, + level: mitigationsData.threats[i].mitigations[j].level + }); + } + } + } + + var mitigationsDiv = document.getElementById("mitigations"); + if (mitigations.length != 0) { + var foundational = []; + var intermediate = []; + var leading = []; + for (var i = 0; i < mitigations.length; i++) { + var mitigationText = + "" + + mitigations[i].id + + "" + + " - " + + mitigations[i].desc; + if (mitigations[i].level === "foundational") { + foundational.push(mitigationText); + } else if (mitigations[i].level === "intermediate") { + intermediate.push(mitigationText); + } else if (mitigations[i].level === "leading") { + leading.push(mitigationText); + } + } + var mitigationsDiv_inner = "

Mitigations:

"; + mitigationsDiv_inner += + ''; + mitigationsDiv_inner += ""; + mitigationsDiv_inner += + '"; + mitigationsDiv_inner += + '"; + mitigationsDiv_inner += + '"; + mitigationsDiv_inner += "
FoundationalIntermediateLeading
' + foundational.join("
") + "
' + intermediate.join("
") + "
' + leading.join("
") + "
"; + + mitigationsDiv.innerHTML = mitigationsDiv_inner; + } +} diff --git a/loadThreatsforMitigations.js b/loadThreatsforMitigations.js new file mode 100644 index 0000000..3e5e222 --- /dev/null +++ b/loadThreatsforMitigations.js @@ -0,0 +1,40 @@ +var mitigationsData; +//Load the json file that contains the threat and mitigation mappings +window.onload = (event) => { + fetch('../_data/mitigations_threat_mappings.json') + .then((res) => { + if (!res.ok) { + throw new Error(`HTTP error! Status: ${res.status}`); + } + return res.json(); + }) + .then((json) => { + mitigationsData = json; + var mitigationTitle = document + .getElementById('mitigationTitle') + .innerHTML.replaceAll('\n', '') + .replaceAll(' ', ''); + getRelatedThreats(mitigationTitle); + }); +}; + +// Get threats mitigated by the current mitigation +function getRelatedThreats(mitigationTitle) { + var threats = []; + for (let i = 0; i < mitigationsData.mitigations.length; i++) { + if (mitigationTitle == mitigationsData.mitigations[i].id) { + for (let j = 0; j < mitigationsData.mitigations[i].threats.length; j++) { + threats.push({id: mitigationsData.mitigations[i].threats[j].id, desc: mitigationsData.mitigations[i].threats[j].text}) + } + } + } + var threatsDiv = document.getElementById('relatedthreats'); + if(threats.length != 0){ + var threatsDiv_inner = '

Mitigated Threats:

'; + for (var i = 0; i < threats.length; i++) { + threatsDiv_inner += "" + threats[i].id + "" + " - " + + threats[i].desc + "
" + } + threatsDiv.innerHTML = threatsDiv_inner; + } +} \ No newline at end of file diff --git a/mitigations/MID-001.html b/mitigations/MID-001.html new file mode 100644 index 0000000..a459218 --- /dev/null +++ b/mitigations/MID-001.html @@ -0,0 +1 @@ + MID-001 | MITRE EMB3D™
Mitigation-page

MID-001: Software Only Bootloader Authentication

Mitigation Tier: Foundational

Description

Under a software bootloader authentication scheme, the bootloader is authenticated using a software-based mechanism where the key, authenticated integrity measurement, and verification logic are stored within memory and the authentication is performed on a main/multipurpose processor. This performs boot-time integrity verification of the bootloader to ensure it was not previously modified or tampered with. Before a bootloader is executed, it should be authenticated by taking an integrity measurement (e.g., hash) of the bootloader, and verifying the hash against a stored signed integrity measurement stored in a bootrom. A device may have multiple bootloaders which operate in multiple stages; therefore, this mitigation may need to be implemented and executed multiple times across the stages to ensure the integrity of each stage.

Lastly, authenticating the first and all subsequent bootloaders allows the device to build a chain-of-trust, through which a secure boot scheme can be made for the device. Secure boot schemes allow the device to use earlier-staged authenticated bootloaders to authenticate and launch subsequent bootloaders and software.

Because this mitigation stores the keys and authentication logic/mechanisms in memory and executes checks on the main CPU, this mitigation is vulnerable to key extractions (TID-214: Secrets Extracted from Device Root of Trust) and tampering with the authentication process (TID-214: Inadequate Bootloader Protection and Verification). To minimize this threat, the first stage of the bootloader that performs this check should be stored within ROM to prevent modification by possible malicious code injected at runtime.

Note: This mitigation is in contrast to a hardware-based bootloader authentication scheme (MID-002 - Hardware-backed Bootloader Authentication), where dedicated hardware is used to protect the key and authentication process.

Limitation: A software-based bootloader authentication scheme can be bypassed if a threat actor is able to physically extract symmetric keys from storage, memory, or through side-channel analysis of the processor while the key is in-use. Additionally, if the device is using asymmetric encryption, these protections can be undermined by changing the hash of the public key or the public key itself stored on the device.

IEC 62443 4-2 Mappings

  • EDR / HDR / NDR 3.14 - Integrity of the boot process

References

[1] Ubuntu. “Signing.” ubuntu.com. Accessed: Aug. 28, 2024. [Online.] Available: https://wiki.ubuntu.com/UEFI/SecureBoot/Signing

[2] U-Boot. “U-Boot Verified Boot.” u-boot.org. Accessed: Aug. 28, 2024. [Online.] Available: https://docs.u-boot.org/en/latest/usage/fit/verified-boot.html

[3] T. Lewis and M. Khandelwal. “Best Practices for UEFI Secure Boot Guidelines.” uefi.org. Accessed: Aug. 28, 2024. [Online.] Available: https://uefi.org/sites/default/files/resources/Insyde%20HPE%20NSA%20and%20UEFI%20Secure%20Boot%20Guidelines_FINAL%20v2%20%281%29.pdf

[4] National Security Agency. “Boot Security Modes and Recommendations.” nsa.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://www.nsa.gov/portals/75/documents/what-we-do/cybersecurity/professional-resources/csi-boot-security-modes-and-recommendations.pdf

[5] Android. “Implementing dm-verity.” android.com. Accessed: Aug. 28, 2024. [Online.] Available: https://source.android.com/docs/security/features/verifiedboot/dm-verity

[6] J. van Woudenberg. “Top 10 Secure Boot mistakes.” Presented at hardware.io Hardware Security Conference and Training, Santa Clara, CA, USA, 2019. [Online]. Available: https://hardwear.io/usa-2019/presentations/Top-10-Secure-Boot-Mistakes-v1.1-hardwear-io-usa-2019-jasper-van-woudenberg.pdf

diff --git a/mitigations/MID-002.html b/mitigations/MID-002.html new file mode 100644 index 0000000..b4edb23 --- /dev/null +++ b/mitigations/MID-002.html @@ -0,0 +1 @@ + MID-002 | MITRE EMB3D™
Mitigation-page

MID-002: Hardware-backed Bootloader Authentication

Mitigation Tier: Intermediate

Description

A secure boot scheme where a hardware root of trust verifies the integrity of the bootloader will give a device strong security against bootloader tampering prior to boot time. A hardware root of trust gives a device the ability to securely store signatures and keys somewhere that they cannot be accessed before or after booting. This root of trust can then be used to perform boot-time integrity verification of the bootloader to ensure it was not previously modified or tampered with. Before a bootloader is executed, it should be authenticated by taking an integrity measurement (e.g., hash) of the bootloader, and verifying the integrity measurement against a signed integrity measurement stored in the hardware element. A device may have multiple bootloaders which operate in multiple stages, this mitigation may need to be implemented and executed across multiple times to ensure integrity of each stage.

Additionally, this hardware root of trust can be used to anchor a chain-of-trust flowing from the bootloader that can be used to verify the integrity of other modules on the device.

This implementation will vary based on different secure boot schemes and frameworks, along with device architectures and operating systems.

Note: This Mitigation requires that the device has a secure hardware root of trust. Please see PID-25 - Device includes software/hardware root of trust for information about related threats and mitigations.

IEC 62443 4-2 Mappings

  • EDR / HDR/ NDR 3.14 - Integrity of the boot process

References

[1] Microsoft. “Secure boot.” microsoft.com. Accessed: Aug. 28, 2024. [Online.] Available: https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-secure-boot

[2] T. Lewis and M. Khandelwal. “Best Practices for UEFI Secure Boot Guidelines.” uefi.org. Accessed: Aug. 28, 2024. [Online.] Available: https://uefi.org/sites/default/files/resources/Insyde%20HPE%20NSA%20and%20UEFI%20Secure%20Boot%20Guidelines_FINAL%20v2%20%281%29.pdf

[3] ARM. “Trusted Board Boot Requirements Client (TBBR-CLIENT) Armv8-A.” arm.com. Accessed: Aug. 28, 2024. [Online.] Available: https://developer.arm.com/documentation/den0006/d

[4] National Security Agency. “Boot Security Modes and Recommendations.” nsa.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://www.nsa.gov/portals/75/documents/what-we-do/cybersecurity/professional-resources/csi-boot-security-modes-and-recommendations.pdf

[5] Intel. “Intel Hardware Shield - Below-the-OS Security.” intel.com. Accessed: Aug. 28, 2024. [Online.] Available: https://web.archive.org/web/20231220181349/https://www.intel.com/content/dam/www/central-libraries/us/en/documents/below-the-os-security-white-paper.pdf

[6] ARM. “Secure boot.” arm.com. Accessed: Aug. 28, 2024. [Online.] Available: https://developer.arm.com/documentation/PRD29-GENC-009492/c/TrustZone-Software-Architecture/Booting-a-secure-system/Secure-boot?lang=en

[7] Chromium. “Security in ChromeOS.” chromium.org. Accessed: Aug. 28, 2024. [Online.] Available: https://www.chromium.org/chromium-os/developer-library/reference/security/security-whitepaper/#hardware-root-of-trust-and-verified-boot

[8] J. van Woudenberg. “Top 10 Secure Boot mistakes.” Presented at hardware.io Hardware Security Conference and Training, Santa Clara, CA, USA, 2019. [Online]. Available: https://hardwear.io/usa-2019/presentations/Top-10-Secure-Boot-Mistakes-v1.1-hardwear-io-usa-2019-jasper-van-woudenberg.pdf

diff --git a/mitigations/MID-003.html b/mitigations/MID-003.html new file mode 100644 index 0000000..8335dd3 --- /dev/null +++ b/mitigations/MID-003.html @@ -0,0 +1 @@ + MID-003 | MITRE EMB3D™
Mitigation-page

MID-003: Periodic/Continuous Integrity Measurement and Remote Attestation

Mitigation Tier: Leading

Description

Building on the simpler MID-009 - Operating System-based Runtime Integrity Check, devices can go further and periodically take integrity measurements and send them out in remote attestation messages. These measurements can be implemented separately across multiple parts of the device stack, such as the bootloader, firmware, software, and application process level, and can include readings on bootloader integrity, device timing statistics, process and page-table integrity, and overall memory integrity. With a combination of all of this information, users can gain a reasonable sense of if the device’s normal operations have been manipulated.

Note: Periodic integrity measurements are the most valuable and trustworthy when a device has a secure operating environment in which to perform its measurement calculations and network encryption. The presence of these properties may however expose a device to threats related to PID-41 - Device exposes remote network services, PID-4113 - Device includes cryptographic functions for sensitive data, such as encryption or authentication, PID-251 - Root of Trust is physically accessible or is not immutable, or PID-252 - Root of Trust is immutable

IEC 62443 4-2 Mappings

  • CR 3.4 – Software and information integrity

References

[1] Microsoft. “Microsoft Azure Attestation.” microsoft.com. Accessed: Aug. 28, 2024. [Online.] Available: https://learn.microsoft.com/en-us/azure/attestation/overview

[2] Microsoft. “Attestation.” microsoft.com. Accessed: Aug. 28, 2024. [Online.] Available: https://learn.microsoft.com/en-us/azure/confidential-computing/attestation-solutions

[3] Z. Ling, H. Yan, X. Shao, J. Luo., Y. Xu, B. Pearson, and X. Fu. “Secure boot, trusted boot, and remote attestation for ARM TrustZone-based IoT Nodes” in Journal of Systems Architecture, Jul. 2021. Vol. 119. [Online.] Available: https://www.sciencedirect.com/science/article/pii/S1383762121001661

[4] Red Balloon Security. “Symbiote Injection Process.” redballoon.com. Accessed: Aug. 28, 2024. [Online.] Available: https://redballoonsecurity.com/symbiote-injection-process/

diff --git a/mitigations/MID-004.html b/mitigations/MID-004.html new file mode 100644 index 0000000..874a177 --- /dev/null +++ b/mitigations/MID-004.html @@ -0,0 +1 @@ + MID-004 | MITRE EMB3D™
Mitigation-page

MID-004: Memory Hardening Against Code Injection

Mitigation Tier: Foundational

Description

Mechanisms to protect memory against code injection include restricting what parts of memory can execute code and randomizing address space to prevent the development of effective exploits.

Executable Space Protection and Write xor Execute (W^X) should be used to restrict what code can be executed in memory. Executable Space Protection uses either hardware or software features to mark memory as non-executable, thereby preventing injected code from being executed. W^X restricts a memory page from being both writable and executable, therefore, any memory that can be overwritten by a threat actor (W), cannot be executable (X).

Address space layout randomization (ASLR) is designed to reduce the predictability of memory addresses so that a threat actor cannot consistently find areas of memory that are able to be exploited or manipulated. This can be done across the application and kernel (KASLR) data spaces.

Lastly, program stack specific mitigations, such as stack canaries [5], safe/unsafe stack schemes [4], etc. can be used to detect or increase the difficulty of stack overwrite attacks.

Devices should use a combination of the above classes of code and memory injection protections to give their device a more secure posture.

Limitations: Some mechanisms that specifically address code injection can be bypassed by attacks that reuse existing code, such as return-to-libc and return-oriented programming (ROP). Further, ASLR can be undermined by secondary vulnerabilities that disclose memory space addresses.

IEC 62443 4-2 Mappings

  • SAR / EDR / HDR / NDR 3.2 – Protection from malicious code

References

[1] Microsoft. “What is Data Execution Prevention (DEP)?.” microsoft.com. Accessed: Aug. 28, 2024. [Online.] Available: https://support.microsoft.com/en-us/topic/what-is-data-execution-prevention-dep-60dabc2b-90db-45fc-9b18-512419135817

[2] The kernel development community. “Kernel Self-Protection.” kernel.org. Accessed: Aug. 28, 2024. [Online.] Available: https://www.kernel.org/doc/html/v5.4/security/self-protection.html?highlight=kaslr

[3] J. Thompson. “Six Facts about Address Space Layout Randomization on Windows.” google.com. Accessed: Aug. 28, 2024. [Online.] Available: https://cloud.google.com/blog/topics/threat-intelligence/six-facts-about-address-space-layout-randomization-on-windows/

[4] The Clang Team. “SafeStack.” llvm.org. Accessed: Aug. 28, 2024. [Online.] Available: https://releases.llvm.org/15.0.0/tools/clang/docs/SafeStack.html

[5] E. Styger. “Stack Canaries with GCC: Checking for Stack Overflow at Runtime.” mcuoneclipse.com. Accessed: Aug. 28, 2024. [Online.] Available: https://mcuoneclipse.com/2019/09/28/stack-canaries-with-gcc-checking-for-stack-overflow-at-runtime/

diff --git a/mitigations/MID-005.html b/mitigations/MID-005.html new file mode 100644 index 0000000..7ebda9b --- /dev/null +++ b/mitigations/MID-005.html @@ -0,0 +1 @@ + MID-005 | MITRE EMB3D™
Mitigation-page

MID-005: Memory Safe Programming Languages

Mitigation Tier: Intermediate

Description

Memory safe programming languages will give the device security guarantees around the bounds of memory that are safe to read, write, or execute. This can greatly reduce attacks targeting memory bounding errors. Memory safety integration in a device can take multiple forms. Individual drivers, libraries, critical kernel functions, or applications should be implemented in memory safe programming languages. In other instances, it may be possible to use entire kernels or OSes written in memory safe programming languages.

Consideration: Memory safe programming languages implement memory safety using different mechanisms. Based on a device’s resources and properties, using one language over another may be desirable. For example, certain memory safe programming languages use more resources due to their runtime memory protections. These can include garbage collection, virtual runtime environments, and code interpreters. Languages that fall into this category are Java, Python, and Go. Other languages, such as Rust, use compile-time checks to handle address spacing mappings and frees.

Limitation: Use of a memory safe language can help protect against a significant number of common vulnerabilities; however, it does not address every type of software weakness. For example, issues related to input validation, logic flaws, or deserialization can still occur in software written in memory safe languages.

IEC 62443 4-2 Mappings

  • SAR / EDR / HDR / NDR 3.2 – Protection from malicious code

References

[1] National Security Agency. “Software Memory Safety.” defense.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://media.defense.gov/2022/Nov/10/2003112742/-1/-1/0/CSI_SOFTWARE_MEMORY_SAFETY.PDF

diff --git a/mitigations/MID-006.html b/mitigations/MID-006.html new file mode 100644 index 0000000..894416b --- /dev/null +++ b/mitigations/MID-006.html @@ -0,0 +1 @@ + MID-006 | MITRE EMB3D™
Mitigation-page

MID-006: Driver Memory Isolation

Mitigation Tier: Leading

Description

Driver memory isolation separates a given driver from other drivers and OS/Kernel functionality wherever possible. Examples include microkernel architectures and schemes that split some or all of a driver to run in user space vs within a monolithic kernel.

Deploying drivers in a memory isolated context is an effective way of reducing the attack surface of an OS/Kernel because drivers are frequently handling I/O operations and external data, making them readily targetable. When drivers are not memory isolated, a vulnerability in one driver may enable a threat actor to move laterally to other drivers or OS/Kernel components, potentially giving them more access on a device. Memory isolation makes lateral movement more difficult.

Limitations: Memory can likely never be fully separated due to a need for driver information to be handled by the system or applications running on the device. For this reason, the attack surface will never be entirely eliminated, and other protections, such as the usage of memory safe programming languages, could be put in place to further decrease the threat actor’s attack surface.

IEC 62443 4-2 Mappings

  • SAR / EDR / HDR / NDR 3.2 – Protection from malicious code

References

[1] Y. Huang, V. Narayanan, D. Detweiler, K. Huang, G. Tan, T. Jaeger, A. Burtsev. (Jul. 2022). KSplit: Automating Device Driver Isolation. Presented at Proceedings of the 16th USENIX Symposium on Operating Systems Design and Implementation. [Online.] Available: https://www.usenix.org/system/files/osdi22-huang-yongzhe.pdf

[2] J. van Woudenberg. “Top 10 Secure Boot mistakes.” Presented at hardware.io Hardware Security Conference and Training, Santa Clara, CA, USA, 2019. [Online]. Available: https://hardwear.io/usa-2019/presentations/Top-10-Secure-Boot-Mistakes-v1.1-hardwear-io-usa-2019-jasper-van-woudenberg.pdf

diff --git a/mitigations/MID-007.html b/mitigations/MID-007.html new file mode 100644 index 0000000..6b3235f --- /dev/null +++ b/mitigations/MID-007.html @@ -0,0 +1 @@ + MID-007 | MITRE EMB3D™
Mitigation-page

MID-007: Control Flow Manipulation Protections

Mitigation Tier: Intermediate

Description

Control Flow Integrity (CFI) mechanisms ensure that the runtime flow of the program does not deviate from the developer’s intended control flow. In the presence of CFI, threat actors have a more difficult time changing the flow of a program or violating program behaviors because the program has checks in place to ensure that the right functions are called at predictable memory locations. This can prevent against attacks that abuse valid memory spaces and existing code, such as Return Oriented Programming (ROP) seen in TID-206: Memory Management Protections Subverted, because the program code flow, and therefore sections of code such as return addresses, are guaranteed integrity and therefore cannot be manipulated.

IEC 62443 4-2 Mappings

  • SAR / EDR / HDR / NDR 3.2 – Protection from malicious code

References

[1] M. Benatto. “Fighting exploits with Control-Flow Integrity (CFI) in Clang.” redhat.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.redhat.com/en/blog/fighting-exploits-control-flow-integrity-cfi-clang

[2] Android. “Control flow integrity.” android.com. Accessed: Aug. 28, 2024. [Online.] Available: https://source.android.com/docs/security/test/cfi

[3] R. Walls, N. Brown, T. Le Baron, C. Chue, H. Okharvi, B. Ward. “Control-Flow Integrity for Real-Time Embedded Systems.” mit.edu. Accessed: Aug. 28, 2024. [Online.] Available: https://web.mit.edu/ha22286/www/papers/ECRTS19.pdf

[4] I. Anati and O. Simhon. “Control Flow Enforcement Technology.” intel.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.intel.com/content/dam/develop/external/us/en/documents/catc17-introduction-intel-cet-844137.pdf

[5] National Security Agency. “Software Memory Safety.” defense.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://media.defense.gov/2022/Nov/10/2003112742/-1/-1/0/CSI_SOFTWARE_MEMORY_SAFETY.PDF

[6] Apple. “Improving control flow integrity with pointer authentication.” apple.com. Accessed: Aug. 28, 2024. [Online.] Available: https://developer.apple.com/documentation/browserenginekit/improving-control-flow-integrity-with-pointer-authentication

[7] Microsoft. “Control Flow Guard for platform security.” microsoft.com. Accessed: Aug. 28, 2024. [Online.] Available: https://learn.microsoft.com/en-us/windows/win32/secbp/control-flow-guard

[8] ARM. “Overview of Control Flow Integrity.” arm.com. Accessed: Aug. 28, 2024. [Online.] Available: https://developer.arm.com/documentation/100748/0619/Security-features-supported-in-Arm-Compiler-for-Embedded/Overview-of-Control-Flow-Integrity

diff --git a/mitigations/MID-008.html b/mitigations/MID-008.html new file mode 100644 index 0000000..f5684db --- /dev/null +++ b/mitigations/MID-008.html @@ -0,0 +1 @@ + MID-008 | MITRE EMB3D™
Mitigation-page

MID-008: Decidable Protocols and Parsers

Mitigation Tier: Intermediate

Description

One way to understand a protocol’s complexity is through a computational theoretic perspective (e.g., LangSec). For example, the Chomsky hierarchical rank of the grammar used to create a protocol directly dictates the minimum computational model necessary to recognize and parse the protocol. Therefore, 1) structured data and protocols should be designed using the lowest level grammar possible so that 2) parsers can be made using minimally and appropriately matched computational models (e.g., a deterministic push-down automata being used to parse context free input languages instead of a Turing machine).

1. Regarding implementing your own protocol

The design of any new protocol should include an understanding of the grammar used to create that protocol and the computational model necessary to parse that protocol to ensure that the language can be correctly represented by a decidable computational model, particularly with regard to the equivalence problem. This would mean building a protocol out of a regular or deterministic context-free grammar.

Unless a protocol or input language can be built from a regular or deterministic context-free grammar, any corresponding parsers cannot be built to be recognizers and parsers of that protocol without being made undecidable with regard to the equivalence problem and maintain full protocol functionality. This is important because if a parser built to run over an undecidable grammar with regard to the equivalence problem, it will be impossible to guarantee that the parser does not enter an unwanted or vulnerable state. This makes the parser have a higher chance of exhibiting exploitable behaviors.

2. Regarding implementing your own parser

The design of any new protocol parser should be made such that the computational model of that parser conforms to the minimally sufficient computational model necessary to parse that protocol. If a protocol parser is made to be more complex than the grammar used to make the protocol would otherwise require, threat actors may be able to discover unwanted or vulnerable states that could lead to exploitation. Minimally necessary computational models, ideally ones that are decidable with regard to the equivalence problem, allow for machine states to be checked and give threat actors less opportunities to exploit parser behavior.

IEC 62443 4-2 Mappings

  • none

References

[1] L. Sassaman, M. L. Patterson, S. Bratus, A. Shubina, “The Halting Problems of Network Stack Insecurity,” USENIX ;login:, vol. 36, no. 6, pp. 22-32, Dec. 2011. [Online]. Available: https://www.usenix.org/legacy/publications/login/2011-12/openpdfs/Sassaman.pdf

[2] “LangSec: Recognition, Validation, and Compositional Correctness for Real World Security.” Accessed: Aug. 27, 2024. [Online]. Available: http://langsec.org/bof-handout.pdf

[3] Sergey Bratus, Adam J. Crain, Sven M. Hallberg, Daniel P. Hirsch, Meredith L. Patterson, Maxwell Koo, and Sean W. Smith. 2016. Implementing a vertically hardened DNP3 control stack for power applications. In Proceedings of the 2nd Annual Industrial Control System Security Workshop (ICSS ‘16). Association for Computing Machinery, New York, NY, USA, 45–53.

diff --git a/mitigations/MID-009.html b/mitigations/MID-009.html new file mode 100644 index 0000000..57331cc --- /dev/null +++ b/mitigations/MID-009.html @@ -0,0 +1 @@ + MID-009 | MITRE EMB3D™
Mitigation-page

MID-009: Operating System-based Runtime Integrity Check

Mitigation Tier: Intermediate

Description

Runtime integrity checks can be performed by the operating system kernel to verify the integrity of files, data, and executables read from storage before use or execution. Checks may be performed at different levels of granularity depending on the implementation, for example at the file level [1], or as filesystem blocks are read from a storage device [2]. Signatures and hashes of the data is stored as metadata and used by the mechanism to check the integrity of data as it is accessed by the kernel and prepared for reading of execution. If the integrity check fails, an error condition will be raised which may range from triggering an audit event, producing a read error for the data, or even halting the system.

Limitations: This is an OS-enforced control; therefore, an attacker may bypass it by exploiting a privilege escalation vulnerability to obtain access to the kernel at runtime or by undermining the integrity of the OS kernel early in the boot process.

IEC 62443 4-2 Mappings

  • CR 3.4 – Software and information integrity

References

[1] H. Sidhpurwala. “How to use the Linux kernel’s Integrity Measurement Architecture.” redhat.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.redhat.com/en/blog/how-use-linux-kernels-integrity-measurement-architecture

[2] Android. “Implementing dm-verity.” android.com. Accessed: Aug. 28, 2024. [Online.] Available: https://source.android.com/docs/security/features/verifiedboot/dm-verity

[3] V. Pamnani. “System Guard: How a hardware-based root of trust helps protect Windows.” microsoft.com. Accessed: Aug. 28, 2024. [Online.] Available: https://learn.microsoft.com/en-us/windows/security/hardware-security/how-hardware-based-root-of-trust-helps-protect-windows#secure-launchthe-dynamic-root-of-trust-for-measurement-drtm

diff --git a/mitigations/MID-010.html b/mitigations/MID-010.html new file mode 100644 index 0000000..c9ce4d9 --- /dev/null +++ b/mitigations/MID-010.html @@ -0,0 +1 @@ + MID-010 | MITRE EMB3D™
Mitigation-page

MID-010: No Runtime OS Driver Load

Mitigation Tier: Foundational

Description

The ability to load kernel modules and drivers during runtime is a vector for threat actors to exploit, either by loading an adversary-controlled module that is directly malicious or a vulnerable, but otherwise legitimate, module containing a privilege escalation vulnerability that can be later exploited. Therefore, if there is no need to support runtime loading and executing of drivers, removing that ability can eliminate this threat vector.

When there is a need for loadable drivers and kernel modules, MID-011 - OS Driver/Peripheral Authentication discusses how to do so safely.

IEC 62443 4-2 Mappings

  • CR 7.7 – Least functionality

References

diff --git a/mitigations/MID-011.html b/mitigations/MID-011.html new file mode 100644 index 0000000..6a201db --- /dev/null +++ b/mitigations/MID-011.html @@ -0,0 +1 @@ + MID-011 | MITRE EMB3D™
Mitigation-page

MID-011: OS Driver/Peripheral Authentication

Mitigation Tier: Foundational

Description

OSes should prevent the execution of malicious drivers by authenticating the drivers before they are loaded and executed on the device. This can be done by only allowing drivers that have been signed and authenticated with a vendor private key to load. These signatures can be checked locally on the device and accepted if and only if the signature passes verification.

Additionally, a central operating system is sometimes responsible for loading firmware at runtime onto peripheral devices (often by way of an associated driver). The operating system should verify the authenticity of those peripheral firmware packages as part of, or alongside, the checking the driver prior to loading them on the peripheral hardware (e.g., an FPGA, sub-component microcontroller, etc.)

This authentication scheme should be coupled with MID-001- Software Only Bootloader Authentication or MID-002 - Hardware-backed Bootloader Authentication, where the device authenticates the bootloader and then leverages that trusted bootloader to verify all the drivers that are going to be run on the device. Therefore, drivers are verified by the bootloader, which is in turn given security guarantees from the root of trust.

IEC 62443 4-2 Mappings

  • CR 3.4 – Software and information integrity

References

[1] H. Sidhpurwala. “How to use the Linux kernel’s Integrity Measurement Architecture.” redhat.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.redhat.com/en/blog/how-use-linux-kernels-integrity-measurement-architecture

[2] Gentoo Authors. “Signed kernel module support.” gentoo.org. Accessed: Aug. 28, 2024. [Online.] Available: https://wiki.gentoo.org/wiki/Signed_kernel_module_support

[3] Allen-Bradley. “ControlLogix EtherNet/IP Module.” rockwellautomation.com. Accessed: Aug. 28, 2024. [Online.] Available: https://literature.rockwellautomation.com/idc/groups/literature/documents/rn/1756-rn659_-en-p.pdf

diff --git a/mitigations/MID-012.html b/mitigations/MID-012.html new file mode 100644 index 0000000..f0d913e --- /dev/null +++ b/mitigations/MID-012.html @@ -0,0 +1 @@ + MID-012 | MITRE EMB3D™
Mitigation-page

MID-012: OS-based Access Control Mechanisms

Mitigation Tier: Foundational

Description

The OS should enforce access controls for all users and programs to prevent unauthorized access to OS resources, services, and system calls. There are numerous methods of restricting permissions and privileges to users and programs, including leveraging OS-based access control mechanisms that restrict OS system calls or sandbox-based approaches that encapsulate programs within restrictive environments. These mechanisms should be implemented to enforce access based on the principle of least privilege - which states that programs and users should only have access to the resources that they absolutely need to operate, and nothing else.

Operating systems typically deploy various access control mechanisms that restrict which system calls can be executed and what resources those system calls can access. While many operating systems include a default Discretionary Access Control (DAC) mechanism, these have limitations on their ability to define granular permissions for privileged functions. Strong access control mechanisms include (i) capabilities-based permission models, which provide more granular controls over privileged functions, or (ii) mandatory access control (MAC) mechanisms (e.g., SELinux), which allow fully customizable privileges across all system calls and resources. Further, programs should obtain privileged access only for key functions and then downgrade those privileges after the function is performed (e.g., setuid/setguid). The access control mechanisms deployed by the device must be sufficiently sophisticated to support the variety of programs and applications, their exposure to threats (e.g., networks services), and the criticality of specific data or resources.

Other mechanisms can be used to further restrict what resources an executing process may access. For example, in Linux the seccomp feature can be used to limit which of the OS kernel’s system calls a process may invoke, further constricting the attack surface a compromised process can access to increase its foothold on a device.

IEC 62443 4-2 Mappings

  • CR 2.1 - Authorization Enforcement 

References

[1] AppArmor. “Linux kernel security module.” apparmor.net. Accessed: Aug. 28, 2024. [Online.] Available: https://www.apparmor.net/

[2] M. Kerrisk. “seccomp.” man7.org. Accessed: Aug. 28, 2024. [Online.] Available: https://www.man7.org/linux/man-pages/man2/seccomp.2.html

[3] RedHat. “4.2 SELinux and Mandatory Access Control (MAC).” redhat.com. Accessed: Aug. 28, 2024. [Online.] Available: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/virtualization_security_guide/sect-virtualization_security_guide-svirt-mac

[4] RedHat. “10.4. Defining Role-Based Access Controls.” redhat.com. Accessed: Aug. 28, 2024. [Online.] Available: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/linux_domain_identity_authentication_and_policy_guide/defining-roles

[5] J. Kline. “The Linux Security Hardening Checklist for Embedded Systems.” starlab.io. Accessed: Aug. 28, 2024. [Online.] Available: https://www.starlab.io/blog/the-linux-security-hardening-checklist-for-embedded-systems

diff --git a/mitigations/MID-013.html b/mitigations/MID-013.html new file mode 100644 index 0000000..1510cea --- /dev/null +++ b/mitigations/MID-013.html @@ -0,0 +1 @@ + MID-013 | MITRE EMB3D™
Mitigation-page

MID-013: Process and Thread Memory Segmentation

Mitigation Tier: Foundational

Description

Separating the memory between processes and threads, using enforcement mechanisms like memory management units (MMUs) or memory protection units (MPUs), shrinks the attack surface available to threat actors. Memory space separation prevents a threat actor from trivially accessing the memory of other threads or processes to conduct lateral movement, privilege escalation, or process manipulation. This is frequently done through using virtual memory allocation schemes with the MMU.

Additionally, running all software/applications in separate isolated memory-restricted regions and using the kernel/OS to broker between processes can greatly reduce a device’s threat landscape. This is because restricting software/applications to their own segments and using kernel-brokered inter-process communication (IPC) forces adversaries to kernel to gain unauthorized access to other processes.

Limitations: IPC implementations will vary and will depend on the function of the devices and its hardware architecture. IPC mechanisms and kernel system calls can have their own vulnerabilities that allow privilege escalation or lateral movement.

IEC 62443 4-2 Mappings

  • SAR / EDR / HDR / NDR 3.2 – Protection from malicious code

References

[1] timlt. “Develop secure embedded applications with Eclipse ThreadX.” microsoft.com. Accessed: Aug. 28, 2024. [Online.] Available: https://learn.microsoft.com/en-us/azure/iot-develop/concepts-azure-rtos-security-practices#embedded-security-components-memory-protection

[2] D. Pandey. “Inter Process Communication (IPC).” geeksforgeeks.org. Accessed: Aug. 28, 2024. [Online.] Available: https://www.geeksforgeeks.org/inter-process-communication-ipc/

[3] BlackBerry. “Interprocess Communication (IPC).” qnx.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.qnx.com/developers/docs/7.1/#com.qnx.doc.neutrino.sys_arch/topic/ipc.html

diff --git a/mitigations/MID-014.html b/mitigations/MID-014.html new file mode 100644 index 0000000..2492cb2 --- /dev/null +++ b/mitigations/MID-014.html @@ -0,0 +1 @@ + MID-014 | MITRE EMB3D™
Mitigation-page

MID-014: Sandboxing

Mitigation Tier: Intermediate

Description

Sandboxes are software execution environments that run code under restrictions to limit that code’s access to system resources a non-restricted user-level process would otherwise have access to. This is especially useful when handling untrusted code provided by users (e.g., a PLC program) or 3rd parties (e.g., JavaScript from a remote web site), especially when supporting such code is a mandatory device function and cannot simply be forbidden (as in MID-051).

A sandbox runtime provides only filtered and managed access to system resources. For example, an untrusted program will not have direct access to invoke kernel syscalls, read or write to files, access network interfaces, etc. The runtime can then provide only limited access to specific constrained resources governed by security policy, which can significantly reduce the risk of executing untrusted code. These protections will make lateral movement to different processes more difficult for malicious code running within a sandbox, as the code has no access to memory in those processes and has very little, to no, access to privileged function calls. Malicious code will be unable to access and manipulate data, memory, and code outside the sandbox without first finding and exploiting a vulnerability in the sandbox itself. Mobile devices running iOS and Android are a widely used example of this, running all applications in individual sandboxes to protect user data from malicious applications [1][4]. Another example is the WebAssembly format, adopted recently in web browsers, which allows compiled code to safely execute in a sandbox created by the browser (similar to how JavaScript code is sandboxed) [5].

Additionally, the abstraction provided by a sandbox can be used to prevent untrusted code from exploiting vulnerabilities that require low-level access to hardware (e.g., TID-103, TID-110). For example, in response to the Spectre and Meltdown vulnerabilities, web browsers deployed changes to their JavaScript engines to reduce the resolution of timers available to JavaScript code, reducing timer accuracy below the threshold necessary to successfully exploit the timing-based side channel [2][3]. A similar change in Chromium-based browsers eliminates a form of RowHammer that researchers crafted using JavaScript and WebGL [2].

IEC 62443 4-2 Mappings

  • SAR / EDR / HDR / NDR 3.2 – Protection from malicious code

References

[1] Apple. “Apple Platform Security.” apple.com. Accessed: Aug. 26, 2024. [Online]. Available: https://help.apple.com/pdf/security/en_US/apple-platform-security-guide.pdf

[2] The Chromium Projects. “Mitigating Side-Channel Attacks.” Chromium Security. Accessed: Sep. 5, 2024. [Online.] Available: https://www.chromium.org/Home/chromium-security/ssca/

[3] L. Wagner. “Mitigations landing for new class of timing attack.” Mozilla Security Blog. Accessed: Sep. 5, 2024. [Online.] Available: https://blog.mozilla.org/security/2018/01/03/mitigations-landing-new-class-timing-attack/

[4] Android Open Source Project. “Application Sandbox.” AOSP Documentation. Accessed: Sep. 10, 2024. [Online.] Available: https://source.android.com/docs/security/app-sandbox

[5] WebAssembly. “Security.” webassembly.org. Accessed: Sep. 10, 2024. [Online.] Available: https://webassembly.org/docs/security/

diff --git a/mitigations/MID-015.html b/mitigations/MID-015.html new file mode 100644 index 0000000..6833b82 --- /dev/null +++ b/mitigations/MID-015.html @@ -0,0 +1 @@ + MID-015 | MITRE EMB3D™
Mitigation-page

MID-015: Containerization

Mitigation Tier: Intermediate

Description

Some operating systems offer the ability to create containers that wrap small sets of applications in isolated partitions. Each container has its own view of system resources that is isolated from other containers and the host OS. Examples include Linux containers (LXC), Docker, BSD jails, etc. Container partitions are created by the host OS kernel which provides each container with isolated copies of various system resources, such as a unique guest filesystem, partitioned network stack, process ID space, user ID space, etc. Unlike virtualization (see MID-022), container systems do not need to provide virtualized views of hardware running separate full operating systems, instead abstracting at the level of a single kernel instance allows for lower performance overhead. However, OS kernels typically have a larger attack surface than a VM system’s hypervisor, so containers are generally considered to be a weaker form of isolation than virtualization [2]. Device designers should consider risk vs performance tradeoffs when selecting which isolation technology to implement, although both technologies can used in parallel to achieve the desired balance.

Containers offer several opportunities for security hardening. All the capabilities of MID-012 and MID-013 are available within each container partition. Furthermore, container filesystems can be stripped down to the bare minimum necessary for the applications within the container to function (see MID-016 – Least Functionality). So-called “rootless” container design patterns can be employed such that all processes within a container context run with unprivileged non-root user permissions. Host-side orchestration tools like Docker, can enforce additional security restrictions over container contexts when they are created [1]. For example, seccomp syscall filters can be applied to each container to restrict what kernel interfaces any process within that container may access, which reduces the opportunities for container breakout attacks [4]. Finally, device developers may consider utilizing non-persistent or immutable (read-only) container image design patterns. These increase the difficulty for attackers to establish a foothold within a container while simplifying the process of restoring containers to a known-good state through restarting containers from an integrity-checked known-good state periodically or in response to indicators of compromise.

Note: Containers can offer additional non-security benefits to device developers. The additional modularization they provide can make application development and maintenance more efficient, including making various devops practices more accessible to embedded device development workflows [6].

IEC 62443 4-2 Mappings

  • SAR / EDR / HDR / NDR 3.2 – Protection from malicious code

  • CR 3.4 – Software and information integrity

References

[1] Docker. “Docker security.” docker.com. Accessed: Aug. 28, 2024. [Online.] Available: https://docs.docker.com/engine/security/

[2] M. Ahuje. “CVE-2022-0185: Kubernetes Container Escape Using Linux Kernel Exploit.” crowdstrike.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.crowdstrike.com/blog/cve-2022-0185-kubernetes-container-escape-using-linux-kernel-exploit/

[4] V. Rothberg. “Improving Linux container security with seccomp.” redhat.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.redhat.com/sysadmin/container-security-seccomp

[5] M. Kerrisk. “seccomp.” man7.org. Accessed: Aug. 28, 2024. [Online.] Available: https://www.man7.org/linux/man-pages/man2/seccomp.2.html

[6] Wind River Systems Inc. “What are Embedded Containers?” Accessed: Sep. 5, 2024. [Online.] Available: https://www.windriver.com/solutions/learning/embedded-containers

diff --git a/mitigations/MID-016.html b/mitigations/MID-016.html new file mode 100644 index 0000000..ea8b432 --- /dev/null +++ b/mitigations/MID-016.html @@ -0,0 +1 @@ + MID-016 | MITRE EMB3D™
Mitigation-page

MID-016: Least Functionality

Mitigation Tier: Foundational

Description

Removing all unnecessary programs or features can greatly limit the amount of tools available on a device for adversaries to potentially use. For example, by removing a compiler, unnecessary code, device drivers, or unnecessary binaries from a device, adversaries won’t be able to leverage that functionality into device exploits. If devices starve the threat actors of available tools, it will be more difficult for them to leverage capabilities into malicious activity.

Limitations: Many device functions that could be abused by a threat actor are necessary to support the device’s core operational or management functions and therefore cannot be removed.

IEC 62443 4-2 Mappings

  • CR 7.7 - Least functionality

References

[1] CISA. “Identifying and Mitigating Living Off the Land Techniques.” cisa.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://www.cisa.gov/sites/default/files/2024-02/Joint-Guidance-Identifying-and-Mitigating-LOTL_V3508c.pdf

[2] J. Phipps. “Living Off the Land Attacks: LOTL Definition & Prevention.” esecurityplanet.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.esecurityplanet.com/networks/living-off-the-land-attacks/#best-practices

[3] B. Lenaerts-Bergmans. “What Are Living Off the Land (LOTL) Attacks?.” crowdstrike.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.crowdstrike.com/cybersecurity-101/living-off-the-land-attacks-lotl/

diff --git a/mitigations/MID-017.html b/mitigations/MID-017.html new file mode 100644 index 0000000..bae760a --- /dev/null +++ b/mitigations/MID-017.html @@ -0,0 +1 @@ + MID-017 | MITRE EMB3D™
Mitigation-page

MID-017: Security-relevant Auditing and Logging

Mitigation Tier: Foundational

Description

Devices should include audit logs of all user access, configuration changes, program updates, service starts and stops, and other events related to security. This allows device operators and security teams to investigate device actions and hunt for unusual behavior that may be indicators of compromise.

Programmable devices like PLCS should keep logs of all program changes so that device operators have the ability to audit them to check for threat actor attempts to manipulate device operating environments. Particularly useful auditable events include program edits, appends, and online edits.

Limitations: Embedded devices often have constraints that limit the extent of on-device logging, such as a lack of storage space, NVRAM burnout, and network bandwidth limitations. Device designers and operators should take these limitations into account when choosing what data should be logged either locally or remotely.

Consideration: Devices should take TID-224: Excessive Access via Software Diagnostic Features into consideration when designing their logging and log access scheme. Logging sensitive information, such as system crash information (core dumps, memory addresses), credentials, or keys, or giving read access to non-privileged users, could expose the device to information leaks.

Note: It is possible to overcome some of the storage limitations by offloading the data over the network. While this presents other issues related to network bandwidth, data reliability, and network-data costs, it helps to overcome some other device-level limitations.

Note: See the threats associated with PID-324 - Device includes support for “program uploads” to retrieve programs from the device from an engineering workstation for more information about uploading programs for inspection.

IEC 62443 4-2 Mappings

  • CR 2.8 - Auditable events 

  • CR 3.7 – Error handling

References

[1] CISA. “Identifying and Mitigating Living Off the Land Techniques.” cisa.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://www.cisa.gov/sites/default/files/2024-02/Joint-Guidance-Identifying-and-Mitigating-LOTL_V3508c.pdf

[2] P. Czanik. “Reliable IoT event logging with syslog-ng.” opensource.com. Accessed: Aug. 28, 2024. [Online.] Available: https://opensource.com/article/18/3/logging-iot-events-syslog-ng

[3] RedHat. “A. Bharadwaj Madabhushana.” redhat.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.redhat.com/sysadmin/configure-linux-auditing-auditd

diff --git a/mitigations/MID-018.html b/mitigations/MID-018.html new file mode 100644 index 0000000..7744a6a --- /dev/null +++ b/mitigations/MID-018.html @@ -0,0 +1 @@ + MID-018 | MITRE EMB3D™
Mitigation-page

MID-018: Require Authentication for Privileged Functions

Mitigation Tier: Foundational

Description

Privileged functions that can severely affect the performance or critical functions of a device should only be accessible to authenticated privileged users. This includes functions such as configuration changes, user account changes, role and permission changes, operating state changes, etc. Alerting for failed access attempts is recommended to detect brute-force login attempts. Additionally, the authentication scheme should include controls for limiting session lifetimes, such as requiring reauthentication based on periods of in-activity.

Note: The mitigation MID-031 - Physical Presence Validation can be paired with this mitigation for more robust device security.

IEC 62443 4-2 Mappings

  • CR 1.1 - Human user interaction and authentication

References

[1] CISA. “Identifying and Mitigating Living Off the Land Techniques.” cisa.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://www.cisa.gov/sites/default/files/2024-02/Joint-Guidance-Identifying-and-Mitigating-LOTL_V3508c.pdf

[2] Magisk. “sudo Command in Linux with Examples.” geeksforgeeks.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.geeksforgeeks.org/sudo-command-in-linux-with-examples/

diff --git a/mitigations/MID-019.html b/mitigations/MID-019.html new file mode 100644 index 0000000..485892e --- /dev/null +++ b/mitigations/MID-019.html @@ -0,0 +1 @@ + MID-019 | MITRE EMB3D™
Mitigation-page

MID-019: ROP Gadget Minimization

Mitigation Tier: Intermediate

Description

Applying Return Oriented Programming (ROP) gadget protection techniques to device code involves eliminating sequences of instructions that can be used as ROP gadgets, zeroing out registers, monitoring gadget history, using gadgets to hide other gadgets, modifying gadgets to make them unusable, etc. The goal of these mechanisms is to reduce the number of reusable code fragments that can successfully be used as ROP gadgets, reducing the likelihood that a threat actor can assemble a number and variety of gadgets sufficient to craft a working exploit payload.

Gadget minimization is most easily be performed at compile time, when the compiler is in control over the precise strings of machine instructions it produces [2][3][4]. Other work seeks to identify and potentially remove or neutralize gadgets found in previously compiled libraries and executables. [1]

IEC 62443 4-2 Mappings

  • SAR / EDR / HDR / NDR 3.2 - Protection for malicious code 

References

[1] ivanfrantic. “ropguard.” github.com. Accessed: Aug. 28, 2024. [Online.] Available: https://github.com/ivanfratric/ropguard

[2] pagabuc. “gfree.” github.com. Accessed: Aug. 28, 2024. [Online.] Available: https://github.com/pagabuc/gfree

[3] K. Onarlioglu, L. Bilge, A. Lanzi, D. Balzarotti, and E. Kirda. “G-Free: defeating return-oriented programming through gadget-less binaries” in Proceedings of the 26th Annual Computer Security Applications Conference, ACSAC ‘10. [Online.] Available: https://doi.org/10.1145/1920261.1920269

[4] F. Cassano, C. Bershatsky, J. Ginesin, S. Bashenko, “SafeLLVM: LLVM Without The ROP Gadgets!,” 2023, arXiv:2305.06092v3

diff --git a/mitigations/MID-020.html b/mitigations/MID-020.html new file mode 100644 index 0000000..7c60fbe --- /dev/null +++ b/mitigations/MID-020.html @@ -0,0 +1 @@ + MID-020 | MITRE EMB3D™
Mitigation-page

MID-020: Pointer Authentication

Mitigation Tier: Intermediate

Description

Pointer authentication is a hardware security feature added to some recent processor designs (e.g., ARMv8.3) which attach authentication codes to designated pointer values in memory. When the pointer is accessed, for example as a function pointer to jump execution to, its value is checked against the authentication code to ensure it has not been tampered with by a threat actor attempting to perform return-oriented programming or another form of control flow hijack. To implement pointer-level authentication, supported hardware, OS, and compilers are necessary.

Pointer authentication features can be utilized in the implementation of a MID-007 - Control Flow Integrity scheme, but with the advantage of hardware support that should reduce the performance overhead cost typically associated with software-based CFI implementations.

IEC 62443 4-2 Mappings

  • SAR / EDR / HDR / NDR 3.2 - Protection for malicious code

References

[1] H. Liljestrand, T. Nyman, K. Wang, C. Perez, J. Ekberg, N. Asokan. “PAC it up: Towards Pointer Integrity using ARM Pointer Authentication” presented at 28th USENIX Security Symposium, Aug. 2019. [Online.] Available: https://www.usenix.org/system/files/sec19-liljestrand_0.pdf

[2] M. Rutland. “ARMv8.3 Pointer Authentication” presented at Linux Security Summit., Sept. 2017, Available: https://events.static.linuxfound.org/sites/events/files/slides/slides_23.pdf

[3] ARM. Pointer Authentication on ARMv8.3. Accessed: Aug. 28, 2024. [Online.] Available: https://www.qualcomm.com/content/dam/qcomm-martech/dm-assets/documents/pointer-auth-v7.pdf

[4] A. Mujumdar. “Armv8.1-M Pointer Authentication and Branch Target Identification Extension.” arm.com. Accessed: Aug. 28, 2024. [Online.] Available: https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/armv8-1-m-pointer-authentication-and-branch-target-identification-extension

[5] ARM. “Basics of Pointer Authentication.” arm.com. Accessed: Aug. 28, 2024. [Online.] Available: https://learn.arm.com/learning-paths/servers-and-cloud-computing/pac/pac/

diff --git a/mitigations/MID-021.html b/mitigations/MID-021.html new file mode 100644 index 0000000..40ac8a8 --- /dev/null +++ b/mitigations/MID-021.html @@ -0,0 +1 @@ + MID-021 | MITRE EMB3D™
Mitigation-page

MID-021: VM Hardening

Mitigation Tier: Foundational

Description

Virtual Machines (VMs) provide programs with execution environments that are separated from the rest of the system, providing useful security properties (seen in MID-022 - Segmentation Through Hardware-assisted VMs). To help ensure that those guarantees are maintained, the hypervisor’s attack surface accessible from within a VM should be minimized.

VM platforms often offer a variety of virtual hardware devices and APIs to access other hypervisor-provided resources and services to ease tasks like sharing data into and out of a VM. A threat actor that has thoroughly compromised the operating systems resident in a guest VM can access these interfaces and attempt to exploit any vulnerabilities to escalate once again into the hypervisor’s privilege level. Restricting virtual hardware and hypervisor service access to the minimum required by each guest VM reduces the likelihood of a compromise spreading from laterally to other VMs or into the hypervisor.

IEC 62443 4-2 Mappings

  • CR 7.7 – Least functionality

References

[1] vmware. “VMware Infrastructure 3 Security Hardening.” vmware.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.vmware.com/pdf/vi3_security_hardening_wp.pdf

[2] M. Jha. “Hardening Virtual Machine Security.” vstellar.com. Accessed: Aug. 28, 2024. [Online.] Available: https://vstellar.com/2017/12/hardening-virtual-machine-security/

[3] RedHat. “Chapter 4. sVirt.” redhat.com. Accessed: Aug. 28, 2024. [Online.] Available: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/virtualization_security_guide/chap-virtualization_security_guide-svirt

diff --git a/mitigations/MID-022.html b/mitigations/MID-022.html new file mode 100644 index 0000000..d0fbe1d --- /dev/null +++ b/mitigations/MID-022.html @@ -0,0 +1 @@ + MID-022 | MITRE EMB3D™
Mitigation-page

MID-022: Segmentation Through Hardware-assisted VMs

Mitigation Tier: Intermediate

Description

Virtual machines increase the level of isolation for software and data by virtualizing and partitioning device hardware and running their own dedicated operating system kernel (unlike containers that share a kernel). This provides stronger separation than kernel-based containers (MID-015) or process separation (MID-013) but at the cost of higher performance overhead. Software compromises will be contained within a VM even if the threat actor can successfully exploit a privilege escalation vulnerability in the OS kernel within a given VM, protecting any code or data present in other VMs.

Hardware-assisted Virtual Machines (VMs) take advantage of CPU extensions that specifically support virtualization use cases to enforce strict separation between VMs’ RAM and other resources. A hypervisor can utilize these CPU features to provide a high degree of assurance in that separation with relatively little performance overhead compared to a fully software-based VM scheme. More advanced hardware features extend the hardware-based separation to I/O device access by extending the functionality of IOMMU features (see MID-053).

Note: Implementing this mitigation will likely expose devices to threats associated with PID-242 - Device includes hypervisor.

IEC 62443 4-2 Mappings

  • CR 2.1 – Authorization enforcement (1) Authorization enforcement for all users (humans, software processes and devices)

References

[1] OpenSystems Media. “Embedded virtualization: Latest trends and techniques.” embeddedcomputing.com. Accessed: Aug. 28, 2024. [Online.] Available: https://embeddedcomputing.com/technology/processing/embedded-virtualization-latest-trends-and-techniques

[2] BlackBerry. “What Is Virtualization for Embedded Systems?.” qnx.com. Accessed: Aug. 28, 2024. [Online.] Available: https://blackberry.qnx.com/en/ultimate-guides/embedded-system-security/virtualization-for-embedded-systems

[3] E. Kou. “Virtualization for embedded industrial systems.” ti.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.ti.com/lit/wp/spry317b/spry317b.pdf

[4] openstack. “Hardening the virtualization layers.” openstack.org. Accessed: Aug. 28, 2024. [Online.] Available: https://docs.openstack.org/security-guide/compute/hardening-the-virtualization-layers.html

diff --git a/mitigations/MID-023.html b/mitigations/MID-023.html new file mode 100644 index 0000000..3d5b3a2 --- /dev/null +++ b/mitigations/MID-023.html @@ -0,0 +1 @@ + MID-023 | MITRE EMB3D™
Mitigation-page

MID-023: Hypervisor Hardening

Mitigation Tier: Intermediate

Description

Highly privileged hypervisor software is required to orchestrate and manage the execution of multiple virtual machines. The hypervisor brokers the access guest VMs have to virtual and physical hardware resources and any support services implemented by the hypervisor itself. Because of its privilege level, the hypervisor must be hardened against comprise, a multi-faceted process that can involve multiple technical controls to increase hypervisor security.

Hypervisor-side software components that help implement hypervisor service APIs and the virtual hardware devices exposed to guest VMs should be isolated and sandboxed with minimal privileges to constrain any compromise of those components from spreading to more privileged domains within the hypervisor context. For example, in a hypervisor/host-OS combination based on Linux’s KVM features, the software processes implementing each VM could be run with reduced privileges and under a restrictive SELinux policy [4].

In an embedded systems context, the configuration of the hypervisor and guest VMs is likely to be relatively static with no need to dynamically stop, start, or alter the configurations of VMs during runtime. In that case the hypervisor software and its configurations could be stored in immutable memory to the extent possible and only allowed to be changed as a result of the device’s secure update mechanism.

Hypervisor software and data should also be integrated into the secure boot process to ensure its integrity before the device starts, as can be seen in MID-002 - Hardware-backed Bootloader Authentication. This can be done by placing bootloader-time integrity checks over the hypervisor to ensure that hypervisor code is safe to run according to factory or user-defined signatures.

IEC 62443 4-2 Mappings

  • CR 7.7 – Least functionality

  • CR 2.1 – Authorization enforcement (1) Authorization enforcement for all users (humans, software processes and devices)

References

[1] E. Kou. “Virtualization for embedded industrial systems.” ti.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.ti.com/lit/wp/spry317b/spry317b.pdf

[2] BlackBerry. “What Is Virtualization for Embedded Systems?.” qnx.com. Accessed: Aug. 28, 2024. [Online.] Available: https://blackberry.qnx.com/en/ultimate-guides/embedded-system-security/virtualization-for-embedded-systems

[3] ARM. “Secure virtualization.” arm.com. Accessed: Aug. 28, 2024. [Online.] Available: https://developer.arm.com/documentation/102142/0100/Secure-virtualization

[4] RedHat. “Chapter 4. sVirt.” redhat.com. Accessed: Aug. 28, 2024. [Online.] Available: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/virtualization_security_guide/chap-virtualization_security_guide-svirt

diff --git a/mitigations/MID-024.html b/mitigations/MID-024.html new file mode 100644 index 0000000..744c5b6 --- /dev/null +++ b/mitigations/MID-024.html @@ -0,0 +1 @@ + MID-024 | MITRE EMB3D™
Mitigation-page

MID-024: Encrypted VM Isolation

Mitigation Tier: Leading

Description

VM’s inherent memory isolation provides many protections for memory that is specifically allocated to that VM, there are still opportunities for attacks launched from the hypervisor or any other system component with access to the physical memory. By virtue of virtual machines (VMs) being run on the same hardware, potential exploits and data leaks are present through hardware or device architecture vulnerabilities.

Encrypting VMs and VM-related information can help maintain VM isolation in the presence of an untrustworthy hypervisor by keeping each VMs data confidential during execution. The added encryption makes it such that the VM’s memory space is protected against unauthorized reads by the hypervisor or any other VM. Only undecipherable could be seen from any context other than the intended guest VM that memory belongs to.

Cloud computing uses cases are driving the adoption of these confidential computing features in newer processors. They build upon the RAM encryption functionality (described further in MID-065) that creates encrypted enclaves in memory associated with a particular execution context (thread, process, etc.) such that the contents of that memory are encrypted automatically by the CPU before being written to RAM and automatically decrypted when read in and placed in the CPU’s cache and registers.

IEC 62443 4-2 Mappings

  • CR 4.1 – Information confidentiality

  • CR 2.1 – Authorization enforcement (1) Authorization enforcement for all users (humans, software processes and devices)

References

[1] Intel. “Trust Domain Security Guidance for Developers.” intel.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/best-practices/trusted-domain-security-guidance-for-developers.html

[2] ARM. “Learn the architecture - Realm Management Extension.” arm.com. Accessed: Aug. 28, 2024. [Online.] Available: https://developer.arm.com/documentation/den0126/0100/Overview

[3] M Scapicchio and M. Kozinski. “What is confidential computing?.” ibm.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.ibm.com/topics/confidential-computing

[4] Microsoft. “Azure confidential computing.” microsoft.com. Accessed: Aug. 28, 2024. [Online.] Available: https://azure.microsoft.com/en-us/solutions/confidential-compute

[5] Intel. “Intel Confidential Computing Solutions.” intel.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.intel.com/content/www/us/en/security/confidential-computing.html

[6] AMD. “AMD Secure Encrypted Virtualization (SEV).” amd.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.amd.com/en/developer/sev.html

diff --git a/mitigations/MID-025.html b/mitigations/MID-025.html new file mode 100644 index 0000000..5b4969b --- /dev/null +++ b/mitigations/MID-025.html @@ -0,0 +1 @@ + MID-025 | MITRE EMB3D™
Mitigation-page

MID-025: End-of-Life Management Features

Mitigation Tier: Leading

Description

When vendor-provided device maintenance stops, devices that may contain vulnerabilities are left unsupported and unpatched. Any vulnerability found during this time may be present in a device for as long as that device continues to be used. By allowing device users to perform end-of-life management, device users to optionally attempt to maintain a higher security posture on their device through third-party firmware updates or security software. For this to be possible, the device vendor may have to include technical controls, such as “unlocking” parts of the device through a final firmware update or distribution of keys or allowing device users to upload their own keys for use in functions like firmware update mechanisms and secure boot processes. Additionally, the device vendor will likely have to update their device usage terms of service to include statements that once an end-of-life determination is made, certain liability mechanisms and warranties are no longer applicable.

Limitations: Giving device users access to device management tools that are typically reserved for vendors, such as firmware updates, may open up threat vectors for threat actors.

IEC 62443 4-2 Mappings

  • none

References

[1] RedHat. “Chapter 3. Signing a kernel and modules for Secure Boot.” redhat.com. Accessed: Aug. 28, 2024. [Online.] Available: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/managing_monitoring_and_updating_the_kernel/signing-a-kernel-and-modules-for-secure-boot_managing-monitoring-and-updating-the-kernel

[2] H. Mbugua, A. Buck, C. Werner, J. Flores, B. Lamos, C. Wales, B. de Koning, F. Ombongi, M. Macy, A. Cornelissen, B. Braig, C. Chiedo. “Create a self-signed public certificate to authenticate to your application.” microsoft.com. Accessed: Aug. 28, 2024. [Online.] Available: https://learn.microsoft.com/en-us/entra/identity-platform/howto-create-self-signed-certificate

[3] Android. “Lock and unlock the bootloader.” android.com. Accessed: Aug. 28, 2024. [Online.] Available: https://source.android.com/docs/core/architecture/bootloader/locking_unlocking

[4] B. Schoon. “LG is closing the bootloader unlock program that would help keep its Android phones alive.” 9to5google.com. Accessed: Aug. 28, 2024. [Online.] Available: https://9to5google.com/2021/12/06/lg-bootloader-unlock-program-closing/

[5] D. Wallach. “Assured Micropatching (AMP).” darpa.mil. Accessed: Aug. 28, 2024. [Online.] Available: https://www.darpa.mil/program/assured-micropatching

diff --git a/mitigations/MID-026.html b/mitigations/MID-026.html new file mode 100644 index 0000000..28d4d71 --- /dev/null +++ b/mitigations/MID-026.html @@ -0,0 +1 @@ + MID-026 | MITRE EMB3D™
Mitigation-page

MID-026: Secure Firmware Update

Mitigation Tier: Foundational

Description

Firmware update mechanisms can provide a vector for threat actors to install malicious code, extract secrets from the firmware, or disrupt the device’s availability. A secure firmware update mechanism must ensure the authenticity of the firmware, encrypt the file or communication channel, ensure updates cannot be triggered at inopportune times, and prevent rollback to insecure versions. Key functions of a secure firmware update are provided below.

1- Authenticity and Integrity: The device should validate that the firmware update has not been tampered with before installing it on the device. The vendor should digitally sign the firmware using a protected private key, while the device should include an associated public key or public key hash to verify the signature scheme [1]. The digital signature should be computed across the entire firmware file. To sign a firmware image, the firmware signer should compute a hash of the firmware and run that hash through a signing software. The device can then take a hash of the firmware that it receives and use the public key to verify the signature from the signed hash to compare the two hash values [7].

2- Encryption: Encrypting firmware in-transit and at-rest is an effective way to prevent adversaries from reverse engineering the firmware to extract secrets or discovering vulnerabilities.

At-rest: If the firmware deployment requires firmware to be manually downloaded and transferred, stored on intermediary devices before reaching the target device, or stored anywhere on the device before loading into flash memory, then the firmware file should be encrypted. Encryption on-device could be implemented by encrypting all sections of the firmware and having the bootloader decrypt the firmware when it needs to be loaded. The bootloader would check the authenticity and integrity of the encrypted firmware, as mentioned in step 1, and then would decrypt the firmware if all the checks pass. The firmware would then be available for execution [8][9].

In-transit: If the firmware is deployed using an over-the-air update scheme (i.e., the firmware file will not reside on any intermediary systems), encryption should be provided by using an encrypted and authenticated communication protocol with public key-based authentication [9].

3- Update Initiation: If a device can have its firmware update process initiated at any time, threat actors may be able to cause a denial-of-service attack against the device by initiating it at an unwanted time. To prevent these scenarios, all manually initiated firmware updates should only be initiated by authenticated and authorized privileged administrative users. In the event that the device is using automatic firmware updates, any requests to initiate the firmware update should go over an encrypted and authenticated protocol.

4- Rollback Protection: Optionally, rollback protections can be added to the firmware update process to prevent threat actors from reinstalling an older, vulnerable version of firmware for future exploitation. Adding rollback protections are not always needed and may complicate device processes. See MID-030 - Firmware Rollback Protections for more information.

Additional Threats: This mitigation depends on multiple cryptographic mechanisms, protocols, and keys, which are all potentially vulnerable to different threats (listed below), which should also be considered with the implemented solution.

  • TID-330 Cryptographic Timing Side-Channel

  • TID-214 Secrets Extracted from Device Root of Trust

  • TID-411 Weak/Insecure Cryptographic Protocol

  • TID-318 Insecure Cryptographic Implementation

  • TID-317 Predictable Cryptographic Key

IEC 62443 4-2 Mappings

  • EDR / HDR / NDR 3.10 - Support for updates  (1) Update authenticity and integrity

References

[1] K. Goldman, E. Palmer, T. Block, C. Engel, and D. Heller. “Best Practices for Firmware Code Signing.” opencompute.org. Accessed: Aug. 28, 2024. [Online.] Available: https://www.opencompute.org/documents/ibm-white-paper-best-practices-for-firmware-code-signing

[2] A. Regensheid. “NIST 800-193 - Platform Firmware Resiliency Guidelines.” nist.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-193.pdf

[3] K. Masica. “Firmware Management Best Practices Guide for Energy Infrastructure Embedded Control Devices.” dtic.mil. Accessed: Aug. 28, 2024. [Online.] Available: https://apps.dtic.mil/sti/trecms/pdf/AD1135234.pdf

[4] J. Beningo. “5 Elements to a Secure Embedded System, Part 5: Secure Storage.” designnews.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.designnews.com/embedded-systems/5-elements-to-a-secure-embedded-system-part-5-secure-storage

[5] Embedded Staff. “Building a security-optimized embedded design using protected key storage.” embedded.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.embedded.com/building-a-security-optimized-embedded-design-using-protected-key-storage

[6] S. Garg. “Protecting Security Critical Firmware.” linaro.org. Accessed: Aug. 28, 2024. [Online.] Available: https://www.linaro.org/blog/protecting-security-critical-firmware/

[7] Chipkin. “What Is Signed Firmware.” chipkin.com. Accessed: Aug. 28, 2024. [Online.] Available: https://store.chipkin.com/articles/what-is-signed-firmware

[8] G. Garcia. “Securing Firmware Updates With AES.” memfault.com. Accessed: Aug. 28, 2024. [Online.] Available: https://interrupt.memfault.com/blog/firmware-encryption-with-python

[9] D. Pang. “Cryptographic Techniques for Safer Firmware.” electronicdesign.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.electronicdesign.com/technologies/embedded/article/21163055/neuronicworks-cryptographic-techniques-for-safer-firmware

[10] J. van Woudenberg. “Top 10 Secure Boot mistakes.” Presented at hardware.io Hardware Security Conference and Training, Santa Clara, CA, USA, 2019. [Online]. Available: https://hardwear.io/usa-2019/presentations/Top-10-Secure-Boot-Mistakes-v1.1-hardwear-io-usa-2019-jasper-van-woudenberg.pdf

diff --git a/mitigations/MID-027.html b/mitigations/MID-027.html new file mode 100644 index 0000000..5bea5be --- /dev/null +++ b/mitigations/MID-027.html @@ -0,0 +1 @@ + MID-027 | MITRE EMB3D™
Mitigation-page

MID-027: Validated Cryptographic Libraries

Mitigation Tier: Foundational

Description

Devices should use validated cryptographic libraries (e.g., adhering to FIPS-140 or equivalent). These are libraries that have been examined, tested, and vetted for safety, security, and protection against side-channels by independent laboratories according to industry approved specifications. Building cryptographic libraries is a complex and difficult process that oftentimes results in libraries that have issues either with the generation or processing of cryptographic primitives or the processing of implemented algorithms over the input data.

Additionally, if any of the above issues do arise, using libraries that aren’t validated and aren’t maintained could lead to vulnerabilities persisting while fixes are developed. Therefore, using widely used, well maintained, and validated cryptographic libraries is a safer way to manage device cryptography. Vulnerabilities will be less likely to arise and, if/when they do, the wide level of use and maintenance will mean that patches should come quickly for it.

Limitations: By using a widely used library, a device’s cryptographic library is more likely to be targeted, which could lead to the device being vulnerable to exploitation.

Consideration: Devices that use cryptographic algorithms may introduce threats via the choice or implementation of the cryptographic algorithm or software. Device builders should take precautionary steps wherever possible to mitigate this threat. See MID-044 - Strong Cryptographic Algorithms and Protocols for more information about choosing a good algorithm.

IEC 62443 4-2 Mappings

  • CR 4.3 - Use of cryptography 

References

[1] NIST. “Cryptographic Module Validation Program.” nist.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://csrc.nist.gov/projects/cryptographic-module-validation-program

[2] J. Flores. “Microsoft SDL cryptographic recommendations.” microsoft.com. Accessed: Aug. 28, 2024. [Online.] Available: https://learn.microsoft.com/en-us/security/sdl/cryptographic-recommendations

[3] J. van Woudenberg. “Top 10 Secure Boot mistakes.” Presented at hardware.io Hardware Security Conference and Training, Santa Clara, CA, USA, 2019. [Online]. Available: https://hardwear.io/usa-2019/presentations/Top-10-Secure-Boot-Mistakes-v1.1-hardwear-io-usa-2019-jasper-van-woudenberg.pdf

diff --git a/mitigations/MID-028.html b/mitigations/MID-028.html new file mode 100644 index 0000000..f9fdfcf --- /dev/null +++ b/mitigations/MID-028.html @@ -0,0 +1 @@ + MID-028 | MITRE EMB3D™
Mitigation-page

MID-028: Hardware-backed Key Storage

Mitigation Tier: Intermediate

Description

Using hardware-backed keystores allows a device to benefit from hardware-based protections for preventing key extraction or manipulation, as opposed to relying on weaker software-only protections. Hardware-backed keystores leverage dedicated hardware and hardware abstraction layers to provide security features, such as storing a root-of-trust, keys, certificates or sensitive data. Hardware-backed keystores can take different forms and can be integrated with various functionalities, such as secure elements, TPMs, or cryptographic coprocessors to offer more secure key management. For example, Android has been using hardware-backed keystores for digital signing and verification operations, key generation, and the storage of asymmetric key signing pairs.

Consideration: MID-060 - Dedicated Cryptographic Processors will include key storage mechanisms and will enable secure operation using the keys. It is also a more comprehensive and complicated mitigation.

IEC 62443 4-2 Mappings

  • CR 1.9 – Strength of public key-based authentication - RE (1) Hardware security for public key-based authentication

  • CR 1.14 – Strength of symmetric key-based Authentication - RE (1) Hardware security for symmetric key-based authentication

  • CR 1.5 – Authenticator management - RE (1) Hardware security for authenticators

References

[1] Android. “Hardware-backed Keystore.” android.com. Accessed: Aug. 28, 2024. [Online.] Available: https://source.android.com/docs/security/features/keystore

[2] Rambus. “Hardware Root of Trust: Everything you need to know.” rambus.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.rambus.com/blogs/hardware-root-of-trust/

[3] V. Zimmer and M. Krau. “Establishing the Root of Trust.” uefi.org. Accessed: Aug. 28, 2024. [Online.] Available: https://uefi.org/sites/default/files/resources/UEFI%20RoT%20white%20paper_Final%208%208%2016%20(003).pdf

[4] Analog Devices. “Secure Element.” analog.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.analog.com/en/resources/glossary/secure-element.html

diff --git a/mitigations/MID-029.html b/mitigations/MID-029.html new file mode 100644 index 0000000..6d8d496 --- /dev/null +++ b/mitigations/MID-029.html @@ -0,0 +1 @@ + MID-029 | MITRE EMB3D™
Mitigation-page

MID-029: Hardware Root of Trust

Mitigation Tier: Intermediate

Description

A hardware root of trust (RoT) is a piece of hardware that typically stores the software code for critical boot functions that execute before any other functions on the device can operate. For example, 1st stage bootloader code stored in a hardware RoTs can be used to check firmware or later-stage bootloader authenticity and integrity before installing and running. This then allows the device to have a degree of certainty that the low-level code it is running is secure.

Usually, a hardware RoT consists of cryptographic keys and minimal boot code that uses the keys to ensure that the next piece of code is trusted to run. In the case of an immutable RoT, the cryptographic keys are immutable, for example written in OTP (One-Time Programmable) memory, and the boot code is immutable (BootROM).

Consideration: Making a RoT immutable can provide greater assurance by preventing the RoT from being tampered with by threat actors. If the RoT can never be changed, then threat actors cannot manipulate it to perform malicious actions. However, if a RoT is immutable and a vulnerability is found in the code stored within it, there are no ways to patch the device (see TID-220). Code on RoTs should therefore have minimal complexity and should be developed and deployed with the highest possible code quality standards.

IEC 62443 4-2 Mappings

  • EDR / HDR / NDR 3.12 - Provisioning product supplier roots of trust 

References

[1] ARM. “Booting a secure system.” arm.com. Accessed: Aug. 28, 2024. [Online.] Available: https://developer.arm.com/documentation/PRD29-GENC-009492/c/TrustZone-Software-Architecture/Booting-a-secure-system

[2] ST. “Getting started with STiRoT (ST immutable Root of Trust) for STM32H5 MCUs.” st.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.st.com/resource/en/application_note/an6007-getting-started-with-stirot-st-immutable-root-of-trust-for-stm32h5-mcus-stmicroelectronics.pdf

diff --git a/mitigations/MID-030.html b/mitigations/MID-030.html new file mode 100644 index 0000000..dfbf900 --- /dev/null +++ b/mitigations/MID-030.html @@ -0,0 +1 @@ + MID-030 | MITRE EMB3D™
Mitigation-page

MID-030: Firmware Rollback Protections

Mitigation Tier: Foundational

Description

To deploy firmware rollback protections, devices need to take steps to ensure that once new firmware has been deployed and is confirmed to be operational on the device, older firmware cannot be deployed again. There are many ways to handle increasing firmware version numbers, with two implementations being an automatic update on reset and an update on command.

“Automatic update on reset” [1] involves the Boot ROM updating the anti-rollback reference version when a newer version has been successfully loaded. To reach a success stage, the new image must pass all secure boot checks, such as the authenticity and integrity checks in MID-026 - Secure Firmware Update. This method gives no window of attack for threat actors trying to rollback firmware between updates and firmware success, however it also means that if there are errors in the firmware the user cannot revert to the last-known-good copy. Vendors themselves however can still rollback to a previous version by repackaging the firmware and distributing it with new version numbers [1].

“Update on command” [1] involves the anti-rollback reference version being updated in response to a secure message from an authorized management service. The previous version is therefore revoked only after the device management service signals that the newer version has no identified faults. This means that the device will be able to revert to an earlier version of the firmware before they receive the final message. While this gives users increased flexibility because they can choose to accept or reject firmware after trying it out, it also means that devices are left vulnerable during the window between firmware update and when the secure message is received. Additionally, this method may leave devices vulnerable to a denial-of-service attack that can be initiated by blocking the secure completion message. The device will therefore never accept the firmware and won’t begin operations [1].

Consideration: If an attacker can spoof the anti-rollback references to increment the versions, the device could be rendered inoperable. Vendors must ensure that only authorized software is able to update the anti-rollback references. See MID-026 - Secure Firmware Update for more information. Given the risks and challenges in creating a resilient rollback protection feature, device designers should carefully consider whether this mitigation is appropriate for their use case before pursuing it.

IEC 62443 4-2 Mappings

  • EDR / HDR / NDR 3.10 - Support for updates 

  • SAR / EDR / HDR / NDR 3.2 - Protection for malicious code 

References

[1] ARM. “Platform Security Model.” psacertificed.org. Accessed: Aug. 28, 2024. [Online.] Available: https://www.psacertified.org/app/uploads/2021/12/JSADEN014_PSA_Certified_SM_V1.1_BET0.pdf

diff --git a/mitigations/MID-031.html b/mitigations/MID-031.html new file mode 100644 index 0000000..055e141 --- /dev/null +++ b/mitigations/MID-031.html @@ -0,0 +1 @@ + MID-031 | MITRE EMB3D™
Mitigation-page

MID-031: Physical Presence Validation

Mitigation Tier: Foundational

Description

Requirements such as a key being inserted, a button being pressed, a switch being flipped, etc. can provide a device with guarantees around the physical presence of an operator. Devices can then choose to not perform a critical operation until that physical step is taken, with a lack of action (e.g. a device being left in “run mode” and not being put in “program mode”) preventing all critical actions. This can prevent threat actors from undertaking malicious actions because the device will reject any changes or actions while in an operating mode that does not accept changes.

Limitations: Devices that require physical presence may be difficult to manage in remote locations, can increase response or update rollout timelines, and provide limited benefits in locations that have poor physical security. For those reasons, it may not be suitable for all devices or environments.

IEC 62443 4-2 Mappings

  • CR 2.1 – Authorization enforcement

References

[1] A. Regensheid. “NIST 800-193 - Platform Firmware Resiliency Guidelines.” nist.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-193.pdf

diff --git a/mitigations/MID-032.html b/mitigations/MID-032.html new file mode 100644 index 0000000..de476f4 --- /dev/null +++ b/mitigations/MID-032.html @@ -0,0 +1 @@ + MID-032 | MITRE EMB3D™
Mitigation-page

MID-032: System Service Availability Manager

Mitigation Tier: Foundational

Description

Methods to monitor and restart services, such as software and hardware-based watchdogs, can add additional resilience and prevent devices from falling into complete deadlock states or failing. This is because these mechanisms will monitor and send restart service signals that will ensure that critical processes cannot die indefinitely. Additionally, if a device cannot safely have its services restarted, these monitors can be used to alert users about device-level activity.

IEC 62443 4-2 Mappings

  • CR 7.1 – Denial of service protection

CR 7.2 – Resource management

References

[1] K. Odom. “What Is a Watchdog Timer and Why Is It Important?” ti.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.ti.com/lit/ta/ssztah7/ssztah7.pdf

[2] DigiKey’s North American Editors. “Improving IoT System Robustness Using Watchdog Timers.” digikey.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.digikey.com/en/articles/improving-iot-system-robustness-using-watchdog-timers

[3] MITRE. “Watchdog Timers.” mitre.org. Accessed: Aug. 28, 2024. [Online.] Available: https://attack.mitre.org/mitigations/M0815/

diff --git a/mitigations/MID-033.html b/mitigations/MID-033.html new file mode 100644 index 0000000..df0f1ab --- /dev/null +++ b/mitigations/MID-033.html @@ -0,0 +1 @@ + MID-033 | MITRE EMB3D™
Mitigation-page

MID-033: Unique Factory Preinstalled Secret Keys

Mitigation Tier: Intermediate

Description

Using unique keys lowers the risk to devices because the compromise of one device will not reveal keys used on other devices. If keys are not unique, threat actors that can extract a key from one device may be able to leverage that key across multiple devices. Therefore, if unique keys per device are used, threat actors have less opportunities to exploit devices before patches are available when one device is compromised.

IEC 62443 4-2 Mappings

  • CR 1.2 – Software process and device identification and authentication - (1) Unique identification and authentication

References

[1] Apple. “Apple Platform Security.” apple.com. Accessed: Aug. 26, 2024. [Online]. Available: https://help.apple.com/pdf/security/en_US/apple-platform-security-guide.pdf

diff --git a/mitigations/MID-034.html b/mitigations/MID-034.html new file mode 100644 index 0000000..bfdab44 --- /dev/null +++ b/mitigations/MID-034.html @@ -0,0 +1 @@ + MID-034 | MITRE EMB3D™
Mitigation-page

MID-034: Authenticate Network Messages

Mitigation Tier: Foundational

Description

Authenticating network traffic makes it more difficult for threat actors to leverage unauthenticated network data sent by or to the device. A lack of message authentication can result in the device accepting and remaining unaware of messages spoofed or modified by an attacker with network access to the device. By authenticating network traffic, threat actors cannot send any data that will be accepted unless they also compromise the corresponding authentication credentials.

Network authentication can be implemented via several technical means, including message authentication codes (MACs), authenticated encryption (AE), and digital certificates/signatures that are used to protect all or part of the network packet or protocol message. These schemes allow the device receiving the network traffic to perform cryptographic checks of the data to ensure that it originated from a trusted source and has not been modified in-transit. Only then will it parse the message and process data within.

Note: Authentication should be paired with MID-035 - Encrypt Network Traffic to prevent eavesdropping.

Limitations: Malicious actors may be able to circumvent authentication protections through various means. When implementing session authentication, best practices should be followed to prevent authentication attacks (replay, spoofed users, default accounts, etc.)

IEC 62443 4-2 Mappings

  • CR 3.1 – Communication integrity (1) Communication authentication

References

[1] okta. “Authentication Protocols 101: Definition, Types, and When to Use.” okta.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.okta.com/identity-101/authentication-protocols/

[2] nile. “Secure Network Authentication Methods, Types, and Protocols.” nilesecure.com. Accessed: Aug. 28, 2024. [Online.] Available: https://nilesecure.com/network-security/secure-network-authentication-methods-types-and-protocols

[3] Cloudflare. “What is TLS (Transport Layer Security)?.” cloudflare.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.cloudflare.com/learning/ssl/transport-layer-security-tls/

diff --git a/mitigations/MID-035.html b/mitigations/MID-035.html new file mode 100644 index 0000000..d4a3266 --- /dev/null +++ b/mitigations/MID-035.html @@ -0,0 +1 @@ + MID-035 | MITRE EMB3D™
Mitigation-page

MID-035: Encrypt Network Traffic

Mitigation Tier: Foundational

Description

Encrypting network traffic typically involves taking network data and running it through an encryption algorithm such that the network data cannot be read in its encrypted form - this achieves data confidentiality. Therefore, encrypting network traffic allows devices to share critical or secret information without worrying about a third party reading the data.

Some encryption algorithms, such as AES-GCM, include authentication and integrity features to give the receiving devices some guarantees that their data has not been tampered with. See MID-034 - Authenticate Network Messages for more information.

Lastly, besides the implementation of the cryptographic library itself, other related architecture considerations must be made. These can include using a secure and validated algorithm (MID-044 - Strong Cryptographic Algorithms and Protocols), secure key storage, secure key sharing/agreement (e.g., DH), and secure key generation (MID-047 - Sufficient Entropy for Keys), to name a few.

IEC 62443 4-2 Mappings

  • CR 4.1 – Information confidentiality

References

[1] K. McKay and D. Cooper. “NIST 800-52r2 - Guidelines for the Selection, Configuration, and Use of Transport Layer Security (TLS) Implementations.” nist.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://doi.org/10.6028/NIST.SP.800-52r2

[2] E. Barker, A. Roginsky, and R. Davis. “NIST 800-133r2 - Recommendation for Cryptographic Key Generation.” nist.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-133r2.pdf

[3] Y. Sheffer, R. Holz, and P. Saint-Andre. “Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS).” ietf.org. Accessed: Aug. 28, 2024. [Online.] Available: https://datatracker.ietf.org/doc/html/rfc7525

[4] NIST. “Cryptographic Module Validation Program.” nist.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://csrc.nist.gov/projects/cryptographic-module-validation-program/validated-modules/search?SearchMode=Basic&CertificateStatus=Active&ValidationYear=0

[5] M. Turnan, E. Barker, J. Kelsey, K. McKay, M. Baish, and M. Boyle. “NIST 800-90B - Recommendation for the Entropy Sources Used for Random Bit Generation.” nist.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-90B.pdf

diff --git a/mitigations/MID-036.html b/mitigations/MID-036.html new file mode 100644 index 0000000..74b39af --- /dev/null +++ b/mitigations/MID-036.html @@ -0,0 +1 @@ + MID-036 | MITRE EMB3D™
Mitigation-page

MID-036: Cryptographic Nonces

Mitigation Tier: Foundational

Description

A nonce is a piece of data, typically a number, that is created uniquely per message to ensure that messages cannot be replayed. When a device receives a message, it checks the nonce to make sure that the nonce is still valid, and if it is, it will accept the message. If the nonce is no longer valid, the device will know that the same message was sent to them multiple times, potentially indicating a replay attack, and will reject the message.

The first nonce in a communication is oftentimes sent in the first message by the device that is initiating the communication. The nonce will then undergo some operation that both the sender and receiver know. Subsequently, in every message the device will receive a transmission with a nonce, perform the operation, and send the new nonce in the next message. This results in a situation where every message has a unique nonce and the sender and receiver can know what the next nonce will be in advance, but the adversary cannot derive it as they do not know the operation or initial nonce.

Nonces can sometimes be implemented alongside MID-037 - Network Timestamps to give devices time windows and unique message identifiers to work with. If the device is not using a timestamp, it will have to ensure that the nonce is it using is sufficiently large or random so that it cannot be guessed. If it can be guessed, it may be possible for threat actors to send malicious messages with valid nonces. For example, if a device uses a counter as the initial nonce and adding one as its operation, it may be possible for a threat actor to guess the next number in sequence. A random-number generator with a hashing function on the other hand would produce results that are much harder to guess.

IEC 62443 4-2 Mappings

  • CR 4.3 - Use of cryptography 

  • CR 3.1 – Communication integrity (1) Communication authentication

References

[1] E. Barker. “NIST 800-89 - Recommendation for Obtaining Assurances for Digital Signature Applications.” nist.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-89.pdf

[2] okta. “What is a Cryptographic Nonce? Definition and Meaning.” okta.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.okta.com/identity-101/nonce/

diff --git a/mitigations/MID-037.html b/mitigations/MID-037.html new file mode 100644 index 0000000..1bc0ed4 --- /dev/null +++ b/mitigations/MID-037.html @@ -0,0 +1 @@ + MID-037 | MITRE EMB3D™
Mitigation-page

MID-037: Network Timestamps

Mitigation Tier: Foundational

Description

Network timestamps have multiple use-cases in a device. They can be used to reject messages that are too old, be used as unique seeds for certain functions, aid with logging, and be used to synchronize network data interactions across multiple devices. Timestamps can also be used to prevent replay attacks, either as an additional piece of information alongside a nonce (MID-036 - Cryptographic Nonces) or to reject data that is too old, which may be another indicator of a replayed message.

Limitations: Timestamp-based packet rejection may present operational issues if network guarantees aren’t met or if adversaries derive a means to slow down packet delivery. In both of these cases, valid packets may be delivered late, and the device may reject them.

IEC 62443 4-2 Mappings

  • CR 3.1 – Communication integrity (1) Communication authentication

References

[1] E. Barker. “NIST 800-89 - Recommendation for Obtaining Assurances for Digital Signature Applications.” nist.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-89.pdf

[2] E. Barker. “NIST 800-102 - Recommendation for Digital Signature Timeliness.” nist.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-102.pdf]

[3] F. Farha, H. Ning, S. Yang, J. Xu, W. Zhang and K. -K. R. Choo, “Timestamp Scheme to Mitigate Replay Attacks in Secure ZigBee Networks,” in IEEE Transactions on Mobile Computing, vol. 21, no. 1, pp. 342-351, 1 Jan. 2022, doi: 10.1109/TMC.2020.3006905.

diff --git a/mitigations/MID-038.html b/mitigations/MID-038.html new file mode 100644 index 0000000..60428f6 --- /dev/null +++ b/mitigations/MID-038.html @@ -0,0 +1 @@ + MID-038 | MITRE EMB3D™
Mitigation-page

MID-038: Authenticate for Administrative Actions

Mitigation Tier: Foundational

Description

Administrative actions on a device usually involve a subset of device actions that, if undertaken, could have an impact on the integrity of the device or its operations. These may include accessing certain I/O interfaces, changing the roles of another user, changing user permissions or credentials, using debugging modes, or altering device operating states, to name a few. Because these actions could have a large impact on device operations, users should have to authenticate to perform administrative actions and should only be allowed to take actions that they are permitted to after authentication.

Limitations: If the threat actor can gain access to valid credentials, they will be able to subvert these protections. Adding in mitigations like MID-031 - Physical Presence Validation will increase its efficacy because threat actors won’t be able to perform administrative actions without first authenticating and demonstrating physical access to the device. Physical security measures, such as locks and gates, can then be used as a line for cyber defense.

IEC 62443 4-2 Mappings

  • CR 1.1 - Human user interaction and authentication 

  • CR 2.1 - Authorization Enforcement 

References

diff --git a/mitigations/MID-039.html b/mitigations/MID-039.html new file mode 100644 index 0000000..3375c34 --- /dev/null +++ b/mitigations/MID-039.html @@ -0,0 +1 @@ + MID-039 | MITRE EMB3D™
Mitigation-page

MID-039: Restrict Software Diagnostic Functions

Mitigation Tier: Foundational

Description

Diagnostic software functions or modes oftentimes give users who control them access to low-level device information. This control could involve read/write permissions of raw memory, process control, process monitoring, and power information, for example. To prevent a threat actor from having this level of access, device designers could either remove the functionality or, if it is needed, heavily restrict its usage.

If a device doesn’t need diagnostic functionality, it is more secure for that device to not have any present. Diagnostic functions provide a large threat vector for threat actors because of their inherently privileged nature. By removing the functionality, threat actors have no already-installed tool on the device that gives them such low level access.

If a device must have diagnostic functionality, those functions should be heavily restricted. One way this can be done is by restricting the diagnostic functions to certain processes. This could limit the potential impact of a threat actor because they would be scoped to a narrow part of the device. Another way to implement this is by using a processor that has features to prevent unintended tampering (open states, restricted state, and closed state). This would provide a hardware-enforced means to limit the ability of a remote threat actor from accessing the diagnostic functions.

Limitations: If threat actors are able to take control over the protection mechanisms that grant or revoke diagnostic functionality access, they may be able to escalate their privileges and take control over a device.

IEC 62443 4-2 Mappings

  • CR 1.1 - Human user interaction and authentication 

  • CR 2.1 - Authorization Enforcement 

  • CR 6.1 – Audit log accessibility

  • CR 3.7 – Error handling

  • CR 3.9 – Protection of audit information

References

diff --git a/mitigations/MID-040.html b/mitigations/MID-040.html new file mode 100644 index 0000000..d861119 --- /dev/null +++ b/mitigations/MID-040.html @@ -0,0 +1 @@ + MID-040 | MITRE EMB3D™
Mitigation-page

MID-040: Cryptographically Signed Custom Programs

Mitigation Tier: Intermediate

Description

For programmable devices like PLCs, signing programs gives the device the ability to ensure that the programs that they are installing and running originate from a verified source. If the programs are not signed, it may be possible for a threat actor to install malicious programs that alter device behavior.

Devices can enable these capabilities by allowing the device to accept, store, and use verifying keys to verify that a program is signed. If the program is not signed, the device should automatically reject the new program and send out an alert.

Users should be able to generate signing and verifying keys (public and private asymmetric keys) and send the verifying key to downstream devices that will be receiving programs. Programs can then be signed, either by Integrated Development Environments (IDEs) or another signing mechanism and distributed to the device for verification and deployment.

Note: This mitigation is heavily dependent on the security of the source of the programs/application. Many devices, such as PLCs, require the deployment of custom programs that are developed individually at each organization.

Limitation: This would require a dedicated signing key to be deployed within the IDE and a verifying key within the end device. Ideally this would be a unique signing key for every organization, however, this would require each organization to perform the key initialization and exchange with each new IDE or device. This scheme gets more complex as typically there are many IDEs within an organization that may need to deploy programs to a device, further organizations need to perform key escrow to store keys, otherwise if the IDEs and associated keys are lost, they will be unable to deploy programs to the device. If organizational keys are not used, and the same signing key is used across an entire product line, a threat actor may be able to extract this key from the IDE (such as through reverse engineering) and then use it to sign an unauthorized program.

IEC 62443 4-2 Mappings

  • SAR / EDR / HDR / NDR 3.2 – Protection from malicious code

  • CR 3.4 – Software and information integrity

References

[1] Codesys. “Protecting an Application.” codesys.com. Accessed: Aug. 28, 2024. [Online.] Available: https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_encrypting_application.html

diff --git a/mitigations/MID-041.html b/mitigations/MID-041.html new file mode 100644 index 0000000..cc48041 --- /dev/null +++ b/mitigations/MID-041.html @@ -0,0 +1 @@ + MID-041 | MITRE EMB3D™
Mitigation-page

MID-041: Cryptographically Signed Vendor-supplied Programs

Mitigation Tier: Foundational

Description

Vendor programs, libraries, and other software components are guaranteed to come from a single source, the vendor. Therefore, vendors can use a digital signing scheme where their programs are signed using the vendor’s private key and can be verified using the device’s public key. This signing scheme would ensure that only vendor-supplied programs would be accepted, downloaded, and executed.

IEC 62443 4-2 Mappings

  • CR 3.4 – Software and information integrity

References

diff --git a/mitigations/MID-042.html b/mitigations/MID-042.html new file mode 100644 index 0000000..7686656 --- /dev/null +++ b/mitigations/MID-042.html @@ -0,0 +1 @@ + MID-042 | MITRE EMB3D™
Mitigation-page

MID-042: Device Checks Consistency Between Binary/Running Code and Textual Code

Mitigation Tier: Foundational

Description

Devices, such as Programmable Logic Controllers (PLCs), oftentimes will have two copies of a program stored in their memory. One copy is the compiled binary that is executing run on the device - this program is machine readable but would be difficult for a human to easily read. The other copy is a textual code representation of the program. This form is in a human-readable format and is typically the form of the code that the programmer worked on before the program download. It is this latter copy that is returned to the programmer when using “upload from device” functions in the IDE. The binary and textual representations should be cryptographically bound so that the IDE can test whether the textual representation matches the executable representation.

One way to ensure consistency would be to perform upload both the running binaries and text code during a program upload. The IDE would then be able to recompile the text code and perform hashes over it and the binary code to check for consistency. Another way to do this would be to compile the text code on the device itself and then hash both it and the running binaries and then compare them.

IEC 62443 4-2 Mappings

  • CR 3.4 – Software and information integrity 

References

[1] S. Brizinov. “The Old Switcheroo: Hiding Code on Rockwell Automation PLCs.” claroty.com. Accessed: Aug. 28, 2024. [Online.] Available: https://claroty.com/team82/research/hiding-code-on-rockwell-automation-plcs

diff --git a/mitigations/MID-043.html b/mitigations/MID-043.html new file mode 100644 index 0000000..4ef7d55 --- /dev/null +++ b/mitigations/MID-043.html @@ -0,0 +1 @@ + MID-043 | MITRE EMB3D™
Mitigation-page

MID-043: Manage Default Login Credentials

Mitigation Tier: Foundational

Description

If it is necessary for a device to ship with default passwords for user accounts, these passwords should be unique, random, and not based on any inherent device properties (such as serial number or MAC address). Additionally, these default passwords should be at least 8 characters long and contain a mix of uppercase and lowercase letters and numbers. Users can access these default passwords through physical access to the device or the device’s documentation delivered with the hardware.

Users can be prompted upon the first-time use of the device to change the default passwords and should be able to change them at any time after.

In some cases, it may be better to ship a device without default credentials. In this scenario, users can be prompted upon first use of the device to set credentials.

IEC 62443 4-2 Mappings

  • CR 1.1 – Human user identification and authentication - RE (1) Unique identification and authentication

  • CR 1.5 - Authenticator management 

References

[1] CISA. “Shifting the Balance of Cybersecurity Risk: Principles and Approaches for Secure by Design Software.” cisa.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://www.cisa.gov/sites/default/files/2023-10/SecureByDesign_1025_508c.pdf

[2] P. Grassi, J. Fenton, E. Newton, R. Perlner, A. Regensheid, W. Burr, J. Richer, N. Lefkovitz, J. Danker, Y. Choong, K. Greene, and M. Theofanos. “NIST 800-63B - Digital Identity Guidelines - Authentication and Lifecycle Management.” nist.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-63b.pdf

diff --git a/mitigations/MID-044.html b/mitigations/MID-044.html new file mode 100644 index 0000000..7ea7239 --- /dev/null +++ b/mitigations/MID-044.html @@ -0,0 +1 @@ + MID-044 | MITRE EMB3D™
Mitigation-page

MID-044: Strong Cryptographic Algorithms and Protocols

Mitigation Tier: Foundational

Description

Device implementors should use cryptographic libraries that have been validated and rigorously tested against different cryptographic attacks. “Rolling your own crypto”, meaning creating and using homemade cryptographic algorithms, has been shown to be riskier than using heavily tested and validated libraries due to the tendency of individuals or small teams not being able to match the validation process and cryptographic rigor supplied by dedicated teams of experts.

Choosing a strong cryptographic algorithm or primitive is not always sufficient, there are often many pitfalls in using it safely and correctly. Network communications, user authentication handshakes, data protection, and other protocols are implemented using cryptographic algorithms and operations to protect information and achieve other desired security guarantees. Devices should implement protocols that are widely used, well tested, verified for security assurances, and utilize strong cryptographic algorithms. Examples of these are WPA3 and TLS.

Note: Chosen protocols should incorporate anti-metadata analysis features such as packet length standardization, packet frequency standardization, header length standardization, etc. Overall, packet metadata shouldn’t be able to be used to derive the contents of encrypted messages. This is only needed where confidentiality exists and is important to device security [3] [4] [5].

Note: Many leading cryptographic algorithms are publicly available for use and inspection, meaning that device implementors can verify for themselves that the algorithms are safe to use and compatible with their devices.

Note: Choosing a high-quality implementation of the desired cryptographic tools is very important to ensure that they will operate as intended and that cryptographic security guarantees cannot be undermined by implementation flaws. See MID-027 - Validated Cryptographic Library for more information. In addition to library choice, other related architecture considerations must be made. These can include secure key storage (MID-028 - Hardware-backed Key Storage) and secure key generation (MID-047 - Sufficient Entropy for Keys), to name a few.

Note: Encryption may introduce operational difficulties and constraints. Review all processes and functional requirements when encrypting traffic in transit.

IEC 62443 4-2 Mappings

  • CR 4.3 - Use of cryptography 

  • CR 1.14 - Strength of symmetric key-based authentication 

  • CR 1.9 - Strength of public key-based authentication 

References

[1] S. Morrow. “The Dangers of “Rolling Your Own” Encryption.” infosecinstitute.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.infosecinstitute.com/resources/cryptography/the-dangers-of-rolling-your-own-encryption/

[2] NIST. “Cryptographic Module Validation Program.” nist.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://csrc.nist.gov/projects/cryptographic-module-validation-program/validated-modules/search?SearchMode=Basic&CertificateStatus=Active&ValidationYear=0

[3] C. Tezcan. “On Hiding Message Length in Symmetric-key Cryptography.” forgottenlance.com. Accessed: Aug. 28, 2024. [Online.] Available: https://cihangir.forgottenlance.com/papers/length_hiding_lasec.pdf

[4] Alyami M, Alghamdi A, Alkhowaiter MA, Zou C, Solihin Y. Random Segmentation: New Traffic Obfuscation against Packet-Size-Based Side-Channel Attacks. Electronics. 2023; 12(18):3816. https://doi.org/10.3390/electronics12183816

[5] S. Xiong, A. D. Sarwate and N. B. Mandayam, “Defending Against Packet-Size Side-Channel Attacks in Iot Networks,” 2018 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), Calgary, AB, Canada, 2018, pp. 2027-2031, doi: 10.1109/ICASSP.2018.8461330.

[6] J. van Woudenberg. “Top 10 Secure Boot mistakes.” Presented at hardware.io Hardware Security Conference and Training, Santa Clara, CA, USA, 2019. [Online]. Available: https://hardwear.io/usa-2019/presentations/Top-10-Secure-Boot-Mistakes-v1.1-hardwear-io-usa-2019-jasper-van-woudenberg.pdf

diff --git a/mitigations/MID-045.html b/mitigations/MID-045.html new file mode 100644 index 0000000..2d19694 --- /dev/null +++ b/mitigations/MID-045.html @@ -0,0 +1 @@ + MID-045 | MITRE EMB3D™
Mitigation-page

MID-045: Multi-factor Authentication

Mitigation Tier: Intermediate

Description

Multi-factor authentication “requires users to present two or more authentication factors at login to verify their identity before they are granted access.” [1] These typically include some combination of 1) something you know, like a password; 2) something you have, like a hardware or mobile token; or 3) something you are, such as fingerprints or other biometric data [1, 2]. Devices will not authenticate a user unless all required forms of authentication are presented.

Threat actors therefore will not be able to authenticate to a device with simple username/password combinations that can be intercepted, phished, guessed by brute-force, or otherwise acquired.

IEC 62443 4-2 Mappings

  • CR 1.1 - Human user interaction and authentication - RE (2) Multifactor authentication for all interfaces

References

[1] CISA. “Multi-factor Authentication.” cisa.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://www.cisa.gov/sites/default/files/publications/MFA-Fact-Sheet-Jan22-508.pdf

[2] P. Grassi, J. Fenton, E. Newton, R. Perlner, A. Regensheid, W. Burr, J. Richer, N. Lefkovitz, J. Danker, Y. Choong, K. Greene, and M. Theofanos. “NIST 800-63B - Digital Identity Guidelines - Authentication and Lifecycle Management.” nist.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-63b.pdf

[3] H. Guevera. “Multi-factor Authentication Guide.” Auth0 by Okta Blog. Accessed: Aug. 28, 2024. [Online]. Available: https://auth0.com/blog/multifactor-authentication-mfa/

diff --git a/mitigations/MID-046.html b/mitigations/MID-046.html new file mode 100644 index 0000000..808c7fe --- /dev/null +++ b/mitigations/MID-046.html @@ -0,0 +1 @@ + MID-046 | MITRE EMB3D™
Mitigation-page

MID-046: Authentication Attempts Timeouts and Lockouts

Mitigation Tier: Foundational

Description

Implementing a lockout or delay after a certain number of incorrect guesses increases the time it would take threat actors successfully guess a password.

Progressively increasing lockouts are a common implementation pattern. For example, a device may institute a 1-minute lockout after 5 wrong guesses, 3-minute lockout after 10 wrong guesses, 30-minute lockout after 20 wrong guesses, and so on. The threat actor therefore has to wait 34 minutes just to guess 20 passwords, while legitimate users that mistype their password once or twice are minimally impacted.

Depending on the environment, lockouts can also be used. A lockout would instead lock the device so that no more authentication attempts can be made after a certain amount of password attempts were performed. Lockouts present risks to the device because devices will be unusable until the lockout is lifted, meaning that a denial-of-service-type effect is possible. This lockout can be lifted either through some authenticated administrative process and/or by requiring physical presence on the device (see MID-031 - Physical Presence Validation for more information).

IEC 62443 4-2 Mappings

  • CR 1.11 - Unsuccessful login attempts 

  • CR 2.5 - Session lock 

References

diff --git a/mitigations/MID-047.html b/mitigations/MID-047.html new file mode 100644 index 0000000..677fc58 --- /dev/null +++ b/mitigations/MID-047.html @@ -0,0 +1 @@ + MID-047 | MITRE EMB3D™
Mitigation-page

MID-047: Sufficient Entropy for Keys

Mitigation Tier: Foundational

Description

To create sufficiently random keys, devices need a source of data with a high degree of entropy to ensure that the keys are not predictable. If a device does not have a source of sufficient entropy and tries to create a key, it may be possible that the inputs that seeded the key or pseudo-random number generator (PRNG) can be guessed and therefore threat actors may be able to recreate the key or predict the PRNG output. By using a high degree of entropy, keys and seeds are fully random and cannot be recreated by threat actors, thereby making them cryptographically stronger.

Devices typically feed their entropy pools by collecting the unpredictable least significant bits from device events like the absolute and relative timing between things like hardware interrupts, user input, and other similarly unpredictable events. Complex devices like desktop and server PCs can rely on plentiful sources of such events. Embedded devices often do not have as rich a set of hardware, may have no direct interactive user input, fewer processes and applications executing, and are generally more regular and constrained in their actions. This can result in embedded systems having a shallower pool of entropy to draw upon when the need to generate cryptographic keys arises.

Operations that consume data from an entropy pool to generate keys of seed PRNGs must wait until a sufficient quantity is available. To avoid (potentially long) pauses in operation, especially at boot up, some devices have been known to use non-blocking sources, and as a result the keys they generated were predictable and vulnerable to attack. To remain secure, devices should use a blocking entropy pool that waits until there is sufficient entropy to fulfill the request for random numbers. If the device doesn’t have a way to generate enough entropy on first boot, devices may require mechanisms to obtain additional sufficient entropy (e.g. ask for random user inputs). If that is not practical, the design may need to be modified to include a cryptographic quality hardware-based random number generator (see MID-048 - Hardware Random Number Generator and MID-060 - Dedicated Hardware Cryptographic Modules).

Note: Using sufficiently random keys is an important part of maintaining the security guarantees that a good cryptographic algorithm will provide. See MID-044 - Strong Cryptographic Algorithms and Protocols for more information about cryptographic algorithms.

IEC 62443 4-2 Mappings

  • CR 4.3 - Use of cryptography 

References

[1] E. Barker, A. Roginsky, R. Davis, “Recommendation for Cryptographic Key Generation”, NIST, Special Publication 800-133 Revision 2, 2020. doi: 10.6028/NIST.SP.800-133r2

[2] M. T. Turam, E. Barker, J. Kelsey, K. A. McKay, M. L. Baish, M. Boyle, “Recommendation for the Entropy Sources Used for Random Bit Generation”, NIST, Special Publication 800-90B, 2018. doi: 10.6028/NIST.SP.800-90B

[3] “Cryptographic Module Validation Program.” NIST Computer Security Resource Center. Accessed: Aug. 28, 2024. [Online]. Available: https://csrc.nist.gov/projects/cryptographic-module-validation-program

[4] Nadia Heninger, Zakir Durumeric, Eric Wustrow, and J. Alex Halderman. 2012. Mining your Ps and Qs: detection of widespread weak keys in network devices. In Proceedings of the 21st USENIX conference on Security symposium (Security’12). USENIX Association, USA, 35. Available: https://www.usenix.org/conference/usenixsecurity12/technical-sessions/presentation/heninger

diff --git a/mitigations/MID-048.html b/mitigations/MID-048.html new file mode 100644 index 0000000..1781991 --- /dev/null +++ b/mitigations/MID-048.html @@ -0,0 +1 @@ + MID-048 | MITRE EMB3D™
Mitigation-page

MID-048: Hardware Random Number Generator

Mitigation Tier: Intermediate

Description

Hardware random number generators, sometimes called true random number generators, are pieces of hardware that use environmental noise, such as electromagnetic or thermal data, to create random numbers. Since these devices use local data that is constantly varying to create their random numbers, it is very difficult to recreate the environment in which the number was generated. Therefore, hardware random number generators can be used to create keys that have a high degree of entropy for their seeds and themselves have a high degree of randomness.

Note: Implementors should be sure to verify that the hardware RNG they are considering produces a random stream of sufficient cryptographic quality for use in key generation and not simply a hardware implementation of a lower quality pseudo-random number generator (PRNG) algorithm.

IEC 62443 4-2 Mappings

  • CR 4.3 - Use of cryptography 

References

[1] C. Hoffman. “How Computers Generate Random Numbers.” howtogeek.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.howtogeek.com/183051/htg-explains-how-computers-generate-random-numbers/

[2] C. Shaw. “Hardware Random Number Generators.” Cerberus Security Labs. Accessed: Aug. 28, 2024. [Online]. Available: https://cerberus-laboratories.com/blog/random_number_generators/

diff --git a/mitigations/MID-049.html b/mitigations/MID-049.html new file mode 100644 index 0000000..2eabbbf --- /dev/null +++ b/mitigations/MID-049.html @@ -0,0 +1 @@ + MID-049 | MITRE EMB3D™
Mitigation-page

MID-049: Secure Password Storage

Mitigation Tier: Foundational

Description

Passwords should be stored only in a non-reversible salted and hashed format that is calculated by a cryptographically strong hashing algorithm. Hashing algorithms are one-way algorithms that can turn data into a unique fixed-length string representation of that data. Since this algorithm is one-way, data that is hashed cannot be turned back into its cleartext form, meaning that threat actors who come across hashed passwords have to try to hash every password combination until they have a match.

Threat actors have been known to use pre-calculated lookup tables of hashed potential password values to accelerate the password guessing process. Salting can prevent this from happening by increasing the required size of the lookup tables to make this approach to guessing impractical. Salts are pieces of random data that are appended to the password before hashing and then are stored with the hashed password. What this does is make the password hash unique because the password is actually the password + the hashed data. Therefore, this password cannot be found in a hash lookup table, but the salted hash can still be calculated by the device within an acceptably short time bound.

IEC 62443 4-2 Mappings

  • CR 1.5 - Authenticator management 

References

diff --git a/mitigations/MID-050.html b/mitigations/MID-050.html new file mode 100644 index 0000000..4f17a4f --- /dev/null +++ b/mitigations/MID-050.html @@ -0,0 +1 @@ + MID-050 | MITRE EMB3D™
Mitigation-page

MID-050: Operating System Defenses Against Microarchitecture Feature Side Channels

Mitigation Tier: Foundational

Description

A device’s system software (operating system, hypervisor, etc.) can take precautions to defend against data leakage due to memory timing and speculative execution side channels like Spectre and Meltdown, and other more recently discovered issues with other processor microarchitecture features.

For example, context switches can be hardened to better isolate memory between lower and higher privileged contexts, strengthening page table separation, and invalidating caches. Additionally, compiler-based mitigations like the “retpoline” technique are effective against the branch target injection vulnerability in Spectre.

Note: Where applicable, the system firmware and OS should ensure any relevant CPU microcode updates are applied that include patches for such vulnerabilities.

Limitation: These software-based defenses have unavoidable performance impacts that can be significant depending on the workload involved.

IEC 62443 4-2 Mappings

  • none

References

[1] C. Stevens, N. Poggi, T. Desrosiers, R. Xin. “Meltdown and Spectre: Exploits and Mitigation Strategies.” Databricks. Accessed: Aug. 27, 2024. [Online.] Available: https://www.databricks.com/blog/2018/01/16/meltdown-and-spectre-exploits-and-mitigation-strategies.html

diff --git a/mitigations/MID-051.html b/mitigations/MID-051.html new file mode 100644 index 0000000..de8f1da --- /dev/null +++ b/mitigations/MID-051.html @@ -0,0 +1 @@ + MID-051 | MITRE EMB3D™
Mitigation-page

MID-051: Disallow User-Provided Code

Mitigation Tier: Foundational

Description

Several threats are made easier to exploit when a device allows the execution of adversary-provided code, such as a user provided program in a PLC or JavaScript code in an embedded web browser. If this functionality is not strictly necessary to the device’s feature set, devices could simply not include the functionality on the device and these threats can be avoided.

Note: The inherent loss of this device functionality from this approach is not always practical (e.g., when the device is intended to be programmable). See MID-014 – Sandboxing and MID-040 - Cryptographically Signed Custom Programs for alternative approaches to safely handle user-provided code when it cannot be avoided.

IEC 62443 4-2 Mappings

  • SAR / EDR / HDR / NDR 3.2 - Protection for malicious code 

  • CR 3.4 – Software and information integrity

References

diff --git a/mitigations/MID-052.html b/mitigations/MID-052.html new file mode 100644 index 0000000..9dadc86 --- /dev/null +++ b/mitigations/MID-052.html @@ -0,0 +1 @@ + MID-052 | MITRE EMB3D™
Mitigation-page

MID-052: Physically Protect Circuit Board Traces and Chip Pins

Mitigation Tier: Foundational

Description

Data bus interception, chip readout, and other physical circuit board manipulation can be made more difficult through mechanical and design changes, such as moving bus traces to internal board layers, eliminating test headers, removing the silkscreen layer, choosing chip packages without exposed pins (e.g., BGA), placing epoxy over chips and traces, etc.

All of these mitigations hide board pins and traces, thereby making it more difficult for the threat actor to read data going to/from the chip without removing the chips themselves and altering the board, potentially damaging it beyond repair. Therefore, these mitigations increase the cost and difficulty for threat actors attempting to access information from the physical device.

Limitations: This mitigation increases the level of effort required to successfully exploit this threat but is not a full solution. Skilled and well-resourced adversaries may be slowed but not deterred. This approach may be useful when stronger mitigations such as bus encryption are not feasible. Additionally, these techniques can make the system more difficult to debug during development and during failure analysis of defective units.

IEC 62443 4-2 Mappings

  • EDR / HDR / NDR 3.11 - Physical tamper resistance and detection 

References

[1] Royal Circuit Solutions. “Hack-Attack — PCB Design Ideas to Foil Potential Hackers.” royalcircuits.com. Accessed: Aug. 28, 2024. [Online]. Available: https://www.royalcircuits.com/2019/11/22/hack-attack-pcb-design-ideas-to-foil-potential-hackers/

diff --git a/mitigations/MID-053.html b/mitigations/MID-053.html new file mode 100644 index 0000000..49fafc1 --- /dev/null +++ b/mitigations/MID-053.html @@ -0,0 +1 @@ + MID-053 | MITRE EMB3D™
Mitigation-page

MID-053: Use IOMMU to Implement DMA Access Controls

Mitigation Tier: Intermediate

Description

Many modern processors that support Direct Memory Access (DMA) also contain an Input/Output Memory Management Unit (IOMMU) that can be configured to enforce an access control policy that prevents peripherals (e.g., PCIExpress devices) from reading or writing portions of system RAM they are not authorized to. This creates a barrier for threat actors attempting to maliciously access memory directly from a compromised or untrustworthy peripheral.

IEC 62443 4-2 Mappings

  • SAR / EDR / HDR / NDR 3.2 - Protection for malicious code 

  • CR 2.1 – Authorization enforcement

References

[1] A. T. Markettos, C. Rothwell, B. F. Gutstein, A. Pearce, P. G. Neumann, S. W. Moore, R. N. M. Watson, “Thunderclap: Exploring Vulnerabilities in Operating System IOMMU Protection via DMA from Untrustworthy Peripherals,” in Network and Distributed Systems Security (NDSS) Symposium 2019, San Diego, CA, 2019, doi: 10.14722/ndss.2019.23194.

[2] Apple. “Direct memory access protections for Mac computers.” apple.com. Accessed: Aug. 28, 2024. [Online]. Available: https://support.apple.com/guide/security/direct-memory-access-protections-seca4960c2b5/

diff --git a/mitigations/MID-054.html b/mitigations/MID-054.html new file mode 100644 index 0000000..80b007e --- /dev/null +++ b/mitigations/MID-054.html @@ -0,0 +1 @@ + MID-054 | MITRE EMB3D™
Mitigation-page

MID-054: Encrypt and Authenticate Non-volatile Storage Contents

Mitigation Tier: Foundational

Description

Data that is stored in non-volatile storage external to the processor should be cryptographically protected, and only decrypted and authenticated within the processor at time of use. This removes opportunities for threat actors to access or modify unencrypted firmware code, configurations, or other sensitive data.

Limitations: Extensive use of encryption can impact performance as data must be decrypted every time it is loaded for use. This may limit what portions of data are practical to encrypt or require migrating a design to use processors with hardware acceleration for decryption. Additionally, private and secret keys must be sufficiently protected, ideally in a hardware-backed keystore (see MID-028), or at least in on-chip memory (see MID-064) and should not be shared between devices (see MID-033).

IEC 62443 4-2 Mappings

  • CR 4.1 – Information confidentiality

  • CR 4.2 - Information persistence 

References

[1] S. Garg. “Protecting Security Critical Firmware.” linaro.org. Accessed: Aug. 27, 2024. [Online]. Available: https://old.linaro.org/blog/protecting-security-critical-firmware/

[2] D. Kleidermacher, “Enhance system security with better data-at-rest encryption.” embedded.com. Accessed: Aug. 27, 2024. [Online]. Available: https://www.embedded.com/enhance-system-security-with-better-data-at-rest-encryption/

diff --git a/mitigations/MID-055.html b/mitigations/MID-055.html new file mode 100644 index 0000000..c27a9a8 --- /dev/null +++ b/mitigations/MID-055.html @@ -0,0 +1 @@ + MID-055 | MITRE EMB3D™
Mitigation-page

MID-055: Use Highly Integrated Processors to Avoid Physical Attacks

Mitigation Tier: Intermediate

Description

Highly integrated processors, particularly system-on-chip and system-in-package, combine some or all of processing, RAM (e.g., SRAM, DRAM), non-volatile storage, and peripherals within a single physical package. Integration of these components avoids the need to connect separate single-purpose components across a circuit board via physically accessible busses and traces. This removes many of the opportunities for a threat actor to perform bus interception, chip contents extraction, and other physical attacks.

Note: Certain chips, particularly microcontrollers, utilize SRAM-based memory instead of DRAM. SRAM’s lack of capacitance makes it resistant to the original cold boot attacks, however newer research has demonstrated analogous techniques for extracting the contents of SRAM-based memories, caches, and registers [1].

IEC 62443 4-2 Mappings

  • EDR / HDR / NDR 3.11 (1) - Physical tamper resistance and detection  

References

[1] Jubayer Mahmod and Matthew Hicks. 2022. SRAM has no chill: exploiting power domain separation to steal on-chip secrets. In Proceedings of the 27th ACM International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS ‘22). Association for Computing Machinery, New York, NY, USA, 1043–1055. https://doi.org/10.1145/3503222.3507710

diff --git a/mitigations/MID-056.html b/mitigations/MID-056.html new file mode 100644 index 0000000..0c70f54 --- /dev/null +++ b/mitigations/MID-056.html @@ -0,0 +1 @@ + MID-056 | MITRE EMB3D™
Mitigation-page

MID-056: Allow Device Administrators to Disable Removable Storage Support

Mitigation Tier: Foundational

Description

If a device supports removable external storage media (e.g., USB sticks), implement device configuration options that give administrators the option to disable this support (temporarily or permanently) and reenable it only if and when needed. Disablement should account for both the OS level (e.g., mounting a filesystem) and firmware level (e.g., booting from external storage) interaction with a storage device.

IEC 62443 4-2 Mappings

  • CR 7.7 – Least functionality

References

diff --git a/mitigations/MID-057.html b/mitigations/MID-057.html new file mode 100644 index 0000000..b83c5a2 --- /dev/null +++ b/mitigations/MID-057.html @@ -0,0 +1 @@ + MID-057 | MITRE EMB3D™
Mitigation-page

MID-057: Disable Physical Development and Debugging Ports

Mitigation Tier: Foundational

Description

Physical ports used during the device development and debugging process should be disabled or removed in devices meant for production use. This includes dedicated memory debug interfaces (e.g., JTAG), UART serial ports that expose sensitive data or command shells, or any similar port. These ports should be disabled in hardware (preferably) by engaging security fuses or at least in software. Simply depopulating physical headers on device circuit boards is not sufficient. Ideally, such ports should be disabled permanently, but if some degree of diagnostic capability is desired for production devices, reenabling one of these ports should be an authenticated administrative action.

IEC 62443 4-2 Mappings

  • EDR / HDR / NDR 2.13 - Use of physical diagnostic and test interfaces 

References

[1] J. van Woudenberg. “Top 10 Secure Boot mistakes.” Presented at hardware.io Hardware Security Conference and Training, Santa Clara, CA, USA, 2019. [Online]. Available: https://hardwear.io/usa-2019/presentations/Top-10-Secure-Boot-Mistakes-v1.1-hardwear-io-usa-2019-jasper-van-woudenberg.pdf

diff --git a/mitigations/MID-058.html b/mitigations/MID-058.html new file mode 100644 index 0000000..b665ad4 --- /dev/null +++ b/mitigations/MID-058.html @@ -0,0 +1 @@ + MID-058 | MITRE EMB3D™
Mitigation-page

MID-058: Engage Hardware Readout Protection Mechanisms

Mitigation Tier: Foundational

Description

Many integrated processors contain security configuration options that can be engaged to disable programming and debugging features in devices intended for production use. These can irreversibly disable debugging interfaces that can read and write device memory (e.g., JTAG, boundary scan), block flash memory readout, lock down boot options, etc.

IEC 62443 4-2 Mappings

  • EDR / HDR / NDR 2.13 - Use of physical diagnostic and test interfaces 

  • EDR / HDR / NDR 3.11 (1) - Physical tamper resistance and detection 

References

[1] ST. “STM32 Readout Protection (RDP).” stm32world.com. Accessed: Aug. 28, 2024. [Online]. Available: https://stm32world.com/wiki/STM32_Readout_Protection_(RDP)

diff --git a/mitigations/MID-059.html b/mitigations/MID-059.html new file mode 100644 index 0000000..08f5fc6 --- /dev/null +++ b/mitigations/MID-059.html @@ -0,0 +1 @@ + MID-059 | MITRE EMB3D™
Mitigation-page

MID-059: Software Patterns for Side Channel Resistance

Mitigation Tier: Intermediate

Description

Adhering to certain software development patterns can increase the resistance of code to side channel data leakage and limit a threat actor’s ability to extract information via timing, power, or EM-based side channel analysis. Countermeasures can be organized into three categories: hiding (reducing the leakage and adding noise), masking (disassociating leakage from sensitive values, and by protocol (e.g., limiting the usage of sensitive values like cryptographic keys). Example techniques include designing computations to be independent of sensitive values from a time or power perspective, balancing the operations on either side of conditional statements, using unpredictable ordering for bit or byte test and comparison operations, adding randomness or noise, and limiting secret key reuse.

IEC 62443 4-2 Mappings

  • none

References

[1] M. Witteman, “Secure Application Programming in the presence of Side Channel Attacks,” Riscure, The Netherlands. Accessed: Aug. 21, 2024. [Online.] Available: https://sidechannel.riscure.com/publications/secure-application-programming-in-the-presence-of-side-channel-attacks/.

[2] Intel. “Security Best Practices for Side Channel Resistance.” intel.com. Accessed: Aug 21, 2024. [Online.] Available: https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/secure-coding/security-best-practices-side-channel-resistance.html

diff --git a/mitigations/MID-060.html b/mitigations/MID-060.html new file mode 100644 index 0000000..bd315a4 --- /dev/null +++ b/mitigations/MID-060.html @@ -0,0 +1 @@ + MID-060 | MITRE EMB3D™
Mitigation-page

MID-060: Dedicated Hardware Cryptographic Modules

Mitigation Tier: Intermediate

Description

A hardware-based cryptographic module can be an effective solution for a device when a purely software-based cryptographic library (MID-027) does not sufficiently mitigate against threats of concern (e.g., to side channel attacks, cryptographic key compromise) or meet performance constraints. Dedicated cryptographic modules can implement hardware-based defenses that are not possible in a software library. In processor-constrained designs, hardware acceleration of cryptographic algorithms can enable implementing stronger algorithms and key sizes than may be practical in a software-only solution. As with software cryptographic libraries, implementors should prefer modules that have been examined, tested, and vetted by independent laboratories according to industry approved specifications.

Note: This has several important distinctions from MID-028 - Hardware-backed Key Storage. In the MID-028 case, key material may reside in hardware-backed or hardware-based storage, but the hardware lacks the means to perform cryptographic operations using that key without exposing it to the system’s processor. A fully hardware cryptographic module is capable of performing cryptographic operations internally on provided data without exposing the keys.

IEC 62443 4-2 Mappings

  • CR 4.3 - Use of cryptography 

  • CR 1.9 – Strength of public key-based authentication - RE (1) Hardware security for public key-based authentication

  • CR 1.14 – Strength of symmetric key-based Authentication - RE (1) Hardware security for symmetric key-based authentication

  • CR 1.5 – Authenticator management - RE (1) Hardware security for authenticators

References

[1] NIST. “Cryptographic Module Validation Program.” nist.gov. Accessed: Aug. 28, 2024. [Online]. Available: https://csrc.nist.gov/projects/cryptographic-module-validation-program

diff --git a/mitigations/MID-061.html b/mitigations/MID-061.html new file mode 100644 index 0000000..c1abed5 --- /dev/null +++ b/mitigations/MID-061.html @@ -0,0 +1 @@ + MID-061 | MITRE EMB3D™
Mitigation-page

MID-061: Use Separate Processors for Isolation

Mitigation Tier: Intermediate

Description

Inter-process data leakage side channels like Spectre, Meltdown, etc. that rely on memory cache behavior, speculative execution, and similar processor features can only occur when workloads share the same processor. Isolating workloads onto multiple physically separate processors avoids any such potential problems.

Partitioning workloads by criticality or security level is recommended. For example, functions that process untrusted data or otherwise make up the device’s attack surface should be separated from security and functionality critical operations. Avoid separating security decisions (e.g., authorization checks, signature validations) from the data and operations they govern; doing so can introduce weaknesses that allow bypassing those checks.

Limitations: Adding additional processors to separate device functions and data necessarily increases the complexity and cost of the device’s hardware and software. If chosen, care must be taken to avoid introducing new vulnerabilities in the course of implementing this mitigation approach.

IEC 62443 4-2 Mappings

  • CR 2.1 – Authorization enforcement (1) Authorization enforcement for all users (humans, software processes and devices)

References

diff --git a/mitigations/MID-062.html b/mitigations/MID-062.html new file mode 100644 index 0000000..3bd14bc --- /dev/null +++ b/mitigations/MID-062.html @@ -0,0 +1 @@ + MID-062 | MITRE EMB3D™
Mitigation-page

MID-062: Hardware Mitigations for Fault Injection

Mitigation Tier: Leading

Description

Numerous hardware-level defenses have been proposed to address the different varieties of fault injection. Tunable Replica Circuits (TRCs) [1] can be used to detect voltage and clock timing changes and have been deployed within some newer commercial CPUs from Intel [2]. Brown-out detection and reset circuits, as found in some microcontrollers, have been proposed to interrupt voltage glitch attacks if sensitive enough [8], however research has shown these can be bypassed by tuning the attack carefully [9][10] although it does increase the difficulty of the attack [10]. Comparison techniques can be used to detect attacks on processor clock signals [3][4]. Finely targeted electromagnetic interference (EMI) attacks can bypass single chip-wide voltage and clock-based defenses but have been shown to be detectable embedding multiple detectors within a chip [3] and by phase locked loop (PLL)-based sensor circuits [5]. [6] examines several detection schemes for optical fault injection techniques, such as embedding photosensors and shielding in a chip.

A combination of multiple hardware and software-based mitigation techniques (see MID-063) to address the range of fault injection types, as recommended by [8], can prove more effective than any individual mitigation.

IEC 62443 4-2 Mappings

  • none

References

[1] K. A. Bowman and J. W. Tschanz, “Resilient microprocessor design for improving performance and energy efficiency,” 2010 IEEE/ACM International Conference on Computer-Aided Design (ICCAD), San Jose, CA, USA, 2010, pp. 85-88, doi: 10.1109/ICCAD.2010.5654317.

[2] D. Nemiroff, C. Tokunaga, “Tunable Replica Circuit for Fault- Injection Detection,” in Blackhat USA 2022, Las Vegas, NV, USA, 2022. Available: https://i.blackhat.com/USA-22/Wednesday/US-22-Nemiroff-Fault-Injection-Detection-Circuits.pdf

[3] L. Zussa et al., “Efficiency of a glitch detector against electromagnetic fault injection,” 2014 Design, Automation & Test in Europe Conference & Exhibition (DATE), Dresden, Germany, 2014, pp. 1-6, doi: 10.7873/DATE.2014.216.

[4] C. Deshpande, “Hardware Fault Attack Detection Methods for Secure Embedded Systems,” M.S. dissertation, Dept. Comp. Eng., Virginia Tech, Blacksburg, VA, USA, 2017. [Online]. Available: https://vtechworks.lib.vt.edu/server/api/core/bitstreams/2b264fa1-1286-4802-9125-461ca4839c1c/content

[5] Noriyuki Miura, Zakaria Najm, Wei He, Shivam Bhasin, Xuan Thuy Ngo, Makoto Nagata, and Jean-Luc Danger. 2016. PLL to the rescue: a novel EM fault countermeasure. In Proceedings of the 53rd Annual Design Automation Conference (DAC ‘16). Association for Computing Machinery, New York, NY, USA, Article 90, 1–6. https://doi.org/10.1145/2897937.2898065

[6] N. A. Anagnostopoulos, “Optical Fault Injection Attacks in Smart Card Chips and an Evaluation of Countermeasures Against Them,” M.S. thesis, Dept. Comp. Sci., Univ. of Twente, Enschede, Netherlands, 2014. [Online]. Available: https://essay.utwente.nl/66028/7/Anagnostopoulos_MA_EEMCS.pdf

[7] Bilgiday Yuce, Nahid F. Ghalaty, Chinmay Deshpande, Conor Patrick, Leyla Nazhandali, and Patrick Schaumont. 2016. FAME: Fault-attack Aware Microprocessor Extensions for Hardware Fault Detection and Software Fault Response. In Proceedings of the Hardware and Architectural Support for Security and Privacy 2016 (HASP ‘16). Association for Computing Machinery, New York, NY, USA, Article 8, 1–8. https://doi.org/10.1145/2948618.2948626

[8] J. Boone, S. Q. Khan. “Alternative Approaches for Fault Injection Countermeasures (Part 3/3).” NCC Group. Accessed: Aug. 28, 2024. [Online]. Available: https://research.nccgroup.com/2021/07/09/alternative-approaches-for-fault-injection-countermeasures-part-3-3/

[9] T. Korak and M. Hoefler, “On the Effects of Clock and Power Supply Tampering on Two Microcontroller Platforms,” 2014 Workshop on Fault Diagnosis and Tolerance in Cryptography, Busan, Korea (South), 2014, pp. 8-17, doi: 10.1109/FDTC.2014.11.

[10] C. Bozzato, R. Focardi, and F. Palmarini. “Shaping the Glitch: Optimizing Voltage Fault Injection Attacks”, TCHES, vol. 2019, no. 2, pp. 199–224, Feb. 2019, doi: 10.13154/tches.v2019.i2.199-224.

[11] J. van Woudenberg. “Top 10 Secure Boot mistakes.” Presented at hardware.io Hardware Security Conference and Training, Santa Clara, CA, USA, 2019. [Online]. Available: https://hardwear.io/usa-2019/presentations/Top-10-Secure-Boot-Mistakes-v1.1-hardwear-io-usa-2019-jasper-van-woudenberg.pdf

diff --git a/mitigations/MID-063.html b/mitigations/MID-063.html new file mode 100644 index 0000000..2c6ccf9 --- /dev/null +++ b/mitigations/MID-063.html @@ -0,0 +1 @@ + MID-063 | MITRE EMB3D™
Mitigation-page

MID-063: Software Mitigations for Fault Injection

Mitigation Tier: Intermediate

Description

Many software-based mitigations to fault injection have been imposed. These range from coding patterns and strategies that can be used at development time, to automated compiler-based techniques, and hybrid approaches that take advantage of hardware features.

Certain programming patterns can harden pieces of code against common faults [1][2][3]. Redundancy is one such pattern, i.e., performing certain comparisons, memory reads, or function calls multiple times and comparing the results. Others include: choosing constant flag values with a large Hamming distance between them that are hard for a fault to generate or flip between, (e.g., multi-byte random bit strings instead of 0 and 1); adding code checks for ‘impossible’ paths through logic trees that could only be reached as a result of a fault; adding random time delays to operations; checking that loops executed to completion without stopping early; etc.

Other research has proposed more systematic approaches to hardening code at compile time. As compile-time approaches must be automated and generally applicable to all code, they often implement more narrow protections against specific types of faults. Examples include automating the insertion of duplicate computations and comparisons throughout an application [4] or hardening the control flow of loops [5]. Instruction duplication (ID) is one commonly proposed technique that can be automatically applied [6][7], however it has been shown over time that ID is only effective against faults that skip single instructions [8][9]. An attacker that can coordinate multiple faults to target each duplication can likely still achieve their objective. [13] demonstrates that such coordination is feasible with readily accessible tools.

Other general-purpose protections that protect a program’s control flow graph, e.g., control flow integrity (CFI), can provide some protection against faults that alter function pointers and jump addresses similar to how a software exploit would. Software-based CFI schemes [10][11] and hardware-assisted schemes (e.g., using ARM pointer authentication) [12] have been explored. See MID-007 and MID-020 for more information on CFI and pointer authentication/encryption.

A combination of multiple hardware and software-based mitigation techniques (see MID-062) to address the range of fault injection types, as recommended by [3], can prove more effective than any individual mitigation.

IEC 62443 4-2 Mappings

  • none

References

[1] M. Witterman, “Fault Mitigation Patterns,” Riscure. [Online]. Available: https://sidechannel.riscure.com/publications/fault-mitigation-patterns/

[2] J. Boone, S. Q. Khan. “Software-Based Fault Injection Countermeasures (Part 2/3).” NCC Group. Accessed: Aug. 28, 2024. [Online]. Available: https://research.nccgroup.com/2021/07/08/software-based-fault-injection-countermeasures-part-2-3/

[3] J. Boone, S. Q. Khan. “Alternative Approaches for Fault Injection Countermeasures (Part 3/3).” NCC Group. Accessed: Aug. 28, 2024. [Online]. Available: https://research.nccgroup.com/2021/07/09/alternative-approaches-for-fault-injection-countermeasures-part-3-3/

[4] G. A. Reis, J. Chang, N. Vachharajani, R. Rangan and D. I. August, “SWIFT: software implemented fault tolerance,” International Symposium on Code Generation and Optimization, San Jose, CA, USA, 2005, pp. 243-254, doi: 10.1109/CGO.2005.34.

[5] Julien Proy, Karine Heydemann, Alexandre Berzati, and Albert Cohen. 2017. Compiler-Assisted Loop Hardening Against Fault Attacks. ACM Trans. Archit. Code Optim. 14, 4, Article 36 (December 2017), 25 pages. https://doi.org/10.1145/3141234

[6] Alessandro Barenghi, Luca Breveglieri, Israel Koren, Gerardo Pelosi, and Francesco Regazzoni. 2010. Countermeasures against fault attacks on software implemented AES: effectiveness and cost. In Proceedings of the 5th Workshop on Embedded Systems Security (WESS ‘10). Association for Computing Machinery, New York, NY, USA, Article 7, 1–10. https://doi.org/10.1145/1873548.1873555

[7] Thierno Barry, Damien Couroussé, and Bruno Robisson. 2016. Compilation of a Countermeasure Against Instruction-Skip Fault Attacks. In Proceedings of the Third Workshop on Cryptography and Security in Computing Systems (CS2 ‘16). Association for Computing Machinery, New York, NY, USA, 1–6. https://doi.org/10.1145/2858930.2858931

[8] Cojocar, L., Papagiannopoulos, K., Timmers, N. (2018). Instruction Duplication: Leaky and Not Too Fault-Tolerant!. In: Eisenbarth, T., Teglia, Y. (eds) Smart Card Research and Advanced Applications. CARDIS 2017. Lecture Notes in Computer Science(), vol 10728. Springer, Cham. https://doi.org/10.1007/978-3-319-75208-2_10

[9] B. Yuce, N. F. Ghalaty, H. Santapuri, C. Deshpande, C. Patrick and P. Schaumont, “Software Fault Resistance is Futile: Effective Single-Glitch Attacks,” 2016 Workshop on Fault Diagnosis and Tolerance in Cryptography (FDTC), Santa Barbara, CA, USA, 2016, pp. 47-58, doi: 10.1109/FDTC.2016.21.

[10] V. B. Thati, J. Vankeirsbilck, J. Boydens and D. Pissort, “Selective Duplication and Selective Comparison for Data Flow Error Detection,” 2019 4th International Conference on System Reliability and Safety (ICSRS), Rome, Italy, 2019, pp. 10-15, doi: 10.1109/ICSRS48664.2019.8987731.

[11] R. Schilling, M. Werner and S. Mangard, “Securing conditional branches in the presence of fault attacks,” 2018 Design, Automation & Test in Europe Conference & Exhibition (DATE), Dresden, Germany, 2018, pp. 1586-1591, doi: 10.23919/DATE.2018.8342268.

[12] Schilling, R., Nasahl, P., Mangard, S. (2022). FIPAC: Thwarting Fault- and Software-Induced Control-Flow Attacks with ARM Pointer Authentication. In: Balasch, J., O’Flynn, C. (eds) Constructive Side-Channel Analysis and Secure Design. COSADE 2022. Lecture Notes in Computer Science, vol 13211. Springer, Cham. https://doi.org/10.1007/978-3-030-99766-3_5

[13] M. Alt. “Glitching in 3D: Low Cost EMFI Attacks,” presented at CanSecWest 2024, Vancouver, BC, Canada, March, 2024. Available: https://github.com/voidstarsec/csw-2024/blob/gh-pages/csw.pdf

[14] J. van Woudenberg. “Top 10 Secure Boot mistakes.” Presented at hardware.io Hardware Security Conference and Training, Santa Clara, CA, USA, 2019. [Online]. Available: https://hardwear.io/usa-2019/presentations/Top-10-Secure-Boot-Mistakes-v1.1-hardwear-io-usa-2019-jasper-van-woudenberg.pdf

diff --git a/mitigations/MID-064.html b/mitigations/MID-064.html new file mode 100644 index 0000000..2559a74 --- /dev/null +++ b/mitigations/MID-064.html @@ -0,0 +1 @@ + MID-064 | MITRE EMB3D™
Mitigation-page

MID-064: Store Critical Code and Data in On-Chip Memory

Mitigation Tier: Intermediate

Description

On-chip non-volatile storage in a processor can be used to protect high-value data from extraction and modification. Many processors include ROM, NVRAM, or specialized write-once storage (e.g. security fuses). Common implementation patterns include storing keys and bootloader code used to bootstrap loading further stages of encrypted firmware (see MID-054) from external storage and to verify its authenticity as part of a secure boot chain. In other applications, the device firmware may be small enough to fit entirely within such on-chip storage (see MID-055).

Note: MID-058 must be implemented as well to obtain the protection afforded by this mitigation.

Limitations: Motivated attackers may resort to invasive and destructive analysis of ICs which can extact data or reset security fuses. In the case of keys and other secrets, combining this mitigation with MID-033 can prevent an invasive attack from affecting more than the single device attacked.

IEC 62443 4-2 Mappings

  • EDR / HDR / NDR 3.11 (1) - Physical tamper resistance and detection

References

diff --git a/mitigations/MID-065.html b/mitigations/MID-065.html new file mode 100644 index 0000000..be0b587 --- /dev/null +++ b/mitigations/MID-065.html @@ -0,0 +1 @@ + MID-065 | MITRE EMB3D™
Mitigation-page

MID-065: RAM Encryption

Mitigation Tier: Intermediate

Description

Some modern processors from Intel, AMD, and ARM include support for dynamically encrypting portions of memory to create secure enclaves for sensitive processes or virtual machines. This mechanism prevents unauthorized accesses to the cleartext contents of these memory regions from attacks such as (i) memory extraction through direct reads like in a Coldboot attack, (ii) DMA access to data in volatile memory not in active use, (iii) privilege escalation that gives processes direct memory reads, (iiii) reading memory being transferred into/out of volatile memory, and (iv) can prevent RowHammer-style attacks from targeting specific bit flip manipulations (e.g., for privilege escalation) and reduce them to denial of service.

IEC 62443 4-2 Mappings

  • CR 4.1 – Information confidentiality

References

[1] Intel. “Runtime Encryption of Memory with Intel® Total Memory Encryption–Multi-Key.” intel.com. Accessed: Aug. 28, 2024. [Online]. Available: https://www.intel.com/content/www/us/en/developer/articles/news/runtime-encryption-of-memory-with-intel-tme-mk.html

[2] D. Kaplan, J. Powell, T. Woller, ”AMD Memory Encryption,” amd.com, 2021. Accessed: Aug. 28, 2024. [Online]. Available: https://www.amd.com/content/dam/amd/en/documents/epyc-business-docs/white-papers/memory-encryption-white-paper.pdf

[3] ARM. “Learn the Architecture – Realm Management Engine.” arm.com. Accessed: Aug. 28, 2024. [Online]. Available: https://developer.arm.com/documentation/den0126/0100/Overview

diff --git a/mitigations/MID-066.html b/mitigations/MID-066.html new file mode 100644 index 0000000..5fee177 --- /dev/null +++ b/mitigations/MID-066.html @@ -0,0 +1 @@ + MID-066 | MITRE EMB3D™
Mitigation-page

MID-066: Implement Redundant Processing and Memory

Mitigation Tier: Intermediate

Description

Systems that require high reliability may implement redundant memory and processors to tolerate faults. These ensure data validity before acting on it, for example by implementing a voting mechanism or other error detection algorithm. This can make a system more resistant to (1) manipulations that cause memory bit errors, such as RowHammer, as it is unlikely a majority of a redundant set of memory chips will exhibit identical bit flips when subjected to an attack, and (2) fault injection attacks if the fault is probabilistic and cannot be made to effect each redundant processor identically.

Limitations: A motivated adversary may coordinate simultaneous fault injections against all of the redundant components to still achieve a successful attack, however this will be more challenging than attacking a design without redundancy. The benefits of increasing attack difficulty must be weighed against the additional complexity added to the device design and its corresponding costs and risks.

IEC 62443 4-2 Mappings

  • none

References

diff --git a/mitigations/MID-067.html b/mitigations/MID-067.html new file mode 100644 index 0000000..c6b12ad --- /dev/null +++ b/mitigations/MID-067.html @@ -0,0 +1 @@ + MID-067 | MITRE EMB3D™
Mitigation-page

MID-067: Implement DRAM RowHammer-resistant DRAM and Memory Controllers

Mitigation Tier: Intermediate

Description

As DRAM densities increase and cell sizes shrink, they become increasingly vulnerable to RowHammer-style attacks. Since its discovery, many solutions have been proposed in the research community to varying degrees of success [1]. ECC memory can provide some protection against single bit errors, but multi-bit flip RowHammer variants have been demonstrated that exceed ECC’s ability to correct [2]. ECC-detectable single bit errors may occur during an attempted RowHammer and provide indication to a firmware or operating system-level mitigation that an attack is underway.

Newer DRAM specifications have introduced defenses, such as DDR4’s Target Row Refresh (TRR) mechanism, that have made a successful RowHammer attack more difficult. However, attack methods have been refined to achieve success even on TRR-enabled DRAMs [3]. Not all DRAM modules are equally susceptible, and the memory controllers built into processors have implemented defenses of various efficacy. In [3], the authors show how to test the performance of a particular combination.

JEDEC updated the DDR5 specification in 2024 (JESD79-5C) to add Per-Row Activation Counting (PRAC) [4]. PRAC-enabled DRAM chips track individual DRAM row activations and signal the memory controller when the count exceeds a threshold value indicating a potential victim row requires a refresh that the controller must then command. Recent research concludes that PRAC does mitigate a RowHammer-style attack in many cases, although is subject to potentially high performance and energy overheads [5].

If the CPU/SoC’s memory controller supports it, system firmware and device operating system could cooperate with the memory controller hardware to leverage indicators from ECC, PRAC, etc. to inform additional layers of mitigation, such as identifying and terminating the offending application process conducting the RowHammer attack [6].

IEC 62443 4-2 Mappings

  • CR 3.4 – Software and information integrity

References

[1] Onur Mutlu, Ataberk Olgun, and A. Giray Yağlıkcı. 2023. Fundamentally Understanding and Solving RowHammer. In Proceedings of the 28th Asia and South Pacific Design Automation Conference (ASPDAC ‘23). Association for Computing Machinery, New York, NY, USA, 461–468.

[2] VUSec. “ECCPLOIT: ECC Memory Vulnerable to RowHammer Attacks After All.” visec.net. Accessed: Aug. 28, 2024. [Online]. Available: https://www.vusec.net/projects/eccploit/

[3] P. Frigo et al., “TRRespass: Exploiting the Many Sides of Target Row Refresh,” 2020 IEEE Symposium on Security and Privacy (SP), San Francisco, CA, USA, 2020, pp. 747-762, doi: 10.1109/SP40000.2020.00090.

[4] JEDEC. “JEDEC Updates JESD79-5C DDR5 SDRAM Standard: Elevating Performance and Security for Next-Gen Technologies.” jedec.org. Accessed: Aug. 28, 2024. [Online]. Available: https://www.jedec.org/news/pressreleases/jedec-updates-jesd79-5c-ddr5-sdram-standard-elevating-performance-and-security

[5] O. Canpolat, A. G. Yağlıkçı, G. F. Oliveira, A. Olgun, O. Ergin, O. Mutlu, “Understanding the Security Benefits and Overheads of Emerging Industry Solutions to DRAM Read Disturbance,” 2024, arXiv:2406.19094.

[6] “System Level Rowhammer Mitigation,” JEDEC, JEP301-1, Mar. 2021.

diff --git a/mitigations/MID-068.html b/mitigations/MID-068.html new file mode 100644 index 0000000..5c07bf5 --- /dev/null +++ b/mitigations/MID-068.html @@ -0,0 +1 @@ + MID-068 | MITRE EMB3D™
Mitigation-page

MID-068: Data Bus Encryption and Message Authentication

Mitigation Tier: Intermediate

Description

Applying cryptographic solutions to inter-chip and inter-peripheral data bus messaging can protect against data interception and modification. A message authentication code (MAC) scheme can be sufficient to protect the integrity of bus data from manipulation, but a more complete encryption scheme is required to maintain confidentiality. More complex chips (e.g., microcontrollers) will often be needed on either end of the communication that have specialized support for pairing, key management, message authentication codes, and encryption. Additionally, the extra overhead of adding encryption often requires migrating to newer, more capable bus protocols that support encryption, for examples CAN-FD vs. CAN [1]. On the higher end of performance, the PCI SIG is developing the Integrity and Data Encryption feature for inclusion in a future version of the PCIe bus specification [2].

Apple’s TouchID fingerprint authentication mechanism incorporates an example of this mitigation [3]. The device’s TouchID fingerprint sensor and the Secure Enclave chip are provisioned with a unique shared key at manufacturing time. This key is used to negotiate an additional session key that encrypts and authenticates the sensor data as it passes between the two chips.

Limitations: Many common PCB-level bus and interconnect protocols do not support encryption or authentication. Restricting a device design to components that do have these features may be a too limiting or too costly constraint. Device pairing and key management mechanisms and processes are necessary, add complexity to device design and manufacturing, especially to implement unique keys on each device (see MID-033).

IEC 62443 4-2 Mappings

  • CR 3.1 – Communication integrity - RE (1) Communication authentication

  • EDR / HDR / NDR 3.11 (1) - Physical tamper resistance and detection

References

[1] W. Busch. “Boosting security in cars with CAN-FD.” Avnet Silica. Accessed: Aug. 28, 2024. [Online]. Available: https://my.avnet.com/silica/resources/article/boosting-security-in-cars-with-can-fd/

[2] D. Harriman. “Integrity and Data Encryption (IDE) and IO Security Updates.” PCI SIG. Accessed: Aug. 28, 2024. [Online]. Available: https://pcisig.com/blog/integrity-and-data-encryption-ide-and-io-security-updates

[3] Apple. “Apple Platform Security.” apple.com. Accessed: Aug. 26, 2024. [Online]. Available: https://help.apple.com/pdf/security/en_US/apple-platform-security-guide.pdf

diff --git a/mitigations/MID-069.html b/mitigations/MID-069.html new file mode 100644 index 0000000..9fc2cf9 --- /dev/null +++ b/mitigations/MID-069.html @@ -0,0 +1 @@ + MID-069 | MITRE EMB3D™
Mitigation-page

MID-069: Electrical Fault Protection

Mitigation Tier: Intermediate

Description

Externally accessible I/O ports should be protected against damaging electrical faults such as electro-static discharge (ESD), voltage transients, surges, reverse polarity, etc. Protections include adding protection circuits to vulnerable ports (e.g., protection diodes, optoisolators, etc.) and selecting ICs and other components that are more resilient to electrical faults. In addition to general guidance, industry-specific standards exist for many embedded device market domains that provide recommendations and requirements tailored more specifically to the needs of each domain (e.g., automotive, medical, etc.)

IEC 62443 4-2 Mappings

  • EDR / HDR / NDR (1) 3.11 - Physical tamper resistance and detection

References

[1] “Design Guide: TIDA-00731 IEC ESD, EFT, and Surge RS-485 Bus Protection Design Guide,” Texas Instruments, TIDUAS1B, 2019. Accessed: Aug. 28, 2024. [Online]. Available: https://www.ti.com/lit/ug/tiduas1b/tiduas1b.pdf?ts=1721068648253

[2] Analog Devices. “ESD Protection for I/O Ports.” analog.com. Accessed: Aug. 28, 2024. [Online]. Available: https://www.analog.com/en/resources/technical-articles/esd-protection-for-io-ports.html

[3] V. Nandam, L. Ghulyani, “Simplifying EFT, Surge and Power-Fail Protection Circuits in PLC Systems,” Texas Instruments, SLVA833D, 2021. Accessed: Aug. 28, 2024. [Online]. Available: https://www.ti.com/lit/an/slva833d/slva833d.pdf?ts=1721068743110

diff --git a/mitigations/MID-070.html b/mitigations/MID-070.html new file mode 100644 index 0000000..6fce888 --- /dev/null +++ b/mitigations/MID-070.html @@ -0,0 +1 @@ + MID-070 | MITRE EMB3D™
Mitigation-page

MID-070: Peripheral Component Authentication

Mitigation Tier: Leading

Description

To protect against malicious or compromised peripherals, a system might institute a scheme in which peripherals are considered untrusted until authenticated and authorized to access necessary system resources (e.g., system memory for DMA). Internal system components are often implicitly trusted, although many contain firmware of their own that, if modified, may cause the device to behave maliciously. Trusting external peripherals (e.g., USB devices) is always a risk. Each of a device’s processors and other components may instead treat other bus-connected components similarly to remote nodes on a network, perform cryptographic mutual authentication of a components’ identities, and use this to execute trust decisions. Measurement and attestation of component firmware can add further assurance.

Some Apple devices implement a form of this for certain security-sensitive components like the TouchID fingerprint reader [2].

Upcoming revisions of the PCI Express specification will add the Component Measurement and Authentication (CMA) mechanism [1], which will allow a system to verify the authenticity of a PCIe device and its firmware before allowing it to access system resources, preventing malicious or compromised peripherals from obtaining the degree of system access needed to perform attacks.

IEC 62443 4-2 Mappings

  • CR 1.2 – Software process and device identification and authentication

References

[1] N. Edwards, T. Koulouris, M. Krause. “PCIe Component Authentication.” PCI SIG. Accessed: Aug. 28, 2024. [Online]. Available: https://pcisig.com/pcie%C2%AE-component-authentication

[2] Apple. “Apple Platform Security.” apple.com. Accessed: Aug. 26, 2024. [Online]. Available: https://help.apple.com/pdf/security/en_US/apple-platform-security-guide.pdf

diff --git a/mitigations/MID-071.html b/mitigations/MID-071.html new file mode 100644 index 0000000..b5fa830 --- /dev/null +++ b/mitigations/MID-071.html @@ -0,0 +1 @@ + MID-071 | MITRE EMB3D™
Mitigation-page

MID-071: Sanitized and Escaped User Data for Web Applications

Mitigation Tier: Foundational

Description

Web applications should encode all outputs of user data, put safety controls around all inputs, and store variables in safe attributes. Encoding outputs ensures that all outputted variables on the web application are converted into text before displaying. Encoded or escaped text will not execute on the user’s browser, making the variables safe for display. For example, putting quotes around variables, using escape sequences, using encoding formats for special characters like single or double quotes, and putting displayed variables in safe HTML or CSS structures can all help to prevent code execution upon output. These controls should be used when the user has the ability to edit any HTML on the webpage.

Potential ways to sanitize HTML input include using the JavaScript DOMPurify.sanitize() function and storing variables in safe structures or “safe sinks”. Safe sinks are HTML structures that will always treat the stored variable as text and therefore will never execute it.

Note: It is best to use web application frameworks that have this functionality already built-in and have been well tested and are widely used.

IEC 62443 4-2 Mappings

  • CR 3.5 – Input validation

References

[1] OWASP. “Cross Site Scripting Prevention Cheat Sheet.” owasp.org. Accessed: Aug. 28, 2024. [Online.] Available: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html

[2] OWASP. “Input Validation Cheat Sheet.” owasp.org. Accessed: Aug. 28, 2024. [Online.] Available: https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html

diff --git a/mitigations/MID-072.html b/mitigations/MID-072.html new file mode 100644 index 0000000..688d5f0 --- /dev/null +++ b/mitigations/MID-072.html @@ -0,0 +1 @@ + MID-072 | MITRE EMB3D™
Mitigation-page

MID-072: Parameterized SQL Queries

Mitigation Tier: Foundational

Description

Web apps should not pass SQL queries for execution by a database unless they conform to one of the recommended query formation mitigations below. Methods can include 1) only executing prepared statements with parameterized queries, 2) only executing stored procedures, and 3) allow-list input validation [1].

Prepared statements with parameterized queries change the way that the web app will process a user request and form a query. When using prepared statements, the web app that processes the user data will take the user data and place it into a pre-defined section of the query, with the rest of the query already formed. Therefore, the actual SQL commands that the database will be executing are handled and compiled before the user input is processed and inserted, so the user input cannot introduce any new potentially malicious commands. This is then coupled with parameterized variables, where variables are set to be a certain type before being inserted into the SQL statement to ensure that no variable can be misconstrued as a command and not a string, for example.

Stored procedures are procedures that are crafted and pre-stored on the web app. They can be sent to the SQL database upon prompting from the client to the web app. Since these statements are pre-crafted and stored before the client has any interaction with the web app, the client cannot send custom queries that may be malicious. Assuming that the user data is parameterized here as well, users will not be able to inject data into the query that will not be interpreted as a literal data type. Therefore, the threat surface is lowered because the stored procedures can be implemented safely, and user input will not be able to add any new commands.

Allow-list input validation is implemented by creating an allow-list of parameters for clients to choose from. This allow list can be implemented through conditionals like ifelse and switch statements. This would prevent potential commands contained in user inputs from being a part of the final SQL query statement given to the database.

Limitation: If a device is using stored procedures, particular care needs to be made to what permissions the stored procedure executor has. If the device has device-level users, the user that executes the procedures may need a high-level of permissions, which could make that user a target to threat actors.

IEC 62443 4-2 Mappings

  • CR 3.5 - Input validation 

References

[1] OWASP. “SQL Injection Prevention Cheat Sheet.” owasp.org. Accessed: Aug. 28, 2024. [Online.] Available: https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.htmlLinked

diff --git a/mitigations/MID-073.html b/mitigations/MID-073.html new file mode 100644 index 0000000..88b7b0d --- /dev/null +++ b/mitigations/MID-073.html @@ -0,0 +1 @@ + MID-073 | MITRE EMB3D™
Mitigation-page

MID-073: Secure HTTP Session Management

Mitigation Tier: Foundational

Description

The web application should use session tokens or IDs to manage each authenticated user session. Core requirements for secure session management include:

  • Sessions tokens should be implemented using a trusted web framework to ensure that tokens are correctly assigned, enforced, tracked, and maintained to ensure that they keep their integrity and provide all necessary security guarantees.

  • Each session should be associated with a unique and non-predictable session IDs, which includes sufficient entropy to prevent guessing and is totally decoupled from and unrelated to any inherent user information.

  • Session IDs should be protected against leakage. HTTP Cookies provide multiple ways to prevent leakage, including the HTTPOnly, SameSite, Domain and Path information, expiration, and max-age secure attributes.

IEC 62443 4-2 Mappings

  • CR 3.8 – Session integrity

References

[1] OWASP. “Session Management Cheat Sheet.” owasp.org. Accessed: Aug. 28, 2024. [Online.] Available: https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html

diff --git a/mitigations/MID-074.html b/mitigations/MID-074.html new file mode 100644 index 0000000..3463062 --- /dev/null +++ b/mitigations/MID-074.html @@ -0,0 +1 @@ + MID-074 | MITRE EMB3D™
Mitigation-page

MID-074: Cross Site Request Forgery Mitigations

Mitigation Tier: Foundational

Description

The web application should include mechanisms that will ensure that only authentic HTTP requests are processed. These mitigation mechanisms include synchronizer token patterns, double-submit cookie patterns, and forbidding simple requests. Additional techniques can be deployed to bolster the device’s other mitigations, such as such as using SameSite cookies, using standard headers, and requiring user interaction for all privileged actions (instead blindly allowing actions to take place just based on the URL). Ideally a web application framework should be used to implement these mitigations to ensure they are effectively and consistently deployed.

IEC 62443 4-2 Mappings

  • CR 3.8 – Session integrity

References

[1] OWASP. “Cross-Site Request Forgery Prevention Cheat Sheet.” owasp.org. Accessed: Aug. 28, 2024. [Online.] Available: https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html

diff --git a/mitigations/MID-075.html b/mitigations/MID-075.html new file mode 100644 index 0000000..8c608a0 --- /dev/null +++ b/mitigations/MID-075.html @@ -0,0 +1 @@ + MID-075 | MITRE EMB3D™
Mitigation-page

MID-075: Path Traversal Protections

Mitigation Tier: Foundational

Description

To avoid path traversal attacks, devices should not use raw user input as direct inputs to file system calls. For example, OWASP [1] recommends: (i) using indexes instead of file names, (ii) validating the user’s input by only accepting it if it matches predefined values, (iii) using technical mechanisms to limit where the user can access files from, and (iv) normalizing user inputs.

Additionally, devices should choose a single path to access a file and canonicalize it, as opposed to allowing all absolute paths access to that file. This can prevent threat actors from inserting alternative paths (e.g., using relative directory names or symlinks) that map to the target file but that the device was not expecting, which may result in bypassing file access control policies. Devices should convert all received paths into canonicalized absolute paths and then use the resulting canonicalized path as the subject for access control decisions.

IEC 62443 4-2 Mappings

  • CR 3.5 - Input validation 

References

[1] OWASP. “Path Traversal.” owasp.org. Accessed: Aug. 28, 2024. [Online.] Available: https://owasp.org/www-community/attacks/Path_Traversal

[2] OWASP. “Input Validation Cheat Sheet.” owasp.org. Accessed: Aug. 28, 2024. [Online.] Available: https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html

[3] PortSwigger. “Path traversal.” portswigger.net. Accessed: Aug. 28, 2024. [Online.] Available: https://portswigger.net/web-security/file-path-traversal

diff --git a/mitigations/MID-076.html b/mitigations/MID-076.html new file mode 100644 index 0000000..4df0e18 --- /dev/null +++ b/mitigations/MID-076.html @@ -0,0 +1 @@ + MID-076 | MITRE EMB3D™
Mitigation-page

MID-076: Web Direct Object Reference Authentication

Mitigation Tier: Foundational

Description

Every direct object reference should be governed by a session authentication and permission check [1]. Where possible, devices should use web application frameworks to host their files instead of hosting directly from their web servers. When using frameworks, ensure that all file formats associated with a web application (.txt, .pdf, documents) are being hosted on and managed by the framework [2].

Note: To learn more about session authentication, see MID-073 – Secure HTTP Session Management.

IEC 62443 4-2 Mappings

  • ECR 2.1 – Authorization enforcement RE (1) Authorization enforcement for all users (humans, software processes and devices)

References

[1] OWASP. “Insecure Direct Object Reference Prevention Cheat Sheet.” owasp.org. Accessed: Aug. 28, 2024. [Online.] Available: https://cheatsheetseries.owasp.org/cheatsheets/Insecure_Direct_Object_Reference_Prevention_Cheat_Sheet.html

[2] D. Tidmarsh. “Insecure Direct Object Reference (IDOR) Vulnerability Detection and Prevention.” eccouncil.org. Accessed: Aug. 28, 2024. [Online.] Available: https://www.eccouncil.org/cybersecurity-exchange/web-application-hacking/idor-vulnerability-detection-prevention/

diff --git a/mitigations/MID-077.html b/mitigations/MID-077.html new file mode 100644 index 0000000..0759a9f --- /dev/null +++ b/mitigations/MID-077.html @@ -0,0 +1 @@ + MID-077 | MITRE EMB3D™
Mitigation-page

MID-077: Secure Deserialization

Mitigation Tier: Foundational

Description

Serialized data should not be implicitly trusted. To check for the structure and contents of serialized data, that data needs to be deserialized, which could cause vulnerable code to run. For example, data that is serialized in a legitimately valid format may still include data that is unsafe and can lead to code injection. Input validation against the serialization format is insufficient defense in this case.

When its use cannot be avoided, serialized data’s authenticity should be checked prior to performing deserialization, such as signing it to verify the authenticity of the origin of the data. Additionally, if data needs to be serialized/deserialized, simpler structures and formats should be preferred that are easier to verify for safety prior to deserialization.

IEC 62443 4-2 Mappings

  • CR 3.5 - Input validation 

  • SAR / EDR / HDR / NDR 3.2 – Protection from malicious code

References

[1] OWASP. “Deserialization Cheat Sheet.” owasp.org. Accessed: Aug. 28, 2024. [Online.] Available: https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html

[2] B. Vermeer. “Serialization and deserialization in Java: explaining the Java deserialize vulnerability.” synk.io. Accessed: Aug. 28, 2024. [Online.] Available: https://snyk.io/blog/serialization-and-deserialization-in-java/

diff --git a/mitigations/MID-078.html b/mitigations/MID-078.html new file mode 100644 index 0000000..f2dcf39 --- /dev/null +++ b/mitigations/MID-078.html @@ -0,0 +1 @@ + MID-078 | MITRE EMB3D™
Mitigation-page

MID-078: HTTP Request/Response Validation

Mitigation Tier: Foundational

Description

HTTP requests should be checked for special characters (CR, LF, etc.) to ensure parsing logic errors do not occur, such as one request being broken into two separate requests. Additionally, HTTP requests should have enforceable and robust request-length checks.

Any request that fails these two checks should be rejected and the TCP connection facilitating it should be closed. By using these two validating mechanisms, devices can ensure that no extra text, such as the insertion of malicious requests, can be added to the legitimate request.

Note: HTTP/2 includes features such as length checking and should be used end-to-end wherever possible.

IEC 62443 4-2 Mappings

  • CR 3.5 - Input validation 

References

[1] PortSwigger. “HTTP request smuggling.” portswigger.net. Accessed: Aug. 28, 2024. [Online.] Available: https://portswigger.net/web-security/request-smuggling#how-to-prevent-http-request-smuggling-vulnerabilities

diff --git a/mitigations/MID-079.html b/mitigations/MID-079.html new file mode 100644 index 0000000..17ae533 --- /dev/null +++ b/mitigations/MID-079.html @@ -0,0 +1 @@ + MID-079 | MITRE EMB3D™
Mitigation-page

MID-079: Remove Undocumented Network Functionality

Mitigation Tier: Foundational

Description

All network protocol functionality, including function codes, should be documented and available to the owners/operators of a device. The presence of undocumented functionality prevents device operators from adequately taking precautions and monitoring network behavior based on a device’s potential threat landscape. Without proper documentation, device users have no knowledge of what function codes are going over their network, leaving them exposed to potential threats and preventing them from implementing security features on their network, such as a message-level firewalls.

Documentation should include (i) describing the full set of function codes or message types that the device produces or accepts, (ii) functions that affect device management or can cause configuration changes, and (iii) authentication and encryption modes and mechanisms it is capable of. Any functions that are not meant for use in a production environment should be removed. The device operator should have full knowledge of any network-accessible function that can affect the behavior or performance of the device.

IEC 62443 4-2 Mappings

  • CR 7.7 – Least functionality

References

diff --git a/mitigations/MID-080.html b/mitigations/MID-080.html new file mode 100644 index 0000000..79774c2 --- /dev/null +++ b/mitigations/MID-080.html @@ -0,0 +1 @@ + MID-080 | MITRE EMB3D™
Mitigation-page

MID-080: Network Request Processing Limits

Mitigation Tier: Foundational

Description

A device can be susceptible to denial-of-service when its ability to process network messages and requests is overwhelmed by a threat actor, causing device resources (e.g., processing, memory, bandwidth, ports, etc.) to be exhausted and leading it to become unresponsive. The effect is magnified when asymmetries exist allowing small messages, which are inexpensive for an attacker to generate, lead to expensive response processing on the device.

Technical mechanisms to implement this mitigation can include timeout functions that will return/cancel request processing after a set amount of time after the request is made, limiting the overall bandwidth that a device will process, constraining the number of active connections a device will support, instituting request queue management and prioritization, or separating request handler code paths so that resource limits can be imposed on them. These mechanisms can work together to ensure that the network protocol handlers and services remain responsive, and that no one handler, or source of traffic, can monopolize all system processing resources.

If protocol designs allow for it, expensive operations should not be performed as a result of unauthenticated or pre-authentication messages (MID-034 - Authenticate Network Traffic), constraining threat actors’ access to easily access the most exhaustible resources.

Note: Device creators should take care to ensure that the processing limits do not become the target of denial-of-service attacks themselves. For example, if a device only allows one connection at a time, threat actors may try to occupy that connection, preventing legitimate users from communicating.

Limitation: Device-level mitigations cannot cope with flooding attacks that simply overwhelm the bandwidth capacity of the device’s network link. In this case, upstream network devices must impose appropriate rate limits.

IEC 62443 4-2 Mappings

  • CR 7.1 – Denial of service protection

  • CR 7.2 – Resource management

References

[1] Cloudflare. “What is Rate limiting? | Rate limiting and bots.” cloudflare.com. Accessed: Aug. 28, 2024. [Online.] Available: https://www.cloudflare.com/learning/bots/what-is-rate-limiting/

[2] MITRE. “Limit Access to Resource Over Network.” mitre.org. Accessed: Aug. 28, 2024. [Online.] Available: https://attack.mitre.org/mitigations/M1035/

diff --git a/mitigations/MID-081.html b/mitigations/MID-081.html new file mode 100644 index 0000000..59d5467 --- /dev/null +++ b/mitigations/MID-081.html @@ -0,0 +1 @@ + MID-081 | MITRE EMB3D™
Mitigation-page

MID-081: Secure Network Tunnels

Mitigation Tier: Intermediate

Description

When a protocol itself does not support authentication, encryption, and/or message integrity checking, secure network tunnels can be implemented to provide communications with those security features. Secure network tunnels are best used when devices need to support a specific insecure protocol, either for functionality or to support legacy devices, and cannot have that protocol replaced by a protocol that is more secure by default.

Secure network tunnels will wrap a protocol in a more secure protocol (e.g., TLS, IPsec, SSH tunneling, etc.) that provides security features such as encryption, authentication, and message integrity checking. These added features make sending spoofed, illegitimate, or replayed messages more difficult.

To enable secure network tunnels, both the sending and receiving device must be compatible with the secure tunnel protocol and the underlying wrapped protocol. If the devices themselves cannot be made compatible with the wrapping protocol, a dedicated gateway device can be placed between the incompatible device and upstream network to implement the tunnel. Therefore, the downstream device may continue to use the insecure underlying protocol, while it is shielded within the tunnel while traversing intervening networks.

IEC 62443 4-2 Mappings

  • CR 4.1 – Information confidentiality

  • CR 3.1 – Communication integrity - RE (1) Communication authentication

References

[1] W. Floyd. “The TLS (Transport Layer Security) Protocol in Secure Modbus/TCP.” control.com. Accessed: Aug. 28, 2024. [Online.] Available: https://control.com/technical-articles/tls-transport-layer-security-protocol-secure-modbus-TCP/

diff --git a/mitigations/MID-082.html b/mitigations/MID-082.html new file mode 100644 index 0000000..9caa7bf --- /dev/null +++ b/mitigations/MID-082.html @@ -0,0 +1 @@ + MID-082 | MITRE EMB3D™
Mitigation-page

MID-082: Post-quantum Cryptography

Mitigation Tier: Intermediate

Description

Post-quantum cryptography refers to a class of cryptographic algorithms that are resistant to attacks by quantum computers, which could otherwise undermine the non-quantum-resistant algorithms’ cryptographic guarantees (e.g., RSA, Diffie-Hellman, ECC, etc.). By using these post-quantum algorithms, devices can make their communications more secure against attacks by future quantum computers which may enter practical use during the expected lifetime of the device.

Limitations: Current post-quantum cryptographic schemes and algorithms are still emerging [2][3] and may require some time before implementations become widely available in cryptographic libraries (see MID-027) and hardware modules (MID-060).

IEC 62443 4-2 Mappings

  • CR 4.3 – Use of cryptography

References

[1] L. Chen, S. Jordan, Y. Liu, D. Moody, R. Peralta, R. Perlner, and D. Smith-Tone. “NIST IR 8105 - Report on Post-Quantum Cryptography.” nist.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://nvlpubs.nist.gov/nistpubs/ir/2016/NIST.IR.8105.pdf

[2] NIST. “NIST Announces First Four Quantum-Resistant Cryptographic Algorithms.” nist.gov. Accessed: Aug. 28, 2024. [Online.] Available: https://www.nist.gov/news-events/news/2022/07/nist-announces-first-four-quantum-resistant-cryptographic-algorithms

[3] NIST. “NIST Releases First 3 Finalized Post-Quantum Encryption Standards.” nist.gov. Accessed: Sep. 5, 2024. [Online.] Available: https://www.nist.gov/news-events/news/2024/08/nist-releases-first-3-finalized-post-quantum-encryption-standards

diff --git a/mitigations/MID-083.html b/mitigations/MID-083.html new file mode 100644 index 0000000..7726ee5 --- /dev/null +++ b/mitigations/MID-083.html @@ -0,0 +1 @@ + MID-083 | MITRE EMB3D™
Mitigation-page

MID-083: Network Firewall/Access Control List

Mitigation Tier: Foundational

Description

If a device has routing capabilities, the device should have a firewall and access control list (ACL) present to prevent unintended network connections from being made and maintained. Firewalls and ACLs, when properly configured, can be used to drop packets and block undesired data flows.

Note: Any change to this firewall and ACL rules should be logged for future audits (MID-017 - Security-relevant Auditing and Logging) and authenticated to prevent threat actor tampering (MID-018 - Require Authentication for Privileged Functions).

IEC 62443 4-2 Mappings

  • CR 5.1 – Network segmentation

References

diff --git a/mitigations/foundational.html b/mitigations/foundational.html new file mode 100644 index 0000000..2c7099b --- /dev/null +++ b/mitigations/foundational.html @@ -0,0 +1 @@ + Foundational | MITRE EMB3D™
Mitigation-page

Foundational Mitigations

  • MID-001: Software Only Bootloader Authentication
  • MID-004: Memory Hardening Against Code Injection
  • MID-010: No Runtime OS Driver Load
  • MID-011: OS Driver/Peripheral Authentication
  • MID-012: OS-based Access Control Mechanisms
  • MID-013: Process and Thread Memory Segmentation
  • MID-016: Least Functionality
  • MID-017: Security-relevant Auditing and Logging
  • MID-018: Require Authentication for Privileged Functions
  • MID-021: VM Hardening
  • MID-026: Secure Firmware Update
  • MID-027: Validated Cryptographic Libraries
  • MID-030: Firmware Rollback Protections
  • MID-031: Physical Presence Validation
  • MID-032: System Service Availability Manager
  • MID-034: Authenticate Network Messages
  • MID-035: Encrypt Network Traffic
  • MID-036: Cryptographic Nonces
  • MID-037: Network Timestamps
  • MID-038: Authenticate for Administrative Actions
  • MID-039: Restrict Software Diagnostic Functions
  • MID-041: Cryptographically Signed Vendor-supplied Programs
  • MID-042: Device Checks Consistency Between Binary/Running Code and Textual Code
  • MID-043: Manage Default Login Credentials
  • MID-044: Strong Cryptographic Algorithms and Protocols
  • MID-046: Authentication Attempts Timeouts and Lockouts
  • MID-047: Sufficient Entropy for Keys
  • MID-049: Secure Password Storage
  • MID-050: Operating System Defenses Against Microarchitecture Feature Side Channels
  • MID-051: Disallow User-Provided Code
  • MID-052: Physically Protect Circuit Board Traces and Chip Pins
  • MID-054: Encrypt and Authenticate Non-volatile Storage Contents
  • MID-056: Allow Device Administrators to Disable Removable Storage Support
  • MID-057: Disable Physical Development and Debugging Ports
  • MID-058: Engage Hardware Readout Protection Mechanisms
  • MID-071: Sanitized and Escaped User Data for Web Applications
  • MID-072: Parameterized SQL Queries
  • MID-073: Secure HTTP Session Management
  • MID-074: Cross Site Request Forgery Mitigations
  • MID-075: Path Traversal Protections
  • MID-076: Web Direct Object Reference Authentication
  • MID-077: Secure Deserialization
  • MID-078: HTTP Request/Response Validation
  • MID-079: Remove Undocumented Network Functionality
  • MID-080: Network Request Processing Limits
  • MID-083: Network Firewall/Access Control List
diff --git a/mitigations/index.html b/mitigations/index.html new file mode 100644 index 0000000..7fc74c8 --- /dev/null +++ b/mitigations/index.html @@ -0,0 +1 @@ + Mitigations | MITRE EMB3D™
Mitigations

EMB3D™ Mitigations

diff --git a/mitigations/intermediate.html b/mitigations/intermediate.html new file mode 100644 index 0000000..e30fa9b --- /dev/null +++ b/mitigations/intermediate.html @@ -0,0 +1 @@ + Intermediate | MITRE EMB3D™
Mitigation-page

Intermediate Mitigations

  • MID-002: Hardware-backed Bootloader Authentication
  • MID-005: Memory Safe Programming Languages
  • MID-007: Control Flow Manipulation Protections
  • MID-008: Decidable Protocols and Parsers
  • MID-009: Operating System-based Runtime Integrity Check
  • MID-014: Sandboxing
  • MID-015: Containerization
  • MID-019: ROP Gadget Minimization
  • MID-020: Pointer Authentication
  • MID-022: Segmentation Through Hardware-assisted VMs
  • MID-023: Hypervisor Hardening
  • MID-028: Hardware-backed Key Storage
  • MID-029: Hardware Root of Trust
  • MID-033: Unique Factory Preinstalled Secret Keys
  • MID-040: Cryptographically Signed Custom Programs
  • MID-045: Multi-factor Authentication
  • MID-048: Hardware Random Number Generator
  • MID-053: Use IOMMU to Implement DMA Access Controls
  • MID-055: Use Highly Integrated Processors to Avoid Physical Attacks
  • MID-059: Software Patterns for Side Channel Resistance
  • MID-060: Dedicated Hardware Cryptographic Modules
  • MID-061: Use Separate Processors for Isolation
  • MID-063: Software Mitigations for Fault Injection
  • MID-064: Store Critical Code and Data in On-Chip Memory
  • MID-065: RAM Encryption
  • MID-066: Implement Redundant Processing and Memory
  • MID-067: Implement DRAM RowHammer-resistant DRAM and Memory Controllers
  • MID-068: Data Bus Encryption and Message Authentication
  • MID-069: Electrical Fault Protection
  • MID-081: Secure Network Tunnels
  • MID-082: Post-quantum Cryptography
diff --git a/mitigations/leading.html b/mitigations/leading.html new file mode 100644 index 0000000..cb48e77 --- /dev/null +++ b/mitigations/leading.html @@ -0,0 +1 @@ + Leading | MITRE EMB3D™
Mitigation-page

Leading Mitigations

  • MID-003: Periodic/Continuous Integrity Measurement and Remote Attestation
  • MID-006: Driver Memory Isolation
  • MID-024: Encrypted VM Isolation
  • MID-025: End-of-Life Management Features
  • MID-062: Hardware Mitigations for Fault Injection
  • MID-070: Peripheral Component Authentication
diff --git a/properties-list/index.html b/properties-list/index.html index df11bca..b9192fc 100644 --- a/properties-list/index.html +++ b/properties-list/index.html @@ -1 +1 @@ - Properties List | MITRE EMB3D™
Properties List

EMB3D™ Device Properties

Hardware
Device Properties Threats
PID-11 Device includes a microprocessor
TID-101 Power Consumption Analysis Side Channel
TID-102 Electromagnetic Analysis Side Channel
TID-103 Cache Timing Analysis Side Channel
TID-105 Hardware Fault Injection – Control Flow Modification
PID-121 Device includes buses for external memory/storage
TID-106 Data Bus Interception
PID-122 Device includes discrete chips/devices that have access to the same physical memory
TID-107 Unauthorized Direct Memory Access (DMA)
PID-123 Device includes ROM, VRAM, or removable Storage
TID-108 ROM/NVRAM Data Extraction or Modification
PID-124 Device includes Random Access Memory (RAM) chips
TID-109 RAM Chip Contents Readout
PID-1241 Device includes DDR DRAM
TID-110 Hardware Fault Injection – Data Manipulation
PID-13 Device includes peripheral chips and integrated data buses
TID-113 Unverified Peripheral Firmware Loaded
TID-114 Peripheral Data Bus Interception
PID-14 Device includes external peripheral interconnects (e.g., USB, Serial)
TID-111 Untrusted External Storage
TID-118 Weak Peripheral Port Electrical Damage Protection
PID-15 Device includes a hardware access port (e.g., UART, JTAG)
TID-115 Firmware/Data Extraction via Hardware Interface
TID-116 Latent Privileged Access Port
TID-119 Latent Hardware Debug Port Allows Memory/Code Manipulation
System Software
Device Properties Threats
PID-21 Device includes a bootloader
TID-201 Inadequate Bootloader Protection and Verification
PID-22 Device includes a debugging capabilities
TID-224 Excessive Access via Software Diagnostic Features
PID-23 Device includes OS/kernel
TID-202 Exploitable System Network Stack Component
TID-218 Operating System Susceptible to Rootkit
PID-231 Device includes an operating system that uses drivers/modules that can be loaded
TID-203 Malicious OS Kernel Driver/Module Installable
PID-2321 Device lacks an access enforcement/privilege mechanism
TID-204 Untrusted Programs Can Access Privileged OS Functions
PID-23221 Device includes and enforces OS user accounts
TID-205 Existing OS Tools Maliciously Used for Device Manipulation
TID-219 OS/Kernel Privilege Escalation
PID-23222 Device includes a memory management model, including protections of memory access (read-only/, executable, writable)
TID-206 Memory Management Protections Subverted
TID-223 System Susceptible to RAM Scraping
PID-241 Device includes containers
TID-207 Container Escape
PID-242 Device includes hypervisor
TID-208 Virtual Machine Escape
TID-209 Host Can Manipulate Guest Virtual Machines
PID-251 Root of Trust is physically accessible or is not immutable
TID-214 Secrets Extracted from Device Root of Trust
PID-252 Root of Trust is immutable
TID-220 Unpatchable Hardware Root of Trust
PID-26 Device lacks firmware/software update support
TID-210 Device Vulnerabilities Unpatchable
PID-271 Device has firmware or software that is not cryptographically checked for integrity validation
TID-211 Device Allows Unauthenticated Firmware Installation
PID-272 Device includes cryptographic firmware/software integrity protection mechanisms
TID-330 Cryptographic Timing Side-Channel
TID-214 Secrets Extracted from Device Root of Trust
PID-2721 Device includes a shared key for firmware integrity validation
TID-212 FW/SW Update Integrity Shared Secrets Extraction
PID-2722 Device includes digitally signed firmware (with private key)
TID-213 Faulty FW/SW Update Integrity Verification
PID-273 Device has unencrypted firmware updates
TID-215 Unencrypted SW/FW Updates
PID-274 Device includes user firmware/software version selection during updates
TID-216 Firmware Update Rollbacks Allowed
PID-275 Device includes remotely-initiated firmware/software updates
TID-217 Remotely Initiated Updates Can Cause DoS
Application Software
Device Properties Threats
PID-31 Application-level software is present and running on the device
TID-301 Applications Binaries Modified
PID-311 Device includes the usage of a web/HTTP applications
TID-319 Cross Site Scripting (XSS)
TID-320 SQL Injection
TID-321 HTTP Application Session Hijacking
TID-322 Cross Site Request Forgery (CSRF)
TID-323 HTTP Path Traversal
TID-324 HTTP Direct Object Reference
TID-325 HTTP Injection/Response Splitting
PID-3121 Device includes support for object oriented programming languages(e.g., Java, Python, PHP, C++)
TID-326 Insecure Deserialization
PID-3122 Device includes support for manual memory management programming languages (e.g. C, C++)
TID-327 Out of Bounds Memory Access
PID-32 Device includes the ability to deploy custom or external programs (e.g., ladder logic, compiled binaries)
TID-302 Install Untrusted Application
PID-321 Device includes ability to deploy custom programs from engineering software or IDE
TID-303 Excessive Trust in Offboard Management/IDE Software
PID-322 Device includes a program runtime environment for custom or external programs
TID-304 Manipulate Runtime Environment
PID-3231 Device includes ability to run custom/external programs as native binary without a confined/restricted environment
TID-305 Program Executes Dangerous System Calls
PID-3232 Device includes ability to run custom/external programs/processes through an execution sandboxed environment
TID-306 Sandboxed Environments Escaped
PID-324 Device includes support for "program uploads" to retrieve programs from the device from an engineering workstation
TID-307 Device Code Representations Inconsistent
TID-308 Code Overwritten to Avoid Detection
TID-309 Device Exploits Engineering Workstation
PID-331 Device includes unauthenticated services
TID-310 Remotely Accessible Unauthenticated Services
PID-332 Device includes authenticated services
TID-328 Hardcoded Credentials
TID-311 Default Credentials
TID-312 Credential Change Mechanism Can Be Abused
TID-313 Unauthenticated Session Changes Credential
PID-3321 Device includes passwords to authenticate the users
TID-314 Passwords Can Be Guessed Using Brute-Force Attempts
TID-329 Improper Password Storage
TID-315 Password Retrieval Mechanism Abused
PID-3322 Device includes cryptographic mechanism to authenticate users and sessions
TID-316 Incorrect Certificate Verification Allows Authentication Bypass
TID-317 Predictable Cryptographic Key
TID-411 Weak/Insecure Cryptographic Protocol
TID-330 Cryptographic Timing Side-Channel
TID-318 Insecure Cryptographic Implementation
Networking
Device Properties Threats
PID-41 Device exposes remote network services
TID-401 Undocumented Protocol Features
TID-310 Remotely Accessible Unauthenticated Services
TID-222 Critical System Service May Be Disabled
TID-404 Remotely Triggerable Deadlock/DoS
TID-405 Network Stack Resource Exhaustion
TID-407 Missing Message Replay Protection
PID-4111 Device lacks protocol support for message authentication
TID-406 Unauthorized Messages or Connections
PID-4112 Device lacks protocol support for message encryption
TID-408 Unencrypted Sensitive Data Communication
PID-4113 Device includes cryptographic functions for sensitive data, such as encryption or authentication
TID-318 Insecure Cryptographic Implementation
TID-221 Authentication Bypass By Message Replay
TID-410 Cryptographic Protocol Side Channel
TID-316 Incorrect Certificate Verification Allows Authentication Bypass
TID-317 Predictable Cryptographic Key
TID-330 Cryptographic Timing Side-Channel
TID-411 Weak/Insecure Cryptographic Protocol
PID-42 Device includes procedure to forward or route network messages
TID-412 Network Routing Capability Abuse

© - The MITRE Corporation. All Rights Reserved.
Privacy Policy | MITRE


MITRE is a registered trademark of The MITRE Corporation.
Material on this site may be copied and distributed with permission only.
Approved for public release; Distribution unlimited. Public release case number: 24-1429.

Using the Chirpy theme for Jekyll.

Cookie Preferences
+ Properties List | MITRE EMB3D™
Properties List

EMB3D™ Device Properties Download CSV

Hardware
Device Properties Threats
PID-11 Device includes a microprocessor
TID-101 Power Consumption Analysis Side Channel
TID-102 Electromagnetic Analysis Side Channel
TID-103 Cache Timing Analysis Side Channel
TID-105 Hardware Fault Injection – Control Flow Modification
PID-121 Device includes buses for external memory/storage
TID-106 Data Bus Interception
PID-122 Device includes discrete chips/devices that have access to the same physical memory
TID-107 Unauthorized Direct Memory Access (DMA)
PID-123 Device includes ROM, VRAM, or removable Storage
TID-108 ROM/NVRAM Data Extraction or Modification
PID-124 Device includes Random Access Memory (RAM) chips
TID-109 RAM Chip Contents Readout
PID-1241 Device includes DDR DRAM
TID-110 Hardware Fault Injection – Data Manipulation
PID-13 Device includes peripheral chips and integrated data buses
TID-113 Unverified Peripheral Firmware Loaded
TID-114 Peripheral Data Bus Interception
PID-14 Device includes external peripheral interconnects (e.g., USB, Serial)
TID-111 Untrusted External Storage
TID-118 Weak Peripheral Port Electrical Damage Protection
PID-15 Device includes a hardware access port (e.g., UART, JTAG)
TID-115 Firmware/Data Extraction via Hardware Interface
TID-116 Latent Privileged Access Port
TID-119 Latent Hardware Debug Port Allows Memory/Code Manipulation
System Software
Device Properties Threats
PID-21 Device includes a bootloader
TID-201 Inadequate Bootloader Protection and Verification
PID-22 Device includes a debugging capabilities
TID-224 Excessive Access via Software Diagnostic Features
PID-23 Device includes OS/kernel
TID-202 Exploitable System Network Stack Component
TID-218 Operating System Susceptible to Rootkit
PID-231 Device includes an operating system that uses drivers/modules that can be loaded
TID-203 Malicious OS Kernel Driver/Module Installable
PID-2321 Device lacks an access enforcement/privilege mechanism
TID-204 Untrusted Programs Can Access Privileged OS Functions
PID-23221 Device includes and enforces OS user accounts
TID-205 Existing OS Tools Maliciously Used for Device Manipulation
TID-219 OS/Kernel Privilege Escalation
PID-23222 Device includes a memory management model, including protections of memory access (read-only/, executable, writable)
TID-206 Memory Management Protections Subverted
TID-223 System Susceptible to RAM Scraping
PID-241 Device includes containers
TID-207 Container Escape
PID-242 Device includes hypervisor
TID-208 Virtual Machine Escape
TID-209 Host Can Manipulate Guest Virtual Machines
PID-251 Root of Trust is physically accessible or is not immutable
TID-214 Secrets Extracted from Device Root of Trust
PID-252 Root of Trust is immutable
TID-220 Unpatchable Hardware Root of Trust
PID-26 Device lacks firmware/software update support
TID-210 Device Vulnerabilities Unpatchable
PID-271 Device has firmware or software that is not cryptographically checked for integrity validation
TID-211 Device Allows Unauthenticated Firmware Installation
PID-272 Device includes cryptographic firmware/software integrity protection mechanisms
TID-214 Secrets Extracted from Device Root of Trust
TID-330 Cryptographic Timing Side-Channel
PID-2721 Device includes a shared key for firmware integrity validation
TID-212 FW/SW Update Integrity Shared Secrets Extraction
PID-2722 Device includes digitally signed firmware (with private key)
TID-213 Faulty FW/SW Update Integrity Verification
PID-273 Device has unencrypted firmware updates
TID-215 Unencrypted SW/FW Updates
PID-274 Device includes user firmware/software version selection during updates
TID-216 Firmware Update Rollbacks Allowed
PID-275 Device includes remotely-initiated firmware/software updates
TID-217 Remotely Initiated Updates Can Cause DoS
Application Software
Device Properties Threats
PID-31 Application-level software is present and running on the device
TID-301 Applications Binaries Modified
PID-311 Device includes the usage of a web/HTTP applications
TID-319 Cross Site Scripting (XSS)
TID-320 SQL Injection
TID-321 HTTP Application Session Hijacking
TID-322 Cross Site Request Forgery (CSRF)
TID-323 HTTP Path Traversal
TID-324 HTTP Direct Object Reference
TID-325 HTTP Injection/Response Splitting
PID-3121 Device includes support for object oriented programming languages(e.g., Java, Python, PHP, C++)
TID-326 Insecure Deserialization
PID-3122 Device includes support for manual memory management programming languages (e.g. C, C++)
TID-327 Out of Bounds Memory Access
PID-32 Device includes the ability to deploy custom or external programs (e.g., ladder logic, compiled binaries)
TID-302 Install Untrusted Application
PID-321 Device includes ability to deploy custom programs from engineering software or IDE
TID-303 Excessive Trust in Offboard Management/IDE Software
PID-322 Device includes a program runtime environment for custom or external programs
TID-304 Manipulate Runtime Environment
PID-3231 Device includes ability to run custom/external programs as native binary without a confined/restricted environment
TID-305 Program Executes Dangerous System Calls
PID-3232 Device includes ability to run custom/external programs/processes through an execution sandboxed environment
TID-306 Sandboxed Environments Escaped
PID-324 Device includes support for "program uploads" to retrieve programs from the device from an engineering workstation
TID-307 Device Code Representations Inconsistent
TID-308 Code Overwritten to Avoid Detection
TID-309 Device Exploits Engineering Workstation
PID-331 Device includes unauthenticated services
TID-310 Remotely Accessible Unauthenticated Services
PID-332 Device includes authenticated services
TID-311 Default Credentials
TID-312 Credential Change Mechanism Can Be Abused
TID-313 Unauthenticated Session Changes Credential
TID-328 Hardcoded Credentials
PID-3321 Device includes passwords to authenticate the users
TID-314 Passwords Can Be Guessed Using Brute-Force Attempts
TID-315 Password Retrieval Mechanism Abused
TID-329 Improper Password Storage
PID-3322 Device includes cryptographic mechanism to authenticate users and sessions
TID-316 Incorrect Certificate Verification Allows Authentication Bypass
TID-317 Predictable Cryptographic Key
TID-318 Insecure Cryptographic Implementation
TID-330 Cryptographic Timing Side-Channel
TID-411 Weak/Insecure Cryptographic Protocol
Networking
Device Properties Threats
PID-41 Device exposes remote network services
TID-222 Critical System Service May Be Disabled
TID-310 Remotely Accessible Unauthenticated Services
TID-401 Undocumented Protocol Features
TID-404 Remotely Triggerable Deadlock/DoS
TID-405 Network Stack Resource Exhaustion
TID-407 Missing Message Replay Protection
PID-4111 Device lacks protocol support for message authentication
TID-406 Unauthorized Messages or Connections
PID-4112 Device lacks protocol support for message encryption
TID-408 Unencrypted Sensitive Data Communication
PID-4113 Device includes cryptographic functions for sensitive data, such as encryption or authentication
TID-221 Authentication Bypass By Message Replay
TID-316 Incorrect Certificate Verification Allows Authentication Bypass
TID-317 Predictable Cryptographic Key
TID-318 Insecure Cryptographic Implementation
TID-330 Cryptographic Timing Side-Channel
TID-410 Cryptographic Protocol Side Channel
TID-411 Weak/Insecure Cryptographic Protocol
PID-42 Device includes procedure to forward or route network messages
TID-412 Network Routing Capability Abuse
diff --git a/properties-mapper/index.html b/properties-mapper/index.html index 81c6193..824b5cc 100644 --- a/properties-mapper/index.html +++ b/properties-mapper/index.html @@ -1 +1 @@ - Properties Mapper | MITRE EMB3D™
Properties Mapper

EMB3D™ Properties to Threats Mapping

The properties tool encodes the mapping from Device Properties to EMB3D Threats. Start by selecting the properties relevant to the device you are mapping from using the checkboxes in each of the four categories below. As you select properties, additional sub-properties may be uncovered, and the Applicable Threats list is populated with entries that may be relevant to your device. When finished, you may save a copy of the threats report by clicking the 'Download CSV' button.

Properties List

Device Properties:


Hardware:







System Software:









Application Software:





Networking:



Applicable Threats:

Download CSV

© - The MITRE Corporation. All Rights Reserved.
Privacy Policy | MITRE


MITRE is a registered trademark of The MITRE Corporation.
Material on this site may be copied and distributed with permission only.
Approved for public release; Distribution unlimited. Public release case number: 24-1429.

Using the Chirpy theme for Jekyll.

Cookie Preferences
+ Properties Mapper | MITRE EMB3D™
Properties Mapper

EMB3D™ Properties to Threats Mapping

The properties tool encodes the mapping from Device Properties to EMB3D Threats. Start by selecting the properties relevant to the device you are mapping from using the checkboxes in each of the four categories below. As you select properties, additional sub-properties may be uncovered, and the Applicable Threats list is populated with entries that may be relevant to your device. When finished, you may save a copy of the threats report by clicking the 'Download CSV' button.

Properties List

Device Properties:


Hardware:







System Software:









Application Software:





Networking:



Applicable Threats:

Download CSV
diff --git a/propertyMapper.js b/propertyMapper.js new file mode 100644 index 0000000..cf0627a --- /dev/null +++ b/propertyMapper.js @@ -0,0 +1,290 @@ +var threatData; +var allThreats; +var rows = []; +var idFromUrl; +var urlParams = new URLSearchParams(window.location.search); +var categoryList = []; +var selectedThreats = []; + +//Load the json file that contains the threat and device properties mapping +fetch("../_data/properties_threat_mappings.json") + .then((res) => { + if (!res.ok) { + throw new Error(`HTTP error! Status: ${res.status}`); + } + return res.json(); + }) + .then((json) => { + threatData = json; + if (urlParams.size > 0) { + // get clicked id from url + idFromUrl = urlParams.get("id"); + var propID = document.getElementById(idFromUrl); + propID.checked = true; + id_found = false; + // below code is run if the parent property is selected + for (let i = 0; i < threatData.properties.length; i++) { + if ( + threatData.properties[i].isparentProp && + threatData.properties[i].id === idFromUrl + ) { + updateList(threatData.properties[i].id); + id_found = true; + } + } + // below code is run if any of the sub properties is selected + if (!id_found) { + has_parent(idFromUrl); + } + } + }); + +fetch("../_data/threats.json") + .then((res) => { + if (!res.ok) { + throw new Error(`HTTP error! Status: ${res.status}`); + } + return res.json(); + }) + .then((json) => { + allThreats = json; + createThreatColumn(); + }); + +// Displays threats depending on device property checkbox selected +function updatePropertiesNew() { + var selectedProperties = []; + var propertiesDiv = document.getElementById("props"); + var propertiesDiv_inner = ""; + selectedThreats = []; + rows = []; + for (let i = 0; i < threatData.properties.length; i++) { + var propID = threatData.properties[i].id; + var propText = threatData.properties[i].text; + if (document.getElementById(propID).checked) { + selectedProperties = selectedProperties.concat( + threatData.properties[i]["threats"] + ); + if (selectedProperties.length != 0) { + propertiesDiv_inner += "
" + propID + ""; + for (var j = 0; j < selectedProperties.length; j++) { + selectedThreats.push(selectedProperties[j].id); + var tid = selectedProperties[j].id; + var tdesc = selectedProperties[j].text; + propertiesDiv_inner += + "
  • " + + tid + + " - " + + tdesc + + "
  • "; + rows.push({ tid: tid, tdesc: tdesc, pid: propID, pdesc: propText }); + } + } + } + + selectedProperties = []; + } + propertiesDiv.innerHTML = ""; +} + +function createThreatColumn() { + dict = []; + var categoryDict = {}; + for (let threat of allThreats.threats) { + category = threat.category; + if (!(category in categoryDict)) { + categoryDict[category] = []; + } + categoryDict[category].push({ + text: threat.id + " - " + threat.text, + hyperlink: "https://emb3d.mitre.org/threats/" + threat.id + ".html" + }); + } + for (let category in categoryDict) { + categoryList.push({ id: category, threats: categoryDict[category] }); + } +} + +// Downloads the current device property-threat selection as a CSV +async function downloadCSV() { + let columnNames = []; + for (let i = 65; i <= 90; i++) { + columnNames.push(String.fromCharCode(i)); + } + const workbook = new ExcelJS.Workbook(); + const threatSheet = workbook.addWorksheet("Selected Threats"); + var columnIncrement = 0; + for (let i = 0; i < categoryList.length; i++) { + threatList = categoryList[i].threats; + threatList.unshift({ + text: categoryList[i].id, + hyperlink: + "https://emb3d.mitre.org/threats/" + + categoryList[i].id.replace(/\s+/g, "-").toLowerCase() + + ".html", + }); + threatSheet.getColumn(columnNames[columnIncrement]).values = threatList; + columnIncrement = columnIncrement + 1; + } + + // highlight the invoked threats + threatSheet.eachRow((row) => { + row.eachCell((cell) => { + if (selectedThreats.includes(cell.value.text.substring(0, 7))) { + cell.fill = { + type: "pattern", + pattern: "solid", + fgColor: { argb: "CC66FF" } + }; + } + cell.font = { underline: true }; + }); + }); + + // sheet formatting + threatSheet.getColumn(1).width = 58; + threatSheet.getColumn(2).width = 54; + threatSheet.getColumn(3).width = 57; + threatSheet.getColumn(4).width = 43; + threatSheet.getCell('A1').alignment = { vertical: 'middle', horizontal: 'center' }; + threatSheet.getCell('A1').font = { name: 'Arial Black', family: 2, size: 13, bold: true }; + threatSheet.getCell('B1').alignment = { vertical: 'middle', horizontal: 'center' }; + threatSheet.getCell('B1').font = { name: 'Arial Black', family: 2, size: 13, bold: true }; + threatSheet.getCell('C1').alignment = { vertical: 'middle', horizontal: 'center' }; + threatSheet.getCell('C1').font = { name: 'Arial Black', family: 2, size: 13, bold: true }; + threatSheet.getCell('D1').alignment = { vertical: 'middle', horizontal: 'center' }; + threatSheet.getCell('D1').font = { name: 'Arial Black', family: 2, size: 13, bold: true }; + + + const propertySheet = workbook.addWorksheet("Selected Properties"); + propertySheet.columns = [ + { header: "Threat ID", key: "tid", width: 10 }, + { header: "Threat Description", key: "tdesc", width: 51 }, + { header: "Device Property ID", key: "pid", width: 18 }, + { header: "Device Property Description", key: "pdesc", width: 95 } + ]; + rows.forEach(function (rowArray) { + propertySheet.addRow({ + tid: { + text: rowArray.tid, + hyperlink: "https://emb3d.mitre.org/threats/" + rowArray.tid + ".html" + }, + tdesc: rowArray.tdesc, + pid: { + text: rowArray.pid, + hyperlink: + "https://emb3d.mitre.org/properties-mapper/?id=" + rowArray.pid + }, + pdesc: rowArray.pdesc + }); + }); + let websiteColumn = propertySheet.getColumn("tid"); + // Iterate over the cells in the column + websiteColumn.eachCell((cell, rowNumber) => { + // Skip the header row + if (rowNumber === 1) return; + // Set the font style to underline + cell.font = { underline: true }; + }); + let propertiesColumn = propertySheet.getColumn("pid"); + propertiesColumn.eachCell((cell, rowNumber) => { + // Skip the header row + if (rowNumber === 1) return; + // Set the font style to underline + cell.font = { underline: true }; + }); + + // sheet formatting + propertySheet.getCell('A1').font = { size: 13, bold: true} + propertySheet.getCell('B1').font = { size: 13, bold: true} + propertySheet.getCell('C1').font = { size: 13, bold: true} + propertySheet.getCell('D1').font = { size: 13, bold: true} + + const buffer = await workbook.xlsx.writeBuffer(); + // Create a blob from the buffer and create a link to download it + const blob = new Blob([buffer], { + type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + }); + const url = URL.createObjectURL(blob); + const a = document.createElement("a"); + a.href = url; + a.download = "heat_map.xlsx"; + a.click(); +} + +// Uses the updateList_helper() function to accurately hide/display sub properties until their parent property is checked/unchecked +function updateList(parent) { + for (let i = 0; i < threatData.properties.length; i++) { + if ( + parent == threatData.properties[i].id && + threatData.properties[i].subProps.length != 0 + ) { + has_subprop = true; + updateList_helper(parent, threatData.properties[i].subProps, has_subprop); + } + if (threatData.properties[i].subProps.length == 0) { + has_subprop = false; + updateList_helper(parent, threatData.properties[i].subProps, has_subprop); + } + } +} + +// this function is run when there is a property id in the url +// recursively checks the parent checkbox so that the checkboxes are accurately selected and displayed +function has_parent(child) { + for (let i = 0; i < threatData.properties.length; i++) { + for (let j = 0; j < threatData.properties[i].subProps.length; j++) { + if (threatData.properties[i].subProps[j] === child) { + const propID = document.getElementById(threatData.properties[i].id); + if (propID) { + propID.checked = true; + // Recursively check the parent + has_parent(threatData.properties[i].id); + updateList(threatData.properties[i].id); + } + return; // Exit the loop + } + } + } +} + +// Helps the updateList() function to accurately hide/display sub properties until their parent property is checked/unchecked +// Depending on the selction, the updatePropertiesNew() function displays the corresponding threats +function updateList_helper(parent, child, has_subprop) { + // if id is present in url then run below code + if (urlParams.size > 0) { + has_parent(parent); + has_subprop = true; + urlParams = []; + } + if (has_subprop) { + for (let i = 0; i < child.length; i++) { + const el = document.getElementById(parent); + parent_margin = document.getElementById(parent).style.marginLeft; + if (parent_margin == "") { + parent_margin = "0px"; + } + if (el.checked) { + className = document.getElementsByClassName(child[i]); + className[0].style.marginLeft = + parseInt(parent_margin.replace(/px/, "")) + 20 + "px"; + for (let j = 0; j < className.length; j++) { + className[j].style.display = "inline"; + } + updatePropertiesNew(); + } else { + className = document.getElementsByClassName(child[i]); + for (let j = 0; j < className.length; j++) { + className[j].checked = false; + className[j].style.display = "none"; + } + updatePropertiesNew(); + } + updateList(child[i]); + } + } else { + updatePropertiesNew(); + } +} diff --git a/sitemap.xml b/sitemap.xml index 7da6b46..f1eab1f 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1,366 +1,718 @@ +https://emb3d.mitre.org/mitigations/foundational.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/intermediate.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/leading.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-001.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-002.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-003.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-004.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-005.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-006.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-007.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-008.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-009.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-010.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-011.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-012.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-013.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-014.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-015.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-016.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-017.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-018.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-019.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-020.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-021.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-022.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-023.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-024.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-025.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-026.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-027.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-028.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-029.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-030.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-031.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-032.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-033.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-034.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-035.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-036.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-037.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-038.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-039.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-040.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-041.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-042.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-043.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-044.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-045.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-046.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-047.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-048.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-049.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-050.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-051.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-052.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-053.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-054.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-055.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-056.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-057.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-058.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-059.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-060.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-061.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-062.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-063.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-064.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-065.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-066.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-067.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-068.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-069.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-070.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-071.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-072.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-073.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-074.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-075.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-076.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-077.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-078.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-079.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-080.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-081.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-082.html +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/MID-083.html +2024-09-24T15:31:21-04:00 + + https://emb3d.mitre.org/threats/hardware.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/system-software.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/application-software.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/networking.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/background/ -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/getting-started/ -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/properties-list/ -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/properties-mapper/ -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/ -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/mitigations/ +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/about/ -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 + + +https://emb3d.mitre.org/terms-of-use/ +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-101.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-102.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-103.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-105.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-106.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-107.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-108.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-109.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-110.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-111.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-113.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-114.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-115.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-116.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-118.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-119.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-201.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-202.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-203.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-204.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-205.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-206.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-207.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-208.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-209.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-210.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-211.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-212.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-213.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-214.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-215.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-216.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-217.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-218.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-219.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-220.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-221.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-222.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-223.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-224.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-301.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-302.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-303.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-304.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-305.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-306.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-307.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-308.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-309.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-310.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-311.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-312.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-313.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-314.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-315.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-316.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-317.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-318.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-319.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-320.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-321.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-322.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-323.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-324.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-325.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-326.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-327.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-328.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-329.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-330.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-401.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-404.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-405.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-406.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-407.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-408.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-410.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-411.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/threats/TID-412.html -2024-05-29T13:37:39-04:00 +2024-09-24T15:31:21-04:00 https://emb3d.mitre.org/ -https://emb3d.mitre.org/assets/EMB3D_Paper_v2_2024-05-13.pdf -2024-05-13T09:10:34-04:00 +https://emb3d.mitre.org/assets/EMB3D_Paper_09-23-24.pdf +2024-09-19T15:23:07-04:00 diff --git a/terms-of-use/index.html b/terms-of-use/index.html new file mode 100644 index 0000000..186150f --- /dev/null +++ b/terms-of-use/index.html @@ -0,0 +1 @@ + Terms Of Use | MITRE EMB3D™
    Terms Of Use

    Terms of Use

    LICENSE

    The MITRE Corporation (MITRE) hereby grants you a non-exclusive, royalty-free license to use EMB3D™ for internal business purposes only. Any copy you make for such purposes is authorized provided that you reproduce MITRE’s copyright designation and this license in any such copy.

    “© 2024 The MITRE Corporation. This work is reproduced and distributed with the permission of The MITRE Corporation.”

    For all other uses of EMB3D™, contact MITRE at emb3d@mitre.org.

    DISCLAIMERS

    MITRE does not claim EMB3D™ enumerates all possibilities for the types of actions and behaviors documented as part of EMB3D™’s adversary model and framework of techniques. Using the information contained within EMB3D™ to address or cover full categories of techniques will not guarantee full defensive coverage as there may be undisclosed techniques or variations on existing techniques not documented by EMB3D™.

    ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN ARE PROVIDED ON AN “AS IS” BASIS AND THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE MITRE CORPORATION, ITS BOARD OF TRUSTEES, OFFICERS, AGENTS, AND EMPLOYEES, DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTY THAT THE USE OF THE INFORMATION THEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF ACCURACY, NONINFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.

    diff --git a/threatCSV.js b/threatCSV.js new file mode 100644 index 0000000..25a211d --- /dev/null +++ b/threatCSV.js @@ -0,0 +1,110 @@ +var threatData; +var rows = []; + +//Load the json file that contains the threat and device properties mapping +fetch("../_data/properties_threat_mappings.json") + .then((res) => { + if (!res.ok) { + throw new Error(`HTTP error! Status: ${res.status}`); + } + return res.json(); + }) + .then((json) => { + threatData = json; + generateData(); + }); + +function generateData() { + for (let i = 0; i < threatData.properties.length; i++) { + var propID = threatData.properties[i].id; + var propText = threatData.properties[i].text; + for (let j = 0; j < threatData.properties[i].threats.length; j++) { + rows.push({ + pid: propID, + pdesc: propText, + tid: threatData.properties[i].threats[j].id, + tdesc: threatData.properties[i].threats[j].text + }); + } + } +} + +function getData(propertyID) { + for (let i = 0; i < threatData.properties.length; i++) { + if (threatData.properties[i].id == propertyID) { + return threatData.properties[i].threats.length; + } + } +} +async function downloadCSV() { + let columnNames = []; + for (let i = 65; i <= 90; i++) { + columnNames.push(String.fromCharCode(i)); + } + const workbook = new ExcelJS.Workbook(); + const propertySheet = workbook.addWorksheet("Properties List"); + propertySheet.columns = [ + { header: "Device Property ID", key: "pid", width: 15 }, + { header: "Device Property Description", key: "pdesc", width: 50 }, + { header: "Threat ID", key: "tid", width: 10 }, + { header: "Threat Description", key: "tdesc", width: 50 } + ]; + rows.forEach(function (rowArray) { + propertySheet.addRow({ + pid: { + text: rowArray.pid, + hyperlink: + "https://emb3d.mitre.org/properties-mapper/?id=" + rowArray.pid + }, + pdesc: rowArray.pdesc, + tid: { + text: rowArray.tid, + hyperlink: "https://emb3d.mitre.org/threats/" + rowArray.tid + ".html" + }, + tdesc: rowArray.tdesc + }); + }); + let websiteColumn = propertySheet.getColumn("tid"); + // Iterate over the cells in the column + websiteColumn.eachCell((cell, rowNumber) => { + // Skip the header row + if (rowNumber === 1) return; + // Set the font style to underline + cell.font = { underline: true }; + }); + + let propertiesColumn = propertySheet.getColumn("pid"); + propertiesColumn.eachCell((cell, rowNumber) => { + // Skip the header row + if (rowNumber === 1) return; + // Set the font style to underline + cell.font = { underline: true }; + }); + + // Merge the cells + for (let i = 2; i <= propertySheet.rowCount; i++) { + var val = propertySheet.getRow(i).getCell(1).value.text; + var threatLength = getData(val); + propertySheet.mergeCells("A" + i + ":A" + (i + threatLength - 1)); + propertySheet.mergeCells("B" + i + ":B" + (i + threatLength - 1)); + i = i + threatLength - 1; + } + + // Fix alignment + for (let i = 2; i <= propertySheet.rowCount; i++) { + let cellColumn1 = propertySheet.getRow(i).getCell(1); + cellColumn1.alignment = { horizontal: "center", vertical: "middle" }; + let cellColumn2 = propertySheet.getRow(i).getCell(2); + cellColumn2.alignment = { vertical: "middle" }; + } + const buffer = await workbook.xlsx.writeBuffer(); + // Create a blob from the buffer and create a link to download it + const blob = new Blob([buffer], { + type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + }); + const url = URL.createObjectURL(blob); + const a = document.createElement("a"); + a.href = url; + a.download = "properties_list.xlsx"; + a.click(); +} diff --git a/threatModelNew.js b/threatModelNew.js deleted file mode 100644 index 4f8a7a5..0000000 --- a/threatModelNew.js +++ /dev/null @@ -1,131 +0,0 @@ -var threatData; -var rows = []; - -//Load the json file that contains the threat and device properties mapping -fetch('/assets/deviceprops.json') - .then((res) => { - if (!res.ok) { - throw new Error(`HTTP error! Status: ${res.status}`); - } - return res.json(); - }) - .then((json) => { - threatData = json; - }); - -// Displays threats depending on device property checkbox selected -function updatePropertiesNew() { - var selectedProperties = []; - var propertiesDiv = document.getElementById('props'); - var propertiesDiv_inner = ''; - rows = []; - var foo = []; - for (let i = 0; i < threatData.deviceprops.length; i++) { - var propID = threatData.deviceprops[i].id; - var propText = threatData.deviceprops[i].text; - if (document.getElementById(propID).checked) { - selectedProperties = selectedProperties.concat( - threatData.deviceprops[i]['threats'] - ); - if (selectedProperties.length != 0) { - propertiesDiv_inner += '
    ' + propID + ''; - for (var j = 0; j < selectedProperties.length; j++) { - var tid = selectedProperties[j].id; - var tdesc = selectedProperties[j].threatShort; - propertiesDiv_inner += - "
  • " + - tid + - ' - ' + - tdesc + - '
  • '; - foo.push(tid); - rows.push([tid, '"' + tdesc + '"', propID, '"' + propText + '"']); - } - } - } - - selectedProperties = []; - foo = []; - } - propertiesDiv.innerHTML = ''; -} - -// Downloads the current device property-threat selection as a CSV -function downloadCSV() { - let csvContent = 'Threat ID, Threat Description, Device Property ID, Device Property Description\r\n'; - rows.forEach(function (rowArray) { - let row = rowArray.join(','); - csvContent += row + '\r\n'; - }); - var downloadLink = document.createElement('a'); - var blob = new Blob(['\ufeff', csvContent]); - var url = URL.createObjectURL(blob); - downloadLink.href = url; - downloadLink.download = 'data.csv'; - // Add the link to the DOM - document.body.appendChild(downloadLink); - // Click the link to start the download - downloadLink.click(); - // Remove the link from the DOM - document.body.removeChild(downloadLink); -} - -// Uses the updateList_helper() function to accurately hide/display sub properties until their parent property is checked/unchecked -function updateList(parent) { - for (let i = 0; i < threatData.deviceprops.length; i++) { - if ( - parent == threatData.deviceprops[i].id && - threatData.deviceprops[i].subProps.length != 0 - ) { - has_subprop = true; - updateList_helper( - parent, - threatData.deviceprops[i].subProps, - has_subprop - ); - } - if (threatData.deviceprops[i].subProps.length == 0) { - has_subprop = false; - updateList_helper( - parent, - threatData.deviceprops[i].subProps, - has_subprop - ); - } - } -} - -// Helps the updateList() function to accurately hide/display sub properties until their parent property is checked/unchecked -// Depending on the selction, the updatePropertiesNew() function displays the corresponding threats -function updateList_helper(parent, child, has_subprop) { - if (has_subprop) { - for (let i = 0; i < child.length; i++) { - const el = document.getElementById(parent); - parent_margin = document.getElementById(parent).style.marginLeft; - if (parent_margin == '') { - parent_margin = '0px'; - } - if (el.checked) { - className = document.getElementsByClassName(child[i]); - className[0].style.marginLeft = - parseInt(parent_margin.replace(/px/, '')) + 20 + 'px'; - for (let j = 0; j < className.length; j++) { - className[j].style.display = 'inline'; - } - updatePropertiesNew(); - } else { - className = document.getElementsByClassName(child[i]); - for (let j = 0; j < className.length; j++) { - className[j].checked = false; - className[j].style.display = 'none'; - } - updatePropertiesNew(); - } - updateList(child[i]); - } - } else { - updatePropertiesNew(); - } -} diff --git a/threats/TID-101.html b/threats/TID-101.html index 5ffb940..954b598 100644 --- a/threats/TID-101.html +++ b/threats/TID-101.html @@ -1 +1 @@ - TID-101 | MITRE EMB3D™
    TID-101

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-101 | MITRE EMB3D™
    TID-101

    Device Properties:

    diff --git a/threats/TID-102.html b/threats/TID-102.html index 17671c0..872004b 100644 --- a/threats/TID-102.html +++ b/threats/TID-102.html @@ -1 +1 @@ - TID-102 | MITRE EMB3D™
    TID-102

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-102 | MITRE EMB3D™
    TID-102

    Device Properties:

    diff --git a/threats/TID-103.html b/threats/TID-103.html index b7b1c1c..6af0648 100644 --- a/threats/TID-103.html +++ b/threats/TID-103.html @@ -1 +1 @@ - TID-103 | MITRE EMB3D™
    TID-103

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-103 | MITRE EMB3D™
    TID-103

    Device Properties:

    diff --git a/threats/TID-105.html b/threats/TID-105.html index 92a4ffc..44e33f4 100644 --- a/threats/TID-105.html +++ b/threats/TID-105.html @@ -1 +1 @@ - TID-105 | MITRE EMB3D™
    TID-105

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-105 | MITRE EMB3D™
    TID-105

    Device Properties:

    diff --git a/threats/TID-106.html b/threats/TID-106.html index 3f01030..c5240a5 100644 --- a/threats/TID-106.html +++ b/threats/TID-106.html @@ -1 +1 @@ - TID-106 | MITRE EMB3D™
    TID-106

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-106 | MITRE EMB3D™
    TID-106

    Device Properties:

    diff --git a/threats/TID-107.html b/threats/TID-107.html index d707a01..9651819 100644 --- a/threats/TID-107.html +++ b/threats/TID-107.html @@ -1 +1 @@ - TID-107 | MITRE EMB3D™
    TID-107

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-107 | MITRE EMB3D™
    TID-107

    Device Properties:

    diff --git a/threats/TID-108.html b/threats/TID-108.html index 992e7d1..7aef049 100644 --- a/threats/TID-108.html +++ b/threats/TID-108.html @@ -1 +1 @@ - TID-108 | MITRE EMB3D™
    TID-108

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-108 | MITRE EMB3D™
    TID-108

    Device Properties:

    diff --git a/threats/TID-109.html b/threats/TID-109.html index 3f92b40..2d37e0b 100644 --- a/threats/TID-109.html +++ b/threats/TID-109.html @@ -1 +1 @@ - TID-109 | MITRE EMB3D™
    TID-109

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-109 | MITRE EMB3D™
    TID-109

    Device Properties:

    diff --git a/threats/TID-110.html b/threats/TID-110.html index 178f403..6e2cba7 100644 --- a/threats/TID-110.html +++ b/threats/TID-110.html @@ -1 +1 @@ - TID-110 | MITRE EMB3D™
    TID-110

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-110 | MITRE EMB3D™
    TID-110

    Device Properties:

    diff --git a/threats/TID-111.html b/threats/TID-111.html index 98eae49..5bdb1b4 100644 --- a/threats/TID-111.html +++ b/threats/TID-111.html @@ -1 +1 @@ - TID-111 | MITRE EMB3D™
    TID-111

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-111 | MITRE EMB3D™
    TID-111

    Device Properties:

    diff --git a/threats/TID-113.html b/threats/TID-113.html index b8382f9..f72b4f5 100644 --- a/threats/TID-113.html +++ b/threats/TID-113.html @@ -1 +1 @@ - TID-113 | MITRE EMB3D™
    TID-113

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-113 | MITRE EMB3D™
    TID-113

    Device Properties:

    diff --git a/threats/TID-114.html b/threats/TID-114.html index 6caf599..ed43299 100644 --- a/threats/TID-114.html +++ b/threats/TID-114.html @@ -1 +1 @@ - TID-114 | MITRE EMB3D™
    TID-114

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-114 | MITRE EMB3D™
    TID-114

    Device Properties:

    diff --git a/threats/TID-115.html b/threats/TID-115.html index f455049..2871646 100644 --- a/threats/TID-115.html +++ b/threats/TID-115.html @@ -1 +1 @@ - TID-115 | MITRE EMB3D™
    TID-115

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-115 | MITRE EMB3D™
    TID-115

    Device Properties:

    diff --git a/threats/TID-116.html b/threats/TID-116.html index 4de56b5..1d73b9e 100644 --- a/threats/TID-116.html +++ b/threats/TID-116.html @@ -1 +1 @@ - TID-116 | MITRE EMB3D™
    TID-116

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-116 | MITRE EMB3D™
    TID-116

    Device Properties:

    diff --git a/threats/TID-118.html b/threats/TID-118.html index 880ec5b..7ff073e 100644 --- a/threats/TID-118.html +++ b/threats/TID-118.html @@ -1 +1 @@ - TID-118 | MITRE EMB3D™
    TID-118

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-118 | MITRE EMB3D™
    TID-118

    Device Properties:

    diff --git a/threats/TID-119.html b/threats/TID-119.html index 1130b76..12091b4 100644 --- a/threats/TID-119.html +++ b/threats/TID-119.html @@ -1 +1 @@ - TID-119 | MITRE EMB3D™
    TID-119

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-119 | MITRE EMB3D™
    TID-119

    Device Properties:

    diff --git a/threats/TID-201.html b/threats/TID-201.html index 9f89ade..8338cbc 100644 --- a/threats/TID-201.html +++ b/threats/TID-201.html @@ -1 +1 @@ - TID-201 | MITRE EMB3D™
    TID-201

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-201 | MITRE EMB3D™
    TID-201

    Device Properties:

    diff --git a/threats/TID-202.html b/threats/TID-202.html index 620f6ff..7018906 100644 --- a/threats/TID-202.html +++ b/threats/TID-202.html @@ -1 +1 @@ - TID-202 | MITRE EMB3D™
    TID-202

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-202 | MITRE EMB3D™
    TID-202

    Device Properties:

    diff --git a/threats/TID-203.html b/threats/TID-203.html index acdbc7f..e98ccc4 100644 --- a/threats/TID-203.html +++ b/threats/TID-203.html @@ -1 +1 @@ - TID-203 | MITRE EMB3D™
    TID-203

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-203 | MITRE EMB3D™
    TID-203

    Device Properties:

    diff --git a/threats/TID-204.html b/threats/TID-204.html index 8ddd977..16a8e7b 100644 --- a/threats/TID-204.html +++ b/threats/TID-204.html @@ -1 +1 @@ - TID-204 | MITRE EMB3D™
    TID-204

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-204 | MITRE EMB3D™
    TID-204

    Device Properties:

    diff --git a/threats/TID-205.html b/threats/TID-205.html index 0f2471e..1d6e036 100644 --- a/threats/TID-205.html +++ b/threats/TID-205.html @@ -1 +1 @@ - TID-205 | MITRE EMB3D™
    TID-205

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-205 | MITRE EMB3D™
    TID-205

    Device Properties:

    diff --git a/threats/TID-206.html b/threats/TID-206.html index ba1129d..eda411f 100644 --- a/threats/TID-206.html +++ b/threats/TID-206.html @@ -1 +1 @@ - TID-206 | MITRE EMB3D™
    TID-206

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-206 | MITRE EMB3D™
    TID-206

    Device Properties:

    diff --git a/threats/TID-207.html b/threats/TID-207.html index a6dbaf0..35bba42 100644 --- a/threats/TID-207.html +++ b/threats/TID-207.html @@ -1 +1 @@ - TID-207 | MITRE EMB3D™
    TID-207

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-207 | MITRE EMB3D™
    TID-207

    Device Properties:

    diff --git a/threats/TID-208.html b/threats/TID-208.html index bf83e83..4e181bd 100644 --- a/threats/TID-208.html +++ b/threats/TID-208.html @@ -1 +1 @@ - TID-208 | MITRE EMB3D™
    TID-208

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-208 | MITRE EMB3D™
    TID-208

    Device Properties:

    diff --git a/threats/TID-209.html b/threats/TID-209.html index 82e7275..83774db 100644 --- a/threats/TID-209.html +++ b/threats/TID-209.html @@ -1 +1 @@ - TID-209 | MITRE EMB3D™
    TID-209

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-209 | MITRE EMB3D™
    TID-209

    Device Properties:

    diff --git a/threats/TID-210.html b/threats/TID-210.html index 0d57b87..29648cb 100644 --- a/threats/TID-210.html +++ b/threats/TID-210.html @@ -1 +1 @@ - TID-210 | MITRE EMB3D™
    TID-210

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-210 | MITRE EMB3D™
    TID-210

    Device Properties:

    diff --git a/threats/TID-211.html b/threats/TID-211.html index f33f5d6..f79ca5d 100644 --- a/threats/TID-211.html +++ b/threats/TID-211.html @@ -1 +1 @@ - TID-211 | MITRE EMB3D™
    TID-211

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-211 | MITRE EMB3D™
    TID-211

    Device Properties:

    diff --git a/threats/TID-212.html b/threats/TID-212.html index 3844852..606fa43 100644 --- a/threats/TID-212.html +++ b/threats/TID-212.html @@ -1 +1 @@ - TID-212 | MITRE EMB3D™
    TID-212

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-212 | MITRE EMB3D™
    TID-212

    Device Properties:

    diff --git a/threats/TID-213.html b/threats/TID-213.html index e77d0ad..a3071a3 100644 --- a/threats/TID-213.html +++ b/threats/TID-213.html @@ -1 +1 @@ - TID-213 | MITRE EMB3D™
    TID-213

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-213 | MITRE EMB3D™
    TID-213

    Device Properties:

    diff --git a/threats/TID-214.html b/threats/TID-214.html index 63acea0..a915ed8 100644 --- a/threats/TID-214.html +++ b/threats/TID-214.html @@ -1 +1 @@ - TID-214 | MITRE EMB3D™
    TID-214

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-214 | MITRE EMB3D™
    TID-214

    Device Properties:

    diff --git a/threats/TID-215.html b/threats/TID-215.html index 07833c0..7b9e492 100644 --- a/threats/TID-215.html +++ b/threats/TID-215.html @@ -1 +1 @@ - TID-215 | MITRE EMB3D™
    TID-215

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-215 | MITRE EMB3D™
    TID-215

    Device Properties:

    diff --git a/threats/TID-216.html b/threats/TID-216.html index db6f9f8..40c3533 100644 --- a/threats/TID-216.html +++ b/threats/TID-216.html @@ -1 +1 @@ - TID-216 | MITRE EMB3D™
    TID-216

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-216 | MITRE EMB3D™
    TID-216

    Device Properties:

    diff --git a/threats/TID-217.html b/threats/TID-217.html index a707eca..700d839 100644 --- a/threats/TID-217.html +++ b/threats/TID-217.html @@ -1 +1 @@ - TID-217 | MITRE EMB3D™
    TID-217

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-217 | MITRE EMB3D™
    TID-217

    Device Properties:

    diff --git a/threats/TID-218.html b/threats/TID-218.html index 0cc2124..8fd7b7e 100644 --- a/threats/TID-218.html +++ b/threats/TID-218.html @@ -1 +1 @@ - TID-218 | MITRE EMB3D™
    TID-218

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-218 | MITRE EMB3D™
    TID-218

    Device Properties:

    diff --git a/threats/TID-219.html b/threats/TID-219.html index 94b8623..b1c61a0 100644 --- a/threats/TID-219.html +++ b/threats/TID-219.html @@ -1 +1 @@ - TID-219 | MITRE EMB3D™
    TID-219

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-219 | MITRE EMB3D™
    TID-219

    Device Properties:

    diff --git a/threats/TID-220.html b/threats/TID-220.html index 3435c9a..826fcce 100644 --- a/threats/TID-220.html +++ b/threats/TID-220.html @@ -1 +1 @@ - TID-220 | MITRE EMB3D™
    TID-220

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-220 | MITRE EMB3D™
    TID-220

    Device Properties:

    diff --git a/threats/TID-221.html b/threats/TID-221.html index 063e7b0..9f5d73b 100644 --- a/threats/TID-221.html +++ b/threats/TID-221.html @@ -1 +1 @@ - TID-221 | MITRE EMB3D™
    TID-221

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-221 | MITRE EMB3D™
    TID-221

    Device Properties:

    diff --git a/threats/TID-222.html b/threats/TID-222.html index 3b9dc33..849d464 100644 --- a/threats/TID-222.html +++ b/threats/TID-222.html @@ -1 +1 @@ - TID-222 | MITRE EMB3D™
    TID-222

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-222 | MITRE EMB3D™
    TID-222

    Device Properties:

    diff --git a/threats/TID-223.html b/threats/TID-223.html index 2097d43..8f52346 100644 --- a/threats/TID-223.html +++ b/threats/TID-223.html @@ -1 +1 @@ - TID-223 | MITRE EMB3D™
    TID-223

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-223 | MITRE EMB3D™
    TID-223

    Device Properties:

    diff --git a/threats/TID-224.html b/threats/TID-224.html index 4c88aa5..407608c 100644 --- a/threats/TID-224.html +++ b/threats/TID-224.html @@ -1 +1 @@ - TID-224 | MITRE EMB3D™
    TID-224

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-224 | MITRE EMB3D™
    TID-224

    Device Properties:

    diff --git a/threats/TID-301.html b/threats/TID-301.html index 312dfaa..bba1ee2 100644 --- a/threats/TID-301.html +++ b/threats/TID-301.html @@ -1 +1 @@ - TID-301 | MITRE EMB3D™
    TID-301

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-301 | MITRE EMB3D™
    TID-301

    Device Properties:

    diff --git a/threats/TID-302.html b/threats/TID-302.html index cc55203..3b49f46 100644 --- a/threats/TID-302.html +++ b/threats/TID-302.html @@ -1 +1 @@ - TID-302 | MITRE EMB3D™
    TID-302

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-302 | MITRE EMB3D™
    TID-302

    Device Properties:

    diff --git a/threats/TID-303.html b/threats/TID-303.html index 0e2ac29..d2d00f6 100644 --- a/threats/TID-303.html +++ b/threats/TID-303.html @@ -1 +1 @@ - TID-303 | MITRE EMB3D™
    TID-303

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-303 | MITRE EMB3D™
    TID-303

    Device Properties:

    diff --git a/threats/TID-304.html b/threats/TID-304.html index 05d5139..7641dcd 100644 --- a/threats/TID-304.html +++ b/threats/TID-304.html @@ -1 +1 @@ - TID-304 | MITRE EMB3D™
    TID-304

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-304 | MITRE EMB3D™
    TID-304

    Device Properties:

    diff --git a/threats/TID-305.html b/threats/TID-305.html index 4094ef5..9d8bc56 100644 --- a/threats/TID-305.html +++ b/threats/TID-305.html @@ -1 +1 @@ - TID-305 | MITRE EMB3D™
    TID-305

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-305 | MITRE EMB3D™
    TID-305

    Device Properties:

    diff --git a/threats/TID-306.html b/threats/TID-306.html index eab1a80..3b13377 100644 --- a/threats/TID-306.html +++ b/threats/TID-306.html @@ -1 +1 @@ - TID-306 | MITRE EMB3D™
    TID-306

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-306 | MITRE EMB3D™
    TID-306

    Device Properties:

    diff --git a/threats/TID-307.html b/threats/TID-307.html index 72bc1c7..7d8cb04 100644 --- a/threats/TID-307.html +++ b/threats/TID-307.html @@ -1 +1 @@ - TID-307 | MITRE EMB3D™
    TID-307

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-307 | MITRE EMB3D™
    TID-307

    Device Properties:

    diff --git a/threats/TID-308.html b/threats/TID-308.html index c89c6cd..b7c791a 100644 --- a/threats/TID-308.html +++ b/threats/TID-308.html @@ -1 +1 @@ - TID-308 | MITRE EMB3D™
    TID-308

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-308 | MITRE EMB3D™
    TID-308

    Device Properties:

    diff --git a/threats/TID-309.html b/threats/TID-309.html index c1bf83f..ca986f7 100644 --- a/threats/TID-309.html +++ b/threats/TID-309.html @@ -1 +1 @@ - TID-309 | MITRE EMB3D™
    TID-309

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-309 | MITRE EMB3D™
    TID-309

    Device Properties:

    diff --git a/threats/TID-310.html b/threats/TID-310.html index bb6c1e6..223785f 100644 --- a/threats/TID-310.html +++ b/threats/TID-310.html @@ -1 +1 @@ - TID-310 | MITRE EMB3D™
    TID-310

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-310 | MITRE EMB3D™
    TID-310

    Device Properties:

    diff --git a/threats/TID-311.html b/threats/TID-311.html index ca88734..7e3ee26 100644 --- a/threats/TID-311.html +++ b/threats/TID-311.html @@ -1 +1 @@ - TID-311 | MITRE EMB3D™
    TID-311

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-311 | MITRE EMB3D™
    TID-311

    Device Properties:

    diff --git a/threats/TID-312.html b/threats/TID-312.html index d32206a..7ef2616 100644 --- a/threats/TID-312.html +++ b/threats/TID-312.html @@ -1 +1 @@ - TID-312 | MITRE EMB3D™
    TID-312

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-312 | MITRE EMB3D™
    TID-312

    Device Properties:

    diff --git a/threats/TID-313.html b/threats/TID-313.html index 3c395ac..e68161b 100644 --- a/threats/TID-313.html +++ b/threats/TID-313.html @@ -1 +1 @@ - TID-313 | MITRE EMB3D™
    TID-313

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-313 | MITRE EMB3D™
    TID-313

    Device Properties:

    diff --git a/threats/TID-314.html b/threats/TID-314.html index e860931..f0fad1c 100644 --- a/threats/TID-314.html +++ b/threats/TID-314.html @@ -1 +1 @@ - TID-314 | MITRE EMB3D™
    TID-314

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-314 | MITRE EMB3D™
    TID-314

    Device Properties:

    diff --git a/threats/TID-315.html b/threats/TID-315.html index 046d92d..130ae58 100644 --- a/threats/TID-315.html +++ b/threats/TID-315.html @@ -1 +1 @@ - TID-315 | MITRE EMB3D™
    TID-315

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-315 | MITRE EMB3D™
    TID-315

    Device Properties:

    diff --git a/threats/TID-316.html b/threats/TID-316.html index b9992b2..cbbb91d 100644 --- a/threats/TID-316.html +++ b/threats/TID-316.html @@ -1 +1 @@ - TID-316 | MITRE EMB3D™
    TID-316

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-316 | MITRE EMB3D™
    TID-316

    Device Properties:

    diff --git a/threats/TID-317.html b/threats/TID-317.html index 9e16bcd..1da9d08 100644 --- a/threats/TID-317.html +++ b/threats/TID-317.html @@ -1 +1 @@ - TID-317 | MITRE EMB3D™
    TID-317

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-317 | MITRE EMB3D™
    TID-317

    Device Properties:

    diff --git a/threats/TID-318.html b/threats/TID-318.html index 202004f..dfaf807 100644 --- a/threats/TID-318.html +++ b/threats/TID-318.html @@ -1 +1 @@ - TID-318 | MITRE EMB3D™
    TID-318

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-318 | MITRE EMB3D™
    TID-318

    Device Properties:

    diff --git a/threats/TID-319.html b/threats/TID-319.html index da3ecbb..6d6a8f0 100644 --- a/threats/TID-319.html +++ b/threats/TID-319.html @@ -1 +1 @@ - TID-319 | MITRE EMB3D™
    TID-319

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-319 | MITRE EMB3D™
    TID-319

    Device Properties:

    diff --git a/threats/TID-320.html b/threats/TID-320.html index 91ca2b4..f619ced 100644 --- a/threats/TID-320.html +++ b/threats/TID-320.html @@ -1 +1 @@ - TID-320 | MITRE EMB3D™
    TID-320

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-320 | MITRE EMB3D™
    TID-320

    Device Properties:

    diff --git a/threats/TID-321.html b/threats/TID-321.html index b697d49..ecc23d8 100644 --- a/threats/TID-321.html +++ b/threats/TID-321.html @@ -1 +1 @@ - TID-321 | MITRE EMB3D™
    TID-321

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-321 | MITRE EMB3D™
    TID-321

    Device Properties:

    diff --git a/threats/TID-322.html b/threats/TID-322.html index 4b27c50..7d91d65 100644 --- a/threats/TID-322.html +++ b/threats/TID-322.html @@ -1 +1 @@ - TID-322 | MITRE EMB3D™
    TID-322

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-322 | MITRE EMB3D™
    TID-322

    Device Properties:

    diff --git a/threats/TID-323.html b/threats/TID-323.html index a7246e9..444fae5 100644 --- a/threats/TID-323.html +++ b/threats/TID-323.html @@ -1 +1 @@ - TID-323 | MITRE EMB3D™
    TID-323

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-323 | MITRE EMB3D™
    TID-323

    Device Properties:

    diff --git a/threats/TID-324.html b/threats/TID-324.html index f5a4f93..96e09ad 100644 --- a/threats/TID-324.html +++ b/threats/TID-324.html @@ -1 +1 @@ - TID-324 | MITRE EMB3D™
    TID-324

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-324 | MITRE EMB3D™
    TID-324

    Device Properties:

    diff --git a/threats/TID-325.html b/threats/TID-325.html index a67386d..d69dbed 100644 --- a/threats/TID-325.html +++ b/threats/TID-325.html @@ -1 +1 @@ - TID-325 | MITRE EMB3D™
    TID-325

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-325 | MITRE EMB3D™
    TID-325

    Device Properties:

    diff --git a/threats/TID-326.html b/threats/TID-326.html index 7153d3a..5cf92d3 100644 --- a/threats/TID-326.html +++ b/threats/TID-326.html @@ -1 +1 @@ - TID-326 | MITRE EMB3D™
    TID-326

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-326 | MITRE EMB3D™
    TID-326

    Device Properties:

    diff --git a/threats/TID-327.html b/threats/TID-327.html index cfbb501..bfd68ee 100644 --- a/threats/TID-327.html +++ b/threats/TID-327.html @@ -1 +1 @@ - TID-327 | MITRE EMB3D™
    TID-327

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-327 | MITRE EMB3D™
    TID-327

    Device Properties:

    diff --git a/threats/TID-328.html b/threats/TID-328.html index 4ec3c8d..416c75a 100644 --- a/threats/TID-328.html +++ b/threats/TID-328.html @@ -1 +1 @@ - TID-328 | MITRE EMB3D™
    TID-328

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-328 | MITRE EMB3D™
    TID-328

    Device Properties:

    diff --git a/threats/TID-329.html b/threats/TID-329.html index 0d74097..d193ec3 100644 --- a/threats/TID-329.html +++ b/threats/TID-329.html @@ -1 +1 @@ - TID-329 | MITRE EMB3D™
    TID-329

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-329 | MITRE EMB3D™
    TID-329

    Device Properties:

    diff --git a/threats/TID-330.html b/threats/TID-330.html index 8292be5..396980a 100644 --- a/threats/TID-330.html +++ b/threats/TID-330.html @@ -1 +1 @@ - TID-330 | MITRE EMB3D™
    TID-330

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-330 | MITRE EMB3D™
    TID-330

    Device Properties:

    diff --git a/threats/TID-401.html b/threats/TID-401.html index 1f046ec..7b1e84e 100644 --- a/threats/TID-401.html +++ b/threats/TID-401.html @@ -1 +1 @@ - TID-401 | MITRE EMB3D™
    TID-401

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-401 | MITRE EMB3D™
    TID-401

    Device Properties:

    diff --git a/threats/TID-404.html b/threats/TID-404.html index a28b5fe..46786f5 100644 --- a/threats/TID-404.html +++ b/threats/TID-404.html @@ -1 +1 @@ - TID-404 | MITRE EMB3D™
    TID-404

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-404 | MITRE EMB3D™
    TID-404

    Device Properties:

    diff --git a/threats/TID-405.html b/threats/TID-405.html index a929b87..ed6e462 100644 --- a/threats/TID-405.html +++ b/threats/TID-405.html @@ -1 +1 @@ - TID-405 | MITRE EMB3D™
    TID-405

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-405 | MITRE EMB3D™
    TID-405

    Device Properties:

    diff --git a/threats/TID-406.html b/threats/TID-406.html index 1613fd7..9f0fe8d 100644 --- a/threats/TID-406.html +++ b/threats/TID-406.html @@ -1 +1 @@ - TID-406 | MITRE EMB3D™
    TID-406

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-406 | MITRE EMB3D™
    TID-406

    Device Properties:

    diff --git a/threats/TID-407.html b/threats/TID-407.html index 42d149e..b87f0a7 100644 --- a/threats/TID-407.html +++ b/threats/TID-407.html @@ -1 +1 @@ - TID-407 | MITRE EMB3D™
    TID-407

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-407 | MITRE EMB3D™
    TID-407

    Device Properties:

    diff --git a/threats/TID-408.html b/threats/TID-408.html index cab89d7..29d1298 100644 --- a/threats/TID-408.html +++ b/threats/TID-408.html @@ -1 +1 @@ - TID-408 | MITRE EMB3D™
    TID-408

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-408 | MITRE EMB3D™
    TID-408

    Device Properties:

    diff --git a/threats/TID-410.html b/threats/TID-410.html index c17c9a9..24e8111 100644 --- a/threats/TID-410.html +++ b/threats/TID-410.html @@ -1 +1 @@ - TID-410 | MITRE EMB3D™
    TID-410

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-410 | MITRE EMB3D™
    TID-410

    Device Properties:

    diff --git a/threats/TID-411.html b/threats/TID-411.html index 47d0e91..408f579 100644 --- a/threats/TID-411.html +++ b/threats/TID-411.html @@ -1 +1 @@ - TID-411 | MITRE EMB3D™
    TID-411

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-411 | MITRE EMB3D™
    TID-411

    Device Properties:

    diff --git a/threats/TID-412.html b/threats/TID-412.html index 077b351..2f2e32b 100644 --- a/threats/TID-412.html +++ b/threats/TID-412.html @@ -1 +1 @@ - TID-412 | MITRE EMB3D™
    TID-412

    Device Properties:

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + TID-412 | MITRE EMB3D™
    TID-412

    Device Properties:

    diff --git a/threats/application-software.html b/threats/application-software.html index e9ad4ed..343275f 100644 --- a/threats/application-software.html +++ b/threats/application-software.html @@ -1 +1 @@ - Application Software | MITRE EMB3D™
    Application Software

    Application Software

    • TID-301 - Applications Binaries Modified
    • TID-302 - Install Untrusted Application
    • TID-303 - Excessive Trust in Offboard Management/IDE Software
    • TID-304 - Manipulate Runtime Environment
    • TID-305 - Program Executes Dangerous System Calls
    • TID-306 - Sandboxed Environments Escaped
    • TID-307 - Device Code Representations Inconsistent
    • TID-308 - Code Overwritten to Avoid Detection
    • TID-309 - Device Exploits Engineering Workstation
    • TID-310 - Remotely Accessible Unauthenticated Services
    • TID-328 - Hardcoded Credentials
    • TID-311 - Default Credentials
    • TID-312 - Credential Change Mechanism Can Be Abused
    • TID-313 - Unauthenticated Session Changes Credential
    • TID-314 - Passwords Can Be Guessed Using Brute-Force Attempts
    • TID-315 - Password Retrieval Mechanism Abused
    • TID-316 - Incorrect Certificate Verification Allows Authentication Bypass
    • TID-317 - Predictable Cryptographic Key
    • TID-318 - Insecure Cryptographic Implementation
    • TID-319 - Cross Site Scripting (XSS)
    • TID-320 - SQL Injection
    • TID-321 - HTTP Application Session Hijacking
    • TID-322 - Cross Site Request Forgery (CSRF)
    • TID-323 - HTTP Path Traversal
    • TID-324 - HTTP Direct Object Reference
    • TID-325 - HTTP Injection/Response Splitting
    • TID-326 - Insecure Deserialization
    • TID-327 - Out of Bounds Memory Access
    • TID-329 - Improper Password Storage
    • TID-330 - Cryptographic Timing Side-Channel

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + Application Software | MITRE EMB3D™
    Application Software

    Application Software

    • TID-301 - Applications Binaries Modified
    • TID-302 - Install Untrusted Application
    • TID-303 - Excessive Trust in Offboard Management/IDE Software
    • TID-304 - Manipulate Runtime Environment
    • TID-305 - Program Executes Dangerous System Calls
    • TID-306 - Sandboxed Environments Escaped
    • TID-307 - Device Code Representations Inconsistent
    • TID-308 - Code Overwritten to Avoid Detection
    • TID-309 - Device Exploits Engineering Workstation
    • TID-310 - Remotely Accessible Unauthenticated Services
    • TID-328 - Hardcoded Credentials
    • TID-311 - Default Credentials
    • TID-312 - Credential Change Mechanism Can Be Abused
    • TID-313 - Unauthenticated Session Changes Credential
    • TID-314 - Passwords Can Be Guessed Using Brute-Force Attempts
    • TID-315 - Password Retrieval Mechanism Abused
    • TID-316 - Incorrect Certificate Verification Allows Authentication Bypass
    • TID-317 - Predictable Cryptographic Key
    • TID-318 - Insecure Cryptographic Implementation
    • TID-319 - Cross Site Scripting (XSS)
    • TID-320 - SQL Injection
    • TID-321 - HTTP Application Session Hijacking
    • TID-322 - Cross Site Request Forgery (CSRF)
    • TID-323 - HTTP Path Traversal
    • TID-324 - HTTP Direct Object Reference
    • TID-325 - HTTP Injection/Response Splitting
    • TID-326 - Insecure Deserialization
    • TID-327 - Out of Bounds Memory Access
    • TID-329 - Improper Password Storage
    • TID-330 - Cryptographic Timing Side-Channel
    diff --git a/threats/hardware.html b/threats/hardware.html index bf27752..979a87e 100644 --- a/threats/hardware.html +++ b/threats/hardware.html @@ -1 +1 @@ - Hardware | MITRE EMB3D™
    Hardware

    Hardware

    • TID-101 - Power Consumption Analysis Side Channel
    • TID-102 - Electromagnetic Analysis Side Channel
    • TID-103 - Cache Timing Analysis Side Channel
    • TID-105 - Hardware Fault Injection – Control Flow Modification
    • TID-106 - Data Bus Interception
    • TID-107 - Unauthorized Direct Memory Access (DMA)
    • TID-108 - ROM/NVRAM Data Extraction or Modification
    • TID-109 - RAM Chip Contents Readout
    • TID-110 - Hardware Fault Injection – Data Manipulation
    • TID-111 - Untrusted External Storage
    • TID-113 - Unverified Peripheral Firmware Loaded
    • TID-114 - Peripheral Data Bus Interception
    • TID-115 - Firmware/Data Extraction via Hardware Interface
    • TID-116 - Latent Privileged Access Port
    • TID-118 - Weak Peripheral Port Electrical Damage Protection
    • TID-119 - Latent Hardware Debug Port Allows Memory/Code Manipulation

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + Hardware | MITRE EMB3D™
    Hardware

    Hardware

    • TID-101 - Power Consumption Analysis Side Channel
    • TID-102 - Electromagnetic Analysis Side Channel
    • TID-103 - Cache Timing Analysis Side Channel
    • TID-105 - Hardware Fault Injection – Control Flow Modification
    • TID-106 - Data Bus Interception
    • TID-107 - Unauthorized Direct Memory Access (DMA)
    • TID-108 - ROM/NVRAM Data Extraction or Modification
    • TID-109 - RAM Chip Contents Readout
    • TID-110 - Hardware Fault Injection – Data Manipulation
    • TID-111 - Untrusted External Storage
    • TID-113 - Unverified Peripheral Firmware Loaded
    • TID-114 - Peripheral Data Bus Interception
    • TID-115 - Firmware/Data Extraction via Hardware Interface
    • TID-116 - Latent Privileged Access Port
    • TID-118 - Weak Peripheral Port Electrical Damage Protection
    • TID-119 - Latent Hardware Debug Port Allows Memory/Code Manipulation
    diff --git a/threats/index.html b/threats/index.html index 5765b12..3eccff6 100644 --- a/threats/index.html +++ b/threats/index.html @@ -1 +1 @@ - Threats | MITRE EMB3D™
    Threats

    EMB3D™ Threats Enumeration

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + Threats | MITRE EMB3D™
    Threats

    EMB3D™ Threats Enumeration

    diff --git a/threats/networking.html b/threats/networking.html index 7f1119e..03fc68e 100644 --- a/threats/networking.html +++ b/threats/networking.html @@ -1 +1 @@ - Networking | MITRE EMB3D™
    Networking

    Networking

    • TID-401 - Undocumented Protocol Features
    • TID-404 - Remotely Triggerable Deadlock/DoS
    • TID-405 - Network Stack Resource Exhaustion
    • TID-406 - Unauthorized Messages or Connections
    • TID-407 - Missing Message Replay Protection
    • TID-408 - Unencrypted Sensitive Data Communication
    • TID-410 - Cryptographic Protocol Side Channel
    • TID-411 - Weak/Insecure Cryptographic Protocol
    • TID-412 - Network Routing Capability Abuse

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + Networking | MITRE EMB3D™
    Networking

    Networking

    • TID-401 - Undocumented Protocol Features
    • TID-404 - Remotely Triggerable Deadlock/DoS
    • TID-405 - Network Stack Resource Exhaustion
    • TID-406 - Unauthorized Messages or Connections
    • TID-407 - Missing Message Replay Protection
    • TID-408 - Unencrypted Sensitive Data Communication
    • TID-410 - Cryptographic Protocol Side Channel
    • TID-411 - Weak/Insecure Cryptographic Protocol
    • TID-412 - Network Routing Capability Abuse
    diff --git a/threats/system-software.html b/threats/system-software.html index 77c402c..907e0d5 100644 --- a/threats/system-software.html +++ b/threats/system-software.html @@ -1 +1 @@ - System Software | MITRE EMB3D™
    System Software

    System Software

    • TID-201 - Inadequate Bootloader Protection and Verification
    • TID-202 - Exploitable System Network Stack Component
    • TID-218 - Operating System Susceptible to Rootkit
    • TID-203 - Malicious OS Kernel Driver/Module Installable
    • TID-204 - Untrusted Programs Can Access Privileged OS Functions
    • TID-205 - Existing OS Tools Maliciously Used for Device Manipulation
    • TID-206 - Memory Management Protections Subverted
    • TID-207 - Container Escape
    • TID-208 - Virtual Machine Escape
    • TID-209 - Host Can Manipulate Guest Virtual Machines
    • TID-210 - Device Vulnerabilities Unpatchable
    • TID-211 - Device Allows Unauthenticated Firmware Installation
    • TID-212 - FW/SW Update Integrity Shared Secrets Extraction
    • TID-213 - Faulty FW/SW Update Integrity Verification
    • TID-214 - Secrets Extracted from Device Root of Trust
    • TID-215 - Unencrypted SW/FW Updates
    • TID-216 - Firmware Update Rollbacks Allowed
    • TID-217 - Remotely Initiated Updates Can Cause DoS
    • TID-219 - OS/Kernel Privilege Escalation
    • TID-220 - Unpatchable Hardware Root of Trust
    • TID-221 - Authentication Bypass By Message Replay
    • TID-222 - Critical System Service May Be Disabled
    • TID-223 - System Susceptible to RAM Scraping
    • TID-224 - Excessive Access via Software Diagnostic Features

    © - The MITRE Corporation. All Rights Reserved.
    Privacy Policy | MITRE


    MITRE is a registered trademark of The MITRE Corporation.
    Material on this site may be copied and distributed with permission only.
    Approved for public release; Distribution unlimited. Public release case number: 24-1429.

    Using the Chirpy theme for Jekyll.

    Cookie Preferences
    + System Software | MITRE EMB3D™
    System Software

    System Software

    • TID-201 - Inadequate Bootloader Protection and Verification
    • TID-202 - Exploitable System Network Stack Component
    • TID-218 - Operating System Susceptible to Rootkit
    • TID-203 - Malicious OS Kernel Driver/Module Installable
    • TID-204 - Untrusted Programs Can Access Privileged OS Functions
    • TID-205 - Existing OS Tools Maliciously Used for Device Manipulation
    • TID-206 - Memory Management Protections Subverted
    • TID-207 - Container Escape
    • TID-208 - Virtual Machine Escape
    • TID-209 - Host Can Manipulate Guest Virtual Machines
    • TID-210 - Device Vulnerabilities Unpatchable
    • TID-211 - Device Allows Unauthenticated Firmware Installation
    • TID-212 - FW/SW Update Integrity Shared Secrets Extraction
    • TID-213 - Faulty FW/SW Update Integrity Verification
    • TID-214 - Secrets Extracted from Device Root of Trust
    • TID-215 - Unencrypted SW/FW Updates
    • TID-216 - Firmware Update Rollbacks Allowed
    • TID-217 - Remotely Initiated Updates Can Cause DoS
    • TID-219 - OS/Kernel Privilege Escalation
    • TID-220 - Unpatchable Hardware Root of Trust
    • TID-221 - Authentication Bypass By Message Replay
    • TID-222 - Critical System Service May Be Disabled
    • TID-223 - System Susceptible to RAM Scraping
    • TID-224 - Excessive Access via Software Diagnostic Features