Oracle 9i/10g/11g常见安全管理问题      赵元杰北京群环域科技有限公司     2012.2
安全问题♠ 与Oracle系统有关的安全♠ 数据库服务器威胁♠ DBA口令忘记问题♠ Oracle 安全漏洞                   2/50
Oracle 系统安全检查♠ 检查忽略的系统权限♠ 检查忽略的角色♠ 无限制的访问数据♠ 服务问题♠ DBA口令忘记问题                    3/50
检查忽略的系统权限♠ 检查下面关键项: ♠   无限制的表空间 ♠   使用的无限制(Quota Unlimited) ♠   创建用户问题 ♠   使用Drop/Alter语句问题 ♠   不明确的问题                    ...
检查无限制的表空间♠ 检查是否存在无限制而带来的危险: ♠ 使用无限制表空间可创建任何表和插入任   意多的数据行到表中; ♠ 找出问题:select grantee   from dba_sys_privs where privilege =...
检查无限制的表空间♠ 检查是否存在下面问题: ♠ 检查所授权的表空间是否为无限制; ♠ 查询DBA_TS_QUOTAS:select username,       tablespace_name,   max_bytes  from dba_...
检查创建对象问题♠ 检查是否存在权限不当: ♠ DBA不理解不同的创建权限及隐含的授权; ♠ 查询类似的CREATE …: select distinct privilege   from dba_sys_privs  where privil...
检查创建对象问题♠ 检查是否存在权限不当: ♠ DBA检查哪些人员有创建权限: select distinct privilege   from dba_sys_privs  where privilege like ‘CREATE%’; ♠ ...
检查删除对象问题♠ 检查是否存在DROP权限: ♠ 检查哪些用户具有CREATE/DROP权限; ♠ 查询类似的DROP …: select   *   from   dba_sys_privs  where   privilege like ...
检查过度的许可授权问题♠ 检查是否存在过度授权: ♠ 检查下面问题:SQL> show userUSER IS “COOK”SQL> select * from session privs;…EXECUTE ANY PROCEDURE…15 r...
检查过度的许可授权问题♠ 检查是否存在过度授权: ♠ 检查下面问题(继续):SQL> select * from session_privs;PRIVILEGE----------------------------------------.....
检查心照不宣的问题   ♠ 检查是否存在心照不宣的问题      ♠ 检查下面问题:    select * from dictionary     where table_name like ’PRIV%’;      ♠ 例如:Table_...
忽略的角色♠ 默认的角色♠ 带Admin Option 授权的角色♠ 口令保护角色                        13/50
忽略的角色♠ 理解创建数据库时的默认角色select *  from sys.dba_role_privs;♠ 默认的角色与Oracle版本有关♠ 理解哪些权限已经授予角色:select *  from sys.dba_sys_privs wh...
忽略的角色♠ 例如创建一个新用户,要授予:  Grant Create Session (系统权限) 或  Grant Connect (默认)♠ Create Session: 用户可以登录♠ Connect:select privilege...
忽略的角色♠ 用户任意用with Admin Option 给角色授权♠ 如果后来从原授权者撤消权限,则连带的  被授权者需要知道如何再授权问题♠ 有些DBA 工具默认是Yes♠ 小心使用 admin option               ...
角色的口令保护♠ 角色需要口令要进行设置(启用)♠ 应用中频繁登录的安全问题♠ 防止用户通过Sqlplus或 其它的工具  直接访问数据库表问题♠ 参考Oracle安全资料                         17/50
非故意的访问数据库数据♠ 默认口令♠ 用户口令♠ 备份的保护♠ 保护存储过程♠ 保护开发与测试环境♠ 口令的可见问题                 18/50
非故意访问数据-默认口令♠ 口令是普遍知道的或公开的♠ 数据库创建时自动操作的一部分♠ 不要在产品中运行 utlsampl♠ 理解安装Oracle附加产品的标识问题♠ 用下面的shell可找到DB服务器的 ids: grep -i ”ident...
非故意访问数据-默认口令♠ 几个常见问题:Id / password                   What                          Default Privilegessystem/manager       ...
非故意访问数据-默认口令♠ Oracle 10g 已做了改进♠ 大部分的帐户都设置成 locked 和expired♠ 当然 sys/system 是不能锁的♠ dbca 提示口令♠ 如果使用脚本,应该可以改变                 ...
非故意访问数据-默认口令  ♠ Perl 脚本可发现口令:#!/usr/local/bin/perl@ids = <DATA>; # get list of default id/passwords from data atend of thi...
非故意访问数据-默认口令   ♠ Perl 可发现默认的口令(续)# loop through list of ids, attempting to log in.   for ($idx=0; $idx<@ids; $idx++) {    ...
非故意访问数据-用户口令♠ 用户采用最小的防范: ♠ 口令与用户标识一样 ♠ 口令以粘贴方式♠ 从 Oracle 8 开始,可以: ♠ Limit # of sessions per user ♠ Limit # of failed login...
非故意访问数据-用户口令 ♠ Perl 脚本可发现琐碎的口令:#!/usr/local/bin/perlopen (oratab,"</var/opt/oracle/oratab"); # get list of sidson this sys...
非故意访问数据-用户口令♠ Perl 脚本可发现琐碎的口令(续):@userids=`sqlplus -silent / as sysdba<<eofset sqlprompt ""set pagesize 0set trimspool ons...
非故意访问数据-保护备份♠ 拒绝用户访问包含备份脚本、数据及EXP的数据.♠ 借助 NFS进行共享时要限制指定主机♠ 保护物理磁带的访问♠ 将程序、存储过程及控制等存放适当的地方♠ 当采用远处存放时,要限制专门人员访问♠ 一般的敏感问题    ...
非故意访问数据-保护存储过程♠ 存储过程包含有商业逻辑问题♠ 采用Oracle的 PL/SQL 实用程序转换  代码♠ Example :$ wrap iname=mycode.sql oname=mycode.wrapped$ sqlplus...
非故意访问数据-保护开发与测试环境♠ 生产数据经常用于开发和测试环境♠ 注意专人才访问这些数据                    29/50
非故意访问数据-口令可见♠ 交互式的shell帐户可用“ps -ef”看到口令  ♠ sqlplus  ♠ exp/imp  ♠ sqlldr♠ 例子:sqlplus system/manager@orclps -ef | grep sqlpl...
非故意访问数据-口令可见♠ 选择在命令行上采用投掷口令 – 减  少口令的可见性: sqlplus <<EOF scott/tiger @mysql.sql exit EOF                       31/50
非故意访问数据-口令可见♠ 使用数据库链接( database links )要小心♠ 用户有 select any table 可看到口令 select userid, password, host   from sys.link$;    ...
服务的拒绝问题♠ 借助Profile 限制数据库资源♠ UTL_FILE_DIR 参数♠ 产品的独立性问题♠ Listeners & Name Servers                             33/50
借助Profile 限制数据库资源♠ Oracle的默认 profile 是开放的:Select resource_name,Limit   from sys.dba_profiles where profile_name = ‘DEFAULT...
借助Profile 限制数据库资源♠ 为每个用户类创建专门的 profile♠ 不要采用 unlimited,采用合理的限制♠ RESOURCE_LIMIT 设置成限制方式 或 alter system set resource_limit =...
数据库服务拒绝-UTL_FILE_DIR♠ 用于 PL/SQL 的文件 I/O♠ 限制在必要的目录里♠ 避免设置成 *♠ 检查 UTL_FILE_DIR 路径的有效性  (避免写满整个磁盘)♠ 确认目录是合理的许可               ...
数据库服务拒绝-产品独立性♠ 在产品系统中shell帐户可以: ♠ 用带口令的脚本搜索文件系统 ♠ 装载磁盘驱动器 ♠ 执行程序, 查看内存与CPU ♠ 定位和读Exp和 sqlldr 文件♠ 拒绝或限制在产品系统中shell帐户       ...
数据库服务拒绝- Listeners & Names Servers♠ 口令保护 Listeners 与 Names Servers *♠ Oracle 10g 前, 客户端可用listener 控制关闭  数据库♠ 在listener.ora...
数据库服务器威胁♠ 物理安全♠ 无意的访问♠ 服务器的拒绝♠ 不必要的UNIX服务♠ 不必要的shell帐户                39/50
数据库服务器威胁-物理安全♠ 数据库服务器应该放在安全的地方♠ 限制无权限的访问♠ 有放火设备, 电源保护, 供水, 供热                        40/50
数据库服务器威胁-无意的访问♠ 一般可读的文件♠ 设置-UID 脚本♠ NFS 共享                 41/50
数据库服务器威胁-无意的访问♠ 对敏感的可读的文件进行保护♠ 设置UNIX 文件许可 ♠ Owner (read,write,execute) ♠ Group (read,execute) ♠ World (none)♠ 用chmod 命令修改...
数据库服务器威胁-无意的访问♠ 保护样例 ♠ 新创建的用户脚本 find $ORACLE_HOME –type f      –exec grep –il “identified by” {} ; ♠ sqlplus 脚本可带口令 find /...
数据库服务器威胁-设置UID脚本♠ 风险 ♠ 潜在允许用户变为root       cp /usr/bin/sh /tmp/.mysh       chmod 4755 /tmp/.mysh       ls $*     -rwsr-xr-x...
数据库服务器威胁-NFS共享♠ NFS 是一个机制,它可使一台可用的服务  器的文件系统到其它的系统上♠ 在共享时小心: ♠ 只共享指定的主机,不要整个网络 ♠ 如果可能则以只读方式共享 ♠ 以最低的级别共享,不要整个磁盘♠ 例如: ♠ sha...
数据库服务器威胁-服务拒绝♠ 网络或系统组要特殊处理♠ DBA 协助… ♠ 从不同的机器监视数据库和服务器 ♠ 开发、测试与产品服务器分开 ♠ 与系统和网络管理员沟通                     46/50
数据库服务器威胁-不必要的UNIX服务♠ 多数 unix 服务人员否知道安全漏洞♠ 最小化以共享方式使用  ♠ FTP必要?♠ 查看 /etc/rc* 与 inetd.conf 消除不必要的  服务♠ http://www.samag.com/...
数据库服务器威胁-不必要的shell帐户♠ 考虑口令文件的每一行  /etc/passwd♠ 删除不需要的标识( ids )                       48/50
DBA口令忘记的处理♠ Oracle 8i/9i/10g/11g版本(方法1):  ♠ 可采用svrmgrl登录可直接修改口令:  ♠ 这种方法其实是Oracle的漏洞: svrmgrl SVRMGR>connect internal (如果提...
DBA口令忘记的处理♠ Oracle 8i/9i/10g/11g版本(方法2):   ♠ 用orapwd实用程序修改SYS帐户口令;   ♠ orapwd实用程序,可修改SYS口令;   ♠ orapwd实用程序的语法: orapwd file...
DBA口令忘记的处理♠ Oracle 8i/9i/10g/11g(方法2):  ♠ orapwd实用程序的例子:$orapwd file=$ORACLE_HOME/ORACLE/intra.passwdpassword=zhao_yuan_ji...
Upcoming SlideShare
Loading in …5
×

1.oracle 9i/10g/11g 常见安全管理问题 (50 页)

1,266 views

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,266
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

1.oracle 9i/10g/11g 常见安全管理问题 (50 页)

  1. 1. Oracle 9i/10g/11g常见安全管理问题 赵元杰北京群环域科技有限公司 2012.2
  2. 2. 安全问题♠ 与Oracle系统有关的安全♠ 数据库服务器威胁♠ DBA口令忘记问题♠ Oracle 安全漏洞 2/50
  3. 3. Oracle 系统安全检查♠ 检查忽略的系统权限♠ 检查忽略的角色♠ 无限制的访问数据♠ 服务问题♠ DBA口令忘记问题 3/50
  4. 4. 检查忽略的系统权限♠ 检查下面关键项: ♠ 无限制的表空间 ♠ 使用的无限制(Quota Unlimited) ♠ 创建用户问题 ♠ 使用Drop/Alter语句问题 ♠ 不明确的问题 4/50
  5. 5. 检查无限制的表空间♠ 检查是否存在无限制而带来的危险: ♠ 使用无限制表空间可创建任何表和插入任 意多的数据行到表中; ♠ 找出问题:select grantee from dba_sys_privs where privilege = ’UNLIMITED TABLESPACE’; ♠ 是否存在无限制的扩展:select tablespace_name, file_name, maxbytes from dba_data_files where autoextensible = ’YES’; 5/50
  6. 6. 检查无限制的表空间♠ 检查是否存在下面问题: ♠ 检查所授权的表空间是否为无限制; ♠ 查询DBA_TS_QUOTAS:select username, tablespace_name, max_bytes from dba_ts_quotas;如果 max_bytes =-1 表示无限制 6/50
  7. 7. 检查创建对象问题♠ 检查是否存在权限不当: ♠ DBA不理解不同的创建权限及隐含的授权; ♠ 查询类似的CREATE …: select distinct privilege from dba_sys_privs where privilege like ‘CREATE%’; ♠ 比如:create public synonym, database link ♠ create any * 7/50
  8. 8. 检查创建对象问题♠ 检查是否存在权限不当: ♠ DBA检查哪些人员有创建权限: select distinct privilege from dba_sys_privs where privilege like ‘CREATE%’; ♠ 每个用户都与上面的查询比较,检查是否 存在权限遗漏和权限过高; ♠ 检查最小权限规则。 8/50
  9. 9. 检查删除对象问题♠ 检查是否存在DROP权限: ♠ 检查哪些用户具有CREATE/DROP权限; ♠ 查询类似的DROP …: select * from dba_sys_privs where privilege like ’DROP%’ or privilege like ’ALTER%’; ♠ 每个用户都与上面的查询比较,询问他们 实际的权限; ♠ 授予需要的最小权限。 9/50
  10. 10. 检查过度的许可授权问题♠ 检查是否存在过度授权: ♠ 检查下面问题:SQL> show userUSER IS “COOK”SQL> select * from session privs;…EXECUTE ANY PROCEDURE…15 rows selected.SQL> execdbms_repcat_admin.grant_admin_any_schema(‘COOK’); 10/50
  11. 11. 检查过度的许可授权问题♠ 检查是否存在过度授权: ♠ 检查下面问题(继续):SQL> select * from session_privs;PRIVILEGE----------------------------------------...DROP ANY TABLEUPDATE ANY TABLE…DROP PUBLIC SYNONYMCREATE ANY VIEWDROP ANY VIEW...54 rows selected. 11/50
  12. 12. 检查心照不宣的问题 ♠ 检查是否存在心照不宣的问题 ♠ 检查下面问题: select * from dictionary where table_name like ’PRIV%’; ♠ 例如:Table_Name CommentsALL_COL_PRIVS_MADE Grants on columns for which the user is owner orgrantorALL_TAB_PRIVS_MADE Users grants and grants on users objectsDBA_COL_PRIVS All grants on columns in the databaseDBA_ROLE_PRIVS Roles granted to users and rolesDBA_SYS_PRIVS System privileges granted to users and rolesDBA_TAB_PRIVS All grants on objects in the databaseROLE_ROLE_PRIVS Roles which are granted to rolesROLE_SYS_PRIVS System privileges granted to roles 12/50ROLE_TAB_PRIVS Table privileges granted to roles
  13. 13. 忽略的角色♠ 默认的角色♠ 带Admin Option 授权的角色♠ 口令保护角色 13/50
  14. 14. 忽略的角色♠ 理解创建数据库时的默认角色select * from sys.dba_role_privs;♠ 默认的角色与Oracle版本有关♠ 理解哪些权限已经授予角色:select * from sys.dba_sys_privs where grantee in (select role fromsys.dba_roles); 14/50
  15. 15. 忽略的角色♠ 例如创建一个新用户,要授予: Grant Create Session (系统权限) 或 Grant Connect (默认)♠ Create Session: 用户可以登录♠ Connect:select privilege from sys.dba_sys_privs where grantee = ’CONNECT’;ALTER SESSION CREATE CLUSTERCREATE DATABASE LINK CREATE SEQUENCECREATE SESSION CREATE SYNONYMCREATE TABLE CREATE VIEW 15/50
  16. 16. 忽略的角色♠ 用户任意用with Admin Option 给角色授权♠ 如果后来从原授权者撤消权限,则连带的 被授权者需要知道如何再授权问题♠ 有些DBA 工具默认是Yes♠ 小心使用 admin option 16/50
  17. 17. 角色的口令保护♠ 角色需要口令要进行设置(启用)♠ 应用中频繁登录的安全问题♠ 防止用户通过Sqlplus或 其它的工具 直接访问数据库表问题♠ 参考Oracle安全资料 17/50
  18. 18. 非故意的访问数据库数据♠ 默认口令♠ 用户口令♠ 备份的保护♠ 保护存储过程♠ 保护开发与测试环境♠ 口令的可见问题 18/50
  19. 19. 非故意访问数据-默认口令♠ 口令是普遍知道的或公开的♠ 数据库创建时自动操作的一部分♠ 不要在产品中运行 utlsampl♠ 理解安装Oracle附加产品的标识问题♠ 用下面的shell可找到DB服务器的 ids: grep -i ”identified by” $ORACLE_HOME/admin/* 19/50
  20. 20. 非故意访问数据-默认口令♠ 几个常见问题:Id / password What Default Privilegessystem/manager DBA DBAsys/change_on_install Data Dictionary Pretty much everythingdbsnmp/dbsnmp Intelligent Agent Connect, resource, (OEM) unlimited tablespace, …mdsys/mdsys Oracle Spatial Pretty much everythingoutln/outln Supports Plan Stability Unlimited tablespace, resource, execute any proctracesvr/trace Trace Server Create session, (OEM) select any table 20/50
  21. 21. 非故意访问数据-默认口令♠ Oracle 10g 已做了改进♠ 大部分的帐户都设置成 locked 和expired♠ 当然 sys/system 是不能锁的♠ dbca 提示口令♠ 如果使用脚本,应该可以改变 21/50
  22. 22. 非故意访问数据-默认口令 ♠ Perl 脚本可发现口令:#!/usr/local/bin/perl@ids = <DATA>; # get list of default id/passwords from data atend of this file.open (oratab,"</var/opt/oracle/oratab"); # get list of sids onthis system.while (<oratab>) { chomp; # remove newline s/#.*//; # remove comments s/^s+//; # remove leading white space s/s+$//; # remove trailing white space s/^*.*//; # remove leading * next unless length; # anything left? ($sid, $home, $yn) = split ":"; # parse out the fields $ENV{"ORACLE_SID"} = $sid; $ENV{"ORACLE_HOME"} = $home; $ENV{"PATH"} = $home."/bin:/bin:/usr/bin"; $ENV{"LD_LIBRARY_PATH"} = $home."/lib:/usr/openwin/lib";22/50
  23. 23. 非故意访问数据-默认口令 ♠ Perl 可发现默认的口令(续)# loop through list of ids, attempting to log in. for ($idx=0; $idx<@ids; $idx++) { $id = $ids[$idx]; chop($id); # remove newline@x=`sqlplus $id <<EOFexitEOF`; @ReturnLines = grep(/Connected to:/,@x); print "$id@$sidn" if (@ReturnLines != 0 ); # print the idwe got in with. } # for idx} # while oratabclose (oratab);__END__system/managersys/change_on_installdbsnmp/dbsnmp 23/50
  24. 24. 非故意访问数据-用户口令♠ 用户采用最小的防范: ♠ 口令与用户标识一样 ♠ 口令以粘贴方式♠ 从 Oracle 8 开始,可以: ♠ Limit # of sessions per user ♠ Limit # of failed login attempts ♠ Limit # of times password can be reused ♠ Limit lifetime of password (口令生存期) ♠ 开发客户的验证函数 ♠ 口令过期的时间长度 24/50
  25. 25. 非故意访问数据-用户口令 ♠ Perl 脚本可发现琐碎的口令:#!/usr/local/bin/perlopen (oratab,"</var/opt/oracle/oratab"); # get list of sidson this system.while (<oratab>) { chomp; # remove newline s/#.*//; # remove comments s/^s+//; # remove leading white space s/s+$//; # remove trailing white space s/^*.*//; # remove leading * next unless length; # anything left? ($sid,$home,$yn) = split ":"; # parse out the fields $ENV{"ORACLE_SID"} = $sid; $ENV{"ORACLE_HOME"} = $home; $ENV{"PATH"} = $home."/bin:/bin:/usr/bin"; $ENV{"LD_LIBRARY_PATH"} = $home."/lib:/usr/openwin/lib"; 25/50
  26. 26. 非故意访问数据-用户口令♠ Perl 脚本可发现琐碎的口令(续):@userids=`sqlplus -silent / as sysdba<<eofset sqlprompt ""set pagesize 0set trimspool onset echo offset feedback offselect username from dba_users order by username;exiteof`; for ($idx=0; $idx<@userids; $idx++) { chop $userids[$idx]; @x=`sqlplus $userids[$idx]/$userids[$idx] <<EOFexitEOF`; @ReturnLines = grep(/Connected to:/,@x); print "$userids[$idx]@$sidn" if (@ReturnLines != 0 ); #print the id we got in with. } # for 26/50} # while oratab
  27. 27. 非故意访问数据-保护备份♠ 拒绝用户访问包含备份脚本、数据及EXP的数据.♠ 借助 NFS进行共享时要限制指定主机♠ 保护物理磁带的访问♠ 将程序、存储过程及控制等存放适当的地方♠ 当采用远处存放时,要限制专门人员访问♠ 一般的敏感问题 27/50
  28. 28. 非故意访问数据-保护存储过程♠ 存储过程包含有商业逻辑问题♠ 采用Oracle的 PL/SQL 实用程序转换 代码♠ Example :$ wrap iname=mycode.sql oname=mycode.wrapped$ sqlplus scott/tiger @mycode.wrapped 28/50
  29. 29. 非故意访问数据-保护开发与测试环境♠ 生产数据经常用于开发和测试环境♠ 注意专人才访问这些数据 29/50
  30. 30. 非故意访问数据-口令可见♠ 交互式的shell帐户可用“ps -ef”看到口令 ♠ sqlplus ♠ exp/imp ♠ sqlldr♠ 例子:sqlplus system/manager@orclps -ef | grep sqlplusoracle 633 103 0 20:38:50 pts/4 0:00 sqlplus system/manageroracle 656 642 0 20:39:11 pts/5 0:00 grep sqlplus♠ 不要将口令放在命令行上! 30/50
  31. 31. 非故意访问数据-口令可见♠ 选择在命令行上采用投掷口令 – 减 少口令的可见性: sqlplus <<EOF scott/tiger @mysql.sql exit EOF 31/50
  32. 32. 非故意访问数据-口令可见♠ 使用数据库链接( database links )要小心♠ 用户有 select any table 可看到口令 select userid, password, host from sys.link$; 32/50
  33. 33. 服务的拒绝问题♠ 借助Profile 限制数据库资源♠ UTL_FILE_DIR 参数♠ 产品的独立性问题♠ Listeners & Name Servers 33/50
  34. 34. 借助Profile 限制数据库资源♠ Oracle的默认 profile 是开放的:Select resource_name,Limit from sys.dba_profiles where profile_name = ‘DEFAULT’;RESOURCE_NAME LIMIT -------------------------------- --------- COMPOSITE_LIMIT UNLIMITED SESSIONS_PER_USER UNLIMITED CPU_PER_SESSION UNLIMITED CPU_PER_CALL UNLIMITED LOGICAL_READS_PER_SESSION UNLIMITED LOGICAL_READS_PER_CALL UNLIMITED IDLE_TIME UNLIMITED CONNECT_TIME UNLIMITED PRIVATE_SGA UNLIMITED FAILED_LOGIN_ATTEMPTS UNLIMITED PASSWORD_LIFE_TIME UNLIMITED PASSWORD_REUSE_TIME UNLIMITED PASSWORD_REUSE_MAX UNLIMITED PASSWORD_VERIFY_FUNCTION UNLIMITED PASSWORD_LOCK_TIME UNLIMITED 34/50
  35. 35. 借助Profile 限制数据库资源♠ 为每个用户类创建专门的 profile♠ 不要采用 unlimited,采用合理的限制♠ RESOURCE_LIMIT 设置成限制方式 或 alter system set resource_limit = true; 35/50
  36. 36. 数据库服务拒绝-UTL_FILE_DIR♠ 用于 PL/SQL 的文件 I/O♠ 限制在必要的目录里♠ 避免设置成 *♠ 检查 UTL_FILE_DIR 路径的有效性 (避免写满整个磁盘)♠ 确认目录是合理的许可 36/50
  37. 37. 数据库服务拒绝-产品独立性♠ 在产品系统中shell帐户可以: ♠ 用带口令的脚本搜索文件系统 ♠ 装载磁盘驱动器 ♠ 执行程序, 查看内存与CPU ♠ 定位和读Exp和 sqlldr 文件♠ 拒绝或限制在产品系统中shell帐户 37/50
  38. 38. 数据库服务拒绝- Listeners & Names Servers♠ 口令保护 Listeners 与 Names Servers *♠ Oracle 10g 前, 客户端可用listener 控制关闭 数据库♠ 在listener.ora中设置 PASSWORDS_listenername ♠ lsnrctl change_password [listener_name]♠ 在names.ora 设置NAMES.PASSWORD*note - onames is deprecated in 10g, move to OID 38/50
  39. 39. 数据库服务器威胁♠ 物理安全♠ 无意的访问♠ 服务器的拒绝♠ 不必要的UNIX服务♠ 不必要的shell帐户 39/50
  40. 40. 数据库服务器威胁-物理安全♠ 数据库服务器应该放在安全的地方♠ 限制无权限的访问♠ 有放火设备, 电源保护, 供水, 供热 40/50
  41. 41. 数据库服务器威胁-无意的访问♠ 一般可读的文件♠ 设置-UID 脚本♠ NFS 共享 41/50
  42. 42. 数据库服务器威胁-无意的访问♠ 对敏感的可读的文件进行保护♠ 设置UNIX 文件许可 ♠ Owner (read,write,execute) ♠ Group (read,execute) ♠ World (none)♠ 用chmod 命令修改许可♠ 用umask命令为Oracle帐户设置默认可 创建文件 42/50
  43. 43. 数据库服务器威胁-无意的访问♠ 保护样例 ♠ 新创建的用户脚本 find $ORACLE_HOME –type f –exec grep –il “identified by” {} ; ♠ sqlplus 脚本可带口令 find /u01/app/oracle/admin –type f –exec grep –il “sqlplus” {} ; ♠ sqlldr脚本可带口令 find /u01/app/oracle/admin –type f –exec grep –il “sqlldr” {} ; ♠ EXP/IMP 脚本 find /u01/app/oracle/admin –type f –exec egrep –il “exp|imp” {} ; 43/50
  44. 44. 数据库服务器威胁-设置UID脚本♠ 风险 ♠ 潜在允许用户变为root cp /usr/bin/sh /tmp/.mysh chmod 4755 /tmp/.mysh ls $* -rwsr-xr-x 1 root other 88620 .mysh♠ 防止方法 ♠ 最小化有管理功能的用户 ♠ 离开时保持终端是锁的 ♠ 在PATH上不要用 “.” ♠ 设置 UID 脚本来审计系统 find / -local –perm –004000 –type f –print 44/50
  45. 45. 数据库服务器威胁-NFS共享♠ NFS 是一个机制,它可使一台可用的服务 器的文件系统到其它的系统上♠ 在共享时小心: ♠ 只共享指定的主机,不要整个网络 ♠ 如果可能则以只读方式共享 ♠ 以最低的级别共享,不要整个磁盘♠ 例如: ♠ share -o ro=client[:client]… pathname 45/50
  46. 46. 数据库服务器威胁-服务拒绝♠ 网络或系统组要特殊处理♠ DBA 协助… ♠ 从不同的机器监视数据库和服务器 ♠ 开发、测试与产品服务器分开 ♠ 与系统和网络管理员沟通 46/50
  47. 47. 数据库服务器威胁-不必要的UNIX服务♠ 多数 unix 服务人员否知道安全漏洞♠ 最小化以共享方式使用 ♠ FTP必要?♠ 查看 /etc/rc* 与 inetd.conf 消除不必要的 服务♠ http://www.samag.com/documents/s=1152/s am0104i/0104i.htm 47/50
  48. 48. 数据库服务器威胁-不必要的shell帐户♠ 考虑口令文件的每一行 /etc/passwd♠ 删除不需要的标识( ids ) 48/50
  49. 49. DBA口令忘记的处理♠ Oracle 8i/9i/10g/11g版本(方法1): ♠ 可采用svrmgrl登录可直接修改口令: ♠ 这种方法其实是Oracle的漏洞: svrmgrl SVRMGR>connect internal (如果提示回答口令,则输入oracle) SVRMGR>grant connect to system identified by new_pass; New_pass 是新口令(字母数字式串). 49/50
  50. 50. DBA口令忘记的处理♠ Oracle 8i/9i/10g/11g版本(方法2): ♠ 用orapwd实用程序修改SYS帐户口令; ♠ orapwd实用程序,可修改SYS口令; ♠ orapwd实用程序的语法: orapwd file=<filename>password=<password.entries=<users> Where file_name of password file (mand), Password-password for SYS and INTERNAL (mand), Entries –maximum number of distinct DBA and OPERs(opt), There are no space around the equal-to(=) character. 这里: file 是密码文件的路径和名字; password 是进入SYS的管理员的口令; entries 是可存放管理员帐户的数目。 entries=10 50/50
  51. 51. DBA口令忘记的处理♠ Oracle 8i/9i/10g/11g(方法2): ♠ orapwd实用程序的例子:$orapwd file=$ORACLE_HOME/ORACLE/intra.passwdpassword=zhao_yuan_jie entries=30这个命令建立一个密码文件 intra.passwd ,可以记录30个数据库管理员的密码SYS帐户的口令为zhao_yuan_jie。 51/50

×