應用安全 - 操做系統安全 - 系統加固 | 中間件加固

  1 #!/bin/sh
  2 #L5500-檢查日誌文件權限設置
  3 function resultCheck() {
  4         echo "["$1"]["$2"]["$3"]["$4"]"
  5 }
  6 
  7 function logdirCheck() {
  8         LOGDIR=$(cat $1 | grep -v "^[[:space:]]*#" |sed '/^#/d' |sed '/^$/d' |awk '(($2!~/@/) && ($2!~/*/) && ($2!~/-/)) {print $2}')
  9         ls -l $LOGDIR 2>/etc/null | grep "^-" | awk '{print $1,$9}' |while read modFile fileName
 10         do
 11                 groupmod=$(echo $modFile |cut -c5-7)
 12                 othenmod=$(echo $modFile |cut -c8-)
 13                 if [[ $groupmod = "r-x" ]] || [[ $groupmod = "rw-" ]] || [[ $groupmod = "rwx" ]] || [[ $othenmod = "r-x" ]] || [[ $othenmod = "rw-" ]] || [[ $othenmod = "rwx" ]];then
 14                         statCheck=0
 15                         strCheck=$strCheck","$fileName":"$modFile
 16                 fi
 17         done
 18 }
 19 
 20 statCheck=1
 21 strCheck=""
 22 file1="/etc/rsyslog.conf"
 23 file2="/etc/syslog.conf"
 24 file3="/etc/syslog-ng/syslog-ng.conf"
 25 
 26 if [[ -f $file1 ]];then
 27         logdirCheck "$file1"
 28 elif [[ -f $file2 ]];then
 29         logdirCheck "$file2"
 30 elif [[ -f $file3 ]];then
 31         logdirCheck "$file3"
 32 else
 33         statCheck=0
 34         strCheck="no configuration file for syslog"
 35 fi
 36 
 37 
 38 # check result
 39 resultCheck "L5500" "$statCheck" "$strCheck"
 40 
 41 ##-------------------------------------------------------------------------------------------------------------------------
 42 #L2900-禁止Core Dump
 43 #!/bin/sh
 44 function resultCheck() {
 45     echo "["$1"]["$2"]["$3"]["$4"]"
 46 }
 47 
 48 statCheck=1
 49 strCheck=""
 50 # /etc/secrity/limits.conf check
 51 softCheck=$(cat /etc/security/limits.conf | grep -v ^# | grep "^*\([[:space:]]\+\)soft\([[:space:]]\+\)core\([[:space:]]\+\)0"|wc -l)
 52 if [[ $softCheck = 0 ]];then
 53     statCheck=0
 54     strCheck=" '* soft core 0' not set "
 55 fi
 56 
 57 hardCheck=$(cat /etc/security/limits.conf | grep -v ^# | grep "^*\([[:space:]]\+\)hard\([[:space:]]\+\)core\([[:space:]]\+\)0"|wc -l)
 58 if [[ $hardCheck = 0 ]];then
 59     statCheck=0
 60     strCheck=$strCheck", '* hard core 0' not set "
 61 fi
 62 
 63 # check result
 64 resultCheck "L2900" "$statCheck" "$strCheck"
 65 ##--------------------------------------------------------------------------------------------------------------------------------
 66 #L4500-啓用TCP SYN Cookie保護
 67 #!/bin/sh
 68 function resultCheck() {
 69         echo "["$1"]["$2"]["$3"]["$4"]"
 70 }
 71 
 72 statCheck=1
 73 strCheck=""
 74 tcpCheck=$(cat  /proc/sys/net/ipv4/tcp_syncookies)
 75 if [[ $tcpCheck != 1 ]];then
 76         statCheck=0
 77         strCheck="tcp_syncookies="$tcpCheck
 78 fi
 79 
 80 # check result
 81 resultCheck "L4500" "$statCheck" "$strCheck"
 82 ##------------------------------------------------------------------------------------------------------------------------------------------
 83 #L2800-檢查umask值是否符合要求
 84 #!/bin/sh
 85 function resultCheck() {
 86     echo "["$1"]["$2"]["$3"]["$4"]"
 87 }
 88 
 89 statCheck=1
 90 strCheck=""
 91 # /etc/bashrc check
 92 
 93 for valUmask in `cat /etc/bashrc |grep umask | awk '{print $1,$2}'| egrep "077"`
 94 do
 95     if [[ $valUmask = "" ]];then
 96         statCheck=0
 97         strCheck=$strCheck",umask:"$valUmask
 98     fi
 99 done
100 
101 # check result
102 resultCheck "L2800" "$statCheck" "$strCheck"
103 #--------------------------------------------------------------------------------------------------------------------------------------
104 #L2500-檢查密碼重複使用次數限制
105 #!/bin/sh
106 function resultCheck() {
107     echo "["$1"]["$2"]["$3"]["$4"]"
108 }
109 
110 statCheck=1
111 strCheck=""
112  113  pass_rember="password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=10"
113    114  pass_rember_Check=$(cat /etc/pam.d/common-password|grep ^"password    sufficient    pam_unix.so")
114 
115 # /etc/pam.d/system-auth check
116 pass_rember="password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=10"
117 pass_rember="password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=10"
118 pass_rember_Check=$(cat /etc/pam.d/system-auth|grep ^"password    sufficient    pam_unix.so")
119 if [[ $pass_rember_Check != $pass_rember ]];then
120     statCheck=0
121     strCheck="check result:"$pass_rember_Check
122 fi
123 # check result
124 resultCheck "L2500" "$statCheck" "$strCheck"
125 #------------------------------------------------------------------------------------------------------------------------------------------
126 #L2400-檢查是否設置口令過時前警告天數
127 #!/bin/sh
128 function resultCheck() {
129     echo "["$1"]["$2"]["$3"]["$4"]"
130 }
131 
132 statCheck=1
133 strCheck=""
134 # /etc/login.def check
135 PASS_WARN_AGE=$(cat /etc/login.defs |grep -v ^#|grep PASS_WARN_AGE |awk '{print $2}')
136 if [[ $PASS_WARN_AGE -ge 14 ]];then
137     :
138 else
139     statCheck=0
140     strCheck="PASS_WARN_AGE="$PASS_WARN_AGE
141 fi
142 
143 # check result
144 resultCheck "L2400" "$statCheck" "$strCheck"
145 #-------------------------------------------------------------------------------------------------------------------------------------------
146 #L2300-檢查口令最小長度
147 #!/bin/sh
148 function resultCheck() {
149     echo "["$1"]["$2"]["$3"]["$4"]"
150 }
151 
152 statCheck=1
153 strCheck=""
154 # /etc/login.def check
155 PASS_MIN_LEN=$(cat /etc/login.defs |grep -v ^#|grep PASS_MIN_LEN |awk '{print $2}')
156 if [[ $PASS_MIN_LEN -ge 8 ]];then
157     :
158 else
159     statCheck=0
160     strCheck="PASS_MIN_LEN="$PASS_MIN_LEN
161 fi
162 
163 # check result
164 resultCheck "L2300" "$statCheck" "$strCheck"
165 #-----------------------------------------------------------------------------------------------------------------------------------------------
166    171  passwdRight="password    required      pam_cracklib.so try_first_pass retry=3 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 minlen=8"
167    172  passwdCheck=$(cat /etc/pam.d/common-password |grep ^"password    required      pam_cracklib")
168 
169 #L2200-檢查設備密碼複雜度策略
170 #!/bin/sh
171 function resultCheck() {
172     echo "["$1"]["$2"]["$3"]["$4"]"
173 }
174 
175 statCheck=1
176 strCheck=""
177 # /etc/pam.d/system-auth check
178 passwdRight="password    required      pam_cracklib.so try_first_pass retry=3 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 minlen=8"
179 passwdCheck=$(cat /etc/pam.d/system-auth |grep ^"password    required      pam_cracklib")
180 if [[ $passwdCheck != $passwdRight ]];then
181     statCheck=0
182     strCheck="check result: "$passwdCheck
183 fi
184 # check result
185 resultCheck "L2200" "$statCheck" "$strCheck"
186 #--------------------------------------------------------------------------------------------------------------------------------------------------
187 #L2100-檢查是否設置口令更改最小間隔天數
188 #!/bin/sh
189 function resultCheck() {
190     echo "["$1"]["$2"]["$3"]["$4"]"
191 }
192 
193 statCheck=1
194 strCheck=""
195 # /etc/login.def check
196 PASS_MIN_DAYS=$(cat /etc/login.defs |grep -v ^#|grep PASS_MIN_DAYS |awk '{print $2}')
197 if [[ $PASS_MIN_DAYS -ge 2 ]];then
198     :
199 else
200     statCheck=0
201     strCheck="PASS_MIN_DAYS="$PASS_MIN_DAYS
202 fi
203 
204 # check result
205 resultCheck "L2100" "$statCheck" "$strCheck"
206 #----------------------------------------------------------------------------------------------------------------------------------------------------
207 #L2000-查是否設置口令生存週期
208 #!/bin/sh
209 function resultCheck() {
210     echo "["$1"]["$2"]["$3"]["$4"]"
211 }
212 
213 statCheck=1
214 strCheck=""
215 # /etc/login.def check
216 PASS_MAX_DAYS=$(cat /etc/login.defs |grep -v ^#|grep PASS_MAX_DAYS |awk '{print $2}')
217 if [[ $PASS_MAX_DAYS -gt 0 ]] && [[ $PASS_MAX_DAYS -le 90 ]];then
218     statCheck=1
219 else
220     statCheck=0
221     strCheck="PASS_MAX_DAYS="$PASS_MAX_DAYS
222 fi
223 
224 # check result
225 resultCheck "L2000" "$statCheck" "$strCheck"
226 #-------------------------------------------------------------------------------------------------------------------------------------------------------
227 #L1600-檢查某些特意組是否已按要求刪除
228 #!/bin/sh
229 function resultCheck() {
230     echo "["$1"]["$2"]["$3"]["$4"]"
231 }
232 
233 statCheck=1
234 strCheck=""
235 # group check
236 groupCheck=$(cat /etc/group| grep -v ^# |cut -d: -f1 | grep -E "lp|mail|news|uucp|games|ftp|floppy|mailnull"|xargs)
237 if [[ $groupCheck != "" ]];then
238     statCheck=0
239     strCheck="group not delete:"$groupCheck
240 fi
241 
242 # check result
243 resultCheck "L1600" "$statCheck" "$strCheck"
244 #--------------------------------------------------------------------------------
245 #L1500-檢查某些特定帳號是否已按要求刪除
246 #!/bin/sh
247 function resultCheck() {
248     echo "["$1"]["$2"]["$3"]["$4"]"
249 }
250 statCheck=1
251 strCheck=""
252 # user check
253 userCheck=$(cat /etc/passwd | grep -v ^# |cut -d: -f1| grep -E "games|uucp|lp|ftp|news|rpcuser|mail"|xargs)
254 if [[ $userCheck != "" ]];then
255     statCheck=0
256     strCheck="user:"$userCheck" not delete!"
257 fi
258 
259 # check result
260 resultCheck "L1500" "$statCheck" "$strCheck"
261 #----------------------------------------------------------------------------------
262 #L1400-檢查用戶帳號設置是否符合要求
263 #!/bin/sh
264 function resultCheck() {
265     echo "["$1"]["$2"]["$3"]["$4"]"
266 }
267 statCheck=1
268 strCheck=""
269 # uid check
270 repetID=$(cat /etc/passwd | cut -d: -f3 | sort -n |uniq -d | xargs)
271 if [[ $repetID != "" ]];then
272     statCheck=0
273     strCheck="repet-id:"$repetID
274 fi
275 
276 # root id check
277 rootID=$(cat /etc/passwd | grep ^root: | cut -d: -f3)
278 if [[ $rootID != "0" ]];then
279     statCheck=0
280     strCheck=$strCheck",root-id:"$rootID
281 fi
282 
283 # root group check
284 numGroupID=$(cat /etc/passwd |grep -v ^root:| cut -d: -f1,4 | grep :0$ |cut -d: -f1 |xargs)
285 if [[ $numGroupID != "" ]];then
286     statCheck=0
287     strCheck=$strCheck",root-group:"$numGroupID
288 fi
289 
290 # check result
291 resultCheck "L1400" "$statCheck" "$strCheck"
292 #---------------------------------------------------------------------------------
293 #L5000-禁止路由轉發
294 #!/bin/sh
295 function resultCheck() {
296         echo "["$1"]["$2"]["$3"]["$4"]"
297 }
298 
299 statCheck=1
300 strCheck=""
301 ip_forward_Check=$(cat /proc/sys/net/ipv4/ip_forward)
302 if [[ $ip_forward_Check != 0 ]];then
303         statCheck=0
304         strCheck="ip_forward_Check="$ip_forward_Check
305 fi
306 
307 # check result
308 resultCheck "L5000" "$statCheck" "$strCheck"
309 #----------------------------------------------------------------------------------------
310 #L4900-禁止時間戳廣播響應
311 #!/bin/sh
312 function resultCheck() {
313         echo "["$1"]["$2"]["$3"]["$4"]"
314 }
315 
316 statCheck=1
317 strCheck=""
318 
319 # check result
320 resultCheck "L4900" "$statCheck" "$strCheck"
321 #-----------------------------------------------------------------------------------------
322 #L4800-禁止Echo迴應廣播
323 #!/bin/sh
324 function resultCheck() {
325         echo "["$1"]["$2"]["$3"]["$4"]"
326 }
327 
328 statCheck=1
329 strCheck=""
330 echo_Check=$(cat /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts)
331 if [[ $echo_Check != 1 ]];then
332         statCheck=0
333         strCheck="echo_Check="$echo_Check
334 fi
335 
336 # check result
337 resultCheck "L4800" "$statCheck" "$strCheck"
338 #------------------------------------------------------------------------------
339 #L4700-禁止源站路由
340 #!/bin/sh
341 function resultCheck() {
342         echo "["$1"]["$2"]["$3"]["$4"]"
343 }
344 
345 statCheck=1
346 strCheck=""
347 accept_source_route_Check=$(cat /proc/sys/net/ipv4/conf/all/accept_source_route)
348 if [[ $accept_source_route_Check != 0 ]];then
349         statCheck=0
350         strCheck="accept_source_route_Check="$accept_source_route_Check
351 fi
352 
353 # check result
354 resultCheck "L4700" "$statCheck" "$strCheck"
355 #------------------------------------------------------------------------------------------------
356 #L4600-禁止路由重定向
357 #!/bin/sh
358 function resultCheck() {
359         echo "["$1"]["$2"]["$3"]["$4"]"
360 }
361 
362 statCheck=1
363 strCheck=""
364 accept_redirects_Check=$(cat  /proc/sys/net/ipv4/conf/all/accept_redirects 2>/dev/null)
365 if [[ $accept_redirects_Check != 0 ]];then
366         statCheck=0
367         strCheck="accept_redirects_Check="$accept_redirects_Check
368 fi
369 
370 # check result
371 resultCheck "L4600" "$statCheck" "$strCheck"
372 #-------------------------------------------------------------------------
373 #L3800-關閉不須要的基本系統服務
374 #!/bin/sh
375 function resultCheck() {
376         echo "["$1"]["$2"]["$3"]["$4"]"
377 }
378 function pidoffCheck() {
379         if [[ $(ps -ef |grep -v grep |grep $1 ) != "" ]];then
380                 statCheck=0
381                 strCheck=$strCheck",$1 on"
382         fi
383 }
384 statCheck=1
385 strCheck=""
386 
387 pidoffCheck "ntpd"
388 pidoffCheck "chronyd"
389 pidoffCheck "avahi"
390 pidoffCheck "cupsd"
391 pidoffCheck "dhcpd"
392 pidoffCheck "ldap"
393 pidoffCheck "nfsd"
394 pidoffCheck "dns[[:space:]]"
395 pidoffCheck "ftp[[:space:]]"
396 pidoffCheck "httpd"
397 pidoffCheck "imap"
398 pidoffCheck "smb[[:space:]]"
399 pidoffCheck "squid"
400 pidoffCheck "snmpd"
401 pidoffCheck "nis"
402 pidoffCheck "rsh"
403 pidoffCheck "telnet"
404 pidoffCheck "rsync"
405 pidoffCheck "talk"
406 pidoffCheck "tftp"
407 pidoffCheck "vsftpd"
408 pidoffCheck "webmin"
409 pidoffCheck "winbind"
410 pidoffCheck "wu-ftpd"
411 pidoffCheck "ypbind"
412 
413 # check result
414 resultCheck "L3800" "$statCheck" "$strCheck"
415 #=================================================================
416 #Redhat Centos Suse判斷網卡是否爲混雜模式
417 #=================================================================
418 statCheck=1
419 #strCheck="開始檢查網卡模式"
420 #resultCheck "L6800" "$statCheck" "$strCheck"
421 
422 #判斷網卡是否爲混雜模式
423 networksetting=$(ifconfig | egrep "PROMISC")
424 statCheck=0
425 if [[ $networksetting != "" ]];then
426     strCheck="存在混雜模式的網卡"
427 else 
428     statCheck=1
429     strCheck="不存在混雜模式的網卡"
430 fi
431 
432 # check result
433 resultCheck "L6800" "$statCheck" "$strCheck"
434 #------------------------------------------------------------------------------------------------------------------------------
435 #L6300-檢查日誌是否按要求集中存儲
436 #!/bin/sh
437 function resultCheck() {
438         echo "["$1"]["$2"]["$3"]["$4"]"
439 }
440 
441 statCheck=1
442 strCheck=""
443 file1=/etc/rsyslog.conf
444 file2=/etc/syslog.conf
445 
446 if [[ -f $file1 ]];then
447         if [[ `cat $file1 |grep -v ^# |grep @` = "" ]];then
448                 statCheck=0
449                 strCheck="logs are not centrally stored!"
450         fi
451 elif [[ -f $file2 ]];then
452         if [[ `cat $file2 |grep -v ^# |grep @` = "" ]];then
453                 statCheck=0
454                 strCheck="logs are not centrally stored!"
455         fi
456 else
457         statCheck=0
458         strCheck="no configuration file for syslog"
459 fi
460 
461 # check result
462 resultCheck "L6300" "$statCheck" "$strCheck"
463 #---------------------------------------------------------------------------------------------------------------
464 #L6500-檢查安全事件日誌配置
465 #!/bin/sh
466 function resultCheck() {
467         echo "["$1"]["$2"]["$3"]["$4"]"
468 }
469 
470 statCheck=1
471 strCheck=""
472 
473 file1=/etc/rsyslog.conf
474 file2=/etc/syslog.conf
475 file3=/var/adm/messages
476 
477 if [[ -f $file1 ]];then
478         logCheck=$(cat $file1 |grep -v ^# |grep "*.err;kern.debug;daemon.notice"|awk '{print $2}')
479         if [[ $logCheck != $file3 ]];then
480                 statCheck=0
481                 strCheck=$logCheck
482         elif [[ -f $file3 ]];then
483                 filemod=$(ls -ld $file3 |awk '{print $1}')
484                 if test $filemod != "-rw-rw-rw-" -a $filemod != "-rw-rw-rw-.";then
485                         statCheck=0
486                         strCheck=$strCheck","$file3":file mod incorrectly!"
487                 fi
488         else
489                 statCheck=0
490                 strCheck=$strCheck","$file3":file not exists!"
491         fi
492 elif [[ -f $file2 ]];then
493         logCheck=$(cat $file2 |grep -v ^# |grep "*.err;kern.debug;daemon.notice"|awk '{print $2}')
494         if [[ $logCheck != $file3 ]];then
495                 statCheck=0
496                 strCheck=$logCheck
497         elif [[ -f $file3 ]];then
498                 filemod=$(ls -ld $file3 |awk '{print $1}')
499                 if test $filemod != "-rw-rw-rw-" -a $filemod != "-rw-rw-rw-." ;then
500                         statCheck=0
501                         strCheck=$strCheck","$file3":file mod incorrectly!"
502                 fi
503         else
504                 statCheck=0
505                 strCheck=$strCheck","$file3":file not exists!"
506         fi
507 else
508         statCheck=0
509         strCheck="no configuration file for syslog"
510 fi
511 
512 
513 # check result
514 resultCheck "L6500" "$statCheck" "$strCheck"

 

Linux安全加固                    
                    
1.禁止ping                    
                    
/etc/rc.d/rc.local                    
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all                    
                    
2.對用戶和口令文件進行權限控制                    
chmod 600 /etc/passwd                    
chmod 600 /etc/shadow                    
chmod 600 /etc/group                    
chmod 600 /etc/gshadow                    
3.給下面文件加上不可更改屬性                    
chattr +i /etc/passwd                    
chattr +i /etc/shadow                    
chattr +i /etc/group                    
chattr +i /etc/gshadow                    
                    
4.對vsftp進行訪問控制                    
vi hosts.deny                    
vsftpd: all –先禁止全部vsftp的請求                    
vi hosts.allow                    
vsftpd: 192.168.2.1 –再容許內網的vsftd請求                    
5.關閉無用端口,只開啓常規端口(212280443)                    
service portmap stop                    
chkconfig –level 35 portmap off –關閉111端口                    
netstat -nap |grep 32768                    
killall rpc.statd –關閉32768端口                    
netstat -nap |grep 631                    
killall cupsd –關閉631端口                    
service sendmail stop                    
chkconfig –level 12345 sendmail off –關閉25端口                    
6.apache安全設置(先備份httpd.conf配置文件)                    
vi /etc/httpd/httpd.conf                    
ServerSignature Off                    
ServerTokens Prod —隱藏Apache的版本號及其它敏感信息                    
                    
Options -ExecCGI -FollowSymLinks -Indexes –關閉CGI執行程序、includes、目錄瀏覽                    
                    
將UserDir public_html改成UserDir disabled                    
#ScriptAlias /cgi-bin 「/usr/local/apache/cgi-bin/」                    
註釋掉manual                    
7.vi /etc/profile                    
HISTFILESIZE=30                    
HISTSIZE=30 –這表示每一個用戶的「.bash_history」文件只能夠保存30條舊命令                    
tmout=600 –用戶將在10分鐘無操做後自動註銷                    
vi /etc/skel/.bash_logout                    
rm -f $HOME/.bash_history –當用戶每次註銷時,「.bash_history」文件都會被刪除。                    
vi /etc/inittab                    
ca::ctrlaltdel:/sbin/shutdown -t3 -r now                    
改成:                    
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now                    
/sbin/init q –讓改動起做用                    
8.刪除沒法賬戶和組                    
userdel adm                    
userdel lp                    
userdel sync                    
userdel shutdown                    
userdel halt                    
userdel mail                    
userdel news                    
userdel uucp                    
userdel operator                    
userdel games                    
userdel ftp                    
groupdel adm                    
groupdel lp                    
groupdel mail                    
groupdel news                    
groupdel uucp                    
groupdel games                    
==================================================================================================                    
你的webserver支持TRACE 和/或 TRACK 方式。 TRACE和TRACK是用來調試web服務器鏈接的HTTP方式。                    
支持該方式的服務器存在跨站腳本漏洞,一般在描述各類瀏覽器缺陷的時候,把」Cross-Site-Tracing」簡稱爲XST。                    
攻擊者能夠利用此漏洞欺騙合法用戶並獲得他們的私人信息。                    
解決方案: 禁用這些方式。                    
若是你使用的是Apache, 在各虛擬主機的配置文件裏添加以下語句:                    
RewriteEngine on                    
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)                    
RewriteRule .* – [F]                    
===================================================================================================                    
下面簡單的說一些修改那些服務Banner的方法                    
apache                    
完全地去掉banner, 修改httpd.h:                    
Include/httpd.h                    
Define SERVER_BASEVENDOR 「Apache Group」                    
Define SERVER_PRODUCTVENDOR 「Apache」                    
Define SERVER_BASEVERSION 「1.3.27″                    
後重新編譯Apache就可以徹底去掉了                    
Wu-ftp                    
用十六進制文本編輯器修改/usr/sbin/in.ftpd文件,找到以下幾行:                    
/var/log/lastlog                    
Could not write %.100s: %.100s                    
Version wu-2.6.1-16                    
改爲                    
Microsoft FTP Service (Version 5.0)                    
或者                    
Serv-U FTP Server v4.0 for WinSock ready…                    
Telnet banner                    
編輯文件/etc/issue.net,找到相似這行(不一樣版本的Linux內容不太同樣):                    
Red Hat Linux release 8.0 (Psyche)                    
Kernel r on an m                    
改爲                    
Microsoft Windows Version 5.00 (Build 2195)                    
Welcome to Microsoft Telnet Service                    
Telnet Server Build 5.00.99206.1                    
因爲issue.net重啓後會自動恢復,爲了保持這些僞造的信息,須要再編輯文件/etc/rc.local,在這些行前加「#」號,註釋掉恢復的功能:                    
# echo 「」 > /etc/issue                    
# echo 「$R」 >> /etc/issue                    
# echo 「Kernel $(uname -r) on $a $SMP$(uname -m)」 >> /etc/issue                    
# cp -f /etc/issue /etc/issue.net                    
# echo >> /etc/issue                    
Apache                    
在安裝Apache前,在源文件/src/include目錄下找到httpd.h頭文件。此文件定義了apache的版本信息,apache安裝時須要調用它。編輯http.h文件,找到以下幾行:                    
#define SERVER_BASEVENDOR 「Apache Group」                    
#define SERVER_BASEPRODUCT 「Apache」                    
#define SERVER_BASEREVISION 「1.3.20″                    
能夠根據本身的意願改爲其餘信息,筆者改的是Microsoft-IIS/5.0。                    
SSH                    
編輯文件/etc/ssh/sshd_config,找到這行:                    
Banner /etc/issue.net                    
在此行前加#進行註釋就能夠不顯示SSH的Banner。                    
Sendmail                    
在sendmail.mc文件中去掉$v、$z這兩個宏,幷包含下面的內容:                    
define(`confSMTP_LOGIN_MSG’,$j Sendmail Secure/Rabid;$b)                    
而後生成sendmail.cf文件:                    
#m4 /etc/mail/sendmail.mc > /etc/sendmail.cf                    
若是sendmail.mc中沒有include(`/usr/share/sendmail-cf/m4/cf.m4′)這一行就須要和Sendmail提供的預設的配置文件cf.m4一塊兒使用來生成文件sendmail.cf:                    
#m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/sendmail.cf                    
php                    
vi php.ini                    
設置 expose_php = Off                    

 

域控加固方案javascript

域控制器加固方案
1、資產識別
域控制器( Domain controller,DC)是活動目錄的存儲位置,安裝了活動目錄的計算機稱爲域控制器。在第一次安裝活動目錄時,安裝活動目錄的那臺計算機就成爲域控制器,簡稱「域控」。域控制器存儲着目錄數據並管理用戶域的交互關係,其中包括用戶登陸過程、身份驗證和目錄搜索等。
域控制器主要用於負責每一臺接入域中服務器、終端的身份驗證工做,包含了由這個域的帳戶、密碼、屬於這個域的計算機等信息構成的數據庫,加入域的計算機各類策略是域控制器統一設定,用戶名和密碼也是放到域控制器去驗證,也就是說你的帳號密碼能夠在同一域的任何一臺計算機登陸。
各業務單位要準確識別域控制器資產信息,明確責任人,作到100%在OPS系統進行登記(登記操做見附件1),並在次日登陸SOC系統查看。同時,各二層單位工做接口人應在天天下午17:00前按照附件2模板向各二層單位信息安全接口人及時更新域控制器的資產清單。
2、加固指引(通用)
注意:本章加固指引適用於全部類型的域控服務器及加入域的終端。

2.1 帳號及口令管理
2.1.1 安檢達標
加固對象:域控制器
加固方案:全部域控制器必須按照附件1的指引開展服務器安檢達標工做,並對不達標項進行整改或備案,保證全部域控制器100%達標。

2.1.2 域帳號加固及清理(對域帳號進行權限梳理,加固高權限帳號)
1、查看域帳戶和帳戶組,梳理高權限帳號。同時也能夠經過BloodHound或System Internal Tools的ADExplorer工具進行檢測。
域帳號權限檢測工具BloodHound:https://github.com/BloodHoundAD/BloodHound  
使用教程:https://www.freebuf.com/sectool/179002.html
2、審閱帳號受權是否「最小化」,調整權限和分組,根據帳號的歸屬人的權限進行調整,取消非域管帳號的敏感權限,刪除或鎖定全部與設備運行、維護等工做無關的帳號。針對沒法定位使用人的帳號,進行凍結或鎖定;
3、參照 
https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/appendix-f--securing-domain-admins-groups-in-active-directory配置域管理員權限
4、建議只保留1個具有域管理員權限的帳戶,同時域管理員賬號儘可能不登陸其餘機器;
5、敏感帳號不容許委派,主機帳號需設置委派時,只能設置爲約束性委派;
6、敏感帳號不容許取消 Kerberos預鑑權;
7、全部終端上進行以下配置:(1)最短密碼長度:8個字符;(2)密碼必須符合複雜性要求:啓用;(3)強制執行密碼歷史記錄:記住5個密碼;(4)密碼最長期限:90天;
8、通知全部高權限帳戶修改密碼,要求密碼必須符合複雜性要求(8位以上,包含大寫字母、小寫字母、數字、特殊符號中的3類,避免易猜解口令),且不得與人事在線帳號相同;
9、具有直接域管或間接域管權限(例如能夠修改 Domain Admins的帳號就具有間接域管權限)的帳號的活動進行郵件報備制度(報備人:黃逸風10252161),未經容許不得進行任何操做,包括登陸等等;
10、域內全部終端(包括辦公及、服務器等)護網前所有重啓,消除敏感帳號憑據留存;
11、服務器登錄查看相關憑據,若是有,經過刪除或者註銷來刪除服務器上留存的憑據。
2.1.3 端口管理
加固對象:域控制器
加固方案:
1、域控制器不得用做其餘用途,如Web、FTP等應用服務;
2、域控制器關閉全部非必要的端口(Windows服務器可經過netstat監聽本地端口,並停用非必要的服務),尤爲是21(FTP)、22(SSH)、23(Telnet)、8044380808443135(RPC)、139(Netbios)、47001(Windows Remote Management)等高風險端口,需評估開啓端口的必要性,非必要端口一概關閉。
2.1.4 訪問控制
加固對象:域控制器
加固方案:
1、開啓域控制器的主機防火牆;
2、配置主機防火牆策略,設置白名單,限制只有域控制器運維人員能夠訪問域控制器的遠程桌面端口(默認爲3389),白名單IP建議只有1個,原則上不超過2個;
3、配置主機防火牆策略,設置白名單,限制能夠訪問域控制器IP地址的地址段信息,原則上只容許域內服務器所在的地址段能夠訪問,建議白名單IP不超過2個C段。

3、加固指引(Windows)
注意:本章指引(1)適用於操做系統爲Windows Server 2008 R二、Windows Server 2012R2的域服務器;(2)部分適用於操做系統windows server 2016Datacenter的域服務器;(3)適用於全部加入域的Windows終端。
3.1安檢達標、安全配置及補丁管理
3.1.1 補丁管理
加固對象:域控制器
加固方案:
1、增強Windows服務器補丁升級工做,全部的Windows服務器必須及時進行補丁升級工做,具體操做指導連接:
https://x.xx.com.cn/its/app/articlePub/RkmArticlePub/getDataDetailByArticleId.action?rkmArticlePub.articleId=KBA00032818&rkmArticlePub.requestId=KBA000000035643
2、確保域控制器安裝了以下補丁:
•KB3011780:https://www.catalog.update.microsoft.com/Search.aspx?q=KB3011780
•KB2871997:https://www.catalog.update.microsoft.com/Search.aspx?q=KB2871997
•KB4013389:
3.1.2 開啓 LDAP enforce signing(CVE-2017-8563)
加固對象:域控制器+全部加入域的Windows終端
加固方案:
1、域控服務器及全部域內服務器下載並安裝如下補丁:
https://www.catalog.update.microsoft.com/Search.aspx?q=KB4025337 (安裝補丁後需重啓)
2、在域控服務器上作以下操做(將服務器設置要求LDAP簽名):
(1)單擊開始,單擊運行,鍵入 mmc.exe,而後單擊肯定。
(2)在文件菜單上,單擊添加/刪除管理單元。
(3)在添加或刪除管理單元對話框中,單擊組策略管理編輯器,而後單擊添加。
(4)在選擇組策略對象對話框中,單擊瀏覽。
(5)在瀏覽組策略對象對話框中,在域、 Ou 和連接的6. 組策略對象的區域中,單擊默認域策略,而後單擊肯定。
(6)單擊完成。
(7)單擊肯定。
(8)展開默認域控制器策略展開計算機配置,展開策略、 展開Windows 設置、 展開安全設置、 展開本地策略,而後單擊安全選項。 用鼠標右鍵單擊域控制器: LDAP 服務器簽名要求,而後單擊屬性。
(9)在域控制器: LDAP 服務器簽名要求屬性對話框中,定義這個策略設置啓用,單擊以選中定義這個策略設置下拉列表中,在要求籤名,而後單擊肯定。
(10)在確認設置更改對話框中,單擊是。
3、在域控服務器上作以下操做(經過一個域組策略對象設置客戶端要求 LDAP簽名):
(1)在文件菜單上,單擊添加/刪除管理單元。
(2)在添加或刪除管理單元對話框中,單擊組策略對象編輯器,而後單擊添加。
(3)單擊瀏覽,而後選擇默認域策略(或您要爲其啓用客戶端 LDAP簽名組策略對象)。
(4)單擊肯定。
(5)單擊完成。
(6)單擊關閉。
(7)單擊肯定。
(8)展開默認域策略,展開計算機配置,展開Windows 設置、 展開安全設置,展開本地策略,而後單擊安全選項。
(9)在網絡安全: LDAP 客戶端簽名要求屬性對話框中,單擊要在下拉列表中,選擇須要簽名,而後單擊肯定。
(10)在確認設置更改對話框中,單擊是。
4、在域控服務器上作以下操做(配置註冊表以啓用):
(1)單擊開始,單擊運行,鍵入 regedit,而後單擊肯定。
(2)找到並單擊如下注冊表子項: 
HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
(3)LDAPServerIntegrity註冊表項,右鍵單擊,而後單擊修改。
(4)將數值數據更改成 2,而後單擊肯定。
(5)找到並單擊如下注冊表子項:
HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\Services\ldap\Parameters
(6)Ldapclientintegrity註冊表項,右鍵單擊,而後單擊修改。
(7)將數值數據更改成2,而後單擊肯定。
3.1.3 開啓 LDAPS channel binding(CVE-2017-8563)
加固對象:全部加入域的Windows終端
加固方案:
1、全部域內服務器下載並安裝如下補丁(補丁與第2.1.3節相同):
https://www.catalog.update.microsoft.com/Search.aspx?q=KB4025337 (安裝補丁後需重啓)
2、對全部域內服務器作以下操做(配置註冊表以啓用)
(1)單擊開始,單擊運行,鍵入 regedit,而後單擊肯定。
(2)找到並單擊如下注冊表子項: 
HKEYLOCALMACHINE\System\CurrentControlSet\Services\NTDS\Parameters
(3)LdapEnforceChannelBinding註冊表項,右鍵單擊,而後單擊修改。
(4)將數值數據更改成 2,而後單擊肯定。
數值: 0 表示禁用。 不執行通道綁定驗證。 這是全部還沒有更新的服務器的行爲。 數值: 1 表示啓用(若是支持)。 運行在已更新以支持通道綁定令牌 (CBT) 的 Windows 版本上的全部客戶端必須向服務器提供通道綁定信息。 運行還沒有更新以支持 CBT 的 Windows 版本的客戶端不須要這樣作。 這是容許應用程序兼容性的中間選項。 數值: 2 表示始終啓用。 全部客戶端必須提供通道綁定信息。 服務器拒絕來自不這樣作的客戶端的身份驗證請求。
3.1.4 禁用LLMNR
加固對象:全部加入域的Windows終端
加固方案:
(1)在命令行中輸入「gpedit.msc」;
(2)點擊:本地計算機策略->計算機配置->管理模板->網絡->DNS客戶端;
(3)在DNS客戶端文件夾中,雙擊「關閉多播名稱解析」並將其設置爲「已啓用」
並找到註冊表修改:
HKLM\Software\Policies\Microsoft\Windows NT\DNSClient
"EnableMulticast" DWORD 0
3.1.5 禁用NBT
加固對象:全部加入域的Windows終端
加固方案:
(1)在控制面板的網絡和共享中心中,選擇「更改適配器設置」,選擇「本地鏈接」,而後右鍵單擊「屬性」;
(2)選擇「Internet協議版本4(TCP/IPv4),而後單擊「屬性」按鈕」;
(3)點擊「高級」按鈕
(4)點擊WINS選項卡,選擇「禁用TCP / IP上的NetBIOS」,並確認
3.1.6 禁用 Wdigest
加固對象:域控制器+全部加入域的Windows終端
加固方案:
1、域控服務器及全部域內服務器下載並安裝如下補丁(補丁與第2.1.2節相同):
https://www.catalog.update.microsoft.com/Search.aspx?q=KB2871997(安裝補丁後需重啓)
2、作以下配置:
註冊表
HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest
建立鍵值 "UseLogonCredential" REG_DWORD 0
3.1.7 啓用LSA保護
加固對象:全部加入域的Windows終端
加固方案:
(1)單擊開始,單擊運行,鍵入 regedit,而後單擊肯定。
(2)找到並單擊如下注冊表子項:
 HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\Control\LSA
(3)RunAsPPL註冊表項,右鍵單擊,而後單擊修改。
(4)將數值數據更改成 1,而後單擊肯定。
3.1.8 加固NetSess
加固對象:全部加入域的Windows終端
加固方案:
下載地址:
https://gallery.technet.microsoft.com/Net-Cease-Blocking-Net-1e8dcb5b/file/165596/1/NetCease.zip
加固 netsess.exe的權限,禁止普通權限用戶濫用該工具進行域內機器信息枚舉
3.1.9 禁用SMBv1
加固對象:全部加入域的Windows終端
加固方案:
1、針對Windows Server 2012 R2 & 2016:(PowerShell)
Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol
2、針對Windows Server 2008 R2:(PowerShell,需重啓)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force
3.1.10 PtH攻擊緩解
簡述
1、區域劃分,爲每一個辦公區域設置專門的管理員,禁止區域管理員跨區訪問機器;
2、域 Administrator用戶只用於訪問域控制器,而且將域管理員加入到受保護用戶組中;
3、避免域內主機本地管理員密碼相同、建立一個新用戶做爲本地管理員的替代加入到本地管理員組並禁用默認的本地管理員帳戶(Administrator);
3.1.11 部署 EMET
加固對象:全部加入域的Windows終端
下載連接:https://www.microsoft.com/en-us/download/details.aspx?id=50766
3.2 網絡服務
3.2.1 關閉不須要的服務
加固對象:域控制器
加固方案:
1、開始->運行->services.msc
2、建議評估如下服務是否須要使用,若不須要,則建議關閉
Distributed linktracking client 
PrintSpooler 
Remote Registry Server 
TCP/IP NetBIOS Helper 
Workstation 
Computer Browser 
NetLogon 
Remote Procedure Call (RPC) Locator 
3.2.2 關閉默認共享
1、開始->運行->cmd->net share,查看共享
2、關閉C$,D$等默認共享
開始->運行->regedit->找到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters ,新建AutoShareServer(REG_DWORD),鍵值爲0
3.3 文件系統
3.3.1 使用NTFS
加固對象:域控制器+全部加入域的Windows終端
加固方案:
查看每一個系統驅動器是否使用NTFS文件系統。建議使用NTFS文件系統,轉換命令:convert <驅動器盤符>: /fs:ntfs
3.3.2 檢查Everyone權限
加固對象:全部加入域的Windows終端
加固方案:
查看每一個系統驅動器根目錄是否設置爲Everyone有全部權限,建議刪除Everyone的權限或者取消Everyone的寫權限
3.3.3 限制命令權限
加固對象:域控制器
加固方案:
1、使用cacls命令或資源管理器查看如下文件權限;
2、建議對如下命令作限制,只容許system、Administrator組訪問
%systemroot%\system32\cmd.exe
%systemroot%\system32\regsvr32.exe
%systemroot%\system32\tftp.exe
%systemroot%\system32\ftp.exe
%systemroot%\system32\telnet.exe
%systemroot%\system32\net.exe
%systemroot%\system32\net1.exe
%systemroot%\system32\cscript.exe
%systemroot%\system32\wscript.exe
%systemroot%\system32\regedit.exe
%systemroot%\system32\regedt32.exe
%systemroot%\system32\cacls.exe
%systemroot%\system32\command.com
%systemroot%\system32\at.exe
3.4 防病毒管理
全部的Windows服務器必須安裝防病毒軟件並及時下載、更新最新的病毒庫,McAfee支持的Windows操做系統以下:

下載連接以下,根據操做系統選擇對應的版本進行下載安裝。
https://xx.xx.com.cn/its/app/download/Download/getDownloadDetails.action?download.itsInfoDownloadId=1608
3.5 操做系統windows server 2016Datacenter的域服務器
針對windows server 2016Datacenter操做系統的域控服務器,要經過微軟的基線工具進行檢測檢查並根據檢查結果進行整改加固:
下載連接:https://www.microsoft.com/en-us/download/details.aspx?id=55319
3.6 其餘
若域內終端安裝了Exchange郵箱,則要從舊到新打補丁,若安裝了Office軟件,則要禁用(1)Microsoft Office Macros;(2)Microsoft Office OLE
4、加固指引(Linux)
注意:本章指引適用於操做系統爲Linux的域控制器。
加固對象:域控制器
加固方案:
除了按照第二章的指引進行加固外,還需:
1、將操做系統升級到最新;
2、按照「linux加固」附件的要求進行加固。

5、漏洞管理
由滲透測試組對全部域控制器不按期進行漏洞掃描、滲透測試,發現的漏洞將經過SOC系統派發工單到設備責任人處或經過郵件派發到部門護網工做接口人處進行處置,請責任人及時完成漏洞加固並反饋加固進展。
6、入侵檢測
6.1 DCSync攻擊檢測
1、網絡層檢測:
(1)將全部受信 DC的 IP列入白名單中;
(2)配置 IDS將不在白名單中的 IP發起的 DsGetNCChange網絡請求進行告警;
備註:一般 DrsAddEntry、DrsReplicaAdd、DsGetNCChange相關的網絡流量會每15分鐘發生一次,能夠在 Wireshark中觀察到。 IDS規則配置參考:
https://github.com/ptresearch/AttackDetection/tree/master/dcshadow
2、系統層檢測:
使用 https://github.com/shellster/DCSYNCMonitor工具(部署在域控制器上,須要域控制器安裝 Winpcap或 Npcap,但該檢測方式可被繞過)
3、在 安恆大數據平臺中進行檢測
6.2 DCShadow攻擊檢測
1、網絡層檢測:
DrsAddEntry和 DrsReplicaAdd網絡請求只能從 DC發起,配置 IDS檢測由非受信 DC發起的這類網絡請求。
備註:一般 DrsAddEntry、DrsReplicaAdd、DsGetNCChange相關的網絡流量會每15分鐘發生一次,能夠在 Wireshark中觀察到。 Suricata IDS規則:
https://github.com/ptresearch/xx/tree/master/dcshadow
2、系統層檢測:
使用 https://github.com/shellster/DCSYNCMonitor工具(部署在域控制器上,須要域控制器安裝 Winpcap或 Npcap,但該檢測方式可被繞過)
3、在 安恆大數據平臺中進行檢測
6.3 重要事件監控
將全部域控服務器的日誌接入安恆大數據平臺進行監測,重點關注如下事件:
EventID    Description    Impact
1102/517    事件日誌被清除    攻擊者可能會清除事件日誌來隱藏痕跡
4610/4611/4614/4622    本地安全機構修改    攻擊者可能利用 LSA進行特權提高或權限維持
4672    特權被分配給新登陸的用戶    有管理員權限的人登陸時監控。 這是一個應該擁有管理員權限仍是普通用戶的賬戶?
4723    帳戶密碼被修改    該操做是否異常
4964    任何已定義特殊組的成員的賬戶登陸日誌    對異常登陸進行排查
4698 & 4702    計劃任務的建立或更改    攻擊者可能會利用計劃任務進行權限維持
4732    有新用戶被加入到本地管理員組中    攻擊者可能會建立一個本地用戶並加入到本地管理員組中以獲取高權
4720    有本地用戶被建立    攻擊者可能會建立一個本地用戶用於維持權限


附件
服務器管理員認證、登記、達標FAQ
域控制器資產收集

中間件安全加固配置 - Apachephp

1.概述
1.1適用範圍
本配置基線適用於Apache系列中間件,主要涉及Apache中間件安全配置方面的基本要求,用於指導安全例行工做、新系統入網安全檢查等場合。
1.2目標
根據目前Apache的安全現狀,結合相關規範性文件指引,制定適合的基線配置規範。
規範性引用文件:
GB/T 28448-2012 《信息安全技術 信息系統安全等級保護測評要求》
GB/T 28453-2012 《信息安全技術 信息系統安全管理評估要求》
GB/T 25063-2010 《信息安全技術 服務器安全測評要求》
GB/Z 24364-2009 《信息安全技術 信息安全風險管理指南》
GB/T 22239-2008 《信息安全技術 信息系統安全等級保護基本要求》
GB/T 20270-2006 《信息安全技術 網絡基礎安全技術要求》
GB/T 20271-2006 《信息安全技術 信息系統通用安全技術要求》
GB/T 20269-2006 《信息安全技術 信息系統安全管理要求》
YD/T 2701-2014  《電信網和互聯網安全防禦基線配置要求及檢測要求》
1.3實施策略
結合網絡和信息系統建設狀況,考慮安全配置項影響的範圍,結合以往工做經驗,提出以下安全項目實施策略:
基礎項:實施安全基線可以明顯提高安全水平,實施風險小,可操做性強。
建議項:實施安全基線可以提高必定安全水平,具備必定風險,可操做性較強。
序號    配置類別    安全基線項目名稱    實施策略
1    訪問控制    配置Apache運行帳戶    基礎項
2    訪問控制    禁止訪問外部文件    基礎項
3    訪問控制    禁止目錄瀏覽    基礎項
4    訪問控制    配置敏感文件訪問權限    基礎項
5    訪問控制    配置使用安全的HTTP請求    基礎項
6    安全審計    配置安全日誌    基礎項
7    資源控制    配置抗拒絕服務攻擊參數    建議項
8    資源控制    設置鏈接數    建議項
9    其餘安全選項    刪除缺省文件    基礎項
10    其餘安全選項    設置Apache版本號    基礎項
11    其餘安全選項    配置錯誤頁面處理    基礎項
12    其餘安全選項    更新補丁    建議項


2.安全配置基線標準
2.1訪問控制
2.1.1配置Apache運行帳戶
基線名稱    配置Apache運行帳戶(基礎項)
基線編號    Tophant-Apache-1
基線說明    以特定的用戶帳戶和組運行Apache
配置方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
修改httpd.conf配置文件,添加以下語句:
User apache 
Group apachegroup
檢查方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
1、檢查是否使用非專用帳戶(如root)運行apache
2、查看httpd.conf文件,查看是否認義了以下形式的腳本。
User apache
Group apachegroup
檢查apache用戶和組的權限,該用戶不該具備管理員權限。
備註    爲apache的用戶和組設置適當的權限;apache、apachegroup分別是爲Apache建立的用戶和組。
2.1.2禁止訪問外部文件
基線名稱    禁止訪問外部文件(基礎項)
基線編號    Tophant-Apache-2
基線說明    禁止Apache訪問Web目錄以外的任何文件。
配置方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
編輯httpd.conf配置文件,
1、設置外部不可訪問。
<Directory />   /** 「 / 」爲外部文件目錄
Order Deny,Allow
Deny from all 
</Directory>
二、設置可訪問目錄,
<Directory /web>
Order Allow,Deny
Allow from all 
</Directory>
檢查方法    沒法訪問Web目錄以外的文件。
備註    /web爲網站根目錄。
2.1.3禁止目錄瀏覽
基線名稱    禁止目錄瀏覽(基礎項)
基線編號    Tophant-Apache-3
基線說明    禁止當Apahce目錄沒有默認首頁時,顯示目錄文件
配置方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
一、編輯httpd.conf配置文件,
<Directory "/web">
Options Indexes FollowSymLinks  #刪除Indexes 
AllowOverride None
Order allow,deny
Allow from all
</Directory>
二、從新啓動Apache服務
檢查方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
一、當WEB目錄中沒有默認首頁如index.html文件時,不會列出目錄內容
二、檢查httpd.conf文件,查看是否存在Options Indexes FollowSymLinks語句。若存在,則不符合要求。
備註    刪除Options Indexes FollowSymLinks中的Indexes ,便可禁止Apache 顯示該目錄結構。Indexes 的做用就是當該目錄下沒有 index.html文件時,即顯示目錄結構。
2.1.4配置敏感文件訪問權限
基線名稱    配置敏感文件訪問權限(基礎項)
基線編號    Tophant-Apache-4
基線說明    嚴格設置配置文件和日誌文件等敏感文件的訪問權限,防止未受權訪問
配置方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
使用命令「chmod 600 /etc/httpd/conf/httpd.conf」設置配置文件爲屬主可讀寫,其餘用戶無權限。
使用命令「chmod 644 /var/log/httpd/*.log」設置日誌文件爲屬主可讀寫,其餘用戶只讀權限。
檢查方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
一、使用以下命令查看httpd.conf文件權限
#vi -l /etc/httpd/conf/httpd.conf  
若爲-rw-------即符合要求
二、按照上述方法查看.log格式的文件權限
若爲-rw-r—r—即爲符合要求
備註    
2.1.5配置使用安全的HTTP請求
基線名稱    配置使用安全的HTTP請求(基礎項)
基線編號    Tophant-Apache-5
基線說明    禁用PUT、DELETE等危險的HTTP方法
配置方法    在httpd.conf中,找到LimitExcept配置項,並按以下格式添加 GEP POST命令:<LimitExcept GET POST> Deny from all< /LimitExcept>
檢查方法    參考安全配置方法查看httpd.conf中是否有相應內容
備註    
2.2安全審計
2.2.1配置安全日誌
基線名稱    配置安全日誌(基礎項)
基線編號    Tophant-Apache-6
基線說明    設備應配置日誌功能,對運行錯誤、用戶訪問等進行記錄,記錄內容包括時間,用戶使用的IP地址等內容。
配置方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
編輯httpd.conf配置文件,設置日誌記錄文件、記錄內容、記錄格式。
LogLevel notice 
ErrorLog logs/error_log
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Accept}i\" \"%{Referer}i\" \"%{User-Agent}i\"" combined 
CustomLog logs/access_log combined
檢查方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
一、查看logs目錄中相關日誌文件內容,記錄完整。
二、查看相關日誌記錄,要求對運行錯誤、用戶訪問等進行記錄,記錄內容包括時間、用戶使用的IP地址等內容。
依據    6.2.1.4 應用安全:安全審計(G3):a) 應提供覆蓋到每一個用戶的安全審計功能,對應用系統重要安全事件進行審計;
備註    必須記錄日誌,但考慮到磁盤I/O,不建議記錄所有日誌。
ErrorLog指令設置錯誤日誌文件名和位置。錯誤日誌是最重要的日誌文件,Apache httpd將在這個文件中存放診斷信息和處理請求中出現的錯誤。若要將錯誤日誌送到Syslog,則設置:ErrorLog syslog。
CustomLog指令設置訪問日誌的文件名和位置。訪問日誌中會記錄服務器所處理的全部請求。
LogFormat設置日誌格式。LogLevel用於調整記錄在錯誤日誌中的信息的詳細程度,建議設置爲notice。
2.3資源控制
2.3.1配置抗拒絕服務攻擊參數
基線名稱    配置抗拒絕服務攻擊參數(建議項)
基線編號    Tophant-Apache-7
基線說明    經過合理設置鏈接活躍時間和超時時間,減輕「拒絕服務攻擊」的影響。
配置方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
一、編輯httpd.conf配置文件,
Timeout 10 KeepAlive On
KeepAliveTimeout 15
AcceptFilter http data
AcceptFilter https data
二、從新啓動Apache服務
檢查方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
檢查httpd.conf文件,查看是否進行了以下設置:
Timeout 10 KeepAlive On
KeepAliveTimeout 15
AcceptFilter http data
AcceptFilter https data
備註    KeepAlive    //保持鏈接活躍
Timeout    //客戶端與服務器端創建鏈接前的時間間隔
KeepAliveTimeout    //鏈接活躍時間
2.3.2設置鏈接數
基線名稱    設置鏈接數(建議項)
基線編號    Tophant-Apache-8
基線說明    根據機器性能和業務需求,設置最大最小鏈接數
配置方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
使用httpd -l 檢查Apache的工做模式,如列出prefork.c,則進行下列操做:
一、修改httpd.conf文件找到
<IfModuleprefork.c>
StartServers       8 
MinSpareServers    5 
MaxSpareServers   20 
MaxClients       150 
MaxRequestsPerChild  1000 
</IfModule>
二、修改MaxClients  150 爲須要的鏈接數,如1500 
ServerLimit        1500  //鏈接數大於 256 需設置此項
MaxClients         1500 
三、保存退出。從新啓動http 服務:
/etc/rc.d/init.d/httpd restart
檢查方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
使用httpd -l 檢查Apache的工做模式,如列出prefork.c,則檢查httpd.conf中的<IfModuleprefork.c>模塊設置是否知足業務需求
備註    StartServers    //默認開啓進程數
MinSpareServers    //最小開啓進程數
MaxSpareServers    //最大開啓進程數
MaxClients    //最大鏈接數
MaxRequestsPerChild    //每一個子進程處理的請求數量
ServerLimit    //系統最大鏈接數
2.4其餘安全選項
2.4.1刪除缺省文件
基線名稱    刪除缺省文件(基礎項)
基線編號    Tophant-Apache-9
基線說明    刪除缺省安裝的無用文件。
配置方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
一、刪除缺省HTML文件,位置爲apache2/htdocs下的默認目錄及文件;
二、刪除缺省的CGI腳本,位置爲apache2/cgi-bin目錄下的全部文件;
三、刪除Apache說明文件,位置爲apache2/manual目錄。
檢查方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
檢查以下目錄中的文件是否存在:
缺省HTML文件, 缺省的CGI腳本,Apache說明文件。
備註    根據安裝步驟不一樣和版本不一樣,某些目錄或文件可能不存在或位置不一樣。
2.4.2設置隱藏Apache版本號
基線名稱    設置隱藏Apache版本號(基礎項)
基線編號    Tophant-Apache-10
基線說明    隱藏Apache的版本號及其它敏感信息。
配置方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
修改httpd.conf配置文件:
ServerSignature Off 
ServerTokens Prod
檢查方法    參考配置方法:檢查ServerSignature Off、ServerTokens Prod是否進行配置。
備註    ServerSignature    //服務器標示
ServerTokens    // http頭部返回的apache版本信息
2.4.3配置錯誤頁面處理
基線名稱    配置錯誤頁面處理(基礎項)
基線編號    Tophant-Apache-11
基線說明    Apache默認的錯誤頁面會泄露系統及應用的敏感信息。所以須要採用自定義錯誤頁面的方式防止信息泄露的問題。
配置方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
一、修改httpd.conf配置文件:
ErrorDocument 400 /custom400.html
ErrorDocument 401 /custom401.html
ErrorDocument 403 /custom403.html
ErrorDocument 404 /custom404.html
ErrorDocument 405 /custom405.html 
ErrorDocument 500 /custom500.html
其中,Customxxx.html爲要設置的錯誤頁面。須要手動創建相關文件並自定義內容。
二、從新啓動Apache服務
檢查方法    如下操做使用root帳號或者有httpd修改權限帳號登陸
一、查看httpd.conf文件,查看定義的錯誤文件
二、在瀏覽器中瀏覽相關文件,檢查是否泄漏了敏感信息
備註    ErrorDocument    //錯誤文件
2.4.4更新補丁
基線名稱    更新補丁(建議項)
基線編號    Tophant-Apache-12
基線說明    在不影響業務的狀況下,升級解決高危漏洞,並且該補丁要經過實驗測試。
配置方法    訪問http://httpd.apache.org/download.cgi,查看最新的apache版本,在實驗室測試經過的前提下,編譯升級apache,解決高危漏洞。
檢查方法    使用安全漏洞掃描工具對Apache中間件進行掃描,或經過搜索引擎檢索當前版本脆弱性來檢查是否存在高危安全漏洞。

中間件安全加固配置-IIShtml

1.概述
1.1適用範圍
本配置基線適用於IIS系列中間件,主要涉及IIS中間件安全配置方面的基本要求,用於指導安全例行工做、新系統入網安全檢查等場合。
1.2目標
根據目前IIS的安全現狀,結合相關規範性文件指引,制定適合的基線配置規範。
規範性引用文件:
GB/T 28448-2012 《信息安全技術 信息系統安全等級保護測評要求》
GB/T 28453-2012 《信息安全技術 信息系統安全管理評估要求》
GB/T 25063-2010 《信息安全技術 服務器安全測評要求》
GB/Z 24364-2009 《信息安全技術 信息安全風險管理指南》
GB/T 22239-2008 《信息安全技術 信息系統安全等級保護基本要求》
GB/T 20270-2006 《信息安全技術 網絡基礎安全技術要求》
GB/T 20271-2006 《信息安全技術 信息系統通用安全技術要求》
GB/T 20269-2006 《信息安全技術 信息系統安全管理要求》
YD/T 2701-2014  《電信網和互聯網安全防禦基線配置要求及檢測要求》
1.3實施策略
結合網絡和信息系統建設狀況,考慮安全配置項影響的範圍,結合以往工做經驗,提出以下安全項目實施策略:
基礎項:實施安全基線可以明顯提高安全水平,實施風險小,可操做性強。
建議項:實施安全基線可以提高必定安全水平,具備必定風險,可操做性較強。
序號    配置類別    安全基線項目名稱    實施策略
1    帳號管理    避免IIS帳號共享    基礎項
2    帳號管理    IIS無關帳號清理    基礎項
3    受權    IIS用戶權限指派    基礎項
4    日誌配置    啓用日誌功能    基礎項
5    日誌配置    更改日誌存放路徑    基礎項
6    日誌配置    記錄安全事件    基礎項
7    訪問控制    訪問權限    基礎項
8    安裝路徑管理    更改IIS默認安裝路勁    基礎項


2.安全配置基線標準
2.1帳號管理
2.1.1避免IIS帳號共享
基線名稱    避免IIS帳號共享(基礎項)
基線編號    Tophant-IIS-1
基線說明    應按照用戶分配賬號。避免不一樣用戶間共享賬號。避免用戶賬
號和設備間通訊使用的賬號共享(對於 IIS 用戶定義分爲兩個
層次:1、 IIS 自身操做用戶,2、 IIS 發佈應用訪問用戶)
配置方法    1、進入「控制面板-> 管理工具-> 計算機管理」 ,在「系統
工具-> 本地用戶和組」:根據系統的要求,設定不一樣的賬戶
和賬戶組. 對應設置 IIS 系統管理員的權限。
2、進入 IIS 管理器-> 相應網站「屬性」 -> 「目錄安全性」
-> 「身份訪問及訪問控制」:其中分爲「匿名訪問身份」 及
「基本(Basic )驗證」。「基本(Basic )驗證」包含:
「 集成 windows 身份驗證」、「 Windows 域服務器的摘要身
份驗證」、「基自己份驗證」、「 .NET Passport 身份驗證」;
可依據業務應用安全特性,相應配置。
檢查方法    根據業務需求查看上述設置是否合理。
備註    
2.1.2IIS無關賬號清理
基線名稱    IIS無關賬號清理(基礎項)
基線編號    Tophant-IIS-2
基線說明    應刪除或鎖定與系統服務運行、維護等工做無關的賬號。
配置方法    進入「控制面板-> 管理工具-> 計算機管理」 ,在「系統工
具-> 本地用戶和組」:刪除或鎖定與設備運行、維護等與工
做無關的賬號。
檢查方法    根據業務需求查看賬號設置狀況。
備註    
2.2受權
2.2.1IIS用戶權限指派
基線名稱    IIS用戶權限指派(基礎項)
基線編號    Tophant-IIS-3
基線說明    在系統權限配置能力內,根據用戶的業務須要,配置其所需的
最小權限(對於 IIS 用戶定義分爲兩個層次:1、 IIS 自身操
做用戶, 2、 IIS 發佈應用訪問用戶;系統權限的配置基於
上述兩方面考慮)
配置方法    目錄的訪問權限:已經設置成 Web 目錄的文件夾,能夠經過操
做 Web 站點屬性頁面實現對 www 目錄訪問權限的控制,而該目
錄下的全部文件和子文件夾都將繼承這些安全性。 www 服務除
了提供 NTFS 文件系統提供的權限外,還提供讀取權限,容許
用戶讀取或下載 WWW 目錄中的文件;執行權限,容許用戶運行
www 目錄下的程序和腳本。
啓動 ISM(Internet 服務器管理器) -> 啓動 Web 屬性頁面
並選擇「目錄」選項卡; -> 選擇 www 目錄; -> 選擇「編輯
屬性」中的「目錄屬性」進行設置:「腳本資源訪問」 、「讀
取」、「寫入」、「目錄瀏覽」 、「記錄訪問」、「索引資
源」。
檢查方法    查看 ISM 目錄安全屬性。
備註    
2.3日誌配置
2.3.1啓用日誌功能
基線名稱    啓用日誌功能(基礎項)
基線編號    Tophant-IIS-4
基線說明    應啓用日誌功能,記錄系統和服務運行情況。
配置方法    打開 IIS 管理工具,右擊要管理的站點,選擇「屬性」。在「 Web
Site 」選擇「啓用日誌記錄」,從下拉菜單中選擇「 Microsotf
IIS 日誌文件格式」。「W3C」日誌格式存在日誌記錄時間與服務
器時間不統一的問題,因此應儘可能採用 IIS 日誌格式。
檢查方法    查看 logs 目錄中相關日誌文件內容,應記錄完整。
備註    
2.3.2更改日誌存放路徑
基線名稱    更改日誌存放路徑(基礎項)
基線編號    Tophant-IIS-5
基線說明    更改 IIS Web 日誌默認存放路徑,加強日誌管理安全性。
配置方法    在「Internet 服務管理器」中,右擊網站目錄,選擇「屬性」 ->
「Web 站點」,選中「啓用日誌記錄」 ->「屬性」 ->「常規屬性」,輸入須要存放日誌的路徑。
檢查方法    查看日誌存放路徑設置狀況。
備註    IIS 的日誌默認存放路徑爲%WinDir%\System32\LogFiles,應將日
志存放在一個獨立的分區中,而且系統管理員要按期對該目錄進
行查看和維護,確保日誌內容不會溢出,並能夠及早的發現網絡
異常行爲。
2.3.3記錄安全事件
基線名稱    記錄安全時間(基礎項)
基線編號    Tophant-IIS-6
基線說明    應配置日誌功能,記錄與系統運行相關的安全事件。
配置方法    1、進入「控制面板-> 管理工具-> 本地安全策略」 ,在「本地
策略-> 審覈策略」中配置相應「審覈對象訪問」、「審覈目錄服
務器訪問」、「審覈系統事件」、「審覈賬號管理」 、「審覈過
程追蹤」選項。
2、運行 IIS 管理器-> 「Internet 信息服務」 -> 「應用相關
站點」屬性->「網站」 -> 「屬性」 -> 「高級」,選擇「時間」、
「日期」、「擴展屬性」是否選擇。
檢查方法    查看系統審覈和日誌設置狀況。
備註    
2.4訪問控制
2.4.1訪問權限
基線名稱    訪問權限配置(基礎項)
基線編號    Tophant-IIS-7
基線說明    根據應用須要,對 IIS 訪問源進行 IP 範圍限制。只有在容許
的 IP 範圍內的主機才能夠訪問 WWW 服務。
配置方法    開始-> 管理工具->Internet 信息服務(IIS) 管理器選擇相應
的站點,而後右鍵點擊「屬性」,進入「目錄安全性」頁框,
點擊「IP 地址訪問控制」,勾選「受權訪問」,輸入受權的 IP
地址或地址段。
檢查方法    查看 logs 目錄中相關日誌文件內容,應記錄完整。
備註    查看 IIS 的訪問控制設置狀況。

2.5IIS安裝路徑管理
2.5.1更改IIS默認安裝路徑
基線名稱    啓用日誌功能(基礎項)
基線編號    Tophant-IIS-8
基線說明    更改 IIS 默認安裝路徑,加強 Web 服務安全性。
配置方法    1、 管理工具->Internet 信息服務(IIS)管理器->網站->""網站->右鍵點擊"屬性"->主目錄->更改默認本地路徑
'$WINDISK'"\inetpub\wwwroot\";
2、 更改或刪除以下默認安裝路徑的映射目錄。
'$WINDISK'"\inetpub\iissamples\"
'$WINDISK'"\inetpub\scripts\"
'$WINROOT'"\system32\inetsrv\adminsamples\"
'$WINROOT'"\system32\inetsrv\iisadmpwd\"
'$WINROOT'"\system32\inetsrv\iisadmin\"
'$WINROOT'"\help\iishelp\"
'$WINDISK'"\Program Files\Common Files\System\mSadc\"
'$WINDISK'"\ProgramFiles\CommonFiles\System\msadc\Sam
ples\"
'$WINDISK'"\inetpub\"
'$WINROOT'"\WeB\printers\"
檢查方法    管理工具->Internet 信息服務(IIS)管理器->網站->"
目標"網站->右鍵點擊"屬性"->主目錄,是否更改默認安裝路

中間件安全加固配置-Nginxjava

1.概述
1.1適用範圍
本配置基線適用於NGINX 1.14.0,主要涉及NGINX中間件安全配置方面的基本要求,用於指導安全例行工做、新系統入網安全檢查等場合。
1.2規範依據
根據目前NGINX中間件安全現狀,結合相關規範性文件指引,制定適合的基線配置規範。
規範性引用文件:
GB/T28448-2012《信息安全技術信息系統安全等級保護測評要求》
GB/T28453-2012《信息安全技術信息系統安全管理評估要求》
GB/T25063-2010《信息安全技術服務器安全測評要求》
GB/Z24364-2009《信息安全技術信息安全風險管理指南》
GB/T22239-2008《信息安全技術信息系統安全等級保護基本要求》
GB/T20270-2006《信息安全技術網絡基礎安全技術要求》
GB/T20271-2006《信息安全技術信息系統通用安全技術要求》
GB/T20269-2006《信息安全技術信息系統安全管理要求》
YD/T2701-2014《電信網和互聯網安全防禦基線配置要求及檢測要求》




2.安全配置基線標準
2.1初始設置
2.1.1安裝
2.1.1.1安裝NGINX
基線名稱    安裝NGINX
基線編號    Tophant-NGINX-1
基線說明    建議在大多數狀況下使用供應商提供的NGINX源文件
配置方法    使用命令:yum install nginx -y
檢查方法    使用命令:nginx–v
備註    使用供應商提供的NGINX包的主要好處是:
1.易於安裝
2.依賴性解決方案
3.提升維護和安全補丁的有效性

2.1.1.2從源代碼安裝NGINX
基線名稱    從源碼安裝NGINX
基線編號    Tophant-NGINX-2
基線說明    直接從源安裝NGINX容許您在不使用包管理器的狀況下安裝NGINX。
配置方法    安裝取決於操做系統平臺。有關源代碼構建,請參閱NGINX文檔「從源代碼構建nginx」。
檢查方法    使用命令:nginx -v
備註    從源代碼安裝NGINX容許您經過最小化模塊來強化NGINX實例。使用包管理器安裝時,NGINX沒法刪除模塊。

2.1.2配置軟件更新
2.1.2.1配置包管理器
基線名稱    配置包管理器
基線編號    Tophant-NGINX-3
基線說明    系統須要正確配置程序包倉庫,以確保它們接收最新的修補程序和更新。
配置方法    根據軟件供應商配置軟件包管理器倉庫。
檢查方法    使用命令:yum repolis -v nginx
備註    若是系統的軟件包管理器倉庫配置錯誤,則可能沒法識別重要的修補程序,或者惡意存儲庫可能會引入受損軟件。

2.1.2.2安裝最新的軟件包
基線名稱    安裝最新的軟件包
基線編號    Tophant-NGINX-4
基線說明    因爲發現了新的安全漏洞,相應的修復程序由您的NGINX軟件包提供商實施。安裝最新的軟件版本可確保系統上提供這些修復程序。
配置方法    使用命令:yum update nginx -y
檢查方法    使用命令:yum info nginx
備註    最新的軟件能夠最大限度地防止安全漏洞,例如惡意代碼的執行。

2.2基本配置
2.2.1最小化NGINX模塊
2.2.1.1僅安裝所需模塊
基線名稱    僅安裝所需模塊
基線編號    Tophant-NGINX-5
基線說明    Nginx默認安裝附帶了多個模塊,但有些模塊不是必須的,需根據實際狀況,安裝必要的模塊。
配置方法    請參閱NGINX模塊文檔以肯定安裝所需的模塊。能夠使用configure命令刪除模塊。
檢查方法    使用命令:nginx -V
備註    最大限度地減小NGINX內置的功能能夠減小服務器的漏洞,從而下降被攻擊的可能性。

2.2.1.2禁止安裝HTTPWebDAV模塊
基線名稱    禁止安裝HTTPWebDAV模塊
基線編號    Tophant-NGINX-6
基線說明    http_dav_module支持RFC4918定義的Web分佈式創做和版本控制的HTTP擴展(WebDAV)。這能夠在Web服務器上啓用基於文件的操做,例如在服務器上建立,刪除,更改和移動文件的功能。大多數現代架構已將此功能替換爲基於雲的對象存儲,在這種狀況下,不該安裝該模塊。
配置方法    從源代碼從新編譯nginx,配置--withhttp_dav_module參數。
檢查方法    使用命令:nginx –V 2>&1 | grep http_dav_module
備註    WebDAV功能爲利用Web服務器開闢了一條沒必要要的路徑。經過錯誤配置WebDAV操做,攻擊者可能可以訪問和操做服務器上的文件。

2.2.1.3禁用gzip功能模塊
基線名稱    禁用gzip功能模塊
基線編號    Tophant-NGINX-7
基線說明    應禁用壓縮功能,以防止成功執行某些類型的攻擊。
配置方法    從源代碼從新編譯nginx,配置--without-http_gzip_module參數
檢查方法    命令:nginx –V | grep 'http_gzip_module\|http_gzip_static_module'
備註    禁用壓縮,能夠減小某些攻擊行爲。

2.2.1.4禁用自動索引模塊
基線名稱    禁用自動索引模塊
基線編號    Tophant-NGINX-8
基線說明    自動索引模塊處理以斜槓字符結尾的請求。此功能啓用了目錄列表,這在攻擊者偵察中頗有用,所以應禁用它。
配置方法    將全部autoindex指令的值設置爲off,或刪除這些指令。
檢查方法    要肯定是否禁用了autoindex模塊,請搜索NGINX配置文件(nginx.conf和任何包含的配置文件)以獲取autoindex指令:
egrep -i '^\s*autoindex\s+' /etc/nginx/nginx.conf
egrep -i '^\s*autoindex\s+' /etc/nginx/conf.d/*
備註    自動目錄列表可能會顯示對攻擊者有幫助的信息,例如命名約定和目錄路徑。

2.2.2帳戶安全
2.2.2.1配置NGINX使用非特權專用服務賬戶運行
基線名稱    配置NGINX使用非特權專用服務賬戶運行
基線編號    Tophant-NGINX-9
基線說明    nginx用戶指令指定nginxworker進程運行在哪一個用戶賬戶下。確保使用非特權專用服務賬戶是一種深度防護措施,以限制攻擊者破壞賬戶的行爲。
配置方法    1.爲nginx用戶添加一個系統賬戶,主目錄爲/var/cache/nginx,shell爲/sbin/nologin
user add nginx -r -g nginx -d /var/cache/nginx -s /sbin/nologin
2.而後經過添加user指令將nginx用戶添加到/etc/nginx/nginx.conf,以下所示:
user nginx
檢查方法    使用命令:grep "user[^;]*;" /etc/nginx/nginx.conf
備註    在非特權專用服務賬戶下運行Web服務器有助於下降在運行Web服務的用戶賬戶受到威脅時橫向移動到其餘服務或進程的風險。

2.2.2.2鎖定NGINX服務帳戶
基線名稱    鎖定NGINX服務帳戶
基線編號    Tophant-NGINX-10
基線說明    nginx用戶賬戶應該有一個有效的密碼,但該賬戶應該被鎖定。注意:若是使用其餘賬戶運行nginx,則應在審計和修復過程當中將該賬戶的名稱替換爲nginx。
配置方法    使用命令:passwd -l nginx
檢查方法    使用命令:passwd -S nginx,結果應相似於如下之一:
Nginx LK 2010-01-280999997 -1(Password locked.)
nginx L 07/02/2012 -1 -1 -1 -1
備註    應該鎖定nginx用戶賬戶以防止登陸並防止有人使用密碼將用戶切換到nginx。通常來講,任何人都不須要su做爲nginx,當有須要時,應該使用sudo代替,這不須要nginx賬戶密碼。

2.2.2.3設置NGINX賬戶的shell無效
基線名稱    設置NGINX賬戶的shell無效
基線編號    Tophant-NGINX-11
基線說明    nginx賬戶不該該具備登陸功能,所以應該爲賬戶設置/sbin/nologinshell。
配置方法    使用命令:chsh -s /sbin/nologin nginx
檢查方法    使用命令:grep nginx/etc/passwd
備註    nginx的賬戶應僅用於nginx服務,而且不須要具備登陸功能。這能夠防止攻擊者破壞賬戶以使用它登陸。

2.2.3權限
2.2.3.1配置NGINX目錄和文件的屬主
基線名稱    配置NGINX目錄和文件的屬主爲root
基線編號    Tophant-NGINX-12
基線說明    /etc/nginx目錄及其文件的屬主和屬組應爲root
配置方法    使用命令:chown -R root:root /etc/nginx
檢查方法    使用命令:stat /etc/nginx
備註    能夠減小未經受權的用戶修改nginx配置文件的可能性

2.2.3.2設置訪問限制
基線名稱    設置訪問限制
基線編號    Tophant-NGINX-13
基線說明    /etc/nginx目錄上的權限應該強制執行最小權限原則。
配置方法    使用以下命令:
find /etc/nginx -type d | xargs chmod 750
find /etc/nginx -type f | xargs chmod 640
檢查方法    使用以下命令:
find /etc/nginx -type d | xargs ls -ld
find /etc/nginx -type f | xargs ls -l
備註    這可確保只有須要訪問配置文件的用戶才能查看它們,從而防止未經受權的訪問。其餘用戶須要使用sudo才能訪問這些文件。

2.2.3.3配置NGINX的PID權限
基線名稱    配置NGINX的PID權限
基線編號    Tophant-NGINX-14
基線說明    PID文件存儲nginx進程的主進程ID。這個文件應該受到保護,以避免未經受權的修改。
配置方法    使用以下命令:
chown root:root /var/run/nginx.pid
chown 644 /var/run/nginx.pid
檢查方法    使用命令:ls -l /var/run/nginx.pid
備註    應將PID文件的權限設置爲644,能夠防止未經受權的用戶修改PID文件

2.2.3.4禁用核心轉儲
基線名稱    禁用核心轉儲
基線編號    Tophant-NGINX-15
基線說明    核心轉儲是內存的快照。working_directory用於指定NGINX嘗試建立核心轉儲的目錄。若是NGINX用戶沒法寫入目錄,則將禁用核心轉儲。
配置方法    從NGINX配置文件中刪除working_directory指令
檢查方法    使用命令:grep working_directory /etc/nginx/nginx.conf
備註    核心轉儲可能包含系統上其餘賬戶沒法訪問的敏感信息。

2.2.4網絡配置
2.2.4.1配置NGINX監聽的端口
基線名稱    配置NGINX監聽的端口
基線編號    Tophant-NGINX-16
基線說明    能夠將NGINX配置爲偵放任何端口,但應將其配置爲僅偵聽受權端口
配置方法    在配置文件中刪除或者註釋掉未受權的監聽的端口
檢查方法    使用命令:grep -ir listen /etc/nginx
備註    將偵聽端口限制爲僅受權的端口有助於確保經過使用nginx不會運行未經受權的服務。

2.2.4.2拒絕未知主機名的請求
基線名稱    拒絕未知主機名的請求
基線編號    Tophant-NGINX-17
基線說明    主機標頭應該是已知主機預約義白名單的一部分,這樣能夠阻止對其餘主機的訪問。您應該將主機頭視爲要驗證的另外一個輸入,由於它是由用戶代理定義的。
配置方法    確保nginx的配置文件中包含以下指令:
server{
return404;
}
檢查方法    使用命令:curl -k -v https://127.0.0.1 -H 'Host: invalid.host.com'
備註    將特定主機列入白名單並阻止對全部其餘主機的訪問,有助於緩解針對服務器的注入攻擊。

2.2.4.3配置keepalive_timeout
基線名稱    配置keepalive_timeout
基線編號    Tophant-NGINX-18
基線說明    瀏覽器都利用持久鏈接來提升Web性能。Keepalive_timeout限制了持久鏈接的時間,建議將keepalive_timeout設置爲10或者更小,但不能爲0
配置方法    配置文件中設置:keepalive_timeout 10
檢查方法    查看nginx的配置文件,檢查keepalive_timeout的值。
備註    在服務器端設置keepalive_timeout有助於緩解創建過多持久鏈接的拒絕服務攻擊,從而耗盡服務器資源。

2.2.5信息披露
2.2.5.1配置server_token
基線名稱    配置server_token
基線編號    Tophant-NGINX-19
基線說明    server_tokens指令負責在錯誤頁面和服務器HTTP響應頭字段中顯示NGINX版本號和操做系統版本。不該顯示此信息。
配置方法    在配置文件中添加以下指令:
server{
...
server_tokens  off;
...
}
檢查方法    使用命令:curl -I 127.0.0.1 | grep -i server
備註    攻擊者能夠使用這些響應標頭在網站上進行偵察,而後針對與底層技術相關的特定已知漏洞進行攻擊。

2.2.5.2配置默認錯誤頁面和index.html
基線名稱    配置默認錯誤頁面和index.html
基線編號    Tophant-NGINX-20
基線說明    NGINX的默認錯誤頁面和index.html頁面會顯示服務器信息。應刪除或修改這些默認頁面。
配置方法    編輯/usr/share/nginx/html/index.html和usr/share/nginx/html/50x.html並刪除任何引用NGINX的行。
檢查方法    使用以下命令:
grep -i nginx /usr/share/nginx/html/index.html
grep -i nginx /usr/share/nginx/html/50x.html
備註    經過收集有關服務器的信息,攻擊者能夠針對其已知漏洞進行攻擊

2.2.5.3禁用隱藏文件服務
基線名稱    禁用隱藏文件服務
基線編號    Tophant-NGINX-21
基線說明    禁用隱藏文件是一種深度防護機制,有助於防止意外泄露敏感信息
配置方法    編輯ngixn.conf文件,添加以下指令:
location ~ /\. { deny all; return 404; }
檢查方法    使用命令:grep location /etc/nginx/nginx.conf
備註    禁用隱藏文件可防止攻擊者引用可能具備敏感信息的隱藏文件,例如.git文件。

2.2.5.4禁用NGINX反向代理的默認響應信息
基線名稱    禁用NGINX反向代理的默認響應信息
基線編號    Tophant-NGINX-22
基線說明    Nginx反向代理能夠傳遞應用程序使用的底層技術信息。
配置方法    編輯nginx.conf文件,添加以下指令:
location/docs{
....
proxy_hide_header X-Powered-By;
proxy_hide_header Server;
....
}
檢查方法    使用命令:grep proxy_hide_header /etc/nginx/nginx.conf
備註    攻擊者能夠使用這些響應標頭在網站上進行偵察,而後針對與底層技術相關的特定已知漏洞進行攻擊。刪除這些標頭能夠下降針對性攻擊的可能性。

2.3日誌配置
2.3.1啓用詳細的日誌記錄
基線名稱    啓用詳細的日誌記錄
基線編號    Tophant-NGINX-23
基線說明    應配置系統日誌記錄以知足組織安全和隱私策略。啓用詳細日誌記錄以包含有關事件,事件源,時間戳和用戶的信息可能有助於事件響應活動。
配置方法    參考連接:http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format
檢查方法    查看nginx.conf文件中關於日誌格式的定義
備註    執行詳細日誌記錄可確保事件響應人員,審計人員和其餘人可以清楚地查看服務器上發生的活動。

2.3.2啓用訪問日誌
基線名稱    啓用訪問日誌
基線編號    Tophant-NGINX-24
基線說明    每一個核心站點都應該開啓訪問日誌,默認爲開啓
配置方法    能夠根據須要使用不一樣的日誌文件位置,相似以下:
access_log /var/log/nginx/host.access.log main;
檢查方法    使用命令:grep -ir access_log /etc/nginx
備註    訪問日誌可以記錄訪問者的詳細信息。

2.3.3啓用錯誤日誌
基線名稱    啓用錯誤日誌
基線編號    Tophant-NGINX-25
基線說明    應記錄應用程序的全部錯誤。
配置方法    編輯/etc/nginx/nginx.conf以使error_log指令存在且未註釋掉。應將error_log配置爲您選擇的日誌記錄位置。配置應相似於如下內容:
error_log /var/log/nginx/error.loginfo;
檢查方法    使用命令:grep error_log /etc/nginx/nginx.conf
備註    錯誤記錄還有助於識別應用程序可能存在的問題。

2.3.4配置錯誤日誌被髮送到遠程syslog服務器
基線名稱    配置錯誤日誌被髮送到遠程syslog服務器
基線編號    Tophant-NGINX-26
基線說明    集中式日誌管理有助於確保日誌在法律上是合理的,有助於審計和事故調查。
配置方法    將如下行添加到服務器配置文件中,192.168.2.1應替換爲中央日誌服務器的位置。
error_log syslog:server=192.168.2.1info
檢查方法    使用命令:grep -ir syslog /etc/nginx
備註    集中式日誌服務器經常使用於將日誌與潛在的攻擊模式關聯起來。若是不使用集中式日誌解決方案,而且系統(及其日誌)被認爲受到了危害,則可能不容許使用日誌做爲證據。

2.3.5配置訪問日誌被髮送到遠程syslog服務器
基線名稱    配置訪問日誌被髮送到遠程syslog服務器
基線編號    Tophant-NGINX-27
基線說明    集中式日誌管理有助於確保日誌在法律上是合理的,有助於審計和事故調查。
配置方法    將如下行添加到服務器配置文件中,192.168.2.1應替換爲中央日誌服務器的位置。
access_log syslog:server=192.168.2.1,facility=local7,tag=nginx,severity=info
combined;
檢查方法    使用命令:grep -ir syslog /etc/nginx
備註    集中式日誌服務器經常使用於將日誌與潛在的攻擊模式關聯起來。若是不使用集中式日誌解決方案,而且系統(及其日誌)被認爲受到了危害,則可能不容許使用日誌做爲證據。

2.4加密配置
2.4.1配置HTTP被重定向到HTTPS
基線名稱    配置HTTP被重定向到HTTPS
基線編號    Tophant-NGINX-28
基線說明    瀏覽器和客戶端經過利用HTTPS與服務器創建加密鏈接。利用HTTP的請求未加密。應該重定向未加密的請求,以便對它們進行加密。Web服務器上的任何偵聽HTTP端口都應重定向到使用加密的服務器配置文件。默認HTTP(未加密)端口爲80。
配置方法    在nginx.conf文件中,添加以下指令:
server{
listen 80;
server_name  cisecurity.org;
return  301  https://$host$request_uri;
}
檢查方法    查看nginx.conf文件,驗證是否有如下配置:
server{
listen 80;
server_name  cisecurity.org;
return 301 https://$host$request_uri;
}
備註    將用戶代理流量重定向到HTTPS有助於確保全部用戶流量都已加密。

2.4.2安裝可信證書
基線名稱    安裝可信任證書
基線編號    Tophant-NGINX-29
基線說明    證書及其信任鏈是將web服務器標識爲合法且受信任所必需的。證書頒發機構驗證web服務器的身份,並確認您是該web服務器域名的全部者。
配置方法    示例以下:
1.使用命令openssl req -new -newkey rsa:2048 -keyout nginx.key -out nginx.csr在交互界面輸入信息:
Country Name (2 letter code) [XX]: Your Country
State or Province Name (full name) []: Your State
Locality Name (eg, city) [Default City]: Your City
Organization Name (eg, company) [Default Company Ltd]: Your City
Organizational Unit Name (eg, section) []: Your Organizational Unit
Common Name (eg, your name or your server's hostname) []: Your server's DNS
name
Email Address []: Your email address
2.在nginx.conf文件中添加以下指令:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/nginx.key;
...
}
3.重啓nginx服務
參考:
http://nginx.org/en/docs/http/configuring_https_servers.html#chains
https://www.digicert.com/csr-ssl-installation/nginx-openssl.htm
https://support.globalsign.com/customer/portal/articles/1290470-installcertificate---nginx
檢查方法    使用命令:grep -ir ssl_certificate /etc/nginx/
備註    若是沒有在web服務器上安裝證書,瀏覽器會將web服務器標記爲不受信任。

2.4.3配置私鑰權限
基線名稱    配置私鑰權限
基線編號    Tophant-NGINX-30
基線說明    應該經過基於最小特權原則限制訪問來保護服務器的私鑰免受未受權訪問。
配置方法    使用命令:sudo chmod 400 /etc/nginx/nginx.key
檢查方法    使用命令:ls -l /etc/nginx/nginx.key
備註    服務器的私鑰文件權限應該設置爲400,這確保只有私鑰文件的全部者才能訪問它。

2.4.4配置使用TLS1.2協議
基線名稱    配置使用新版的TLS協議
基線編號    Tophant-NGINX-31
基線說明    使用TSL1.2協議,能夠確保用戶可以利用強大的安全功能並保護他們免受不安全的舊協議的侵害。
配置方法    參考:
https://webkit.org/blog/8462/deprecation-of-legacy-tls-1-0-and-1-1-versions/
https://www.cloudflare.com/learning-resources/tls-1-3/
檢查方法    使用命令:grep -ir ssl_protocol /etc/nginx
備註    TLS1.2利用了多種安全功能,包括現代密碼套件,完美的前向安全性和通過身份驗證的加密。

2.4.5禁用弱密碼
基線名稱    禁用弱密碼
基線編號    Tophant-NGINX-32
基線說明    應使用ssl_ciphers指令配置Web服務器上的可用密碼,並使用proxy_ssl_ciphers指令配置代理的可用密碼。
配置方法    參考:
https://ssllabs.com
https://mozilla.github.io/server-side-tls/ssl-config-generator/
http://nginx.org/en/docs/http/ngx_http_ssl_module.html
https://www.owasp.org/index.php/Testing_for_SSL-TLS_%28OWASP-CM-001%29
https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/
https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/
檢查方法    使用命令:
grep -ir ssl_ciphers /etc/nginx/
grep -ir proxy_ssl_ciphers /etc/nginx
備註    弱密碼可能會使舊版用戶代理以易受攻擊的方式鏈接到網站,從而危及您網站或用戶的安全。

2.4.6配置自定義Diffie-Hellman參數
基線名稱    配置自定義Diffie-Hellman參數
基線編號    Tophant-NGINX-33
基線說明    應使用自定義Diffie-Hellman(DH)密鑰交換參數。
配置方法    使用命令:
mkdir /etc/nginx/ssl
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
chmod 400 /etc/nginx/ssl/dhparam.pem
檢查方法    使用命令:grep ssl_dhparam /etc/nginx/nginx.conf
備註    默認狀況下,NGINX將爲PFS密碼生成1024位RSA密鑰;應該使用更強的替代方案來爲受加密保護的數據提供更好的保護。

2.4.7啓用OCSP
基線名稱    啓用OCSP
基線編號    Tophant-NGINX-34
基線說明    OCSP容許用戶的瀏覽器或其餘用戶代理驗證它所看到的證書沒有被撤銷。O並確保服務器以最適合網站性能和安全需求的方式將這些信息顯示給用戶的瀏覽器。
配置方法    編輯nginx.conf文件,添加以下指令:
server {
ssl_stapling on;
ssl_stapling_verify on;
}
檢查方法    使用命令:grep -ir ssl_stapling /etc/nginx
備註    OCSP協議能夠保護用戶不會訪問被認爲會泄露私鑰的網站。若是私鑰被泄露,則攻擊者可能可以得到對用戶發送的加密數據的未受權訪問。

2.4.8啓用HSTS
基線名稱    啓用HSTS
基線編號    Tophant-NGINX-35
基線說明    HTTP嚴格傳輸安全性(HSTS)標頭指示用戶代理如何與Web服務器通訊。HSTS標頭確保瀏覽器內置嚴格的傳輸安全策略。
配置方法    配置文件中添加以下指令:
server {
add_header Strict-Transport-Security "max-age=15768000;";
}
檢查方法    使用命令:grep -ir Strict-Transport-Security /etc/nginx
備註    HSTS標頭有助於保護服務器用戶不經過未加密的協議訪問服務器。此標頭有助於防止HTTP降級攻擊。

2.4.9啓用HTTP公鑰鎖定
基線名稱    啓用HTTP公鑰鎖定
基線編號    Tophant-NGINX-36
基線說明    HTTP公鑰鎖定容許站點準確指定瀏覽器或其餘用戶代理應接受的證書。HTTP公鑰綁定容許使用備份指紋來安排證書輪詢,以確保用戶代理同時存儲了兩個證書。應啓用HTTP公鑰固定。
配置方法    在服務器配置文件中添加以下指令:
add_header Public-Key-Pins 'pinsha256="base64+primary==InsertPrimaryCertificateSHA256FingerPrintHere"; pinsha256="base64+backup==InsertBackupCertificateSHA256FingerPrintHere"; maxage=5184000;
檢查方法    使用命令:grep -ir Public-Key-Pins /etc/nginx
備註    HTTP公鑰固定有助於防止用戶代理成爲僞造證書的受害者,例如中間人攻擊中的人。

2.4.10禁用會話恢復
基線名稱    禁用會話恢復
基線編號    Tophant-NGINX-37
基線說明    應禁用會話恢復,以便實現完美正向保密。
配置方法    配置文件中添加以下指令:
ssl_session_tickets off;
檢查方法    使用命令:grep -ir ssl_session_tickets /etc/nginx
備註    完美的正向保密是一種加密機制,即便服務器的私鑰被泄露,也能夠使過去的會話密鑰不受損害

2.4.11使用HTTP/2.0
基線名稱    使用HTTP/2.0
基線編號    Tophant-NGINX-38
基線說明    HTTP/2.0是HTTP協議的優化且更安全的版本.
配置方法    在配置文件中添加以下指令:
server{
listen 443 ssl http2;
}
檢查方法    使用命令:grep -ir http2 /etc/nginx
備註    HTTP/2.0經過徹底多路複用帶來了性能優點和安全優點。HTTP/2.0改進了密碼套件需求和黑名單。它還禁用會話從新協商和TLS壓縮。這有助於防範犯罪等漏洞,並確保咱們擁有更強大的加密技術。

2.5請求過濾和限制
2.5.1訪問控制
2.5.1.1配置基於ip的限制
基線名稱    配置基於ip的限制
基線編號    Tophant-NGINX-39
基線說明    基於ip的限制做爲一種深度防護機制。它容許將應用程序的合法路徑列入白名單,並顯式地拒絕惡意的IP地址。
配置方法    在配置文件中使用allow指令添加全部合法ip地址,使用deny指令添加被隱式拒絕的全部IP地址。
檢查方法    查看配置文件中是否存在allow和deny指令
備註    建議隱式拒絕全部流量,而且只容許合法用戶訪問網站。

2.5.1.2配置HTTPmethods
基線名稱    配置HTTPmethods
基線編號    Tophant-NGINX-40
基線說明    HTTPmethods容許在指定路徑上從Web服務器請求不一樣的操做。應啓用必要的方法。
配置方法    在nginx.conf文件中,僅容許必須的方法,配置實例以下:
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 444;
}
檢查方法    使用curl之類的工具向每一個不該支持的方法發送請求(例如DELETE),並將輸出與支持的方法(例如GET)進行比較。
備註    大多數網站只須要GET、POST和HEAD方法就能夠正常運行。Web應用程序可能還須要其餘請求類型(例如DELETE)。爲了縮小攻擊向量,建議只啓用所需的請求方法。

2.5.2請求限制
2.5.2.1設置讀取客戶端報頭和正文的超時時間
基線名稱    設置讀取客戶端報頭和正文的超時時間
基線編號    Tophant-NGINX-41
基線說明    client_header_timeout和client_body_timeout指令定義服務器等待從客戶端發送標頭或正文的時間。若是客戶端未在此預約義時間範圍內發送整個標頭,則服務器將發回408請求超時錯誤。
配置方法    在配置文件中添加以下指令:
client_body_timeout 10;
client_header_timeout 10;
檢查方法    使用命令:grep -ir timeout /etc/nginx
備註    設置客戶端標頭和正文超時可幫助服務器減輕可能的拒絕服務攻擊。經過超時請求,服務器可以釋放可能正在等待正文或標題的資源。

2.5.2.2設置client_max_body_size
基線名稱    設置client_max_body_size
基線編號    Tophant-NGINX-42
基線說明    client_max_body_size指令設置容許讀取客戶端請求的請求主體的大小。這定義了請求中容許的字節數,而且等同於Content-Length請求頭字段。
配置方法    在配置文件中添加以下指令:
client_max_body_size 100K
檢查方法    使用命令:grep -ir client_max_body_size /etc/nginx
備註    限制請求主體的大小有助於防止意外地將長或大的客戶端請求傳遞給應用程序以執行緩衝區溢出攻擊。此值應設置得足夠低以保護應用程序,但又要足夠高,以避免干擾功能並阻止合法的請求主體。

2.5.2.3設置large_client_header_buffers
基線名稱    設置large_client_header_buffers
基線編號    Tophant-NGINX-43
基線說明    large_client_header_buffers指令定義URI中使用的緩衝區的數量和大小。配置此指令時,請求不能超過此緩衝區的大小。
配置方法    在配置文件中添加以下指令:
large_client_header_buffers 2 1k
檢查方法    使用命令:grep -ir large_client_header_buffers /etc/nginx/
備註    large_client_header_buffers指令能夠幫助防止利用長URI查詢參數的緩衝區溢出攻擊。

2.5.2.4設置單IP地址的鏈接數
基線名稱    設置單IP地址的鏈接數
基線編號    Tophant-NGINX-44
基線說明    應限制從單個IP地址到服務器的最大同時鏈接數
配置方法    在配置文件中添加以下指令:
http{
limit_conn_zone$binary_remote_addr zone=limitperip:10m;
server{
limit_connlimitperip 10;
}
}
檢查方法    查看配置文件中是否有如下配置項:
http{
imit_conn_zone$binary_remote_addr zone=limitperip:10m;
server{
limit_connlimitperip 10;
}
}
備註    限制同時鏈接的數量是防止嘗試使用盡量多的服務器資源的緩慢拒絕服務攻擊的有效方法,同時還能夠幫助防止登陸頁面上的暴力攻擊。

2.5.2.5啓用速率限制
基線名稱    啓用速率限制
基線編號    Tophant-NGINX-45
基線說明    應啓用速率限制以限制IP地址在給定時間段內可能對服務器發出的請求數。應根據應用程序的需求和組織策略設置配置值。
配置方法    在配置文件中添加以下指令:
http{
limit_req_zone$binary_remote_addr zone=ratelimit:10m rate=5r/s;
server{
location/{
limit_req zone=ratelimit burst=10 nodelay;
}
}
檢查方法    查看配置文件中是否有如下配置項:
http{
limit_req_zone$binary_remote_addr zone=ratelimit:10mrate=5r/s;
server{
location/{
limit_reqzone=ratelimit burst=10 nodelay;
}
}
}
備註    速率限制能夠減輕潛在的拒絕服務攻擊。

2.5.3瀏覽器安全
2.5.3.1啓用X-Frame-Optionsheader
基線名稱    啓用X-Frame-Optionsheader
基線編號    Tophant-NGINX-46
基線說明    X-Frame-Optionsheader應設置爲容許特定網站或根本沒有網站將本地網站做爲對象嵌入其本身的內容中。
配置方法    在配置文件中添加以下指令:
add_header X-Frame-Options "SAMEORIGIN";
檢查方法    使用命令:grep -ir X-Frame-Options /etc/nginx
備註    X-Frame-Optionsheader能夠下降點擊劫持攻擊的風險。

2.5.3.2啓用X-XSS-Protectionheader
基線名稱    啓用X-XSS-Protectionheader
基線編號    Tophant-NGINX-47
基線說明    X-Xss-ProtectionHeader容許您利用基於瀏覽器的保護來防止跨站點腳本
配置方法    在配置文件中添加以下指令:
add_header X-Xss-Protection "1; mode=block";
檢查方法    使用命令:grep -ir X-Xss-Protection /etc/nginx
備註    X-Xss-Protection能夠保護瀏覽器不支持內容安全策略的用戶(一般是舊版瀏覽器),或者在沒有內容安全策略的狀況下保護用戶。

2.5.3.3啓用內容安全策略(CSP)
基線名稱    啓用內容安全策略(CSP)
基線編號    Tophant-NGINX-48
基線說明    內容安全策略容許管理員指定能夠執行容許腳本的位置,或者是否能夠執行腳本。應使用內容安全策略來提升用戶對網站的信任。
配置方法    在配置文件中添加以下指令:
add_header Content-Security-Policy "default-src 'self'";
檢查方法    使用命令:grep -ir Content-Security-Policy /etc/nginx
備註    內容安全策略可幫助組織緩解和報告跨站點腳本(XSS)攻擊。

2.5.3.4啓用Referrer策略
基線名稱    啓用Referer策略
基線編號    Tophant-NGINX-49
基線說明    當原始站點將用戶定向到另外一個站點時,會發送一個引用來識別用戶來自的URL。
配置方法    在配置文件中添加以下指令:
add_header Referrer-Policy "no-referrer";
檢查方法    使用命令:grep -r Referrer-Policy /etc/nginx
備註    若是您在URL參數中使用敏感數據(例如我的信息,用戶名和密碼或持久會話),則Referrer標頭可能會在其餘Web服務器的日誌中公開敏感數據。

中間件安全加固配置-Tomcatnode

1.概述
1.1適用範圍
本配置基線適用於Tomcat中間件,主要涉及Tomcat中間件安全配置方面的基本要求,用於指導安全例行工做、新系統入網安全檢查等場合。
在未特別說明的狀況下,均適用於全部運行Tomcat中間件系統。
1.2規範依據
根據目前Tomcat中間件安全現狀,結合相關規範性文件指引,制定適合的基線配置規範。
規範性引用文件:
GB/T 28448-2012 《信息安全技術 信息系統安全等級保護測評要求》
GB/T 28453-2012 《信息安全技術 信息系統安全管理評估要求》
GB/T 25063-2010 《信息安全技術 服務器安全測評要求》
GB/Z 24364-2009 《信息安全技術 信息安全風險管理指南》
GB/T 22239-2008 《信息安全技術 信息系統安全等級保護基本要求》
GB/T 20270-2006 《信息安全技術 網絡基礎安全技術要求》
GB/T 20271-2006 《信息安全技術 信息系統通用安全技術要求》
GB/T 20269-2006 《信息安全技術 信息系統安全管理要求》
YD/T 2701-2014  《電信網和互聯網安全防禦基線配置要求及檢測要求》

1.3實施策略
結合網絡和信息系統建設狀況,考慮安全配置項影響的範圍,結合以往工做經驗,提出以下安全項目實施策略:
基礎項:實施安全基線可以明顯提高安全水平,實施風險小,可操做性強。
建議項:實施安全基線可以提高必定安全水平,具備必定風險,可操做性較強。
序號    配置類別    基線名稱    實施策略
1    身份鑑別    配置密碼並保證複雜度    基礎項
2    訪問控制    配置Tomcat運行帳戶    基礎項
3    訪問控制    配置劃分用戶權限    基礎項
4    訪問控制    禁止目錄瀏覽    基礎項
5    訪問控制    配置使用安全的HTTP請求    基礎項
6    安全審計    配置安全日誌    基礎項
7    資源控制    設置登陸超時    基礎項
8    資源控制    設置鏈接數    建議項
9    其它安全項    刪除缺省文件    基礎項
10    其它安全項    配置錯誤頁面處理    基礎項
11    其它安全項    更新補丁    建議項

2.安全配置基線標準
2.1身份鑑別
2.1.1配置密碼並保證複雜度
基線名稱    配置密碼並保證複雜度(基礎項)
基線編號    Tophant-Tomcat-1
基線說明    口令長度至少8位,幷包括數字、小寫字母、大寫字母和特殊符號四類中至少兩類。
配置方法    配置操做:
在tomcat/conf/tomcat-user.xml配置文件中設置密碼
<user username=」tomcat」 password=」Tomcat!234」 roles=」admin」>
檢查方法    查看tomcat/conf/tomcat-users.xml配置文件。
備註    建議本地方式管理tomcat,不使用遠程登陸的方式以規避安全問題。
2.2訪問控制
2.2.1配置Tomcat運行帳戶
基線名稱    配置Tomcat運行帳戶(基礎項)
基線編號    Tophant-Tomcat-2
基線說明    應按照用戶分配賬號。避免不一樣用戶間共享賬號。避免用戶賬號和設備間通訊使用的賬號共享。檢查是否存在與工做無關的帳號。
配置方法    配置操做:
修改tomcat/conf/tomcat-users.xml配置文件,修改或添加賬號。
<user username=」tomcat」 password=」 Tomcat!234」 roles=」admin」>
檢查方法    查看tomcat/conf/tomcat-users.xml配置文件
備註    Tomcat 4.1.375.5.27和6.0.18這三個版本及之後發行的版本默認都不存在admin.xml配置文件。
2.2.2配置劃分用戶權限
基線名稱    配置劃分用戶權限(基礎項)
基線編號    Tophant-Tomcat-3
基線說明    根據用戶的業務須要,配置其所需的最小權限。
配置方法    配置操做:
編輯tomcat/conf/tomcat-user.xml配置文件,修改用戶角色權限
受權tomcat具備遠程管理權限:
<user username=」tomcat」 password=」chinamobile」
roles=」admin,manager」>
不一樣版本說明:
1、Tomcat 4.x和5.x版本用戶角色分爲:role1,tomcat,admin,manager四種。
role1:具備讀權限;
tomcat:具備讀和運行權限;
admin:具備讀、運行和寫權限;
manager:具備遠程管理權限。
Tomcat 6.0.18版本只有admin和manager兩種用戶角色,且admin用戶具備manager管理權限。
2、Tomcat 4.1.37和5.5.27版本及之後發行的版本默認除admin用戶外其餘用戶都不具備manager管理權限。
檢查方法    查看tomcat/conf/tomcat-users.xml配置文件
登陸http://ip:8080/manager/html頁面,使用tomcat賬號登陸,進行遠程管理。
備註    Manager目錄爲缺省管理目錄,若上線後不須要經過web頁面管理,可刪除此目錄,這樣更爲安全。

2.2.3禁止目錄瀏覽
基線名稱    配置劃分用戶權限(基礎項)
基線編號    Tophant-Tomcat-3
基線說明    根據用戶的業務須要,配置其所需的最小權限。
配置方法    配置操做:
編輯tomcat/conf/tomcat-user.xml配置文件,修改用戶角色權限
受權tomcat具備遠程管理權限:
<user username=」tomcat」 password=」chinamobile」
roles=」admin,manager」>
不一樣版本說明:
1、Tomcat 4.x和5.x版本用戶角色分爲:role1,tomcat,admin,manager四種。
role1:具備讀權限;
tomcat:具備讀和運行權限;
admin:具備讀、運行和寫權限;
manager:具備遠程管理權限。
Tomcat 6.0.18版本只有admin和manager兩種用戶角色,且admin用戶具備manager管理權限。
2、Tomcat 4.1.37和5.5.27版本及之後發行的版本默認除admin用戶外其餘用戶都不具備manager管理權限。
檢查方法    查看tomcat/conf/tomcat-users.xml配置文件
登陸http://ip:8080/manager/html頁面,使用tomcat賬號登陸,進行遠程管理。
備註    Manager目錄爲缺省管理目錄,若上線後不須要經過web頁面管理,可刪除此目錄,這樣更爲安全。
2.2.4配置使用安全的HTTP請求
基線名稱    配置使用安全的HTTP請求(基礎項)
基線編號    Tophant-Tomcat-5
基線說明    禁用PUT、DELETE等危險的HTTP方法
配置方法    在httpd.conf中,添加以下配置:
<LimitExcept GET POST> Deny from all< /LimitExcept>
檢查方法    參考安全配置方法查看httpd.conf中是否有相應內容
備註    
2.3安全審計
2.3.1配置安全日誌
基線名稱    配置安全日誌(基礎項)
基線編號    Tophant-Tomcat-6
基線說明    設備應配置日誌功能,對運行錯誤、用戶訪問等進行記錄,記錄內容包括時間,用戶使用的IP地址等內容。
配置方法    加入以下語句:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="common" resolveHosts="false"/>
檢查方法    如下操做使用root帳號或者有Tomcat修改權限帳號登陸
1、查看logs目錄中相關日誌文件內容
2、查看相關日誌記錄,要求對運行錯誤、用戶訪問等進行記錄,記錄內容包括時間,用戶使用的IP地址等內容。
備註    className   //必須這樣寫的參數
directory     //日誌文件放置的目錄
prefix        //日誌文件的名稱前綴
suffix        //後綴名,能夠修改
pattern       //最主要的參數
resolveHosts  //若是這個值是true,tomcat會將這個服務器IP地址經過DNS轉換爲主機名,若是是false,就直接寫服務器IP地址。
2.4資源控制
2.4.1設置登錄超時
基線名稱    設置登陸超時(基礎項)
基線編號    Tophant-Tomcat-7
基線說明    應支持帳戶登陸超時鎖定功能。超時後用戶需再次輸入密碼登陸才能進入系統。
配置方法    編輯tomcat/conf/server.xml配置文件,修改connectionTimeout參數值爲300秒,以下所示:
<Connector
port="8080" maxHttpHeaderSize="8192"maxThreads="150" 
minSpareThreads="25" maxSpareThreads="75"、
enableLookups="false" redirectPort="8443" acceptCount="100"
 connectionTimeout="300" disableUploadTimeout="true" />
檢查方法    使用管理員帳號登陸tomcat默認頁面http://ip:8080/manager/html ,300秒自動登出。
備註    爲保證Tomcat的安全,建議刪除默認管理頁面(在manager目錄),使用本地管理的方式,適用於在不得不遠程管理的狀況。
建議本地方式管理tomcat,不使用遠程登陸的方式以規避安全問題。
2.4.2設置鏈接數
基線名稱    設置登陸超時(基礎項)
基線編號    Tophant-Tomcat-7
基線說明    應支持帳戶登陸超時鎖定功能。超時後用戶需再次輸入密碼登陸才能進入系統。
配置方法    編輯tomcat/conf/server.xml配置文件,修改connectionTimeout參數值爲300秒,以下所示:
<Connector
port="8080" maxHttpHeaderSize="8192"maxThreads="150" 
minSpareThreads="25" maxSpareThreads="75"、
enableLookups="false" redirectPort="8443" acceptCount="100"
 connectionTimeout="300" disableUploadTimeout="true" />
檢查方法    使用管理員帳號登陸tomcat默認頁面http://ip:8080/manager/html ,300秒自動登出。
備註    爲保證Tomcat的安全,建議刪除默認管理頁面(在manager目錄),使用本地管理的方式,適用於在不得不遠程管理的狀況。
建議本地方式管理tomcat,不使用遠程登陸的方式以規避安全問題。
2.5其餘安全選項
2.5.1刪除缺省文件
基線名稱    刪除缺省文件(基礎項)
基線編號    Tophant-Tomcat-9
基線說明    刪除缺省安裝的無用文件。
配置方法    Manager目錄爲缺省管理目錄,若上線後不須要經過web頁面管理,可刪除此目錄,這樣更爲安全。
檢查方法    檢查有無此目錄。
備註    若不須要遠程管理時候,建議(臨時)移除此目錄,避免留下安全隱患。

2.5.2配置錯誤頁面處理
基線名稱    刪除缺省文件(基礎項)
基線編號    Tophant-Tomcat-9
基線說明    刪除缺省安裝的無用文件。
配置方法    Manager目錄爲缺省管理目錄,若上線後不須要經過web頁面管理,可刪除此目錄,這樣更爲安全。
檢查方法    檢查有無此目錄。
依據    6.2.1.4 應用安全:剩餘信息保護(S3):b)應保證系統內的文件、目錄和數據庫記錄等資源所在的存儲空間被釋放或從新分配給其餘用戶前獲得徹底清除。
備註    若不須要遠程管理時候,建議(臨時)移除此目錄,避免留下安全隱患。
2.5.3更新補丁
基線名稱    更新補丁(建議項)
基線編號    Tophant-Tomcat-11
基線說明    在不影響業務的狀況下,升級解決高危漏洞,且該補丁要經過實驗測試。
配置方法    訪問http://tomcat.apache.org/,查看最新的Tomcat版本,在實驗室測試經過的前提下,編譯升級Tomcat,以解決高危漏洞。
檢查方法    使用安全漏洞掃描工具對Tomcat中間件進行掃描,或經過搜索引擎檢索當前版本脆弱性來檢查是否存在高危安全漏洞。

中間件安全加固配置 - Weblogicmysql

1.概述
1.1適用範圍
本配置基線適用於Weblogic系列中間件,主要涉及Weblogic系列中間件安全配置方面的基本要求,用於指導安全例行工做、新系統入網安全檢查等場合。
1.2規範依據
根據目前Windows操做系統的安全現狀,結合相關規範性文件指引,制定適合的基線配置規範。
規範性引用文件:
GB/T 28448-2012 《信息安全技術 信息系統安全等級保護測評要求》
GB/T 28453-2012 《信息安全技術 信息系統安全管理評估要求》
GB/T 25063-2010 《信息安全技術 服務器安全測評要求》
GB/Z 24364-2009 《信息安全技術 信息安全風險管理指南》
GB/T 22239-2008 《信息安全技術 信息系統安全等級保護基本要求》
GB/T 20270-2006 《信息安全技術 網絡基礎安全技術要求》
GB/T 20271-2006 《信息安全技術 信息系統通用安全技術要求》
GB/T 20269-2006 《信息安全技術 信息系統安全管理要求》
YD/T 2701-2014  《電信網和互聯網安全防禦基線配置要求及檢測要求_中間件》
1.3實施策略
結合網絡和信息系統建設狀況,考慮安全配置項影響的範圍,結合以往工做經驗,提出以下安全項目實施策略:
基礎項:實施安全基線可以明顯提高安全水平,實施風險小,可操做性強。
建議項:實施安全基線可以提高必定安全水平,具備必定風險,可操做性較強。

序號    配置類別    安全基線項目名稱    實施策略
1    身份鑑別    設置密碼並保證複雜度    基礎項
2    身份鑑別    配置賬號鎖定    基礎項
3    訪問控制    設置受限賬號啓動服務    基礎項
4    訪問控制    限制目錄列表訪問    基礎項
5    安全審計    配置審覈登陸    基礎項
6    資源控制    設置登陸超時    基礎項
7    資源控制    限制應用服務器Socket鏈接數    建議項
8    其它安全項    配置錯誤頁面處理    基礎項
9    其它安全項    禁用SendServerHeader    建議項
10    其它安全項    更改默認運行端口    建議項
11    其它安全項    配置加密協議    建議項
2.安全配置基線標準
2.1身份鑑別
2.1.1設置密碼並保證複雜度
基線名稱    設置密碼並保證複雜度(基礎項)
基線編號    Tophant-WebLogic-1
基線項說明    口令長度至少8位,幷包括數字、小寫字母、大寫字母和特殊符號四類中至少兩類。密碼應至少每90天進行更換。
配置方法    版本:8.x 9.x 10.x版本
配置操做:
查看WebLogic安裝目錄下的weblogic.properties配置文件。
檢查裏面「weblogic.system.minPasswordLen=8」的配置是否符合要求。
檢查方法    查看WebLogic安裝目錄下的weblogic.properties配置文件內「weblogic.system.minPasswordLen」參數值是否符合要求。
依據    
備註    口令要求:口令長度至少8位,幷包括數字、小寫字母、大寫字母和特殊符號四類中至少兩類。且5次之內不得設置相同的口令。密碼應至少每90天進行更換
2.1.2配置帳號鎖定
基線名稱    配置賬號鎖定(基礎項)
基線編號    Tophant-WebLogic-2
基線項說明    要求設定賬號鎖定次數和時間,錯誤輸入密碼10次,系統自動鎖定,鎖定時間5分鐘。
配置方法    版本:8.x 9.x 10.x版本
配置操做:
查看以管理員身份登陸控制檯
1. 點擊左側面板」Security」文件夾,展開」REALM」
2. 點擊右側面板中的」User Lock」標籤,配置下面的參數:
Lockout Enabled,Lockout Threshold,Lockout Duration
配置的參數可參考以下設置:
Lockout Enabled=true;
Lockout Threshold=10;
Lockout Duration=5
檢查方法    參見配置方法,配置文件的參數以下設置則知足要求:
Lockout Enabled=true;
Lockout Threshold=10;
Lockout Duration=5
依據    
備註    依據實際需求配置。
2.1.3限制目錄列表訪問
基線名稱    目錄列表訪問限制(基礎項)
安全編號    Tophant-WebLogic-4
基線項說明    禁止WebLogic列表顯示文件
配置方法    版本:8.x 9.x 10.x版本
配置操做:
查看WebLogic安裝目錄下的weblogic.properties配置文件,
檢查weblogic.httpd.indexDirectories=是否設置成false。
檢查方法    參考配置方法中的文件,檢查weblogic.httpd.indexDirectories參數值設置是否知足要求(值爲false則知足)
備註    
2.2安全審計
2.2.1配置審覈登錄
基線名稱    配置審覈登陸(基礎項)
基線編號    Tophant-WebLogic-5
基線項說明    設備應配置日誌功能,對用戶登陸進行記錄,記錄內容包括用戶登陸使用的賬號,登陸是否成功,登陸時間,以及遠程登陸時,用戶使用的IP地址。
配置方法    版本:8.x 9.x 10.x版本
配置操做:
查看WebLogic安裝目錄下的weblogic.properties配置文件
開啓日誌,配置按日期rotate,示例以下:
weblogic.system.enableReverseDNSLookups=true
檢查方法    按配置方法檢查「weblogic.system.enableReverseDNSLookups」參數值是否爲true,若爲true則知足。
備註    
2.3資源控制
2.3.1設置登陸超時
基線名稱    設置登陸超時(基礎項)
安全編號    Tophant-WebLogic-6
安全項說明    應支持帳戶登陸超時鎖定功能。超時後用戶需再次輸入密碼登陸才能進入系統。
配置方法    版本:8.x 9.x 10.x版本
配置操做:
查看WebLogic安裝目錄下的weblogic.properties配置文件
如自動登出時間爲5分鐘則修改下列參數值爲5,示例以下:
webblogic.login.readTimeoutMillis=5
weblogic.login.readTimeoutMillisSSL=5
檢查方法    檢查下列參數值是否符合要求
weblogic.login.readTimeoutMillis
weblogic.login.readTimeoutMillisSSL
備註    
2.3.2限制應用服務器Socker鏈接數限制
基線名稱    應用服務器Socket鏈接數限制(建議項)
基線編號    Tophant-WebLogic-7
基線項說明    Sockets最大打開數目設置不當的話,容易受到拒絕服務攻擊,超出操做系統文件描述符限制
配置方法    版本:8.x 9.x 10.x版本
配置操做:
以管理員身份登陸管理控制檯
1、點擊左側面板的域名文件夾,而後點擊Servers文件夾,雙擊要管理的服務器
2、在右側面板的 Configuration 面板下選擇 Tuning 標籤,查看Maximum Open Sockets值,應該配置爲不大於1024
檢查方法    Maximum Open Sockets的值不大於1024。
備註    
2.4其它安全項
2.4.1配置錯誤頁面處理
基線名稱    配置錯誤頁面處理(基礎項)
基線編號    Tophant-WebLogic-8
基線項說明    WebLogic錯誤頁面重定向
配置方法    版本:8.x 9.x 10.x版本
配置操做:
查看<Application HOME>/WEB-INF/web.xml:文件,檢查其是否包含以下片斷:
<error-page>
   <exception-type>*</exception-type>
   <location>error.html</location>
</error-page>
若是沒有則在配置文件中間部分添加此配置信息。
檢查方法    見配置方法。
備註    
2.4.2禁用Send Server Header
基線名稱    禁用Send Server Header(建議項)
基線編號    Tophant-WebLogic-9
基線項說明    Sockets最大打開數目設置不當的話,容易受到拒絕服務攻擊,超出操做系統文件描述符限制
配置方法    版本:8.x 9.x 10.x版本
配置操做:
以管理員身份登陸管理控制檯
1、點擊域名下的Servers文件夾,選擇要管理的服務器
2、在右側面板 Protocols 面板下,點擊HTTP標籤
3、檢查是否勾選Send Server header
檢查方法    參照配置方法禁止勾選 Send Server header 
備註    
2.4.3更改默認運行端口
項目名稱    更改默認運行端口(建議項)
基線編號    Tophant-WebLogic-10
基線項說明    更改WebLogic服務器默認端口
配置方法    版本:8.x 9.x 10.x版本
配置操做:
查看WebLogic安裝目錄下的weblogic.properties配置文件,
檢查weblogic.system.listenPort=integer(端口號)這一項是否符合要求。
檢查方法    檢查weblogic.system.listenPort= 參數值是否符合要求(自定義端口號,非默認)
備註    根據應用場景的不一樣,如部署場景需開啓此功能,則強制要求此項。可能會影響系統。
2.4.4配置加密協議
基線名稱    配置加密協議(建議項)
基線編號    Tophant-WebLogic-11
基線項說明    對於經過HTTP協議進行遠程維護的設備,設備應支持使用HTTPS等加密協議。
配置方法    版本:8.x 9.x 10.x版本
參考配置操做
查看WebLogic安裝目錄下的weblogic.properties配置文件,請參考下列參數和參數值的配置是否符合要求:
weblogic.system.SSLListenPort=portNumber
weblogic.security.certificate.server=mycert.der
weblogic.security.key.server=mykey.der
weblogic.security.certificate.authority=CA.der
weblogic.security.certificateCacheSize=5
weblogic.security.clientRootCA=anyValidCertificate
weblogic.httpd.register.authenticated=\
weblogic.t3.srvr.ClientAuthenticationServlet
weblogic.httpd.register.T3AdminCaptureRootCA=admin.T3AdminCaptureRootCA 
SSL Enabled="true"

數據庫安全加固 - MongoDBlinux

1.概述
1.1適用範圍
本配置基線適用於MongoDB 3.0或3.2版本,主要涉及MongoDB數據庫安全配置方面的基本要求,用於指導安全例行工做、新系統入網安全檢查等場合。
1.2規範依據
根據目前MongoDB數據庫安全現狀,結合相關規範性文件指引,制定適合的基線配置規範。
規範性引用文件:
GB/T28448-2012《信息安全技術信息系統安全等級保護測評要求》
GB/T28453-2012《信息安全技術信息系統安全管理評估要求》
GB/T25063-2010《信息安全技術服務器安全測評要求》
GB/Z24364-2009《信息安全技術信息安全風險管理指南》
GB/T22239-2008《信息安全技術信息系統安全等級保護基本要求》
GB/T20270-2006《信息安全技術網絡基礎安全技術要求》
GB/T20271-2006《信息安全技術信息系統通用安全技術要求》
GB/T20269-2006《信息安全技術信息系統安全管理要求》
YD/T2701-2014《電信網和互聯網安全防禦基線配置要求及檢測要求》




2.安全配置基線標準
2.1安裝配置
2.1.1安裝MongoDB
基線名稱    安裝MongoDB
基線編號    Tophant-MongoDB-1
基線說明    MongoDB安裝版本以及補丁級別應該是最新的。
配置方法    1.備份數據。
2.從MongoDB下載頁面下載最新MongoDB修訂版的二進制文件,並將二進制文件存儲在臨時位置。
3.關閉MongoDB實例。
4.用下載的二進制文件替換現有的MongoDB二進制文件。
5.從新啓動MongoDB實例。
檢查方法    在MongoDB shell中運行以下命令:
> db.version()
備註    使用最新的MongoDB軟件版本以及適用的補丁能夠減小軟件中存在漏洞的可能性。

2.2認證
2.2.1啓用身份驗證
基線名稱    啓用身份驗證
基線編號    Tophant-MongoDB-2
基線說明    啓用身份驗證,使所用客戶端對MongoDB數據庫的訪問都須要身份驗證。
配置方法    使用命令:mongod --auth --config /etc/mongod.conf
檢查方法    使用命令:cat /etc/mongod.conf | grep 「Auth=」
備註    未能對客戶機、用戶和/或服務器進行身份驗證可能會致使對mongodb數據庫的未受權訪問。

2.2.2禁用localhost exception
基線名稱    禁用localhost exception
基線編號    Tophant-MongoDB-3
基線說明    Localhost exception容許在建立系統中的第一個用戶以前啓用受權。
配置方法    使用配置文件中的setParameter選項將其設置爲false:
setParameter:
enableLocalhostAuthBypass: false
檢查方法    使用命令:cat /etc/mongod.conf | grep  「enableLocalhostAuthBypass」
備註    禁用此異常將阻止對MongoDB數據庫的未經受權的本地訪問。它還將確保每一個數據庫活動對特定用戶的可追溯性。

2.2.3使用行業標準認證機制
基線名稱    使用行業標準認證機制
基線編號    Tophant-MongoDB-4
基線說明    使用一個或多個行業標準身份驗證機制能夠幫助組織爲其mongodb用戶強制執行他們的賬戶和密碼策略。
配置方法    在MongoDB配置文件中指定身份驗證機制:
security:
clusterAuthMode: x509
net:
ssl:
mode: requireSSL
PEMKeyFile: <path to TLS/SSL certificate and key PEM file>
CAFile: <path to root CA PEM file>
檢查方法    使用以下命令:
cat /etc/mongod.conf | grep 「clusterAuthMode:」
cat /etc/mongod.conf | grep 「mode:」
cat /etc/mongod.conf | grep 「authorization:"
cat /etc/mongod.conf | grep 「authenticationMechanisms:」
備註    若是沒有合適的行業標準身份驗證機制,賬戶和密碼管理將更加繁瑣,而且身份驗證可能與定義的策略不一致。

2.3訪問控制
2.3.1配置基於角色的訪問控制
基線名稱    配置基於角色的訪問控制
基線編號    Tophant-MongoDB-5
基線說明    基於角色的訪問控制(RBAC)是一種基於企業內各個用戶的角色來管理對資源的訪問的方法。爲用戶授予一個或多個角色,以肯定用戶對數據庫資源和操做的訪問權限。在角色分配以外,用戶無權訪問系統。
配置方法    1. 爲mongodb創建角色。
2. 爲每一個角色分配適當的特權。
3.爲每一個角色分配適當的用戶。
4. 刪除分配給用戶的任何特權,這些特權如今由角色來處理。
5. 有關更多信息,請參閱下面的參考資料。
連接:http://docs.mongodb.org/manual/tutorial/manage-users-and-roles/
檢查方法    使用以下命令:
mongo --port 27017 -u <siteUserAdmin> -p <password> --authenticationDatabase <database
name>
> db.getUser()
> db.getRole()
備註    MongoDB能夠使用RBAC來管理對MongoDB系統的訪問。MongoDB默認狀況下不啓用受權。

2.3.2配置監聽的網絡接口
基線名稱    配置監聽的網絡接口
基線編號    Tophant-MongoDB-6
基線說明    要確保mongodb在受信任的網絡環境中運行,須要限制mongodb實例監聽在受權的網絡接口中。
配置方法    編輯MongoDB的配置文件,使其只容許受信任的網絡鏈接,請參閱下面的參考資料:
http://docs.mongodb.org/manual/tutorial/configure-linux-iptables-firewall/
http://docs.mongodb.org/manual/tutorial/configure-windows-netsh-firewall/
檢查方法    使用命令:cat /etc/mongod.conf |grep –A12 「net」 | grep 「bindIp「
備註    此配置阻止來自不受信任網絡的鏈接,只容許受權和受信任網絡上的系統嘗試鏈接到MongoDB。若是未配置,則可能致使從不受信任的網絡到MongoDB的未受權鏈接。

2.3.3使用非特權賬戶運行MongoDB
基線名稱    使用非特權帳戶運行MongoDB
基線編號    Tophant-MongoDB-7
基線說明    不該使用特權賬戶(如「root」)運行MongoDB服務,由於這會致使沒必要要的操做使用操做系統暴露在高風險中。
配置方法    1.建立用於執行MongoDB數據庫的專用用戶。
2.將數據庫數據文件,密鑰文件和SSL私鑰文件設置爲只能由mongod / mongos用戶讀取。
3.將日誌文件設置爲只能由mongod / mongos用戶寫入,而且只能由root讀取。
檢查方法    使用命令:ps -ef | grep -E "mongos|mongod"
備註    使用非特權專用服務賬戶運行MongoDB能夠增長系統安全性。

2.3.4配置帳戶權限
基線名稱    配置帳戶權限
基線編號    Tophant-MongoDB-8
基線說明    按期查看全部帳戶並從必要帳戶中刪除不須要的帳戶以及不須要的權限有助於最大限度地減小每一個用戶擁有的權限。
配置方法    查看MongoDB的配置文件,是否有以下定義:
{
revokePrivilegesFromRole: "<role>",
privileges:
[
{ resource: { <resource> }, actions: [ "<action>", ... ] },
...
],
}
檢查方法    執行如下命令以查看運行該命令的數據庫上的全部帳戶,包括內置帳戶和用戶定義帳戶,以及每一個帳戶授予的權限。 確保僅列出必需的帳戶,而且僅爲每一個帳戶列出必要的權限。
db.runCommand(
{
rolesInfo: 1,
showPrivileges: true
showBuiltinRoles: true
}
)
備註    隨着時間的推移,可能再也不須要某些帳戶,而且某些帳戶可能會授予再也不須要的權限。

2.3.5查看用戶定義的帳戶
基線名稱    查看用戶定義的帳戶
基線編號    Tophant-MongoDB-9
基線說明    按期檢查全部帳戶,保證用戶權限的最小化。
配置方法    使用命令:use <dbName>
db.revokeRolesFromUser( "<username>", [ <roles> ])
檢查方法    使用命令:db.runCommand( { rolesInfo: "<rolename>" } )
備註    擁有過多權限的用戶會給組織帶來沒必要要的風險。

2.4數據加密
2.4.1啓用TLS或SSL加密
基線名稱    啓用TLS或SSL加密
基線編號    Tophant-MongoDB-10
基線說明    使用tls或ssl來保護全部鏈接。包括使用tls或ssl對MongoDB客戶機的mongod和mongos組件之間以及全部應用程序和MongoDB之間的通訊進行加密。 
配置方法    配置mongodb服務器,要求使用ssl或tls加密全部mongodb網絡通訊。
檢查方法    使用命令:cat /etc/mongos.conf | grep –A20 ‘net’ | grep –A10 ‘ssl’ | grep ‘mode’
備註    能夠防止嗅探mongodb組件之間的明文通訊,或者對mongodb執行中間人攻擊。
2.4.2啓用FIPS
基線名稱    啓用FIPS
基線編號    Tophant-MongoDB-11
基線說明    FIPS是一種計算機安全標準,用於認證安全加密和解密數據的軟件模塊和庫。
配置方法    1.編輯MongoDB配置文件,添加以下指令:
net:
ssl:
  FIPSMode: true
2.使用配置文件啓動mongos實例:
mongod --config /etc/mongod.conf
檢查方法    使用以下命令:
mongos --config /etc/mongos.conf
net:
ssl:
FIPSMode: true
備註    FIPS是行業標準,規定如何在傳輸過程當中加密數據。

2.5審計
2.5.1啓用系統日誌審計功能
基線名稱    啓用系統日誌審計功能
基線編號    Tophant-MongoDB-12
基線說明    MongoDB Enterprise包括一個系統審計工具,能夠在MongoDB實例上記錄系統事件(例如用戶操做,鏈接事件)。這些審計記錄容許取證分析,並容許管理員驗證適當的控制。
配置方法    使用以下命令:
mongod --dbpath data/db --auditDestination syslog
mongod --dbpath data/db --auditDestination console
mongod --dbpath data/db --auditDestination file --auditFormat JSON --
auditPath data/db/auditLog.json
mongod --dbpath data/db --auditDestination file --auditFormat BSON --
auditPath data/db/auditLog.bson
檢查方法    使用命令:cat /etc/mongod.conf |grep –A4 「auditLog」 | grep 「destination」
備註    在解決操做問題或處理安全事件時,系統級日誌很是方便。

2.5.2配置審計過濾器
基線名稱    配置審計過濾器
基線編號    Tophant-MongoDB-13
基線說明    mongodb enterprise支持審計各類操做。啓用審計功能後,默認狀況下,審計功能將在審計事件操做、詳細信息和結果中詳細記錄全部可審計的操做。使用auditFiltet,指定要記錄哪些事件。此功能僅適用於企業版本。
配置方法    根據實際需求設置auditfilters,可參閱如下資料:
https://docs.mongodb.com/manual/reference/audit-message/
https://docs.mongodb.com/manual/tutorial/configure-audit-filters/
檢查方法    使用命令:cat /etc/mongod.conf |grep –A10 「auditLog」 | grep 「filter」
備註    全部在數據庫上執行的操做都被記錄下來。這有助於回溯和跟蹤發生的任何事件。

2.6操做系統加固
2.6.1禁用HTTP狀態頁面
基線名稱    禁用HTTP狀態頁面
基線編號    Tophant-MongoDB-14
基線說明    默認狀況下,mongodb提供一個運行在端口28017上的http接口來提供「home」狀態頁。此頁面提供關於數據庫統計信息和客戶機的某些關鍵信息。
配置方法    經過在/etc/mongod.conf文件中設置nohttpinterface = True來禁用http狀態接口。
檢查方法    使用命令:cat /etc/mongod.conf |grep 「nohttpinterface」
備註    攻擊者能夠訪問狀態頁面來了解更多關於mongodb服務器的信息,並肯定如何對其進行攻擊。

2.6.2修改默認端口
基線名稱    修改默認端口
基線編號    Tophant-MongoDB-15
基線說明    更改MongoDB使用的端口使攻擊者更難找到數據庫並將其做爲目標。
配置方法    將MongoDB服務器的端口更改成27017之外的數字。
檢查方法    使用命令:cat /etc/mongod.conf |grep 「port」
備註    使用默認端口,攻擊者可以經過端口驗證服務器上正在運行的應用程序。

2.6.3禁用服務器端腳本
基線名稱    禁用服務器端腳本
基線編號    Tophant-MongoDB-16
基線說明    MongoDB支持爲某些服務器端操做執行JavaScript代碼:mapReduce,group和$where。 若是不使用這些操做,則應禁用服務器端腳本。
配置方法    若是不須要服務器端腳本,請在命令行上使用--noscripting選項將其禁用。
檢查方法    使用命令:cat /etc/mongod.conf |grep –A10 「security」 | grep 「javascriptEnabled」
備註    若是不須要服務器端腳本而且未禁用,可能會帶來沒必要要的風險。

2.6.4禁用HTTP接口
基線名稱    禁用HTTP接口
基線編號    Tophant-MongoDB-17
基線說明    net.http.enabled參數用於啓用或禁用HTTP接口。
配置方法    將參數值設置爲false以禁用http接口。參閱如下資料:
https://docs.mongodb.com/manual/core/security-mongodb-configuration/#httpstatus-interface
檢查方法    使用命令:cat /etc/mongod.conf |grep –A12 「net」 | grep –A10 「http」 | grep 「enabled」
備註    運行沒必要要的服務會增長攻擊者經過未知的漏洞侵入系統的可能性。

2.6.5禁用經過HTTP接口的JSONP訪問
基線名稱    禁用經過HTTP接口的JSONP訪問
基線編號    Tophant-MongoDB-18
基線說明    net.http.JSONPEnabled參數用於經過HTTP接口啓用或禁用JSONP訪問。
配置方法    將參數值設置爲false以禁用JSONP訪問。參閱如下資料:
https://docs.mongodb.com/manual/reference/configurationoptions/#net.http.JSONPEnabled
檢查方法    cat /etc/mongod.conf |grep –A12 「net」 | grep –A10 「http」 | grep 「JSONPEnabled」
備註    運行沒必要要的服務會增長攻擊者經過未知漏洞入侵系統可能性。

2.6.6禁用REST API
基線名稱    禁用REST API
基線編號    Tophant-MongoDB-19
基線說明    net.http.RESTInterfaceEnabled參數用於啓用或禁用REST API。
配置方法    將參數值設置爲false以禁用rest api。參閱如下資料:
https://docs.mongodb.com/manual/reference/configurationoptions/#net.http.RESTInterfaceEnabled
檢查方法    使用命令:cat /etc/mongod.conf |grep –A12 「net」 | grep –A10 「http」 | grep 「RESTInterfaceEnabled」
備註    運行沒必要要的服務會增長攻擊者經過未知漏洞入侵系統可能性。

2.7文件權限
2.7.1設置密鑰文件權限
基線名稱    設置祕鑰文件權限
基線編號    Tophant-MongoDB-20
基線說明    密鑰文件用於分佈式集羣中的身份驗證。 在密鑰文件上設置適當的文件權限將防止未經受權的訪問。
配置方法    使用以下命令:
chmod 600 /keyfile
sudo chown mongodb:mongodb /keyfile
檢查方法    使用命令:cat /etc/mongod.conf | grep 「keyFile=」
備註    保護密鑰文件可增強分佈式集羣中的身份驗證,並防止對MongoDB數據庫進行未經受權的訪問。

2.7.2設置數據庫文件權限
基線名稱    設置數據庫文件權限
基線編號    Tophant-MongoDB-21
基線說明    MongoDB數據庫文件須要使用文件權限進行保護。
配置方法    使用以下命令:
chmod 660 /var/lib/mongodb
sudo chown mongodb:mongodb /var/lib/mongodb
檢查方法    使用命令:cat /etc/mongod.conf |grep 「dbpath」
備註    設置數據庫文件權限能夠限制未經受權的用戶訪問數據庫。

數據庫安全加固 - MSSQLserverios

1.概述
1.1適用範圍
本配置基線適用於國家開發銀行的MS_SQLServer數據庫,主要涉及MS_SQLServer數據庫安全配置方面的基本要求,用於指導安全例行工做、新系統入網安全檢查等場合。
在未特別說明的狀況下,均適用於全部運行的MS_SQLServer數據庫。
1.2規範依據
根據目前MS_SQLServer數據庫的安全現狀,結合相關規範性文件指引,制定適合的基線配置規範。
規範性引用文件:
GB/T 28448-2012 《信息安全技術 信息系統安全等級保護測評要求》
GB/T 28453-2012 《信息安全技術 信息系統安全管理評估要求》
GB/T 25063-2010 《信息安全技術 服務器安全測評要求》
GB/Z 24364-2009 《信息安全技術 信息安全風險管理指南》
GB/T 22239-2008 《信息安全技術 信息系統安全等級保護基本要求》
GB/T 20270-2006 《信息安全技術 網絡基礎安全技術要求》
GB/T 20271-2006 《信息安全技術 信息系統通用安全技術要求》
GB/T 20269-2006 《信息安全技術 信息系統安全管理要求》
YD/T 2701-2014  《電信網和互聯網安全防禦基線配置要求及檢測要求_數據庫》
1.3實施策略
結合網絡和信息系統建設狀況,考慮安全配置項影響的範圍,結合以往工做經驗,提出以下安全項目實施策略:
基礎項:實施安全基線可以明顯提高安全水平,實施風險小,可操做性強。
建議項:實施安全基線可以提高必定安全水平,具備必定風險,可操做性較強。
序號    配置類別    基線名稱    實施策略
1    身份鑑別    刪除沒必要要帳戶    基礎項
2    身份鑑別    設置密碼並保證複雜度    基礎項
3    身份鑑別    禁用共享帳戶    基礎項
4    身份鑑別    設置認證失敗鎖定策略    基礎項
5    訪問控制    配置數據庫啓動帳戶安全    基礎項
6    訪問控制    設置用戶權限最小化    基礎項
7    訪問控制    限制數據庫驗證方式    基礎項
8    訪問控制    限制登陸IP    建議項
9    安全審計    配置數據庫審計    建議項
10    其它要求項    配置安裝最小化    基礎項
11    其它要求項    設置通信傳輸加密    建議項
12    其它要求項    更新數據庫補丁    建議項


2.安全配置基線標準
2.1身份鑑別
2.1.1刪除沒必要要帳戶
基線名稱    刪除沒必要要帳戶(基礎項)
基線編號    Tophant-MS_SQLServer-1
基線說明        應刪除或鎖定與數據庫運行、維護等工做無關的帳戶。
配置方法    開始-〉全部程序-〉Microsoft SQL Server 2005-〉SQL Server Mangement Studio-〉(鏈接、登陸數據庫;若沒自動彈出登陸對話框則選擇窗口左上角文件菜單,選擇鏈接對象資源管理器)-〉安全性-〉登陸名,而後刪除無關帳戶;
SQL SERVER企業管理器-〉數據庫-〉對應數據庫-〉用戶中刪除無關帳戶;


最後和管理員(數據庫、應用管理員)溝通確認哪些爲無關刪號。
無關帳戶:guest、test、share_dba12三、default。
檢查方法    可參考配置方法中(操做步驟)的截圖,和管理員(數據庫、應用管理員)溝通確認無關刪號是否存在。
備註    須要手工判斷,實際狀況應與具體需求爲準,謹慎操做。
2.1.2禁用共享帳戶
基線名稱    禁用共享帳戶(基礎項)
基線編號    Tophant-MS_SQLServer-2
基線說明        數據庫應按照用戶分配帳戶,避免不一樣用戶間共享帳戶。
共享帳戶帶來管理和操做記錄沒法對應到各個用戶使用者,以形成審計和記錄不便,存在安全風險。
配置方法    創建角色,並給角色受權,把角色賦給不一樣的用戶或修改用戶屬性中的角色和權限。禁用操做系統帳戶登陸數據庫,禁止單數據庫用戶被賦予多項權限、被多人共享使用。
禁用的共享帳戶:administrator、guest。
參考操做見下圖:

檢查方法    在查詢分析器中用user_name_1/password1鏈接數據庫成功。
此項檢查能夠採起問詢的方式,而後登陸到數據庫用戶界面後進行查證。
備註    user_name_1和user_name_1是兩個不一樣的賬號名稱,可根據不一樣用戶,取不一樣的名稱。
2.1.3禁止共享帳戶
基線名稱    禁用共享帳戶(基礎項)
基線編號    Tophant-MS_SQLServer-3
基線說明      數據庫應按照用戶分配帳戶,避免不一樣用戶間共享帳戶。
共享帳戶帶來管理和操做記錄沒法對應到各個用戶使用者,以形成審計和記錄不便,存在安全風險。
配置方法    創建角色,並給角色受權,把角色賦給不一樣的用戶或修改用戶屬性中的角色和權限。禁用操做系統帳戶登陸數據庫,禁止單數據庫用戶被賦予多項權限、被多人共享使用。
禁用的共享帳戶:administrator、guest。
參考操做見下圖:

檢查方法    在查詢分析器中用user_name_1/password1鏈接數據庫成功。
此項檢查能夠採起問詢的方式,而後登陸到數據庫用戶界面後進行查證。
備註    user_name_1和user_name_1是兩個不一樣的賬號名稱,可根據不一樣用戶,取不一樣的名稱。

2.1.4設置認證失敗鎖定策略
基線名稱    設置認證失敗鎖定策略(基礎項)
基線編號    Tophant-MS_SQLServer-4
基線說明        採用靜態口令認證技術的數據庫,應配置強制實施密碼策略。
配置方法    登陸企業管理器,展開「安全性」-〉「登陸名」條目,雙擊帳戶(例如:sa),確保勾選「強制實施密碼策略」

檢查方法    查看帳戶鎖定策略設置是否符合要求。參照配置方法截圖檢查是否勾選了「強制實施密碼策略」選項。
備註    根據應用場景的不一樣,如部署場景需開啓此功能,則強制要求此項。對核心庫、生產用戶不能設置此基線。誤操做或惡意超過10次,致使用戶鎖定,有必定風險,可能會致使應用異常。
2.1.5SQLServer用戶口令安全
基線名稱    數據庫管理系統SQLServer用戶口令安全基線要求項
基線編號    Tophant-MS_SQLServer-5
基線說明        對用戶的書香進行安全檢查,包括空密碼、密碼更新時間等。修改目前全部的帳號的口令,確認爲強口令。特別是sa帳號,口令長度至少爲8位,幷包括數字、小寫字母、大寫字母、和特殊字符四類中至少兩類。而且五次內部的設置相同的口令。密碼應至少每90天進行更換。
配置方法    Password字段不爲null
檢查方法    1.檢查password字段是否爲null
2.參考配置操做
查看用戶狀態運行查詢分析器,執行
Select *from sysusers
Select name,Password form sysloins where password is null order by name
#查看口令爲空的用戶

備註    


2.2訪問控制
2.2.1配置數據庫啓動帳戶安全
基線名稱    數據庫啓動帳戶安全(基礎項)
基線編號    Tophant-MS_SQLServer-5
基線說明        使用普通帳戶啓動SQLServer服務,防範攻擊者獲取系統帳戶或管理員權限。
配置方法    新建SQL Server服務帳戶,將該帳戶從User組中刪除,且不要把該帳戶提高爲Administrators組的成員,以所需最小權限啓動 SQL Server服務:

在屬性界面中選擇新建的普通帳戶啓動服務。
檢查方法    以SQL SERVER2005爲例,經過「SQL Server configuration manager」查看,以下所示,SQL Server服務的登陸身份爲Local System:

檢查結果如上圖所示則知足該檢查項。
備註    

2.2.2設置用戶權限最小化
基線名稱    設置用戶權限最小化(基礎項)
基線編號    Tophant-MS_SQLServer-6
基線說明        應根據實際業務須要,配置用戶的最小權限。
配置方法    更改數據庫屬性,取消業務數據庫帳戶不須要的服務器角色,例如:dbcreator、diskadmin。
更改數據庫屬性,取消業務數據庫帳戶不須要的「數據庫訪問許可」和「數據庫角色中容許」中不須要的角色。


2.2.3限制數據庫驗證方式
基線名稱    設置數據庫驗證方式(基礎項)
基線編號    Tophant-MS_SQLServer-7
基線說明        使用SQL Server和windows身份驗證模式登陸數據庫。
配置辦法    打開SQL Server企業管理器,點擊數據庫屬性頁面的「安全性」選項卡,選擇「SQL Server和windows身份驗證模式」,而後點擊「肯定」完成配置。
配置步驟參考下圖:

檢查方法    打開SQL Server企業管理器,點擊數據庫屬性頁面的「安全性」選項卡,查看身份驗證方式是否爲「SQL Server和windows身份驗證模式」,如果則知足此項要求。
備註    

2.2.4限制登錄IP地址
基線名稱    限制登陸IP地址(建議項)
基線編號    Tophant-MS_SQLServer-8
基線說明        經過數據庫所在操做系統或防火牆限制,只有信任的IP 地址才能經過監聽器訪問數據庫。
配置方法    在防火牆中作限制,只容許與指定的 IP 地址創建1433 的通信。
若從更爲安全的角度來考慮,應該把1433 端口改爲其餘的端口。
1. 在「Windows 防火牆」對話框中,單擊「例外」選項卡。
2. 單擊「添加端口」。
3. 鍵入您要容許的端口名稱,鍵入端口號,而後單擊「TCP」或「UDP」
以提示這是 TCP 仍是 UDP 端口。
4. 單擊「更改範圍」。
5. 指定要爲其阻止此端口的一系列計算機(IP),而後單擊「肯定」。




2.3安全審計
2.3.1配置數據庫審計
基線名稱    配置數據庫審計(建議項)
基線編號    Tophant-MS_SQLServer-9
基線說明        根據業務要求制定數據庫審計策略。
對用戶登陸進行記錄,記錄內容包括用戶登陸使用的賬號、登陸是否成功、登陸時間以及遠程登陸時用戶使用的IP地址;
用戶對數據庫的操做,包括但不限於如下內容:賬號建立、刪除和權限修改、口令修改、讀取和修改數據庫配置、讀取和修改業務用戶的話費數據、身份數據、涉及通訊隱私數據。記錄須要包含用戶賬號,操做時間,操做內容以及操做結果;
記錄對與數據庫相關的安全事件。
配置方法    (1)打開「Microsoft SQL Server Management Studio」;
(2)右鍵點擊服務器(名),在右鍵菜單中點擊「屬性」;
(3)點擊選擇頁下的「安全性」,更改審覈設置,將登陸審覈設置爲「失敗和成功的登陸」,勾選「啓用C2審覈跟蹤」前的複選框。

檢查方法    打開「Microsoft SQL Server Management Studio」,右鍵點擊服務器,在右鍵菜單中點擊「屬性」,點擊選擇頁下的「安全性」,查看審覈設置。
備註    數據庫審計策略開啓後,有可能致使磁盤I/O較高,請根據實際要求、性能開啓。
2.4其餘安全項
2.4.1配置安裝最小化
基線名稱    配置安裝最小化(基礎項)
基線編號    Tophant-MS_SQLServer-10
基線說明        停用沒必要要的存儲過程
配置方法    禁用xp_cmdshell擴展存儲過程,命令:
DROP PROCEDURE sp_makewebtask;          //首先執行的命令
exec master..sp_dropextendedproc xp_cmdshell   //禁用xp_cmdshell
依據以上操做,禁用如下不須要的擴展存儲過程:
Sp_OACreate 
Sp_OADestroy 
Sp_OAGetErrorInfo 
Sp_OAGetProperty 
Sp_OAMethod 
Sp_OASetProperty 
Sp_OAStop 
Xp_regaddmultistring 
Xp_regdeletekey 
Xp_regdeletevalue 
Xp_regenumvalues 
Xp_regremovemultistring 
xp_sdidebug 
xp_availablemedia 
xp_cmdshell 
xp_deletemail 
xp_dirtree 
xp_dropwebtask 
xp_dsninfo 
xp_enumdsn 
xp_enumerrorlogs 
xp_enumgroups 
xp_enumqueuedtasks 
xp_eventlog 
xp_findnextmsg 
xp_fixeddrives 
xp_getfiledetails 
xp_getnetname 
xp_grantlogin 
xp_logevent 
xp_loginconfig 
xp_logininfo 
xp_makewebtask 
xp_msver xp_perfend 
xp_perfmonitor 
xp_perfsample 
xp_perfstart 
xp_readerrorlog 
xp_readmail 
xp_revokelogin 
xp_runwebtask 
xp_schedulersignal 
xp_sendmail 
xp_servicecontrol 
xp_snmp_getstate 
xp_snmp_raisetrap 
xp_sprintf 
xp_sqlinventory 
xp_sqlregister 
xp_sqltrace 
xp_sscanf 
xp_startmail 
xp_stopmail 
xp_subdirs 
xp_unc_to_drive 
xp_dirtree
最後執行以下語句:
DROP PROCEDURE sp_addextendedproc ;    //必定要最後執行
可參考以下截圖:

檢查方法    以sa身份登陸查詢分析器,執行如下命令:
exec master..xp_cmdShell 'dir c:\'
輸出結果應已禁用xp_cmdshell,以下所示:

若是未禁用xp_cmdshell則會返回dir c:\的執行結果。
備註    實際狀況請以具體需求爲準。
2.4.2設置通信傳輸加密
基線名稱    通信傳輸加密(建議項)
基線編號    Tophant-MS_SQLServer-11
基線說明        使用通信協議加密。
配置方法    SQL Server 2000:啓動服務器網絡配置工具,在「常規」中選擇「強制協議加密」;

SQL Server 2005:啓動SQL Server 2005 Configuration Manager,打開SQL Server 2005網絡配置,右鍵MSSSQLSERVER的協議,查看屬性,在標誌欄裏面將FourceEncryption設置爲是;

更改通信協議加密後須要從新啓動SQL Server數據庫。
檢查方法    啓動服務器網絡配置工具,在「常規」中查看是否選擇「強制協議加密」,如果則知足配置項要求,反之則不知足。
備註    根據應用場景的不一樣,如部署場景需開啓此功能,則強制要求此項。
2.4.3更新數據庫補丁
基線名稱    更新數據庫補丁(建議項)
基線編號    Tophant-MS_SQLServer-12
基線說明        因爲不按期廠商會對存在的漏洞發佈補丁進行修復,須要及時關注廠商發佈漏洞補丁狀況來進行修復和升級操做。
配置方法    配置操做:
檢查當前全部已安裝的數據庫產品的版本信息,運行SQL查詢分析器,執行:
select @@version
安裝補丁詳細操做請參照其中的readme文件。
檢查方法    根據返回結果判斷,是否須要安裝補丁。
返回結果說明舉例:
2005.90.1399  -——————SQL Server 2005 RTM
2005.90.2047  -——————SQL Server 2005 Service Pack 1
2005.90.3042  -——————SQL Server 2005 Service Pack 2
備註    從官方網址下載升級包,根據實際需求安裝

數據庫安全加固 - MySQLnginx

1.概述
1.1適用範圍
本配置基線適用於MySQL 5.7,主要涉及MySQL數據庫安全配置方面的基本要求,用於指導安全例行工做、新系統入網安全檢查等場合。
1.2規範依據
根據目前MySQL數據庫安全現狀,結合相關規範性文件指引,制定適合的基線配置規範。
規範性引用文件:
GB/T28448-2012《信息安全技術信息系統安全等級保護測評要求》
GB/T28453-2012《信息安全技術信息系統安全管理評估要求》
GB/T25063-2010《信息安全技術服務器安全測評要求》
GB/Z24364-2009《信息安全技術信息安全風險管理指南》
GB/T22239-2008《信息安全技術信息系統安全等級保護基本要求》
GB/T20270-2006《信息安全技術網絡基礎安全技術要求》
GB/T20271-2006《信息安全技術信息系統通用安全技術要求》
GB/T20269-2006《信息安全技術信息系統安全管理要求》
YD/T2701-2014《電信網和互聯網安全防禦基線配置要求及檢測要求》




2.安全配置基線標準
2.1操做系統級配置
2.1.1配置數據庫放在非系統分區上
基線名稱    配置數據庫放在非系統分區上
基線編號    Tophant-MySQL-1
基線說明    一般主機操做系統應包括用於不一樣目的的不一樣文件系統分區,其中系統分區用於存放主機系統,非系統分區用於存儲數據。
配置方法    1.爲MySQL數據選擇非系統分區新位置
2.使用以下命令中止mysqld:service mysql stop
3.使用如下命令複製數據:cp -rp <datadir Value> <new location>
4.將datadir位置設置爲MySQL配置文件中的新位置
5.使用以下命令啓動mysqld:service mysql start
檢查方法    使用命令:df -h <datadir Value>,命令返回的輸出不該該包括root('/')、"/var""/usr"。
備註    將數據庫移出系統分區,能夠下降操做系統的可用磁盤被耗盡的風險。
2.1.2使用專用最小特權用戶運行MySQL守護程序
基線名稱    使用專用最小特權用戶運行MySQL守護程序
基線編號    Tophant-MySQL-2
基線說明    與主機上安裝的任何服務同樣,能夠爲其提供本身的用戶上下文。 爲服務提供專用用戶能夠在較大主機環境中精確約束服務的權限。
配置方法    建立一個只用於運行mysql和直接相關進程的用戶。此用戶必須沒有系統的管理權限。參閱如下資料:
http://dev.mysql.com/doc/refman/5.7/en/changing-mysql-user.html
http://dev.mysql.com/doc/refman/5.7/en/serveroptions.html#option_mysqld_user
檢查方法    使用命令:ps -ef | egrep "^mysql.*$"
備註    使用最小特權賬戶來執行mysql,能夠減小mysql固有漏洞的影響。受限賬戶將沒法訪問與mysql無關的資源,好比操做系統配置。
2.1.3禁用MySQL命令歷史記錄
基線名稱    禁用MySQL命令歷史記錄
基線編號    Tophant-MySQL-3
基線說明    在linux /UNIX上,mysql客戶機將交互式執行的語句記錄到一個歷史文件中。默認狀況下,該文件在用戶的主目錄中名爲.mysql_history。大多數在mysql客戶機應用程序中運行的交互式命令都保存到歷史文件中。應該禁用mysql命令歷史記錄。
配置方法    1. 若是存在.mysql_history,則刪除它。
2. 使用下面兩種方法來防止它再次被建立:
a.將mysql_histfile環境變量設置爲/dev/null.這將須要放在shell的啓動腳本中。
 b.建立$HOME/mysql_history做爲/dev/null的連接。
   ln -s /dev/null $HOME/.mysql_history
檢查方法    使用命令:find /home -name ".mysql_history"
備註    禁用mysql命令歷史記錄能夠下降暴露敏感信息(如密碼和加密密鑰)的機率。
2.1.4禁用「MYSQL_PWD」環境變量
基線名稱    禁用「MYSQL_PWD」環境變量
基線編號    Tophant-MySQL-4
基線說明    MySQL能夠從名爲MYSQL_PWD的環境變量中讀取默認數據庫密碼。
配置方法    檢查哪些用戶或腳本正在設置MYSQL_PWD並將其更改成使用更安全的方法。參閱如下資料:
http://dev.mysql.com/doc/refman/5.7/en/environment-variables.html
https://blogs.oracle.com/myoraclediary/entry/how_to_check_environment_variabl
es
檢查方法    使用命令:grep MYSQL_PWD /proc/*/environ
備註    使用MYSQL_PWD環境變量意味着MySQL憑據的明文存儲。
2.1.5禁用交互式登陸
基線名稱    禁用交互式登陸
基線編號    Tophant-MySQL-5
基線說明    mysql用戶能夠交互訪問操做系統,這意味着mysql用戶能夠像其餘用戶同樣登陸到主機。
配置方法    使用命令:usermod -s /bin/false
檢查方法    使用命令:getent passwd mysql | egrep "^.*[\/bin\/false|\/sbin\/nologin]$"
備註    mysql用戶的交互訪問是沒必要要的,應該禁用。 
2.1.6禁用「MYSQL_PWD」
基線名稱    禁用「MYSQL_PWD」
基線編號    Tophant-MySQL-6
基線說明    MySQL能夠從名爲MYSQL_PWD的環境變量中讀取默認數據庫密碼。
配置方法    檢查哪些用戶或腳本正在設置MYSQL_PWD並將其更改成使用更安全的方法。
檢查方法    使用命令:grep MYSQL_PWD /home/*/.{bashrc,profile,bash_profile}
備註    使用MYSQL_PWD環境變量意味着MySQL憑據的明文存儲。建議禁用。 
2.2安裝和規劃
2.2.1備份和災難恢復
2.2.1.1配置備份策略
基線名稱    配置備份策略
基線編號    Tophant-MySQL-7
基線說明    應該有一個適當的備份策略。
配置方法    根據實際狀況建立備份策略和備份計劃。
檢查方法    使用命令:crontab -l
備註    備份mysql數據庫,有助於確保在發生事件時數據的可用性。 
2.2.1.2驗證備份
基線名稱    驗證備份
基線編號    Tophant-MySQL-8
基線說明    備份應該按期進行驗證
配置方法    執行按期的備份檢查並記錄。
檢查方法    檢查備份驗證測試報告。
備註    驗證備份是否正確地發生將有助於確保在發生事件時數據的可用性。 
2.2.1.3安全備份證書
基線名稱    安全備份證書
基線編號    Tophant-MySQL-9
基線說明    密碼、證書和任何其餘憑證都應該受到保護。
配置方法    適當更改文件權限。
檢查方法    檢查包含密碼或ssl密鑰的文件的權限。
備註    備份須要特權帳戶。 
2.2.1.4保護備份文件
基線名稱    保護備份文件
基線編號    Tophant-MySQL-10
基線說明    備份文件將包含數據庫中的全部數據。應使用文件系統權限或加密來防止非受權用戶得到對備份的訪問權限。
配置方法    實施加密或使用文件系統權限來保護備份文件。
檢查方法    檢查備份文件的權限。
備註    備份應被視爲敏感信息。
2.2.1.5啓用「binlogs」
基線名稱    啓用「binlogs」
基線編號    Tophant-MySQL-11
基線說明    用binlogs能夠實現根據時間點來恢復文件。
配置方法    啓用binlog並建立和測試恢復過程。
檢查方法    檢查是否啓用了binlog,是否有一個恢復過程。
備註    能夠減小數據丟失的風險。
2.2.1.6建立災備計劃
基線名稱    建立災備計劃
基線編號    Tophant-MySQL-12
基線說明    能夠使用不一樣數據中心中的從服務器進行異地備份。
配置方法    應建立災備計劃,保證數據的安全性。
檢查方法    檢查是否有災難恢復計劃。
備註    能夠減小數據丟失的風險。
2.2.1.7備份配置以及相關文件
基線名稱    備份配置以及相關文件
基線編號    Tophant-MySQL-13
基線說明    備份時應包含如下文件:
•配置文件(my.cnf和包含的文件)
•SSL文件(證書,密鑰)
•用戶定義函數(UDF)
•自定義的源代碼
配置方法    應將這些文件添加到備份中。
檢查方法    檢查這些文件是否已被使用並保存在備份中。
備註    須要這些文件才能徹底恢復實例。
2.2.2使用專用服務器運行MySQL
基線名稱    使用專用的服務器運行MySQL
基線編號    Tophant-MySQL-14
基線說明    建議將MySQL Server軟件安裝在專用服務器上,將其放置在單獨的區域上,只容許從特定主機和特定協議進行訪問。
配置方法    刪除多餘的應用程序或服務,同時從底層操做系統中刪除沒必要要的角色。
檢查方法    確認沒有爲底層操做系統啓用其餘角色,而且沒有安裝與MySQL服務器軟件正常運行無關的其餘應用程序或服務。
備註    將MySQL運行在獨立的服務器上,減小了攻擊面。 較小的攻擊面會下降MySQL中數據被泄露的可能性。
2.2.3禁止在命令行中指定密碼
基線名稱    禁止在命令行中指定密碼
基線編號    Tophant-MySQL-15
基線說明    當命令在命令行上執行時,例如mysql -u admin –p password,該密碼可能在用戶的shell和命令歷史記錄或進程列表中可見。
配置方法    在沒有密碼的狀況下使用-p,而後在提示時輸入密碼,使用適當安全的.my.cnf文件,或者在.mylogin.cnf中以加密格式存儲身份驗證信息。
檢查方法    若是密碼可見,請檢查流程或任務列表、shell或命令歷史記錄。
備註    若是密碼在進程列表或用戶的shell和命令歷史記錄中可見,攻擊者將可以使用竊取的憑證訪問mysql數據庫。
2.2.4禁止用戶名複用
基線名稱    禁止用戶名複用
基線編號    Tophant-MySQL-16
基線說明    數據庫用戶賬戶不該該被多個應用程序或用戶重用。
配置方法    添加/刪除用戶,以便每一個用戶僅用於一個特定的用途。
檢查方法    每一個用戶都應關聯到其中一個用戶
•系統賬戶
• 一我的
• 一個應用程序
備註    跨應用程序使用惟一的數據庫賬戶將減小mysql賬戶受損的影響。
2.2.5禁止使用默認或非MySQL特定的加密密鑰
基線名稱    禁止使用默認或非MySQL特定的加密密鑰
基線編號    Tophant-MySQL-17
基線說明    mysql使用的ssl證書和密鑰應該只用於mysql,並且只用於一個實例。
配置方法    爲每一個MySQL實例生成新的證書/密鑰。
檢查方法    檢查證書是否綁定到一個MySQL實例。
備註    使用默認證書可致使攻擊者冒充MySQL服務器。
2.2.6設置密碼過時策略
基線名稱    設置密碼過時策略
基線編號    Tophant-MySQL-18
基線說明    爲特定的用戶設置密碼過時時間。
配置方法    執行如下sql語句:
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
檢查方法    執行如下sql語句:
SELECT user, host, password_lifetime from mysql.user from mysql.user where
password_lifetime IS NULL;
備註    根據安全需求和可用性來設置密碼過時時間。
2.3文件系統權限
2.3.1設置「datadir」的權限
基線名稱    設置「datadir」的權限
基線編號    Tophant-MySQL-19
基線說明    Datadir是MySQL數據的的位置
配置方法    使用如下命令:
chmod 700 <datadir>
chown mysql:mysql <datadir>
檢查方法    執行如下語句:
show variables where variable_name = 'datadir';
備註    限制這些對象的可訪問性將保護MySQL數據庫的機密性,完整性和可用性。 若是容許MySQL用戶之外的其餘人從數據目錄中讀取文件,那麼該用戶可能可以從包含密碼的mysql.user表中讀取數據。
2.3.2設置「log_bin_basename」文件的權限
基線名稱    設置「log_bin_basename」文件的權限
基線編號    Tophant-MySQL-20
基線說明    mysql能夠記錄各類日誌文件,每一個日誌文件用於不一樣的目的。這些日誌包括二進制日誌、錯誤日誌、慢速查詢日誌、中繼日誌和普通日誌。由於這些是主機操做系統上的文件,因此它們受主機提供的權限結構的限制,除了mysql用戶外,其餘用戶也能夠訪問它們。
配置方法    使用如下命令:
chmod 660 <log file>
chown mysql:mysql <log file>
檢查方法    執行如下語句:
show variables like 'log_bin_basename';
備註    限制這些對象的權限能夠保護MySQL日誌的機密性,完整性和可用性。
2.3.3設置「log_error」權限
基線名稱    設置「log_error」權限
基線編號    Tophant-MySQL-21
基線說明    mysql能夠記錄各類日誌文件,每一個日誌文件用於不一樣的目的。這些日誌包括二進制日誌、錯誤日誌、慢速查詢日誌、中繼日誌和普通日誌。由於這些是主機操做系統上的文件,因此它們受主機提供的權限結構的限制,除了mysql用戶外,其餘用戶也能夠訪問它們。
配置方法    使用如下命令:
chmod 660 <log file>
chown mysql:mysql <log file>
檢查方法    執行如下語句:
show global variables like 'log_error';
備註    限制這些對象的權限能夠保護mysql日誌的機密性、完整性和可用性。
2.3.4設置「slow_query_log」權限
基線名稱    設置「slow_query_log」權限
基線編號    Tophant-MySQL-22
基線說明    mysql能夠記錄各類日誌文件,每一個日誌文件用於不一樣的目的。這些日誌包括二進制日誌、錯誤日誌、慢速查詢日誌、中繼日誌和普通日誌。由於這些是主機操做系統上的文件,因此它們受主機提供的權限結構的限制,除了mysql用戶外,其餘用戶也能夠訪問它們。
配置方法    使用如下命令:
chmod 660 <log file>
chown mysql:mysql <log file>
檢查方法    執行如下語句:
show variables like 'slow_query_log_file';
備註    限制這些對象的權限能夠保護MySQL日誌的機密性,完整性和可用性。
2.3.5設置「relay_log_basename」文件的權限
基線名稱    設置「relay_log_basename」文件的權限
基線編號    Tophant-MySQL-23
基線說明    mysql能夠記錄各類日誌文件,每一個日誌文件用於不一樣的目的。這些日誌包括二進制日誌、錯誤日誌、慢速查詢日誌、中繼日誌和普通日誌。由於這些是主機操做系統上的文件,因此它們受主機提供的權限結構的限制,除了mysql用戶外,其餘用戶也能夠訪問它們。
配置方法    使用如下命令:
chmod 660 <log file>
chown mysql:mysql <log file>
檢查方法    執行如下語句:
show variables like 'relay_log_basename';
備註    限制這些對象的權限能夠保護MySQL日誌的機密性,完整性和可用性。
2.3.6設置「general_log_file」權限
基線名稱    設置「general_log_file」權限
基線編號    Tophant-MySQL-24
基線說明    mysql能夠記錄各類日誌文件,每一個日誌文件用於不一樣的目的。這些日誌包括二進制日誌、錯誤日誌、慢速查詢日誌、中繼日誌和普通日誌。由於這些是主機操做系統上的文件,因此它們受主機提供的權限結構的限制,除了mysql用戶外,其餘用戶也能夠訪問它們。
配置方法    使用如下命令:
chmod 660 <log file>
chown mysql:mysql <log file>
檢查方法    執行如下語句:
show variables like 'general_log_file';
備註    限制這些對象的權限能夠保護MySQL日誌的機密性,完整性和可用性。
2.3.7設置SSL密鑰文件權限
基線名稱    設置SSL祕鑰文件權限
基線編號    Tophant-MySQL-25
基線說明    當配置爲使用SSL/TLS時,MySQL依賴這些密鑰文件,這些密鑰文件存儲在主機的文件系統中,受主機權限結構的約束。
配置方法    使用如下命令:
chown mysql:mysql <ssl_key Value>
chmod 400 <ssl_key Value>
檢查方法    1.執行如下sql語句獲取ssl_key的值:
show variables where variable_name = 'plugin_dir';
2. 執行如下命令查看該值的權限:
  ls -l <ssl_key Value> | egrep "^-r--------[ \t]*.[ \t]*mysql[ \t]*mysql.*$"
備註    限制這些對象的可訪問性將保護MySQL數據庫的機密性,完整性和可用性以及與客戶端的通訊。
2.3.8設置插件目錄的權限
基線名稱    設置插件目錄的權限
基線編號    Tophant-MySQL-26
基線說明    插件目錄是MySQL插件的位置。 插件是存儲引擎或用戶定義的函數(UDF)。
配置方法    使用如下命令:
chmod 775 <plugin_dir Value> (or use 755)
chown mysql:mysql <plugin_dir Value>
檢查方法    1.執行如下sql語句獲取plugin_dir的值:
show variables where variable_name = 'ssl_key';
2. 執行如下命令查看該值的權限:
 ls -l <plugin_dir Value>/.. | egrep "^drwxr[-w]xr[-w]x[ \t]*[0-9][ \t]*mysql[\t]*mysql.*plugin.*$"
備註    限制這些對象的可訪問性將保護MySQL數據庫的機密性,完整性和可用性。 若是有人能夠修改插件,那麼當服務器啓動而且代碼將被執行時,可能會加載這些插件。
2.4MySQL權限
2.4.1設置僅管理用戶具備徹底數據庫訪問權限
基線名稱    設置僅管理用戶具備徹底數據庫訪問權限
基線編號    Tophant-MySQL-27
基線說明    mysql.user和mysql.db表列出了能夠向MySQL用戶授予(或拒絕)的各類權限。須要特別注意的特權包括:Select_priv,Insert_priv,Update_priv,Delete_priv,Drop_priv等。一般這些權限不該該對每一個MySQL用戶可用,而且一般僅保留用於管理用途。
配置方法    1.枚舉審計過程產生的非管理用戶
2.對於每一個非管理用戶,請使用REVOKE語句根據須要刪除權限
檢查方法    執行如下sql語句:
SELECT user, host
FROM mysql.user
WHERE (Select_priv = 'Y')
 OR (Insert_priv = 'Y')
 OR (Update_priv = 'Y')
 OR (Delete_priv = 'Y')
 OR (Create_priv = 'Y')
 OR (Drop_priv = 'Y');
SELECT user, host
FROM mysql.db
WHERE db = 'mysql'
 AND ((Select_priv = 'Y')
  OR (Insert_priv = 'Y')
  OR (Update_priv = 'Y')
  OR (Delete_priv = 'Y')
  OR (Create_priv = 'Y')
  OR (Drop_priv = 'Y'));
備註    限制「mysql」數據庫的可訪問性將保護MySQL內部數據的機密性,完整性和可用性。
2.4.2禁用非管理用戶的「file_priv」
基線名稱    禁用非管理用戶的「file_priv」
基線編號    Tophant-MySQL-28
基線說明    mysql.user表中的File_priv權限用於容許或禁止用戶在服務器主機上讀寫文件。
配置方法    1.枚舉在審計過程的結果集中找到的非管理用戶
2.對於每一個用戶,發出如下SQL語句(將「<user>」替換爲非管理用戶:
  REVOKE FILE ON *.* FROM '<user>';
檢查方法    執行如下sql語句,確保僅管理員用戶擁有該權限:
select user, host from mysql.user where File_priv = 'Y';
備註    File_priv權限容許mysql用戶從磁盤讀取文件並將文件寫入磁盤。攻擊者可能利用這一點來進一步破壞MySQL。
2.4.3禁用非管理用戶的「process_priv」
基線名稱    禁用非管理用戶的「process_priv」
基線編號    Tophant-MySQL-29
基線說明    mysql.user表中的PROCESS權限肯定給定用戶是否能夠查看全部會話語句的執行信息。
配置方法    1.枚舉在審計過程的結果集中找到的非管理用戶
2.對於每一個用戶,發出如下SQL語句(將「<user>」替換爲非管理用戶:
  REVOKE PROCESS ON *.* FROM '<user>';
檢查方法    執行如下sql語句,確保僅管理員用戶擁有該權限:
select user, host from mysql.user where Process_priv = 'Y';
備註    PROCESS特權容許主體查看當前正在執行的MySQL語句,包括用於管理密碼的語句。攻擊者能夠利用這一點來破壞MySQL或獲取對潛在敏感數據的訪問權限。
2.4.4禁用非管理用戶的「super_priv」
基線名稱    禁用非管理用戶的「super_priv」
基線編號    Tophant-MySQL-30
基線說明    mysql.user表中的SUPER權限控制着各類MySQL功能的使用。 這些功能包括,CHANGE MASTER TO,KILL,mysqladmin kill選項,PURGE BINARY LOGS,SET GLOBAL,mysqladmin調試選項,日誌記錄控制等。
配置方法    1.枚舉在審計過程的結果集中找到的非管理用戶
2.對於每一個用戶,發出如下SQL語句(將「<user>」替換爲非管理用戶:
  REVOKE SUPER ON *.* FROM '<user>';
檢查方法    執行如下sql語句,確保僅管理員用戶擁有該權限:
select user, host from mysql.user where Super_priv = 'Y';
備註    SUPER權限容許委託人執行許多操做,包括查看和終止當前正在執行的MySQL語句(包括用於管理密碼的語句)。 此權限還提供配置MySQL的功能,例如啓用/禁用日誌記錄,更改數據,禁用/啓用功能。 限制具備SUPER權限的賬戶能夠下降攻擊者利用這些功能的可能性。
2.4.5禁用非管理用戶的「shutdown_priv」
基線名稱    禁用非管理用戶的「shutdown_priv」
基線編號    Tophant-MySQL-31
基線說明    shutdown特權只是容許使用mysqladmin命令的shutdown選項,它容許具備shutdown特權的用戶可以關閉mysql服務器。
配置方法    1.枚舉在審計過程的結果集中找到的非管理用戶
2.對於每一個用戶,發出如下SQL語句(將「<user>」替換爲非管理用戶:
  REVOKE SUPER ON *.* FROM '<user>';
檢查方法    執行如下sql語句,確保僅管理員用戶擁有該權限:
SELECT user, host FROM mysql.user WHERE Shutdown_priv = 'Y';
備註    shutdown特權容許主體關閉mysql。攻擊者可能會利用這一點對MySQL的可用性形成負面影響。
2.4.6禁用非管理用戶的「create_user_priv」
基線名稱    禁用非管理用戶的「create_user_priv」
基線編號    Tophant-MySQL-32
基線說明    create user特權管理給定用戶添加或刪除用戶、更改現有用戶名或撤消現有用戶特權的權限。
配置方法    1.枚舉在審計過程的結果集中找到的非管理用戶
2.對於每一個用戶,發出如下SQL語句(將「<user>」替換爲非管理用戶:
  REVOKE SUPER ON *.* FROM '<user>';
檢查方法    執行如下sql語句,確保僅管理員用戶擁有該權限:
SELECT user, host FROM mysql.user WHERE Create_user_priv = 'Y';
備註    減小授予CREATE USER權限的用戶數量能夠最大限度地減小可以添加/刪除用戶,更改現有用戶名稱和操縱現有用戶權限的用戶數量。
2.4.7禁用非管理用戶的「grant_priv」
基線名稱    禁用非管理用戶的「grant_priv」
基線編號    Tophant-MySQL-33
基線說明    GRANT OPTION權限存在於不一樣的上下文(mysql.user,mysql.db)中,目的是管理特權用戶操縱其餘用戶權限的能力。
配置方法    1.枚舉在審計過程的結果集中找到的非管理用戶
2.對於每一個用戶,發出如下SQL語句(將「<user>」替換爲非管理用戶:
  REVOKE SUPER ON *.* FROM '<user>';
檢查方法    執行如下sql語句,確保僅管理員用戶擁有該權限:
SELECT user, host FROM mysql.user WHERE Grant_priv = 'Y';
SELECT user, host FROM mysql.db WHERE Grant_priv = 'Y';
備註    GRANT權限容許委託人授予其餘委託人額外的權限。 攻擊者可能會使用它來破壞MySQL。
2.4.8禁用「Non-Slave」用戶的「repl_slave_priv」
基線名稱    禁用「Non-Slave」用戶的「repl_slave_priv」
基線編號    Tophant-MySQL-34
基線說明    REPLICATION SLAVE特權控制給定用戶(在主服務器的上下文中)是否能夠請求在主服務器上進行的更新。
配置方法    1.枚舉在審計過程的結果集中找到的非管理用戶
2.對於每一個用戶,發出如下SQL語句(將「<user>」替換爲非管理用戶:
  REVOKE SUPER ON *.* FROM '<user>';
檢查方法    執行如下sql語句,確保僅管理員用戶擁有該權限:
SELECT user, host FROM mysql.user WHERE Repl_slave_priv = 'Y';
備註    REPLICATION SLAVE特權容許主體獲取包含全部數據更改語句和來自主數據庫的表數據更改的binlog文件。攻擊者能夠使用它來從MySQL讀取/獲取敏感數據。
2.4.9設置DML/DDL受權僅限於特定數據庫和用戶
基線名稱    設置DML/DDL受權僅限於特定數據庫和用戶
基線編號    Tophant-MySQL-35
基線說明    DML/DDL包括用於修改或建立數據結構的一組權限。 這包括INSERT,SELECT,UPDATE,DELETE,DROP,CREATE和ALTER權限。
配置方法    1.枚舉審計過程結果集中返回的未受權用戶,主機和數據庫
2.對於每一個用戶,發出如下SQL語句(將「<user>」替換爲未受權用戶,將「<host>」替換爲主機名,將「<database>」替換爲數據庫名稱):
  REVOKE SELECT ON <host>.<database> FROM <user>;
REVOKE INSERT ON <host>.<database> FROM <user>;
REVOKE UPDATE ON <host>.<database> FROM <user>;
REVOKE DELETE ON <host>.<database> FROM <user>;
REVOKE CREATE ON <host>.<database> FROM <user>;
REVOKE DROP ON <host>.<database> FROM <user>;
REVOKE ALTER ON <host>.<database> FROM <user>;
檢查方法    執行如下sql語句, 確保返回的全部用戶都應在指定的數據庫上具備這些權限:
SELECT User,Host,Db
FROM mysql.db
WHERE Select_priv='Y'
OR Insert_priv='Y'
OR Update_priv='Y'
OR Delete_priv='Y'
OR Create_priv='Y'
OR Drop_priv='Y'
OR Alter_priv='Y';
備註    INSERT,SELECT,UPDATE,DELETE,DROP,CREATE和ALTER是任何數據庫中的強大權限。 此類權限應僅限於須要此類權限的用戶。 經過限制具備這些權限的用戶並確保它們僅限於特定數據庫,減小了數據庫的攻擊面。
2.5審計和記錄
2.5.1設置「log_error」
基線名稱    設置「log_error」
基線編號    Tophant-MySQL-36
基線說明    錯誤日誌包含有關事件的信息,例如mysqld啓動和中止、什麼時候須要檢查或修復表,以及mysqld失敗時堆棧跟蹤。
配置方法    1.打開MySQL配置文件(my.cnf或my.ini)
2.將log-error選項設置爲錯誤日誌的路徑
檢查方法    執行如下sql語句,確保返回值不爲空:
SHOW variables LIKE 'log_error';
備註    啓用錯誤日誌能夠提升檢測針對mysql和其餘關鍵消息的惡意嘗試的能力,若是沒有啓用錯誤日誌,那麼鏈接錯誤可能會被忽略。
2.5.2設置日誌文件存儲在非系統分區上
基線名稱    設置日誌文件存儲在非系統分區上
基線編號    Tophant-MySQL-37
基線說明    MySQL日誌文件能夠在MySQL配置中設置,以存在於文件系統的任何位置。一般應該將日誌文件存放在非系統分區上。
配置方法    1.打開MySQL配置文件(my.cnf)
2.找到log-bin條目並將其設置爲不在root('/'),/ var或/ usr上目錄上。
檢查方法    執行如下sql語句,確保返回的值不爲root('/')、/var或/usr。
SELECT @@global.log_bin_basename;
備註    建議將mysql日誌移出系統分區。
2.5.3設置「log_error_verbosity」
基線名稱    設置「log_error_verbosity」
基線編號    Tophant-MySQL-38
基線說明    log_error_verbosity系統變量爲MySQL日誌提供了附加信息。 值爲1能夠記錄錯誤消息。 值2表示記錄錯誤和警告消息,值3表示記錄錯誤,警告和註釋消息。
配置方法    打開MySQL配置文件(my.cnf中),確保在mysqld部分中找到如下行:
log_error_verbosity = 2  
檢查方法    執行如下sql語句,確保返回的值是2或3。
SHOW GLOBAL VARIABLES LIKE 'log_error_verbosity';
備註    這可能有助於經過記錄通訊錯誤和停止鏈接來檢測惡意行爲。
2.5.4啓用審覈日誌記錄
基線名稱    啓用審覈日誌記錄
基線編號    Tophant-MySQL-39
基線說明    審計日誌記錄實際上並未包含在MySQL的Community Edition中(僅包含了常規日誌)。使用常規日誌快速增加並對服務器性能產生影響。
配置方法    從各類來源獲取第三方MySQL日誌記錄解決方案,包括但不限於如下內容:
•常規查詢日誌
•MySQL企業審計
•適用於MySQL的MariaDB Audit插件
•McAfee MySQL Audit
檢查方法    驗證是否已安裝並配置第三方工具以啓用交互式用戶會話和(可選)應用程序會話的日誌記錄。
備註    審計日誌有助於肯定誰在何時更改了什麼。審計日誌能夠做爲調查的證據。它還能夠幫助識別攻擊者可以執行的操做。
2.5.5設置「log-raw」爲OFF
基線名稱    設置「log-raw」爲OFF
基線編號    Tophant-MySQL-40
基線說明    log-raw選項肯定服務器是否重寫密碼,以便不以純文本形式顯示在日誌文件中。 若是啓用了log-raw,則密碼將以純文本形式寫入各類日誌文件(通用查詢日誌,慢查詢日誌和二進制日誌)。
配置方法    編輯配置文件,添加如下指令:
log-raw = OFF
檢查方法    1.打開MySQL配置文件(my.cnf)
2.確保存在log-raw條目
3.確保將log-raw條目設置爲OFF
備註    經過密碼的原始日誌記錄,有權訪問日誌文件的人可能會看到純文本密碼。
2.6認證
2.6.1禁止在全局配置中存儲密碼
基線名稱    禁止在全局配置中存儲密碼
基線編號    Tophant-MySQL-41
基線說明    MySQL配置文件的[client]部分容許設置要使用的用戶和密碼。驗證全局配置文件(my.cnf)中未使用密碼選項。
配置方法    使用mysql_config_editor以加密形式在.mylogin.cnf中存儲身份驗證憑據。
檢查方法    打開MySQL配置文件(例如my.cnf),檢查[client]部分,確保未使用密碼。
備註    在全局配置中使用密碼參數可能會形成用戶密碼的泄露。

2.6.2設置「sql_mode」包含「NO_AUTO_CREATE_USER」
基線名稱    設置「sql_mode」包含「NO_AUTO_CREATE_USER」
基線編號    Tophant-MySQL-42
基線說明    NO_AUTO_CREATE_USER是sql_mode的一個選項,可防止GRANT語句在未提供身份驗證信息時自動建立用戶。
配置方法    1.打開MySQL配置文件(my.cnf)
2.在[mysqld]區域中找到sql_mode設置
3.將NO_AUTO_CREATE_USER添加到sql_mode設置
檢查方法    執行如下sql語句,確保每一個結果包含NO_AUTO_CREATE_USER。
SELECT @@global.sql_mode;
SELECT @@session.sql_mode;  
備註    沒有此設置,管理用戶可能會意外地建立沒有密碼的用戶。
2.6.3爲全部MySQL賬戶設置密碼
基線名稱    爲全部MySQL賬戶設置密碼
基線編號    Tophant-MySQL-43
基線說明    空密碼容許用戶在不使用密碼的狀況下登陸。
配置方法    執行如下sql語句:
SET PASSWORD FOR <user>@'<host>' = '<clear password>'
檢查方法    執行如下sql語句,若是全部賬戶都設置了密碼,則不會返回任何行。
SELECT User,host
FROM mysql.user
WHERE authentication_string='';
備註    在沒有密碼的狀況下,只知道用戶名和容許的主機列表就能夠繞過身份驗證機制直接鏈接到服務器。
2.6.4設置「default_password_lifetime」小於或等於90
基線名稱    設置「default_password_lifetime」小於或等於90
基線編號    Tophant-MySQL-44
基線說明    「default_password_lifetime」用於設置密碼的有效時間。應該將該選項的值設置爲小於或等於90。
配置方法    執行如下sql語句:
SET GLOBAL default_password_lifetime=90
檢查方法    執行如下sql語句:
SHOW VARIABLES LIKE 'default_password_lifetime';
備註    此設置加強了密碼的安全性。
2.6.5設置密碼複雜性
基線名稱    設置祕密複雜性
基線編號    Tophant-MySQL-45
基線說明    密碼複雜性包括密碼特徵,例如長度,大小寫等。
配置方法    編輯配置文件,添加以下指令:
plugin-load=validate_password.so
validate-password=FORCE_PLUS_PERMANENT
validate_password_length=14
validate_password_mixed_case_count=1
validate_password_number_count=1
validate_password_special_char_count=1
validate_password_policy=MEDIUM
檢查方法    執行如下sql語句:
SHOW VARIABLES LIKE 'validate_password%';
上述語句的結果應顯示:
•validate_password_length應爲14或更多
•validate_password_mixed_case_count應爲1或更多
•validate_password_number_count應爲1或更多
•validate_password_special_char_count應爲1或更多
•validate_password_policy應爲MEDIUM或STRONG
備註    複雜密碼能夠下降密碼被暴力破解的風險。
2.6.6禁用用戶的通配符主機名
基線名稱    禁用用戶的通配符主機名
基線編號    Tophant-MySQL-46
基線說明    在向特定數據庫上的用戶授予權限時,MySQL能夠使用主機通配符。例如「<user>」@''。
配置方法    1.枚舉運行審計程序後返回的全部用戶
2.將用戶的主機更改成特定用戶或DROP用戶
檢查方法    執行如下sql語句:
SELECT user, host FROM mysql.user WHERE host = '%';
備註    
2.6.7禁用匿名賬戶
基線名稱    禁用匿名帳戶
基線編號    Tophant-MySQL-47
基線說明    匿名賬戶是用戶名爲空(")的用戶。匿名賬戶沒有密碼,因此任何人均可以使用它們鏈接到mysql服務器。
配置方法    1.枚舉從執行審計過程返回的匿名用戶
2.對於每一個匿名用戶,請DROP或爲其指定名稱
檢查方法    執行如下sql語句:
SELECT user,host FROM mysql.user WHERE user = '';
備註    刪除匿名賬戶將有助於確保只有已識別和可信的主體才能與MySQL交互。
2.7網絡設置
2.7.1設置「have_ssl」爲YSE
基線名稱    設置「have_ssl」爲YES
基線編號    Tophant-MySQL-48
基線說明    在不受信任的網絡上傳輸時,全部網絡流量都必須使用ssl/tls。
配置方法    參閱以下資料:
http://dev.mysql.com/doc/refman/5.7/en/ssl-connections.html
http://dev.mysql.com/doc/refman/5.7/en/ssl-options.html
檢查方法    執行如下sql語句,查看返回值是否爲YES。
SHOW variables WHERE variable_name = 'have_ssl';
備註    受SSL/TLS協議保護的MySQL有助於防止竊聽和中間人攻擊。
2.7.2設置遠程用戶的「ssl_type」
基線名稱    設置遠程用戶的「ssl_type」
基線編號    Tophant-MySQL-49
基線說明    在不受信任的網絡上傳輸時,全部網絡流量都必須使用SSL/TLS。 對於經過網絡進入系統的用戶,應該基於每一個用戶強制執行SSL/TLS。
配置方法    執行如下sql語句:
GRANT USAGE ON *.* TO 'my_user'@'app1.example.com' REQUIRE SSL;
檢查方法    執行如下sql語句:
SELECT user, host, ssl_type FROM mysql.user
WHERE NOT HOST IN ('::1', '127.0.0.1', 'localhost');
驗證返回的每一個用戶的ssl_type是否等於ANY,X509或SPECIFIED。
備註    受SSL/TLS協議保護的MySQL有助於防止竊聽和中間人攻擊。
2.8其餘設置
2.8.1安裝最新的安全補丁
基線名稱    安裝最新的安全補丁
基線編號    Tophant-MySQL-50
基線說明    建議MySQL安裝最新的安全更新。
配置方法    安裝最新版本的補丁或升級到最新版本。
檢查方法    執行如下sql語句:
SHOW VARIABLES WHERE Variable_name LIKE "version";
備註    若是沒有最新的安全補丁,攻擊者可能會利用已知的漏洞對MySQL服務器進行攻擊。
2.8.2刪除「test」數據庫
基線名稱    刪除「test」數據庫
基線編號    Tophant-MySQL-51
基線說明    默認的mysql安裝附帶一個未使用的數據庫test。建議刪除該數據庫。
配置方法    執行如下sql語句:
DROP DATABASE "test";
檢查方法    執行如下sql語句:
SHOW DATABASES LIKE 'test';
備註    test數據庫能夠被全部用戶訪問,並可用於消耗系統資源。刪除測試數據庫將減小MySQL服務器的攻擊面。
2.8.3設置「allow-suspicious-udfs」爲「FALSE」
基線名稱    設置「allow-suspicious-udfs」爲「FALSE」
基線編號    Tophant-MySQL-52
基線說明    此選項經過檢查至少一個對應的方法_init、_deinit、_reset、_clear或_add來防止將任意共享庫函數附加爲用戶定義的函數。
配置方法    1.從mysqld啓動命令行中刪除--allow-suspicious-udfs。
2.從MySQL選項文件中刪除allow-suspicious-udfs。
檢查方法    1.檢查在mysqld啓動命令行中是否指定--allow-suspicious-udfs。
2.檢查在MySQL配置中是否將allow-suspicious-udfs設置爲FALSE。
備註    防止加載不包含用戶定義函數的共享庫將減小服務器的攻擊面。
2.8.4禁用「local_infile」
基線名稱    禁用「local_infile」
基線編號    Tophant-MySQL-53
基線說明    local_infile參數指示是否能夠經過LOAD DATA INFILE或SELECT local_file加載或選擇位於MySQL客戶端計算機上的文件。
配置方法    將如下行添加到MySQL配置文件的[mysqld]部分並從新啓動MySQL服務:
local-infile=0
檢查方法    執行如下sql語句:
SHOW VARIABLES WHERE Variable_name = 'local_infile';
備註    禁用local_infile可下降攻擊者經過SQL注入漏洞攻擊服務器,從而讀取服務器敏感文件的風險。
2.8.5禁用「--skip-grant tables」
基線名稱    禁用「--skip-grant tables」
基線編號    Tophant-MySQL-54
基線說明    此選項致使mysqld在不使用系統特權的狀況下啓動
配置方法    編輯配置文件,添加以下指令:
skip-grant-tables = FALSE
檢查方法    1.打開mysql配置文件(例如my.cnf),搜索skip-grant-tables
2.確保skip-grant-tables設置爲false
備註    若是使用此選項,受影響服務器的全部客戶機均可以無限制地訪問全部數據庫。
2.8.6啓用「--skip-symbolic-links」
基線名稱    啓用「--skip-symbolic-links」
基線編號    Tophant-MySQL-55
基線說明    MySQL的symbolic-links和skip-symbolic-links選項肯定是否支持符號連接。啓用符號連接時,它們具備不一樣的效果,具體取決於主機平臺。禁用符號連接時,數據庫不會使用存儲在文件中的符號連接或表中的條目。
配置方法    編輯配置文件,添加以下指令:
skip_symbolic_links=yes
檢查方法    執行如下sql語句:
SHOW variables LIKE 'have_symlink';
備註    符號連接選項可能容許經過mysql服務器將操做直接指向其餘文件和/或目錄。
2.8.7禁用「daemon_memcached」插件
基線名稱    禁用「daemon_memcache」'插件
基線編號    Tophant-MySQL-56
基線說明    InnoDB memcached插件容許用戶使用memcached協議訪問存儲在InnoDB中的數據。
配置方法    使用命令: uninstall plugin daemon_memcached;
檢查方法    執行如下sql語句:
SELECT * FROM information_schema.plugins WHERE PLUGIN_NAME='daemon_memcached'
備註    默認狀況下,插件不進行身份驗證,這意味着任何有權訪問插件的TCP / IP端口的人均可以訪問和修改數據。 可是,默認狀況下並不是全部數據都會公開。
2.8.8設置「sql_mode」包含「STRICT_ALL_TABLES」
基線名稱    設置「sql_mode」包含「STRICT_ALL_TABLES」
基線編號    Tophant-MySQL-57
基線說明    當執行數據更改語句(即INSERT、update)時,mysql能夠根據是否啓用嚴格的sql模式以不一樣的方式處理無效或缺失的值
配置方法    將STRICT_ALL_TABLES添加到服務器配置文件中的sql_mode。
檢查方法    執行如下sql語句:
SHOW VARIABLES LIKE 'sql_mode';
備註    默認狀況下,若是數據不適合某個字段,MySQL將截斷數據,這可能致使未知行爲,或者被攻擊者用來繞過數據驗證。

2.8.9設置「MASTER_SSL_VERIFY_SERVER_CERT」爲YES或1
基線名稱    設置「MASTER_SSL_VERIFY_SERVER_CERT」爲YES或1
基線編號    Tophant-MySQL-58
基線說明    在MySQL上下文中,設置MASTER_SSL_VERIFY_SERVER_CERT指示從屬設備是否應驗證主服務器的證書。此配置項能夠設置爲「是」或「否」,除非在從站上啓用了SSL,不然將忽略該值。
配置方法    執行如下sql語句:
STOP SLAVE; -- required if replication was already running
CHANGE MASTER TO MASTER_SSL_VERIFY_SERVER_CERT=1;
START SLAVE; -- required if you want to restart replication
檢查方法    執行如下sql語句,驗證返回值是否爲1。
select ssl_verify_server_cert from mysql.slave_master_info;
備註    使用SSL時,證書驗證對於正在創建驗證鏈接的一方很是重要。 在這種狀況下,客戶端應驗證服務器的證書。
2.8.10設置複製用戶的「super_priv」
基線名稱    設置複製用戶的「super_priv」
基線編號    Tophant-MySQL-59
基線說明    mysql.user表中的SUPER權限控制着各類MySQL功能的使用。這些功能包括,CHANGE MASTER TO,KILL,mysqladmin kill選項,PURGE BINARY LOGS,SET GLOBAL,mysqladmin調試選項,日誌記錄控制等。
配置方法    1.枚舉在審計過程的結果集中找到的複製用戶
2.對於每一個複製用戶,發出如下SQL語句(將「repl」替換爲複製用戶的名稱):
REVOKE SUPER ON *.* FROM 'repl';
檢查方法    執行如下sql語句,驗證是否有返回值。
select user, host from mysql.user where user='repl' and Super_priv = 'Y';
備註    UPER權限容許委託人執行許多操做,包括查看和終止當前正在執行的MySQL語句(包括用於管理密碼的語句)。限制具備SUPER權限的賬戶能夠下降攻擊者利用這些功能的可能性。

 

數據庫安全加固 - Oraclegit

1.概述
1.1適用範圍
本配置基線適用於Oracle系列系統,主要涉及Oracle系統安全配置方面的基本要求,用於指導安全例行工做、新系統入網安全檢查等場合。
1.2規範依據
據目前Oracle操做系統的安全現狀,制定適合的基線配置規範。
規範性引用文件:
GB/T 28448-2012 《信息安全技術 信息系統安全等級保護測評要求》
GB/T 28453-2012 《信息安全技術 信息系統安全管理評估要求》
GB/T 25063-2010 《信息安全技術 服務器安全測評要求》
GB/Z 24364-2009 《信息安全技術 信息安全風險管理指南》
GB/T 22239-2008 《信息安全技術 信息系統安全等級保護基本要求》
GB/T 20270-2006 《信息安全技術 網絡基礎安全技術要求》
GB/T 20271-2006 《信息安全技術 信息系統通用安全技術要求》
GB/T 20269-2006 《信息安全技術 信息系統安全管理要求》
YD/T 2701-2014  《電信網和互聯網安全防禦基線配置要求及檢測要求》
1.3實施策略
結合網絡和信息系統建設狀況,考慮安全配置項影響的範圍,結合以往工做經驗,提出以下安全項目實施策略:
基礎項:實施安全基線可以明顯提高安全水平,實施風險小,可操做性強。
建議項:實施安全基線可以提高必定安全水平,具備必定風險,可操做性較強。
序號    配置類別    安全基線項目名稱    實施策略
1    身份鑑別    鎖定沒必要要賬號    基礎項
2    身份鑑別    設置並保證密碼複雜度    基礎項
3    身份鑑別    更改默認賬號密碼    基礎項
4    身份鑑別    設置認證失敗策略    基礎項
5    身份鑑別    配置重複口令使用次數    建議項
6    身份鑑別    設置賬號口令的生存期    建議項
7    身份鑑別    配置密碼變動寬限期    建議項
8    訪問控制    設置監聽器啓停密碼    基礎項
9    訪問控制    權限分離    基礎項
10    訪問控制    限制帳戶權限    基礎項
11    訪問控制    限制TNS登陸IP    建議項
12    訪問控制    限制DBA帳戶遠程登陸    建議項
13    訪問控制    配置數據字典訪問權限    建議項
14    安全審計    配置數據庫審計    建議項
15    資源控制    設置鏈接超時鎖定策略    基礎項
16    其它安全項    配置安裝最小化    建議項
17    其它安全項    設置通信傳輸加密    建議項
18    其它安全項    更新數據庫補丁    建議項
2.安全配置基線標準
2.1身份鑑別
2.1.1鎖定沒必要要帳戶
基線名稱    鎖定沒必要要帳戶(基礎項)
基線編號    Tophant-Oracle-1
基線項說明      應鎖定與數據庫運行、維護等工做無關的帳戶。
配置方法    如下操做需sys權限
配置命令以下:
sqlplus "/ as sysdba"      //登陸到sqlplus環境
SQL> alter user username account lock;  //username爲須要鎖定的帳戶
若是鎖定某用戶後對業務形成影響,使用如下命令進行帳戶解鎖:
SQL> alter user username account unlock;
Oracle默認開啓sys,system,dbsnmp,sysman,mgmt_view帳戶,若不須要上述帳戶,可由數據庫管理員禁用。
檢查方法    結合要求和實際業務狀況判斷符合要求鎖定與設備運行、維護等與工做無關的帳戶。
如下操做需sys權限帳戶登陸
sqlplus "/ as sysdba"
SQL> select username,account_status from dba_users; //命令查看是否存在(sys,system,dbsnmp,sysman,mgmt_view)多餘未鎖定帳戶
依據    
備註    須要手工判斷,實際狀況應與具體需求爲準,謹慎操做。

2.1.2設置並保證密碼複雜度
基線名稱    設置並保證密碼複雜度(基礎項)
基線編號    Tophant-Oracle-2
基線項說明      對於採用靜態口令進行認證的數據庫,口令長度至少8位,幷包括數字、小寫字母、大寫字母和特殊符號四類中至少兩類。且5次之內不得設置相同的口令。 
配置方法    如下操做需sys權限
配置命令以下:
sqlplus "/as sysdba "      //登陸到sqlplus環境
@%oracle_home%/RDBMS/ADMIN/utlpwdmg.sql
SQL> create profile profile1 limit
password_grace_time 7
        password_life_time 90
        password_reuse_max 32
        password_verify_function
將策略應用到用戶
SQL> alter user username profile profile1;
應用策略後,修改密碼
SQL> alter user 用戶名 identified by 新密碼 replace 舊密碼
檢查方法    參考配置方法。
依據    
備註    
2.1.3更改默認帳戶密碼
基線名稱    更改默認帳戶密碼(基礎項)
基線編號    Tophant-Oracle-3
基線項說明      更改數據庫默認帳戶的密碼。
配置方法    如下操做需sys權限
SQL> alter user user01 identified by user10;  //這個是把USER01用戶密碼修改成USER10
使用上述命令修改下面的Oracle數據庫默認帳戶密碼:
system/system、system/manager 、sys/sys、sys/cHAnge_on_install 、scott/scott、scott/tiger、dbsnmp/dbsnmp 、rman/rman、xdb/xdb
檢查方法    使用:system/system、system/manager 、sys/sys、sys/cHAnge_on_install 、scott/scott、scott/tiger、dbsnmp/dbsnmp 、rman/rman、xdb/xdb帳戶名/密碼登陸sqlplus環境。若登陸成功說明使用默認密碼需修改。
依據    
備註    

2.1.4設置認證失敗策略
基線名稱    設置認證失敗策略(基礎項)
基線編號    Tophant-Oracle-4
基線項說明      對於採用靜態口令認證技術的數據庫,應配置當用戶連續認證失敗次數超過10次,鎖定該用戶使用的帳戶。
配置方法    如下操做需sys權限
sqlplus 「/as sysdba」 
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 10; 
檢查方法    查詢語句select resource_name, limit from dba_profiles, dba_users where dba_profiles.profile = dba_users.profile and dba_users.account_status='OPEN' and resource_name='FAILED_LOGIN_ATTEMPTS';
在返回的查詢結果中:
FAILED_LOGIN_ATTEMPTS等於10(或根據實際狀況定義的其它值)則知足要求。
依據    6.2.1.4 應用安全:身份鑑別(S3):d) 應提供登陸失敗處理功能,可採起結束會話、限制非法登陸次數和自動退出等措施;
備註    根據應用場景的不一樣,如部署場景需開啓此功能,則強制要求此項。對核心庫、生產用戶不能設置此基線。誤操做或惡意超過10次,致使用戶鎖定,有必定風險,可能會致使應用異常
2.1.5配置重複口令使用次數
基線名稱    配置重複口令使用次數(建議項)
基線編號    Tophant-Oracle-5
基線項說明      對於採用靜態口令認證技術的數據庫,應配置數據庫,使用戶不能重複使用最近5次(含5次)內已使用的口令。
配置方法    如下操做需sys權限
sqlplus 「/as sysdba」
alter profile profile1 limit  password_reuse_max 5;
檢查方法    查詢語句select resource_name, limit from dba_profiles, dba_users where dba_profiles.profile = dba_users
.profile and dba_users.account_status='OPEN' and resource_name='PASSWORD_REUSE_MAX';
查詢結果中PASSWORD_REUSE_MAX大於等於5。
依據    
備註    
2.1.6設置帳戶口令的生存期
基線名稱    設置帳戶口令的生存期(建議項)
基線編號    Tophant-Oracle-6
基線項說明      對於採用靜態口令認證技術的數據庫,帳戶口令的生存期(使用時間)不長於90天。
配置方法    如下操做需sys權限
sqlplus 「/as sysdba」
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90;
檢查方法    查詢語句select limit from dba_profiles where 
resource_name='PASSWORD_LIFE_TIME' and profile in (select profile from dba_users where account_status='OPEN'
查詢結果中PASSWORD_LIFE_TIME小於等於90才知足要求。
依據    
備註    數據庫口令有效期更改可能給運維工做增長必定負擔。
2.1.7配置密碼變動寬限期
基線名稱    配置密碼變動寬限期(建議項)
基線編號    Tophant-Oracle-7
基線項說明      配置帳戶密碼更改所寬限的時間(單位:天)。
配置方法    如下操做需sys權限
sqlplus 」/as sysdba」
ALTER PROFILE DEFAULT LIMIT PASSWORD_GRACE_TIME 7;
檢查方法    查詢語句select resource_name, limit from dba_profiles, dba_users where dba_profiles.profile = dba_users
.profile and dba_users.account_status='OPEN' and resource_name='PASSWORD_GRACE_TIME'
查詢結果中PASSWORD_GRACE_TIME小於等於7。
依據    
備註    密碼過時後7天內不修改密碼,密碼將失效

2.2訪問控制
2.2.1設置監聽器啓停密碼
基線名稱    設置監聽器啓停密碼(基礎項)
基線編號    Tophant-Oracle-8
基線項說明      爲數據庫監聽器(LISTENER)的關閉和啓動設置密碼。
配置方法    如下操做需sys權限
設置監聽器口令:
SHELL>%ORACLE_HOME%/bin/lsnrctl
LSNRCTL> change_password
Old password: <原來的口令> <-- 若是原來沒有設置口令就直接回車,不然輸入原來的口令
New password: <新口令>
Reenter new password: <新口令>
Connecting to (ADDRESS=(PROTOCOL=ipc)(KEY=XXX))
Password changed for LISTENER
The command completed successfully 
LSNRCTL> set password
Password: <輸入新口令>
LSNRCTL> save_config (保存當前設置)

之後執行監聽器命令前須要輸入密碼:
LSNRCTL>set password
Password: <輸入新口令>
LSNRCTL>status (若是上一步未驗證密碼,則提示TNS-01169: 監聽器還沒有識別口令)
檢查方法    要求正確設置參數PASSWORDS_LISTENER;
使用lsnrctl start或lsnrctl stop命令起停listener須要密碼。
依據    
備註    
2.2.2權限分離
基線名稱    權限分離(基礎項)
基線編號    Tophant-Oracle-9
基線項說明      不容許使用操做系統管理員遠程或本地登陸數據庫
配置方法    如下操做需sys權限
sqlplus "/ as sysdba"
禁止Oracle 遠程操做系統認證:
SQL> alter system set remote_os_authent=false scope=spfile;
關閉,從新啓動數據庫
SQL>shutdown 
SQL>startup
修改sqlnet.ora文件內容以下:
「SQLNET.AUTHENTICATION_SERVICES=(NONE)」(沒有引號),用戶之後鏈接數據庫須要輸入用戶名和密碼。
檢查方法    如下操做需sys權限帳戶登陸
檢查Oracle 遠程操做系統認證:
以Oracle用戶身份執行以下命令:
SQL>show parameter remote_os_authent;
檢查Oracle本地操做系統認證:
打開%ORACLE_HOME%\network\admin\sqlnet.ora,檢查是否有如下行SQLNET.AUTHENTICATION_SERVICES= (NTS)
依據    
備註    

2.2.3限制帳戶權限
基線名稱    限制帳戶權限(基礎項)
基線編號    Tophant-Oracle-10
基線項說明      應根據實際業務須要,配置用戶的最小權限。
配置方法    如下操做需sys權限
sqlplus "/ as sysdba"
revoke dba from user1;
撤消沒必要要的包的PUBLIC執行權限:
sqlplus "/ as sysdba"
SQL>revoke execute on <包名稱> from public;
若業務須要其餘帳戶使用該權限,應作特別說明並存檔備查。
檢查方法    查看系統權限:
SQL> select * from dba_sys_privs;
例如:
SQL> select * from dba_sys_privs where grantee='scott';
查看對象權限:
SQL> select * from dba_tab_privs;
例如,查看scott用戶下employees表的權限
SQL> select grantee,privilege,grantor,grantable 
        from dba_tab_privs where 
        owner='scott' and table_name='employees';
檢查包的PUBLIC執行權限:
SQL> select table_name from dba_tab_privs where grantee='PUBLIC' and privilege='EXECUTE' and table_name in ('UTL_FILE', 'UTL_TCP', 'UTL_HTTP', 'UTL_SMTP', 'DBMS_LOB', 'DBMS_SYS_SQL', 'DBMS_JOB','DBMS_SCHEDULER');

依據    
備註    檢查各用戶權限是否能知足業務須要且沒有除業務須要之外的任何權限;
僅保留必要的包的PUBLIC角色執行權限;
經過設置初始化參數來限制只有SYSDBA權限的用戶才能訪問數據字典:O7_DICTIONARY_ACCESSIBILITY = FALSE
2.2.4限制TNS登錄IP
基線名稱    限制TNS登陸IP(建議項)
基線編號    DB-Oracle-11
基線項說明      經過數據庫所在操做系統或防火牆限制,只有信任的IP 地址才能經過監聽器訪問數據庫。
配置方法    如下操做需sys權限
只需在服務器上的文件$ORACLE_HOME/network/admin/sqlnet.ora 中設
置如下行:
tcp.validnode_checking = YES
tcp.excluded_nodes = (禁止的IP地址1,禁止的IP地址2)
tcp.invited_nodes =(容許的IP地址1,容許的IP地址2)
補充說明:
若是網絡層已經作過訪問控制,該項爲可選項,不然爲必選項
可信內網地址指:專用維護終端、訪問數據庫應用服務器、堡壘機,
其餘地址段禁止。
檢查方法    1、斷定條件
在非信任的客戶端以數據庫帳戶登陸被提示拒絕。
2、檢測操做
檢查$ORACLE_HOME/network/admin/sqlnet.ora 文件中是否設置參數
tcp.validnode_checking 和tcp.invited_nodes。
依據    
備註    根據應用場景的不一樣,如部署場景需開啓此功能,則強制要求此項。
2.2.5限制DBA帳戶遠程登錄
基線名稱    限制DBA帳戶遠程登陸(建議項)
基線編號    DB-Oracle-12
基線項說明      限制具有數據庫超級管理員(SYSDBA)權限的用戶遠程登陸。
配置方法    如下操做需sys權限
sqlplus 」/as sysdba」 
SQL> alter system set remote_login_passwordfile=none scope=spfile;
關閉,從新啓動數據庫
SQL>shutdown                 
SQL>startup
檢查方法    參照配置方法,參數REMOTE_LOGIN_PASSWORDFILE設置爲NONE; (限制遠程登陸)。
依據    6.2.1.4 應用安全:訪問控制(S3):b) 訪問控制的覆蓋範圍應包括與資源訪問相關的主體、客體及它們之間的操做;
備註    根據應用場景的不一樣,如部署場景需開啓此功能,則強制要求此項。例外狀況:
若存在rman備份,有從遠程發起的備份,好比:
connect sys/@crmdb11assysdba  需重點確認是否有影響。須要數據庫管理員確認。請謹慎操做。
2.2.6配置數據字典訪問權限
基線名稱    數據字典訪問權限(建議項)
基線編號    DB-Oracle-13
基線項說明      啓用數據字典保護,只有SYSDBA權限用戶才能訪問數據字典基礎表。
配置方法    如下操做需sys權限
sqlplus 「/as sysdba」      
SQL>alter system set O7_DICTIONARY_ACCESSIBILITY=FALSE scope=spfile;
關閉、從新啓動數據庫
SQL>shutdown
SQL>startup
檢查方法    檢查O7_DICTIONARY_ACCESSIBILITY是否設置爲FALSE,命令以下:
SQL> show parameter O7_dictionary_accessibility;
依據    
備註    
2.3安全審計
2.3.1配置數據庫審計
基線名稱    配置數據庫審計(建議項)
基線編號    Tophant-Oracle-14
基線項說明      根據業務要求制定數據庫審計策略。
對用戶登陸進行記錄,記錄內容包括用戶登陸使用的帳戶、登陸是否成功、登陸時間以及遠程登陸時用戶使用的IP地址;
用戶對數據庫的操做,包括但不限於如下內容:帳戶建立、刪除和權限修改、口令修改、讀取和修改數據庫配置、讀取和修改業務用戶的話費數據、身份數據、涉及通訊隱私數據。記錄須要包含用戶帳戶,操做時間,操做內容以及操做結果;
記錄對與數據庫相關的安全事件。
配置方法    如下操做需sys權限
sqlplus 「/as sysdba」   
SQL> alter system set audit_trail=os scope=spfile;
關閉、從新啓動數據庫
SQL>shutdown
SQL>startup
檢查方法    SQL>show parameter audit_trail;  
參數audit_trail不能設置爲NONE。
依據    
備註    根據應用場景的不一樣,如部署場景需開啓此功能,則強制要求此項。經過外圍審計實現.數據庫開啓該項參數後,對數據庫性能影響較大。
在以往的基線推廣中,因數據庫審計基線對業務系統影響較大,很難落地實施。
2.4資源控制
2.4.1設置鏈接超時鎖定策略
基線名稱    設置鏈接超時鎖定策略(基礎項)
基線編號    Tophant-Oracle-15
基線項說明      在某些應用環境下可設置數據庫鏈接超時,好比數據庫超過10分鐘的空閒遠程鏈接將自動斷開。
自動斷開超過10分鐘的空閒遠程鏈接,以防止在長時間遠程鏈接過程當中被其餘人竊聽到敏感信息的泄露。同時方式遠程人員在離開時並未鎖屏或則有效保護,他人藉助此時時間空閒進行違規操做帶來沒必要要的安全風險。
配置方法    如下操做需sys權限
配置以下:
在sqlnet.ora中找到「SQLNET.EXPIRE_TIME」項,設置該項參數爲10。
示例以下:
SQLNET.EXPIRE_TIME=10
檢查方法    10分鐘以上的無任何操做的空閒數據庫鏈接被自動斷開;
檢查$ORACLE_HOME/network/admin/sqlnet.ora文件中是否設置參數SQLNET.EXPIRE_TIME。
依據    
備註    如應用需求有長鏈接形式存在,該項有必定風險。
2.5其餘安全項
2.5.1配置安裝最小化
基線名稱    配置安裝最小化(建議項)
基線編號    DB-Oracle-16
基線項說明    只安裝業務須要的選件.。須要業務相關人員、數據庫管理員共同確認Oracle須要安裝的選件,不須要的選件不進行安裝。
配置方法    此檢查項以問詢方式進行。
檢查方法    此檢查項以問詢方式進行,根據當前業務情況進行檢查。
依據    
備註    該項無具體的檢查、安全配置方法。實際狀況請以具體需求爲準。
能夠用Oracle Universal Installer卸載Oracle組件。

數據庫安全加固 - PostgreSQL

1.概述
1.1適用範圍
本配置基線適用於PostgreSQL 10版本,主要涉及PostgreSQL數據庫安全配置方面的基本要求,用於指導安全例行工做、新系統入網安全檢查等場合。
1.2規範依據
根據目前PostgreSQL數據庫安全現狀,結合相關規範性文件指引,制定適合的基線配置規範。
規範性引用文件:
GB/T28448-2012《信息安全技術信息系統安全等級保護測評要求》
GB/T28453-2012《信息安全技術信息系統安全管理評估要求》
GB/T25063-2010《信息安全技術服務器安全測評要求》
GB/Z24364-2009《信息安全技術信息安全風險管理指南》
GB/T22239-2008《信息安全技術信息系統安全等級保護基本要求》
GB/T20270-2006《信息安全技術網絡基礎安全技術要求》
GB/T20271-2006《信息安全技術信息系統通用安全技術要求》
GB/T20269-2006《信息安全技術信息系統安全管理要求》
YD/T2701-2014《電信網和互聯網安全防禦基線配置要求及檢測要求》




2.安全配置基線標準
2.1安裝和補丁
2.1.1從受權倉庫獲取安裝包
基線名稱    從受權倉庫獲取安裝包
基線編號    Tophant-PostgreSQL-1
基線說明    在獲取和安裝軟件包時(一般經過yum),必須只從有效的和受權的倉庫中獲取軟件包。
配置方法    1.直接使用命令:rpm -ivh https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-
x86_64/pgdg-centos10-10-2.noarch.rpm
2.正確配置yum倉庫,使用yum命令安裝
檢查方法    使用命令:yum repolist all | grep enabled:
備註    使用無效或者爲受權來源的安裝包會增長系統被攻擊的可能性。

2.1.2安裝二進制包
基線名稱    安裝二進制包
基線編號    Tophant-PostgreSQL-2
基線說明    保證PostgreSQL軟件包是從有效源安裝在操做系統上的。
配置方法    根據實際狀況,選擇正確的且有效的安裝包。
檢查方法    使用命令:yum info $(rpm -qa|grep postgres) | egrep '^Name|^Version|^From'
備註    從安全性的角度來看,必須驗證postgresql二進制包是來自一個有效的linux yum倉庫

2.1.3啓用systemd服務
基線名稱    啓用systemd服務
基線編號    Tophant-PostgreSQL-3
基線說明    確認PostgreSQL systemd服務已啓用
配置方法    使用命令:systemctl enable postgresql-10
檢查方法    使用命令:systemctl list-dependencies multi-user.target | grep -i postgres
備註    在操做系統上啓用systemd服務可確保在發生狀態更改時數據庫服務處於活動狀態,如系統啓動或從新引導時。

2.1.4數據庫集羣初始化
基線名稱    數據庫集羣初始化
基線編號    Tophant-PostgreSQL-4
基線說明    首次安裝PostgreSQL須要初始化數據庫集羣。 數據庫集羣是由單個服務器實例管理的數據庫集合。
配置方法    必須將數據庫集羣初始化到空目錄中
檢查方法    使用命令:/usr/pgsql-10/bin/postgresql-10-setup initdb
備註    錯誤地初始化數據集羣將致使安裝失敗。

2.2目錄和文件權限
2.2.1設置正確的文件權限掩碼
基線名稱    設置正確的文件權限掩碼
基線編號    Tophant-PostgreSQL-5
基線說明    文件老是使用默認的權限集建立。能夠經過umask的權限掩碼來限制文件權限。postgres用戶賬戶應使用077的umask拒絕對除全部者之外的全部用戶賬戶的文件訪問權限。
配置方法    使用以下命令:
1.echo "umask 077" >> .bash_profile
2.source .bash_profile
檢查方法    使用以下命令:
1.su – postgres
2.umask
備註    linux操做系統將umask默認爲002,這意味着全部者和主要組能夠讀取和寫入文件,並容許其餘賬戶讀取該文件。未明確將umask設置爲限制爲077的值容許其餘用戶讀取,寫入甚至執行由postgres用戶賬戶建立的文件和腳本

2.2.2配置PostgreSQL pg_wheel組成員關係
基線名稱    配置PostgreSQL pg_wheel組成員關係
基線編號    Tophant-PostgreSQL-6
基線說明    在安裝PostgreSQL服務器的主機上顯式建立組pg_wheel。 經過使用sudo命令,此組中的成員身份容許普通用戶賬戶得到對數據庫羣集的「超級用戶」訪問權限,只有得到超級用戶訪問權限的用戶賬戶才應該是pg_wheel組的成員。
配置方法    參閱如下資料,根據實際狀況配置:
https://man7.org/linux/man-pages/man1/groups.1.html
https://man7.org/linux/man-pages/man8/getent.1.html
https://man7.org/linux/man-pages/man8/gpasswd.1.html https://man7.org/linux/man-pages/man8/useradd.8.html https://en.wikipedia.org/wiki/Wheel_%28Unix_term%29
檢查方法    1.使用getent group pg_wheel命令判斷pg_wheel組是否存在
2.若是存在,使用以下命令驗證:
awk -F':' '/pg_wheel/{print $4}' /etc/group
備註    擁有pg_wheel組未受權成員資格的用戶能夠擁有PostgreSQL RDBMS全部者的權限並管理數據庫,以及訪問他們沒法訪問的腳本,文件和其餘可執行文件。

2.3日誌監控和審計
2.3.1設置‘log_destination’
基線名稱    設置‘log_destination’
基線編號    Tophant-PostgreSQL-7
基線說明    postgresql支持多種記錄服務器消息的方法,包括stderr、csvlog和syslog。在windows上,也支持eventlog。應該爲服務器日誌輸出設置一個或多個目標。
配置方法    執行如下sql語句(在本例中,將日誌目的地設置爲csvlog):
postgres=# alter system set log_destination = 'csvlog';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
檢查方法    執行如下sql語句查看當前活動日誌目的地:
postgres=# show log_destination;
log_destination
-----------------
stderr
(1 row)
備註    若是沒有設置log_destination,那麼核心postgresql進程生成的任何日誌消息都將丟失。

2.3.2啓用‘logging_collector’
基線名稱    啓用‘logging_collector’
基線編號    Tophant-PostgreSQL-8
基線說明    logging_collector是一個後臺進程,它捕獲發送到stderr的日誌消息並將其重定向到日誌文件。必須啓用logging_collector設置才能運行此進程。它只能在服務器啓動時設置。
配置方法    執行如下sql語句:
postgres=# alter system set logging_collector = 'on';
ALTER SYSTEM
檢查方法    執行如下sql語句並確認logging_collector已啓用:
postgres=# show logging_collector;
logging_collector
-------------------
on
(1 row)
備註    某些類型的消息可能不會出如今syslog輸出中,啓用logging_collector來收集更多的日誌。

2.3.3設置日誌文件的目標目錄
基線名稱    設置日誌文件的目標目錄
基線編號    Tophant-PostgreSQL-9
基線說明    當log_destination爲stderr或csvlog時,log_directory設置指定日誌文件的目標目錄。 它能夠指定爲相對於集羣數據目錄($ PGDATA)或絕對路徑。 應根據組織的日誌記錄策略設置log_directory。
配置方法    執行如下sql語句:
postgres=# alter system set log_directory='logs';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
postgres=# show log_directory;
log_directory
---------------
logs
(1 row)
檢查方法    執行如下sql語句:
postgres=# show log_directory;
log_directory
---------------
log
(1 row)
備註    若是未設置log_directory,則將其解釋爲絕對路徑'/',PostgreSQL將嘗試在其中寫入其日誌(而且一般因爲缺乏對該目錄的權限而失敗)。 應設置此參數以將日誌定向到日誌記錄策略定義的相應目錄位置。

2.3.4設置‘log_filename’
基線名稱    設置‘log_filename’
基線編號    Tophant-PostgreSQL-10
基線說明    log_filename設置指定日誌文件的文件名模式。log_filename的值應該與日誌記錄策略相匹配。
配置方法    執行如下sql語句:
postgres=# alter system set log_filename='postgresql-%Y%m%d.log';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
postgres=# show log_filename;
log_filename
-------------------
postgresql-%Y%m%d.log
(1 row)
檢查方法    執行如下sql語句:
postgres=# show log_filename;
log_filename
-------------------
postgresql-%a.log
(1 row)
備註    若是沒有設置log_filename,那麼log_directory的值將被附加到一個空字符串中,postgresql將沒法啓動,由於它將嘗試寫入目錄而不是文件。

2.3.5設置日誌文件權限
基線名稱    設置日誌文件權限
基線編號    Tophant-PostgreSQL-11
基線說明    啓用logging_collector時,log_file_mode設置肯定日誌文件的文件權限。
配置方法    執行如下sql語句:
postgres=# alter system set log_file_mode = '0600';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
postgres=# show log_file_mode;
log_file_mode
---------------
0600
(1 row)
檢查方法    執行如下sql語句:
postgres=# show log_file_mode;
log_file_mode
---------------
0600
(1 row)
備註    日誌文件一般包含敏感數據。 容許沒必要要地訪問日誌文件可能會無心中將敏感數據暴露給未經受權的人員。

2.3.6啓用‘log_truncate_on_rotation’
基線名稱    啓用‘log_truncate_on_rotation’
基線編號    Tophant-PostgreSQL-12
基線說明    啓用logging_collector時啓用log_truncate_on_rotation設置會致使postgresql在日誌旋轉期間截斷(覆蓋)具備相同名稱的現有日誌文件,而不是附加到它們。
配置方法    執行如下sql語句:
postgres=# alter system set log_truncate_on_rotation = 'on';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
postgres=# show log_truncate_on_rotation;
log_truncate_on_rotation
--------------------------
on
(1 row)
檢查方法    執行如下sql語句:
postgres=# show log_truncate_on_rotation;
log_truncate_on_rotation
--------------------------
off
(1 row)
備註    若是沒有啓用此設置,那麼以生成靜態名稱的方式配置log_filename,則將覆蓋以前存在的日誌文件。

2.3.7設置log_rotation_age
基線名稱    設置log_rotation_age
基線編號    Tophant-PostgreSQL-13
基線說明    當啓用logging_collector時,log_rotation_age參數肯定單個日誌文件的最大生存期(取決於log_filename的值)。
配置方法    執行如下sql語句:
postgres=# alter system set log_rotation_age='1h';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
檢查方法    執行如下sql語句:
postgres=# show log_rotation_age;
log_rotation_age
------------------
1d
備註    Log_rotation是日誌管理的標準最佳實踐

2.3.8設置最大日誌文件大小
基線名稱    設置最大日誌文件大小
基線編號    Tophant-PostgreSQL-14
基線說明    log_rotation_size設置肯定單個日誌文件的最大值。 達到最大值後,將發生自動日誌文件輪換。
配置方法    執行如下sql語句:
postgres=# alter system set log_rotation_size = '1GB';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
檢查方法    執行如下sql語句:
postgres=# show log_rotation_size;
log_rotation_size
-------------------
1GB
(1 row)
備註    若是將其設置爲零,將增長日誌數據丟失的風險。 

2.3.9設置‘syslog_facility’
基線名稱    設置‘syslog_facility’
基線編號    Tophant-PostgreSQL-15
基線說明    syslog_facility設置指定在啓用日誌記錄到syslog時要使用的日誌工具。
配置方法    執行如下sql語句:
postgres=# alter system set syslog_facility = 'LOCAL1';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
檢查方法    執行如下sql語句:
postgres=# show syslog_facility;
syslog_facility
-----------------
local0
(1 row)
備註    若是未設置爲適當的工具,PostgreSQL日誌消息可能與其餘應用程序的日誌消息混合、路由錯誤或可能被丟棄。 

2.3.10配置PostgreSQL系統日誌消息的程序名
基線名稱    設置syslog_facility
基線編號    Tophant-PostgreSQL-16
基線說明    syslog_ident設置指定用於在syslog日誌中標識PostgreSQL消息的程序名稱。
配置方法    執行如下sql語句:
postgres=# alter system set syslog_ident = 'pg96';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
postgres=# show syslog_ident;
syslog_ident
--------------
pg96
(1 row)
檢查方法    執行如下sql語句:
postgres=# show syslog_ident;
syslog_ident
--------------
postgres
(1 row)
備註    若是未正確設置,則可能沒法將PostgreSQL消息與syslog日誌中的其餘消息區分開來。

2.3.11設置服務器日誌級別
基線名稱    設置服務器日誌級別
基線編號    Tophant-PostgreSQL-17
基線說明    log_min_messages設置指定寫入服務器日誌的消息級別。級別越晚,發送的消息越少。
配置方法    執行如下sql語句:
postgres=# alter system set log_min_messages = 'warning';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
檢查方法    執行如下sql語句:
postgres=# show log_min_messages;
log_min_messages
------------------
warning
(1 row)
備註    若是未將此值設置爲正確值,則可能會向服務器日誌寫入太多消息或太少消息。

2.3.12設置‘log_min_error_statement’
基線名稱    設置‘log_min_error_statement’
基線編號    Tophant-PostgreSQL-18
基線說明    log_min_error_statement設置將致使全部生成錯誤的sql語句在指定的嚴重級別或更高級別上被記錄在服務器日誌中。
配置方法    執行如下sql語句:
postgres=# alter system set log_min_error_statement = 'error';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
檢查方法    執行如下sql語句:
postgres=# show log_min_error_statement;
log_min_error_statement
-------------------------
error
(1 row)
備註    ERROR被認爲是最佳實踐設置,應根據日誌記錄策略進行更改。

2.3.13禁用‘debug_print_parse’
基線名稱    禁用'debug_print_parse'
基線編號    Tophant-PostgreSQL-19
基線說明    debug_print_parse設置容許爲每一個執行的查詢打印結果解析樹。這些消息在日誌消息級別發出,建議將此設置爲off禁用此設置。
配置方法    執行如下sql語句:
postgres=# alter system set debug_print_parse='off';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
檢查方法    執行如下sql語句
postgres=# show debug_print_parse;
debug_print_parse
-------------------
off
(1 row)
備註    啓用任何debug_print_parse均可能致使敏感信息的日誌記錄。

2.3.14禁用‘debug_print_rewritten’
基線名稱    禁用‘debug_print_rewritten’
基線編號    Tophant-PostgreSQL-20
基線說明    debug_print_rewritten設置容許爲每一個執行的查詢打印查詢重寫輸出。 這些消息在LOG消息級別發出,建議禁用該設置。
配置方法    執行如下sql語句:
postgres=# alter system set debug_print_rewritten = 'off';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
檢查方法    執行如下sql語句:
postgres=# show debug_print_rewritten;
debug_print_rewritten
-----------------------
off
(1 row)
備註    啓用任何debug_print_rewritten可能會致使敏感信息的記錄

2.3.15禁用‘debug_print_plan’
基線名稱    禁用‘debug_print_rewritten’
基線編號    Tophant-PostgreSQL-21
基線說明    debug_print_plan設置容許打印每一個執行查詢的執行計劃。 這些消息在LOG消息級別發出,建議禁用該設置。
配置方法    執行如下sql語句:
postgres=# alter system set debug_print_plan = 'off';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
檢查方法    執行如下sql語句:
postgres=# show debug_print_plan ;
debug_print_plan
------------------
off
(1 row)
備註    啓用任何debug_print_plan可能會致使敏感信息的記錄。

2.3.16啓用‘debug_pretty_print’
基線名稱    啓用‘debug_pretty_print’
基線編號    Tophant-PostgreSQL-22
基線說明    啓用debug_pretty_print會縮進debug_print_parse,debug_print_rewritten或debug_print_plan生成的消息,使它們更容易閱讀。
配置方法    執行如下sql語句:
postgres=# alter system set debug_pretty_print = 'on';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
檢查方法    執行如下sql語句:
postgres=# show debug_pretty_print ;
debug_pretty_print
--------------------
on
(1 row)
備註    若是禁用此設置,則使用「壓縮」格式,從而大大下降了DEBUG語句日誌消息的可讀性。

2.3.17已啓用「log_connections」
基線名稱    啓用「log_connections」
基線編號    Tophant-PostgreSQL-23
基線說明    啓用log_connections設置每次嘗試鏈接到服務器,以及成功完成客戶端身份驗證的操做。會話啓動後沒法更改此參數。
配置方法    執行如下sql語句:
postgres=# alter system set log_connections = 'on';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
檢查方法    執行如下sql語句:
postgres=# show log_connections ;
log_connections
-----------------
on
(1 row)
備註    啓用log_connecitons記錄,以便往後審計。

2.3.18啓用‘log_disconnections’
基線名稱    啓用‘log_disconnections’
基線編號    Tophant-PostgreSQL-24
基線說明    啓用log_disconnections設置將記錄每一個會話的結束時間,包括會話持續時間。此參數在會話啓動後不能更改。
配置方法    執行如下sql語句:
postgres=# alter system set log_disconnections = 'on';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
檢查方法    執行如下sql語句:
postgres=# show log_disconnections ;
log_disconnections
--------------------
on
(1 row)
備註    啓用這些日誌記錄功能,才能檢查失敗嘗試的鏈接、長鏈接或其餘異常狀況。

2.3.19設置‘log_error_verbosity’
基線名稱    設置‘log_error_verbosity’
基線編號    Tophant-PostgreSQL-25
基線說明    log_error_verbosity設置指定日誌的詳細程度(詳細的數量),有效值:
• TERSE
• DEFAULT
• VERBOSE
應根據實際狀況設置適當的值。
配置方法    執行如下sql語句:
postgres=# alter system set log_error_verbosity = 'verbose';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
檢查方法    執行如下sql語句:
postgres=# show log_error_verbosity ;
log_error_verbosity
---------------------
default
(1 row)
備註    若是沒有設置爲正確值,則可能會記錄太多詳細信息或太少的詳細信息。

2.3.20禁用‘log_hostname’
基線名稱    禁用‘log_hostname’
基線編號    Tophant-PostgreSQL-26
基線說明    啓用log_hostname設置會記錄鏈接主機的主機名。除非日誌策略須要主機名日誌記錄,不然最好禁用此設置,以避免爲每一個記錄的語句產生dns解析的開銷。
配置方法    執行如下sql語句:
postgres=# alter system set log_hostname='off';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
檢查方法    執行如下sql語句:
postgres=# show log_hostname;
log_hostname
--------------
off
(1 row)
備註    根據您的主機名解析設置,啓用此設置可能會帶來不可忽略的性能損失。

2.3.21設置‘log_line_prefix’
基線名稱    設置‘log_line_prefix’
基線編號    Tophant-PostgreSQL-27
基線說明    log_line_prefix設置指定每一個日誌行爲的printf樣式前綴。若是爲空,則不使用前綴。應該按照pgBadger開發團隊的建議對其進行配置,默認值爲<%m>。可用值以下:

配置方法    執行如下sql語句:
postgres=# alter system set log_line_prefix = '%m [%p]: [%l-1]
db=%d,user=%u,app=%a,client=%h ';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
檢查方法    執行如下sql語句:
postgres=# show log_line_prefix;
log_line_prefix
-----------------
< %m >
(1 row)
備註    正確設置log_line_prefix容許向每一個日誌條目(例如用戶或數據庫)添加其餘信息。所描述的信息可用於審計或安全審查。

2.3.22設置‘log_statement’
基線名稱    設置‘log_statement’
基線編號    Tophant-PostgreSQL-28
基線說明    log_statement設置指定記錄的SQL語句的類型。根據實際狀況設置適當值。
配置方法    執行如下sql語句:
postgres=# alter system set log_statement='ddl';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
檢查方法    執行如下sql語句:
postgres=# show log_statement;
log_statement
---------------
none
(1 row)
備註    將log_statement設置爲與日誌記錄策略保持一致有助於之後審覈和查看數據庫活動。 

2.3.23設置'log_timezone'
基線名稱    設置'log_timezone'
基線編號    Tophant-PostgreSQL-29
基線說明    log_timezone設置指定在日誌消息中的時間戳中使用的時區。 此值是羣集範圍的,所以全部會話都將一致地報告時間戳。應將其設置爲GMT或UTC。
配置方法    執行如下sql語句:
postgres=# alter system set log_timezone = 'GMT';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
檢查方法    執行如下sql語句:
postgres=# show log_timezone ;
log_timezone
--------------
US/Eastern
(1 row)
備註    應根據日誌記錄策略定義的適當時區配置日誌條目時間戳,以確保在記錄事件發生時不會產生混淆。

2.3.24啓用‘pgAudit’
基線名稱    啓用‘pgAudit’
基線編號    Tophant-PostgreSQL-30
基線說明    PostgreSQL審計擴展(pgAudit)經過標準PostgreSQL日誌記錄工具提供詳細的會話和對象審計日誌記錄。pgAudit的目標是爲PostgreSQL用戶提供生成審計日誌的能力,這些日誌一般須要符合政府,財務或ISO認證。
配置方法    1.安裝pgAudit:yum -y install pgaudit12_10
2.啓用pgAudit做爲shared_preload_libraries參數中的擴展,經過pgaudit.log參數指示咱們要記錄哪些語句類,參閱以下資料:
  https://www.pgaudit.org/
檢查方法    執行如下sql語句:
postgres=# show shared_preload_libraries ;
shared_preload_libraries
--------------------------
pgaudit
(1 row)
備註    標準日誌記錄工具顯示用戶請求的內容,而pgAudit則關注數據庫知足請求時發生的詳細信息。

2.4用戶訪問和受權
2.4.1配置sudo
基線名稱    配置sudo
基線編號    Tophant-PostgreSQL-31
基線說明    訪問postgres超級用戶賬戶會受到限制,以阻止未經受權的訪問。sudo經過將普通用戶賬戶權限提高爲PostgreSQL RDBMS超級用戶來知足要求。應正確配置sudo。
配置方法    編輯/etc/sudoers配置文件,添加以下指令:
%pg_wheel ALL= /bin/su - postgres
檢查方法    使用以下命令測試sudo調用:
sudo su - postgres
備註    沒有sudo,就沒法嚴格控制對超級用戶賬戶的訪問,也沒法安全、受權地審計超級用戶賬戶的使用。

2.4.2設置管理權限
基線名稱    設置管理權限
基線編號    Tophant-PostgreSQL-32
基線說明    應該只有超級用戶擁有超級管理員特權。用戶不該該擁有建立角色、新建數據庫、管理複製或執行任何其餘被認爲是特權操做的權限。通常來講,普通用戶只應得到與管理應用程序相適應的最低權限。
配置方法    若是任何常規或應用程序用戶被授予過多的管理權限,則應當即經過PostgreSQL ALTER ROLE SQL命令刪除這些權限。請使用psql –c命令查看用戶的權限,而後根據輸出的結果正確設置其權限。參閱如下資料:
https://www.postgresql.org/docs/10/static/sql-revoke.html
https://www.postgresql.org/docs/10/static/sql-createrole.html
https://www.postgresql.org/docs/10/static/sql-alterrole.html
檢查方法    使用以下命令檢查用戶的權限:
psql -c「\du USERNAME」,其中USERNAME爲用戶名
備註    被授予過多特權的普通用戶可能會執行管理命令,從而致使不可預估的後果。

2.4.3設置功能權限
基線名稱    設置功能權限
基線編號    Tophant-PostgreSQL-33
基線說明    在某些狀況下,爲了提供所需的功能,postgresql須要執行內部邏輯語句(存儲過程、函數、觸發器等)或具備更高特權的外部代碼模塊。可是,若是執行所需的特權高於分配給調用該應用程序功能的用戶的特權,那麼這些用戶將間接地得到了更大的特權。這就是所謂的特權提高。特權提高只能在必要時使用。應用程序功能的執行權限應該只限制於受權用戶。
配置方法    參與如下資料:
https://www.postgresql.org/docs/10/static/catalog-pg-proc.html
https://www.postgresql.org/docs/10/static/sql-grant.html
https://www.postgresql.org/docs/10/static/sql-revoke.html
https://www.postgresql.org/docs/10/static/sqlcreatefunction.htm
檢查方法    執行如下sql語句:
psql -c "SELECT nspname, proname, proargtypes, prosecdef, rolname,
備註    dba應該檢查存儲在數據庫中的全部應用程序邏輯(以函數、規則和觸發器的形式)是否有過多的特權。

2.4.4設置DML權限
基線名稱    設置DML權限
基線編號    Tophant-PostgreSQL-34
基線說明    DML(插入,更新,刪除)操做應僅限於受權用戶。 PostgreSQL經過GRANT語句管理DML權限。
配置方法    使用REVOKE SQL命令刪除過多的DML權限,詳情請參閱如下資料:
https://www.postgresql.org/docs/10/static/sql-grant.html
https://www.postgresql.org/docs/10/static/sql-revoke.html
https://www.postgresql.org/docs/10/static/functions-info.html#functions-infoaccess-table
https://wiki.postgresql.org/wiki/A_Guide_to_CVE-2018-1058:_Protect_Your_Search_Path
https://nvd.nist.gov/vuln/detail/CVE-2018-1058
檢查方法    使用\ du + * SQL命令清點羣集中定義的全部用戶,以及使用\ dt *.* SQL命令在數據庫中定義的全部表。 此外,能夠經過查詢系統目錄pg_tables和pg_user來得到表和用戶受權的交集矩陣。
備註    過多的DML受權可能致使無特權的用戶在未經適當受權的狀況下更改或刪除信息。

2.4.5啓用‘pg_permission’
基線名稱    啓用‘pg_permission’
基線編號    Tophant-PostgreSQL-35
基線說明    使用pg_permissions擴展,能夠聲明哪些DB用戶應該對給定對象具備哪些權限,並生成合規性的報告。
配置方法    從擴展程序的站點下載最新版本,編譯安裝,而後啓用它,詳情參閱以下資料:
https://github.com/cybertec-postgresql/pg_permission
檢查方法    使用如下sql語句:
postgres=# select * from pg_available_extensions where name =
'pg_permission';
name | default_version | installed_version | comment
------+-----------------+-------------------+---------
(0 rows)
備註    pg_permissions擴展極大地簡化了postgresql數據庫中的審計權限。

2.4.6配置行級安全性(RLS)
基線名稱    配置行級安全性(RLS)
基線編號    Tophant-PostgreSQL-36
基線說明    除了經過GRANT提供的SQL標準權限系統以外,表還能夠具備行安全策略,這些策略基於每一個用戶限制正常查詢能夠返回哪些行,或者經過數據修改命令插入,更新或刪除哪些行。此功能也稱爲行級安全性(RLS)。
配置方法    參閱如下資料:
https://www.postgresql.org/docs/10/static/ddl-rowsecurity.html https://www.postgresql.org/docs/10/static/sql-alterrole.html
檢查方法    使用如下sql語句:
postgres=# SELECT oid, relname, relrowsecurity FROM pg_class WHERE
relrowsecurity;
備註    若是未正確配置RLS策略和權限,則用戶能夠對未受權執行的表執行操做,例如插入,更新或刪除行。

2.4.7使用默認角色
基線名稱    使用默認角色
基線編號    Tophant-PostgreSQL-37
基線說明    PostgreSQL提供了一組默認角色,能夠訪問某些經常使用的特權功能和信息。 管理員能夠將這些角色授予其環境中的用戶和/或其餘角色,從而爲這些用戶提供對指定功能和信息的訪問權限。
配置方法    使用以下sql語句:
postgres=# GRANT pg_monitor TO doug;
postgres=# ALTER ROLE doug NOSUPERUSER;
postgres=# select rolname from pg_roles where rolsuper is true;
檢查方法    使用命令:psql
備註    根據最小權限原則,使用PostgreSQL默認角色能夠極大地限制對特權或超級用戶訪問的訪問。

2.5鏈接和登陸
2.5.1配置本地UNIX域套接字安全登陸
基線名稱    配置本地UNIX域套接字安全登陸
基線編號    Tophant-PostgreSQL-38
基線說明    經過ssh遠程主機登陸能夠說是遠程訪問和管理postgresql服務器的最安全的方法。經過unix域套接字鏈接到psql客戶機,使用對等身份驗證方法是本地鏈接可用的最安全的機制。
配置方法    參閱如下資料:
https://www.postgresql.org/docs/10/static/client-authentication.html
https://www.postgresql.org/docs/10/static/auth-pg-hba-conf.html
檢查方法    用su命令切換到普通用戶,而後經過psql -U postgres -d postgres語句測試。
備註    若是數據庫中已經定義了與unix賬戶同名的數據庫用戶賬戶,即便是普通用戶賬戶也能夠以相似的高度安全的方式訪問集羣。

2.6PostgreSQL設置
2.6.1配置‘attack vector’運行時參數
基線名稱    配置‘attack vector’運行時參數
基線編號    Tophant-PostgreSQL-39
基線說明    經過特定的傳遞方法或攻擊向量了解PostgreSQL運行時參數的漏洞。
配置方法    在更改參數的狀況下,該值將返回其默認值。 在成功利用已設置的運行時參數的狀況下,必須執行分析以肯定減輕風險的最佳方法。
檢查方法    檢查全部的配置設置。 配置PostgreSQL日誌記錄以記錄對RDBMS的全部修改和更改。
備註    與運行時參數同樣,有許多方法能夠破壞服務器。 在適當的條件下執行的任何一個或多個的組合有可能危及RDBMS。

2.6.2配置‘backend’運行時參數
基線名稱    配置‘backend’運行時參數
基線編號    Tophant-PostgreSQL-40
基線說明    爲了有效地爲多個客戶端服務,PostgreSQL服務器爲每一個客戶端啓動一個新的「後端」進程。
配置方法    1.查詢視圖pg_settings並與以前的查詢輸出進行比較以瞭解是否被更改。
2.檢查配置文件postgresql.conf和postgresql.auto.conf,並將它們與先前存檔的文件副本進行比較,查看是否被更改。
3.檢查進程輸出並查找服務器啓動時使用的參數:
ps aux | grep -E '[p]ostgres|[p]ostmaster'
檢查方法    執行如下sql語句:
postgres=# SELECT name, setting FROM pg_settings WHERE context IN ('backend','superuser-backend') ORDER BY 1;
備註    

2.6.3配置‘Postmaster’運行時參數
基線名稱    配置‘Postmaster’運行時參數
基線編號    Tophant-PostgreSQL-41
基線說明    由postmaster進程執行的postgresql運行時參數。
配置方法    1.查詢視圖pg_settings並與以前的查詢輸出進行比較
變化
2.查看配置文件postgresql.conf和postgresql.auto.conf和
與任何更改以前存檔的文件副本比較
3.檢查進程輸出並查找服務器啓動時使用的參數:
  ps aux | grep -E '[p]ostgres|[p]ostmaster'
檢查方法    執行如下sql語句:
SELECT name, setting FROM pg_settings WHERE context = 'postmaster' ORDER BY 1;
備註    postmaster管理密鑰運行時參數,這些參數由全部後端鏈接共享或由postmaster進程自己運行所需。

2.6.4配置‘SIGHUP’運行時參數
基線名稱    配置‘SIGHUP’運行時參數
基線編號    Tophant-PostgreSQL-42
基線說明    由SIGHUP信號執行的PostgreSQL運行時參數。
配置方法    恢復PostgreSQL配置文件中的全部值並調用服務器以從新加載配置文件。
檢查方法    執行如下sql語句:
postgres=# SELECT name, setting FROM pg_settings WHERE context = 'sighup'
ORDER BY 1;
備註    爲了定義服務器行爲並優化服務器性能,服務器的超級用戶有權設置這些參數,這些參數可在配置文件postgresql.conf和pg_hba.conf中找到。

2.6.5配置‘Superuser’運行時參數
基線名稱    配置‘Superuser’運行時參數
基線編號    Tophant-PostgreSQL-43
基線說明    PostgreSQL運行時參數只能由服務器的超級用戶執行。
配置方法    1.查詢視圖pg_settings並與以前的查詢輸出進行比較。
2.查看配置文件postgreql.conf和postgreql.auto.conf,並與之前存檔的文件副本進行比較。
3.檢查進程輸出並查找服務器啓動時使用的參數:
  ps aux | grep -E '[p]ostgres|[p]ostmaster'
檢查方法    執行如下sql語句:
# SELECT name, setting FROM pg_settings WHERE context = 'superuser'
ORDER BY 1;
備註    爲了改進和優化服務器性能,服務器的超級用戶有權設置這些參數,這些參數可在配置文件postgresql.conf中找到。

2.6.6使用FIPS 140-2 OpenSSL加密
基線名稱    使用FIPS 140-2 OpenSSL加密
基線編號    Tophant-PostgreSQL-44
基線說明    在具備NIST認證的FIPS 140-2 OpenSSL的平臺上安裝、配置和使用OpenSSL。 這爲PostgreSQL提供了生成和驗證加密哈希的能力。 
配置方法    參閱如下資料:
https://access.redhat.com/documentation/enUS/Red_Hat_Enterprise_Linux/6/html/Security_Guide/sect-Security_GuideFederal_Standards_And_RegulationsFederal_Information_Processing_Standard.html
https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validationprogram/documents/security-policies/140sp1758.pdf
https://csrc.nist.gov/publications/fips
檢查方法    使用命令:cat /proc/sys/crypto/fips_enabled,若是輸出的爲1,則系統啓用了FIPS,不然,爲啓用。
備註    使用該設置能夠根據數據全部者的要求保護須要機密性和加密保護的非機密信息。

2.6.7啓用並配置SSL
基線名稱    啓用並配置SSL
基線編號    Tophant-PostgreSQL-45
基線說明    應啓用PostgreSQL服務器上的SSL(設置爲on)並配置爲加密進出服務器的全部TCP流量。
配置方法    參閱如下資料:
https://www.postgresql.org/docs/10/static/ssl-tcp.html
http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-52r1.pdf
https://www.postgresql.org/docs/10/static/libpq-ssl.html
檢查方法    執行如下sql語句:
postgres=# SELECT name, setting, source FROM pg_settings WHERE name = 'ssl';
備註    若是未正確啓用和配置SSL,則會增長數據在傳輸過程當中受到危害的風險。

2.6.8安裝和配置pgcrypto擴展
基線名稱    安裝和配置pgcrypto擴展
基線編號    Tophant-PostgreSQL-46
基線說明    PostgreSQL必須實施加密機制,以防止在定義的信息系統組件上未經受權地公開或修改定義的靜態信息(至少包括PII和機密信息)。
配置方法    執行如下sql語句:
CREATE EXTENSION pgcrypto;
postgres=# SELECT * FROM pg_available_extensions WHERE name='pgcrypto';
檢查方法    執行如下sql語句:
SELECT * FROM pg_available_extensions WHERE name='pgcrypto';
備註    postgresql處理須要保護的數據時,必須使用加密機制來防止未經受權的泄露和修改靜態信息。

2.7備份
2.7.1建立僅用於流複製的用戶
基線名稱    建立僅用於流複製的用戶
基線編號    Tophant-PostgreSQL-47
基線說明    建立專門用於流複製的新用戶,而不是使用超級管理員帳戶。
配置方法    執行如下sql語句:
create user replication_user REPLICATION encrypted password 'XXX';
postgres=# select rolname from pg_roles where rolreplication is true;
檢查方法    執行如下sql語句:
postgres=# select rolname from pg_roles where rolreplication is true;
備註    專門建立用於流複製的用戶,能夠進一步「鎖定」超級用戶賬戶的使用,並遵循使用必要的最小權限的通常原則。

2.7.2配置‘base backup’
基線名稱    配置‘base backup’
基線編號    Tophant-PostgreSQL-48
基線說明    「base backup」是PRIMARY主機數據集羣($ PGDATA)的副本,用於建立STANDBY主機和Point In Time Recovery(PITR)機制。 應使用加密傳輸機制以安全的方式跨網絡複製基本備份。
配置方法    在備用服務器上執行如下步驟:
pg_basebackup -h name_or_IP_of_master \
-p 5432 \
-U replication_user \
-D ~postgres/10/data \
-P -v -R -Xs \
檢查方法    
備註    

2.7.3配置‘WAL archiving’
基線名稱    配置‘WAL archiving’
基線編號    Tophant-PostgreSQL-49
基線說明    WAL archiving是將事務日誌文件從PRIMARY主機發送到一個或多個STANDBY主機或者在遠程存儲設備上存檔以供之後使用的過程,例如,PITR。 有幾個實用程序能夠複製WAL,包括但不限於cp,scp,sftp和rynsc。
配置方法    根據須要更改參數並從新啓動服務器。參閱如下資料:
https://www.postgresql.org/docs/10/static/runtime-config-wal.html#RUNTIMECONFIG-WAL-ARCHIVING
https://linux.die.net/man/1/ssh-keygen
檢查方法    查看postgresql.conf中的運行參數。
備註    除非正確配置了服務器,不然就有可能以不安全、不加密的方式發送wals。

2.7.4配置流複製參數
基線名稱    配置流複製參數
基線編號    Tophant-PostgreSQL-50
基線說明    來自PRIMARY主機的流複製傳輸DDL,DML,密碼和其餘可能敏感的活動和數據。應使用安全套接字層(SSL)保護這些鏈接。 
配置方法    確認文件recovery.conf存在於STANDBY主機上,幷包含相似於如下內容的行:
standby_mode=on
primary_conninfo = 'user=replication_user password=mypassword host=mySrcHost
port=5432 sslmode=require sslcompression=1'
檢查方法    執行如下sql語句:
postgres=> select rolname from pg_roles where rolreplication is true;
備註    未加密的傳輸可能會向未受權方泄露敏感信息以及未經身份驗證的鏈接能夠實現中間人攻擊。

2.8特殊配置注意事項
2.8.1設置PostgreSQL配置文件的存儲位置
基線名稱    設置PostgreSQL配置文件的存儲位置
基線編號    Tophant-PostgreSQL-51
基線說明    任何以超級用戶身份登陸數據集羣(即postgres)均可以更改數據集羣目錄樹中的PostgreSQL配置文件。做爲默認策略,諸如postgresql.conf,pg_hba.conf和pg_ident之類的配置文件放在數據集羣的目錄$ PGDATA中。 能夠將PostgreSQL配置爲將這些文件重定位到數據集羣外部的位置,而後普通的超級用戶沒法訪問這些位置。
配置方法    1.根據安全策略肯定可從新定位的配置文件的適當位置。 若有必要,請在數據集羣外部從新定位或重命名配置文件。
2.確保儘量限制其文件權限,即僅限超級用戶讀取權限。
3.在postgresql.conf配置文件中相應更改設置。
4.從新啓動數據庫集羣以使更改生效。
檢查方法    執行如下sql語句:
postgres=# select name, setting from pg_settings where name ~ '.*_file$';
備註    將PostgreSQL配置文件保留在數據集羣的目錄樹中會增長配置文件被篡改的可能性。

2.8.2設置PostgreSQL子目錄位置
基線名稱    設置PostgreSQL子目錄位置
基線編號    Tophant-PostgreSQL-52
基線說明    postgresql集羣用於在子目錄中執行特定的任務。出於性能、可靠性和安全性的考慮,應該將這些子目錄從新定位到數據集羣以外。
配置方法    1.根據組織的安全策略肯定適當的數據,日誌和表空間目錄和位置。 若有必要,請將全部列出的目錄從新定位到數據集羣以外。
2.確保儘量限制文件權限,即僅限超級用戶讀訪問權限。
3.將目錄重定位到其餘分區時,請確保它們足夠大,以減小過多的空間利用率。
4.最後,在postgresql.conf配置文件中相應地更改設置,而後從新啓動數據庫集羣以使更改生效。
檢查方法    執行如下sql語句:
postgres=# select name, setting from pg_settings where (name ~ '_directory$' or name ~ '_tablespace');
備註    有些子目錄包含一些信息,好比日誌,這些信息對開發人員等其餘人可能有價值。

2.8.3安裝配置‘pgBackRest’工具
基線名稱    安裝配置‘pgBackRest’工具
基線編號    Tophant-PostgreSQL-53
基線說明    gBackRest旨在成爲一個簡單,可靠的備份和恢復系統,能夠無縫擴展到最大的數據庫和工做負載。 pgBackRest不依賴於tar和rsync等傳統備份工具,而是在內部實現全部備份功能,並使用自定義協議與遠程系統進行通訊。 消除對tar和rsync的依賴能夠爲數據庫特定的備份挑戰提供更好的解決方案。
配置方法    參閱以下資料:
https://pgbackrest.org/
https://github.com/pgbackrest/pgbackrest
https://www.postgresql.org/docs/10/static/app-pgdump.html
https://www.postgresql.org/docs/10/static/app-gbasebackup.html
檢查方法    使用命令:pgbackrest
備註    自定義遠程協議容許更大的靈活性,並限制執行備份所需的鏈接類型,從而提升安全性。建議安裝該工具。

Windows系統加固方案

服務器加固方案

1、服務器登記
此前已要求各二層單位對服務器進行100%登記,可經過OPS登記服務器信息,並在次日登陸SOC系統查看。現各二層單位可採起自查自糾方式,對服務器登記狀況進行檢查,以避免遺漏,NAS做爲服務器進行登記。同時,若是服務器有外網IP,需及時在OPS系統進行登記。
服務器登記的具體操做可參考附件1。
2、服務器加固
此前已要求各二層單位對服務器進行安檢達標,具體操做可參考附件1執行。現有如下幾點須要增強執行:
1、增強Windows服務器補丁升級工做,全部的Windows服務器必須及時進行補丁升級工做,6月補丁升級具體操做指導連接:
https://it.x.com.cn/its/app/articlePub/RkmArticlePub/getDataDetailByArticleId.action?rkmArticlePub.articleId=KBA00032818&rkmArticlePub.requestId=KBA000000035812
可在IT網站-常見問題-搜索「補丁」-找到時間點最近的Windows服務器操做系統補丁升級操做指導。
Windows XP、Windows 2000、Windows 2003已中止服務,建議升級到Windows Server 2012 R2。
2、增強Windows服務器防病毒軟件安裝及病毒庫升級工做,全部的Windows服務器必須安裝防病毒軟件並按期升級病毒庫,McAfee支持的Windows操做系統以下:


下載連接以下,根據操做系統選擇對應的版本進行下載安裝。
https://it.x.com.cn/its/app/download/Download/getDownloadDetails.action?download.itsInfoDownloadId=1608
若服務器因爲網絡沒法進行病毒庫的自動升級,服務器管理員至多每隔三個月進行手動升級,手動升級病毒庫的操做步驟以下:
1)病毒庫下載連接
https://it.x.com.cn/its/app/download/Download/getDownloadDetails.action?download.itsInfoDownloadId=1608
2)根據防病毒軟件版本下載最新版本的病毒庫,上傳至服務器並運行。
3、使用強密碼策略,包括服務器上運行的服務、程序,如數據庫、SSH、FTP等。密碼複雜度要求:
1)長度至少8位;
2)至少包括大寫字母、小寫字母、數字、特殊符號中的3種;
3)不使用如x、admin、root、ssh、postgres、qaz、wsx等易被猜解的字符組合。
3、Windows服務器加固項
序號    檢查項    檢查方法
1    禁用非必要的端口和服務    1.打開命令提示符,運行命令「services.msc」打開服務管理器,中止顯示名稱爲「Simple TCP/IP Services」或「簡單 TCP/IP 服務」的服務。
2.打開命令提示符,運行命令「services.msc」打開服務管理器,中止顯示名稱爲「Simple Mail Transport Protocol (SMTP)」的服務。
3.打開命令提示符,運行命令「services.msc」打開服務管理器,中止顯示名稱爲「Windows Internet Name Service (WINS)」或「WINS」的服務。
4.打開命令提示符,運行命令「services.msc」打開服務管理器,中止顯示名稱爲「DHCP Server」的服務。(DHCP服務器除外)
5.打開命令提示符,運行命令「services.msc」打開服務管理器,中止顯示名稱爲「DHCP Client」的服務。
6.打開命令提示符,運行命令「services.msc」打開服務管理器,中止顯示名稱爲「Message Queuing」的服務。
6.打開命令提示符,運行命令「services.msc」打開服務管理器,中止顯示名稱爲「Message Queuing」的服務。
2    刪除或禁用全部沒必要要的文件共享(如默認硬盤共享)    
3    檢查是否已限制可關閉系統的賬戶和組(備用帳號,操做系統自動產生的帳號,安裝軟件或組件自動產生的帳號不該刪除)    打開命令提示符,運行命令「gpedit.msc」打開組策略編輯器,瀏覽到路徑「本地計算機策略\計算機配置\Windows設置\安全設置\本地策略\用戶權限分配」,在右邊窗格中找到「關閉系統」,配置爲Account Operators、Administrators、Backup Operators、Print Operators和Server perators。
4    檢測密碼長度和複雜性策略    1.打開命令提示符,運行命令「gpedit.msc」打開組策略編輯器,瀏覽到路徑「本地計算機策略\計算機配置\Windows設置\安全設置\賬戶策略\密碼策略」,在右邊窗格中找到「密碼必須符合複雜性要求」,配置爲「已啓用」。
2.打開命令提示符,運行命令「gpedit.msc」打開組策略編輯器,瀏覽到路徑「本地計算機策略\計算機配置\Windows設置\安全設置\賬戶策略\密碼策略」,在右邊窗格中找到「密碼長度最小值」,配置爲大於等於8個字符。
5    檢測採用靜態口令認證技術的設備,帳戶密碼最長使用期限(不超過90天)    1.打開命令提示符,運行命令「gpedit.msc」打開組策略編輯器,瀏覽到路徑「本地計算機策略\計算機配置\Windows設置\安全設置\賬戶策略\密碼策略」,在右邊窗格中找到「密碼最長存留期(使用期限)」,配置爲非0值。0值表示密碼永不過時。
2.打開命令提示符,運行命令「gpedit.msc」打開組策略編輯器,瀏覽到路徑「本地計算機策略\計算機配置\Windows設置\安全設置\賬戶策略\密碼策略」,在右邊窗格中找到「密碼最長存留期(使用期限)」,配置爲90天之內的值。
6    檢測採用靜態口令認證技術的設備用戶不能重複使用最近10次內(含10次)已使用的口令    打開命令提示符,運行命令「gpedit.msc」打開組策略編輯器,瀏覽到路徑「本地計算機策略\計算機配置\Windows設置\安全設置\賬戶策略\密碼策略」,在右邊窗格中找到「強制密碼歷史」,配置爲不小於10個
7    檢查Guest用戶是否禁用    打開命令提示符,運行命令「gpedit.msc」打開組策略編輯器,瀏覽到路徑「本地計算機策略\計算機配置\Windows設置\安全設置\本地策略\安全選項」,在右邊窗格中找到「(賬戶:)來賓賬戶狀態」,配置爲「已禁用」。
8    檢查iuserIUSR_{System}帳號配置是否合理(只屬於guests組)    打開命令提示符,運行命令「compmgmt.msc」打開計算機管理面板,瀏覽到路徑「計算機管理(本地)\系統工具\本地用戶和組\用戶」,檢查是否存在IUSR_{System}帳號,若是存在,則其應只屬於Guests組,而不屬於其它任何組。
9    檢測是否啓用對Windows系統的審覈策略更改    打開命令提示符,運行命令「gpedit.msc」打開組策略編輯器,瀏覽到路徑「本地計算機策略\計算機配置\Windows設置\安全設置\本地策略\審覈策略」,在右邊窗格中找到「審覈策略更改」,勾選「成功」和「失敗」。
10    檢測是否啓用對Windows系統的審覈對象訪問    打開命令提示符,運行命令「gpedit.msc」打開組策略編輯器,瀏覽到路徑「本地計算機策略\計算機配置\Windows設置\安全設置\本地策略\審覈策略」,在右邊窗格中找到「審覈對象訪問」,勾選「成功」和「失敗」。
11    檢測是否啓用Windows系統審覈目錄服務訪問    打開命令提示符,運行命令「gpedit.msc」打開組策略編輯器,瀏覽到路徑「本地計算機策略\計算機配置\Windows設置\安全設置\本地策略\審覈策略」,在右邊窗格中找到「審覈目錄服務訪問」,勾選「成功」和「失敗」。
12    檢測是否啓用Windows系統審覈特權使用    打開命令提示符,運行命令「gpedit.msc」打開組策略編輯器,瀏覽到路徑「本地計算機策略\計算機配置\Windows設置\安全設置\本地策略\審覈策略」,在右邊窗格中找到「審覈特權使用」,勾選「成功」和「失敗」。
13    檢測是否啓用Windows系統審覈系統事件    打開命令提示符,運行命令「gpedit.msc」打開組策略編輯器,瀏覽到路徑「本地計算機策略\計算機配置\Windows設置\安全設置\本地策略\審覈策略」,在右邊窗格中找到「審覈系統事件」,勾選「成功」和「失敗」。
14    檢測是否啓用Windows系統的審覈帳戶管理    打開命令提示符,運行命令「gpedit.msc」打開組策略編輯器,瀏覽到路徑「本地計算機策略\計算機配置\Windows設置\安全設置\本地策略\審覈策略」,在右邊窗格中找到「審覈賬戶管理」,勾選「成功」和「失敗」。
15    檢測是否啓用Windows系統的審覈進程追蹤    打開命令提示符,運行命令「gpedit.msc」打開組策略編輯器,瀏覽到路徑「本地計算機策略\計算機配置\Windows設置\安全設置\本地策略\審覈策略」,在右邊窗格中找到「審覈進程跟蹤」,勾選「成功」和「失敗」。
16    檢測是否設置審覈登陸事件    打開命令提示符,運行命令「gpedit.msc」打開組策略編輯器,瀏覽到路徑「本地計算機策略\計算機配置\Windows設置\安全設置\本地策略\審覈策略」,在右邊窗格中找到「審覈登陸事件」,勾選「成功」和「失敗」。
17    檢測是否設置審覈帳戶登陸事件    打開命令提示符,運行命令「gpedit.msc」打開組策略編輯器,瀏覽到路徑「本地計算機策略\計算機配置\Windows設置\安全設置\本地策略\審覈策略」,在右邊窗格中找到「審覈賬戶登陸事件」,勾選「成功」和「失敗」。
18    檢測應用日誌設置是否知足規範(至少保留180天,按天覆蓋,最大值至少50M)    1.打開命令提示符,運行命令「eventvwr.msc」打開事件查看器,瀏覽到路徑「事件查看器(\Windows日誌)\應用程序(日誌)」,右鍵點擊「應用程序(日誌)」,打開其屬性對話框,切換到「常規」選項卡,配置「日誌文件達到最大大小時」爲「按須要改寫(覆蓋)事件」。
2.打開命令提示符,運行命令「eventvwr.msc」打開事件查看器,瀏覽到路徑「事件查看器(\Windows日誌)\應用程序(日誌)」,右鍵點擊「應用程序(日誌)」,打開其屬性對話框,切換到「常規」選項卡,配置「日誌文件最大大小」爲不小於50M。
19    檢測系統日誌設置是否知足規範(至少保留180天,按天覆蓋,最大值至少50M)    1.打開命令提示符,運行命令「eventvwr.msc」打開事件查看器,瀏覽到路徑「事件查看器(\Windows日誌)\ 系統(日誌)」,右鍵點擊「系統(日誌)」,打開其屬性對話框,切換到「常規」選項卡,配置「日誌文件達到最大大小時」爲「按須要改寫(覆蓋)事件」。
2.打開命令提示符,運行命令「eventvwr.msc」打開事件查看器,瀏覽到路徑「事件查看器(\Windows日誌)\ 系統(日誌)」,右鍵點擊「系統(日誌)」,打開其屬性對話框,切換到「常規」選項卡,配置「日誌文件最大大小」爲不小於50M。
20    檢測安全日誌設置是否知足規範(至少保留180天,按天覆蓋,最大值至少50M)    1.打開命令提示符,運行命令「eventvwr.msc」打開事件查看器,瀏覽到路徑「事件查看器(\Windows日誌)\安全(日誌)」,右鍵點擊「安全(日誌)」,打開其屬性對話框,切換到「常規」選項卡,配置「日誌文件達到最大大小時」爲「按須要改寫(覆蓋)事件」。
2.打開命令提示符,運行命令「eventvwr.msc」打開事件查看器,瀏覽到路徑「事件查看器(\Windows日誌)\安全(日誌)」,右鍵點擊「安全(日誌)」,打開其屬性對話框,切換到「常規」選項卡,配置「日誌文件最大大小」爲不小於50M

4、Linux服務器加固項
序號    檢查項    檢查方法
1    檢查用戶帳號設置是否符合要求(每一個UID只能使用一次,並惟一對應一個操做系統;root帳號UID爲0;root帳號是root組的惟一用戶)    每一個UID必須只能用一次,並惟一對應一個操做系統用戶帳號。root帳號的UID必須是惟一的0,且是root組惟一的帳號。查看/etc/passwd文件,看是否符合要求。
 https://www.cnblogs.com/songxingzhu/p/6364700.html   /etc/passwd詳解
https://blog.csdn.net/yaofeino1/article/details/54616440   /etc/shadow 和 /etc/passwd區別
問的最多的問題:第三個冒號後爲組號GID, 只能root爲0,其餘不能爲0,請檢查並修改。
2    檢查某些特定帳號是否已按要求刪除    games
uucp
lp
ftp
news
rpcuser
mail
刪除帳戶userdel name
或/etc/passwd 下對應帳號前加#
3    檢查某些特意組是否已按要求刪除    lp
mail
news
uucp
games
ftp
floppy
mailnull
刪除組 groupdel name
或/etc/group 下對應帳號前加#
4    查是否設置口令生存週期(不超過90天)    在文件/etc/login.defs中設置 PASS_MAX_DAYS 不大於標準值,PASS_MAX_DAYS 90,若是該文件不存在,則建立並按照要求進行編輯
vi  /etc/login.defs,配置PASS_MAX_DAYS 90
5    檢查是否設置口令更改最小間隔天數(2天)    在文件/etc/login.defs中設置 PASS_MIN_DAYS 不小於2
vi  /etc/login.defs,配置PASS_MIN_DAYS 2
6    檢查設備密碼複雜度策略    a)  最小密碼長度:8;
b)  小寫字母最小數量:1;
c)  大寫字母最小數量:1;
d)  普通數字最小數量:1;
e) 其它字符最少數量:1。
 執行 vi /etc/pam.d/system-auth,找打有「password」和「pam_cracklib.so」的行,將ucredit、 lcredit、 dcredit、 ocredit的值設置爲-1。
password    required      pam_cracklib.so try_first_pass retry=3 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 minlen=8
ubuntu、Debain   爲  /etc/pam.d/common-password
7    檢查口令最小長度(8位)    8位
vi  /etc/login.defs,配置PASS_MIN_LEN值爲8
8    檢查是否設置口令過時前警告天數(14天)    在文件/etc/login.defs中設置 PASS_WARN_AGE 不小於14天
vi  /etc/login.defs,配置PASS_WARN_AGE值爲14。
9    檢查密碼重複使用次數限制(最近10次不一樣)    編輯/etc/pam.d/system-auth文件,修改設置以下 password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=10
10    檢查umask值是否符合要求    檢查文件/etc/bashrc(或/etc/bash.bashrc)中設置 umask 077或UMASK 077
檢查/etc/bashrc(或~/.bashrc),設置umask值爲077。
11    禁止Core Dump    編輯/etc/security/limits.conf增長:
 * soft core 0
 * hard core 0
中間用tab鍵對齊
12    檢查是否對登陸進行日誌記錄    last命令能夠查詢
13    關閉不須要的基本系統服務    禁止
ntp
chrony
x window
avahi
cups
dhcp
ldap
nfs
dns
ftp
http
imap
samba
squid
snmp
mail  transfer
nis
rsh
talk
telnet
tftp
rsync
squid
talk
telnet
tftp
time
time-udp
vsftpd
webmin
winbind
wu-ftpd
xinetd
ypbind
chkconfig --list  查詢服務
chkconfig --del XXX  或 service XXX stop  刪除服務  
service --status-all
14    禁止路由重定向    cat  /proc/sys/net/ipv4/conf/all/accept_redirects,輸出應該爲0
vi /etc/sysctl.conf修改值
net.ipv4.conf.all.accept_redirects=0  
執行/sbin/sysctl -e -p /etc/sysctl.conf
15    禁止源站路由    cat  /proc/sys/net/ipv4/conf/all/accept_source_route,輸出應該爲0
vi /etc/sysctl.conf修改值
net.ipv4.conf.all.accept_source_route=0 
執行/sbin/sysctl -e -p /etc/sysctl.conf 
16    禁止Echo迴應廣播    cat  /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts,輸出應該爲1
vi /etc/sysctl.conf修改值
net.ipv4.icmp_echo_ignore_broadcasts=1 
執行/sbin/sysctl -e -p /etc/sysctl.conf
17    檢查是否啓用TCP SYN Cookie保護    cat  /proc/sys/net/ipv4/tcp_syncookies,輸出應該爲1
vi /etc/sysctl.conf修改值
net.ipv4.tcp_syncookies=1    
執行/sbin/sysctl -e -p /etc/sysctl.conf
18    禁止路由轉發     cat  /proc/sys/net/ipv4/ip_forward ,輸出應該爲0
vi /etc/sysctl.conf修改
net.ipv4.ip_forward=0   
執行/sbin/sysctl -e -p /etc/sysctl.conf
19    檢查日誌文件權限設置    1.若是爲redhat,suse9,則備份/etc/syslog.conf(或/etc/rsyslog.conf)文件中配置的日誌文件,若是爲suse10,suse11,則備份/etc/syslog-ng文件中配置的日誌文件. 2.若是日誌服務爲syslogd,則執行: LOGDIR=`cat /etc/syslog.conf 2>/dev/null | grep -v "^[[:space:]]*#"|sed '/^#/d' |sed '/^$/d' |awk '(($2!~/@/) && ($2!~/*/) && ($2!~/-/)) {print $2}';`;ls -l $LOGDIR 2>/etc/null | grep "^-";跳轉至步驟3. 若是日誌服務爲syslog-ng,則執行: LOGDIR=`cat /etc/syslog-ng/syslog-ng.conf 2>/dev/null | grep -v "^[[:space:]]*#"|grep "^destination"|grep file|cut -d\" -f2`;ls -l $LOGDIR 2>/dev/null | grep "^-";跳轉至步驟3. 若是日誌服務爲rsyslogd,則執行: LOGDIR=`cat /etc/rsyslog.conf | grep -v "^[[:space:]]*#" |sed '/^#/d' |sed '/^$/d' |awk '(($2!~/@/) && ($2!~/*/) && ($2!~/-/)) {print $2}'`;ls -l $LOGDIR 2>/etc/null | grep "^-";跳轉至步驟3. 3.步驟2列出的文件中,同組用戶、其餘用戶權限中不能出現r-x,rw-,rwx。 執行下列命令,修改步驟2中列出出來的不符合標準值的文件權限。 例如修改權限爲640 #chmod 640 <filename> 或者修改權限爲600 #chmod 600 <filename> 注:權限值沒有限定,只要知足同組用戶、其餘用戶不出現r-x,rw-,rwx便可。
20     檢查安全事件日誌配置    審計內容應包括重要用戶行爲、系統資源的異常使用和重要系統命令的使用等系統內重要的安全相關事件,好比編輯/etc/syslog.conf 配置: *.err;kern.debug;daemon.notice /var/adm/messages 其中/var/adm/messages爲日誌文件。 若是該文件不存在,則建立該文件,命令爲: touch /var/adm/messages,並修改權限爲666.命令爲:chmod 666 /var/adm/messages. 重啓日誌服務: #/etc/init.d/syslog restart
   ubuntu是 ​/etc/rsyslog.conf




5、漏洞管理
由滲透測試組對全部服務器不按期進行漏洞掃描、滲透測試,發現的漏洞將經過各部門接口人派發到設備責任人處進行處置,請責任人及時完成漏洞加固,並經過接口人反饋加固進展。

6、入侵管理
服務器EDR(入侵檢測及響應)工具已經完成功能性測試,可提供測試用的License供有須要的部門使用。

安全加固概述

 
 

安全加固是對主機、應用系統、中間件、數據庫等被加固對象的漏洞進行修復,並配置合適的安全策略以達到對象的安全基線標準要求的工程實施過程。

 
 

安全加固原則

 
 

標準性原則——加固方案的設計與實施應依據國內或國際的相關標準進行。標準性原則確保安全加固過程的規範、合理,併爲安全加固成果提供了質量保證。

 
 

可控性原則——加固的方法和過程均在各個負責人承認的範圍以內,加固服務的實際進度與進度表安排一致,保證各個系統負責人對加固工做的可控性;每一步加固動做,都須要評估存在的失敗風險和回退策略

 
 

總體性原則——加固的範圍和內容應當總體全面,包括安全涉及的各個層面,以避免因爲遺漏形成將來的安全隱患。

 
 

最小影響原則——加固工做應儘量小的影響系統和網絡的正常運行,不能對正在的運行和業務的正常提供產生顯著不利影響。具體體如今項目實施的時候,首先,安全加固在業務不繁忙時段進行;其次,有主備的主機系統和設備,首先在備機上進行安全加固,確信對業務系統不會有不利影響後方在主機上實施相應的安全加固;對於特別重要的系統和設備,若不知足直接對本機進行安全加固的條件,則應考慮採起其餘更爲穩妥的安全措施(如:考慮在其邊界部署安全防禦措施)。

 
 

安全加固的意義

 
 

u 確保對象知足安全基線要求;

 
 

u 優化配置,安裝適用的安全軟件等增強對象的安全性能;

 
 

u 從實踐角度檢驗安全策略的有效性。

 
 

咱們的目標是下降風險到能夠接受。

 
 

 

 
 

安全加固前準備

 
 

u 目標:明確安全加固支持項目的客戶信息、服務範圍、工做計劃等

 
 

u 範圍:針對安全加固範圍內的系統資產進行整體瞭解;確認工做計劃、實施環境、客戶接口人、流程要求、項目交付等

 
 

u 輸出:

 
 

l 項目信息調研表

 
 

l 加固資產清單

 
 

l 安全加固支持服務實施計劃

 
 

u 要點:

 
 

l 確保加固資產無遺漏

 
 

安全加固測試

 
 

1、回退測試:回退及可逆操做測試主要由系統管理員、系統廠商或第三方代維人員完成,包括:系統及數據備份(備份業務數據及軟件狀態)以及回退操做驗證(備份數據及軟件狀態回退測試)

 
 

2、有效性測試:加固有效性測試主要由安全加固實施工程師完成,經過利用現網環境或搭建的虛擬環境進行安全風險測試,確認加固有效性

 
 

3、業務測試:業務測試主要由系統管理員、系統廠商或第三方代維人員配合完成,經過利用現網環境或搭建的虛擬環境進行業務測試,確認加固操做是否影響業務

 
 

安全加固實施

 
 

安全加固實施主要分爲:

 
 

一、主機安全加固

 
 

二、數據庫安全加固

 
 

三、中間件安全加固

 
 

主機安全加固

 
 

Windows服務器加固

 
 

開啓window防火牆

 
 

默認只開放web服務以及遠程桌面端口。window最容易出事的就是139445135這三個端口的服務,除非必要,默認要關閉這些端口。

 
 

window服務器補丁管理

 
 

window操做系統層面的漏洞比較多並且國內外安全人員跟進也特別快,各類POC利用工具特別多,稍不留神就被黑了,因此window下的補丁管理尤爲重要。微軟自帶就有免費的很簡單可依賴的補丁管理軟件---WSUS

 
 

WSUSWindows Server Update Services),它在之前Windows Update Services的基礎上有了很大的改善。目前的版本能夠更新更多的Windows補丁,同時具備報告功能和導向性能,管理員還能夠控制更新過程。WSUS是典型的CS架構,也支持分佈式部署,不過單臺WSUS服務生產環境負責一千臺之內的window服務器的補丁管理與分發沒有任何問題。

 
 

當服務器個數超過10臺,手工配置將是十分繁瑣的過程,若是你的window服務器都是用域控管理的話,能夠用組策略直接下發WSUS的配置

 
 

其餘具體加固項表

 
 

加固項

加固方法

帳號

按照用戶分配帳號。根據系統的要求,設定不一樣的帳戶和帳戶組,管理員用戶,數據庫用戶,審計用戶,來賓用戶等。

刪除或鎖定與設備運行、維護等與工做無關的帳號。

對於管理員賬號,要求更改缺省賬戶名稱;禁用guest(來賓)賬號。

密碼策略

最短密碼長度 6個字符,啓用本機組策略中密碼必須符合複雜性要求的策略。即密碼至少包含如下四種類別的字符中的三種:

英語大寫字母 A, B, C, Z

英語小寫字母 a, b, c, z

西方阿拉伯數字 0, 1, 2, 9

非字母數字字符,如標點符號,@, #, $, %, &, *

不使用xqazwsxqwer等易被猜解的字符串或其變種字符串

對於採用靜態口令認證技術的設備,帳戶口令的生存期不長於90天。

對於採用靜態口令認證技術的設備,應配置當用戶連續認證失敗次數超過6次(不含6次),鎖定該用戶使用的帳號。

受權

在本地安全設置中從遠端系統強制關機只指派給Administrators組。

在本地安全設置中關閉系統僅指派給Administrators組。

在本地安全設置中取得文件或其它對象的全部權僅指派給Administrators

在本地安全設置中配置指定受權用戶容許本地登錄此計算機。

在組策略中只容許受權賬號從網絡訪問(包括網絡共享等,但不包括終端服務)此計算機。

日誌配置操做

應置設備日誌,對用戶登陸進行記錄,記錄內容包括用戶登陸使用的帳號,登陸是否成功,登陸時間,以及遠程登陸時,用戶使用的IP地址。

用戶策略

啓用組策略中對Windows系統的審覈策略更改,成功和失敗都要審覈。

啓用組策略中對Windows系統的審覈對象訪問,成功和失敗都要審覈。

啓用組策略中對Windows系統的審覈目錄服務訪問,失敗。

啓用組策略中對Windows系統的審覈特權使用,成功和失敗都要審覈。

啓用組策略中對Windows系統的審覈系統事件,成功和失敗都要審覈。

啓用組策略中對Windows系統的審覈賬戶管理,成功和失敗都要審覈。

啓用組策略中對Windows系統的審覈過程追蹤,失敗。

設置應用日誌文件大小至少爲8192KB,設置當達到最大的日誌尺寸時,按須要改寫事件。

屏保

設置帶密碼的屏幕保護,並將時間設定爲5分鐘。

遠程登陸

對於遠程登錄的賬號,設置不活動斷連時間15分鐘。

共享設置

非域環境中,關閉Windows硬盤默認共享,例如C$D$

查看每一個共享文件夾的共享權限,只容許受權的帳戶擁有權限共享此文件夾。

補丁管理

安裝最新的Service Pack補丁集。對服務器系統應先進行兼容性測試。

如需啓用IIS服務,則將IIS升級到最新補丁。

防病毒

安裝防病毒軟件,並及時更新。

服務管理

列出所須要服務的列表(包括所需的系統服務),不在此列表的服務需關閉。

SNMP設置

如需啓用SNMP服務,則修改默認的SNMP Community String設置。

啓動項設置

列出系統啓動時自動加載的進程和服務列表,不在此列表的需關閉。

自動播放限制

關閉Windows自動播放功能

 
 

 

 
 

Linux服務器加固

 
 

禁止root用戶登陸

 
 

Vi /etc/ssh/sshd_config

 
 

PermitRootLogin no

 
 

禁用LKM

 
 

LKM的全稱是Loadable Kernel Moudules,中文名爲可加載內核模塊,主要做用是用來擴展Linux的內核功能。LKM的優勢在於能夠動態的加載到內存中,無需從新編譯內核,因爲LKM具備這樣的特色,因此它常常被用於一些設備的驅動程序,例如聲卡、網卡等等。固然也因爲其優勢,也常常被黑客用於rootkit技術當中,強烈建議默認關閉,除非必要,不要使用。

 
 

Echo 1 > /proc/sys/kernel/modules_disabled

 
 

須要寫到開機啓動項裏面,這個比直接內核編譯時禁用LKM具備可操做性,由於一旦手工關閉LKM應用異常後,只須要開啓便可。

 
 

開啓ASLR

 
 

ASLR,即Linux內存地址隨機化機制,能夠在Linux服務器遭受緩衝區溢出攻擊時提升攻擊成本。

 
 

分爲三個級別:

 
 

0 - 表示關閉進程地址空間隨機化

 
 

1 - 表示將mmap的基址,stackvdso頁面隨機化

 
 

2 - 表示在1的基礎上增長棧(heap)的隨機化

 
 

Echo 2 > /proc/sys/kernel/randomize_va_space

 
 

須要寫到開機啓動項裏面。

 
 

其餘具體加固項表

 
 

加固項

加固方法

口令鎖定策略

對於採用靜態口令認證技術的設備,應配置當用戶連續認證失敗次數超過6次(不含6次),鎖定該用戶使用的帳號。

登錄超時時間設置

對於具有字符交互界面的設備,應配置定時賬戶自動登出,避免管理員忘記註銷登陸,減小安全隱患。

限制root用戶SSH遠程登陸

限制具有超級管理員權限的用戶遠程登陸,遠程執行管理員權限操做,應先以普通權限用戶遠程登陸後,再切換到超級管理員權限帳號後執行相應操做。

使用SSH協議進行遠程維護

對於使用IP協議進行遠程維護的設備,設備應配置使用SSH等加密協議,並安全配置SSHD的設置。

文件與目錄缺省權限控制

控制用戶缺省訪問權限,當在建立新文件或目錄時,應屏蔽掉新文件或目錄不該有的訪問容許權限,防止同屬於該組的其它用戶及別的組的用戶修改該用戶的文件或更高限制。

帳號文件權限設置

涉及帳號、帳號組、口令、服務等的重要文件和目錄的權限設置不能被任意人員刪除,修改。

口令生存期

對於採用靜態口令認證技術的設備,維護人員使用的賬戶口令的生存期不長於90天。

禁止UID0的用戶存在多個

UID0的任何用戶都擁有系統的最高特權,不該存在多個。

口令複雜度

對於採用靜態口令認證技術的設備,口令長度至少8位幷包括數字、小寫字母、大寫字母和特殊符號4類中至少2類。

root用戶環境變量的安全性

賬號與口令-root用戶環境變量的安全性。

限制root用戶TELNET遠程登陸

應該禁止root用戶經過TELNET協議遠程訪問。

系統core dump狀態

系統core dump狀態,core dump中可能包括系統信息,易被入侵者利用,建議關閉。

啓用遠程日誌功能

設備配置遠程日誌功能,將須要重點關注的日誌內容傳輸到日誌服務器。

修改SSHBanner信息

用戶經過網絡或者本地成功登陸系統後,顯示一些警告信息。

刪除無關賬號

應刪除或鎖定與設備運行、維護等工做無關的帳號。

配置用戶最小受權

在設備權限配置能力內,根據用戶的業務須要,配置其所需的最小權限。

記錄安全事件日誌

設備應配置日誌功能,記錄對與設備相關的安全事件。

設置帳戶組

根據系統要求及用戶的業務需求,創建多賬戶組,將用戶帳號分配到相應的賬戶組。

修改SSHBanner警告信息

SSH登陸時顯示警告信息,在登陸成功前不泄漏服務器信息。

禁止IP路由轉發

對於不作路由功能的系統,應該關閉數據包轉發功能。

配置NFS服務限制

NFS服務:若是沒有必要,須要中止NFS服務;

若是須要NFS服務,須要限制可以訪問NFS服務的IP範圍。

 

禁止組合鍵關機

禁止ctrl+alt+del,防止非法從新啓動服務器。

控制遠程訪問的IP地址

對於經過IP協議進行遠程維護的設備,設備應支持對容許登錄到該設備的IP地址範圍進行設定。

禁止存在空密碼的賬戶

不容許存在空密碼的賬戶。

配置NTP

若是網絡中存在信任的NTP服務器,應該配置系統使用NTP服務保持時間同步。

禁止ICMP重定向

主機系統應該禁止ICMP重定向,採用靜態路由。

修改FTPBanner信息

FTP登陸時須要顯示警告信息,隱藏操做系統和FTP服務器相關信息。

修改SNMP的默認Community

若是沒有必要,須要中止SNMP服務;

若是確實須要使用SNMP服務,須要修改SNMP Community

避免賬號共享

應按照不一樣的用戶分配不一樣的帳號,避免不一樣用戶間共享帳號,避免用戶帳號和設備間通訊使用的帳號共享。

設置屏幕鎖定

對於具有圖形界面(含WEB界面)的設備,應配置定時自動屏幕鎖定。

用戶FTP訪問安全配置

設置FTP用戶登陸後對文件目錄的存取權限。

關閉沒必要要啓動項

列出系統啓動時自動加載的進程和服務列表,不在此列表的需關閉。

補丁安裝

應根據須要及時進行補丁裝載,對服務器系統應先進行兼容性測試。

記錄賬戶登陸日誌

設備應配置日誌功能,對用戶登陸進行記錄,記錄內容包括用戶登陸使用的帳號,登陸是否成功,登陸時間,以及遠程登陸時,用戶使用的IP地址。

日誌文件安全

設備應配置權限,控制對日誌文件讀取、修改和刪除等操做。

口令重複次數限制

對於採用靜態口令認證技術的設備,應配置設備,使用戶不能重複使用最近5次(含5次)內已使用的口令。

禁止root用戶登陸FTP

控制FTP進程缺省訪問權限,當經過FTP服務建立新文件或目錄時應屏蔽掉新文件或目錄不該有的訪問容許權限。

配置su命令使用狀況記錄

啓用syslog系統日誌審計功能。

限制FTP用戶登陸後能訪問的目錄

應該從應用層面進行必要的安全訪問控制,好比FTP服務器應該限制FTP能夠使用的目錄範圍。

關閉沒必要要的服務和端口

列出所須要服務的列表(包括所需的系統服務),不在此列表的服務需關閉。

使用PAM認證模塊禁止wheel組以外的用戶suroot

使用PAM禁止任何人suroot

禁止匿名FTP

禁止匿名FTP

修改TELNETBanner信息

修改系統Banner,避免泄漏操做系統名稱,版本號,主機名稱等,而且給出登錄告警信息。

 
 

 

 
 

數據庫安全加固

 
 

MySQL數據庫安全加固

 
 

 

 
 

加固項

加固方法

ssl_key的路徑

配置ssl_key的路徑

ssl_ca的路徑

配置ssl_ca的路徑

ssl_cert的路徑

配置ssl_cert的路徑

日誌功能

數據庫須要配置錯誤日誌,以便於出現問題時更好分析緣由和恢復

移除test數據庫

移除測試數據庫test

禁止自動建立用戶自動受權

禁止自動建立用戶權限

刪除無關或匿名賬號

不該存在匿名賬號和無關賬號

加密數據庫密碼

數據庫密碼存放是以hash加密的結果存放的

更改root用戶

修改數據庫管理員root的名稱

使用ssl鏈接

要求使用ssl鏈接

設置最大鏈接數

設置合適的最大鏈接數

安裝最新補丁

安裝最新的安全補丁

避免弱口令

不容許存在空密碼用戶

禁止通配符的主機信息

不能存在有通配符%做爲主機信息

用戶權限

嚴格控制用戶權限,只有管理員才能針對數據庫操做權限

不一樣用戶不一樣帳號

應按照用戶分配賬號,避免不一樣用戶間共享賬號

禁止遠程下載文件

禁止遠程下載文件

禁止使用舊密碼

禁止使用舊密碼

禁止網絡鏈接

在不須要外部IP鏈接數據庫的時候,禁止網絡鏈接

禁止MySql進程管理員權限

以普通賬戶安全運行mysqld,禁止mysql以管理員帳號權限運行.

可信IP地址訪問控制

經過數據庫所在操做系統或防火牆限制,只有信任的IP地址才能經過監聽器訪問數據庫。

 
 

 

 
 

中間件安全加固

 
 

Tomcat安全加固

 
 

加固項

加固方法

無關帳號管理-Linux

應刪除或鎖定與設備運行、維護等工做無關的帳號。

管理無關帳號-Windows

應刪除或鎖定與設備運行、維護等工做無關的帳號。

口令複雜度-Linux

對於採用靜態口令認證技術的設備,口令長度至少8位,幷包括數字、小寫字母、大寫字母和特殊符號4類中至少3類。

口令複雜度-Windows

對於採用靜態口令認證技術的設備,口令長度至少8位,幷包括數字、小寫字母、大寫字母和特殊符號4類中至少2類。

定時登出-Linux

對於具有字符交互界面的設備,應支持定時帳戶自動登出。登出後用戶需再次登陸才能進入系統。

定時登出-Windows

對於具有字符交互界面的設備,應支持定時帳戶自動登出。登出後用戶需再次登陸才能進入系統。

HTTP加密協議-Linux

對於經過HTTP協議進行遠程維護的設備,設備應支持使用HTTPS等加密協議。

HTTP加密協議-Windows

對於經過HTTP協議進行遠程維護的設備,設備應支持使用HTTPS等加密協議。

錯誤頁面重定向-Linux

Tomcat錯誤頁面重定向。

錯誤頁面重定向-Windows

Tomcat錯誤頁面重定向。

配置用戶最小權限-Linux

在設備權限配置能力內,根據用戶的業務須要,配置其所需的最小權限。

配置用戶最小權限-Windows

在設備權限配置能力內,根據用戶的業務須要,配置其所需的最小權限。

按照用戶分配帳號-Linux

應按照用戶分配帳號。避免不一樣用戶間共享帳號。避免用戶帳號和設備間通訊使用的帳號共享。

按照用戶分配帳號-Windows

應按照用戶分配帳號,避免不一樣用戶間共享帳號,避免用戶帳號和設備間通訊使用的帳號共享。

更改默認管理端口-Linux

更改tomcat服務器默認端口,修改tomcat安裝目錄下/conf/server.xml配置文件,更改默認管理端口到非8080

更改默認管理端口-Windows

更改tomcat服務器默認端口,修改tomcat安裝目錄下/conf/server.xml配置文件,更改默認管理端口到非8080

禁止目錄列出-Linux

禁止tomcat列表顯示文件。

禁止目錄列出-Windows

禁止tomcat列表顯示文件。

記錄用戶登陸行爲-Linux

設備應配置日誌功能,對用戶登陸進行記錄,記錄內容包括用戶登陸使用的帳號,登陸是否成功,登陸時間,以及遠程登陸時,用戶使用的IP地址。

記錄用戶登陸行爲-Windows

設備應配置日誌功能,對用戶登陸進行記錄,記錄內容包括用戶登陸使用的帳號,登陸是否成功,登陸時間,以及遠程登陸時,用戶使用的IP地址。

防止惡意關閉Tomcat服務-Linux

避免惡意shutdown TOMCAT服務,避免tomcat端口被佔用。

鏈接數設置-Linux

根據機器配置性能和業務需求,來設置鏈接訪問最大最小鏈接數。

禁用非法HTTP方法-Windows

禁用PUTDELETE等危險的HTTP 方法。

服務帳號管理-Linux

禁用超級用戶啓用tomcat

鏈接數設置-Windows

根據機器配置性能和業務需求,來設置鏈接訪問最大最小鏈接數。

更改系統Banner信息-Linux

修改系統Banner信息

防止惡意關閉Tomcat服務-Windows

避免惡意shutdown TOMCAT服務,避免tomcat端口被佔用。

 
 

 

 
 

IIS安全加固

 
 

加固項

加固方法

檢查是否更改IISWeb日誌默認存放路徑--IIS7

更改IIS Web日誌默認存放路徑

SSL加密通訊--IIS7

IIS服務SSL身份訪問認證

檢查是否設置帶密碼的屏幕保護

對於具有圖形界面(含WEB界面)的設備,應配置定時自動屏幕鎖定(參考Windows相關配置:設置帶密碼的屏幕保護,並將時間設定爲5分鐘。)

檢查是否配置日誌功能

設備應配置日誌功能,記錄與設備相關的安全事件。

檢查是否對IIS訪問源進行IP範圍限制--IIS7

在條件容許的條件下,對IIS訪問源進行IP範圍限制。

只有在容許的IP範圍內的主機才能夠訪問WWW服務

口令生存期

對於採用靜態口令認證技術的設備,維護人員使用的帳戶口令的生存期不長於90天(IIS基於Windows系統,可經過提高Windows賬戶策略實現)

檢查是否按照用戶分配帳號--IIS7

應按照用戶分配帳號避免不一樣用戶間共享帳號.避免用戶帳號和設備間通訊使用的帳號共享(對於IIS用戶定義分爲兩個層次:1、IIS自身操做用戶,2、IIS發佈應用訪問用戶)

檢查IIS服務組件安裝--IIS7

IIS 是架設 WEBFTPSMTP 服務器的一套整合軟件,若是不是必須,不得安裝FTPSMTP服務。

管理asp.net功能擴展--IIS7

對於IIS6.0 對於「web服務擴展」,默認只啓用了「asp.net」功能。

若是業務系統不須要ASP支持,必須按照下圖的方法將相應的服務擴展禁止。

啓用日誌功能--IIS7

啓用日誌功能

更改默認安裝路徑--IIS7

更改IIS默認安裝路徑。

檢查密碼是否符合複雜性要求

對於採用靜態口令認證技術的設備,口令長度至少8位,

幷包括數字、小寫字母、大寫字母和特殊符號4類中至少2類(IIS基於Windows系統,可經過提高Windows自身密碼安全等級實現

口令歷史

對於採用靜態口令認證技術的設備,應配置設備,使用戶不能重複使用最近5次(含5次)內已使用的口令(IIS基於Windows系統,可經過提高Windows賬戶策略實現)

帳號鎖定策略

對於採用靜態口令認證技術的設備,應配置當用戶連續認證失敗次數超過6次(不含6),鎖定該用戶使用的帳號(IIS基於Windows系統,可經過提高Windows賬戶策略實現).

檢查是否配置防止日誌文件被篡改或非法刪除

按帳號分配日誌文件讀取、修改和刪除權限,從而防止日誌文件被篡改或非法刪除。

刪除危險的實例文件(iis6_iis7)

刪除部分安裝缺省文件或目錄,增強IIS安全

刪除沒必要要的腳本映射-iis6

減小服務器腳本攻擊的風險

卸載沒必要要的服務組件--iis6

不得安裝FTPSMTP服務,"IIS 是架設 WEBFTPSMTP 服務器的一套整合軟件,若是不是必須,不得安裝FTPSMTP服務.

刪除鎖定無關帳號_iis6.0

刪除或鎖定某些帳號,應刪除或鎖定與設備運行、維護等工做無關的帳號

檢查是否更改IIS默認安裝路徑--IIS6

更改IIS默認安裝路徑。

檢查是否更改IISWeb日誌默認存放路徑--IIS6

更改IIS Web日誌默認存放路徑

啓用日誌功能--IIS6

啓用日誌記錄,並採用IIS日誌格式。

管理asp.net功能擴展--IIS6

對於IIS6.0 對於「web服務擴展」,默認只啓用了「asp.net」功能。若是業務系統不須要ASP支持,必須按照將相應的服務擴展禁止

IIS訪問源進行IP範圍限制--IIS6

在條件容許的條件下,對IIS訪問源進行IP範圍限制。只有在容許的IP範圍內的主機才能夠訪問WWW服務。

SSL加密通訊--IIS6

IIS服務SSL身份訪問認證

禁用非法HTTP方法-iis6

禁用PUTDELETE等危險的HTTP 方法

鏈接數限制-iis6

根據機器性能和業務需求,設置最大最小鏈接數

錯誤頁面重定向-iis6

錯誤頁面重定向

禁止目錄列出-iis6

禁止IIS列表顯示文件

上傳目錄權限設置-iis6

禁止動態腳本在上傳目錄的運行權限,防止攻擊者繞過過濾系統上傳webshell

補丁更新-(iis5_iis6_iis7)

在不影響業務的狀況下,將IIS升級到最新補丁,並且該補丁通過試驗測試。

鏈接數設置-iis7

根據機器性能和業務需求,設置最大最小鏈接數

錯誤頁面重定向-iis7

錯誤頁面重定向

刪除沒必要要的腳本映射-iis7

刪除沒必要要的腳本映射

禁止目錄列出-iis7

禁止IIS列表顯示文件

上傳目錄權限設置-iis7

禁止動態腳本在上傳目錄的運行權限,防止攻擊者繞過過濾系統上傳webshell

 
 

 

 
 

Apache安全加固

 
 

加固項

加固方法

配置Apache運行帳戶

如下操做使用root帳號或者有httpd修改權限帳號登陸

修改httpd.conf配置文件,添加以下語句:

User apache

Group apachegroup

禁止訪問外部文件

如下操做使用root帳號或者有httpd修改權限帳號登陸

編輯httpd.conf配置文件,

一、設置外部不可訪問。

<Directory />   /** 「 / 」爲外部文件目錄

Order Deny,Allow

Deny from all

</Directory>

二、設置可訪問目錄,

<Directory /web>

Order Allow,Deny

Allow from all

</Directory>

禁止目錄瀏覽

如下操做使用root帳號或者有httpd修改權限帳號登陸

1、編輯httpd.conf配置文件,

<Directory "/web">

Options Indexes FollowSymLinks  #刪除Indexes

AllowOverride None

Order allow,deny

Allow from all

</Directory>

2、從新啓動Apache服務

配置敏感文件訪問權限

如下操做使用root帳號或者有httpd修改權限帳號登陸

使用命令「chmod 600 /etc/httpd/conf/httpd.conf」設置配置文件爲屬主可讀寫,其餘用戶無權限。

使用命令「chmod 644 /var/log/httpd/*.log」設置日誌文件爲屬主可讀寫,其餘用戶只讀權限。

配置使用安全的HTTP請求

在httpd.conf中,找到LimitExcept配置項,並按以下格式添加 GEP POST命令:<LimitExcept GET POST> Deny from all< /LimitExcept>

配置安全日誌

如下操做使用root帳號或者有httpd修改權限帳號登陸

編輯httpd.conf配置文件,設置日誌記錄文件、記錄內容、記錄格式。

LogLevel notice

ErrorLog logs/error_log

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Accept}i\" \"%{Referer}i\" \"%{User-Agent}i\"" combined

CustomLog logs/access_log combined

配置抗拒絕服務攻擊參數

如下操做使用root帳號或者有httpd修改權限帳號登陸

一、編輯httpd.conf配置文件,

Timeout 10 KeepAlive On

KeepAliveTimeout 15

AcceptFilter http data

AcceptFilter https data

二、從新啓動Apache服務

設置鏈接數

如下操做使用root帳號或者有httpd修改權限帳號登陸

使用httpd -l 檢查Apache的工做模式,如列出prefork.c,則進行下列操做:

一、修改httpd.conf文件找到

<IfModuleprefork.c>

StartServers       8

MinSpareServers    5

MaxSpareServers   20

MaxClients       150

MaxRequestsPerChild  1000

</IfModule>

二、修改MaxClients  150 爲須要的鏈接數,如1500

ServerLimit        1500  //鏈接數大於 256 需設置此項

MaxClients         1500

三、保存退出。從新啓動http 服務:

/etc/rc.d/init.d/httpd restart

刪除缺省文件

如下操做使用root帳號或者有httpd修改權限帳號登陸

一、刪除缺省HTML文件,位置爲apache2/htdocs下的默認目錄及文件;

二、刪除缺省的CGI腳本,位置爲apache2/cgi-bin目錄下的全部文件;

三、刪除Apache說明文件,位置爲apache2/manual目錄。

設置Apache版本號

如下操做使用root帳號或者有httpd修改權限帳號登陸

修改httpd.conf配置文件:

ServerSignature Off

ServerTokens Prod

配置錯誤頁面處理

如下操做使用root帳號或者有httpd修改權限帳號登陸

一、修改httpd.conf配置文件:

ErrorDocument 400 /custom400.html

ErrorDocument 401 /custom401.html

ErrorDocument 403 /custom403.html

ErrorDocument 404 /custom404.html

ErrorDocument 405 /custom405.html

ErrorDocument 500 /custom500.html

其中,Customxxx.html爲要設置的錯誤頁面。須要手動創建相關文件並自定義內容。

二、從新啓動Apache服務

更新補丁

訪問http://httpd.apache.org/download.cgi,查看最新的apache版本,在實驗室測試經過的前提下,編譯升級apache,解決高危漏洞。

 
 

 

 
 

Nginx安全加固

 
 

加固項

加固方法

僅安裝所需模塊

請參閱NGINX模塊文檔以肯定安裝所需的模塊。能夠使用configure命令刪除模塊。

禁止安裝HTTPWebDAV模塊

從源代碼從新編譯nginx,配置--withhttp_dav_module參數。

禁用gzip功能模塊

從源代碼從新編譯nginx,配置--without-http_gzip_module參數

禁用自動索引模塊

將全部autoindex指令的值設置爲off,或刪除這些指令。

配置NGINX使用非特權專用服務賬戶運行

1.爲nginx用戶添加一個系統賬戶,主目錄爲/var/cache/nginx,shell爲/sbin/nologin

user add nginx -r -g nginx -d /var/cache/nginx -s /sbin/nologin

2.而後經過添加user指令將nginx用戶添加到/etc/nginx/nginx.conf,以下所示:

user nginx

鎖定NGINX服務帳戶

使用命令:passwd -l nginx

設置NGINX賬戶的shell無效

使用命令:chsh -s /sbin/nologin nginx

配置NGINX目錄和文件的屬主爲root

使用命令:chown -R root:root /etc/nginx

設置訪問限制

使用以下命令:

find /etc/nginx -type d | xargs chmod 750
find /etc/nginx -type f | xargs chmod 640

配置NGINX的PID權限

使用以下命令:

chown root:root /var/run/nginx.pid

chown 644 /var/run/nginx.pid

禁用核心轉儲

從NGINX配置文件中刪除working_directory指令

配置NGINX監聽的端口

在配置文件中刪除或者註釋掉未受權的監聽的端口

拒絕未知主機名的請求

確保nginx的配置文件中包含以下指令:

server{
return404;
}

配置keepalive_timeout

配置文件中設置:keepalive_timeout 10

配置server_token

在配置文件中添加以下指令:

server{
...
server_tokens  off;
...
}

配置默認錯誤頁面和index.html

編輯/usr/share/nginx/html/index.html和usr/share/nginx/html/50x.html並刪除任何引用NGINX的行。

禁用隱藏文件服務

編輯ngixn.conf文件,添加以下指令:

location ~ /\. { deny all; return 404; }

禁用NGINX反向代理的默認響應信息

編輯nginx.conf文件,添加以下指令:

location/docs{
....
proxy_hide_header X-Powered-By;
proxy_hide_header Server;
....
}

啓用詳細的日誌記錄

參考連接:http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format

啓用訪問日誌

能夠根據須要使用不一樣的日誌文件位置,相似以下:

access_log /var/log/nginx/host.access.log main;

啓用錯誤日誌

編輯/etc/nginx/nginx.conf以使error_log指令存在且未註釋掉。應將error_log配置爲您選擇的日誌記錄位置。配置應相似於如下內容:

error_log /var/log/nginx/error.loginfo;

配置錯誤日誌被髮送到遠程syslog服務器

將如下行添加到服務器配置文件中,192.168.2.1應替換爲中央日誌服務器的位置。

error_log syslog:server=192.168.2.1info

配置訪問日誌被髮送到遠程syslog服務器

將如下行添加到服務器配置文件中,192.168.2.1應替換爲中央日誌服務器的位置。

access_log syslog:server=192.168.2.1,facility=local7,tag=nginx,severity=info
combined;

配置HTTP被重定向到HTTPS

在nginx.conf文件中,添加以下指令:

server{
listen 80;
server_name  cisecurity.org;
return  301  https://$host$request_uri;
}

安裝可信任證書

示例以下:

1.使用命令openssl req -new -newkey rsa:2048 -keyout nginx.key -out nginx.csr在交互界面輸入信息:

Country Name (2 letter code) [XX]: Your Country
State or Province Name (full name) []: Your State
Locality Name (eg, city) [Default City]: Your City
Organization Name (eg, company) [Default Company Ltd]: Your City
Organizational Unit Name (eg, section) []: Your Organizational Unit
Common Name (eg, your name or your server's hostname) []: Your server's DNS
name
Email Address []: Your email address

2.在nginx.conf文件中添加以下指令:

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/nginx.key;
...
}

3.重啓nginx服務

參考:

http://nginx.org/en/docs/http/configuring_https_servers.html#chains

https://www.digicert.com/csr-ssl-installation/nginx-openssl.htm
https://support.globalsign.com/customer/portal/articles/1290470-installcertificate---nginx

配置私鑰權限

使用命令:sudo chmod 400 /etc/nginx/nginx.key

配置使用新版的TLS協議

參考:

https://webkit.org/blog/8462/deprecation-of-legacy-tls-1-0-and-1-1-versions/
https://www.cloudflare.com/learning-resources/tls-1-3/

禁用弱密碼

參考:

https://ssllabs.com
https://mozilla.github.io/server-side-tls/ssl-config-generator/
http://nginx.org/en/docs/http/ngx_http_ssl_module.html
https://www.owasp.org/index.php/Testing_for_SSL-TLS_%28OWASP-CM-001%29
https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/
https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/

配置自定義Diffie-Hellman參數

使用命令:

mkdir /etc/nginx/ssl
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
chmod 400 /etc/nginx/ssl/dhparam.pem

啓用OCSP

編輯nginx.conf文件,添加以下指令:

server {
ssl_stapling on;
ssl_stapling_verify on;
}

啓用HSTS

配置文件中添加以下指令:

server {
add_header Strict-Transport-Security "max-age=15768000;";
}

啓用HTTP公鑰鎖定

在服務器配置文件中添加以下指令:

add_header Public-Key-Pins 'pinsha256="base64+primary==InsertPrimaryCertificateSHA256FingerPrintHere"; pinsha256="base64+backup==InsertBackupCertificateSHA256FingerPrintHere"; maxage=5184000;

禁用會話恢復

配置文件中添加以下指令:

ssl_session_tickets off;

使用HTTP/2.0

在配置文件中添加以下指令:

server{
listen 443 ssl http2;
}

配置基於ip的限制

在配置文件中使用allow指令添加全部合法ip地址,使用deny指令添加被隱式拒絕的全部IP地址。

配置HTTPmethods

在nginx.conf文件中,僅容許必須的方法,配置實例以下:

if ($request_method !~ ^(GET|HEAD|POST)$) {
return 444;
}

設置讀取客戶端報頭和正文的超時時間

在配置文件中添加以下指令:

client_body_timeout 10;
client_header_timeout 10;

設置client_max_body_size

在配置文件中添加以下指令:

client_max_body_size 100K

設置large_client_header_buffers

在配置文件中添加以下指令:

large_client_header_buffers 2 1k

設置單IP地址的鏈接數

在配置文件中添加以下指令:

http{
limit_conn_zone$binary_remote_addr zone=limitperip:10m;
server{
limit_connlimitperip 10;
}

}

啓用速率限制

在配置文件中添加以下指令:

http{
limit_req_zone$binary_remote_addr zone=ratelimit:10m rate=5r/s;
server{
location/{
limit_req zone=ratelimit burst=10 nodelay;
}
}

啓用X-Frame-Optionsheader

在配置文件中添加以下指令:

add_header X-Frame-Options "SAMEORIGIN";

啓用X-XSS-Protectionheader

在配置文件中添加以下指令:

add_header X-Xss-Protection "1; mode=block";

啓用內容安全策略(CSP)

在配置文件中添加以下指令:

add_header Content-Security-Policy "default-src 'self'";

啓用Referer策略

在配置文件中添加以下指令:

add_header Referrer-Policy "no-referrer";

 
 

 

 
 

避免加固風險

 
 

常見加固風險

 
 

1、服務不可用:對於不少軟件來講,使用一些共享的庫文件是很正常的事情,這就致使了不一樣應用服務之間可能存在必定的以來關係,補丁程序極可能在安全以後無形之中影響掃其餘的應用或者其餘的資產不可用

 
 

2、業務中斷:服務不可用在沒法正常回退的狀況下,形成業務比較長時間的中斷。

 
 

3、引入新風險:安裝可能引入一些未知的漏洞,安裝補丁須要風險和收益之間獲得平衡,廠商發佈的補丁都是針對某一特定的軟件版本,並且安裝補丁以前要了解安裝補丁一些必要條件,要認真閱讀補丁安裝說明文件,尤爲是Linux和類Unix操做系統,不然安裝失敗或者影響系統正常使用的可能性很是大

 
 

操做系統

 
 

 

 
 

數據庫

 
 

 

 
 

中間件及常見網絡服務

 
 

 

 
 

風險規避手段

 
 

 

 
 

風險規避手段

 
 

 

 
 

安全加固測試

 
 

 

 
 

常見問題

 
 

1、安全加固是否會形成服務器損害?

 
 

安全加固操做主要是增強系統的配置,而且在加固方案和中會考慮到一些可能存在風險的修改。只有在不多狀況下才會真正產生異常,好比廠商提供的系統補丁自己的穩定性差等。

 
 

2、安全加固是否會要求系統從新啓動?

 
 

一般狀況下補丁的安裝都會要求系統從新啓動,同時一些加固配置操做會在系統從新啓動以後纔會生效。

 
 

3、安全加固是否必須在服務器低負荷運行下才能進行麼?

 
 

不須要,可是建議在低負荷運行下進行。因爲可能須要系統從新啓動,所以在低負荷狀況下,對業務和系統的影響將更小。

 
 

4、安全加固操做前是否須要先進行系統備份?

 
 

建議先進行備份,特別是須要安裝安全補丁的狀況下。因爲一些廠商的安全補丁的不穩定性,可能在安裝補丁後形成系統崩潰,所以最好在加固實施前進行系統備份。

 
 

其餘問題

 
 

1、通常不進行大版本升級

 
 

沒有特殊狀況,通常不進行大版本升級。例如Mysql數據庫從5.6升級到5.7

 
 

2、打補丁前必須作好原應用的備份工做

 
 

備份主要包括數據文件、配置文件,條件容許還要備份程序文件,確保可以完整恢復。備份操做通常由系統管理員或者系統廠商完成。應用升級前建議將舊版本以重命名的方式放在之前目錄,同事注意收集舊版本目錄的權限和屬主設置

 
 

3、升級和打補丁時注意版本號和操做系統的匹配

 
 

升級包和補丁包一般有32位(i686X86)和64位(x64)之分,需根據操做系統的版本號來肯定要下載的版本;另外,對於Linux系統,部分安裝包還跟Linux的發行版本有關。好比:Red Hat Linux的程序包可能沒法在Debian上運行,須要找對發行版本

相關文章
相關標籤/搜索