主页 > imtoken安卓app下载 > 拒绝服务攻击原理及解决方案(三)
拒绝服务攻击原理及解决方案(三)
5.使用ngrep处理tfn2k攻击
基于使用 DNS 跟踪 tfn2k 驻留程序的原理,出现了一个名为 ngrep 的实用程序。 修改后的 ngrep(见附录)侦听大约五种类型的 tfn2k 拒绝服务攻击(targa3、SYN flood、UDP flood、ICMP flood 和 smurf)以太坊拒绝服务攻击检测,它还有一个用于记录 DNS 和 ICMP 请求的循环缓存。 如果 ngrep 检测到攻击,它将打印出其缓存的内容并继续记录 ICMP 回显请求。 在攻击期间或之后记录 ICMP 回显请求是一种捕捉粗心攻击者的方法,如果攻击者对目标主机执行 ping 命令以发起攻击。 由于攻击者很可能会使用其他服务来验证其攻击效果(例如web),因此其他标准服务也应该有尽可能详细的日志记录。
还需要注意的是,ngrep使用的是监听网络的方式,所以ngrep不能在切换环境下使用。 但是修改后的ngrep不一定要和你的DNS在同一个网段,但是一定要在能监听所有DNS请求的位置。 修改后的 ngrep 也不关心目标地址,您可以将它放在 DMZ 网段上并让它检查穿越该网络的 tfn2k 攻击。 理论上,它也可以很好地检测外部的tfn2k攻击。
运行 ngrep 你会看到:
[root@lughnasad ngrep]# ./ngrep
Ngrep 通过 wiretrip 修改 TFN 检测 /
观看 DNS 服务器:10.0.0.8
接口:eth0 (10.0.0.0/255.255.0.0)
从这里 ngrep 将侦听 tfn2k 攻击,如果检测到攻击,ngrep 将在屏幕上打印:
2000 年 1 月 9 日星期日 17:30:01
检测到 TFN2K UDP 攻击!
最后 (5000) 个 DNS 请求:
“发出 DNS 请求的 IP 列表,最多 DNS_REQUEST_MAX 长度”
最后 (1000) 个 ICMP 回应请求(ping):
“发出 ICMP 回显请求的 IP 列表,最多 ICMP_REQUEST_MAX 长度”
传入的实时 ICMP 回显请求 (ping):
“自检测到攻击以来的所有 ICMP 回显请求”
上面的列表不是唯一的,它可以调整为不仅显示请求者以太坊拒绝服务攻击检测,还显示请求次数、频率等。在 ICMP 泛洪事件中,ICMP 回显请求将不包括属于 tfn2k 泛洪的 ICMP 数据包。 Ngrep 还可以报告检测到的除 smurf 之外的攻击类型(TARGA、UDP、SYN、ICMP 等)。 默认情况下,混合攻击表现为 ICMP 攻击,除非您阻止传入的 ICMP 回显请求以使其表现为 UDP 或 SYN 攻击。 这些攻击的结果基本相似。
6. 附录-带tfn2k检测的Ngrep.c
下面的代码应该在使用之前更改一些参数。
#define DNS_REQUEST_MAX 5000
#define ICMP_REQUEST_MAX 1000
通知 ngrep 要跟踪的最大请求数(在检测到攻击之前)。 传输比较繁忙的网站应该增加这个值(网络流量比较繁忙的网站DNS请求数最好是10000,而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 上经过测试。
首先需要下载ngrep,我们测试的是1.35版本。
然后在 ftp://ftp.ee.lbl.gov/libpcap.tar.Z 下载 libpcap 我们使用的是 0.40 版本。
将文件放在临时文件夹中并解压,tar xvzf libpcap.tar.Z
然后编译
光盘 libpcap-0.4; 。/配置; 制作; 安装; 使安装包括
如果遇到困难,请参阅 libpcap-0.4 目录中的自述文件或安装文件。 根据我们的实验经验,如果Linux系统中不存在/usr/local/include和/usr/local/include/net目录,安装会失败。如果安装过程中遇到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; 。/配置
然后将ngrep.c复制到ngrep目录下。 您可以覆盖或备份原始 ngrep.c 文件。 在这里,您应该查看修改后的ngrep.c中的配置,至少您应该将DNS_SERVER_IP更改为您正在使用的DNS的地址。 进行更改后,您可以运行“make”,它会构建 ngrep 应用程序。
修改后的ngrep.c源码
/* 此代码可从以下位置下载 */
/*
* $Id: ngrep.c,v 1.35 1999/10/13 16:44:16 jpr5 Exp $
*
*/
/* Rain Forest Puppy / rfp@wiretrip.net 添加的 TFN 检测代码
和夜轴 / na@wiretrip.net */
/********* TFN 检测定义 ***********************************/
/* 要跟踪多少 DNS 和 ICMP 请求 */
#define DNS_REQUEST_MAX 5000
#define ICMP_REQUEST_MAX 1000
/* 每 10 秒匹配一次泛洪阈值 */
#define FLOOD_THRESHOLD 20
/* 你的 DNS 服务器的 IP */
#define DNS_SERVER_IP "10.9.100.8"
/* TFN syn 在 200-255 之间使用 ttl。 假设少于 50 跳,
用 ttl > TTL_THRESHOLD 标记东西(使用其他标准
以及)*/
#define TTL_THRESHOLD 150
/**************************************************** *** *************/
#包括
#包括
#包括
#ifdef Linux
#包括
#万一
#if 定义(BSD)