ARP欺骗和ICMP欺骗催生全新DOS工具(4)

http://www.itjxue.com  2015-07-16 23:58  来源:未知  点击次数: 

  三、解决方案

  对于大多数人来说,ARP是一个隐藏的底层协议。你以时不时的观察它,但是平常不会有人对它发生兴趣。你可以用arp命令来检查你的ARP缓存,但是当一个网络出现问题的时候,这个并不是我们首先想到的。Windows也存在这个命令,记住这一点也许对你有帮助。但是当一个ARP欺骗通过网关从另一个网络发向你时,恐怕你也无能为力了。同样的,你也可以在你的路由表中发现重定向的路由信息(route 命令,用“D”标志来标明)。

  ARP攻击设计来攻击10Base2以太网。如果网络已一些比较先进的方式进行连接,通常是智能HUB或交换机,那么攻击就很容易被发现,甚至是不可能的(类似于被动攻击)。所以这是一个向你的老板要求更新网络设备的理由。

  这么想起来,ICMP重定向真是一个非常疯狂的想法。首先,一些网络的结构非常简单,对路由表不需要任何添加;其次,大多数的稳定的网络上,仅仅是用手动的办法来更新路由。这并不是一个经常更新的工作,为什么要通过ICMP呢?最后,这个对于你来说是非常危险的,你可以在你的系统上关闭ICMP重定向,这样可以减少同RFC1122的冲突。哎,这可不容易呀!在Linux这种提供源码的机器上,你可以重新编译内核。在Irix 6.2和一些其它的系统上,可以“set icmp_dropredirects=1”。这与其它的OS,我也不知道有什么办法。

  时间证明了这个真理:不要信任未确认的主机。否则,网络上帝不会对你施予怜悯的。 一些人认为“我有防火墙,我怕谁”,认为一些安全问题对它来说无关紧要。我承认防火墙的作用,但是这并不是经常有效。

  想象这样一个环境,所有的机器都直接与Internet相连,你不得不与你不了解的人共用你的内部网,他们使用的是vanilla SGI 的机器,而他们简直是在到处告诉别人“来攻击我吧,我的买主使它非常简单”(是这样的,那些人认识Unix,从侏罗纪公园...),另外,通向你的路由器由别的机构控制。让我们来到一个标准的网络环境,它会提供我们安全,不受外部的攻击。人们在这里工作,使用电脑。同样,这里的每台机器也存在安全问题。所以,当你下一次提到防火墙的时候,请记住它并不能保护每一个人。

  John Goerzen提供了一个Perl脚本,可以在系统启动时运行。它主要是在Linux机器中维持一个已知的IP地址与硬件地址的缓存,设置标志,以使其不会被更新和改变。配置文件非常简单——IP addr 配 MAC addr,用空格键分割,“#”作为注释。

  这个脚本仅仅在Linux机器上测试过——在其它平台上的人需要修改arp命令的格式。

  注意:脚本需要运行在网络接口启动之后,服务和客户运行之前;另外,一些人会在ARP被锁定时窃取连接。以下是它的脚本:

  #!/usr/bin/perl

  # Program: forcehwaddr

  # Program to run ARP to force certain tables.

  # Specify filenames to read from on command line, or read from stdin.

  foreach (<>) { # For each input line....

  chomp; # Strip if CR/LF

  if (/^#/) { next; } # If it's a comment, skip it.

  if (((($host, $hw) = /\s*(.+?)\s+(\S+)\s*/) == 2) &&

  !(/^#/)) {

  # The text between the slashes parses the input line as follows:

  # Ignore leading whitespace. (\s*)

  # Then, start matching and put it into $host ($host, (.+?))

  # Skip over the whitespace after that (\s+)

  # Start matching. Continue matching until end of line or optional

  # trailing whitespace.

  # Then, the if checks to see that both a

  # host and a hardware address were matched.

  # (2 matches). If not, we skip the

  # line (assuming it is blank or invalid or something).

  # The second part of the if checks to see if the line starts with

  # a pound sign; if so, ignore it (as a comment).

  # Otherwise, run the appropriate command:

  printf("Setting IP %-15s to hardware address %s\n", $host, $hw);

  system "/usr/sbin/arp -s $host $hw\n";

  }

  }

(责任编辑:IT教学网)

更多