Fragroute
    Fragroute的原理就不说了,网上大部分都是关于fragroute的文章。大体就是Fragroute欺骗NIDS检测的方法是在保证victimip stack可以正确重组的情况下,对含有攻击特征串报文进行tcp分段和ip分片,同时塞入大量的错误分片报文,打乱顺序后发出,从而达到欺骗NIDS的目的。
    安装:网上的一些安装方法还是不好使,因为还要装linux下的一些其他软件,比如gcccc++编译器,flex等。我用的的redhat 企业版5linux系统,将安装总结一下。
    首先需要将gcc装上,装gcc之前需将glibc-devellibgomp装上,装该两个软件之前还要一些提示说需装上其他软件才行,按照提示都装上(大概4-5个)。
    装好后,如果就开始安装libpcap-0.9.5软件(fragroute的一个组件)的话,系统会提示
这就需要安装flex了,安装好flex后,如果再安装libpcap-0.9.5软件的话,则会显示如下错误
这是因为没有安装byacc,安装好后就可安装fragroute了。(也可以提示错误,可能还有什么要装的,装上就行了)。按如下步骤安装fragroute
 在Linux系统安装,fragroute需要三个库:libpcaplibdnetlibevent。下载了fragroute和需要的库之后,执行以下命令就可以把fragroute安装到系统中:
 
  #tar ar.gz
  #cd libpcap-x.x
  #./configure &&make &&make install
  #cd ..
  #tar ar.gz
  #cd libdnet-x.x
  #./configure&&make&&make install
  #cd ..
  #tar ar.gz
  #cd libevent
  #./configure&&make&&make install
    #cp /usr/local/lib/libevent-1.2.so.1 /usr/lib/
  #cd ..
  #tar ar.gz
  #cd fragroute-x.x
flex软件
  #./configure&&make&&make install
 
  这些步骤完成之后,基本上完成了fragroute的安装。为了方便使用,在fragroute软件包中有很多现成的配置文件,因此我们还可以执行以下命令把这些配置文件安装到一个固定的位置:
 
  #cd fragroute-x.x
  #mkdir -p /usr/local/etc/fragroute.d
  #cp scripts/* /usr/local/etc/fragroute.d
  #rm -f /usr/local/etc/fragroute.d/Make*
  #mv /usr/local/f /usr/local/etc/fragroute.d/
 
需要特别说明的是,在scripts目录下有一个文件README.snort,在这个文件中有六个专门针对snort(1.8.6以前版本)的规则集配置。
接下来说一下fragroute的使用。
首先fragroute的运行
#cd /usr/local/etc/fragroute.d
#fragroute -f conf 目的地址(其中conf为配置文件,可以自定义,也可使用fragroute自带)
Fragroute的规则
根据Fragroute给出的Info文件,其支持的参数分别有:
delay first|last|random ms
延迟发送第一个、最后一个或者随机的某个报文,延迟时间为ms毫秒。
drop first|last|random prob-%
按照prob-%的概率,丢弃队列中的第一个、最后一个或者随机的某个报文。
dup first|last|random prob-%
按照prob-%的概率,重复发送队列中的第一个、最后一个或者随机的某个报文。
ip_chaff dup|opt|ttl
在发出的ip报文中,插入某些重复或者无用的报文,但是这些报文是不合法的,dup:重复某个报文再延迟发送;optip头部选项错误;ttlttl值过小。
ip_frag size [old|new]
ip报文按照size的大小重新分片,同时可以形成重复的分片。oldnew分别表示制造重复分片的时候,使用前一个报文还是后一个报文内容填充重复部分。
ip_opt lsrr|ssrr ptr ip-addr ...
为每个ip报文设置(松|紧)原路由选项。
ip_ttl ttl
为每个ip报文设置ttl
ip_tos tos
为每个ip报文设置tos
order random|reverse
按照随机顺序或者是反序发送ip报文
tcp_chaff cksum|null|paws|rexmit|seq|syn|ttl
tcp段中插入重复的tcp段。插入的tcp段,cksumtcp校验和错误;nulltcp控制标志为空;paws:在序号回绕中使用旧于当前时间的时间戳;rexmit:错误的tcp段重传;seq:序列号超过了窗口边界;syn:在传输的过程中出现了非法的tcp syn报文;ttl:过短的ttl字段。
tcp_opt mss|wscal size
为每个tcp段设置mss或者窗口扩大因子
tcp_seg size [old|new]
ip_frag size命令,只不过是对于tcp
echo string ...
显示fragroute运行时的参数
print
打印出所有fragroute处理过的报文
fragroute的配置规则虽然比较简单,但是组织非常混乱,没有考虑到各个规则的层次或者优先级问题。因此,开始使用时最好先从比较简单的规则入手。而且,使用规则最好按照TCP(tcp开头)->IP(ip开头)->其它(orderprintdelay)的顺序编写规则文件。下面我们举几个实际应用的例子。
以下规则将使fragrouteTCP报文段长度设置为1IP数据包和TCP报文段的生存期分别设置为1110,然后打乱次序把数据包投递出去。
 
  tcp_seg 1
  tcp_chaff 10
  ip_ttl 11
order random
fragtest小程序
在碎片躲避技术中,比较难以利用的是IP碎片数据重叠技术。因为各种系统的重叠行为并不相同。为此,Dug Songfragroute软件包中提供了一个小程序fragtest
这个程序可以进行如下测试:
ping   向目标主机发送ICMP echo请求包。
ip-tracert   测试到目标的路由。
ip-opt   向目标主机发送包含各种选项的ICMP echo请求包,测试目标主机支持哪些选项。
frag   以8字节的碎片向目标主机发送ICMP echo请求包。
frag-new   测试目标主机进行碎片重组时的覆盖行为是否是新到碎片覆盖先到碎片。
frag-old   测试目标主机进行碎片重组时的覆盖行为是否是先到碎片覆盖后到碎片。 frag-timeout   测试目标碎片重组的超时时间。  
fragtest的用法非常简单,可以单独测试某个选项,也可以一次进行全部测试行为,例如: #fragtest ping 192.168.1.2 #fragtest frag-new 192.168.1.2 #fragtest all 192.168.1.2   不过,fragtest程序本身不支持超时功能,也就是如果目标主机不支持某个选项,fragtest将不能返回,需要通过Ctrl+C终止。因此,fragtest all测试基本没有什么用处:),只能逐个测试
fragroute攻击环境如下: