Thursday 20 February 2014

电脑小白基础知识 - 如何保护自己免受 ARP 欺骗攻击

ARP 欺骗攻击 (英文叫 ARP spoofing), 只要在同一个局域网, 比如说公司之类的, 都有 ARP 攻击的可能。

这种攻击已经是老掉牙了, 但是仍然有很多电脑小白不懂得如何保护自己。

先让我展示实战的例子(例子中的 IP 和 MAC 地址是虚构的) 。



如何盗取 Youtube Cookies:

1.
假设我的 IP  是 192.168.1.21, MAC 地址是 1e:3a:13:b2:ee:22


假设受害者的 IP  是 192.168.1.50


 假设 Gateway 的 IP  是 192.168.1.7




2.
使用 arpspoof 命令, 不停的跟 Gateway(192.168.1.7) 说, 192.168.1.50(受害者的 IP) 是在(is-at1e:3a:13:b2:ee:22 MAC 地址, 其实根本就是我的 MAC 地址来的。因为想骗 Gateway 把所有寄去 192.168.1.50 的数据包传送给我。


arpspoof 下载安装请用 apt-get /yum install dsniff, 而不是 apt-get /yum install arpspoof 
* -t 是 target 的缩写, 其实我比较喜欢叫它 tell, 比较容易明白。
* 你的网卡名可能不叫 eth0, 这时候就要加多 -i 网卡名。网卡名可以从 ifconfig 获取。
*至于上图的那个 a1:bc:12:d7:c2:a8, 就是 Gateway 192.168.1.7 IP 的 MAC 地址, 可以通过 arp -n 来查询到。




3.
其实我上面所讲的 arpspoof 192.168.1.50 -t 192.168.1.7 可有可无, 不是盗取 Youtube Cookies 的主角, 因为 Server 回应的不是没有Cookies就是加密的,  我们真正要做的 arpspoof 192.168.1.7 -t 192.168.1.50

如下图所示,我不停的跟 192.168.1.50(受害者的 IP)  说, Gateway(192.168.1.7) 是在(is-at) 1e:3a:13:b2:ee:22 MAC 地址, 其实根本就是我的 MAC 地址来的。因为想骗受害者把所有寄去 192.168.1.7 的数据包传送给我。


*12:3a:4a:5a:6b:7c 是受害者的MAC 地址。


4.
这时候有些攻击者忘了做这个 echo 1 > /proc/sys/net/ipv4/ip_forward (原本是0,  把 0 变成 1允许转送 ) 命令, 就会导致受害者上不到网。因为数据包送来你家地址, 你又不转送去原本要去的地址, 受害者当然上不到网。


*如果你是受害者,可以运行 arp -n, 就可以发现有个仆街的 MAC地址 跟 Gateway 的 MAC地址 一模一样, 明显在对你进行攻击, 不过只限于 -t 192.168.1.50。


*如果是 -t 192.168.1.7 的话, 是 Gateway 被骗, 不是你被骗,就要 Login 去 Gateway 那里看了。你可以运行 arpspoof 192.168.1.50 -t 192.168.1.7  跟那仆街拼过, 但似乎无意义
* 当然, 可以同时骗两边,  -t 192.168.1.7 -t 192.168.1.50


5.
我这时候会打开 Wireshark 网络嗅探器, 选左上角的我的网卡 eth0 开始跑后, 会很多 log, 必须输入 tcp.flags.push == 1 在 Filter 的格子里按 ENTER, 来过滤不重要的 log。



6.
受害者进入某个网页,




7.
有个 Youtube 的影片嵌入 (Embed) 在网页里。Youtube 本身有保护机制会强制性把 Youtube 的 link 从 http 重定向去 https。

如图所示,http://www.youtube.com/v/TJkmc8-eyvE?version=3&hl=en_US 301 Moved Permanetly重定向去 Response Headers 的 Location https://www.youtube.com/v/TJkmc8-eyvE?version=3&hl=en_US


http 重定向去 https 保护机制的出发点是好的, 但却避免不了重定向前的第一次请求就已经用未加密的 HTTP 协议送出 Cookie 。



8.
Wireshark 抓到的数据包。复制明文去慢慢研究。



我们只需要拿 SID 以及 HSID 两个 Cookie 就够了。
Cookie: VISITOR_INFO1_LIVE=xxx; demographics=xxx; YSC=xxx; SID=xxx; HSID=xxx; APISID=xxx; LOGIN_INFO=xxx; PREF=al=zh-CN&f1=50000000&fv=11.2.202
*不同的地方/service需要不同的Cookie, 并不意味着只需要 SID 和 HSID 就可以跑天下。

9.
随便试一下curl -vLk -e 'http://www.youtube.com/' -A 'Mozilla/5.0' --cookie 'SID=xxx;HSID=xxx' 'http://www.youtube.com/' > stalkeme


* 加上 Useragent 是良好的习惯, 不相信? 试下curl www.google.comcurl -A 'Mozilla/5.0' www.google.com 就懂我在讲什么了。



10.
打开 stalkeme(opps..写错字了 =.=), 成功进到受害者 Youtube 的页面。




Youtube 鼓励你们用 www.youtube-nocookie.com 来 embed, 就是为了区分有Login Cookie 和没有Login Cookie 的 domains (有点误导性, 并非完全没有Cookie) , 从而防止 Login 的 Cookie 在embed 的时候就传送。 当然, 这个只是减少受害者而已,无法根治。


* 可能你会问, 那 www.youtube-nocookie.com 能看私人影片吗? 当然能, 因为播放影片的 API 是隶属于 youtube.com, 而不是  youtube-nocookie.com。



如何保护自己:

1. 绑定命令: arp -s 192.168.1.7 a1:bc:12:d7:c2:a8 
有 了 Gateway 固定的地址后, 这样你就不会相信攻击者讲它才是 Gateway 的地址。可是这样做是不足够的, 如果你无法在 Gateway 那边绑定你的地址, 仍然允许 Gateway 被 攻击者骗。
* arp -d 192.168.1.7  可以删除。 重启网卡后也会删除, 所以会有一些文章讨论如何在启动网卡的时候运行绑定命令。



2.  利用 HSTS (HTTPS Strict Transport Security) 机制。

 这方法可以防范 sslstrip 进阶攻击 (把 https 转换回 http  的攻击, 名字也非常明确阐述它的攻击方法, ssl strip,  脱掉 ssl)。

 用 Google Chrome 打开 chrome://net-internals 地址, 选左上角的列表, 选 HSTS。




输入你要强迫用 HTTPS 的域名,比如说  youtube.com, 然后打勾 subdomain 也要(意思是说 www.youtube.com 或 m.youtube.com 也都在保护伞下),最后点击 Add 按钮就可以了。




如图所见, 你可以删除已经加上去的域名 (Delete domain), 也可以询问详情  (Query domain).




3. Logout gmail/Youtube 过后才游览 blogspot. 因为 blogspot 不支持 HTTPS . 如果你利用 HSTS 来强迫 blogspot,你就没办法打开 blogspot.。

如果是自己的 account , 比如说 www.blogspot.com, www.blogger.com, 或者其它网站也好, 请养成一种习惯, 输入 https:// 前缀。 比如说 https://www.blogspot.com





干杯 :)



















No comments:

Post a Comment