WinForms应用程序的常见漏洞

时间:2012-07-05 14:39:47

标签: .net winforms security owasp

我不确定这是否在主题上或者不在这里,但它是如此特定于.NET WinForms我相信它在这里比在Security stackexchange站点更有意义。

(此外,它与安全编码严格相关,我认为这与任何询问我在整个网站上看到的常见网站漏洞的问题一样。)

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

示例:

SQL注入(Owasp A-1)

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

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

(最后到问题)

在极少数情况下,当Web应用程序无法满足需求时,我们会开发WinForms或Windows Service应用程序。我想知道是否有一个等效的WinForms应用程序安全漏洞列表。

在我头顶,我能想到几个......

  • SQL注入仍然是一个问题。
  • CLR通常会阻止缓冲区溢出,但如果将非托管代码与托管代码混合使用则更有可能
  • .NET代码可以反编译,因此将敏感信息存储在代码中,而不是在app.config中加密......

是否有这样的列表,甚至是这样一个列表的几个版本,我们可以从中借用它们创建自己的列表?如果是这样,我在哪里可以找到它?

我一直无法找到它,但如果有的话,对我们以及其他WinForms开发者来说将是一个很大的帮助。

3 个答案:

答案 0 :(得分:12)

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

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

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

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

尝试保护2层应用程序,通常意味着将存储过程用作中间(服务)层(并阻止对表的直接访问)。开发和维护存储过程比开发.NET(Web)服务要昂贵得多。

答案 1 :(得分:4)

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

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

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

Static code analysis list

但是,当然,有一些已知的漏洞,你可以在这里看到:

technet remote code execution

technet elevation of priviledge

有许多已知且未解决的缺陷,可以在众所周知的安全站点找到。 (包括零日攻击)

**更详细的信息,这是我在评论中提到的清单**

MS Security checklist (do not know why this is "retired" as this are mostly neutral infos

Open Web application security project

MS Anti cross-site-scripting

MS ASP security reference implementation (very good information site)

CAT.NET ... MS static security analysis tool

答案 2 :(得分:1)

我担心不可能建立一个实际上安全的本地winform应用程序,因为用户可以随时破解你的应用程序。

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

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

另一种方法是利用网络。经常更新本地应用程序并禁止旧版本。通过这种方式,您的代码可能会快速变化,足以击败破解过程。

噢......我扔垃圾还是只是偏离主题?我的道歉。

相关问题