現代的なCPUの脆弱性
組み込みプロセッサにも影響大「Spectre」「Meltdown」の背景を探る(1/4 ページ)
「Spectre」「Meltdown」と呼ばれる脆弱性は、IntelやAMDだけではなく、Arm製品にも影響することから組み込みにも大きな問題である。しかし、A75は影響を受けるがA72は受けにくく、A73は影響しないなど、対処には内部実装についての理解も必要である。ここではMeltdownを中心に詳細を解説する。
2018年は松の明けない内から「Spectre」「Meltdown」と呼ばれる脆弱(ぜいじゃく)性が大きな話題となった。2018年1月3日(米国時間)にIntelやAMD、Armといったプロセッサベンダーに加えてMicrosoft、Red Hat、それにGoogleといったベンダーが一斉にSpectreとMeltdownについての発表を行い、現在もファームウェアやパッチの提供を続けている。
特に大きな話題となり、影響も一番大きいIntelは連日の様にプレスリリースを出すと共に、影響をまとめたレポートや対策ファームウェアの公開などを行っている。それはともかくとして、注目すべきはx86だけでなくARMアーキテクチャも含まれている事だろう。つまりx86アーキテクチャに特有の問題ではなく、最新のCPUアーキテクチャに共通の脆弱性ということになる。
加えて興味深いことにMeltdownについて言えば、ARMの場合直接的な影響を受けるのはCortex-A75のみで、似た構造のCortex-A15/57/72は影響を受けにくい。
さらに言えば、Cortex-A17やCortex-A73は影響を受けないとされている。なぜこうなるかは内部のインプリメントに深く関係してくる話である。ここではMeltdownを中心に、もう少し掘り下げて紹介したい。
SpectreをArmの公開文章から読み解く
そのARMコアであるが、こちら(Arm Processor Security Update)でまとめられているように、Spectre(Variant 1/2)については全てのコアが影響を受けるとされる。Variant 1/2はSpectreと分類されるもので、どちらも投機実行に関係してくる。Armのホワイトペーパーでは下のようなサンプルコードでこれを紹介している。
1 struct array {
2 unsigned long length;
3 unsigned char data[];
4 };
5 struct array *arr1 = ...; /* small array */
6 struct array *arr2 = ...; /*array of size 0x400 */
7 unsigned long untrusted_offset_from_user = ...;
8 if (untrusted_offset_from_user < arr1->length) {
9 unsigned char value;
10 value =arr1->data[untrusted_offset_from_user];
11 unsigned long index2 =((value&1)*0x100)+0x200;
12 if (index2 < arr2->length) {
13 unsigned char value2 = arr2->data[index2];
14 }
15 }
untrusted_offset_from_userには本来アクセスできないアドレスを指定し、コード実行すると本来なら10行目のvalueへの代入(ようするにデータの移動)を行った時点で、アクセス保護違反が起きるはずである。
ところが、アクセス保護違反を検知できるのは、10行目によって発生するメモリロードの完了タイミングである。つまりメモリの内容をまずキャッシュにロードし、ついでそのキャッシュの内容をCPUパイプライン内のレジスタファイルにロードしようとしたタイミングである。
しかしながら「このアクセスが保護違反か」という判断は最終的にROB(Re-order Buffer)に入った時点で行われることになる。これを待っていると処理が遅くなるので、CPUはこの10行目の完了を待たずに11行目以降の処理を行うことになる。この結果、valueの値が0か1かに応じて、14行目のvalue2への代入が計算されることになる。value2は「valueが0:0x200」「valueが1:0x300」になるわけで、このどちらかのアドレスのデータがメモリからキャッシュにロードされることになる。
さて、この一連の処理が終わるとまず10行目が保護違反になるから、当然その後の11行目や13行目の処理も取り消される(いずれも処理を終わらせ、ROBに入って処理の確定を待っている段階だから、単にROBをフラッシュするだけで問題はない)が、問題はarray2の先である。
ここは本来キャッシュにロードされていないはずだが、13行目が投機実行された結果として、0x200か0x300のどちらかのアドレスから始まる分はキャッシュに乗っていることになる。であれば、このあと0x200と0x300のアクセスを行い、その際に時間を計測することで、どちらがキャッシュに乗ったか判明し、そこから間接的に「本来アクセスできないはず」であるvalue1の値を推察できてしまうというのが、Variant1(Spectre)である。
間接分岐を利用するVariant2(Spectre)
Variant2はもう少し複雑で、間接分岐(Indirect Branch)の分岐先バッファ(BTB:Branch Target Buffer)を利用した攻撃である。BTBは複数のスレッドや複数の権限レベル(つまりカーネルモードで動作しているか、ユーザーモードで動作しているか)を区別せず、一意に分岐先アドレスを格納する。これを利用するのである。
具体的にはあるスレッドにてユーザーモードであえて変な分岐先アドレスをBTBに学習させることで、他のスレッドあるいはカーネルモードにおけるBTBミスを誘発させる。その後で、特定アドレス(例えば別のスレッドが使っていると予測されるメモリアドレス)のアクセス時間を測定することで、そのスレッドがどこのメモリアドレスを使っているかを推察できるというものだ。
GoogleのセキュリティチームであるProject Zeroは、IntelのHaswellベースのBTB構造を解析し、これに基づいてあるスレッドが、別のスレッドの利用しているメモリアドレスを推定できることを示した。
Copyright © ITmedia, Inc. All Rights Reserved.
特集(エレクトロニクス)
「エレクトロニクス」関連の特集記事です。
この記事の著者
新着ホワイトペーパー PR
-
製品資料
[株式会社 Green AI] AIで脱炭素計画を最適化、初年度からエネルギーコストとCO2を削減する方法 -
市場調査・トレンド
[スマートジャパン編集部] 「ペロブスカイト太陽電池」の普及戦略が公表 政府が目指すコスト・導入量のロードマップを解説 -
市場調査・トレンド
[スマートジャパン編集部] 導入が加速する再エネ・系統向け蓄電システム コスト・収益性の現状分析 -
技術文書・技術解説
[スマートジャパン編集部] いまさら聞けない「ペロブスカイト太陽電池」の基礎知識と政策動向 -
技術文書・技術解説
[スマートジャパン編集部] 「ペロブスカイト太陽電池」の開発動向、日本の投資戦略やコスト目標の見通しは?
関連記事
こんなメディアも見られています
TechFactoryに関連する情報をお探しであれば、こちらのメディアもお役に立てるかもしれません。
特集
- マテリアルズ・インフォマティクスの動向調査
- 研究・開発職のデジタル活用調査
- 設計・解析業務におけるAI活用
- 3Dプリンタ利用動向調査
- CAD利用動向調査
- つながる工場の現状と課題
- 製造業におけるAI開発および活用の実態
- 設計・製造現場における品質管理
ホワイトペーパーランキング PR
-
1
EE Times Japan×EDN Japan 統合電子版:フィジカルAIが生み出す新たな「設計思想」――電子版2026年8月号
-
2
半導体装置メーカー 業績まとめ【2027年3月期第1四半期】
-
3
新入社員に読んで欲しい鉄鋼材料の基礎知識まとめ(Part4)
-
4
一時は時価総額トヨタ超え キオクシア2026年度の動向
-
5
微細配線間の絶縁劣化をどう捉える? 先端パッケージ評価の最前線
-
6
新入社員に読んで欲しい鉄鋼材料の基礎知識まとめ(Part1)
-
7
EE Times Japan×EDN Japan 統合電子版:2026年上半期の半導体業界を振り返る――電子版2026年7月号
-
8
新入社員に読んで欲しい鉄鋼材料の基礎知識まとめ(Part3)
-
9
CADツールの見直しは本当に必要? 切り替えの理由と効果を7つの質問で検証
-
10
新入社員に読んで欲しい鉄鋼材料の基礎知識まとめ(Part2)
TechFactory SNS
インフォメーション
注目情報をチェック
TechFactoryをフォロー