Oracle數據庫安全加固記錄

一個應用系統作等保,須要對數據庫進行安全加固,根據流程須要先在測試環境進行測試經過後應用於生產環境,這裏簡單記錄測試過程,審計內容是評測的重要點,可是生產環境也不便於開啓,這裏先簡單記錄之,後面再進行相關內容補充。node

1. 刪除無用多餘的賬號

1)查看賬號及狀態

SQL> select username,account_status from dba_users;sql

USERNAME                       ACCOUNT_STATUS  
------------------------------ --------------------------------    
MGMT_VIEW                      OPEN    
SYS                            OPEN    
SYSTEM                         OPEN    
DBSNMP                         OPEN    
SYSMAN                         OPEN    
ABC                            OPEN    
B                              OPEN    
KOU                            OPEN    
OUTLN                          EXPIRED & LOCKED    
FLOWS_FILES                    EXPIRED & LOCKED    
MDSYS                          EXPIRED & LOCKED    
ORDSYS                         EXPIRED & LOCKED    
SQL>數據庫

說明: 若是不使用EM,能夠停用MGMT_VIEW,DBSNMP,SYSMAN賬號.安全

2)刪除多餘賬號,對於一些測試賬號能夠刪除掉。

SQL> drop user kou cascade;  
User dropped.    
SQL>服務器

 

2. 鎖定多餘用戶,對於不明用途的賬號能夠採用先鎖定一段時間,再刪除。

(1) 鎖定多餘用戶

SQL> alter user abc account lock;  
User altered.oracle

(2) 解鎖用戶

SQL> alter user abc account unlock;  
User altered.app

SQL> select username,account_status from dba_users;tcp

USERNAME                       ACCOUNT_STATUS  
------------------------------ --------------------------------    
MGMT_VIEW                      OPEN    
SYS                            OPEN    
SYSTEM                         OPEN    
DBSNMP                         OPEN    
SYSMAN                         OPEN    
B                              OPEN    
ABC                            LOCKED    
OUTLN                          EXPIRED & LOCKED    
FLOWS_FILES                    EXPIRED & LOCKEDide

其它狀態參數說明:  
OPEN:            正常的賬戶    
LOCKED:          表示這個賬戶被鎖定;    
EXPIRED:         表示該賬戶口令到期,要求用戶在下次logon的時候修改口令(系統會在該account被設置爲expire後的第一次登錄是提示你修改密碼)    
EXPIRED(GRACE):  當設置了grace之後(第一次成功登陸後到口令到期後有多少天時間可改變口令,在這段時間內,賬戶被提醒修改口令並能夠正常登錄,account_status顯示爲EXPIRED(GRACE).    
LOCKED(TIMED):   這種狀態表示失敗的login次數超過了FAILED_LOGIN_ATTEMPTS,被系統自動鎖定,須要注意的是,在Oracle 10g中,默認的DEFAULT值是10次.    
EXPIRED & LOCKED:表示此帳戶被設置爲口令到期且被鎖定。    
EXPIRED(GRACE) & LOCKED(TIMED): 當account_stutus爲EXPIRED(GRACE)的時候,用戶又嘗試失敗的login次數超過了FAILED_LOGIN_ATTEMPTS,被系統自動鎖定    
EXPIRED & LOCKED(TIMED): 當設置了account expire後,用戶又失敗的login次數超過了FAILED_LOGIN_ATTEMPTS,被系統自動鎖定    
EXPIRED(GRACE) & LOCKED: 用戶account_status爲EXPIRED(GRACE)後,又被DBA 手工鎖定賬戶後的狀態函數

 

3. 限制超級管理員遠程登陸

1)默認狀態下系統管理員是能夠遠程登陸的,採用以下方式驗證。

C:\>sqlplus sys/oracle@orcl181 as sysdba;

SQL*Plus: Release 11.2.0.1.0 Production on 星期一 12月 8 14:51:18 2014  
Copyright (c) 1982, 2010, Oracle.  All rights reserved.

鏈接到:  
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production    
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

2)限制超級用戶遠程登陸

說明: 遠程登陸訪問不登陸密碼文件進行驗證。

SQL> alter system set remote_login_passwordfile=none scope=spfile;

SQL> shutdown immediate;  
SQL> startup;

3)限制用戶使用本地操做系統認證登陸

有些安全配置要求,限制本地操做系統認證登陸,配置以下。

$ vi /u01/app/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora  
SQLNET.AUTHENTICATION_SERVICES=none

4)測試方式

sqlplus system/oracle@orcl as sysdba  
sqlplus / as sysdba

說明: 以上兩條若是都啓的話,SYSDBA用戶將沒法登陸,數據庫也沒法啓動,若是要進行管理操做,須要變通操做。

 

4. 根據賬號分配最小權限

Oracle提供三種標準的角色: connect,resource和DBA,限制DBA權限的用戶使用.

1)賬號擁有的系統權限

SQL> select * from dba_sys_privs where grantee='ABC';

GRANTEE                        PRIVILEGE                                ADM  
------------------------------ ---------------------------------------- ---    
ABC                            UNLIMITED TABLESPACE                     NO

2)賬號擁有的角色

SQL> select * from dba_role_privs where grantee='ABC';

GRANTEE                        GRANTED_ROLE                   ADM DEF  
------------------------------ ------------------------------ --- ---    
ABC                            CONNECT                        NO  YES    
ABC                            RESOURCE                       NO  YES    
SQL>

3)賬號擁有的對象權限

SQL> select * from dba_tab_privs where grantee='ABC';  
no rows selected

4)參考配置操做, 對於DBA權限,須要判斷是否須要DBA權限,不然都應取消dba權限,降爲普通權,須要應用方DBA進行調整。

示例:oracle數據庫表空間及權限調整示例  
http://koumm.blog.51cto.com/703525/1314154

 

5. 賬號密碼策略配置

1)Oracle 10g密碼策略配置初始配置

說明:一般對管理賬號與維護賬號時行密碼策略,業務賬號不作策略限制,例如應用賬號過時,會影響業務的正常使用等狀況,默認使用DEFAULT策略。

SQL> SELECT profile FROM dba_users WHERE username='ABC';

PROFILE  
------------------------------    
DEFAULT

SQL>

SQL> SELECT profile,resource_type,resource_name,limit FROM dba_profiles WHERE resource_type='PASSWORD' AND profile='DEFAULT';

PROFILE                        RESOURCE RESOURCE_NAME                    LIMIT  
------------------------------ -------- -------------------------------- ----------------------------------------    
DEFAULT                        PASSWORD FAILED_LOGIN_ATTEMPTS            10    
DEFAULT                        PASSWORD PASSWORD_LIFE_TIME               UNLIMITED    
DEFAULT                        PASSWORD PASSWORD_REUSE_TIME              UNLIMITED    
DEFAULT                        PASSWORD PASSWORD_REUSE_MAX               UNLIMITED    
DEFAULT                        PASSWORD PASSWORD_VERIFY_FUNCTION         NULL    
DEFAULT                        PASSWORD PASSWORD_LOCK_TIME               UNLIMITED    
DEFAULT                        PASSWORD PASSWORD_GRACE_TIME              UNLIMITED

SQL>

2) 修改並啓動密碼複雜度

說明:utlpwdmg.sql腳本中包括密碼策略及賬號策略, 該腳本後面是賬號策略的配置,能夠事先註釋掉,後面再一一啓用。

SQL> alter system set resource_limit = true;  
SQL> @$ORACLE_HOME/rdbms/admin/utlpwdmg.sql

3) 修改帳號策略

SQL> ALTER PROFILE DEFAULT LIMIT  
PASSWORD_LIFE_TIME 60    
PASSWORD_GRACE_TIME 10    
PASSWORD_REUSE_TIME 1800    
PASSWORD_REUSE_MAX UNLIMITED    
FAILED_LOGIN_ATTEMPTS 3    
PASSWORD_LOCK_TIME 1/1440;    
PASSWORD_VERIFY_FUNCTION verify_function

相關參數說明:  
FAILED_LOGIN_ATTEMPTS:    容許登陸失敗的次數    
PASSWORD_LOCK_TIME:       達到登陸失敗次數後,賬戶鎖定的天數,過了這個天數以後賬戶會自動解鎖    
PASSWORD_LIFE_TIME:       口令的生存期(天)    
PASSWORD_GRACE_TIME:      口令失效後從第一次成功登陸算起的更改口令的寬限期(天)    
PASSWORD_REUSE_TIME:      能夠從新使用口令前的天數    
PASSWORD_REUSE_MAX:       能夠從新使用口令的最屢次數    
PASSWORD_VERIFY_FUNCTION: 檢驗口令設置的PL/SQL 函數

查看結果:

SQL> set linesize 200;  
SQL> SELECT profile,resource_type,resource_name,limit FROM dba_profiles WHERE resource_type='PASSWORD' AND profile='DEFAULT';

PROFILE                        RESOURCE RESOURCE_NAME                    LIMIT  
------------------------------ -------- -------------------------------- ----------------------------------------    
DEFAULT                        PASSWORD FAILED_LOGIN_ATTEMPTS            3    
DEFAULT                        PASSWORD PASSWORD_LIFE_TIME               60    
DEFAULT                        PASSWORD PASSWORD_REUSE_TIME              1800    
DEFAULT                        PASSWORD PASSWORD_REUSE_MAX               UNLIMITED    
DEFAULT                        PASSWORD PASSWORD_VERIFY_FUNCTION         VERIFY_FUNCTION    
DEFAULT                        PASSWORD PASSWORD_LOCK_TIME               .0006    
DEFAULT                        PASSWORD PASSWORD_GRACE_TIME              10

7 rows selected.

SQL>

# 取消Oracle密碼複雜度檢查:  
SQL> alter profile default limit password_verify_function null;    
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

 

4) 能夠針對單個用戶進行策略限制。

SQL> CREATE PROFILE ABC_PROFILE LIMIT  
PASSWORD_LIFE_TIME UNLIMITED    
PASSWORD_GRACE_TIME 10    
PASSWORD_REUSE_TIME 1800    
PASSWORD_REUSE_MAX UNLIMITED    
FAILED_LOGIN_ATTEMPTS 3    
PASSWORD_LOCK_TIME 1/1440;

SQL> alter user abc profile ABC_PROFILE;  
User altered.

SQL>    
SQL> SELECT profile,resource_type,resource_name,limit FROM dba_profiles WHERE resource_type='PASSWORD' AND profile='ABC_PROFILE';

PROFILE                        RESOURCE RESOURCE_NAME                    LIMIT  
------------------------------ -------- -------------------------------- ----------------------------------------    
ABC_PROFILE                    PASSWORD FAILED_LOGIN_ATTEMPTS            3    
ABC_PROFILE                    PASSWORD PASSWORD_LIFE_TIME               UNLIMITED    
ABC_PROFILE                    PASSWORD PASSWORD_REUSE_TIME              1800    
ABC_PROFILE                    PASSWORD PASSWORD_REUSE_MAX               UNLIMITED    
ABC_PROFILE                    PASSWORD PASSWORD_VERIFY_FUNCTION         NULL    
ABC_PROFILE                    PASSWORD PASSWORD_LOCK_TIME               .0006    
ABC_PROFILE                    PASSWORD PASSWORD_GRACE_TIME              10

 

6. 啓動數據字典保護

只有SYSDBA才能訪問數據字典基礎表,普通用戶不能查看X$開頭的表。

SQL> show parameter O7_DICTIONARY_ACCESSIBILITY

NAME                                 TYPE        VALUE  
------------------------------------ ----------- ------------------------------    
O7_DICTIONARY_ACCESSIBILITY          boolean     FALSE    
SQL>

SQL> alter system set O7_DICTIONARY_ACCESSIBILITY= TRUE scope = spfile;  
SQL> shutdown immediate;    
SQL> startup;

 

7. 數據庫訪問控制

只有信任的IP地址才能經過監聽器訪問數據庫,非信任的客戶端會被拒絕, 本機IP地址必定要在信任之列。  
一般對應用服務與數據庫服務器加入信任列表。

$ vi $ORACLE_HOME/network/admin/sqlnet.ora  
tcp.validnode_checking = yes    
tcp.invited_nodes = (192.168.233.150,192.168.233.151)

#除如下IP地址以外都容許訪問。  
tcp.excluded_nodes = (IP1,IP2,...)

重啓監聽便可。

 

8. 設置空閒鏈接時間

$ vi $ORACLE_HOME/network/admin/sqlnet.ora  
SQLNET.EXPIRE_TIME = 60

說明:客戶端鏈接後在設置的時間內沒有任何操做,客戶端會自動斷開。

 

9. 操做系統層面限制DBA用戶組的用戶數量

10. 操做系統層面添加iptables防火牆,限制訪問數據庫IP

下面是oracle rac 11g集羣iptables防火牆示例, 一些數據庫安全掃描工具掃不出打了補丁的數據庫,只能採起防火牆來禁。

iptables -P OUTPUT ACCEPTiptables -A INPUT -i lo -j ACCEPTiptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT  iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPTiptables -A INPUT -p tcp -s 192.168.10.10/32 --dport 1521 -j ACCEPTiptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -s 192.168.0.6/32 -i eth0 -j ACCEPTiptables -A INPUT -s 192.168.0.7/32 -i eth0 -j ACCEPTiptables -A INPUT -s 192.168.0.8/32 -i eth0 -j ACCEPTiptables -A INPUT -s 192.168.0.9/32 -i eth0 -j ACCEPTiptables -A INPUT -s 192.168.0.10/32 -i eth0 -j ACCEPTiptables -A INPUT -i eth1 -j ACCEPTiptables -A INPUT -i eth2 -j ACCEPTiptables -A INPUT -s 10.10.10.0/24 -d 230.0.1.0 -j ACCEPTiptables -A INPUT -s 10.10.10.0/24 -d 224.0.0.251 -j ACCEPTiptables -A INPUT -s 20.20.20.0/24 -d 230.0.1.0 -j ACCEPTiptables -A INPUT -s 20.20.20.0/24 -d 224.0.0.251 -j ACCEPTiptables -A INPUT -i eth0 -d 230.0.1.0   -j ACCEPTiptables -A INPUT -i eth0 -d 224.0.0.251 -j ACCEPTiptables -A INPUT -p all -m state --state INVALID,NEW -j DROPiptables -P INPUT DROP

相關文章
相關標籤/搜索