原理篇
我们将从***者***的各个环节来作出对应措施一步步的加固windows系统.
加固windows系统.一共归于几个方面
1.端口限制
2.设置ACL权限
3.关闭服务或组件
4.包过滤
5.审计
我们现在开始从***者的第一步开始.对应的开始加固已有的windows系统.
1.扫描
这是***者在刚开始要做的第一步.比如搜索有漏洞的服务.
对应措施:端口限制
以下所有规则.都需要选择镜像,否则会导致无法连接
我们需要作的就是打开服务所需要的端口.而将其他的端口一律屏蔽
2.下载信息
这里主要是通过URLSCAN.来过滤一些非法请求
对应措施:过滤相应包
我们通过安全URLSCAN并且设置urlscan.ini中的DenyExtensions字段
来阻止特定结尾的文件的执行
3.上传文件
***者通过这步上传WEBSHELL,提权软件,运行cmd指令等等.
对应措施:取消相应服务和功能,设置ACL权限
如果有条件可以不使用FSO的.
通过regsvr32/uc:/windows/system32/scrrun.dll来注销掉相关的DLL.
如果需要使用.
那就为每个站点建立一个user用户
对每个站点相应的目录.只给这个用户读,写,执行权限,给administrators全部权限
安装杀毒软件.实时杀除上传上来的恶意代码.
个人推荐MCAFEE或者卡巴斯基
如果使用MCAFEE.对WINDOWS目录所有添加与修改文件的行为进行阻止.
4.WebShell
***者上传文件后.需要利用WebShell来执行可执行程序.或者利用WebShell进行更加方便的文件操作.
对应措施:取消相应服务和功能
一般WebShell用到以下组件
WScript.Network
WScript.Network.1
WScript.Shell
WScript.Shell.1
Shell.Application
Shell.Application.1
我们在注册表中将以上键值改名或删除
同时需要注意按照这些键值下的CLSID键的内容
从/HKEY_CLASSES_ROOT/CLSID下面对应的键值删除
5.执行SHELL
***者获得shell来执行更多指令
对应措施:设置ACL权限
windows的命令行控制台位于/WINDOWS/SYSTEM32/CMD.EXE
我们将此文件的ACL修改为
某个特定管理员帐户(比如administrator)拥有全部权限.
其他用户.包括system用户,administrators组等等.一律无权限访问此文件.
6.利用已有用户或添加用户
***者通过利用修改已有用户或者添加windows正式用户.向获取管理员权限迈进
对应措施:设置ACL权限.修改用户
将除管理员外所有用户的终端访问权限去掉.
限制CMD.EXE的访问权限.
限制SQLSERVER内的XP_CMDSHELL
7.登陆图形终端
***者登陆TERMINALSERVER或者RADMIN等等图形终端,
获取许多图形程序的运行权限.由于WINDOWS系统下绝大部分应用程序都是GUI的.
所以这步是每个***WINDOWS的***者都希望获得的
对应措施:端口限制
***者可能利用3389或者其他的***之类的获取对于图形界面的访问.
我们在第一步的端口限制中.对所有从内到外的访问一律屏蔽也就是为了防止反弹***.
所以在端口限制中.由本地访问外部网络的端口越少越好.
如果不是作为MAILSERVER.可以不用加任何由内向外的端口.
阻断所有的反弹***.
8.擦除脚印
***者在获得了一台机器的完全管理员权限后
就是擦除脚印来隐藏自身.
对应措施:审计
首先我们要确定在windowsRi志中打开足够的审计项目.
如果审计项目不足.***者甚至都无需去删除windows事件.
其次我们可以用自己的cmd.exe以及net.exe来替换系统自带的.
将运行的指令保存下来.了解***者的行动.
对于windowsRi志
我们可以通过将Ri志发送到远程Ri志服务器的方式来保证记录的完整性.
evtsys工具(https://engineering.purdue.edu/ECN/Resources/Documents)
提供将windowsRi志转换成syslog格式并且发送到远程服务器上的功能.
使用此用具.并且在远程服务器上开放syslogd,如果远程服务器是windows系统.
推荐使用kiwisyslogdeamon.
我们要达到的目的就是
不让***者扫描到主机弱点
即使扫描到了也不能上传文件
即使上传文件了不能操作其他目录的文件
即使操作了其他目录的文件也不能执行shell
即使执行了shell也不能添加用户
即使添加用户了也不能登陆图形终端
即使登陆了图形终端.拥有系统控制权.他的所作所为还是会被记录下来.
额外措施:
我们可以通过增加一些设备和措施来进一步加强系统安全性.
1.代理型防火墙.如ISA2004
代理型防火墙可以对进出的包进行内容过滤.
设置对HTTPREQUEST内的requeststring或者form内容进行过滤
将SELECT.DROP.DELETE.INSERT等都过滤掉.
因为这些关键词在客户提交的表单或者内容中是不可能出现的.
过滤了以后可以说从根本杜绝了SQL注入
2.用SNORT建立IDS
用另一台服务器建立个SNORT.
对于所有进出服务器的包都进行分析和记录
特别是FTP上传的指令以及HTTP对ASP文件的请求
可以特别关注一下.
本文提到的部分软件在提供下载的RAR中包含
包括COM命令行执行记录
URLSCAN2.5以及配置好的配置文件
IPSEC导出的端口规则
evtsys
一些注册表加固的注册表项.
实践篇
下面我用的例子.将是一台标准的虚拟主机.
系统:windows2003
服务:[IIS][SERV-U][IMAIL][SQLSERVER2000][PHP][MYSQL]
描述:为了演示,绑定了最多的服务.大家可以根据实际情况做筛减
1.WINDOWS本地安全策略端口限制
A.对于我们的例子来说.需要开通以下端口
外->本地80
外->本地20
外->本地21
外->本地PASV所用到的一些端口
外->本地25
外->本地110
外->本地3389
然后按照具体情况.打开SQLSERVER和MYSQL的端口
外->本地1433
外->本地3306
B.接着是开放从内部往外需要开放的端口
按照实际情况,如果无需邮件服务,则不要打开以下两条规则
本地->外53TCP,UDP
本地->外25
按照具体情况.如果无需在服务器上访问网页.尽量不要开以下端口
本地->外80
C.除了明确允许的一律阻止.这个是安全规则的关键.
外->本地所有协议阻止
2.用户帐号
a.将administrator改名,例子中改为root
b.取消所有除管理员root外所有用户属性中的
远程控制->启用远程控制以及
终端服务配置文件->允许登陆到终端服务器
c.将guest改名为administrator并且修改密码
d.除了管理员root,IUSER以及IWAM以及ASPNET用户外.禁用其他一切用户.包括SQLDEBUG以及TERMINALUSER等等
3.目录权限
将所有盘符的权限,全部改为只有
administrators组全部权限
system全部权限
将C盘的所有子目录和子文件继承C盘的administrator(组或用户)和SYSTEM所有权限的两个权限
然后做如下修改
C:/ProgramFiles/CommonFiles
开放Everyone 默认的读取及运行,列出文件目录,读取三个权限
C:/WINDOWS/
开放Everyone 默认的读取及运行,列出文件目录,读取三个权限
C:/WINDOWS/Temp
开放Everyone修改,读取及运行,列出文件目录,读取,写入权限
现在WebShell就无法在系统目录内写入文件了.
当然也可以使用更严格的权限.
在WINDOWS下分别目录设置权限.
可是比较复杂.效果也并不明显.
如果服务器上需要运行.NET
C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/TemporaryASP.NETFiles
开放Everyone修改,读取及运行,列出文件目录,读取,写入权限
4.IIS
在IIS6下.应用程序扩展内的文件类型对应ISAPI的类型已经去掉了IDQ,PRINT等等危险的脚本类型,
在IIS5下我们需要把除了ASP以及ASA以外所有类型删除.
安装URLSCAN
在[DenyExtensions]中
一般加入以下内容
.cer
.cdx
.mdb
.bat
.cmd
.com
.htw
.ida
.idq
.htr
.idc
.shtm
.shtml
.stm
.printer
这样***者就无法下载.mdb数据库.这种方法比外面一些在文件头加入特殊字符的方法更加彻底.
因为即便文件头加入特殊字符.还是可以通过编码构造出来的
5.WEB目录权限
作为虚拟主机.会有许多独立客户
比较保险的做法就是为每个客户,建立一个windows用户
然后在IIS的响应的站点项内
把IIS执行的匿名用户.绑定成这个用户
并且把他指向的目录
权限变更为
administrators全部权限
system全部权限
单独建立的用户读写执行
如果服务器上站点不多.并且有论坛
我们可以把每个论坛的上传目录
去掉此用户的执行权限.
只有读写权限
这样***者即便绕过论坛文件类型检测上传了webshell
也是无法运行的.
6.MSSQLSERVER2000
使用系统帐户登陆查询分析器
运行以下脚本
usemaster
execsp_dropextendedproc'xp_cmdshell'
execsp_dropextendedproc'xp_dirtree'
execsp_dropextendedproc'xp_enumgroups'
execsp_dropextendedproc'xp_fixeddrives'
execsp_dropextendedproc'xp_loginconfig'
execsp_dropextendedproc'xp_enumerrorlogs'
execsp_dropextendedproc'xp_getfiledetails'
execsp_dropextendedproc'Sp_OACreate'
execsp_dropextendedproc'Sp_OADestroy'
execsp_dropextendedproc'Sp_OAGetErrorInfo'
execsp_dropextendedproc'Sp_OAGetProperty'
execsp_dropextendedproc'Sp_OAMethod'
execsp_dropextendedproc'Sp_OASetProperty'
execsp_dropextendedproc'Sp_OAStop'
execsp_dropextendedproc'Xp_regaddmultistring'
execsp_dropextendedproc'Xp_regdeletekey'
execsp_dropextendedproc'Xp_regdeletevalue'
execsp_dropextendedproc'Xp_regenumvalues'
execsp_dropextendedproc'Xp_regread'
execsp_dropextendedproc'Xp_regremovemultistring'
execsp_dropextendedproc'Xp_regwrite'
dropproceduresp_makewebtask
go
删除所有危险的扩展.
7.修改CMD.EXE以及NET.EXE权限
将两个文件的权限.修改到特定管理员才能访问,比如本例中.我们如下修改
cmd.exe root用户 所有权限
net.exe root用户 所有权现
这样就能防止非法访问.
还可以使用例子中提供的comlog程序
将com.exe改名_com.exe,然后替换com文件.这样可以记录所有执行的命令行指令
8.备份
使用ntbackup软件.备份系统状态.
使用reg.exe备份系统关键数据
如regexportHKLM/SOFTWARE/ODBCe:/backup/system/odbc.reg/y
来备份系统的ODBC
9.杀毒
这里介绍MCAFEE8i中文企业版
因为这个版本对于国内的许多恶意代码和***都能够及时的更新.
比如已经能够检测到海阳顶端2006
而且能够杀除IMAIL等SMTP软件使用的队列中MIME编码的病毒文件
而很多人喜欢安装诺顿企业版.而诺顿企业版,对于WEBSHELL.基本都是没有反应的.
而且无法对于MIME编码的文件进行杀毒.
在MCAFEE中.
我们还能够加入规则.阻止在windows目录建立和修改EXE.DLL文件等
我们在软件中加入对WEB目录的杀毒计划.
每天执行一次
并且打开实时监控.
10.关闭无用的服务
我们一般关闭如下服务
ComputerBrowser
HelpandSupport
Messenger
PrintSpooler
RemoteRegistry
TCP/IPNetBIOSHelper
如果服务器不用作域控,我们也可以禁用
Workstation
11.取消危险组件
如果服务器不需要FSO
regsvr32/uc:/windows/system32/scrrun.dll
注销组件
使用regedit
将/HKEY_CLASSES_ROOT下的
WScript.Network
WScript.Network.1
WScript.Shell
WScript.Shell.1
Shell.Application
Shell.Application.1
键值改名或删除
将这些键值下CLSID中包含的字串
如{72C24DD5-D70A-438B-8A42-98424B88AFB8}
到/HKEY_CLASSES_ROOT/CLSID下找到以这些字串命名的键值
全部删除
12.审计
12.审计
本地安全策略->本地策略->审核策略
打开以下内容
审核策略更改 成功,失败
审核系统事件 成功,失败
审核帐户登陆事件 成功,失败
审核帐户管理 成功,失败
本文出自http://nic.buaa.edu.cn/aq/zjaq/21057.htm