首页 文章

WinForms应用程序的常见漏洞

提问于
浏览
12

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

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

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

例:

SQL Injection (Owasp A-1)

  • 标准实践

  • 尽可能使用存储的参数化程序来访问数据

  • 如果存储过程不可行,请使用参数化查询 . (使用我们无法修改的第三方数据库)

  • 仅当上述选项不可行时才转义单引号

  • 必须使用最小特权原则设计数据库权限

  • 默认情况下,用户/组无权访问

  • 开发时,记录每个对象所需的访问权限(表/视图/存储过程)以及访问的业务需求 .

  • [snip]

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

(最后到了问题)

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

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

  • SQL注入仍然是一个问题 .
    CLR通常会阻止

  • 缓冲区溢出,但如果将非托管代码与托管代码混合使用,则更有可能

  • .NET代码可以反编译,因此将敏感信息存储在代码中,而不是在app.config中加密...

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

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

3 回答

  • 1

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

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

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

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

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

  • 12

    您可能希望调查检查安全漏洞的现有工具 . 他们有时会列出他们将要检查的缺陷 .

    托管代码中仍然存在所有可能的安全风险,因为开发人员可以打开各种漏洞 . 框架(.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

  • 4

    我担心不可能 Build 一个实际上安全的本地winform应用程序,因为用户总是可以破解你的应用程序 .

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

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

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

    哦......我扔垃圾还是只是偏离主题?我很抱歉 .

相关问题