溢出是操作系统、应用软件永远的痛 ! 在骇客频频攻击、系统漏洞层出不穷的今天,任何人都不能保证自己的系统、程序不被溢出。既然溢出似乎是必然的,而且利用溢出攻击的门槛比较低,利用工具有一定电脑基础的人都可以完成一次溢出。这样看来,我们的电脑系统,就处于随时被溢出的危险中。我们总不能坐以待毙,做为 IT 安全 人,都应该未雨绸廖,做好防范工作,把溢出的可能性降到最低。
一、如何防 ? 防什么 ?
1 、必须打齐补丁
尽最大的可能性将系统的漏洞补丁都打完 ; 最好是比如 Microsoft Windows Server 系列的系统可以将自动更新服务打开,然后让 服务器 在指定的某个时间段内自动连接到 Microsoft Update 网站进行补丁的更新。如果 服务器 为了 安全 起见禁止了对公网外部的连接的话,可以用 Microsoft WSUS 服务在内网进行升级。
2 、服务最小化
最少的服务等于最大的安全,停掉一切不需要的系统服务以及应用程序,最大限度地降底服务器的被攻击系数。比如前阵子的 NDS 溢出,就导致很多服务器挂掉了。其实如果 WEB 类服务器根本没有用到 DNS 服务时,大可以把 DNS 服务停掉,这样 DNS 溢出就对你们的服务器不构成任何威胁了。
3 、端口过滤
启动 TCP/IP 端口的过滤,仅打开常用的 TCP 如 21 、 80 、 25 、 110 、 3389 等端口 ; 如果安全要求级别高一点可以将 UDP 端口关闭,当然如果这样之后缺陷就是如在服务器上连外部就不方便连接了,这里建议大家用 IPSec 来封 UDP 。在 协议 筛选中只允许 TCP 协议 ( 协议 号为: 6) 、 UDP 协议 ( 协议号为: 17) 以及 RDP 协议 ( 协议号为: 27) 等必需用协议即可 ; 其它无用均不开放。
4 、系统 防火墙
启用 IPSec 策略,为服务器的连接进行安全认证,给服务器加上双保险。封掉一些危险的端口,诸如: 135 145 139 445 以及 UDP 对外连接之类、以及对通读进行加密与只与有信任关系的 IP 或者网络进行通讯等等。
提示:通过 IPSec 禁止 UDP 或者不常用 TCP 端口的对外访问就可以非常有效地防反弹类木马。
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 设置从整体安全上考虑的话也是很有必要的,另外特别是 win2k ,对 Winnt 、 WinntSystem 、 Document and Setting 等文件夹。
6 、组策略配置
想禁用 “cmd.exe” ,执行 “ 开始 → 运行 ” 输入 gpedit.msc 打开组策略,选择 “ 用户配置 → 管理模板 → 系统 ” ,把 “ 阻止访问命令提示符 ” 设为 “ 启用 ” 。
同样的可以通过组策略禁止其它比较危险的应用程序。
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 了。
总结: 安全是个系统工程,任何小小的疏忽都会让我们全盘皆输。 “ 防 ” 永远比 “ 补 ” 好, IT 安全人员 “ 防 ” 在溢出之前,把被攻击的危险降到最低,这才是真正的安全之道。
【 打印 】【 关闭 】 |