
サイバー・セキュリティ・ソリューション(CSS)部
エバンジェリスト 松岡 政之
こんにちは。
CSS
部エバンジェリストの松岡です。
31
年続いた平成が終わりを告げ、令和元年、皆様いかがお過ごしでしょうか。
まだ五月の終わりですが、まるで真夏かのような猛暑が続きましたね。
そんな暑さの中、
CPU
に関してとても熱いニュースが舞い込んできました。
5 月 27 日、世界有数の ICT と IoT に関するイベント COMPUTEX 2019 の基調講演にて AMD の次期 CPU 、 RYZEN 3000 シリーズが発表されました。
より大規模なマルチコアに容易に対応するために今までの CPU からは大きく構造を変えたり、 PC 向けとしては初めて 7nm のプロセスルールを採用したりと、技術的にも非常に興味深い製品なのですが、驚くべきはその性能と値段です。
まず性能の面では、今まで一般向けのデスクトップ市場では 8 コアまでしかありませんでしたが、今回なんと 12 コアがラインナップに追加されました。
価格面では、 12 コアは今まで Ryzen Threadripper 2920X が $649 、 Core i9-9920x が $1199 といった価格でクリエイターなどを対象としたハイエンドデスクトップ市場で発売されていますが、今回発表された Ryzen 3900X はなんと $499 とまさに価格破壊です。
このような安価を実現できた技術について非常に面白い内容なのですが、今回の主題とは異なるので割愛します。
気になる方はぜひ Zen2 アーキテクチャで検索してみてください。発売は 7 月 7 日とのことなので首を長くして待ちたいと思います。
さて、今回は前置きもタイトルに合わせて
CPU
の話題にしてみましたが、ここからが本題です。
昨年
12
月にコラム
【エバンジェリスト・ボイス】
2018
年
CPU
脆弱性まとめ
内にて
CPU
脆弱性について列挙しましたが、その後も複数の脆弱性が報告されていますのでピックアップしてみましょう。
予め注意書きをしておきますが、これから挙げるものは発見されているすべての脆弱性を網羅するものではなく、対策を急かすものでもありません。
まだ実際の攻撃への利用が確認されていないものや対策パッチを適用することで性能が低下するものもあります。
本記事は、対策の必要性の有無を議論するものではなく、技術的な話題の一つとして見ていただければ幸いです。
SPOILER
この脆弱性も
Meltdown
や
Specter
で話題になった投機的実行に起因するものです。
しかし、
Meltdown
や
Specter
とは根本原因が異なるため同様の対策では回避することができません。
SPOLER
で対象になっているのは「ストアフォワーディング」と呼ばれる投機的実行技術です。
これを理解するためにはアセンブラレベルの知識が必要なのですが、少しかみ砕いてさわりだけ説明します。
CPU が内部で扱う命令としてデータをメモリに格納するストア命令とデータをメモリから読み出すロード命令があります。
このうち、ロード命令については前の命令の実行結果を待たずに実行(投機的実行)をしても、ロードしたデータが結果的に間違ったものとなる可能性はありますが、メモリを書き換えたりすることはないので他の命令に直接影響を与えることはありません。
結果的に間違ったものとなる場合として、直前にストア命令がありそれが完了する前に同じアドレスに対して投機的にロード命令を実行した場合が挙げられます。
そこで、ストア命令が格納されているバッファからストア先のアドレスを確認し、ロード命令と同じアドレスが参照されていれば、ストア命令が格納するデータをロード命令にフォワードすることで間違った結果をロードしないようにします。
これが「ストアフォワーディング」です。
これは、命令が利用するアドレスがメモリの物理アドレスだけの場合なら単純なのですが、仮想アドレスが混在した場合には物理アドレスの計算等が必要になり、(物理アドレスの計算が行われるタイミングは非常に遅いので)ストアフォワーディングを行うかどうかについても投機的に判断されます。
投機的実行というものは当たれば先んじて実行できているため高速化できますが、外れてしまった場合は再実行をするため、当たった場合と外れた場合で CPU の計算速度が大きく違ってきます。
この脆弱性に限らず、投機的実行に起因する脆弱性の多くはこの違いを観測することで本来読み出せないデータを読み取ることを可能にするものです。
更に詳しく知りたい方は下記サイトから直接論文を読むことができますのでご参照ください。
外部サイト: Cornell University
Microarchitectural Data Sampling (MDS)
この脆弱性についても投機的実行に起因するもので、詳細には以下の
4
つに分類されます。
- CVE-2018-12126 : Microarchitectural Store Buffer Data Sampling ( MSBDS )
- CVE-2018-12127 : Microarchitectural Load Port Data Sampling ( MLPDS )
- CVE-2018-12130 : Microarchitectural Fill Buffer Data Sampling ( MFBDS )
- CVE-2018-11091 : Microarchitectural Data Sampling Uncacheable Memory ( MDSUM )
このうち、
MFBDS
については
Zombieload Attack
と名づけられ、概念実証コードがすでに公開されています。
ただし、これらの脆弱性についてはすでに対策パッチなどの緩和策が
Intel
や各
OS
ベンダなどから公開されています。
Zobieload Attack の発生する原因としては、ロード命令において例外が発生した場合、通常利用されないはずの投機的実行によって前もって読みだされキャッシュされていた古いデータが利用されてしまう場合があるというものです。
Meltdown と同様に、ここで読みだされたデータが投機的実行の中止に伴うロールバックの前に後続の命令によって利用できてしまう点が問題となっています。
Zombieload は攻撃者が指定したアドレスをピンポイントで読みだすといったことはできず、現在ロードされている値がリークされるという特徴があり、これ単体では狙ったデータを読み出すといったことは基本的にはできません。
しかし、下記 URL にある今回の脆弱性の発見者によるデモンストレーションのようにその他の攻撃手法と組み合わせることでパスワード等を漏洩させることも理論的には可能です。
外部サイト:
ZombieLoad in Action: Spying on your visited websites
※動画サイトなので音量等にご注意ください
こちらについても論文が公開されていますので、さらに詳しく知りたい方は下記をご参照ください。
外部サイト:
Cornell University
まとめ
今回は
SPOILER
と
MDS
(のうち
Zombieload
)について取り上げましたが、ほかにも複数の脆弱性が発見されています。今回取り上げたものもそうですが、昨年年始に発表された
Meltdowm/Spectre
以来投機的実行を観測することによるサイドチャネル攻撃に関する脆弱性が多数発見されています。研究者の興味がそちらに向いている当面はこのような傾向は続くと思われます。
こういった攻撃はデータの兆候を観測する必要があるため、一朝一夕で攻撃を成功させることができるような物ではありませんのであわてて対応して実業務に影響が出るようなことは避けたいですね。
しかし、実証コードが公開されているものもあるように攻撃に利用できるということは証明されているため放置してしまってもいいかと問われるととても難しい問題です。
他のセキュリティの対応と同様に、リスクと対応コストをきちんと天秤にかけたうえで対応方針を決めていただければと思います。
それはそれとして、このような
CPU
脆弱性はそのアーキテクチャや実装に依存しているため、情報を調べてみると今使われている
CPU
の仕組みについての理解が深まります。
多くの方はあまり興味ないかもしれませんが、自分が普段利用しているものは一体どういう仕組みで動いているのか少し気にしてみると面白い発見もあるかもしれませんよ?
それではまた次回のエントリーでお会いしましょう!
当サイトの内容、テキスト、画像等の転載・転記・使用する場合は問い合わせよりご連絡下さい。
エバンジェリストによるコラムやセミナー情報、
IDグループからのお知らせなどをメルマガでお届けしています。