# 安全方面问题

# 1. SYN攻击、中间人攻击、SSL剥离、伪造证书攻击:请你说出解决方案?

# SYN攻击

SYN Flood是当前最流行的DoS(拒绝服务攻击)与DdoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。

原理: 在TCP连接的三次握手过程中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟),如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接会消耗非常多的CPU时间和内存,还要不断对这个列表中的IP进行SYN+ACK的重试.最后的结果往往是堆栈溢出崩溃.

应对方法:

  1. 缩短SYN Timeout时间: 由于SYN Flood攻击的效果取决于服务器上保持的SYN半连接数,这个值=SYN攻击的频度 x SYN Timeout,所以通过缩短从接收到SYN报文到确定这个报文无效并丢弃改连接的时间,例如设置为20秒以下(过低的SYN Timeout设置可能会影响客户的正常访问),可以成倍的降低服务器的负荷(缩短SYN Timeout时间仅在对方攻击频度不高的情况下生效)。

  2. 设置SYN Cookie: 就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被丢弃(SYN Cookie依赖于对方使用真实的IP地址,如果攻击者以数万/秒的速度发送SYN报文,同时利用SOCK_RAW随机改写IP报文中的源地址该方法失效)。

    linux下具体策略:proc/sys/net/ipv4/tcp_syncookies;tcp_syncookies是一个开关,是否打开 SYN Cookie功能,该功能可以防止部分SYN攻击。cp_synack_retries和tcp_syn_retries定义SYN的重试数 或增大半连接数:tcp_max_syn_backlog

  3. 为了应付这种攻击,现代Unix系统中普遍采用多连接队列处理的方式来缓冲这种攻击,是用一个基本队列处理正常的完全连接应用,用另一个队列单独存放半打开连接。这种双队列处理方式和其他一些系统内核措施(例如Syn-Cookies/Caches)联合应用时,能够比较有效的缓解小规模的SYN Flood攻击(事实证明<1000p/s),加大SYN队列长度可以容纳更多等待连接的网络连接数,所以对Server来说可以考虑增大该值。对于超过 128Mb 内存的系统,默认值是 1024 ,低于 128Mb 的则为 128。

# 中间人攻击

# 定义:

中间人攻击(英语:Man-in-the-middle attack,缩写:MITM)是指攻击者通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容。

从攻击者的攻击方式可以分为以下几类

1. 数据包嗅探
    1) 明文嗅探
    2) 借助中间人代理进行密文嗅探
2. 数据注入
    1) CRIME中在数据包中注入javascript代码实现攻击目的
3. 数据流量劫持
    1) 使用iptables工具对数据包的IP地址进行强制重定向
4. 数据包篡改
    1) DNS劫持中篡改DNS返回数据包的IP地址,达到DNS劫持的目的
1
2
3
4
5
6
7
8
9

# ARP投毒

ARP:地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。 ARP欺骗的3种方式:

  1. 攻击者仅仅欺骗被攻击主机(单向):
  2. 攻击者仅仅欺骗被攻击主机、同时在本地进行Iptable NAT转发(双向)
  3. 攻击者同时欺骗被攻击主机和网关(双向)

# ARP投毒+中间人伪造SSL证书攻击

SSL证书中间人伪造攻击的思路如下:

1. 攻击者对目标客户端和网关发送ARP投毒攻击,污染它们的ARP缓存表
2. 客户端在浏览器中输入"https://mail.google.com/"的网址,浏览器会尝试和"https://mail.google.com/"的443端口建立SSL连接,但是因为客户端受到了ARP投毒攻击,原本发往
网关的数据包被发往了攻击者的主机
3. 攻击者在本机使用iptables将接收到的443目的端口的数据包重定向到本机的IP地址
4. 这样,受攻击者客户端的浏览器就只会和攻击者主机进行SSL连接
5. 攻击者在本机使用监听443端口,并且伪造一个假的SSL证书,用于和客户端的连接,同时,提取客户端发送的数据包的原始目的IP地址,用于和客户端原始请求的服务器建立另一个SSL连接
6. 中间人攻击者在双向的SSL Socket通信都建立完成后,对两边的socket进行数据读写同步,将数据通道打通,使客户端的浏览器能够正常访问(受攻击者不会察觉到已经收到SSL中间人攻击)
6. 在数据同步的同时,记录下明文数据,达到SSL中间人攻击的目的
1
2
3
4
5
6
7
8

SSL证书伪造.jpeg

# ARP投毒+中间人SSL剥离攻击

SSL 剥离(SSLtrip)就是将客户端的 HTTPS 请求降级成 HTTP 请求,阻止 HTTP 请求重定向成 HTTPS   中间人SSL剥离攻击 思路如下:

1. ARP欺骗,使得攻击者能截获所有目标主机的网络流量
2. 攻击者利用用户对于地址栏中HTTPS与HTTP的疏忽,将所有的HTTPS连接都用HTTP来代替
3. 同时,与目标服务器建立正常的HTTPS连接
4. 由于HTTP通信是明文传输,攻击者能轻松实施嗅探
5. 受攻击客户端与原始请求服务器之间的全部通信经过了代理转发。 
6. 其中,出现的图标被替换成为用户熟悉的"小黄锁"图标,以建立信任。 
7. 这样,中间人攻击就成功骗取了密码、账号等信息,而受害者一无所知
1
2
3
4
5
6
7

这种漏洞发生的原因是:

1. 大部分使用SSL的网站并非"全站加密",仅对部分重要的网页使用SSL,这就给攻击者以可乘之机。可以简单地理解为:
网站在普通页面、非机密页面都是采用HTTP方式访问的,而在进入登录页面的时候才会采用HTTPS加密处理
2. 大多数网站为了保证用户习惯的兼容性,都同时支持HTTP、HTTPS的访问,大多数情况下,这两种访问方式并没有太大的安全问题,但是当用户访问的页面是涉及机密信息的登录页面时,
服务端往往会采用"重定向"的方式,"强制"用户的浏览器以HTTPS的方式来访问登录页面,为的是保证密钥信息的安全传输
1
2
3
4

其中原因(2)是我们能够利用SSLStrip发动攻击的关键,服务端为了"强制"用户以HTTPS方式进行登录,会向浏览器返回重定向数据包,即"302 Moved Temporarily",正常情况下,浏览器收到这个数据包之后,就会重新使用新的URL发起一个新的HTTPS连接。

而SSLStrip就是盯准了这个时机,当发现浏览器试图加密即采用https传输数据时,它就适时的介入中间,充当代理作用,然后主机认为安全会话开始,这是上文中的被动加密的提示就不会出现了,SSLstrip也通过https连接了安全服务器。那么所有用户到SSLstrip的连接时http,所有的传输数据就能被拦截 SSL剥离.jpeg

# 基于中间人攻击的SSL BEAST攻击

关于BEAST攻击,我的大概理解如下:

1. SSL/TLS中使用"记录协议数据包"来封装上层的应用数据
2. SSL/TLS使用CBC加密模式进行分组对称加密,并且不同"记录协议数据包"之间并不是独立的IV,不同的数据包之间形成一个整体的CBC模式
3. 中间人攻击者可以在返回流量中注入javascript代码,根据攻击者已知的IV和Ciper,来穷举出下一个数据包中包含的cookie信息
1
2
3

# 基于DNS劫持的SET社会工程钓鱼攻击

DNS劫持攻击是攻击者伪造的IP冒名顶替正常的DNS服务器的IP,让受攻击者访问到假的服务器 基于中间人攻击的DNS劫持思路如下

1. 发送中间人攻击,劫持目标客户端流量
2. 进行DNS劫持,将"http://www.jnrain.com"这个URL劫持到攻击者所在的本机上
3. 目标客户端在访问"http://www.jnrain.com"的时候实际访问的是攻击者所在的服务器
4. 攻击者在本机服务器上搭建一个钓鱼页面,对"http://www.jnrain.com"进行高度仿真,并加入记录密码的代码
5. 通过钓鱼页面直接获取目标客户端的帐号、密码 
1
2
3
4
5

# 基于中间人攻击的会话劫持攻击(Session Hajacking)

发送这种攻击方式的一个根本原因是"当前的HTTP环境采用Cookie当作一种连接状态的标识符",即服务端根据Cookie来识别当前登录用户的身份。对攻击者来说,如果能获取到这个Cookie值,等于也就获取了对应用户的"身份令牌",即可以不需要帐号、密码就以目标用户的身份合法的登录网站(XSS攻击也是这个目的) "基于中间人攻击的会话劫持"属于前面说的"数据包流量嗅探"类别,它的思路如下:

1. 攻击者对目标客户端发送中间人攻击,劫持流量
2. 使用ferret抓取WEB通信流量包
3. 使用hamster对抓取的数据包进行重组、分析,得出包含cookie信息的HTTP包
4. 攻击者使用hamster组合出的HTTP包进行重放,以目标用户的身份登录目标网站,达到会话劫持
1
2
3
4

参考:

SYN攻击及预防方法
SYN泛洪攻击原理及防御
中间人攻击(MITM)姿势总结

Last Updated: 10/29/2020, 1:21:25 AM