MongoDB安全实战之审计

2018 年 2 月 3 日 大数据和云计算技术 邓开表

邓开表同学实战MongoDB系列文章,非常不错,赞!大力推荐!

本文主要讲诉MongoDB的审计能力。在数据库安全的生命周期中,包括:保护、检测、响应及补救。检测的核心就是审计(Audit)。有些情况下,审计不仅仅用于检测不好的行为,也作为对整个数据库的行为进行监控而存在。审计能够告诉我们谁访问了什么、在什么地方、什么时间、采用了何种方式。


前面系列文章:

MongoDB安全实战之Kerberos认证

MongoDB Compass--MongoDB DBA必备的管理工具




1


1、前言

在数据库安全的生命周期中,包括:保护、检测、响应及补救。检测的核心就是审计(Audit)。有些情况下,审计不仅仅用于检测不好的行为,也作为对整个数据库的行为进行监控而存在。审计能够告诉我们谁访问了什么、在什么地方、什么时间、采用了何种方式。


有效的审计不仅仅意味着安全,也有助于数据库整体的完善。


MongoDB企业版包括审计mongod服务和mongos路由器能力。允许管理员和用户跟踪系统活动,支持各种操作审计。一个完整的审计解决方案必须包括所有的mongod服务和mongos路由器进程。


MongoDB的审计机构能够将审计事件日志以输出在控制台(console),syslog,JSON文件或一个BSON文件四种方式显示。具体如何配置审计,步骤如下:

 

2

2、启用和配置审计的输出格式

使用--auditDestination配置项来启用MongoDB审计和指定输出的审计事件。

2.1

2.1 审计日志输出到syslog,如:


mongod  --dbpath /var/lib/mongo  --auditDestination syslog

或者,在MongoDB配置文件设置,如下:

auditLog:

    destination: syslog

2.2

2.2 审计日志输出到console控制台


mongod  --dbpath /var/lib/mongo  --auditDestination console

或者,在MongoDB配置文件添加以下配置:

auditLog:

destination: console

2.3

2.3与console、syslog不同,为了使审计以一个JSON格式文件输出审计事件,需要指定auditDestination设置文件,并设置--auditFormat JSON,输出文件名--auditpath路径。


mongod  --dbpath /var/lib/mongo --auditDestination file --auditFormat JSON --auditPath /var/lib/mongo/auditLog.json 

或者,在MongoDB配置文件添加以下配置:

auditLog:

    destination: file

    format: JSON

path: /var/lib/auditLog.json

2.4

2.4与JSON文件相似,以BSON格式输出审计事件,需要设置--auditDestination为文件file,以及设置--auditFormat、--auditPath这两个配置项。


mongod --dbpath /var/lib/mongo  --auditDestination file --auditFormat BSON --auditPath /var/lib/mongo/auditLog.bson

或者,在MongoDB配置文件添加以下配置:

auditLog:

    destination: file

    format: BSON

path: /var/lib/auditLog.bson


使用bosndump命令将bosn文件转换成可读的信息输出在终端:

bsondump /var/lib/mongo/auditLog.bson


注意:JSON和BSON输出格式相比,以JSON格式输出对服务器性能影响比较大。

4.14.1

3

3、配置审计过滤器


MongoDB Enterprise版本支持各种操作的审计。当开启MongoDB审计时,默认情况下,记录所有审计操作,在审计事件的动作,详细信息和结果。如果需要指定要记录的事件,审计的特征,则在--auditFilter配置项。


--auditFilter配置项以一个查询文档的字符串格式表示。语法如下:

{<field1>:<expression1>,...}


<field1>:  <字段>可以在审计信息的任何内容领域,包括在文档返回字段。

<expression>: 指查询条件的表达式。

3.1

3.1 审计内容领域主要包括以下:

字段

类型

记录描述

atype

string

记录审计事件的行动,详细信息和结果。

ts

document

文档包含”$date”日期键值对,其中是以时间戳格式的值

local

document

文档包含ip键值对,及port键值对

remote

document

文档包含与事件相关联的远程连接ip键值对和port键值对

users

array

用户识别文档数组。由于MongoDB允许登录不同的用户数据库,该数组可以有一个以上的用户。每个文档包含用户名的user字段和该用户身份验证数据库的db字段。

roles

array

指定给用户的角色的文档数组,每个文档包含角色名称的role字段和该角色关联的数据库的db字段。

param

document

定义审计事件的具体细节,详细可以查看表2

result

integer

错误代码

1

3.2

3.2  审计事件行为,细节信息和结果

以下表2列出了每一个atype的相关参数细节和结果值:

atype

param

result

authenticate

{

user: <user name>,

db: <database>,

mechanism: <mechanism>

}

0-表示成功

18-表示认证失败

authCheck

{

command: <name>,

ns: <database>.<collection>,  (可选)
 args: <command object>  (args可编辑)

}

0-表示成功

13-没有权限的操作

createCollection

{ns: <database>.<collection>}

0-表示成功

createDatabase

{ns: <database>}

0-表示成功

createIndex

{

ns: <database>.<collection>,

indexName: <index name>,

indexSpec: <index specification>

}

0-表示成功

renameCollection

{

old: <database>.<collection>

new: <database>.<collection>

}

0-表示成功

dropCollection

{ns: <database>.<collection>}

0-表示成功

dropDatabase

{ns: <database>}

0-表示成功

dropIndex

{

ns: <database>.<collection>,

indexName: <index name>

}

0-表示成功

createUser

{

user: <user name>,

db: <database>,

customData: <document>,

roles: [

    {

      role: <role name>,

      db: <database>

    },

    ...

 ]

}

0-表示成功

dropUser

{

user: <user name>,

db: <database>

0-表示成功

dropAllUsersFromDatabase

{db: <database>}

0-表示成功

updateUser

{

user: <user name>,

db: <database>,

passwordChanged: <boolean>,

customData: <document>, (可选)

roles: [

    {

      role: <role name>,

      db: <database>

    },

    ...

 ]

}

0-表示成功

enableSharding

{ns: <database>}

0-表示成功

removeShard

{shard: <shard name>}

0-表示成功

shutdown

{}

0-表示成功

2

例子1

使用审计过滤器记录createCollectiondropCollection行为的审计。

 

mongod --dbpath /var/lib/mongo \

--auditDestination file  \

--auditFilter ‘{ atype : {$in: [“createCollection”,”dropCollection”] } }’ \

--auditFormat BSON \

--auditPath /var/lib/mongo/auditLog.bson

或者,在MongoDB配置文件添加以下配置:

auditLog:

   destination: file

   format: BSON

   path: /var/lib/mongo/auditLog.bson

   filter: ‘{ atype : {$in: [“createCollection”,”dropCollection” ] } }’

 

 

模拟在创建一个集合之后,再删除掉集合:

查看BSON审计输出文件信息:

bsondump /var/lib/mongo/auditLog.bson 

上面审计输出文件信息分别显示了,创建集合的时间,创建服务ip和端口及远程连接终端ip和端口及返回结果代码;删除集合的时间,创建服务ip和端口及远程终端ip和端口及返回结果代码。



加入技术讨论群




《大数据和云计算技术》社区群人数已经2500+,欢迎大家加下面助手微信,拉大家进群,自由交流。

喜欢钉钉扫码下面的群:


喜欢QQ群的,可以扫描下面二维码:

欢迎大家通过二维码打赏支持技术社区(英雄请留名,社区感谢您,打赏次数超过50+):


登录查看更多
2

相关内容

MongoDB 是一种文件导向的 NoSQL 数据库,由 C++ 撰写而成。
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
190+阅读 · 2020年6月29日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
229+阅读 · 2020年5月21日
【资源】100+本免费数据科学书
专知会员服务
105+阅读 · 2020年3月17日
《代码整洁之道》:5大基本要点
专知会员服务
49+阅读 · 2020年3月3日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
68+阅读 · 2020年1月17日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
173+阅读 · 2020年1月1日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
【电子书】Flutter实战305页PDF免费下载
专知会员服务
20+阅读 · 2019年11月7日
携程用ClickHouse轻松玩转每天十亿级数据更新
DBAplus社群
11+阅读 · 2019年8月6日
PHP使用Redis实现订阅发布与批量发送短信
安全优佳
7+阅读 · 2019年5月5日
VS Code Remote发布!真·远程开发
开源中国
6+阅读 · 2019年5月3日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
【大数据】海量数据分析能力形成和大数据关键技术
产业智能官
17+阅读 · 2018年10月29日
干货 :数据分析师的完整流程与知识结构体系
数据分析
8+阅读 · 2018年7月31日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
UPSNet: A Unified Panoptic Segmentation Network
Arxiv
3+阅读 · 2019年1月12日
Rapid Customization for Event Extraction
Arxiv
7+阅读 · 2018年9月20日
Arxiv
4+阅读 · 2018年5月24日
Arxiv
6+阅读 · 2018年3月19日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
98+阅读 · 2020年7月1日
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
190+阅读 · 2020年6月29日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
229+阅读 · 2020年5月21日
【资源】100+本免费数据科学书
专知会员服务
105+阅读 · 2020年3月17日
《代码整洁之道》:5大基本要点
专知会员服务
49+阅读 · 2020年3月3日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
68+阅读 · 2020年1月17日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
173+阅读 · 2020年1月1日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
【电子书】Flutter实战305页PDF免费下载
专知会员服务
20+阅读 · 2019年11月7日
相关资讯
携程用ClickHouse轻松玩转每天十亿级数据更新
DBAplus社群
11+阅读 · 2019年8月6日
PHP使用Redis实现订阅发布与批量发送短信
安全优佳
7+阅读 · 2019年5月5日
VS Code Remote发布!真·远程开发
开源中国
6+阅读 · 2019年5月3日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
去哪儿网开源DNS管理系统OpenDnsdb
运维帮
21+阅读 · 2019年1月22日
【大数据】海量数据分析能力形成和大数据关键技术
产业智能官
17+阅读 · 2018年10月29日
干货 :数据分析师的完整流程与知识结构体系
数据分析
8+阅读 · 2018年7月31日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
Top
微信扫码咨询专知VIP会员