我最近遇到了一个系统,其中所有数据库连接都由以各种方式(包括base 64编码,md5sums和各种其他技术)掩盖的例程进行管理。
就是我,还是这太过分了?有哪些选择?
我最近遇到了一个系统,其中所有数据库连接都由以各种方式(包括base 64编码,md5sums和各种其他技术)掩盖的例程进行管理。
就是我,还是这太过分了?有哪些选择?
Answers:
默默无闻的安全将把您的钱埋在树下。唯一使它安全的是没人知道它的存在。真正的安全性就是将其置于锁或密码锁的保护之下,例如保险箱。您可以将保险箱放在街角,因为确保它安全的原因是只有您一个人可以进入其中。
如下面的评论中@ ThomasPadron-McCarty所述:
如果有人发现了密码,则只需更改密码即可,这很容易。如果有人找到了位置,则需要将钱挖出来并将其移到其他地方,这需要更多的工作。而且,如果您在程序中使用默默无闻的安全性,则必须重写该程序。
可以通过隐晦的安全性来说是不好的,因为它通常暗示着隐性被用作主要的安全手段。直到发现它为止,隐匿性很好,但是一旦有人解决了您的特定隐晦性,您的系统就会再次变得脆弱。鉴于攻击者的坚持不懈,这完全没有安全性。
绝不能将晦涩之处用作适当安全技术的替代方法。
另一种主题是将模糊处理作为隐藏源代码以防止复制的一种手段。我在这个话题上分歧很大。我能理解您为什么想要这样做,就我个人而言,我从来没有遇到过这样的情况。
通过隐蔽性实现安全性是一个有趣的话题。(正确地)它是替代有效安全性的对象。密码学的典型原理是消息未知,但内容未知。加密算法通常被广泛发布,并由数学家进行分析,过一段时间后,人们对它们的有效性有了一定的信心,但永远不能保证它们的有效性。
有些人隐藏了他们的密码算法,但这被认为是一种危险的做法,因为这样的算法就没有经过同样的审查。只有像NSA这样有大量预算和数学人员的组织,才能摆脱这种方法。
近年来,最有趣的发展之一就是隐匿术的风险,即这种做法是将消息隐藏在图像,声音文件或其他某种媒介中。隐写分析中的最大问题是识别消息是否存在,从而使信息变得晦涩难懂。
去年,我遇到一个故事,说研究人员计算了隐秘通道的容量,但真正有趣的是:
以这种方式研究隐身通道会导致一些与直觉相反的结果:例如,在某些情况下,寻找隐藏数据的算法数量加倍可以增加隐秘通道的容量。
换句话说,用于识别消息的算法越多,其有效性就越差,这与通常通过模糊性对安全性提出的批评相反。
有趣的东西。
这个主意不好的主要原因是它不能解决潜在的问题,而只是试图隐藏它们。迟早会发现问题。
另外,额外的加密将产生额外的开销。
最后,过度的模糊(如使用校验和)使维护成为噩梦。
更好的安全性替代方法是消除代码中的潜在弱点,例如强制输入以防止注入攻击。
所有这些人都同意,默默无闻不是安全,而是为自己付出时间。话虽如此,但实施一个体面的安全系统然后添加一层额外的模糊性仍然有用。可以说,明天有人在ssh服务中发现无与伦比的裂缝/漏洞,无法立即进行修补。
通常我已经在内部实现了……所有面向公众的服务器仅公开所需的端口(http / https),仅此而已。然后,一台面向公众的服务器将通过一些晦涩的高编号端口将ssh暴露给互联网,并通过端口扫描触发器设置来阻止任何试图找到它的IP。
默默无闻在安全领域中占有一席之地,但并非作为第一道和最后一道防线。在上面的示例中,我没有对ssh进行任何脚本/机器人攻击,因为他们不想花时间搜索非标准的ssh服务端口,如果这样做,他们不太可能在另一层ssh之前找到它。安全介入并切断它们。
安全性就是根据人们所知道的,他们是谁或拥有的财产来允许他们进入或拒绝他们。目前,生物特征识别技术不善于找到自己的身份,并且总是存在问题(针对发生严重事故的人的指纹读取器,伪造的指纹等)。因此,实际上,很多安全性都是关于混淆某些东西。
良好的安全性就是将您必须保密的东西降至最低。如果您拥有正确加密的AES通道,则可以让坏人看到除密码以外的所有内容,从而确保您的安全。这意味着您可以攻击的区域要小得多,并且可以专注于保护密码。(不是那么简单。)
为此,您必须对除密码之外的所有内容都充满信心。这通常意味着使用许多专家研究过的行业标准密码。任何人都可以创建自己无法破解的密码,但并不是每个人都可以使Bruce Schneier无法破解。由于完全缺乏密码安全性的理论基础,因此密码的安全性是由许多非常聪明和知识渊博的人尝试提出攻击来确定的,即使他们不切实际(对密码的攻击总会变得更好) ,再也不差)。这意味着加密算法需要广为人知。我对Advanced Encryption Standard(高级加密标准)非常有信心,而对于Joe编写并混淆的专有算法几乎没有信心。
但是,加密算法的实现存在问题。容易无意间留下漏洞,可以找到钥匙或进行其他恶作剧。它发生在PGP的备用签名字段中,以及在Debian Linux上实现的SSL的弱点。OpenBSD甚至发生了这种情况,它可能是最容易获得的最安全的操作系统(我认为十年来最多有两个漏洞利用)。因此,这些工作应该由信誉良好的公司来完成,如果实现是开源的,我会感觉更好。(封闭源代码不会阻止坚定的攻击者,但是这会使随机的好人更难找到要封闭的漏洞。)
因此,如果我想要安全性,我会尝试使我的系统尽可能可靠,这意味着除了密码外,其他系统都应尽可能开放。
在已经很安全的系统上通过模糊处理将安全性分层可能会有所帮助,但是,如果系统是安全的,则没有必要,如果不安全,最好的办法就是使其安全。将晦涩难懂的事物称为不太受欢迎的“替代医学”形式-它不太可能有太大帮助,虽然它本身不太可能造成太大伤害,但这可能会使患者不太可能去看合格的医生或计算机安全专家。
最后,我想为Bruce Schneier的博客制作一个完全不请自来且毫无兴趣的插件,无非是感兴趣的读者。我从中学到了很多有关安全性的知识。
评估,测试或改进安全产品的最佳方法之一是让庞大,精明的同仁小组对其进行改进。
依靠其安全性而成为“黑匣子”的产品无法享受这种测试的好处。当然,成为“黑匣子”总是会引起人们怀疑(通常是有道理的),他们无论如何都不会经受这种审查。
我曾在一种情况下辩称,密码保护实际上是默默无闻的安全措施。我能想到的唯一的安全性不是某种形式的生物统计安全性。
除了一点点语义和选择之外,在需要真正安全性的任何情况下,STO(通过模糊性实现安全性)显然都是不好的。但是,在某些情况下,这并不重要。我经常对文本文件进行XOR填充,我不希望任何人阅读。但是我真的不在乎他们是否这样做,我只是希望不要阅读它。在这种情况下,这并不重要,并且XOR焊盘是易于发现STO的完美示例。
如果操作系统是Windows,请查看使用数据保护API(DPAPI)。这不是一味的安全性,而是一种存储无人参与进程的登录凭据的好方法。就像每个人在这里所说的那样,通过默默无闻的安全保护并不能给您带来太大的保护。
我要补充的一点尚未提到,那就是互联网具有令人难以置信的通过模糊性破坏安全性的功能。
正如一次又一次地表明的那样,如果您唯一的辩护是“没人知道后门/错误/漏洞利用存在”,那么只需一个人偶然发现它,几分钟之内,数百人将知道。第二天,几乎每个想知道的人都会。哎哟。