Practical Oracle Security 第三章笔记 + 其他总结
1. 9i,保证设置监听密码
不设置密码,可以远程关闭监听,修改log文件位置覆盖重要的文件,导致DB崩溃
[oracle10@zhangqiaoc ~]$ ./tnscmd stop -h 83.16.16.200 -p 1509 sending (CONNECT_DATA=(COMMAND=stop)) to 83.16.16.200:1509 writing 87 bytes reading .G......"..;(DESCRIPTION=(TMP=)(VSNNUM=153094144)(ERR=0)(USECKPFILE=0)) |
tnscmd脚本在http://www.jammed.com/~jwa/hacks/security/tnscmd/ 下载
通过该脚本可以远程控制监听。
通过设置密码,可以限制该脚本对监听的动作
10g进行了一些安全相关的对监听器的重要修改,默认只有监听可执行文件的宿主可以管理监听器
2. 监听日志分析
监听日志提供了对监听器基本操作的审计,其记录每次连接,以及任何失败的命令
通过AWK进行简单的日志监控
#! /bin/awk ## analyze_listener_log.awk ## created by zhangqiaoc function transDateFormat(i){ MON=substr(i,4,3); if(MON=="JAN"){MONTH="01"} else if(MON=="FEB"){MONTH="02"} else if(MON=="MAR"){MONTH="03"} else if(MON=="APR"){MONTH="04"} else if(MON=="MAY"){MONTH="05"} else if(MON=="JUN"){MONTH="06"} else if(MON=="JUL"){MONTH="07"} else if(MON=="AUG"){MONTH="08"} else if(MON=="SEP"){MONTH="09"} else if(MON=="OCT"){MONTH="10"} else if(MON=="NOV"){MONTH="11"} else if(MON=="DEC"){MONTH="12"} TDATE=substr(i,8,4)""MONTH""substr(i,1,2); if( TDATE >= BEGIND ){ FLAG=1; } }
BEGIN{ FS="*";i=1;F=0;FLAG=0; } { if(BEGIND==""){FLAG=1} if($1 ~ /^[0-9][0-9]-[A-Z][A-Z][A-Z]-[0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]/ && FLAG=="0"){ transDateFormat($1); } if(M=="ERR" && FLAG=="1"){ if (MESSAGE==""){MESSAGE="TNS-"} if($1 ~ /^[0-9][0-9]-[A-Z][A-Z][A-Z]-[0-9][0-9][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]/){ if(F=="1"){ print "*** "DATE"************************************" for(x=1;x print TMP[x]; } F=0; print " " } i=1; DATE=$1; } TMP[i]=$0; i++; if($0 ~ MESSAGE ){F=1;} }else if(M=="ANALYZE" && FLAG=="1"){ if($2~ /\(CONNECT_DATA=\(S/){ ### ----------------------------------------- split($2,ARR,"\\)\\("); for(x in ARR){ if(ARR[x]~"HOST="){ HOST=ARR[x];gsub("HOST=","",HOST); }else if(ARR[x]~"USER="){ USER=ARR[x];gsub("USER=","",USER);gsub(")","",USER); }else if(ARR[x]~"PROGRAM="){ PROGRAM=ARR[x];gsub("CID=\\(PROGRAM=","",PROGRAM); } } ### ----------------------------------------- split($3,ARR,"\\)\\("); for(x in ARR){ if(ARR[x]~"HOST="){ HOST=ARR[x];gsub("HOST=","",HOST); } } ### ----------------------------------------- NAME=HOST"."USER; y=0; for(x in NAMEARR){ if(NAME==NAMEARR[x]){ y=y+1; TMPSEQ=x; break; } } if(y>0){ CNTNAMEARR[TMPSEQ]=CNTNAMEARR[TMPSEQ]+1; }else{ NAMEARR[i]=NAME; CNTNAMEARR[i]=1; i++; } ### ----------------------------------------- z=0; for(x in PROGRAMARR){ if(PROGRAM==PROGRAMARR[x]){ z=z+1; TMPSEQ=x; break; } } if(z>0){ CNTPROGRAMARR[TMPSEQ]=CNTPROGRAMARR[TMPSEQ]+1; }else{ PROGRAMARR[i]=PROGRAM; CNTPROGRAMARR[i]=1; i++; } } }else if(M=="STOP" && FLAG=="1"){ if($2~"COMMAND=stop"){ if($2 !~ "HOST=" && $1 !~ "USER="){ print "[WARNING!!!]"$0 } } } } END{ if(M=="ERR"||M=="err"){ if(F=="1"){ print "*** "DATE"************************************" for(x=1;x print TMP[x]; } print "\n" } }else if(M=="ANALYZE"||M=="analyze"){ print "*** NODE ******************************" for(x in NAMEARR){ printf "%-80s %s\n"," "NAMEARR[x],CNTNAMEARR[x]; } print "*** PROGRAM ***************************" for(x in PROGRAMARR){ printf "%-80s %s\n"," "PROGRAMARR[x],CNTPROGRAMARR[x]; } } } | ||
捕获异常 awk -f analyze_listener_log.awk -v M=err listener9.log 捕获异常TNS-12505 awk -f analyze_listener_log.awk -v M=err -v MESSAGE=TNS-12505 listener9.log 捕获从20100407开始的异常 awk -f analyze_listener_log.awk -v M=ERR -v BEGIND=20100407 listener9.log 分析登录情况 awk -f analyze_listener_log.awk -v M=analyze listener9.log
分析异常停止监听的情况 awk -f analyze_listener_log.awk -v M=STOP listener9.log
|
3. 加密传输数据
监听通过设置协议为TCPS,只接受加密的通信
此特性以后在研究
4. ADMIN_RESTRICTIONS_LISTENER10=ON
通过在listener.ora设置该参数,限制通过lsnrctl命令来运行一些set命令,以防止通过设置log_file来覆盖重要的文件,设置trc_level来生成大量TRC崩溃程序
设置前 |
LSNRCTL> set log_file /tmp/1.txt Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=zhangqiaoc)(PORT=1510))) listener10 parameter "log_file" set to /tmp/1.txt The command completed successfully |
设置后 |
LSNRCTL> set log_file /tmp/1.txt Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=zhangqiaoc)(PORT=1510))) TNS-12508: TNS:listener could not resolve the COMMAND given |
5. extproc
通过EXTPROC可以使在数据库和OS上进行控制的操作变的更容易
原则上,如果不调用外部程序,应该从监听中注销掉EXTPROC
可以通过分析监听器日志来确定是否存在EXTPROC
如果确定需要,应该分离出一个监听器用于专门的外部调用,通过ENV限制监听器调用的库
6. 限制节点登录
sqlnet.ora
tcp.vaildnode_checking=yes
tcp.invited_nodes=(localhost,83.16.16.200)
设置invited_nodes后貌似无法动态注册监听,需要手工配置
7. LOG & TRACE
sqlnet.ora
文件 | LOG&TRACE | SERVER端 | CLIENT端 |
sqlnet.ora | LOG | LOG_DIRECTORY_SERVER LOG_FILE_SERVER | LOG_FILE_CLIENT |
TRACE | TRACE_DIRECTORY_SERVER TRACE_FILE_SERVER TRACE_FILELEN_SERVER TRACE_FILENO_SERVER TRACE_LEVEL_SERVER TRACE_TIMESTAMP_SERVER | TRACE_DIRECTORY_CLIENT TRACE_FILE_CLIENT TRACE_FILELEN_CLIENT TRACE_FILENO_CLIENT TRACE_LEVEL_CLIENT TRACE_TIMESTAMP_CLIENT TRACE_UNIQUE_CLIENT | |
TRACE |
| TNSPING.TRACE_DIRECTORY TNSPING.TRACE_LEVEL | |
listener.ora | LOG | LOG_DIRECTORY_listener_name LOG_FILE_listener_name |
|
TRACE | TRACE_LEVEL_listener_name TRACE_FILELEN_listener_name TRACE_FILENO_listener_name TRACE_TIMESTAMP_listener_name |
|
格式化TRACE
trcasst [options]
只能格式化LEVEL16 SUPPORT
Usage : trcasst [options]
[options] default values are -odt -e0 -s
always last argument
-o[c|d][u|t][q] Net Services and TTC information
[c] Summary of Net Services information
[d] Detailed Net Services information
[u] Summary of TTC information
[t] Detailed TTC information
[q] SQL commands (used together with u)
-s Statistics
-e[0|1|2] Error information, default is 0
[0] Translate NS error numbers
[1] Error translation
[2] Error numbers without translation
-l[a|i ] Connection information
[a] List all connections in a trace file
[i ] Decode a specified connection
8. SDU
增加该参数以弱化SQL*Net more data from client,SQL*Net more data to client,SQL*Net more data from dblink
需要客户端,服务器端同时设置
该参数对STANDBY的日志传输性能有较大影响
9. INBOUND_CONNECT_TIMEOUT
在sqlnet.ora中的该参数:
表示等待用户认证超时的时间,单位是秒,缺省值是60秒
如果用户认证超时了,服务器日志alert.log显示出错信息
WARNING: inbound connection timed out (ORA-3136)
在listener.ora中的该参数:
表示等待用户连接请求超时的时间,单位是秒,缺省值是60秒
如果连接请求超时了,监听器日志listener.log显示出错信息
TNS-12525: TNS:listener has not received client's request in time allowed
服务器日志alert.log里不报错
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8242091/viewspace-631607/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8242091/viewspace-631607/