为什么“安全”软件不是真正意义上被保护的软件

爱迪德数字安全

展望未来 / 迎接挑战!

有许多文章鼓励让你“加固”自己的软件,使之更安全。市面上也有些工具可以帮助你找到软件的安全漏洞。有些像CERT这样的权威机构公布了一些软件安全编码标准,提出了一些非常好的建议,例如,“保证数组的长度在有效的长度范围内”,“给对象分配足够的内存”,“不要在格式化字符串里使用用户输入的数据“。其他一些组织机构,像CWE/SANS Top 25, OWASP Top 10,提供了和编程语言关系不大,针对某些特定应用程序的安全隐患的指导清单。安全编码是一个非常好的主意,每个公司和组织都应该遵循某个标准并严格执行。这样会大大降低你的应用程序被攻击的机会。安全编码或”加固“你的软件应该是一个完整的保护策略的第一步。

哈,问题来了。遗憾的是,安全编码并不能保证你的应用或者是运行中的数据不会成为黑客攻击的目标。我们前面提到的那些安全漏洞之所以很危险,是因为它们会让黑客掌握整个系统,为所欲为。到那个时候,他们可以把手伸到系统中与初始攻击点完全无关的任意位置,而不是他们最开始攻击的代码。

这说明你的软件的安全度是和系统里最不安全的那个应用是一样的。当你的软件可以被暴露在外的时候,你需要扪心自问,“我有多相信其他人会把安全做好?”

软件保护,比如像程序代码转换,白盒加密,文件完整性验证,等等,是明确地设计用来保护您的软件中最有价值的资产(如IP、个人数据、加密密钥)在黑客攻击下的安全。这意味着黑客即使进入了系统也不是那么可怕,更重要的是当他们进入系统后尽量限制他们能干的事情。这里须要强调的是,如果软件代码本身没有进行安全编码,软件保护技术就失去了它的价值。这是为什么我们说遵循一个安全编码标准是第一步。与安全编码相结合,软件保护可以使攻击者在即使控制了系统的情况下,进行逆向工程、提取重要数据以及篡改应用程序等行为仍然是极其困难的。

让我们来设想你的软件是一辆车,它的运行系统就是高速公路。当然高速公路上还有很多车辆在你旁边行驶。使你的软件安全就像安全行驶,你总是打行车信号,不要离前面的车太近,换道以前检查盲点。那么,你应该安全驾驶吗?当然!你应该尽量减少交通事故发生的几率吗?极大概率会都这么做。可是这样就可以让你不被冒失鬼从旁边装撞上你的车吗?这做不到。所以大部分人还是需要安全带和安全气囊,不是吗?这就是真正意义上的软件保护。

本文作者:Phil Eisen, Senior Systems Architect

译者:李琳 ,首席工程师

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180907G1A23300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券