操作计划
IF Oracle 数据库 10g 或更高版本 THEN |
|
删除所有用户的权限,所有者除外 |
ELSE |
|
删除所有用户的权限,所有者除外 设置操作监听程序的密码 |
END IF |
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 中进行更改,然后重新加载监听程序,总之,这是最好的方法。 操作计划
- 在文件 listener.ora 中,添加参数 ADMIN_RESTRICTIONS_LISTENER = ON。
- 发出 lsnrctl reload,重新加载监听程序。
1.8 调整清除权限
背景 普通用户需要执行其作业必不可少(不多不少)的权限。 但是,这种策略不太现实,您可能需要采用一种中间道路方法: 删除用户不需要的最强大的权限。
例如,CREATE ANY TABLE 就是一个强大的权限,它使用户可通过任意模式而不只是它自己的模式创建表。 用户几乎不需要该权限;您可以放心地收回该权限。 另一方面,QUERY REWRITE 之类允许用户会话重新写入查询以利用基于函数的索引或物化视图的权限则相对无害。
策略 首先,识别您认为无害的所有权限(CREATE TYPE、CREATE 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 并不是真的需要删除表,但却被假设成这样。 (不要奇怪,这样的假设是很常见的。)
操作计划 该任务需要一些规划,以便准备下一阶段的所有操作。 在此之前,收集所需的信息。
(编辑:aniston)
|