1

我需要安全地存储一些可由授权用户在网站上检索的数据。这不是信用卡,但同样是您不希望有人接触到的数据。

唯一会检索数据的用户是发布数据的用户。

所以,我正在考虑把一些东西放在一起,如下所示:

  • 一切都通过 SSL 运行
  • 要登录,用户将输入他们的用户名和密码,并且还必须上传“密钥”文件 - 建议用户只在拇指驱动器或类似设备上保留一份密钥文件的副本
  • 用户的密钥不会物理存储在服务器上。当用户提供他们的登录密钥时,它将存储在内存中
  • 所有存储的数据都将使用 MCRYPT_RIJNDAEL_256 加密,用于加密的密钥将是他们必须上传的密钥文件的一部分(即未存储在服务器上的文件)
  • 当用户的密钥保存在内存中时,这也将使用 MCRYPT_RIJNDAEL_256 使用每天更改的密钥进行加密
  • 我们将在检索数据时生成一个新的 32 字节 IV,因此对于两次单独的检索我们应该得到不同的结果
  • 用户可以在需要时重新生成他们的密钥,此时所有存储的数据都用他们的新密钥重新加密
  • 用户可以在他们的密钥的内存存储中设置超时 - 要求他们(例如)每 30 分钟重新提供一次。
  • 用户还可以在内存存储上设置非活动超时,因此假设他们在(例如)5 分钟内不执行操作,它也会使密钥过期
  • 盒子本身将被锁定,仅将端口 80 和端口 22 暴露给单个 IP(我们的办公室 IP)

我的问题是:

我的想法是否正确?上述解决方案是安全的,还是我错过了一些可以轻松获取数据的攻击向量?

据我所知,攻击者需要对机器进行物理访问(或者需要在我们的办公室网络上),即使是这种情况,他们也只能检索当时登录的用户的数据(因为它们是唯一可以存储的密钥)?我的假设正确吗?

有什么方法可以消除在用户登录时将用户密钥存储在内存中的要求(没有要求他们在每次请求时重新提供密钥)?我不认为有,但我希望这是我没有想到的。

谢谢!

4

2 回答 2

3

这在本地网络上听起来有点偏执,但这里有一些其他的事情需要考虑。这些是我自己遇到的一些事情。

  1. 盒子和对盒子的物理访问是否已锁定并受到监控(安全房间、安全机架、摄像头)?如果它与“在线”的交换机位于同一个机架中,则跳线可以将它连接到互联网。也有人可以带入无线路由器并将其连接到网络(将其隐藏在桌子下),这样您就无法判断它正在广播。USB 路由器也可用于连接共享。检查 Mac 地址。

  2. 如果您要求密钥,您可能希望将密钥与第二个短语(用户提供的可能像两步密码一样)和一个只有您知道的隐藏短语进行散列,所以如果有人在这个东西上运行循环器,他们就不能到任何地方。此外,如果他们捕获了几个数据包,您不希望他们尝试破译转储。如果您在某人提供不同密钥并且哈希失败时进行哈希,那么您知道他们不是您认为的那个人。

  3. 如果您在交换密钥的地方捕获初始握手,则可能会破坏 SSL(银行的高端路由器这样做是为了加快传输速度),因此通过连接传输的任何内容都可以使用 Wireshark 之类的东西进行窃听。是否可以访问硬件层?

  4. 如果可以访问 USB 端口(因此端口需要锁定在物理机上),则可以在机器上收集任何捕获的内容。如果您让他们提供拇指驱动器,那么这也需要检查(root 工具包、键盘记录器等)。可能是拇指驱动器上运行的应用程序的校验和。此外,还需要检查机器是否有其他 USB 拇指驱动器(可能在机器背面),有人可能会在其中安装键盘记录器并等待。

  5. 如果他们可以访问机器上的 CD-rom,他们是否可以重新启动机器并使用 knoppix 之类的东西?不会有数字纸迹。

  6. 在浏览器中,您可能希望使其不保留任何历史记录。

  7. 所有网页都需要立即过期。

  8. 每次有人连接到机器时,您都可以让它安装一个干净的虚拟机。

  9. 使用不同的默认 Web 端口。

  10. 由于它在数据中心中,因此您需要确保盒子本身寻找特定的连接以便正常工作(有点像保持活动身份验证)。这样,如果盒子有中间人尝试,则必须有人进行物理干预才能使盒子重新上线。

  11. 如果盒子在服务器场(在同一个机架中)有自己的防火墙或本地网络,请确保盒子不会盲目信任本地网络。我过去的一些客户托管在“核准备就绪”设施的“安全”笼子里,以找出其他人已经在他们的企业级防火墙后面以及与他们的安全服务器相同的子网中修补了他们的千兆交换机。他们使用我的客户端连接进行广播,而不是试图进入我的客户端的盒子,尽管他们确实设法用红色代码感染了我的客户端的一个邮件服务器(Microsoft)。我的客户端的防病毒/反垃圾邮件防火墙(Fortinet)阻止了所有出站病毒、蠕虫和未经请求的邮件(防火墙向我传呼关于寻找 IP 的新 MAC 地址)。幸运的是我们不是

  12. 为了获得最佳安全性,您需要确保机架本身位于其自己的笼子中或物理锁定(独立)。它有点贵,但如果数据是关键任务,那么如果存在违规行为可能会很糟糕。大多数服务器场都信任能够访问笼子的经过身份验证的人,因此他们通常不会将摄像头放在包含 30-40 个机架的笼子内,如果您碰巧在普通人群中托管一个主要的服务器场。此外,大多数服务器场都有几个“守卫”或监控摄像头和登录的人员以及一些技术人员,具体取决于那里托管的内容。

  13. 使盒子本身的防火墙只接受来自您自己的几个特定静态 IP 的连接,并且盒子上的任何应用程序也应该进行验证。如果您使用防火墙,则只允许受信任的 VPN 连接访问所需资源(Web 应用程序、数据库等)以外的任何内容。

希望这可以帮助。

于 2013-03-23T00:37:20.890 回答
2

如果只有上传的用户需要能够阅读内容,那么公钥加密可能有用吗?

这样,您就不必真正关心在内存中是否有密钥或害怕有人嗅探数据。客户将使用他的公钥从他可能在世界上的任何地方加密文件。只有当某人可以访问他的私钥(在加密时不需要)时,您才能解密该数据。

GPG是这样的一个很好的工具,并且存在很多图形用户界面。

如果服务器是某种备份,只需确保将私钥的副本存储在安全的地方。这可能是在没有任何类型的互联网访问的外部媒体上。

于 2013-03-23T00:51:58.137 回答