michael1983
作者michael1983联盟成员·2019-03-11 10:06
技术总监·某证券

数据库安全配置指南

字数 12628阅读 2370评论 2赞 6

_
数据库安全配置指南_________________________________

目 录

第1章 概述 5
1.1. 目的 5
1.2. 范围 5
1.3. 参考资料 5
第2章 ORACLE安全配置指南 5
2.1. OS 5
2.2. 数据库补丁 6
2.3. 审计 6
2.4. 用户管理 7
2.4.1. 锁定未使用的账号 7
2.4.2. 更改缺省密码 7
2.4.3. 密码策略 8
2.5. 传输信息加密 9
2.6. 权限设置 9
2.6.1. 限制缺省connect角色的权限 9
2.6.2. 编写安全的自定义的PL/SQL包、存储过程与函数 10
2.6.3. 检查已存在的PL/SQL包、存储过程与函数 10
2.6.4. 编写安全的触发器 11
2.6.5. 外部存储过程 11
2.7. TNS LISTENER 11
2.7.1. 设置TNS Listener密码 11
2.7.2. 打开admin restriction 12
2.7.3. 启用TCP有效节点检查 12
2.7.4. 关闭XML数据库 13
第3章 INFORMIX安全配置指南 13
3.1. OS 13
3.2. 数据库补丁 13
3.3. 审计 14
3.4. 传输信息加密 15
3.5. 权限设置 15
3.5.1. 取消public的connect权限 15
3.5.2. 取消public在文件访问函数的execute权限 16
3.5.3. 取消public在系统函数上的execute权限 16
3.5.4. 限制language使用 16
第4章 DB2安全配置指南 17
4.1. OS 17
4.2. 数据库补丁 17
4.3. 审计 18
4.4. 传输信息加密 19
4.5. 权限设置 20
4.5.1. 取消PUBLIC的所有权限 20
4.6. 其他 20
4.6.1. 隐藏DB2实例 20
第5章 SQLSERVER安全配置指南 21
5.1. OS 21
5.2. 数据库补丁 21
5.3. 审计 22
5.4. 传输数据加密 22
5.5. 权限设置 23
5.5.1. 取消public角色权限 23
5.6. 其他 24
5.6.1. 扩展存储过程 24
5.6.2. 验证方式 24
5.6.3. 样例数据库 24

第1章 概述
1.1. 目的
通过提供数据库方面规范统一的安全配置,加强基础软件设施—数据库系统的安全性,保护数据库系统的数据完整性、保密性与可靠性
1.2. 范围
生产环境的数据库
1.3. 参考资料
《数据库相关Checklist》

第2章 Oracle安全配置指南
2.1. OS
 描述
OS是任何其他软件运行的基础,只有保障了OS的安全才可能保护Oracle数据库的安全
 风险

 操作
参见《操作系统安全配置指南》相应系统章节
2.2. 数据库补丁
 描述
数据库系统同其他软件系统一样,都可能存在缺陷,数据库补丁是解决数据库产品相关缺陷的程序,安全补丁是专门解决可能导致数据库系统受到安全威胁的缺陷,修补安全补丁可以消除相应的安全威胁,从而更好的为应用服务
 风险
高,安装前需要严格测试
 操作
Oracle安全补丁又称CPU(Critical Patch Updates),修补软件易受攻击的漏洞
PU是累积型的,只需要安装最新的CPU即可,安装步骤如下:
1) 阅读补丁附带的说明文档(Critical Patch Updates Notes),里面介绍了安装过程与注意事项
2) 使用指定版本的opatch
3) 进入补丁目录,执行:
$$ORACLE_HOME/OPatch/opatch apply
4) 打开安装日志,确认没有错误发生,执行inventory列表命令确认安装

$ $ORACLE_HOME/OPatch/opatch lsinventory

2.3. 审计
 描述
审计是针对数据库中对象或事件的访问跟踪,当数据库发生安全事件的时候,可以提供很好的审查资料,当然过多的审计可能影响性能,需要针对数据库的操作情况考虑审计策略,通常我们必须开启登录审计
 风险

 操作
oracle审计日志可以放在sys.aud$表或外部文件中,可审计的活动有登陆尝试 数据库活动与对象存取
1) 编辑init.ora,增加下面一行:
audit_trail = db
2) 输入命令audit session,关闭审计使用noaudit session
2.4. 用户管理
2.4.1. 锁定未使用的账号
 描述
Oracle默认安装内置了许多缺省帐号,从9i开始,大多数帐户默认锁定,但是必须保证所有未使用的帐号锁定,防止可能的威胁
 风险

 操作
说明:
如果使用DBCA(Database Client Administrato tools)安装,DBCA将锁定除了SYS SYSTEM SCOTT DBSNMP OUTLN和三个JSERV帐号外的所有帐号

        如果手动安装(没有使用DBCA),默认的数据库内置帐号不会锁定
    alter user [username] account lock(username是用户名)

2.4.2. 更改缺省密码
 描述
Oracle安装时内置了很多缺省密码,很容易导致未授权用户进入数据库,威胁数据库的安全
 风险

 操作
1) 查看系统DBA权限帐号
select username from dba_users
2) 更改DBA用户密码
ALTER USER username IDENTIFIED BY password(尤其是sys system ctysys mdsys dbsnmp outln)
2.4.3. 密码策略
 描述
良好的密码策略如规定密码最小长度,最长使用时间,失败登陆尝试等,可以有效的防御针对密码的攻击,保证用户密码的安全
 风险

 操作
策略定义说明如下:

    FAILED_LOGIN_ATTEMPTS    ——失败登陆尝试的次数
    PASSWORD_LOCK_TIME        ——账号锁定天数
    PASSWORD_LIFE_TIME        ——账号最长使用天数
    PASSWORD_GRACE_TIME    ——超过最长使用时间后可以使用的天数
    PASSWORD_REUSE_TIME    ——账号可以重复使用的天数

PASSWORD_REUSE_MAX ——账号重复使用次数(以上任一设置,另外一个必须是unlimited)

1) 定义密码检验函数
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFICATION_FUNCTION newFunc
2) 设置密码过期时间:ALTER PROFILE DFAULT LIMIT PASSWORD_LIFE_TIME new_value
3) 设置密码不可重用时间: ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE-TIME new_value
4) 设置在多少次新的密码后能够使用老的密码:ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE-TIME new_value

        设置口令宽限期:ALTER PROFILE DEFAULT PASWORD_GRACE_TIME

注意: 默认密码复杂度函数默认没有创建,需要运行$ORA_HOME/rdbms/admin下utlpwdmg.sql才可以创建,修改密码使用password才使用该函数检查

        锁定用户: alter user smallroot account lock(锁定smallroot用户)
        解除锁定: alter user smallroot account unlock(给smallroot用户解除锁定)

2.5. 传输信息加密
 描述
当传输敏感信息如身份认证信息的时候,加密敏感信息可以避免遭受网络嗅探攻击
 风险

 操作
1) 客户端设置:
设置环境变量ORA_ENCRYPT_LOGIN=TRUE
2) 服务器设置:
编辑init.ora文件,增加DBLINK_ENCRYPT_LOGIN = TRUE
2.6. 权限设置
2.6.1. 限制缺省connect角色的权限
 描述
缺省CONNECT角色可以创建存储过程与数据库链接,如果这不是必须的,请遵循权限最小化原则,去除多余的权限
 风险

 操作
注意: Oracle10g开始,connect角色只有连接的权限
创建单独的与Connect角色类似的角色,根据情况去除或保留创建存储过程或数据库链接的权限

    revoke create procedure,create dblink from connect

2.6.2. 编写安全的自定义的PL/SQL包、存储过程与函数
 描述
开发团队在开发PL/SQL程序的时候必须严格遵守“安全PL/SQL编码规范”,测试阶段任何代码必须仔细检查是否包含SQL注入漏洞,如果有可能,开发团队应该避免使用外部链接库
 风险

 操作
开发过程中,对于数据库语句中的用户可输入变量,仔细判断是否存在SQL Injection的威胁
2.6.3. 检查已存在的PL/SQL包、存储过程与函数
 描述
必须仔细审核设置在已存在的PL/SQL包、存储过程与函数上public的权限,除非有业务上的需要,应该去除public在任何包、存储过程和函数上的EXECUTE权限
 风险

 操作
1) 尤其注意检查下列包的使用情况:

        UTL_FILE:允许用户读取数据库服务器上文件
        UTL_HTTP:允许用户使用HTTP访问外部资源
        UTL_TCP:    允许用户通过Oracle建立与外部的TCP连接
        UTL_SMTP:允许用户发送电子邮件
        UTL_RANDOM: 允许用户加密存储数据
        DBMS_LOB DBMS_SYS_SQL DBMS_JOB

2) 取消上述package上的public执行权限:

         revoke execute on UTL_FILE from public

2.6.4. 编写安全的触发器
 描述
触发器可以产生良好的审计信息,但是触发器也是使用PL/SQL编写,因此必须仔细审核触发器是否存在漏洞
 风险

 操作
注意在触发器构造的SQL语句中,是否包含用户可提交信息,必须检查数据是否构成SQL Injection
2.6.5. 外部存储过程
 描述
外部存储过程允许PL/SQL代码调用外部动态链接库的函数,可能会引起安全威胁
 风险

 操作
检查拥有Create Library权限的用户
2.7. TNS Listener
2.7.1. 设置TNS Listener密码
 描述
在Oracle10g以下,TNS Listener没有设置密码,任何人可以远程连接TNS Listener,获取如版本、服务等敏感信息
 风险

 操作
1) 编辑listener.ora,增加下面行:
PASSWORD_listenername = xxx
重启Listener
2) 运行lsnrctl,输入change_password ; set password; save_config
这样可以加密密码
2.7.2. 打开admin restriction
 描述
admin restriction可以限制特定的命令不能被远程执行,即使提供了管理密码,这可以保护由于偶然被窃取Listener密码导致的威胁
 风险

 操作
编辑listener.ora,增加下面行:
ADMIN_RESTRICTION_listername = ON
2.7.3. 启用TCP有效节点检查
 描述
TCP有效节点检查可以设置允许连接Oracle数据库的IP地址,这可以防止对数据库的非法探测
 风险

 操作
编辑protocol.ora(老版本sqlnet.ora):
TCP.VALIDNODE_CHECKING = YES
TCP_EXCLUDED_NODES = (逗号分隔的IP地址)
TCP_INVITED_NODES = (逗号分隔的IP地址)
2.7.4. 关闭XML数据库
 描述
Oracle XDB数据可以通过基于HTTP服务的8080 TCP端口或者基于FTP服务的2100端口访问,如果没有使用XDB服务,必须关闭该服务,防止可能的攻击
 风险
低,无法使用该功能
 操作
编辑spfiledbid.ora,去除下面行:
*.dispatchers = ‘(protocol = tcp) (service = dbidxdb)’

第3章 Informix安全配置指南
3.1. OS
 描述
OS是任何其他软件运行的基础,只有保障了OS的安全才可能保护Informix数据库的安全
 风险

 操作
参见《操作系统安全配置指南》相应系统章节
3.2. 数据库补丁
 描述
数据库系统同其他软件系统一样,都可能存在缺陷,数据库补丁是解决数据库产品相关缺陷的程序,安全补丁是专门解决可能导致数据库系统受到安全威胁的缺陷,修补安全补丁可以消除相应的安全威胁,从而更好的为应用服务
 风险
高,安装前需要严格测试
 操作
安装漏洞相应的Fix Packs
3.3. 审计
 描述
审计是针对数据库中对象或事件的访问跟踪,当数据库发生安全事件的时候,可以提供很好的审查资料,当然过多的审计可能影响性能,需要针对数据库的操作情况考虑审计策略,通常我们必须开启登录审计
 风险

 操作
1) 打开审计
onaudit –l 1
2) 指定审计文件存储目录
onaudit –p $INFORMIX_HOME/audit/audit.log(文件名任意)
3) 指定审计文件大小
onaudit –s 50000 (单位是字节)
4) 增加审计用户登录数据库的掩码
onaudit –a –u _default –e +STSN

    注意:
        如果为单独的用户设置审计,-u <username>
        创建模版:onaudit -a -u _advance -e +STSN

授予用户: onaudit -a -u smallroot -r _advance (为用户smallroot使用定制模版)
5) 修改掩码
onaudit –m –u _default –e +ADCK(增加审计ADCK事件)
3.4. 传输信息加密
 描述
当传输敏感信息如身份认证信息的时候,加密敏感信息可以避免遭受网络嗅探攻击
 风险

 操作
使用列级别加密保护敏感数据:
1) 创建表客户(id char(30), creditcard lvarchar(67));
2) 设置会话密码
SET ENCRYPTION PASSWORD "credit card number is encrypted";
3) 加密数据

        INSERT INTO customer VALUES
        ("Alice",  encrypt_aes("1234567890123456"));

4) 解密数据
SET ENCRYPTION PASSWORD "credit card number is encrypted";

        SELECT id FROM customer
           WHERE DECRYPT_CHAR(creditcard) = "2345678901234567"

3.5. 权限设置
3.5.1. 取消public的connect权限
 描述
默认public被授予connect权限,任何具有有效操作系统账号与密码的用户都可以连接数据库
 风险

 操作
revoke connect from public
3.5.2. 取消public在文件访问函数的execute权限
 描述
默认public用户可以执行某些文件访问函数如lotofile,这可能被攻击者利用,从而威胁数据库安全
 风险

 操作
FILETOCLOB与LOTOCLOB, ifx_file_to_file可以读写任意文件
Informix.ifx_load_internal可以远程加载DLL并执行DLLMain函数
例: 取消public在FILETOCLOB的执行权限:
revoke execute on FILETOCLOB from public
3.5.3. 取消public在系统函数上的execute权限
 描述
默认public用户可以执行如 ifx_replace_module,ifx_load_internal,那些函数允许用户以Informix用户身份上传和执行任何代码,可能被攻击者利用,威胁数据库安全
 风险

 操作
如果需要的话,按照商业逻辑创建一个role,仅仅赋予那些需要使用那些函数的用户该角色,然后配置该角色的execute权限并取消public的execute权限
1) revoke execute on ifx_replace_module from public
3.5.4. 限制language使用
 描述
任何拥有languange如c的用户可以以informix用户身份运行任意动态链接库,可能被攻击者利用,威胁数据库安全
 风险

 操作
1) REVOKE USAGE ON LANGUAGE C FROM PUBLIC

第4章 DB2安全配置指南
4.1. OS
 描述
OS是任何其他软件运行的基础,只有保障了OS的安全才可能保护DB2数据库的安全
 风险

 操作
参见《操作系统安全配置指南》相应系统章节
4.2. 数据库补丁
 描述
数据库系统同其他软件系统一样,都可能存在缺陷,数据库补丁是解决数据库产品相关缺陷的程序,安全补丁是专门解决可能导致数据库系统受到安全威胁的缺陷,修补安全补丁可以消除相应的安全威胁,从而更好的为应用服务
 风险
高,安装前需要严格测试
 操作
1) 察看当前补丁包的状况
db2level,输出如下:
DB21085I Instance " db2v71" uses DB2 code release "SQL07020" with level identifier "3010105" and informational tokens "DB2 v7.1.0.41","s010426" and " U475377".

        分析:db2v71是db2的版本,U475377是当前修补包的级别

2) 下载合适的补丁,如ftp.software.ibm.com,进入ps/products/db2/fixes/%L/%P/目录,这里,%L 是适当的语言环境(如美国英语、西班牙语和德语等),%P 是产品名/版本(例如,db2ntv71 等)
3) 解压补丁包,假设是/tmp/FP3_U475377目录
4) 安装前注意阅读以下Fixpakreadme.txt文件
5) 安装补丁包,执行如下命令:
在DB2每个实例中,注册为实例的所有者然后执行
db2 force applications all

        db2 terminate
        db2 stop
        db2 licd end
        注册为admin服务器所有者并执行
        db2admin stop
    注意:查看DB2实例列表

进入<DB2 product installation directory>/instance,如/usr/lpp/DB2_07_01/instance,执行./db2list
6) 使用installallpatch命令安装补丁包,如果发生错误或不需要该补丁包时,使用backoutallpatch卸载补丁包
7) 按照Fixpakreadme.txt中说明使用db2iupdt更新db2实例,还需要重新联编数据库
4.3. 审计
 描述
审计是针对数据库中对象或事件的访问跟踪,当数据库发生安全事件的时候,可以提供很好的审查资料,当然过多的审计可能影响性能,需要针对数据库的操作情况考虑审计策略,通常我们必须开启登录审计
 风险

 操作
审计用户验证,当认证用户或检索系统安全性信息的时候生成审计记录
审计功能的维护与文件存储在security文件夹下,db2audit.cfg 文件存储审计功能的配置信息,db2audit.log 文件存储原始的审计记录
1) 配置审计缓冲区
配置审计缓冲区可以异步方式写日志,提高了系统的性能
update dbm cfg using audit_buf_sz 10
db2stop
db2start

        注意: 缓冲区配置是以4K为单位的,上述配置为40K

2) 配置审计范围
审计用户验证(VALIDATE),包括成功与失败的

        db2audit configure scope validate both

3) 检查当前审计
db2audit describe
4) 启动审计
db2audit start
4.4. 传输信息加密
 描述
默认安装DB2采用SERVER方式进行身份认证,明文传输用户名与密码,很容易遭受嗅探供给导致密码泄露,使用加密认证将发送加密的用户名与密码。同时我们也可以加密传输的数据
 风险

 操作
[实例]-〉配置参数-〉通信,修改Authentitation,把SERVER改为SERVER_ENCRYET
重启实例
1) 用户名与密码加密
db2 update dbm cfg using authentication server_encrypt

        db2stop

db2start
2) 数据加密
db2 update dbm cfg using authentication data_encrypt_cmp

        db2stop

db2start
4.5. 权限设置
4.5.1. 取消PUBLIC的所有权限
 描述
public作为数据库内置的用户组,默认继承一些基本的权限,作为遵循权限最小原则的基本要求,必须撤销public的所有权限
 风险

 操作
数据库-〉属性-〉用户和组对象,选择PUBLIC,取消PUBLIC所有可访问的权限
revoke connect on database from public(取消连接权限)
REVOKE BINDADD ON DATABASE FROM PUBLIC(取消创建包权限)
4.6. 其他
4.6.1. 隐藏DB2实例
 描述
缺省情况下,只要向广播地址发送DB2 discover包,网段里的任何DB2服务器都会响应该数据包,通过设置隐藏DB2 实例,可以减少服务器被攻击的可能
 风险

 操作
[实例]-〉配置参数-〉通信,修改discovery,把Search改为Disable
重启实例

    命令: Db2 update admin cfg using discover disable



第5章 SQLServer安全配置指南
5.1. OS
 描述
OS是任何其他软件运行的基础,只有保障了OS的安全才可能保护SQLServer数据库的安全
 风险

 操作
参见《操作系统安全配置指南》相应系统章节
5.2. 数据库补丁
 描述
数据库系统同其他软件系统一样,都可能存在缺陷,数据库补丁是解决数据库产品相关缺陷的程序,安全补丁是专门解决可能导致数据库系统受到安全威胁的缺陷,修补安全补丁可以消除相应的安全威胁,从而更好的为应用服务
 风险
高,安装前需要严格测试
 操作
使用WSUS自动安装
5.3. 审计
 描述
审计是针对数据库中对象或事件的访问跟踪,当数据库发生安全事件的时候,可以提供很好的审查资料,当然过多的审计可能影响性能,需要针对数据库的操作情况考虑审计策略,通常我们必须开启登录审计
 风险

 操作
在 “SQLServer属性->安全性->审核级别”中设置为全部
5.4. 传输数据加密
 描述
当传输敏感信息如身份认证信息的时候,加密敏感信息可以避免遭受网络嗅探攻击
 风险
高,需要测试是否对性能有较大影响
 操作
例子展示了使用Microsoft提供的CA中心实现加密传输信息方法
服务端:
1) 必须开启IPSec服务
2) 管理员身份登陆服务器
3) 安装服务器验证证书
使用IE进入http:// 210.22.94.11/certsrv(Microsoft提供的CA)(也可以是自己的CA),选择申请一个证书-〉高级申请-〉使用表格向这个 CA 提交一个证书申请-〉名称中填写服务器的完整域名-〉预期目的中选择“服务器认证”-〉选择“使用本地机器保存”-〉提交申请-〉安装证书
4) 运行“服务端网络实用工具”,确保选择TCP/IP与命名管道选中,选择“强制协议加密”(强制加密)

    客户端:

1) 管理员身份登陆客户端
2) 安装 MDAC 2.6 或 SQL Server 2000 连接库
3) 使用IE进入http:// 210.22.94.11/certsrv(Microsoft提供的CA)(也可以是自己的CA),选择“检索 CA 证书或证书吊销列表”-〉安装此 CA 证书路径-〉安装
4) 运行“客户端网络实用工具”,确保选择TCP/IP与命名管道选中,选择“强制协议加密”(强制加密)
提示:上面配置是强制客户端使用加密,当然也可以可选的使用加密,方法如下:

    使用OLE-DB连接SQLServer,指定连接字符串如下:
        "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security 

Info=False;Initial Catalog=Northwind;Data Source=sql01;Use Encryption for
Data=True"
5.5. 权限设置
5.5.1. 取消public角色权限
 描述
public角色是SQLServer数据库默认角色,每个数据库用户都属于它,包含每个数据库中,包括 master、msdb、tempdb、model 和所有用户数据库,默认拥有对系统数据库或扩展存储过程如xp_dirtree(列出磁盘目录结构)等select或exec权限,可能给数据库造成安全隐患
 风险

 操作
说明:如果数据库用户只是访问用户数据库,那么可以撤销public在系统数据库中一切权限

    例:撤销public执行xp_dirtree权限

use master;

    revoke exec on xp_dirtree from public

5.6. 其他
5.6.1. 扩展存储过程
 描述
xp_cmdshell允许执行外部系统命令,可能会给系统带来危害
 风险
中,需要考虑是否使用那些存储过程
 操作
危险的扩展存储过程如下:
xp_cmdshell xp_OACreate xp_OADestory xp_OAGetErrorInfo
xp_OAGetProperty xp_OAMethod xp_SetProperty xp_OAStop
xp_dirtree xp_subdirs
1) 删除exec sp_dropextendedproc ‘xp_cmdshell’
2) 恢复
针对xp_cmdshell,exec sp_addextendproc ‘xp_cmdshell’,’xplog70.dll’
针对xp_OAxxx, exec sp_addextendproc ‘xp_OAxxx’,’odsole70.dll’
针对xp_dirtree与xp_subdirs, exec sp_addextendproc ‘xp_xxx’,’xpstar.dll’
5.6.2. 验证方式
 描述
采用混合验证方式而不是SQL Server认证方式可以降低密码嗅探的风险
 风险

 操作
在 “SQLServer属性->安全性->身份认证”中设置
5.6.3. 样例数据库
 描述
样例数据库是SQLServer作为代码示范而自带的数据库,在正式环境中应该去除样例数据库,防止被非法存储数据
 风险

 操作
drop database pubs;
drop database northwind

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

6

添加新评论2 条评论

baimao3000baimao3000安全工程师江苏天宝
2019-03-14 09:57
非常好的文档,感谢您!
zongzi0820zongzi0820系统工程师南京利楠群信息技术有限公司
2019-03-11 20:49
有没有,linux环境下的Oracle安装指南

twt社区管理员@zongzi0820 这个在社区里面非常多,你直接搜索即可。

2019-03-12 08:41
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广