Spectre Cache Analysis
Cache speculation analysis for detecting Spectre vulnerabilities related to cache timing side-channels.
Headers: include/Analysis/Spectre
Implementation: lib/Analysis/Spectre
Overview
The Spectre analysis module provides cache modeling and speculation analysis to detect potential cache-based side-channel vulnerabilities. It simulates cache behavior to identify cases where secret data may leak through cache timing differences.
Main Components
CacheModel
File: CacheModel.cpp
Models cache behavior with configurable parameters:
Cache line size: Size of each cache line (default: 16 bytes)
Number of cache lines: Total number of cache lines (default: 32)
Number of sets: Number of cache sets for set-associative caches
Associativity: Cache lines per set
Features:
Tracks which memory addresses are in cache
Simulates cache hits and misses
Records access patterns for analysis
Supports both must-hit and may-miss analysis modes
CacheSpecuAnalysis
File: CacheSpecuAnalysis.cpp
Performs speculative cache analysis to detect potential Spectre vulnerabilities.
Analysis Flow:
Initialization: Builds cache model from function arguments and global variables
Cache Simulation: Simulates cache behavior for memory accesses
Speculative Analysis: Analyzes speculative execution paths
Leak Detection: Identifies potential cache timing leaks
Key Methods:
InitModel()– Initializes cache model with function parameters and globalsSpecuSim()– Simulates speculative cache behavior between basic blocksIsValueInCache()– Checks if a value is currently in cachevisitLoadInst()– Processes load instructions and updates cache state
Configuration:
The analysis supports several configuration options:
MissSpecuDepth: Maximum depth for speculative miss analysisMergeOption: Option for merging cache statesCache parameters: line size, number of lines, number of sets
Usage
The Spectre analysis is typically used as part of security analysis pipelines to detect cache-based side-channel vulnerabilities.
Typical use cases:
Detecting Spectre-variant vulnerabilities
Analyzing cache timing side-channels
Security auditing of cryptographic code
Verifying constant-time implementations
Dependencies:
Dominator Tree analysis
Post-Dominator Tree analysis
Alias Analysis
Limitations:
Analysis is intra-procedural (function-level)
Requires precise alias analysis for accurate results
Cache model is simplified compared to real hardware