CWE一覧に戻る
CWE-1423

過渡的実行に影響を与えるマイクロアーキテクチャの予測状態の共有による機密情報の暴露

Exposure of Sensitive Information caused by Shared Microarchitectural Predictor State that Influences Transient Execution
脆弱性 作成中
JA

共有されたマイクロアーキテクチャのプレディクタ・ステートは、コードがハードウェアの境界を越えて過渡的な実行に影響を与える可能性がある。
共有されたマイクロアーキテクチャの予測状態は、コードがハードウェアの境界を越えて一時的な実行に影響を与える可能性がある。
データを公開する可能性がある。

多くの汎用プロセッサは、命令セット・アーキテクチャ(ISA)を備えている。
機能を備えている。これらの機能には
これらの機能には、メモリ・セグメンテーション、仮想メモリ、特権リング、信頼された実行環境、仮想マシンなどがある。
リング、信頼された実行環境、仮想マシンなどがある。
などがある。例えば、仮想メモリは各プロセスに独自の
アドレス空間を提供する。
プライベートデータにアクセスすることを防ぐ。これらの機能の多くは
ソフトウェア・コンポーネント間のセキュリティ境界を形成するために使用することができる。

別々のソフトウェア・コンポーネント(たとえば 2 つのプロセス)がハードウェア境界を越えて
マイクロアーキテクチャ予測子の状態をハードウェア境界を越えて共有する場合、一方のコンポーネントのコードは
あるコンポーネントのコードが別のコンポーネントのマイクロアーキテクチャー・ プレディクターの動作に影響を与える可能性があります。
の動作に影響を与える可能性があります。予測子が過渡的な実行を引き起こす可能性がある場合
予測子が過渡的な実行を引き起こす可能性がある場合、共有された予測子の状態によって、攻撃者は被害者の過渡的な実行に影響を与えることができる。
被害者の過渡的な実行に影響を与えることができる。
攻撃者が観測可能な不一致を監視することで、被害者から個人データを推測することを可能にします。
観測可能な不一致(CWE-203)を監視することで、攻撃者が被害者から個人データを推測することを可能にする。

プロセッサがあるコンポーネントから別のコンポーネントに遷移するとき(たとえば、あるコンポーネントから別のコンポーネントに遷移するとき)、予測ステートが共有されることがあります。
プロセッサがあるコンポーネントから別のコンポーネントに遷移するとき(たとえば、プロセスがカーネルに入るためにシステムコールを行うとき)、予測器の状態が共有されることがある。
を呼び出してカーネルに入るときなど)。多くの汎用プロセッサーは
多くのコモディティ・プロセッサは、あるバウンダリより前に発生したマイクロアーキテクチャ上の予測が、バウンダリより後に発生した予測に影響を与えないようにする機能を備えています。
多くのコモディティ・プロセッサは、バウンダリより前に発生したマイクロアーキテクチャ予測が、バウンダリより後に発生した予測に影響を与えないような機能を備えています。

予測子の状態は、ハードウェアスレッド間で共有されることもあります。
例えば、同時マルチスレッド(SMT)をサポートするプロセッサ上の兄弟ハードウェアスレッドなどである。
例えば、同時マルチスレッド(SMT)をサポートするプロセッサの兄弟ハードウェアスレッドなどである。この共有は
ハードウェアスレッドが同じソフトウェアコンポーネントで同時に実行されている場合、この共有は良性かもしれません。
あるいは、一方の兄弟が悪意のあるソフトウェア・コンポーネントで、もう一方の兄弟が悪意のあるソフトウェア・コンポーネントである場合に、弱点が露呈する可能性がある。
また、一方の兄弟が悪意のあるソフトウェア・コンポーネントで、もう一方の兄弟が犠牲となるソフトウェア・コンポーネントである場合は、弱点が露呈する可能性がある。
コンポーネントになる可能性がある。ハードウェアスレッド間でマイクロアーキテクチャの予測子を共有するプロセッサーには、次のような機能があります。
ハードウェアスレッド間でマイクロアーキテクチャ予測子を共有するプロセッサは、あるハードウェアスレッドで発生したマイクロアーキテクチャ予測を
あるハードウェア・スレッドで発生したマイクロアーキテクチャ予測が、別のハードウェア・スレッドで発生した予測に影響を与えることを防ぐ機能がある場合があります。
あるハードウェアスレッドで発生したマイクロアーキテクチャ予測が、別のハードウェアスレッドで発生した予測に影響を与えないようにする機能を備えている場合があります。

トランジション間またはハードウェア・スレッド間の予測器ステートの共有を制限する機能は、常時オンになっている場合があります。
ハードウェア・スレッド間で予測子の状態共有を制限する機能は、常時オン、デフォルトでオン、またはソフトウェアからのオプトインを必要とする場合があります。
ソフトウェアからのオプトインが必要な場合があります。

EN

Shared microarchitectural predictor state may allow code to influence
transient execution across a hardware boundary, potentially exposing
data that is accessible beyond the boundary over a covert channel.

Many commodity processors have Instruction Set Architecture (ISA)
features that protect software components from one another. These
features can include memory segmentation, virtual memory, privilege
rings, trusted execution environments, and virtual machines, among
others. For example, virtual memory provides each process with its own
address space, which prevents processes from accessing each other's
private data. Many of these features can be used to form
hardware-enforced security boundaries between software components.

When separate software components (for example, two processes) share
microarchitectural predictor state across a hardware boundary, code in
one component may be able to influence microarchitectural predictor
behavior in another component. If the predictor can cause transient
execution, the shared predictor state may allow an attacker to
influence transient execution in a victim, and in a manner that could
allow the attacker to infer private data from the victim by monitoring
observable discrepancies (CWE-203) in a covert channel [REF-1400].

Predictor state may be shared when the processor transitions from one
component to another (for example, when a process makes a system call
to enter the kernel). Many commodity processors have features which
prevent microarchitectural predictions that occur before a boundary
from influencing predictions that occur after the boundary.

Predictor state may also be shared between hardware threads, for
example, sibling hardware threads on a processor that supports
simultaneous multithreading (SMT). This sharing may be benign if the
hardware threads are simultaneously executing in the same software
component, or it could expose a weakness if one sibling is a malicious
software component, and the other sibling is a victim software
component. Processors that share microarchitectural predictors between
hardware threads may have features which prevent microarchitectural
predictions that occur on one hardware thread from influencing
predictions that occur on another hardware thread.

Features that restrict predictor state sharing across transitions or
between hardware threads may be always-on, on by default, or may
require opt-in from software.

Scope: Confidentiality / Impact: Read Memory
The hardware designer can attempt to prevent transient
execution from causing observable discrepancies in specific covert
channels.
Hardware designers may choose to use microarchitectural
bits to tag predictor entries. For example, each predictor entry may
be tagged with a kernel-mode bit which, when set, indicates that the
predictor entry was created in kernel mode. The processor can use this
bit to enforce that predictions in the current mode must have been
trained in the current mode. This can prevent malicious cross-mode
training, such as when user-mode software attempts to create predictor
entries that influence transient execution in the kernel. Predictor
entry tags can also be used to associate each predictor entry with the
SMT thread that created it, and thus the processor can enforce that
each predictor entry can only be used by the SMT thread that created
it. This can prevent an SMT thread from using predictor entries
crafted by a malicious sibling SMT thread.
Hardware designers may choose to sanitize
microarchitectural predictor state (for example, branch prediction
history) when the processor transitions to a different context, for
example, whenever a system call is invoked. Alternatively, the
hardware may expose instruction(s) that allow software to sanitize
predictor state according to the user's threat model. For example,
this can allow operating system software to sanitize predictor state
when performing a context switch from one process to another.
System software can mitigate this weakness by invoking
predictor-state-sanitizing operations (for example, the indirect
branch prediction barrier on Intel x86) when switching from one
context to another, according to the hardware vendor's
recommendations.
If the weakness is exposed by a single instruction (or a
small set of instructions), then the compiler (or JIT, etc.) can be
configured to prevent the affected instruction(s) from being
generated. One prominent example of this mitigation is retpoline
([REF-1414]).
Use control-flow integrity (CFI) techniques to constrain
the behavior of instructions that redirect the instruction pointer,
such as indirect branch instructions.
Use software techniques (including the use of
serialization instructions) that are intended to reduce the number of
instructions that can be executed transiently after a processor event
or misprediction.
Some systems may allow the user to disable predictor
sharing. For example, this could be a BIOS configuration, or a
model-specific register (MSR) that can be configured by the operating
system or virtual machine monitor.
The hardware vendor may provide a patch to, for example,
sanitize predictor state when the processor transitions to a different
context, or to prevent predictor entries from being shared across SMT
threads. A patch may also introduce new ISA that allows software to
toggle a mitigation.
If a hardware feature can allow microarchitectural
predictor state to be shared between contexts, SMT threads, or other
architecturally defined boundaries, the hardware designer may opt to
disclose this behavior in architecture documentation. This
documentation can inform users about potential consequences and
effective mitigations.
Processor designers, system software vendors, or other
agents may choose to restrict the ability of unprivileged software to
access to high-resolution timers that are commonly used to monitor
covert channels.
MITRE公式ページ — CWE-1423