应用安全 - 操做系统安全 - 系统加固 | 中间件加固

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

 

Linux安全加固                    
                    
1.禁止ping                    
                    
/etc/rc.d/rc.local                    
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all                    
                    
2.对用户和口令文件进行权限控制                    
chmod 600 /etc/passwd                    
chmod 600 /etc/shadow                    
chmod 600 /etc/group                    
chmod 600 /etc/gshadow                    
3.给下面文件加上不可更改属性                    
chattr +i /etc/passwd                    
chattr +i /etc/shadow                    
chattr +i /etc/group                    
chattr +i /etc/gshadow                    
                    
4.对vsftp进行访问控制                    
vi hosts.deny                    
vsftpd: all –先禁止全部vsftp的请求                    
vi hosts.allow                    
vsftpd: 192.168.2.1 –再容许内网的vsftd请求                    
5.关闭无用端口,只开启常规端口(212280443)                    
service portmap stop                    
chkconfig –level 35 portmap off –关闭111端口                    
netstat -nap |grep 32768                    
killall rpc.statd –关闭32768端口                    
netstat -nap |grep 631                    
killall cupsd –关闭631端口                    
service sendmail stop                    
chkconfig –level 12345 sendmail off –关闭25端口                    
6.apache安全设置(先备份httpd.conf配置文件)                    
vi /etc/httpd/httpd.conf                    
ServerSignature Off                    
ServerTokens Prod —隐藏Apache的版本号及其它敏感信息                    
                    
Options -ExecCGI -FollowSymLinks -Indexes –关闭CGI执行程序、includes、目录浏览                    
                    
将UserDir public_html改成UserDir disabled                    
#ScriptAlias /cgi-bin “/usr/local/apache/cgi-bin/”                    
注释掉manual                    
7.vi /etc/profile                    
HISTFILESIZE=30                    
HISTSIZE=30 –这表示每一个用户的“.bash_history”文件只能够保存30条旧命令                    
tmout=600 –用户将在10分钟无操做后自动注销                    
vi /etc/skel/.bash_logout                    
rm -f $HOME/.bash_history –当用户每次注销时,“.bash_history”文件都会被删除。                    
vi /etc/inittab                    
ca::ctrlaltdel:/sbin/shutdown -t3 -r now                    
改成:                    
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now                    
/sbin/init q –让改动起做用                    
8.删除没法账户和组                    
userdel adm                    
userdel lp                    
userdel sync                    
userdel shutdown                    
userdel halt                    
userdel mail                    
userdel news                    
userdel uucp                    
userdel operator                    
userdel games                    
userdel ftp                    
groupdel adm                    
groupdel lp                    
groupdel mail                    
groupdel news                    
groupdel uucp                    
groupdel games                    
==================================================================================================                    
你的webserver支持TRACE 和/或 TRACK 方式。 TRACE和TRACK是用来调试web服务器链接的HTTP方式。                    
支持该方式的服务器存在跨站脚本漏洞,一般在描述各类浏览器缺陷的时候,把”Cross-Site-Tracing”简称为XST。                    
攻击者能够利用此漏洞欺骗合法用户并获得他们的私人信息。                    
解决方案: 禁用这些方式。                    
若是你使用的是Apache, 在各虚拟主机的配置文件里添加以下语句:                    
RewriteEngine on                    
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)                    
RewriteRule .* – [F]                    
===================================================================================================                    
下面简单的说一些修改那些服务Banner的方法                    
apache                    
完全地去掉banner, 修改httpd.h:                    
Include/httpd.h                    
Define SERVER_BASEVENDOR “Apache Group”                    
Define SERVER_PRODUCTVENDOR “Apache”                    
Define SERVER_BASEVERSION “1.3.27″                    
后重新编译Apache就可以彻底去掉了                    
Wu-ftp                    
用十六进制文本编辑器修改/usr/sbin/in.ftpd文件,找到以下几行:                    
/var/log/lastlog                    
Could not write %.100s: %.100s                    
Version wu-2.6.1-16                    
改为                    
Microsoft FTP Service (Version 5.0)                    
或者                    
Serv-U FTP Server v4.0 for WinSock ready…                    
Telnet banner                    
编辑文件/etc/issue.net,找到相似这行(不一样版本的Linux内容不太同样):                    
Red Hat Linux release 8.0 (Psyche)                    
Kernel r on an m                    
改为                    
Microsoft Windows Version 5.00 (Build 2195)                    
Welcome to Microsoft Telnet Service                    
Telnet Server Build 5.00.99206.1                    
因为issue.net重启后会自动恢复,为了保持这些伪造的信息,须要再编辑文件/etc/rc.local,在这些行前加“#”号,注释掉恢复的功能:                    
# echo “” > /etc/issue                    
# echo “$R” >> /etc/issue                    
# echo “Kernel $(uname -r) on $a $SMP$(uname -m)” >> /etc/issue                    
# cp -f /etc/issue /etc/issue.net                    
# echo >> /etc/issue                    
Apache                    
在安装Apache前,在源文件/src/include目录下找到httpd.h头文件。此文件定义了apache的版本信息,apache安装时须要调用它。编辑http.h文件,找到以下几行:                    
#define SERVER_BASEVENDOR “Apache Group”                    
#define SERVER_BASEPRODUCT “Apache”                    
#define SERVER_BASEREVISION “1.3.20″                    
能够根据本身的意愿改为其余信息,笔者改的是Microsoft-IIS/5.0。                    
SSH                    
编辑文件/etc/ssh/sshd_config,找到这行:                    
Banner /etc/issue.net                    
在此行前加#进行注释就能够不显示SSH的Banner。                    
Sendmail                    
在sendmail.mc文件中去掉$v、$z这两个宏,并包含下面的内容:                    
define(`confSMTP_LOGIN_MSG’,$j Sendmail Secure/Rabid;$b)                    
而后生成sendmail.cf文件:                    
#m4 /etc/mail/sendmail.mc > /etc/sendmail.cf                    
若是sendmail.mc中没有include(`/usr/share/sendmail-cf/m4/cf.m4′)这一行就须要和Sendmail提供的预设的配置文件cf.m4一块儿使用来生成文件sendmail.cf:                    
#m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/sendmail.cf                    
php                    
vi php.ini                    
设置 expose_php = Off                    

 

域控加固方案javascript

域控制器加固方案
1、资产识别
域控制器( Domain controller,DC)是活动目录的存储位置,安装了活动目录的计算机称为域控制器。在第一次安装活动目录时,安装活动目录的那台计算机就成为域控制器,简称“域控”。域控制器存储着目录数据并管理用户域的交互关系,其中包括用户登陆过程、身份验证和目录搜索等。
域控制器主要用于负责每一台接入域中服务器、终端的身份验证工做,包含了由这个域的帐户、密码、属于这个域的计算机等信息构成的数据库,加入域的计算机各类策略是域控制器统一设定,用户名和密码也是放到域控制器去验证,也就是说你的帐号密码能够在同一域的任何一台计算机登陆。
各业务单位要准确识别域控制器资产信息,明确责任人,作到100%在OPS系统进行登记(登记操做见附件1),并在次日登陆SOC系统查看。同时,各二层单位工做接口人应在天天下午17:00前按照附件2模板向各二层单位信息安全接口人及时更新域控制器的资产清单。
2、加固指引(通用)
注意:本章加固指引适用于全部类型的域控服务器及加入域的终端。

2.1 帐号及口令管理
2.1.1 安检达标
加固对象:域控制器
加固方案:全部域控制器必须按照附件1的指引开展服务器安检达标工做,并对不达标项进行整改或备案,保证全部域控制器100%达标。

2.1.2 域帐号加固及清理(对域帐号进行权限梳理,加固高权限帐号)
1、查看域帐户和帐户组,梳理高权限帐号。同时也能够经过BloodHound或System Internal Tools的ADExplorer工具进行检测。
域帐号权限检测工具BloodHound:https://github.com/BloodHoundAD/BloodHound  
使用教程:https://www.freebuf.com/sectool/179002.html
2、审阅帐号受权是否“最小化”,调整权限和分组,根据帐号的归属人的权限进行调整,取消非域管帐号的敏感权限,删除或锁定全部与设备运行、维护等工做无关的帐号。针对没法定位使用人的帐号,进行冻结或锁定;
3、参照 
https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/appendix-f--securing-domain-admins-groups-in-active-directory配置域管理员权限
4、建议只保留1个具有域管理员权限的帐户,同时域管理员账号尽可能不登陆其余机器;
5、敏感帐号不容许委派,主机帐号需设置委派时,只能设置为约束性委派;
6、敏感帐号不容许取消 Kerberos预鉴权;
7、全部终端上进行以下配置:(1)最短密码长度:8个字符;(2)密码必须符合复杂性要求:启用;(3)强制执行密码历史记录:记住5个密码;(4)密码最长期限:90天;
8、通知全部高权限帐户修改密码,要求密码必须符合复杂性要求(8位以上,包含大写字母、小写字母、数字、特殊符号中的3类,避免易猜解口令),且不得与人事在线帐号相同;
9、具有直接域管或间接域管权限(例如能够修改 Domain Admins的帐号就具有间接域管权限)的帐号的活动进行邮件报备制度(报备人:黄逸风10252161),未经容许不得进行任何操做,包括登陆等等;
10、域内全部终端(包括办公及、服务器等)护网前所有重启,消除敏感帐号凭据留存;
11、服务器登录查看相关凭据,若是有,经过删除或者注销来删除服务器上留存的凭据。
2.1.3 端口管理
加固对象:域控制器
加固方案:
1、域控制器不得用做其余用途,如Web、FTP等应用服务;
2、域控制器关闭全部非必要的端口(Windows服务器可经过netstat监听本地端口,并停用非必要的服务),尤为是21(FTP)、22(SSH)、23(Telnet)、8044380808443135(RPC)、139(Netbios)、47001(Windows Remote Management)等高风险端口,需评估开启端口的必要性,非必要端口一概关闭。
2.1.4 访问控制
加固对象:域控制器
加固方案:
1、开启域控制器的主机防火墙;
2、配置主机防火墙策略,设置白名单,限制只有域控制器运维人员能够访问域控制器的远程桌面端口(默认为3389),白名单IP建议只有1个,原则上不超过2个;
3、配置主机防火墙策略,设置白名单,限制能够访问域控制器IP地址的地址段信息,原则上只容许域内服务器所在的地址段能够访问,建议白名单IP不超过2个C段。

3、加固指引(Windows)
注意:本章指引(1)适用于操做系统为Windows Server 2008 R二、Windows Server 2012R2的域服务器;(2)部分适用于操做系统windows server 2016Datacenter的域服务器;(3)适用于全部加入域的Windows终端。
3.1安检达标、安全配置及补丁管理
3.1.1 补丁管理
加固对象:域控制器
加固方案:
1、增强Windows服务器补丁升级工做,全部的Windows服务器必须及时进行补丁升级工做,具体操做指导连接:
https://x.xx.com.cn/its/app/articlePub/RkmArticlePub/getDataDetailByArticleId.action?rkmArticlePub.articleId=KBA00032818&rkmArticlePub.requestId=KBA000000035643
2、确保域控制器安装了以下补丁:
•KB3011780:https://www.catalog.update.microsoft.com/Search.aspx?q=KB3011780
•KB2871997:https://www.catalog.update.microsoft.com/Search.aspx?q=KB2871997
•KB4013389:
3.1.2 开启 LDAP enforce signing(CVE-2017-8563)
加固对象:域控制器+全部加入域的Windows终端
加固方案:
1、域控服务器及全部域内服务器下载并安装如下补丁:
https://www.catalog.update.microsoft.com/Search.aspx?q=KB4025337 (安装补丁后需重启)
2、在域控服务器上作以下操做(将服务器设置要求LDAP签名):
(1)单击开始,单击运行,键入 mmc.exe,而后单击肯定。
(2)在文件菜单上,单击添加/删除管理单元。
(3)在添加或删除管理单元对话框中,单击组策略管理编辑器,而后单击添加。
(4)在选择组策略对象对话框中,单击浏览。
(5)在浏览组策略对象对话框中,在域、 Ou 和连接的6. 组策略对象的区域中,单击默认域策略,而后单击肯定。
(6)单击完成。
(7)单击肯定。
(8)展开默认域控制器策略展开计算机配置,展开策略、 展开Windows 设置、 展开安全设置、 展开本地策略,而后单击安全选项。 用鼠标右键单击域控制器: LDAP 服务器签名要求,而后单击属性。
(9)在域控制器: LDAP 服务器签名要求属性对话框中,定义这个策略设置启用,单击以选中定义这个策略设置下拉列表中,在要求签名,而后单击肯定。
(10)在确认设置更改对话框中,单击是。
3、在域控服务器上作以下操做(经过一个域组策略对象设置客户端要求 LDAP签名):
(1)在文件菜单上,单击添加/删除管理单元。
(2)在添加或删除管理单元对话框中,单击组策略对象编辑器,而后单击添加。
(3)单击浏览,而后选择默认域策略(或您要为其启用客户端 LDAP签名组策略对象)。
(4)单击肯定。
(5)单击完成。
(6)单击关闭。
(7)单击肯定。
(8)展开默认域策略,展开计算机配置,展开Windows 设置、 展开安全设置,展开本地策略,而后单击安全选项。
(9)在网络安全: LDAP 客户端签名要求属性对话框中,单击要在下拉列表中,选择须要签名,而后单击肯定。
(10)在确认设置更改对话框中,单击是。
4、在域控服务器上作以下操做(配置注册表以启用):
(1)单击开始,单击运行,键入 regedit,而后单击肯定。
(2)找到并单击如下注册表子项: 
HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
(3)LDAPServerIntegrity注册表项,右键单击,而后单击修改。
(4)将数值数据更改成 2,而后单击肯定。
(5)找到并单击如下注册表子项:
HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\Services\ldap\Parameters
(6)Ldapclientintegrity注册表项,右键单击,而后单击修改。
(7)将数值数据更改成2,而后单击肯定。
3.1.3 开启 LDAPS channel binding(CVE-2017-8563)
加固对象:全部加入域的Windows终端
加固方案:
1、全部域内服务器下载并安装如下补丁(补丁与第2.1.3节相同):
https://www.catalog.update.microsoft.com/Search.aspx?q=KB4025337 (安装补丁后需重启)
2、对全部域内服务器作以下操做(配置注册表以启用)
(1)单击开始,单击运行,键入 regedit,而后单击肯定。
(2)找到并单击如下注册表子项: 
HKEYLOCALMACHINE\System\CurrentControlSet\Services\NTDS\Parameters
(3)LdapEnforceChannelBinding注册表项,右键单击,而后单击修改。
(4)将数值数据更改成 2,而后单击肯定。
数值: 0 表示禁用。 不执行通道绑定验证。 这是全部还没有更新的服务器的行为。 数值: 1 表示启用(若是支持)。 运行在已更新以支持通道绑定令牌 (CBT) 的 Windows 版本上的全部客户端必须向服务器提供通道绑定信息。 运行还没有更新以支持 CBT 的 Windows 版本的客户端不须要这样作。 这是容许应用程序兼容性的中间选项。 数值: 2 表示始终启用。 全部客户端必须提供通道绑定信息。 服务器拒绝来自不这样作的客户端的身份验证请求。
3.1.4 禁用LLMNR
加固对象:全部加入域的Windows终端
加固方案:
(1)在命令行中输入“gpedit.msc”;
(2)点击:本地计算机策略->计算机配置->管理模板->网络->DNS客户端;
(3)在DNS客户端文件夹中,双击“关闭多播名称解析”并将其设置为“已启用”
并找到注册表修改:
HKLM\Software\Policies\Microsoft\Windows NT\DNSClient
"EnableMulticast" DWORD 0
3.1.5 禁用NBT
加固对象:全部加入域的Windows终端
加固方案:
(1)在控制面板的网络和共享中心中,选择“更改适配器设置”,选择“本地链接”,而后右键单击“属性”;
(2)选择“Internet协议版本4(TCP/IPv4),而后单击“属性”按钮”;
(3)点击“高级”按钮
(4)点击WINS选项卡,选择“禁用TCP / IP上的NetBIOS”,并确认
3.1.6 禁用 Wdigest
加固对象:域控制器+全部加入域的Windows终端
加固方案:
1、域控服务器及全部域内服务器下载并安装如下补丁(补丁与第2.1.2节相同):
https://www.catalog.update.microsoft.com/Search.aspx?q=KB2871997(安装补丁后需重启)
2、作以下配置:
注册表
HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest
建立键值 "UseLogonCredential" REG_DWORD 0
3.1.7 启用LSA保护
加固对象:全部加入域的Windows终端
加固方案:
(1)单击开始,单击运行,键入 regedit,而后单击肯定。
(2)找到并单击如下注册表子项:
 HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\Control\LSA
(3)RunAsPPL注册表项,右键单击,而后单击修改。
(4)将数值数据更改成 1,而后单击肯定。
3.1.8 加固NetSess
加固对象:全部加入域的Windows终端
加固方案:
下载地址:
https://gallery.technet.microsoft.com/Net-Cease-Blocking-Net-1e8dcb5b/file/165596/1/NetCease.zip
加固 netsess.exe的权限,禁止普通权限用户滥用该工具进行域内机器信息枚举
3.1.9 禁用SMBv1
加固对象:全部加入域的Windows终端
加固方案:
1、针对Windows Server 2012 R2 & 2016:(PowerShell)
Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol
2、针对Windows Server 2008 R2:(PowerShell,需重启)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force
3.1.10 PtH攻击缓解
简述
1、区域划分,为每一个办公区域设置专门的管理员,禁止区域管理员跨区访问机器;
2、域 Administrator用户只用于访问域控制器,而且将域管理员加入到受保护用户组中;
3、避免域内主机本地管理员密码相同、建立一个新用户做为本地管理员的替代加入到本地管理员组并禁用默认的本地管理员帐户(Administrator);
3.1.11 部署 EMET
加固对象:全部加入域的Windows终端
下载连接:https://www.microsoft.com/en-us/download/details.aspx?id=50766
3.2 网络服务
3.2.1 关闭不须要的服务
加固对象:域控制器
加固方案:
1、开始->运行->services.msc
2、建议评估如下服务是否须要使用,若不须要,则建议关闭
Distributed linktracking client 
PrintSpooler 
Remote Registry Server 
TCP/IP NetBIOS Helper 
Workstation 
Computer Browser 
NetLogon 
Remote Procedure Call (RPC) Locator 
3.2.2 关闭默认共享
1、开始->运行->cmd->net share,查看共享
2、关闭C$,D$等默认共享
开始->运行->regedit->找到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters ,新建AutoShareServer(REG_DWORD),键值为0
3.3 文件系统
3.3.1 使用NTFS
加固对象:域控制器+全部加入域的Windows终端
加固方案:
查看每一个系统驱动器是否使用NTFS文件系统。建议使用NTFS文件系统,转换命令:convert <驱动器盘符>: /fs:ntfs
3.3.2 检查Everyone权限
加固对象:全部加入域的Windows终端
加固方案:
查看每一个系统驱动器根目录是否设置为Everyone有全部权限,建议删除Everyone的权限或者取消Everyone的写权限
3.3.3 限制命令权限
加固对象:域控制器
加固方案:
1、使用cacls命令或资源管理器查看如下文件权限;
2、建议对如下命令作限制,只容许system、Administrator组访问
%systemroot%\system32\cmd.exe
%systemroot%\system32\regsvr32.exe
%systemroot%\system32\tftp.exe
%systemroot%\system32\ftp.exe
%systemroot%\system32\telnet.exe
%systemroot%\system32\net.exe
%systemroot%\system32\net1.exe
%systemroot%\system32\cscript.exe
%systemroot%\system32\wscript.exe
%systemroot%\system32\regedit.exe
%systemroot%\system32\regedt32.exe
%systemroot%\system32\cacls.exe
%systemroot%\system32\command.com
%systemroot%\system32\at.exe
3.4 防病毒管理
全部的Windows服务器必须安装防病毒软件并及时下载、更新最新的病毒库,McAfee支持的Windows操做系统以下:

下载连接以下,根据操做系统选择对应的版本进行下载安装。
https://xx.xx.com.cn/its/app/download/Download/getDownloadDetails.action?download.itsInfoDownloadId=1608
3.5 操做系统windows server 2016Datacenter的域服务器
针对windows server 2016Datacenter操做系统的域控服务器,要经过微软的基线工具进行检测检查并根据检查结果进行整改加固:
下载连接:https://www.microsoft.com/en-us/download/details.aspx?id=55319
3.6 其余
若域内终端安装了Exchange邮箱,则要从旧到新打补丁,若安装了Office软件,则要禁用(1)Microsoft Office Macros;(2)Microsoft Office OLE
4、加固指引(Linux)
注意:本章指引适用于操做系统为Linux的域控制器。
加固对象:域控制器
加固方案:
除了按照第二章的指引进行加固外,还需:
1、将操做系统升级到最新;
2、按照“linux加固”附件的要求进行加固。

5、漏洞管理
由渗透测试组对全部域控制器不按期进行漏洞扫描、渗透测试,发现的漏洞将经过SOC系统派发工单到设备责任人处或经过邮件派发到部门护网工做接口人处进行处置,请责任人及时完成漏洞加固并反馈加固进展。
6、入侵检测
6.1 DCSync攻击检测
1、网络层检测:
(1)将全部受信 DC的 IP列入白名单中;
(2)配置 IDS将不在白名单中的 IP发起的 DsGetNCChange网络请求进行告警;
备注:一般 DrsAddEntry、DrsReplicaAdd、DsGetNCChange相关的网络流量会每15分钟发生一次,能够在 Wireshark中观察到。 IDS规则配置参考:
https://github.com/ptresearch/AttackDetection/tree/master/dcshadow
2、系统层检测:
使用 https://github.com/shellster/DCSYNCMonitor工具(部署在域控制器上,须要域控制器安装 Winpcap或 Npcap,但该检测方式可被绕过)
3、在 安恒大数据平台中进行检测
6.2 DCShadow攻击检测
1、网络层检测:
DrsAddEntry和 DrsReplicaAdd网络请求只能从 DC发起,配置 IDS检测由非受信 DC发起的这类网络请求。
备注:一般 DrsAddEntry、DrsReplicaAdd、DsGetNCChange相关的网络流量会每15分钟发生一次,能够在 Wireshark中观察到。 Suricata IDS规则:
https://github.com/ptresearch/xx/tree/master/dcshadow
2、系统层检测:
使用 https://github.com/shellster/DCSYNCMonitor工具(部署在域控制器上,须要域控制器安装 Winpcap或 Npcap,但该检测方式可被绕过)
3、在 安恒大数据平台中进行检测
6.3 重要事件监控
将全部域控服务器的日志接入安恒大数据平台进行监测,重点关注如下事件:
EventID    Description    Impact
1102/517    事件日志被清除    攻击者可能会清除事件日志来隐藏痕迹
4610/4611/4614/4622    本地安全机构修改    攻击者可能利用 LSA进行特权提高或权限维持
4672    特权被分配给新登陆的用户    有管理员权限的人登陆时监控。 这是一个应该拥有管理员权限仍是普通用户的账户?
4723    帐户密码被修改    该操做是否异常
4964    任何已定义特殊组的成员的账户登陆日志    对异常登陆进行排查
4698 & 4702    计划任务的建立或更改    攻击者可能会利用计划任务进行权限维持
4732    有新用户被加入到本地管理员组中    攻击者可能会建立一个本地用户并加入到本地管理员组中以获取高权
4720    有本地用户被建立    攻击者可能会建立一个本地用户用于维持权限


附件
服务器管理员认证、登记、达标FAQ
域控制器资产收集

中间件安全加固配置 - Apachephp

1.概述
1.1适用范围
本配置基线适用于Apache系列中间件,主要涉及Apache中间件安全配置方面的基本要求,用于指导安全例行工做、新系统入网安全检查等场合。
1.2目标
根据目前Apache的安全现状,结合相关规范性文件指引,制定适合的基线配置规范。
规范性引用文件:
GB/T 28448-2012 《信息安全技术 信息系统安全等级保护测评要求》
GB/T 28453-2012 《信息安全技术 信息系统安全管理评估要求》
GB/T 25063-2010 《信息安全技术 服务器安全测评要求》
GB/Z 24364-2009 《信息安全技术 信息安全风险管理指南》
GB/T 22239-2008 《信息安全技术 信息系统安全等级保护基本要求》
GB/T 20270-2006 《信息安全技术 网络基础安全技术要求》
GB/T 20271-2006 《信息安全技术 信息系统通用安全技术要求》
GB/T 20269-2006 《信息安全技术 信息系统安全管理要求》
YD/T 2701-2014  《电信网和互联网安全防御基线配置要求及检测要求》
1.3实施策略
结合网络和信息系统建设状况,考虑安全配置项影响的范围,结合以往工做经验,提出以下安全项目实施策略:
基础项:实施安全基线可以明显提高安全水平,实施风险小,可操做性强。
建议项:实施安全基线可以提高必定安全水平,具备必定风险,可操做性较强。
序号    配置类别    安全基线项目名称    实施策略
1    访问控制    配置Apache运行帐户    基础项
2    访问控制    禁止访问外部文件    基础项
3    访问控制    禁止目录浏览    基础项
4    访问控制    配置敏感文件访问权限    基础项
5    访问控制    配置使用安全的HTTP请求    基础项
6    安全审计    配置安全日志    基础项
7    资源控制    配置抗拒绝服务攻击参数    建议项
8    资源控制    设置链接数    建议项
9    其余安全选项    删除缺省文件    基础项
10    其余安全选项    设置Apache版本号    基础项
11    其余安全选项    配置错误页面处理    基础项
12    其余安全选项    更新补丁    建议项


2.安全配置基线标准
2.1访问控制
2.1.1配置Apache运行帐户
基线名称    配置Apache运行帐户(基础项)
基线编号    Tophant-Apache-1
基线说明    以特定的用户帐户和组运行Apache
配置方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
修改httpd.conf配置文件,添加以下语句:
User apache 
Group apachegroup
检查方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
1、检查是否使用非专用帐户(如root)运行apache
2、查看httpd.conf文件,查看是否认义了以下形式的脚本。
User apache
Group apachegroup
检查apache用户和组的权限,该用户不该具备管理员权限。
备注    为apache的用户和组设置适当的权限;apache、apachegroup分别是为Apache建立的用户和组。
2.1.2禁止访问外部文件
基线名称    禁止访问外部文件(基础项)
基线编号    Tophant-Apache-2
基线说明    禁止Apache访问Web目录以外的任何文件。
配置方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
编辑httpd.conf配置文件,
1、设置外部不可访问。
<Directory />   /** “ / ”为外部文件目录
Order Deny,Allow
Deny from all 
</Directory>
二、设置可访问目录,
<Directory /web>
Order Allow,Deny
Allow from all 
</Directory>
检查方法    没法访问Web目录以外的文件。
备注    /web为网站根目录。
2.1.3禁止目录浏览
基线名称    禁止目录浏览(基础项)
基线编号    Tophant-Apache-3
基线说明    禁止当Apahce目录没有默认首页时,显示目录文件
配置方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
一、编辑httpd.conf配置文件,
<Directory "/web">
Options Indexes FollowSymLinks  #删除Indexes 
AllowOverride None
Order allow,deny
Allow from all
</Directory>
二、从新启动Apache服务
检查方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
一、当WEB目录中没有默认首页如index.html文件时,不会列出目录内容
二、检查httpd.conf文件,查看是否存在Options Indexes FollowSymLinks语句。若存在,则不符合要求。
备注    删除Options Indexes FollowSymLinks中的Indexes ,便可禁止Apache 显示该目录结构。Indexes 的做用就是当该目录下没有 index.html文件时,即显示目录结构。
2.1.4配置敏感文件访问权限
基线名称    配置敏感文件访问权限(基础项)
基线编号    Tophant-Apache-4
基线说明    严格设置配置文件和日志文件等敏感文件的访问权限,防止未受权访问
配置方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
使用命令“chmod 600 /etc/httpd/conf/httpd.conf”设置配置文件为属主可读写,其余用户无权限。
使用命令“chmod 644 /var/log/httpd/*.log”设置日志文件为属主可读写,其余用户只读权限。
检查方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
一、使用以下命令查看httpd.conf文件权限
#vi -l /etc/httpd/conf/httpd.conf  
若为-rw-------即符合要求
二、按照上述方法查看.log格式的文件权限
若为-rw-r—r—即为符合要求
备注    
2.1.5配置使用安全的HTTP请求
基线名称    配置使用安全的HTTP请求(基础项)
基线编号    Tophant-Apache-5
基线说明    禁用PUT、DELETE等危险的HTTP方法
配置方法    在httpd.conf中,找到LimitExcept配置项,并按以下格式添加 GEP POST命令:<LimitExcept GET POST> Deny from all< /LimitExcept>
检查方法    参考安全配置方法查看httpd.conf中是否有相应内容
备注    
2.2安全审计
2.2.1配置安全日志
基线名称    配置安全日志(基础项)
基线编号    Tophant-Apache-6
基线说明    设备应配置日志功能,对运行错误、用户访问等进行记录,记录内容包括时间,用户使用的IP地址等内容。
配置方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
编辑httpd.conf配置文件,设置日志记录文件、记录内容、记录格式。
LogLevel notice 
ErrorLog logs/error_log
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Accept}i\" \"%{Referer}i\" \"%{User-Agent}i\"" combined 
CustomLog logs/access_log combined
检查方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
一、查看logs目录中相关日志文件内容,记录完整。
二、查看相关日志记录,要求对运行错误、用户访问等进行记录,记录内容包括时间、用户使用的IP地址等内容。
依据    6.2.1.4 应用安全:安全审计(G3):a) 应提供覆盖到每一个用户的安全审计功能,对应用系统重要安全事件进行审计;
备注    必须记录日志,但考虑到磁盘I/O,不建议记录所有日志。
ErrorLog指令设置错误日志文件名和位置。错误日志是最重要的日志文件,Apache httpd将在这个文件中存放诊断信息和处理请求中出现的错误。若要将错误日志送到Syslog,则设置:ErrorLog syslog。
CustomLog指令设置访问日志的文件名和位置。访问日志中会记录服务器所处理的全部请求。
LogFormat设置日志格式。LogLevel用于调整记录在错误日志中的信息的详细程度,建议设置为notice。
2.3资源控制
2.3.1配置抗拒绝服务攻击参数
基线名称    配置抗拒绝服务攻击参数(建议项)
基线编号    Tophant-Apache-7
基线说明    经过合理设置链接活跃时间和超时时间,减轻“拒绝服务攻击”的影响。
配置方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
一、编辑httpd.conf配置文件,
Timeout 10 KeepAlive On
KeepAliveTimeout 15
AcceptFilter http data
AcceptFilter https data
二、从新启动Apache服务
检查方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
检查httpd.conf文件,查看是否进行了以下设置:
Timeout 10 KeepAlive On
KeepAliveTimeout 15
AcceptFilter http data
AcceptFilter https data
备注    KeepAlive    //保持链接活跃
Timeout    //客户端与服务器端创建链接前的时间间隔
KeepAliveTimeout    //链接活跃时间
2.3.2设置链接数
基线名称    设置链接数(建议项)
基线编号    Tophant-Apache-8
基线说明    根据机器性能和业务需求,设置最大最小链接数
配置方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
使用httpd -l 检查Apache的工做模式,如列出prefork.c,则进行下列操做:
一、修改httpd.conf文件找到
<IfModuleprefork.c>
StartServers       8 
MinSpareServers    5 
MaxSpareServers   20 
MaxClients       150 
MaxRequestsPerChild  1000 
</IfModule>
二、修改MaxClients  150 为须要的链接数,如1500 
ServerLimit        1500  //链接数大于 256 需设置此项
MaxClients         1500 
三、保存退出。从新启动http 服务:
/etc/rc.d/init.d/httpd restart
检查方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
使用httpd -l 检查Apache的工做模式,如列出prefork.c,则检查httpd.conf中的<IfModuleprefork.c>模块设置是否知足业务需求
备注    StartServers    //默认开启进程数
MinSpareServers    //最小开启进程数
MaxSpareServers    //最大开启进程数
MaxClients    //最大链接数
MaxRequestsPerChild    //每一个子进程处理的请求数量
ServerLimit    //系统最大链接数
2.4其余安全选项
2.4.1删除缺省文件
基线名称    删除缺省文件(基础项)
基线编号    Tophant-Apache-9
基线说明    删除缺省安装的无用文件。
配置方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
一、删除缺省HTML文件,位置为apache2/htdocs下的默认目录及文件;
二、删除缺省的CGI脚本,位置为apache2/cgi-bin目录下的全部文件;
三、删除Apache说明文件,位置为apache2/manual目录。
检查方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
检查以下目录中的文件是否存在:
缺省HTML文件, 缺省的CGI脚本,Apache说明文件。
备注    根据安装步骤不一样和版本不一样,某些目录或文件可能不存在或位置不一样。
2.4.2设置隐藏Apache版本号
基线名称    设置隐藏Apache版本号(基础项)
基线编号    Tophant-Apache-10
基线说明    隐藏Apache的版本号及其它敏感信息。
配置方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
修改httpd.conf配置文件:
ServerSignature Off 
ServerTokens Prod
检查方法    参考配置方法:检查ServerSignature Off、ServerTokens Prod是否进行配置。
备注    ServerSignature    //服务器标示
ServerTokens    // http头部返回的apache版本信息
2.4.3配置错误页面处理
基线名称    配置错误页面处理(基础项)
基线编号    Tophant-Apache-11
基线说明    Apache默认的错误页面会泄露系统及应用的敏感信息。所以须要采用自定义错误页面的方式防止信息泄露的问题。
配置方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
一、修改httpd.conf配置文件:
ErrorDocument 400 /custom400.html
ErrorDocument 401 /custom401.html
ErrorDocument 403 /custom403.html
ErrorDocument 404 /custom404.html
ErrorDocument 405 /custom405.html 
ErrorDocument 500 /custom500.html
其中,Customxxx.html为要设置的错误页面。须要手动创建相关文件并自定义内容。
二、从新启动Apache服务
检查方法    如下操做使用root帐号或者有httpd修改权限帐号登陆
一、查看httpd.conf文件,查看定义的错误文件
二、在浏览器中浏览相关文件,检查是否泄漏了敏感信息
备注    ErrorDocument    //错误文件
2.4.4更新补丁
基线名称    更新补丁(建议项)
基线编号    Tophant-Apache-12
基线说明    在不影响业务的状况下,升级解决高危漏洞,并且该补丁要经过实验测试。
配置方法    访问http://httpd.apache.org/download.cgi,查看最新的apache版本,在实验室测试经过的前提下,编译升级apache,解决高危漏洞。
检查方法    使用安全漏洞扫描工具对Apache中间件进行扫描,或经过搜索引擎检索当前版本脆弱性来检查是否存在高危安全漏洞。

中间件安全加固配置-IIShtml

1.概述
1.1适用范围
本配置基线适用于IIS系列中间件,主要涉及IIS中间件安全配置方面的基本要求,用于指导安全例行工做、新系统入网安全检查等场合。
1.2目标
根据目前IIS的安全现状,结合相关规范性文件指引,制定适合的基线配置规范。
规范性引用文件:
GB/T 28448-2012 《信息安全技术 信息系统安全等级保护测评要求》
GB/T 28453-2012 《信息安全技术 信息系统安全管理评估要求》
GB/T 25063-2010 《信息安全技术 服务器安全测评要求》
GB/Z 24364-2009 《信息安全技术 信息安全风险管理指南》
GB/T 22239-2008 《信息安全技术 信息系统安全等级保护基本要求》
GB/T 20270-2006 《信息安全技术 网络基础安全技术要求》
GB/T 20271-2006 《信息安全技术 信息系统通用安全技术要求》
GB/T 20269-2006 《信息安全技术 信息系统安全管理要求》
YD/T 2701-2014  《电信网和互联网安全防御基线配置要求及检测要求》
1.3实施策略
结合网络和信息系统建设状况,考虑安全配置项影响的范围,结合以往工做经验,提出以下安全项目实施策略:
基础项:实施安全基线可以明显提高安全水平,实施风险小,可操做性强。
建议项:实施安全基线可以提高必定安全水平,具备必定风险,可操做性较强。
序号    配置类别    安全基线项目名称    实施策略
1    帐号管理    避免IIS帐号共享    基础项
2    帐号管理    IIS无关帐号清理    基础项
3    受权    IIS用户权限指派    基础项
4    日志配置    启用日志功能    基础项
5    日志配置    更改日志存放路径    基础项
6    日志配置    记录安全事件    基础项
7    访问控制    访问权限    基础项
8    安装路径管理    更改IIS默认安装路劲    基础项


2.安全配置基线标准
2.1帐号管理
2.1.1避免IIS帐号共享
基线名称    避免IIS帐号共享(基础项)
基线编号    Tophant-IIS-1
基线说明    应按照用户分配账号。避免不一样用户间共享账号。避免用户账
号和设备间通讯使用的账号共享(对于 IIS 用户定义分为两个
层次:1、 IIS 自身操做用户,2、 IIS 发布应用访问用户)
配置方法    1、进入“控制面板-> 管理工具-> 计算机管理” ,在“系统
工具-> 本地用户和组”:根据系统的要求,设定不一样的账户
和账户组. 对应设置 IIS 系统管理员的权限。
2、进入 IIS 管理器-> 相应网站“属性” -> “目录安全性”
-> “身份访问及访问控制”:其中分为“匿名访问身份” 及
“基本(Basic )验证”。“基本(Basic )验证”包含:
“ 集成 windows 身份验证”、“ Windows 域服务器的摘要身
份验证”、“基自己份验证”、“ .NET Passport 身份验证”;
可依据业务应用安全特性,相应配置。
检查方法    根据业务需求查看上述设置是否合理。
备注    
2.1.2IIS无关账号清理
基线名称    IIS无关账号清理(基础项)
基线编号    Tophant-IIS-2
基线说明    应删除或锁定与系统服务运行、维护等工做无关的账号。
配置方法    进入“控制面板-> 管理工具-> 计算机管理” ,在“系统工
具-> 本地用户和组”:删除或锁定与设备运行、维护等与工
做无关的账号。
检查方法    根据业务需求查看账号设置状况。
备注    
2.2受权
2.2.1IIS用户权限指派
基线名称    IIS用户权限指派(基础项)
基线编号    Tophant-IIS-3
基线说明    在系统权限配置能力内,根据用户的业务须要,配置其所需的
最小权限(对于 IIS 用户定义分为两个层次:1、 IIS 自身操
做用户, 2、 IIS 发布应用访问用户;系统权限的配置基于
上述两方面考虑)
配置方法    目录的访问权限:已经设置成 Web 目录的文件夹,能够经过操
做 Web 站点属性页面实现对 www 目录访问权限的控制,而该目
录下的全部文件和子文件夹都将继承这些安全性。 www 服务除
了提供 NTFS 文件系统提供的权限外,还提供读取权限,容许
用户读取或下载 WWW 目录中的文件;执行权限,容许用户运行
www 目录下的程序和脚本。
启动 ISM(Internet 服务器管理器) -> 启动 Web 属性页面
并选择“目录”选项卡; -> 选择 www 目录; -> 选择“编辑
属性”中的“目录属性”进行设置:“脚本资源访问” 、“读
取”、“写入”、“目录浏览” 、“记录访问”、“索引资
源”。
检查方法    查看 ISM 目录安全属性。
备注    
2.3日志配置
2.3.1启用日志功能
基线名称    启用日志功能(基础项)
基线编号    Tophant-IIS-4
基线说明    应启用日志功能,记录系统和服务运行情况。
配置方法    打开 IIS 管理工具,右击要管理的站点,选择“属性”。在“ Web
Site ”选择“启用日志记录”,从下拉菜单中选择“ Microsotf
IIS 日志文件格式”。“W3C”日志格式存在日志记录时间与服务
器时间不统一的问题,因此应尽可能采用 IIS 日志格式。
检查方法    查看 logs 目录中相关日志文件内容,应记录完整。
备注    
2.3.2更改日志存放路径
基线名称    更改日志存放路径(基础项)
基线编号    Tophant-IIS-5
基线说明    更改 IIS Web 日志默认存放路径,加强日志管理安全性。
配置方法    在“Internet 服务管理器”中,右击网站目录,选择“属性” ->
“Web 站点”,选中“启用日志记录” ->“属性” ->“常规属性”,输入须要存放日志的路径。
检查方法    查看日志存放路径设置状况。
备注    IIS 的日志默认存放路径为%WinDir%\System32\LogFiles,应将日
志存放在一个独立的分区中,而且系统管理员要按期对该目录进
行查看和维护,确保日志内容不会溢出,并能够及早的发现网络
异常行为。
2.3.3记录安全事件
基线名称    记录安全时间(基础项)
基线编号    Tophant-IIS-6
基线说明    应配置日志功能,记录与系统运行相关的安全事件。
配置方法    1、进入“控制面板-> 管理工具-> 本地安全策略” ,在“本地
策略-> 审核策略”中配置相应“审核对象访问”、“审核目录服
务器访问”、“审核系统事件”、“审核账号管理” 、“审核过
程追踪”选项。
2、运行 IIS 管理器-> “Internet 信息服务” -> “应用相关
站点”属性->“网站” -> “属性” -> “高级”,选择“时间”、
“日期”、“扩展属性”是否选择。
检查方法    查看系统审核和日志设置状况。
备注    
2.4访问控制
2.4.1访问权限
基线名称    访问权限配置(基础项)
基线编号    Tophant-IIS-7
基线说明    根据应用须要,对 IIS 访问源进行 IP 范围限制。只有在容许
的 IP 范围内的主机才能够访问 WWW 服务。
配置方法    开始-> 管理工具->Internet 信息服务(IIS) 管理器选择相应
的站点,而后右键点击“属性”,进入“目录安全性”页框,
点击“IP 地址访问控制”,勾选“受权访问”,输入受权的 IP
地址或地址段。
检查方法    查看 logs 目录中相关日志文件内容,应记录完整。
备注    查看 IIS 的访问控制设置状况。

2.5IIS安装路径管理
2.5.1更改IIS默认安装路径
基线名称    启用日志功能(基础项)
基线编号    Tophant-IIS-8
基线说明    更改 IIS 默认安装路径,加强 Web 服务安全性。
配置方法    1、 管理工具->Internet 信息服务(IIS)管理器->网站->""网站->右键点击"属性"->主目录->更改默认本地路径
'$WINDISK'"\inetpub\wwwroot\";
2、 更改或删除以下默认安装路径的映射目录。
'$WINDISK'"\inetpub\iissamples\"
'$WINDISK'"\inetpub\scripts\"
'$WINROOT'"\system32\inetsrv\adminsamples\"
'$WINROOT'"\system32\inetsrv\iisadmpwd\"
'$WINROOT'"\system32\inetsrv\iisadmin\"
'$WINROOT'"\help\iishelp\"
'$WINDISK'"\Program Files\Common Files\System\mSadc\"
'$WINDISK'"\ProgramFiles\CommonFiles\System\msadc\Sam
ples\"
'$WINDISK'"\inetpub\"
'$WINROOT'"\WeB\printers\"
检查方法    管理工具->Internet 信息服务(IIS)管理器->网站->"
目标"网站->右键点击"属性"->主目录,是否更改默认安装路

中间件安全加固配置-Nginxjava

1.概述
1.1适用范围
本配置基线适用于NGINX 1.14.0,主要涉及NGINX中间件安全配置方面的基本要求,用于指导安全例行工做、新系统入网安全检查等场合。
1.2规范依据
根据目前NGINX中间件安全现状,结合相关规范性文件指引,制定适合的基线配置规范。
规范性引用文件:
GB/T28448-2012《信息安全技术信息系统安全等级保护测评要求》
GB/T28453-2012《信息安全技术信息系统安全管理评估要求》
GB/T25063-2010《信息安全技术服务器安全测评要求》
GB/Z24364-2009《信息安全技术信息安全风险管理指南》
GB/T22239-2008《信息安全技术信息系统安全等级保护基本要求》
GB/T20270-2006《信息安全技术网络基础安全技术要求》
GB/T20271-2006《信息安全技术信息系统通用安全技术要求》
GB/T20269-2006《信息安全技术信息系统安全管理要求》
YD/T2701-2014《电信网和互联网安全防御基线配置要求及检测要求》




2.安全配置基线标准
2.1初始设置
2.1.1安装
2.1.1.1安装NGINX
基线名称    安装NGINX
基线编号    Tophant-NGINX-1
基线说明    建议在大多数状况下使用供应商提供的NGINX源文件
配置方法    使用命令:yum install nginx -y
检查方法    使用命令:nginx–v
备注    使用供应商提供的NGINX包的主要好处是:
1.易于安装
2.依赖性解决方案
3.提升维护和安全补丁的有效性

2.1.1.2从源代码安装NGINX
基线名称    从源码安装NGINX
基线编号    Tophant-NGINX-2
基线说明    直接从源安装NGINX容许您在不使用包管理器的状况下安装NGINX。
配置方法    安装取决于操做系统平台。有关源代码构建,请参阅NGINX文档“从源代码构建nginx”。
检查方法    使用命令:nginx -v
备注    从源代码安装NGINX容许您经过最小化模块来强化NGINX实例。使用包管理器安装时,NGINX没法删除模块。

2.1.2配置软件更新
2.1.2.1配置包管理器
基线名称    配置包管理器
基线编号    Tophant-NGINX-3
基线说明    系统须要正确配置程序包仓库,以确保它们接收最新的修补程序和更新。
配置方法    根据软件供应商配置软件包管理器仓库。
检查方法    使用命令:yum repolis -v nginx
备注    若是系统的软件包管理器仓库配置错误,则可能没法识别重要的修补程序,或者恶意存储库可能会引入受损软件。

2.1.2.2安装最新的软件包
基线名称    安装最新的软件包
基线编号    Tophant-NGINX-4
基线说明    因为发现了新的安全漏洞,相应的修复程序由您的NGINX软件包提供商实施。安装最新的软件版本可确保系统上提供这些修复程序。
配置方法    使用命令:yum update nginx -y
检查方法    使用命令:yum info nginx
备注    最新的软件能够最大限度地防止安全漏洞,例如恶意代码的执行。

2.2基本配置
2.2.1最小化NGINX模块
2.2.1.1仅安装所需模块
基线名称    仅安装所需模块
基线编号    Tophant-NGINX-5
基线说明    Nginx默认安装附带了多个模块,但有些模块不是必须的,需根据实际状况,安装必要的模块。
配置方法    请参阅NGINX模块文档以肯定安装所需的模块。能够使用configure命令删除模块。
检查方法    使用命令:nginx -V
备注    最大限度地减小NGINX内置的功能能够减小服务器的漏洞,从而下降被攻击的可能性。

2.2.1.2禁止安装HTTPWebDAV模块
基线名称    禁止安装HTTPWebDAV模块
基线编号    Tophant-NGINX-6
基线说明    http_dav_module支持RFC4918定义的Web分布式创做和版本控制的HTTP扩展(WebDAV)。这能够在Web服务器上启用基于文件的操做,例如在服务器上建立,删除,更改和移动文件的功能。大多数现代架构已将此功能替换为基于云的对象存储,在这种状况下,不该安装该模块。
配置方法    从源代码从新编译nginx,配置--withhttp_dav_module参数。
检查方法    使用命令:nginx –V 2>&1 | grep http_dav_module
备注    WebDAV功能为利用Web服务器开辟了一条没必要要的路径。经过错误配置WebDAV操做,攻击者可能可以访问和操做服务器上的文件。

2.2.1.3禁用gzip功能模块
基线名称    禁用gzip功能模块
基线编号    Tophant-NGINX-7
基线说明    应禁用压缩功能,以防止成功执行某些类型的攻击。
配置方法    从源代码从新编译nginx,配置--without-http_gzip_module参数
检查方法    命令:nginx –V | grep 'http_gzip_module\|http_gzip_static_module'
备注    禁用压缩,能够减小某些攻击行为。

2.2.1.4禁用自动索引模块
基线名称    禁用自动索引模块
基线编号    Tophant-NGINX-8
基线说明    自动索引模块处理以斜杠字符结尾的请求。此功能启用了目录列表,这在攻击者侦察中颇有用,所以应禁用它。
配置方法    将全部autoindex指令的值设置为off,或删除这些指令。
检查方法    要肯定是否禁用了autoindex模块,请搜索NGINX配置文件(nginx.conf和任何包含的配置文件)以获取autoindex指令:
egrep -i '^\s*autoindex\s+' /etc/nginx/nginx.conf
egrep -i '^\s*autoindex\s+' /etc/nginx/conf.d/*
备注    自动目录列表可能会显示对攻击者有帮助的信息,例如命名约定和目录路径。

2.2.2帐户安全
2.2.2.1配置NGINX使用非特权专用服务账户运行
基线名称    配置NGINX使用非特权专用服务账户运行
基线编号    Tophant-NGINX-9
基线说明    nginx用户指令指定nginxworker进程运行在哪一个用户账户下。确保使用非特权专用服务账户是一种深度防护措施,以限制攻击者破坏账户的行为。
配置方法    1.为nginx用户添加一个系统账户,主目录为/var/cache/nginx,shell为/sbin/nologin
user add nginx -r -g nginx -d /var/cache/nginx -s /sbin/nologin
2.而后经过添加user指令将nginx用户添加到/etc/nginx/nginx.conf,以下所示:
user nginx
检查方法    使用命令:grep "user[^;]*;" /etc/nginx/nginx.conf
备注    在非特权专用服务账户下运行Web服务器有助于下降在运行Web服务的用户账户受到威胁时横向移动到其余服务或进程的风险。

2.2.2.2锁定NGINX服务帐户
基线名称    锁定NGINX服务帐户
基线编号    Tophant-NGINX-10
基线说明    nginx用户账户应该有一个有效的密码,但该账户应该被锁定。注意:若是使用其余账户运行nginx,则应在审计和修复过程当中将该账户的名称替换为nginx。
配置方法    使用命令:passwd -l nginx
检查方法    使用命令:passwd -S nginx,结果应相似于如下之一:
Nginx LK 2010-01-280999997 -1(Password locked.)
nginx L 07/02/2012 -1 -1 -1 -1
备注    应该锁定nginx用户账户以防止登陆并防止有人使用密码将用户切换到nginx。通常来讲,任何人都不须要su做为nginx,当有须要时,应该使用sudo代替,这不须要nginx账户密码。

2.2.2.3设置NGINX账户的shell无效
基线名称    设置NGINX账户的shell无效
基线编号    Tophant-NGINX-11
基线说明    nginx账户不该该具备登陆功能,所以应该为账户设置/sbin/nologinshell。
配置方法    使用命令:chsh -s /sbin/nologin nginx
检查方法    使用命令:grep nginx/etc/passwd
备注    nginx的账户应仅用于nginx服务,而且不须要具备登陆功能。这能够防止攻击者破坏账户以使用它登陆。

2.2.3权限
2.2.3.1配置NGINX目录和文件的属主
基线名称    配置NGINX目录和文件的属主为root
基线编号    Tophant-NGINX-12
基线说明    /etc/nginx目录及其文件的属主和属组应为root
配置方法    使用命令:chown -R root:root /etc/nginx
检查方法    使用命令:stat /etc/nginx
备注    能够减小未经受权的用户修改nginx配置文件的可能性

2.2.3.2设置访问限制
基线名称    设置访问限制
基线编号    Tophant-NGINX-13
基线说明    /etc/nginx目录上的权限应该强制执行最小权限原则。
配置方法    使用以下命令:
find /etc/nginx -type d | xargs chmod 750
find /etc/nginx -type f | xargs chmod 640
检查方法    使用以下命令:
find /etc/nginx -type d | xargs ls -ld
find /etc/nginx -type f | xargs ls -l
备注    这可确保只有须要访问配置文件的用户才能查看它们,从而防止未经受权的访问。其余用户须要使用sudo才能访问这些文件。

2.2.3.3配置NGINX的PID权限
基线名称    配置NGINX的PID权限
基线编号    Tophant-NGINX-14
基线说明    PID文件存储nginx进程的主进程ID。这个文件应该受到保护,以避免未经受权的修改。
配置方法    使用以下命令:
chown root:root /var/run/nginx.pid
chown 644 /var/run/nginx.pid
检查方法    使用命令:ls -l /var/run/nginx.pid
备注    应将PID文件的权限设置为644,能够防止未经受权的用户修改PID文件

2.2.3.4禁用核心转储
基线名称    禁用核心转储
基线编号    Tophant-NGINX-15
基线说明    核心转储是内存的快照。working_directory用于指定NGINX尝试建立核心转储的目录。若是NGINX用户没法写入目录,则将禁用核心转储。
配置方法    从NGINX配置文件中删除working_directory指令
检查方法    使用命令:grep working_directory /etc/nginx/nginx.conf
备注    核心转储可能包含系统上其余账户没法访问的敏感信息。

2.2.4网络配置
2.2.4.1配置NGINX监听的端口
基线名称    配置NGINX监听的端口
基线编号    Tophant-NGINX-16
基线说明    能够将NGINX配置为侦放任何端口,但应将其配置为仅侦听受权端口
配置方法    在配置文件中删除或者注释掉未受权的监听的端口
检查方法    使用命令:grep -ir listen /etc/nginx
备注    将侦听端口限制为仅受权的端口有助于确保经过使用nginx不会运行未经受权的服务。

2.2.4.2拒绝未知主机名的请求
基线名称    拒绝未知主机名的请求
基线编号    Tophant-NGINX-17
基线说明    主机标头应该是已知主机预约义白名单的一部分,这样能够阻止对其余主机的访问。您应该将主机头视为要验证的另外一个输入,由于它是由用户代理定义的。
配置方法    确保nginx的配置文件中包含以下指令:
server{
return404;
}
检查方法    使用命令:curl -k -v https://127.0.0.1 -H 'Host: invalid.host.com'
备注    将特定主机列入白名单并阻止对全部其余主机的访问,有助于缓解针对服务器的注入攻击。

2.2.4.3配置keepalive_timeout
基线名称    配置keepalive_timeout
基线编号    Tophant-NGINX-18
基线说明    浏览器都利用持久链接来提升Web性能。Keepalive_timeout限制了持久链接的时间,建议将keepalive_timeout设置为10或者更小,但不能为0
配置方法    配置文件中设置:keepalive_timeout 10
检查方法    查看nginx的配置文件,检查keepalive_timeout的值。
备注    在服务器端设置keepalive_timeout有助于缓解创建过多持久链接的拒绝服务攻击,从而耗尽服务器资源。

2.2.5信息披露
2.2.5.1配置server_token
基线名称    配置server_token
基线编号    Tophant-NGINX-19
基线说明    server_tokens指令负责在错误页面和服务器HTTP响应头字段中显示NGINX版本号和操做系统版本。不该显示此信息。
配置方法    在配置文件中添加以下指令:
server{
...
server_tokens  off;
...
}
检查方法    使用命令:curl -I 127.0.0.1 | grep -i server
备注    攻击者能够使用这些响应标头在网站上进行侦察,而后针对与底层技术相关的特定已知漏洞进行攻击。

2.2.5.2配置默认错误页面和index.html
基线名称    配置默认错误页面和index.html
基线编号    Tophant-NGINX-20
基线说明    NGINX的默认错误页面和index.html页面会显示服务器信息。应删除或修改这些默认页面。
配置方法    编辑/usr/share/nginx/html/index.html和usr/share/nginx/html/50x.html并删除任何引用NGINX的行。
检查方法    使用以下命令:
grep -i nginx /usr/share/nginx/html/index.html
grep -i nginx /usr/share/nginx/html/50x.html
备注    经过收集有关服务器的信息,攻击者能够针对其已知漏洞进行攻击

2.2.5.3禁用隐藏文件服务
基线名称    禁用隐藏文件服务
基线编号    Tophant-NGINX-21
基线说明    禁用隐藏文件是一种深度防护机制,有助于防止意外泄露敏感信息
配置方法    编辑ngixn.conf文件,添加以下指令:
location ~ /\. { deny all; return 404; }
检查方法    使用命令:grep location /etc/nginx/nginx.conf
备注    禁用隐藏文件可防止攻击者引用可能具备敏感信息的隐藏文件,例如.git文件。

2.2.5.4禁用NGINX反向代理的默认响应信息
基线名称    禁用NGINX反向代理的默认响应信息
基线编号    Tophant-NGINX-22
基线说明    Nginx反向代理能够传递应用程序使用的底层技术信息。
配置方法    编辑nginx.conf文件,添加以下指令:
location/docs{
....
proxy_hide_header X-Powered-By;
proxy_hide_header Server;
....
}
检查方法    使用命令:grep proxy_hide_header /etc/nginx/nginx.conf
备注    攻击者能够使用这些响应标头在网站上进行侦察,而后针对与底层技术相关的特定已知漏洞进行攻击。删除这些标头能够下降针对性攻击的可能性。

2.3日志配置
2.3.1启用详细的日志记录
基线名称    启用详细的日志记录
基线编号    Tophant-NGINX-23
基线说明    应配置系统日志记录以知足组织安全和隐私策略。启用详细日志记录以包含有关事件,事件源,时间戳和用户的信息可能有助于事件响应活动。
配置方法    参考连接:http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format
检查方法    查看nginx.conf文件中关于日志格式的定义
备注    执行详细日志记录可确保事件响应人员,审计人员和其余人可以清楚地查看服务器上发生的活动。

2.3.2启用访问日志
基线名称    启用访问日志
基线编号    Tophant-NGINX-24
基线说明    每一个核心站点都应该开启访问日志,默认为开启
配置方法    能够根据须要使用不一样的日志文件位置,相似以下:
access_log /var/log/nginx/host.access.log main;
检查方法    使用命令:grep -ir access_log /etc/nginx
备注    访问日志可以记录访问者的详细信息。

2.3.3启用错误日志
基线名称    启用错误日志
基线编号    Tophant-NGINX-25
基线说明    应记录应用程序的全部错误。
配置方法    编辑/etc/nginx/nginx.conf以使error_log指令存在且未注释掉。应将error_log配置为您选择的日志记录位置。配置应相似于如下内容:
error_log /var/log/nginx/error.loginfo;
检查方法    使用命令:grep error_log /etc/nginx/nginx.conf
备注    错误记录还有助于识别应用程序可能存在的问题。

2.3.4配置错误日志被发送到远程syslog服务器
基线名称    配置错误日志被发送到远程syslog服务器
基线编号    Tophant-NGINX-26
基线说明    集中式日志管理有助于确保日志在法律上是合理的,有助于审计和事故调查。
配置方法    将如下行添加到服务器配置文件中,192.168.2.1应替换为中央日志服务器的位置。
error_log syslog:server=192.168.2.1info
检查方法    使用命令:grep -ir syslog /etc/nginx
备注    集中式日志服务器经常使用于将日志与潜在的攻击模式关联起来。若是不使用集中式日志解决方案,而且系统(及其日志)被认为受到了危害,则可能不容许使用日志做为证据。

2.3.5配置访问日志被发送到远程syslog服务器
基线名称    配置访问日志被发送到远程syslog服务器
基线编号    Tophant-NGINX-27
基线说明    集中式日志管理有助于确保日志在法律上是合理的,有助于审计和事故调查。
配置方法    将如下行添加到服务器配置文件中,192.168.2.1应替换为中央日志服务器的位置。
access_log syslog:server=192.168.2.1,facility=local7,tag=nginx,severity=info
combined;
检查方法    使用命令:grep -ir syslog /etc/nginx
备注    集中式日志服务器经常使用于将日志与潜在的攻击模式关联起来。若是不使用集中式日志解决方案,而且系统(及其日志)被认为受到了危害,则可能不容许使用日志做为证据。

2.4加密配置
2.4.1配置HTTP被重定向到HTTPS
基线名称    配置HTTP被重定向到HTTPS
基线编号    Tophant-NGINX-28
基线说明    浏览器和客户端经过利用HTTPS与服务器创建加密链接。利用HTTP的请求未加密。应该重定向未加密的请求,以便对它们进行加密。Web服务器上的任何侦听HTTP端口都应重定向到使用加密的服务器配置文件。默认HTTP(未加密)端口为80。
配置方法    在nginx.conf文件中,添加以下指令:
server{
listen 80;
server_name  cisecurity.org;
return  301  https://$host$request_uri;
}
检查方法    查看nginx.conf文件,验证是否有如下配置:
server{
listen 80;
server_name  cisecurity.org;
return 301 https://$host$request_uri;
}
备注    将用户代理流量重定向到HTTPS有助于确保全部用户流量都已加密。

2.4.2安装可信证书
基线名称    安装可信任证书
基线编号    Tophant-NGINX-29
基线说明    证书及其信任链是将web服务器标识为合法且受信任所必需的。证书颁发机构验证web服务器的身份,并确认您是该web服务器域名的全部者。
配置方法    示例以下:
1.使用命令openssl req -new -newkey rsa:2048 -keyout nginx.key -out nginx.csr在交互界面输入信息:
Country Name (2 letter code) [XX]: Your Country
State or Province Name (full name) []: Your State
Locality Name (eg, city) [Default City]: Your City
Organization Name (eg, company) [Default Company Ltd]: Your City
Organizational Unit Name (eg, section) []: Your Organizational Unit
Common Name (eg, your name or your server's hostname) []: Your server's DNS
name
Email Address []: Your email address
2.在nginx.conf文件中添加以下指令:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/nginx/cert.crt;
ssl_certificate_key /etc/nginx/nginx.key;
...
}
3.重启nginx服务
参考:
http://nginx.org/en/docs/http/configuring_https_servers.html#chains
https://www.digicert.com/csr-ssl-installation/nginx-openssl.htm
https://support.globalsign.com/customer/portal/articles/1290470-installcertificate---nginx
检查方法    使用命令:grep -ir ssl_certificate /etc/nginx/
备注    若是没有在web服务器上安装证书,浏览器会将web服务器标记为不受信任。

2.4.3配置私钥权限
基线名称    配置私钥权限
基线编号    Tophant-NGINX-30
基线说明    应该经过基于最小特权原则限制访问来保护服务器的私钥免受未受权访问。
配置方法    使用命令:sudo chmod 400 /etc/nginx/nginx.key
检查方法    使用命令:ls -l /etc/nginx/nginx.key
备注    服务器的私钥文件权限应该设置为400,这确保只有私钥文件的全部者才能访问它。

2.4.4配置使用TLS1.2协议
基线名称    配置使用新版的TLS协议
基线编号    Tophant-NGINX-31
基线说明    使用TSL1.2协议,能够确保用户可以利用强大的安全功能并保护他们免受不安全的旧协议的侵害。
配置方法    参考:
https://webkit.org/blog/8462/deprecation-of-legacy-tls-1-0-and-1-1-versions/
https://www.cloudflare.com/learning-resources/tls-1-3/
检查方法    使用命令:grep -ir ssl_protocol /etc/nginx
备注    TLS1.2利用了多种安全功能,包括现代密码套件,完美的前向安全性和通过身份验证的加密。

2.4.5禁用弱密码
基线名称    禁用弱密码
基线编号    Tophant-NGINX-32
基线说明    应使用ssl_ciphers指令配置Web服务器上的可用密码,并使用proxy_ssl_ciphers指令配置代理的可用密码。
配置方法    参考:
https://ssllabs.com
https://mozilla.github.io/server-side-tls/ssl-config-generator/
http://nginx.org/en/docs/http/ngx_http_ssl_module.html
https://www.owasp.org/index.php/Testing_for_SSL-TLS_%28OWASP-CM-001%29
https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/
https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/
检查方法    使用命令:
grep -ir ssl_ciphers /etc/nginx/
grep -ir proxy_ssl_ciphers /etc/nginx
备注    弱密码可能会使旧版用户代理以易受攻击的方式链接到网站,从而危及您网站或用户的安全。

2.4.6配置自定义Diffie-Hellman参数
基线名称    配置自定义Diffie-Hellman参数
基线编号    Tophant-NGINX-33
基线说明    应使用自定义Diffie-Hellman(DH)密钥交换参数。
配置方法    使用命令:
mkdir /etc/nginx/ssl
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
chmod 400 /etc/nginx/ssl/dhparam.pem
检查方法    使用命令:grep ssl_dhparam /etc/nginx/nginx.conf
备注    默认状况下,NGINX将为PFS密码生成1024位RSA密钥;应该使用更强的替代方案来为受加密保护的数据提供更好的保护。

2.4.7启用OCSP
基线名称    启用OCSP
基线编号    Tophant-NGINX-34
基线说明    OCSP容许用户的浏览器或其余用户代理验证它所看到的证书没有被撤销。O并确保服务器以最适合网站性能和安全需求的方式将这些信息显示给用户的浏览器。
配置方法    编辑nginx.conf文件,添加以下指令:
server {
ssl_stapling on;
ssl_stapling_verify on;
}
检查方法    使用命令:grep -ir ssl_stapling /etc/nginx
备注    OCSP协议能够保护用户不会访问被认为会泄露私钥的网站。若是私钥被泄露,则攻击者可能可以得到对用户发送的加密数据的未受权访问。

2.4.8启用HSTS
基线名称    启用HSTS
基线编号    Tophant-NGINX-35
基线说明    HTTP严格传输安全性(HSTS)标头指示用户代理如何与Web服务器通讯。HSTS标头确保浏览器内置严格的传输安全策略。
配置方法    配置文件中添加以下指令:
server {
add_header Strict-Transport-Security "max-age=15768000;";
}
检查方法    使用命令:grep -ir Strict-Transport-Security /etc/nginx
备注    HSTS标头有助于保护服务器用户不经过未加密的协议访问服务器。此标头有助于防止HTTP降级攻击。

2.4.9启用HTTP公钥锁定
基线名称    启用HTTP公钥锁定
基线编号    Tophant-NGINX-36
基线说明    HTTP公钥锁定容许站点准确指定浏览器或其余用户代理应接受的证书。HTTP公钥绑定容许使用备份指纹来安排证书轮询,以确保用户代理同时存储了两个证书。应启用HTTP公钥固定。
配置方法    在服务器配置文件中添加以下指令:
add_header Public-Key-Pins 'pinsha256="base64+primary==InsertPrimaryCertificateSHA256FingerPrintHere"; pinsha256="base64+backup==InsertBackupCertificateSHA256FingerPrintHere"; maxage=5184000;
检查方法    使用命令:grep -ir Public-Key-Pins /etc/nginx
备注    HTTP公钥固定有助于防止用户代理成为伪造证书的受害者,例如中间人攻击中的人。

2.4.10禁用会话恢复
基线名称    禁用会话恢复
基线编号    Tophant-NGINX-37
基线说明    应禁用会话恢复,以便实现完美正向保密。
配置方法    配置文件中添加以下指令:
ssl_session_tickets off;
检查方法    使用命令:grep -ir ssl_session_tickets /etc/nginx
备注    完美的正向保密是一种加密机制,即便服务器的私钥被泄露,也能够使过去的会话密钥不受损害

2.4.11使用HTTP/2.0
基线名称    使用HTTP/2.0
基线编号    Tophant-NGINX-38
基线说明    HTTP/2.0是HTTP协议的优化且更安全的版本.
配置方法    在配置文件中添加以下指令:
server{
listen 443 ssl http2;
}
检查方法    使用命令:grep -ir http2 /etc/nginx
备注    HTTP/2.0经过彻底多路复用带来了性能优点和安全优点。HTTP/2.0改进了密码套件需求和黑名单。它还禁用会话从新协商和TLS压缩。这有助于防范犯罪等漏洞,并确保咱们拥有更强大的加密技术。

2.5请求过滤和限制
2.5.1访问控制
2.5.1.1配置基于ip的限制
基线名称    配置基于ip的限制
基线编号    Tophant-NGINX-39
基线说明    基于ip的限制做为一种深度防护机制。它容许将应用程序的合法路径列入白名单,并显式地拒绝恶意的IP地址。
配置方法    在配置文件中使用allow指令添加全部合法ip地址,使用deny指令添加被隐式拒绝的全部IP地址。
检查方法    查看配置文件中是否存在allow和deny指令
备注    建议隐式拒绝全部流量,而且只容许合法用户访问网站。

2.5.1.2配置HTTPmethods
基线名称    配置HTTPmethods
基线编号    Tophant-NGINX-40
基线说明    HTTPmethods容许在指定路径上从Web服务器请求不一样的操做。应启用必要的方法。
配置方法    在nginx.conf文件中,仅容许必须的方法,配置实例以下:
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 444;
}
检查方法    使用curl之类的工具向每一个不该支持的方法发送请求(例如DELETE),并将输出与支持的方法(例如GET)进行比较。
备注    大多数网站只须要GET、POST和HEAD方法就能够正常运行。Web应用程序可能还须要其余请求类型(例如DELETE)。为了缩小攻击向量,建议只启用所需的请求方法。

2.5.2请求限制
2.5.2.1设置读取客户端报头和正文的超时时间
基线名称    设置读取客户端报头和正文的超时时间
基线编号    Tophant-NGINX-41
基线说明    client_header_timeout和client_body_timeout指令定义服务器等待从客户端发送标头或正文的时间。若是客户端未在此预约义时间范围内发送整个标头,则服务器将发回408请求超时错误。
配置方法    在配置文件中添加以下指令:
client_body_timeout 10;
client_header_timeout 10;
检查方法    使用命令:grep -ir timeout /etc/nginx
备注    设置客户端标头和正文超时可帮助服务器减轻可能的拒绝服务攻击。经过超时请求,服务器可以释放可能正在等待正文或标题的资源。

2.5.2.2设置client_max_body_size
基线名称    设置client_max_body_size
基线编号    Tophant-NGINX-42
基线说明    client_max_body_size指令设置容许读取客户端请求的请求主体的大小。这定义了请求中容许的字节数,而且等同于Content-Length请求头字段。
配置方法    在配置文件中添加以下指令:
client_max_body_size 100K
检查方法    使用命令:grep -ir client_max_body_size /etc/nginx
备注    限制请求主体的大小有助于防止意外地将长或大的客户端请求传递给应用程序以执行缓冲区溢出攻击。此值应设置得足够低以保护应用程序,但又要足够高,以避免干扰功能并阻止合法的请求主体。

2.5.2.3设置large_client_header_buffers
基线名称    设置large_client_header_buffers
基线编号    Tophant-NGINX-43
基线说明    large_client_header_buffers指令定义URI中使用的缓冲区的数量和大小。配置此指令时,请求不能超过此缓冲区的大小。
配置方法    在配置文件中添加以下指令:
large_client_header_buffers 2 1k
检查方法    使用命令:grep -ir large_client_header_buffers /etc/nginx/
备注    large_client_header_buffers指令能够帮助防止利用长URI查询参数的缓冲区溢出攻击。

2.5.2.4设置单IP地址的链接数
基线名称    设置单IP地址的链接数
基线编号    Tophant-NGINX-44
基线说明    应限制从单个IP地址到服务器的最大同时链接数
配置方法    在配置文件中添加以下指令:
http{
limit_conn_zone$binary_remote_addr zone=limitperip:10m;
server{
limit_connlimitperip 10;
}
}
检查方法    查看配置文件中是否有如下配置项:
http{
imit_conn_zone$binary_remote_addr zone=limitperip:10m;
server{
limit_connlimitperip 10;
}
}
备注    限制同时链接的数量是防止尝试使用尽量多的服务器资源的缓慢拒绝服务攻击的有效方法,同时还能够帮助防止登陆页面上的暴力攻击。

2.5.2.5启用速率限制
基线名称    启用速率限制
基线编号    Tophant-NGINX-45
基线说明    应启用速率限制以限制IP地址在给定时间段内可能对服务器发出的请求数。应根据应用程序的需求和组织策略设置配置值。
配置方法    在配置文件中添加以下指令:
http{
limit_req_zone$binary_remote_addr zone=ratelimit:10m rate=5r/s;
server{
location/{
limit_req zone=ratelimit burst=10 nodelay;
}
}
检查方法    查看配置文件中是否有如下配置项:
http{
limit_req_zone$binary_remote_addr zone=ratelimit:10mrate=5r/s;
server{
location/{
limit_reqzone=ratelimit burst=10 nodelay;
}
}
}
备注    速率限制能够减轻潜在的拒绝服务攻击。

2.5.3浏览器安全
2.5.3.1启用X-Frame-Optionsheader
基线名称    启用X-Frame-Optionsheader
基线编号    Tophant-NGINX-46
基线说明    X-Frame-Optionsheader应设置为容许特定网站或根本没有网站将本地网站做为对象嵌入其本身的内容中。
配置方法    在配置文件中添加以下指令:
add_header X-Frame-Options "SAMEORIGIN";
检查方法    使用命令:grep -ir X-Frame-Options /etc/nginx
备注    X-Frame-Optionsheader能够下降点击劫持攻击的风险。

2.5.3.2启用X-XSS-Protectionheader
基线名称    启用X-XSS-Protectionheader
基线编号    Tophant-NGINX-47
基线说明    X-Xss-ProtectionHeader容许您利用基于浏览器的保护来防止跨站点脚本
配置方法    在配置文件中添加以下指令:
add_header X-Xss-Protection "1; mode=block";
检查方法    使用命令:grep -ir X-Xss-Protection /etc/nginx
备注    X-Xss-Protection能够保护浏览器不支持内容安全策略的用户(一般是旧版浏览器),或者在没有内容安全策略的状况下保护用户。

2.5.3.3启用内容安全策略(CSP)
基线名称    启用内容安全策略(CSP)
基线编号    Tophant-NGINX-48
基线说明    内容安全策略容许管理员指定能够执行容许脚本的位置,或者是否能够执行脚本。应使用内容安全策略来提升用户对网站的信任。
配置方法    在配置文件中添加以下指令:
add_header Content-Security-Policy "default-src 'self'";
检查方法    使用命令:grep -ir Content-Security-Policy /etc/nginx
备注    内容安全策略可帮助组织缓解和报告跨站点脚本(XSS)攻击。

2.5.3.4启用Referrer策略
基线名称    启用Referer策略
基线编号    Tophant-NGINX-49
基线说明    当原始站点将用户定向到另外一个站点时,会发送一个引用来识别用户来自的URL。
配置方法    在配置文件中添加以下指令:
add_header Referrer-Policy "no-referrer";
检查方法    使用命令:grep -r Referrer-Policy /etc/nginx
备注    若是您在URL参数中使用敏感数据(例如我的信息,用户名和密码或持久会话),则Referrer标头可能会在其余Web服务器的日志中公开敏感数据。

中间件安全加固配置-Tomcatnode

1.概述
1.1适用范围
本配置基线适用于Tomcat中间件,主要涉及Tomcat中间件安全配置方面的基本要求,用于指导安全例行工做、新系统入网安全检查等场合。
在未特别说明的状况下,均适用于全部运行Tomcat中间件系统。
1.2规范依据
根据目前Tomcat中间件安全现状,结合相关规范性文件指引,制定适合的基线配置规范。
规范性引用文件:
GB/T 28448-2012 《信息安全技术 信息系统安全等级保护测评要求》
GB/T 28453-2012 《信息安全技术 信息系统安全管理评估要求》
GB/T 25063-2010 《信息安全技术 服务器安全测评要求》
GB/Z 24364-2009 《信息安全技术 信息安全风险管理指南》
GB/T 22239-2008 《信息安全技术 信息系统安全等级保护基本要求》
GB/T 20270-2006 《信息安全技术 网络基础安全技术要求》
GB/T 20271-2006 《信息安全技术 信息系统通用安全技术要求》
GB/T 20269-2006 《信息安全技术 信息系统安全管理要求》
YD/T 2701-2014  《电信网和互联网安全防御基线配置要求及检测要求》

1.3实施策略
结合网络和信息系统建设状况,考虑安全配置项影响的范围,结合以往工做经验,提出以下安全项目实施策略:
基础项:实施安全基线可以明显提高安全水平,实施风险小,可操做性强。
建议项:实施安全基线可以提高必定安全水平,具备必定风险,可操做性较强。
序号    配置类别    基线名称    实施策略
1    身份鉴别    配置密码并保证复杂度    基础项
2    访问控制    配置Tomcat运行帐户    基础项
3    访问控制    配置划分用户权限    基础项
4    访问控制    禁止目录浏览    基础项
5    访问控制    配置使用安全的HTTP请求    基础项
6    安全审计    配置安全日志    基础项
7    资源控制    设置登陆超时    基础项
8    资源控制    设置链接数    建议项
9    其它安全项    删除缺省文件    基础项
10    其它安全项    配置错误页面处理    基础项
11    其它安全项    更新补丁    建议项

2.安全配置基线标准
2.1身份鉴别
2.1.1配置密码并保证复杂度
基线名称    配置密码并保证复杂度(基础项)
基线编号    Tophant-Tomcat-1
基线说明    口令长度至少8位,并包括数字、小写字母、大写字母和特殊符号四类中至少两类。
配置方法    配置操做:
在tomcat/conf/tomcat-user.xml配置文件中设置密码
<user username=”tomcat” password=”Tomcat!234” roles=”admin”>
检查方法    查看tomcat/conf/tomcat-users.xml配置文件。
备注    建议本地方式管理tomcat,不使用远程登陆的方式以规避安全问题。
2.2访问控制
2.2.1配置Tomcat运行帐户
基线名称    配置Tomcat运行帐户(基础项)
基线编号    Tophant-Tomcat-2
基线说明    应按照用户分配账号。避免不一样用户间共享账号。避免用户账号和设备间通讯使用的账号共享。检查是否存在与工做无关的帐号。
配置方法    配置操做:
修改tomcat/conf/tomcat-users.xml配置文件,修改或添加账号。
<user username=”tomcat” password=” Tomcat!234” roles=”admin”>
检查方法    查看tomcat/conf/tomcat-users.xml配置文件
备注    Tomcat 4.1.375.5.27和6.0.18这三个版本及之后发行的版本默认都不存在admin.xml配置文件。
2.2.2配置划分用户权限
基线名称    配置划分用户权限(基础项)
基线编号    Tophant-Tomcat-3
基线说明    根据用户的业务须要,配置其所需的最小权限。
配置方法    配置操做:
编辑tomcat/conf/tomcat-user.xml配置文件,修改用户角色权限
受权tomcat具备远程管理权限:
<user username=”tomcat” password=”chinamobile”
roles=”admin,manager”>
不一样版本说明:
1、Tomcat 4.x和5.x版本用户角色分为:role1,tomcat,admin,manager四种。
role1:具备读权限;
tomcat:具备读和运行权限;
admin:具备读、运行和写权限;
manager:具备远程管理权限。
Tomcat 6.0.18版本只有admin和manager两种用户角色,且admin用户具备manager管理权限。
2、Tomcat 4.1.37和5.5.27版本及之后发行的版本默认除admin用户外其余用户都不具备manager管理权限。
检查方法    查看tomcat/conf/tomcat-users.xml配置文件
登陆http://ip:8080/manager/html页面,使用tomcat账号登陆,进行远程管理。
备注    Manager目录为缺省管理目录,若上线后不须要经过web页面管理,可删除此目录,这样更为安全。

2.2.3禁止目录浏览
基线名称    配置划分用户权限(基础项)
基线编号    Tophant-Tomcat-3
基线说明    根据用户的业务须要,配置其所需的最小权限。
配置方法    配置操做:
编辑tomcat/conf/tomcat-user.xml配置文件,修改用户角色权限
受权tomcat具备远程管理权限:
<user username=”tomcat” password=”chinamobile”
roles=”admin,manager”>
不一样版本说明:
1、Tomcat 4.x和5.x版本用户角色分为:role1,tomcat,admin,manager四种。
role1:具备读权限;
tomcat:具备读和运行权限;
admin:具备读、运行和写权限;
manager:具备远程管理权限。
Tomcat 6.0.18版本只有admin和manager两种用户角色,且admin用户具备manager管理权限。
2、Tomcat 4.1.37和5.5.27版本及之后发行的版本默认除admin用户外其余用户都不具备manager管理权限。
检查方法    查看tomcat/conf/tomcat-users.xml配置文件
登陆http://ip:8080/manager/html页面,使用tomcat账号登陆,进行远程管理。
备注    Manager目录为缺省管理目录,若上线后不须要经过web页面管理,可删除此目录,这样更为安全。
2.2.4配置使用安全的HTTP请求
基线名称    配置使用安全的HTTP请求(基础项)
基线编号    Tophant-Tomcat-5
基线说明    禁用PUT、DELETE等危险的HTTP方法
配置方法    在httpd.conf中,添加以下配置:
<LimitExcept GET POST> Deny from all< /LimitExcept>
检查方法    参考安全配置方法查看httpd.conf中是否有相应内容
备注    
2.3安全审计
2.3.1配置安全日志
基线名称    配置安全日志(基础项)
基线编号    Tophant-Tomcat-6
基线说明    设备应配置日志功能,对运行错误、用户访问等进行记录,记录内容包括时间,用户使用的IP地址等内容。
配置方法    加入以下语句:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="common" resolveHosts="false"/>
检查方法    如下操做使用root帐号或者有Tomcat修改权限帐号登陆
1、查看logs目录中相关日志文件内容
2、查看相关日志记录,要求对运行错误、用户访问等进行记录,记录内容包括时间,用户使用的IP地址等内容。
备注    className   //必须这样写的参数
directory     //日志文件放置的目录
prefix        //日志文件的名称前缀
suffix        //后缀名,能够修改
pattern       //最主要的参数
resolveHosts  //若是这个值是true,tomcat会将这个服务器IP地址经过DNS转换为主机名,若是是false,就直接写服务器IP地址。
2.4资源控制
2.4.1设置登录超时
基线名称    设置登陆超时(基础项)
基线编号    Tophant-Tomcat-7
基线说明    应支持帐户登陆超时锁定功能。超时后用户需再次输入密码登陆才能进入系统。
配置方法    编辑tomcat/conf/server.xml配置文件,修改connectionTimeout参数值为300秒,以下所示:
<Connector
port="8080" maxHttpHeaderSize="8192"maxThreads="150" 
minSpareThreads="25" maxSpareThreads="75"、
enableLookups="false" redirectPort="8443" acceptCount="100"
 connectionTimeout="300" disableUploadTimeout="true" />
检查方法    使用管理员帐号登陆tomcat默认页面http://ip:8080/manager/html ,300秒自动登出。
备注    为保证Tomcat的安全,建议删除默认管理页面(在manager目录),使用本地管理的方式,适用于在不得不远程管理的状况。
建议本地方式管理tomcat,不使用远程登陆的方式以规避安全问题。
2.4.2设置链接数
基线名称    设置登陆超时(基础项)
基线编号    Tophant-Tomcat-7
基线说明    应支持帐户登陆超时锁定功能。超时后用户需再次输入密码登陆才能进入系统。
配置方法    编辑tomcat/conf/server.xml配置文件,修改connectionTimeout参数值为300秒,以下所示:
<Connector
port="8080" maxHttpHeaderSize="8192"maxThreads="150" 
minSpareThreads="25" maxSpareThreads="75"、
enableLookups="false" redirectPort="8443" acceptCount="100"
 connectionTimeout="300" disableUploadTimeout="true" />
检查方法    使用管理员帐号登陆tomcat默认页面http://ip:8080/manager/html ,300秒自动登出。
备注    为保证Tomcat的安全,建议删除默认管理页面(在manager目录),使用本地管理的方式,适用于在不得不远程管理的状况。
建议本地方式管理tomcat,不使用远程登陆的方式以规避安全问题。
2.5其余安全选项
2.5.1删除缺省文件
基线名称    删除缺省文件(基础项)
基线编号    Tophant-Tomcat-9
基线说明    删除缺省安装的无用文件。
配置方法    Manager目录为缺省管理目录,若上线后不须要经过web页面管理,可删除此目录,这样更为安全。
检查方法    检查有无此目录。
备注    若不须要远程管理时候,建议(临时)移除此目录,避免留下安全隐患。

2.5.2配置错误页面处理
基线名称    删除缺省文件(基础项)
基线编号    Tophant-Tomcat-9
基线说明    删除缺省安装的无用文件。
配置方法    Manager目录为缺省管理目录,若上线后不须要经过web页面管理,可删除此目录,这样更为安全。
检查方法    检查有无此目录。
依据    6.2.1.4 应用安全:剩余信息保护(S3):b)应保证系统内的文件、目录和数据库记录等资源所在的存储空间被释放或从新分配给其余用户前获得彻底清除。
备注    若不须要远程管理时候,建议(临时)移除此目录,避免留下安全隐患。
2.5.3更新补丁
基线名称    更新补丁(建议项)
基线编号    Tophant-Tomcat-11
基线说明    在不影响业务的状况下,升级解决高危漏洞,且该补丁要经过实验测试。
配置方法    访问http://tomcat.apache.org/,查看最新的Tomcat版本,在实验室测试经过的前提下,编译升级Tomcat,以解决高危漏洞。
检查方法    使用安全漏洞扫描工具对Tomcat中间件进行扫描,或经过搜索引擎检索当前版本脆弱性来检查是否存在高危安全漏洞。

中间件安全加固配置 - Weblogicmysql

1.概述
1.1适用范围
本配置基线适用于Weblogic系列中间件,主要涉及Weblogic系列中间件安全配置方面的基本要求,用于指导安全例行工做、新系统入网安全检查等场合。
1.2规范依据
根据目前Windows操做系统的安全现状,结合相关规范性文件指引,制定适合的基线配置规范。
规范性引用文件:
GB/T 28448-2012 《信息安全技术 信息系统安全等级保护测评要求》
GB/T 28453-2012 《信息安全技术 信息系统安全管理评估要求》
GB/T 25063-2010 《信息安全技术 服务器安全测评要求》
GB/Z 24364-2009 《信息安全技术 信息安全风险管理指南》
GB/T 22239-2008 《信息安全技术 信息系统安全等级保护基本要求》
GB/T 20270-2006 《信息安全技术 网络基础安全技术要求》
GB/T 20271-2006 《信息安全技术 信息系统通用安全技术要求》
GB/T 20269-2006 《信息安全技术 信息系统安全管理要求》
YD/T 2701-2014  《电信网和互联网安全防御基线配置要求及检测要求_中间件》
1.3实施策略
结合网络和信息系统建设状况,考虑安全配置项影响的范围,结合以往工做经验,提出以下安全项目实施策略:
基础项:实施安全基线可以明显提高安全水平,实施风险小,可操做性强。
建议项:实施安全基线可以提高必定安全水平,具备必定风险,可操做性较强。

序号    配置类别    安全基线项目名称    实施策略
1    身份鉴别    设置密码并保证复杂度    基础项
2    身份鉴别    配置账号锁定    基础项
3    访问控制    设置受限账号启动服务    基础项
4    访问控制    限制目录列表访问    基础项
5    安全审计    配置审核登陆    基础项
6    资源控制    设置登陆超时    基础项
7    资源控制    限制应用服务器Socket链接数    建议项
8    其它安全项    配置错误页面处理    基础项
9    其它安全项    禁用SendServerHeader    建议项
10    其它安全项    更改默认运行端口    建议项
11    其它安全项    配置加密协议    建议项
2.安全配置基线标准
2.1身份鉴别
2.1.1设置密码并保证复杂度
基线名称    设置密码并保证复杂度(基础项)
基线编号    Tophant-WebLogic-1
基线项说明    口令长度至少8位,并包括数字、小写字母、大写字母和特殊符号四类中至少两类。密码应至少每90天进行更换。
配置方法    版本:8.x 9.x 10.x版本
配置操做:
查看WebLogic安装目录下的weblogic.properties配置文件。
检查里面“weblogic.system.minPasswordLen=8”的配置是否符合要求。
检查方法    查看WebLogic安装目录下的weblogic.properties配置文件内“weblogic.system.minPasswordLen”参数值是否符合要求。
依据    
备注    口令要求:口令长度至少8位,并包括数字、小写字母、大写字母和特殊符号四类中至少两类。且5次之内不得设置相同的口令。密码应至少每90天进行更换
2.1.2配置帐号锁定
基线名称    配置账号锁定(基础项)
基线编号    Tophant-WebLogic-2
基线项说明    要求设定账号锁定次数和时间,错误输入密码10次,系统自动锁定,锁定时间5分钟。
配置方法    版本:8.x 9.x 10.x版本
配置操做:
查看以管理员身份登陆控制台
1. 点击左侧面板”Security”文件夹,展开”REALM”
2. 点击右侧面板中的”User Lock”标签,配置下面的参数:
Lockout Enabled,Lockout Threshold,Lockout Duration
配置的参数可参考以下设置:
Lockout Enabled=true;
Lockout Threshold=10;
Lockout Duration=5
检查方法    参见配置方法,配置文件的参数以下设置则知足要求:
Lockout Enabled=true;
Lockout Threshold=10;
Lockout Duration=5
依据    
备注    依据实际需求配置。
2.1.3限制目录列表访问
基线名称    目录列表访问限制(基础项)
安全编号    Tophant-WebLogic-4
基线项说明    禁止WebLogic列表显示文件
配置方法    版本:8.x 9.x 10.x版本
配置操做:
查看WebLogic安装目录下的weblogic.properties配置文件,
检查weblogic.httpd.indexDirectories=是否设置成false。
检查方法    参考配置方法中的文件,检查weblogic.httpd.indexDirectories参数值设置是否知足要求(值为false则知足)
备注    
2.2安全审计
2.2.1配置审核登录
基线名称    配置审核登陆(基础项)
基线编号    Tophant-WebLogic-5
基线项说明    设备应配置日志功能,对用户登陆进行记录,记录内容包括用户登陆使用的账号,登陆是否成功,登陆时间,以及远程登陆时,用户使用的IP地址。
配置方法    版本:8.x 9.x 10.x版本
配置操做:
查看WebLogic安装目录下的weblogic.properties配置文件
开启日志,配置按日期rotate,示例以下:
weblogic.system.enableReverseDNSLookups=true
检查方法    按配置方法检查“weblogic.system.enableReverseDNSLookups”参数值是否为true,若为true则知足。
备注    
2.3资源控制
2.3.1设置登陆超时
基线名称    设置登陆超时(基础项)
安全编号    Tophant-WebLogic-6
安全项说明    应支持帐户登陆超时锁定功能。超时后用户需再次输入密码登陆才能进入系统。
配置方法    版本:8.x 9.x 10.x版本
配置操做:
查看WebLogic安装目录下的weblogic.properties配置文件
如自动登出时间为5分钟则修改下列参数值为5,示例以下:
webblogic.login.readTimeoutMillis=5
weblogic.login.readTimeoutMillisSSL=5
检查方法    检查下列参数值是否符合要求
weblogic.login.readTimeoutMillis
weblogic.login.readTimeoutMillisSSL
备注    
2.3.2限制应用服务器Socker链接数限制
基线名称    应用服务器Socket链接数限制(建议项)
基线编号    Tophant-WebLogic-7
基线项说明    Sockets最大打开数目设置不当的话,容易受到拒绝服务攻击,超出操做系统文件描述符限制
配置方法    版本:8.x 9.x 10.x版本
配置操做:
以管理员身份登陆管理控制台
1、点击左侧面板的域名文件夹,而后点击Servers文件夹,双击要管理的服务器
2、在右侧面板的 Configuration 面板下选择 Tuning 标签,查看Maximum Open Sockets值,应该配置为不大于1024
检查方法    Maximum Open Sockets的值不大于1024。
备注    
2.4其它安全项
2.4.1配置错误页面处理
基线名称    配置错误页面处理(基础项)
基线编号    Tophant-WebLogic-8
基线项说明    WebLogic错误页面重定向
配置方法    版本:8.x 9.x 10.x版本
配置操做:
查看<Application HOME>/WEB-INF/web.xml:文件,检查其是否包含以下片断:
<error-page>
   <exception-type>*</exception-type>
   <location>error.html</location>
</error-page>
若是没有则在配置文件中间部分添加此配置信息。
检查方法    见配置方法。
备注    
2.4.2禁用Send Server Header
基线名称    禁用Send Server Header(建议项)
基线编号    Tophant-WebLogic-9
基线项说明    Sockets最大打开数目设置不当的话,容易受到拒绝服务攻击,超出操做系统文件描述符限制
配置方法    版本:8.x 9.x 10.x版本
配置操做:
以管理员身份登陆管理控制台
1、点击域名下的Servers文件夹,选择要管理的服务器
2、在右侧面板 Protocols 面板下,点击HTTP标签
3、检查是否勾选Send Server header
检查方法    参照配置方法禁止勾选 Send Server header 
备注    
2.4.3更改默认运行端口
项目名称    更改默认运行端口(建议项)
基线编号    Tophant-WebLogic-10
基线项说明    更改WebLogic服务器默认端口
配置方法    版本:8.x 9.x 10.x版本
配置操做:
查看WebLogic安装目录下的weblogic.properties配置文件,
检查weblogic.system.listenPort=integer(端口号)这一项是否符合要求。
检查方法    检查weblogic.system.listenPort= 参数值是否符合要求(自定义端口号,非默认)
备注    根据应用场景的不一样,如部署场景需开启此功能,则强制要求此项。可能会影响系统。
2.4.4配置加密协议
基线名称    配置加密协议(建议项)
基线编号    Tophant-WebLogic-11
基线项说明    对于经过HTTP协议进行远程维护的设备,设备应支持使用HTTPS等加密协议。
配置方法    版本:8.x 9.x 10.x版本
参考配置操做
查看WebLogic安装目录下的weblogic.properties配置文件,请参考下列参数和参数值的配置是否符合要求:
weblogic.system.SSLListenPort=portNumber
weblogic.security.certificate.server=mycert.der
weblogic.security.key.server=mykey.der
weblogic.security.certificate.authority=CA.der
weblogic.security.certificateCacheSize=5
weblogic.security.clientRootCA=anyValidCertificate
weblogic.httpd.register.authenticated=\
weblogic.t3.srvr.ClientAuthenticationServlet
weblogic.httpd.register.T3AdminCaptureRootCA=admin.T3AdminCaptureRootCA 
SSL Enabled="true"

数据库安全加固 - MongoDBlinux

1.概述
1.1适用范围
本配置基线适用于MongoDB 3.0或3.2版本,主要涉及MongoDB数据库安全配置方面的基本要求,用于指导安全例行工做、新系统入网安全检查等场合。
1.2规范依据
根据目前MongoDB数据库安全现状,结合相关规范性文件指引,制定适合的基线配置规范。
规范性引用文件:
GB/T28448-2012《信息安全技术信息系统安全等级保护测评要求》
GB/T28453-2012《信息安全技术信息系统安全管理评估要求》
GB/T25063-2010《信息安全技术服务器安全测评要求》
GB/Z24364-2009《信息安全技术信息安全风险管理指南》
GB/T22239-2008《信息安全技术信息系统安全等级保护基本要求》
GB/T20270-2006《信息安全技术网络基础安全技术要求》
GB/T20271-2006《信息安全技术信息系统通用安全技术要求》
GB/T20269-2006《信息安全技术信息系统安全管理要求》
YD/T2701-2014《电信网和互联网安全防御基线配置要求及检测要求》




2.安全配置基线标准
2.1安装配置
2.1.1安装MongoDB
基线名称    安装MongoDB
基线编号    Tophant-MongoDB-1
基线说明    MongoDB安装版本以及补丁级别应该是最新的。
配置方法    1.备份数据。
2.从MongoDB下载页面下载最新MongoDB修订版的二进制文件,并将二进制文件存储在临时位置。
3.关闭MongoDB实例。
4.用下载的二进制文件替换现有的MongoDB二进制文件。
5.从新启动MongoDB实例。
检查方法    在MongoDB shell中运行以下命令:
> db.version()
备注    使用最新的MongoDB软件版本以及适用的补丁能够减小软件中存在漏洞的可能性。

2.2认证
2.2.1启用身份验证
基线名称    启用身份验证
基线编号    Tophant-MongoDB-2
基线说明    启用身份验证,使所用客户端对MongoDB数据库的访问都须要身份验证。
配置方法    使用命令:mongod --auth --config /etc/mongod.conf
检查方法    使用命令:cat /etc/mongod.conf | grep “Auth=”
备注    未能对客户机、用户和/或服务器进行身份验证可能会致使对mongodb数据库的未受权访问。

2.2.2禁用localhost exception
基线名称    禁用localhost exception
基线编号    Tophant-MongoDB-3
基线说明    Localhost exception容许在建立系统中的第一个用户以前启用受权。
配置方法    使用配置文件中的setParameter选项将其设置为false:
setParameter:
enableLocalhostAuthBypass: false
检查方法    使用命令:cat /etc/mongod.conf | grep  “enableLocalhostAuthBypass”
备注    禁用此异常将阻止对MongoDB数据库的未经受权的本地访问。它还将确保每一个数据库活动对特定用户的可追溯性。

2.2.3使用行业标准认证机制
基线名称    使用行业标准认证机制
基线编号    Tophant-MongoDB-4
基线说明    使用一个或多个行业标准身份验证机制能够帮助组织为其mongodb用户强制执行他们的账户和密码策略。
配置方法    在MongoDB配置文件中指定身份验证机制:
security:
clusterAuthMode: x509
net:
ssl:
mode: requireSSL
PEMKeyFile: <path to TLS/SSL certificate and key PEM file>
CAFile: <path to root CA PEM file>
检查方法    使用以下命令:
cat /etc/mongod.conf | grep “clusterAuthMode:”
cat /etc/mongod.conf | grep “mode:”
cat /etc/mongod.conf | grep “authorization:"
cat /etc/mongod.conf | grep “authenticationMechanisms:”
备注    若是没有合适的行业标准身份验证机制,账户和密码管理将更加繁琐,而且身份验证可能与定义的策略不一致。

2.3访问控制
2.3.1配置基于角色的访问控制
基线名称    配置基于角色的访问控制
基线编号    Tophant-MongoDB-5
基线说明    基于角色的访问控制(RBAC)是一种基于企业内各个用户的角色来管理对资源的访问的方法。为用户授予一个或多个角色,以肯定用户对数据库资源和操做的访问权限。在角色分配以外,用户无权访问系统。
配置方法    1. 为mongodb创建角色。
2. 为每一个角色分配适当的特权。
3.为每一个角色分配适当的用户。
4. 删除分配给用户的任何特权,这些特权如今由角色来处理。
5. 有关更多信息,请参阅下面的参考资料。
连接:http://docs.mongodb.org/manual/tutorial/manage-users-and-roles/
检查方法    使用以下命令:
mongo --port 27017 -u <siteUserAdmin> -p <password> --authenticationDatabase <database
name>
> db.getUser()
> db.getRole()
备注    MongoDB能够使用RBAC来管理对MongoDB系统的访问。MongoDB默认状况下不启用受权。

2.3.2配置监听的网络接口
基线名称    配置监听的网络接口
基线编号    Tophant-MongoDB-6
基线说明    要确保mongodb在受信任的网络环境中运行,须要限制mongodb实例监听在受权的网络接口中。
配置方法    编辑MongoDB的配置文件,使其只容许受信任的网络链接,请参阅下面的参考资料:
http://docs.mongodb.org/manual/tutorial/configure-linux-iptables-firewall/
http://docs.mongodb.org/manual/tutorial/configure-windows-netsh-firewall/
检查方法    使用命令:cat /etc/mongod.conf |grep –A12 “net” | grep “bindIp“
备注    此配置阻止来自不受信任网络的链接,只容许受权和受信任网络上的系统尝试链接到MongoDB。若是未配置,则可能致使从不受信任的网络到MongoDB的未受权链接。

2.3.3使用非特权账户运行MongoDB
基线名称    使用非特权帐户运行MongoDB
基线编号    Tophant-MongoDB-7
基线说明    不该使用特权账户(如“root”)运行MongoDB服务,由于这会致使没必要要的操做使用操做系统暴露在高风险中。
配置方法    1.建立用于执行MongoDB数据库的专用用户。
2.将数据库数据文件,密钥文件和SSL私钥文件设置为只能由mongod / mongos用户读取。
3.将日志文件设置为只能由mongod / mongos用户写入,而且只能由root读取。
检查方法    使用命令:ps -ef | grep -E "mongos|mongod"
备注    使用非特权专用服务账户运行MongoDB能够增长系统安全性。

2.3.4配置帐户权限
基线名称    配置帐户权限
基线编号    Tophant-MongoDB-8
基线说明    按期查看全部帐户并从必要帐户中删除不须要的帐户以及不须要的权限有助于最大限度地减小每一个用户拥有的权限。
配置方法    查看MongoDB的配置文件,是否有以下定义:
{
revokePrivilegesFromRole: "<role>",
privileges:
[
{ resource: { <resource> }, actions: [ "<action>", ... ] },
...
],
}
检查方法    执行如下命令以查看运行该命令的数据库上的全部帐户,包括内置帐户和用户定义帐户,以及每一个帐户授予的权限。 确保仅列出必需的帐户,而且仅为每一个帐户列出必要的权限。
db.runCommand(
{
rolesInfo: 1,
showPrivileges: true
showBuiltinRoles: true
}
)
备注    随着时间的推移,可能再也不须要某些帐户,而且某些帐户可能会授予再也不须要的权限。

2.3.5查看用户定义的帐户
基线名称    查看用户定义的帐户
基线编号    Tophant-MongoDB-9
基线说明    按期检查全部帐户,保证用户权限的最小化。
配置方法    使用命令:use <dbName>
db.revokeRolesFromUser( "<username>", [ <roles> ])
检查方法    使用命令:db.runCommand( { rolesInfo: "<rolename>" } )
备注    拥有过多权限的用户会给组织带来没必要要的风险。

2.4数据加密
2.4.1启用TLS或SSL加密
基线名称    启用TLS或SSL加密
基线编号    Tophant-MongoDB-10
基线说明    使用tls或ssl来保护全部链接。包括使用tls或ssl对MongoDB客户机的mongod和mongos组件之间以及全部应用程序和MongoDB之间的通讯进行加密。 
配置方法    配置mongodb服务器,要求使用ssl或tls加密全部mongodb网络通讯。
检查方法    使用命令:cat /etc/mongos.conf | grep –A20 ‘net’ | grep –A10 ‘ssl’ | grep ‘mode’
备注    能够防止嗅探mongodb组件之间的明文通讯,或者对mongodb执行中间人攻击。
2.4.2启用FIPS
基线名称    启用FIPS
基线编号    Tophant-MongoDB-11
基线说明    FIPS是一种计算机安全标准,用于认证安全加密和解密数据的软件模块和库。
配置方法    1.编辑MongoDB配置文件,添加以下指令:
net:
ssl:
  FIPSMode: true
2.使用配置文件启动mongos实例:
mongod --config /etc/mongod.conf
检查方法    使用以下命令:
mongos --config /etc/mongos.conf
net:
ssl:
FIPSMode: true
备注    FIPS是行业标准,规定如何在传输过程当中加密数据。

2.5审计
2.5.1启用系统日志审计功能
基线名称    启用系统日志审计功能
基线编号    Tophant-MongoDB-12
基线说明    MongoDB Enterprise包括一个系统审计工具,能够在MongoDB实例上记录系统事件(例如用户操做,链接事件)。这些审计记录容许取证分析,并容许管理员验证适当的控制。
配置方法    使用以下命令:
mongod --dbpath data/db --auditDestination syslog
mongod --dbpath data/db --auditDestination console
mongod --dbpath data/db --auditDestination file --auditFormat JSON --
auditPath data/db/auditLog.json
mongod --dbpath data/db --auditDestination file --auditFormat BSON --
auditPath data/db/auditLog.bson
检查方法    使用命令:cat /etc/mongod.conf |grep –A4 “auditLog” | grep “destination”
备注    在解决操做问题或处理安全事件时,系统级日志很是方便。

2.5.2配置审计过滤器
基线名称    配置审计过滤器
基线编号    Tophant-MongoDB-13
基线说明    mongodb enterprise支持审计各类操做。启用审计功能后,默认状况下,审计功能将在审计事件操做、详细信息和结果中详细记录全部可审计的操做。使用auditFiltet,指定要记录哪些事件。此功能仅适用于企业版本。
配置方法    根据实际需求设置auditfilters,可参阅如下资料:
https://docs.mongodb.com/manual/reference/audit-message/
https://docs.mongodb.com/manual/tutorial/configure-audit-filters/
检查方法    使用命令:cat /etc/mongod.conf |grep –A10 “auditLog” | grep “filter”
备注    全部在数据库上执行的操做都被记录下来。这有助于回溯和跟踪发生的任何事件。

2.6操做系统加固
2.6.1禁用HTTP状态页面
基线名称    禁用HTTP状态页面
基线编号    Tophant-MongoDB-14
基线说明    默认状况下,mongodb提供一个运行在端口28017上的http接口来提供“home”状态页。此页面提供关于数据库统计信息和客户机的某些关键信息。
配置方法    经过在/etc/mongod.conf文件中设置nohttpinterface = True来禁用http状态接口。
检查方法    使用命令:cat /etc/mongod.conf |grep “nohttpinterface”
备注    攻击者能够访问状态页面来了解更多关于mongodb服务器的信息,并肯定如何对其进行攻击。

2.6.2修改默认端口
基线名称    修改默认端口
基线编号    Tophant-MongoDB-15
基线说明    更改MongoDB使用的端口使攻击者更难找到数据库并将其做为目标。
配置方法    将MongoDB服务器的端口更改成27017之外的数字。
检查方法    使用命令:cat /etc/mongod.conf |grep “port”
备注    使用默认端口,攻击者可以经过端口验证服务器上正在运行的应用程序。

2.6.3禁用服务器端脚本
基线名称    禁用服务器端脚本
基线编号    Tophant-MongoDB-16
基线说明    MongoDB支持为某些服务器端操做执行JavaScript代码:mapReduce,group和$where。 若是不使用这些操做,则应禁用服务器端脚本。
配置方法    若是不须要服务器端脚本,请在命令行上使用--noscripting选项将其禁用。
检查方法    使用命令:cat /etc/mongod.conf |grep –A10 “security” | grep “javascriptEnabled”
备注    若是不须要服务器端脚本而且未禁用,可能会带来没必要要的风险。

2.6.4禁用HTTP接口
基线名称    禁用HTTP接口
基线编号    Tophant-MongoDB-17
基线说明    net.http.enabled参数用于启用或禁用HTTP接口。
配置方法    将参数值设置为false以禁用http接口。参阅如下资料:
https://docs.mongodb.com/manual/core/security-mongodb-configuration/#httpstatus-interface
检查方法    使用命令:cat /etc/mongod.conf |grep –A12 “net” | grep –A10 “http” | grep “enabled”
备注    运行没必要要的服务会增长攻击者经过未知的漏洞侵入系统的可能性。

2.6.5禁用经过HTTP接口的JSONP访问
基线名称    禁用经过HTTP接口的JSONP访问
基线编号    Tophant-MongoDB-18
基线说明    net.http.JSONPEnabled参数用于经过HTTP接口启用或禁用JSONP访问。
配置方法    将参数值设置为false以禁用JSONP访问。参阅如下资料:
https://docs.mongodb.com/manual/reference/configurationoptions/#net.http.JSONPEnabled
检查方法    cat /etc/mongod.conf |grep –A12 “net” | grep –A10 “http” | grep “JSONPEnabled”
备注    运行没必要要的服务会增长攻击者经过未知漏洞入侵系统可能性。

2.6.6禁用REST API
基线名称    禁用REST API
基线编号    Tophant-MongoDB-19
基线说明    net.http.RESTInterfaceEnabled参数用于启用或禁用REST API。
配置方法    将参数值设置为false以禁用rest api。参阅如下资料:
https://docs.mongodb.com/manual/reference/configurationoptions/#net.http.RESTInterfaceEnabled
检查方法    使用命令:cat /etc/mongod.conf |grep –A12 “net” | grep –A10 “http” | grep “RESTInterfaceEnabled”
备注    运行没必要要的服务会增长攻击者经过未知漏洞入侵系统可能性。

2.7文件权限
2.7.1设置密钥文件权限
基线名称    设置秘钥文件权限
基线编号    Tophant-MongoDB-20
基线说明    密钥文件用于分布式集群中的身份验证。 在密钥文件上设置适当的文件权限将防止未经受权的访问。
配置方法    使用以下命令:
chmod 600 /keyfile
sudo chown mongodb:mongodb /keyfile
检查方法    使用命令:cat /etc/mongod.conf | grep “keyFile=”
备注    保护密钥文件可增强分布式集群中的身份验证,并防止对MongoDB数据库进行未经受权的访问。

2.7.2设置数据库文件权限
基线名称    设置数据库文件权限
基线编号    Tophant-MongoDB-21
基线说明    MongoDB数据库文件须要使用文件权限进行保护。
配置方法    使用以下命令:
chmod 660 /var/lib/mongodb
sudo chown mongodb:mongodb /var/lib/mongodb
检查方法    使用命令:cat /etc/mongod.conf |grep “dbpath”
备注    设置数据库文件权限能够限制未经受权的用户访问数据库。

数据库安全加固 - MSSQLserverios

1.概述
1.1适用范围
本配置基线适用于国家开发银行的MS_SQLServer数据库,主要涉及MS_SQLServer数据库安全配置方面的基本要求,用于指导安全例行工做、新系统入网安全检查等场合。
在未特别说明的状况下,均适用于全部运行的MS_SQLServer数据库。
1.2规范依据
根据目前MS_SQLServer数据库的安全现状,结合相关规范性文件指引,制定适合的基线配置规范。
规范性引用文件:
GB/T 28448-2012 《信息安全技术 信息系统安全等级保护测评要求》
GB/T 28453-2012 《信息安全技术 信息系统安全管理评估要求》
GB/T 25063-2010 《信息安全技术 服务器安全测评要求》
GB/Z 24364-2009 《信息安全技术 信息安全风险管理指南》
GB/T 22239-2008 《信息安全技术 信息系统安全等级保护基本要求》
GB/T 20270-2006 《信息安全技术 网络基础安全技术要求》
GB/T 20271-2006 《信息安全技术 信息系统通用安全技术要求》
GB/T 20269-2006 《信息安全技术 信息系统安全管理要求》
YD/T 2701-2014  《电信网和互联网安全防御基线配置要求及检测要求_数据库》
1.3实施策略
结合网络和信息系统建设状况,考虑安全配置项影响的范围,结合以往工做经验,提出以下安全项目实施策略:
基础项:实施安全基线可以明显提高安全水平,实施风险小,可操做性强。
建议项:实施安全基线可以提高必定安全水平,具备必定风险,可操做性较强。
序号    配置类别    基线名称    实施策略
1    身份鉴别    删除没必要要帐户    基础项
2    身份鉴别    设置密码并保证复杂度    基础项
3    身份鉴别    禁用共享帐户    基础项
4    身份鉴别    设置认证失败锁定策略    基础项
5    访问控制    配置数据库启动帐户安全    基础项
6    访问控制    设置用户权限最小化    基础项
7    访问控制    限制数据库验证方式    基础项
8    访问控制    限制登陆IP    建议项
9    安全审计    配置数据库审计    建议项
10    其它要求项    配置安装最小化    基础项
11    其它要求项    设置通信传输加密    建议项
12    其它要求项    更新数据库补丁    建议项


2.安全配置基线标准
2.1身份鉴别
2.1.1删除没必要要帐户
基线名称    删除没必要要帐户(基础项)
基线编号    Tophant-MS_SQLServer-1
基线说明        应删除或锁定与数据库运行、维护等工做无关的帐户。
配置方法    开始-〉全部程序-〉Microsoft SQL Server 2005-〉SQL Server Mangement Studio-〉(链接、登陆数据库;若没自动弹出登陆对话框则选择窗口左上角文件菜单,选择链接对象资源管理器)-〉安全性-〉登陆名,而后删除无关帐户;
SQL SERVER企业管理器-〉数据库-〉对应数据库-〉用户中删除无关帐户;


最后和管理员(数据库、应用管理员)沟通确认哪些为无关删号。
无关帐户:guest、test、share_dba12三、default。
检查方法    可参考配置方法中(操做步骤)的截图,和管理员(数据库、应用管理员)沟通确认无关删号是否存在。
备注    须要手工判断,实际状况应与具体需求为准,谨慎操做。
2.1.2禁用共享帐户
基线名称    禁用共享帐户(基础项)
基线编号    Tophant-MS_SQLServer-2
基线说明        数据库应按照用户分配帐户,避免不一样用户间共享帐户。
共享帐户带来管理和操做记录没法对应到各个用户使用者,以形成审计和记录不便,存在安全风险。
配置方法    创建角色,并给角色受权,把角色赋给不一样的用户或修改用户属性中的角色和权限。禁用操做系统帐户登陆数据库,禁止单数据库用户被赋予多项权限、被多人共享使用。
禁用的共享帐户:administrator、guest。
参考操做见下图:

检查方法    在查询分析器中用user_name_1/password1链接数据库成功。
此项检查能够采起问询的方式,而后登陆到数据库用户界面后进行查证。
备注    user_name_1和user_name_1是两个不一样的账号名称,可根据不一样用户,取不一样的名称。
2.1.3禁止共享帐户
基线名称    禁用共享帐户(基础项)
基线编号    Tophant-MS_SQLServer-3
基线说明      数据库应按照用户分配帐户,避免不一样用户间共享帐户。
共享帐户带来管理和操做记录没法对应到各个用户使用者,以形成审计和记录不便,存在安全风险。
配置方法    创建角色,并给角色受权,把角色赋给不一样的用户或修改用户属性中的角色和权限。禁用操做系统帐户登陆数据库,禁止单数据库用户被赋予多项权限、被多人共享使用。
禁用的共享帐户:administrator、guest。
参考操做见下图:

检查方法    在查询分析器中用user_name_1/password1链接数据库成功。
此项检查能够采起问询的方式,而后登陆到数据库用户界面后进行查证。
备注    user_name_1和user_name_1是两个不一样的账号名称,可根据不一样用户,取不一样的名称。

2.1.4设置认证失败锁定策略
基线名称    设置认证失败锁定策略(基础项)
基线编号    Tophant-MS_SQLServer-4
基线说明        采用静态口令认证技术的数据库,应配置强制实施密码策略。
配置方法    登陆企业管理器,展开“安全性”-〉“登陆名”条目,双击帐户(例如:sa),确保勾选“强制实施密码策略”

检查方法    查看帐户锁定策略设置是否符合要求。参照配置方法截图检查是否勾选了“强制实施密码策略”选项。
备注    根据应用场景的不一样,如部署场景需开启此功能,则强制要求此项。对核心库、生产用户不能设置此基线。误操做或恶意超过10次,致使用户锁定,有必定风险,可能会致使应用异常。
2.1.5SQLServer用户口令安全
基线名称    数据库管理系统SQLServer用户口令安全基线要求项
基线编号    Tophant-MS_SQLServer-5
基线说明        对用户的书香进行安全检查,包括空密码、密码更新时间等。修改目前全部的帐号的口令,确认为强口令。特别是sa帐号,口令长度至少为8位,并包括数字、小写字母、大写字母、和特殊字符四类中至少两类。而且五次内部的设置相同的口令。密码应至少每90天进行更换。
配置方法    Password字段不为null
检查方法    1.检查password字段是否为null
2.参考配置操做
查看用户状态运行查询分析器,执行
Select *from sysusers
Select name,Password form sysloins where password is null order by name
#查看口令为空的用户

备注    


2.2访问控制
2.2.1配置数据库启动帐户安全
基线名称    数据库启动帐户安全(基础项)
基线编号    Tophant-MS_SQLServer-5
基线说明        使用普通帐户启动SQLServer服务,防范攻击者获取系统帐户或管理员权限。
配置方法    新建SQL Server服务帐户,将该帐户从User组中删除,且不要把该帐户提高为Administrators组的成员,以所需最小权限启动 SQL Server服务:

在属性界面中选择新建的普通帐户启动服务。
检查方法    以SQL SERVER2005为例,经过“SQL Server configuration manager”查看,以下所示,SQL Server服务的登陆身份为Local System:

检查结果如上图所示则知足该检查项。
备注    

2.2.2设置用户权限最小化
基线名称    设置用户权限最小化(基础项)
基线编号    Tophant-MS_SQLServer-6
基线说明        应根据实际业务须要,配置用户的最小权限。
配置方法    更改数据库属性,取消业务数据库帐户不须要的服务器角色,例如:dbcreator、diskadmin。
更改数据库属性,取消业务数据库帐户不须要的“数据库访问许可”和“数据库角色中容许”中不须要的角色。


2.2.3限制数据库验证方式
基线名称    设置数据库验证方式(基础项)
基线编号    Tophant-MS_SQLServer-7
基线说明        使用SQL Server和windows身份验证模式登陆数据库。
配置办法    打开SQL Server企业管理器,点击数据库属性页面的“安全性”选项卡,选择“SQL Server和windows身份验证模式”,而后点击“肯定”完成配置。
配置步骤参考下图:

检查方法    打开SQL Server企业管理器,点击数据库属性页面的“安全性”选项卡,查看身份验证方式是否为“SQL Server和windows身份验证模式”,如果则知足此项要求。
备注    

2.2.4限制登录IP地址
基线名称    限制登陆IP地址(建议项)
基线编号    Tophant-MS_SQLServer-8
基线说明        经过数据库所在操做系统或防火墙限制,只有信任的IP 地址才能经过监听器访问数据库。
配置方法    在防火墙中作限制,只容许与指定的 IP 地址创建1433 的通信。
若从更为安全的角度来考虑,应该把1433 端口改为其余的端口。
1. 在“Windows 防火墙”对话框中,单击“例外”选项卡。
2. 单击“添加端口”。
3. 键入您要容许的端口名称,键入端口号,而后单击“TCP”或“UDP”
以提示这是 TCP 仍是 UDP 端口。
4. 单击“更改范围”。
5. 指定要为其阻止此端口的一系列计算机(IP),而后单击“肯定”。




2.3安全审计
2.3.1配置数据库审计
基线名称    配置数据库审计(建议项)
基线编号    Tophant-MS_SQLServer-9
基线说明        根据业务要求制定数据库审计策略。
对用户登陆进行记录,记录内容包括用户登陆使用的账号、登陆是否成功、登陆时间以及远程登陆时用户使用的IP地址;
用户对数据库的操做,包括但不限于如下内容:账号建立、删除和权限修改、口令修改、读取和修改数据库配置、读取和修改业务用户的话费数据、身份数据、涉及通讯隐私数据。记录须要包含用户账号,操做时间,操做内容以及操做结果;
记录对与数据库相关的安全事件。
配置方法    (1)打开“Microsoft SQL Server Management Studio”;
(2)右键点击服务器(名),在右键菜单中点击“属性”;
(3)点击选择页下的“安全性”,更改审核设置,将登陆审核设置为“失败和成功的登陆”,勾选“启用C2审核跟踪”前的复选框。

检查方法    打开“Microsoft SQL Server Management Studio”,右键点击服务器,在右键菜单中点击“属性”,点击选择页下的“安全性”,查看审核设置。
备注    数据库审计策略开启后,有可能致使磁盘I/O较高,请根据实际要求、性能开启。
2.4其余安全项
2.4.1配置安装最小化
基线名称    配置安装最小化(基础项)
基线编号    Tophant-MS_SQLServer-10
基线说明        停用没必要要的存储过程
配置方法    禁用xp_cmdshell扩展存储过程,命令:
DROP PROCEDURE sp_makewebtask;          //首先执行的命令
exec master..sp_dropextendedproc xp_cmdshell   //禁用xp_cmdshell
依据以上操做,禁用如下不须要的扩展存储过程:
Sp_OACreate 
Sp_OADestroy 
Sp_OAGetErrorInfo 
Sp_OAGetProperty 
Sp_OAMethod 
Sp_OASetProperty 
Sp_OAStop 
Xp_regaddmultistring 
Xp_regdeletekey 
Xp_regdeletevalue 
Xp_regenumvalues 
Xp_regremovemultistring 
xp_sdidebug 
xp_availablemedia 
xp_cmdshell 
xp_deletemail 
xp_dirtree 
xp_dropwebtask 
xp_dsninfo 
xp_enumdsn 
xp_enumerrorlogs 
xp_enumgroups 
xp_enumqueuedtasks 
xp_eventlog 
xp_findnextmsg 
xp_fixeddrives 
xp_getfiledetails 
xp_getnetname 
xp_grantlogin 
xp_logevent 
xp_loginconfig 
xp_logininfo 
xp_makewebtask 
xp_msver xp_perfend 
xp_perfmonitor 
xp_perfsample 
xp_perfstart 
xp_readerrorlog 
xp_readmail 
xp_revokelogin 
xp_runwebtask 
xp_schedulersignal 
xp_sendmail 
xp_servicecontrol 
xp_snmp_getstate 
xp_snmp_raisetrap 
xp_sprintf 
xp_sqlinventory 
xp_sqlregister 
xp_sqltrace 
xp_sscanf 
xp_startmail 
xp_stopmail 
xp_subdirs 
xp_unc_to_drive 
xp_dirtree
最后执行以下语句:
DROP PROCEDURE sp_addextendedproc ;    //必定要最后执行
可参考以下截图:

检查方法    以sa身份登陆查询分析器,执行如下命令:
exec master..xp_cmdShell 'dir c:\'
输出结果应已禁用xp_cmdshell,以下所示:

若是未禁用xp_cmdshell则会返回dir c:\的执行结果。
备注    实际状况请以具体需求为准。
2.4.2设置通信传输加密
基线名称    通信传输加密(建议项)
基线编号    Tophant-MS_SQLServer-11
基线说明        使用通信协议加密。
配置方法    SQL Server 2000:启动服务器网络配置工具,在“常规”中选择“强制协议加密”;

SQL Server 2005:启动SQL Server 2005 Configuration Manager,打开SQL Server 2005网络配置,右键MSSSQLSERVER的协议,查看属性,在标志栏里面将FourceEncryption设置为是;

更改通信协议加密后须要从新启动SQL Server数据库。
检查方法    启动服务器网络配置工具,在“常规”中查看是否选择“强制协议加密”,如果则知足配置项要求,反之则不知足。
备注    根据应用场景的不一样,如部署场景需开启此功能,则强制要求此项。
2.4.3更新数据库补丁
基线名称    更新数据库补丁(建议项)
基线编号    Tophant-MS_SQLServer-12
基线说明        因为不按期厂商会对存在的漏洞发布补丁进行修复,须要及时关注厂商发布漏洞补丁状况来进行修复和升级操做。
配置方法    配置操做:
检查当前全部已安装的数据库产品的版本信息,运行SQL查询分析器,执行:
select @@version
安装补丁详细操做请参照其中的readme文件。
检查方法    根据返回结果判断,是否须要安装补丁。
返回结果说明举例:
2005.90.1399  -——————SQL Server 2005 RTM
2005.90.2047  -——————SQL Server 2005 Service Pack 1
2005.90.3042  -——————SQL Server 2005 Service Pack 2
备注    从官方网址下载升级包,根据实际需求安装

数据库安全加固 - MySQLnginx

1.概述
1.1适用范围
本配置基线适用于MySQL 5.7,主要涉及MySQL数据库安全配置方面的基本要求,用于指导安全例行工做、新系统入网安全检查等场合。
1.2规范依据
根据目前MySQL数据库安全现状,结合相关规范性文件指引,制定适合的基线配置规范。
规范性引用文件:
GB/T28448-2012《信息安全技术信息系统安全等级保护测评要求》
GB/T28453-2012《信息安全技术信息系统安全管理评估要求》
GB/T25063-2010《信息安全技术服务器安全测评要求》
GB/Z24364-2009《信息安全技术信息安全风险管理指南》
GB/T22239-2008《信息安全技术信息系统安全等级保护基本要求》
GB/T20270-2006《信息安全技术网络基础安全技术要求》
GB/T20271-2006《信息安全技术信息系统通用安全技术要求》
GB/T20269-2006《信息安全技术信息系统安全管理要求》
YD/T2701-2014《电信网和互联网安全防御基线配置要求及检测要求》




2.安全配置基线标准
2.1操做系统级配置
2.1.1配置数据库放在非系统分区上
基线名称    配置数据库放在非系统分区上
基线编号    Tophant-MySQL-1
基线说明    一般主机操做系统应包括用于不一样目的的不一样文件系统分区,其中系统分区用于存放主机系统,非系统分区用于存储数据。
配置方法    1.为MySQL数据选择非系统分区新位置
2.使用以下命令中止mysqld:service mysql stop
3.使用如下命令复制数据:cp -rp <datadir Value> <new location>
4.将datadir位置设置为MySQL配置文件中的新位置
5.使用以下命令启动mysqld:service mysql start
检查方法    使用命令:df -h <datadir Value>,命令返回的输出不该该包括root('/')、"/var""/usr"。
备注    将数据库移出系统分区,能够下降操做系统的可用磁盘被耗尽的风险。
2.1.2使用专用最小特权用户运行MySQL守护程序
基线名称    使用专用最小特权用户运行MySQL守护程序
基线编号    Tophant-MySQL-2
基线说明    与主机上安装的任何服务同样,能够为其提供本身的用户上下文。 为服务提供专用用户能够在较大主机环境中精确约束服务的权限。
配置方法    建立一个只用于运行mysql和直接相关进程的用户。此用户必须没有系统的管理权限。参阅如下资料:
http://dev.mysql.com/doc/refman/5.7/en/changing-mysql-user.html
http://dev.mysql.com/doc/refman/5.7/en/serveroptions.html#option_mysqld_user
检查方法    使用命令:ps -ef | egrep "^mysql.*$"
备注    使用最小特权账户来执行mysql,能够减小mysql固有漏洞的影响。受限账户将没法访问与mysql无关的资源,好比操做系统配置。
2.1.3禁用MySQL命令历史记录
基线名称    禁用MySQL命令历史记录
基线编号    Tophant-MySQL-3
基线说明    在linux /UNIX上,mysql客户机将交互式执行的语句记录到一个历史文件中。默认状况下,该文件在用户的主目录中名为.mysql_history。大多数在mysql客户机应用程序中运行的交互式命令都保存到历史文件中。应该禁用mysql命令历史记录。
配置方法    1. 若是存在.mysql_history,则删除它。
2. 使用下面两种方法来防止它再次被建立:
a.将mysql_histfile环境变量设置为/dev/null.这将须要放在shell的启动脚本中。
 b.建立$HOME/mysql_history做为/dev/null的连接。
   ln -s /dev/null $HOME/.mysql_history
检查方法    使用命令:find /home -name ".mysql_history"
备注    禁用mysql命令历史记录能够下降暴露敏感信息(如密码和加密密钥)的几率。
2.1.4禁用“MYSQL_PWD”环境变量
基线名称    禁用“MYSQL_PWD”环境变量
基线编号    Tophant-MySQL-4
基线说明    MySQL能够从名为MYSQL_PWD的环境变量中读取默认数据库密码。
配置方法    检查哪些用户或脚本正在设置MYSQL_PWD并将其更改成使用更安全的方法。参阅如下资料:
http://dev.mysql.com/doc/refman/5.7/en/environment-variables.html
https://blogs.oracle.com/myoraclediary/entry/how_to_check_environment_variabl
es
检查方法    使用命令:grep MYSQL_PWD /proc/*/environ
备注    使用MYSQL_PWD环境变量意味着MySQL凭据的明文存储。
2.1.5禁用交互式登陆
基线名称    禁用交互式登陆
基线编号    Tophant-MySQL-5
基线说明    mysql用户能够交互访问操做系统,这意味着mysql用户能够像其余用户同样登陆到主机。
配置方法    使用命令:usermod -s /bin/false
检查方法    使用命令:getent passwd mysql | egrep "^.*[\/bin\/false|\/sbin\/nologin]$"
备注    mysql用户的交互访问是没必要要的,应该禁用。 
2.1.6禁用“MYSQL_PWD”
基线名称    禁用“MYSQL_PWD”
基线编号    Tophant-MySQL-6
基线说明    MySQL能够从名为MYSQL_PWD的环境变量中读取默认数据库密码。
配置方法    检查哪些用户或脚本正在设置MYSQL_PWD并将其更改成使用更安全的方法。
检查方法    使用命令:grep MYSQL_PWD /home/*/.{bashrc,profile,bash_profile}
备注    使用MYSQL_PWD环境变量意味着MySQL凭据的明文存储。建议禁用。 
2.2安装和规划
2.2.1备份和灾难恢复
2.2.1.1配置备份策略
基线名称    配置备份策略
基线编号    Tophant-MySQL-7
基线说明    应该有一个适当的备份策略。
配置方法    根据实际状况建立备份策略和备份计划。
检查方法    使用命令:crontab -l
备注    备份mysql数据库,有助于确保在发生事件时数据的可用性。 
2.2.1.2验证备份
基线名称    验证备份
基线编号    Tophant-MySQL-8
基线说明    备份应该按期进行验证
配置方法    执行按期的备份检查并记录。
检查方法    检查备份验证测试报告。
备注    验证备份是否正确地发生将有助于确保在发生事件时数据的可用性。 
2.2.1.3安全备份证书
基线名称    安全备份证书
基线编号    Tophant-MySQL-9
基线说明    密码、证书和任何其余凭证都应该受到保护。
配置方法    适当更改文件权限。
检查方法    检查包含密码或ssl密钥的文件的权限。
备注    备份须要特权帐户。 
2.2.1.4保护备份文件
基线名称    保护备份文件
基线编号    Tophant-MySQL-10
基线说明    备份文件将包含数据库中的全部数据。应使用文件系统权限或加密来防止非受权用户得到对备份的访问权限。
配置方法    实施加密或使用文件系统权限来保护备份文件。
检查方法    检查备份文件的权限。
备注    备份应被视为敏感信息。
2.2.1.5启用“binlogs”
基线名称    启用“binlogs”
基线编号    Tophant-MySQL-11
基线说明    用binlogs能够实现根据时间点来恢复文件。
配置方法    启用binlog并建立和测试恢复过程。
检查方法    检查是否启用了binlog,是否有一个恢复过程。
备注    能够减小数据丢失的风险。
2.2.1.6建立灾备计划
基线名称    建立灾备计划
基线编号    Tophant-MySQL-12
基线说明    能够使用不一样数据中心中的从服务器进行异地备份。
配置方法    应建立灾备计划,保证数据的安全性。
检查方法    检查是否有灾难恢复计划。
备注    能够减小数据丢失的风险。
2.2.1.7备份配置以及相关文件
基线名称    备份配置以及相关文件
基线编号    Tophant-MySQL-13
基线说明    备份时应包含如下文件:
•配置文件(my.cnf和包含的文件)
•SSL文件(证书,密钥)
•用户定义函数(UDF)
•自定义的源代码
配置方法    应将这些文件添加到备份中。
检查方法    检查这些文件是否已被使用并保存在备份中。
备注    须要这些文件才能彻底恢复实例。
2.2.2使用专用服务器运行MySQL
基线名称    使用专用的服务器运行MySQL
基线编号    Tophant-MySQL-14
基线说明    建议将MySQL Server软件安装在专用服务器上,将其放置在单独的区域上,只容许从特定主机和特定协议进行访问。
配置方法    删除多余的应用程序或服务,同时从底层操做系统中删除没必要要的角色。
检查方法    确认没有为底层操做系统启用其余角色,而且没有安装与MySQL服务器软件正常运行无关的其余应用程序或服务。
备注    将MySQL运行在独立的服务器上,减小了攻击面。 较小的攻击面会下降MySQL中数据被泄露的可能性。
2.2.3禁止在命令行中指定密码
基线名称    禁止在命令行中指定密码
基线编号    Tophant-MySQL-15
基线说明    当命令在命令行上执行时,例如mysql -u admin –p password,该密码可能在用户的shell和命令历史记录或进程列表中可见。
配置方法    在没有密码的状况下使用-p,而后在提示时输入密码,使用适当安全的.my.cnf文件,或者在.mylogin.cnf中以加密格式存储身份验证信息。
检查方法    若是密码可见,请检查流程或任务列表、shell或命令历史记录。
备注    若是密码在进程列表或用户的shell和命令历史记录中可见,攻击者将可以使用窃取的凭证访问mysql数据库。
2.2.4禁止用户名复用
基线名称    禁止用户名复用
基线编号    Tophant-MySQL-16
基线说明    数据库用户账户不该该被多个应用程序或用户重用。
配置方法    添加/删除用户,以便每一个用户仅用于一个特定的用途。
检查方法    每一个用户都应关联到其中一个用户
•系统账户
• 一我的
• 一个应用程序
备注    跨应用程序使用惟一的数据库账户将减小mysql账户受损的影响。
2.2.5禁止使用默认或非MySQL特定的加密密钥
基线名称    禁止使用默认或非MySQL特定的加密密钥
基线编号    Tophant-MySQL-17
基线说明    mysql使用的ssl证书和密钥应该只用于mysql,并且只用于一个实例。
配置方法    为每一个MySQL实例生成新的证书/密钥。
检查方法    检查证书是否绑定到一个MySQL实例。
备注    使用默认证书可致使攻击者冒充MySQL服务器。
2.2.6设置密码过时策略
基线名称    设置密码过时策略
基线编号    Tophant-MySQL-18
基线说明    为特定的用户设置密码过时时间。
配置方法    执行如下sql语句:
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
检查方法    执行如下sql语句:
SELECT user, host, password_lifetime from mysql.user from mysql.user where
password_lifetime IS NULL;
备注    根据安全需求和可用性来设置密码过时时间。
2.3文件系统权限
2.3.1设置“datadir”的权限
基线名称    设置“datadir”的权限
基线编号    Tophant-MySQL-19
基线说明    Datadir是MySQL数据的的位置
配置方法    使用如下命令:
chmod 700 <datadir>
chown mysql:mysql <datadir>
检查方法    执行如下语句:
show variables where variable_name = 'datadir';
备注    限制这些对象的可访问性将保护MySQL数据库的机密性,完整性和可用性。 若是容许MySQL用户之外的其余人从数据目录中读取文件,那么该用户可能可以从包含密码的mysql.user表中读取数据。
2.3.2设置“log_bin_basename”文件的权限
基线名称    设置“log_bin_basename”文件的权限
基线编号    Tophant-MySQL-20
基线说明    mysql能够记录各类日志文件,每一个日志文件用于不一样的目的。这些日志包括二进制日志、错误日志、慢速查询日志、中继日志和普通日志。由于这些是主机操做系统上的文件,因此它们受主机提供的权限结构的限制,除了mysql用户外,其余用户也能够访问它们。
配置方法    使用如下命令:
chmod 660 <log file>
chown mysql:mysql <log file>
检查方法    执行如下语句:
show variables like 'log_bin_basename';
备注    限制这些对象的权限能够保护MySQL日志的机密性,完整性和可用性。
2.3.3设置“log_error”权限
基线名称    设置“log_error”权限
基线编号    Tophant-MySQL-21
基线说明    mysql能够记录各类日志文件,每一个日志文件用于不一样的目的。这些日志包括二进制日志、错误日志、慢速查询日志、中继日志和普通日志。由于这些是主机操做系统上的文件,因此它们受主机提供的权限结构的限制,除了mysql用户外,其余用户也能够访问它们。
配置方法    使用如下命令:
chmod 660 <log file>
chown mysql:mysql <log file>
检查方法    执行如下语句:
show global variables like 'log_error';
备注    限制这些对象的权限能够保护mysql日志的机密性、完整性和可用性。
2.3.4设置“slow_query_log”权限
基线名称    设置“slow_query_log”权限
基线编号    Tophant-MySQL-22
基线说明    mysql能够记录各类日志文件,每一个日志文件用于不一样的目的。这些日志包括二进制日志、错误日志、慢速查询日志、中继日志和普通日志。由于这些是主机操做系统上的文件,因此它们受主机提供的权限结构的限制,除了mysql用户外,其余用户也能够访问它们。
配置方法    使用如下命令:
chmod 660 <log file>
chown mysql:mysql <log file>
检查方法    执行如下语句:
show variables like 'slow_query_log_file';
备注    限制这些对象的权限能够保护MySQL日志的机密性,完整性和可用性。
2.3.5设置“relay_log_basename”文件的权限
基线名称    设置“relay_log_basename”文件的权限
基线编号    Tophant-MySQL-23
基线说明    mysql能够记录各类日志文件,每一个日志文件用于不一样的目的。这些日志包括二进制日志、错误日志、慢速查询日志、中继日志和普通日志。由于这些是主机操做系统上的文件,因此它们受主机提供的权限结构的限制,除了mysql用户外,其余用户也能够访问它们。
配置方法    使用如下命令:
chmod 660 <log file>
chown mysql:mysql <log file>
检查方法    执行如下语句:
show variables like 'relay_log_basename';
备注    限制这些对象的权限能够保护MySQL日志的机密性,完整性和可用性。
2.3.6设置“general_log_file”权限
基线名称    设置“general_log_file”权限
基线编号    Tophant-MySQL-24
基线说明    mysql能够记录各类日志文件,每一个日志文件用于不一样的目的。这些日志包括二进制日志、错误日志、慢速查询日志、中继日志和普通日志。由于这些是主机操做系统上的文件,因此它们受主机提供的权限结构的限制,除了mysql用户外,其余用户也能够访问它们。
配置方法    使用如下命令:
chmod 660 <log file>
chown mysql:mysql <log file>
检查方法    执行如下语句:
show variables like 'general_log_file';
备注    限制这些对象的权限能够保护MySQL日志的机密性,完整性和可用性。
2.3.7设置SSL密钥文件权限
基线名称    设置SSL秘钥文件权限
基线编号    Tophant-MySQL-25
基线说明    当配置为使用SSL/TLS时,MySQL依赖这些密钥文件,这些密钥文件存储在主机的文件系统中,受主机权限结构的约束。
配置方法    使用如下命令:
chown mysql:mysql <ssl_key Value>
chmod 400 <ssl_key Value>
检查方法    1.执行如下sql语句获取ssl_key的值:
show variables where variable_name = 'plugin_dir';
2. 执行如下命令查看该值的权限:
  ls -l <ssl_key Value> | egrep "^-r--------[ \t]*.[ \t]*mysql[ \t]*mysql.*$"
备注    限制这些对象的可访问性将保护MySQL数据库的机密性,完整性和可用性以及与客户端的通讯。
2.3.8设置插件目录的权限
基线名称    设置插件目录的权限
基线编号    Tophant-MySQL-26
基线说明    插件目录是MySQL插件的位置。 插件是存储引擎或用户定义的函数(UDF)。
配置方法    使用如下命令:
chmod 775 <plugin_dir Value> (or use 755)
chown mysql:mysql <plugin_dir Value>
检查方法    1.执行如下sql语句获取plugin_dir的值:
show variables where variable_name = 'ssl_key';
2. 执行如下命令查看该值的权限:
 ls -l <plugin_dir Value>/.. | egrep "^drwxr[-w]xr[-w]x[ \t]*[0-9][ \t]*mysql[\t]*mysql.*plugin.*$"
备注    限制这些对象的可访问性将保护MySQL数据库的机密性,完整性和可用性。 若是有人能够修改插件,那么当服务器启动而且代码将被执行时,可能会加载这些插件。
2.4MySQL权限
2.4.1设置仅管理用户具备彻底数据库访问权限
基线名称    设置仅管理用户具备彻底数据库访问权限
基线编号    Tophant-MySQL-27
基线说明    mysql.user和mysql.db表列出了能够向MySQL用户授予(或拒绝)的各类权限。须要特别注意的特权包括:Select_priv,Insert_priv,Update_priv,Delete_priv,Drop_priv等。一般这些权限不该该对每一个MySQL用户可用,而且一般仅保留用于管理用途。
配置方法    1.枚举审计过程产生的非管理用户
2.对于每一个非管理用户,请使用REVOKE语句根据须要删除权限
检查方法    执行如下sql语句:
SELECT user, host
FROM mysql.user
WHERE (Select_priv = 'Y')
 OR (Insert_priv = 'Y')
 OR (Update_priv = 'Y')
 OR (Delete_priv = 'Y')
 OR (Create_priv = 'Y')
 OR (Drop_priv = 'Y');
SELECT user, host
FROM mysql.db
WHERE db = 'mysql'
 AND ((Select_priv = 'Y')
  OR (Insert_priv = 'Y')
  OR (Update_priv = 'Y')
  OR (Delete_priv = 'Y')
  OR (Create_priv = 'Y')
  OR (Drop_priv = 'Y'));
备注    限制“mysql”数据库的可访问性将保护MySQL内部数据的机密性,完整性和可用性。
2.4.2禁用非管理用户的“file_priv”
基线名称    禁用非管理用户的“file_priv”
基线编号    Tophant-MySQL-28
基线说明    mysql.user表中的File_priv权限用于容许或禁止用户在服务器主机上读写文件。
配置方法    1.枚举在审计过程的结果集中找到的非管理用户
2.对于每一个用户,发出如下SQL语句(将“<user>”替换为非管理用户:
  REVOKE FILE ON *.* FROM '<user>';
检查方法    执行如下sql语句,确保仅管理员用户拥有该权限:
select user, host from mysql.user where File_priv = 'Y';
备注    File_priv权限容许mysql用户从磁盘读取文件并将文件写入磁盘。攻击者可能利用这一点来进一步破坏MySQL。
2.4.3禁用非管理用户的“process_priv”
基线名称    禁用非管理用户的“process_priv”
基线编号    Tophant-MySQL-29
基线说明    mysql.user表中的PROCESS权限肯定给定用户是否能够查看全部会话语句的执行信息。
配置方法    1.枚举在审计过程的结果集中找到的非管理用户
2.对于每一个用户,发出如下SQL语句(将“<user>”替换为非管理用户:
  REVOKE PROCESS ON *.* FROM '<user>';
检查方法    执行如下sql语句,确保仅管理员用户拥有该权限:
select user, host from mysql.user where Process_priv = 'Y';
备注    PROCESS特权容许主体查看当前正在执行的MySQL语句,包括用于管理密码的语句。攻击者能够利用这一点来破坏MySQL或获取对潜在敏感数据的访问权限。
2.4.4禁用非管理用户的“super_priv”
基线名称    禁用非管理用户的“super_priv”
基线编号    Tophant-MySQL-30
基线说明    mysql.user表中的SUPER权限控制着各类MySQL功能的使用。 这些功能包括,CHANGE MASTER TO,KILL,mysqladmin kill选项,PURGE BINARY LOGS,SET GLOBAL,mysqladmin调试选项,日志记录控制等。
配置方法    1.枚举在审计过程的结果集中找到的非管理用户
2.对于每一个用户,发出如下SQL语句(将“<user>”替换为非管理用户:
  REVOKE SUPER ON *.* FROM '<user>';
检查方法    执行如下sql语句,确保仅管理员用户拥有该权限:
select user, host from mysql.user where Super_priv = 'Y';
备注    SUPER权限容许委托人执行许多操做,包括查看和终止当前正在执行的MySQL语句(包括用于管理密码的语句)。 此权限还提供配置MySQL的功能,例如启用/禁用日志记录,更改数据,禁用/启用功能。 限制具备SUPER权限的账户能够下降攻击者利用这些功能的可能性。
2.4.5禁用非管理用户的“shutdown_priv”
基线名称    禁用非管理用户的“shutdown_priv”
基线编号    Tophant-MySQL-31
基线说明    shutdown特权只是容许使用mysqladmin命令的shutdown选项,它容许具备shutdown特权的用户可以关闭mysql服务器。
配置方法    1.枚举在审计过程的结果集中找到的非管理用户
2.对于每一个用户,发出如下SQL语句(将“<user>”替换为非管理用户:
  REVOKE SUPER ON *.* FROM '<user>';
检查方法    执行如下sql语句,确保仅管理员用户拥有该权限:
SELECT user, host FROM mysql.user WHERE Shutdown_priv = 'Y';
备注    shutdown特权容许主体关闭mysql。攻击者可能会利用这一点对MySQL的可用性形成负面影响。
2.4.6禁用非管理用户的“create_user_priv”
基线名称    禁用非管理用户的“create_user_priv”
基线编号    Tophant-MySQL-32
基线说明    create user特权管理给定用户添加或删除用户、更改现有用户名或撤消现有用户特权的权限。
配置方法    1.枚举在审计过程的结果集中找到的非管理用户
2.对于每一个用户,发出如下SQL语句(将“<user>”替换为非管理用户:
  REVOKE SUPER ON *.* FROM '<user>';
检查方法    执行如下sql语句,确保仅管理员用户拥有该权限:
SELECT user, host FROM mysql.user WHERE Create_user_priv = 'Y';
备注    减小授予CREATE USER权限的用户数量能够最大限度地减小可以添加/删除用户,更改现有用户名称和操纵现有用户权限的用户数量。
2.4.7禁用非管理用户的“grant_priv”
基线名称    禁用非管理用户的“grant_priv”
基线编号    Tophant-MySQL-33
基线说明    GRANT OPTION权限存在于不一样的上下文(mysql.user,mysql.db)中,目的是管理特权用户操纵其余用户权限的能力。
配置方法    1.枚举在审计过程的结果集中找到的非管理用户
2.对于每一个用户,发出如下SQL语句(将“<user>”替换为非管理用户:
  REVOKE SUPER ON *.* FROM '<user>';
检查方法    执行如下sql语句,确保仅管理员用户拥有该权限:
SELECT user, host FROM mysql.user WHERE Grant_priv = 'Y';
SELECT user, host FROM mysql.db WHERE Grant_priv = 'Y';
备注    GRANT权限容许委托人授予其余委托人额外的权限。 攻击者可能会使用它来破坏MySQL。
2.4.8禁用“Non-Slave”用户的“repl_slave_priv”
基线名称    禁用“Non-Slave”用户的“repl_slave_priv”
基线编号    Tophant-MySQL-34
基线说明    REPLICATION SLAVE特权控制给定用户(在主服务器的上下文中)是否能够请求在主服务器上进行的更新。
配置方法    1.枚举在审计过程的结果集中找到的非管理用户
2.对于每一个用户,发出如下SQL语句(将“<user>”替换为非管理用户:
  REVOKE SUPER ON *.* FROM '<user>';
检查方法    执行如下sql语句,确保仅管理员用户拥有该权限:
SELECT user, host FROM mysql.user WHERE Repl_slave_priv = 'Y';
备注    REPLICATION SLAVE特权容许主体获取包含全部数据更改语句和来自主数据库的表数据更改的binlog文件。攻击者能够使用它来从MySQL读取/获取敏感数据。
2.4.9设置DML/DDL受权仅限于特定数据库和用户
基线名称    设置DML/DDL受权仅限于特定数据库和用户
基线编号    Tophant-MySQL-35
基线说明    DML/DDL包括用于修改或建立数据结构的一组权限。 这包括INSERT,SELECT,UPDATE,DELETE,DROP,CREATE和ALTER权限。
配置方法    1.枚举审计过程结果集中返回的未受权用户,主机和数据库
2.对于每一个用户,发出如下SQL语句(将“<user>”替换为未受权用户,将“<host>”替换为主机名,将“<database>”替换为数据库名称):
  REVOKE SELECT ON <host>.<database> FROM <user>;
REVOKE INSERT ON <host>.<database> FROM <user>;
REVOKE UPDATE ON <host>.<database> FROM <user>;
REVOKE DELETE ON <host>.<database> FROM <user>;
REVOKE CREATE ON <host>.<database> FROM <user>;
REVOKE DROP ON <host>.<database> FROM <user>;
REVOKE ALTER ON <host>.<database> FROM <user>;
检查方法    执行如下sql语句, 确保返回的全部用户都应在指定的数据库上具备这些权限:
SELECT User,Host,Db
FROM mysql.db
WHERE Select_priv='Y'
OR Insert_priv='Y'
OR Update_priv='Y'
OR Delete_priv='Y'
OR Create_priv='Y'
OR Drop_priv='Y'
OR Alter_priv='Y';
备注    INSERT,SELECT,UPDATE,DELETE,DROP,CREATE和ALTER是任何数据库中的强大权限。 此类权限应仅限于须要此类权限的用户。 经过限制具备这些权限的用户并确保它们仅限于特定数据库,减小了数据库的攻击面。
2.5审计和记录
2.5.1设置“log_error”
基线名称    设置“log_error”
基线编号    Tophant-MySQL-36
基线说明    错误日志包含有关事件的信息,例如mysqld启动和中止、什么时候须要检查或修复表,以及mysqld失败时堆栈跟踪。
配置方法    1.打开MySQL配置文件(my.cnf或my.ini)
2.将log-error选项设置为错误日志的路径
检查方法    执行如下sql语句,确保返回值不为空:
SHOW variables LIKE 'log_error';
备注    启用错误日志能够提升检测针对mysql和其余关键消息的恶意尝试的能力,若是没有启用错误日志,那么链接错误可能会被忽略。
2.5.2设置日志文件存储在非系统分区上
基线名称    设置日志文件存储在非系统分区上
基线编号    Tophant-MySQL-37
基线说明    MySQL日志文件能够在MySQL配置中设置,以存在于文件系统的任何位置。一般应该将日志文件存放在非系统分区上。
配置方法    1.打开MySQL配置文件(my.cnf)
2.找到log-bin条目并将其设置为不在root('/'),/ var或/ usr上目录上。
检查方法    执行如下sql语句,确保返回的值不为root('/')、/var或/usr。
SELECT @@global.log_bin_basename;
备注    建议将mysql日志移出系统分区。
2.5.3设置“log_error_verbosity”
基线名称    设置“log_error_verbosity”
基线编号    Tophant-MySQL-38
基线说明    log_error_verbosity系统变量为MySQL日志提供了附加信息。 值为1能够记录错误消息。 值2表示记录错误和警告消息,值3表示记录错误,警告和注释消息。
配置方法    打开MySQL配置文件(my.cnf中),确保在mysqld部分中找到如下行:
log_error_verbosity = 2  
检查方法    执行如下sql语句,确保返回的值是2或3。
SHOW GLOBAL VARIABLES LIKE 'log_error_verbosity';
备注    这可能有助于经过记录通讯错误和停止链接来检测恶意行为。
2.5.4启用审核日志记录
基线名称    启用审核日志记录
基线编号    Tophant-MySQL-39
基线说明    审计日志记录实际上并未包含在MySQL的Community Edition中(仅包含了常规日志)。使用常规日志快速增加并对服务器性能产生影响。
配置方法    从各类来源获取第三方MySQL日志记录解决方案,包括但不限于如下内容:
•常规查询日志
•MySQL企业审计
•适用于MySQL的MariaDB Audit插件
•McAfee MySQL Audit
检查方法    验证是否已安装并配置第三方工具以启用交互式用户会话和(可选)应用程序会话的日志记录。
备注    审计日志有助于肯定谁在何时更改了什么。审计日志能够做为调查的证据。它还能够帮助识别攻击者可以执行的操做。
2.5.5设置“log-raw”为OFF
基线名称    设置“log-raw”为OFF
基线编号    Tophant-MySQL-40
基线说明    log-raw选项肯定服务器是否重写密码,以便不以纯文本形式显示在日志文件中。 若是启用了log-raw,则密码将以纯文本形式写入各类日志文件(通用查询日志,慢查询日志和二进制日志)。
配置方法    编辑配置文件,添加如下指令:
log-raw = OFF
检查方法    1.打开MySQL配置文件(my.cnf)
2.确保存在log-raw条目
3.确保将log-raw条目设置为OFF
备注    经过密码的原始日志记录,有权访问日志文件的人可能会看到纯文本密码。
2.6认证
2.6.1禁止在全局配置中存储密码
基线名称    禁止在全局配置中存储密码
基线编号    Tophant-MySQL-41
基线说明    MySQL配置文件的[client]部分容许设置要使用的用户和密码。验证全局配置文件(my.cnf)中未使用密码选项。
配置方法    使用mysql_config_editor以加密形式在.mylogin.cnf中存储身份验证凭据。
检查方法    打开MySQL配置文件(例如my.cnf),检查[client]部分,确保未使用密码。
备注    在全局配置中使用密码参数可能会形成用户密码的泄露。

2.6.2设置“sql_mode”包含“NO_AUTO_CREATE_USER”
基线名称    设置“sql_mode”包含“NO_AUTO_CREATE_USER”
基线编号    Tophant-MySQL-42
基线说明    NO_AUTO_CREATE_USER是sql_mode的一个选项,可防止GRANT语句在未提供身份验证信息时自动建立用户。
配置方法    1.打开MySQL配置文件(my.cnf)
2.在[mysqld]区域中找到sql_mode设置
3.将NO_AUTO_CREATE_USER添加到sql_mode设置
检查方法    执行如下sql语句,确保每一个结果包含NO_AUTO_CREATE_USER。
SELECT @@global.sql_mode;
SELECT @@session.sql_mode;  
备注    没有此设置,管理用户可能会意外地建立没有密码的用户。
2.6.3为全部MySQL账户设置密码
基线名称    为全部MySQL账户设置密码
基线编号    Tophant-MySQL-43
基线说明    空密码容许用户在不使用密码的状况下登陆。
配置方法    执行如下sql语句:
SET PASSWORD FOR <user>@'<host>' = '<clear password>'
检查方法    执行如下sql语句,若是全部账户都设置了密码,则不会返回任何行。
SELECT User,host
FROM mysql.user
WHERE authentication_string='';
备注    在没有密码的状况下,只知道用户名和容许的主机列表就能够绕过身份验证机制直接链接到服务器。
2.6.4设置“default_password_lifetime”小于或等于90
基线名称    设置“default_password_lifetime”小于或等于90
基线编号    Tophant-MySQL-44
基线说明    “default_password_lifetime”用于设置密码的有效时间。应该将该选项的值设置为小于或等于90。
配置方法    执行如下sql语句:
SET GLOBAL default_password_lifetime=90
检查方法    执行如下sql语句:
SHOW VARIABLES LIKE 'default_password_lifetime';
备注    此设置加强了密码的安全性。
2.6.5设置密码复杂性
基线名称    设置秘密复杂性
基线编号    Tophant-MySQL-45
基线说明    密码复杂性包括密码特征,例如长度,大小写等。
配置方法    编辑配置文件,添加以下指令:
plugin-load=validate_password.so
validate-password=FORCE_PLUS_PERMANENT
validate_password_length=14
validate_password_mixed_case_count=1
validate_password_number_count=1
validate_password_special_char_count=1
validate_password_policy=MEDIUM
检查方法    执行如下sql语句:
SHOW VARIABLES LIKE 'validate_password%';
上述语句的结果应显示:
•validate_password_length应为14或更多
•validate_password_mixed_case_count应为1或更多
•validate_password_number_count应为1或更多
•validate_password_special_char_count应为1或更多
•validate_password_policy应为MEDIUM或STRONG
备注    复杂密码能够下降密码被暴力破解的风险。
2.6.6禁用用户的通配符主机名
基线名称    禁用用户的通配符主机名
基线编号    Tophant-MySQL-46
基线说明    在向特定数据库上的用户授予权限时,MySQL能够使用主机通配符。例如“<user>”@''。
配置方法    1.枚举运行审计程序后返回的全部用户
2.将用户的主机更改成特定用户或DROP用户
检查方法    执行如下sql语句:
SELECT user, host FROM mysql.user WHERE host = '%';
备注    
2.6.7禁用匿名账户
基线名称    禁用匿名帐户
基线编号    Tophant-MySQL-47
基线说明    匿名账户是用户名为空(")的用户。匿名账户没有密码,因此任何人均可以使用它们链接到mysql服务器。
配置方法    1.枚举从执行审计过程返回的匿名用户
2.对于每一个匿名用户,请DROP或为其指定名称
检查方法    执行如下sql语句:
SELECT user,host FROM mysql.user WHERE user = '';
备注    删除匿名账户将有助于确保只有已识别和可信的主体才能与MySQL交互。
2.7网络设置
2.7.1设置“have_ssl”为YSE
基线名称    设置“have_ssl”为YES
基线编号    Tophant-MySQL-48
基线说明    在不受信任的网络上传输时,全部网络流量都必须使用ssl/tls。
配置方法    参阅以下资料:
http://dev.mysql.com/doc/refman/5.7/en/ssl-connections.html
http://dev.mysql.com/doc/refman/5.7/en/ssl-options.html
检查方法    执行如下sql语句,查看返回值是否为YES。
SHOW variables WHERE variable_name = 'have_ssl';
备注    受SSL/TLS协议保护的MySQL有助于防止窃听和中间人攻击。
2.7.2设置远程用户的“ssl_type”
基线名称    设置远程用户的“ssl_type”
基线编号    Tophant-MySQL-49
基线说明    在不受信任的网络上传输时,全部网络流量都必须使用SSL/TLS。 对于经过网络进入系统的用户,应该基于每一个用户强制执行SSL/TLS。
配置方法    执行如下sql语句:
GRANT USAGE ON *.* TO 'my_user'@'app1.example.com' REQUIRE SSL;
检查方法    执行如下sql语句:
SELECT user, host, ssl_type FROM mysql.user
WHERE NOT HOST IN ('::1', '127.0.0.1', 'localhost');
验证返回的每一个用户的ssl_type是否等于ANY,X509或SPECIFIED。
备注    受SSL/TLS协议保护的MySQL有助于防止窃听和中间人攻击。
2.8其余设置
2.8.1安装最新的安全补丁
基线名称    安装最新的安全补丁
基线编号    Tophant-MySQL-50
基线说明    建议MySQL安装最新的安全更新。
配置方法    安装最新版本的补丁或升级到最新版本。
检查方法    执行如下sql语句:
SHOW VARIABLES WHERE Variable_name LIKE "version";
备注    若是没有最新的安全补丁,攻击者可能会利用已知的漏洞对MySQL服务器进行攻击。
2.8.2删除“test”数据库
基线名称    删除“test”数据库
基线编号    Tophant-MySQL-51
基线说明    默认的mysql安装附带一个未使用的数据库test。建议删除该数据库。
配置方法    执行如下sql语句:
DROP DATABASE "test";
检查方法    执行如下sql语句:
SHOW DATABASES LIKE 'test';
备注    test数据库能够被全部用户访问,并可用于消耗系统资源。删除测试数据库将减小MySQL服务器的攻击面。
2.8.3设置“allow-suspicious-udfs”为“FALSE”
基线名称    设置“allow-suspicious-udfs”为“FALSE”
基线编号    Tophant-MySQL-52
基线说明    此选项经过检查至少一个对应的方法_init、_deinit、_reset、_clear或_add来防止将任意共享库函数附加为用户定义的函数。
配置方法    1.从mysqld启动命令行中删除--allow-suspicious-udfs。
2.从MySQL选项文件中删除allow-suspicious-udfs。
检查方法    1.检查在mysqld启动命令行中是否指定--allow-suspicious-udfs。
2.检查在MySQL配置中是否将allow-suspicious-udfs设置为FALSE。
备注    防止加载不包含用户定义函数的共享库将减小服务器的攻击面。
2.8.4禁用“local_infile”
基线名称    禁用“local_infile”
基线编号    Tophant-MySQL-53
基线说明    local_infile参数指示是否能够经过LOAD DATA INFILE或SELECT local_file加载或选择位于MySQL客户端计算机上的文件。
配置方法    将如下行添加到MySQL配置文件的[mysqld]部分并从新启动MySQL服务:
local-infile=0
检查方法    执行如下sql语句:
SHOW VARIABLES WHERE Variable_name = 'local_infile';
备注    禁用local_infile可下降攻击者经过SQL注入漏洞攻击服务器,从而读取服务器敏感文件的风险。
2.8.5禁用“--skip-grant tables”
基线名称    禁用“--skip-grant tables”
基线编号    Tophant-MySQL-54
基线说明    此选项致使mysqld在不使用系统特权的状况下启动
配置方法    编辑配置文件,添加以下指令:
skip-grant-tables = FALSE
检查方法    1.打开mysql配置文件(例如my.cnf),搜索skip-grant-tables
2.确保skip-grant-tables设置为false
备注    若是使用此选项,受影响服务器的全部客户机均可以无限制地访问全部数据库。
2.8.6启用“--skip-symbolic-links”
基线名称    启用“--skip-symbolic-links”
基线编号    Tophant-MySQL-55
基线说明    MySQL的symbolic-links和skip-symbolic-links选项肯定是否支持符号连接。启用符号连接时,它们具备不一样的效果,具体取决于主机平台。禁用符号连接时,数据库不会使用存储在文件中的符号连接或表中的条目。
配置方法    编辑配置文件,添加以下指令:
skip_symbolic_links=yes
检查方法    执行如下sql语句:
SHOW variables LIKE 'have_symlink';
备注    符号连接选项可能容许经过mysql服务器将操做直接指向其余文件和/或目录。
2.8.7禁用“daemon_memcached”插件
基线名称    禁用“daemon_memcache”'插件
基线编号    Tophant-MySQL-56
基线说明    InnoDB memcached插件容许用户使用memcached协议访问存储在InnoDB中的数据。
配置方法    使用命令: uninstall plugin daemon_memcached;
检查方法    执行如下sql语句:
SELECT * FROM information_schema.plugins WHERE PLUGIN_NAME='daemon_memcached'
备注    默认状况下,插件不进行身份验证,这意味着任何有权访问插件的TCP / IP端口的人均可以访问和修改数据。 可是,默认状况下并不是全部数据都会公开。
2.8.8设置“sql_mode”包含“STRICT_ALL_TABLES”
基线名称    设置“sql_mode”包含“STRICT_ALL_TABLES”
基线编号    Tophant-MySQL-57
基线说明    当执行数据更改语句(即INSERT、update)时,mysql能够根据是否启用严格的sql模式以不一样的方式处理无效或缺失的值
配置方法    将STRICT_ALL_TABLES添加到服务器配置文件中的sql_mode。
检查方法    执行如下sql语句:
SHOW VARIABLES LIKE 'sql_mode';
备注    默认状况下,若是数据不适合某个字段,MySQL将截断数据,这可能致使未知行为,或者被攻击者用来绕过数据验证。

2.8.9设置“MASTER_SSL_VERIFY_SERVER_CERT”为YES或1
基线名称    设置“MASTER_SSL_VERIFY_SERVER_CERT”为YES或1
基线编号    Tophant-MySQL-58
基线说明    在MySQL上下文中,设置MASTER_SSL_VERIFY_SERVER_CERT指示从属设备是否应验证主服务器的证书。此配置项能够设置为“是”或“否”,除非在从站上启用了SSL,不然将忽略该值。
配置方法    执行如下sql语句:
STOP SLAVE; -- required if replication was already running
CHANGE MASTER TO MASTER_SSL_VERIFY_SERVER_CERT=1;
START SLAVE; -- required if you want to restart replication
检查方法    执行如下sql语句,验证返回值是否为1。
select ssl_verify_server_cert from mysql.slave_master_info;
备注    使用SSL时,证书验证对于正在创建验证链接的一方很是重要。 在这种状况下,客户端应验证服务器的证书。
2.8.10设置复制用户的“super_priv”
基线名称    设置复制用户的“super_priv”
基线编号    Tophant-MySQL-59
基线说明    mysql.user表中的SUPER权限控制着各类MySQL功能的使用。这些功能包括,CHANGE MASTER TO,KILL,mysqladmin kill选项,PURGE BINARY LOGS,SET GLOBAL,mysqladmin调试选项,日志记录控制等。
配置方法    1.枚举在审计过程的结果集中找到的复制用户
2.对于每一个复制用户,发出如下SQL语句(将“repl”替换为复制用户的名称):
REVOKE SUPER ON *.* FROM 'repl';
检查方法    执行如下sql语句,验证是否有返回值。
select user, host from mysql.user where user='repl' and Super_priv = 'Y';
备注    UPER权限容许委托人执行许多操做,包括查看和终止当前正在执行的MySQL语句(包括用于管理密码的语句)。限制具备SUPER权限的账户能够下降攻击者利用这些功能的可能性。

 

数据库安全加固 - Oraclegit

1.概述
1.1适用范围
本配置基线适用于Oracle系列系统,主要涉及Oracle系统安全配置方面的基本要求,用于指导安全例行工做、新系统入网安全检查等场合。
1.2规范依据
据目前Oracle操做系统的安全现状,制定适合的基线配置规范。
规范性引用文件:
GB/T 28448-2012 《信息安全技术 信息系统安全等级保护测评要求》
GB/T 28453-2012 《信息安全技术 信息系统安全管理评估要求》
GB/T 25063-2010 《信息安全技术 服务器安全测评要求》
GB/Z 24364-2009 《信息安全技术 信息安全风险管理指南》
GB/T 22239-2008 《信息安全技术 信息系统安全等级保护基本要求》
GB/T 20270-2006 《信息安全技术 网络基础安全技术要求》
GB/T 20271-2006 《信息安全技术 信息系统通用安全技术要求》
GB/T 20269-2006 《信息安全技术 信息系统安全管理要求》
YD/T 2701-2014  《电信网和互联网安全防御基线配置要求及检测要求》
1.3实施策略
结合网络和信息系统建设状况,考虑安全配置项影响的范围,结合以往工做经验,提出以下安全项目实施策略:
基础项:实施安全基线可以明显提高安全水平,实施风险小,可操做性强。
建议项:实施安全基线可以提高必定安全水平,具备必定风险,可操做性较强。
序号    配置类别    安全基线项目名称    实施策略
1    身份鉴别    锁定没必要要账号    基础项
2    身份鉴别    设置并保证密码复杂度    基础项
3    身份鉴别    更改默认账号密码    基础项
4    身份鉴别    设置认证失败策略    基础项
5    身份鉴别    配置重复口令使用次数    建议项
6    身份鉴别    设置账号口令的生存期    建议项
7    身份鉴别    配置密码变动宽限期    建议项
8    访问控制    设置监听器启停密码    基础项
9    访问控制    权限分离    基础项
10    访问控制    限制帐户权限    基础项
11    访问控制    限制TNS登陆IP    建议项
12    访问控制    限制DBA帐户远程登陆    建议项
13    访问控制    配置数据字典访问权限    建议项
14    安全审计    配置数据库审计    建议项
15    资源控制    设置链接超时锁定策略    基础项
16    其它安全项    配置安装最小化    建议项
17    其它安全项    设置通信传输加密    建议项
18    其它安全项    更新数据库补丁    建议项
2.安全配置基线标准
2.1身份鉴别
2.1.1锁定没必要要帐户
基线名称    锁定没必要要帐户(基础项)
基线编号    Tophant-Oracle-1
基线项说明      应锁定与数据库运行、维护等工做无关的帐户。
配置方法    如下操做需sys权限
配置命令以下:
sqlplus "/ as sysdba"      //登陆到sqlplus环境
SQL> alter user username account lock;  //username为须要锁定的帐户
若是锁定某用户后对业务形成影响,使用如下命令进行帐户解锁:
SQL> alter user username account unlock;
Oracle默认开启sys,system,dbsnmp,sysman,mgmt_view帐户,若不须要上述帐户,可由数据库管理员禁用。
检查方法    结合要求和实际业务状况判断符合要求锁定与设备运行、维护等与工做无关的帐户。
如下操做需sys权限帐户登陆
sqlplus "/ as sysdba"
SQL> select username,account_status from dba_users; //命令查看是否存在(sys,system,dbsnmp,sysman,mgmt_view)多余未锁定帐户
依据    
备注    须要手工判断,实际状况应与具体需求为准,谨慎操做。

2.1.2设置并保证密码复杂度
基线名称    设置并保证密码复杂度(基础项)
基线编号    Tophant-Oracle-2
基线项说明      对于采用静态口令进行认证的数据库,口令长度至少8位,并包括数字、小写字母、大写字母和特殊符号四类中至少两类。且5次之内不得设置相同的口令。 
配置方法    如下操做需sys权限
配置命令以下:
sqlplus "/as sysdba "      //登陆到sqlplus环境
@%oracle_home%/RDBMS/ADMIN/utlpwdmg.sql
SQL> create profile profile1 limit
password_grace_time 7
        password_life_time 90
        password_reuse_max 32
        password_verify_function
将策略应用到用户
SQL> alter user username profile profile1;
应用策略后,修改密码
SQL> alter user 用户名 identified by 新密码 replace 旧密码
检查方法    参考配置方法。
依据    
备注    
2.1.3更改默认帐户密码
基线名称    更改默认帐户密码(基础项)
基线编号    Tophant-Oracle-3
基线项说明      更改数据库默认帐户的密码。
配置方法    如下操做需sys权限
SQL> alter user user01 identified by user10;  //这个是把USER01用户密码修改成USER10
使用上述命令修改下面的Oracle数据库默认帐户密码:
system/system、system/manager 、sys/sys、sys/cHAnge_on_install 、scott/scott、scott/tiger、dbsnmp/dbsnmp 、rman/rman、xdb/xdb
检查方法    使用:system/system、system/manager 、sys/sys、sys/cHAnge_on_install 、scott/scott、scott/tiger、dbsnmp/dbsnmp 、rman/rman、xdb/xdb帐户名/密码登陆sqlplus环境。若登陆成功说明使用默认密码需修改。
依据    
备注    

2.1.4设置认证失败策略
基线名称    设置认证失败策略(基础项)
基线编号    Tophant-Oracle-4
基线项说明      对于采用静态口令认证技术的数据库,应配置当用户连续认证失败次数超过10次,锁定该用户使用的帐户。
配置方法    如下操做需sys权限
sqlplus “/as sysdba” 
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 10; 
检查方法    查询语句select resource_name, limit from dba_profiles, dba_users where dba_profiles.profile = dba_users.profile and dba_users.account_status='OPEN' and resource_name='FAILED_LOGIN_ATTEMPTS';
在返回的查询结果中:
FAILED_LOGIN_ATTEMPTS等于10(或根据实际状况定义的其它值)则知足要求。
依据    6.2.1.4 应用安全:身份鉴别(S3):d) 应提供登陆失败处理功能,可采起结束会话、限制非法登陆次数和自动退出等措施;
备注    根据应用场景的不一样,如部署场景需开启此功能,则强制要求此项。对核心库、生产用户不能设置此基线。误操做或恶意超过10次,致使用户锁定,有必定风险,可能会致使应用异常
2.1.5配置重复口令使用次数
基线名称    配置重复口令使用次数(建议项)
基线编号    Tophant-Oracle-5
基线项说明      对于采用静态口令认证技术的数据库,应配置数据库,使用户不能重复使用最近5次(含5次)内已使用的口令。
配置方法    如下操做需sys权限
sqlplus “/as sysdba”
alter profile profile1 limit  password_reuse_max 5;
检查方法    查询语句select resource_name, limit from dba_profiles, dba_users where dba_profiles.profile = dba_users
.profile and dba_users.account_status='OPEN' and resource_name='PASSWORD_REUSE_MAX';
查询结果中PASSWORD_REUSE_MAX大于等于5。
依据    
备注    
2.1.6设置帐户口令的生存期
基线名称    设置帐户口令的生存期(建议项)
基线编号    Tophant-Oracle-6
基线项说明      对于采用静态口令认证技术的数据库,帐户口令的生存期(使用时间)不长于90天。
配置方法    如下操做需sys权限
sqlplus “/as sysdba”
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90;
检查方法    查询语句select limit from dba_profiles where 
resource_name='PASSWORD_LIFE_TIME' and profile in (select profile from dba_users where account_status='OPEN'
查询结果中PASSWORD_LIFE_TIME小于等于90才知足要求。
依据    
备注    数据库口令有效期更改可能给运维工做增长必定负担。
2.1.7配置密码变动宽限期
基线名称    配置密码变动宽限期(建议项)
基线编号    Tophant-Oracle-7
基线项说明      配置帐户密码更改所宽限的时间(单位:天)。
配置方法    如下操做需sys权限
sqlplus ”/as sysdba”
ALTER PROFILE DEFAULT LIMIT PASSWORD_GRACE_TIME 7;
检查方法    查询语句select resource_name, limit from dba_profiles, dba_users where dba_profiles.profile = dba_users
.profile and dba_users.account_status='OPEN' and resource_name='PASSWORD_GRACE_TIME'
查询结果中PASSWORD_GRACE_TIME小于等于7。
依据    
备注    密码过时后7天内不修改密码,密码将失效

2.2访问控制
2.2.1设置监听器启停密码
基线名称    设置监听器启停密码(基础项)
基线编号    Tophant-Oracle-8
基线项说明      为数据库监听器(LISTENER)的关闭和启动设置密码。
配置方法    如下操做需sys权限
设置监听器口令:
SHELL>%ORACLE_HOME%/bin/lsnrctl
LSNRCTL> change_password
Old password: <原来的口令> <-- 若是原来没有设置口令就直接回车,不然输入原来的口令
New password: <新口令>
Reenter new password: <新口令>
Connecting to (ADDRESS=(PROTOCOL=ipc)(KEY=XXX))
Password changed for LISTENER
The command completed successfully 
LSNRCTL> set password
Password: <输入新口令>
LSNRCTL> save_config (保存当前设置)

之后执行监听器命令前须要输入密码:
LSNRCTL>set password
Password: <输入新口令>
LSNRCTL>status (若是上一步未验证密码,则提示TNS-01169: 监听器还没有识别口令)
检查方法    要求正确设置参数PASSWORDS_LISTENER;
使用lsnrctl start或lsnrctl stop命令起停listener须要密码。
依据    
备注    
2.2.2权限分离
基线名称    权限分离(基础项)
基线编号    Tophant-Oracle-9
基线项说明      不容许使用操做系统管理员远程或本地登陆数据库
配置方法    如下操做需sys权限
sqlplus "/ as sysdba"
禁止Oracle 远程操做系统认证:
SQL> alter system set remote_os_authent=false scope=spfile;
关闭,从新启动数据库
SQL>shutdown 
SQL>startup
修改sqlnet.ora文件内容以下:
“SQLNET.AUTHENTICATION_SERVICES=(NONE)”(没有引号),用户之后链接数据库须要输入用户名和密码。
检查方法    如下操做需sys权限帐户登陆
检查Oracle 远程操做系统认证:
以Oracle用户身份执行以下命令:
SQL>show parameter remote_os_authent;
检查Oracle本地操做系统认证:
打开%ORACLE_HOME%\network\admin\sqlnet.ora,检查是否有如下行SQLNET.AUTHENTICATION_SERVICES= (NTS)
依据    
备注    

2.2.3限制帐户权限
基线名称    限制帐户权限(基础项)
基线编号    Tophant-Oracle-10
基线项说明      应根据实际业务须要,配置用户的最小权限。
配置方法    如下操做需sys权限
sqlplus "/ as sysdba"
revoke dba from user1;
撤消没必要要的包的PUBLIC执行权限:
sqlplus "/ as sysdba"
SQL>revoke execute on <包名称> from public;
若业务须要其余帐户使用该权限,应作特别说明并存档备查。
检查方法    查看系统权限:
SQL> select * from dba_sys_privs;
例如:
SQL> select * from dba_sys_privs where grantee='scott';
查看对象权限:
SQL> select * from dba_tab_privs;
例如,查看scott用户下employees表的权限
SQL> select grantee,privilege,grantor,grantable 
        from dba_tab_privs where 
        owner='scott' and table_name='employees';
检查包的PUBLIC执行权限:
SQL> select table_name from dba_tab_privs where grantee='PUBLIC' and privilege='EXECUTE' and table_name in ('UTL_FILE', 'UTL_TCP', 'UTL_HTTP', 'UTL_SMTP', 'DBMS_LOB', 'DBMS_SYS_SQL', 'DBMS_JOB','DBMS_SCHEDULER');

依据    
备注    检查各用户权限是否能知足业务须要且没有除业务须要之外的任何权限;
仅保留必要的包的PUBLIC角色执行权限;
经过设置初始化参数来限制只有SYSDBA权限的用户才能访问数据字典:O7_DICTIONARY_ACCESSIBILITY = FALSE
2.2.4限制TNS登录IP
基线名称    限制TNS登陆IP(建议项)
基线编号    DB-Oracle-11
基线项说明      经过数据库所在操做系统或防火墙限制,只有信任的IP 地址才能经过监听器访问数据库。
配置方法    如下操做需sys权限
只需在服务器上的文件$ORACLE_HOME/network/admin/sqlnet.ora 中设
置如下行:
tcp.validnode_checking = YES
tcp.excluded_nodes = (禁止的IP地址1,禁止的IP地址2)
tcp.invited_nodes =(容许的IP地址1,容许的IP地址2)
补充说明:
若是网络层已经作过访问控制,该项为可选项,不然为必选项
可信内网地址指:专用维护终端、访问数据库应用服务器、堡垒机,
其余地址段禁止。
检查方法    1、断定条件
在非信任的客户端以数据库帐户登陆被提示拒绝。
2、检测操做
检查$ORACLE_HOME/network/admin/sqlnet.ora 文件中是否设置参数
tcp.validnode_checking 和tcp.invited_nodes。
依据    
备注    根据应用场景的不一样,如部署场景需开启此功能,则强制要求此项。
2.2.5限制DBA帐户远程登录
基线名称    限制DBA帐户远程登陆(建议项)
基线编号    DB-Oracle-12
基线项说明      限制具有数据库超级管理员(SYSDBA)权限的用户远程登陆。
配置方法    如下操做需sys权限
sqlplus ”/as sysdba” 
SQL> alter system set remote_login_passwordfile=none scope=spfile;
关闭,从新启动数据库
SQL>shutdown                 
SQL>startup
检查方法    参照配置方法,参数REMOTE_LOGIN_PASSWORDFILE设置为NONE; (限制远程登陆)。
依据    6.2.1.4 应用安全:访问控制(S3):b) 访问控制的覆盖范围应包括与资源访问相关的主体、客体及它们之间的操做;
备注    根据应用场景的不一样,如部署场景需开启此功能,则强制要求此项。例外状况:
若存在rman备份,有从远程发起的备份,好比:
connect sys/@crmdb11assysdba  需重点确认是否有影响。须要数据库管理员确认。请谨慎操做。
2.2.6配置数据字典访问权限
基线名称    数据字典访问权限(建议项)
基线编号    DB-Oracle-13
基线项说明      启用数据字典保护,只有SYSDBA权限用户才能访问数据字典基础表。
配置方法    如下操做需sys权限
sqlplus “/as sysdba”      
SQL>alter system set O7_DICTIONARY_ACCESSIBILITY=FALSE scope=spfile;
关闭、从新启动数据库
SQL>shutdown
SQL>startup
检查方法    检查O7_DICTIONARY_ACCESSIBILITY是否设置为FALSE,命令以下:
SQL> show parameter O7_dictionary_accessibility;
依据    
备注    
2.3安全审计
2.3.1配置数据库审计
基线名称    配置数据库审计(建议项)
基线编号    Tophant-Oracle-14
基线项说明      根据业务要求制定数据库审计策略。
对用户登陆进行记录,记录内容包括用户登陆使用的帐户、登陆是否成功、登陆时间以及远程登陆时用户使用的IP地址;
用户对数据库的操做,包括但不限于如下内容:帐户建立、删除和权限修改、口令修改、读取和修改数据库配置、读取和修改业务用户的话费数据、身份数据、涉及通讯隐私数据。记录须要包含用户帐户,操做时间,操做内容以及操做结果;
记录对与数据库相关的安全事件。
配置方法    如下操做需sys权限
sqlplus “/as sysdba”   
SQL> alter system set audit_trail=os scope=spfile;
关闭、从新启动数据库
SQL>shutdown
SQL>startup
检查方法    SQL>show parameter audit_trail;  
参数audit_trail不能设置为NONE。
依据    
备注    根据应用场景的不一样,如部署场景需开启此功能,则强制要求此项。经过外围审计实现.数据库开启该项参数后,对数据库性能影响较大。
在以往的基线推广中,因数据库审计基线对业务系统影响较大,很难落地实施。
2.4资源控制
2.4.1设置链接超时锁定策略
基线名称    设置链接超时锁定策略(基础项)
基线编号    Tophant-Oracle-15
基线项说明      在某些应用环境下可设置数据库链接超时,好比数据库超过10分钟的空闲远程链接将自动断开。
自动断开超过10分钟的空闲远程链接,以防止在长时间远程链接过程当中被其余人窃听到敏感信息的泄露。同时方式远程人员在离开时并未锁屏或则有效保护,他人借助此时时间空闲进行违规操做带来没必要要的安全风险。
配置方法    如下操做需sys权限
配置以下:
在sqlnet.ora中找到“SQLNET.EXPIRE_TIME”项,设置该项参数为10。
示例以下:
SQLNET.EXPIRE_TIME=10
检查方法    10分钟以上的无任何操做的空闲数据库链接被自动断开;
检查$ORACLE_HOME/network/admin/sqlnet.ora文件中是否设置参数SQLNET.EXPIRE_TIME。
依据    
备注    如应用需求有长链接形式存在,该项有必定风险。
2.5其余安全项
2.5.1配置安装最小化
基线名称    配置安装最小化(建议项)
基线编号    DB-Oracle-16
基线项说明    只安装业务须要的选件.。须要业务相关人员、数据库管理员共同确认Oracle须要安装的选件,不须要的选件不进行安装。
配置方法    此检查项以问询方式进行。
检查方法    此检查项以问询方式进行,根据当前业务情况进行检查。
依据    
备注    该项无具体的检查、安全配置方法。实际状况请以具体需求为准。
能够用Oracle Universal Installer卸载Oracle组件。

数据库安全加固 - PostgreSQL

1.概述
1.1适用范围
本配置基线适用于PostgreSQL 10版本,主要涉及PostgreSQL数据库安全配置方面的基本要求,用于指导安全例行工做、新系统入网安全检查等场合。
1.2规范依据
根据目前PostgreSQL数据库安全现状,结合相关规范性文件指引,制定适合的基线配置规范。
规范性引用文件:
GB/T28448-2012《信息安全技术信息系统安全等级保护测评要求》
GB/T28453-2012《信息安全技术信息系统安全管理评估要求》
GB/T25063-2010《信息安全技术服务器安全测评要求》
GB/Z24364-2009《信息安全技术信息安全风险管理指南》
GB/T22239-2008《信息安全技术信息系统安全等级保护基本要求》
GB/T20270-2006《信息安全技术网络基础安全技术要求》
GB/T20271-2006《信息安全技术信息系统通用安全技术要求》
GB/T20269-2006《信息安全技术信息系统安全管理要求》
YD/T2701-2014《电信网和互联网安全防御基线配置要求及检测要求》




2.安全配置基线标准
2.1安装和补丁
2.1.1从受权仓库获取安装包
基线名称    从受权仓库获取安装包
基线编号    Tophant-PostgreSQL-1
基线说明    在获取和安装软件包时(一般经过yum),必须只从有效的和受权的仓库中获取软件包。
配置方法    1.直接使用命令:rpm -ivh https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-
x86_64/pgdg-centos10-10-2.noarch.rpm
2.正确配置yum仓库,使用yum命令安装
检查方法    使用命令:yum repolist all | grep enabled:
备注    使用无效或者为受权来源的安装包会增长系统被攻击的可能性。

2.1.2安装二进制包
基线名称    安装二进制包
基线编号    Tophant-PostgreSQL-2
基线说明    保证PostgreSQL软件包是从有效源安装在操做系统上的。
配置方法    根据实际状况,选择正确的且有效的安装包。
检查方法    使用命令:yum info $(rpm -qa|grep postgres) | egrep '^Name|^Version|^From'
备注    从安全性的角度来看,必须验证postgresql二进制包是来自一个有效的linux yum仓库

2.1.3启用systemd服务
基线名称    启用systemd服务
基线编号    Tophant-PostgreSQL-3
基线说明    确认PostgreSQL systemd服务已启用
配置方法    使用命令:systemctl enable postgresql-10
检查方法    使用命令:systemctl list-dependencies multi-user.target | grep -i postgres
备注    在操做系统上启用systemd服务可确保在发生状态更改时数据库服务处于活动状态,如系统启动或从新引导时。

2.1.4数据库集群初始化
基线名称    数据库集群初始化
基线编号    Tophant-PostgreSQL-4
基线说明    首次安装PostgreSQL须要初始化数据库集群。 数据库集群是由单个服务器实例管理的数据库集合。
配置方法    必须将数据库集群初始化到空目录中
检查方法    使用命令:/usr/pgsql-10/bin/postgresql-10-setup initdb
备注    错误地初始化数据集群将致使安装失败。

2.2目录和文件权限
2.2.1设置正确的文件权限掩码
基线名称    设置正确的文件权限掩码
基线编号    Tophant-PostgreSQL-5
基线说明    文件老是使用默认的权限集建立。能够经过umask的权限掩码来限制文件权限。postgres用户账户应使用077的umask拒绝对除全部者之外的全部用户账户的文件访问权限。
配置方法    使用以下命令:
1.echo "umask 077" >> .bash_profile
2.source .bash_profile
检查方法    使用以下命令:
1.su – postgres
2.umask
备注    linux操做系统将umask默认为002,这意味着全部者和主要组能够读取和写入文件,并容许其余账户读取该文件。未明确将umask设置为限制为077的值容许其余用户读取,写入甚至执行由postgres用户账户建立的文件和脚本

2.2.2配置PostgreSQL pg_wheel组成员关系
基线名称    配置PostgreSQL pg_wheel组成员关系
基线编号    Tophant-PostgreSQL-6
基线说明    在安装PostgreSQL服务器的主机上显式建立组pg_wheel。 经过使用sudo命令,此组中的成员身份容许普通用户账户得到对数据库群集的“超级用户”访问权限,只有得到超级用户访问权限的用户账户才应该是pg_wheel组的成员。
配置方法    参阅如下资料,根据实际状况配置:
https://man7.org/linux/man-pages/man1/groups.1.html
https://man7.org/linux/man-pages/man8/getent.1.html
https://man7.org/linux/man-pages/man8/gpasswd.1.html https://man7.org/linux/man-pages/man8/useradd.8.html https://en.wikipedia.org/wiki/Wheel_%28Unix_term%29
检查方法    1.使用getent group pg_wheel命令判断pg_wheel组是否存在
2.若是存在,使用以下命令验证:
awk -F':' '/pg_wheel/{print $4}' /etc/group
备注    拥有pg_wheel组未受权成员资格的用户能够拥有PostgreSQL RDBMS全部者的权限并管理数据库,以及访问他们没法访问的脚本,文件和其余可执行文件。

2.3日志监控和审计
2.3.1设置‘log_destination’
基线名称    设置‘log_destination’
基线编号    Tophant-PostgreSQL-7
基线说明    postgresql支持多种记录服务器消息的方法,包括stderr、csvlog和syslog。在windows上,也支持eventlog。应该为服务器日志输出设置一个或多个目标。
配置方法    执行如下sql语句(在本例中,将日志目的地设置为csvlog):
postgres=# alter system set log_destination = 'csvlog';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
检查方法    执行如下sql语句查看当前活动日志目的地:
postgres=# show log_destination;
log_destination
-----------------
stderr
(1 row)
备注    若是没有设置log_destination,那么核心postgresql进程生成的任何日志消息都将丢失。

2.3.2启用‘logging_collector’
基线名称    启用‘logging_collector’
基线编号    Tophant-PostgreSQL-8
基线说明    logging_collector是一个后台进程,它捕获发送到stderr的日志消息并将其重定向到日志文件。必须启用logging_collector设置才能运行此进程。它只能在服务器启动时设置。
配置方法    执行如下sql语句:
postgres=# alter system set logging_collector = 'on';
ALTER SYSTEM
检查方法    执行如下sql语句并确认logging_collector已启用:
postgres=# show logging_collector;
logging_collector
-------------------
on
(1 row)
备注    某些类型的消息可能不会出如今syslog输出中,启用logging_collector来收集更多的日志。

2.3.3设置日志文件的目标目录
基线名称    设置日志文件的目标目录
基线编号    Tophant-PostgreSQL-9
基线说明    当log_destination为stderr或csvlog时,log_directory设置指定日志文件的目标目录。 它能够指定为相对于集群数据目录($ PGDATA)或绝对路径。 应根据组织的日志记录策略设置log_directory。
配置方法    执行如下sql语句:
postgres=# alter system set log_directory='logs';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
postgres=# show log_directory;
log_directory
---------------
logs
(1 row)
检查方法    执行如下sql语句:
postgres=# show log_directory;
log_directory
---------------
log
(1 row)
备注    若是未设置log_directory,则将其解释为绝对路径'/',PostgreSQL将尝试在其中写入其日志(而且一般因为缺乏对该目录的权限而失败)。 应设置此参数以将日志定向到日志记录策略定义的相应目录位置。

2.3.4设置‘log_filename’
基线名称    设置‘log_filename’
基线编号    Tophant-PostgreSQL-10
基线说明    log_filename设置指定日志文件的文件名模式。log_filename的值应该与日志记录策略相匹配。
配置方法    执行如下sql语句:
postgres=# alter system set log_filename='postgresql-%Y%m%d.log';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
postgres=# show log_filename;
log_filename
-------------------
postgresql-%Y%m%d.log
(1 row)
检查方法    执行如下sql语句:
postgres=# show log_filename;
log_filename
-------------------
postgresql-%a.log
(1 row)
备注    若是没有设置log_filename,那么log_directory的值将被附加到一个空字符串中,postgresql将没法启动,由于它将尝试写入目录而不是文件。

2.3.5设置日志文件权限
基线名称    设置日志文件权限
基线编号    Tophant-PostgreSQL-11
基线说明    启用logging_collector时,log_file_mode设置肯定日志文件的文件权限。
配置方法    执行如下sql语句:
postgres=# alter system set log_file_mode = '0600';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
postgres=# show log_file_mode;
log_file_mode
---------------
0600
(1 row)
检查方法    执行如下sql语句:
postgres=# show log_file_mode;
log_file_mode
---------------
0600
(1 row)
备注    日志文件一般包含敏感数据。 容许没必要要地访问日志文件可能会无心中将敏感数据暴露给未经受权的人员。

2.3.6启用‘log_truncate_on_rotation’
基线名称    启用‘log_truncate_on_rotation’
基线编号    Tophant-PostgreSQL-12
基线说明    启用logging_collector时启用log_truncate_on_rotation设置会致使postgresql在日志旋转期间截断(覆盖)具备相同名称的现有日志文件,而不是附加到它们。
配置方法    执行如下sql语句:
postgres=# alter system set log_truncate_on_rotation = 'on';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
postgres=# show log_truncate_on_rotation;
log_truncate_on_rotation
--------------------------
on
(1 row)
检查方法    执行如下sql语句:
postgres=# show log_truncate_on_rotation;
log_truncate_on_rotation
--------------------------
off
(1 row)
备注    若是没有启用此设置,那么以生成静态名称的方式配置log_filename,则将覆盖以前存在的日志文件。

2.3.7设置log_rotation_age
基线名称    设置log_rotation_age
基线编号    Tophant-PostgreSQL-13
基线说明    当启用logging_collector时,log_rotation_age参数肯定单个日志文件的最大生存期(取决于log_filename的值)。
配置方法    执行如下sql语句:
postgres=# alter system set log_rotation_age='1h';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
检查方法    执行如下sql语句:
postgres=# show log_rotation_age;
log_rotation_age
------------------
1d
备注    Log_rotation是日志管理的标准最佳实践

2.3.8设置最大日志文件大小
基线名称    设置最大日志文件大小
基线编号    Tophant-PostgreSQL-14
基线说明    log_rotation_size设置肯定单个日志文件的最大值。 达到最大值后,将发生自动日志文件轮换。
配置方法    执行如下sql语句:
postgres=# alter system set log_rotation_size = '1GB';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
检查方法    执行如下sql语句:
postgres=# show log_rotation_size;
log_rotation_size
-------------------
1GB
(1 row)
备注    若是将其设置为零,将增长日志数据丢失的风险。 

2.3.9设置‘syslog_facility’
基线名称    设置‘syslog_facility’
基线编号    Tophant-PostgreSQL-15
基线说明    syslog_facility设置指定在启用日志记录到syslog时要使用的日志工具。
配置方法    执行如下sql语句:
postgres=# alter system set syslog_facility = 'LOCAL1';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
检查方法    执行如下sql语句:
postgres=# show syslog_facility;
syslog_facility
-----------------
local0
(1 row)
备注    若是未设置为适当的工具,PostgreSQL日志消息可能与其余应用程序的日志消息混合、路由错误或可能被丢弃。 

2.3.10配置PostgreSQL系统日志消息的程序名
基线名称    设置syslog_facility
基线编号    Tophant-PostgreSQL-16
基线说明    syslog_ident设置指定用于在syslog日志中标识PostgreSQL消息的程序名称。
配置方法    执行如下sql语句:
postgres=# alter system set syslog_ident = 'pg96';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
postgres=# show syslog_ident;
syslog_ident
--------------
pg96
(1 row)
检查方法    执行如下sql语句:
postgres=# show syslog_ident;
syslog_ident
--------------
postgres
(1 row)
备注    若是未正确设置,则可能没法将PostgreSQL消息与syslog日志中的其余消息区分开来。

2.3.11设置服务器日志级别
基线名称    设置服务器日志级别
基线编号    Tophant-PostgreSQL-17
基线说明    log_min_messages设置指定写入服务器日志的消息级别。级别越晚,发送的消息越少。
配置方法    执行如下sql语句:
postgres=# alter system set log_min_messages = 'warning';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
检查方法    执行如下sql语句:
postgres=# show log_min_messages;
log_min_messages
------------------
warning
(1 row)
备注    若是未将此值设置为正确值,则可能会向服务器日志写入太多消息或太少消息。

2.3.12设置‘log_min_error_statement’
基线名称    设置‘log_min_error_statement’
基线编号    Tophant-PostgreSQL-18
基线说明    log_min_error_statement设置将致使全部生成错误的sql语句在指定的严重级别或更高级别上被记录在服务器日志中。
配置方法    执行如下sql语句:
postgres=# alter system set log_min_error_statement = 'error';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
检查方法    执行如下sql语句:
postgres=# show log_min_error_statement;
log_min_error_statement
-------------------------
error
(1 row)
备注    ERROR被认为是最佳实践设置,应根据日志记录策略进行更改。

2.3.13禁用‘debug_print_parse’
基线名称    禁用'debug_print_parse'
基线编号    Tophant-PostgreSQL-19
基线说明    debug_print_parse设置容许为每一个执行的查询打印结果解析树。这些消息在日志消息级别发出,建议将此设置为off禁用此设置。
配置方法    执行如下sql语句:
postgres=# alter system set debug_print_parse='off';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
检查方法    执行如下sql语句
postgres=# show debug_print_parse;
debug_print_parse
-------------------
off
(1 row)
备注    启用任何debug_print_parse均可能致使敏感信息的日志记录。

2.3.14禁用‘debug_print_rewritten’
基线名称    禁用‘debug_print_rewritten’
基线编号    Tophant-PostgreSQL-20
基线说明    debug_print_rewritten设置容许为每一个执行的查询打印查询重写输出。 这些消息在LOG消息级别发出,建议禁用该设置。
配置方法    执行如下sql语句:
postgres=# alter system set debug_print_rewritten = 'off';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
检查方法    执行如下sql语句:
postgres=# show debug_print_rewritten;
debug_print_rewritten
-----------------------
off
(1 row)
备注    启用任何debug_print_rewritten可能会致使敏感信息的记录

2.3.15禁用‘debug_print_plan’
基线名称    禁用‘debug_print_rewritten’
基线编号    Tophant-PostgreSQL-21
基线说明    debug_print_plan设置容许打印每一个执行查询的执行计划。 这些消息在LOG消息级别发出,建议禁用该设置。
配置方法    执行如下sql语句:
postgres=# alter system set debug_print_plan = 'off';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
检查方法    执行如下sql语句:
postgres=# show debug_print_plan ;
debug_print_plan
------------------
off
(1 row)
备注    启用任何debug_print_plan可能会致使敏感信息的记录。

2.3.16启用‘debug_pretty_print’
基线名称    启用‘debug_pretty_print’
基线编号    Tophant-PostgreSQL-22
基线说明    启用debug_pretty_print会缩进debug_print_parse,debug_print_rewritten或debug_print_plan生成的消息,使它们更容易阅读。
配置方法    执行如下sql语句:
postgres=# alter system set debug_pretty_print = 'on';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
检查方法    执行如下sql语句:
postgres=# show debug_pretty_print ;
debug_pretty_print
--------------------
on
(1 row)
备注    若是禁用此设置,则使用“压缩”格式,从而大大下降了DEBUG语句日志消息的可读性。

2.3.17已启用“log_connections”
基线名称    启用“log_connections”
基线编号    Tophant-PostgreSQL-23
基线说明    启用log_connections设置每次尝试链接到服务器,以及成功完成客户端身份验证的操做。会话启动后没法更改此参数。
配置方法    执行如下sql语句:
postgres=# alter system set log_connections = 'on';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
检查方法    执行如下sql语句:
postgres=# show log_connections ;
log_connections
-----------------
on
(1 row)
备注    启用log_connecitons记录,以便往后审计。

2.3.18启用‘log_disconnections’
基线名称    启用‘log_disconnections’
基线编号    Tophant-PostgreSQL-24
基线说明    启用log_disconnections设置将记录每一个会话的结束时间,包括会话持续时间。此参数在会话启动后不能更改。
配置方法    执行如下sql语句:
postgres=# alter system set log_disconnections = 'on';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
检查方法    执行如下sql语句:
postgres=# show log_disconnections ;
log_disconnections
--------------------
on
(1 row)
备注    启用这些日志记录功能,才能检查失败尝试的链接、长链接或其余异常状况。

2.3.19设置‘log_error_verbosity’
基线名称    设置‘log_error_verbosity’
基线编号    Tophant-PostgreSQL-25
基线说明    log_error_verbosity设置指定日志的详细程度(详细的数量),有效值:
• TERSE
• DEFAULT
• VERBOSE
应根据实际状况设置适当的值。
配置方法    执行如下sql语句:
postgres=# alter system set log_error_verbosity = 'verbose';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
检查方法    执行如下sql语句:
postgres=# show log_error_verbosity ;
log_error_verbosity
---------------------
default
(1 row)
备注    若是没有设置为正确值,则可能会记录太多详细信息或太少的详细信息。

2.3.20禁用‘log_hostname’
基线名称    禁用‘log_hostname’
基线编号    Tophant-PostgreSQL-26
基线说明    启用log_hostname设置会记录链接主机的主机名。除非日志策略须要主机名日志记录,不然最好禁用此设置,以避免为每一个记录的语句产生dns解析的开销。
配置方法    执行如下sql语句:
postgres=# alter system set log_hostname='off';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
检查方法    执行如下sql语句:
postgres=# show log_hostname;
log_hostname
--------------
off
(1 row)
备注    根据您的主机名解析设置,启用此设置可能会带来不可忽略的性能损失。

2.3.21设置‘log_line_prefix’
基线名称    设置‘log_line_prefix’
基线编号    Tophant-PostgreSQL-27
基线说明    log_line_prefix设置指定每一个日志行为的printf样式前缀。若是为空,则不使用前缀。应该按照pgBadger开发团队的建议对其进行配置,默认值为<%m>。可用值以下:

配置方法    执行如下sql语句:
postgres=# alter system set log_line_prefix = '%m [%p]: [%l-1]
db=%d,user=%u,app=%a,client=%h ';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
检查方法    执行如下sql语句:
postgres=# show log_line_prefix;
log_line_prefix
-----------------
< %m >
(1 row)
备注    正确设置log_line_prefix容许向每一个日志条目(例如用户或数据库)添加其余信息。所描述的信息可用于审计或安全审查。

2.3.22设置‘log_statement’
基线名称    设置‘log_statement’
基线编号    Tophant-PostgreSQL-28
基线说明    log_statement设置指定记录的SQL语句的类型。根据实际状况设置适当值。
配置方法    执行如下sql语句:
postgres=# alter system set log_statement='ddl';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
检查方法    执行如下sql语句:
postgres=# show log_statement;
log_statement
---------------
none
(1 row)
备注    将log_statement设置为与日志记录策略保持一致有助于之后审核和查看数据库活动。 

2.3.23设置'log_timezone'
基线名称    设置'log_timezone'
基线编号    Tophant-PostgreSQL-29
基线说明    log_timezone设置指定在日志消息中的时间戳中使用的时区。 此值是群集范围的,所以全部会话都将一致地报告时间戳。应将其设置为GMT或UTC。
配置方法    执行如下sql语句:
postgres=# alter system set log_timezone = 'GMT';
ALTER SYSTEM
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
检查方法    执行如下sql语句:
postgres=# show log_timezone ;
log_timezone
--------------
US/Eastern
(1 row)
备注    应根据日志记录策略定义的适当时区配置日志条目时间戳,以确保在记录事件发生时不会产生混淆。

2.3.24启用‘pgAudit’
基线名称    启用‘pgAudit’
基线编号    Tophant-PostgreSQL-30
基线说明    PostgreSQL审计扩展(pgAudit)经过标准PostgreSQL日志记录工具提供详细的会话和对象审计日志记录。pgAudit的目标是为PostgreSQL用户提供生成审计日志的能力,这些日志一般须要符合政府,财务或ISO认证。
配置方法    1.安装pgAudit:yum -y install pgaudit12_10
2.启用pgAudit做为shared_preload_libraries参数中的扩展,经过pgaudit.log参数指示咱们要记录哪些语句类,参阅以下资料:
  https://www.pgaudit.org/
检查方法    执行如下sql语句:
postgres=# show shared_preload_libraries ;
shared_preload_libraries
--------------------------
pgaudit
(1 row)
备注    标准日志记录工具显示用户请求的内容,而pgAudit则关注数据库知足请求时发生的详细信息。

2.4用户访问和受权
2.4.1配置sudo
基线名称    配置sudo
基线编号    Tophant-PostgreSQL-31
基线说明    访问postgres超级用户账户会受到限制,以阻止未经受权的访问。sudo经过将普通用户账户权限提高为PostgreSQL RDBMS超级用户来知足要求。应正确配置sudo。
配置方法    编辑/etc/sudoers配置文件,添加以下指令:
%pg_wheel ALL= /bin/su - postgres
检查方法    使用以下命令测试sudo调用:
sudo su - postgres
备注    没有sudo,就没法严格控制对超级用户账户的访问,也没法安全、受权地审计超级用户账户的使用。

2.4.2设置管理权限
基线名称    设置管理权限
基线编号    Tophant-PostgreSQL-32
基线说明    应该只有超级用户拥有超级管理员特权。用户不该该拥有建立角色、新建数据库、管理复制或执行任何其余被认为是特权操做的权限。通常来讲,普通用户只应得到与管理应用程序相适应的最低权限。
配置方法    若是任何常规或应用程序用户被授予过多的管理权限,则应当即经过PostgreSQL ALTER ROLE SQL命令删除这些权限。请使用psql –c命令查看用户的权限,而后根据输出的结果正确设置其权限。参阅如下资料:
https://www.postgresql.org/docs/10/static/sql-revoke.html
https://www.postgresql.org/docs/10/static/sql-createrole.html
https://www.postgresql.org/docs/10/static/sql-alterrole.html
检查方法    使用以下命令检查用户的权限:
psql -c“\du USERNAME”,其中USERNAME为用户名
备注    被授予过多特权的普通用户可能会执行管理命令,从而致使不可预估的后果。

2.4.3设置功能权限
基线名称    设置功能权限
基线编号    Tophant-PostgreSQL-33
基线说明    在某些状况下,为了提供所需的功能,postgresql须要执行内部逻辑语句(存储过程、函数、触发器等)或具备更高特权的外部代码模块。可是,若是执行所需的特权高于分配给调用该应用程序功能的用户的特权,那么这些用户将间接地得到了更大的特权。这就是所谓的特权提高。特权提高只能在必要时使用。应用程序功能的执行权限应该只限制于受权用户。
配置方法    参与如下资料:
https://www.postgresql.org/docs/10/static/catalog-pg-proc.html
https://www.postgresql.org/docs/10/static/sql-grant.html
https://www.postgresql.org/docs/10/static/sql-revoke.html
https://www.postgresql.org/docs/10/static/sqlcreatefunction.htm
检查方法    执行如下sql语句:
psql -c "SELECT nspname, proname, proargtypes, prosecdef, rolname,
备注    dba应该检查存储在数据库中的全部应用程序逻辑(以函数、规则和触发器的形式)是否有过多的特权。

2.4.4设置DML权限
基线名称    设置DML权限
基线编号    Tophant-PostgreSQL-34
基线说明    DML(插入,更新,删除)操做应仅限于受权用户。 PostgreSQL经过GRANT语句管理DML权限。
配置方法    使用REVOKE SQL命令删除过多的DML权限,详情请参阅如下资料:
https://www.postgresql.org/docs/10/static/sql-grant.html
https://www.postgresql.org/docs/10/static/sql-revoke.html
https://www.postgresql.org/docs/10/static/functions-info.html#functions-infoaccess-table
https://wiki.postgresql.org/wiki/A_Guide_to_CVE-2018-1058:_Protect_Your_Search_Path
https://nvd.nist.gov/vuln/detail/CVE-2018-1058
检查方法    使用\ du + * SQL命令清点群集中定义的全部用户,以及使用\ dt *.* SQL命令在数据库中定义的全部表。 此外,能够经过查询系统目录pg_tables和pg_user来得到表和用户受权的交集矩阵。
备注    过多的DML受权可能致使无特权的用户在未经适当受权的状况下更改或删除信息。

2.4.5启用‘pg_permission’
基线名称    启用‘pg_permission’
基线编号    Tophant-PostgreSQL-35
基线说明    使用pg_permissions扩展,能够声明哪些DB用户应该对给定对象具备哪些权限,并生成合规性的报告。
配置方法    从扩展程序的站点下载最新版本,编译安装,而后启用它,详情参阅以下资料:
https://github.com/cybertec-postgresql/pg_permission
检查方法    使用如下sql语句:
postgres=# select * from pg_available_extensions where name =
'pg_permission';
name | default_version | installed_version | comment
------+-----------------+-------------------+---------
(0 rows)
备注    pg_permissions扩展极大地简化了postgresql数据库中的审计权限。

2.4.6配置行级安全性(RLS)
基线名称    配置行级安全性(RLS)
基线编号    Tophant-PostgreSQL-36
基线说明    除了经过GRANT提供的SQL标准权限系统以外,表还能够具备行安全策略,这些策略基于每一个用户限制正常查询能够返回哪些行,或者经过数据修改命令插入,更新或删除哪些行。此功能也称为行级安全性(RLS)。
配置方法    参阅如下资料:
https://www.postgresql.org/docs/10/static/ddl-rowsecurity.html https://www.postgresql.org/docs/10/static/sql-alterrole.html
检查方法    使用如下sql语句:
postgres=# SELECT oid, relname, relrowsecurity FROM pg_class WHERE
relrowsecurity;
备注    若是未正确配置RLS策略和权限,则用户能够对未受权执行的表执行操做,例如插入,更新或删除行。

2.4.7使用默认角色
基线名称    使用默认角色
基线编号    Tophant-PostgreSQL-37
基线说明    PostgreSQL提供了一组默认角色,能够访问某些经常使用的特权功能和信息。 管理员能够将这些角色授予其环境中的用户和/或其余角色,从而为这些用户提供对指定功能和信息的访问权限。
配置方法    使用以下sql语句:
postgres=# GRANT pg_monitor TO doug;
postgres=# ALTER ROLE doug NOSUPERUSER;
postgres=# select rolname from pg_roles where rolsuper is true;
检查方法    使用命令:psql
备注    根据最小权限原则,使用PostgreSQL默认角色能够极大地限制对特权或超级用户访问的访问。

2.5链接和登陆
2.5.1配置本地UNIX域套接字安全登陆
基线名称    配置本地UNIX域套接字安全登陆
基线编号    Tophant-PostgreSQL-38
基线说明    经过ssh远程主机登陆能够说是远程访问和管理postgresql服务器的最安全的方法。经过unix域套接字链接到psql客户机,使用对等身份验证方法是本地链接可用的最安全的机制。
配置方法    参阅如下资料:
https://www.postgresql.org/docs/10/static/client-authentication.html
https://www.postgresql.org/docs/10/static/auth-pg-hba-conf.html
检查方法    用su命令切换到普通用户,而后经过psql -U postgres -d postgres语句测试。
备注    若是数据库中已经定义了与unix账户同名的数据库用户账户,即便是普通用户账户也能够以相似的高度安全的方式访问集群。

2.6PostgreSQL设置
2.6.1配置‘attack vector’运行时参数
基线名称    配置‘attack vector’运行时参数
基线编号    Tophant-PostgreSQL-39
基线说明    经过特定的传递方法或攻击向量了解PostgreSQL运行时参数的漏洞。
配置方法    在更改参数的状况下,该值将返回其默认值。 在成功利用已设置的运行时参数的状况下,必须执行分析以肯定减轻风险的最佳方法。
检查方法    检查全部的配置设置。 配置PostgreSQL日志记录以记录对RDBMS的全部修改和更改。
备注    与运行时参数同样,有许多方法能够破坏服务器。 在适当的条件下执行的任何一个或多个的组合有可能危及RDBMS。

2.6.2配置‘backend’运行时参数
基线名称    配置‘backend’运行时参数
基线编号    Tophant-PostgreSQL-40
基线说明    为了有效地为多个客户端服务,PostgreSQL服务器为每一个客户端启动一个新的“后端”进程。
配置方法    1.查询视图pg_settings并与以前的查询输出进行比较以了解是否被更改。
2.检查配置文件postgresql.conf和postgresql.auto.conf,并将它们与先前存档的文件副本进行比较,查看是否被更改。
3.检查进程输出并查找服务器启动时使用的参数:
ps aux | grep -E '[p]ostgres|[p]ostmaster'
检查方法    执行如下sql语句:
postgres=# SELECT name, setting FROM pg_settings WHERE context IN ('backend','superuser-backend') ORDER BY 1;
备注    

2.6.3配置‘Postmaster’运行时参数
基线名称    配置‘Postmaster’运行时参数
基线编号    Tophant-PostgreSQL-41
基线说明    由postmaster进程执行的postgresql运行时参数。
配置方法    1.查询视图pg_settings并与以前的查询输出进行比较
变化
2.查看配置文件postgresql.conf和postgresql.auto.conf和
与任何更改以前存档的文件副本比较
3.检查进程输出并查找服务器启动时使用的参数:
  ps aux | grep -E '[p]ostgres|[p]ostmaster'
检查方法    执行如下sql语句:
SELECT name, setting FROM pg_settings WHERE context = 'postmaster' ORDER BY 1;
备注    postmaster管理密钥运行时参数,这些参数由全部后端链接共享或由postmaster进程自己运行所需。

2.6.4配置‘SIGHUP’运行时参数
基线名称    配置‘SIGHUP’运行时参数
基线编号    Tophant-PostgreSQL-42
基线说明    由SIGHUP信号执行的PostgreSQL运行时参数。
配置方法    恢复PostgreSQL配置文件中的全部值并调用服务器以从新加载配置文件。
检查方法    执行如下sql语句:
postgres=# SELECT name, setting FROM pg_settings WHERE context = 'sighup'
ORDER BY 1;
备注    为了定义服务器行为并优化服务器性能,服务器的超级用户有权设置这些参数,这些参数可在配置文件postgresql.conf和pg_hba.conf中找到。

2.6.5配置‘Superuser’运行时参数
基线名称    配置‘Superuser’运行时参数
基线编号    Tophant-PostgreSQL-43
基线说明    PostgreSQL运行时参数只能由服务器的超级用户执行。
配置方法    1.查询视图pg_settings并与以前的查询输出进行比较。
2.查看配置文件postgreql.conf和postgreql.auto.conf,并与之前存档的文件副本进行比较。
3.检查进程输出并查找服务器启动时使用的参数:
  ps aux | grep -E '[p]ostgres|[p]ostmaster'
检查方法    执行如下sql语句:
# SELECT name, setting FROM pg_settings WHERE context = 'superuser'
ORDER BY 1;
备注    为了改进和优化服务器性能,服务器的超级用户有权设置这些参数,这些参数可在配置文件postgresql.conf中找到。

2.6.6使用FIPS 140-2 OpenSSL加密
基线名称    使用FIPS 140-2 OpenSSL加密
基线编号    Tophant-PostgreSQL-44
基线说明    在具备NIST认证的FIPS 140-2 OpenSSL的平台上安装、配置和使用OpenSSL。 这为PostgreSQL提供了生成和验证加密哈希的能力。 
配置方法    参阅如下资料:
https://access.redhat.com/documentation/enUS/Red_Hat_Enterprise_Linux/6/html/Security_Guide/sect-Security_GuideFederal_Standards_And_RegulationsFederal_Information_Processing_Standard.html
https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validationprogram/documents/security-policies/140sp1758.pdf
https://csrc.nist.gov/publications/fips
检查方法    使用命令:cat /proc/sys/crypto/fips_enabled,若是输出的为1,则系统启用了FIPS,不然,为启用。
备注    使用该设置能够根据数据全部者的要求保护须要机密性和加密保护的非机密信息。

2.6.7启用并配置SSL
基线名称    启用并配置SSL
基线编号    Tophant-PostgreSQL-45
基线说明    应启用PostgreSQL服务器上的SSL(设置为on)并配置为加密进出服务器的全部TCP流量。
配置方法    参阅如下资料:
https://www.postgresql.org/docs/10/static/ssl-tcp.html
http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-52r1.pdf
https://www.postgresql.org/docs/10/static/libpq-ssl.html
检查方法    执行如下sql语句:
postgres=# SELECT name, setting, source FROM pg_settings WHERE name = 'ssl';
备注    若是未正确启用和配置SSL,则会增长数据在传输过程当中受到危害的风险。

2.6.8安装和配置pgcrypto扩展
基线名称    安装和配置pgcrypto扩展
基线编号    Tophant-PostgreSQL-46
基线说明    PostgreSQL必须实施加密机制,以防止在定义的信息系统组件上未经受权地公开或修改定义的静态信息(至少包括PII和机密信息)。
配置方法    执行如下sql语句:
CREATE EXTENSION pgcrypto;
postgres=# SELECT * FROM pg_available_extensions WHERE name='pgcrypto';
检查方法    执行如下sql语句:
SELECT * FROM pg_available_extensions WHERE name='pgcrypto';
备注    postgresql处理须要保护的数据时,必须使用加密机制来防止未经受权的泄露和修改静态信息。

2.7备份
2.7.1建立仅用于流复制的用户
基线名称    建立仅用于流复制的用户
基线编号    Tophant-PostgreSQL-47
基线说明    建立专门用于流复制的新用户,而不是使用超级管理员帐户。
配置方法    执行如下sql语句:
create user replication_user REPLICATION encrypted password 'XXX';
postgres=# select rolname from pg_roles where rolreplication is true;
检查方法    执行如下sql语句:
postgres=# select rolname from pg_roles where rolreplication is true;
备注    专门建立用于流复制的用户,能够进一步“锁定”超级用户账户的使用,并遵循使用必要的最小权限的通常原则。

2.7.2配置‘base backup’
基线名称    配置‘base backup’
基线编号    Tophant-PostgreSQL-48
基线说明    “base backup”是PRIMARY主机数据集群($ PGDATA)的副本,用于建立STANDBY主机和Point In Time Recovery(PITR)机制。 应使用加密传输机制以安全的方式跨网络复制基本备份。
配置方法    在备用服务器上执行如下步骤:
pg_basebackup -h name_or_IP_of_master \
-p 5432 \
-U replication_user \
-D ~postgres/10/data \
-P -v -R -Xs \
检查方法    
备注    

2.7.3配置‘WAL archiving’
基线名称    配置‘WAL archiving’
基线编号    Tophant-PostgreSQL-49
基线说明    WAL archiving是将事务日志文件从PRIMARY主机发送到一个或多个STANDBY主机或者在远程存储设备上存档以供之后使用的过程,例如,PITR。 有几个实用程序能够复制WAL,包括但不限于cp,scp,sftp和rynsc。
配置方法    根据须要更改参数并从新启动服务器。参阅如下资料:
https://www.postgresql.org/docs/10/static/runtime-config-wal.html#RUNTIMECONFIG-WAL-ARCHIVING
https://linux.die.net/man/1/ssh-keygen
检查方法    查看postgresql.conf中的运行参数。
备注    除非正确配置了服务器,不然就有可能以不安全、不加密的方式发送wals。

2.7.4配置流复制参数
基线名称    配置流复制参数
基线编号    Tophant-PostgreSQL-50
基线说明    来自PRIMARY主机的流复制传输DDL,DML,密码和其余可能敏感的活动和数据。应使用安全套接字层(SSL)保护这些链接。 
配置方法    确认文件recovery.conf存在于STANDBY主机上,并包含相似于如下内容的行:
standby_mode=on
primary_conninfo = 'user=replication_user password=mypassword host=mySrcHost
port=5432 sslmode=require sslcompression=1'
检查方法    执行如下sql语句:
postgres=> select rolname from pg_roles where rolreplication is true;
备注    未加密的传输可能会向未受权方泄露敏感信息以及未经身份验证的链接能够实现中间人攻击。

2.8特殊配置注意事项
2.8.1设置PostgreSQL配置文件的存储位置
基线名称    设置PostgreSQL配置文件的存储位置
基线编号    Tophant-PostgreSQL-51
基线说明    任何以超级用户身份登陆数据集群(即postgres)均可以更改数据集群目录树中的PostgreSQL配置文件。做为默认策略,诸如postgresql.conf,pg_hba.conf和pg_ident之类的配置文件放在数据集群的目录$ PGDATA中。 能够将PostgreSQL配置为将这些文件重定位到数据集群外部的位置,而后普通的超级用户没法访问这些位置。
配置方法    1.根据安全策略肯定可从新定位的配置文件的适当位置。 若有必要,请在数据集群外部从新定位或重命名配置文件。
2.确保尽量限制其文件权限,即仅限超级用户读取权限。
3.在postgresql.conf配置文件中相应更改设置。
4.从新启动数据库集群以使更改生效。
检查方法    执行如下sql语句:
postgres=# select name, setting from pg_settings where name ~ '.*_file$';
备注    将PostgreSQL配置文件保留在数据集群的目录树中会增长配置文件被篡改的可能性。

2.8.2设置PostgreSQL子目录位置
基线名称    设置PostgreSQL子目录位置
基线编号    Tophant-PostgreSQL-52
基线说明    postgresql集群用于在子目录中执行特定的任务。出于性能、可靠性和安全性的考虑,应该将这些子目录从新定位到数据集群以外。
配置方法    1.根据组织的安全策略肯定适当的数据,日志和表空间目录和位置。 若有必要,请将全部列出的目录从新定位到数据集群以外。
2.确保尽量限制文件权限,即仅限超级用户读访问权限。
3.将目录重定位到其余分区时,请确保它们足够大,以减小过多的空间利用率。
4.最后,在postgresql.conf配置文件中相应地更改设置,而后从新启动数据库集群以使更改生效。
检查方法    执行如下sql语句:
postgres=# select name, setting from pg_settings where (name ~ '_directory$' or name ~ '_tablespace');
备注    有些子目录包含一些信息,好比日志,这些信息对开发人员等其余人可能有价值。

2.8.3安装配置‘pgBackRest’工具
基线名称    安装配置‘pgBackRest’工具
基线编号    Tophant-PostgreSQL-53
基线说明    gBackRest旨在成为一个简单,可靠的备份和恢复系统,能够无缝扩展到最大的数据库和工做负载。 pgBackRest不依赖于tar和rsync等传统备份工具,而是在内部实现全部备份功能,并使用自定义协议与远程系统进行通讯。 消除对tar和rsync的依赖能够为数据库特定的备份挑战提供更好的解决方案。
配置方法    参阅以下资料:
https://pgbackrest.org/
https://github.com/pgbackrest/pgbackrest
https://www.postgresql.org/docs/10/static/app-pgdump.html
https://www.postgresql.org/docs/10/static/app-gbasebackup.html
检查方法    使用命令:pgbackrest
备注    自定义远程协议容许更大的灵活性,并限制执行备份所需的链接类型,从而提升安全性。建议安装该工具。

Windows系统加固方案

服务器加固方案

1、服务器登记
此前已要求各二层单位对服务器进行100%登记,可经过OPS登记服务器信息,并在次日登陆SOC系统查看。现各二层单位可采起自查自纠方式,对服务器登记状况进行检查,以避免遗漏,NAS做为服务器进行登记。同时,若是服务器有外网IP,需及时在OPS系统进行登记。
服务器登记的具体操做可参考附件1。
2、服务器加固
此前已要求各二层单位对服务器进行安检达标,具体操做可参考附件1执行。现有如下几点须要增强执行:
1、增强Windows服务器补丁升级工做,全部的Windows服务器必须及时进行补丁升级工做,6月补丁升级具体操做指导连接:
https://it.x.com.cn/its/app/articlePub/RkmArticlePub/getDataDetailByArticleId.action?rkmArticlePub.articleId=KBA00032818&rkmArticlePub.requestId=KBA000000035812
可在IT网站-常见问题-搜索“补丁”-找到时间点最近的Windows服务器操做系统补丁升级操做指导。
Windows XP、Windows 2000、Windows 2003已中止服务,建议升级到Windows Server 2012 R2。
2、增强Windows服务器防病毒软件安装及病毒库升级工做,全部的Windows服务器必须安装防病毒软件并按期升级病毒库,McAfee支持的Windows操做系统以下:


下载连接以下,根据操做系统选择对应的版本进行下载安装。
https://it.x.com.cn/its/app/download/Download/getDownloadDetails.action?download.itsInfoDownloadId=1608
若服务器因为网络没法进行病毒库的自动升级,服务器管理员至多每隔三个月进行手动升级,手动升级病毒库的操做步骤以下:
1)病毒库下载连接
https://it.x.com.cn/its/app/download/Download/getDownloadDetails.action?download.itsInfoDownloadId=1608
2)根据防病毒软件版本下载最新版本的病毒库,上传至服务器并运行。
3、使用强密码策略,包括服务器上运行的服务、程序,如数据库、SSH、FTP等。密码复杂度要求:
1)长度至少8位;
2)至少包括大写字母、小写字母、数字、特殊符号中的3种;
3)不使用如x、admin、root、ssh、postgres、qaz、wsx等易被猜解的字符组合。
3、Windows服务器加固项
序号    检查项    检查方法
1    禁用非必要的端口和服务    1.打开命令提示符,运行命令“services.msc”打开服务管理器,中止显示名称为“Simple TCP/IP Services”或“简单 TCP/IP 服务”的服务。
2.打开命令提示符,运行命令“services.msc”打开服务管理器,中止显示名称为“Simple Mail Transport Protocol (SMTP)”的服务。
3.打开命令提示符,运行命令“services.msc”打开服务管理器,中止显示名称为“Windows Internet Name Service (WINS)”或“WINS”的服务。
4.打开命令提示符,运行命令“services.msc”打开服务管理器,中止显示名称为“DHCP Server”的服务。(DHCP服务器除外)
5.打开命令提示符,运行命令“services.msc”打开服务管理器,中止显示名称为“DHCP Client”的服务。
6.打开命令提示符,运行命令“services.msc”打开服务管理器,中止显示名称为“Message Queuing”的服务。
6.打开命令提示符,运行命令“services.msc”打开服务管理器,中止显示名称为“Message Queuing”的服务。
2    删除或禁用全部没必要要的文件共享(如默认硬盘共享)    
3    检查是否已限制可关闭系统的账户和组(备用帐号,操做系统自动产生的帐号,安装软件或组件自动产生的帐号不该删除)    打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\计算机配置\Windows设置\安全设置\本地策略\用户权限分配”,在右边窗格中找到“关闭系统”,配置为Account Operators、Administrators、Backup Operators、Print Operators和Server perators。
4    检测密码长度和复杂性策略    1.打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\计算机配置\Windows设置\安全设置\账户策略\密码策略”,在右边窗格中找到“密码必须符合复杂性要求”,配置为“已启用”。
2.打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\计算机配置\Windows设置\安全设置\账户策略\密码策略”,在右边窗格中找到“密码长度最小值”,配置为大于等于8个字符。
5    检测采用静态口令认证技术的设备,帐户密码最长使用期限(不超过90天)    1.打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\计算机配置\Windows设置\安全设置\账户策略\密码策略”,在右边窗格中找到“密码最长存留期(使用期限)”,配置为非0值。0值表示密码永不过时。
2.打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\计算机配置\Windows设置\安全设置\账户策略\密码策略”,在右边窗格中找到“密码最长存留期(使用期限)”,配置为90天之内的值。
6    检测采用静态口令认证技术的设备用户不能重复使用最近10次内(含10次)已使用的口令    打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\计算机配置\Windows设置\安全设置\账户策略\密码策略”,在右边窗格中找到“强制密码历史”,配置为不小于10个
7    检查Guest用户是否禁用    打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\计算机配置\Windows设置\安全设置\本地策略\安全选项”,在右边窗格中找到“(账户:)来宾账户状态”,配置为“已禁用”。
8    检查iuserIUSR_{System}帐号配置是否合理(只属于guests组)    打开命令提示符,运行命令“compmgmt.msc”打开计算机管理面板,浏览到路径“计算机管理(本地)\系统工具\本地用户和组\用户”,检查是否存在IUSR_{System}帐号,若是存在,则其应只属于Guests组,而不属于其它任何组。
9    检测是否启用对Windows系统的审核策略更改    打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\计算机配置\Windows设置\安全设置\本地策略\审核策略”,在右边窗格中找到“审核策略更改”,勾选“成功”和“失败”。
10    检测是否启用对Windows系统的审核对象访问    打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\计算机配置\Windows设置\安全设置\本地策略\审核策略”,在右边窗格中找到“审核对象访问”,勾选“成功”和“失败”。
11    检测是否启用Windows系统审核目录服务访问    打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\计算机配置\Windows设置\安全设置\本地策略\审核策略”,在右边窗格中找到“审核目录服务访问”,勾选“成功”和“失败”。
12    检测是否启用Windows系统审核特权使用    打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\计算机配置\Windows设置\安全设置\本地策略\审核策略”,在右边窗格中找到“审核特权使用”,勾选“成功”和“失败”。
13    检测是否启用Windows系统审核系统事件    打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\计算机配置\Windows设置\安全设置\本地策略\审核策略”,在右边窗格中找到“审核系统事件”,勾选“成功”和“失败”。
14    检测是否启用Windows系统的审核帐户管理    打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\计算机配置\Windows设置\安全设置\本地策略\审核策略”,在右边窗格中找到“审核账户管理”,勾选“成功”和“失败”。
15    检测是否启用Windows系统的审核进程追踪    打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\计算机配置\Windows设置\安全设置\本地策略\审核策略”,在右边窗格中找到“审核进程跟踪”,勾选“成功”和“失败”。
16    检测是否设置审核登陆事件    打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\计算机配置\Windows设置\安全设置\本地策略\审核策略”,在右边窗格中找到“审核登陆事件”,勾选“成功”和“失败”。
17    检测是否设置审核帐户登陆事件    打开命令提示符,运行命令“gpedit.msc”打开组策略编辑器,浏览到路径“本地计算机策略\计算机配置\Windows设置\安全设置\本地策略\审核策略”,在右边窗格中找到“审核账户登陆事件”,勾选“成功”和“失败”。
18    检测应用日志设置是否知足规范(至少保留180天,按天覆盖,最大值至少50M)    1.打开命令提示符,运行命令“eventvwr.msc”打开事件查看器,浏览到路径“事件查看器(\Windows日志)\应用程序(日志)”,右键点击“应用程序(日志)”,打开其属性对话框,切换到“常规”选项卡,配置“日志文件达到最大大小时”为“按须要改写(覆盖)事件”。
2.打开命令提示符,运行命令“eventvwr.msc”打开事件查看器,浏览到路径“事件查看器(\Windows日志)\应用程序(日志)”,右键点击“应用程序(日志)”,打开其属性对话框,切换到“常规”选项卡,配置“日志文件最大大小”为不小于50M。
19    检测系统日志设置是否知足规范(至少保留180天,按天覆盖,最大值至少50M)    1.打开命令提示符,运行命令“eventvwr.msc”打开事件查看器,浏览到路径“事件查看器(\Windows日志)\ 系统(日志)”,右键点击“系统(日志)”,打开其属性对话框,切换到“常规”选项卡,配置“日志文件达到最大大小时”为“按须要改写(覆盖)事件”。
2.打开命令提示符,运行命令“eventvwr.msc”打开事件查看器,浏览到路径“事件查看器(\Windows日志)\ 系统(日志)”,右键点击“系统(日志)”,打开其属性对话框,切换到“常规”选项卡,配置“日志文件最大大小”为不小于50M。
20    检测安全日志设置是否知足规范(至少保留180天,按天覆盖,最大值至少50M)    1.打开命令提示符,运行命令“eventvwr.msc”打开事件查看器,浏览到路径“事件查看器(\Windows日志)\安全(日志)”,右键点击“安全(日志)”,打开其属性对话框,切换到“常规”选项卡,配置“日志文件达到最大大小时”为“按须要改写(覆盖)事件”。
2.打开命令提示符,运行命令“eventvwr.msc”打开事件查看器,浏览到路径“事件查看器(\Windows日志)\安全(日志)”,右键点击“安全(日志)”,打开其属性对话框,切换到“常规”选项卡,配置“日志文件最大大小”为不小于50M

4、Linux服务器加固项
序号    检查项    检查方法
1    检查用户帐号设置是否符合要求(每一个UID只能使用一次,并惟一对应一个操做系统;root帐号UID为0;root帐号是root组的惟一用户)    每一个UID必须只能用一次,并惟一对应一个操做系统用户帐号。root帐号的UID必须是惟一的0,且是root组惟一的帐号。查看/etc/passwd文件,看是否符合要求。
 https://www.cnblogs.com/songxingzhu/p/6364700.html   /etc/passwd详解
https://blog.csdn.net/yaofeino1/article/details/54616440   /etc/shadow 和 /etc/passwd区别
问的最多的问题:第三个冒号后为组号GID, 只能root为0,其余不能为0,请检查并修改。
2    检查某些特定帐号是否已按要求删除    games
uucp
lp
ftp
news
rpcuser
mail
删除帐户userdel name
或/etc/passwd 下对应帐号前加#
3    检查某些特意组是否已按要求删除    lp
mail
news
uucp
games
ftp
floppy
mailnull
删除组 groupdel name
或/etc/group 下对应帐号前加#
4    查是否设置口令生存周期(不超过90天)    在文件/etc/login.defs中设置 PASS_MAX_DAYS 不大于标准值,PASS_MAX_DAYS 90,若是该文件不存在,则建立并按照要求进行编辑
vi  /etc/login.defs,配置PASS_MAX_DAYS 90
5    检查是否设置口令更改最小间隔天数(2天)    在文件/etc/login.defs中设置 PASS_MIN_DAYS 不小于2
vi  /etc/login.defs,配置PASS_MIN_DAYS 2
6    检查设备密码复杂度策略    a)  最小密码长度:8;
b)  小写字母最小数量:1;
c)  大写字母最小数量:1;
d)  普通数字最小数量:1;
e) 其它字符最少数量:1。
 执行 vi /etc/pam.d/system-auth,找打有“password”和“pam_cracklib.so”的行,将ucredit、 lcredit、 dcredit、 ocredit的值设置为-1。
password    required      pam_cracklib.so try_first_pass retry=3 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 minlen=8
ubuntu、Debain   为  /etc/pam.d/common-password
7    检查口令最小长度(8位)    8位
vi  /etc/login.defs,配置PASS_MIN_LEN值为8
8    检查是否设置口令过时前警告天数(14天)    在文件/etc/login.defs中设置 PASS_WARN_AGE 不小于14天
vi  /etc/login.defs,配置PASS_WARN_AGE值为14。
9    检查密码重复使用次数限制(最近10次不一样)    编辑/etc/pam.d/system-auth文件,修改设置以下 password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=10
10    检查umask值是否符合要求    检查文件/etc/bashrc(或/etc/bash.bashrc)中设置 umask 077或UMASK 077
检查/etc/bashrc(或~/.bashrc),设置umask值为077。
11    禁止Core Dump    编辑/etc/security/limits.conf增长:
 * soft core 0
 * hard core 0
中间用tab键对齐
12    检查是否对登陆进行日志记录    last命令能够查询
13    关闭不须要的基本系统服务    禁止
ntp
chrony
x window
avahi
cups
dhcp
ldap
nfs
dns
ftp
http
imap
samba
squid
snmp
mail  transfer
nis
rsh
talk
telnet
tftp
rsync
squid
talk
telnet
tftp
time
time-udp
vsftpd
webmin
winbind
wu-ftpd
xinetd
ypbind
chkconfig --list  查询服务
chkconfig --del XXX  或 service XXX stop  删除服务  
service --status-all
14    禁止路由重定向    cat  /proc/sys/net/ipv4/conf/all/accept_redirects,输出应该为0
vi /etc/sysctl.conf修改值
net.ipv4.conf.all.accept_redirects=0  
执行/sbin/sysctl -e -p /etc/sysctl.conf
15    禁止源站路由    cat  /proc/sys/net/ipv4/conf/all/accept_source_route,输出应该为0
vi /etc/sysctl.conf修改值
net.ipv4.conf.all.accept_source_route=0 
执行/sbin/sysctl -e -p /etc/sysctl.conf 
16    禁止Echo回应广播    cat  /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts,输出应该为1
vi /etc/sysctl.conf修改值
net.ipv4.icmp_echo_ignore_broadcasts=1 
执行/sbin/sysctl -e -p /etc/sysctl.conf
17    检查是否启用TCP SYN Cookie保护    cat  /proc/sys/net/ipv4/tcp_syncookies,输出应该为1
vi /etc/sysctl.conf修改值
net.ipv4.tcp_syncookies=1    
执行/sbin/sysctl -e -p /etc/sysctl.conf
18    禁止路由转发     cat  /proc/sys/net/ipv4/ip_forward ,输出应该为0
vi /etc/sysctl.conf修改
net.ipv4.ip_forward=0   
执行/sbin/sysctl -e -p /etc/sysctl.conf
19    检查日志文件权限设置    1.若是为redhat,suse9,则备份/etc/syslog.conf(或/etc/rsyslog.conf)文件中配置的日志文件,若是为suse10,suse11,则备份/etc/syslog-ng文件中配置的日志文件. 2.若是日志服务为syslogd,则执行: LOGDIR=`cat /etc/syslog.conf 2>/dev/null | grep -v "^[[:space:]]*#"|sed '/^#/d' |sed '/^$/d' |awk '(($2!~/@/) && ($2!~/*/) && ($2!~/-/)) {print $2}';`;ls -l $LOGDIR 2>/etc/null | grep "^-";跳转至步骤3. 若是日志服务为syslog-ng,则执行: LOGDIR=`cat /etc/syslog-ng/syslog-ng.conf 2>/dev/null | grep -v "^[[:space:]]*#"|grep "^destination"|grep file|cut -d\" -f2`;ls -l $LOGDIR 2>/dev/null | grep "^-";跳转至步骤3. 若是日志服务为rsyslogd,则执行: LOGDIR=`cat /etc/rsyslog.conf | grep -v "^[[:space:]]*#" |sed '/^#/d' |sed '/^$/d' |awk '(($2!~/@/) && ($2!~/*/) && ($2!~/-/)) {print $2}'`;ls -l $LOGDIR 2>/etc/null | grep "^-";跳转至步骤3. 3.步骤2列出的文件中,同组用户、其余用户权限中不能出现r-x,rw-,rwx。 执行下列命令,修改步骤2中列出出来的不符合标准值的文件权限。 例如修改权限为640 #chmod 640 <filename> 或者修改权限为600 #chmod 600 <filename> 注:权限值没有限定,只要知足同组用户、其余用户不出现r-x,rw-,rwx便可。
20     检查安全事件日志配置    审计内容应包括重要用户行为、系统资源的异常使用和重要系统命令的使用等系统内重要的安全相关事件,好比编辑/etc/syslog.conf 配置: *.err;kern.debug;daemon.notice /var/adm/messages 其中/var/adm/messages为日志文件。 若是该文件不存在,则建立该文件,命令为: touch /var/adm/messages,并修改权限为666.命令为:chmod 666 /var/adm/messages. 重启日志服务: #/etc/init.d/syslog restart
   ubuntu是 ​/etc/rsyslog.conf




5、漏洞管理
由渗透测试组对全部服务器不按期进行漏洞扫描、渗透测试,发现的漏洞将经过各部门接口人派发到设备责任人处进行处置,请责任人及时完成漏洞加固,并经过接口人反馈加固进展。

6、入侵管理
服务器EDR(入侵检测及响应)工具已经完成功能性测试,可提供测试用的License供有须要的部门使用。

安全加固概述

 
 

安全加固是对主机、应用系统、中间件、数据库等被加固对象的漏洞进行修复,并配置合适的安全策略以达到对象的安全基线标准要求的工程实施过程。

 
 

安全加固原则

 
 

标准性原则——加固方案的设计与实施应依据国内或国际的相关标准进行。标准性原则确保安全加固过程的规范、合理,并为安全加固成果提供了质量保证。

 
 

可控性原则——加固的方法和过程均在各个负责人承认的范围以内,加固服务的实际进度与进度表安排一致,保证各个系统负责人对加固工做的可控性;每一步加固动做,都须要评估存在的失败风险和回退策略

 
 

总体性原则——加固的范围和内容应当总体全面,包括安全涉及的各个层面,以避免因为遗漏形成将来的安全隐患。

 
 

最小影响原则——加固工做应尽量小的影响系统和网络的正常运行,不能对正在的运行和业务的正常提供产生显著不利影响。具体体如今项目实施的时候,首先,安全加固在业务不繁忙时段进行;其次,有主备的主机系统和设备,首先在备机上进行安全加固,确信对业务系统不会有不利影响后方在主机上实施相应的安全加固;对于特别重要的系统和设备,若不知足直接对本机进行安全加固的条件,则应考虑采起其余更为稳妥的安全措施(如:考虑在其边界部署安全防御措施)。

 
 

安全加固的意义

 
 

u 确保对象知足安全基线要求;

 
 

u 优化配置,安装适用的安全软件等增强对象的安全性能;

 
 

u 从实践角度检验安全策略的有效性。

 
 

咱们的目标是下降风险到能够接受。

 
 

 

 
 

安全加固前准备

 
 

u 目标:明确安全加固支持项目的客户信息、服务范围、工做计划等

 
 

u 范围:针对安全加固范围内的系统资产进行整体了解;确认工做计划、实施环境、客户接口人、流程要求、项目交付等

 
 

u 输出:

 
 

l 项目信息调研表

 
 

l 加固资产清单

 
 

l 安全加固支持服务实施计划

 
 

u 要点:

 
 

l 确保加固资产无遗漏

 
 

安全加固测试

 
 

1、回退测试:回退及可逆操做测试主要由系统管理员、系统厂商或第三方代维人员完成,包括:系统及数据备份(备份业务数据及软件状态)以及回退操做验证(备份数据及软件状态回退测试)

 
 

2、有效性测试:加固有效性测试主要由安全加固实施工程师完成,经过利用现网环境或搭建的虚拟环境进行安全风险测试,确认加固有效性

 
 

3、业务测试:业务测试主要由系统管理员、系统厂商或第三方代维人员配合完成,经过利用现网环境或搭建的虚拟环境进行业务测试,确认加固操做是否影响业务

 
 

安全加固实施

 
 

安全加固实施主要分为:

 
 

一、主机安全加固

 
 

二、数据库安全加固

 
 

三、中间件安全加固

 
 

主机安全加固

 
 

Windows服务器加固

 
 

开启window防火墙

 
 

默认只开放web服务以及远程桌面端口。window最容易出事的就是139445135这三个端口的服务,除非必要,默认要关闭这些端口。

 
 

window服务器补丁管理

 
 

window操做系统层面的漏洞比较多并且国内外安全人员跟进也特别快,各类POC利用工具特别多,稍不留神就被黑了,因此window下的补丁管理尤为重要。微软自带就有免费的很简单可依赖的补丁管理软件---WSUS

 
 

WSUSWindows Server Update Services),它在之前Windows Update Services的基础上有了很大的改善。目前的版本能够更新更多的Windows补丁,同时具备报告功能和导向性能,管理员还能够控制更新过程。WSUS是典型的CS架构,也支持分布式部署,不过单台WSUS服务生产环境负责一千台之内的window服务器的补丁管理与分发没有任何问题。

 
 

当服务器个数超过10台,手工配置将是十分繁琐的过程,若是你的window服务器都是用域控管理的话,能够用组策略直接下发WSUS的配置

 
 

其余具体加固项表

 
 

加固项

加固方法

帐号

按照用户分配帐号。根据系统的要求,设定不一样的帐户和帐户组,管理员用户,数据库用户,审计用户,来宾用户等。

删除或锁定与设备运行、维护等与工做无关的帐号。

对于管理员账号,要求更改缺省账户名称;禁用guest(来宾)账号。

密码策略

最短密码长度 6个字符,启用本机组策略中密码必须符合复杂性要求的策略。即密码至少包含如下四种类别的字符中的三种:

英语大写字母 A, B, C, Z

英语小写字母 a, b, c, z

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

非字母数字字符,如标点符号,@, #, $, %, &, *

不使用xqazwsxqwer等易被猜解的字符串或其变种字符串

对于采用静态口令认证技术的设备,帐户口令的生存期不长于90天。

对于采用静态口令认证技术的设备,应配置当用户连续认证失败次数超过6次(不含6次),锁定该用户使用的帐号。

受权

在本地安全设置中从远端系统强制关机只指派给Administrators组。

在本地安全设置中关闭系统仅指派给Administrators组。

在本地安全设置中取得文件或其它对象的全部权仅指派给Administrators

在本地安全设置中配置指定受权用户容许本地登录此计算机。

在组策略中只容许受权账号从网络访问(包括网络共享等,但不包括终端服务)此计算机。

日志配置操做

应置设备日志,对用户登陆进行记录,记录内容包括用户登陆使用的帐号,登陆是否成功,登陆时间,以及远程登陆时,用户使用的IP地址。

用户策略

启用组策略中对Windows系统的审核策略更改,成功和失败都要审核。

启用组策略中对Windows系统的审核对象访问,成功和失败都要审核。

启用组策略中对Windows系统的审核目录服务访问,失败。

启用组策略中对Windows系统的审核特权使用,成功和失败都要审核。

启用组策略中对Windows系统的审核系统事件,成功和失败都要审核。

启用组策略中对Windows系统的审核账户管理,成功和失败都要审核。

启用组策略中对Windows系统的审核过程追踪,失败。

设置应用日志文件大小至少为8192KB,设置当达到最大的日志尺寸时,按须要改写事件。

屏保

设置带密码的屏幕保护,并将时间设定为5分钟。

远程登陆

对于远程登录的账号,设置不活动断连时间15分钟。

共享设置

非域环境中,关闭Windows硬盘默认共享,例如C$D$

查看每一个共享文件夹的共享权限,只容许受权的帐户拥有权限共享此文件夹。

补丁管理

安装最新的Service Pack补丁集。对服务器系统应先进行兼容性测试。

如需启用IIS服务,则将IIS升级到最新补丁。

防病毒

安装防病毒软件,并及时更新。

服务管理

列出所须要服务的列表(包括所需的系统服务),不在此列表的服务需关闭。

SNMP设置

如需启用SNMP服务,则修改默认的SNMP Community String设置。

启动项设置

列出系统启动时自动加载的进程和服务列表,不在此列表的需关闭。

自动播放限制

关闭Windows自动播放功能

 
 

 

 
 

Linux服务器加固

 
 

禁止root用户登陆

 
 

Vi /etc/ssh/sshd_config

 
 

PermitRootLogin no

 
 

禁用LKM

 
 

LKM的全称是Loadable Kernel Moudules,中文名为可加载内核模块,主要做用是用来扩展Linux的内核功能。LKM的优势在于能够动态的加载到内存中,无需从新编译内核,因为LKM具备这样的特色,因此它常常被用于一些设备的驱动程序,例如声卡、网卡等等。固然也因为其优势,也常常被黑客用于rootkit技术当中,强烈建议默认关闭,除非必要,不要使用。

 
 

Echo 1 > /proc/sys/kernel/modules_disabled

 
 

须要写到开机启动项里面,这个比直接内核编译时禁用LKM具备可操做性,由于一旦手工关闭LKM应用异常后,只须要开启便可。

 
 

开启ASLR

 
 

ASLR,即Linux内存地址随机化机制,能够在Linux服务器遭受缓冲区溢出攻击时提升攻击成本。

 
 

分为三个级别:

 
 

0 - 表示关闭进程地址空间随机化

 
 

1 - 表示将mmap的基址,stackvdso页面随机化

 
 

2 - 表示在1的基础上增长栈(heap)的随机化

 
 

Echo 2 > /proc/sys/kernel/randomize_va_space

 
 

须要写到开机启动项里面。

 
 

其余具体加固项表

 
 

加固项

加固方法

口令锁定策略

对于采用静态口令认证技术的设备,应配置当用户连续认证失败次数超过6次(不含6次),锁定该用户使用的帐号。

登录超时时间设置

对于具有字符交互界面的设备,应配置定时账户自动登出,避免管理员忘记注销登陆,减小安全隐患。

限制root用户SSH远程登陆

限制具有超级管理员权限的用户远程登陆,远程执行管理员权限操做,应先以普通权限用户远程登陆后,再切换到超级管理员权限帐号后执行相应操做。

使用SSH协议进行远程维护

对于使用IP协议进行远程维护的设备,设备应配置使用SSH等加密协议,并安全配置SSHD的设置。

文件与目录缺省权限控制

控制用户缺省访问权限,当在建立新文件或目录时,应屏蔽掉新文件或目录不该有的访问容许权限,防止同属于该组的其它用户及别的组的用户修改该用户的文件或更高限制。

帐号文件权限设置

涉及帐号、帐号组、口令、服务等的重要文件和目录的权限设置不能被任意人员删除,修改。

口令生存期

对于采用静态口令认证技术的设备,维护人员使用的账户口令的生存期不长于90天。

禁止UID0的用户存在多个

UID0的任何用户都拥有系统的最高特权,不该存在多个。

口令复杂度

对于采用静态口令认证技术的设备,口令长度至少8位并包括数字、小写字母、大写字母和特殊符号4类中至少2类。

root用户环境变量的安全性

账号与口令-root用户环境变量的安全性。

限制root用户TELNET远程登陆

应该禁止root用户经过TELNET协议远程访问。

系统core dump状态

系统core dump状态,core dump中可能包括系统信息,易被入侵者利用,建议关闭。

启用远程日志功能

设备配置远程日志功能,将须要重点关注的日志内容传输到日志服务器。

修改SSHBanner信息

用户经过网络或者本地成功登陆系统后,显示一些警告信息。

删除无关账号

应删除或锁定与设备运行、维护等工做无关的帐号。

配置用户最小受权

在设备权限配置能力内,根据用户的业务须要,配置其所需的最小权限。

记录安全事件日志

设备应配置日志功能,记录对与设备相关的安全事件。

设置帐户组

根据系统要求及用户的业务需求,创建多账户组,将用户帐号分配到相应的账户组。

修改SSHBanner警告信息

SSH登陆时显示警告信息,在登陆成功前不泄漏服务器信息。

禁止IP路由转发

对于不作路由功能的系统,应该关闭数据包转发功能。

配置NFS服务限制

NFS服务:若是没有必要,须要中止NFS服务;

若是须要NFS服务,须要限制可以访问NFS服务的IP范围。

 

禁止组合键关机

禁止ctrl+alt+del,防止非法从新启动服务器。

控制远程访问的IP地址

对于经过IP协议进行远程维护的设备,设备应支持对容许登录到该设备的IP地址范围进行设定。

禁止存在空密码的账户

不容许存在空密码的账户。

配置NTP

若是网络中存在信任的NTP服务器,应该配置系统使用NTP服务保持时间同步。

禁止ICMP重定向

主机系统应该禁止ICMP重定向,采用静态路由。

修改FTPBanner信息

FTP登陆时须要显示警告信息,隐藏操做系统和FTP服务器相关信息。

修改SNMP的默认Community

若是没有必要,须要中止SNMP服务;

若是确实须要使用SNMP服务,须要修改SNMP Community

避免账号共享

应按照不一样的用户分配不一样的帐号,避免不一样用户间共享帐号,避免用户帐号和设备间通讯使用的帐号共享。

设置屏幕锁定

对于具有图形界面(含WEB界面)的设备,应配置定时自动屏幕锁定。

用户FTP访问安全配置

设置FTP用户登陆后对文件目录的存取权限。

关闭没必要要启动项

列出系统启动时自动加载的进程和服务列表,不在此列表的需关闭。

补丁安装

应根据须要及时进行补丁装载,对服务器系统应先进行兼容性测试。

记录账户登陆日志

设备应配置日志功能,对用户登陆进行记录,记录内容包括用户登陆使用的帐号,登陆是否成功,登陆时间,以及远程登陆时,用户使用的IP地址。

日志文件安全

设备应配置权限,控制对日志文件读取、修改和删除等操做。

口令重复次数限制

对于采用静态口令认证技术的设备,应配置设备,使用户不能重复使用最近5次(含5次)内已使用的口令。

禁止root用户登陆FTP

控制FTP进程缺省访问权限,当经过FTP服务建立新文件或目录时应屏蔽掉新文件或目录不该有的访问容许权限。

配置su命令使用状况记录

启用syslog系统日志审计功能。

限制FTP用户登陆后能访问的目录

应该从应用层面进行必要的安全访问控制,好比FTP服务器应该限制FTP能够使用的目录范围。

关闭没必要要的服务和端口

列出所须要服务的列表(包括所需的系统服务),不在此列表的服务需关闭。

使用PAM认证模块禁止wheel组以外的用户suroot

使用PAM禁止任何人suroot

禁止匿名FTP

禁止匿名FTP

修改TELNETBanner信息

修改系统Banner,避免泄漏操做系统名称,版本号,主机名称等,而且给出登录告警信息。

 
 

 

 
 

数据库安全加固

 
 

MySQL数据库安全加固

 
 

 

 
 

加固项

加固方法

ssl_key的路径

配置ssl_key的路径

ssl_ca的路径

配置ssl_ca的路径

ssl_cert的路径

配置ssl_cert的路径

日志功能

数据库须要配置错误日志,以便于出现问题时更好分析缘由和恢复

移除test数据库

移除测试数据库test

禁止自动建立用户自动受权

禁止自动建立用户权限

删除无关或匿名账号

不该存在匿名账号和无关账号

加密数据库密码

数据库密码存放是以hash加密的结果存放的

更改root用户

修改数据库管理员root的名称

使用ssl链接

要求使用ssl链接

设置最大链接数

设置合适的最大链接数

安装最新补丁

安装最新的安全补丁

避免弱口令

不容许存在空密码用户

禁止通配符的主机信息

不能存在有通配符%做为主机信息

用户权限

严格控制用户权限,只有管理员才能针对数据库操做权限

不一样用户不一样帐号

应按照用户分配账号,避免不一样用户间共享账号

禁止远程下载文件

禁止远程下载文件

禁止使用旧密码

禁止使用旧密码

禁止网络链接

在不须要外部IP链接数据库的时候,禁止网络链接

禁止MySql进程管理员权限

以普通账户安全运行mysqld,禁止mysql以管理员帐号权限运行.

可信IP地址访问控制

经过数据库所在操做系统或防火墙限制,只有信任的IP地址才能经过监听器访问数据库。

 
 

 

 
 

中间件安全加固

 
 

Tomcat安全加固

 
 

加固项

加固方法

无关帐号管理-Linux

应删除或锁定与设备运行、维护等工做无关的帐号。

管理无关帐号-Windows

应删除或锁定与设备运行、维护等工做无关的帐号。

口令复杂度-Linux

对于采用静态口令认证技术的设备,口令长度至少8位,并包括数字、小写字母、大写字母和特殊符号4类中至少3类。

口令复杂度-Windows

对于采用静态口令认证技术的设备,口令长度至少8位,并包括数字、小写字母、大写字母和特殊符号4类中至少2类。

定时登出-Linux

对于具有字符交互界面的设备,应支持定时帐户自动登出。登出后用户需再次登陆才能进入系统。

定时登出-Windows

对于具有字符交互界面的设备,应支持定时帐户自动登出。登出后用户需再次登陆才能进入系统。

HTTP加密协议-Linux

对于经过HTTP协议进行远程维护的设备,设备应支持使用HTTPS等加密协议。

HTTP加密协议-Windows

对于经过HTTP协议进行远程维护的设备,设备应支持使用HTTPS等加密协议。

错误页面重定向-Linux

Tomcat错误页面重定向。

错误页面重定向-Windows

Tomcat错误页面重定向。

配置用户最小权限-Linux

在设备权限配置能力内,根据用户的业务须要,配置其所需的最小权限。

配置用户最小权限-Windows

在设备权限配置能力内,根据用户的业务须要,配置其所需的最小权限。

按照用户分配帐号-Linux

应按照用户分配帐号。避免不一样用户间共享帐号。避免用户帐号和设备间通讯使用的帐号共享。

按照用户分配帐号-Windows

应按照用户分配帐号,避免不一样用户间共享帐号,避免用户帐号和设备间通讯使用的帐号共享。

更改默认管理端口-Linux

更改tomcat服务器默认端口,修改tomcat安装目录下/conf/server.xml配置文件,更改默认管理端口到非8080

更改默认管理端口-Windows

更改tomcat服务器默认端口,修改tomcat安装目录下/conf/server.xml配置文件,更改默认管理端口到非8080

禁止目录列出-Linux

禁止tomcat列表显示文件。

禁止目录列出-Windows

禁止tomcat列表显示文件。

记录用户登陆行为-Linux

设备应配置日志功能,对用户登陆进行记录,记录内容包括用户登陆使用的帐号,登陆是否成功,登陆时间,以及远程登陆时,用户使用的IP地址。

记录用户登陆行为-Windows

设备应配置日志功能,对用户登陆进行记录,记录内容包括用户登陆使用的帐号,登陆是否成功,登陆时间,以及远程登陆时,用户使用的IP地址。

防止恶意关闭Tomcat服务-Linux

避免恶意shutdown TOMCAT服务,避免tomcat端口被占用。

链接数设置-Linux

根据机器配置性能和业务需求,来设置链接访问最大最小链接数。

禁用非法HTTP方法-Windows

禁用PUTDELETE等危险的HTTP 方法。

服务帐号管理-Linux

禁用超级用户启用tomcat

链接数设置-Windows

根据机器配置性能和业务需求,来设置链接访问最大最小链接数。

更改系统Banner信息-Linux

修改系统Banner信息

防止恶意关闭Tomcat服务-Windows

避免恶意shutdown TOMCAT服务,避免tomcat端口被占用。

 
 

 

 
 

IIS安全加固

 
 

加固项

加固方法

检查是否更改IISWeb日志默认存放路径--IIS7

更改IIS Web日志默认存放路径

SSL加密通讯--IIS7

IIS服务SSL身份访问认证

检查是否设置带密码的屏幕保护

对于具有图形界面(含WEB界面)的设备,应配置定时自动屏幕锁定(参考Windows相关配置:设置带密码的屏幕保护,并将时间设定为5分钟。)

检查是否配置日志功能

设备应配置日志功能,记录与设备相关的安全事件。

检查是否对IIS访问源进行IP范围限制--IIS7

在条件容许的条件下,对IIS访问源进行IP范围限制。

只有在容许的IP范围内的主机才能够访问WWW服务

口令生存期

对于采用静态口令认证技术的设备,维护人员使用的帐户口令的生存期不长于90天(IIS基于Windows系统,可经过提高Windows账户策略实现)

检查是否按照用户分配帐号--IIS7

应按照用户分配帐号避免不一样用户间共享帐号.避免用户帐号和设备间通讯使用的帐号共享(对于IIS用户定义分为两个层次:1、IIS自身操做用户,2、IIS发布应用访问用户)

检查IIS服务组件安装--IIS7

IIS 是架设 WEBFTPSMTP 服务器的一套整合软件,若是不是必须,不得安装FTPSMTP服务。

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

对于IIS6.0 对于“web服务扩展”,默认只启用了“asp.net”功能。

若是业务系统不须要ASP支持,必须按照下图的方法将相应的服务扩展禁止。

启用日志功能--IIS7

启用日志功能

更改默认安装路径--IIS7

更改IIS默认安装路径。

检查密码是否符合复杂性要求

对于采用静态口令认证技术的设备,口令长度至少8位,

并包括数字、小写字母、大写字母和特殊符号4类中至少2类(IIS基于Windows系统,可经过提高Windows自身密码安全等级实现

口令历史

对于采用静态口令认证技术的设备,应配置设备,使用户不能重复使用最近5次(含5次)内已使用的口令(IIS基于Windows系统,可经过提高Windows账户策略实现)

帐号锁定策略

对于采用静态口令认证技术的设备,应配置当用户连续认证失败次数超过6次(不含6),锁定该用户使用的帐号(IIS基于Windows系统,可经过提高Windows账户策略实现).

检查是否配置防止日志文件被篡改或非法删除

按帐号分配日志文件读取、修改和删除权限,从而防止日志文件被篡改或非法删除。

删除危险的实例文件(iis6_iis7)

删除部分安装缺省文件或目录,增强IIS安全

删除没必要要的脚本映射-iis6

减小服务器脚本攻击的风险

卸载没必要要的服务组件--iis6

不得安装FTPSMTP服务,"IIS 是架设 WEBFTPSMTP 服务器的一套整合软件,若是不是必须,不得安装FTPSMTP服务.

删除锁定无关帐号_iis6.0

删除或锁定某些帐号,应删除或锁定与设备运行、维护等工做无关的帐号

检查是否更改IIS默认安装路径--IIS6

更改IIS默认安装路径。

检查是否更改IISWeb日志默认存放路径--IIS6

更改IIS Web日志默认存放路径

启用日志功能--IIS6

启用日志记录,并采用IIS日志格式。

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

对于IIS6.0 对于“web服务扩展”,默认只启用了“asp.net”功能。若是业务系统不须要ASP支持,必须按照将相应的服务扩展禁止

IIS访问源进行IP范围限制--IIS6

在条件容许的条件下,对IIS访问源进行IP范围限制。只有在容许的IP范围内的主机才能够访问WWW服务。

SSL加密通讯--IIS6

IIS服务SSL身份访问认证

禁用非法HTTP方法-iis6

禁用PUTDELETE等危险的HTTP 方法

链接数限制-iis6

根据机器性能和业务需求,设置最大最小链接数

错误页面重定向-iis6

错误页面重定向

禁止目录列出-iis6

禁止IIS列表显示文件

上传目录权限设置-iis6

禁止动态脚本在上传目录的运行权限,防止攻击者绕过过滤系统上传webshell

补丁更新-(iis5_iis6_iis7)

在不影响业务的状况下,将IIS升级到最新补丁,并且该补丁通过试验测试。

链接数设置-iis7

根据机器性能和业务需求,设置最大最小链接数

错误页面重定向-iis7

错误页面重定向

删除没必要要的脚本映射-iis7

删除没必要要的脚本映射

禁止目录列出-iis7

禁止IIS列表显示文件

上传目录权限设置-iis7

禁止动态脚本在上传目录的运行权限,防止攻击者绕过过滤系统上传webshell

 
 

 

 
 

Apache安全加固

 
 

加固项

加固方法

配置Apache运行帐户

如下操做使用root帐号或者有httpd修改权限帐号登陆

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

User apache

Group apachegroup

禁止访问外部文件

如下操做使用root帐号或者有httpd修改权限帐号登陆

编辑httpd.conf配置文件,

一、设置外部不可访问。

<Directory />   /** “ / ”为外部文件目录

Order Deny,Allow

Deny from all

</Directory>

二、设置可访问目录,

<Directory /web>

Order Allow,Deny

Allow from all

</Directory>

禁止目录浏览

如下操做使用root帐号或者有httpd修改权限帐号登陆

1、编辑httpd.conf配置文件,

<Directory "/web">

Options Indexes FollowSymLinks  #删除Indexes

AllowOverride None

Order allow,deny

Allow from all

</Directory>

2、从新启动Apache服务

配置敏感文件访问权限

如下操做使用root帐号或者有httpd修改权限帐号登陆

使用命令“chmod 600 /etc/httpd/conf/httpd.conf”设置配置文件为属主可读写,其余用户无权限。

使用命令“chmod 644 /var/log/httpd/*.log”设置日志文件为属主可读写,其余用户只读权限。

配置使用安全的HTTP请求

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

配置安全日志

如下操做使用root帐号或者有httpd修改权限帐号登陆

编辑httpd.conf配置文件,设置日志记录文件、记录内容、记录格式。

LogLevel notice

ErrorLog logs/error_log

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

CustomLog logs/access_log combined

配置抗拒绝服务攻击参数

如下操做使用root帐号或者有httpd修改权限帐号登陆

一、编辑httpd.conf配置文件,

Timeout 10 KeepAlive On

KeepAliveTimeout 15

AcceptFilter http data

AcceptFilter https data

二、从新启动Apache服务

设置链接数

如下操做使用root帐号或者有httpd修改权限帐号登陆

使用httpd -l 检查Apache的工做模式,如列出prefork.c,则进行下列操做:

一、修改httpd.conf文件找到

<IfModuleprefork.c>

StartServers       8

MinSpareServers    5

MaxSpareServers   20

MaxClients       150

MaxRequestsPerChild  1000

</IfModule>

二、修改MaxClients  150 为须要的链接数,如1500

ServerLimit        1500  //链接数大于 256 需设置此项

MaxClients         1500

三、保存退出。从新启动http 服务:

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

删除缺省文件

如下操做使用root帐号或者有httpd修改权限帐号登陆

一、删除缺省HTML文件,位置为apache2/htdocs下的默认目录及文件;

二、删除缺省的CGI脚本,位置为apache2/cgi-bin目录下的全部文件;

三、删除Apache说明文件,位置为apache2/manual目录。

设置Apache版本号

如下操做使用root帐号或者有httpd修改权限帐号登陆

修改httpd.conf配置文件:

ServerSignature Off

ServerTokens Prod

配置错误页面处理

如下操做使用root帐号或者有httpd修改权限帐号登陆

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

ErrorDocument 400 /custom400.html

ErrorDocument 401 /custom401.html

ErrorDocument 403 /custom403.html

ErrorDocument 404 /custom404.html

ErrorDocument 405 /custom405.html

ErrorDocument 500 /custom500.html

其中,Customxxx.html为要设置的错误页面。须要手动创建相关文件并自定义内容。

二、从新启动Apache服务

更新补丁

访问http://httpd.apache.org/download.cgi,查看最新的apache版本,在实验室测试经过的前提下,编译升级apache,解决高危漏洞。

 
 

 

 
 

Nginx安全加固

 
 

加固项

加固方法

仅安装所需模块

请参阅NGINX模块文档以肯定安装所需的模块。能够使用configure命令删除模块。

禁止安装HTTPWebDAV模块

从源代码从新编译nginx,配置--withhttp_dav_module参数。

禁用gzip功能模块

从源代码从新编译nginx,配置--without-http_gzip_module参数

禁用自动索引模块

将全部autoindex指令的值设置为off,或删除这些指令。

配置NGINX使用非特权专用服务账户运行

1.为nginx用户添加一个系统账户,主目录为/var/cache/nginx,shell为/sbin/nologin

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

2.而后经过添加user指令将nginx用户添加到/etc/nginx/nginx.conf,以下所示:

user nginx

锁定NGINX服务帐户

使用命令:passwd -l nginx

设置NGINX账户的shell无效

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

配置NGINX目录和文件的属主为root

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

设置访问限制

使用以下命令:

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

配置NGINX的PID权限

使用以下命令:

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

chown 644 /var/run/nginx.pid

禁用核心转储

从NGINX配置文件中删除working_directory指令

配置NGINX监听的端口

在配置文件中删除或者注释掉未受权的监听的端口

拒绝未知主机名的请求

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

server{
return404;
}

配置keepalive_timeout

配置文件中设置:keepalive_timeout 10

配置server_token

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

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

配置默认错误页面和index.html

编辑/usr/share/nginx/html/index.html和usr/share/nginx/html/50x.html并删除任何引用NGINX的行。

禁用隐藏文件服务

编辑ngixn.conf文件,添加以下指令:

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

禁用NGINX反向代理的默认响应信息

编辑nginx.conf文件,添加以下指令:

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

启用详细的日志记录

参考连接:http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format

启用访问日志

能够根据须要使用不一样的日志文件位置,相似以下:

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

启用错误日志

编辑/etc/nginx/nginx.conf以使error_log指令存在且未注释掉。应将error_log配置为您选择的日志记录位置。配置应相似于如下内容:

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

配置错误日志被发送到远程syslog服务器

将如下行添加到服务器配置文件中,192.168.2.1应替换为中央日志服务器的位置。

error_log syslog:server=192.168.2.1info

配置访问日志被发送到远程syslog服务器

将如下行添加到服务器配置文件中,192.168.2.1应替换为中央日志服务器的位置。

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

配置HTTP被重定向到HTTPS

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

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

安装可信任证书

示例以下:

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

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

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

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

3.重启nginx服务

参考:

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

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

配置私钥权限

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

配置使用新版的TLS协议

参考:

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

禁用弱密码

参考:

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

配置自定义Diffie-Hellman参数

使用命令:

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

启用OCSP

编辑nginx.conf文件,添加以下指令:

server {
ssl_stapling on;
ssl_stapling_verify on;
}

启用HSTS

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

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

启用HTTP公钥锁定

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

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

禁用会话恢复

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

ssl_session_tickets off;

使用HTTP/2.0

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

server{
listen 443 ssl http2;
}

配置基于ip的限制

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

配置HTTPmethods

在nginx.conf文件中,仅容许必须的方法,配置实例以下:

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

设置读取客户端报头和正文的超时时间

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

client_body_timeout 10;
client_header_timeout 10;

设置client_max_body_size

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

client_max_body_size 100K

设置large_client_header_buffers

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

large_client_header_buffers 2 1k

设置单IP地址的链接数

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

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

}

启用速率限制

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

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

启用X-Frame-Optionsheader

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

add_header X-Frame-Options "SAMEORIGIN";

启用X-XSS-Protectionheader

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

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

启用内容安全策略(CSP)

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

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

启用Referer策略

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

add_header Referrer-Policy "no-referrer";

 
 

 

 
 

避免加固风险

 
 

常见加固风险

 
 

1、服务不可用:对于不少软件来讲,使用一些共享的库文件是很正常的事情,这就致使了不一样应用服务之间可能存在必定的以来关系,补丁程序极可能在安全以后无形之中影响扫其余的应用或者其余的资产不可用

 
 

2、业务中断:服务不可用在没法正常回退的状况下,形成业务比较长时间的中断。

 
 

3、引入新风险:安装可能引入一些未知的漏洞,安装补丁须要风险和收益之间获得平衡,厂商发布的补丁都是针对某一特定的软件版本,并且安装补丁以前要了解安装补丁一些必要条件,要认真阅读补丁安装说明文件,尤为是Linux和类Unix操做系统,不然安装失败或者影响系统正常使用的可能性很是大

 
 

操做系统

 
 

 

 
 

数据库

 
 

 

 
 

中间件及常见网络服务

 
 

 

 
 

风险规避手段

 
 

 

 
 

风险规避手段

 
 

 

 
 

安全加固测试

 
 

 

 
 

常见问题

 
 

1、安全加固是否会形成服务器损害?

 
 

安全加固操做主要是增强系统的配置,而且在加固方案和中会考虑到一些可能存在风险的修改。只有在不多状况下才会真正产生异常,好比厂商提供的系统补丁自己的稳定性差等。

 
 

2、安全加固是否会要求系统从新启动?

 
 

一般状况下补丁的安装都会要求系统从新启动,同时一些加固配置操做会在系统从新启动以后才会生效。

 
 

3、安全加固是否必须在服务器低负荷运行下才能进行么?

 
 

不须要,可是建议在低负荷运行下进行。因为可能须要系统从新启动,所以在低负荷状况下,对业务和系统的影响将更小。

 
 

4、安全加固操做前是否须要先进行系统备份?

 
 

建议先进行备份,特别是须要安装安全补丁的状况下。因为一些厂商的安全补丁的不稳定性,可能在安装补丁后形成系统崩溃,所以最好在加固实施前进行系统备份。

 
 

其余问题

 
 

1、通常不进行大版本升级

 
 

没有特殊状况,通常不进行大版本升级。例如Mysql数据库从5.6升级到5.7

 
 

2、打补丁前必须作好原应用的备份工做

 
 

备份主要包括数据文件、配置文件,条件容许还要备份程序文件,确保可以完整恢复。备份操做通常由系统管理员或者系统厂商完成。应用升级前建议将旧版本以重命名的方式放在之前目录,同事注意收集旧版本目录的权限和属主设置

 
 

3、升级和打补丁时注意版本号和操做系统的匹配

 
 

升级包和补丁包一般有32位(i686X86)和64位(x64)之分,需根据操做系统的版本号来肯定要下载的版本;另外,对于Linux系统,部分安装包还跟Linux的发行版本有关。好比:Red Hat Linux的程序包可能没法在Debian上运行,须要找对发行版本

相关文章
相关标签/搜索