远程X Font Service (xfs) 存在缓冲区溢出漏洞怎么办?

远程X Font Service (xfs) 存在缓冲区溢出漏洞怎么办?,第1张

Solaris fsauto远程缓冲区溢出漏洞
严重程度:高
威胁程度:普通用户访问权限
错误类型:边界检查错误
利用方式:服务器模式
受影响系统
Sun Microsystems Solaris 251 (Sparc/Intel)
Sun Microsystems Solaris 26 (Sparc/Intel)
Sun Microsystems Solaris 7 (Sparc/Intel)
Sun Microsystems Solaris 8 (Sparc/Intel)
Sun Microsystems Solaris 9 (Sparc)
Sun Microsystems Solaris 9 Update 2 (Intel)
详细描述
Sun Microsystems的"X Window Font Service"实现是X WINDOWS的组件,用于输出字体数据给所有X WINDOWS网络沙锅内的计算机,其中fsauto守护程序实现存在缓冲区溢出。
远程攻击者可以利用这个漏洞在系统上执行任意代码。XFS字体服务程序fsauto中的Dispatch()程序对用户提交的数据缺少检查,远程攻击者可以伪造特殊XFS请求而使守护程序崩溃,也存在执行任意代码的可能。不过一般以'nobody‘权限。
测试代码
尚无
解决方案
在/etc/inetdconf文件中注释:
#fs stream tcp wait nobody /usr/openwin/lib/fsauto fs
并重新启动INET进程。
补丁下载:
>北京北亚服务器数据恢复中心隶属于北京北亚时代科技有限公司,成立于2004年,为国内第一批专业从事服务器维修、服务器数据恢复服务的公司。前身由信息产业部职鉴中心数据恢复工作组部分专家组成,该小组职能为规范国家安全局、保密局等部门的存储安全技能,同时承担面向大中型企业、社会的数据恢复专业工程师培养及规范。部分专家(目前为我公司工程师)曾代表信息产业部职鉴中心对联想集团、中国科大、国家保密局(部分)、国家安全局(部分)进行数据恢复培训。自2004年到2006年,北亚数据恢复中尽一直作为信息产业部数据恢复认证与培训技术支持单位。
公司成立自今,坚持以数据恢复服务作为唯一业务。通过专业的技术与大量服务器数据恢复案例的实践,形成了全国范围内的专业服务器维修,服务器数据恢复团队。目前公司下设北京、上海、广州、深圳等分公司,同时为大量全国二线基至于一线数据恢复公司提供幕后技术支持。
目前服务领域主要为:DELL服务器维修、HP服务器维修、IBM服务器维修,大型服务器数据恢复、大型磁盘阵列(组)数据恢复、UNIX、LINUX、MAC等非WINDOWS领域数据恢复、MS SQL及ORACLE等数据库修复、硬盘物理故障处理(开盘、坏道等)、个人误 *** 作等。
公司拥有全系列自主知识产权的数据恢复软件系统。在国内,目前尚未发现有其他数据恢复公司如此。诸如AIX JFS\JFS2、非普通UNIX Vxfs、EXT3、REISERFS误删除分析、XFS文件系统分析、SQL数据库碎片重组及修复、ORACLE数据库碎片重组及修复等软件系统目前全球无类似公开发行或宣称的同类产品。
基于成形的数据恢复软件系统及相关技术的核心掌握。如下技术领域,目前尚无或极少有其他公司掌握,如小型机文件系统突发性错误、UNIX或LINUX文件系统误删除\格式化、非标准RAID数据恢复、MS SQL\ORACLE数据库碎片重组、MS OFFICE文件碎片重组等。
通常在全球公开发行的数据恢复软件系统里,尚有大量数据恢复案例极难恢复或根本不支持,同时国内数据恢复行业里目前几乎没有几家具有数据恢复研发能力。经过多年的发展,2007年全年,由其他数据恢复公司转送的数据恢复业务大约占我公司总业务量的4成。
我公司目前为中国联通、中国网通、中央电视台新闻评论部、总参X部、深圳富士康科技集团、奔驰集团等指定数据恢复机

A:由于硬盘式块设备所以对于这种测试硬盘式不擅长的
B:btrfs系统只有200K/SEC,xfs表现的性能比较平衡。
2:块写入性能对比(由于硬盘是块设备这种对比来的更有意义)

安装XFS系统工具集。
XFS是高性能文件系统,SGI为他们的IRIX平台而设计。
自从2001年移植到Linux内核上,由于它的高性能,XFS成为了许多企业级系统的首选,特别是有大量数据,需要结构化伸缩性和稳定性的。
例如,RHEL/CentOS7和OracleLinux将XFS作为默认文件系统,SUSE/openSUSE已经为XFS做了长期支持。
XFS有许多独特的性能提升功能使他从众多文件系统中脱颖而出,像可伸缩/并行IO,元数据日志,热碎片整理,IO暂停/恢复,延迟分配等。

文件系统是用来管理和组织保存在磁盘驱动器上的数据的系统软件,其实现了数据完整性的保 证,也就是保证写入磁盘的数据和随后读出的内容的一致性。除了保存以文件方式存储的数据以外,一个文件系统同样存储和管理关于文件和文件系统自身的一些重要信息(例如:日期时间、属主、访问权限、文件大小和存储位置等等)。这些信息通常被称为元数据(metadata)。

由于为了避免磁盘访问瓶颈效应,一般文件系统大都以异步方式工作,因此如果磁盘 *** 作被突然中断可能导致数据被丢失。例如如果出现这种情况:如果当你处理一个在linux的ext2文件系统上的文档,突然机器崩溃会出现什么情况?

有这几种可能:

当你保存文件以后,系统崩溃。这是最好的情况,你不会丢失任何信息。只需要重新启动计算机然后继续工作。

在你保存文件之前系统崩溃。你会丢失你所有的工作内容,但是老版本的文档还会存在。

当正在将保存的文档写入磁盘时系统崩溃。这是最糟的情况:新版文件覆盖了旧版本的文件。这样磁盘上只剩下一个部分新部分旧的文件。如果文件是二进制文件那么就会出现不能打开文件的情况,因为其文件格式和应用所期待的不同。

在最后这种情况下,如果系统崩溃是发生在驱动器正在写入元数据时,那么情况可能更糟。这时候就是文件系统发生了损坏,你可能会丢失整个目录或者整个磁盘分区的数据。

linux标准文件系统(ext2fs)在重新启动时会通过调用文件扫描工具fsck试图恢复损坏的元数据信息。由于ext2文件系统保存有冗余的关键元数据信息的备份,因此一般来说不大可能出现数据完全丢失。系统会计算出被损坏的数据的位置,然后或者是通过恢复冗余的元数据信息,或者是直接删除被损坏或是元数据信息损毁的文件。

很明显,要检测的文件系统越大,检测过程费时就越长。对于有几十个G大小的分区,可能会花费很长时间来进行检测。由于Linux开始用于大型服务器中越来越重要的应用,因此就越来越不能容忍长时间的当机时间。这就需要更复杂和精巧的文件系统来替代ext2。

因此就出现了日志式文件系统(journalling filesystems)来满足这样的需求。

什么是日志式文件系统

这里仅仅对日志式文件系统进行简单的说明。如果需要更深入的信息请参考文章日志式文件系统,或者是日志式文件系统介绍。

大多数现代文件系统都使用了来自于数据库系统中为了提高崩溃恢复能力而开发的日志技术。磁盘事务在被真正写入到磁盘的最终位置以前首先按照顺序方式写入磁盘中日志区(或是log区)的特定位置。

根据日志文件系统实现技术的不同,写入日志区的信息是不完全一样的。某些实现技术仅仅写文件系统元数据,而其他则会记录所有的写 *** 作到日志中。

现在,如果崩溃发生在日志内容被写入之前发生,那么原始数据仍然在磁盘上,丢失的仅仅是最新的更新内容。如果当崩溃发生在真正的写 *** 作时(也就是日志内容已经更新),日志文件系统的日志内容则会显示进行了哪些 *** 作。因此当系统重启时,它能轻易根据日志内容,很快地恢复被破坏的更新。

在任何一种情况下,都会得到完整的数据,不会出现损坏的分区的情况。由于恢复过程根据日志进行,因此整个过程会非常快只需要几秒钟时间。

应该注意的是使用日志文件系统并不意味着完全不需要使用文件扫描工具fsck了。随机发生的文件系统的硬件和软件错误是根据日志是无法恢复的,必须借助于fsck工具。

目前Linux环境下的日志文件系统

在下面的内容里将讨论三种日志文件系统:第一种是ext3,由Linux内核Stephen Tweedie开发。ext3是通过向ext2文件系统上添加日志功能来实现的,目前是redhat72的默认文件系统;Namesys开发的ReiserFs日志式文件系统,可以下载,目前Mandrake81采用该日志式文件系统。SGI在2001年三月发布了XFS日志式文件系统。可以在 osssgicom/projects/xfs/下载。下面将对这三种日志文件系统采用不同的工具进行检测和性能测试。

安装ext3

关于ext3文件系统技术方面的问题请参考Dr Stephen Tweedie的论文和访谈。ext3日志式文件系统直接来自于其祖先ext2文件系统。其具有完全向后兼容的关键特性,实际上其仅仅是在ext2日志式文件系统上添加了日志功能。其最大的缺点是没有现代文件系统所具有的能提高文件数据处理速度和解压的高性能。

ext3从 2219开始是作为一个补丁方式存在的。如果希望对内核添加对ext3文件系统的支持,就需要使用补丁,可以得到补丁程序,一共需要如下文件:

ext3-007atarbz2:内核补丁

e2fsprogs-121-WIP-0601tarbz2 支持ext3的e2fsprogs程序套件

拷贝linux-2219tarbz2和ext3-007atarbz2到/usr/src目录下,进行解压:

mv linux linux-old

tar -Ixvf linux-2219tarbz2

tar -Ixvf ext3-007atarbz2

cd linux

cat /ext3-007a/linux-2219kdbdiff | patch -sp1

cat /ext3-007a/linux-2219ext3diff | patch -sp1

首先对内核添加SGI的kdb内核调试器补丁,第二个是ext3文件系统补丁。下来就需要配置内核,对文件系统部分的"Enable Second extended fs development code"回答Yes。然后编译。

内核编译安装以后,需要安装e2fsprogs软件套件:

tar -Ixvf e2fsprogs-121-WIP-0601tarbz2

cd e2fsprogs-121

/configure

make

make check

make install

下来要做的工作就是在分区上创建一个ext3文件系统,使用新内核重新启动,这时候你有两种选择创建新的日志文件系统或者对一个已有的ext2文件系统升级到ext3日志文件系统。

对于需要创建新ext3文件系统的情况下,只需要使用安装的e2fsprogs软件包中的mke2fs命令加-f参数就可以创建新的ext3文件系统:

mke2fs -j /dev/xxx

这里/dev/xxx是希望创建ext3文件系统的新分区。-j参数表示创建ext3而不是ext2文件系统。可以使用参数"-Jsize="来指定希望的日志区大小(n单位为M)。

升级一个已有的ext2,使用tune2fs就可以了:

tune2fs -j /dev/xxx

你可以对正在加载的文件系统和没有加载的文件系统进行升级 *** 作。如果当前文件系统正在被加载,则文件journal会在文件系统加载点的所在目录被创建。如果是升级一个当时没有加载的文件系统,则使用隐含的系统inode来记录日志,这时候文件系统的所有内容都会被保留不被破坏。

你可以使用下面的命令加载ext3文件系统:

mount -t ext3 /dev/xxx /mount_dir

由于ext3实际上是带有日志功能的ext2文件系统 ,因此一个ext3文件系统可以以ext2的方式被加载。

安装XFS文件系统

如果需要从技术方面了解XFS文件系统,请参考SGI的XFS文件系统和SGI信息页面。也可以参考FAQ。

XFS是一个SGI开发的linux环境下的日志文件系统,它是一个成熟的技术,最初是使用在IRIX系统上的文件系统。XFS遵循GPL版权申明。目前xfs文件系统最新版本是102。下载得到对内核xfs文件系统支持补丁或者直接下载RPM包方式的内核,下面我们就以补丁方式说明如何对2414内核使用xfs。首先下载如下内容

patch-2414-xfs-102bz2

patch-2414-xfs-102-kdbbz2

拷贝Linux内核linux-242tarbz2到 /usr/src目录下,修改老的内核目录名,然后解压新内核:

mv linux linux-old

tar -Ixf inux-242tarbz2

拷贝每个每个补丁到内核源码目录下(例如:/usr/src/linux),并打补丁:

zcat patch-2414-xfs-102bz2 | patch -p1

zcat patch-2414-xfs-102-kdbbz2 | patch -p1

然后配置内核,打开文件系统部分的内核选项:"XFS filesystem support" (CONFIG_XFS_FS)和"Page Buffer support" (CONFIG_PAGE_BUF)。同时需要升级下面这些系统工具到下面或更高的版本:

modutils-240

autoconf-213

e2fsprogs-devel-118

安装新内核并重启服务器。

然后下载xfs工具。这个软件包包括下面的命令来处理文件系统,使用下面的命令来安装该软件包::

tar -zxf xfsprogs-120srctargz

cd xfsprogs-120

make configure

make

make install

安装这些命令以后,就可以创建新的XFS文件系统:

mkfs -t xfs /dev/xxx

如果xxx是一个已经存在的文件系统,那么就需要使用"-f"参数来创建新分区,但是记得这将会破坏该分区的所有数据。

mkfs -t xfs -f /dev/xxx

创建以后就可以使用基于下面的命令加载新文件系统:

mount -t xfs /dev/xxx /mount_dir

安装ReiserFS文件系统

如果希望更多地从技术方面了解reiserFS文件系统,请参考NAMESYS和FAQ。

ReiserFS文件系统从241-pre4开始就是Linux内核的正式支持的文件系统了。为了使用reiserFS文件系统那你首先需要在系统上安装文件系统支持工具(如:创建ReiserFS文件系统的mkreiserfs工具)。最新的ReiserFS文件系统版本可以以补丁的方式添加到22x或者24x内核中。这里我们以2219为例:

第一步,首先下在内核源码,并下在ReiserFS文件系统的2219补丁 ,目前补丁最新版本是linux-2219-reiserfs-3534-patchbz2。同时应该下载工具软件包:reiserfsprogs-3x0jtargz。

然后解压内核源码和补丁包到/usr/src中:

tar -Ixf linux-2219tarbz2

bzcat linux-2219-reiserfs-3534-patchbz2 | patch -p0

编译内核支持reiserfs,安装内核。然后安装文件系统工具软件:

cd /usr/src/linux/fs/reiserfs/utils

make

make install

安装新内核并重新启动。现在就可以创建新的'reiserfs文件系统,并加载:

mkreiserfs /dev/xxxx

mount -t reiserfs /dev/xxx /mount_dir

文件系统性能测试

测试环境使用的计算机环境如下:Pentium III - 16 Mb RAM - 2 Gb HD, *** 作系统为RedHat62。所有的文件系统都能正常工作,所以就进行benchmark分析来对它们进行性能比较。首先我直接拔掉系统电源以模拟系统掉电情况,以测试日志文件系统恢复过程。所有的文件系统都成功地经过了文件扫描检测阶段,在数秒以后系统都经过了扫描然后正常启动了系统。

下一步就采用了bonnie++性能测试程序进行测试,这个程序对一个文件进行数据库类型的访问,进行了创建、读和删除小文件,这些 *** 作对于Squid、INN或者Maildir格式的邮件服务器程序(qmail)是最常见的 *** 作。性能测试命令为:

bonnie++ -d/work1 -s10 -r4 -u0

其对加载在/work1目录下的文件系统进行了10Mb(-s10)的测试。因此在执行测试之前必须创建适当类型的文件系统并加载到目录/work1下。其他的参数指定内存大小(-r4)的M数,和以root身份运行测试程序,测试结果如下:

每种测试都有两组数据:文件系统速度(K/sec)和CPU占用率(%CPU)。速度越高,文件系统越好。而对于CPU率来说,数字越小性能越好。可以看到Reiserfs文件系统在文件 *** 作方面(Sequential Create和Random Create部分的) 的性能最好,超出其他文件系统10倍之多。在其他方面(Sequential Output和Sequential Input)则和其他文件系统性能不相上下。对于其他文件系统则没有特别明显的区别。XFS性能接近ext2文件系统,ext3文件系统则比ext2要稍微慢上一些(因为记录日志需要一些额外的时间)。 最后使用从得到的性能测试程序mongo,并对其进行了修改以对三种日志文件系统进行测试。这里在mongopl程序中添加了添加了加载xfs和ext3文件系统的命令,并对其进行格式化处理,然后就开始性能测试分析。 该脚本格式划分区/dev/xxxx,加载其并在每个阶段运行指定数目的进程:创建、拷贝、符号连接处理、读、显示文件状态信息、重命名和删除文件。同时,该程序在创建和拷贝阶段以后会计算分段数(fragmentation)。

Fragm = number_of_fragments / number_of_files

可以在结果文件中得到同样的测试比较结果:

log - 原始结果

logtbl - 比较程序的输出结果

log_table - 表格式的结果

下面的命令进行测试:

mongopl ext3 /dev/hda3 /work1 logext3 1

如果要测试其他文件系统,就需要把上面命令的参数中的ext3修改为reiserfs或xfs。其他参数分别为要加载的分区,加载路径,保存测试结果的文件名及启动的进程数。

下面的表格是测试结果。数据单位为秒。值越低性能越好。第一个表格测试使用的数据块大小为100字节,第二个表格为1000字节,最后一个为10000字节

从上面的表格可以看到ext3在状态删除和重命名方面要性能更好一些,而ReiserFS文件系统在文件创建和拷贝性能表现更出色。同时也可以看到reiserFS正如其技术文档提到的其在小文件处理方面性能相当出色。

结论

目前Linux至少有两个健壮可靠的日志文件系统可供选择(XFS和reiserFS),其都得到了广泛的应用。例如Mandrake81就默认支持reiserFS文件系统。

从性能测试的结果可以看到,reiserFS是最好的选择。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13502929.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-20
下一篇 2023-08-20

发表评论

登录后才能评论

评论列表(0条)

保存