/ proc / cpuinfoの「バグ」セクションには実際に何が表示されますか?


23

現在のカーネルとマイクロコードがインストールされているDebian Stretchおよびtesting / Busterシステムでは、メルトダウンとスペクターがバグとしてリストされてい/proc/cpuinfoます。

ただし、spectre-meltdown-checkerショーを実行しても脆弱ではありません。

だから私は何/proc/cpuinfoが表示されるのだろうかと思っています。これらはこのCPUの脆弱性にすぎませんか?パッチを適用したシステムがあるにもかかわらず、それらは常にリストされますか?

回答:


22

の「バグ」フィールドの意図は、それを導入/proc/cpuinfoしたコミットメッセージ説明されています。

x86/cpufeature:バグフラグを追加 /proc/cpuinfo

機能フラグと同様の方法で、実行中のCPUにバグの回避策を検出または適用したことを示すフラグをダンプします。

利点は、CPU機能のように時間の経過とともに蓄積されないことです。

以前は、カーネルが検出したハードウェアバグは個別の機能としてリストされていましたたとえば、32ビットx86システムに独自のf00f_bugエントリがある悪名高いF00Fバグ/proc/cpuinfo)。「バグ」エントリは、x86 CPUフラグと同じスタイルで、これらを単一の機能で保持するために導入されました。

メッセージでわかるように、実際のエントリの意味については、カーネルがハードウェアのバグを検出したことだけが保証されています。他の場所を見る必要があります(ブートメッセージ、または特定の/procエントリまたは/sysファイルなどのエントリ/sys/devices/system/cpu/vulnerabilities/問題が処理されているかどうかを判断するには、)を調べる必要があります。

「バグ」エントリの有用性は2つの方法で制限されています。1つ目は、真のネガは未知のものと区別できないことです。フィールドに「cpu_meltdown」が指定されていない場合、カーネルがMeltdownを認識していないことを意味するかどうかを(フィールドから)知ることができません。 CPUがメルトダウンの影響を受けないこと。2つ目は、検出が単純すぎる可能性があることです。警告の側でエラーが発生するため、CPUが脆弱でない場合でも脆弱であると報告される場合があります。「検出」はテーブル駆動型であるため、その精度は実行しているカーネルのバージョンに依存します。

メルトダウンとスペクターのバグの場合、x86では、値を供給する検出プロセス/proc/cpuinfo は次のよう機能します

  • CPU が推測(486クラス、一部のPentiumクラス、一部のAtom)を実行しない場合、MeltdownまたはSpectreの影響を受けたというフラグは立てられません。
  • 残りのすべてのCPUは、(マイクロコードリビジョンなどに関係なく)Spectreバリアント1および2の影響を受けるとフラグが立てられます。
  • CPU が投機的ストアバイパスの影響を受けないとしてリストされていない場合、そのマイクロコードがSSBを緩和することを主張していない場合、およびCPUがSSBを緩和することを主張していない場合、SSBの影響を受けたとしてフラグが立てられます;
  • CPU がMeltdown(AMD)の影響を受けないとしてリストされておらず、そのマイクロコードがMeltdownを緩和すると主張していない場合、Meltdownの影響を受けたとしてフラグが立てられます。

2
スペクターとメルトダウンの場合、それらは検出されさえしませんが、ただ仮定されます。私はどちらの影響も受けないx86を持っていますが、カーネルは基本的に「マイクロコードパッチが適用されていないXより古いIntel cpuはメルトダウンに対して脆弱です」と言うハードコードされたルールが原因であると報告しています。
R ..

2
@R .. CPUがカーネル内の順序テーブルに含まれていますか?(最新のテーブルを見るには、ここで「cpu_no_speculation」を探してください。)これは、実際には「バグ」エントリwrtの問題の1つです。メルトダウン、スペクターなどの「検出」はテーブル駆動型であるため、その精度はカーネルがどれだけ最近のものであるかに本当に依存します。
スティーブンキット

いいえ、それはCenterton Bonnellであり、そこから欠落しています。パッチの提出について説明します。
R ..

ブート中にカーネルをロードした後にマイクロコードの更新が適用されたときに、これがまだ正しいかどうか誰もが知っていますか?
バクサウ

12

Meltdown / Spectreの脆弱性はCPUチップセットの設計/アーキテクチャにあり、新しい将来のハードウェアを購入する手間がかからず、パッチは長期にわたるセキュリティの素晴らしい幻想です。欠陥を悪用する新しい方法は、現在のパッチをバイパスできる可能性があります。

つまり、現在のソフトウェアパッチ/マイクロコードは、Spectre / Meltdownファミリーのエクスプロイトの既知の方法に対する問題を軽減しますが、そもそもそれらを可能にする根本的なCPU設計の問題を解決しません。影響を受けた(数世代の)CPUは、長期的には脆弱性を持つのを止めていません(おそらくほとんどそうはならないでしょう)。

ただし、@ Gillesが正しく述べているように、その警告は現在の既知の悪用Spectre / Meltdownメソッドが機能することを意味しません。パッチがインストールされている場合は機能しません。

質問で言及されたケースでは、カーネルはSpectre / Meltdownの影響を受けることが知られているCPUモデル(x86についてのみ話している場合は現在のところすべてのx86 CPU)のみをチェックしているためcpu-insecure、バグセクションにまだリストされています/ line in /proc/cpuinfo

を確認してください/proc/cpuinfo。カーネルにKPTIパッチがある場合、cpu_insecureが含まれます

KPTIパッチには次のコードが含まれていることがわかりました。

   /* Assume for now that ALL x86 CPUs are insecure */
   setup_force_cpu_bug(X86_BUG_CPU_INSECURE);

そして、カーネルの更新後、次のものが得られます。

bugs      : cpu_insecure

PS。Spectre / Meltdownの「バグ」を悪用する新しい方法のアップデートがすでにありました。おそらく最後ではないでしょう。


2
たとえば、しばらくの間ハードウェアの購入を延期できる場合は、新しい世代のCPUを待ちます。私の水晶玉は、中期的にピーナッツを販売する多くのセカンドハンドサーバーがあることを教えてくれます。
ルイFリベイロ

CPUバグは/proc/cpuinfo、ソフトウェアパッチによって完全に軽減された場合でもリストされます。それらの存在は、システムがその特定のバグに対して脆弱であることを意味するものではありませ
ジル 'SO-悪であるのをやめる'

@Gillesが付与された場合、既知のエクスプロイトを適用することはできません。ただし、すでに第1世代のパッチを巡るエクスプロイトが既に行われているため、大規模なCPUの再設計を強制する根本的な設計上の欠陥であるという批評家を黙らせるために、多くの商業的関心があります。
ルイFリベイロ

1
それはSpectre / Meltdownタイプのエクスプロイトにも当てはまり、それらは今後も提供し続ける基本的な設計上の問題です。しかし、あなたはこれがbugsラインショーに当てはまることを書きました、そして、これはちょうど間違っています。ほとんどのCPU設計のバグには、わずかなパフォーマンスしか必要としない完全なソフトウェア回避策があります。カーネルが回避策を適用する場合、バグは無害です。
ジル「SO-悪であるのをやめる」

1
@Rui oh私は十分に明確に自分自身を表現していなかったと思います。つまり、記事がこの質問に答えなかったのではなく、自身のタイトルが尋ねた質問に答えなかったことを意味しました;-)。(この記事のタイトルは「業界を破壊するSpectreのバグが7か月間秘密になった方法」ですが、この記事ではIMOがどのように説明されていないの。)
Stephen Kitt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.