[Assertion]
; ?????
;assert.active = On ; ?assert(expr); active by default
;assert.warning = On ; issue a PHP warning for each failed assertion.
;assert.bail = Off ; don´t bail out by default.
;assert.callback = 0 ; user-function to be called if an assertion fails.
;assert.quiet_eval = 0 ; eval the expression with current error_reporting(). set to true if you want error_reporting(0) around the eval().
SQL Server 2000使用的Tabular Data Stream协议来进行网络数据交换,如果不加密的话,所有的网络传输都是明文的,包括密码、数据库内容等等,这是一个很大的安全威胁。能被人在网络中截获到他们需要的东西,包括数据库帐号和密码。所以,在条件容许情况下,最好使用SSL来加密协议,当然,你需要一个证书来支持。
6、不要让人随便探测到你的TCP/IP端口
默认情况下,SQL Server使用1433端口监听,很多人都说SQL Server配置的时候要把这个端口改变,这样别人就不能很容易地知道使用的什么端口了。可惜,通过微软未公开的1434端口的UDP探测可以很容易知道SQL Server使用的什么TCP/IP端口了(请参考《深入探索SQL Server网络连接的安全问题》)。 不过微软还是考虑到了这个问题,毕竟公开而且开放的端口会引起不必要的麻烦。在实例属性中选择TCP/IP协议的属性。选择隐藏 SQL Server 实例。如果隐藏了 SQL Server 实例,则将禁止对试图枚举网络上现有的 SQL Server 实例的客户端所发出的广播作出响应。这样,别人就不能用1434来探测你的TCP/IP端口了(除非用Port Scan)。
① 尽最大的可能性将系统的漏洞补丁都打完;最好是比如Microsoft Windows Server系列的系统可以将自动更新服务打开,然后让服务器在您指定的某个时间段内自动连接到Microsoft Update网站进行补丁的更新。如果您的服务器为了安全起见 禁止了对公网外部的连接的话,可以用Microsoft WSUS服务在内网进行升级。(关于Microsoft WSUS 2.0的安装与配置可以参考此文:http://www.31896.net/html/2006-1-5/14001689122.shtml )
② 停掉一切不需要的系统服务以及应用程序,最大限能的降底服务器的被攻击系数。比如前阵子的MSDTC溢出,就导致很多服务器挂掉了。其实如果WEB类服务器根本没有用到MSDTC服务时,您大可以把MSDTC服务停掉,这样MSDTC溢出就对您的服务器不构成任何威胁了。
③ 启动TCP/IP端口的过滤:仅打开常用的TCP如21、80、25、110、3389等端口;如果安全要求级别高一点可以将UDP端口关闭,当然如果这样之后缺陷就是如在服务器上连外部就不方便连接了,这里建议大家用IPSec来封UDP。在协议筛选中"只允许"TCP协议(协议号为:6)、UDP协议(协议号为:17)以及RDP协议(协议号为:27)等必需用协议即可;其它无用均不开放。
① 在做好1中上述的工作之后,基本上可以防目骇客在溢出之后得到shell了;因为即使Overflow溢出成功,但在调用CMDSHELL、以及对外联接时就卡了。 (为什么呢,因为:1.溢出后程序无法再调用到CMDSHLL我们已经禁止system访问CMD.exe了。2.溢出之后在进行反弹时已经无法对外部IP进行连接了^_^ 所以,基本上要能过system权限来反弹shell就较困难的了...)
② 当然世界上是不存在绝对的安全的,假设入侵者在得到了我们的shell之后,做些什么呢?一般入侵者在在得到shell之后,就会诸如利用系统命令加账号了 通过tftp、ftp、vbs等方式传文件了等等来达到进一步控制服务器。这里我们通过1上述的办法对命令进行了限制,入侵者是没有办法通过tftp、ftp来传文件了,但他们仍然可以能过echo写批处理,用批处理通过脚本BAT/VBS/VBA等从WEB上下载文件,以及修改其它盘类的文件等潜在破坏行为。所以我们需要 将echo命令也限制以及将其它盘的System写、修改文件的权限进行处理。以及将VBS/VBA类脚本以及XMLhttp等组件进行禁用或者限制system的运行权。这样 的话别人得到Shell也无法对服务器上的文件进行删除以及进行步的控制系统了;以及本地提权反弹Shell了^_^
5、 \Winnt:
选择除了Downloaded Program Files、Help、IIS Temporary Compressed Files、Offline Web Pages、system32、Tasks、Temp、Web以外的所有目录,去除“允许将来自父系的可继承性权限传播给对象”选框,复制。
#!/bin/sh
# script name:nping
# use this script to confirm the hosts are alive or not
HOST01="xxx.xxx.xxx.xxx"
HOST02="xxx.xxx.xxx.xxx"
HOST03="xxx.xxx.xxx.xxx"
HOST04="xxx.xxx.xxx.xxx"
HOST05="xxx.xxx.xxx.xxx"
HOST06="xxx.xxx.xxx.xxx"
HOST07="xxx.xxx.xxx.xxx"
HOST08="xxx.xxx.xxx.xxx"
HOST09="xxx.xxx.xxx.xxx"
HOST10="xxx.xxx.xxx.xxx"
for LOOP in $HOST01 $HOST02 $HOST03 $HOST04 $HOST05 $HOST06 $HOST07 $HOST08 $HOST09 $HOST10
do
if !/sbin/ping -c 2 $LOOP >/dev/null 2>&1;then
echo "Warning:The host $LOOP seems down" >> error.log
fi
done
if [ -f error.log ];then
cat error.log |mail -s "Warning:Host Down" yourname@yourmail.com
rm –rf error.log
fi
#!/bin/sh
# script name:nscan
# use this script to check the services status on local servers
HOST01="xxx.xxx.xxx.xxx"
HOST02="xxx.xxx.xxx.xxx"
HOST03="xxx.xxx.xxx.xxx"
HOST04="xxx.xxx.xxx.xxx"
HOST05="xxx.xxx.xxx.xxx"
HOST06="xxx.xxx.xxx.xxx"
HOST07="xxx.xxx.xxx.xxx"
SQL_PORT="2433/tcp"
MSRDP_PORT="3389/tcp"
PCANYWH_PORT="5631/tcp"
for LOOP in $HOST01 $HOST02 $HOST03 $HOST04 $HOST05 $HOST06 $HOST07
do
nmap -sT $LOOP >nmap.tmp 2>&1
for PORT in $SQL_PORT $MSRDP_PORT $PCANYWH_PORT
do
if ! grep $PORT nmap.tmp >/dev/null 2>&1;then
echo “Warning:The port $PORT is seem to down on $LOOP” >>$LOOP.error
fi
done
if [ ! -f $LOOP.error ];then
echo "The services running on $LOOP are nomal!"
else
cat $LOOP.error >>nscan.err 2>&1
rm -rf $LOOP.error
fi
rm -rf nmap.tmp
done
if [ -f nscan.err ];then
cat nscan.err |mail –s “Host Services Down” yourname@yourmail.com
rm –rf nscan.err
fi
4.4 用户管理
用户管理通常是指系统的用户帐户管理,不管是UNIX系统还是Windows系统,帐户安全是系统安全的关键。系统中应保持固定数量的用户帐户,作为系统管理员,应清楚每一个帐户的使用者和用途。用户新申请帐户应该有个流程,规范的管理总比不规范好。
在Unix系统上,大多数系统帐户平时是没什么用的,包括:bin daemon adm lp mail news uucp operator games gopher rpc等,如果你不把它们删除,那么也不要让它们拥有真正的shell,检查/etc/passwd文件,看看这些帐户的最后一个域(shell)是否被置/sbin/nologin或/bin/false。经常检查帐户的权限,普通帐户不应该在root组(gid=0),更不应拥有root权限(uid=0)。可以写一个脚本来替你检查,如下所示:
#!/bin/sh
# script name:checkuser
# check if there is any user who have real shell or have root id/gid
if [ "$USER_SHELL" != "/sbin/nologin" ];then
echo -e "\n$USER has one real shellUSER_SHELL"
fi
if [ $USER_UID -eq 0 ];then
echo "$USER has the root uid(uid 0)"
fi
if [ $USER_GID -eq 0 ];then
echo "$USER has the root gid(gid 0)"
fi