1.6 创建监听程序密码
背景 黑客惯用的伎俩之一是在监听程序中插入大量文本,从而导致监听程序终止。 数据库可能仍然运行,但是由于监听程序已经停止,因此无法建立任何新的连接,这实际上是一种“拒绝服务”攻击。
为此,黑客可能尝试更改监听程序的属性。 这里较常用的策略是通过 services 命令列出监听程序处理的各种服务。 注意显示多少信息,这些信息可能已足够黑客获得合法访问: LSNRCTL> set displaymode verbose
LSNRCTL> services
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
(HOST=prolin1.proligence.com)(PORT=1521)(IP=FIRST)))
Services Summary...
Service "PROPRD" has 1 instance(s).
Instance "PROPRD1", status READY, has 1 handler(s) for this
service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER
(ADDRESS=(PROTOCOL=BEQ)(PROGRAM=/u01/oracle/products/10.1/db1/bin/ora
cle)(ARGV0=oraclePROPRD11)(ARGS='(LOCAL=NO)')(ENVS='_=/u01/oracle/pro
ducts/10.1/db1/bin/racgmain,_USR_ORA_CONNECT_STR=/ as
sysdba,_CAA_CHECK_INTERVAL=600,SHLIB_PATH=/u01/oracle/products/10.1/d
b1/lib32:/u01/oracrs/10gr1crs/lib32:/opt/nmapi/nmapi2/lib/hpux32:,_CA
A_ACTIVE_PLACEMENT=0,PATH=,_USR_ORA_ALERT_NAME=,_USR_ORA_IF=,_CAA_OPT
IONAL_RESOURCES=,_USR_ORA_START_TIMEOUT=0,ORACLE_BASE=/u01/oracle/pro
ducts/10.1/db2,_USR_ORA_DISCONNECT=false,_CAA_SCRIPT_TIMEOUT=600,_CAA
_UPTIME_THRESHOLD=7d,_USR_ORA_STOP_TIMEOUT=0,_CAA_FAILOVER_DELAY=0,_U
SR_ORA_PRECONNECT=none,_USR_ORA_FLAGS=,_CAA_TYPE=application,_USR_ORA
_INST_NOT_SHUTDOWN=,_CAA_REASON=boot,INIT_STATE=3,_USR_ORA_OPEN_MODE=
,_CAA_STATE=:OFFLINE,,_CAA_RESTART_ATTEMPTS=5,_CAA_ACTION_SCRIPT=/u01
/oracle/products/10.1/db1/bin/racgwrap,_CAA_DESCRIPTION=CRS
application for
Instance,_CAA_HOSTING_MEMBERS=prolin1,ORA_RACG_EXEC_ENV=LD_LIBRARY_PA
TH=/u01/oracle/products/10.1/db1/lib:/u01/oracrs/10gr1crs/lib:/opt/nm
api/nmapi2/lib/hpux64:/usr/lib:,_CAA_CLIENT_LOCALE=,_CAA_NAME=ora.PRO
PRD1.PROPRD11.inst,ORA_CRS_HOME=/u01/oracrs/10gr1crs,_CAA_AUTO_START=
1,_CAA_TARGET=:ONLINE,,_USR_ORA_PFILE=,_USR_ORA_OPI=false,_USR_ORA_CH
ECK_TIMEOUT=0,_CAA_PLACEMENT=restricted,_USR_ORA_LANG=,LD_LIBRARY_PAT
H=/u01/oracle/products/10.1/db1/lib:/u01/oracrs/10gr1crs/lib:/opt/nma
pi/nmapi2/lib/hpux64:/usr/lib:,_CAA_REQUIRED_RESOURCES=ora.prolin1.vi
p,_CAA_FAILURE_THRESHOLD=0,ORACLE_HOME=/u01/oracle/products/10.1/db1,
_USR_ORA_SRV=,PWD=/u01/oracrs/10gr1crs/bin,_USR_ORA_VIP=,_USR_ORA_STO
P_MODE=immediate,_CAA_FAILURE_INTERVAL=0,_USR_ORA_NETMASK=,_USR_ORA_D
EBUG=0,ORACLE_SID=PROPRD1,ORA_NET2_DESC=9,12,ORACLE_SPAWNED_PROCESS=1
')(ENV_POLICY=NONE))
黑客的另一个伎俩是关闭监听程序。 新的连接将被拒绝,再一次有效地创建了拒绝服务攻击。
此外,还可以远程管理监听程序。 利用该技术,黑客可以通过攻击其他有漏洞的计算机来远程停止监听程序。
您如何保护自己不受这些威胁侵害?
策略 最好的方法是删除可执行文件 tnslsnr 和 lsnrctl 的所有权限,所有者的权限除外。 (前面的部分已对该方法进行了描述。) 这样,除了 Oracle 软件所有者,没人可以启动或停止监听程序。 可执行文件与以下类似: -rwx------ 1 orasoft oinstall 214720 Oct 25 01:23 lsnrctl
-rwx------ 1 orasoft oinstall 1118816 Oct 25 01:23 tnslsnr
在某些情况下,您可能希望授权启动和停止监听程序。 在这种情况下,您需要打开权限。 $ chmod 0711 lsnrctl
然而,在这种情况下,您应该通过强制使用密码防止未经授权的使用。 当您设置密码时,所有命令(HELP 等某些善意的命令除外)都被禁用。
设置密码的方式在所有版本中都一样,但是实施机制不同:
- 在 Oracle9i 数据库第 2 版和更低版本中,所有用户都需要密码。
- 在 Oracle 数据库 10g 第 1 版和更高版本中,拥有数据库软件的 OS 用户不需要密码。 所有其他用户需要密码。
下面介绍如何设置密码: $ lsnrctl
LSNRCTL> change_password
Old password: <OldPassword> Not displayed
New password: <NewPassword> Not displayed
Reenter new password: <NewPassword> Not displayed
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=prolin1)(PORT=1521)(IP=FIRST)))
Password changed for LISTENER
The command completed successfully
如果您是首次设置密码,可以在要求提供“旧密码”时按 ENTER 键。 更改之后,将其保存到参数文件中: LSNRCTL> save_config
该命令将对密码进行加密,并将其放到监听程序参数文件中。 您可以稍后对其进行检查: #----ADDED BY TNSLSNR 24-OCT-2005 17:02:28---
PASSWORDS_LISTENER_ODSSDB01 = 75CD180DE6C75466
#--------------------------------------------
在决定使用命令时,您需要提供正确的密码。 (在 Oracle 数据库 10g 和更高版本中,拥有该软件的 OS 用户不需要密码。) LSNRCTL> services
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-01169: The listener has not recognized the password
要传递正确的密码,请执行以下内容: LSNRCTL> set password mypassword
The command completed successfully
LSNRCTL> status
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER
...
如果传递的密码不正确,您将收到以下错误信息 TNS-01169: The listener has not recognized the password.
如果没有传递密码并尝试执行强大的命令,您将收到以下错误信息 TNS-01190: The user is not authorized to execute the requested listener command
要确认密码是否有效,请查看监听程序的 STATUS 显示中的设置。 为此,可发出以下命令: $ lsnrctl status
版本间的输出不同。 对于 Oracle9i 数据库,下面是部分输出: STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Solaris: Version 9.2.0.6.0 - Production
Start Date 25-OCT-2005 10:26:47
Uptime 0 days 13 hr.53 min. 8 sec
Trace Level off
Security ON
注意最后一行 (Security ON),它指示已设置密码。
(编辑:anna sui)
|