通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 MY小屋
联系我们
设为首页
加入收藏

 

QQ,ASP,PHP,JSP,XML,SQL,.Net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | Q Q 专栏 | 建站经验 | 在线工具 | 站长Club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务
当前位置:首页>>编程开发>>C#语言>>正文 新版上线![旧版]
注:打开慢时请稍等

解决两个难懂的安全性问题

http://www.iyit.net  日期:2006-7-18 22:56:45  来源:Internet  点击:
参加讨论
  安全性、服务和交互式桌面

  与 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 修复了。

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

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

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) {
// 执行某些敏感的操作
}
}




编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:高级扫描技术及原理介绍
下一篇:Managed C++设计新邮件检查器
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
Java服务器端编程安全必读 Java体系结构对信息安全的支持 开发线程安全的Spring Web应用
Java语言的接口与类型安全 多线程安全的变量模板 利用硬件信息实现共享软件的安全注册
解决两个难懂的安全性问题 多线程安全的变量模板 利用硬件信息实现共享软件的安全注册
解决两个难懂的安全性问题 制服流氓:27种恶意软件安装卸载实录 黑客口述:入侵ADSL,就这么简单
入侵中国某大型商业网站服务器全记录 2006上半年十大病毒排行 灰鸽子成毒王 IRC波特病毒出变种 黑客可远程控制电脑
微软7月将发布七款补丁 将涉及到Window 专家称WindowsVista不够安全 家庭用户别 互联网沦为流氓温床 MSN恶意加好友升级
假冒工行网银升级 新病毒盗取网银密码 病毒窃取北京ADSL密码 网通电信用户皆受 病毒预警:提防网游大盗变种和代理变种
威金蠕虫肆虐互联网 中招用户数量过万 威金蠕虫肆虐互联网 发送病毒链接迅速传 流氓软件拉MSN用户征婚 伪装好友发邀请
最新更新 热点排行 推荐新闻
VC++ SMTP协议电子邮件传送剖析
Managed C++设计新邮件检查器
解决两个难懂的安全性问题
高级扫描技术及原理介绍
VC的另类数据库编程
[JAVA]十四种Java开发工具点评
初学java常用开发工具介绍
Java编程中更新XML文档的常用方法
用Java实现HTTP文件队列下载
Singleton在Java中的应用
Java学习从入门到精通 4方法篇
Java学习从入门到精通 2书籍篇
Java学习从入门到精通 3过程篇
[基础知识]JAVA是什么
Java学习从入门到精通 1工具篇
TCP/IP Winsock编程要点
托盘编程全接触
在VC++下对文件属性的获取与更改
VC编程中如何操作数据库中的图像字段
VC++ SMTP协议电子邮件传送剖析
编程解决注册表问题所需的函数详解
VB.NET注册表编程
盛大龙与地下城1万人内测 双核用户先行
Illustrator CS模板应用
在VB中使用注册表
微软7月将发布七款补丁 将涉及到Windo
用VB函数轻松访问系统注册表
在VB中调用API操作注册表
韩国网站FLASH效果动画源码源文件
利用WindowsAPI函数和注册表获取系统信
在ASP.net中保存/取出图片入/从SQL数据
一个.net 压缩位图至JPEG的代码
制服流氓:27种恶意软件安装卸载实录
不止上网 IE地址栏的妙用
入侵中国某大型商业网站服务器全记录
IRC波特病毒出变种 黑客可远程控制电脑
传AMD与ATI合并已谈妥 对中国影响不大
金山PK网易 网游核心开发人员相互跳槽
英特尔公开与AMD翻脸 “口水战”升级
共享软件的十大破解工具推荐
 友情链接
设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyrights © 2004-2006 iYiT.Net All Rights Reserved.
网站合作、广告联系QQ:147007642、466949678
易特网络技术 点击这里给我发消息