日期:2012-02-16  浏览次数:20894 次


http://www.wiretrip.net/rfp/
相关内容:
- 1. 问题
- 2. 解决方法
- 3. 形势
- 4. 所有相关资源

如果你没有时间来读完本文,那么你所需要做的就是删除这个文件:

?:\Program Files\Common Files\System\Msadc\msadcs.dll

最迅速和最彻底的取消对RDS的支持。(但是如果你确实需要RDS,那么你最好往下读)
----------------------------------------------------------------------
-

----[ 1. 问题
RDS攻击不是一个简单的问题,虽然IIS 4.0存在许多各种各样的安全漏洞,
但是微软从来没有为同一个安全漏洞发布过如此多的补丁程序,一共是发布了三个不同的补丁程序,但是RDS仍然存在问题。
所以我们需要的是真正掌握什么是RDS。然后你就会知道如何来自己修补
这个问题。这个问题从根本上说,是由于Jet 3.5允许调用VBA的shell()函数造成的。
该函数允许你执行外壳命令,具体的过程我想还是不详细介绍了。
现在的问题是,IIS 4.0默认的情况下是安装有MDAC 1.5的,它包含有RDS,
从而允许通过浏览器远程访问ODBC组件,具体的实现是通过一个位
于/msadc/msadcs.dll
的特定的dll文件来实现的。现在你应该可以明白,问题其实是由两部分组成。其实还有个“第三者”,那就是跟随RDS SDK包安装附带的例子程序组件VbBusObj,它可以允许你
饶过那些就是已经安装了微软发布的RDS补丁的情况。
下面将分别就上面三种情况做详细的解决方案描述。

----[ 2. 解决方案
问题是目前有许多种方法来解决,同时这些方法还可以被不同的组合使用。
在这里尽量描述详细。
-解决方案 #1: 移走cmd.exe (ULG推荐的补丁方法)
http://www.aviary-mag.com/News/Powerful_Exploit/ULG_Fix/ulg_fix.html

我推荐ULG的解决方法,虽然该方法仍然存在问题。因为虽然mdac.pl是使用了
cmd.exe
来实现RDS攻击的,但是,要知道
CMD.EXE并不是RDS攻击方法的唯一实现途径


-解决方案 #2: 升级MDAC 1.5 到 2.0

MDAC 2.0将Jet 3.5升级到Jet 3.52。但是仍然存在VBA shell()攻击问题(而这恰好是
RDS攻击的必要条件),并且默认情况下还是支持使用RDS的。事实上,就是你删除了RDS系统还是会重新安装的,其中一些应该注意的事情是:

* 默认的Jet引擎变成了3.52 (仍然有安全漏洞)
* 允许自定义处理 (可以解决匿名RDS使用问题)
* 生成 Microsoft.Jet.OLEDB.3.51* 提供
注意这种解决方法,它的默认设置不是非常好。你需要修改注册表来限制自定义使用RDS处理。注册表中位置是:
HKEY_LOCAL_MACHINE\Software\Microsoft\DataFactory\HandlerInfo\

Keyname: HandlerRequired
Value: DWORD:1 (safe) or 0 (unsafe)
推荐是将它的数值改成1。这其实也是使用微软提供的补丁'handsafe.exe/.reg'完成的。
现在,你可以保护你的系统不被远程RDS攻击了,但是你仍然存在被ODBC其他方式攻击的可能性,
包括Excel, Word, 和 Access木马文件等。所以这个解决方案也有一些不足。

-解决方案 #3: 升级你的MDAC 1.5 到 2.1

MDAC 2.1 将Jet 3.5 升级到Jet 4.0引擎,这个引擎不存在RDS攻击安全漏洞。
但是同时也印证了一个亘古不变的法则,东西越安全它的兼容性能也就越差,
由于3.5和4.0之间存在太大的差异,许多人不愿意为了这些兼容性能而升级。
因为一旦升级后许多现在正在使用的程序将完全不能够使用。具体细节是:

* 默认的数据库引擎为Jet 4.0 (没有这个安全漏洞)
* 支持自定义处理 (可以禁止匿名使用RDS)

但是,自定义处理默认的情况下并不是使用的。你同样需要象上面一样来修改注册表。

-解决方案 #4: 升级你的MDAC 1.5到2.0,然后再到2.1
现在,如果你是一个优秀的管理员,你应该保证你一直升级你的系统。如果你经常升级,就应该服从按顺序升级的次序。虽然同样你需要修改注册表使
能'HandlerRequired'
,同样由于使用了2.1的Jet 4.0(没有漏洞)作为默认的数据库引擎。但是由于你是通过
从2。0的升级,所以你将拥有Microsoft.Jet.OLEDB.3.51.
这意味着你的运用程序(包括RDS)对数据库的调用情况都能够被日志记录下来。而那些
老版本的OLEDB是实现不了的。
你应该从注册表中将老的hooks/providers数值去掉。一个方法是删除下面的键值入口:
HKEY_CLASSES_ROOT\Microsoft.Jet.OLEDB.3.51
HKEY_CLASSES_ROOT\Microsoft.Jet.OLEDB.3.51Errors
但是,你仍然需要面对的问题是兼容性能问题。

-解决方案 #5: 安装JetCopkg.exe (见微软发布的安全公告MS99-030)

JetCopkg.exe是一个修改过的Jet 3.5引擎,它增强了更多的安全特性来防止被攻击。
它主要是对注册表中下列键值的修改:
HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\3.5\engines\SandboxMode
它的值如下:
0 禁止一切
1 使能访问ACCESS,但是禁止其它
2 禁止访问ACCESS,但是使能其他
3 使能一切

(详细的解释可以参考
http://support.microsoft.com/support/kb/articles/q239/1/04.asp)
值得注意的是,默认的允许修改键值权限是不安全的。你必须只能够让有权限的
帐号才能够修改该键值。不然该键值会带来很多安全上的隐患。切记,切记。
只要将键值该成2或则3就可以将一切对RDS的攻击拒绝了。所以,这个解决方案是最好的。
并且由于它仍然使用的是Jet 3.5引擎,所以你不用担心兼容性能的问题。并且同时你还是可以
使用RDS的,虽然已经不能够再使用RDS进行攻击了,但是问题是匿名使用RDS还是会将你的数据库中的信息给
泄露出去的。所以你需要对RDS有较深入的编程基础,我可以建议你禁止使用RDS或则将ODBC升级到
MDAC 2.0,这样你就可以只让有权限的人才能够使用RDS,而拒绝匿名用户使用。

-解决方案 #6: 删除/禁止RDS功能
就是我在本文最开始的位置提到的方法,删除下面这个文件:
?:\Program Files\Common Files\System\Msadc\msadcs.dll
就是它提供了RDS的调用接口。下面是一些更详细彻底清除RDS(如果你确信你的网站不需要该功能的话)的步骤:

* 从IIS控制台删除/msadc虚拟目录
* 删除下面的注册表键值:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters\
ADCLaunch
* 删除下面这个文件目录
?:\Program Files\Common Files\System\Msadc

----[ 3. 情况
-情况 #1: 我确实需要RDS
首先你需要升级你的系统到MDAC 2.0。记住别忘了安装JetCopkg,或者你直接升级到MDAC 2.1.
确保你修改了'HandlerRequired'注册表中的数值,解释见上。同时确保你已经删除了所有的
RDS的例子程序。同时取消匿名帐号对/msadc目录的访问权限,而使用自定义帐号来进行处理。
详细的步骤可以参考:
ht