dns欺骗+arp欺骗在内网中常用。
Arp欺骗
Arp(address resolution protocol)
在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。
Arp如何工作
主机A要和主机B通信。主机A仅有主机B的IP地址是不可以通信的,还要知道主机B的MAC地址。
- 主机A先查看Arp缓存有没有主机B的Mac地址
- 如果没有找到映射,为了寻找主机B的Mac地址,会在局域网中广播Arp请求帧。源主机A的IP地址和MAC地址都包括在ARP请求中。每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
- 主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
- 主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
- 当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。
Arp欺骗
由于ARP协议不会验证回复者的身份。所以主机会错误映射其他主机的Mac地址。
ARP欺骗的分类
1.主机欺骗,如同上面的栗子,主机B欺骗局域网中的主机A。
2.网关欺骗,局域网中的主机欺骗网关,从而获取其他主机的进流量。
网关
网络之间的连接,网关就好比一个房间通向另一个房间的一扇门。
ARP攻击的危害
1.造成局域网中的其他主机断网。
2.劫持局域网中其他主机或网关的流量,获取敏感信息等。
ARP攻击
使用arpspoof
攻击。
Kali Linux中开启IP转发功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
然后使用 arpspoof
命令进行欺骗, 命令使用方法如下:
arpspoof -i <网卡名> -t <欺骗的目标> <我是谁>
进行账号密码嗅探:
ettercap -Tq -i <网卡名>
还可以使用driftnet截获受害者浏览的图片
也可以使用tcpdump或Wireshark工具截获所有流量。
如何防御ARP欺骗
- ARP欺骗是通过重复应答实现的,那么只需要在本机添加一条静态的ARP映射,这样就不需要询问网关MAC地址了,这种方法只对主机欺骗有效。
- 查看一下网关的MAC地址。注意如果正遭受ARP欺骗攻击,通过此方法查处的可能是虚假的MAC地址。输入arp -a命令查询本机的arp映射表。
DNS欺骗
中间人攻击
中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”
DNS欺骗就是攻击者冒充域名服务器的一种欺骗行为。把查询的IP地址设为攻击者的IP地址,这样的话,用户上网就只能看到攻击者的主页,而不是用户想要取得的网站的主页了。
DNS欺骗攻击的方式:
常见的有内应攻击和序列号攻击两种。
内应攻击:
内应攻击即黑客在掌控一台DNS Server后,对其Domain Database内容进行更改,将虚假IP Address指定给特定的Domain Name,当Client请求查询这个特定域名的IP时,将得到伪造的IP。
DNS 序列号欺骗攻击:
在Switch构建的网络中,攻击方首先向目标实施ARP欺骗。当Client、攻击者和DNS Server同在一个网络时。
- 攻击方向目标反复发送伪造的ARP Request Message,修改目标机的ARP 缓存内容,同时依靠IP续传使Data经过攻击方再流向目的地;攻击方用Sniffer软件侦测DNS请求包,获取ID序列号和Potr
- 攻击方一旦获得ID和Potr,立即向客户机发送虚假的DNS Request Message,Client接收后验证ID和Potr正确,认为接收了合法的DNS应答;而Client得到的IP可能被转向攻击方诱导的非法站点
- Client再接收DNS Server的Request Message,因落后于虚假的DNS响应,故被Client丢弃。当Client访问攻击者指向的虚假IP时,一次DNS ID欺骗随即完成。
检测方法:
发生DNS欺骗时,Client最少会接收到两个以上的应答数据报文,报文中都含有相同的ID序列号,一个是合法的,另一个是伪装的。
防范措施
- DNS攻击存在一定的局限性:
(1)攻击者不能替换缓存中已存在的记录,存在DNS缓存就不行了。
(2)DNS服务器缓存时间的刷新
在客户端直接使用IP Address访问重要的站点,从而避免DNS欺骗。
对DNS Server和Client的数据流进行加密,Server端可以使用SSH加密协议,Client端使用PGP软件实施数据加密。
对DNS Server和Client的数据流进行加密,Server端可以使用SSH加密协议,Client端使用PGP软件实施数据加密。
对DNS数据包进行监测,在DNS欺骗攻击中,Client会接收到至少两个DNS的数据响应包,一个是真实的数据包,另一个是攻击数据包。欺骗攻击数据包为了抢在真实应答包之前回复给Client,它的信息数据结构与真实的数据包相比十分简单,只有应答域,而不包括授权域和附加域。因此,可以通过监测DNS响应包,遵循相应的原则和模型算法对这两种响应包进行分辨,从而避免虚假数据包的攻击。
DDOS攻击
短时间内发起大量请求,耗尽服务器的资源,无法响应正常的访问,造成网站实质下线,造成正常流量无法到达其预定目的地。
DDOS攻击分类
容积攻击
容积型 DDoS 攻击的目的是用海量流量充塞网络,耗尽预期受害方资源的带宽。海量攻击流量阻断了合法用户对应用程序或服务的访问,造成流量无法正常流入或流出。
UDP 泛洪攻击
UDP 泛洪攻击经常被选择用于带宽较大的 DDoS 攻击。攻击者会试图用包含无状态 UDP 协议的 IP 数据包充塞目标主机上的端口。随后,受害主机寻找与 UDP 数据包相关的应用程序,如果没有找到,就向发送者回发一条“目标不可达”消息。
DNS 反射/放大
通过伪装其目标的 IP 地址,向开放的 DNS 服务器发送大量请求。作为回应,这些 DNS 服务器通过伪造的 IP 地址响应恶意请求,大量的 DNS 答复形成洪流,从而构成预定目标的攻击。
ICMP 泛洪攻击
互联网控制消息协议 (ICMP) 主要用于错误信息传递,通常不会在系统之间交换数据。ICMP 数据包可能与传输控制协议 TCP 数据包一同传输,让应用程序和计算设备在连接到服务器时可以通过网络交换信息。
协议攻击
SYN 泛洪攻击
这种连接需要从 TCP 服务(如 Web 服务器)进行三次握手,涉及到从用户连接到服务器的位置发送所谓的 SYN(同步)数据包,然后服务器返回一个 SYN-ACK(同步确认)数据包,最终通过最后的 ACK(确认)通信作为应答,以此完成 TCP 握手。
在 SYN 泛洪攻击中,恶意客户端发送大量 SYN 数据包(通常在握手的第一部分),但永远不会发送确认以完成握手。这使得服务器一直等待对于这些半开放的 TCP 连接的响应,而这些连接最终会耗尽容量,造成服务器无法接受跟踪连接状态的新连接。
Smurf DDoS 攻击
攻击者使用某个 IP 广播地址,向计算机网络广播大量带有目标仿冒源 IP 的互联网控制消息协议 (ICMP) 数据包。默认情况下,网络上的大多数设备将通过向该源 IP 地址发送回复的方式来做出响应。
应用层攻击
HTTP 泛洪攻击
通过向应用程序发送大量恶意请求实现的,以每秒请求数 (RPS) 来衡量。这类攻击也称为第 7 层(OSI模型中的第七层) DDoS 攻击,针对并破坏特定的网络应用程序,而不是整个网络。虽然这类 DDoS 攻击难以预防和抵御,但发动起来却相对比较容易。
防范措施
备份网站
请求拦截:恶意请求都是从某个 IP 段发出的,那么把这个 IP 段封掉就行了。或者,它们的 User Agent 字段有特征(包含某个特定的词语),那就把带有这个词语的请求拦截。
Web 服务器的前面可以架设硬件防火墙,专门过滤请求。
操作系统自带防火墙,如Linux的iptables
iptables -A INPUT -s 1.2.3.4 -j DROP
Web服务器也可以过滤。如Niginx
location / { deny 1.2.3.4; }
Apache 的写法是在
.htaccess
文件里面,加上下面一段。<RequireAll> Require all granted Require not ip 1.2.3.4 </RequireAll
使用CDN:网站内容存放在源服务器,CDN 上面是内容的缓存。用户只允许访问 CDN,如果内容不在 CDN 上,CDN 再向源服务器发出请求。
交换机协议漏洞
ARP欺骗攻击
上面已经写过,不加以赘述
VLAN的设计缺陷——DTP协议与双标签跳跃攻击
如果有两个相互连接的交换机,DTP就能够对两者进行协商,确定它们要不要成为中继,洽商过程是通过检查端口的配置状态来完成的。 VLAN跳跃攻击充分利用了DTP,在VLAN跳跃攻击中,黑客可以欺骗计算机,冒充成另一个交换机发送虚假的DTP协商消息,宣布他想成为中继; 真实的交换机收到这个DTP消息后,以为它应当启用中继功能,而一旦中继功能被启用,通过所有VLAN的信息流就会发送到黑客的计算机上。
生成树协议的设计缺陷
恶意黑客利用STP的工作方式来发动拒绝服务(DoS)攻击。如果恶意黑客把一台计算机连接到不止一个交换机,然后发送网桥ID很低的精心设计的BPDU,就可以欺骗交换机,使它以为这是根网桥,这会导致STP重新收敛(reconverge),从而引起回路,导致网络崩溃。
MAC 表洪水攻击
交换机的工作方式是,帧在进入交换机时记录下MAC源地址,这个MAC地址与帧进入的那个端口相关,因此以后通往该MAC地址的信息流将只通过该端口发送出去。这可以提高带宽利用率,因为信息流用不着从所有端口发送出去,而只从需要接收的那些端口发送出去。 MAC地址存储在内容可寻址存储器(CAM)里面,CAM是一个128K大小的保留内存,专门用来存储MAC地址,以便快速查询。
如果恶意黑客向CAM发送大批数据包,就会导致交换机开始向各个地方发送大批信息流,从而埋下了隐患,甚至会导致交换机在拒绝服务攻击中崩溃。
DHCP协议攻击
DHCP(Dynamic Host Configuration Protocol):DHCP通常被用于局域网环境,主要作用是集中的管理、分配IP地址,使client动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
DHCP Server仿冒攻击
由于DHCP发现报文(DHCP DISCOVER)以广播形式发送,所以DHCP Server仿冒者可以侦听到此报文。DHCP Server仿冒者回应给DHCP Client仿冒信息,如错误的网关地址、错误的DNS(Domain Name System)服务器、错误的IP等,达到DoS(Denial of Service)的目的
DHCP报文泛洪攻击
DHCP服务器收到了DHCP客户端Discover 报文之后,就会从地址池中选择一个IP准备分配给请求者,当然正常情况下客户端收到服务器发送的Offer会回复Request进行确认,但是在泛洪攻击的场景下服务器会收到大量的Discover报文当然也会在地址池为这些请求者执行分配IP的操作并等待客户端的应答。
仿冒DHCP报文攻击
已获取到IP地址的合法用户通过向服务器发送DHCP Request或DHCP Release报文用以续租或释放IP地址。如果攻击者冒充合法用户不断向DHCP Server发送DHCP Request报文来续租IP地址,会导致这些到期的IP地址无法正常回收,以致一些合法用户不能获得IP地址;而若攻击者仿冒合法用户的DHCP Release报文发往DHCP Server,将会导致用户异常下线。
DHCP Server服务拒绝攻击
非法用户恶意申请IP地址,使DHCP Server的IP地址快速耗尽,无法为合法 的用户再分配IP地址。
DHCP Server通常仅根据DHCP Request报文中的CHADDR(Client Hardware Address)字段来确认客户端的MAC地址。非法用户通过不断改变CHADDR字段向DHCP Server申请IP地址,使DHCP服务器中的IP地址快速耗尽,无法为合法用户再分配IP地址。
防范措施
避免交换机遭受生成树攻击
- 配置交换设备的BPDU保护功能
- 配置交互设备的TC保护功能
- 配置端口的ROOT保护功能
- 配置端口的环路保护功能
避免交换机遭受DHCP攻击
- 开启设备根据DHCP Snooping绑定表生成接口的静态MAC表项功能
- 使能设备对DHCP报文上送DHCP报文处理单元的速率进行检测的功能
- 配置防止仿冒DHCP报文攻击
- 配置防止DHCP Server服务拒绝攻击
启用MAC地址学习限制规则
重放攻击
重放攻击可以由发起者,也可以由拦截并重发该数据的敌方进行。攻击者利用网络监听或者其他方式盗取认证凭据,之后再把它重新发给认证服务器。从这个解释上理解,加密可以有效防止会话劫持,但是却防止不了重放攻击。
重放攻击的原理其实很简单,无非就是系统没有对合法请求进行唯一性校验。
防范措施
采用时间戳。一次HTTP请求从发出到到达服务器的时间是不会超过60s的,当你发送一个请求时必须携带一个时间戳
timestamp
,假设值为10,当请求到达服务器之后,服务器会取出当前时间,假设为t2=80,很明显t2-timestamp>60s
,那么服务器就认为请求不合法。时间戳是需要加入MD5
加密签名的,不然黑客修改了时间戳t2=20
,那不就是白费功夫了。但是如果黑客在60s内发起攻击,那么我们就束手无策了。
采用时间戳 + 随机数
nonce
上面说到时间戳是有缺点的,那么我们加入一个随机数
nonce
,每次成功请求,服务器会保存当前成功请求的随机数nonce
,比如存放在redis
和数据库中,当请求再次进到服务器,先验证时间戳是否有效,如果有效,再判断携带的随机数nonce
是否在缓存或者数据库中已经存在,如果存在,则认为请求非法。加salt(盐值)