Meltdown と Spectre について (Reading privileged memory with a side-channel) のメモを、SQL Server を絡めながら。
Microsoft からの情報については、次の情報を起点とするとよいかと思います。
ADV180002 | Guidance to mitigate speculative execution side-channel vulnerabilities
SQL Server 観点でいうと、この中では「Microsoft SQL Server customers」で記載されている、SQL Server Guidance to protect against speculative execution side-channel vulnerabilities にまとめられています。
基本的には次の 3 点を実施することになるのではと思いますが、2018/1/5 時点では、「1.」についてはまだ公開されていないようですので、「2.」「3.」について対応を検討する必要が出てきます。
- ファームウェア更新による CPU のマイクロコードの更新
- OS の更新プログラムの適用
- SQL Server の更新プログラムの適用
SQL Server のガイドの「Performance advisory」で、パフォーマンスについての注意事項が記載されていますが、サーバーで実行しているワークロードによっては、パフォーマンスへの影響についても考慮しておく必要がありますので、適用後の状況のウォッチは検討しておく必要があるのが現状かと思います。
推奨としては、検証環境に適用をして確認をすることになっています。
このドキュメントでは「SQL Server を実行している環境」ごとに、どのようなアクションをとればよいかが記載されています。
「パブリッククラウド (パブリックホスティング環境) で対応が表明されているもの」以外で動作させている場合、SQL Server 専用の物理環境となっており、信頼されていないアプリケーション (ここでいう信頼されていないというのは、個別に作成をしておらず、外部から入手しただけの内容が不明なものという意味だと思います) を実行していない環境については、即時のパッチ適用の必要はないというような記載になっています。
仮想環境で実行している場合には、他の仮想マシンから脆弱性を使用される危険性を考慮した、アクションが必要になってくるかと。
SQL Server の環境では、OS + SQL Server の 2 点のパッチ適用を検討する必要があります。
Contents
■OS のパッチ
Windows Server の OS 部分については、次の技術文書にまとめられています。
- Windows Server guidance to protect against speculative execution side-channel vulnerabilities
- Important information regarding the Windows security updates released on January 3, 2018 and anti-virus software
パッチについては、Windows Server 2016 / Windows Server verswion 1709 用の 2 バージョン向けに提供が行われているため、サーバー OS のバージョンによって適用対象が変わってきます。
(現状、運用環境のサーバーで、1709 を使っているのはレアケースな気がしますが)
- http://www.catalog.update.microsoft.com/Search.aspx?q=KB4056890 (Windows Server 2016)
- http://www.catalog.update.microsoft.com/Search.aspx?q=KB4056892 (Windows Server Version 1709)
累積更新と差分更新の 2 種類がありますが、これらは次のようになっており、初期状態から今回の修正部分のみを適用するというアプローチではなく、2018/01 までの累積更新をどのように適用するかの手法の違いになります。
- 2017/12 までの更新を未適用の環境に一括で 2018/01 までの累積更新を一括で適用
- 2017/12 までの更新を適用済みの環境に 2018/01 の差分のみを適用
手元の環境で試してみたところ、
- Microsoft Update Catalog からモジュールをダウンロードしてインストール
- ウイルス対策ソフトとの相性で、BSOD を引き起こす可能性があるため、この方法はお勧めしません。
Windows Update が実行できない環境下で適用する場合にのみ使用するのが良いかと。
- ウイルス対策ソフトとの相性で、BSOD を引き起こす可能性があるため、この方法はお勧めしません。
- ウィルス対策ソフトの更新で、「Key=”HKEY_LOCAL_MACHINE” Subkey=”SOFTWARE\Microsoft\Windows\CurrentVersion\QualityCompat” Value=”cadca5fe-87d3-4b96-b7fb-a231484277cc” Type=”REG_DWORD”」のレジストリが設定された後に、Windows Update 経由でインストール
の 2 種類の経路がありそうでした。
今回の更新は、ウイルス対策ソフト側の対応状況によっては、BSOD を引き起こす可能性もあるようで、ウイルス対策ソフトをインストールしている環境では、適切なレジストリが設定されていないと、Windows Update の適用対象とはならないようです。(手動でダウンロードしての適用はできるようですが)
Windows Server 2016 標準の Windows Defender を使用している場合も、最新の定義ファイルへの更新時に「QualityCompat」のレジストリが設定されており、Defender の定義を更新しないと Windows Update で、KB4056890 は認識されていなかったので、何らかのウイルス対策ソフトが入っている場合、レジストリは必要となるようですね。
この辺の検証は、レジストリの値を書き換えて「(
New-Object
-ComObject
Microsoft.Update.AutoUpdate).DetectNow()
」を実行することで検証できるかと。
脆弱性に対しての緩和策が適切に設定されているかについては、Windows Server guidance to protect against speculative execution side-channel vulnerabilities に記載されている「Get-SpeculationControlSettings」で確認することができます。
これにより次の 3 種類の状態が確認できるかと。
- * Install BIOS/firmware update provided by your device OEM that enables hardware support for the branch target injection mitigation.
- * Install the latest available updates for Windows with support for speculation control mitigations.
- * Follow the guidance for enabling Windows Server support for speculation control mitigations described in https://support.microsoft.com/help/4072698
最新の更新プログラムを適用することで「2.」は消すことができますが、現状、ファームウェアが提供されていない環境が多いと思うので「1.」の
- * Install BIOS/firmware update provided by your device OEM that enables hardware support for the branch target injection mitigation.
を消すことは難しいかもしれません。
- * Follow the guidance for enabling Windows Server support for speculation control mitigations described in https://support.microsoft.com/help/4072698
については、消すことが可能ですが、こちらのメッセージついては、KB を適用するだけでは消えません。
技術情報に記載されているレジストリを適切に設定して再起動をすることで、緩和策が適用され、サーバーについてのメッセージが消えます。
ただし、パフォーマンスの影響については懸念が残るため、問題があった場合は、レジストリの設定を変更し、緩和策を無効にするというような運用も検討する必要があります。
Install-Module で「SpeculationControl」を実行できない環境では、一度、他の環境でモジュールをインストールし、インストールした環境の「C:\Program Files\WindowsPowerShell\Modules\SpeculationControl」する、Speculation Control Validation PowerShell Script のスクリプトをダウンロードして、チェックを行うというようなことを考える必要があるかと。
■SQL Server のパッチ
SQL Server のパッチについては、CU (Cumulative Update) または、GDR (General Distribution Release)として提供されています。
SQL Server のパッチ種別については、報告された問題に対する修正プログラムを提供する SQL Server チームの増分サービス モデル (ISM) について で公開されており、GDR については次の区分となっています。
GDR では、広範にわたってユーザーに影響を与える問題やセキュリティに影響を与える問題、またはその両方を修正します。GDR は、マイクロソフトの判断により、適切な状況、かつ適切なときに公開されます。GDR は最小限に抑えられています。
今回は、メモリ内のデータの参照となるため、SQL Server の観点でも修正プログラムを提供した形でしょうか。
詳細については、SQL Server Guidance to protect against speculative execution side-channel vulnerabilities? で記載されていますが、今回の対象としては、「IA64 版を除いたサポートされている SQL Server のすべてのバージョン」となっています。
(IA64 については、現状は問題の対象になるとは考えられていないようですが、今後変わるかもしれないですね)
そのため、次のバージョンが該当することになり餡巣。
- SQL Server 2008
- SQL Server 2008 R2
- SQL Server 2012
- SQL Server 2014
- SQL Server 2016
- SQL Server 2017 (Windows / Linux)
現時点で修正プログラムが提供されているものは、次のバージョンとなっており、それ以外のバージョンについては、2018/01/06 時点では、修正プログラムのリリース待ちとなっています。
SQL Server 2017 については、現時点では Docker / Linux 向けの CU3 はリリース待ちとなっており、使用している OS に応じたリリースタイミングの差が出ている形になっています。
2018/01/09 時点で、Docker / Linux 版も CU3 がリリースされています。
問題が Fix されている CU を適用するか、該当バージョンに CU を適用したくない場合は、GDR を適用することによる対応となっています。
現状、使用しているバージョンによっては、GDR を適用するために SP を適用する必要が出てくるかもしれませんので、これについては今後リリースされてくる修正プログラムの対応バージョンをきちんと把握する必要がありそうですね。
上記のバージョンの修正プログラムの内容については次のドキュメントから確認することができます。
- SQL Server 2016
- SQL Server 2017
モジュールについては、次のリンクから入手可能です。
-
- SQL Server 2016
- Security Update for SQL Server 2016 SP1 (KB4057118) (SQL Server 2017 SP1 GDR)
- Security Update for SQL Server 2016 SP1 CU (KB4058561) or MicrosoftR SQL ServerR 2016 SP1 Latest Cumulative Update
(SQL Server 2016 CU7 : 2018/01/06 時点では、CU7 が最新なのでどちらも同一)
- SQL Server 2017
- Security Update for SQL Server 2017 RTM (KB4057122) (SQL Server 2017 GDR)
- Security Update for SQL Server 2017 CU (KB4058562) or SQL ServerR 2017 for MicrosoftR Windows Latest Cumulative Update
(SQL Server 2017 CU3 : 2018/01/06 時点では、CU3 が最新なのでどちらも同一)
SQL Server Guidance to protect against speculative execution side-channel vulnerabilities で解説されていますが、SQL Server では SQL 以外のプログラム実行方法として、次のようなものがあります。
標準のものや、自分で開発したものではなく、インターネットで中身を把握しないまま利用しているようなものがある場合は、信頼されていないアプリケーションと取ることができ、内容に問題がないかの検討が必要となってきます。
といっても、この辺はサーバーにアプリケーションをインストールして使い場合と同じ考えですので、SQL Server に限った話ではありませんが。
- CLR (SQLCLR) によるアセンブリの実行
- R/Python の外部ライブラリ/スクリプトの実行
- リンクサーバーを使用した外部サーバーの機能の利用
- 拡張ストアドプロシージャの実行
[…] 情報源: ADV180002 (CVE-2017-5753 / CVE-2017-5715 / CVE-2017-5754) についてのメモ at SE の雑記 […]
ADV180002 (CVE-2017-5753 / CVE-2017-5715 / CVE-2017-5754) についてのメモ at SE の雑記 | OPC Diary
6 1月 18 at 10:39