データベース
 Computer >> コンピューター >  >> プログラミング >> データベース

MongoDBセキュリティ強化の10のコツ:データベースを脅威から守るための基本対策

MongoDB®は手軽に導入できることで人気の高いNoSQLデータベースですが、継続的に追加される新機能に伴い、いくつかの落とし穴に直面することもあります。その中でも特に注意が必要なのが「セキュリティ」です。本記事では、MongoDBを安全に運用するためのポイントを詳しく解説します。

はじめに

MongoDBアプリケーションにおけるセキュリティ維持は、データベース運用において極めて重要です。システムやデータベースの脆弱性(ループホール)を特定し、脅威から保護するためのセキュリティ手法を理解しておく必要があります。米国国防総省が定めるSecurity Technical Implementation Guide(STIG)に厳密に準拠することで、MongoDBの安全性を大きく高められます。また、定期的な監査を実施することで、システムやデータベースの重大な欠陥を早期に発見し、さまざまな脅威から保護することができます。

本記事では、MongoDBを安全かつ堅牢に保つための10個の実践的なセキュリティ対策を紹介します。

Tip 1:認証を必ず有効にする

認証の有効化は、MongoDBを保護する最もシンプルかつ効果的な方法です。一見地味な基本設定こそが、システムを最大限に守り、数百万ドル規模の損失につながり得るデータ漏洩から組織を守ることにつながります。

MongoDBで認証を有効にするには、mongod.conf設定ファイルに以下の行を追加します。

Security:
        Authentication: on

下記の図は、データベースレベルのセキュリティ構成を示しています。

MongoDBセキュリティ強化の10のコツ:データベースを脅威から守るための基本対策

画像出典:https://www.slideshare.net

Tip 2:複雑なパスワードを使用する

これは常識的な話ですが、多くのアプリケーションやデータベースで使われがちなパスワードは、12345ABC123といった単純なものです。しかし、こうした単純なパスワードこそ、攻撃者がシステムを突破して貴重なデータを盗み出すために好んで利用される手段となります。

特にMongoDBにはパスワードのロックアウト機能がないため、攻撃者は単純なパスワードを試すだけで、わずか数分でデータベースやアプリケーションへの侵入に成功する可能性があります。大文字・小文字・数字・記号を組み合わせた複雑なパスワードを設定しましょう。

Tip 3:ロール(役割)ベースでユーザーを認可する

MongoDBはデフォルトではアクセス制御が無効になっています。MongoDBシェルの起動時に--authキーワードを使用することで、認可を有効にできます。

すべてのユーザーがデータベースを管理できるべきではありません。認証が有効になっていても、全員に管理者権限を付与してはいけません。ベストプラクティスとして、必ずロールを作成してユーザーを認可するようにしましょう。

適切なユーザーロールを設定することで、各ユーザーの操作範囲が明確になり、後に深刻な被害をもたらしうるアカウント侵害のリスクを大幅に低減できます。

ロールを持つユーザーを作成するには、次のコマンドを実行します。

db.createUser({user:"admin", pwd:"X1eL#pM0C12", roles:[{role:"userAdminAnyDatabase", db:"admin"]})

Tip 4:レプリケーションキーファイルを追加する

レプリケーションキーファイルを有効にすると、MongoDBの認証も自動的に有効になります。この機能が有効な場合、キーファイルがインストールされているホストのみがレプリカセットに参加できます。

また、レプリケーションキーファイルの有効化により、MongoDB内のデータ暗号化も確保され、さらなる保護層が追加されます。任意の方法でキーファイルを生成し、レプリカセットの各メンバーにコピーした後、アクセス制御を有効にした状態でレプリカセットを起動してください。

レプリケーションキーファイルを有効にするには、mongod.confに以下の行を追加します。

Security:
    KeyFile: <Path to KeyFile>

下記の図は、キーファイル認証の仕組みを示しています。

MongoDBセキュリティ強化の10のコツ:データベースを脅威から守るための基本対策

画像出典:https://www.slideshare.net

Tip 5:デフォルトポートを使用しない

MongoDBインスタンスへの接続に、デフォルトポートを使用してはいけません。攻撃者の多くは、攻撃前にデフォルトまたは標準のポート番号のみをスキャンします。MongoDBが使用する代表的なデフォルトポートには、2701727018270192700X系などがあります。

mongod.confでデフォルトのポート番号は簡単に変更できるため、必ず別のポート番号に変更しておきましょう。

Tip 6:堅牢なバックアップ体制を整える

常に最新のデータコピーを保持し、オペレーションログ(oplog)がポイントインタイムリカバリ(PIT)に対応できる状態を維持しましょう。これにより、攻撃が発生した瞬間から復旧作業を開始できます。

あらゆる種類の攻撃に備え、万全なディザスタリカバリー(災害復旧)体制を事前に構築しておくことが重要です。

Tip 7:データベースへのパブリックアクセスを無効にする

アプリケーションを見直し、データベースへの外部アカウントアクセスが必要かどうかを確認しましょう。該当するアカウントが存在する場合は、認証と暗号化を使うように設定してください。

さらに、mongod.confでホストのIPアドレスをバインドすることで、パブリックアクセスを無効化することも可能です。

Tip 8:OSレベルでファイアウォールルールを有効化し、VPNを活用する

ファイアウォールは、ネットワーク経由のシステムアクセスをフィルタリングおよび制御するための追加のセキュリティ層を提供します。MongoDBサーバーでは、ホスト上またはクラウドホスティングのセキュリティグループでファイアウォールルールを有効にしましょう。

mongodインスタンスへのアクセスは信頼できる送信元のみに限定してください。サーバーへのIPアドレスやポート範囲をブロックすることで、クラウドホスティングのセキュリティをさらに強化できます。

また、VPNを利用すれば、高度な暗号化、多要素認証、全クライアントに対する認可など、認証された安全なアクセスをデータベースシステムに提供できます。

Tip 9:データベースシステムのセキュリティを定期的に監査する

データベースやホストシステムを定期的に監査し、不正侵入の形跡がないか、またユーザーアカウントがロールや権限に基づく必要以上の昇格された特権を付与されていないかを確認しましょう。

テスト目的で一時的に昇格権限を付与していた場合は、必ず取り消してシステムを再度安全な状態に戻してください。

Tip 10:外部からのデータベースアクセスを検証・テストする

自分自身やチームで、ペネトレーションテストやSQLインジェクションなどを用いてデータベースシステムのセキュリティテストを実施し、脆弱性が悪用されないか確認しましょう。外部世界からデータベースへ何も露出していないことを確認することが重要です。

テストには、nmapやtelnetなど、さまざまなツールを活用できます。

まとめ

本記事では、日常的なMongoDB管理に役立つ基本的なセキュリティ設定のポイントを紹介しました。これらの対策とツールを活用して、MongoDBデータベースアプリケーションのセキュリティを強化してください。

また、mongoシェルの代わりにMongoDB Monitoring Service(MMS)を利用すると、セキュリティ関連の多くの機能を監視・設定できます。

ご意見やご質問がある場合は、フィードバックタブからお気軽にお寄せください。

認定データベース管理者およびデータベースサービスの詳細については、ぜひご確認ください。


  1. MongoDB活用ヒント集 第2回:パフォーマンス最適化と安全な運用のためのテクニック

    本記事は、Tricoreが2017年8月24日に公開した記事をもとに再編集したものです。 シリーズ第1回ではMongoDBの基本的な活用のコツをご紹介しました。第2回となる今回は、最適化、パフォーマンス、速度、インデックス、スキーマ設計、そしてデータの安全性など、より実践的なトピックを取り上げます。 ヒント1: 開発環境では--notablescanオプションを活用する(本番環境では使わない) 出典: www.percona.com MongoDBには--notablescanというオプションがあり、これを有効にすると、フルテーブルスキャン(全コレクション走査)が必要になるクエリに対してエラー

  2. MongoDBのゼロデイ脆弱性CVE-2013-1892に対応、ObjectRocketがセキュリティパッチを展開

    セキュリティ企業SCRTの調査チームにより、MongoDBにおけるゼロデイ脆弱性(CVE-2013-1892)が発見されました。この問題を受け、MongoDBの開発元である10genは脆弱性を修正するパッチを公開しました。ObjectRocketでは、このパッチを自社提供版のMongoDBに統合し、顧客環境への展開を開始しています。今後新しく構築されるすべてのインスタンスおよびシャードには、標準でこのパッチが組み込まれる予定です。ObjectRocketはセキュリティ対策を最優先事項の一つとして位置づけています。すべてのインスタンスにおいて、MongoDBネイティブのセキュリティ機能に加えてA