设为首页收藏本站

LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区!

 找回密码
 注册

QQ登录

只需一步,快速开始

#公告#抱歉,网站已关闭,不再开放。PC时代已远逝,拥抱云原生时代,拥抱k8s,请移步:https://www.v2k8s.com

学习是一种信仰!分享是一种快乐!能力= 心态 * 沟通 * 知识 (你的每一天需要正能量!)

 网站的发展需要你贡献一份力量!希望你能每天坚持看贴1小时,并回答网友的问题!祝你在浏览论坛的过程中取得进步!谢谢!linuxtone加油!大家加油! 友情提示: 你今天学习了吗?你今天进步了吗?少一点抱怨!多一点进步!Life is short ! Why not linuxtone ?  

网站的发展、感谢每位坛友的努力!

查看: 52686|回复: 38

[系统安全] linux下防御arp攻击的策略   [复制链接]

LT管理团队

社区首席勤杂工

Rank: 9Rank: 9Rank: 9

签到
476
注册时间
2008-5-19
最后登录
2021-2-28
在线时间
1946 小时
阅读权限
200
积分
59491
帖子
2551
主题
1209
精华
25
UID
1

LT总司令

发表于 2008-5-25 23:17:57 |显示全部楼层
最近朋友服务器每天经常遭遇arp病毒攻击导致网站无法正常运营,问我有没有好的解决策略,经过google了一番尝试了一下终于得到了解决方案,并找出感染病毒的机器为一台windows机器通知机房,并在本机做好防御策略,问题得到了很好的解决,在这个过程中得到了cuci的热心帮助,在此表示感谢!好了!话不多说具体操作方法如下:

1./*找出ARP攻击的机器*/
获取同一网段下所有机器MAC地址的办法
         
机房有机器中毒,发arp包,通过arpspoof虽然可以解决,也可以找到中毒机器的mac地址,但在机房设备不足的情况下,很难查到mac地址对应的IP。然后我们可以通过一个循环,使用arping来对整个子网下面的机器发一个包,这样就可以在arp下面查看到相应的mac缓存,进而得到对

应的IP地址。
  1. #!/bin/sh
  2. #感谢作者:吴洪声
  3. for ((i = 1; i < 254; i++))
  4. do
  5. arping -I eth0 60.191.82.$i -c 1
  6. done
  7. arp -a > mac_table
复制代码
脚本跑完后,查看当前目录生成的mac_table。
#arp -a 查找你中毒时网关的MAC地址,并记录下来在mac_table里寻找到相对应的机器,仍后就可以找出那台机器感染了ARP病毒。


2./*使用arpspoof抵御ARP攻击*/
#提供方案原创者:yk103,在此表示感谢!
先安装libnet
http://www.packetfactory.net/libnet/dist/libnet.tar.gz
tar -xvzf libnet.tar.gz
cd libnet
./configure
make
make install

安装arpoison
http://www.arpoison.net/arpoison-0.6.tar.gz
tar -xvzf arpoison-0.6.tar.gz
cd arpoison
gcc arpoison.c /usr/lib/libnet.a -o arpoison
mv arpoison /usr/sbin

编写arpDefend.sh脚本.
  1. #!bash
  2. #arpDefend.sh
  3. #yk103
  4. #网关mac地址
  5. GATEWAY_MAC=00:11:BB:A5:D2:40
  6. #目的mac地址
  7. DEST_MAC=ff:ff:ff:ff:ff:ff
  8. #目的ip地址(网段广播地址)
  9. DEST_IP=60.191.82.254

  10. #本地网卡接口
  11. INTERFACE=eth0
  12. #$INTERFACE的mac地址
  13. MY_MAC=00:30:48:33:F0:BA
  14. #$INTERFACE的ip地址
  15. MY_IP=60.191.82.247

  16. #在本机建立静态ip/mac入口 $DEST_IP--$GATEWAY_MAC
  17. arp -s $DEST_IP $GATEWAY_MAC

  18. #发送arp reply ,使$DEST_IP更新$MY_IP的mac地址为$MY_MAC
  19. arpoison -i $INTERFACE -d $DEST_IP -s $MY_IP -t $DEST_MAC -r $MY_MAC 1>/dev/null &
复制代码
&amp;lt;-sina_sign,1762622645,2a5b1a59,10-&amp;gt;感谢大家对linuxtone的支持!&amp;lt;/strong&amp;gt;

Rank: 2

注册时间
2008-6-1
最后登录
2009-11-18
在线时间
18 小时
阅读权限
20
积分
114
帖子
17
主题
7
精华
3
UID
34
发表于 2008-8-12 11:53:10 |显示全部楼层
#!/bin/sh
#感谢作者:吴洪声
for ((i = 1; i < 254; i++))                   这里应该改为255保险点
do
arping -I eth0 60.191.82.$i -c 1
done
arp -a > mac_table

使用道具 举报

Rank: 7Rank: 7Rank: 7

注册时间
2008-9-3
最后登录
2008-9-9
在线时间
2 小时
阅读权限
100
积分
47
帖子
13
主题
0
精华
0
UID
244
发表于 2008-9-3 16:20:04 |显示全部楼层
内核一样,只是shell环境可能有些差别,
在ubuntu下应改成这样才能运行

  1. #!/bin/bash
  2. #感谢作者:吴洪声
  3. for ((i = 1; i < 254; i++))
  4. do
  5. arping -I eth0 60.191.82.$i -c 1
  6. done
  7. arp -a > mac_table
复制代码

使用道具 举报

Rank: 7Rank: 7Rank: 7

注册时间
2008-9-3
最后登录
2008-9-9
在线时间
2 小时
阅读权限
100
积分
47
帖子
13
主题
0
精华
0
UID
244
发表于 2008-9-3 16:35:44 |显示全部楼层

  1. Usage: -i device -d dest_IP -s src_IP -t target_MAC -r src_MAC [-a] [-w time between packets] [-n number to send]
  2. 示例:arpoison -i eth0 -d 172.16.18.254 -s 172.16.18.19 -t ff:ff:ff:ff:ff:ff -r 00:11:09:E8:78:DD   
复制代码
-i eth0 指定发送arp包的网卡接口eth0
-d 172.16.18.254 指定目的ip为172.16.18.254
-s 172.16.18.19  指定源ip为172.16.18.19
-t ff:ff:ff:ff:ff:ff 指定目的mac地址为ff:ff:ff:ff:ff:ff(arp广播地址)
-r 00:11:09:E8:C8:ED  指定源mac地址为00:11:09:E8:C8:ED

使用道具 举报

Rank: 7Rank: 7Rank: 7

注册时间
2008-9-3
最后登录
2008-9-9
在线时间
2 小时
阅读权限
100
积分
47
帖子
13
主题
0
精华
0
UID
244
发表于 2008-9-3 16:50:44 |显示全部楼层
arp协议不是主动更新的协议,属于被动更新的协议,如果ARP表中有错误的ARP地址,会一直向错误的地址来发送消息,除非有两种情况下会更改,
一.是当你的ARP表中没有相应的MAC地址,会发广播去寻找你要到达的目的地址;
二.是你收到广播IP与MAC地址发生变化,会有相应的更改,一般这就是ARP欺骗的手法.
所以在用  arpoison 来修复时,应先把ARP攻击源隔离!

使用道具 举报

Rank: 7Rank: 7Rank: 7

注册时间
2008-9-3
最后登录
2008-9-9
在线时间
2 小时
阅读权限
100
积分
47
帖子
13
主题
0
精华
0
UID
244
发表于 2008-9-5 17:27:03 |显示全部楼层

再回一下!后续!快速的重复的MAC找出来!

找朋友研究了一个,上次说到生成了一个MAC_TABLE的一个文件里面存的是ARP表对吧,如果有重复的,怎么快速的把重复的找出来呢,让同事用C做了个小程序,在这里谢谢同事毛毛了!因为这个C是他做的,哈哈


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. char* mac_addr[1000];

  5. read_file(char* filename)
  6. {
  7. //fstream f_dir;
  8. FILE *file_stream = NULL;
  9. file_stream = fopen(filename, "r");
  10. if(file_stream == NULL)
  11. {
  12. printf("can not open file ! \n");
  13. return;
  14. }   
  15. //f_dir.open(filename,   ios::in |ios::out | ios::app);  
  16. int line_num=0;
  17. int i=0;
  18. int j=0;
  19. while(feof(file_stream) == 0)
  20.   {   
  21.    char * mac = malloc(256);
  22.    //f_dir.getline(charword,256);//读出文件中的一行
  23.    fgets(mac,255,file_stream);
  24.    //printf("line:%s\n",mac);
  25.    mac_addr[line_num]=mac;
  26.    line_num++;   
  27.   }
  28. line_num--;
  29. //printf("line num : %d \n",line_num);
  30. fclose(file_stream);
  31. for(i;i<line_num;i++)
  32. {
  33. for(j=i+1;j<line_num;j++)
  34. {
  35.   char mac_perline_1[18];
  36.   char mac_perline_2[18];
  37.   char * line_1 = mac_addr[i];
  38.   char * line_2 = mac_addr[j];
  39.   int position = 0;
  40.   int count = 0;
  41.   //printf("line_1:%s\n",line_1);
  42.   //printf("line_2:%s\n",line_2);
  43.   while(line_1[position]!='\n')
  44.   {
  45.    //printf("position:%d\n",position);
  46.    if(line_1[position]==' ')
  47.     {
  48.      count++;
  49.      if(count == 3)
  50.       {
  51.        //printf("befor copy \n");
  52.        memcpy(mac_perline_1,line_1+position+1,17);
  53.        //printf("bbbbb\n");
  54.        mac_perline_1[17]='\0';
  55.               //printf("mac addr1 %s\n",mac_perline_1);
  56.        break;
  57.       }     
  58.     }
  59.    position++;   
  60.   }
  61.   position = 0;
  62.   count = 0;
  63.   while(line_2[position]!='\n')
  64.   {
  65.    if(line_2[position]==' ')
  66.     {
  67.      count++;
  68.      if(count == 3)
  69.       {
  70.        memcpy(mac_perline_2,line_2+position+1,17);
  71.        mac_perline_2[17]='\0';
  72.               //printf("mac addr2 %s\n",mac_perline_2);
  73.        break;
  74.       }     
  75.     }
  76.    position++;   
  77.   }
  78.   if(strcmp(mac_perline_2,mac_perline_1)==0)
  79.    {
  80.     printf("same MAC_ADDR find in line %d and %d \n",i,j);
  81.     printf(" %s %s \n",mac_addr[i],mac_addr[j]);
  82.    }
  83. }
  84. }
  85. for(i=0;i<line_num+1;i++)
  86. {
  87.   free(mac_addr[i]);
  88. }
  89.   
  90. }
  91. main(int argc, char *argv[])
  92. {
  93.   int err, nargc, i;
  94.   if(argc<2)
  95.    {
  96.      printf("please input the filename\n");                        
  97.      return -1;
  98.    }
  99.          
  100.          
  101.   read_file(argv[1]);
  102.            
  103.   return 0;         
  104.          
  105.          
  106. }
复制代码
这个是原码,

下面说用法,

在附件里有一个叫file.c的文件,还有一个叫Makefile的文件,还有一个用来测试的mac_table,到时候把file.c 和Makefile放到同一个目录下,执行
  1. # make
复制代码
会生成一个mac的执行文件,用法就是在当前目录下执行MAC表文件就行了,比如在当前的目录下生成mac文件了,也有一个ARP表文件mac_table  执行

  1. #./mac mac_table
复制代码
就把重复MAC的那一行ARP表列出来了,能快速的知道那台电脑在发ARP广播,快速的找到中毒的电脑!!!


在此谢谢同事毛毛!!!

mac_addr.rar (1.51 KB, 下载次数: 37)

[ 本帖最后由 tang 于 2008-9-5 17:28 编辑 ]

使用道具 举报

LT管理团队

社区首席勤杂工

Rank: 9Rank: 9Rank: 9

注册时间
2008-5-19
最后登录
2021-2-28
在线时间
1946 小时
阅读权限
200
积分
59491
帖子
2551
主题
1209
精华
25
UID
1

LT总司令

发表于 2008-9-5 17:32:01 |显示全部楼层
:handshake :handshake  感谢唐兄分享!
&amp;lt;-sina_sign,1762622645,2a5b1a59,10-&amp;gt;感谢大家对linuxtone的支持!&amp;lt;/strong&amp;gt;

使用道具 举报

Rank: 7Rank: 7Rank: 7

注册时间
2008-9-3
最后登录
2008-9-9
在线时间
2 小时
阅读权限
100
积分
47
帖子
13
主题
0
精华
0
UID
244
发表于 2008-9-5 19:31:18 |显示全部楼层

总结!!希望是总结!!!

应linuxtone 所邀,做一下总结:

自己做了一个小文件做了一下改动,这一次如果你中了ARP攻击。这以使用附件里的小插件!

运行方法很简单!这样我发现我们更懒了!!!


  1. #tar zxvf mac.tar.gz
  2. #cd mac_addr
  3. #./arpping
复制代码


mac.tar.gz (4.01 KB, 下载次数: 57)
已有 1 人评分积分 收起 理由
linuxtone + 10 感谢分享!

总评分: 积分 + 10   查看全部评分

使用道具 举报

LT管理团队

社区首席勤杂工

Rank: 9Rank: 9Rank: 9

注册时间
2008-5-19
最后登录
2021-2-28
在线时间
1946 小时
阅读权限
200
积分
59491
帖子
2551
主题
1209
精华
25
UID
1

LT总司令

发表于 2008-9-5 19:56:55 |显示全部楼层

回复 8# tang 的帖子

感谢分享这么可爱的东西 !回头我测试一下:)
其实如何做一个优秀的SA,经理人,就要学会如何偷懒!所以懒惰并不是一件坏事情! 小小的改进,省去了更多的时间,效率更高了!
&amp;lt;-sina_sign,1762622645,2a5b1a59,10-&amp;gt;感谢大家对linuxtone的支持!&amp;lt;/strong&amp;gt;

使用道具 举报

Rank: 7Rank: 7Rank: 7

注册时间
2008-9-3
最后登录
2008-9-9
在线时间
2 小时
阅读权限
100
积分
47
帖子
13
主题
0
精华
0
UID
244
发表于 2008-9-9 13:07:21 |显示全部楼层

再更新一下,!!!

再更新一下,!!!

加了一点提示!!!
mac_addr.tar.gz (4.09 KB, 下载次数: 83)
已有 1 人评分积分 收起 理由
linuxtone + 10 非常感谢分享更新!

总评分: 积分 + 10   查看全部评分

使用道具 举报

LT管理团队

社区首席勤杂工

Rank: 9Rank: 9Rank: 9

注册时间
2008-5-19
最后登录
2021-2-28
在线时间
1946 小时
阅读权限
200
积分
59491
帖子
2551
主题
1209
精华
25
UID
1

LT总司令

发表于 2008-12-11 13:53:03 |显示全部楼层
用arping有时可以击退arp攻击:
/sbin/arping -c 次数 -s your_IP gateway_IP
&amp;lt;-sina_sign,1762622645,2a5b1a59,10-&amp;gt;感谢大家对linuxtone的支持!&amp;lt;/strong&amp;gt;

使用道具 举报

LT技术团队

秋意浓

Rank: 7Rank: 7Rank: 7

注册时间
2008-5-27
最后登录
2012-11-19
在线时间
93 小时
阅读权限
100
积分
418
帖子
56
主题
7
精华
0
UID
21
发表于 2008-12-29 18:03:10 |显示全部楼层
ARP确实不断进步,总体感受,ARP一定要做双向(网关与上层网关)绑定。

使用道具 举报

Rank: 2

注册时间
2008-12-31
最后登录
2010-5-4
在线时间
23 小时
阅读权限
20
积分
80
帖子
63
主题
6
精华
0
UID
810

LT粉丝

发表于 2009-1-12 11:31:13 |显示全部楼层
漂过、、、
Simple world Simple life!~

使用道具 举报

Rank: 7Rank: 7Rank: 7

注册时间
2008-8-15
最后登录
2013-1-4
在线时间
48 小时
阅读权限
100
积分
3384
帖子
48
主题
14
精华
0
UID
208
发表于 2009-1-18 19:54:20 |显示全部楼层
具体怎么用呢

使用道具 举报

Rank: 1

注册时间
2009-2-28
最后登录
2020-7-8
在线时间
19 小时
阅读权限
1
积分
21
帖子
41
主题
10
精华
0
UID
1643
发表于 2009-3-13 18:01:56 |显示全部楼层
没看明白,能否讲一下原理呢?

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

IT运维专家网感谢您的支持

合作联系: QQ:67888954/MSN:cnseek@msn.com/mail:netseek@linuxtone.org

Archiver|手机版|感谢所有关心和支持过LinuxTone的朋友们 转载本站内容请注明原作者名及出处 ( 京ICP备08103151 )   |

GMT+8, 2021-9-28 04:14 , Processed in 0.033327 second(s), 17 queries , Apc On.

Powered by Discuz! X2 Licensed

© 2001-2011 Comsenz Inc.

回顶部