web-dev-qa-db-ja.com

MongoDBインスタンスを保護する方法は?

MongoDBサーバーのセキュリティ保護/強化の経験はありますか?チェックリストやガイドを歓迎します。

28
AaronS

NoSQLデータベースは比較的新しい(おそらく古い概念ですが)ので、特定のMongoDB強化ガイドや、私が見ている通常の場所( CISSecurity 、ベンダーの出版物、Sansなどすべてが不足しています)を見たことがありません。組織、単数学生、infosecコミュニティがプロジェクトを作成して維持することは、良いプロジェクトになると示唆しています。

Mongodb.orgにはいくつかの基本的な情報があります。ここでのすべての手順は、セキュリティの有効化を含めて実行する必要があります。サイト自体は、MongoDBには非常に基本的なレベルのセキュリティしかないと述べています。 http://www.mongodb.org/display/DOCS/Security+and+Authentication

MongoDBやその他のNoSQLデータベースも、成熟したSQLデータベースよりも機能が非常に少ない(特にセキュリティ)ため、きめ細かい権限やデータ暗号化を見つけることはほとんどありません。ユーザー名をシードとしてパスワードハッシュにMD5を使用します。バージョン1.9.1より前のシャーディングでは認証を使用できないなどの制限もあります。そのため、常にリスク評価を実行し、脅威モデルを構築してセキュリティニーズと直面する脅威を解決することをお勧めします。この出力に基づいて、MongoDBまたはNoSQLデータベースは一般にニーズに適さない場合があります。または、その利点を最大化し、弱点を最小化する別の方法で使用する必要がある場合があります(たとえば、最も機密性の高い情報ではなく、データの抽出の場合)。または、Webアプリケーションに直接接続するのではなく、ネットワークコントロールの多数のレイヤーの背後にあります)。

とはいえ、セキュリティの原則はテクノロジーにとらわれないものであると私は固く信じています。最新の攻撃、およびdatalossdb.orgの優れたリストでさえ分析すると、デフォルトのパスワードと不足しているパッチに関連している数が驚くべきものになります。多層防御を使用する場合、以下の慣行は、おそらく軍事的でない可能性が高いほとんどの資産(個人、商業など)を保護するのに十分なセキュリティを備えている必要があります。

データベース強化の原則:

  • 認証-認証が必要です。管理者または特権ユーザーの場合、可能であれば2つの要素があります(データベースレベルではサポートされていないため、プラットフォームレベルで、またはネットワークデバイスを介して行います)。鍵ベースの認証を使用して、可能であればパスワードを回避します。
  • 承認-最小限の必要な権限を持つ最小限の必要なアカウント、読み取り専用アカウントがサポートされているので、それらを使用してください。詳細なアクセス制御が存在しないため、データベースの前のWebサービスなど、アクセス制御ルールを含むビジネスロジックを含む、またはアプリケーション内の代替手段を使用します。 Mongodbがプラットフォーム上で実行する権限を最小限にします。ルートとして実行しないでください。
  • デフォルトおよびシステムアカウント-すべてのデフォルトアカウントのパスワードを変更し、可能な場合は削除/ロック/無効化、可能な場合はログインを無効化します。
  • ロギングとモニタリング- logging を有効にして、これらを中央のモニタリングシステムにエクスポートします。監視スタッフのための特定のアラートと調査手順を定義する
  • 入力検証-NoSQLデータベースは依然としてインジェクション攻撃に対して脆弱であるため、検証された既知の適切な入力のみを渡すこと、アプリケーションフレームワークでのパラメータ化の使用、信頼されていない入力をデータベースに渡すためのすべての優れた実践が必要です。
  • 暗号化-データの機密性に応じて、データベースレベルでは暗号化できないため、アプリケーション層で機密データを暗号化またはハッシュする必要があります。ネットワーク層(VPNなど)を介した暗号化も転送します。
  • サービスを最小化し、デフォルトのリスニングポートを変更する
  • サンプルデータベースまたはテストデータベースを削除する
  • パッチ管理プロセスを実施して、関連するすべてのセキュリティパッチを適時に特定、評価、インストールする
  • プラットフォームと仮想化プラットフォームを使用する場合は強化する
  • 適切なネットワーク制御を構成します。ファイアウォール、データベースへのアクセスを最小限に抑えるためのVLAN、アップストリームサービス拒否フィルタリングサービス、完全修飾DNS、個別の運用データベースと非運用データベース
  • 物理的に安全な環境
  • 変更管理プロセスを持っている
25
Rakkhi

MongoDBのセキュリティのチェックリストは次のとおりです

認証を有効にする– Mongodbサーバーを信頼できるネットワークに展開している場合でも、認証を有効にすることをお勧めします。ネットワークが侵害された場合に、「多層防御」を提供します。 mongod設定ファイルを編集して認証を有効にします

本番データベースをインターネットに公開しないでください。データベースへの物理アクセスを制限することは、セキュリティの重要な側面です。必要がない場合は、本番データベースをインターネットに公開しないでください。攻撃者がMongoDBサーバーに物理的に接続できない場合に何らかの妥協があった場合でも、データははるかに安全です。 AWSを使用している場合は、データベースをVPCプライベートサブネットに配置できます。詳細については、ブログ投稿「VPCでのMongoDBのデプロイ」をご覧ください。

ファイアウォールを使用する–ファイアウォールを使用して、mongodbサーバーへの接続を許可する他のエンティティを制限します。ベストプラクティスは、アプリケーションサーバーのみがデータベースにアクセスできるようにすることです。 AWSでホストされている場合は、「セキュリティグループ」を使用してアクセスを制限します。ファイアウォール構造をサポートしていないプロバイダーでホストされている場合は、「iptables」を使用して簡単に自分で構成できます。シナリオに合わせてiptablesを構成するには、mongodbのドキュメントを参照してください。

キーファイルを使用してレプリカセットをセットアップする–レプリカセット内のmongodbインスタンス間の通信を可能にする共有キーファイルを指定します。これを有効にするには、以下のように設定ファイルにkeyfileパラメータを追加します。ファイルの内容は、すべてのマシンで同じである必要があります。

HTTPステータスインターフェースを無効にするMongodbはデフォルトで、「ホーム」ステータスページを提供するポート28017でデフォルトで実行されるhttpインターフェースを提供します。このインターフェースは本番環境での使用は推奨されておらず、無効にするのが最適です。 「nohttpinterface」構成設定を使用して、httpインターフェースを無効にします。

RESTインターフェースを無効にします。monogdbRESTインターフェースは、本番環境ではお勧めしません。認証はサポートされていません。デフォルトではオフになっています。 「rest」構成オプションを使用する場合は、本番システムではオフにする必要があります。

Bind_ipの構成システムに複数のネットワークインターフェイスがある場合は、「bind_ip」オプションを使用して、mongodbサーバーが関連するインターフェイスでのみリッスンするように制限できます。デフォルトでは、mongodbはすべてのインターフェースにバインドします

SSLを有効にする– SSLを使用しない場合、データは暗号化されずにMongoクライアントとMongoサーバーの間を移動し、盗聴、改ざん、および「中間者攻撃」の影響を受けやすくなります。これは、インターネットなどの安全でないネットワークを介してMongodbサーバーに接続している場合に特に重要です。

ロールベースの承認– MongoDBはロールベースの認証をサポートしており、各ユーザーが実行できるアクションをきめ細かく制御できます。すべてのユーザーを管理者にする代わりに、役割ベースの構成を使用してアクセスを制限します。詳細については、役割のドキュメントを参照してください。

エンタープライズmongodbとKerberosエンタープライズmongodbは、認証のためにKerberosと統合します。詳細については、mongodbのドキュメントを参照してください。ユーザー名/パスワードシステムは本質的に安全ではありません。可能であれば、縁石ベースの認証を使用してください。

https://scalegrid.io/blog/10-tips-to-improve-your-mongodb-security/

免責事項:私はscalegrid.ioの創設者です

さらに、他のコメントが示しているように、保存しているmongodbデータも暗号化することをお勧めします。 LUKS(Linux統合キーセットアップ)を使用して、ボリュームレベルの暗号化をセットアップできます。

2
Dharshan

最初に覚えておくべきことは次のとおりです。

  • すべてからIPバインドを削除してIP(プライベートまたはローカルホスト)だけにすると、接続要求が取得されることが期待されます。
  • デフォルトのポートバインディングを変更する
  • 必要な権限のみを付与する(クエリユーザーを選択するための更新/削除権限がないなど)
  • 必要なマスター-スレーブ接続用のsshキーをセットアップし、パスワードの関与を排除する
  • アプリケーションとmongodb間の接続用に暗号化されたトンネルをセットアップすることもできます

実際には、すべてのDataStorageサービスに適用できます

PS:mongodbの非常に限られた経験

2
AbhishekKr