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.關閉無用端口,只開啓常規端口(21、22、80、443) 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)、80、443、8080、8443、135(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.37、5.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 優化配置,安裝適用的安全軟件等增強對象的安全性能;
u 從實踐角度檢驗安全策略的有效性。
咱們的目標是下降風險到能夠接受。
u 目標:明確安全加固支持項目的客戶信息、服務範圍、工做計劃等
u 範圍:針對安全加固範圍內的系統資產進行整體瞭解;確認工做計劃、實施環境、客戶接口人、流程要求、項目交付等
u 輸出:
l 項目信息調研表
l 加固資產清單
l 安全加固支持服務實施計劃
u 要點:
l 確保加固資產無遺漏
1、回退測試:回退及可逆操做測試主要由系統管理員、系統廠商或第三方代維人員完成,包括:系統及數據備份(備份業務數據及軟件狀態)以及回退操做驗證(備份數據及軟件狀態回退測試)
2、有效性測試:加固有效性測試主要由安全加固實施工程師完成,經過利用現網環境或搭建的虛擬環境進行安全風險測試,確認加固有效性
3、業務測試:業務測試主要由系統管理員、系統廠商或第三方代維人員配合完成,經過利用現網環境或搭建的虛擬環境進行業務測試,確認加固操做是否影響業務
安全加固實施主要分爲:
一、主機安全加固
二、數據庫安全加固
三、中間件安全加固
默認只開放web服務以及遠程桌面端口。window最容易出事的就是139、445、135這三個端口的服務,除非必要,默認要關閉這些端口。
window操做系統層面的漏洞比較多並且國內外安全人員跟進也特別快,各類POC利用工具特別多,稍不留神就被黑了,因此window下的補丁管理尤爲重要。微軟自帶就有免費的很簡單可依賴的補丁管理軟件---WSUS。
WSUS(Windows 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 |
|
非字母數字字符,如標點符號,@, #, $, %, &, *等 |
|
不使用x、qaz、wsx、qwer等易被猜解的字符串或其變種字符串 |
|
對於採用靜態口令認證技術的設備,帳戶口令的生存期不長於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自動播放功能 |
Vi /etc/ssh/sshd_config
PermitRootLogin no
LKM的全稱是Loadable Kernel Moudules,中文名爲可加載內核模塊,主要做用是用來擴展Linux的內核功能。LKM的優勢在於能夠動態的加載到內存中,無需從新編譯內核,因爲LKM具備這樣的特色,因此它常常被用於一些設備的驅動程序,例如聲卡、網卡等等。固然也因爲其優勢,也常常被黑客用於rootkit技術當中,強烈建議默認關閉,除非必要,不要使用。
Echo 1 > /proc/sys/kernel/modules_disabled
須要寫到開機啓動項裏面,這個比直接內核編譯時禁用LKM具備可操做性,由於一旦手工關閉LKM應用異常後,只須要開啓便可。
ASLR,即Linux內存地址隨機化機制,能夠在Linux服務器遭受緩衝區溢出攻擊時提升攻擊成本。
分爲三個級別:
0 - 表示關閉進程地址空間隨機化
1 - 表示將mmap的基址,stack和vdso頁面隨機化
2 - 表示在1的基礎上增長棧(heap)的隨機化
Echo 2 > /proc/sys/kernel/randomize_va_space
須要寫到開機啓動項裏面。
加固項 |
加固方法 |
口令鎖定策略 |
對於採用靜態口令認證技術的設備,應配置當用戶連續認證失敗次數超過6次(不含6次),鎖定該用戶使用的帳號。 |
登錄超時時間設置 |
對於具有字符交互界面的設備,應配置定時賬戶自動登出,避免管理員忘記註銷登陸,減小安全隱患。 |
限制root用戶SSH遠程登陸 |
限制具有超級管理員權限的用戶遠程登陸,遠程執行管理員權限操做,應先以普通權限用戶遠程登陸後,再切換到超級管理員權限帳號後執行相應操做。 |
使用SSH協議進行遠程維護 |
對於使用IP協議進行遠程維護的設備,設備應配置使用SSH等加密協議,並安全配置SSHD的設置。 |
文件與目錄缺省權限控制 |
控制用戶缺省訪問權限,當在建立新文件或目錄時,應屏蔽掉新文件或目錄不該有的訪問容許權限,防止同屬於該組的其它用戶及別的組的用戶修改該用戶的文件或更高限制。 |
帳號文件權限設置 |
涉及帳號、帳號組、口令、服務等的重要文件和目錄的權限設置不能被任意人員刪除,修改。 |
口令生存期 |
對於採用靜態口令認證技術的設備,維護人員使用的賬戶口令的生存期不長於90天。 |
禁止UID爲0的用戶存在多個 |
UID爲0的任何用戶都擁有系統的最高特權,不該存在多個。 |
口令複雜度 |
對於採用靜態口令認證技術的設備,口令長度至少8位幷包括數字、小寫字母、大寫字母和特殊符號4類中至少2類。 |
root用戶環境變量的安全性 |
賬號與口令-root用戶環境變量的安全性。 |
限制root用戶TELNET遠程登陸 |
應該禁止root用戶經過TELNET協議遠程訪問。 |
系統core dump狀態 |
系統core dump狀態,core dump中可能包括系統信息,易被入侵者利用,建議關閉。 |
啓用遠程日誌功能 |
設備配置遠程日誌功能,將須要重點關注的日誌內容傳輸到日誌服務器。 |
修改SSH的Banner信息 |
用戶經過網絡或者本地成功登陸系統後,顯示一些警告信息。 |
刪除無關賬號 |
應刪除或鎖定與設備運行、維護等工做無關的帳號。 |
配置用戶最小受權 |
在設備權限配置能力內,根據用戶的業務須要,配置其所需的最小權限。 |
記錄安全事件日誌 |
設備應配置日誌功能,記錄對與設備相關的安全事件。 |
設置帳戶組 |
根據系統要求及用戶的業務需求,創建多賬戶組,將用戶帳號分配到相應的賬戶組。 |
修改SSH的Banner警告信息 |
SSH登陸時顯示警告信息,在登陸成功前不泄漏服務器信息。 |
禁止IP路由轉發 |
對於不作路由功能的系統,應該關閉數據包轉發功能。 |
配置NFS服務限制 |
NFS服務:若是沒有必要,須要中止NFS服務; |
若是須要NFS服務,須要限制可以訪問NFS服務的IP範圍。
|
|
禁止組合鍵關機 |
禁止ctrl+alt+del,防止非法從新啓動服務器。 |
控制遠程訪問的IP地址 |
對於經過IP協議進行遠程維護的設備,設備應支持對容許登錄到該設備的IP地址範圍進行設定。 |
禁止存在空密碼的賬戶 |
不容許存在空密碼的賬戶。 |
配置NTP |
若是網絡中存在信任的NTP服務器,應該配置系統使用NTP服務保持時間同步。 |
禁止ICMP重定向 |
主機系統應該禁止ICMP重定向,採用靜態路由。 |
修改FTP的Banner信息 |
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組以外的用戶su爲root |
使用PAM禁止任何人su爲root。 |
禁止匿名FTP |
禁止匿名FTP。 |
修改TELNET的Banner信息 |
修改系統Banner,避免泄漏操做系統名稱,版本號,主機名稱等,而且給出登錄告警信息。 |
加固項 |
加固方法 |
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地址才能經過監聽器訪問數據庫。 |
加固項 |
加固方法 |
無關帳號管理-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 |
禁用PUT、DELETE等危險的HTTP 方法。 |
服務帳號管理-Linux |
禁用超級用戶啓用tomcat。 |
鏈接數設置-Windows |
根據機器配置性能和業務需求,來設置鏈接訪問最大最小鏈接數。 |
更改系統Banner信息-Linux |
修改系統Banner信息 |
防止惡意關閉Tomcat服務-Windows |
避免惡意shutdown TOMCAT服務,避免tomcat端口被佔用。 |
加固項 |
加固方法 |
檢查是否更改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 是架設 WEB、FTP、SMTP 服務器的一套整合軟件,若是不是必須,不得安裝FTP、SMTP服務。 |
管理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 |
不得安裝FTP、SMTP服務,"IIS 是架設 WEB、FTP、SMTP 服務器的一套整合軟件,若是不是必須,不得安裝FTP、SMTP服務. |
刪除鎖定無關帳號_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 |
禁用PUT、DELETE等危險的HTTP 方法 |
鏈接數限制-iis6 |
根據機器性能和業務需求,設置最大最小鏈接數 |
錯誤頁面重定向-iis6 |
錯誤頁面重定向 |
禁止目錄列出-iis6 |
禁止IIS列表顯示文件 |
上傳目錄權限設置-iis6 |
禁止動態腳本在上傳目錄的運行權限,防止攻擊者繞過過濾系統上傳webshell |
補丁更新-(iis5_iis6_iis7) |
在不影響業務的狀況下,將IIS升級到最新補丁,並且該補丁通過試驗測試。 |
鏈接數設置-iis7 |
根據機器性能和業務需求,設置最大最小鏈接數 |
錯誤頁面重定向-iis7 |
錯誤頁面重定向 |
刪除沒必要要的腳本映射-iis7 |
刪除沒必要要的腳本映射 |
禁止目錄列出-iis7 |
禁止IIS列表顯示文件 |
上傳目錄權限設置-iis7 |
禁止動態腳本在上傳目錄的運行權限,防止攻擊者繞過過濾系統上傳webshell。 |
加固項 |
加固方法 |
配置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模塊文檔以肯定安裝所需的模塊。能夠使用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 |
配置NGINX的PID權限 |
使用以下命令: chown root:root /var/run/nginx.pid chown 644 /var/run/nginx.pid |
禁用核心轉儲 |
從NGINX配置文件中刪除working_directory指令 |
配置NGINX監聽的端口 |
在配置文件中刪除或者註釋掉未受權的監聽的端口 |
拒絕未知主機名的請求 |
確保nginx的配置文件中包含以下指令: server{ |
配置keepalive_timeout |
配置文件中設置:keepalive_timeout 10 |
配置server_token |
在配置文件中添加以下指令: server{ |
配置默認錯誤頁面和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{ |
啓用詳細的日誌記錄 |
參考連接: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 |
配置HTTP被重定向到HTTPS |
在nginx.conf文件中,添加以下指令: server{ |
安裝可信任證書 |
示例以下: 1.使用命令openssl req -new -newkey rsa:2048 -keyout nginx.key -out nginx.csr在交互界面輸入信息: Country Name (2 letter code) [XX]: Your Country 2.在nginx.conf文件中添加以下指令: server { 3.重啓nginx服務 參考: http://nginx.org/en/docs/http/configuring_https_servers.html#chains https://www.digicert.com/csr-ssl-installation/nginx-openssl.htm |
配置私鑰權限 |
使用命令:sudo chmod 400 /etc/nginx/nginx.key |
配置使用新版的TLS協議 |
參考: https://webkit.org/blog/8462/deprecation-of-legacy-tls-1-0-and-1-1-versions/ |
禁用弱密碼 |
參考: https://ssllabs.com |
配置自定義Diffie-Hellman參數 |
使用命令: mkdir /etc/nginx/ssl |
啓用OCSP |
編輯nginx.conf文件,添加以下指令: server { |
啓用HSTS |
配置文件中添加以下指令: server { |
啓用HTTP公鑰鎖定 |
在服務器配置文件中添加以下指令: add_header Public-Key-Pins 'pinsha256="base64+primary==InsertPrimaryCertificateSHA256FingerPrintHere"; pinsha256="base64+backup==InsertBackupCertificateSHA256FingerPrintHere"; maxage=5184000; |
禁用會話恢復 |
配置文件中添加以下指令: ssl_session_tickets off; |
使用HTTP/2.0 |
在配置文件中添加以下指令: server{ |
配置基於ip的限制 |
在配置文件中使用allow指令添加全部合法ip地址,使用deny指令添加被隱式拒絕的全部IP地址。 |
配置HTTPmethods |
在nginx.conf文件中,僅容許必須的方法,配置實例以下: if ($request_method !~ ^(GET|HEAD|POST)$) { |
設置讀取客戶端報頭和正文的超時時間 |
在配置文件中添加以下指令: client_body_timeout 10; |
設置client_max_body_size |
在配置文件中添加以下指令: client_max_body_size 100K |
設置large_client_header_buffers |
在配置文件中添加以下指令: large_client_header_buffers 2 1k |
設置單IP地址的鏈接數 |
在配置文件中添加以下指令: http{ } |
啓用速率限制 |
在配置文件中添加以下指令: http{ |
啓用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位(i686、X86)和64位(x64)之分,需根據操做系統的版本號來肯定要下載的版本;另外,對於Linux系統,部分安裝包還跟Linux的發行版本有關。好比:Red Hat Linux的程序包可能沒法在Debian上運行,須要找對發行版本