开篇:润墨网以专业的文秘视角,为您筛选了一篇缓冲区溢出的学与防范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
本文可以学到
缓冲区溢出的原理
如何防范缓冲区溢出
时间:
2008年10月15日
地点:
某大型外贸公司
入侵事件:
10月15日晚,多台WIN2003 SERVER+IIS6.0环境的服务器同时出现当机现象,并有两台服务器(OA、MAIL服务器)发现有黑客偷窃数据的日志(注:公司机房运行着OA、RTX、ERP、NIA等大约20台业务服务器)。公司工程师马上选择断开服务器区网络,并与信息安全中心联系,询问如何进行处理。
基础环境:
业务服务器:WIN2003 SERVER SP2、IIS6.0+NET组件(ERP采用了TOMCAT6.0)、所有服务器连接在千兆XX防火墙(硬)的DMZ结构中、SQL SERVER2005数据库
事件分析:
由于微软的IIS 6存在一个缓冲区溢出漏洞。黑客对此漏洞进行攻击,使运行IIS的服务器崩溃,并获取超级权限执行任意的代码。
小知识:溢出攻击是什么?
缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。黑客就是利用这种手法来强制获取高级用户权限的操作能力。举个例子:比如将一杯水倒入一只同样体积的杯子的果汁中,杯子中原有的果汁被溢出来,水占据了一部分空间,溢出攻击就出现了。
黑客攻击手段
分析篇
工程师经过详细的分析,并最终对在攻击事件中黑客对服务器群进行远程攻击的手段做了如下的分析:
黑客利用浏览器向IIS提出一个HTTP请求,在域名(或IP地址)后,加上一个文件名,该文件名以“.htr”做后缀。于是IIS认为客户端正在请求一个“.htr”文件,“.htr”扩展文件被映射成ISAPI(Internet Service API,网络脚本应用程序接口,ASP对应的ISAPI映射为“C:\WINDOWS\inetsrv\asp.dll”)应用程序,IIS会复位向所有针对“.htr”资源的请求到 ISM.DLL程序 ,ISM.DLL 打开这个文件并执行。
当浏览器中输入请求语句(例如:/adpdc.adsp,这也称为请求语句)字符大于600时,IIS会出现溢出问题,导致权限丢失,攻击者可以利用这个权限执行木马、病毒等。溢出后提示的错误见图1所示。
安全解决方案篇
工程师针对以上的分析和受攻击的服务器的现状,提出了以下防范性防御措施:
非0-DAYS漏洞的防范
减少服务器非必需程序,避免安装媒体播放器、QQ、游戏等第三方软件。完善补丁,最好是比如Microsoft Windows Server系列的系统可以将自动更新服务打开,然后让服务器在您指定的某个时间段内自动连接到Microsoft Update网站进行补丁的更新。如果您的服务器为了安全起见,禁止了对公网外部的连接的话,可以用Microsoft WSUS服务在内网进行升级。
小知识:什么是0-DAYS
0-DAYS原本是破解的意思。最早的破解是专门针对软件的,叫做WAREZ,后来才发展到游戏、音乐、影视等其他内容的。0-DAYS中的0表示zero,早期的0-DAYS表示在软件发行后的24小时内就出现破解版本,现在我们已经引申了这个含义,只要是在软件或者其他东西后,在最短时间内出现相关破解的,都可以叫0-DAYS。0-DAYS是一个统称,所有的破解都可以叫0-DAYS。
信息安全意义上的0-DAYS是指在安全补丁后被了解和掌握的漏洞信息。
修改服务器进程,降低攻击范围
停掉一切不需要的系统服务以及应用程序,最大限度地降低服务器的被攻击系数(如图2)。比如MSDTC溢出,就导致很多服务器挂掉。其实如果WEB类服务器根本没有用到MSDTC服务时,推荐管理员把MSDTC服务停掉,就可以避免MSDTC服务的攻击。
启动TCP/IP端口过滤
仅打开常用的TCP如21、80、25、110、3389等端口。如果安全要求级别高一点可以将UDP端口关闭,当然如果这样,缺陷就是在服务器上就不方便与外部连接了。这里建议大家用IPSec来封UDP。
方法:在协议筛选中“只允许”TCP协议(协议号为:6)、UDP协议(协议号为:17)以及RDP协议(协议号为:27)等必用协议即可。其他无用的均不开放(如图3)。
启用IPSec策略
为服务器的连接进行安全认证,给服务器加上双保险,在这里可以封掉一些危险的端口如:135、145、139、445以及UDP对外连接之类,还有对通读进行加密与只有信任关系的IP或者网络进行通讯等等(如图4)。
访问控制列表ACLS
第1步:在C:\WINDOWS\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这些黑客常用的文件。
第2步:分别对其右击,选择“属性安全”,对他们进行访问的ACLS用户进行定义。如只给administrator有权访问,如果需要防范一些溢出攻击以及溢出成功后对这些文件的非法利用;那么我们只需要将system用户在ACLS中进行拒绝访问即可。
小提示:
如读者感觉利用访问控制列表非常麻烦的话,可通过修改注册表,禁止用户使用命令解释器(CMD.exe)和运行批处理文件(.bat文件)。
方法一:
第1步:展开如下分支:“HKEY_
CURRENT_USER\Software\Policies\Microsoft\WindowsSystemDisable
CMD”(注:XP用户需要开启软件防护策略后,注册表里才有)。
第2步:新建一个双字节(REG_DWORD)。修改其值为1,命令解释器和批处理文件都不能被运行。修改其值为2,则只是禁止命令解释器的运行,反之将值改为0,则是打开CMS命令解释器。根据需要进行修改。改好后保存退出。
方法二:新建文本文件并输入以下内容
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USERSoftwarePoliciesMicrosoftWindowsSystem]
"DisableCMD"=dword:00000001
保存为.reg文件后双击导入注册表。
对一些以System权限运行的系统服务进行降级处理
如将Serv-U、Imail、IIS、Php、Mssql、Mysql等一系列以System权限运行的服务或者应用程序换成其他administrators成员甚至users权限运行(如图5、图6)。
以Serv-U为例。右击SERV-U选择“属性安全”,在这里删除SYSTEM、administrators权限。
小知识:缓冲区溢出的原理
通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。
溢出攻击的流程如图所示。
小知识:溢出攻击的危害
在当前网络与分布式系统安全中,被广泛利用的50%以上都是缓冲区溢出。而缓冲区溢出中,最为危险的是堆栈溢出。因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,从而得到shell并为所欲为。
缓冲区溢出是目前导致“黑客”型病毒横行的主要原因。从红色代码到Slammer,再到“冲击波”,都是利用缓冲区溢出漏洞的典型。缓冲区溢出是一个编程问题,防止利用缓冲区溢出发起的攻击,关键在于程序开发者在开发程序时仔细检查溢出情况,不允许数据溢出缓冲区。此外,用户需要经常登录操作系统和应用程序提供商的网站,及时下载补丁程序,弥补系统漏洞。