分享
 
 
 

深入浅出解决两个难懂的安全性问题

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

交互式服务

调用 _alloca()

安全性、服务和交互式桌面

与 Unix 守护程序类似,服务是 Microsoft Windows NT® 的中枢,可以向操作系统和用户提供重要功能而无需用户的参与。创建服务时,有一些问题需要注意。

Microsoft Windows® 中的服务通常是控制台应用程序,它们的运行无需用户参与,也没有用户界面。但在某些实例中,服务可能需要与用户进行交互。运行在较高安全环境中的服务(如 SYSTEM)不应作为交互式服务运行。在 Windows 用户界面中,桌面是安全边界,在交互式桌面上运行的任何应用程序可以与交互式桌面上的任何窗口交互,即使窗口并不可见。无论创建窗口的应用程序的安全环境和应用程序的安全环境如何,都是这样。

由于这些设计特点,任何在交互式桌面上打开窗口的服务都会向登录用户所执行的应用程序公开。如果服务试图使用窗口消息控制其功能,则登录用户可以通过使用恶意消息来干扰该功能。

将服务作为 SYSTEM 运行的做法(即,服务通过调用 OpenWindowStation 和 GetThreadDesktop 来支持交互式桌面)十分不可取。请注意,Windows 将来的版本可能会完全取消对交互式服务的支持。

我们建议服务编写人员使用客户端/服务器技术(例如 RPC、套接字、命名管道或 COM)实现与来自某个服务的登录用户的交互,使用带 MB_SERVICE_NOTIFICATION 的 MessageBox 显示简单的状态。如果您的服务代码具有以下任何属性,请提高警惕:

作为 LocalSystem 运行,并且服务在安全配置管理器中进行了标记(“登录为”-“允许服务与桌面交互”),或注册表项 - HKLM\CCS\Services\MyService\Type & 0x0100 == 0x0100)

CreateService,并且 dwServiceType & SERVICE_INTERACTIVE_PROCESS == SERVICE_INTERACTIVE_PROCESS

调用 MessageBox(),其中 uType and (MB_DEFAULT_DESKTOP_ONLY | MB_SERVICE_NOTIFICATION | MB_SERVICE_NOTIFICATION_NT3X) != 0

调用 OpenDesktop("winsta0",...) 并在该桌面上创建用户界面

在 OpenDesktop 上调用 LoadLibrary/GetProcAddress

小心 _alloca

_alloca 函数可以在堆栈中分配动态内存。分配的空间将在调用函数退出时自动释放,而不只是在分配超出范围时释放。下面是使用 _alloca 的示例代码:

void function(char *szData) {

PVOID p = _alloca(lstrlen(szData));

// 使用 p

}

如果攻击者提供一个比堆栈大小还要长的

szData

,_alloca 会引发一个异常并导致应用程序停止。如果该代码位于服务器中,则情况会更糟。处理这种错误情况的正确方法是将对 _alloca 的调用打包在异常处理程序中,并在出现错误时重置堆栈。

void function(char *szData) {

__try {

PVOID p = _alloca(lstrlen(szData));

// 使用 p

} __except ((EXCEPTION_STACK_OVERFLOW == GetExceptionCode()) ?

EXCEPTION_EXECUTE_HANDLER :

EXCEPTION_CONTINUE_SEARCH) {

_resetstkoflw();

}

}

相关问题:ATL 转换宏

您还应当小心某些调用 _alloca 的 ATL 字符串转换宏。这些宏包括 A2W、W2A 和 CW2CT 等。如果您的代码是服务器代码,则调用其中任何转换函数时都必须考虑数据的长度。这是不要轻易相信输入的又一个示例。如果攻击者向您的代码提供一个 10 MB 的字符串,便会摧毁堆栈并引发异常;或者如果未引发异常,则导致失败。所以千万不要这样做!

发现缺陷

没有人看出上星期的代码中的错误,但很多人已接近目标。其中的问题是为明文和密文使用了相同的缓冲区。您永远都不能这样做。

乍看起来,使用相同的缓冲区存储明文,然后加密明文产生的密文似乎很好。在大多数情况下也是这样。但在多线程环境中就不是这样了。设想一下,您的代码中出现了一个“竞争状态”,而您却并不知道。(竞争状态是由对软件中的事件的相对时间产生意外的严格依赖而引起的。它们通常与同步错误一起出现。)坦白地说,您永远不会知道存在着严重的竞争状态,等知道时已经太晚了。请再考虑一下,您的应用程序的正常流程如下所示:

使用明文加载缓冲区。

加密缓冲区。

将缓冲区内容发送给接收者。

这看起来很正常。但是,设想您有一个多线程应用程序,由于某种原因,最后两个步骤由于竞争状态而被交换:

使用明文加载缓冲区。

将缓冲区环境发送给接收者。

加密缓冲区。

接收者只接收到一些明文!这是在 Internet Information Server 4.0 中修复的一个错误。在非常特殊的负载和极少数情况下,当使用安全套接字层 (SSL) 保护从服务器至用户的数据通道时,服务器可能会遵循此模式,并将一个未加密的数据信息包发送给用户。这种潜在问题的破坏很小;只向用户(或者可能是一个攻击者)发送了一个信息包。并且当用户接收到信息包时,客户端软件将断开连接。据说该问题已被 Microsoft 修复了。有关该缺陷的详细信息,请访问 http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/bulletin/ms99-053.asp(英文)。

修复的方法是使用两个缓冲区。一个缓冲区用于明文,另一个用于密文,并确保密文在执行不同调用时已被清空。

您能指出此代码中的错误吗?

void ShuffleAndUpdate(char *szName, char *szPwd,

DWORD index,

DWORD d) {

DWORD dwArray[32];

ZeroMemory(dwArray,sizeof(dwArray));

BOOL fAllowAccess = FALSE;

if (IsValidUser(szName,szPwd)) {

fAllowAccess = TRUE;

ShuffleArray(dwArray,szName);

}

dwArray[index]= d;

if (fAllowAccess) {

// 执行某些敏感的操作

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有