网络探测详解:理解端口扫描和 Ping 扫描
几乎任何大型网络的系统管理员都会告诉您,他们的网络以前曾被探测过。随着破解工具越来越普及且数量不断增加,这种趋势可能会持续下去。尽管从技术上讲,网络探测本身不是入侵,但也不应掉以轻心——它们可能会在未来导致实际的入侵。正如谚语所说,有备无患。在本文中,我将解释两种常见的网络探测背后的概念,以及如何执行它们以及可以采取哪些措施来检测它们。
最常见的网络探测类型可能就是端口扫描。端口扫描是入侵者用来发现目标机器上运行的服务的方法。然后,入侵者可以计划对她发现的任何易受攻击的服务进行攻击。例如,如果入侵者发现端口 143 (IMAP 端口) 是开放的,她可能会继续查明目标机器上运行的 IMAP 版本。如果该版本存在漏洞,她可能会使用“漏洞利用”(一种利用安全漏洞的程序)获得对该机器的超级用户访问权限。
实际上,端口扫描非常容易执行。我们所要做的就是连接到机器上的一系列端口,并找出哪些端口响应,哪些端口不响应。一个简单的端口扫描器可以在 15 分钟内由一位优秀的程序员使用 Java 或 Perl 等语言编写完成。但是,这种端口扫描很容易被目标机器的操作系统检测到。列表 1 显示了在 Linux 机器上的日志文件(通常是 /var/log/messages)中此类端口扫描产生的痕迹。请注意,在短短三秒钟内,发生了一系列到各种服务的连接。由于它很容易被检测到,所以现在大多数入侵者不会对机器运行这种端口扫描。
另一种更隐蔽、“更隐蔽”的端口扫描称为“半开放”SYN 扫描。在这种扫描中,端口扫描器连接到端口,但在完全连接发生之前关闭连接(因此得名“半开放”)。由于从未发生完全连接,因此目标机器的操作系统通常不会记录扫描。如果您熟悉 TCP/IP 的内部工作原理,这个概念会更清晰。在正常的 TCP/IP 连接中,两个设备需要完成三次握手才能启动传输。在“半开放”SYN 扫描中,三次握手永远不会完成——端口扫描器通过目标机器给出的响应来判断端口是否打开。
现在我们已经介绍了端口扫描的基本概念,让我们来谈谈当今最流行和最强大的网络探测工具——Nmap (网络映射器)。Nmap 能够执行我到目前为止讨论过的两种类型的端口扫描。它也能够执行其他类型的探测——其中一些我将在后面介绍。列表 2 显示了针对机器的典型 Nmap 扫描。
现在(您可能在想),如果“隐蔽”端口扫描是可能的,我们应该如何检测到它们?好消息是,可以使用特殊工具检测到此类端口扫描。Solar Designer 开发了一个名为 scanlogd 的工具,它是一个在后台运行并监听网络接口以进行端口扫描的守护进程。如果检测到端口扫描,scanlogd 会使用 syslog 机制编写一行描述扫描。列表 3 显示了 scanlogd 检测到的扫描。
还有其他可以检测端口扫描的工具。但是,我不会在本文中介绍它们。如果您有兴趣,可以查看本文末尾的“资源”部分。您可能特别想查看 tcplogd,这是一个可配置的 TCP 端口扫描检测器(您可以指定要记录的数据包类型、避免洪泛并使用它指定受信任的主机)。
Ping 扫描是另一种网络探测。在 ping 扫描中,入侵者向机器网络(通常指定为 IP 地址范围)发送一组 ICMP ECHO 数据包,并查看哪些机器响应。这样做的全部目的是确定哪些机器是活动的,哪些不是活动的。这有点像凌晨 3 点敲邻居的门,看看谁在睡觉,谁没在睡觉(好吧,别试着这样做)。一旦入侵者知道哪些机器是活动的,他就可以专注于攻击哪些机器并从那里开始工作。请注意,在网络上执行 ping 扫描有正当理由——网络管理员可能试图找出网络上哪些机器是活动的,以便进行诊断。
fping 是一种可用于执行 ping 扫描的工具。fping 接受 IP 地址列表并向其发送 ping 数据包。与普通 ping 不同,fping 向一个 IP 地址发送一个 ping 数据包,然后立即以轮询方式转到下一个 IP 地址。列表 4 显示了一个简单的 Perl 脚本,该脚本用于生成 C 类 IP 地址列表(在我们的示例中为 192.168.0.1 到 192.168.0.20)。列表 5 显示了如何将该 Perl 脚本与 fping 结合使用,以发现该 IP 地址范围内哪些机器在网络上是活动的。-a 开关用于仅显示活动的机器,否则(fping 也会显示无法访问的机器)。
与端口扫描一样,ping 扫描也可以使用特殊工具检测到。ippl 是一种 IP 协议记录器,可以记录 TCP、UDP 和 ICMP 数据包。它类似于 scanlogd,它在后台运行并监听数据包。列表 6 显示了日志文件中的一行,该行演示了 ippl 拦截的 ping 数据包。但是,使用 ippl 时要小心——如果您在繁忙的以太网网络上,您可能会发现您的 ippl 日志文件(通常位于 /var/log/ippl/*)可能会很快被填满。
除了 ippl 之外,还有其他可用的 ping 检测工具——遗憾的是,我还没有能够详细了解它们。一个引起我兴趣的是 pingd,它是一个用户态守护进程,用于在主机级别处理 ICMP 流量。pingd 的一个巧妙功能是它与 TCP Wrappers 集成,允许您在 TCP Wrappers 的访问控制文件(/etc/hosts.allow 和 /etc/hosts.deny)中指定谁可以 ping 您,谁不能 ping 您。
端口扫描和 ping 扫描只是众多类型的网络探测中的两种。当前的网络探测工具已经非常成熟。它们的持续开发和可用性意味着系统管理员将在未来看到更有趣的探测模式。
为了检查其中一些其他网络探测,让我们回到 Nmap。Nmap 能够执行诱饵扫描。当发生此类扫描时,您将在您的系统上看到来自唯一 IP 地址的扫描,但您将无法挑选出哪个是扫描您的真实 IP 地址。当然,这样做的目的是迷惑系统管理员。
除了诱饵扫描外,Nmap 还能够远程识别目标机器上运行的操作系统。这是使用一种称为 TCP/IP 堆栈指纹识别的技术完成的。我们已经在列表 2 中看到了这一点,其中 Nmap 正确地将我的目标机器识别为运行 Linux 2.1.122 - 2.2.14(我的机器实际上运行的是 2.2.12)。在撰写本文时,当前版本的 Nmap (2.53) 能够识别 465 种不同版本的操作系统、路由器和其他设备。这种能力对入侵者很有用,因为它使入侵者能够识别机器上的弱点,因为安全漏洞通常是特定于操作系统的。
如果您对其他类型的探测模式感兴趣,我强烈建议您阅读 Stephen Northcutt 的书(请参阅“资源”)。Fyodor 在 Phrack 杂志上关于端口扫描和 TCP/IP 堆栈指纹识别的文章也很有趣。
我希望本文对您理解两种常见的网络探测以及如何检测它们有所帮助。然而,安全,一如既往,是一个持续的过程。网络探测将会增加,新的安全漏洞将被发现,您肯定几乎每天都会在新闻中读到这些事情。保持最新状态是值得的。因此,我建议您订阅安全邮件列表(强烈推荐 BUGTRAQ!)或经常访问新闻组和安全相关的网站。
