使用物联网设备时,是否建议对推送到客户端的固件映像进行混淆或加密?这使逆向工程变得更加困难。
(当然要签名)
使用物联网设备时,是否建议对推送到客户端的固件映像进行混淆或加密?这使逆向工程变得更加困难。
(当然要签名)
不可以。无论您是否加密/混淆您的固件,您都不应依赖固件的隐蔽性来隐藏存在的潜在安全漏洞。
我有一个激进的建议:完全相反。使您的固件二进制文件公开可用和下载,任何需要它们的人都可以免费访问。在您的网站上添加一个页面,详细说明如何就安全问题与您联系。与安全社区合作以提高产品的安全性。
怀疑这将是有益的。到目前为止,将其开源而不是封闭源是一个更好的选择。一开始可能看起来很愚蠢,甚至有争议,但向公众开放一个项目有很多好处。
虽然有些人怀有恶意,但也有些人希望提供帮助,让互联网变得更美好。开源可以让更多的眼睛来审视项目,不仅可以查看潜在的功能、错误和问题,还可以增加“事物”的安全性和稳定性
并且同意多项式的回答,参与社区并建立一个可以帮助您解决安全问题的人员基础,将显着增加客户群。
有些人认为开源代码可以被许多人审计,因此包含很少的错误。另一方面,攻击者具有相同的轻松访问权限,并且还会寻找这些相同的漏洞。这里肯定有一个权衡,这在以前的答案中没有正确描述。
其他人提到代码应该本质上是安全的,因此不需要混淆/加密/隐藏。确实,即使您知道系统是如何工作的,也应该将其设计为安全的。这并不意味着情况总是如此,并且实施是完美无缺的。在实践中,代码永远不会 100% 安全。(看看 Web 应用程序安全性:如果 Web 应用程序中没有漏洞,为什么我们需要安全标头来保护我们免受 XSS 和 CSRF 攻击?)可以通过尝试通过加密和混淆来隐藏代码来采取额外的安全措施. 在移动世界中,逆向工程甚至被视为一种严重的风险:OWASP Mobile Top 10 风险。
由于没有系统是 100% 安全的,我们只能尝试增加破解它所需的努力。
所以现在,开源/易于获得的代码与加密和混淆代码之间的权衡。允许对您的源代码进行公开审查有助于减少错误数量。但是,如果您是一家小公司,公众几乎没有动力自由地审核您的代码,那么发布您的代码没有任何好处,因为没有人会以善意的态度看待它。但是,攻击者更容易发现漏洞。(我们不是在谈论每个安全研究人员都试图破解的最新 iOS 版本)..
在这种情况下,我们甚至不是在谈论开源代码以供公众审查。我们正在谈论加密传输中的固件。安全研究人员不太可能购买您的设备来获取发现和发布漏洞的代码。因此,好人发现漏洞的机会与坏人发现漏洞的机会相比减少了。
一个设计良好的固件应该依赖于其访问密钥的强度,而不是依赖于攻击者对系统设计的无知。这遵循称为Kerckhoffs 公理的基本安全工程原则:
一个信息系统应该是安全的,即使系统的所有内容,除了系统的密钥,都是公共知识。
美国数学家克劳德·香农(Claude Shannon )建议从“敌人知道系统”的假设出发,即“应该在敌人会立即完全熟悉系统的假设下设计系统”。
您可能有兴趣知道,在 19 世纪末期之前,安全工程师经常提倡隐蔽和保密作为保护信息的有效手段。然而,这些知识对抗方法与一些软件工程设计原则是对立的——尤其是模块化。