データベース管理のセキュリティ面の1つは、データベースに誰が、いつ、何をしたかを理解することです。すでにMongoDBサービスを保護していますが、誰が何をしているのかを知り、何か奇妙なことがあるかどうかを検出したいと考えています。データ侵害の調査では、監査ログを使用して、履歴アクティビティを分析し、攻撃者がどのエンドポイントから来たのか、データベース内に侵入した後にどのような操作を行ったかを理解できます。
このブログでは、MongoDBの監査ログと実装を確認します。
MongoDBでの監査ログの有効化
MongoDBで監査ログを有効にするには、mongod.conf構成ファイルのセクションauditLogに移動する必要があります:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
ログの宛先には、ファイル、syslog、コンソールの3種類があります。理想的には、JSONまたはBSONでサポートされている形式で監査ログをファイルに送信できます。以下に示すように、MongoDBサービスの起動時に監査ログを有効にすることもできます。
mongod --dbpath /var/lib/mongodb --auditDestination file --auditFormat BSON --auditPath /var/lib/mongodb/audit_mongodb.bson
MongoDBの監査フィルター
それでもauditLogセクションには、filterというパラメーターがあります。ログに記録するアクションパターンをフィルタリングできます。たとえば、認証を特定のデータベースに記録する場合は、次のコマンドを使用できます。
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: '{ atype: "authenticate", "param.db": "user_profile" }'
user_profileデータベースへのすべての認証を追跡します。別の例:アクションを追跡したい。インデックスを削除し、コレクションの名前を変更し、コレクションをuser_profileデータベースに削除します。コマンドは次のようになります:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { atype: { $in: [ "dropIndex", "renameCollection", "dropCollection" ] }, "param.ns": /^user_profile\\./ } }
特定の役割の監査プロセスを監視することもできます。フィルターで役割とデータベースを定義する必要があります:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { roles: { role: "readWrite", db: "user_profile" } }
user_profileデータベースにreadWriteロールを持つユーザーに関連するすべてのアクションをログに記録します。
書き込みおよび読み取り操作の監査ログを作成するには、最初にMongoDBでauditAuthorizationSuccessを有効にする必要があります。以下のコマンドを実行できます:
db.adminCommand( { setParameter: 1, auditAuthorizationSuccess: true } )
または別のオプションは、mongod.confの以下を以下のように変更することです:
auditLog:
destination: file
format: BSON
path: /var/lib/mongodb/audit_mongodb.bson
filter: { roles: { role: "readWrite", db: "user_profile" } }
setParameter: { auditAuthorizationSuccess: true }
Percona Server for MongoDBは監査ログ機能を無料で提供しますが、MongoDBではEnterpriseEditionでのみ使用できます。パラメータを有効にすると、特に本番環境で、MongoDBのデータベースパフォーマンスに影響を与えることに注意してください。
次は何ですか?
MongoDB監査ログをログ管理システムに送信できます。例:ELK(Elasticsearch、Logstash、Kibana)スタック、またはプロバイダーのログ管理システムを分析目的で使用できます。
最も簡単な方法は、Linux環境でjqツールユーティリティを使用して、JSONまたはBSON形式でログを読み取ることです。