身份鉴别
a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换。
1)访谈数据库管理员系统用户是否已设置密码,并查看登录过程中系统账户是否使用了密码进行验证登录,(方法1)查看mongod.conf文件中security.authorization是否为enabled;
(方法2)通过命令查看:cat /etc/mongod.conf | grep “Auth=” 如果有返回行说明安全,否则需要进行修复
2) 确保 MongoDB 本地用户也不能绕过身份验证,查询是否含有配置项 cat /etc/mongod.conf |grep "enableLocalhostAuthBypass" 如果没有返回行说明安全,否则需要进行修复
3)确保 MongoDB 身份验证在集群环境下正常使用,集群环境中身份验证依赖于密钥。如果不使用密钥,在集群的环境中会出 现绕过身份验证,非授权用户登录到 MongoDB.
查询是否含有配置项 cat /etc/mongod.conf | grep “keyFile=” 如果有返回行说明安全,否则需要进行修复
- 访谈数据库管理员是否启用口令复杂度配置:
# 查看MongoDB的主配置文件,获取当前的配置设置
cat /etc/mongod.conf
# 检查配置文件中是否启用了安全授权(security.authorization)
cat /etc/mongod.conf | grep security.authorization
# 查找配置文件中关于认证模式(Auth=)的设置
cat /etc/mongod.conf | grep “Auth=”
# 检查是否允许本地访问绕过身份验证(enableLocalhostAuthBypass)的设置
cat /etc/mongod.conf | grep “enableLocalhostAuthBypass”
# 查看配置文件中关于密钥文件(keyFile)的设置
cat /etc/mongod.conf | grep “keyFile=”
b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施。
1)查看是否启用登录失败限制策略,执行: ;
2)查看是否启用登录失败锁定策略,执行: ;
3)查看是否启用登录超时退出策略,执行:use admin;
db.runCommand( { getParameter : '*' } )
//进入数据库
./mongo
// 切换到admin数据库,以进行管理操作
use admin;
// 查看MongoDB的所有参数设置,以获取详细的配置设置
db.runCommand({ getParameter: '*' })
c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听。
检查配置文件参数 cat /etc/mongos.conf |grep –A20 ‘net’ | grep –A10 ‘ssl’ | grep ‘mode’ 无返回值就不存在问题,需要修复
cat /etc/mongos.conf | grep –A20 ‘net’ | grep –A10 ‘ssl’ | grep ‘mode’
# 启动MongoDB守护进程,指定监听的端口(27017)和数据库文件存储路径(/data/db)
d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。
查看和询问系统管理员在登录数据库的过程中使用了哪些身份鉴别方法,是否采用了两种或两种以上组合的鉴别技术,如口令、数字证书Ukey. 令牌、指纹等,是否有一种鉴别方法使用密码技术
访问控制
- 应对登录的用户分配账户和权限
查看每个登录用户的角色和权限,是否是该用户所需的最小权限
假设 MongoDB 账号为 MongoDB ,
1.启动 MongoDB mongod --port 27017 --dbpath /data/db1 2.检查权限 ps -ef | egrep "^MongoDB.*$" 如果没有返回行,则权限存在问题
检查哪些用户具有超级权限
1. 第一类超级权限数据库层超级用户
db.runCommand( { rolesInfo: "dbOwner" } )
db.runCommand( { rolesInfo: "userAdmin" } ) db.runCommand( { rolesInfo: "userAdminAnyDatabase" } )
2. 第二类文件管理型超级权限
db.runCommand( { rolesInfo: "readWriteAnyDatabase" } )
db.runCommand( { rolesInfo: "dbAdminAnyDatabase" } )
db.runCommand( { rolesInfo: "userAdminAnyDatabase" } )
db.runCommand( { rolesInfo: "clusterAdmin" } )
3. 第三类集群管理型超级权限
db.runCommand( { rolesInfo: "hostManager" } ) 如果返回行中出现和预期不符的用户,请删除用户的该权限。
// 查询名为dbOwner的角色及其权限信息
db.runCommand({ rolesInfo: "dbOwner" })
// 查询名为userAdmin的角色及其权限信息
db.runCommand({ rolesInfo: "userAdmin" })
// 查询名为userAdminAnyDatabase的角色及其权限信息
db.runCommand({ rolesInfo: "userAdminAnyDatabase" })
- 应重命名或删除系统默认帐户,修改这些账户的默认口令;
检查默认用户的权限 db.runCommand( { rolesInfo: { role: "<rolename>", db: "<database>" } } )
- 应及时删除或停用多余的、过期的账户,避免共享账户的存在。
1)查看当前库下的用户:use admin
show users;
查看全局所有账户:db.auth('admin','123456')
db.system.users.find().pretty()
2)针对上述命令获得的用户帐号,查看是否存在过期账户,询问数据库管理员是否每一个账户均为正式、有效的账户
3)针对上述命令获得的用户帐号,询问是否存在多人共享账户的情况
- 应授予管理用户所需的最小权限,实现管理用户的权限分离。
1)询问是否由不同员工分别担任操作系统管理员与数据库管理员;
2)检查每个角色的权限 :db.runCommand( { rolesInfo: 1, showPrivileges: true, showBuiltinRoles: true } )
- 应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则。
询问数据库管理员,数据库系统是否由特定账户进行配置访问控制策略,具体访问控制策略是什么
执行 sql 定位数据文件地址 cat /etc/mongod.conf |grep "dbpath" 2. 检查路径权限是否符合小于660 属于 MongoDB
ls –l /var/lib/MongoDB
用 sql 语句检查
1. 确保启动时候带有访问控制开启的参数 mongo --port 27017 -u -p --authenticationDatabase 2. 检查用户权限都来自于角色没有用户自身没有额外权限。
db.getUser()
db.getRole()
f)访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级。
询问数据库管理员, 访问控制的粒度主体是否用户级或进程级,客体是否为文件、数据库表级
安全审计
a)应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计。
1)检查配置文件参数 cat /etc/mongod.conf |grep –A4 "auditLog" | grep "destination" 无返回值就存在问题,需要修复
2)检查配置文件参数 cat /etc/mongod.conf |grep –A10 "auditLog" | grep "filter" 检查结果是否符合设置,如果不符需要修复
c)应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等。
检查配置文件参数 cat /etc/mongod.conf | grep "systemLog.logAppend" 如果返回值是 false 是不安全的,建议修复
入侵防范
- 应遵循最小安装的原则,仅安装需要的组件和应用程序。
根据《GBT28448-2019信息安全技术 网络安全等级保护测评要求》,此项测评对象不包含数据库管理系统,此项不适用。
- 应关闭不需要的系统服务、默认共享和高危端口。
根据《GBT28448-2019信息安全技术 网络安全等级保护测评要求》,此项测评对象不包含数据库管理系统,此项不适用。
c)应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制。
检查是否限制非授权 IP 访问:
cat /etc/mongod.conf |grep –A12 “net” | grep “bindIp"
返回结果如果是 0.0.0.0 必须进行修改
d)应提供数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的内容符合系统设定要求。
根据《GBT28448-2019信息安全技术 网络安全等级保护测评要求》,此项测评对象不包含数据库管理系统,此项不适用。
e)应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞。
1)检查数据库版本:db.version() ;
2)访谈MongoDB补丁升级机制,查看补丁安装情况
f)应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警。
根据《GBT28448-2019信息安全技术 网络安全等级保护测评要求》,此项测评对象不包含数据库管理系统,此项不适用。
恶意代码防范
a)应采用免受恶意代码攻击的技术措施或主动免疫可信验证机制及时识别人侵和病毒行为,并将其有效阻断。
根据《GBT28448-2019信息安全技术 网络安全等级保护测评要求》,此项测评对象不包含数据库管理系统,此项不适用。