【问题标题】:Client Server socket security客户端服务器套接字安全
【发布时间】:2010-12-20 01:34:00
【问题描述】:

假设我们有一个服务器 S 和几个客户端 (C),并且每当客户端更新服务器时,服务器上的内部数据库就会更新并复制到其他客户端。这一切都是在 Intranet 环境中使用套接字完成的。 我相信攻击者可以相当容易地嗅探这种纯文本流量。我的同事认为我过于偏执,因为我们在防火墙后面。

我是否过于偏执?您是否知道利用这种情况的任何利用(请链接)以及可以采取哪些不同的做法。客户端用 Java 重写,但服务器仍然使用 C++。 代码中的任何东西都可以防止攻击?

【问题讨论】:

    标签: security client-server


    【解决方案1】:

    在您公司的防火墙内,您可以免受来自外部的直接黑客攻击。但是,我不会费心挖掘的统计数据声称,对企业数据的大部分损害是从内部完成的。大部分是简单的意外,但员工不满和不被发现的原因有很多;如果您的数据很敏感,它们可能会以这种方式伤害您的公司。

    还有大量关于如何处理个人 ID 数据的法律。如果您正在处理的数据属于这种类型,那么在您的公司内部不小心处理这些数据也可能会使您的公司面临诉讼。

    解决方案是使用 SSL 连接。您想为此使用预打包的库。您为两端提供私钥/公钥,并使用通常的文件访问权限很好地隐藏私钥,并且主要解决了嗅探问题。

    【讨论】:

    • 这就是我推荐的,使用 SSL。
    • 只需要一台在您的网络中被感染的计算机来创建从外部进入的攻击媒介(无论是否有防火墙),因为可以将一台受感染的计算机设置为一个代理,用于执行通过普遍接受的协议 (HTTP) 接收到的请求并在本地执行它们的特定命令。对于电子邮件之类的数据(除非您使用默认使用 HTTPS 的 gmail),您的消息会以纯文本形式通过网络发送。使用编写良好的工具可以直接拦截和读取它们。
    • 如果您在使用交换机而不是集线器的网络上,嗅探网络上的所有流量变得更加困难,但仍有办法绕过它。通过发送欺骗性的 ARP 更新请求,您可以有效地让网络相信所有数据包都需要传递到一个主机(进而将它们转发到“真实”网关。这称为中间人攻击. 幸运的是,存在检测可疑 ARP 活动的工具,如果有人注意,很容易发现此类活动。
    【解决方案2】:

    SSL 提供加密和身份验证。 Java 有 built inOpenSSL 是 C/C++ 的常用库。

    【讨论】:

      【解决方案3】:

      你的同事太天真了。

      Heartland Payment Systems 发生了一次备受瞩目的攻击,这是一个信用卡处理器,人们希望它对安全性非常小心。假设他们防火墙后面的内部通信是安全的,他们就没有使用 SSL 之类的东西来确保他们的隐私。黑客能够窃听该流量,并从系统中提取敏感数据。

      这里是another story 对攻击本身的更多描述:

      被鲍德温描述为“相当 复杂的攻击,”他说它有 很难准确地发现 它是怎么发生的。法医团队 发现黑客“正在抢 带有嗅探器恶意软件的数字 浏览了我们的处理平台,” 鲍德温说。 “不幸的是,我们是 相信持卡人的姓名和 数字被暴露了。”数据,包括 卡交易发送过来 Heartland的内部处理 平台,未加密发送,他 解释说,“由于交易正在 处理后,它必须是未加密的 获取授权请求的表单 出去。”

      【讨论】:

      • 感谢您的链接和您的时间。
      【解决方案4】:

      你可以做很多事情来防止中间人攻击。对于大多数内部数据,在防火墙/IDS 保护的网络中,您真的不需要保护它。但是,如果您确实希望保护数据,您可以执行以下操作:

      1. 使用 PGP 加密对消息进行签名和加密
      2. 加密敏感消息
      3. 使用散列函数验证发送的消息未被修改。

      保护所有数据是一个很好的标准操作程序,但是保护数据的成本非常高。使用安全通道,您需要拥有证书颁发机构,并允许在涉及通信的所有机器上进行额外处理。

      【讨论】:

        【解决方案5】:

        你太偏执了。您说的是在理想情况下安全的内部网络中移动的数据。

        可以嗅探信息吗?是的,它可以。但它被已经破坏网络安全并进入防火墙的人嗅探。这可以通过无数种方式来实现。

        基本上,对于绝大多数企业来说,没有理由加密内部流量。从公司内部获取信息的方式几乎总是要简单得多,甚至无需“嗅探”网络。大多数此类“攻击”来自最初被授权查看数据并且已经拥有凭据的人。

        解决方案不是加密您的所有流量,解决方案是监控和限制访问,这样如果有任何数据被泄露,就更容易检测到是谁做的,以及他们有权访问什么。

        最后,考虑一下,无论如何,系统管理员和 DBA 几乎都可以全权委托整个系统,因为不可避免地,总是需要有人拥有这种访问权限。加密所有内容以防止被窥探是不切实际的。

        最后,你正在大肆宣扬一些东西,无论如何都可能写在某人显示器底部的便签上。

        【讨论】:

          【解决方案6】:

          您的数据库有密码吗?我当然希望答案是肯定的。没有人会相信保护数据库的密码过于偏执。为什么对流经网络的相同数据不具有至少相同级别的安全性*。就像未受保护的数据库一样,网络上未受保护的数据流不仅容易受到嗅探,而且还容易被恶意攻击者改变。这就是我将如何构建讨论。

          *我所说的相同级别的安全性是指按照某些人的建议使用 SSL,或者如果您必须使用原始套接字,则只需使用周围众多可用的加密库之一来加密数据。

          【讨论】:

            【解决方案7】:

            我使用过的几乎所有“重要”应用程序都依赖于 SSL 或其他一些加密方法。

            仅仅因为您在 Intranet 上并不意味着您可能没有在试图嗅探流量的某些服务器或客户端上运行恶意代码。

            【讨论】:

              【解决方案8】:

              攻击者可以访问您网络内的设备,让他有可能嗅探整个流量或客户端和服务器之间的流量。
              无论如何,如果攻击者已经在里面,那么嗅探应该只是您必须考虑的问题之一。

              据我所知,在内网中使用安全套接字在客户端和服务器之间的公司并不多,主要是因为成本较高而性能较低。

              【讨论】: