首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinForms应用程序的常见漏洞

WinForms应用程序的常见漏洞
EN

Stack Overflow用户
提问于 2012-07-05 14:39:46
回答 3查看 2.8K关注 0票数 12

我不确定这是否是主题,但它对.NET WinForms非常特殊,所以我认为在这里比在stackexchange站点更有意义。

(而且,它与secure coding__严格相关,我认为这与我在网站上看到的关于常见网站漏洞的任何问题一样,都是一个话题。)

多年来,我们的团队一直在网站项目上进行威胁建模。我们的模板的一部分包括OWASP前10强加上其他众所周知的漏洞,因此当我们进行威胁建模时,我们总是确保我们有一个文档化的过程来解决每个常见的漏洞。

示例:

SQL注入(OWASPA-1)

  • 标准实践
    • 在可行的情况下使用存储的参数化过程,以便尽可能访问数据。
    • 如果存储过程不可行,则使用参数化查询。(使用我们无法修改的第三方数据库)
    • 只有当上述选项不可行时才转义单引号
    • 数据库权限的设计必须遵循最小特权原则。
    • 默认情况下,用户/组无权访问
    • 在开发过程中,记录每个对象所需的访问(表/视图/存储过程)和访问的业务需求。
    • 剪辑

无论如何,我们使用OWASP前10作为网站特有的常见漏洞的起点。

(最后回答问题)

在很少的情况下,我们开发WinForms或Windows应用程序时,web应用程序不能满足需求。我想知道是否有一个与WinForms应用程序相同的安全漏洞列表。

从我的头顶上,我能想到一些.

  • SQL注入仍然是一个问题。
  • 缓冲区溢出通常由CLR防止,但如果使用与托管代码混合的非托管代码,则更有可能发生缓冲区溢出。
  • .NET代码可以被解压缩,所以在代码中存储敏感信息,而不是在app.config中加密.

有没有这样一个清单,甚至有几个版本的这样一个清单,我们可以借来创造我们自己的?如果是的话,在哪里可以找到呢?

我还没有找到它,但是如果有,这将对我们和其他WinForms开发人员都有很大的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-05 15:13:16

web环境和桌面环境之间有很大的区别。在开发网站和服务时,您不信任的是用户(用户输入)。在运行桌面应用程序时,不受信任的是应用程序本身,或者至少是系统管理员想知道应用程序本身是否有害,因为在本地计算机上运行代码本身就是一种风险。

因此,从某种意义上说,对于桌面应用程序的开发人员来说,安全规则并不总是适用的,因为您运行的应用程序不是黑匣子,而是白色框。对于web服务/站点,您希望攻击无法更改内部状态,但对于任何桌面应用程序(Java、.NET、本机),在应用程序运行时更改应用程序的状态“相当容易”,尤其是在Java和.NET中,调试和反编译应用程序非常容易。

换句话说,您必须考虑桌面应用程序完全受损,如果这是一种风险,则必须将所有必须安全的内容(身份验证、授权、验证)提取到外部(web)服务。对于此服务,适用“正常”OWASP规则。

当桌面应用程序直接连接到数据库时,需要注意的是,当桌面应用程序直接连接到数据库时,很难完全保护数据层。例如,在这种情况下,SQL注入不是桌面应用程序的问题,因为当应用程序可以直接连接到数据库时,用户也可以。如果用户可以连接到数据库,他可以执行任意查询。这是SQL注入的一种极端形式,但它完全跳过了应用程序。

试图保护2层应用程序,通常意味着使用存储过程作为中间(服务)层(并阻止对表的直接访问)。开发和维护存储过程比开发.NET (web)服务成本高得多。

票数 12
EN

Stack Overflow用户

发布于 2012-07-06 08:19:54

也许您想研究检查安全漏洞的现有工具。他们有时会列出他们要检查的缺陷。

在托管代码中仍然存在所有可能的安全风险,因为开发人员可以打开各种漏洞。框架(.NET)本身并不是一个风险,但是开发人员是这样的。

在这里,您有一个工具列表,您可以在这里阅读他们将检查哪些安全风险:

静态代码分析列表

但是,当然,也存在已知的漏洞,如您在这里所看到的:

technet远程代码执行

technet特权的提升

有更多的已知和未解决的缺陷,这些缺陷可以在众所周知的安全地点找到。(包括零天剥削)

**更详细的资料,是我在意见**中提及的核对表。

安全检查表(不知道为什么这是“退役”,因为这主要是中立的信息。

开放Web应用程序安全项目

反跨站点脚本

MS安全参考实现(非常好的信息站点)

CAT.NET ...静态安全分析工具

票数 4
EN

Stack Overflow用户

发布于 2012-07-15 07:01:49

恐怕不可能构建一个本地的winform应用程序,它实际上是安全的,因为用户总是可以破解您的应用程序。

但是,有一些技术可以减缓裂解过程。大多数技术发生在组装层,例如垃圾代码和包装。

另一种技术是使您的可执行代码(即在执行程序时进入内存的代码)随时间而变化。但是,您必须首先确保所有其他代码(然后不执行)都是安全的。这可以通过加密来完成。但您还必须确保加密程序具有更高的安全性。加密程序总是固定在ROM中,并通过物理手段进行保护。

另一种方法是利用网络的优势。经常更新本地应用程序,并禁止旧版本。通过这种方式,您的代码可能会变化得足够快,以避免崩溃过程。

oh...am我扔垃圾还是只是离题?我的道歉。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11346652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档