你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Linux开发
oracle 基础(4)
 
1.7 保护监听程序

背景
创建一个缓冲区溢出,即通过发送要执行的大型字符串使监听程序崩溃是常用的入侵策略。 另一种常用策略是使用 SET DISPLAYMODE VERBOSE 从 lsnrctl 实用工具查看各种组件。 在这种情况下,黑客可以通过在有漏洞的计算机上运行 lsnrctl 以管理目标服务器上的监听程序来操纵设置。下面就是一个例子:

LSNRCTL> set trc_level support
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=prolin1)(PORT=1521)))
LISTENER parameter "trc_level" set to support
The command completed successfully
LSNRCTL> set trc_directory /tmp
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=prolin1)(PORT=1521)))
LISTENER parameter "trc_directory" set to /tmp
The command completed successfully

由于跟踪级别为 SUPPORT,因此监听程序会生成大量您可能不希望黑客知道的信息。 此外,因为目录 /tmp 中会写入跟踪文件,所以黑客也很容易查看到这些信息。 甚至不登录服务器也可以了解到所有这些信息。

策略
要保护监听程序,最好的方法是设置密码。 此外,也可以使用其他方法: 限制使用 lsnrctl 实用工具设置各种监听程序参数的能力。 在这种情况下,更改参数的唯一方式是在监听程序配置文件中设置参数,然后重新加载。 要设置这些限制,可以在 listener.ora 文件中添加以下行:

ADMIN_RESTRICTIONS_LISTENER = ON

然后,重新启动监听程序。 现在,您将不再能够在 lsnrctl 提示中使用 SET 命令来更改值了。例如:

LSNRCTL> set trc_directory /hacker_dir
Connecting to (ADDRESS=(PROTOCOL=IPC)(KEY=PROPRD1))
TNS-12508: TNS:listener could not resolve the COMMAND given

注意 TNS-12508。从现在开始,要更改值,必须在 listener.ora 中进行,然后使用重新加载命令。

LSNRCTL> reload

这对本系列讨论的所有 Oracle 版本都适用。

即使使用密码保护监听程序,您仍然应该使用该技术进一步限制黑客操纵监听程序的能力。 在 Oracle 数据库 10g 中尤其应该如此,因为在该软件中,Oracle 软件所有者不需要提供监听程序密码。

结论
结论可以忽略。 总之,很少有用户在线编辑参数;而是先编辑·listener.ora,然后重新加载监听程序。 因此,该更改根本不会影响他们。

但是,请注意,使用远程监听程序控制来管理另一台服务器上的监听程序将不再可能。 相反,您需要登录服务器在 listener.ora 中进行更改,然后重新加载监听程序,总之,这是最好的方法。

操作计划
  1. 在文件 listener.ora 中,添加参数 ADMIN_RESTRICTIONS_LISTENER = ON
  2. 发出 lsnrctl reload,重新加载监听程序。


1.8 调整清除权限

背景
普通用户需要执行其作业必不可少(不多不少)的权限。 但是,这种策略不太现实,您可能需要采用一种中间道路方法: 删除用户不需要的最强大的权限。

例如,CREATE ANY TABLE 就是一个强大的权限,它使用户可通过任意模式而不只是它自己的模式创建表。 用户几乎不需要该权限;您可以放心地收回该权限。 另一方面,QUERY REWRITE 之类允许用户会话重新写入查询以利用基于函数的索引或物化视图的权限则相对无害。

策略
首先,识别您认为无害的所有权限(CREATE TYPECREATE SESSION 等等)。 这里,我将 UNLIMITED TABLESPACE 包含在非清除权限内,但是您可能不这样认为。

set pages 50000
break on privilege skip 1

select privilege, grantee, admin_option
from dba_sys_privs
where privilege not in
(
   /* list any other privilege here you don't find
       "sweeping"
   */
   'ALTER SESSION',
'QUERY REWRITE',
   'CREATE DIMENSION',
   'CREATE INDEXTYPE',
   'CREATE LIBRARY',
   'CREATE OPERATOR',
   'CREATE PROCEDURE',
'CREATE SEQUENCE',
'CREATE SESSION',
   'CREATE SNAPSHOT',
'CREATE SYNONYM',
'CREATE TABLE',
   'CREATE TRIGGER',
'CREATE TYPE',
   'CREATE USER',
   'CREATE VIEW',
   'UNLIMITED TABLESPACE'
)
and grantee not in
 ('SYS','SYSTEM','WKSYS','XDB',
  'MDSYS','ORDPLUGINS','ODM','DBA')
    /* Place all the user names you want to exclude */
order by privilege, grantee
/

下面是一个示例输出的一部分:

PRIVILEGE                   GRANTEE                        ADM
--------------------------- ------------------------------ ---
ADMINISTER DATABASE TRIGGER EXFSYS                         NO
                            IMP_FULL_DATABASE              NO

ADMINISTER RESOURCE MANAGER EXP_FULL_DATABASE              NO
                            IMP_FULL_DATABASE              NO

ALTER ANY MATERIALIZED VIEW DWETL                          NO
                            REPORTMAN                      NO

ALTER ANY OUTLINE           REPORTMAN                      NO

ALTER ANY PROCEDURE         IMP_FULL_DATABASE              NO
                            QCO                            NO

ALTER ANY RULE              CDC_PUB                        YES

ALTER ANY RULE SET          CDC_PUB                        YES

ALTER ANY TABLE             IMP_FULL_DATABASE              NO
                            CNSMP                          NO
                            QCO                            NO

ALTER ANY TRIGGER           IMP_FULL_DATABASE              NO
                            QCO                            NO
                            VCHANG                         NO

ALTER ANY TYPE              IMP_FULL_DATABASE              NO

ALTER SYSTEM                ORADBA                         NO
                            QCO                            NO

ALTER TABLESPACE            QCO                            NO

ALTER USER                  QCO                            NO
                            SYSMAN                         NO

ANALYZE ANY                 AFFMAN                         NO
                            ARAO                           NO
                            CONCASTER                      NO
CREATE ANY SYNONYM          ATHOTANG                       YES
                            ARUP                           YES
                            IMP_FULL_DATABASE              NO
                            DB_MONITOR                     YES
                            QCO                            YES
                            RCHUNG                         YES
                            SPOT                           YES

CREATE ANY TABLE            IMP_FULL_DATABASE              NO
                            CNSMP                          NO
                            QCO                            NO
                            SYSMAN                         NO

DROP ANY TABLE              ATHOTANG                       YES
                            IMP_FULL_DATABASE              NO
                            CNSMP                          NO
                            QCO                            YES
_ and so on _

注意该输出的一些关键行。 某些清除权限(例如 DROP ANY TABLE)可能不应该授予任何人。 在本例中,让我们来看看哪些用户拥有该权限。

  • IMP_FULL_DATABASE 是用于数据库完全导入的角色,通常授给 DBA 或在导入中需要的任何其他用户。 该权限可能是必需的。
  • QCO 表示 Quest Central for Oracle,它是管理数据库的常用工具。 该权限可能是必需的。
  • 用户 CNSMP 和 ATHOTANG 似乎不需要任何清除权限,除非他们是 DBA。 应该收回该权限。
结论
这是一个您无法立即执行的操作。 收回任何用户的任何权限之前,需要认真分析它的影响。

如果拿不准,最好的操作流程是与持有该用户 ID 的人员进行交流。 例如,ATHOTANG 并不是真的需要删除表,但却被假设成这样。 (不要奇怪,这样的假设是很常见的。)

操作计划
该任务需要一些规划,以便准备下一阶段的所有操作。 在此之前,收集所需的信息。


1.9 更改 DBSNMP 密码

背景
如您所知,Oracle Intelligent Agent 与 Oracle Enterprise Manager 通信,传递有关组件(例如数据库、监听程序以及服务器本身)的信息。 要获得关于数据库的数据,需要使用某个用户 ID 连接数据库。 默认情况下,使用的用户 ID 是 BSNMP。

创建数据库时,dbsnmp 的密码也被设置为 dbsnmp。 该用户有一些强大的权限,例如 UNLIMITED TABLESPACESELECT ANY DICTIONARY(允许用户从动态性能视图和数据字典视图中选择)和 ANALYZE ANY DICTIONARY(允许分析系统对象)。 很多入侵者使用该用户和密码作为进入数据库的后门入口点。 不用说,这是一个巨大的安全漏洞。

策略
您需要将该用户的密码 dbsnmp。 但是,您不能只是在数据库级别更改该密码,因为该密码还存储在代理配置文件中。 您还需要更新配置文件以使用新密码。 下面是在 Oracle 数据库 10g 中的操作过程。
  1. 首先,将用户 DBSNMP 的密码更改为别的内容(例如 TopSecret):
    SQL> alter user dbsnmp identified by topsecret;
  2. 转至 Oracle Agent Home 的安装目录(不是 ORACLE_HOME),例如 /u01/app/oracle/10.1/gridc。
  3. 转至目录 <hostname>/sysman/emd,其中 <hostname> 是主机或服务器的名称。 例如,如果服务器的名称为 prolin1,则目录应为 prolin1/sysman/emd
  4. 在这里,您会找到一个名为 targets.xml 的文件。复制该文件,为其取一个新名字(例如 targets.xml.old)。
  5. 打开文件 targets.xml,搜索“dbsnmp”一词;与以下内容类似
    <Target TYPE="oracle_database" NAME="PROPRD1_prolin1">
    <Property NAME="MachineName" VALUE="192.168.101"
    <Property NAME="OracleHome" VALUE="/u01/app/oracle/10.1/db1"
    <Property NAME="Port" VALUE="1521"
    <Property NAME="Role" VALUE="NORMAL"
    <Property NAME="SID" VALUE="PROPRD1"
    <Property NAME="ServiceName" VALUE="PROPRD"
    <Property NAME="UserName" VALUE="dbsnmp"
    <Property NAME="password" VALUE="3797cf30e7c4a9c6" ENCRYPTED="TRUE"
    <CompositeMembership>
    <MemberOf TYPE="rac_database" NAME="PROPRD" ASSOCIATION="cluster_member"
    </CompositeMembership>
    </Target>
    
  6. 注意这一行:
    <Property NAME="password" VALUE="3797cf30e7c4a9c6" ENCRYPTED="TRUE"/>

    您将在这一行中设置密码的值。 将上述内容替换为:

    <Property NAME="password" VALUE="topsecret" ENCRYPTED="FALSE"/>

    注意,您将 ENCRYPTED 的值更改为了 FALSE

  7. 如果这是一个 RAC 数据库,该行将在文件中出现两次。 确保在两行中都做了更改。 在文件中搜索“password”一词,找到这两行。

  8. 现在,通过发出以下命令停止代理:
    /u01/app/oracle/10.1/gridc/bin/emctl stop agent
  9. 重新启动代理:
    /u01/app/oracle/10.1/gridc/bin/emctl stop agent
  10. 重新启动代理后,会加密配置文件中的明文密码。 如果再次在 targets.xml 文件中查看上面的行,将看到类似下面的内容:
    <Property NAME="password" VALUE="3797cf30e7c4a9c6" ENCRYPTED="TRUE"/>

    注意将明文值转换为加密值的方式。

  11. 现在已将代理配置为使用新的密码。

  12. 如果使用独立的数据库控制台而非网格控制,则操作过程相似,只是在第 2 步中,您要转至 ORACLE_HOME 而不是 Agent Home 所在的目录。

(编辑:aniston)

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089