スペクター、メルトダウンおよびマイクロアーキテクチャ データ サンプリングの脆弱性から SQL Server を保護するためのガイダンス

適用対象: Microsoft SQL Server

概要


マイクロソフトは、多くの最新のプロセッサやオペレーティング システムに影響を及ぼす “投機的実行サイド チャネル攻撃” と呼ばれる新たに公開されたクラスの脆弱性を認識しています。 影響を受けるプロセッサには、Intel 製、AMD 製、ARM 製が含まれます。 

注: この問題は、Android、Chrome、iOS、macOS など他のシステムにも影響があります。  そのため、各ベンダーのガイダンスを参照することをお勧めします。

Microsoft は、既にこれらの脆弱性を軽減するのに役立つ更新プログラムをいくつかリリースしています。 このほか、弊社のクラウド サービスを保護する対策も既に講じています。 詳細については、以下のセクションを参照してください。

現時点において、Microsoft はお客様を攻撃する目的でこれらの脆弱性が使用されたことを示す情報を得ていません。 マイクロソフトは、チップ メーカー、ハードウェア OEM、アプリケーション ベンダーを含む業界のパートナーと引き続き緊密に連携してお客様を保護いたします。  提供されているすべての保護対策を利用するには、ハードウェアまたはファームウェアの更新プログラムとソフトウェア更新プログラムが必要です。 これには、デバイス OEM のマイクロコードや、場合によっては、ウイルス対策 ソフトウェア用の更新プログラムが含まれます。

これらの脆弱性の詳細については、マイクロソフト セキュリティ アドバイザリ ADV180002 を参照してください。  このクラスの脆弱性を緩和する一般的なガイダンスについては、「Azure での予測実行のサイドチャネルの脆弱性を軽減するためのガイダンス」を参照してください。  

マイクロソフトは、2019 年 5 月に「ADV190013 - マイクロアーキテクチャ データ サンプリングの脆弱性を軽減するためのマイクロソフト ガイダンス」を公開しました。 SQL Server には、ADV190013 で説明されている問題に特化したセキュリティ パッチがありません。 ADV190013 の影響を受ける環境に関するガイダンスは、この資料の「推奨事項」セクションを参照してください。 このアドバイザリは Intel プロセッサにのみ適用されることに注意してください。

更新プログラムの入手方法およびインストール方法


この更新プログラムは、Windows Server Update Services (WSUS) または Microsoft Update カタログ Web サイトを介して入手できます。

注:
この更新プログラムは、Windows Update から自動的にダウンロードおよびインストールされません。

リリースされている SQL のパッチ

この記事の公開時点において、更新プログラムが適用されている、ダウンロード可能な SQL Server ビルドは以下のとおりです。

サービス リリース

4057122 SQL Server 2017 GDR のセキュリティ更新プログラムについて 2018 年 1 月 4 日
4058562 SQL Server 2017 RTM CU3 のセキュリティ更新プログラムについて 2018 年 1 月 4 日
4058561 SQL Server 2016 SP1 CU7 のセキュリティ更新プログラムについて 2018 年 1 月 4 日
4057118 SQL Server 2016 GDR SP1 のセキュリティ更新プログラムについて 2018 年 1 月 4 日
4058559 SQL Server 2016 CU のセキュリティ更新プログラムについて 2018 年 1 月 7 日
4058560 SQL Server 2016 GDR のセキュリティ更新プログラムについて 2018 年 1 月 7 日
4057117 SQL Server 2014 SP2 CU10 のセキュリティ更新プログラムについて 2018 年 1 月 17 日
4057120 SQL Server 2014 SP2 GDR のセキュリティ更新プログラムについて 2018 年 1 月 17 日
4057116 SQL Server 2012 SP4 GDR のセキュリティ更新プログラムについて 2018 年 1 月 13 日
4057115 SQL Server 2012 SP3 GDR のセキュリティ更新プログラムについて 2018 年 1 月
4057121 SQL Server 2012 SP3 CU のセキュリティ更新プログラムについて 2018 年 1 月
4057114 SQL Server 2008 SP4 GDR のセキュリティ更新プログラムについて 2018 年 1 月 7 日
4057113 SQL Server 2008 R2 SP3 GDR のセキュリティ更新プログラムについて 2018 年 1 月 7 日

このドキュメントは、更新プログラムが適用された新たなビルドがリリースされた時点で更新されます。

注意事項

  • “スペクター”および“メルトダウン”の投機的実行サイドチャネルの脆弱性を緩和するために、SQL Server のすべての必要な更新プログラムをリリースしました。 マイクロソフトは、「“リリースされている SQL のパッチ”」セクションに掲載されているコンポーネントについては、“スペクター”および“メルトダウン”の投機的実行サイドチャネルの脆弱性に対するさらなる露出を認識していません。
  • 今後のすべての SQL Server 2014、SQL Server 2016、および SQL Server 2017 の Service Pack および累積的な更新プログラムにはこれらの修正が含まれます。 たとえば、SQL Server 2016 SP2 には既にスペクターとメルトダウンの修正が含まれています。 
  • Windows ビルドについては、利用できる Windows ビルドの最新情報が記載された次のガイダンスを参照してください。 

    スペクター/メルトダウンの投機的実行サイドチャネルの脆弱性に関する Windows Server 向けガイダンス

    マイクロアーキテクチャ データ サンプリングの脆弱性に関する Windows Server 向けガイダンス

    Linux ビルドの場合、使用している Linux ディストリビューションの、更新プログラムが適用されている最新ビルドを確認するには、Linux ベンダーに問い合わせてください。 
  • スペクターとメルトダウンの脆弱性をできるだけ早く解決するために、これらの SQL Server の更新プログラムは、プライマリ配信モデルとして最初に Microsoft ダウンロード センターを対象に配信されました。 これらの更新プログラムは 3 月に Microsoft Update を介して提供されますが、影響を受けるお客様は Microsoft Update を介して更新プログラムを入手できるようになるまで待たずに更新プログラムをインストールすることをお勧めします。

影響を受けるサポート対象の SQL Server バージョン


マイクロソフトは、定期的なパッチ適用のサイクルの一環として、SQL Server の更新プログラム (以下の一覧) をインストールすることをすべてのお客様にお勧めします。  拡張性ポイントをブロックし、同じサーバー上で実行されているすべてのサード パーティのコードを信頼および承認している安全な環境で SQL Server を実行している場合は、この問題の影響を受ける可能性がほとんどありません。

x86 および x64 プロセッサ システム上で実行されている次のバージョンの SQL Server では更新プログラムを利用できます。 

  • SQL Server 2008
  • SQL Server 2008 R2
  • SQL Server 2012
  • SQL Server 2014
  • SQL Server 2016
  • SQL Server 2017

マイクロソフトは IA64 (Microsoft SQL Server 2008) は影響を受けないと考えています。Microsoft Analytic Platform Service (APS) は、Microsoft SQL Server 2014 または Microsoft SQL Server 2016 に基づいていますが、特に影響はありません。  APS の一般的なガイダンスの一部については、この記事で後述します。

推奨事項


次の表は、SQL Server の実行環境と使用中の機能別にお客様が実施すべきことを示しています。 マイクロソフトでは、実稼働環境に展開する前に、通常の手順に従って修正プログラムを展開し、新しいバイナリをテストすることをお勧めします。 

シナリオ番号

シナリオの説明

推奨事項 (優先度順)

1

Azure SQL Database および Data Warehouse

必要な操作はありません (詳細についてはこちらを参照してください)

2

SQL Server が物理コンピューターまたは仮想マシンで実行されています

さらに、次のいずれの条件にも該当しません

  • 悪意のある可能性があるコードを実行する別のアプリケーションが、同じコンピューターでホストされています
  • 信頼されないコードで SQL Server 拡張性インターフェイスが使用されています (一覧については後述)

 

CVE 2017-5753 から保護するための すべての OS 更新プログラムインストールすることをお勧めします。

マイクロアーキテクチャ データ サンプリングの脆弱性 (CVE-2018-12126、CVE-2018-12130、 CVE-2018-12127、および CVE-2018-11091) から保護するために、すべての OS 更新プログラムインストールすることをお勧めします

カーネル仮想アドレス シャドウ処理 (KVAS) と間接分岐予測の緩和策のハードウェア サポート (IBP) を有効にする必要はありません (後述を参照してください) 

SQL Server のパッチは、次のスケジュールされた更新期間で通常のパッチ処理ポリシーの一部としてインストールする必要があります。

そうしたホスト上でハイパースレッディングを引き続き活用できます。

3

SQL Server が物理コンピューターまたは仮想マシンで実行されています

かつ、悪意のある可能性があるコードを実行する別のアプリケーションが、同じコンピューターでホストされています

さらに/または、信頼されないコードで SQL Server 拡張性インターフェイスが使用されています (一覧については後述)

 

 

 

CVE 2017-5753 から保護するための すべての OS 更新プログラム  をインストールすることをお勧めします。

マイクロアーキテクチャ データ サンプリングの脆弱性 (CVE-2018-12126、CVE-2018-12130、 CVE-2018-12127、および CVE-2018-11091) から保護するために、すべての OS 更新プログラムインストールすることをお勧めします

SQL Server のパッチを適用します (詳細については後述)。 これで CVE 2017-5753 から保護されます。

カーネル仮想アドレス シャドウ処理 (KVAS) を有効にすることが強く推奨されます (詳細については後述)。 これで CVE 2017-5754 から保護されます。

間接分岐予測の緩和策のハードウェア サポート (IBP) を有効にすることが強く推奨されます (詳細については後述)。 これで CVE 2017-5715 から保護されます

Intel 製プロセッサを使用中の場合、ホスト上でハイパースレッディングを無効にすることをお勧めします。

4

SQL Server が物理コンピューターで実行されています

かつ、悪意のある可能性があるコードを実行する別のアプリケーションが、同じコンピューターでホストされていません

かつ、信頼されているコードの実行に SQL Server 拡張性インターフェイスが使用されています

例: 

  • 実稼働環境での使用がレビューおよび承認された CLR アセンブリ 
  • 信頼できる検証済みクエリの実行を信頼するリンクされたサーバー

非推奨例:

  • インターネットからダウンロードされた任意の R/Python スクリプト
  • サード パーティの信頼されていない CLR バイナリ

CVE 2017-5753 から保護するための すべての OS 更新プログラムインストールすることをお勧めします。

マイクロアーキテクチャ データ サンプリングの脆弱性 (CVE-2018-12126、CVE-2018-12130、CVE-2018-12127、および CVE-2018-11091) から保護するために、すべての OS 更新プログラムをインストールすることをお勧めします

カーネル仮想アドレス シャドウ処理 (KVAS) を有効にすることが強く推奨されます (詳細については後述)。 これで CVE 2017-5754 から保護されます。

間接分岐予測の緩和策のハードウェア サポート (IBP) を有効にすることが強く推奨されます (詳細については後述)。 これで CVE 2017-5715 から保護されます

Intel 製プロセッサを使用中の場合、そうした環境でハイパースレッディングを無効にすることをお勧めします。

SQL Server のパッチは、次のスケジュールされた更新期間で通常のパッチ処理ポリシーの一部としてインストールする必要があります。

5

SQL Server が Linux OS 上で実行されています。

ディストリビューション プロバイダーからリリースされた Linux OS の更新プログラムを適用します。

Linux SQL Server のパッチを適用します (詳細については後述)。 これで CVE 2017-5753 から保護されます。

Linux Kernel Page Table Isolation (KPTI) および IBP (CVEs CVE 2017-5754 および CVE 2017-5715) を有効にするかどうかに関するガイダンスについては、以下を参照してください。

上記のシナリオ番号 3 と 4 で Intel 製プロセッサを使用中の場合、そうした環境でハイパースレッディングを無効にすることをお勧めします。

6

Analytics Platform System (APS)

APS は、このセキュリティ情報に記載されている SQL Server の拡張機能をサポートしていませんが、APS アプライアンスに Windows のパッチをインストールすることが推奨されます。 KVAS/IBP を有効にする必要はありません。

パフォーマンスについての注意


更新プログラムを適用するときにはお客様ご自身のアプリケーションのパフォーマンスを評価することをお勧めします。

マイクロソフトはすべてのお客様に対して、更新されたバージョンの SQL Server および Windows をインストールすることをお勧めします。 マイクロソフトが行った SQL ワークロードのテストによると、インストールによる既存のアプリケーションへのパフォーマンスの影響は最小限です。  ただし、すべての更新プログラムは、実稼働環境に展開する前にテストすることをお勧めします。 

マイクロソフトでは、さまざまな環境におけるさまざまな SQL ワークロードに対するカーネル仮想アドレス シャドウ処理 (KVAS)、カーネル ページ テーブル インダイレクション (KPTI)、間接分岐予測の緩和策 (IBP) の影響を測定し、一部のワークロードが大幅に低下することを確認しました。  これらの機能を実稼働環境に展開する前に、機能を有効にした場合のパフォーマンスの影響をテストすることをお勧めします。   これらの機能を有効にすることによるパフォーマンス上の影響が既存のアプリケーションでは高すぎる場合、同じコンピューターで実行されている信頼されないコードから SQL Server を分離する方がそのアプリケーションにとって適した緩和策かどうかを考慮することができます。 

間接分岐予測の緩和策のハードウェア サポート (IBP) によるパフォーマンスへの影響の詳細については、こちらを参照してください。

このセクションは、提供できる新たな情報が出現した時点で更新されます。

カーネル仮想アドレス シャドウ処理 (Windows の KVAS) とカーネル ページ テーブル インダイレクション (Linux の KPTI) を有効にする


KVAS と KPTI は、“メルトダウン” や GPZ 開示の “バリアント 3” とも呼ばれる CVE 2017-5754 を緩和します。

SQL Server は、物理コンピューター、パブリックおよびプライベート クラウド環境の VM、Linux および Windows システム上など、多くの環境で実行されています。環境に関係なく、プログラムはコンピューターまたは VM 条で実行されます。   これをセキュリティ境界と呼びます。

境界内のすべてのコードがその境界内のすべてのデータにアクセスできる場合操作は必要ありません。  それ以外の場合、境界はマルチテナントと言われます発見された脆弱性により、アクセス許可が制限されている場合でも、その境界内の任意のプロセスで実行されている任意のコードが、その境界内の他のデータが読み取られる可能性があります。 信頼されないコードを実行しているプロセスが境界に存在する場合、これらの脆弱性を使用して他のプロセスからデータが読み取られる可能性があります。 この信頼されないコードは、SQL Server の拡張機能メカニズムを使用する信頼されないコードか、信頼されないコードを実行している境界内の他のプロセスである可能性があります。 

マルチテナント境界内の信頼されないコードから保護するには、次のいずれか方法を使用します。

  • 信頼されないコードを削除します。 SQL Server の拡張機能メカニズムの削除方法については、以下を参照してください。  信頼されないコードを同じ境界内の他のアプリケーションから削除するには、通常、アプリケーション固有の変更が必要です。  たとえば、2 つの VM に分けるなどの変更です。 
  • KVAS または KPTI を有効にします。  この場合、パフォーマンスが低下する影響があります。 詳細については、この記事資料で前に説明しています。 

Windows で KVAS を有効にする方法の詳細については、KB4072698 を参照してください。  Linux で KPTI を有効にする方法の詳細については、お使いのオペレーティング システムのディストリビューターに問い合わせてください。  

KVAS または KPTI が強く推奨されるシナリオの例

システム管理者以外のアカウントとして SQL Server をホストするオンプレミスの物理コンピューターの場合、SQL Server (sqlservr.exe の外部でセカンダリ プロセスを使用してこれらのスクリプトを実行する SQL Server) を使用して任意の R スクリプトを実行することができます。 Sqlservr.exe プロセス内のデータの漏えいから保護し、システム カーネル メモリ内のデータの漏えいから保護するには、KVAS と KPTI の両方を有効にする必要があります。 

注: SQL Server 内の拡張性メカニズムを使用するだけで安全になるわけではありません。   このようなメカニズムは、お客様が各依存関係を理解し、信頼している限り、SQL Server 内で安全に使用できます。 また、SQL 上に構築された他の製品もあります。その中には、拡張メカニズムが適切に機能する必要がある製品もあります。 たとえば、SQL Server の上に構築されたパッケージ化されたアプリケーションが正しく機能するには、リンク先のサーバーまたは CLR ストアド プロシージャが必要になる場合があります。

マイクロソフトでは、緩和策の一環としてこれらを削除することを推奨していません。  代わりに、各使用方法を見直して、最初の操作としてこのコードを理解し、信頼しているかどうかを判断します。  このガイダンスは、KVAS を有効にする必要があるかどうかをお客様が判断するために役立ちます。  この操作はパフォーマンスに大きな影響を与えるため、お客様が判断する必要があります。 

間接分岐予測 (IBP) のハードウェア サポートを有効にする


IBP は、スペクターまたは GPZ の開示の “バリアント 2” とも呼ばれる CVE 2017-5715 を緩和します。

この資料で説明されている Windows 上で KVAS を有効にする手順で、IBP も有効になります。   ただし、IBP には、ハードウェアの製造元からリリースされたファームウェアの更新プログラムが必要です。 Windows での保護を可能にする KB4072698 の指示に加えて、ハードウェアの製造元からリリースされた更新プログラムを入手してインストールする必要があります。 

IBP が強く推奨されるシナリオの例

オンプレミスの物理コンピューターは、信頼されないユーザーが任意の JavaScript コードをアップロードして実行できるアプリケーションとは別に、SQL Server をホストしています。 SQL データベースに機密データが存在する場合、プロセス間の情報漏えいから保護するための手段として、IBP が強く推奨されています。

IBP ハードウェア サポートが存在しない状況では、信頼できないプロセスと信頼できるプロセスを別の物理コンピューターまたは仮想マシンに分けることをお勧めします。

Linux ユーザー: バリアント 2 (CVE 2017-5715) に対する保護の詳細については、オペレーティング システムのディストリビューターにお問い合わせください。  

マイクロアーキテクチャ データ サンプリングの脆弱性の緩和策が強く推奨されるシナリオの例

同じ物理ホスト上の 2 つの異なる仮想マシンで 2 つの異なるビジネス アプリケーションをホストしている SQL Server の 2 つのインスタンスを、オンプレミスのサーバーが実行している例について考えます。 これらの 2 つのビジネス アプリケーションは、SQL Server インスタンス全体で保存されているデータを読み取れないはずであると仮定します。 これらの脆弱性の悪用に成功した攻撃者は、SQL Server の拡張性メカニズムを使用して実行される個別プロセスまたは信頼されていないコードとしてマシン上で実行されている、信頼されていないコードを使用して信頼領域の特権データを読み取れる可能性があります (SQL Server の拡張性オプションに関する以下のセクションを参照)。 共有リソース環境 (複数のクラウド サービス構成に存在するなど) では、これらの脆弱性により、ある仮想マシンから別の仮想マシンの情報に不適切にアクセスできる可能性があります。 スタンドアロン システム上の閲覧以外のシナリオで、攻撃者がこれらの脆弱性を悪用するには、システムに事前にアクセスするか、特別に細工されたアプリケーションを標的のシステムで実行できる必要があります。

信頼できない SQL Server 拡張性インターフェイス


SQL Server には、多くの拡張機能およびメカニズムが含まれています。 これらのメカニズムの多くは既定で無効にされています。 ただし、拡張機能を使用するために、各運用インスタンスを確認することをお勧めします。  このような各機能を最低限のバイナリ セットに制限し、SQL Server と同じコンピューター上で任意のコードが実行されないようにアクセスを制限することをお勧めします。   各バイナリを信頼するかどうかを判断し、信頼できないバイナリを無効にするか削除することをお勧めします。 

  • SQL CLR アセンブリ
  • 外部スクリプト メカニズムを通じて実行されているか、または SQL Server と同じ物理コンピューター上のスタンドアロンの R/Machine Learning Studio から実行されている R パッケージと Python パッケージ
  • SQL Server と同じ物理コンピューターで実行されている SQL Agent 拡張性ポイント (ActiveX スクリプト)
  • リンク サーバーで使用される非 Microsoft OLE DB プロバイダー
  • 非 Microsoft 拡張ストアド プロシージャ
  • サーバー内で実行された COM オブジェクト (sp_OACreate を介してアクセス) 
  • xp_cmdshell を介して実行されるプログラム 

SQL Server で信頼できないコードを使用している場合の軽減策

シナリオ/事例

軽減策または推奨される手順

CLR を有効にして SQL Server を実行する (sp_configure ‘clr enabled', 1)

  1. 信頼できないコードが SQL Server にロードされるリスクを軽減するために、アプリケーションで CLR が不要であれば CLR を無効にします。
  1. (SQL Server 2017+) アプリケーションでこれまでどおり CLR が必要な場合は、"CLR Strict Security" 機能 (https://docs.microsoft.com/ja-jp/sql/database-engine/configure-windows/clr-strict-security) と sys.sp_add_trusted_assembly (https://docs.microsoft.com/ja-jp/sql/relational-databases/system-stored-procedures/sys-sp-add-trusted-assembly-transact-sql) を使用して、特定のアセンブリだけがロードされるように設定します。“”
  1. CLR コードを T-SQL 相当のコードに移行できるかを検討します。
  1. CLR ベースの操作を実行できるシナリオをロックダウンするために、セキュリティ アクセス権を確認します。 展開されている既存のアプリケーションにおける新しいアセンブリのロードを無効にするために、CREATE ASSEMBLY、EXTERNAL ACCESS ASSEMBLY、および UNSAFE ASSEMBLY の許可を最小のユーザーまたはコード パス設定に限定します。

SQL Server 内から Java/R/Python 外部スクリプトを実行する (sp_configure 'external scripts enabled', 1)

  1. 攻撃の侵入口を減らすために、アプリケーションで外部スクリプト機能が不要であれば、この機能を無効にします。
  1. (SQL Server 2017+) 可能であれば、スコアリングを行う外部スクリプトを移行し、代わりにネイティブ スコアリング機能 (https://docs.microsoft.com/ja-jp/sql/advanced-analytics/sql-native-scoring) を使用します。
  1. 外部スクリプトを使用できるシナリオをロックダウンするために、セキュリティ アクセス権を確認します。 恣意的なスクリプトの実行を無効にするために、EXECUTE ANY EXTERNAL SCRIPT 許可を最小のユーザー/コード パス設定に限定します。

リンク サーバーを使用する (sp_addlinkedserver)

  1. インストール済みの OLEDB プロバイダーを確認し、信頼できない OLEDB プロバイダーをマシンから削除することを検討します (マシン上で SQL Server 以外で OLEDB プロバイダーが使用されている場合にはその OLEDB プロバイダーを削除しないでください)。 既存の OLEDB プロバイダーを列挙する方法の例は次のリンクで確認できます: OleDbEnumerator.GetEnumerator メソッド (型)
  1. 信頼できないコードが sqlservr.exe プロセス内で実行される可能性を減らすため、SQL Server (sp_dropserver) に不要なリンク サーバーがないかを確認し、あれば削除します。
  1. ALTER ANY LINKED SERVER アクセス権を最小のユーザー数にロックダウンするために、セキュリティ アクセス権を確認します。
  1. リンク サーバー経由で操作を実行できるユーザー/シナリオを最小限に抑えるために、リンク サーバー ログイン/資格情報マッピング (sp_addlinkedsvrlogin/sp_droplinkedsvrlogin) を確認します。

拡張ストアド プロシージャを使用する (sp_addextendedproc)

拡張ストアド プロシージャは非推奨扱いとなっているため、これらの使用をすべて削除し、実稼働システムには使用しないでください。

xp_cmdshell を使用して SQL Server からバイナリを呼び出す

この機能は、既定で無効になっています。 信頼されないバイナリを呼び出すには、xp_cmdshell の使用をすべて確認して制限します。 ここで説明するように、sp_configure を介してこのエンド ポイントへのアクセスを制御できます。 

 

sp_OACreate を介して COM オブジェクトを使用する

この機能は、既定で無効になっています。 sp_OACreate によって呼び出された COM オブジェクトは、サーバーにインストールされているコードを実行します。  そのような信頼されないバイナリの呼び出しを確認します。 ここで説明するように、sp_configure を使用して設定を確認できます。