保持Web服务器数据受保护的最佳实践

时间:2013-08-30 05:54:16

标签: security protection medical

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

即使我使用在某处购买的私人服务器,并依赖其监控服务,也很有可能有人找到安全漏洞并窃取我的数据。我的业务已经结束。

此类架构的最佳做法是什么?

5 个答案:

答案 0 :(得分:14)

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

  1. 损坏的输入(手动或fuzzed
  2. SQL Injection
  3. 跨站点脚本攻击(XSS
  4. 猜测:Brute forcedictionaryrainbow tables等。
  5. 现场(员工)泄密
  6. Social engineering
  7. Man-in-the-middle
  8. 跨站点伪造攻击(CSRF
  9. Replay attacks
  10. 一旦发生泄漏或泄露,这些是使攻击者更容易解决的一些问题,因此也应该得到解决:

    • 以纯文本格式存储的数据
    • 弱密码/密钥
    • 弱加密或哈希
    • salting
    • 不分离服务(例如,将数据库放在与Web服务器相同的物理盒上)

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

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

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

    5(泄漏)如果数据是现场加密的,并且admins / employees / janitors没有密钥来解密数据,那么泄漏信息的价值有限(特别是如果# 4处理正确)。您还可以限制访问数据的人员和方式(NSA刚刚在这里学到了宝贵的一课,并且正在制定政策以确保两个人需要在场才能访问私人数据)。正确的日志记录和访问尝试记录也很重要。

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

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

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



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

    投资测试/攻击您的解决方案。实施网站/数据库的工程师通常无法考虑所有可能的攻击情形。

答案 1 :(得分:3)

您的问题是此类架构的最佳做法是什么?

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

  1. 根据请求识别网络流:如果您知道服务器应该接收和发送的常规网络流,那么您可以允许并检查(内容/请求检查)它们,而默认情况下(防火墙)将拒绝其他流量/流量。这是一种网络隔离措施,可以降低恶意软件传播的风险(或成功侵入生产网络的成功)
  2. 确保您的 DMZ无法直接访问您的局域网,并使用"来源任何"或者"来源于许多类似规则(要经过双重检查的防火墙/路由器规则)。
  3. 确保无法直接请求您的网络服务器,绕过安全过滤层。 您的网络服务器应该至少有一个3层过滤器:
    1. 接受的协议和来源:防火墙(和路由器)。
    2. 动态网络流量检查: NIPS (网络入侵防护系统),可检测/阻止恶意网络请求。您可能希望查看MAPP以查找Microsoft合作伙伴(www.microsoft.com/security/mapp/此链接在TechNet Wiki外部。它将在新窗口中打开。)。还请记住,NIDS的目的只是检测而不是阻止恶意流量(与NIPS相反),但另一方面,它们不会为业务流程造成任何拒绝服务风险。
    3. 面向应用程序的安全性:位于Web应用程序/站点旁边的WAF(Web应用程序防火墙),它将允许强化请求控制,并收紧过滤器以匹配Web应用程序的特性。 IIS7的ModSecurity(请参阅: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. 确保您拥有所有相关(并且必需的?)可追溯性链:这意味着防火墙,反向代理和网络服务器之间可能存在相关性&#39 ; s日志。请注意不要只启用"错误"记录,例如在IIS日志中。最后,请考虑存档日志。
  10. 定期创建Web服务器数据的备份
  11. 定期(至少在部署时)以整数状态创建系统映像。这可能对安全事件有所帮助,既可以尽快恢复生产模式,也可以进行调查。
  12. 定期审核您的设备:防火墙规则,NIPS规则,WAF规则,反向代理设置。
  13. 遵循应用层产品,数据库层和Web服务器层的安全最佳实践
  14. 参考:http://social.technet.microsoft.com/wiki/contents/articles/13974.security-best-practices-to-protect-internet-facing-web-servers.aspx

答案 2 :(得分:2)

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

  • 聘请最好的安全黑客,付出很高的代价,让他们为你的公司工作感到自豪
  • 聘请最优秀的程序员,付出他们的代价,让他们以为贵公司工作而自豪
  • 将您的服务器托管到您自己的建筑物中,可能是在不同的经度

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

当安全问题重要时,优秀的人才,激情和能力是你唯一的保护。

答案 3 :(得分:0)

这就是我的想法:

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

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

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

Webserver会在每个请求中解密数据。由于用户密码是其公钥,因此服务器上的解明只能在有活动会话时进行。

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

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

上行 :使网络服务器安全问题的相关性降低。

这是最好的解决方案吗?

答案 4 :(得分:0)

好的,我会尝试在你已提出的建议上稍微建立一下。首先,您可能希望研究mega网站背后的技术;它大概正好用于你感兴趣的东西。然而,基于JS的加密仍然存在一些缺点。话虽如此,用js和html实现对记录的快速解密并不容易,但并非不可能。因此,我会说你一般都在思考正确的方向。

无论你是否必须考虑所有常见的攻击技术和防御(网站攻击,服务器攻击等),但这个主题太宽泛,无法在一个答案中完全覆盖。不用说,其他答案已经很好地涵盖了这些。

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