如果客户端需要检索密码的能力怎么办?


34

我目前在工作时继承了一个应用程序,但令我沮丧的是,我意识到使用内部加密功能对数据库中存储的用户密码进行了加密,该功能还包括解密功能。

因此,某人真正需要做的就是复制用户表并复制加密程序集(任何具有数据库生产访问权限的人),然后他们将可以访问100,000个电子邮件地址和潜在的密码。

我正在尝试向企业解释为什么这不是一个好主意,但是安全性概念似乎不可行,因为它们在技术上没有头脑(这是针对政府的)。另外,应用程序中实际上还存在一些功能,供管理员用户检索用户的密码,以便以用户身份登录并执行操作(他们说过,他们需要)。

因此他们不了解安全隐患。为了实施更强大的安全策略(散列密码,以便不易检索它们),我必须删除它们的现有功能。

我该怎么办?我并不是一开始就建立密码系统的,所以如果发生任何错误,这并不是怪我。另一方面,我对此感觉不太好,也不想访问100,000次潜在的电子邮件登录。


9
“他们已经说过了,他们需要”。他们也撒谎。
S.Lott

10
无论您做什么,只要掩盖您的屁股。
工作

6
安全性的关键方面之一是不可抵赖性。也就是说,用户应该不能说“不是我”而应该相信。如果管理员可以以用户身份登录,则对任何操作的来源都会产生疑问。基本上,拥有管理员帐户后,您便可以执行任何操作。
Berin Loritsch 2011年

10
建立新的PSN?;-)
vartec

11
因此,我们很想用“索尼”来重新标记这个问题。
乔尔·埃瑟顿

Answers:


57

以安全的方式实现他们所需的功能。可以实施以其他用户身份登录的管理员,而无需他们知道该用户的密码。他们可以自己登录,然后具有一些“更改身份”功能。

保护密码数据库不是业务问题,而是技术问题。不这样做是一个错误。如果企业将安全性视为功能折衷,那么安全性将会丧失。您不应该给他们任何理由这样考虑。


6
+1为第二段和“不这样做是一个错误”。我希望每个开发人员都能理解。
阿森尼·穆尔琴科(Arseni Mourzenko)2011年

3
对于“保护密码数据库不是业务问题,这是技术问题,” + 1。。/ me认为,像这样的某些决定应该纯粹是技术性的。
马查多

1
我仍然认为,以其他用户身份登录的管理员违反了大多数政府政策规定必须具有的安全系统的不可否认性,这是执行办公室的一项强制性要求。
Berin Loritsch 2011年

我从事过国防承包工作,可以向您保证,政府对需要SOX合规性的企业比对自己的企业要严格得多。
2011年

16

你需要说服他们,他们真的没有需要在事件承担民事责任,他们的服务器被分成。他们也不需要意识到他们正在疏忽大意的知情用户群的强烈反对。

有时在明确的案例中,一方是错误的,而另一方是正确的。这是那些时代之一。

看看索尼刚刚发生了什么。另外,我们的网站最近遭到了黑客攻击,阻止它成为无可避免的灾难的原因之一是,我们使用了(相对)良好的单向哈希函数(SHA512)。从那以后,我们已切换到bcrypt来防止暴力/字典攻击(或至少使它们难以为继)。我根本没有发现其他任何令人难以置信的东西。


8

事实:人们在许多站点上使用相同的密码

您的老板可能没有意识到人们经常为各种服务(包括银行或Facebook等)使用一个密码(或一组密码非常有限)。如果用户可以在您的系统中更改密码,则很有可能使用与其他密码相同的密码。

如果您的老板认为此密码访问没有问题,您也应该告诉他们这个事实,也许他们会开始改变想法。即使您的应用程序在墙后并且无法公开访问,它也可能对其他在线服务构成安全威胁。用户名(特别是当他们是电子邮件时)很容易猜到。我无法想象登录老板的Facebook帐户并在他们的墙上放些东西会多么有趣。

用户密码应始终被视为只有少数人可以访问的顶级隐私/机密信息。最好避免存储此类易失性信息。即使这样做,也应授予您每个访问此信息的权限。就像从只能用多个钥匙打开的高度安全的保险箱中获取机密文件一样。因此人们知道谁被授予访问权限以及何时访问。

如何实施帐户委派

应用程序中的帐户委派应该以不同的方式进行。

  1. 管理员应以自己的身份登录,然后
  2. 两者之一(因为它们是特权用户)
    • 仅输入用户名
    • 从列表中选择某个用户以其身份登录

绝对不应通过使用用户名+密码组合登录。

确实应该开发新屏幕以允许委派登录,但仍然如此。

为什么委托登录更好?

您还可以提供其他功能,以明确表示Admin已代表某些用户执行了某些操作(您现在不知道这是因为Admins充当众神并以任何人身份登录,并且可能会做可能会伤害他人的事情)真实的员工声誉)。

您必须同意人们会犯错误。管理员也是人。如果他们代表他人犯了一个错误,他们将试图责备他们。我对此有100%的把握。这将使非管理员用户更加安全,因此他们的真实声誉不会受到其他人的错误的影响。


5

您没有提及应用程序的功能。如果是护照申请,其中有必须保护的所有身份盗窃信息,则应得到最大程度的保护。但是,如果是“告诉我回家途中的交通事故”,那么密码泄露的后果是什么?我编写的某些系统甚至没有密码-您只需输入您的电子邮件或您的学生编号或其他人们经常认识的其他标识符,并且该系统的所有者重视使用的便捷性以及无法锁定如果人们互相冒充,可能会侵犯隐私。我也没问题。例如,为什么我需要密码来设置会议的首选会议时间表?

因此,如果我被带去进行代码审查,而您又向我提出了这个要求,那么这就是我们的起点。你在保护什么?一个人尝试以另一个人身份登录会带来什么负面后果?暴露每个人的存储数据的负面后果是什么?也许他们很糟糕。您会为我列出它们。那么,人们如果不能单击“给我发送密码”给我,而必须单击“重置我的密码”,会带来什么后果?他们会停止使用该网站吗?那么以人员身份登录的员工又如何呢?那是节省时间,金钱,销售损失还是什么?

成本/收益故事的最后一部分,即只有当您现在所面临的负面因素与删除功能时所获得的负面因素之间存在非常大的差异时,您才可以得到解决问题的成本。我会花费一百万美元来避免接触千美元的机会吗?否。相反呢?我猜这取决于赔率,但是我的第一个答案是肯定的。

ps-加拿大政府启用了一个URL上包含ID的“申请护照”网站:如果您使用其他ID编辑URL,则会看到一些随机的其他公民的半填表。我有一些客户以客户服务的名义登录,以期获得普遍的幸福,因此我确实看到了它的好处,尽管如果密码背后的数据对于陌生人来说实际上很重要,我也不支持。


9
用户倾向于在具有相同用户名的多个站点上使用相同的密码,因此,暴露数据库对于证明愿意花时间在金融网站上尝试这种组合的盗贼很有用。
rjzii 2011年

10
应用程序做什么无关紧要。最敏感的数据是他们的密码。大多数用户在多个系统之间共享密码。如果我有自己的应用程序了密码,这将是有可能会是他们的电子邮件密码等
RoboShop

2
@Rob Z,@ RoboShop,希望你们错了。las,我知道你不是。这是避免在不需要密码的网站上使用密码的一个好理由,它只是鼓励重用可能在其他地方有意义的密码。
凯特·格雷戈里

@Rob Z:或者,再举一个例子,我记得曾读过一篇文章,在Gawker的数据库遭到破坏之后,编写了自动程序以在Twitter上尝试所有用户名/密码组合,然后从所有被入侵的帐户中发布垃圾邮件推文。
Carson63000

5

这可能是违法的,可能会使其受到起诉。如果他们保留有关用户的任何类型的个人信息,或者系统与该用户以其他方式与您交互,则您可能需要检查系统是否属于州或联邦隐私法或法律中的任何一项。即。Sarbanes / Oxley,加利福尼亚州OOPA等

除了潜在的法律问题,您还可以指出,任何管理员都可以随时将整个表转储到便携式数据棒中,并可以以任何用户身份登录并造成破坏或出售数据的能力。

即使您假设所有管理员都是值得信赖的,这也会使管理员密码遭受破坏。

您也不需要用户密码即可执行操作。您可以实现类似sudo功能。


5

这可能不是联邦政府系统,因为FIPS和FISMA的要求将禁止对密码进行可逆加密,并且上级部门会将其扑向月球。

为了实施更强大的安全策略(散列密码,以便不易检索它们),我必须删除它们的现有功能。

对于我以前的公司,我一直在争取发送密码重置电子邮件来解决此问题的能力。而且我一直被否决。最后,我厌倦了随波逐流的便便,于是我离开了。这也是一个尖顶的上司,他认为一些银行网站提出的愚蠢问题被视为“两要素认证”。和他吵架就像是一部Dilbert漫画(他的身形像PHB)。

另外,应用程序中实际上还存在一些功能,供管理员用户检索用户的密码,以便以用户身份登录并执行操作(他们说过,他们需要)。

我已经看到这是在金融机构实施的。客户支持区域的人员将使用自己的凭据登录,并且如果他们有权这样做,则可以假装以客户身份登录。这并没有以客户身份登录他们,只是冒充了客户。这样,如果客户服务代表决定取款,则不会在客户的日志中显示出来:它将显示客户服务代表试图进行取款(以及发送警报以尽快将其解雇) rentacop可以将其放置在地板上)。

如果做得不好,客户支持人员可能会发现最终用户似乎从事某种活动,可能会导致严重的财务或法律责任。

我工作的最后一个联邦网站每年从最终用户(其中​​大约有400个用户)中收取了1/4亿美元,因此日志记录必须非常严格,并且只允许授权的最终用户接触他们在网页上报告了应缴消费税的物品。

索尼是最新违反安全规定的公司之一。这不仅是PS3网络,还是他们的MMORPG游戏网络,总计超过25,000,000个名称,地址,信用卡号,用户名和密码。您可以相信我一点都不开心(我想要我的永恒!)。


PlayStation Network的帐户为7500万,Sony Online Entertainment的帐户为2500万。我不确定我相信这次泄漏只暴露了12,000张信用卡。wired.com/gamelife/2011/05/sony-online-entertainment-hack直到周末之前,您都别想破解。也许。
Tangurena'5

4

对于此类问题,我引用了《软件工程道德规范》。我的解释是,您的首要任务是不损害公共利益(这不是密码泄露的可能性,更像是此处的示例,在此示例中,公司修改了Dell笔记本电脑,以便出租公司可以在不知情的情况下监视其出租人)。之后,您的责任是告知客户潜在的风险,并让他们考虑。当然,这是最低基准。您必须根据自己的判断来判断自己是否仍然觉得这超出了您的承受力和承受力。

当然,当您提到一个政府项目时,如果公民的私人信息由于这些做法而受到威胁,那么它将损害公共利益。


4
而且,如果这是一个政府项目,那么拥有这种不安全感甚至可能不合法。
恢复莫妮卡

3

您可以打印出电子邮件列表和解密的密码列表,然后将其放在老板的办公桌上,并在封面上显示一个大警告:“机密”

使字体很小,以免浪费纸张。

您还可以向他们展示bugzilla如何允许管理员假冒他人而不使用其密码。


+1为老板树立榜样。有人可能会说,最好只将老板及其家人/熟人的密码放在桌子上。
马查多

2

首先,我同意其他答案,指出避免这种情况更为安全,仅存储密码的哈希值,而不是密码本身或可以转换回密码的任何内容。

但是,有时候您或多或少需要进行恢复。对于密码,您通常希望通过简单地允许管理员在需要时(如果需要)更改密码而不是恢复现有密码来进行恢复。

但是,另一种可能性是,您允许用户将数据存储在使用自己的密码加密的服务器上。在这种情况下,简单地允许管理员更改密码是足够的。新密码无法解密数据,大多数用户会发现,如果//忘记/丢失了密码,所有加密数据将无法访问。对于这种情况,有一个相当安全的替代方法,它仍然可以在真正需要时进行恢复。

无需使用用户密码来加密数据,而是创建一个随机密钥来加密数据本身。然后,您将该密钥存储在几个位置:用用户密码加密后的密钥,然后用管理员密码加密的另一个位置。然后,当(不是真的)用户丢失密码并且不再能够直接访问数据时,您可以使用管理员密码解密真实密钥,并使用该密码来恢复数据和/或重新加密密钥。用户的新密码。

如果您不想完全信任单个管理员,则也可以对其进行管理。例如,您可以确定5个人将拥有管理员密钥,并且您希望至少3个人同意才能恢复密钥。在这种情况下,当您出于管理目的存储加密密码时,会存储多次,对于五个管理员中的三个管理员,每个密码存储一次(不会占用太多空间,因为您仅存储多个密钥,每个〜256位,而不是数据的多个副本)。这些副本的每一个都使用这三个管理员的每个密码(的哈希值)进行连续加密。

要解密它,您需要确定正在输入密码的三个管理员,并为这三个密码选择合适的加密密钥,然后使用三个密码中的每个解密以最终获得原始密钥。然后,您可以使用它来恢复数据本身,也可以使用用户的新密码(哈希)重新加密它,以便他们仍然可以访问其数据。

但是,当您执行此操作时,您确实需要使用标准的加密算法,以及(强烈推荐使用)标准的,经过充分研究的标准实现。


2

考虑到这是政府项目,这令我感到担忧。检索用户的密码以在其ID下执行操作将使您毫无意义地进行任何类型的安全审核。我能看到的唯一原因是创建一个伪造的审计跟踪。

确实没有必要对密码使用可逆加密。如果有正当的理由来欺骗用户ID,可以通过以下方法来完成:

  • 存储当前密码哈希
  • 替换为已知值
  • (审核跟踪活动不完善,例如将资金转移到离岸帐户)
  • 替换原始密码哈希

我对最后一步感到不舒服-假装系统上的任何人都应该知道它已经发生了。也许您可以说“这就像您的银行让我在您不知情的情况下访问您的帐户,因为我说我确实需要这样做”以说服企业。


+1用于审计跟踪,对于日常工作以及(希望不是每天)灾难非常重要。人们很少认真对待安全或审核。
dave

2

他们相信更好的密码系统不是问题。创建一个解决方案,以允许管理员/支持人员模拟用户帐户并提供密码修复程序。为了方便起见,安全常常受到损害。使它方便又安全。

编辑: 他们永远也永远不会完全理解密码安全性问题,但是他们确实了解丢失的功能。提出建议,看看您是否可以批准进行必要的更改。他们甚至不知道会花一小时还是一年。这是功能更改,而不是完整的重建。


3
这不是一个完整的答案-您如何证明这样做的成本?如果企业不认为值得,那么员工将因为不关注优先级较高的项目而使工作面临风险。
妮可

@Renesis-当您的系统没有受到损害或受到损害但没有任何价值损失时,就可以收回安全成本。该公司需要以安全为导向的思维方式,否则将是一场艰苦的战斗。
rjzii 2011年

1
@Rob Z-是的,我认为问题在于如何实现这种心态。显然,企业不相信存在风险(或成本,或两者皆有)。
妮可,

1
@RoboShop否,如果密码是可获取的,那么它是不安全的,并且您(或您的公司)由于不遵循行业标准的最佳做法而处于疏忽大意。
Rein Henrichs

1
如果您可以通过哈希登录,则立即破坏哈希密码的主要目的。我的回答是正确的。不要这样 这是不对的。
Rein Henrichs

1

考虑到当前事件(Epsilon数据泄漏和Playstation Network数据泄漏),人们希望问题显而易见。

但是,有时候,作为开发人员,您根本无法影响政策。

再次考虑当前事件,我将竭尽全力显示潜在的丑闻和费用,这应该很容易。但是,如果这样做不成功,那么您真正可以做些什么。不多。退出抗议,以示引起关注。听起来都不是很棒的选择。


1

我不建议这样做,但是如果您绝对必须具有解密密码的能力,则应该使用公共密钥加密。这样,您可以使用公钥加密所有密码。您可以通过使用公钥加密并进行比较来验证密码,也可以将私钥保留在其他位置(不在生产​​计算机上)。


1
是的,私钥应该在管理机器上(在防火墙之后),或者如果私钥在只有管理员自己使用的USB密钥上,则更好。但是不应允许他们将这些钥匙带回家,因为它们可能会被盗。
罗伯特·科里特尼克

也许存储在像KeePass这样的密码保险箱中。这样一来,即使计算机受到威胁,也可以通过管理员密码(很不错的密码)进行保护。我会说在一个安全的加密USB钥匙,但它听起来像他们打算经常..使用它
恢复莫妮卡

0

通常,管理员看到用户密码的原因是万一密码丢失了,他们可以将其提供给用户。据我所知,Windows也不让管理员看到密码-那么为什么要使用您的应用程序?内部的任何加密库都肯定会被破坏,因为我确定无论谁编写的加密库都不能用于NSA。


当然,您假设问题提问者不适用于NSA。
Christopher Mahan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.