12

假设我经营一家医疗机构,并且想要一个网站,我的用户/患者可以在其中查找他们的私人记录。针对最常见攻击的最佳解决方案是什么?

即使我使用在某处购买的私人服务器,并依赖其监控服务,也很有可能有人会发现安全漏洞并窃取我的数据。我的生意结束。

这种架构的最佳实践是什么?

4

5 回答 5

16

首先,您需要确定要尝试和防御的攻击,然后单独解决每个攻击。既然你提到了“最常见的攻击”,我们就从那里开始;这是一个常见的三层服务(client-web-datastore)的快速列表:

  1. 损坏的输入(手动或模糊
  2. SQL 注入
  3. 跨站脚本攻击 ( XSS )
  4. 猜测:蛮力字典彩虹表等。
  5. 现场(员工)泄密
  6. 社会工程学
  7. 中间人
  8. 跨站伪造攻击(CSRF
  9. 重放攻击

一旦发生泄漏或破坏,这些是使攻击者更容易的一些问题,因此也应该解决:

  • 以纯文本形式存储的数据
  • 弱密码/密钥
  • 弱加密或散列
  • 加盐
  • 没有服务分离(例如将数据库放置在与 Web 服务器相同的物理盒子上)

现在我们来看看常见的缓解措施:

1-3 (Inputs, SQL Injection, XSS)处理了很多错误的输入。因此,需要对来自客户端的所有输入进行清理,并且需要执行(以攻击为中心的)测试以确保代码正常工作。

4(猜测)自动化工具将用于尝试猜测用户的密码,或者如果他们已经拥有数据,他们将尝试强制使用密钥或哈希。缓解措施涉及为加密或散列选择正确的算法。增加密钥的位大小。对密码/密钥复杂性执行策略。使用盐。限制每秒的尝试次数。等等

5(泄漏)如果数据是现场加密的,而管理员/员工/管理员没有解密数据的密钥,那么泄漏信息的价值是有限的(尤其是在#4处理正确的情况下)。您还可以限制访问数据的人员和方式(美国国家安全局刚刚在这里学到了宝贵的一课,并且正在制定政策以确保需要两个人在场才能访问私人数据)。正确记录和记录访问尝试也很重要。

6(社会工程)攻击者将尝试致电您的支持台,冒充客户,请求访问特权信息或让支持台更改信息(密码、个人信息等)。他们通常会将多个支持电话链接在一起,直到获得控制帐户所需的所有信息。支持人员需要接受培训,并限制他们将提供哪些信息,以及他们可以编辑哪些数据。

7(中间人)这是攻击者试图将自己注入通信流的地方,最常见的是通过使用在客户端机器上运行的rootkit或假接入点(例如wifi)。基于线路/协议的加密(如 SSL)显然是第一级保护。但是变体(例如浏览器中的人)不会得到缓解,因为它们会在 SSL 数据包被解密后看到数据。一般来说,客户端是不可信的,因为平台本身是不安全的。鼓励用户使用专用/隔离机器是一种很好的做法。限制密钥和解密数据存储在内存或其他可访问位置的时间。

8-9(CSRF 和重放)与中间人类似,这些攻击将尝试复制(例如捕获)用户的凭据和/或事务并重用它们。针对客户端来源的身份验证、限制凭据有效时的窗口、要求验证交易(通过电子邮件、电话、SMS 等单独的渠道)都有助于减少这些攻击。



正确的加密/散列/加盐可能是公司搞砸的第一件事。假设你所有的其他防守都失败了(就像你说的,他们可能会失败),这是你最后的希望。在这里投资并确保正确完成。确保使用不同的密钥(不是一个主密钥)对各个用户记录进行编码。让客户端进行加密/解密可以解决很多安全问题,因为服务器永远不知道密钥(所以没有人可以窃取它们)。另一方面,如果客户端丢失了密钥,那么他们也会丢失他们的数据。因此,必须在那里进行权衡。

投资于测试/攻击您的解决方案。实现网站/数据库的工程师通常没有能力考虑所有可能的攻击场景。

于 2013-09-10T20:46:35.250 回答
3

您的问题是这种架构的最佳实践是什么?

我喜欢 Microsoft 的这篇文章Security Best Practices to Protect Internet Facing Web Servers,它有 11 次修订。尽管其中一些是特定于 Microsoft 平台的,但您可以将许多概念应用于独立于平台的解决方案。

  1. 根据请求识别网络流:如果您知道服务器应该接收和发送的常规网络流,那么您可以允许并检查(内容/请求检查)它们,而其他流量/流将默认被拒绝(通过防火墙)。这是一种网络隔离措施,可降低恶意软件传播(或成功入侵生产网络的风险)的风险
  2. 确保您的DMZ 无法使用类似“source to any”或“source to many”的规则(要仔细检查防火墙/路由器规则)直接访问您的 LAN。
  3. 确保无法绕过安全过滤层直接请求您的 Web 服务器。您的 Web 服务器应该至少有一个 3 层过滤器:
    1. 接受的协议和来源:防火墙(和路由器)。
    2. 动态网络流量检查:NIPS(网络入侵保护系统)将检测/阻止恶意网络请求。您可能想查看 MAPP 以找到 Microsoft 合作伙伴(www.microsoft.com/security/mapp/ 此链接在 TechNet Wiki 外部。它将在新窗口中打开。)。还请记住,NIDS 仅旨在检测而不是阻止恶意流量(与 NIPS 相反),但另一方面,它们不会对业务流造成任何拒绝服务风险。
    3. 面向应用程序的安全性:WAF(Web 应用程序防火墙),就在 Web 应用程序/站点旁边,可以加强对请求的控制,并收紧过滤器以匹配 Web 应用程序的特殊性。ModSecurity for IIS7(参见:http ://www.modsecurity.org/此链接在 TechNet Wiki 外部。它将在新窗口中打开。)是可用于 HTTP 的稳健审计日志记录的工具示例( S) 已识别漏洞的交易和虚拟修补。连同捆绑的 OWASP ModSecurity 核心规则集 (CRS),它提供了针对应用层攻击和信息泄露的基本保护。
  4. 确保客户端不能直接向您的服务器发送请求(从 TCP 的角度来看),否则可能会促进攻击。因此,通过部署反向代理作为Web 服务器的前端,确保网络隔离,DMZ 思想。这将允许更轻松地管理可以合法发送到服务器的网络流量(包括负载平衡等其他需求)。Forefront UAG 可以是此类解决方案的示例,也可以是 MAPP 程序中的任何其他示例。请注意,某些反向代理可能会提供高级安全功能。
  5. 遵循ASP.Net 代码的安全最佳实践,以防止代码注入:http: //msdn.microsoft.com/en-us/magazine/hh580736.aspx 此链接在 TechNet Wiki 外部。它将在新窗口中打开。和 SQL 注入: http: //msdn.microsoft.com/en-us/library/ms161953 (SQL.105).aspx 此链接在 TechNet Wiki 外部。它将在新窗口中打开。. 从更全球化的角度来看,请参阅 SDL:http: //msdn.microsoft.com/en-us/security/aa570401.aspx 此链接在 TechNet Wiki 外部。它将在新窗口中打开。. 定期审核托管代码。
  6. 考虑到您正在运行的 Windows 系统上可用的 SSL/TLS 实现,尽可能加强加密网络通信:http: //blogs.msdn.com/b/benjaminperkins/archive/2011/10/07/secure -channel-compatibility-support-with-ssl-and-tls.aspx 此链接在 TechNet Wiki 外部。它将在新窗口中打开。. 默认情况下,我们的建议是 TLS 1.1/1.2。请记住,这必须在客户端和服务器端都启用。
  7. 确保 DMZ 中的机器未加入常规生产域。AD 隔离在林层,因此强烈建议不要在 DMZ 中放置生产 AD。请使用另一个林,或部署 AD 轻型目录服务。
  8. 实施应用程序的白/黑名单,例如通过 AppLocker:http ://technet.microsoft.com/en-us/library/ee791890(v=ws.10).aspx 此链接在 TechNet Wiki 外部。它将在新窗口中打开。
  9. 确保您拥有所有相关的(和必需的?)可追溯链:这意味着防火墙、反向代理和 Web 服务器的日志之间可能存在关联。请注意不要只启用“错误”日志记录,例如在 IIS 日志中。最后,请考虑归档日志。
  10. 定期创建 Web 服务器数据的备份。
  11. 定期(至少在部署时)创建整数状态的系统映像。这在发生安全事件时可能会有所帮助,既可以尽快返回生产模式,也可以进行调查。
  12. 定期审核您的设备:防火墙规则、NIPS 规则、WAF 规则、反向代理设置。
  13. 遵循应用层产品、数据库层产品和 Web 服务器层的安全最佳实践。

参考:http ://social.technet.microsoft.com/wiki/contents/articles/13974.security-best-practices-to-protect-internet-facing-web-servers.aspx

于 2013-09-10T11:15:54.513 回答
2

虽然josh poleyBala Subramanyam是很好的答案,但我要补充一点,如果您的业务的核心价值是安全,您应该:

  • 聘请最好的安全黑客,给他们丰厚的报酬,让他们为为你的公司工作而自豪
  • 聘请最好的程序员,给他们丰厚的报酬,让他们为为你的公司工作而自豪
  • 将您的服务器托管到您自己的建筑物中,可能在不同的经度

黑客和开发人员将是您的主要资产,他们应该知道这一点。事实上,我们可以在这里列出最常见的安全做法,但应用我们的建议不会让您的系统真正安全,只是很有趣。

当安全很重要时,优秀的人才、热情和能力是您唯一的保护。

于 2013-09-11T08:35:09.320 回答
0

好的,我将尝试在您已经提出的内容上进行一些补充。首先,您可能想研究大型网站背后的技术;它使用的大概正是你感兴趣的东西。然而,基于 JS 的动态加密仍然存在一些弱点。话虽这么说,用 js 和 html 对记录进行动态解密并不容易,但并非不可能。因此,是的,我会说您通常在朝着正确的方向思考。

无论如何,您都必须考虑所有常见的攻击技术和防御(网站攻击、服务器攻击等),但是这个主题过于广泛,无法在一个答案中完全涵盖。不用说,其他答案已经很好地涵盖了这些内容。

至于“架构”,如果您真的很偏执,您还可以将数据库放在单独的服务器上,该服务器在一个不起眼的端口上运行数据库,并且只允许来自网络服务器的传入连接。

于 2013-09-10T21:13:21.100 回答
0

这就是我的想法:

所有记录都存储在我的家用计算机(离线)中,并使用我的个人密钥加密。在这台计算机中,有患者记录以及每个用户的私钥和公钥。这台计算机将新数据作为加密器上传到网络服务器。

网络服务器仅包含加密数据。

我向我的用户提供公钥。无论是使用从其他地方发送的电子邮件,还是使用普通邮件。

网络服务器解密每个请求的数据。因为用户密码是它的公钥,所以服务器上的解密只能在有活动会话时发生。

因为有非对称密钥在起作用,我什至可以在网络服务器(用户输入)上插入新的加密数据,然后将其提取到我的离线计算机上。

缺点:请求新密码需要离线计算机上传重新加密的数据,并以某种方式发送新密码。

优势:降低网络服务器安全问题的相关性。

这是最好的解决方案吗?

于 2013-08-30T05:54:36.433 回答