スペクター保護を無効にする方法:Linuxカーネルに新しいパラメーターが追加されました

Linuxカーネルには、サーバー上で実行されているすべての子プロセスのSpectre v4脆弱性に対する保護を無効にするフラグが表示されています。 新しいパラメーターの詳細-カットの下。





/ Flickr / Rie H / CC BY /写真が変更されました



保護を無効にする必要があったのはなぜですか



Spectreプロセッサの脆弱性グループは、2018年の初めに初めて知られるようになり、次の数か月でこのファミリに新しい「セキュリティホール」が追加されました。 脆弱性は、プロセッサのパフォーマンスを向上させるシステムの動作( 投機的書き込みおよび読み取りと遷移の予測)に関連しており攻撃者がIntelおよびAMDのプロセッサのメモリ分離メカニズムをバイパスできるようにします。



脆弱性を解決するために、オペレーティングシステムの開発者はパッチを発行しますが、それらをインストールすると、サーバーの速度が低下することがよくあります。 たとえば、Linuxマシンでは、一部のSpectreパッチによりパフォーマンスが30〜50% 低下します。



システム管理者は、特に大規模なデータセンターではこの問題に不満でした。 彼らは、Linuxカーネル開発者に、Spectre保護を選択的に無効にするように依頼し始めました。 発見された脆弱性のいくつかは、本質的に理論的なものにすぎず、多くのシステムでは、原則として害を及ぼすことはできません。 たとえば、レンダーファームとオフラインスーパーコンピューターはインターネットから切断されているため悪意のあるコードの挿入を恐れません



Linuxチームはユーザーに会い、脆弱性Spectre v1、v2(後で詳しく説明します)およびv4に対する保護を無効にするいくつかの機能を導入しました。 それらの最後は、現在のすべてのカーネルバージョンに対して2月上旬に導入されました-これは新しいフラグPR_SPEC_DISABLE_NOEXECです。



機能を無効にする理由と理由



Spectre v4の脆弱性は、投機的ストアバイパスと呼ばれます。 これにより、マルウェアは、プロセッサが以前不要であると破棄した投機的なコンピューティング結果にアクセスできます。



この状況は、CPUが間接アドレス指定を使用して読み取りと書き込みを交互に行うときに発生します。 読み取りは書き込みよりも頻繁に行われ、プロセッサは間接アドレスのオフセットの計算を待たずに、メモリからのデータを使用して読み取りアドレスを決定できます。 オフセットを計算した後、書き込みと読み取りのメモリ領域の交差が検出された場合(つまり、読み取りが間違った領域から実行された場合)、2番目の操作が再度実行され、投機的な結果は破棄されます。



理論的には、攻撃者がメモリセルのアドレスと構造を知っている場合、攻撃者はそれらから暗号化キーなどのデータを抽出できることがわかります。



Spectre v4のパッチは、脆弱性に関する情報が公開されてから数日後にLinuxカーネルに登場しました。デフォルトでメモリの曖昧解消機能がオフになり、コマンドの異常な実行が可能になりました。 しかし、これによりプロセッサーの入出力操作が10〜40% 遅くなりました





/ Flickr / Rie H / CC BY-SA



また、2018年6月上旬に、カーネルリリース4.17により、この保護を無効にすることが可能になりました。 1つの問題がありました:パラメーターが親プロセスから子プロセスに渡されませんでした。 彼らにとって、保護は手動で無効にする必要があり、システム管理者に不便をもたらしました。 しかし、2月上旬に、カーネル開発者はフラグPR_SPEC_DISABLE_NOEXECを実装しました 。 以前の機能を補完し、Specter v4のパッチの動作モードを親プロセスから子プロセスにコピーします。 PR_SPEC_DISABLE_NOEXECはprctlの一部であり、新しいプロセスを開始するときに有効にすることができます。



専門家の言うこと



Linuxカーネル開発者のメーリングリストで、新しいフラグの導入はRed HatのWaiman Long によって書かれました 。 彼によると、Spectre v4からの保護は、データベースなど、多くの書き込み操作を実行するアプリケーションのパフォーマンスに大きく影響します。 PR_SPEC_DISABLE_NOEXECは、パッチを無効にするためのチェックを自動化し、多数の同時実行プロセスを持つサーバーを高速化するのに役立ちます。



同時に、ITコミュニティの参加者は、特定の状況では、新しいフラグの不注意な取り扱いが不快な結果につながる可能性があることに注意しています。



「一部の環境では、Spectre v4からの保護を無効にすることは安全ではないことに注意する価値があります」と、 IaaSプロバイダー1cloud.ruの開発部門の責任者であるSergey Belkin氏は述べています 。 -これらには、たとえば、JavaおよびJavaScriptを使用するWebサービスが含まれます。 マネージコードによる制御プロセスの内容の開示は、アプリケーションのセキュリティにとって致命的です。」


Linuxカーネルの他のSpectreパッチについて



PR_SPEC_DISABLE_NOEXECフラグに加えて、Linuxカーネルには、Spectre保護を無効にする他のパラメーターがあります。



最初のものはnospectre_v2です。 この機能により、Spectre v2からの保護が無効になり、攻撃者が遷移予測ブロック使用して、特定のメモリモジュールでプロセッサを投機的に実行するように「強制」することができます。 保護のため、このパッチ間接遷移予測機能を無効にし、同じCPUコア内のスレッド間で受信した情報の転送を禁止します。



保護を無効にすると、プロセッサのパフォーマンスが30%向上します。これが、Spectre v2からのパッチをインストールした後に低下した理由です。 Linuxの作成者であるLinus Torvaldsでさえ、この新機能をサポートしていました。 彼によると、この脆弱性はSMT機能を備えたプロセッサのみを脅かすものであり、この特定のケースでは、 SMT機能を無効にした方が収益性が高くなります。



2番目のパラメーター-nospectre_v1-は、最初のSpectreオプションからの保護を無効にします。 ハッカーはマルウェアの助けを借りて、プロセッサに条件付き遷移の結果を誤って予測させ、ハッカーが必要とするメモリ領域の投機的計算の結果を破棄させることができます。 v1からのパッチはパフォーマンスに大きな影響を与えませんが(一部のレポートによると、プロセッサー速度の低下はまったく無視できます)、開発者この保護を無効にする機能をカーネル追加するように要求しました。 これにより、外部アクセスから隔離されたネットワークの構造を簡素化することができました。



Linuxカーネル開発コミュニティは、Linus Torvaldsが最初に定めた自由選択の考えに忠実です。ユーザー自身がLinuxシステムのセキュリティとパフォーマンスのバランスを取る責任があります。 そのため、Spectreに類似した新しい脆弱性がカーネルで発見された場合、パッチとそれを無効にする機能の両方が表示されることを期待する必要があります。



当社の企業ブログからの投稿:





All Articles