WinForms应用程序的常见漏洞

Dav*_*vid 12 .net security owasp winforms

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

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

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

例:

SQL注入(Owasp A-1)

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

无论如何,我们使用OWASP Top 10作为网站特有的众所周知的漏洞的起点.

(最后到了问题)

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

在我的头顶,我可以想到一些....

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

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

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

Ste*_*ven 12

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

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

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

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

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