且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

我谈网络扫描 -- 之一

更新时间:2022-10-04 20:09:27

网上讲网络扫描的文章很多,但是大多数都没有多少实际意义,不是相关软件 README 的摘要,就是 INSTALL 文件的重复, 要不然就是语法解释。本文试图提出一些实用的东西。
一. 概述
当我们讨论网络扫描的时候,经常会关注三个问题:
1. 什么时候需要进行网络扫描?
   1) 修改了网络防火墙和系统防火墙后:需要对网络进行扫描,以便检查配置是否有错误;
   2)新设备(服务器和网络设备)投入到产品网络之前:需要对将要投产的新设备进行扫描,以便检查新设备的安全措施是否恰当;
   3)按照本公司网络安全规范的规定,到了应该对网络进行例行扫描的时候:根据安全规范的规定,进行相关扫描,以便发现平常维护中不经意“制造”出的漏洞;
 
2. 应该进行什么层面的网络扫描?
   按照网络扫描所希望达到的目的,可以将其初略地分为三个层面:端口扫描,常规漏洞(我将其定义为应用本身的漏洞,不包括与该应用 相关的配置和(或)存放于该应用中的代码相关的漏洞)扫描和特殊应用的漏洞(我将其定义为跟应用相关的配置和存放于该应用中的代码相关的漏洞)扫描。
   1)如果你希望知道你的网络防火墙和系统防火墙是否只开放了你的应用所必需的最少的端口,那么进行端口扫描就足够了;
   2)如果你还希望知道你的网络上是否存在常规漏洞,那么你需要使用能够发现网络上的一般漏洞的常规漏洞扫描工具进行常规漏洞扫描;
   3)如果你还希望进一步知道你的某个(些)应用的配置和(或)存放于该应用中的相关代码是否存在漏洞,那么就需要使用专门针对该特殊应用的漏洞扫描工具,进行特殊应用的漏洞扫描了;
 
3. 应该从哪里执行扫描?
   我相信,有不少的系统/网络管理员,会从自己管理的网络上的某台机器去扫描自己管理的网络,因为我当年也这样干过。
   这样干,可能有两种原因,一是自己还没有意识到这样作的弊端;二是除了从自己管理的网络节点上执行扫描外,别无选择,因为很可能,我们手头只有一条到达公网的线路。
   由于我们在配置防火墙(网络和系统)的时候,对来自属于自己网络的数据包,总是采取一种较为信任的态度,限制相对于其它网络要宽松;同样地,在 IDS/IPS 里面定义的告警事件,及每个事件的伐值,对来自自己网络的数据包相对于其它网络同样的数据包,也要宽松些。
   于是,当从自己网络的节点上去扫描自己网络的时候,就会发现,怎么开放了那么多不应该开放给公网的端口啊,怎么 IDS/IPS 象傻了一样,不告警了。
   所以,如果有条件(比如有两条到达互联网的线路,ADSL 也可以哦)一定要从公网去扫描自己管理的网络,那样才能检查出自己管理的网络的真实安全状况。
   如果公司确实只有一条线路,如果你对公司负责,对自己负责(希望每晚能睡安稳觉),就从自己家里的电脑去“攻击”自己管理的网络吧。
   
二. 端口扫描
1. TCP 三次握手简述
   我本来不想说这个问题的,因为对于大多数系统/网络管理员来说,太简单了。但是,由于下一个话题涉及到了,还是简述一下,权当作是温习吧。
   首先提醒一下,三次握手仅对于 TCP 协议而已,不要任何时候都想到进行三次握手分析,^_^。
   1)客户端向服务器端发送一个 SYN 数据包,请求跟服务器同步;
   2)服务器端向客户端响应一个 ACK + SYN 数据包,表明自己接收客户端的同步请求,同时请求跟客户端同步;
   3)客户端向服务器端相应一个 ACK 数据包,表明自己接收服务器端的同步请求;
   如果这三个步骤都正常发生,那么一个 TCP 全连接(full connection)就形成了;
   如果只发生了1)和2),那么就叫做半开连接(half-open connection),顺便提一句,DDOS 攻击,用的就是这种招式;
   如果客户端不按规则出牌,首先向服务器端发送非 SYN 数据包,那么,很可能是有人在用该客户端进行端口扫描(偷偷扫描)。
   
2. 各种端口扫描方式的比较
   1)全连接端口扫描:试图跟目标建立全连接;
      如果全连接能建立起来,说明该能够访问该端口,如果发出去的 SYN 数据包没有收到回应,那么该端口被过滤掉了,如果收到了 RST 回应包(由内核发送),那么该端口没有服务监听;
      其优点是不受状态防火墙干扰,对端口上运行的服务的判断较准确;
      缺点是动作太大,容易被 IDS 发现;
      例子:nmap -sT 
   2)半开连接扫描:试图跟目标建立半开连接;
      如果收到了来自目标的 ACK + SYN 数据包,说明该能够访问该端口,如果发出去的 SYN 数据包没有收到回应,那么该端口被过滤掉了,如果收到了 RST 回应包,那么该端口没有服务监听;
      其优点是不受状态防火墙干扰;
      缺点是对端口上运行的服务的判断不太准确,而且容易被IDS发现;
      例子:nmap -sA   
   3)偷偷扫描:发送异常标志的数据包给目标;
      如果发出去的数据包没有收到回应,那么可以访问该端口(异常数据包被对应服务忽略了)或者发出去的数据包被过滤掉了,如果收到了 RST 回应包,那么该端口没有服务监听;
      其优点是容易躲开IDS;
      缺点是易受状态防火墙干扰,对端口是否可以访问及端口上运行的服务的判断也不太准确;
      例子:nmap -sF; nmap -sX ; nmap -sN
 
   新一代的端口扫描工具,基本上都能执行上述任何一种扫描方式。
 
3. 我所钟爱的 nmap
   作为开源安全工具,没有什么比能够一直受到 NSA,FBI,CIA 的关注更值得骄傲的了,nmap 就是这样的宠儿。nmap 能够执行多种方式的端口扫描,能够较准确猜测出目标的操作系统类别和版本,能够较准确猜测出在可以访问的端口上监听的服务,而且能够智能地根据目标的反应适当地调整发包速率,另外,它是 Linux 系统自带的。
   下面是我使用 nmap 的一些体会:
   1)自己维护的某台机器的登录服务没有使用默认端口,而且禁ping了。现在想上去维护,可是不记得该机器的登录服务使用的端口号了,而维护手册又不在手头(常常都会遇到的事情),怎么办? 
      nmap 一下那台机器吧,根据扫描的结果,一般都能很快想起该机器的登录端口号(毕竟,是你自己维护的机器嘛);
   2)由于定期的网络端口扫描,都是针对一个范围的IP地址,所以要记得 nmap 指定IP范围的方法:使用CIDR就可以了,比如 61.144.122.64/27;
   3)对于将服务的端口修改为非默认的高位端口(比如 SSH 运行于 22222 端口)的情况,在使用 nmap 的时候,记得加 -p 选项来指定端口范围,比如 -p 1-65535。因为默认情况下,高位端口扫描不到。
4) 对于使用了状态防火墙的情况,不要使用 -sA 这种扫描方式,因为直接向目标发送的 ACK 数据包会被状态防火墙 DROP 掉。
   5)如果禁ping了(禁止公网ping,一般都应该这样做),记得用 -P0 选项;
   6)如果你希望知道某个防火墙是状态防火墙还是简单的包过滤器,用 -sA 扫描,如果扫描结果表明某台机器的状态为 UP, 但是又没有开放任何端口,很可能有状态防火墙保护着该机器;
   7) 不要同时使用 -sV 和 -O 选项来一次就检测服务和OS,因为结果会不准确,***是分开进行服务和 OS 检测。
   8)如果想跟 amap 联合使用,那么请使用 -oM <filename> 选项,把 nmap 扫描的结果保存为 amap 能够使用的格式;
      为什么要把 nmap 跟 amap 联合起来使用?
      amap 是 THC(黑客选择)开发的一个扫描软件,据说在识别目标运行的服务方面优于 nmap(但我感受到的是 nmap 在识别服务方面不比 amap 差)。
      但是呢,amap 在扫描目标的时候太放肆了,动作太大,很容易被 IDS/IPS 检测,而 nmap 在逃避 IDS/IPS 方面做得很好。所以,就有了这种将他们联合起来使用的扫描技术。amap 调用 nmap 扫描结果文件的方式是:amap -i <result.nmap> -A 。
   9)两个例子:nmap -P0 -sV -O -v -p 1-65535 -oM result.nmap <target>  主要是检测服务
                     nmap -P0 -sS -O -v -p 1-65535 -oM result.nmap <target>  主要是检测OS
  
   如果希望得到更准确的操作系统版本和服务信息,请记得使用最新版的 nmap。
 
4. 黑客精英的杰作--scanrand
   我使用 scanrand 的时候并不多,也没有什么经验可言,但是在这里我要提提它。
   如果我们想扫描一个B类网络,如果使用 nmap 之类的扫描工具,肯定要很长一段时间。但是,如果我们用 scanrand,很快就可以扫完。
   作为 Dan 开发的 Paketto Keiretsu 工具集里面***的工具,scanrand 使用了极具创意的“反向 SYN Cookie”技术。正是这个天才般的设想,使得 scanrand 的扫描速度奇快无比。
   对于这样的精英黑客,我们除了尊敬他和向他学习之外,还能说什么呢? 
 
下面的内容,将在“我谈网络扫描 -- 之二”讲述
  
三. 常规漏洞扫描
1. 漏洞扫描的原理分析
2. 我所钟爱的 nessus
四. WEB 应用漏洞扫描
1. 常见的 WEB 漏洞
2. 我所钟爱的 nikto
五. 如何应对网络扫描
1. 检查网络扫描
2. 防护网络扫描
六. 结语

本文转自zkjian517 51CTO博客,原文链接:http://blog.51cto.com/zoukejian/60710