SQL Server 2008 R2: 忍者になって SQL Server 2008 R2 の脅威に対する対策を講じる

SQL Server 2008 R2 を実行しているサーバーを適切にセキュリティで保護するのに必要なことは、単に物理的なセキュリティとネットワーク セキュリティを確保して、攻撃対象となる領域を縮小するだけではありません。この記事では、このタスクを遂行する方法を説明します。

William Stanek

セキュリティは、データベース管理者 (DBA) の意見が対立する数少ない問題です。特に、脅威と脆弱性に対する対策を講じるためのベスト プラクティスについては意見が対立します。従来の手法では、DBA は物理的なセキュリティ、ネットワーク セキュリティ、および攻撃対象となる領域の最小化に重点を置いていました。

確かに、これらはすべて SQL Server のセキュリティを保護するうえで有効な方法です。SQL Server ハードウェアの物理的なセキュリティは確保する必要があり、SQL Server のサーバーとクライアントではネットワーク セキュリティとネットワーク プロトコルを適切に構成する必要があります。また、データとサーバーを保護するために、攻撃対象となる領域を縮小する必要もあります。

クライアントとアプリケーションで必要な機能のみを有効にすることで、SQL Server の全体的な攻撃対象となる領域を縮小し、セキュリティを大幅に強化できます。このように構成することで、悪意のあるユーザーによって SQL Server が悪用される方法を制限できます。また、攻撃を受ける可能性がある経路を閉ざすこともできます。これ以降のセクションでは、SQL Server データベース エンジン、Analysis Services、および Reporting Services の管理可能なセキュリティ機能を紹介します。

データベース エンジン

AdHocRemoteQueriesEnabled

OPENROWSET 関数と OPENDATASOURCE 関数では、リンク サーバーやリモート サーバーを個別に構成しなくても、アドホック接続を使用してリモート データ ソースを操作できます。アプリケーションやスクリプトで、これらの関数を使用している場合は、この機能を有効にする必要があります。それ以外の場合は、無効にします。

ClrIntegrationEnabled

CLR 統合を使用すると、Microsoft Visual Basic や C# などの Microsoft .NET Framework 言語を使用して、ストアド プロシージャ、トリガー、ユーザー定義型、およびユーザー定義関数を記述できます。アプリケーションやスクリプトで .NET Framework 言語を使用している場合は、この機能を有効にします。それ以外の場合は、無効にします。

DatabaseMailEnabled

データベース メールは、SQL Mail の後継として、SMTP 経由で SQL Server から電子メール メッセージを送信するための技法として推奨されています。メール ホスト データベースと必要なデータベース メール プロファイルを作成していて、SQL Server から電子メール メッセージを送信する sp_send_dbmail ストアド プロシージャをアプリケーションとスクリプトで使用できるようにする場合は、この機能を有効にします。それ以外の場合は、無効にします。

RemoteDacEnabled

SQL Server では、既定でローカル専用の接続のみが許可されます。リモート専用の接続を承認する場合、この機能を有効にします。それ以外の場合は、無効にします。

SoapEndpointsEnabled

SOAP メッセージには、XML 形式のテキスト ベースのコマンドが含まれています。データ交換に SOAP を使用する予定で、必要な HTTP エンドポイントを構成している場合は、この機能を有効にして、各エンドポイントの状態を構成できます。

OleAutomationEnabled

OLE オートメーションを使用すると、Transact-SQL バッチ、ストアド プロシージャ、およびトリガーを使用して、SQL DirectX メディア オブジェクト (DMO) とカスタム OLE オートメーション オブジェクトを参照できます。OLE オートメーションを使用する場合は、この機能を有効にします。それ以外の場合は、無効にします。

ServiceBrokerEndpointActive

Service Broker では、データベース エンジンのキュー処理とメッセージ処理が行われます。アプリケーションでは Service Broker を使用して、SQL Server インスタンス間で通信できます。アプリケーションで Service Broker を使用し、必要な HTTP エンドポイントを構成している場合は、この機能を有効にし、各エンドポイントの状態を構成できます。

SqlMailEnabled

SQL Mail は、SMTP 経由で SQL Server からレガシ アプリケーションに電子メール メッセージを送信する場合に使用できます。レガシ アプリケーションとスクリプトで xp_sendmail ストアド プロシージャを使用して SQL Server から電子メール メッセージを送信できるようにする場合は、この機能を有効にします。それ以外の場合は、無効にします。

XPCmdShellEnabled

xp_cmdshell ストアド プロシージャでは、OS コマンド シェルを使用してコマンド文字列を実行し、テキスト形式で結果を返します。アプリケーションとスクリプトで OS のコマンドを実行する場合は、この機能を有効にする必要があります。

WebAssistantEnabled

以前のバージョンの SQL Server では、SQL Server データから HTML ファイルを生成するために Web Assistant ストアド プロシージャが使用されていました。SQL Server 2005 と SQL Server 2008 では、これらのストアド プロシージャの代わりに Reporting Services が使用されるようになりました。Web Assistant ストアド プロシージャを使用するレガシ アプリケーションやスクリプトがある場合は、この機能を有効にします。それ以外の場合は、無効にします。

Analyasis Services

AdHocDataMiningQueriesEnabled

データ マイニング拡張機能の OPENROWSET 関数では、データ ソース オブジェクトとの接続を確立し、リンク サーバーやリモート サーバーを個別に構成しなくても、リモート データ ソースへのアドホック接続を確立できます。アプリケーションやスクリプトがデータ マイニングで OPENROWSET 関数を使用している場合は、この機能を有効にします。それ以外の場合は、無効にします。

AnonymousConnectionsEnabled

匿名接続では、認証されていないユーザーも Analysis Services との接続を確立できます。アプリケーションとスクリプトで認証されていないユーザーによるアクセスが必要な場合は、この機能を有効にします。それ以外の場合は、無効にします。

LinkedObjectsLinksFromOtherInstancesEnabled

Analysis Services では、リンク オブジェクトを使用して、サーバー間でディメンションとメジャー グループをリンクできます。インスタンスを他のサーバーにリンクする場合は、この機能を有効にします。それ以外の場合は、無効にします。

ListenOnlyOnLocalConnections

Analysis Services は、リモート リソースとローカル リソースのどちらでも機能します。ローカル リソースでのみ機能するようにする場合は、この機能を有効にします。それ以外の場合は、無効にします。

UserDefinedFunctionsEnabled

Analysis Services は .NET Framework と統合されています。Analysis Services では、ユーザー定義関数を含むアセンブリを読み込むことができます。アプリケーションとスクリプトでユーザー定義の COM 関数が必要な場合は、この機能を有効にします。それ以外の場合は、CLR 関数のみを許可するように、この機能を構成します。

Reporting Services

ScheduledEventsAndReportDeliveryEnabled

Reporting Services では、アドホック レポート、オンデマンド レポート、およびスケジュールされたレポートを使用できます。通常、Reporting Services をインストールすると、これらの種類のレポートが有効になります。スケジュールされたレポートを使用しない場合は、この機能を無効にして、スケジュールされたレポートの生成と配信を無効にできます。

WebServiceRequestsAndHTTPAccessEnabled

Reporting Services コンポーネントでは、通信に HTTP 経由の SOAP メッセージングを使用し、URL アクセス要求に HTTP を使用します。クライアント アプリケーションでレポート サーバー Web サービスを使用する場合、あるいは Reporting Services でレポート マネージャー、レポート デザイナー、または SQL Server Management Studio を使用する場合は、この機能を有効にします。それ以外の場合は、無効にします。

ReportManagerEnabled

レポート マネージャーは Web ベースのアプリケーションで、レポートの表示、レポート サーバー コンテンツの管理、およびネイティブ モードで実行しているレポート サーバーへのアクセスの制御を行います。Reporting Services でレポート マネージャーを使用する場合は、この機能を有効にします。それ以外の場合は、無効にします。

常に注目の話題

物理的なセキュリティとネットワーク セキュリティを確保して、攻撃対象となる領域の最小化を実現すれば、SQL Server で脅威と脆弱性に対する対策が十分であるなら、セキュリティがそれほど重大な問題になることはありません。しかし、SQL Server にとってセキュリティは重大な問題であり、企業のデータは最も重要な資産の 1 つなので、セキュリティに関する問題がなくなることはないでしょう。

SQL Server 2008 では、上記のすべてのセキュリティ機能は既定で無効になっています。セキュリティ機能は、ポリシーを使用して管理できます。SQL Server のポリシーについては、「ポリシー ベースの管理を使用したサーバーの管理」のガイドラインを参照してください。

また、基礎知識を習得できる優れたリソースが多数あります。「マイクロソフトの物理的なセキュリティ (英語)」ホワイト ペーパーでは、物理的なセキュリティを確保する手法について包括的に説明しています。サーバーとクライアントのネットワークを構成する方法については、SQL Server 2008 R2 オンライン ブックの「サーバー ネットワークの構成」と「クライアント ネットワーク構成」を参照してください。

芸術と科学

データベースとデータ セキュリティに関しては、ベスト プラクティスを適用するだけでは必ずしも十分とは言えません。脅威と脆弱性への対策は、芸術であると同時に科学であるとも言えます。場合によって、任務を適切に遂行するには、一時的に忍者のような働きが必要になることもあります。忍者になるというのは、敵に勝てるように敵の立場に立って考えてみることです。ですが、実際には、だれかがシステムを攻撃する巧妙な方法をすべて想像するのは困難です。

それでも、現在の脅威を認識する必要があります。ハッカーが一般的に使用する攻撃の進路を把握したり、特定の脅威を考慮してクライアントとサーバーの環境を分析する方法、および利用可能なツールと技法を使用してその脅威に対して対策を講じる方法を把握している必要があります。セキュリティ教育は、セキュリティ対策を講じる作業と同じくらい重要です。内部脅威は、外部脅威に匹敵するリスクになります。たとえば、管理者かどうかに関係なく、データベース権限を持っているユーザーがコンピューターにロックをかけず、その場を離れるとリスクが生じます。

セキュリティを強化するには、セキュリティの手法を、サーバー ポリシーの範囲を超えて企業のポリシーと手法にまで拡張する必要があります。データとサーバーのセキュリティに総合的に取り組んで、内部脅威か外部脅威かに関係なく、あらゆる脅威と戦ってください。製品にライフサイクルがあるのと同様に、セキュリティ プログラムにもライフサイクルがあります。これは、Security Operations Lifecycle (SOL) と呼ばれます。

SOL の一環として、SQL Server クライアント アプリケーションと SQL Server を使用するユーザーは、年に 1 度正式なセキュリティ トレーニングを受講することをお勧めします。このトレーニングでは、テクニカル チームのメンバーに対して、セキュリティ テストを実施し、脅威のモデル化、現在の脆弱性、および悪用について説明し、セキュリティ対応試験を実施する必要があります。テクニカル チームのメンバーは、正式なトレーニングを受講するだけでなく、セキュリティを毎日の業務に取り入れる必要があります。セキュリティに関しては、"設定したら終了" ということがないようにしてください。セキュリティは、次のようにして毎日のプロセスに取り入れることができます。

  • 脆弱性と悪用を定期的にテストする
  • セキュリティの問題を日常的に監視する
  • 潜在的な問題をモデル化する
  • 避けられない問題への対応を計画する

テクニカル チームのメンバーは、SOL について的確に理解していることが求められます。クライアント アプリケーションを使用して SQL Server を操作するユーザーも、SOL の基本を理解している必要があります。継続的な警戒の必要性は重要です。安全な操作を行うには、絶えず警戒が必要なことを忘れないでください。脆弱性がまったくないものなど存在しません。

悪意のある人であふれている世界

ハッカー、クラッカー、および悪意のある内部関係者は、小さいながらも致命的なセキュリティの弱点が出てくるのを待ち受け、探し回っています。意図しない脆弱性によって、セキュリティ計画の効果がなくなったり、減少したりしないようにしてください。

既定設定による安全性確保の戦略を使用して、SQL Server のセキュリティを可能な限り強化します。高度な防御戦略を使用して、Web とクライアント インターフェイスから SQL Server データベースとファイル システムに至るまでの各層のセキュリティをできる限り強化します。この戦略は、途中で脆弱性を検出する機会がより多く提供される効果的な障壁を維持するのに役立ちます。

既定設定による安全性確保の戦略や高度な防御戦略も役立ちますが、セキュリティ計画の重要な目標は、脆弱性の数と脆弱性による影響を減らすことです。また、欠陥は避けられないので、欠陥の悪用にどう対処するかが最も重要です。正式な対応を準備して、適切な措置を講じる必要があります。単独で発生する問題はありません。個別の問題から教訓を得て、その知識を適切なレベルで組織全体に広めてください。この問題に関するデータをテクニカル チーム、開発チーム、およびオペレーション チームと共有することは、組織のメンバーのセキュリティに対する意識を養うのに役立ちます。

アプリケーション ユーザーが脆弱性や他の問題を簡単に報告できるようにしてください。脅威のモデル化を行って、機能や関数を使用するときには、セキュリティが考慮されるようにします。SQL Server データベース操作のクライアント/サーバー構成の性質を考慮し、懸念される脅威を尋ねることで脅威のモデル化を行います。フロントエンド アプリケーションとバックエンド データベースの攻撃対象となる領域を判断し、適切な措置を講じます。

フロント エンド アプリケーションの悪用からバックエンド データベースを保護するには、ファジー テストが必須です。ファジー テストでは、アプリケーションが受け取るように設計された範囲外のデータや値など、不適切な形式のデータを意図的に送信します。ファジー テストを実施して、クラッシュまたはバッファーのオーバーフローが発生するアプリケーションは、SQL Server が悪用される一因となるおそれがあります。

テクニカル チームは、フロントエンド アプリケーションがどのように記述され、SQL Server クエリがどのように機能するかを理解しています。その知識を利用して、より詳しいファジー テストを実行します。内部関係者の知識は、初期チェックを通過した場合のファジー テストを作成するのに役立ち、そのようなテストを作成することで、より踏み込んだファジー テストを実行できます。

セキュリティにライフサイクル アプローチを取り入れると、セキュリティ プロセスが継続的に行われるようになります。継続的に変更が行われ、SOL Server も重視されるようになります。

SQL Server 2008 R2 コンポーネントごとの、脅威と脆弱性の対策に関する詳細な手順については、下記のリソースを参照してください。

Joshua Hoffman

William R. Stanek (williamstanek.com、英語) は、先駆者的なテクノロジの専門家で、優秀なトレーナーや 100 冊以上もの優れた書籍の著者としても活躍しています。[twitter.com/WilliamStanek、英語]https://(twitter.com/williamstanek) で Stanek をフォローしてみてください。

 

関連コンテンツ