一些常见协议及其漏洞分析
网络协议是一套已建立的规则,通过遵循一种安全,可靠和简单的方法来控制和控制信息的交换。这些规则集适用于各种应用程序。协议的一些知名示例包括有线网络(如以太网),无线网络(如WLAN)和Internet通信。用于在Internet上广播和传输数据的Internet协议套件包括数十种协议。
这些协议中存在许多漏洞,这些漏洞导致它们被积极利用,并对网络安全提出了严峻挑战。
TCP协议
TCP连接和释放的过程之前有记录过:TCP连接的建立与解除
SYN泛洪
SYN攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击端发出的响应报文将永远发送不到目的地,那么被攻击端在等待关闭这个连接的过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。
原理
如果在TCP的三步握手中,只进行前两步握手,在服务器端等待客户端确认时客户端不回送ACK数据包建立连接,那么此时服务器就处于“半连接”状态,这个过程会持续数分钟左右,如果大量这样的情况出现,对服务端来说就不堪重负了,维护这些半连接是需要消耗很多服务器的网络连接资源,如果短时间内这些资源几乎都被半连接占满,那么正常的业务请求在这期间就得不到服务,处于等待状态。
缓解措施
- 降低SYN timeout时间,使得主机尽快释放半连接的占用;
- 采用SYN cookie设置,如果短时间内连续收到某个IP的重复SYN请求,则认为受到了该IP的攻击,丢弃来自该IP的后续请求报文。
- 合理地采用防火墙等外部网络安全设施也可缓解SYN泛洪攻击。
拓展
DoS拒绝服务流量放大方法
放大攻击的原理是利用第三方设备,使网络流量压倒目标。 对于多数放大攻击,必须满足两个条件:
- 用于执行攻击的协议不验证请求源
- 来自所使用的网络功能的响应应该显着大于用于请求它的请求。
满足以上条件的协议有:
- DNS放大:DNS查询请求流量小,但是响应流量可能非常巨大,Linux下使用
dig ANY baidu.com @8.8.8.8
查询,流量放大8倍左右 - 简单网络管理协议SNMP,服务端口为UDP 161/162
- 网络时间协议NTP,用于同步网络设备时间,服务端口为UDP 123,NTP服务支持monlist查询功能,客户端查询时服务器会返回最后同步时间的600个客户端IP,流量约放大100倍
DDos
DDos是分布式拒绝服务攻击,比较完善的DDos攻击体系分为四大部分,分别是攻击者、控制傀儡机、攻击傀儡机和受害者,第二和第三部分分别被用作控制和实际发起攻击。
- SYN Flood:如上
- TCP全连接:为了绕过常规防火墙检查,常规的TCP连接防火墙不会拦截,TCP全连接通过许多僵尸主机不断与受害者服务器建立大量TCP连接,直到服务器内存等资源被耗尽
- 提交大量GET or POST指令,耗费服务器数据库等查询资源,缺点是针对静态页面效果大打折扣,并且有些代理会暴露DDos攻击者的IP
防护策略:
- 尽量不使用NAT、升级主机和网络设备性能
- 对异常流量进行清洗和过滤,通过数据包规则过滤、数据流指纹检测过滤、数据包内容过滤等判断流量是否异常
- 分布式集群防御
地址解析协议ARP
ARP欺骗
ARP欺骗攻击的工作原理是通过伪造通信双方一端的IP地址或 MAC 地址,让另一端误以为该主机为正确主机从而达到欺骗目的。
原理
当网络中源主机A想和目的主机 B 进行通信,A会先广播ARP请求报文,期望B能收到并返回给A自己的 MAC 地址。但由于报文采用的是广播形式,因此攻击者 C在收到A的请求报文时会将自己的IP地址伪造成B的IP地址,这在 ARP请求报文中可以很容易获得,接着攻击者C向发送带有 B 的IP地址,C的 MAC地址的返回消息,让A误以为C就是合法的目的主机 B,从而攻击者C就达到了盗取AB之间的通信信息的目的。
防范措施
- 双向绑定:在小规模网络中,比较推荐使用双向绑定,也就是在路由器和终端上都进行IP-MAC绑定的措施。
- ARP防火墙:通过在终端电脑上对网关进行绑定,保证不受网络中假网关的影响,从而保护自身数据不被窃取的措施。但是它不能保证绑定的网关一定是正确的,如果网络中已经发生了ARP欺骗,ARP防火墙绑定的就是错误的网关
- 划分VLAN,减少广播域范围,防止发生大范围的影响。
- 在交换机上配置防网关冲突功能(该功能要求交换机必须做网关),ARP网关冲突防攻击功能使能后,系统生成ARP防攻击表项,在后续一段时间内对收到具有相同源MAC地址的报文直接丢弃,这样可以防止与网关地址冲突的ARP报文在VLAN内广播。
路由信息协议RIP
RIP是一种基于距离矢量(Distance-Vector)算法的协议,它使用跳数(Hop Count)作为度量值来衡量到达目的地址的距离。度量值等于从本网络到达目的网络间的设备数量。大于或等于16的跳数被定义为无穷大,即目的网络或主机不可达。RIP通过UDP报文进行路由信息的交换,使用的端口号为520。
RIP路由欺骗
原理
运行着 RIP 协议的路由器会无条件的接受任何来自网路中的报文,包括一些非法的路由表更新报文。路由器在接受这些报文时会在没有执行路由表更新命令的情况下改变自身的路由表。从而导致该路由器的路由表紊乱,甚至可能影响该路由器的邻接路由器,继而导致整个网络瘫痪,带来严重的后果。
防范措施
- 升级到RIPv2,RIPv2 协议能够通过更新消息所包含的口令来验证某个路由选择消息源的合法性,但是认证的口令是明文的简单验证
域名系统DNS
DNS主要是负责把域名解析为IP(UDP 53端口)
DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议。
注:为什么区域传送要使用TCP呢?1.辅助域名服务器会定时(一般是3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。2.TCP是一种可靠的连接,保证了数据的准确性。
传统的DNS解析主要涉及Stub Resolver(存根解析器)、Recursive Resolver(递归解析器)和Authoritative Resolver(权威域名解析器)
权威域名解析器能够从自己的数据满足查询,而不需要引用其他来源,即能够给出DNS查询请求的权威应答
递归解析器则是通过询问其他域名服务器获取答案,递归解析器最后能够权威域名解析器得到查询响应
根据DNS协议的初始标准,当域名需要解析时,DNS客户端向递归解析器发送查询请求,递归解析器会从权威域名解析获取答案,然后将结果返回给客户端。
DNS缓存中毒
DNS缓存中毒也称为DNS欺骗,是一种攻击,旨在查找并利用DNS或域名系统中存在的漏洞,以便将有机流量从合法服务器吸引到虚假服务器上。这种攻击往往被归类为域欺骗攻击(pharming attack),由此它会导致出现很多严重问题。用户往往会以为登录的是自己熟悉的网站,而它们却并不是。与钓鱼攻击采用非法URL不同的是,这种攻击使用的是合法的URL地址。
DNSpooq
首先先开启3个容器,分别是attack(攻击机器),forwarder(DNS转发器),cache server(DNS服务器)
攻击机器向转发器发送大量查询报文
转发器向服务器查询解析域名
攻击机器伪装成服务器,向转发器回复构造后的响应报文,并实现投毒
为了进行DNS缓存中毒,需要两个数据:
- QID
- UDP源端口(需要注意,53是DNS协议端口,并非此处提到的源端口)
这两个数据都是随机的,因此都是需要爆破的,每个16位,共计需要爆破2^32次方次,实际情况下留给攻击者的时间一般不超过2s,因此实际很难进行攻击
防范措施
DNS服务器应该配置为尽可能少地依赖与其他DNS服务器的信任关系。以这种方式配置将使攻击者更难以使用他们自己的DNS服务器来破坏目标服务器。
企业应该设置DNS服务器,只允许所需的服务运行。因为在DNS服务器上运行不需要的其他服务,只会增加攻击向量大小。
安全人员还应确保使用最新版本的DNS。较新版本的BIND具有加密安全事务ID和端口随机化等功能,可以帮助防止缓存中毒攻击。
用户的安全教育对于防止这些攻击也非常重要。用户应接受有关识别可疑网站的培训,用户要学会只访问HTTPS网站,这有助于防止人们成为中毒攻击的受害者,因为他们会确保不将他们的个人信息输入黑客的网站。如果他们在连接到网站之前收到SSL警告,则不会单击“忽略”按钮。 这样就不会受到DNS缓存中毒攻击。
超文本传输协议/安全的 HTTP/S
HTTP是一个基于请求与响应模式的、无状态的应用层协议。
常基于TCP的连接方式 ,即http是将数据打包成TCP数据包来进行传送的,绝大多数Web应用,都是构建在HTTP协议之上,即目前使用浏览器访问web网站都是以http协议为标准的。
HTTP协议的缺陷
明文传输
通信使用明文可能会被窃听
防范措施
使用HTTPS
SSL 心脏滴血漏洞
心跳协议
目的:及时检测连接状态问题
过程:通过发送特定的数据包Heartbeat给服务器,来查看服务器是否在线,当服务器在线时,会发送回复信息给主机,然后允许进行安全通信,此外,服务器、主机会间断性发送该信号确保彼此在线。
Heartbleed漏洞
产生原因:OpenSSL代码实现中的心跳处理逻辑没有检测心跳包中的长度字段是否和后续的数据字段相符合,攻击者能够利用Heartbeat构造异常数据包发送给服务器,读取心跳数据所在的内存区域的后续数据,一次可以收到64KB的服务器内存数据。多次请求,则能够得到更多的服务器内存信息。
DROWN漏洞
“DROWN”全称是 Decrypting RSA with Obsolete and Weakened eNcryption,是指”利用过时的脆弱加密算法来对RSA算法进破解”,主要针对SSLv2协议漏洞来对TLS进行跨协议攻击。
“DROWN攻击”主要影响支持SSLv2的服务端和客户端。SSLv2是一种古老的协议,许多客户端已经不支持使用,但由于配置上的问题,可能有服务器仍然支持SSLv2。
“DROWN”使得攻击者可以通过发送probe到支持SSLv2的使用相同密钥的服务端和客户端解密TLS通信。例如:将相同的私钥同时用在Web服务端和Email服务端,如果Email服务支持SSLv2,但web服务不支持,那么攻击者仍然能够利用EMAIL服务的SSLv2漏洞获取到web服务器的TLS连接数据。
防范措施
- 不要用相同的私钥生成多张SSL证书,也不要将同一张SSL证书部署在多台服务器上
- 禁用SSLv2
IMAP/POP3/SMTP
MAP能使本地和服务器端邮件同步,你在本地删除或阅读邮件,服务器上也自动删除或显示已读。所以你用outlook和用 webmail看到的内容是一样。 SMTP/POP3的邮箱,本地和服务器不同步,本地只会下载服务器上未读的邮件。
安全缺陷
这三种协议都是明文传输
防范措施
使用PGP等邮件安全工具进行加密
SSH
工作原理
- 服务器建立公钥。若远程服务器是新系统,会在/etc/ssh目录下生成一个名为ssh_host_ecdsa_key.pub的公钥,同时生成一个名为ssh_host_ecdsa_key的私钥,这一对就是远程服务器的公钥与私钥。之后每次启动sshd服务的时候,系统会自动在此路径下查找公钥。
- 客户端请求连接。
- 服务端将发送公钥给客户端。
- 客户端记录服务器公钥并计算自己的公私钥。客户端选择yes接收服务器公钥后,将服务器传来的公钥文件记录在
~/.ssh/known_hosts
中,然后客户端计算自己的公钥和私钥存放在~/.ssh/
目录下。 - 客户端发送给服务器公钥,后面就可以使用非对称加密进行通信