您的位置:首页 > 理论基础 > 计算机网络

ARP病毒攻击技术分析与防御

2010-06-09 10:22 393 查看
102008-12-12 10:32
近一段时间以来,政务网部分用户受到一种名为"ARP欺骗木马程序(病毒)"的攻击(ARP是"Address Resolution Protocol""地址解析协议"的缩写),极大地影响了政务网用户的正常使用,给整个政务网的安全带来严重的隐患。

    一、故障现象

    通常上网计算机的网关设为192.168.X.254,这个地址是核心交换机(三层交换机)的IP地址。将网关改为路由器的IP地址192.168.X.253后可正常上网。

    病毒发作时其症状表现为计算机网络连接正常,却无法打开网页;或由于ARP欺骗的木马程序(病毒)发作时发出大量的数据包,导致政务网用户上网不稳定,时断时通。

    中毒机器在局域网中发送假的APR应答包进行APR欺骗, 造成其他客户机无法获得网关和其他客户机的网卡真实MAC地址,导致无法上网。

    计算机重新启动后短时间内可以上网,稍过一会儿就出现只有网络连接,但打不开网页的现象。

    二、ARP 欺骗病毒原理分析

    在局域网中,一个主机要和另一个主机进行直接通信,除知道目标主机的IP地址外还必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?就是通过地址解析协议获得的。所谓"地址解析"就是主机在发送数据前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。即ARP协议是用来来完成IP地址转换为MAC地址(即第二层物理地址)的。在局域网中,网络中实际传输的是"帧",帧里面是有目标主机的MAC地址的。

    每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的,默认情况下,ARP从缓存中读取IP-MAC条目,缓存中的IP-MAC条目是根据ARP响应包动态变化的。因此,只要网络上有ARP响应包发送到本机,即会更新ARP高速缓存中的IP-MAC条目。在DOS窗口输入命令arp -a 可以看到如下所示的对应关系。

  C:/Documents and Settings/Administrator>arp -a

  Internet Address     Physical Address     Type

    192.168.1.1       aa-aa-aa-aa-aa-aa     dynamic   主机A

    192.168.1.2       bb-bb-bb-bb-bb-bb     dynamic   主机B

    192.168.1.3       cc-cc-cc-cc-cc-cc     dynamic   主机C

    192.168.1.4       dd-dd-dd-dd-dd-dd     dynamic   主机D

    Internet Address 指IP地址,Physical Address 指物理地址,type 指类型。

    通过以上示例可以看出IP地址为192.16.16.1的IP地址对应的物理地址 (即MAC地址)为aa-aa-aa-aa-aa-aa,其类型为动态。

    我们以主机A(192.168.1.1)向主机B(192.168.1.2)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播,目标MAC地址是"FF.FF.FF.FF.FF.FF",这表示向同一网段内的所有主机发出这样的询问: "192.168.1.2的MAC地址是什么?"网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应: "192.168.1.2的MAC地址是bb-bb-bb-bb-bb-bb"。这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。

    从上面可以看出,ARP协议的基础就是信任局域网内所有的人,那么就很容易实现在以太网上的ARP欺骗。对目标A进行欺骗,A去Ping主机C却发送到了 DD-DD-DD-DD-DD-DD这个地址上。如果进行欺骗的时候,把C的MAC地址骗为DD-DD-DD-DD-DD-DD,于是A发送到C上的数据包都变成发送给D的了。这不正好是D能够接收到A发送的数据包了么,欺骗成功。

    ARP协议对网络安全具有重要的意义。通过伪造IP地址和MAC地址实现ARP欺骗,从而在网络中产生大量的ARP通信量使网络阻塞。用伪造源MAC地址发送ARP响应包,是对ARP高速缓存机制的攻击。

    攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。当攻击者大量向局域网中发送虚假的ARP信息后,就会造成局域网中的机器ARP缓存的崩溃。

    三、定位ARP攻击源头

    1.通过NBTSCAN(下载地址:http://www.ale.gov.cn/15/03.jsp?tid=20061123202911786807709)查找病毒主机,关闭所有二层交换机,将管理员的计算机接在核心交换机上,此时管理员的计算机可正常上网。Ping三层交换机的地址(即在dos窗口下输入命令ping 172.16.X.254),查看172.16.X.254的MAC地址(即在dos窗口下输入命令arp -a),并记下来,通过三层交换机IP地址得到三层交换机

真实的MAC地址。可用同样的方法得到路由器真实MAC地址。其中X是各单位分配到的IP地址段。

  打开所有二层交换机,在ARP病毒攻击时所有计算机都表现为有网络连接,但打不开网页。此时在dos窗口下输入命令arp -a,查看网关的IP地址和MAC地址对应关系,与上次得到的真实MAC地址对比,如果不相同,此次获得的MAC地址即为病毒主机的MAC地址。

    使用NBTSCAN可以取到PC的真实IP地址、机器名和MAC地址,可以找到病毒主机的IP、机器名和MAC地址。找到病毒机器IP地址后,再通过网络开通时登记的IP地址找到病毒主机。

    命令:"nbtscan -r 192.168.X.0/24"(搜索整个192.168.X.0/24网段, 即192.168.X.1-192.168.X.254)输出结果第一列是IP地址,最后一列是MAC地址。其中X是各单位分配到的IP地址段。

    NBTSCAN的使用范例:

    假设查找一台MAC地址为"000d870d585f"的病毒主机。

    1)将压缩包中的nbtscan.exe 和cygwin1.dll解压缩放到c:盘下。

    2)在Windows开始-运行-打开,输入cmd(windows98输入"command"),在出现的DOS窗口中输入:C:/ >btscan -r 192.168.X.0/24(这里需要根据用户实际网段输入),回车。

    3)通过查询IP--MAC对应表,查出"000d870d585f"的病毒主机的IP地址。

    通过上述方法,我们就能够快速的找到病毒源,确认其机器名和IP地址。

    2、通过AntiArpSniffer3.1查询病毒主机

    下载软件AntiArpSniffer3.1(下载地址:http://www.ale.gov.cn/15/03.jsp?tid=20061123203055213902983),解压后点击AntiArpSniffer.exe运行该软件,点击获取MAC,再点追捕攻击者。

    四.防御方法

    1、在PC上绑定路由器的IP和MAC地址。

    在c:/(C盘根目录)下创建或修改autoexec.bat文件,加入如下命令:

    arp -d

    arp -s 192.168.X.254 00-22-aa-00-22-aa

    autoexec.bat放在C盘根目录下,每次开机后会自动执行。arp -d 删除ARP缓存表中的所有条目,arp -s 192.168.X.254 00-22-aa-00-22-aa 静态绑定网关IP地址与MAC地址。使用时将网关IP地址和MAC地址更改为您自己的网关IP地址和MAC地址即可。

    2、通过AntiArpSniffer3.1防御

    下载软件AntiArpSniffer3.1,解压后点击AntiArpSniffer.exe运行该软件,点击获取MAC,再点击自动保护,我目前就有这款软件,想要的可以QQ或者EMAIL联系我.

 

sulf85102008-12-12 10:32
真是搞死人了。后来我外地一个朋友来了帮我搞定~~
ARP这个病毒厉害是厉害.,但是他唯一的问题就是必须调用系统里的npptools.dll文件...网络执法官一类的软件也用这个...如果你把这个DLL文件删除了..之后随便弄个DLL改名为npptools.dll然后NTFS分区格式把权限都弄掉...如果是FAT格式弄个只毒就OK了.`~`
然后再加个开机P处理...
@echo off
::::::::::::::::::::::::::::::::::::::::::::::::::::
::     本机以及网关IP和MAC地址绑定批处理程序             ::
::   说明:此方法治标不治本,要想根本解决ARP请         ::
:: 采用路由和本机实现双向绑定,程序编写QQ:457514 ::
::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::读取本机Mac地址
if exist ipconfig.txt del ipconfig.txt
ipconfig /all 〉ipconfig.txt
if exist phyaddr.txt del phyaddr.txt
find "Physical Address" ipconfig.txt 〉phyaddr.txt
for /f "skip=2 tokens=12" %%M in (phyaddr.txt) do set Mac=%%M
:::::::::读取本机ip地址
if exist IPAddr.txt del IPaddr.txt
find "IP Address" ipconfig.txt 〉IPAddr.txt
for /f "skip=2 tokens=15" %%I in (IPAddr.txt) do set IP=%%I
:::::::::绑定本机IP地址和MAC地址
arp -s %IP% %Mac%
:::::::::读取网关地址
if exist GateIP.txt del GateIP.txt
find "Default Gateway" ipconfig.txt 〉GateIP.txt
for /f "skip=2 tokens=13" %%G in (GateIP.txt) do set GateIP=%%G
:::::::::读取网关Mac地址
if exist GateMac.txt del GateMac.txt
arp -a %GateIP% 〉GateMac.txt
for /f "skip=3 tokens=2" %%H in (GateMac.txt) do set GateMac=%%H
:::::::::绑定网关Mac和IP
arp -s 192.168.0.1 00-17-16-00-88-ad (注释:改为你真实的网关地址和网关的MAC地址)
exit    
把以上红字,和括号里的注释删掉..存为BAT文件,加在组策略的启动里...
保证可以杜绝ARP病毒.并不影响系统正常运行..任何单机绑定都是徒劳的.
另外现在大部分网页都带ARP病毒文件,后台自动下载.我见过最多的执行程序名就是uprar.exe...这个就是个ARP病毒的执行程序.很多网站都带,,但是最多的还是*****以及小说网站,希望能绑到大家~~
把附件后缀名改成BAT就OK了~~
 

sulf85102008-12-12 10:32
ARP应该是一直以来捆绕着众多网管朋友的一个难题,我在工作中也经常遇到,也因此搜集了很多关于ARP方面的资料跟防御工具,希望对朋友们有些帮助。
(先给朋友们提供一个基本的思路:
局域网防止ARP,双向绑定就够了,然后在注册表禁止一些软件比如网络执法官的运行等,就可以了。
提供一个思路把,客户机开机的批处理(记住批处理的名字不可以为ARP.bat)
一.@echo off
arp -d
arp -s 192.168.*.*(网关 IP) 00-00-00-00-00-00(网关 mac)

exit

二.@echo off
if exist ipconfig.txt del ipconfig.txt
ipconfig /all >ipconfig.txt
if exist phyaddr.txt del phyaddr.txt
find "Physical Address" ipconfig.txt >phyaddr.txt
for /f "skip=2 tokens=12" %%M in (phyaddr.txt) do set Mac=%%M

if exist IPAddr.txt del IPaddr.txt
find "IP Address" ipconfig.txt >IPAddr.txt
for /f "skip=2 tokens=15" %%I in (IPAddr.txt) do set IP=%%I

arp -s %IP% %Mac%

del ipaddr.txt
del ipconfig.txt
del phyaddr.txt

exit

三.
禁止响应ICMP路由通告报文
  “ICMP路由公告”功能可以使他人的计算机的网络连接异常、数据被*****、计算机被用于流量攻击等,因此建议关闭响应ICMP路由通告报文。
  修改的方法是:打开注册表编辑器,找到或新建“HKEY_LOCAL_Machine/System/CurrentControlSet/Services/TCPIP/Paramters/Interfaces”分支,在右侧窗口中将子键“PerformRouterDiscovery”?REG_DWORD型的值修改为0(0为禁止响应ICMP路由通告报文,2为允许响应ICMP路由通告报文)。修改完成后退出注册表编辑器,重新启动计算机即可。

四.用我做好的那个ARP FOR XP,运行下就可以了,这个是禁止别人使用扫描或者嗅探软件的
原理是禁止安装WINPCAP。

五.再在注册表里面把OK.EXE PP 讯雷等禁止使用

六.不可忽略了网吧内的 服务器的ARP的防御,服务器建议用AntiArpSniffer

七.在路由器绑定局域网内所有机器的IP与MAC地址,如果路由不带IP与MAC扫描功能的话开启局域网所有的机器,用欣向ARP工具扫描出局域网所有机器的IP与对应的MAC地址,保存扫描的信息,然后登陆路由器添加所有的IP与MAC绑定)

一.ARP协议概述:
P数据包常通过以太网发送。以太网设备并不识别32位IP地址:它们是以48位以太网地址传输以太网数据包的。因此,IP驱动器必须把IP目的地址转换成以太网网目的地址。在这两种地址之间存在着某种静态的或算法的映射,常常需要查看一张表。地址解析协议(Address Resolution Protocol,ARP)就是用来确定这些映象的协议。

ARP工作时,送出一个含有所希望的IP地址的以太网广
263ba
播数据包。目的地主机,或另一个代表该主机的系统,以一个含有IP和以太网地址对的数据包作为应答。发送者将这个地址对高速缓存起来,以节约不必要的ARP通信。

如果有一个不被信任的节点对本地网络具有写访问许可权,那么也会有某种风险。这样一台机器可以发布虚假的ARP报文并将所有通信都转向它自己,然后它就可以扮演某些机器,或者顺便对数据流进行简单的修改。ARP机制常常是自动起作用的。在特别安全的网络上, ARP映射可以用固件,并且具有自动抑制协议达到防止干扰的目的

二.ARP的工作原理:以太网设备比如网卡都有自己全球唯一的MAC地址,它们是以MAC地址来传输以太网数据包的,但是它们却识别不了我们IP包中的IP地址,所以我们在以太网中进行IP通信的时候就需要一个协议来建立IP地址与MAC地址的对应关系,以使IP数据包能发到一个确定的地方去。这就是ARP(Address Resolution Protocol,地址解析协议)。

讲到此处,我们可以在命令行窗口中,输入
arp –a
来看一下效果,类似于这样的条目
210.118.45.100   00-0b-5f-e6-c5-d7   dynamic
就是我们电脑里存储的关于IP地址与MAC地址的对应关系,dynamic表示是临时存储在ARP缓存中的条目,过一段时间就会超时被删除(xp/2003系统是2分钟)。

这样一来,比如我们的电脑要和一台机器比如210.118.45.1通信的时候,它会首先去检查arp缓存,查找是否有对应的arp条目,如果没有,它就会给这个以太网络发ARP请求包广播询问210.118.45.1的对应MAC地址,当然,网络中每台电脑都会收到这个请求包,但是它们发现210.118.45.1并非自己,就不会做出相应,而210.118.45.1就会给我们的电脑回复一个ARP应答包,告诉我们它的MAC地址是xx-xx-xx-xx-xx-xx,于是我们电脑的ARP缓存就会相应刷新,多了这么一条:
210.118.45.1   xx-xx-xx-xx-xx-xx   dynamic

为什么要有这么一个ARP缓存呢,试想一下如果没有缓存,我们每发一个IP包都要发个广播查询地址,岂不是又浪费带宽又浪费资源?
而且我们的网络设备是无法识别ARP包的真伪的,如果我们按照ARP的格式来发送数据包,只要信息有效计算机就会根据包中的内容做相应的反应

三.ARP攻击的原理
在局域网中,通过ARP协议来完成IP地址转换为第二层物理地址(即MAC地址)的。ARP协议对网络安全具有重要的意义。通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞。

ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的,如下所示。

主机 IP地址 MAC地址
A 192.168.16.1 aa-aa-aa-aa-aa-aa
B 192.168.16.2 bb-bb-bb-bb-bb-bb
C 192.168.16.3 cc-cc-cc-cc-cc-cc
D 192.168.16.4 dd-dd-dd-dd-dd-dd

我们以主机A(192.168.16.1)向主机B(192.168.16.2)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播,目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.16.2的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应:“192.168.16.2的MAC地址是bb-bb-bb-bb-bb-bb”。这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。

从上面可以看出,ARP协议的基础就是信任局域网内所有的人,那么就很容易实现在以太网上的ARP欺骗。对目标A进行欺骗,A去Ping主机C却发送到了DD-DD-DD-DD-DD-DD这个地址上。如果进行欺骗的时候,把C的MAC地址骗为DD-DD-DD-DD-DD-DD,于是A发送到C上的数据包都变成发送给D的了。这不正好是D能够接收到A发送的数据包了么,嗅探成功。

A对这个变化一点都没有意识到,但是接下来的事情就让A产生了怀疑。因为A和C连接不上了。D对接收到A发送给C的数据包可没有转交给C。

做“man in the middle”,进行ARP重定向。打开D的IP转发功能,A发送过来的数据包,转发给C,好比一个路由器一样。不过,假如D发送ICMP重定向的话就中断了整个计划。

D直接进行整个包的修改转发,捕获到A发送给C的数据包,全部进行修改后再转发给C,而C接收到的数据包完全认为是从A发送来的。不过,C发送的数据包又直接传递给A,倘若再次进行对C的ARP欺骗。现在D就完全成为A与C的中间桥梁了,对于A和C之间的通讯就可以了如指掌了。

中了ARP后的一些现象:
1:能PING通网内其它客户机,但PING不通路由,上不了网(连接到INTERNET)。
2:能PING通网内其它客户机,同样PING不通路由,但能上网(能连接到INTERNET)。
3:当中毒的机器向网关路由发出请求时,网关路由的ARP缓存还未到刷新时间,网关路由内的ARP缓存表中保存的是客户机还未中毒前的MAC地址。而这个MAC地址,与客户机当前请求的MAC(被病毒修改过)不一致,客户机的连接请求被网关拒绝。即发生与网关断流。
4:当中毒的源头机器向局域网发出假MAC广播时,网关路由也接收到了此消息,并将这些假MAC地址与其IP相对应,并建立新的ARP缓存。导致客户机与服务器断开连接。

四.ARP解决思路
1、不要把你的网络安全信任关系建立在IP基础上或MAC基础上,(rarp同样存在欺骗的问题),理想的关系应该建立在IP+MAC基础上。

2、设置静态的MAC-->IP对应表,不要让主机刷新你设定好的转换表。
在网关路由上对客户机使用静态MAC绑定。ROUTE OS软路由的用户可以参照相关教程,或是在IP--->ARP列表中一一选中对应项目单击右键选择“MAKE STATIC”命令,创建静态对应项。
用防火墙封堵常见病毒端口:134-139,445,500,6677,5800,5900,593,1025,1026,2745,3127,6129 以及P2P下载

3、除非很有必要,否则停止使用ARP,将ARP做为永久条目保存在对应表中。

4、使用ARP服务器。通过该服务器查找自己的ARP转换表来响应其他机器的ARP广播。确保这台ARP服务器不被黑。

5、使用"proxy"代理IP的传输。

6、使用硬件屏蔽主机。设置好你的路由,确保IP地址能到达合法的路径。(静态配置路由ARP条目),注意,使用交换集线器和网桥无法阻止ARP欺骗。

7、管理员定期用响应的IP包中获得一个rarp请求,然后检查ARP响应的真实性。

8、管理员定期轮询,检查主机上的ARP缓存。

9、使用防火墙连续监控网络。注意有使用SNMP的情况下,ARP的欺骗有可能导致陷阱包丢失。

10:在客户机上进行网关IP及其MAC静态绑定,并修改导入如下注册表:
  (A)禁止ICMP重定向报文
  ICMP的重定向报文控制着Windows是否会改变路由表从而响应网络设备发送给它的ICMP重定向消息,这样虽然方便了用户,但是有时也会被他人利用来进行网络攻击,这对于一个计算机网络管理员来说是一件非常麻烦的事情。通过修改注册表可禁止响应ICMP的重定向报文,从而使网络更为安全。
  修改的方法是:打开注册表编辑器,找到或新建“HKEY_LOCAL_Machine/System/CurrentControlSet/Services/TCPIP/Paramters”分支,在右侧窗口中将子键“EnableICMPRedirects”(REG_DWORD型)的值修改为0(0为禁止ICMP的重定向报文)即可。

  (B)禁止响应ICMP路由通告报文
  “ICMP路由公告”功能可以使他人的计算机的网络连接异常、数据被*****、计算机被用于流量攻击等,因此建议关闭响应ICMP路由通告报文。
  修改的方法是:打开注册表编辑器,找到或新建“HKEY_LOCAL_Machine/System/CurrentControlSet/Services/TCPIP/Paramters/Interfaces”分支,在右侧窗口中将子键“PerformRouterDiscovery

用到的软件:
AntiArpSniffer3.
ARPfo XP
ARPpoliceSetup
ARP保护神
ARP监控软件
arp每隔1秒自动静态导入
网卡与MAC绑定器
欣全向ARP工具
请大家到网上搜索下载
 

sulf85102008-12-12 10:33
现在频繁掉线的网吧很多.但为何掉线.许多网管朋友.不是很清楚.网吧掉线的原因很多.现在我给大家讲一下现在很流行的一种木马.<传奇网吧*****>.基本上东北地区的网吧都被这一木马弄的身心疲惫.但是现在有解决的方法了.
中病毒特征: 网吧不定时的掉线.(重启路由后正常),网吧局域网内有个别机器掉线.

木马分析 : 传奇*****木马,是通过ARP欺骗,来或取局域网内发往外网的数据.从而截获局域内一些网游的用户名和密码.

木马解析:中木马的机器能虚拟出一个路由器的MAC地址和路由器的IP.当病毒发作时,局域网内就会多出一个路由器的MAC地址.内网在发往外网的数据时,误认为中木马的机器是路由器,从而把这些数据发给了虚拟的路由器.真正路由器的MAC地址被占用.内网的数据发出不去.所以就掉线了.

解决办法:守先你下载一个网络执法官,他可以监控局域网内所有机器的MAC地址和局域网内的IP地址.在设置网络执法官时.你必须将网络执法官的IP段设置和你内网的IP段一样.比如说:你的内网IP是192.168.1.1------192.168.1.254你的设置时也要设置192.168.1.1------192.168.1.254.设置完后,你就会看到你的内网中的MAC地址和IP地址.从而可以看出哪台机器中了木马.(在多出的路由器MAC地址和IP地址和内网机器的IP地址,MAC地址一样的说明中了传奇网吧*****)要是不知道路由器的MAC地址,在路由器的设置界面可以看到.发现木马后.你还要下载瑞星2006最新版的杀病毒软件(3月15日之后的病毒库).在下载完之后必须在安全模式下查杀(这是瑞星反病毒专家的见意)反复查杀(一般在四次就可以了)注意查完后杀病毒软件不要卸载掉.观查几天(这是我个人的经验.在卸后第三天病毒还会死灰复燃,我想可能是注册表里还有他的隐藏文件.在观查几天后正常就可以卸载掉了.

注:还原精灵和冰点对网吧传奇*****木马不起做用.(传奇*****木马不会感染局域网.不要用硬盘对克,对克跟本不起任何做用.而且还会感染到母盘上.切记!)

最好主机安装上网络执法官,这样可以时时监控局域网内的动态,发现木马后可以及时做出对策)

下面是传奇网吧*****木马的文件:

文件名:     文件路径:           病毒名:

a.exe>>b.exe   c:/windows/system32     Trojan.psw.lmir.jbg

235780.dll   c:/windows/           Trojan.psw.lmir.aji

kb2357801.log c:/windows/           Trojan.psw.lmir.jhe

Q98882.log   c:/windows/           Trojan.psw.lmir.jhe

kb2357802.log c:/windows/           Trojan.psw.lmir.jbg

Q90979.log   c:/windows/           Trojan.psw.lmir.jhe

Q99418.log   c:/windows/           Trojan.psw.lmir.jbg

ZT.exe       c:/windows/program Files/浩方对战平台 病毒名:Trojan.dL.agent.eqv

a[1].exe>>b.exec:/documents and sttings/sicent/local settings/Temporary Internet Files/content.IE5/Q5g5g3uj
病毒名:Trojan.psw.lmir.jbg

(各位朋友.瑞星杀毒软件文件过大邮箱发送不了.请大家下载瑞星个人18.18.20版杀毒软件我现在给大家提供注册码.希望大家原谅.)

SN=P5V6EH-61FHJK-9G0SS7-C4D200

ID=5B3C5BJ4Y125

(网络执法官可以批量MAC捆绑,到执法官的局域网MAC界面,全选后单击右键会出现批量MAC捆绑.做完捆绑以后,ARP要是在次攻击时他会报警,出现的假MAC是为非法.网络执法官会终止他的一切操作.)这样可以解决ARP在次攻击.
 

sulf85102008-12-12 10:33
目前发现,唯一可以称做"终极"的解决ARP病毒(恶意软件除外)的方法就是:

删除system32/npptools.dll,我这里删除了一个月了,从来没中过ARP病毒,也无任何不良反映,ARP病毒缺少了npptools.dll这个文件根本不能运行,目前所发现的ARP病毒通通提示npptools.dll出错,无法运行

暂时还没发现可以自动生成npptools.dll的病毒,npptools.dll本身就40多K,病毒如果还要生成自己的运行库的话,不是几十K的大小就可以办到的,再大一些的就不是病毒了

当然,还是要做ARP -S绑定,只绑定本机自身跟路由即可,可以在“一定程度上”减少ARP程序的破坏

以上方法是网盟的一位朋友提供的,具体名字忘记了,请谅解~
【转自bbs.bitsCN.com】
 

sulf85102008-12-12 10:33
前段时间,侠诺科技针对“ARP病毒防制方案”进行简单介绍,得到了广大用户和业界的关注与好评。近期,侠诺科技的技术工程师在工作又得到了新的发现,为了进一步让大家了解并防制ARP,特推出了ARP攻击防制进阶篇,与用户?****餐教帧⒀芯俊?
要了解ARP欺骗攻击, 我们首先要了解ARP协议以及它的工作原理,以更好的来防范和排除ARP攻击的带来的危害。本文为大家带来进阶的ARP攻击防制方法。

基本ARP介绍

ARP “Address Resolution Protocol”(地址解析协议),局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

ARP协议的工作原理:在每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的。

我们以主机A(192.168.1.5)向主机B(192.168.1.1)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播,目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.1.1的MAC地址是什么?”网络上其它主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应:“192.168.1.1的MAC地址是00-aa-00-62-c6-09。”这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表。

基本ARP病毒防制法

通过对 ARP工作原理得知,如果系统ARP缓存表被修改不停的通知路由器一系列错误的内网IP或者干脆伪造一个假的网关进行欺骗的话,网络就肯定会出现大面积的掉线问题,这样的情况就是典型的 ARP攻击,对遭受ARP攻击的判断,其方法很容易,你找到出现问题的电脑点开始运行进入系统的DOS操作。ping路由器的LAN IP丢包情况。输入ping 192.168.1.1(网关IP地址),内网ping路由器的LAN IP丢几个包,然后又连上,这很有可能是中了ARP攻击。为了进一步确认,我们可以通过查找ARP表来判断。输入ARP -a命令,可以看出192.168.1.1地址和192.168.252地址的IP的 MAC地址都是00-0f-3d-83-74-28,很显然,这就是 ARP欺骗造成的。

在理解了ARP之后,ARP欺骗攻击以及如何判断此类攻击,我们简单介绍一下如何找到行之有效的防制办法来防止这类攻击对网络造成的危害。

Qno侠诺工程师的一般处理办法分三个步骤来完成。

1、激活防止ARP病毒攻击

进入路由器的防火的基本配置栏将“防止ARP病毒攻击”在这一行的“激活”并确定。

2、对每台pc上绑定网关的IP和其MAC地址

在每台PC机上进入dos操作,输入arp –s 192.168.1.1(网关IP) 00-0f-3d-83-74-28(网关MAC),Enter后完成每台PC机的绑定。

针对网络内的其它主机用同样的方法输入相应的主机IP以及MAC地址完成IP与MAC绑定。但是此动作,如果重起了电脑,作用就会消失,所以可以把此命令做成一个批处理文件,放在操作系统的启动里面,批处理文件可以这样写:

@echo off

arp -d

arp -s路由器LAN IP 路由器LAN MAC

3、在路由器端绑定用户IP/MAC地址:

在DHCP功能中对IP/MAC进行绑定,Qno路由器提供了一个显示新加入的IP地址的功能,通过这个功能可以一次查找到网络内部的所有PC机的IP/MAC的对应列表,我们可以通过“√”选的功能选择绑定IP/MAC。

进阶ARP病毒防制

单靠这样的操作基本可以解决问题,但是Qno侠诺的技术工程师建议通过进一步通过一些手段来进一步控制ARP的攻击。

1、病毒源,对病毒源头的机器进行处理,杀毒或重新装系统。此操作比较重要,解决了ARP攻击的源头PC机的问题,可以保证内网免受攻击。

2、网吧管理员检查局域网病毒,安装杀毒软件(金山毒霸/瑞星,必须要更新病毒代码),对机器进行病毒扫描。

3、给系统安装补丁程序,通过Windows Update安装好系统补丁程序(关键更新、安全更新和Service Pack)。

4、给系统管理员帐户设置足够复杂的强密码,最好能是12位以上,字母+数字+符号的组合;也可以禁用/删除一些不使用的帐户。

5、经常更新杀毒软件(病毒库),设置允许的可设置为每天定时自动更新。安装并使用网络防火墙软件,网络防火墙在防病毒过程中也可以起到至关重要的作用,能有效地阻挡自来网络的攻击和病毒的入侵。部分*****Windows用户不能正常安装补丁,不妨通过使用网络防火墙等其它方法来做到一定的防护。

6、关闭一些不需要的服务,条件允许的可关闭一些没有必要的共享,也包括C$、D$等管理共享。完全单机的用户也可直接关闭Server服务。

7、不要随便点击打开QQ、MSN等聊天工具上发来的链接信息,不要随便打开或运行陌生、可疑文件和程序,如邮件中的陌生附件,*****程序等。

ARP攻击防制是一个任重而道远的过程,必须高度重视这个问题,而且不能大意马虎,我们可以采取以上Qno侠诺技术工程师的建议随时警惕ARP攻击,以减少受到的危害,提高工作效率,降低经济损失。
 

sulf85102008-12-12 10:33
arp 防御软件下载
VND提供的ARP解决程序
防ARP攻击说明:

1:VndFlt.exe 在安装时会将网络断开, 所以不能在无盘系统上直接安装。
  可将无盘镜像克隆到硬盘上, 装完VndFlt.exe后再克隆回去。
  
2:安装VndFlt.exe的计算机不能对其他计算机进行ARP攻击, 但仍有可能受到其他计算机的攻击。
  所以建议在网络中的所有计算机安装。
  
3:支持Win2000, Winxp, Win2003。

4:本软件不依赖VND系统,可用于有盘系统和其他无盘系统。

5:安装方法:网络组件类型以服务类型添加

ARP防火墙网络版*****版

[attachment=30373]
[attachment=30374]
[attachment=30375]
[attachment=30376]  
 

sulf85102008-12-12 10:33
ARP防火墙网络版*****版
[attachment=30377]
[attachment=30378]
[attachment=30379]
[attachment=30380]
[attachment=30381]    
 

sulf85102008-12-12 10:34
[attachment=30387]
[attachment=30388]
[attachment=30389]
[attachment=30390]
[attachment=30391]
[attachment=30392]      
 

sulf85102008-12-12 10:34
[attachment=30395]
[attachment=30396]
[attachment=30397]
[attachment=30398]
[attachment=30399]    
 

sulf85102008-12-12 10:34
ARP病毒攻击技术分析与防御
[attachment=30400]
 

sulf85102008-12-12 10:34
[attachment=30401]
 

sulf85102008-12-12 10:35
ARP协议
1 ARP协议概述
IP数据包常通过以太网发送。以太网设备并不识别32位IP地址:它们是以48位以太网地址传输以太网数据包的。因此,IP驱动器必须把IP目的地址转换成以太网网目的地址。在这两种地址之间存在着某种静态的或算法的映射,常常需要查看一张表。地址解析协议(Address Resolution Protocol,AR P)就是用来确定这些映象的协议。
ARP工作时,送出一个含有所希望的IP地址的以太网广播数据包。目的地主机,或另一个代表该主机的系统,以一个含有IP和以太网地址对的数据包作为应答。发送者将这个地址对高速缓存起来,以节约不必要的ARP通信。
如果有一个不被信任的节点对本地网络具有写访问许可权,那么也会有某种风险。这样一台机器可以发布虚假的ARP报文并将所有通信都转向它自己,然后它就可以扮演某些机器,或者顺便对数据流进行简单的修改。ARP机制常常是自动起作用的。在特别安全的网络上, ARP映射可以用固件,并且具有自动抑制协议达到防止干扰的目的。

图1 以太网上的ARP报文格式
图1是一个用作IP到以太网地址转换的ARP报文的例子。在图中每一行为32位,也就是4个八位组表示,在以后的图中,我们也将遵循这一方式。
硬件类型字段指明了发送方想知道的硬件接口类型,以太网的值为1。协议类型字段指明了发送方提供的高层协议类型,IP为0806(16进制)。硬件地址长度和协议长度指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用。操作字段用来表示这个报文的目的, ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4。
当发出ARP请求时,发送方填好发送方首部和发送方IP地址,还要填写目标IP地址。当目标机器收到这个ARP广播包时,就会在响应报文中填上自己的48位主机地址。
2 ARP使用举例
我们先看一下linux下的arp命令(如果开始arp表中的内容为空的话,需要先对某台主机进行一个连接,例如ping一下目标主机来产生一个arp项):
d2server:/home/kerberos# arp
Address       HWtype HWaddress       Flags Mask         Iface
211.161.17.254   ether   00:04:9A:AD:1C:0A     C           eth0
Address:主机的IP地址
Hwtype:主机的硬件类型
Hwaddress:主机的硬件地址
Flags Mask:记录标志,"C"表示arp高速缓存中的条目,"M"表示静态的arp条目。
用"arp --a"命令可以显示主机地址与IP地址的对应表,也就是机器中所保存的arp缓存信息。这个高速缓存存放了最近Internet地址到硬件地址之间的映射记录。高速缓存中每一项的生存时间一般为20分钟,起始时间从被创建时开始算起。
d2server:/home/kerberos# arp -a
(211.161.17.254) at 00:04:9A:AD:1C:0A [ether] on eth0
可以看到在缓存中有一条211.161.17.254相对应的arp缓存条目。
d2server:/home/kerberos# telnet 211.161.17.21
Trying 211.161.17.21...
Connected to 211.161.17.21.
Escape character is '^]'.
^].
telnet>quit
connetion closed.
在执行上面一条telnet命令的同时,用tcpdump进行*****:
d2server:/home/kerberos# tcpdump -e dst host 211.161.17.21
tcpdump: listening on eth0
我们将会听到很多包,我们取与我们arp协议相关的2个包:
1 0.0           00:D0:F8:0A:FB:83       FF:FF:FF:FF:FF:FF arp 60
                who has 211.161.17.21 tell d2server
2 0.002344(0.0021)     00:E0:3C:43:0D:24       00:D0:F8:0A:FB:83 arp 60
                arp reply 211.161.17.21 is at 00:E0:3C:43:0D:24
                
在第1行中,源端主机(d2server)的硬件地址是00:D0:F8:0A:FB:83。目的端主机的硬件地址是FF:FF:FF:FF:FF:FF,这是一个以太网广播地址。电缆上的每个以太网接口都要接收这个数据帧并对它进行处理。
第1行中紧接着的一个输出字段是arp,表明帧类型字段的值是0x0806,说明此数据帧是一个ARP请求或回答。
在每行中,单词后面的值60指的是以太网数据帧的长度。由于ARP请求或回答的数据帧长都是42字节(28字节的ARP数据,14字节的以太网帧头),因此,每一帧都必须加入填充字符以达到以太网的最小长度要求:60字节。
第1行中的下一个输出字段arp who-has表示作为ARP请求的这个数据帧中,目的I P地址是211.161.17.21的地址,发送端的I P地址是d2server的地址。tcpdump打印出主机名对应的默认I P地址。
从第2行中可以看到,尽管ARP请求?****悴サ模茿RP应答的目的地址却是211.161.17.21(00:E0:3C:43:0D:24)。 ARP应答是直接送到请求端主机的,而?****悴サ摹cpdump打印出arp reply的字样,同时打印出响应者的主机ip和硬件地址。
在每一行中,行号后面的数字表示tcpdump收到分组的时间(以秒为单位)。除第1行外,每行在括号中还包含了与上一行的时间差异(以秒为单位)。
这个时候我们再看看机器中的arp缓存:
d2server:/home/kerberos# arp -a
(211.161.17.254) at 00:04:9A:AD:1C:0A [ether] on eth0
(211.161.17.21) at 00:E0:3C:43:0D:24 [ether] on eth0
arp高速缓存中已经增加了一条有关211.161.17.21的映射。
再看看其他的arp相关的命令:
d2server:/home/kerberos# arp -s 211.161.17.21 00:00:00:00:00:00
d2server:/home/kerberos# arp
Address       HWtype HWaddress     Flags Mask     Iface
211.161.17.254   ether   00:04:9A:AD:1C:0A   C         eth0
211.161.17.21     ether   00:00:00:00:00:00     CM       eth0
d2server:/home/kerberos# arp -a
(211.161.17.254) at 00:04:9A:AD:1C:0A [ether] on eth0
(211.161.17.21) at 00:00:00:00:00:00 [ether] PERM on eth0
可以看到我们用arp -s选项设置了211.161.17.21对应的硬件地址为00:00:00:00:00:00,而且这条映射的标志字段为CM,也就是说我们手工设置的 arp选项为静态arp选项,它保持不变没有超时,不像高速缓存中的条目要在一定的时间间隔后更新。
如果想让手工设置的arp选项有超时时间的话,可以加上temp选项
d2server:/home/kerberos# arp -s 211.161.17.21 00:00:00:00:00:00 temp
d2server:/home/kerberos# arp -a
(211.161.17.254) at 00:04:9A:AD:1C:0A [ether] on eth0
(211.161.17.21) at 00:00:00:00:00:00 [ether] on eth0
d2server:/home/kerberos# arp
Address     HWtype HWaddress       Flags Mask     Iface
211.161.17.254   ether   00:04:9A:AD:1C:0A   C         eth0
211.161.17.21   ether   00:00:00:00:00:00     C         eth0
可以看到标志字段的静态arp标志"M"已经去掉了,我们手工加上的是一条动态条目。
请大家注意arp静态条目与动态条目的区别。
在不同的系统中,手工设置的arp静态条目是有区别的。在linux和win2000中,静态条目不会因为伪造的arp响应包而改变,而动态条目会改变。而在win98中,手工设置的静态条目会因为收到伪造的arp响应包而改变。
如果您想删除某个arp条目(包括静态条目),可以用下面的命令:
d2server:/home/kerberos# arp -d 211.161.17.21
d2server:/home/kerberos# arp -a
(211.161.17.254) at 00:04:9A:AD:1C:0A [ether] on eth0
(211.161.17.21) at on eth0
可以看到211.161.17.21的arp条目已经是不完整的了。
还有一些其他的命令,可以参考linux下的man文档:
d2server:/home/kerberos# man arp
3 ARP欺骗
我们先复习一下上面所讲的ARP协议的原理。在实现TCP/IP协议的网络环境下,一个ip包走到哪里,要怎么走是靠路由表定义,但是,当ip包到达该网络后,哪台机器响应这个ip包却是靠该ip包中所包含的硬件mac地址来识别。也就是说,只有机器的硬件mac地址和该ip包中的硬件mac地址相同的机器才会应答这个ip包,因为在网络中,每一台主机都会有发送ip包的时候,所以,在每台主机的内存中,都有一个 arp--> 硬件mac 的转换表。通常是动态的转换表(该arp表可以手工添加静态条目)。也就是说,该对应表会被主机在一定的时间间隔后刷新。这个时间间隔就是ARP高速缓存的超时时间。
通常主机在发送一个ip包之前,它要到该转换表中寻找和ip包对应的硬件mac地址,如果没有找到,该主机就发送一个ARP广播包,于是,主机刷新自己的ARP缓存。然后发出该ip包。
了解这些常识后,现在就可以谈在以太网络中如何实现ARP欺骗了,可以看看这样一个例子。
3.1 同一网段的ARP欺骗

图2 同一网段的arp欺骗
如图2所示,三台主机
A: ip地址 192.168.0.1 硬件地址 AA:AA:AA:AA:AA:AA
B: ip地址 192.168.0.2 硬件地址 BB:BB:BB:BB:BB:BB
C: ip地址 192.168.0.3 硬件地址 CC:CC:CC:CC:CC:CC
一个位于主机B的入侵者想非法进入主机A,可是这台主机上安装有防火墙。通过收集资料他知道这台主机A的防火墙只对主机C有信任关系(开放23端口(telnet))。而他必须要使用telnet来进入主机A,这个时候他应该如何处理呢?
我们这样考虑,入侵者必须让主机A相信主机B就是主机C,如果主机A和主机C之间的信任关系是建立在ip地址之上的。如果单单把主机B的ip地址改的和主机C的一样,那是不能工作的,至少不能可靠地工作。如果你告诉以太网卡设备驱动程序,自己IP是192.168.0.3,那么这只是一种纯粹的竞争关系,并不能达到目标。我们可以先研究C这台机器如果我们能让这台机器暂时当掉,竞争关系就可以解除,这个还是有可能实现的。在机器C当掉的同时,将机器B的ip地址改为192.168.0.3,这样就可以成功的通过23端口telnet到机器 A上面,而成功的绕过防火墙的限制。
上面的这种想法在下面的情况下是没有作用的,如果主机A和主机C之间的信任关系是建立在硬件地址的基础上。这个时候还需要用ARP欺骗的手段让主机A把自己的ARP缓存中的关于192.168.0.3映射的硬件地址改为主机B的硬件地址。
我们可以人为的制造一个arp_reply的响应包,发送给想要欺骗的主机,这是可以实现的,因为协议并没有规定必须在接收到arp_echo后才可以发送响应包.这样的工具很多,我们也可以直接用snifferpro抓一个arp响应包,然后进行修改。
你可以人为地制造这个包。可以指定ARP包中的源IP、目标IP、源MAC地址、目标MAC地址。
这样你就可以通过虚假的ARP响应包来修改主机A上的动态ARP缓存达到欺骗的目的。
下面是具体的步骤:
  1. 他先研究192.0.0.3这台主机,发现这台主机的漏洞。
  2. 根据发现的漏洞使主机C当掉,暂时停止工作。
  3. 这段时间里,入侵者把自己的ip改成192.0.0.3
  4. 他用工具发一个源ip地址为192.168.0.3源MAC地址为BB:BB:BB:BB:BB:BB的包给主机A,要求主机A更新自己的arp转换表。
  5. 主机更新了arp表中关于主机C的ip-->mac对应关系。
  6. 防火墙失效了,入侵的ip变成合法的mac地址,可以telnet 了。
上面就是一个ARP的欺骗过程,这是在同网段发生的情况,但是,提醒注意的是,在B和C处于不同网段的时候,上面的方法是不起作用的。
3.2 不同网段的ARP欺骗

图3 不同网段之间的ARP欺骗
如图3所示A、C位于同一网段而主机B位于另一网段,三台机器的ip地址和硬件地址如下:
A: ip地址 192.168.0.1 硬件地址 AA:AA:AA:AA:AA:AA
B: ip地址 192.168.1.2 硬件地址 BB:BB:BB:BB:BB:BB
C: ip地址 192.168.0.3 硬件地址 CC:CC:CC:CC:CC:CC
在现在的情况下,位于192.168.1网段的主机B如何冒充主机C欺骗主机A呢?显然用上面的办法的话,即使欺骗成功,那么由主机B和主机A之间也无法建立telnet会话,因为路由器不会把主机A发给主机B的包向外转发,路由器会发现地址在192.168.0.这个网段之内。
现在就涉及到另外一种欺骗方式―ICMP重定向。把ARP欺骗和ICMP重定向结合在一起就可以基本实现跨网段欺骗的目的。
什么是ICMP重定向呢?
ICMP重定向报文是ICMP控制报文中的一种。在特定的情况下,当路由器检测到一台机器使用非优化路由的时候,它会向该主机发送一个ICMP重定向报文,请求主机改变路由。路由器也会把初始数据报向它的目的地转发。
我们可以利用ICMP重定向报文达到欺骗的目的。
下面是结合ARP欺骗和ICMP重定向进行攻击的步骤:
  1. 为了使自己发出的非法ip包能在网络上能够存活长久一点,开始修改ip包的生存时间ttl为下面的过程中可能带来的问题做准备。把ttl改成255. (ttl定义一个ip包如果在网络上到不了主机后,在网络上能存活的时间,改长一点在本例中有利于做充足的广播)
  2. 下载一个可以自由制作各种包的工具(例如hping2)
  3. 然后和上面一样,寻找主机C的漏洞按照这个漏洞当掉主机C。
  4. 在该网络的主机找不到原来的192.0.0.3后,将更新自己的ARP对应表。于是他发送一个原ip地址为192.168.0.3硬件地址为BB:BB:BB:BB:BB:BB的ARP响应包。
  5. 好了,现在每台主机都知道了,一个新的MAC地址对应192.0.0.3,一个ARP欺骗完成了,但是,每台主机都只会在局域网中找这个地址而根本就不会把发送给192.0.0.3的ip包丢给路由。于是他还得构造一个ICMP的重定向广播。
  6. 自己定制一个ICMP重定向包告诉网络中的主机:"到192.0.0.3的路由最短路径不是局域网,而是路由,请主机重定向你们的路由路径,把所有到192.0.0.3的ip包丢给路由。"
  7. 主机A接受这个合理的ICMP重定向,于是修改自己的路由路径,把对192.0.0.3的通讯都丢给路由器。
  8. 入侵者终于可以在路由外收到来自路由内的主机的ip包了,他可以开始telnet到主机的23口。
其实上面的想法只是一种理想话的情况,主机许可接收的ICMP重定向包其实有很多的限制条件,这些条件使ICMP重定向变的非常困难。
TCP/IP协议实现中关于主机接收ICMP重定向报文主要有下面几条限制:
  1. 新路由必须是直达的
  2. 重定向包必须来自去往目标的当前路由
  3. 重定向包不能通知主机用自己做路由
  4. 被改变的路由必须是一条间接路由
由于有这些限制,所以ICMP欺骗实际上很难实现。但是我们也可以主动的根据上面的思维寻找一些其他的方法。更为重要的是我们知道了这些欺骗方法的危害性,我们就可以采取相应的防御办法。
3.3 ARP欺骗的防御
知道了ARP欺骗的方法和危害,我们给出一些初步的防御方法:
  1. 不要把你的网络安全信任关系建立在ip地址的基础上或硬件mac地址基础上,(rarp同样存在欺骗的问题),理想的关系应该建立在ip+mac基础上。
  2. 设置静态的mac-->ip对应表,不要让主机刷新你设定好的转换表。
  3. 除非很有必要,否则停止使用ARP,将ARP做为永久条目保存在对应表中。在linux下可以用ifconfig -arp可以使网卡驱动程序停止使用ARP。
  4. 使用代理网关发送外出的通讯。
  5. 修改系统拒收ICMP重定向报文
在linux下可以通过在防火墙上拒绝ICMP重定向报文或者是修改内核选项重新编译内核来拒绝接收ICMP重定向报文。
在win2000下可以通过防火墙和IP策略拒绝接收ICMP报文。
4 代理ARP的应用
代理ARP有两大应用,一个是有利的就是我们在防火墙实现中常说的透明模式的实现,另一个是有害的就是通过它可以达到在交换环境中进行嗅探的目的.由此可见同样一种技术被应用于不同的目的,效果是不一样的.
我们先来看交换环境中局域网的嗅探.
通常在局域网环境中,我们都是通过交换环境的网关上网的。在交换环境中使用NetXray或者NAI Sniffer一类的嗅探工具除了抓到自己的包以外,是不能看到其他主机的网络通信的。
但是我们可以通过利用ARP欺骗可以实现Sniffer的目的。
ARP协议是将IP地址解析为MAC地址的协议,局域网中的通信都是基于MAC地址的。

图4 交换网络中的ARP欺骗
如图4所示,三台主机位于一个交换网络的环境中,其中A是网关:
A: ip地址 192.168.0.1 硬件地址 AA:AA:AA:AA:AA
B: ip地址 192.168.0.2 硬件地址 BB:BB:BB:BB:BB
C:ip地址 192.168.0.3 硬件地址 CC:CC:CC:CC:CC
在局域网中192.168.0.2和192.168.0.3都是通过网关192.168.0.1上网的,假定攻击者的系统为192.168.0.2,他希望听到192.168.0.3的通信,那么我们就可以利用ARP欺骗实现。
这种欺骗的中心原则就是arp代理的应用.主机A是局域网中的代理服务器,局域网中每个节点的向外的通信都要通过它.主机B想要听主机C的通信,它需要先使用ARP欺骗,让主机C认为它就是主机A,这个时候它发一个IP地址为192.168.0.1,物理地址为BB:BB:BB:BB:BB:BB的 ARP响应包给主机C,这样主机C会把发往主机A的包发往主机B.同理,还要让网关A相信它就是主机C,向网关A发送一个IP地址为 192.168.0.3,物理地址为BB:BB:BB:BB:BB:BB的包.
上面这一步的操作和前面的ARP欺骗的原理是一样的,但是还是有问题,过一段时间主机B会发现自己无法上网.所以下面还有一个步骤就是需要在主机B 上转发从主机A到主机C的包,并且转发从主机C到主机A的包.现在我们可以看到其实主机B在主机A和主机C的通讯中起到了一个代理的作用,这就是为什么叫做ARP代理的原因.
具体实现要用到两个工具dsniff和fragrouter,dsniff用来实现ARP欺骗,fragroute用来进行包的转发.
首先利用dsniff中的arpspoof来实现ARP欺骗,dsniff软件可以在下面的网址下载:http://naughty.monkey.org/~dugsong/dsniff
安装这个软件包之前先要下载安装libnet.
欺骗192.168.0.3,告诉这台机器网关192.168.0.1的MAC地址是192.168.0.2的MAC地址.
[root@sound dsniff-2.3]# ./arpspoof -i eth0 -t 192.168.0.3 192.168.0.1
欺骗192.168.0.1,告诉192.168.0.1主机192.168.0.3的MAC地址是192.168.0.2的MAC地址。
[root@sound dsniff-2.3]# ./arpspoof -i eth0 -t 192.168.0.1 192.168.0.3
现在我们已经完成了第一步的欺骗,这个欺骗是通过arpspoof来完成的,当然您也可以使用别的工具甚至自己发包来完成.现在我们可以看到在主机A和主机C的arp列表里面都完成了我们需要的工作.在后面的透明代理中我们将使用另外一种不同的理念.
下面我们先打开linux系统中的转发包的选项:
[root@sound /root]# echo "1" >/proc/sys/net/ipv4/ip_forward
下面我们可以下载大名鼎鼎的dugsong的另外一个工具fragroute,这个工具以前叫做fragrouter(仅有1字的差别)主要用于实现入侵检测系统处理分片的ip和tcp包功能的检测,本身自代包转发的功能.可以到下面的网站下载:http://monkey.org/~dugsong/fragroute/
安装这个软件包之前先要下载安装libpcap和libevent.
当然我们也可以使用fragrouter来完成:http://www.packetstormsecurity.org/groups/w00w00/sectools/fragrouter/
[root@sound fragrouter-1.6]# ./fragrouter -B1
fragrouter: base-1: normal IP forwarding
现在就可以实现在交换局域网中嗅探的目标.当然上面这些只是一些原理性的介绍,在真正的使用中会遇到很多的问题,比如如何实现对网关A和主机C的欺骗,以及如何处理可能出现的广播风暴问题,这些可以在实践中学习.还有一个叫arpsniff的工具能够很方便的完成这一功能,很多网站都提供下载,界面比较友好,由于和上面的原理一样,只?****ぞ呤褂蒙系牟煌⑶姨砑恿艘恍└郊拥墓δ?所以这里不在进行介绍.
代理ARP的另外一个应用就是防火墙的透明代理的实现.我们都知道早期的防火墙大都是基于路由模式,也就是防火墙要完成一个路由的作用.这种接入方式需要在局域网内的主机上设置防火墙的IP为代理,而且需要在外部路由器的路由表中加入一条指向防火墙的路由.这种方式的缺点在于不透明,需要进行过多的设置,并且破坏了原有的网络拓扑.所以现在几乎全部的防火墙都实现了一种透明接入的功能,用户的路由器和客户端不用做任何修改,用户甚至感觉不到透明接入方式防火墙的存在.这种透明接入的原理就是ARP代理.
我们现在看如何配置一台主机作为透明接入模式的防火墙(透明接入的防火墙不需要IP),

图5
如图5所示,一台防火墙连接内部网段和DMZ网段到外部路由.我们在这台用作防火墙的主机上使用linux操作系统,这样我们可以方便的使用 iptables防火墙.假设三块网卡为eth0,eth1和eth2,eth0和路由器相连,eth1和内网相连.eth2和外网相连.假设DMZ区有 2台服务器.
内网地址:192.168.1.0/24
DMZ地址:192.168.1.2---192.168.1.3
路由器的ip地址:192.168.1.1
eth0:AA:AA:AA:AA:AA:AA
eth1:BB:BB:BB:BB:BB:BB
eth2:CC:CC:CC:CC:CC:CC
和前面差不多,第一步需要实现ARP欺骗,这次我们有个简单的实现.我们把路由器的IP地址和防火墙的eth1和eth2的网卡物理地址绑定,将内网和DMZ网段的IP地址和eth0的网卡绑定,在linux系统上我们用arp命令实现:
arp -s 192.168.1.1 BB:BB:BB:BB:BB:BB
arp -s 192.168.1.1 CC:CC:CC:CC:CC:CC
arp -s 192.168.1.0/24 AA:AA:AA:AA:AA:AA
第二部我们需要在基于linux的防火墙上设置路由,把目标地址是外部路由的包转发到eth0,把目标地址为内网的包转发到eth1,把目标地址是DMZ网段服务器的包转发到eth2.在linux下面用route命令实现
route add 192.168.1.1 dev eth0
route add -net 192.168.1.0/24 dev eth1
route add 192.168.1.2 dev eth2
route add 192.168.1.3 dev eth3
(针对DMZ网段里面的每台服务器都要增加一条单独的路由) 现在我们就已经实现了一个简单的arp代理的透明接入,当然对应于防火墙的iptables部分要另外配置,iptables的配置不在本文范畴之内.
小结
本文介绍了ARP协议以及与其相关的安全问题。一个重要的安全问题就是ARP欺骗,我们讲到了同一网段的ARP欺骗以及跨网段的ARP欺骗和 ICMP重定向相结合的方法。由于有这些安全问题的存在,我们给出一些最基本的解决办法。最后谈到了利用代理ARP实现在交换网络中嗅探和防火墙的透明接入。
 

sulf85102008-12-12 10:35
ARP攻击的原理与解决方法

一个净化的网络空间不光给别人带来便利,也会方便到自己!!!

  试想以下当你发布了这些arp,p2p管制软件以后,这些软件的使用者反而影响到你自己的时候,你会有什么感觉!!!!!

  说句实话,如果你只会使用攻击软件却不知道攻击软件原理和防范措施,那么我建议还是尽量少用,因为在众多的普通上网用户身上寻找黑客快感这种行为,是可怜又可鄙的!!!!!

  希望大家自觉抵制非网络管理员滥用此类软件,在龙族论坛上我也经常看见有人发网路执法官等arp,p2p管制软件,希望版主针对此事能有所考虑。

  我之一直不想放出查找方法也是希望那些使用用户能有所收敛,可是很多朋友反映的情况让我觉得我这个决定是错误的!

  再一次劝说,另告知大家一个消息,我的反攻击软件已经在测试中,专门针对局域网内使用arp攻击者进行反击,针对攻击ip进行反攻击。

  最终还是希望有个相对纯净的网络世界,也希望自己的努力没有白费,更希望龙族的朋友能相互转达,在这里感谢大家了!!!!!!!!

ARP攻击的原理与解决方法(第三版)含如何在局域网内查找病毒主机

【故障原因】

  局域网内有人使用ARP欺骗的木马程序(比如:魔兽世界,天堂,劲舞团等*****的软件,某些*****中也被恶意加载了此程序)。

【故障原理】

  要了解故障原理,我们先来了解一下ARP协议。

  在局域网中,通过ARP协议来完成IP地址转换为第二层物理地址(即MAC地址)的。ARP协议对网络安全具有重要的意义。通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞。

  ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

  每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的,如下所示。

主机         IP地址         MAC地址
A         192.168.16.1   aa-aa-aa-aa-aa-aa
B         192.168.16.2   bb-bb-bb-bb-bb-bb
C         192.168.16.3   cc-cc-cc-cc-cc-cc
D         192.168.16.4   dd-dd-dd-dd-dd-dd

  我们以主机A(192.168.16.1)向主机B(192.168.16.2)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播,目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.16.2的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应:“192.168.16.2的MAC地址是bb-bb-bb-bb-bb-bb”。这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。

  从上面可以看出,ARP协议的基础就是信任局域网内所有的人,那么就很容易实现在以太网上的ARP欺骗。对目标A进行欺骗,A去Ping主机C却发送到了DD-DD-DD-DD-DD-DD这个地址上。如果进行欺骗的时候,把C的MAC地址骗为DD-DD-DD-DD-DD-DD,于是A发送到C上的数据包都变成发送给D的了。这不正好是D能够接收到A发送的数据包了么,嗅探成功。

  A对这个变化一点都没有意识到,但是接下来的事情就让A产生了怀疑。因为A和C连接不上了。D对接收到A发送给C的数据包可没有转交给C。

  做“man in the middle”,进行ARP重定向。打开D的IP转发功能,A发送过来的数据包,转发给C,好比一个路由器一样。不过,假如D发送ICMP重定向的话就中断了整个计划。

  D直接进行整个包的修改转发,捕获到A发送给C的数据包,全部进行修改后再转发给C,而C接收到的数据包完全认为是从A发送来的。不过,C发送的数据包又直接传递给A,倘若再次进行对C的ARP欺骗。现在D就完全成为A与C的中间桥梁了,对于A和C之间的通讯就可以了如指掌了。

【故障现象】

  当局域网内某台主机运行ARP欺骗的木马程序时,会欺骗局域网内所有主机和路由器,让所有上网的流量必须经过病毒主机。其他用户原来直接通过路由器上网现在转由通过病毒主机上网,切换的时候用户会断一次线。

  切换到病毒主机上网后,如果用户已经登陆了服务器,那么病毒主机就会经常伪造断线的假像,那么用户就得重新登录服务器,这样病毒主机就可以*****了。

  由于ARP欺骗的木马程序发作的时候会发出大量的数据包导致局域网通讯拥塞以及其自身处理能力的限制,用户会感觉上网速度越来越慢。当ARP欺骗的木马程序停止运行时,用户会恢复从路由器上网,切换过程中用户会再断一次线。

【HiPER用户快速发现ARP欺骗木马】

  在路由器的“系统历史记录”中看到大量如下的信息(440以后的路由器软件版本中才有此提示):

   MAC Chged 10.128.103.124
   MAC Old 00:01:6c:36:d1:7f
   MAC New 00:05:5d:60:c7:18

  这个消息代表了用户的MAC地址发生了变化,在ARP欺骗木马开始运行的时候,局域网所有主机的MAC地址更新为病毒主机的MAC地址(即所有信息的MAC New地址都一致为病毒主机的MAC地址),同时在路由器的“用户统计”中看到所有用户的MAC地址信息都一样。
   如果是在路由器的“系统历史记录”中看到大量MAC Old地址都一致,则说明局域网内曾经出现过ARP欺骗(ARP欺骗的木马程序停止运行时,主机在路由器上恢复其真实的MAC地址)。

【在局域网内查找病毒主机】

  在上面我们已经知道了使用ARP欺骗木马的主机的MAC地址,那么我们就可以使用NBTSCAN工具来快速查找它。

  NBTSCAN可以取到PC的真实IP地址和MAC地址,如果有”ARP攻击”在做怪,可以找到装有ARP攻击的PC的IP/和MAC地址。

  命令:“nbtscan -r 192.168.16.0/24”(搜索整个192.168.16.0/24网段, 即192.168.16.1-192.168.16.254);或“nbtscan 192.168.16.25-137”搜索192.168.16.25-137 网段,即192.168.16.25-192.168.16.137。输出结果第一列是IP地址,最后一列是MAC地址。

  NBTSCAN的使用范例:

  假设查找一台MAC地址为“000d870d585f”的病毒主机。

  1)将压缩包中的nbtscan.exe 和cygwin1.dll解压缩放到c:下。

  2)在Windows开始—运行—打开,输入cmd(windows98输入“command”),在出现的DOS窗口中输入:C: btscan -r 192.168.16.1/24(这里需要根据用户实际网段输入),回车。

  3)通过查询IP--MAC对应表,查出“000d870d585f”的病毒主机的IP地址为“192.168.16.223”。

【解决思路】

  1、不要把你的网络安全信任关系建立在IP基础上或MAC基础上,(rarp同样存在欺骗的问题),理想的关系应该建立在IP+MAC基础上。

  2、设置静态的MAC-->IP对应表,不要让主机刷新你设定好的转换表。

  3、除非很有必要,否则停止使用ARP,将ARP做为永久条目保存在对应表中。

  4、使用ARP服务器。通过该服务器查找自己的ARP转换表来响应其他机器的ARP广播。确保这台ARP服务器不被黑。

  5、使用"proxy"代理IP的传输。

  6、使用硬件屏蔽主机。设置好你的路由,确保IP地址能到达合法的路径。(静态配置路由ARP条目),注意,使用交换集线器和网桥无法阻止ARP欺骗。

  7、管理员定期用响应的IP包中获得一个rarp请求,然后检查ARP响应的真实性。

  8、管理员定期轮询,检查主机上的ARP缓存。

  9、使用防火墙连续监控网络。注意有使用SNMP的情况下,ARP的欺骗有可能导致陷阱包丢失。

【HiPER用户的解决方案】

  建议用户采用双向绑定的方法解决并且防止ARP欺骗。

  1、在PC上绑定路由器的IP和MAC地址:

  1)首先,获得路由器的内网的MAC地址(例如HiPER网关地址192.168.16.254的MAC地址为0022aa0022aa)。

  2)编写一个批处理文件rarp.bat内容如下:

  @echo off
   arp -d
   arp -s 192.168.16.254 00-22-aa-00-22-aa

  将文件中的网关IP地址和MAC地址更改为您自己的网关IP地址和MAC地址即可。

  将这个批处理软件拖到“windows--开始--程序--启动”中。

  3)如果是网吧,可以利用收费软件服务端程序(pubwin或者万象都可以)发送批处理文件rarp.bat到所有客户机的启动目录。Windows2000的默认启动目录为“C:/Documents and SettingsAll Users「开始」菜单程序启动”。

  2、在路由器上绑定用户主机的IP和MAC地址(440以后的路由器软件版本支持):

  在HiPER管理界面--高级配置--用户管理中将局域网每台主机均作绑定。

  再一次鄙视那些发arp,p2p管制类软件的朋友!!!!!!

  一个净化的网络空间不光给别人带来便利,也会方便到自己!!!

  试想以下当你发布了这些arp,p2p管制软件以后,这些软件的使用者反而影响到你自己的时候,你会有什么感觉!!!!!
 

sulf85102008-12-12 10:35
局域网内如何防止ARP欺骗

对于ARP欺骗,提出几点加强安全防范的措施。环境是主机或者网关是基于Linux/BSD的。

一、理论前提

  本着“不冤枉好人,不放过一个坏人的原则”,先说说我的一些想法和理论依据。首先,大家肯定发送ARP欺骗包肯定是一个恶毒的程序自动发送的,正常的TCP/IP网络是不会有这样的错误包发送的(板砖扔了过来啊,废话!)。这就假设,如果犯罪嫌疑人没有启动这个破坏程序的时候,网络环境是正常的,或者说网络的ARP环境是正常的,如果我们能在犯罪嫌疑人启动这个犯罪程序的第一时间,一开始就发现了他的犯罪活动,那么就是人赃俱在,不可抵赖了,因为刚才提到,前面网络正常的时候证据是可信和可依靠的。好,接下来我们谈论如何在第一时间发现他的犯罪活动。

  ARP欺骗的原理如下:
  假设这样一个网络,一个Hub接了3台机器
  HostA HostB HostC 其中
  A的地址为:IP:192.168.10.1 MAC: AA-AA-AA-AA-AA-AA
  B的地址为:IP:192.168.10.2 MAC: BB-BB-BB-BB-BB-BB
  C的地址为:IP:192.168.10.3 MAC: CC-CC-CC-CC-CC-CC
  正常情况下 C:arp -a
  Interface: 192.168.10.1 on Interface 0x1000003
  Internet Address Physical Address Type
  192.168.10.3 CC-CC-CC-CC-CC-CC dynamic

  现在假设HostB开始了罪恶的ARP欺骗:
  B向A发送一个自己伪造的ARP应答,而这个应答中的数据为发送方IP地址是192.168.10.3(C的IP地址),MAC地址是DD-DD-DD-DD-DD-DD(C的MAC地址本来应该是CC-CC-CC-CC-CC-CC,这里被伪造了)。当A接收到B伪造的ARP应答,就会更新本地的ARP缓存(A可不知道被伪造了)。而且A不知道其实是从B发送过来的,A这里只有192.168.10.3(C的IP地址)和无效的DD-DD-DD-DD-DD-DD mac地址,没有和犯罪分子B相关的证据,哈哈,这样犯罪分子岂不乐死了。
现在A机器的ARP缓存更新了:
  C:>arp -a
  Interface: 192.168.10.1 on Interface 0x1000003
  Internet Address Physical Address Type
  192.168.10.3 DD-DD-DD-DD-DD-DD dynamic

  这可不是小事。局域网的网络流通可不是根据IP地址进行,而是按照MAC地址进行传输。现在192.168.10.3的MAC地址在A上被改变成一个本不存在的MAC地址。现在A开始Ping 192.168.10.3,网卡递交的MAC地址是DD-DD-DD-DD-DD-DD,结果是什么呢?网络不通,A根本不能Ping通C!!

  所以,局域网中一台机器,反复向其他机器,特别是向网关,发送这样无效假冒的ARP应答信息包,NND,严重的网络堵塞就开始了!网吧管理员的噩梦开始了。我的目标和任务,就是第一时间,抓住他。不过从刚才的表述好像犯罪分子完美的利用了以太网的缺陷,掩盖了自己的罪行。但其实,以上方法也有留下了蛛丝马迹。尽管,ARP数据包没有留下HostB的地址,但是,承载这个ARP包的ethernet帧却包含了HostB的源地址。而且,正常情况下ethernet数据帧中,帧头中的MAC源地址/目标地址应该和帧数据包中ARP信息配对,这样的ARP包才算是正确的。如果不正确,肯定是假冒的包,可以提醒!但如果匹配的话,也不一定代表正确,说不定伪造者也考虑到了这一步,而伪造出符合格式要求,但内容假冒的ARP数据包。不过这样也没关系,只要网关这里拥有本网段所有MAC地址的网卡数据库,如果和Mac数据库中数据不匹配也是假冒的ARP数据包。也能提醒犯罪分子动手了。

二、防范措施

  1.建立DHCP服务器(建议建在网关上,因为DHCP不占用多少CPU,而且ARP欺骗攻击一般总是先攻击网关,我们就是要让他先攻击网关,因为网关这里有监控程序的,网关地址建议选择192.168.10.2 ,把192.168.10.1留空,如果犯罪程序愚蠢的话让他去攻击空地址吧),另外所有客户机的IP地址及其相关主机信息,只能由网关这里取得,网关这里开通DHCP服务,但是要给每个网卡,绑定固定唯一IP地址。一定要保持网内的机器IP/MAC一一对应的关系。这样客户机虽然是DHCP取地址,但每次开机的IP地址都是一样的。

  2.建立MAC数据库,把网吧内所有网卡的MAC地址记录下来,每个MAC和IP、地理位置统统装入数据库,以便及时查询备案。

  3.网关机器关闭ARP动态刷新的过程,使用静态路邮,这样的话,即使犯罪嫌疑人使用ARP欺骗攻击网关的话,这样对网关也是没有用的,确保主机安全。
  网关建立静态IP/MAC捆绑的方法是:建立/etc/ethers文件,其中包含正确的IP/MAC对应关系,格式如下:
  192.168.2.32 08:00:4E:B0:24:47
  然后再/etc/rc.d/rc.local最后添加:
  arp -f 生效即可

  4.网关*****网络安全。网关上面使用TCPDUMP程序截取每个ARP程序包,弄一个脚本分析软件分析这些ARP协议。ARP欺骗攻击的包一般有以下两个特点,满足之一可视为攻击包报警:第一以太网数据包头的源地址、目标地址和ARP数据包的协议地址不匹配。或者,ARP数据包的发送和目标地址不在自己网络网卡MAC数据库内,或者与自己网络MAC数据库 MAC/IP 不匹配。这些统统第一时间报警,查这些数据包(以太网数据包)的源地址(也有可能伪造),就大致知道那台机器在发起攻击了。

  5.偷偷摸摸的走到那台机器,看看使用人是否故意,还是被任放了什么木马程序陷害的。如果后者,不声不响的找个借口支开他,拔掉网线(不关机,特别要看看Win98里的计划任务),看看机器的当前使用记录和运行情况,确定是否是在攻击。
 

sulf85102008-12-12 10:35
arp欺骗分析及处理

1.   网络现象 最近网络中有主机频繁断线,刚刚开始还比较正常,但是一段时间后就出现断线情况,有时很快恢复,但是有时要长达好几分钟啊,这样对工作影响太大了。最初怀疑是否是物理上的错误,总之从最容易下手的东西开始检查,检查完毕后没有发现异常!突然想到目前网上比较流行的ARP攻击,ARP攻击出现的故障情况与此非常之相似!对于ARP攻击,一般常规办法是很难找出和判断的,需要抓包分析。
2.   原理知识 在解决问题之前,我们先了解下ARP的相关原理知识。 ARP原理 首先,每台主机都会在自己的ARP缓冲区 (ARP Cache)中建立一个 ARP列表,以表示IP地址和MAC地址的对应关系。 当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP列表中是否存在该 IP地址对应的MAC地址,如果有﹐就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。 网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个 ARP响应数据包,告诉对方自己是它需要查找的MAC地址; 源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。 ARP欺骗原理 我们先模拟一个环境: 网关:192.168.1.1 MAC地址:00:11:22:33:44:55 欺骗主机A:192.168.1.100 MAC地址:00:11:22:33:44:66 被欺骗主机B:192.168.1.50 MAC地址:00:11:22:33:44:77 欺骗主机A不停的发送ARP应答包给网关,告诉网关他是192.168.1.50主机B,这样网关就相信欺骗主机,并且在网关的ARP缓存表里就有192.168.1.50 对应的MAC就是欺骗主机A的MAC地址00:11:22:33:44:66,网关真正发给主机B的流量就转发给主机A;另外主机A同时不停的向主机B发送ARP请求,主机B相信主机A为网关,在主机B的缓存表里有一条记录为192.168.1.1对应00:11:22:33:44:66,这样主机B真正发送给网关的数据流量就会转发到主机A;等于说主机A和网关之间的通讯就经过了主机A,主机A作为了一个中间人在彼此之间进行转发,这就是ARP欺骗。
3. 解决方法 看来只有抓包了,首先,我将交换机做好端口镜像设置,然后把安装有科来网络分析系统的电脑接入镜像端口,抓取网络的所有数据进行分析。通过几个视图我得出了分析结果:诊断视图提示有太多“ARP无请求应答”。
在诊断中,我发现几乎都是00:20:ED:AA:0D:04发起的大量ARP应答。而且在参考信息中提示说可能存在ARP欺骗。看来我的方向是走对了,但是为了进一步确定,得结合其他内容信息。查看协议视图了解ARP协议的详细情况,
ARP Resp*****e和ARP Request相差比例太大了,很不正常啊。接下来,再看看数据包的详细情况。
我从数据包信息已经看出问题了,00:20:ED:AA:0D:04在欺骗网络中192.168.17.0这个网段的主机,应该是在告诉大家它是网关吧,想充当中间人的身份吧,被欺骗主机的通讯流量都跑到他那边“被审核”了。
4. 解决办法 现在基本确定为ARP欺骗攻击,现在我需要核查MAC地址的主机00:20:ED:AA:0D:04是哪台主机,幸好我在平时记录了内部所有主机的MAC地址和主机对应表,终于给找出真凶主机了。可能上面中了ARP病毒,立即断网杀毒。网络正常了,呜呼!整个世界又安静了!
5. 总结(故障原理) 我们来回顾一下上面ARP攻击过程。MAC地址为00:20:ED:AA:0D:04的主机,扫描攻击192.168.17.0这个网段的所有主机,并告之它就是网关,被欺骗主机的数据都发送到MAC地址为00:20:ED:AA:0D:04的主机上去了,但是从我抓取的数据包中,MAC为00:20:ED:AA:0D:04的主机并没有欺骗真正的网关,所以我们的网络会出现断网现象。
6. 补充内容 对于ARP攻击的故障,我们还是可以防范的,以下三种是常见的方法: 方法一: 平时做好每台主机的MAC地址记录,出现状况的时候,可以利用MAC地址扫描工具扫描出当前网络中主机的MAC地址对应情况,参照之前做好的记录,也可以找出问题主机。
方法二:ARP –S 可在MS-DOS窗口下运行以下命令: ARP –S手工绑定网关IP和网关MAC。静态绑定,就可以尽可能的减少攻击了。需要说明的是,手工绑定在计算机重起后就会失效,需要再绑定,但是我们可以做一个批处理文件,可以减少一些烦琐的手工绑定!
方法三:使用软件(Antiarp) 使用Anti ARP Sniffer可以防止利用ARP技术进行数据包截取以及防止利用ARP技术发送地址冲突数据包。
 

sulf85102008-12-12 10:36
学校规划用地。。。。。。。。
 

sulf85102008-12-12 10:36
arp欺骗分析及处理2

1.   网络现象 最近网络中有主机频繁断线,刚刚开始还比较正常,但是一段时间后就出现断线情况,有时很快恢复,但是有时要长达好几分钟啊,这样对工作影响太大了。最初怀疑是否是物理上的错误,总之从最容易下手的东西开始检查,检查完毕后没有发现异常!突然想到目前网上比较流行的ARP攻击,ARP攻击出现的故障情况与此非常之相似!对于ARP攻击,一般常规办法是很难找出和判断的,需要抓包分析。
2.   原理知识 在解决问题之前,我们先了解下ARP的相关原理知识。 ARP原理 首先,每台主机都会在自己的ARP缓冲区 (ARP Cache)中建立一个 ARP列表,以表示IP地址和MAC地址的对应关系。 当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP列表中是否存在该 IP地址对应的MAC地址,如果有﹐就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。 网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个 ARP响应数据包,告诉对方自己是它需要查找的MAC地址; 源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。 ARP欺骗原理 我们先模拟一个环境: 网关:192.168.1.1 MAC地址:00:11:22:33:44:55 欺骗主机A:192.168.1.100 MAC地址:00:11:22:33:44:66 被欺骗主机B:192.168.1.50 MAC地址:00:11:22:33:44:77 欺骗主机A不停的发送ARP应答包给网关,告诉网关他是192.168.1.50主机B,这样网关就相信欺骗主机,并且在网关的ARP缓存表里就有192.168.1.50 对应的MAC就是欺骗主机A的MAC地址00:11:22:33:44:66,网关真正发给主机B的流量就转发给主机A;另外主机A同时不停的向主机B发送ARP请求,主机B相信主机A为网关,在主机B的缓存表里有一条记录为192.168.1.1对应00:11:22:33:44:66,这样主机B真正发送给网关的数据流量就会转发到主机A;等于说主机A和网关之间的通讯就经过了主机A,主机A作为了一个中间人在彼此之间进行转发,这就是ARP欺骗。
3. 解决方法 看来只有抓包了,首先,我将交换机做好端口镜像设置,然后把安装有科来网络分析系统的电脑接入镜像端口,抓取网络的所有数据进行分析。通过几个视图我得出了分析结果:诊断视图提示有太多“ARP无请求应答”。
在诊断中,我发现几乎都是00:20:ED:AA:0D:04发起的大量ARP应答。而且在参考信息中提示说可能存在ARP欺骗。看来我的方向是走对了,但是为了进一步确定,得结合其他内容信息。查看协议视图了解ARP协议的详细情况,
ARP Resp*****e和ARP Request相差比例太大了,很不正常啊。接下来,再看看数据包的详细情况。
我从数据包信息已经看出问题了,00:20:ED:AA:0D:04在欺骗网络中192.168.17.0这个网段的主机,应该是在告诉大家它是网关吧,想充当中间人的身份吧,被欺骗主机的通讯流量都跑到他那边“被审核”了。
4. 解决办法 现在基本确定为ARP欺骗攻击,现在我需要核查MAC地址的主机00:20:ED:AA:0D:04是哪台主机,幸好我在平时记录了内部所有主机的MAC地址和主机对应表,终于给找出真凶主机了。可能上面中了ARP病毒,立即断网杀毒。网络正常了,呜呼!整个世界又安静了!
5. 总结(故障原理) 我们来回顾一下上面ARP攻击过程。MAC地址为00:20:ED:AA:0D:04的主机,扫描攻击192.168.17.0这个网段的所有主机,并告之它就是网关,被欺骗主机的数据都发送到MAC地址为00:20:ED:AA:0D:04的主机上去了,但是从我抓取的数据包中,MAC为00:20:ED:AA:0D:04的主机并没有欺骗真正的网关,所以我们的网络会出现断网现象。
6. 补充内容 对于ARP攻击的故障,我们还是可以防范的,以下三种是常见的方法: 方法一: 平时做好每台主机的MAC地址记录,出现状况的时候,可以利用MAC地址扫描工具扫描出当前网络中主机的MAC地址对应情况,参照之前做好的记录,也可以找出问题主机。
方法二:ARP –S 可在MS-DOS窗口下运行以下命令: ARP –S手工绑定网关IP和网关MAC。静态绑定,就可以尽可能的减少攻击了。需要说明的是,手工绑定在计算机重起后就会失效,需要再绑定,但是我们可以做一个批处理文件,可以减少一些烦琐的手工绑定!
方法三:使用软件(Antiarp) 使用Anti ARP Sniffer可以防止利用ARP技术进行数据包截取以及防止利用ARP技术发送地址冲突数据包。
 

sulf85102008-12-12 10:36
学校规划用地
 

sulf85102008-12-12 10:37
手把手教你玩转ARP包

首先要感谢网络安全资深专家卢湖川博士以及VC网络版的limin朋友提供的资料以及帮助^_^
经常看到论坛有人问起关于数据包的截获、分析等问题,幸好本人也对此略有所知,所以就想写一系列的文章来详细深入的探讨关于数据包的知识,,我希望通过这一系列的文章,能使得关于数据包的知识得以普及,所以这系列的每一篇文章我都会有由浅入深的解释、详细的分析、以及编码步骤,另外附上带有详细注释的源码(为了照顾大多数朋友,我提供的都是MFC的源码)。
不过由于也是初学者,疏漏之处还望不吝指正。
本文凝聚着笔者心血,如要转载,请指明原作者及出处,谢谢!^_^
OK,. Let’s go ! Have fun!! q^_^p
第一篇       手把手教你玩转ARP包
  目录:
一.   关于ARP协议的基础知识
1. ARP的工作原理
2.ARP包的格式
3.ARP包的填充
二。发送数据包的编程实现
1.填充数据包
2.发送数据包
三。一些附加步骤及说明
1.如果在VC中使用winpcap
2.获得网卡信息列表
3.获得系统ARP信息列表
四。ARP包的游戏
1.小伎俩
2.ARP欺骗的实现
3.基于ARP欺骗的*****原理
作者:
  CSDN VC/MFC 网络编程 PiggyXP ^_^
一.         关于ARP协议的基础知识
1.ARP的工作原理
本来我不想在此重复那些遍地都是的关于ARP的基本常识,但是为了保持文章的完整性以及照顾初学者,我就再啰嗦一些文字吧,资深读者可以直接跳过此节。
我们都知道以太网设备比如网卡都有自己全球唯一的MAC地址,它们是以MAC地址来传输以太网数据包的,但是它们却识别不了我们IP包中的IP地址,所以我们在以太网中进行IP通信的时候就需要一个协议来建立IP地址与MAC地址的对应关系,以使IP数据包能发到一个确定的地方去。这就是ARP(Address Resolution Protocol,地址解析协议)。
讲到此处,我们可以在命令行窗口中,输入
  arp –a
来看一下效果,类似于这样的条目
210.118.45.100   00-0b-5f-e6-c5-d7   dynamic
就是我们电脑里存储的关于IP地址与MAC地址的对应关系,dynamic表示是临时存储在ARP缓存中的条目,过一段时间就会超时被删除(xp/2003系统是2分钟)。
这样一来,比如我们的电脑要和一台机器比如210.118.45.1通信的时候,它会首先去检查arp缓存,查找是否有对应的arp条目,如果没有,它就会给这个以太网络发ARP请求包广播询问210.118.45.1的对应MAC地址,当然,网络中每台电脑都会收到这个请求包,但是它们发现210.118.45.1并非自己,就不会做出相应,而210.118.45.1就会给我们的电脑回复一个ARP应答包,告诉我们它的MAC地址是xx-xx-xx-xx-xx-xx,于是我们电脑的ARP缓存就会相应刷新,多了这么一条:
210.118.45.1   xx-xx-xx-xx-xx-xx   dynamic
为什么要有这么一个ARP缓存呢,试想一下如果没有缓存,我们每发一个IP包都要发个广播查询地址,岂不是又浪费带宽又浪费资源?
  而且我们的网络设备是无法识别ARP包的真伪的,如果我们按照ARP的格式来发送数据包,只要信息有效计算机就会根据包中的内容做相应的反应.
试想一下,如果我们按照ARP响应包的相应的内容来刷新自己的ARP缓存中的列表,嘿嘿,那我们岂不是可以根据这点在没有安全防范的网络中玩些ARP包的小把戏了?在后面的文章里我就手把手来教你们如何填充发送ARP包,不过先别急,我们再继续学点基础知识^_^
2.ARP包的格式
  既然我们要来做一个我们自己的ARP包,当然首先要学习一下ARP包的格式。
  从网络底层看来,一个ARP包是分为两个部分的,前面一个是物理帧头,后面一个才是ARP帧。
      首先,物理帧头,它将存在于任何一个协议数据包的前面,我们称之为DLC Header,因为这个帧头是在数据链路层构造的,并且其主要内容为收发双方的物理地址,以便硬件设备识别。
DLC Header
字段
长度(Byte)
默认值
备注
接收方MAC
6
广播时,为 ff-ff-ff-ff-ff-ff
发送方MAC
6
Ethertype
2
0x0806
0x0806是ARP帧的类型值
                  图1 物理帧头格式
  图1是需要我们填充的物理帧头的格式,我们可以看到需要我们填充的仅仅是发送端和接收端的物理地址罢了,是不是很简单呢?
    接下来我们看一下ARP帧的格式.
ARP Frame
字段
长度(Byte)
默认值
备注
硬件类型
2
0x1
以太网类型值
上层协议类型
2
0x0800
上层协议为IP协议
MAC地址长度
1
0x6
以太网MAC地址长度为 6
IP地址长度
1
0x4
IP地址长度为 4
操作码
2
0x1表示ARP请求包,0x2表示应答包
发送方MAC
6
发送方IP
4
接收方MAC
6
接收方IP
4
填充数据
18
因为物理帧最小长度为64字节,前面的42字节再加上4个CRC校验字节,还差18个字节
                  图2 ARP帧格式
我们可以看到需要我们填充的同样也只是MAC,IP,再加上一个1或2的操作码而已。
3.ARP包的填充
1) 请求包的填充:
  比如我们的电脑MAC地址为 aa-aa-aa-aa-aa-aa,IP为 192.168.0.1
我们想要查询 192.168.0.99的MAC地址,应该怎么来做呢?
  首先填充DLC Header,通过前面的学习我们知道,想要知道某个计算机对应的MAC地址是要给全网发送广播的,所以接收方MAC肯定是 ffffffffffff,发送方MAC当然是自己啦,于是我们的DLC Header就填充完成了,如图,加粗的是我们要手动输入的值(当然我编的程序比较智能,会根据你选择的ARP包类型帮你自动填入一些字段,你一用便知^_^)。
DLC Header
字段
长度(Byte)
填充值
接收方MAC
6
ffffffffffff
发送方MAC
6
aaaaaaaaaaaa
Ethertype
2
0x0806
图3 ARP请求包中 DLC Header内容
  接下来是ARP帧,请求包的操作码当然是 1,发送方的MAC以及IP当然填入我们自己的,然后要注意一下,这里的接收方IP填入我们要查询的那个IP地址,就是192.168.0.99了,而接收方MAC填入任意值就行,不起作用,于是,如图,
                  ARP Frame
字段
长度(Byte)
填充值
硬件类型
2
1
上层协议类型
2
0800
MAC地址长度
1
6
IP地址长度
1
4
操作码
2
1
发送方MAC
6
aaaaaaaaaaaa
发送方IP
4
192.168.0.1
接收方MAC
6
任意值 xxxxxxxxxxxx
接收方IP
4
192.168.0.99
填充数据
18
0
          图4 ARP请求包中 ARP帧的内容
  如果我?****乖煲桓稣庋陌⑺统鋈ィ绻?192.168.0.99存在且是活动的,我们马上就会收到一个192.168.0.99发来的一个响应包,我们可以查看一下我们的ARP缓存列表,是不是多了一项类似这样的条目:      
    192.168.0.99             bb-bb-bb-bb-bb-bb
  是不是很神奇呢?
  我们再来看一下ARP响应包的构造
2) 响应包的填充
  有了前面详细的解说,你肯定就能自己说出响应包的填充方法来了吧,所以我就不细说了,列两个表就好了
  比如说给 192.168.0.99(MAC为 bb-bb-bb-bb-bb-bb)发一个ARP响应包,告诉它我们的MAC地址为 aa-aa-aa-aa-aa-aa,就是如此来填充各个字段
DLC Header
字段
长度(Byte)
填充值
接收方MAC
6
bbbbbbbbbbbb
发送方MAC
6
aaaaaaaaaaaa
Ethertype
2
0x0806
        图5 ARP响应包中 DLC Header内容
ARP Frame
字段
长度(Byte)
填充值
硬件类型
2
1
上层协议类型
2
0800
MAC地址长度
1
6
IP地址长度
1
4
操作码
2
2
发送方MAC
6
aaaaaaaaaaaa
发送方IP
4
192.168.0.1
接收方MAC
6
bbbbbbbbbbbb
接收方IP
4
192.168.0.99
填充数据
18
0
      图6 ARP响应包中 ARP帧的内容
  这样192.168.0.99的ARP缓存中就会多了一条关于我们192.168.0.1的地址映射。
  好了,终于到了编程实现它的时候了^_^
二. 发送ARP包的编程实现
1.     填充数据包
上面的那些关于ARP包各个字段的表格,对应在程序里就是结构体,对应于上面的表格,于是我们需要三个下面这样的结构体
// DLC Header
typedef struct tagDLCHeader              
{
  unsigned char     DesMAC[6];         /* destination HW addrress */
  unsigned char     SrcMAC[6];         /* source HW addresss */
  unsigned short   Ethertype;           /* ethernet type */
} DLCHEADER, *PDLCHEADER;
// ARP Frame
typedef struct tagARPFrame              
{
      unsigned short       HW_Type;       /* hardware address */
      unsigned short       Prot_Type;         /* protocol address */
      unsigned char     HW_Addr_Len;     /* length of hardware address */
      unsigned char     Prot_Addr_Len;       /* length of protocol address */
      unsigned short       Opcode;           /* ARP/RARP */
      unsigned char     Send_HW_Addr[6];   /* sender hardware address */
      unsigned long     Send_Prot_Addr;     /* sender protocol address */
      unsigned char     Targ_HW_Addr[6];   /* target hardware address */
      unsigned long     Targ_Prot_Addr;     /* target protocol address */
      unsigned char     padding[18];
} ARPFRAME, *PARPFRAME;
// ARP Packet = DLC header + ARP Frame
typedef struct tagARPPacket          
{
  DLCHEADER   dlcHeader;
  ARPFRAME     arpFrame;
} ARPPACKET, *PARPPACKET;
这些结构体一定能看懂吧,在程序中就是对号入座就好了
1.     填充数据包
下面我举个填充包头的例子,我首先定义个了一个转换字符的函数,如下
/****************************************************************************
*   Name & Params::
*         formatStrToMAC
*         (
*           c*****t LPSTR lpHWAddrStr : 用户输入的MAC地址字符串
*           unsigned char *HWAddr :   返回的MAC地址字符串(赋给数据包结构体)
*         )
*   Purpose:
*         将用户输入的MAC地址字符转成数据包结构体需要的格式
****************************************************************************/
void formatStrToMAC(c*****t LPSTR lpHWAddrStr, unsigned char *HWAddr)
{
    unsigned int i, index = 0, value, temp;
    unsigned char c;
    _strlwr(lpHWAddrStr);                                   // 转换成小写
    for (i = 0; i
  {
      c = *(lpHWAddrStr + i);
        if (( c>='0' && c='a' && c
      {
          if (c>='0' && c
          if (c>='a' && c
          if ( (index % 2) == 1 )
        {
            value = value*0x10 + temp;
            HWAddr[index/2] = value;
        }
        else value = temp;
        index++;
      }
          if (index == 12) break;
    }
}
// 开始填充各个字段
ARPPACKET ARPPacket;                                 // 定义ARPPACKET结构体变量
  memset(&ARPPacket, 0, sizeof(ARPPACKET));               // 数据包初始化
  formatStrToMAC(“DLC源MAC字符串”,ARPPacket.dlcHeader.SrcMAC);     // DLC帧头
  formatStrToMAC(“DLC目的MAC字符串”,ARPPacket.dlcHeader.DesMAC);
  formatStrToMAC(“ARP源MAC字符串”,ARPPacket.arpFrame.Send_HW_Addr); // 源MAC
  ARPPacket.arpFrame.Send_Prot_Addr = inet_addr(srcIP);         // 源IP
  formatStrToMAC(“ARP目的MAC字符串”,ARPPacket.arpFrame.Targ_HW_Addr); // 目的MAC
  ARPPacket.arpFrame.Targ_Prot_Addr = inet_addr(desIP);           // 目的IP
  
  ARPPacket.arpFrame.Opcode = ht*****((unsigned short)arpType);     // arp包类型
  
  // 自动填充的常量
  ARPPacket.dlcHeader.Ethertype = ht*****((unsigned short)0x0806); // DLC Header的以太网类型
  ARPPacket.arpFrame.HW_Type = ht*****((unsigned short)1);       // 硬件类型
  ARPPacket.arpFrame.Prot_Type = ht*****((unsigned short)0x0800);   // 上层协议类型
  ARPPacket.arpFrame.HW_Addr_Len = (unsigned char)6;           // MAC地址长度
  ARPPacket.arpFrame.Prot_Addr_Len = (unsigned char)4;           // IP地址长度
That’s all ! ^_^
填充完毕之后,我们需要做的就是把我们的ARPPACKET结构体发送出去
2.发送ARP数据包:
我们发送ARP包就要用到winpcap的api了,具体步骤及函数是这样的,为了简单易懂,我把错误处理的地方都去掉了,详见代码
/**********************************************************************
*   Name & Params::
*         SendARPPacket()
*   Purpose:
*         发送ARP数据包
*   Remarks:
*         用的是winpcap的api函数
***********************************************************************/
void SendARPPacket()
{
  char *AdapterDeviceName =GetCurAdapterName();   // 首先获得获得网卡名字
  lpAdapter = PacketOpenAdapter(AdapterDeviceName);   // 根据网卡名字打开网卡
  lpPacket = PacketAllocatePacket();           // 给PACKET结构指针分配内存
  PacketInitPacket(lpPacket, &ARPPacket, sizeof(ARPPacket)); //初始化PACKET结构指针
                              // 其中的ARPPacket就是我们先前填充的ARP包
  PacketSetNumWrites(lpAdapter, 1);           // 每次只发送一个包
  PacketSendPacket(lpAdapter, lpPacket, true)     // Send !!!!! ^_^
  PacketFreePacket(lpPacket);               // 释放资源
  PacketCloseAdapter(lpAdapter);
}
呵呵,至此,关于ARP包最关键的部分就讲完了,你现在就可以来随心所欲的发送自己的ARP包了
既然作为一篇“科普文章”,接下来我再讲一讲与整个项目有关的附加步骤以及说明
三.附加步骤以及说明
1. 如何在VC中使用winpcap驱动
    虽然winpcap开发包使用起来非常简便,但是前期准备工作还是要费一番功夫的,缺一不可。^_^
    首先就是要安装它的驱动程序了,可以到它的主页下载,更新很快的
  http://winpcap.polito.it/install/default.htm
  下载WinPcap auto-installer (driver +DLLs),直接安装就好了,或者我提供的代码包里面也有。
  希望以后用winpcap作开发的朋友,还需要下载 Developer's pack,解压即可。
  
    然后,需要设置我?****こ痰母郊影柯嘉颐窍略谼eveloper's pack开发包的Inclulde目录,连接器的附加依赖库设置为Developer's pack的lib目录。
    当然,因为我们的工作比较简单,就是借用winpcap发送数据包而已,所以只用从
winpcap开发包的include文件夹中,拷贝Packet32.h,到我们的工程来,并且包含它就可
以,但是要注意,Packet32.h本身还要包含一个Devioctl.h,也要一并拷贝进来,当然还有运
行库Packet.lib,一共就是需要拷贝3个文件了,如果加入库不用我多说了吧,在工程里面设
置,或者是在需要它的地方加入 #pragma comment(lib, "Packet.lib")了。
    整个项目其实可以分为四个部分,填充数据包、发送数据包、枚举系统网卡列表和
相关信息以及枚举系统ARP缓存列表,下面我再讲一下如何获得系统的网卡以及ARP列
表,这两个部分都要用到IP Helper的api,所以要包含以及库文件Iphlpapi.lib,
其实都是很简单的,只用寥寥几行就OK了
2.   枚举系统网卡以及信息
最好是先定义关于网卡信息的一个结构体,这样显得结构比较清晰
// 网卡信息
typedef struct tagAdapterInfo      
{
        char szDeviceName[128];       // 名字
        char szIPAddrStr[16];         // IP
        char szHWAddrStr[18];         // MAC
        DWORD dwIndex;             // 编号      
}INFO_ADAPTER, *PINFO_ADAPTER;
/*********************************************************************
*   Name & Params::
*         AddAdapInfoToList
*         (
*             CListCtrl& list : CARPPlayerDlg传入的list句柄
*         )
*   Purpose:
*         获得系统的网卡信息,并将其添加到list控件中
*   Remarks:
*         获得网卡IP及MAC用到了IpHelper api GetAdaptersInfo
******************************************************************/
void AddAdapInfoToList(CListCtrl& list)
{
  char tempChar;
  ULONG uListSize=1;
  PIP_ADAPTER_INFO pAdapter;       // 定义PIP_ADAPTER_INFO结构存储网卡信息
  int nAdapterIndex = 0;
  DWORD dwRet = GetAdaptersInfo((PIP_ADAPTER_INFO)&tempChar, &uListSize);//关键函数
  if (dwRet == ERROR_BUFFER_OVERFLOW)
  {
PIP_ADAPTER_INFO pAdapterListBuffer = (PIP_ADAPTER_INFO)new(char[uListSize]);
dwRet = GetAdaptersInfo(pAdapterListBuffer, &uListSize);
if (dwRet == ERROR_SUCCESS)
{
  pAdapter = pAdapterListBuffer;
  while (pAdapter)                               // 枚举网卡然后将相关条目添加到List中
  {
    // 网卡名字
      CString strTemp = pAdapter->AdapterName;              
      strTemp = "//Device//NPF_" + strTemp;                 // 加上前缀
      list.InsertItem(nAdapterIndex,strTemp);            
      strcpy(AdapterList[nAdapterIndex].szDeviceName,strTemp);
      // IP
      strcpy(AdapterList[nAdapterIndex].szIPAddrStr,
                                pAdapter->IpAddressList.IpAddress.String );
      list.SetItemText(nAdapterIndex,1,AdapterList[nAdapterIndex].szIPAddrStr);
      // MAC
      formatMACToStr( AdapterList[nAdapterIndex].szHWAddrStr, pAdapter->Address );
      list.SetItemText(nAdapterIndex,2,AdapterLis[nAdapterIndex].szHWAddrStr);
      // 网卡编号
      AdapterList[nAdapterIndex].dwIndex = pAdapter->Index;      
      pAdapter = pAdapter->Next;
      nAdapterIndex ++;
      }
  delete pAdapterListBuffer;
  }
}
}
2)获取ARP条目列表
// ARP条目信息
typedef struct tagARPInfo        
{
  char szIPAddrStr[16];         // IP
  char szHWAddrStr[18];         // MAC
  DWORD dwType;               // 类型
}INFO_ARP, *PINFO_ARP;
/**********************************************************************
*   Name & Params::
*         AddARPInfoToList
*         (
*             CListCtrl& list :         CARPPlayerDlg传入的list句柄
*             c*****t short nAdapterIndex :   用户选中的网卡编号
*         )
*   Purpose:
*         读入系统的ARP缓存列表,.并添加到对话框中
*   Remarks:
*         用到了IpHelper api GetIpNetTable
*         而且用到了WinSock的api,所以要包含
*****************************************************************/
void AddARPInfoToList(CListCtrl& list,c*****t short nAdapterIndex)
{
  char tempChar;
  DWORD dwListSize = 1;
  DWORD dwRet;
  in_addr inaddr;
  list.DeleteAllItems();
  dwRet = GetIpNetTable((PMIB_IPNETTABLE)&tempChar, &dwListSize, TRUE); // 关键函数
  if (dwRet == ERROR_INSUFFICIENT_BUFFER)
  {
      PMIB_IPNETTABLE pIpNetTable = (PMIB_IPNETTABLE)new(char[dwListSize]);
      dwRet = GetIpNetTable(pIpNetTable, &dwListSize, TRUE);
      if (dwRet == ERROR_SUCCESS)
      {
        for (int i=0; idwNumEntries; i++)
        {
            // IP
            inaddr.S_un.S_addr = pIpNetTable->table.dwAddr;
            strcpy( ARPList.szIPAddrStr, inet_ntoa(inaddr) );  
            // MAC
            formatMACToStr( ARPList.szHWAddrStr, pIpNetTable->table.bPhysAddr );
            // Type
            ARPList.dwType = pIpNetTable->table.dwType;      
            if (AdapterList[nAdapterIndex].dwIndex != pIpNetTable->table.dwIndex)                                     continue;
            list.InsertItem(i,ARPList.szIPAddrStr);
            list.SetItemText(i,1,ARPList.szHWAddrStr);
            switch(ARPList.dwType) {       // 根据type的值来转换成字符显示
            case 3:
              list.SetItemText(i,2,"Dynamic");
              break;
            case 4:
              list.SetItemText(i,2,"Static");
              break;
            case 1:
              list.SetItemText(i,2,"Invalid");
            default:
              list.SetItemText(i,2,"Other");
            }
        }
      }
      delete pIpNetTable;
  }
}
    这样一来,我们基本上大功告成了,其他还有一些东西在这里就不讲了,大家可以下载我的代码看看就好了。
    下面我们来用ARP包玩一些小把戏 ^_^。
四.ARP包的游戏
既然我们可以自己来填充数据包,那么来玩些ARP的“小游戏”欺骗就是易如反掌了,当然,是在没有安全防护的网络里 ,比如只有hub或者交换机把你们相连,而没有路由分段……^_^
下面我就由浅入深的讲一些介绍一些关于ARP的小伎俩。
1. 小伎俩
1)     你可以试着发一个请求包广播,其中的ARP帧里关于你的信息填成这样:
(为了节省篇幅,我只写需要特别指出的填充字段)
发送方MAC
6
随便乱填一个错误的
发送方IP
4
填上你的IP
  出现什么结果?是不是弹出一个IP地址冲突的提示?呵呵,同样的道理,如果发送方IP填成别人的,然后每隔1秒发一次………..-_-b
2)     比如你们都靠一个网关192.168.0.1 上网 ,如果你想让192.168.0.77 上不了网,就可以伪装成网关给192.168.0.77发一个错误的ARP响应包, like this
发送方MAC
6
随便乱填一个错误的
发送方IP
4
网关IP 192.168.0.1
接收方就填192.168.0.77的相关信息,发送之后,它还能上网不?
这样能折腾他好一阵子了,只要它的系统得不到正确的到网关的ARP映射表它就一直上不了网了 ^_^
      呵呵类似的伎俩还有很多,不过只停留在这点东西上也没什么意思,还是看看稍微高深一点的吧^_^
    2.     ARP欺骗
因为在以太网里,网络设备就是靠MAC信息来识别的计算机的,比如A电脑知道MAC地址为22-22-22-22-22-22的电脑是B,而如果我给A发送一个ARP响应包,告诉它我的MAC是22-22-22-22-22-22的话,A同样会认为我的计算机是B了,那么好,我们设想有这么一个环境,
A的防火墙只对IP为192.168.0.2 MAC为 22-22-22-22-22-22的B有信任关系,而且A打开了21端口提供FTP服务,正常情况下因为防火墙的缘故我们的计算机是连不到A的,
于是我们想办法让B down掉,或者在它关机的时候,我们把我们的IP改成B的192.168.0.2,然后给A发送一个ARP回应包,告诉A更新一下ARP缓存列表,192.168.0.2的IP映射到我们的
MAC地址上来,于是,奇迹出现了,我们可以连到A的FTP上了,防火墙失效了^_^
不过这个办法只能在同网段内生效,如果我们和A不在一个网段内,那就要复杂的多了,还要配合ICMP的重定向来控制报文的路由,这个我准备在以后阐述ICMP包的时候, 详细讲解,就不再此多说了。
  3.     基于ARP欺骗的*****原理
*****的技术有很多了,不过我们常用的sniffer工具只能在基于hub的网络中起作用,碰到哪怕是交换机都无能为力了,这个时候我们的ARP欺骗技术就派上用场了。
还是假设有三台主机A,B,还有我们的主机,位于同一个交换式局域网中
A与B正在通信,如果我们想要刺探A――>B通信的内容,于是我们就可以给A发送一个伪造的ARP回应包,告诉A,B的IP对应的MAC条目为我们的MAC地址,于是,A也就会相应的刷新自己的ARP缓存,将发给B的数据,源源不断的发送到我们的主机上来,这样我就可以对接收到的数据包进行分析就好了,达到了*****的目的。当然,因为动态ARP缓存是动态的,有超时时间的,所以我们必须每隔一段时间就给A发送一个ARP回应包
虽然我们这样达到了目的, ,但是A到B的通信却被停止了,为了不让B发现,我们还要对每次接收到的数据包进行转发,全部都转发给B,这样就天衣无缝了^_^
同样的,如果我们还想*****B à A的数据包,一样给B发一个ARP回应包,告诉B,A的IP对应的MAC是我们的主机MAC,于是B到A的数据包也源源不断的发到我们的主机上来了,当然我们也是一样要对这些数据包进行转发,如图:
A   我们的主机     B
一切都无误的话,A和B的通信内容就这样不知不觉的被我们*****到了^_^
具体的代码实现由于篇幅的关系我就不放在这里讲了,如果需要我就专门另写篇文章附上完整代码吧
至此,我们的ARP基础知识就讲完了,但愿您能从中有所收获
后记:
因为本人开发都是使用VC++.net 2003,所以没有安装.net的朋友是打不开工程的,可以试一下vckbase上的工程转换工具,本人没有试过,不保证有效
        http://www.vckbase.com/tools/assist/prjconverter.rar
而且本文的代码使用了winpcap开发包,是要另外安装ainpcap驱动。
读者可以安装我代码包里的驱动,不过它更新很快,可以到它主页上去下载最新版本
    http://winpcap.polito.it/install/default.htm
  不做开发的读者,只用下载并安装这个就可以了WinPcap auto-installer (driver +DLLs)
  我的原文及源码下载地址稍后贴出,请关注本帖^_^
希望对大家有所帮助。我不知道论坛上有没有人发过,有的话就不用下了,
 

sulf85102008-12-12 11:40
ARP病毒入侵原理和解决方案

【故障原因】
  局域网内有人使用ARP欺骗的木马程序(比如:传奇*****的软件,某些传奇*****中也被恶意加载了此程序)。
  【故障原理】
  要了解故障原理,我们先来了解一下ARP协议。
  在局域网中,通过ARP协议来完成IP地址转换为第二层物理地址(即MAC地址)的。ARP协议对网络安全具有重要的意义。通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞。
  ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
  每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的,如下表所示。  
  主机 IP地址 MAC地址
  A 192.168.16.1 aa-aa-aa-aa-aa-aa
  B 192.168.16.2 bb-bb-bb-bb-bb-bb
  C 192.168.16.3 cc-cc-cc-cc-cc-cc
  D 192.168.16.4 dd-dd-dd-dd-dd-dd  
  我们以主机A(192.168.16.1)向主机B(192.168.16.2)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播,目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.16.2的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应:“192.168.16.2的MAC地址是bb-bb-bb-bb-bb-bb”。这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。
  从上面可以看出,ARP协议的基础就是信任局域网内所有的人,那么就很容易实现在以太网上的ARP欺骗。对目标A进行欺骗,A去Ping主机C却发送到了DD-DD-DD-DD-DD-DD这个地址上。如果进行欺骗的时候,把C的MAC地址骗为DD-DD-DD-DD-DD-DD,于是A发送到C上的数据包都变成发送给D的了。这不正好是D能够接收到A发送的数据包了么,嗅探成功。
  A对这个变化一点都没有意识到,但是接下来的事情就让A产生了怀疑。因为A和C连接不上了。D对接收到A发送给C的数据包可没有转交给C。
  做“man in the middle”,进行ARP重定向。打开D的IP转发功能,A发送过来的数据包,转发给C,好比一个路由器一样。不过,假如D发送ICMP重定向的话就中断了整个计划。
  D直接进行整个包的修改转发,捕获到A发送给C的数据包,全部进行修改后再转发给C,而C接收到的数据包完全认为是从A发送来的。不过,C发送的数据包又直接传递给A,倘若再次进行对C的ARP欺骗。现在D就完全成为A与C的中间桥梁了,对于A和C之间的通讯就可以了如指掌了。
  【故障现象】
  当局域网内某台主机运行ARP欺骗的木马程序时,会欺骗局域网内所有主机和路由器,让所有上网的流量必须经过病毒主机。其他用户原来直接通过路由器上网现在转由通过病毒主机上网,切换的时候用户会断一次线。
  切换到病毒主机上网后,如果用户已经登陆了传奇服务器,那么病毒主机就会经常伪造断线的假像,那么用户就得重新登录传奇服务器,这样病毒主机就可以*****了。
  由于ARP欺骗的木马程序发作的时候会发出大量的数据包导致局域网通讯拥塞以及其自身处理能力的限制,用户会感觉上网速度越来越慢。当ARP欺骗的木马程序停止运行时,用户会恢复从路由器上网,切换过程中用户会再断一次线。
  【HiPER用户快速发现ARP欺骗木马】
  在路由器的“系统历史记录”中看到大量如下的信息(440以后的路由器软件版本中才有此提示):
  MAC Chged 10.128.103.124
  MAC Old 00:01:6c:36:d1:7f
  MAC New 00:05:5d:60:c7:18
  这个消息代表了用户的MAC地址发生了变化,在ARP欺骗木马开始运行的时候,局域网所有主机的MAC地址更新为病毒主机的MAC地址(即所有信息的MAC New地址都一致为病毒主机的MAC地址),同时在路由器的“用户统计”中看到所有用户的MAC地址信息都一样。
  如果是在路由器的“系统历史记录”中看到大量MAC Old地址都一致,则说明局域网内曾经出现过ARP欺骗(ARP欺骗的木马程序停止运行时,主机在路由器上恢复其真实的MAC地址)。
  【在局域网内查找病毒主机】
  在上面我们已经知道了使用ARP欺骗木马的主机的MAC地址,那么我们就可以使用NBTSCAN(下载地址:http://www.utt.com.cn/upload/nbtscan.rar)工具来快速查找它。
  NBTSCAN可以取到PC的真实IP地址和MAC地址,如果有”传奇木马”在做怪,可以找到装有木马的PC的IP/和MAC地址。
  命令:“nbtscan -r 192.168.16.0/24”(搜索整个192.168.16.0/24网段, 即
  192.168.16.1-192.168.16.254);或“nbtscan 192.168.16.25-137”搜索192.168.16.25-137 网段,即192.168.16.25-192.168.16.137。输出结果第一列是IP地址,最后一列是MAC地址。
  NBTSCAN的使用范例:
  假设查找一台MAC地址为“000d870d585f”的病毒主机。
  1)将压缩包中的nbtscan.exe 和cygwin1.dll解压缩放到c:下。
  2)在Windows开始—运行—打开,输入cmd(windows98输入“command”),在出现的DOS窗口中输入:C:
btscan -r 192.168.16.1/24(这里需要根据用户实际网段输入),回车。  
  C

ocuments and SettingsALAN>C:
btscan -r 192.168.16.1/24
  Warning: -r option not supported under Windows. Running without it.  
  Doing NBT name scan for addresses from 192.168.16.1/24  
  IP address NetBIOS Name Server User MAC address
  ------------------------------------------------------------------------------
  192.168.16.0 Sendto failed: Cannot assign requested address
  192.168.16.50 SERVER 00-e0-4c-4d-96-c6
  192.168.16.111 LLF ADMINISTRATOR 00-22-55-66-77-88
  192.168.16.121 UTT-HIPER 00-0d-87-26-7d-78
  192.168.16.175 JC 00-07-95-e0-7c-d7
  192.168.16.223 test123 test123 00-0d-87-0d-58-5f  
  3)通过查询IP--MAC对应表,查出“000d870d585f”的病毒主机的IP地址为“192.168.16.223”。
  【解决思路】
  1、不要把你的网络安全信任关系建立在IP基础上或MAC基础上,(rarp同样存在欺骗的问题),理想的关系应该建立在IP+MAC基础上。
  2、设置静态的MAC-->IP对应表,不要让主机刷新你设定好的转换表。
  3、除非很有必要,否则停止使用ARP,将ARP做为永久条目保存在对应表中。
  4、使用ARP服务器。通过该服务器查找自己的ARP转换表来响应其他机器的ARP广播。确保这台ARP服务器不被黑。
  5、使用""proxy""代理IP的传输。
  6、使用硬件屏蔽主机。设置好你的路由,确保IP地址能到达合法的路径。(静态配置路由ARP条目),注意,使用交换集线器和网桥无法阻止ARP欺骗。
  7、管理员定期用响应的IP包中获得一个rarp请求,然后检查ARP响应的真实性。
  8、管理员定期轮询,检查主机上的ARP缓存。
  9、使用防火墙连续监控网络。注意有使用SNMP的情况下,ARP的欺骗有可能导致陷阱包丢失。
【HiPER用户的解决方案】
  建议用户采用双向绑定的方法解决并且防止ARP欺骗。
  1、在PC上绑定路由器的IP和MAC地址:
  1)首先,获得路由器的内网的MAC地址(例如HiPER网关地址192.168.16.254的MAC地址为0022aa0022aa局域网端口MAC地址>)。
  2)编写一个批处理文件rarp.bat内容如下:
  @echo off
  arp -d
  arp -s 192.168.16.254 00-22-aa-00-22-aa
  将文件中的网关IP地址和MAC地址更改为您自己的网关IP地址和MAC地址即可。
  将这个批处理软件拖到“windows--开始--程序--启动”中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息