【IT168 技术文档】
Oracle监听器在安全上是一个比较薄弱的环节,容易被利用和攻击,下面是采取的一些对策:
1. 设置监听器口令 [强制]
设置监听器口令可以防止大多数的攻击。这通常是一个简单的处理。可以用 lsnrctl 设置口令,口令将被加密存储在 listener.ora文件中。也可以 通过手工编辑 listener.ora 文件,加入“PASSWORDS_<listener name>”参数,但这样做存储的是明文的口令。
LSNRCTL> set current_listener <listener name>
LSNRCTL> change_password
Old password: <hit enter if no password is set>
New password: <enter new listener password>
Reenter new password: <enter new listener password again>
LSNRCTL> set password
Password:<enter listener password>
LSNRCTL> save_config
检查 listener.ora 文件的 PASSWORDS_<listener name> 参数。
2. 打开日志 [强制]
为所有监听器打开日志跟踪监听器命令和对口令的暴力破解。
LSNRCTL> set current_listener <listener name>
LSNRCTL> set password
Password: <enter listener password>
LSNRCTL> set log_directory <oracle_home path>/network/admin
LSNRCTL> set log_file <sid name>.log
LSNRCTL> set log_status on
LSNRCTL> save_config
3. 在listener.ora中设置 admin_restrictions [强制]
通过在文件 listener.ora 中设置 ADMIN_RESTRICTIONS_<listener name> 为 ON 可以阻止所有在运行时对监听器的修改。这个参数禁止所有的 set 命令,无论是在本地还是在远程。所有对监听器的修改都必须通过手工修改 listener.ora 文件来完成。
LISTENER.ORA
ADMIN_RESTRICTIONS_<listener name> = ON
使用 lsnrctl reload 命令重启监听器使上面的修改生效。以后在对 listener.ora 文件修改后,使用 lsnrctl reload 命令(或者先lsnrctl stop再lsnrctl start)
4.应用 listener 补丁 [强制]
应用所使用的数据库版本的最新监听器补丁。
5.在防火墙上限制 SQL*Net [强制]
除非绝对需要,SQL*Net 通信是不允许通过防火墙的。防火墙过滤机制应该被设计成只允许已知的应用和web server进行SQL*Net通信。如果应用需要通过 internet 直接访问SQL*Net,那么应该在防火墙上配置指定的主机和端口。
6.保证 $TNS_ADMIN 目录的安全 [强制]
监听器口令存储在 listener.ora 文件中。手工编辑文件,和容易删除和修改口令。如果口令是被手工添加到文件中,存储的是明文。如果是通过 lsnrctl 添加的,使用一个简单的hash算法加密后存放到文件中(这个加密很容易被破解)。
$TNS_ADMIN目录(通常是$ORACLE_HOME/network/admin)的读、写、执行权限只应该授予主要的oracle用户帐号,其它帐号没有权限。
7.删除没有用的服务 [强制]
许多缺省的安装有一个对 PL/SQL External Procedures (ExtProc) 的监听条目。条目名称通常是 ExtProc 或 PLSExtProc,它是缺省安装的,但绝大多数的情况并不使用。
检查应用或文档确认 ExtProc 是否被使用。如果没有,则把它从 listener.ora 文件中删除。ExtPro 存在一些安全漏洞。
因为 listener.ora 文件经常在实例间拷贝,它们可能包含老的或没用的条目。检查所有服务确定是否被使用。删除没有使用的服务。
8.设置节点有效性检查 [可选]
依赖于应用的类型和网络配置,节点有效性检查可能成为限制与监听器通信的有力工具。大多数 web 应用仅需要从应用服务器和一定数量的用于管理目的的客户端访问监听器。
检查IP地址有效性的最简单的方法是使用数据库审计。推荐在会话级开启审计功能。
对于Oracle 9i,节点有效性检查行加到 $ORACLE_HOME/network/admin/sqlnet.ora 文件中;Oracle 8/8i,加到$ORACLE_HOME/network/admin/protocol.ora 文件中。
tcp.validnode_checking = yes
tcp.invited_nodes = (x.x.x.x | name, x.x.x.x | name)
tcp.excluded_nodes=( x.x.x.x | name, x.x.x.x | name)
可以包括接受的节点或拒绝的节点,但不能都包括。通配符、子网等是无效的,只允许IP地址或主机名。对于更精确的检查,要使用Oracle Connection Manager。
为激活检查功能,监听器必须重启。对于可以包含的节点的数量没有硬性限制,但是对于大量的条目使用Oracle Connection Manager应该是较好的解决方案。
如果有大量的客户端需要直接连接SQL*Net访问数据库,由于网络配置经常改变,节点有效性检查通常很困难。在这样的配置下,SQL*Net 通信必须从网络上阻止。
9.监控日志文件 [可选]
在日志文件中,对于每一次无效口令访问,都包含一个 TNS-01169 错误。一个暴力破解口令的攻击将产生成百上千的这个错误。使用简单的shell脚本或者管理工具,监控日志文件,并在 TNS-01169 错误达到一定阙值时产生警告信息。
| 第1页: 第1页 |