研究人员如何避免套接字漏洞?

时间:2013-03-13 01:41:14

标签: c# .net sockets

我需要使用C#让计算机通过网络进行通信。网说要使用套接字。

该网还说,有很多恶意的人会因为一半的机会而把我们的工作搞得一团糟,而且通过开放端口,我们给了他们一半的机会。

在Windows 7/8 / Server 2012计算机上使用.NET 4.5,C#中的套接字引入了哪些漏洞,以及如何最好地减轻这些漏洞?

有什么危险?打开一个端口真的可以让恶意黑客搞砸我们的工作吗?

2 个答案:

答案 0 :(得分:3)

开放端口的危险性与听取它的内容一样危险。

通常,最薄弱的环节是您的应用程序,而不是底层库。

当然可能存在以下问题:

  • 您的操作系统处理网络
  • .NET框架对网络的处理

但是,当恶意数据进入

时,大多数情况都会变得丑陋
  • 您的申请

当然,最后一个完全取决于您的应用性质。

例如,如果您的应用程序侦听任意命令,例如在服务器上运行程序,那么攻击者基本上可以执行您的应用程序有权执行的操作 - 删除文件等。

降低风险的一种方法是在操作系统级别为应用程序提供非常小的权限。这样,被入侵的应用程序就无法删除系统文件。

降低风险的另一种方法是在沙盒环境中运行您的应用,例如chroot或FreeBSD jail。这也取决于操作系统。

简而言之,有些事情可能会在您的控制范围之外出错(例如:操作系统漏洞),而且还有其他一些事情,更有可能的是,只有您的应用才会出错。并且有一些方法可以减轻这种风险。

答案 1 :(得分:3)

虽然@jwd在他所说的内容中大多是正确的,但在很多情况下,限制网络应用程序访问权限的概念 - 通过沙盒或其他安全层 - 可能不是可行或不可取的。

网络应用程序的最大问题是它们如何处理(或失败处理)网络流中的格式错误的数据。 99%的时间(或左右)这是因为创建网络代码的开发人员很懒惰。周期。

网络黑客的圣杯是远程代码执行。在过去,有两种主要方法在这方面相当成功:

  1. 传统上唯一最大的问题是缓冲区溢出 当您使用C#的托管对象时,这不太可能成为问题。你必须努力使C#应用程序容易受到这种类型的攻击。自从C中单个堆栈上的静态缓冲区过去以来,我们已经走了很长的路。

  2. 紧接着是各种注射攻击的问题 一般来说,请阅读SQL InjectionCode Injection。始终确保您正在检查用户提交给您系统的每个值,如果有疑问,始终拒绝问题消息

  3. 文件系统访问。
    在访问任意路径的情况下,攻击者可能能够将文件上载到可以执行的位置。如果您允许上传,请务必确保他们无法访问特定文件夹或文件夹集。

  4. 当然还有设计代码执行 这是您的代码设计以允许远程代码执行的地方,但是没有充分保护以限制恶意内容。无论如何,这通常是一个坏主意,但如果您必须允许这样做,请确保您的安全性与您可以做到的一样强。

  5. 代码执行后,安全漏洞是下一个大问题。你可以找到很多关于敏感数据通过严密安全系统泄露的新闻报道,大部分时间都是因为系统的“安全性”特别差。

    端到端加密 - 例如通过SSL - 只要您可能传输敏感数据(包括用户名和密码),就必须必须。数据包嗅探器可以监视未加密的数据流并提取登录详细信息。假设您对实际的敏感登录数据进行哈希处理...如果我使用该确切的哈希值来登录自己,会发生什么?

    有很多这样的问题,在你掌握这些问题之前,你必须做很多阅读。例如,SQL注入攻击会给你带来很大的麻烦。

    最后,当所有其他方法都失败时,攻击者可能会因为刚刚关闭系统而解决问题。当您的网络代码出现故障时,请确保它能够正常运行。

    故事的道德:

    1. 链接加密(SSL或等效)是A Good Thing™
    2. 检查每一条输入并丢弃任何向您发送错误数据的连接。
    3. 始终 假设您的系统受到攻击,并相应地进行编码。
    4. 优雅地处理错误,或承担后果。