优化NFR之一 --MSSQL Hello Buffer Overflow
优化 一 检测 4 5 8 0 一个老牌的商业网络 品,最初由 牛人. 建,是作为一个通用的网络流量分析和记录软件来实现的,为了最大限度地发挥分析工具的灵活性,供了完善强大的 本语言,在很多的评测中表现出色。虽然 供过数百个签名库,但是缺乏一个可靠的签名集一直是他的软肋。 使用 一段时间后,发现 在着不少问题。且不说 中文的兼容性差而经常退出,也不说 本升级而攻击事件说明却一直用旧版本的说明,单是 最关键的攻击签名库,却让我大跌眼镜。除了升级缓慢以外,甚至还存在不少错误的签名。本系列文章针对其中我发现的部分问题进行分析和阐述,以便各位更好地利用 品,同时也想和各位同仁讨论 攻击签名库的编写。由于知识和时间的限制,错误之处在所难免,还希望得到各位的指教,任何意见或建议请发至:微软为对抗 出的数据库, 占领的市场份额已经仅次于 世界第二,但是其安全性也一直受到用户的置疑。从 1996 年,司推出的 本到 1998 年推出的 及到 2000 年 8 月推出了 000,在版本和功能不断升级的情况下,安全问题却没有得到很好地改善,不断发布针对安全公告和补丁。在 2003 年 1 月 24 日,针对 “虫在肆虐,导致网络流量激增,严重影响了世界范围内的计算机和网络系统。漏洞引起了各大安全公司和厂商的重视,因此 立即发布了多个针对 攻击签名,其中包括了 2002 年 8 月 7 日 司 现的 洞。但是在使用过程中,我发现 对该漏洞的报警非常多,于是我对此进行了分析,于是写成了这个文章,以做记录。 面是 对 报警信息: 3:54:21 1526 D:D:k 6531 00 3 P:P:中包括了事件的严重等级、时间、字、攻击源 的 一些其他报警信息。 在实际的使用中,一天产生了几百条这种报警,看来这是个误报,我们可以好好的分析一下了。 检测 我们首先打开 布的签名库 者也可以在 查看) 看一下针对这个漏洞的攻击签名: ….. 变量定义等… … , [""""" ", ); c", "; "\ ……. 1433) { $= { $ } $ } { { = + 1; } = 1; } { " " "40 " 60, " " " " " " " " " " " " " 6); } $to , ", } } 从上面的 我们可以看到,做这个检测的时候步骤如下 : 1、定义了一个攻击特征码: "\ 和攻击特征码的长度: 2、从 载荷数据中取出数据,把这个数据的长度和特征码长度比较,如果这个数据长度小于攻击特征码的长度,那么就不再进行下一步的检测; 3、否则,把这个数据和特征码进行字符串匹配,如果一致则认为是攻击行为,然后进行阻止或者报警。 接下来我们分析一下 数据,在 选择 00,定好条件,按 到数据,随便选取一条,来得到如下内容:53:54:21 433 391 \面这条记录包含了攻击的时间,报告攻击行为的 字, 目的 的端口、源 源端口,而我们关心的是有效载荷 为它是 来和攻击签名库比较的数据。但是 这里有几个小问题: 的能转换成 符的 16 进制数转换成 ; 字符,这个将在以后的分析中可以看到。 在这个例子中为了分析方便,我们把上面的 的字符特征码部分转换成 16 进制数: \到数据组包后,发现是 ,便把里面的内容和 攻击库进行比较,很明显,上面所列的数据和攻击库是相符合的,因此一个报警便产生了,但是这真是一个攻击行为吗?我们继续看下面的分析。 据 协议分析项目(将会在近期公布项目成果) ,000 用的是 的格式如下: 头(8 字节)|载数据| 中 000 包头结构如下: 中 段域 1 个字节,用来表示 作请求种类。在这个漏洞中是 0就是 录中的有效负载中的第一个字节 00预登录验证命令请求。其目的是获得当前 一些设置值,比如 本,是否支持加密等信息,作为客户端在构造 的一个依据。接受到该类型的包的时候,的相应函数做处理,在我的系统 000(没有 情况下,相应函数如下: 2 222224 2222222222[2[4h] 2 2 1 22 1 22 3 …… 段域 1 个字节,当它为 0时候表示此包为当前 话中的最后一个。 段域 2 个字节,表示 的总长度,包括 头的长度。 段域 2 个字节,目前保留未用。 段域 1 个字节,表示此 在当前 作请求中的序号 段域 1 个字节,目前保留未用。 包主要包格式如下: 头(8 字节)| 字段指示头 |信息| 中字段指示头是一个可以变长的表,表的每一项代表了在一个字段在信息中的偏移地址和长度信息,在 主要是 4 个字段,其对应的字段指示头的结构如下: { } 信息内容的结构如下: { } 其中: 段域 偏移:0 长度:1 含义:客户端使用的网络连接库(版本号信息的字段编号。 说明: 备注:该值固定为 0 段域 偏移:1 长度:2 含义:客户端使用的网络连接库(版本号信息的字段偏移。 说明:字段格式是网络字节顺序 备注: 段域 偏移:3 长度:2 含义:客户端使用的网络连接库(版本号信息的字段长度。 说明:字段格式是网络字节顺序 备注:该值固定为 6 段域 偏移:5 长度:1 含义:客户端使用强制加密标记字段的字段号。 说明: 备注:该值固定为 1 段域 偏移:6 长度:2 含义:客户端使用强制加密标记字段的偏移。 说明:字段格式是网络字节顺序 备注: 段域 偏移:8 长度:2 含义:客户端使用强制加密标记字段的长度。 说明:字段格式是网络字节顺序 备注:该值固定为 1 段域 偏移:0度:1 含义:客户端要求使用服务器的实例名字段的字段号。 说明: 备注:该值固定为 2 段域 偏移:0度:2 含义:客户端要求使用服务器的实例名字段的偏移。 说明:字段格式是网络字节顺序 备注: 段域 偏移:0长度:2 含义:客户端要求使用服务器的实例名字段的长度。 说明:字段格式是网络字节顺序 备注: 段域 偏移:0度:1 含义:客户端进程的线程 段的字段号。 说明: 备注:该值固定为 3 段域 偏移:0度:2 含义:客户端进程的线程 段的的偏移。 说明:字段格式是网络字节顺序 备注: 段域 偏移:0度:2 含义:客户端进程的线程 段的长度。 说明:字段格式是网络字节顺序 备注:该值固定为 4 段域 偏移:0度:1 含义:此字段标记字段指示头已经结实,下面的就是字段的信息。 说明:结束标记是 0注: 段域 偏移:0度:6 含义:客户端使用的网络连接库(版本号。 说明:其版本号取的是 版本 备注:其格式是网络字节格式,如版本号为 为 08 00 02 10 00 00 段域 偏移:0度:1 含义:客户端强制加密标志。 说明:0 代表客户端不强制加密, 1 代表客户端使用强制加密 备注: 段域 偏移:0度:义:客户端要求使用的实例名。 说明:单字节格式 备注:默认实例使用 个名字 段域 偏移:0度:4 含义:客户端进程的线程 说明:字段格式是主机字节顺序 备注: 由上面的格式可以看出,一个用默认实例名 接的 格式将是如下的格式: \ 攻击签名库却是 "\ 明显是正常 登陆包的一部分,这就难怪会有这么多报警了,那 这个攻击签名是如何得到的呢? 我们还是从它的漏洞说明入手吧! 面是 对这个漏洞的说明: to of ,而从: 000000000000000000000000000000000000; 00000; ….. if( { if({ 60); r= 096); ",r,"\n"); r) { n"); } } 其中 根据 议构造的包,中间加了 560 个字符 X,构造的 从这里我们可以看到,可怜的 然不负责任地把 的 出 11 个字符,毅然决然地把它们作为其签名。更为可笑的是居然还写着“to of 。 这就是在许多评测中遥遥领先的 来和 起这个事情的时候,认为这个现象和很多评测机构在评测 品的时候,重视对产品漏报的检测而忽视对误报的评测有关。因为在评测产品时,基本上都是大部分都是黑箱评测,要检测漏报只要收集几个可以进行,但要检测漏报却要产生正常的包,有些系统比如这里的 果不了解它的协议包格式,是很难产生的。因此一些 生便钻了这样的空子,只要收集一些 其中的攻击代码作为攻击签名直接发布,而不去分析漏洞产生的真正原因。 下面我们来分析一下这个漏洞产生的原因,然后我们就可以根据这个分析,写出比较完善的攻击签名。 汇编,我们可以看到: 2 A j 2[ 2[22[2228 22[2228 这个漏洞的原因就在这里,当程序用 贝的时候,如果源字符串超出 0就是 532)后,目标地址后的环境变量就会被覆盖导致溢出。由于这个漏洞很早,经历了“虫后,基本上所有的系统都补掉了这个漏洞,因此这里就不在提供攻击代码了,有兴趣的朋友可以自己分析和编写一下。 另外需要在这里说明的是,如果分析了 议和这个漏洞的成因,完善的攻击程序中的 的长度是根据计算生成的,明显不会是”\以避过 针对 然在这个版本的 还不包含这个校验) ,或者攻击程序把这攻击代码分成多个包,因此 式中的 不会是 0此 检测不出完善的攻击程序的的,也就是说针对这个漏洞,时存在误报和漏洞的情况。 在分析了这个漏洞的成因后,我们就可以针对这个问题写出自己的 测代码: , [""""" ", ); c", "; "\; #考虑了分包和长度不固定的因素,去除了后面不可靠的特征串 29; #包括 头和字段指示头的总长度 ……. 1433) { $= { $ } $ } && > 295) { #考虑到实例名不可能超过 255,因此这里长度选择了 40(包头)+255=295 #也可以增加一个 便用户自己根据事件情况进行调节 #报警 …. } 过对 个攻击签名的分析可以看出,发布完善的 击签名不是一个简单的事情,它需要了解应用的协议格式和漏洞的成因。而不是简单地收集网络上存在地 后截取其中的特征码。 目前很多人包括 发人月都在讨论 没有前途,需不需要。我想与其在那里讨论,不如静下来好好分析漏洞,完善攻击签名,使 的更准确。 与其坐而论不如起而行!!(出处: 间 新浪微博 腾讯微博 搜狐微博 人人网 开心网 百度搜藏更多 化 化 N R R 之 之一 一 M S L e el ll lo u uf ff fe er v ve er rf fl lo ow w 复制链接收藏本文打印本文关闭本文返回首页 上一篇:风格模板初级不完全修改教程 下一篇:浅析 和 相关文章 2006 础教程(三)2007 解 2006于文本的搜索 2006归列出所有文件和目录 2010向对象 与 法 2007的 键字详解教程 2006大的增强功能和性能 2006习之 量 2006个程序下载的管理程序(二)2006 限制每个虚拟主机的并发数!!!! 文章评论 最 近 更 新 关于文本留言本的分页代码 习 字符串课件 作符与控制结构福利彩票幸运号码自动生成器一个查看 容的函数 同学录程序(1)的超全局变量 件操作实现代码(二) 整版(四) 新手学习 一些基础知识分享 热 点 排 行 与 的使用区别 数参数详解 找字符串中是否包含改变 口等配置修改方法 件怎么打开 如何执行 件 取 页实例代码分享 环语句使用方法详细说 装服务[败的 选框值的获取与 ch