CVE(CAN) ID: CVE-2001-0015 网络动态数据交换(Network Dynamic Data Exchange)是一种在不同的Windows机器上的 应用程序之间动态共享数据的技术。这种共享是通过名为受信任共享(trusted shares) 的通信通道来完成的,受信任共享由网络DDE代理服务来管理。本地机器上的进程可以向网 络DDE代理发出请求,包括指定针对某个特定的受信任共享应该运行什么应用程序。但是由 于网络DDE代理运行在本地系统用户的安全上下文中并在此安全上下文中处理所有请求,因 此攻击者就有机会让网络DDE代理在本地系统用户的安全上下文中执行其指定的代码,从而 提升权限并完全控制本地机器。 细节描述如下: Network DDE DSDM(DDE Share Database Manager)服务负责维护所有活动的网络DDE 共享的一个列表并管理NetDDE连接。当该服务启动时,在当前登录用户的桌面上将创建一 个隐藏的IPC窗口,用来与打开了DDE特性的应用程序进行通信。该窗口所处理的消息及其 格式未在正式文档中描述。 窗口的名字是\"NetDDE Agent\",类名是\"NDDEAgent\"。由于窗口是由WINLOGON创建的, 窗口过程将运行在WINLOGON的进程空间中,它以SYSTEM的权限来处理消息。该窗口所处理 的消息之一是\"WM_COPYDATA\"消息,DDE用该消息将一块内存从一个进程传递给另一个进 程。绝大多数窗口间通信通常是由PostMessage( )来完成的,但WM_COPYDATA消息却是由SendMessage( )函数来发送的,并由底层的消息子系统(CSRSS)作为一种特殊情况进行 处理。 通过该消息发送给隐藏窗口的结构具有如下格式: 4 字节 - E1 DD E1 DD (魔数: 0xDDE1DDE1) 4 字节 - 01 00 00 00 (未知: 0x00000001) 4 字节 - 01 00 00 00 (未知: 0x00000001) 8 字节 - 05 00 00 09 00 00 00 01 (DDE Share Mod Id) 4 bytes - CC CC CC CC (未知: 未使用?) ASCIIZ - \"SHARENAME$\" (以NULL结尾的串:...
CVE(CAN) ID: CVE-2001-0015 网络动态数据交换(Network Dynamic Data Exchange)是一种在不同的Windows机器上的 应用程序之间动态共享数据的技术。这种共享是通过名为受信任共享(trusted shares) 的通信通道来完成的,受信任共享由网络DDE代理服务来管理。本地机器上的进程可以向网 络DDE代理发出请求,包括指定针对某个特定的受信任共享应该运行什么应用程序。但是由 于网络DDE代理运行在本地系统用户的安全上下文中并在此安全上下文中处理所有请求,因 此攻击者就有机会让网络DDE代理在本地系统用户的安全上下文中执行其指定的代码,从而 提升权限并完全控制本地机器。 细节描述如下: Network DDE DSDM(DDE Share Database Manager)服务负责维护所有活动的网络DDE 共享的一个列表并管理NetDDE连接。当该服务启动时,在当前登录用户的桌面上将创建一 个隐藏的IPC窗口,用来与打开了DDE特性的应用程序进行通信。该窗口所处理的消息及其 格式未在正式文档中描述。 窗口的名字是\"NetDDE Agent\",类名是\"NDDEAgent\"。由于窗口是由WINLOGON创建的, 窗口过程将运行在WINLOGON的进程空间中,它以SYSTEM的权限来处理消息。该窗口所处理 的消息之一是\"WM_COPYDATA\"消息,DDE用该消息将一块内存从一个进程传递给另一个进 程。绝大多数窗口间通信通常是由PostMessage( )来完成的,但WM_COPYDATA消息却是由SendMessage( )函数来发送的,并由底层的消息子系统(CSRSS)作为一种特殊情况进行 处理。 通过该消息发送给隐藏窗口的结构具有如下格式: 4 字节 - E1 DD E1 DD (魔数: 0xDDE1DDE1) 4 字节 - 01 00 00 00 (未知: 0x00000001) 4 字节 - 01 00 00 00 (未知: 0x00000001) 8 字节 - 05 00 00 09 00 00 00 01 (DDE Share Mod Id) 4 bytes - CC CC CC CC (未知: 未使用?) ASCIIZ - \"SHARENAME$\" (以NULL结尾的串: DDE受信任的共享名) ASCIIZ - \"cmd.exe\" (以NULL结尾的串: DDE服务器启动命令) 当上述缓冲区传递给窗口过程时,它将首先检查3个魔数(即前12个字节)的值,如果与 上述的值不同,则消息处理过程将返回一个错误。否则就取出两个ASCIIZ串并将其转换成 Unicode串,然后检查共享名以确保它存在并且是一个受信任的共享。 由于默认情况下在系统中存在几个受信任共享,因此可以对其进行穷举,对每个共享名都 尝试运行命令直到找到一个受信任的共享。\"DDE Share Mod ID\"将和上述结构中的对 应的数进行比较,如果相等则将在WINLOGON进程的上下文中执行上述第二个ASCIIZ串所 指定的命令,因此将创建一个继承了SYSTEM进程令牌的进程。\"DDE Share Mod Id\"本 应是一个相对随机的8字节数,但实际上却一直是个常数0x0100000009000005。 <* 来源:DilDog (dildog@atstake.com) Microsoft Security Bulletin (MS01-007) *>