win2008 web服务器安装配置
对服务器安全重要性算是有全面的认识了。今天整理网站的时候居然发现被人入侵,发送客户资料到他人邮箱。狂晕!!!
本服务器是windows 2008 web edition。由于我也是边摸索边设置。所有本文会持续更新。
一、关闭系统不必要服务。
关闭workstation服务,可以防止列出服务器所有用户。关闭的同时会提示同时关闭terminal configuration service。
对服务器安全重要性算是有全面的认识了。今天整理网站的时候居然发现被人入侵,发送客户资料到他人邮箱。狂晕!!!
本服务器是windows 2008 web edition。由于我也是边摸索边设置。所有本文会持续更新。
一、关闭系统不必要服务。
关闭workstation服务,可以防止列出服务器所有用户。关闭的同时会提示同时关闭terminal configuration service。
惭愧惭愧!之前都不去关注服务器安全问题。直到发现被入侵了,于是亡羊补牢,收集了一下的服务器安全配置:
(如需引用或者转载此文,请注明:作者: 阿江 出处:www.ajiang.net)
其实,在服务器的安全设置方面,我虽然有一些经验,但是还谈不上有研究,所以我写这篇文章的时候心里很不踏实,总害怕说错了会误了别人的事。
本文更侧重于防止ASP漏洞攻击,所以服务器防黑等方面的讲解可能略嫌少了点。
基本的服务器安全设置
安装补丁
安装好操作系统之后,最好能在托管之前就完成补丁的安装,配置好网络后,如果是2000则确定安装上了SP4,如果是2003,则最好安装上SP1,然后点击开始→Windows Update,安装所有的关键更新。
安装杀毒软件
虽然杀毒软件有时候不能解决问题,但是杀毒软件避免了很多问题。我一直在用诺顿2004,据说2005可以杀木马,不过我没试过。还有人用瑞星,瑞星是确定可以杀木马的。更多的人说卡巴司机好,不过我没用过。
不要指望杀毒软件杀掉所有的木马,因为ASP木马的特征是可以通过一定手段来避开杀毒软件的查杀。
设置端口保护和防火墙、删除默认共享
都是服务器防黑的措施,即使你的服务器上没有IIS,这些安全措施都最好做上。这是阿江的盲区,大概知道屏蔽端口用本地安全策略,不过这方面的东西网上攻略很多,大家可以擞出来看看,晚些时候我或者会复制一些到我的网站上。
权限设置
阿江感觉这是防止ASP漏洞攻击的关键所在,优秀的权限设置可以将危害减少在一个IIS站点甚至一个虚拟目录里。我这里讲一下原理和设置思路,聪明的朋友应该看完这个就能解决问题了。
权限设置的原理
WINDOWS用户,在WINNT系统中大多数时候把权限按用户(組)来划分。在【开始→程序→管理工具→计算机管理→本地用户和组】管理系统用户和用户组。
NTFS权限设置,请记住分区的时候把所有的硬盘都分为NTFS分区,然后我们可以确定每个分区对每个用户开放的权限。【文件(夹)上右键→属性→安全】在这里管理NTFS文件(夹)权限。
IIS匿名用户,每个IIS站点或者虚拟目录,都可以设置一个匿名访问用户(现在暂且把它叫“IIS匿名用户”),当用户访问你的网站的.ASP文件的时候,这个.ASP文件所具有的权限,就是这个“IIS匿名用户”所具有的权限。
权限设置的思路
要为每个独立的要保护的个体(比如一个网站或者一个虚拟目录)创建一个系统用户,让这个站点在系统中具有惟一的可以设置权限的身份。
在IIS的【站点属性或者虚拟目录属性→目录安全性→匿名访问和验证控制→编辑→匿名访问→编辑】填写刚刚创建的那个用户名。
设置所有的分区禁止这个用户访问,而刚才这个站点的主目录对应的那个文件夹设置允许这个用户访问(要去掉继承父权限,并且要加上超管组和SYSTEM组)。
这样设置了之后,这个站点里的ASP程序就只有当前这个文件夹的权限了,从探针上看,所有的硬盘都是红叉叉。
我的设置方法
我是先创建一个用户组,以后所有的站点的用户都建在这个組里,然后设置这个组在各个分区没有权限或者完全拒绝。然后再设置各个IIS用户在各在的文件夹里的权限。
因为比较多,所以我很不想写,其实知道了上面的原理,大多数人都应该懂了,除非不知道怎么添加系统用户和組,不知道怎么设置文件夹权限,不知道IIS站点属性在那里。真的有那样的人,你也不要着急,要沉住气慢慢来,具体的方法其实自己也能摸索出来的,我就是这样。当然,如果我有空,我会写我的具体设置方法,很傲能还会配上图片。
改名或卸载不安全组件
不安全组件不惊人
我的在阿江探针1.9里加入了不安全组件检测功能(其实这是参考7i24的代码写的,只是把界面改的友好了一点,检测方法和他是基本一样的),这个功能让很多站长吃惊不小,因为他发现他的服务器支持很多不安全组件。
其实,只要做好了上面的权限设置,那么FSO、XML、strem都不再是不安全组件了,因为他们都没有跨出自己的文件夹或者站点的权限。那个欢乐时光更不用怕,有杀毒软件在还怕什么时光啊。
最危险的组件是WSH和Shell,因为它可以运行你硬盘里的EXE等程序,比如它可以运行提升程序来提升SERV-U权限甚至用SERVU来运行更高权限的系统程序。
谨慎决定是否卸载一个组件
组件是为了应用而出现的,而不是为了不安全而出现的,所有的组件都有它的用处,所以在卸载一个组件之前,你必须确认这个组件是你的网站程序不需要的,或者即使去掉也不关大体的。否则,你只能留着这个组件并在你的ASP程序本身上下工夫,防止别人进来,而不是防止别人进来后SHELL。
比如,FSO和XML是非常常用的组件之一,很多程序会用到他们。WSH组件会被一部分主机管理程序用到,也有的打包程序也会用到。
卸载最不安全的组件
最简单的办法是直接卸载后删除相应的程序文件。将下面的代码保存为一个.BAT文件,( 以下均以 WIN2000 为例,如果使用2003,则系统文件夹应该是 C:\WINDOWS\ )
regsvr32/u C:\WINNT\System32\wshom.ocx
del C:\WINNT\System32\wshom.ocx
regsvr32/u C:\WINNT\system32\shell32.dll
del C:\WINNT\system32\shell32.dll
然后运行一下,WScript.Shell, Shell.application, WScript.Network就会被卸载了。可能会提示无法删除文件,不用管它,重启一下服务器,你会发现这三个都提示“×安全”了。
改名不安全组件
需要注意的是组件的名称和Clsid都要改,并且要改彻底了。下面以Shell.application为例来介绍方法。
打开注册表编辑器【开始→运行→regedit回车】,然后【编辑→查找→填写Shell.application→查找下一个】,用这个方法能找到两个注册表项:“{13709620-C279-11CE-A49E-444553540000}”和“Shell.application”。为了确保万无一失,把这两个注册表项导出来,保存为 .reg 文件。
比如我们想做这样的更改
13709620-C279-11CE-A49E-444553540000 改名为 13709620-C279-11CE-A49E-444553540001
Shell.application 改名为 Shell.application_ajiang
那么,就把刚才导出的.reg文件里的内容按上面的对应关系替换掉,然后把修改好的.reg文件导入到注册表中(双击即可),导入了改名后的注册表项之后,别忘记了删除原有的那两个项目。这里需要注意一点,Clsid中只能是十个数字和ABCDEF六个字母。
下面是我修改后的代码(两个文件我合到一起了):
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}]
@=”Shell Automation Service”
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}\InProcServer32]
@=”C:\\WINNT\\system32\\shell32.dll”
“ThreadingModel”=”Apartment”
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}\ProgID]
@=”Shell.Application_ajiang.1″
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}\TypeLib]
@=”{50a7e9b0-70ef-11d1-b75a-00a0c90564fe}”
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}\Version]
@=”1.1″
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}\VersionIndependentProgID]
@=”Shell.Application_ajiang”
[HKEY_CLASSES_ROOT\Shell.Application_ajiang]
@=”Shell Automation Service”
[HKEY_CLASSES_ROOT\Shell.Application_ajiang\CLSID]
@=”{13709620-C279-11CE-A49E-444553540001}”
[HKEY_CLASSES_ROOT\Shell.Application_ajiang\CurVer]
@=”Shell.Application_ajiang.1″
你可以把这个保存为一个.reg文件运行试一下,但是可别就此了事,因为万一黑客也看了我的这篇文章,他会试验我改出来的这个名字的。
防止列出用户组和系统进程
我在阿江ASP探针1.9中结合7i24的方法利用getobject(“WINNT”)获得了系统用户和系统进程的列表,这个列表可能会被黑客利用,我们应当隐藏起来,方法是:
【开始→程序→管理工具→服务】,找到Workstation,停止它,禁用它。
防止Serv-U权限提升
其实,注销了Shell组件之后,侵入者运行提升工具的可能性就很小了,但是prel等别的脚本语言也有shell能力,为防万一,还是设置一下为好。
用Ultraedit打开ServUDaemon.exe查找Ascii:LocalAdministrator,和#l@$ak#.lk;0@P,修改成等长度的其它字符就可以了,ServUAdmin.exe也一样处理。
另外注意设置Serv-U所在的文件夹的权限,不要让IIS匿名用户有读取的权限,否则人家下走你修改过的文件,照样可以分析出你的管理员名和密码。
利用ASP漏洞攻击的常见方法及防范
一般情况下,黑客总是瞄准论坛等程序,因为这些程序都有上传功能,他们很容易的就可以上传ASP木马,即使设置了权限,木马也可以控制当前站点的所有文件了。另外,有了木马就然后用木马上传提升工具来获得更高的权限,我们关闭shell组件的目的很大程度上就是为了防止攻击者运行提升工具。
如果论坛管理员关闭了上传功能,则黑客会想办法获得超管密码,比如,如果你用动网论坛并且数据库忘记了改名,人家就可以直接下载你的数据库了,然后距离找到论坛管理员密码就不远了。
作为管理员,我们首先要检查我们的ASP程序,做好必要的设置,防止网站被黑客进入。另外就是防止攻击者使用一个被黑的网站来控制整个服务器,因为如果你的服务器上还为朋友开了站点,你可能无法确定你的朋友会把他上传的论坛做好安全设置。这就用到了前面所说的那一大堆东西,做了那些权限设置和防提升之后,黑客就算是进入了一个站点,也无法破坏这个网站以外的东西。
后记
也许有安全高手或者破坏高手看了我的文章会嘲笑或者窃喜,但我想我的经验里毕竟还是存在很多正确的地方,有千千万万的比我知道的更少的人像我刚开始完全不懂的时候那样在渴求着这样一篇文章,所以我必须写,我不管别人怎么说我,我也不怕后世会有千千万万的人对我唾骂,我一个人承担下来,我也没有娘子需要交代的……
因为这其实只是抛砖引玉的做法,从别人的笑声中,我和我的读者们都可以学到更多有用的东西。
找到已经有人写好的批处理代码:
新建Shell.application.bat和Shell.application.reg文件在同一目录 然后复制相应代码进去.
执行Shell.application.bat自动设置服务器安全.
思路来自ajiang探针的服务器安全设置.http://www.ajiang.net(按ajiang的简单教程设置后shell并没有去掉.是因为注册表里的只是添加了新的.而没有删除旧的.我在bat批处理里加了一句REG Delete HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540000} /f来删除掉原来的注册表.至此ajiang的安全设置才算完全完成.)
Shell.application.bat
regsvr32/u /s %SystemRoot%\System32\wshom.ocx
del %SystemRoot%\System32\wshom.ocx /s
regsvr32/u /s %SystemRoot%\system32\shell32.dll
del %SystemRoot%\system32\shell32.dll /s
Regsvr32 /s C:\WINDOWS\system32\scrrun.dll
regsvr32 /s “C:\Program Files\Common Files\System\ado\msado15.dll
cacls c:\ /e /r everyone
cacls c:\ /e /r “creator owner”
cacls c:\ /e /r users
cacls d:\ /t /e /r everyone
cacls d:\ /t /e /r administrators
cacls d:\ /t /e /r “creator owner”
cacls d:\ /t /e /r users
cacls d:\ /t /e /g administrator:F
cacls e:\ /t /e /r everyone
cacls e:\ /t /e /r administrators
cacls e:\ /t /e /r “creator owner”
cacls e:\ /t /e /r users
cacls e:\ /t /e /g administrator:F
cacls f:\ /t /e /r everyone
cacls f:\ /t /e /r administrators
cacls f:\ /t /e /r “creator owner”
cacls f:\ /t /e /r users
cacls f:\ /t /e /g administrator:F
cacls g:\ /t /e /r everyone
cacls g:\ /t /e /r administrators
cacls g:\ /t /e /r “creator owner”
cacls g:\ /t /e /r users
cacls g:\ /t /e /g administrator:F
cacls h:\ /t /e /r everyone
cacls h:\ /t /e /r administrators
cacls h:\ /t /e /r “creator owner”
cacls h:\ /t /e /r users
cacls h:\ /t /e /g administrator:F
cacls i:\ /t /e /r everyone
cacls i:\ /t /e /r administrators
cacls i:\ /t /e /r “creator owner”
cacls i:\ /t /e /r users
cacls i:\ /t /e /g administrator:F
cacls “C:\Documents and Settings” /t /e /r everyone
cacls “C:\Documents and Settings” /t /e /r “power users”
cacls “C:\Documents and Settings” /t /e /r users
cacls “C:\Program Files” /t /e /r “CREATOR OWNER”
cacls “C:\Program Files” /t /e /r “TERMINAL SERVER USER”
cacls “C:\Program Files” /t /e /r “Power Users”
cacls “C:\WINDOWS\System32\shell32.dll” /e /d guests
cacls “C:\WINDOWS\System32\scrrun.dll” /e /d guests
cacls “C:\WINDOWS\System32\net.exe” /e /d guests
cacls “C:\WINDOWS\System32\net1.exe” /e /d guests
cacls “C:\WINDOWS\System32\tftp.exe” /e /d guests
cacls “C:\WINDOWS\System32\netstat.exe” /e /d guests
cacls “C:\WINDOWS\System32\regedit.exe” /e /d guests
cacls “C:\WINDOWS\System32\at.exe” /e /d guests
cacls “C:\WINDOWS\System32\attrib.exe” /e /d guests
cacls “C:\WINDOWS\System32\ca.exe” /e /d guests
cacls “C:\WINDOWS\System32\format.com” /e /d guests
regedit /s Shell.application.reg
REG Delete HKEY_CLASSES_ROOT\ID\{13709620-C279-11CE-A49E-444553540000} /f
sc config “shellhwdetection” start= disabled
sc config “wuauserv” start= disabled
sc config “ersvc” start= disabled
sc config “helpsvc” start= disabled
sc config “spooler” start= disabled
sc config “RemoteRegistry” start= disabled
sc config “schedule” start= disabled
sc config “lmhosts” start= disabled
sc config “audiosrv” start= disabled
sc config “browser” start= disabled
sc config “lanmanworkstation” start= disabled
Shell.application.reg
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540000}]
“ARPClient”=-
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}]
@=”Shell Automation Service”
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}\InProcServer32]
@=”C:\\WINNT\\system32\\shell32.dll”
“ThreadingModel”=”Apartment”
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}\ProgID]
@=”Shell.Application_efengsljjjjjj.1″
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}\TypeLib]
@=”{50a7e9b0-70ef-11d1-b75a-00a0c90564fe}”
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}\Version]
@=”1.1″
[HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540001}\VersionIndependentProgID]
@=”Shell.Application_efengsljjjjjj”
[HKEY_CLASSES_ROOT\Shell.Application_efengsljjjjjj]
@=”Shell Automation Service”
[HKEY_CLASSES_ROOT\Shell.Application_efengsljjjjjj\CLSID]
@=”{13709620-C279-11CE-A49E-444553540001}”
[HKEY_CLASSES_ROOT\Shell.Application_efengsljjjjjj\CurVer]
@=”Shell.Application_efengsljjjjjj.1″
[HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System]
“DisableCMD”=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
“SynAttackProtect”=dword:2
“EnablePMTUDiscovery”=dword:0
“NoNameReleaseOnDemand”=dword:1
“EnableDeadGWDetect”=dword:0
“KeepAliveTime”=dword:300000
“PerformRouterDiscovery”=dword:0
“EnableICMPRedirects”=dword:0
“IGMPLevel”=dword:0
“DefaultTTL”=dword:fc
“AutoShareServer”=dword:0
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\interface]
“PerformRouterDiscovery”=dword:0
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA]
“RestrictAnonymous”=dword:1
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters]
“DataSetCacheSize”=dword:1f4
“ListenBackLog”=dword:32
“LogBufferSize”=dword:3000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters]
“LogErrorRequests”=dword:0
“LogSuccessfulRequests”=dword:0
“UseSharedWPDesktop”dword:1
转载来源:http://www.myhelen.cn/article_712.html
———————————————-
众所周知,FileSystemObject组件的强大功能及破坏性是它屡屡被免费主页提供商(那些支持ASP)的禁用的原因,我整理了一下,本来只找到两种方法,后来被某人一刺激,硬是想到第三种不为人所知的方法,呵呵,也不知道是不是这样的。
第一种:用RegSrv32 /u C:\WINDOWS\SYSTEM\scrrun.dll(win98路径)来注销该组件。此方法过于狠毒,属于同归于尽的方法,大家都没得用,是下招
第二种:修改Progid的值,在ASP里调用组件的方式通常是 Set 对象名=Server. CreateObject(“Progid”),这时候我们就可以通过修改注册表中的Progid值从达到禁用该组件的方法。在 开始-运行中敲入regedit,然后找到HKEY_CLASSES_ROO T\Scripting.FileSystemObject,这时候我们就可以更改该Progid的值了,如改成Scripting.FileSystemObject8。这样在ASP页里就这样调用了:
<%@ Language=Vbscript%>
<%
Set Fs=Server.CreateObject(“Scripting.FileSystemObject8″)
%>
(如果你前面没有调用过该组件的话,则无须重启,就可以看到效果了,否则请重启后看效果。)
这时候我们看看还是用原来的调用方法的结果:
<%@ Language=Vbscript%>
<%
Set Fs=Server.CreateObject(“Scripting.FileSystemObject”)
%>
这时候的运行结果为:
服务器对象 错误 ‘ASP 0177 : 800401f3′
Server.CreateObject 失败
/aspimage/testfile2.asp, 行3
800401f3
(OK,达到我们的要求)
该方法由于本人迟了两步,结果就让别人抢着回答了,这样极大的刺激了我,结果就产生了第三种方法。
第三种:细心的高手们会想,既然能通过修改Progid值来禁用该组件,那Clsid是否也可以来修改呢?(OK,你想得和我一样)我们知道,除了CreateObject方法以外,也可以使用一般的<object>标注建立一个组件,我们可以在ASP里面使用HTM L的<object>标注,以便在网页中加入一个组件。方法是:
<object runat=server id=fs1 scope=page progid=”Scripting.FileSystemObject”></object>
Runat表示是在服务端执行,Scope表示组件的生命周期,可以选用Session,Appl ication或page(表示当前页面,也可缺省)
这种写法对我们没用,还有一种写法是:
<object runat=server id=fs1 scope=page classid=”clsid:clsid的值”></object>
我们也可以通过修改该Clsid的值而禁用该组件,如将注册表中HKEY_CLASSES_RO OT\Scripting.FileSystemObject\CLSID的值0D43FE01-F093-11CF-8940-00A0C90 54228改成0D43FE01-F093-11CF-8940-00A0C9054229(改了最后面一位),这时候的写法为:
<object runat=server id=fs1 scope=page classid=”clsid:0D43FE01-F093-11CF-8940-00A0C9054229″></object>
看运行结果,没问题,OK。这时候我们再用
<object runat=server id=fs1 scope=page classid=”clsid:0D43FE01-F093-11CF-8940-00A0C9054228″></object>
这时候就出错了
(本文来源于网络论坛,原始作者不详)
原创文章如转载,请注明:转载自月光博客 [ http://www.williamlong.info/ ]
script木马的src一般都是外域的,也就是src是以http打头的,如果是自己网站的script一般都不用加上http;再看看木马的原形,里面还是输出的iframe、JS代码或是其他<object>代码,不管这么多,来多少杀多少。
来跟我写CSS,一一搞定它们,我写了5种不同的方案,大家来测试一下哈:
解决方案1:
iframe{n1ifm:expression(this.src='about:blank',this.outerHTML='');}/*这行代码是解决挂IFRAME木马的哦*/
script{nojs1:expression((this.src.toLowerCase().indexOf('http')==0)?document.write('木马被成功隔离!'):'');}
原理:将<script>标记的src拿出来转为小写,再看是不是以“http”开头的外域JS脚本文件,如果是,则页面内容清空并写出“木马被成功隔离!”。反之正常显示。
缺点:访客无法看到被感染了<script>木马的页面。
解决方案2:
iframe{nifm2:expression(this.src='about:blank',this.outerHTML='');}
script{no2js:expression((this.src.toLowerCase().indexOf('http')==0)?document.close():'');}
原理:将外域的JS文件的document.write()使用document.close()强制关闭。木马内容还没有来得及写完,只有部分被强制缓存输出了,剩下的不会再写了。
解决方案3:
iframe{ni3fm:expression(this.src='about:blank',this.outerHTML='');}
script{n3ojs:expression((this.src.toLowerCase().indexOf('http')==0)?document.execCommand('stop'):'');}
原理:同到外域的JS文件,立即调用IE私有的execCommand方法来停止页面所有请求,所以接下来的外域JS文件也被强制停止下载了。就像我们点了浏览器的“停止”按钮一样。看来这是JS模拟IE停止按钮的一种方法。
解决方案4:
iframe{nif4m:expression(this.src='about:blank',this.outerHTML='');}
script{noj4s:expression(if(this.src.indexOf('http')==0)this.src='res://ieframe.dll/dnserror.htm');}
原理:将外域的JS文件的src重写成本地IE404错误页面的地址,这样,外域的JS代码不会下载。
解决方案5:
代码:
iframe{nifm5:expression(this.src=’about:blank’,this.outerHTML=”);}
script{noj5s:expression((this.id.toLowerCase().indexOf(‘vok‘)!=-1)?document.write(‘木马被成功隔离!’):”));}
<script id=”footerJSapivok” src=”这里写你本网站的JS路径” type=”text/javascript”></script>
<script id=”tongjiJSapivok” src=”这里外域的JS路径” type=”text/javascript”></script>
你网站的所有JS标记(<script>)都得加上id属性,并且有一个共同的前缀、后缀或公共字符串,上面的公共字符串为“vok”。
最新评论