查看: 12881|回复: 4

高级包过滤

[复制链接]
发表于 2006-7-31 16:14:21 | 显示全部楼层 |阅读模式
高级包过滤
高级包过滤

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×
回复

使用道具 举报

发表于 2006-7-31 16:22:07 | 显示全部楼层

我帮你帖出来吧

高级包过滤要求具备包结构和协议方面比较深入的知识。在这篇文章里,我将向你介绍使用探测器协议建立高级包过滤的步骤。

  大部分资深的分析员都几种建立高级包过滤的方法,它们包含以下特征:

     1)位或字节值模式,它可以帮助你捕获交通情况,这种交通状况会在包的某个特殊位置处包含一个特殊的值。
  2)布尔操作,它可以使你将这些模式和AND/OR运算符结合起来。

  位和字节值模式

  在包中确切的某个位和字节位置上的特殊的值的实行能够变成任何分析员的非常有力的工具。这有几个关于一些模式的例子,你可能想要匹配:
   

  1)TCP包头的SYN为置1(表示有人企图在网络中作TCP连接)
   
  2)TCP包包含RETR值在TCP包头之上(表示一个设备正使用FTP传送文件)
   
  3)ICMP包包含类型0(表示一个设备正在网络上发送未到达目的地的包)

  让我们看看其中的一些高级过滤时如何建立的。

TCP握手


  面向连接的服务,例如FTP,HTTP,要求一个初始的TCP握手已建立连接并交换开始的一些序列号。这些序列号随着收到数据的多少而增加,从而提供可靠的,确信的服务给TCP数据。

  在TCP握手的第一个包里,TCP包头的SYN(同步序列号)位被置为1。

  为什么你会关注这个包呢?好——就是说,你已经配置了一个非常安全的网络。你决定,没有人能够从公用互联网上连接你内部的计算机。这就意味着,没有SYN包能够穿越防火墙,对吗?你可能想要在防火墙内部、所有SYN通过的地方建立过滤,以检查这些。

  
  注意:如果有人真的企图鬼鬼祟祟,他们可能使用SYN标志和其他标志置位的包来穿越你的防火墙。嗯,这样的话,你必须建立一个更高级的包过滤器——布尔过滤器,它的ORs收集多种标志设置模式。

  隐藏FTP文件传输


  虽然说明文件为FTP命令定义了端口21,但是仍有很多FTP服务器包允许你选择你自己的端口号来运行FTP服务。这肯定是安全冒险。想想当一个不满的雇员使用80端口建立带有FTP服务的办公室桌面时,会发生什么?他回家后,就可以方便的通过防火墙了(端口80一般被用作HTTP操作),天啦,这样做是多么愚蠢啊!

  注意:短暂的端口是那些临时端口。他们仅在短期内被使用。例如,当FTP客户发布“ls”命定,以观察目录内容时,FTP客户软件传送这个命令给NLST命令。但是,首先客户必须建立临时端口号用来传送目录内容。这些短暂端口的使用真的刺激了大部分协议分析员。正当你在想你已经使用检查栏方法(参见http://www.packet-level.com/上的'基础包过滤')建立了一个较好的'FTP'过滤器时,你发现该过滤器并不能捕获一半的那些准确FTP通信。唉。

  自然,如果你真的想要创建一个令人敬畏的过滤器,你就要使用OR来建立一个结合所有不同命令的过滤器,本文稍后会提到。

  目的地未到达


  当一个设备不能发现一个服务、网络或者主机时,它可以求助于带有目的地未到达ICMP包的请求。

  任何好的分析员有一个预定义的ICMP过滤器。但是,这些过滤器不能寻找ICMP通路的特殊类型。ICMP包头的类型域的值0x03标识了一个目的地未到达包。

布尔操作


  为了高效的使用一些模式,你必须将他们混合在一个过滤器重。例如,如果你企图捕获网络中所有的片段并且你过滤所有“更多片段”位置为1的包,那么你会错过片段位的最后一个片段。

  同样的,如果你过滤RETR FTP命令以捕捉可能正在运行非标准实现的FTP的人士,你会错过使用STOR命令正把文件放到你的网络上的人。

  这有几个完美的例子,它们是关于为什么你需要使用布尔操作符来混合这些模式。

  标准的操作符包括AND,OR和AND NOT。每个操作符我们都会给出一个例子。

  AND(捕捉端口未到达)
  ICMP类型域值为3的包(目的地未到达)
  AND
  ICMP编码值为3的包(端口未到达)

  OR(捕捉非标准FTP操作)
  STOR紧跟在TCP包头的包(FTP的上传命令)
  OR
  RETR紧跟在TCP包头的包(FTP的下载命令)
  OR
  NLST紧跟在TCP包头的包(FTP的文件列表命令)
  (对于这个考虑增加AND NOT端口21)

  AND NOT(捕捉所有分片的包)
  “更多片段”位被置为1的包(片段列的一部分)
  AND NOT
  片段位移为0的包



  就像你所看到的,协议的深刻的理解需要能够利用所有高级布尔过滤的优势。一旦你花时间并作出努力,你将发现你的分析器比原来好用10倍。

  让我们看看上述的每个布尔例子,并向你展示这些布尔过滤器在嗅探器3.5中是如何被定义的。

  AND(捕捉端口未到达)


  在这个例子中,你想要捕捉一个特殊类型的ICMP目的地未到达包——你想要搜寻端口未到达类型包,这表示某人正在搜寻指定位置上并不存在的服务。

  目的地未到达编码数如下所列:

  0 网络未到达
  1 主机未到达
  2 协议未到达
  3 端口未到达
  4 需要分片段和不必分片段被设置
  5 源路由失败
  6 目的地网络未知
  7 目的地主机未知
  8 源主机分离
  9 和目的网络通信被管理禁止
  10 和目的主机通信被管理禁止
  11 服务类型的目的网络未到达
  12 服务类型的目的主机未到达
  13 通信被管理地禁止[参见RFC1812]
  14 主机优先级违反[参见RFC1812]
  15 优先级有效地切断[参见RFC1812]

  注意:这些列表由IANA(互联网分配序号权威)维护。作为一名协议分析员,你应该通过http://www.iana.org/网站咨询他们,以保持最新的多种协议分配序号的更新。

  以下是我们感兴趣的两个模式的一些细节:

  模式1:带有ICMP类型域值为3的包(目的地未到达)
                     

  模式2:带有ICMP编码值为3的包(端口未到达)
                    

  我们想要“AND”这两个操作,因为你正在搜寻那些类型值为3并且正确位移的编码值也为3的包。

  OR(捕捉非标准FTP操作)


  在本文的前面,我们制作了一个可以捕获所有包含RETR值的包(当有人通过FTP获取文件时用到的)但是FTP在TCP包头之后直接使用一系列命令。这些命令是:

  

  USER 登录的用户名
  PASS 登录使用的密码
  NLST 在远程系统上给出文件列表
  CWD  改变工作目录(在远程系统中)
  PORT 使用后面的临时端口号
  RETR 获取一个文件
  STOR 将一个文件放到远程系统上
  QUIT 退出登录



  如果你对所有的通路都感兴趣,它们用作将文件放到本地系统,从本地系统得到文件,或者查看文件列表,那该怎么办?在这里,我们想建立一个过滤器,来标识RETR,STOR和NLST包。

  以下给出了我们感兴趣的三种模式的一些详细说明:

  模式1:带有RETR模式的包(用FTP获取文件时使用)
                      

  模式2:带有STOR模式的包(用FTP上传文件时使用)
                     

  模式3:带有NLST模式的包(用FTP给出文件列表时使用)
                     

  我们想要“OR”这三种操作,因为你想要搜寻带有RETR或STOR或NLST命令值的包。最后的数据模型过滤器如下图所示。
         

  AND NOT(捕捉所有分段包)


  当包必须通过支持较小的MTU(最大传输单元)尺度的网络时,IP能够将包分段。图6给出了IP包头的格式。
     0                                    1                                   2                                    3
     0  1  2  3 4  5  6  7  8  9 0 1  2  3  4  5 6  7  8  9 0  1  2  3 4  5  6  7 8  9  0  1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |版本号 |  IHL    |    服务类型          |           总长度                                       |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+      
     |        证明                                          |  标识    |         分段位移                      |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     | 生存卷              |     协议                 |         包头求校验和                             |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                                         源地址                                                                   |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                                                      目的地址                                                  |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                   可选项                                                         |           增添项        |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  标志和分段位移域的具体表示如下:

  +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
   |      | D  | M |       |      |      |      |      |      |      |      |      |      |      |      |      |
         | 0   | F  | F   | o    | o   | o   | o   | o   | o   | o   | o   | o   | o   | o   | o   | o   |
        +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+


  0表示总是置位为0,DF表示‘不分段’位,它的意思是
            

  当置为1的时候表示不要分段
            

  当置为0的时候表示允许分段


  MF表示‘更多分段’位,它的意思是
            

  当置为1的时候有更多的分段到来
            

  当置位0的时候表示这是最后一个分段o表示位移域,它定义了该包在整个数据流中的位置。

  简单的过滤器给予‘1在更多到来位’,它捕获除了集合中的最后一个分段外的所有分段,因为集合中的最后一个分段的‘更多到来’位域值为0。我们可以在此基础上,多多思考一下...

  这里,给出了网络中常见的多种包的特征:

  第一个分段:更多到来位=1;分段位移=0
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     |       |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
     |  0   |  0  |  1  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+


  中间的分段:更多到来位=1;分段位移不等于0
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     |       |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
     |  0   |  0  |  1  |                 ---------   不等于0      ---------                    |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+


  最后一个分段:更多到来位=0;位移不等于0
      ---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
      |     |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
      |  0 |  0  |  0  |                ---------   不等于0      ---------                     |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+


  未分段的包:更多到来位=0;位移=0
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     |       |      |      |      |      |      |      |      |      |      |      |      |      |      |      |      |
     |   0  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |  0  |
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+


  你能找到一个模式,让你能够捕获所有的分段吗

   模式1:更多到来位置为1的包
                  

  模式2:不包含位移值为0的包
                  

  对,就这样。所有在分段集合里的包它的‘更多分段’位是1或者他们有非0的位移值。

  我们也使用嗅探器的二进制格式来使之更加清晰,以代替十六进制转换和所有那些垃圾。如果你已经听过我的过滤方面的讲座,那么你就知道我将它当成了一种真正的艺术形式。你需要知道你的协议,直到在什么地方得到位移和域值信息,直到如何估计出可能的变化是什么,以及如何测试你的系统。
回复

使用道具 举报

发表于 2006-7-31 16:23:57 | 显示全部楼层
呵呵,LZ的发帖方式还是第一次遇到(直接把网页保存)

佩服,如果能把其中的相关内容在做一点整理归纳就更好了!
回复

使用道具 举报

发表于 2006-7-31 21:10:34 | 显示全部楼层
绝对支持!!!!!!!!!!!!!!!!!!!!!!!!!!
回复

使用道具 举报

发表于 2006-8-6 14:29:40 | 显示全部楼层
好多东西多少................
回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

快速回复 返回顶部 返回列表