对于的WinForms应用的常见漏洞(Common vulnerabilities for WinF

2019-06-26 02:21发布

我不知道这是否是对话题或不在这里,但它是如此具体到我相信它更有意义在这里比在安全stackexchange网站.NET的WinForms。

(另外,它的严格安全编码有关,我认为这是作为话题的任何问题询问常见网站的漏洞,我看遍了网站。)

多年来,我们的团队一直在为网站项目威胁建模。 我们的模板的一部分包括了OWASP十大再加上其他著名的漏洞,这样当我们在做威胁建模,我们始终确保我们有一个文件的过程解决各通用漏洞。

例:

SQL注入(OWASP A-1)

  • 标准规程
    • 使用存储过程的参数化在可行情况下访问数据,其中可能
    • 使用参数化查询,如果存储过程是不可行的。 (使用第三方数据库,我们不能修改)
    • 逃逸单引号,只有当上述选项都不可行
    • 数据库权限的设计必须以最小特权原则
    • 默认情况下,用户/组都进不去
    • 在开发,文件(表/视图/存储过程)需要每个对象的访问和业务需求进行访问。
    • [剪断]

无论如何,我们使用了OWASP十大作为起点特定网站通常已知的漏洞。

(最后的问题)

在极少数情况下,我们开发的WinForms或Windows服务应用程序时,一个web应用程序不能满足需求。 我想知道如果有一个的WinForms应用程序通常已知的安全漏洞的等效列表。

关闭我的头顶,我能想到的几个....

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

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

我一直没能找到它,但如果有一个,这将是我们很大的帮助,以及其他的WinForms开发者。

Answer 1:

有一个网络环境和桌面环境有很大的区别。 在开发网站和服务,你不相信的东西是用户(用户输入)。 当运行一个桌面应用程序,这是不信任的事情是应用程序本身,或至少,一个系统管理员想知道应用程序本身是否没有做任何伤害,因为代码在本地计算机上运行的是一个风险通过它自己。

因此,在某种意义上,你作为一个桌面应用程序的开发,安全规则并不总是适用的,因为你运行应用程序是不是一个黑盒子,而是一个白盒。 与Web服务/网站,您希望不能够改变内部状态的攻击,但与任何桌面应用程序(Java,.NET,原生),这是“很”容易改变应用程序的状态,而应用程序运行,特别是与Java和.NET,调试和反编译的应用程序是很容易的。

换句话说,你必须考虑的桌面应用程序完全破坏,如果这是有风险的,你必须提取的一切,必须是安全的(认证,授权,验证)到外部(网络)服务。 对于该服务,“正常” OWASP规则。

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

试图保护一个2层应用程序,往往意味着使用存储过程作为中间体(服务)层(并且防止向表直接访问)。 开发和维护存储过程是比开发一个.NET(网络)服务成本高得多。



Answer 2:

也许你要调查该检查的安全漏洞现有的工具。 他们有时他们会检查缺陷列表。

还有在托管代码中所有可能的安全风险,因为开发人员可以打开各种孔。 该框架(.NET)是不是在它自己的风险,但开发商。

在这里,你有工具的列表,你可以看到他们在那里将检查哪些安全风险:

静态代码分析表

但是,当然,还有被称为vulnerabilies,你可以在这里看到:

的TechNet远程执行代码

特权的海拔的TechNet

有多种已知的和没有解决的缺陷,可以在著名的安全站点上找到。 (包括零天攻击)

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

MS安全检查表(不知道为什么,这是“退役”,因为这大多是中性的相关信息

开放Web应用安全项目

MS防跨站点脚本

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

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



Answer 3:

恐怕这是不可能建立一个当地的winform应用程序这实际上是安全的,因为用户总是可以破解你的应用程序。

但也有一些技巧来减缓裂解过程。 大多数技术发生聚集层,如垃圾代码和包装上。

另一种方法是使你的可执行代码随时间而变化(即进入正在执行的程序时内存即代码)。 然而,你必须首先确保所有其他代码(这是不那么执行)是安全的。 这可以通过加密来完成。 但你也必须确保加密程序更加高度安全。 加密程序总是固定在ROM中,并通过物理方法固定。

另一种方法是把网络的优势。 经常更新本地应用程序和禁止的旧版本。 这样一来,你的代码可能快速变化足以击败裂解过程。

哦...我会乱扔垃圾,或只是题外话? 我很抱歉。



文章来源: Common vulnerabilities for WinForms applications