中间人攻击
定义
中间人攻击(Main-in-the-middle attack, 缩写: MITM)是指攻击与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制,在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容
从攻击这的攻击方式可以分为一下几类
- 数据包嗅探
- 文明嗅探
- 接种中间人代理进行密文嗅探
- 数据注入
- CRIME 中的数据包中注入javascript代码实现攻击目的
- 数据流量劫持
- 使用IPTables工具对数据包的IP地址进行强制重定向
- 数据包篡改
- DNS劫持中篡改DNS返回数据包的IP地址,达到DNS劫持的目的
ARP 投毒
ARP: 地址解析协议,即ARP(Address Resolution Protocol), 根据 **IP地址获取物理地址的一个TCP/IP协议
ARP欺骗的3种方式:
- 攻击者仅仅欺骗被攻击主机(单向)
- 攻击者仅仅欺骗被攻击主机,同时在本地进行Iptable NAT 转发(双向)
- 攻击者同时欺骗被攻击主机和网关(双向)
ARP 投毒 + 中间人伪造 SSL 证书攻击
SSL 证书中间人伪造攻击的思想如下:
- 攻击这对目标客户端和网关发送ARP投毒攻击,污染他们的ARP 缓存表
- 客户端在浏览器中输入 https://mail.google.com/ 的地址, 浏览器会尝试和https://mail.google.com/的443端口建立SSL连接,但是因为客户端受到了ARP投毒攻击,原本发往网关的数据包被发往了攻击者的主机
- 攻击者在本机使用 iptables将接收到443目的端口的数据包重定向到本机IP地址
- 这样,受到攻击者客户端的浏览器就只会和攻击者主机进行SSL连接
- 攻击者在本机使用监听443端口, 并且伪造一个假的SSL证书, 用于和客户端的连接,同时,提取客户端发送的数据包的原始目的IP地址, 用于和客户端原始请求的服务器建立另一个ssl连接
- 中间人攻击者在双向的SSL Socket 通信都建立完成后, 对两边的Socket进行数据读写同步,将数据通道打通, 使客户端的浏览器能够正常访问(受攻击者不会察觉到已经收到SSL中间人攻击)
- 在数据同步的同时没记录下明文数据,达到SSL中间人攻击的目的
ARP 投毒 + 中间人SSL 剥离攻击
SSL 剥离(SSLtrip)就是客户端的HTTPS 请求降级成HTTP请求, 阻止HTTP请求重定向成HTTPS
中间人SSL 剥离攻击思想如下:
- ARP 欺骗, 使得攻击者能截取所有目标主机的网络流量
- 攻击这利用用户对于地址栏中HTTPS和HTTP的疏忽,将所有的HTTPS连接都用HTTP来代替
- 同时,与目标服务器建立正常的HTTPS连接
- 由于HTTP通信是明文传输, 攻击者能轻松实施嗅探
- 受到攻击客户端与原始请求服务器之间的全部通信经过了代理转发
- 其中,出现的图标被替换成用户熟悉的“小黄锁”图标,以建立信任
- 这样,中间人攻击就成功骗取了密码,账号等信息,而受害者一无所知
这种漏洞发生的原因是:
- 大部分使用SSL的网站并非“全站加密”,仅对部分重要的网页使用SSL,这就给攻击者以可乘之机,可以简答理解为,网站在普通页面,非机密页面都是采用HTTP方式访问, 而在进入登陆页面的时候也采用HTTPS加密处理
- 大多数网站为了保证用户习惯的兼容性,都同时支持HTTP、HTTPS的访问,大多数情况下,这两种访问方式并没有太大的安全问题,但是当用户访问的页面涉及机密信息的登陆页面时,服务端往往会采用“重定向”的方式,“强制”用户的浏览器以HTTPS的方式来登陆页面,为的是保证密钥信息的安全传输
其中原因(2)是我们能够利用SSL Strip发动攻击的关键, 服务端为了“强制”用户以HTTPS方式进行登陆,会向浏览器返回重定向数据包,即“302 Moved Temporiarily”, 正常情况下,浏览器收到这个数据包之后,就会重新使用新的URL发起一个新的HTTPS连接,而SSL Strip 是就盯准了这个时机,当发现浏览器试图加密即采用https传输数据时, 他就适时的介入中间,充当代理作用,然后主机认为安全会话开始, 这是上文中被动加密的提示就不会出现,SSL Strip 也是通过https连接了安全的服务器, 那么所有用户到SSL Strip 的连接时 http,所有的传输数据就能被拦截
基于中间人攻击的SSL BEAST 攻击
关于BEAST 攻击, 我的大致理解如下
- SSL/TLS 中使用 “记录协议数据包”来封装上层的应用数据
- SSL/TLS 使用CBC 加密模式进行分组对称加密,并且不同“记录协议数据包”之间并不是独立的IV, 不同的数据包之间形成一个整体的CBC模式
- 中间人攻击可以在返回流量中注入javascript代码,根据攻击者已知的IV和Ciper,来穷举下一个数据中包含Cookie信息
基于DNS劫持的SET社会工程钓鱼攻击
DNS 劫持攻击是攻击者伪造的IP冒名顶替正常的DNS服务器的IP,让受攻击访问到假的服务器
基于中间人攻击的DNS劫持思路如下
- 发送中间人攻击,劫持目标客户端流量
- 进行DNS劫持,将http://www.jnrain.com 这个URL劫持到攻击者所在的本机上
- 目标客户端在访问http://www.jnrain.com的时候实际访问的是攻击者所在的服务器
- 攻击者在本机服务器上搭建一个钓鱼页面,对http://www.jnrain.com 进行高度仿真,并加入记录密码的代码
- 通过钓鱼页面直接获取目标客户端的账号、密码
基于中间人攻击的会话劫持攻击(Session Hajacking)
发送这种攻击方式的一个根本原因是“当前的HTTP环境采用Cookie当作一种连接状态的标识符”,即服务端根据Cookie来识别当前登陆用户的身份,对攻击者来说,如果能获取到这个Cookie值,等于也就获取了对应用户的“身份令牌”,即可以不需要账号,密码就以目标用户的身份合法登陆网站(XSS 攻击的目的)
“基于中间人攻击的会话劫持”属于前面说的“数据包流浪嗅探”类别,他的思路如下:
- 攻击者对目标客户端发送中间人攻击,劫持流浪
- 使用ferret 抓取web通信流量包
- 使用hamster对抓取的数据包进行重组, 分析,得出包含cookie信息的HTTP包
- 攻击者使用hamster 组合出的HTTP包进行重放, 以目标用户的身份登陆目标网站,达到会话劫持
一些预防方案
- 用可信的第三方CA厂商
- 不下载未知来源的证书,不要去下载一些不安全的文件
- 确认你访问的URL是https的,确保网站使用了SSL,确保禁用一些不安全的SSL,只开启TLS1.1, TLS1.2
- 不要使用公用网络发送一些铭感的信息
- 不要去点击一些不安全的连接或恶意链接或邮件信息