5 、使用 ngrep 来处理 tfn2k 攻击
根据使用 DNS 来跟踪 tfn2k 驻留程序的原理,现在已经出现了称为 ngrep
的实用工具。经过修改的 ngrep (参见附录)可以监听大约五种类型的 tfn2k 拒绝服务攻击 (targa3, SYN
flood, UDP flood, ICMP flood 和 smurf) ,它还有一个循环使用的缓存用来记录 DNS 和 ICMP
请求。如果 ngrep 发觉有攻击行为的话,它会将其缓存中的内容打印出来并继续记录 ICMP 回应请求。假如攻击者通过 ping
目标主机的手段来铆定攻击目标的话,在攻击过程中或之后记录 ICMP
的回应请求是一种捕获粗心的攻击者的方法。由于攻击者还很可能使用其他的服务来核实其攻击的效果(例如 web
),所以对其他的标准服务也应当有尽量详细的日志记录。
还应当注意, ngrep 采用的是监听网络的手段,因此, ngrep
无法在交换式的环境中使用。但是经过修改的 ngrep 可以不必和你的 DNS 在同一个网段中,但是他必须位于一个可以监听到所有
DNS 请求的位置。经过修改的 ngrep 也不关心目标地址,您可以把它放置在 DMZ 网段,使它能够检查横贯该网络的 tfn2k
攻击。从理论上讲,它也可以很好的检测出对外的 tfn2k 攻击。
运行 ngrep, 您将看到:
[root@lughnasad ngrep]# ./ngrep
Ngrep with TFN
detection modifications by wiretrip / http://www.wiretrip.net/
Watching
DNS server: 10.0.0 .8
interface: eth0 (10.0.0.0/255.255.0.0)
从这里开始 ngrep 将监听 tfn2k 攻击,如果检测到攻击 , ngrep 将在屏幕上打印:
Sun Jan 9 17:30:01 2000
A TFN2K UDP attack has
been detected!
Last (5000) DNS requests:
《 list of IPs
that made DNS requests, up to DNS_REQUEST_MAX length 》
Last
(1000) ICMP echo requests (pings):
《 list of IPs that made
ICMP echo requests, up to ICMP_REQUEST_MAX length 》
Incoming
realtime ICMP echo requests (pings):
《 all ICMP echo requests
since the attack was detected 》
以上的列表并不是唯一的,可以对它进行调整让他不仅显示是谁请求,而且请求多少次,频率为多少等等。在
ICMP flood 事件中, ICMP 回应请求的报告中将不包括做为 tfn2k flood 一部分的 ICMP 包。 Ngrep
还可以报告检测出来的除 smurf 之外的攻击类型( TARGA, UDP, SYN, ICMP
等)。混合式的攻击在缺省情况下表现为 ICMP 攻击,除非你屏蔽了向内的 ICMP 回应请求,这样它就表现为 UDP 或 SYN
攻击。这些攻击的结果都是基本类似的。
6 、附录 - Ngrep.c with tfn2k detection
以下的代码在使用前应当更改一些参数。
#define DNS_REQUEST_MAX
5000
#define ICMP_REQUEST_MAX 1000
通知 ngrep
最大的请求跟踪数(在检测攻击之前)。传输较为繁忙的网站应当增加这一数值(网络流量较为繁忙的网站 DNS 的请求数最好在 10 ,
000 ,而 ICMP 请求为 2000-3000 )
#define FLOOD_THRESHOLD 20
用在 10
秒中内有多少同一类型的攻击包来确认为真正的攻击。数目设计的越大,程序报受攻击的可能性就越小。假如您老是收到错误的警报,那么您应当增加一下这个数值。
#define DNS_SERVER_IP " 10.0.0 .8"
Ngrep 通过监视 DNS 服务器的 53 端口的 UDP 包来跟踪向内的 DNS 请求(只有 UDP
)。因此, ngrep 需要知道您的 DNS 服务器的 IP 地址。
我们的设备可能会有多个 DNS 服务器,但我们认为对一台 DNS
服务器的支持足以证明这项技术的能力。
#define TTL_THRESHOLD 150
tfn2k SYN flood 攻击使用的 TTL 值通常在 200-255
的范围内。估计到攻击者与目标主机之间不止 50 跳,因此我们可以只查找 TTL 时间高于 150 的包。假如您相信攻击者在 50
跳左右,那么您可以对 TTL 的限制进行一下更改。
编译更改过的 ngrep
编译和安装都非常简单。您仅需要使用以下之一来取代 ngrep.c
文件。处于方便起见,我们可以详细说明。
这段代码只是在 RedHat 6.1 和 Mandrake 6.5 Linux 上测试过。
首先您需要在 http://www.packetfactory.net/ngrep/下载
ngrep ,我们测试的是 1.35 版。
然后在 ftp://ftp.ee.lbl.gov/libpcap.tar.Z下载
libpcap 我们使用的是 0.40 版。
把文件放在临时文件夹里并解包, tar xvzf libpcap.tar.Z
然后进行编译
cd libpcap-0.4 ; ./configure ; make ; make install ;
make install-incl
假如您遇到了困难,可以参见在 libpcap-0.4 目录里的 README 或 INSTALL
文件。根据我们实验的经验,如果 /usr/local/include 和 /usr/local/include/net 目录在
linux 系统中不存在的话,安装会失败。加入您在安装时遇到了 pcap.h 或 bpf.h 的错误时你可以运行
mkdir
/usr/local/include ; mkdir /usr/local/include/net 然后重新运行 'make
install-incl' 。然后我们需要编译 ngrep ( 使用我们修改过的版本 ) 。首先解包:
tar xvzf ngrep-1.35.tar.gz
然后进行配置:
cd ngrep ; ./configure
然后把 ngrep.c 复制到 ngrep 目录里。你可以覆盖也可以备份原始的 ngrep.c
文件。在这里,您应当回顾在修改过的 ngrep.c 里的配置,至少您应当把 DNS_SERVER_IP 更改为您所使用的 DNS
的地址。更改完毕后你就可以运行 'make' ,这样就建立了 ngrep 应用程序。
Modified ngrep.c source code
/* this code is
available for download from http://www.wiretrip.net/na/ngrep.c*/
/*
* $Id: ngrep.c,v 1.35 1999/10/13 16:44:16 jpr5 Exp $
*
*/
/* TFN detection code added by Rain Forest Puppy
/ mailto:rfp@wiretrip.net
and
Night Axis / mailto:na@wiretrip.net*/
/********* TFN detection defines
*******************************/
/* how many DNS and ICMP requests to track */
#define DNS_REQUEST_MAX 5000
#define ICMP_REQUEST_MAX 1000
/* flood threshold is matches per 10 seconds */
#define FLOOD_THRESHOLD 20
/* IP of your DNS server */
#define
DNS_SERVER_IP "10.9.100.8"
/* TFN syn uses ttl between 200-255. Assuming less
than 50 hops,
flag stuff with ttl > TTL_THRESHOLD (other
critera are used
as well) */
#define TTL_THRESHOLD 150
/**************************************************************/
#include <stdlib.h>
#include
<string.h>
#include <signal.h>
#ifdef LINUX
#include <getopt.h>
#endif
#if defined(BSD)
【本站声明】本站刊载的部分内容全部来源互联网,对于此类文章本站仅提供交流平台,不为其版权负责。如涉及侵犯您的知识产权的文章,请联系我们,我们将尽快做出更正。并向您表示感谢!同时特别感谢对本站所有支持的网友。