安全在线7月9日报道 服务器如何防溢出?(1)
溢出是操作系统、应用软件永远的痛!在骇客频频攻击、系统漏洞层出不穷的今天,任何人都不能保证操作系统系统、应用程序不被溢出。既然溢出似乎是必然的,而且利用溢出攻击的门槛比较低,利用工具有一定电脑基础的人都可以完成一次溢出。这样看来,电脑系统就处于随时被溢出的危险中,特别是肩负重任的服务器如果被溢出被渗透的话那后果不堪设想。我们总不能坐以待毙,做为网络管理人员,应该未雨绸廖做好防范工作,把服务器被溢出的可能性降到最低。
一、防什么,怎么防?
1、必须打齐补丁
尽最大的可能性将系统的漏洞补丁都打完;MicrosoftWindowsServer系列的服务器系统可以将自动更新服务打开,然后让服务器在指定的某个时间段内自动连接到Microsoft Update网站进行补丁的更新。如果服务器为了安全起见禁止了对公网外部的连接的话,可以用Microsoft WSUS服务在内网进行升级。
2、服务最小化
最少的服务等于最大的安全,停掉一切不需要的系统服务以及应用程序,最大限度地降底服务器的被攻击系数。比如前阵子的NDS溢出,就导致很多服务器挂掉了。其实如果WEB类服务器根本没有用到DNS服务时,大可以把DNS服务停掉,这样DNS溢出就对你们的服务器不构成任何威胁了。
服务器如何防溢出?(2)
3、端口过滤
启动TCP/IP端口的过滤,仅打开服务器常用的TCP如21、80、25、110、3389等端口;如果安全要求级别
高一点可以将UDP端口关闭,当然如果这样之后缺陷就是如在服务器上连外部就不方便连接了,这里建议大家用IPSec来封UDP。在协议筛选中只允许TCP协议、UDP协议 以及RDP协议等必需用协议即可;其它无用均不开放。
4、系统防火墙
启用IPSec策略,为服务器的连接进行安全认证,给服务器加上双保险。封掉一些危险的端口,诸如:135 145 139 445 以及UDP对外连接之类、以及对通读进行加密与只与有信任关系的IP或者网络进行通讯等等。通过IPSec禁止UDP或者不常用TCP端口的对外访问就可以非常有效地防反弹类木马。
服务器如何防溢出?(3)
5、系统命令防御
删除、移动、更名或者用访问控制表列Access Control Lists (ACLs)控制关键系统文件、命令及
文件夹:
(1).黑客通常在溢出得到shell后,来用诸如net.exe、net1.exe、ipconfig.exe、user.exe、query.exe、 regedit.exe、regsvr32.exe 来达到进一步控制服务器的目的。如:加账号、克隆管理员了等等。我们可以将这些命令程序删除或者改名。
提示:在删除与改名时先停掉文件复制服务 (FRS)或者先将 %windir%system32dllcache下的对应文件删除或改名。
(2).也或者将这些.exe文件移动到你指定的文件夹,这样也方便以后管理员自己使用。
(3).访问控制表列ACLS控制:
找到%windir%system32下找到cmd.exe、cmd32.exe、net.exe、net1.exe、ipconfig.exe、tftp.exe、ftp.exe、user.exe、reg.exe、regedit.exe、regedt32.exe、regsvr32.exe这些黑客常用的文件,在"属性"→"安全"中对他们进行访问的ACLs用户进行定义,诸如只给administrator有权访问,如果需要防范一些溢出攻击、以及溢出成功后对这些文件的非法利用;那么我们只需要将system用户在ACLs中进行拒绝访问即可。
(4).如果你觉得在GUI下面太麻烦的话,你也可以用系统命令的CACLS.EXE来对这些.exe文件的Acls进行编辑与修改,或者说将他写成一个.bat批处理文件来执行以及对这些命令进行修改。
(5).对磁盘如C、D、E、F等进行安全的ACLS设置从整体安全上考虑的话也是很有必要的,另外特别要对Windows、WinntSystem、Document and Setting等文件夹。
6、组策略配置
想禁用"cmd.exe",执行"开始→运行"输入gpedit.msc打开组策略,选择"用户配置→管理模板→系统",把"阻止访问命令提示符"设为"启用"。同样的可以通过组策略禁止其它比较危险的应用程序。
服务器如何防溢出?(4)
7、服务降级
对一些以System权限运行的系统服务进行降级处理。比如:将Serv-U、Imail、IIS、Php
、Mssql、Mysql等一系列以 System权限运行的服务或者应用程序换成其它administrators成员甚至users权限运行,这样就会安全得多了。但前提是需要对这些基本运行状态、调用API等相关情况较为了解。
小结:其实,关于防止如Overflow溢出类攻击的办法除了用上述的几点以外,还有很多种办法:比如通过注册表进行建立相应的键值,进行设置;写防护过滤程序用DLL方式加载windows到相关的SHell以及动态链接程序之中这类。当然自己写代码来进行验证加密就需要有相关深厚的Win32编程基础了,以及对Shellcode较有研究。
二、如何防渗透?
如果不幸如果某台服务器被攻击者溢出成功,退而求其次,那应该怎样防止被攻击者溢出得到Shell后对局域网的其他服务器的进一步入侵呢?
1、其实在做好上述的工作之后,基本上可以预防攻击者在溢出之后得到shell了,即使Overflow溢出成功,但在用CMDSHELL、以及对外连接时就卡了。为什么呢?因为:(1).溢出后程序无法再调用到CMDSHLL我们已经禁止system访问CMD.exe了。(2).溢出之后在进行反弹时已经无法对外部IP进行连接了。当然能过system权限来反弹shell对于大部分攻击者就困难了。
2、当然世界上是不存在绝对的安全的,假设入侵者在得到了shell之后,做些什么呢?一般入侵者在在得到shell之后,就会利用系统命令加账号,通过tftp、ftp、vbs等方式传文件了等等来达到进一步控制服务器。这里我们通过上述的办法对命令进行了限制,入侵者是没有办法通过tftp、 ftp来传文件了,但他们仍然可以能过echo写批处理,用批处理通过脚本BAT、VB等从WEB上下载文件,以及修改其它盘类的文件等潜在破坏行为。所以我们需要将echo命令也限制以及将其它盘的System写、修改文件的权限进行处理。以及将VB类脚本以及XML、http等组件进行禁用或者限制system的运行权限。这样的话别人得到Shell也无法对服务器上的文件进行删除以及进行步的控制系统了;同时也防止本地提权反弹Shell了。
总结:服务器的安全是个系统工程,任何小小的疏忽都有可以造成服务器的沦陷。"防"永远比"补"好,管理员"防"在溢出之前,把被攻击的危险降到最低,这才是真正的服务器安全之道。