SQL Server 2000 SP3 セキュリティ機能と推奨事例

結論 : 推奨事例チェックリスト

最終更新日: 2003年6月17日

以下のチェックリストは、本書で説明した推奨事例をまとめたものです。詳細については、上記の説明を参照してください。

トピック
管理者のチェックリスト管理者のチェックリスト
開発者のチェックリスト開発者のチェックリスト
ソフトウェア ベンダのチェックリストソフトウェア ベンダのチェックリスト
付録 : 関連情報付録 : 関連情報

管理者のチェックリスト

インストール前の環境のセットアップ

物理セキュリティ

サーバーの物理的なセキュリティを確認します。

ファイアウォール

サーバーとインターネット間にファイアウォールを設置します。

ユーザーの障壁ファイアウォールで常に TCP ポート 1433 と UDP ポート 1434 をブロックします。名前付きインスタンスが別のポートで受信待ちする場合は、それらのポートもブロックします。

多層環境では、選別されたサブネットを作成するために、複数のファイアウォールを使用します。

サービスの分離

脆弱なサービスが他のサービスを危うくするために使用される危険性を軽減するために、サービスを分離します。

ドメイン コントローラに SQL Server をインストールしません。

独立したSQL Server サービスは個別の Windows アカウントで実行します。

多層環境では、Web ロジックとビジネス ロジックを別のコンピュータで実行します。

サービス アカウント

SQL Server サービスを実行するために、最低限の特権を持つ Windows アカウントを作成します。

ファイル システム

NTFS を使用します。

重要なデータ ファイルには RAID を使用します。

インストール

最新バージョンと Service Pack

常に、最新の Service Pack とセキュリティ修正プログラムをインストールします。

サービス アカウント

最低限の特権で SQL Server サービスを実行します。

Enterprise Manager を使用して、サービスと Windows アカウントを関連付けます。

認証モード

SQL Server との接続に Windows 認証を要求します。

強固なパスワード

Windows 認証を使用しているときでも、常に、強固なパスワードを sa アカウントに割り当てます。

すべての SQL Server アカウントに強固なパスワードを使用します。

インストール後の環境設定オプションと設定

古いセットアップ ファイルを削除またはセキュリティで保護

インストール後に以下のファイルを削除またはアーカイブします。既定のインスタンスの場合は、<systemdrive>:\Program Files\Microsoft SQL Server\MSSQL\Install フォルダ、名前付きインスタンスの場合は、<systemdrive>:\Program Files\Microsoft SQL Server\ MSSQL$<Instance Name>\Install フォルダの sqlstp.log、sqlsp.log、および setup.iss。

現在のシステムが SQL Server 7.0 からアップグレードされている場合は、以下のファイルを削除します。%Windir% フォルダの setup.iss と Windows Temp フォルダの sqlsp.log。

名前付きインスタンスに静的ポートを選択

SQL Server の名前付きインスタンスに静的ポートを割り当てます。

ログイン監査レベルの設定

ログイン監査レベルを [失敗] または [すべて] に設定します。

セキュリティ監査の有効化

Sysadmin 操作のセキュリティ監査、固定ロールのメンバシップ変更の監査、すべてのログイン関連の利用状況の監査、およびパスワード変更の監査を有効にします。

適切な監査オプションを選択後は、その監査をスクリプトにし、ストアド プロシージャにそのスクリプトをラップして、そのストアド プロシージャを自動起動としてマークする必要があります。

Windows 認証モードでも sa をセキュリティで保護

Windows 認証を要求するように設定されているサーバーでも、sa アカウントに強固なパスワードを割り当てます。

サンプル データベースの削除

実稼動サーバーからサンプル データベースを削除します。

セキュアな操作

セキュリティ モデル

SQL Server セキュリティ モデルを使って作業することを理解します。

バックアップ ポリシー

すべてのデータを定期的にバックアップし、データのコピーを安全なオフサイトの場所に保管します。

災害復旧システムをテストします。

公開部分と機能の削減

ユーザーの環境に必要なサービスや機能を実行することによって攻撃にさらされるシステムの公開部分を少なくします。

管理者の削減

sysadmin 固定サーバー ロールのメンバシップを数人の信頼できる個人に制限します。

強固なパスワード

すべての SQL Server アカウントに複雑なパスワードを使用していることを確認します。

複数データベースの組み合わせ所有権

システムで使用しない場合は、複数データベースの組み合わせ所有権を無効にします。

Xp_cmdshell

既定では、sysadmin ロールのメンバだけが xp_cmdshell を実行できます。この既定の設定を変更すべきではありません。

xp_cmdshell の実行権限を sysadmin ロールのメンバではないユーザーに許可しません。

暗号化

SSL 接続を有効にするために証明書をインストールします。

証明書はサーバーの完全修飾 DNS 名を使用する必要があります。

EFS を使ってデータベースを暗号化するために、SQL Server サービス アカウントを使用します。

アプリケーションがデータ暗号化を必要とする場合は、Protegrity や Application Security Inc などのベンダの製品を使用することを検討します。

ロールとグループ

権限の管理を単純化するために、ユーザーを SQL Server ロールまたは Windows グループにまとめます。

権限

public データベース ロールに権限を許可しません。

分散クエリ

分散クエリをサポートする環境に SQL Server をセットアップするときは、リモート サーバーではなく、リンク サーバーを使用します。

分散クエリを必要とするログインだけにリク サーバーへのアクセスを許可します。

sysadmin 固定サーバー ロールのメンバ以外のすべてのユーザーには、SQL OLE DB, 以外のすべてのプロバイダでのアドホック データ アクセスを無効にします。

信頼関係のあるプロバイダでのみアドホック データ アクセスを許可します。

Guest アカウント

guest アカウントを有効にしません。

サービス アカウント

SQL Server サービスに関連付けられたアカウントを変更する必要がある場合は、SQL Server Enterprise Manager を使用します。

複数のサービスを変更する場合は、Enterprise Manager を使用して、各サービスに個別に変更を適用する必要があります。

定期的な推奨管理手順

MBSA

毎週の保守スケジュールに MBSA を追加し、MBSA が作成するすべてのセキュリティの推奨事項を追加します。

ログインのスキャン

NULL パスワードを持つアカウントを定期的にスキャンし、そのアカウントを削除するか、強固なパスワードを割り当てます。

未使用のアカウントを削除します。

固定ロールのメンバシップの列挙

固定サーバー ロールと固定データベース ロールを定期的にスキャンし、そのメンバシップが信頼できる個人だけに割り当てられていることを確認します。

スタートアップ プロシージャ

自動起動にマークされているストアド プロシージャの安全性を確認します。

ログインとユーザーのマッピング

サーバー レベルでデータベース ユーザーとログインの間のマッピングが正しいことを確認します。

report オプションを指定した sp_change_users_login を定期的に実行し、マッピングが期待通りであることを確認します。

直接カタログ更新

直接カタログ更新を許可しません。

複数データベースの組み合わせ所有権

sp_dboption を使用して、複数データベースの組み合わせ所有権が有効になっているデータベースを列挙し、検証します。

インスタンスの修正の推奨事例

インスタンスの検出と列挙

管理している SQL Server のすべてのバージョン、エディション、および言語のインベントリを管理します。

インベントリに MSDE のインスタンスを含めます。

Microsoft Web サイトから入手できる SQL Scan と SQL Check を使用して、ドメイン内の SQL Server のインスタンスをスキャンします。

Bulletins

Microsoft Security Bulletins を定期購読します。

アプリケーションの修正

実稼動システムの構成と同じテスト構成を管理し、新しい修正プログラムをテストできるように準備します。

実稼動システムに適用する前に、修正プログラムを注意深くテストします。

比較的小さなテスティングでは開発システムに修正プログラムを適用することを検討します。

開発者のチェックリスト

開発者の場合は、上記のすべての項目に加えて、以下の推奨事例を検討する必要があります。

全般

所有権の継承の効果的な使用

権限の管理を単純にするために、1 つのデータベース内では所有権の継承を使用します。

できる限り、複数データベースの組み合わせ所有権の使用は避けます。

複数データベースの組み合わせ所有権を使用する必要がある場合は、その 2 つのデータベースが常に 1 つの管理単位として配置されることを確認します。

権限管理と所有権を単純化するためにロールを使用

権限をユーザーに直接割り当てるのではなく、ロールに割り当てます。

オブジェクトを所有しているユーザーが削除されたときに、アプリケーションの変更を避ける場合は、オブジェクトをユーザーが直接所有するのではなく、ロールがオブジェクトを所有するようにします。

暗号化 (SSL または IPSEC) を有効化

サーバーへの暗号化された接続を有効にし、暗号化された接続だけを許可することを検討します。

SQL Server 認証を許可しているときは、IPSec を使用してネットワーク層を暗号化するか、SSL を使用してセッションを暗号化するかのいずれかを強くお勧めします。

SQL Server エラーをユーザーに反映しない

アプリケーションはエンド ユーザーに SQL Server エラーを返すべきではありません。代わりに、エラーをログに記録するか、システム管理者に転送します。

SQL インジェクションの防止

ユーザー入力をサーバーに転送する前に、すべてのユーザー入力を検証することにより、SQL インジェクションに対して保護します。

ユーザー入力をサーバーに送信するアカウントに最小限の特権だけを許可することによって、損傷を受ける可能性のある範囲を制限します。

最低限必要な特権を使って、SQL Server 自体を実行します。

多層オプション

同じドメインまたは信頼関係のあるドメイン (完全な Windows 認証)

アプリケーション サーバーとデータベース サーバーが同じドメイン内または信頼関係のあるドメイン内に存在する場合は、Windows 認証を使用し、SQL Server にトンネルされるすべてのクライアント コンテキストで "完全提供" に設定する必要があります。これにより、SQL Server にアクセスするすべてのユーザーを監査でき、Windows セキュリティ ポリシーの強制を有効にし、中間層に資格情報を格納する必要性をなくすことができます。この事例では、クライアントがアプリケーション サーバーに接続し、次にアプリケーション サーバーがそのクライアントを偽装して、SQL Server に接続します。

アプリケーション サーバーのすべてのユーザーがデータベース サーバーに有効な Windows ログインを持つ必要があり、委任が有効になっている必要があります。

この事例で相互作用するすべてのシステムは、ドメイン コントローラも含めて、Windows 2000 以上を実行している必要があります。

アプリケーションを実行するアカウントは委任に対して信頼されている必要があります (つまり、このアカウントに対して Active Directory のオプション [アカウントは委任に対して信頼されている] がオンになっている必要があります)。

クライアント アカウントを委任できる必要があります (Active Directory ユーザー アカウント オプション [アカウントは重要なので委任できない] がオフになっていることを確認します。

アプリケーション サービスは、有効なサービス プリンシパル名 (SPN) を持つ必要があります。

セキュリティ計画が、データベース サーバーへの最小限のユーザー アクセスを要求するとき、または委任を禁止するポリシーを持つ企業では、企業間またはインターネット規模のインストールでの完全提供はお勧めしません。

混在事例 (部分的 Windows 認証)

インターネットに直面する層が、可能性のあるあらゆるユーザーに個別の Windows ドメイン アカウントを持たないときの推奨事例は、認証を数段階に分割することです。(ユーザーを認証する) 外部層は、 SSL を使用して、セッション全体ではないとしても、少なくとも資格情報を暗号化する必要があります。データベース サーバーには Windows 認証を使用して接続し、その機能を実行するのに必要な権限だけを備えた低い特権を持つ独立したセキュリティ コンテキストで、トランザクション情報を転送する必要があります。これは、サーバーとインターネット間の保護の新たな層として、中間層を効果的に使用します。

中間層と SQL Server 間で SQL Server 認証を使用すると、資格情報を格納する必要があるので、お勧めしません。中間層と SQL Server 間で SQL Server 認証を使用する必要がある場合は、ユーザーの異なるクラスに対応した、異なるレベルの特権を持つアカウントをいくつか作成する必要があります。これには、希望する特権レベルに応じて接続を割り当てるロジックを中間層に追加する必要があります。

別の信頼関係のないドメインまたはドメインなし (Windows 認証なし)

層間に Windows 認証を使用できないときは、ログイン シーケンスに SSL 暗号化を要求する必要があります。セッション全体を暗号化することをお勧めします。

格納する必要のある資格情報を暗号化するために、DPAPI も使用する必要があります。

ACL で保護されたレジストリ キーに暗号化した資格情報を格納する必要があります。

ソフトウェア ベンダのチェックリスト

上記の項目すべてに加えて、以下のセキュリティ開発慣習が、さまざまな開発環境でのコードの品質とセキュリティを向上に役立つことが証明されています。

セキュリティプロセス

さまざまなセキュリティの問題の理解

開発チームのメンバが以下の主要なセキュリティの問題点を理解していることを確認します。現在の脅威、セキュリティの傾向、セキュリティ環境の変化、および攻撃の事例。

すべての開発者とテスタに関連するセキュリティ トレーニングを要求します。

クロスサイト スクリプティング、バッファ オーバーフロー、SQL インジェクション、危険な API などの問題点の認知度を上げます。

製品に適用される特定のカテゴリの脅威を識別します。たとえば、サービスの拒否、特権の昇格、なりすまし、データ改ざん、情報開示、否認などです。

コンポーネントごとに、製品に対するセキュリティの脅威を分析します。

製品に基づいたセキュリティの脅威のチェックリストを作成します。

製品開発サイクルのすべての段階 (設計からテストまで) にセキュリティ レビューを追加します。

MSDE インストール

アプリケーションと共に MSDE を配布する場合は、以下のガイダンスを追加適用します。

既定値として、"Windows セキュリティ モード" を使用して、MSDE をインストールします。

ブランク sa パスワードをインストールしません。

ユーザーに MSDE を配布するときは、マージ モジュールではなく、Microsoft が提供するインストーラを使用する必要があります。

ローカル データ ストアとしてのみ操作する MSDE のインスタンスをインストールしている場合は、サーバー Net Library を無効にする必要があります。

製品に MSDE が含まれる場合は、そのことをユーザーに認識させる必要があります。今後、そのユーザーは MSDE 固有のソフトウェア アップデートをインストールまたは受け入れる必要があります。

MSDE は既定で SQL Server エージェントをインストールしますが、サービスの起動を "手動" のままにします。アプリケーションが SQL Server エージェントを使用しない場合は、これを "無効" に変更する必要があります。製品ドキュメントにセキュリティの推奨事例情報を含めます。

付録 : 関連情報

推奨書籍 :

Inside Microsoft SQL Server 2000』、Kalen Delaney 著。Copyright 2000, Microsoft Press.ISBN: 0-7356-0998-5.

Writing Secure Code, Second Edition』、Michael Howard、David LeBlanc 共著。

この書籍は、役に立つトレーニング リソースで、コンポーネントやアプリケーションの設計、コーディング、テストで最も一般的なセキュリティの欠陥を調査しています。これには、セキュリティの推奨事例とチェックリストを含みます。また、セキュリティで保護されたアプリケーションの設計、繰り返される攻撃に耐える堅牢なコードの作成、およびセキュリティの欠陥に対するアプリケーションのテストに関する方針も説明しています。

Hacking Exposed Windows 2000』、Joel Scambray、Stuart McClure 共著。

この書籍は、ハッカーの手口を選別しています。Windows 2000 コンピュータに侵入する方法を詳しく説明しているので、このような攻撃を防ぐ方法への認識が向上します。また、全体が SQL Server 専用のセクションがあり、SQL Server を使用してどのようにシステムに侵入するかを全体的に説明しています。

Designing Secure Web-Based Applications for Microsoft Windows 2000』、Michael Howard 著。

この書籍は、Microsoft Windows 2000、Internet Explorer、Internet Information Services、SQL Server、および COM+ のセキュリティの概念の強固な基盤を提供します。さまざまなカテゴリやレベルのセキュリティに対するソフトウェア設計上の主要な考慮点を説明し、分離されたセキュリティ "アイランド" がどのように相互作用するかを示しています。また、リスク分析、脅威、認証、承認、およびプライバシーなど主要なセキュリティの問題点を説明し、環境やアプリケーションに適切なセキュリティを適用することによって、リスクを軽減する方法を示しています。マネージャ、開発者、およびテスタは、この書籍の知識をすべて使用して、コードや設計のセキュリティを強化し、テスト スートを適切に強化することによって、セキュリティの観点からコンポーネントを眺め、脅威の分析を実行し、適切な対応策を取ることができます。

Building Secure ASP.NET Applications』、J.D.Meier (他) 著。

このガイドは、Windows 2000 と .NET Framework Version 1.0 用のセキュアな ASP.NET アプリケーションを設計、構築するための、実践的で、事例中心のアプローチを提供します。ここでは、分散 .NET Web アプリケーションの層内および複数の層間での認証、承認、およびセキュアな通信の主要な要素に注目しています。

Firewalls and Internet Security, second edition』、William R. Cheswick、Steven M. Bellovin、Aviel D. Rubin 共著。Addison-Wesley, 2003.

これは、インターネット セキュリティの標準的な紹介です。強くお勧めします。

推奨のツール、資料、およびプレゼンテーション

http://www.microsoft.com/japan/technet/security/tools/mbsahome.mspx

Microsoft Baseline Security Analyzer Tool。このツールは、システムのセキュリティの分析を支援します。管理者はこのツールを定期的に実行することをお勧めします。このツールは、いくつか SQL Server 固有の確認を実行します。

http://www.microsoft.com/downloads/details.aspx?FamilyID=689832db-297b-489f-9e87-8fd78aeee64f&DisplayLang=ja

SQL Server Critical Update Wizard。

Microsoft SQL Server とセキュリティのサイト

http://www.microsoft.com/japan/technet/security/prodtech/sqlserver.mspx

Microsoft セキュリティ

http://www.microsoft.com/japan/security/

TechNet リソース サイト

http://www.microsoft.com/japan/technet/default.mspx

MSDN リソース サイト

http://www.microsoft.com/japan/msdn/

ホワイトペーパー

http://msdn.microsoft.com/library/default.asp?url=/nhp/default.asp?contentid=28000409 (英語)

SQL Server Developer Center。最新の技術情報ホワイト ペーパーとダウンロードを含みます。

http://www.microsoft.com/japan/technet/prodtechnol/sql/2000/maintain/sp3sec00.mspx

このホワイト ペーパーは SQL Server 2000 最初にリリースされたときに執筆され、本書の基礎となったものです。


**
**