1.1 删除默认密码
背景 在 Oracle 软件安装和数据库创建期间,创建了一个帐户之后又忘记了该帐户是很常见的。 这些帐户通常都使用默认密码(例如 SCOTT 的密码是“tiger”),很容易成为入侵者青睐的入口点。 您可能会惊讶于有如此多的生产数据库安装程序(经过审核后发现)使用“change_on_install”或“oracle”作为 SYS 的密码。 您的首要任务就是应该立即识别并删除这些默认密码。
策略 如何识别使用默认密码的帐户? 一种方法是尝试使用默认密码登录该帐户,但是这种方法无疑是很麻烦的,不用说也是很浪费时间的。
幸运的是,还有一种更好的方法。 请查看以下视图 DBA_USERS 中的密码列: SQL> select username, password
2 from dba_users
3 where username = 'SCOTT';
USERNAME PASSWORD
------------------------------ ------------------
SCOTT F894844C34402B67
密码是结果哈希算法处理过的,因此不容易破解,但是,我们知道 SCOTT 的密码是“tiger”。 因此,当用户 ID 为“scott”时,“tiger”的哈希值为 F894844C34402B67。 现在,如果更改 SCOTT 的密码,该哈希值也会更改。 然后,您可以在视图 DBA_USERS 中确认,查看 SCOTT 的密码是否与该哈希值匹配,这将验证该密码为“tiger”。 但是,请注意,该哈希值不是密码自身的哈希值,如果其他用户的密码为“tiger”,该哈希值将不同。 SQL> create user scott2 identified by tiger;
User created.
SQL> select username, password
2 from dba_users
3 where username = 'SCOTT2';
USERNAME PASSWORD
------------------------------ --------------------
SCOTT2 C44C11D4C34DB67D
请注意,即使密码完全相同,哈希值 (C44C11D4C34DB67D) 仍然不同。
那么您如何利用该信息呢? 很简单。 如果您使用默认密码创建了这些默认用户,您会知道这些密码的哈希值。 然后,您可以建立一个此类帐户和默认密码哈希值的表,将它们与存储在数据字典中的密码哈希值相比较。
2006 年 1 月,Oracle 提供了可下载的实用工具,以用于识别默认密码及其用户。 该实用工具在 MetaLink 上提供,如文档 ID 340009.1 中所述。 截至本文撰写之日,该实用工具以类似上述方式的方法检查一组默认帐户;但是,等到您读到该文章时,该工具的功能可能已经得到了进一步的扩展。
此外,安全专家 Pete Finnigan 还对此作出了卓越贡献,他将在各种 Oracle 和第三方软件安装期间创建的此类默认帐户收集到了一起,并公开发表在了其网站中。 (标准免责声明: Oracle 不对第三方网站的内容进行验证。) 为了避免重复工作,我们将使用 Pete 的工作成果,并对他表示由衷的感谢。 然而,我对他的方法做了些许的改动。
首先,创建存储默认帐户和默认密码的表。 CREATE TABLE osp_accounts
(
product VARCHAR2(30),
security_level NUMBER(1),
username VARCHAR2(30),
password VARCHAR2(30),
hash_value VARCHAR2(30),
commentary VARCHAR2(200)
)
然后,您可以使用 Pete 收集的数据加载该表。 (单击此处下载脚本。) 加载该表后,您就可以搜索默认密码了。 我将使用一个很简单的 SQL 语句找出这些用户: col password format a20
col account_status format a20
col username format a15
select o.username, o.password, d.account_status
from dba_users d, osp_accounts o
where o.hash_value = d.password
/
USERNAME PASSWORD ACCOUNT_STATUS
--------------- -------------------- --------------------
CTXSYS CHANGE_ON_INSTALL OPEN
OLAPSYS MANAGER OPEN
DIP DIP EXPIRED & LOCKED
DMSYS DMSYS OPEN
EXFSYS EXFSYS EXPIRED & LOCKED
SYSTEM ORACLE OPEN
WMSYS WMSYS EXPIRED & LOCKED
XDB CHANGE_ON_INSTALL EXPIRED & LOCKED
OUTLN OUTLN OPEN
SCOTT TIGER OPEN
SYS ORACLE OPEN
这里,您可以看到一些最容易受到攻击的情况,尤其是最后一行,即用户 SYS,其密码是“ORACLE”(与 SYSTEM 的密码相同)! 该密码可能不是“change_on_install”,但是完全可以预知。
该漏洞在各个版本中有所不同。 在 Oracle 数据库 10g 和更高版本中,数据库安装程序有一个提示,询问密码应该是什么,而不是将其假定为“change_on_install”或其他内容。 由于用户被迫做出决定,因此该密码可能为非默认密码。 但是,如果用户选择象“oracle”之类可以预知的内容,则该提示就变得毫无意义了。 (也许,在运行之前建立数据库时选择“oracle”对 DBA 很方便。 进入运行之后,该密码仍然沿用。)
在 Oracle 数据库 10g 之前的版本中,并不会提示输入密码,因此可能默认密码(例如“change_on_install”是 SYS 的默认密码,“manager”是 SYSTEM 的默认密码)是有效的。 该工具将帮助您识别此类情况。
此外,请注意用户 ID SCOTT(用于了解 SQL 技术的演示帐户)对开发数据库可能很适合,但是对生产数据库却并非如此。 它可能会给入侵者以可乘之机,您应该立即将其删除。
而 CTXSYS、DMSYS 和 OLAPSYS 等帐户则是 Oracle 工具必需的。 如果您不使用这些选项,最好的策略是删除这些用户。 如果不确定是否使用这些选项,或者只是希望保留这个机会,您可以保留这些帐户,但是请将它们锁定使其无法连接。 要锁定帐户并使密码过期,您可以发出以下命令: alter user dmsys account lock expire password;
该命令会将帐户状态设置为 EXPIRED & LOCKED。 当用户尝试登录时,会显示以下错误: ERROR:
ORA-28000: the account is locked
Warning: You are no longer connected to ORACLE.
更改不能锁定的所有帐户的密码。 DBNSMP 就是这样一个帐户,但是我们将在以后对其进行讨论。 结论 锁定未使用的帐户不会引起任何问题。
操作计划 识别未使用的帐户。 锁定这些帐户并使其密码过期。
1.2 配置 Oracle 二进制权限
背景 Oracle 数据库使用若干二进制文件。 当然,最重要的是 UNIX 和 Linux 中的可执行文件“oracle”以及 Windows 中的“oracle.exe”。
注意这些文件的权限。 例如,在 UNIX 中,您可以看到类似下面的内容。 # cd $ORACLE_HOME/bin
# ls -l oracle
-rwsr-s--x 1 oracle oinstall 69344968 Jun 10 14:05 oracle
这些权限(所有相关的 Oracle 版本都一样)是默认的。 让我们来看一下它们的含义。 (如果您熟悉 UNIX 权限,可以跳过本部分,直接转至“双任务体系结构”。)
第一个位置指示文件类型。 在 UNIX 中,常规文件、目录、设备等所有事物都被看作文件。 这是一个真文件,因此第一个位置显示“-”。 如果是一个目录,该位置将显示“d”;如果是一个字符特殊设备,该位置将显示“c”,等等。
第二个位置显示授予该文件的权限。 权限通过三块显示,分别指示以下状态:读、写和执行。 前三个位置显示所有者的权限,接下来三个位置显示授予该文件所属的组的权限,最后三个位置指定提供给所有其他用户的权限。
位置 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
值 |
- |
r |
w |
s |
r |
- |
s |
- |
- |
x |
|
|
所有者 |
组 |
其他 |
(编辑:anna sui )
|