TCP/IP模型
TCP/IP简介
TCP/IP模型(也成为DARPA或DOD模型)仅由四层组成, 而OSI参考模型为7层. TCP/IP模型的四个层是:
- 应用层, 也成为进程
- 传输层, 也成为主机到主机
- 互联网层, 也成为网络互联
- 链路层, 尽管使用网络接口, 有时也是用网络访问
在开发OSI模型时, TCP/IP协议套件已经在网络中建立部署.
OSI模型与TCP/IP模型对比
OSI模型 | TCP/IP模型 |
---|---|
应用层 | 应用层 |
表示层 | 应用层 |
会话层 | 应用层 |
传输层 | 传输层 |
网络层 | 互联网层 |
数据链路层 | 链路层 |
物理层 | 链路层 |
TCP/IP协议套件概述
最广泛使用的协议套件是TCP/IP, 但它不仅是一个协议, 而且是一个包含许多单独协议的协议栈. TCP/IP是一种基于开放标准的独立于平台的协议. 然而, 这既有优势又有缺点. TCP/IP几乎支持所有操作系统, 但会消耗大量系统资源并且相对容易被入侵,因为它的设计初衷是易用性而不是安全性.
VPN链路经过加密, 可增强隐私, 保密性和身份验证, 并保持数据完整性. 用于建立VPN的协议有PPTP, L2TP, SSH, OpenVPN(SSL/TLS VPN)和IPsec. 提供协议级安全性的另一种方法是使用TCP封装器. TCP封装器是一种可作为基本防火墙的应用程序, 它通过基于用户ID或系统ID限制对端口和资源的访问. 使用TCP封装器是一种基于端口的访问控制.
传输层协议
TCP/IP的两个主要传输层协议是TCP和UDP. TCP是一种面向连接的全双工协议, 而UDP是一种无连接单工协议. 在两个系统之间使用端口建立通信连接. TCP和UDP都有65536个端口(由于端口号是16位二进制数). 端口只是通信链路两端在传输层内传输数据时同意使用的地址编号. 端口允许单个IP地址同时支持多个通信, 每个通信使用不同端口号. IP地址和端口号的组合称为套接字.
这些端口中的前1024个(0~1023)称为众所周知的端口或服务端口. 这是因为对它们支持的服务进行了标准化分配. 例如, 端口80是Web(HTTP)流量的标准端口, 端口23是Telnet的标准端口, 端口25是SMTP的标准端口. 这些端口是专门预留给服务器用的(不能用作客户端请求的源端口).
端口1024~49151称为已注册的软件端口. 这些端口具有一个或多个专门的IANA(互联网编号分配机构, 网址是www.iana.org)注册的网络软件产品, 以便为尝试连接其他产品的客户提供标准化的端口编号系统.
端口49152~65535被称为随机, 动态或临时端口, 他们通常被客户端随机地临时用作源端口. 在初始服务或注册端口之外在客户端和服务器之间协商数据传输管道时, 一些网络服务也使用这些随机端口, 例如TFP.
端口号
IANA建议将端口49152~65535用作动态和/或专用端口. 但并非所有操作系统都遵守此规定, 因为除了较低的0~1023端口只保留提供服务使用外, 任何其他端口都可用作客户端源端口, 只要它尚未在该本地系统上使用即可.
TCP
TCP在OSI模型的传输层上运行. 它支持全双工通信, 面向连接, 并采用可靠的会话. TCP面向连接, 在两个系统之间使用握手过程来建立通信会话. 完成该握手过程后, 建立可支持客户端和服务器之间的数据传输的通信会话. 三次握手过程:
- 客户端将SYN(同步)标记的数据包发送到服务器.
- 服务器以SYN/ACK(同步和确认)标记的数据包响应客户端.
- 客户端以ACK(确认)标记的数据包响应服务器.
通信会话完成后, 有两种方法可断开TCP会话. 首先, 最常见的是使用FIN(完成)标记的数据包. 一旦所有数据被传输, 会话的每一侧都将发送FIN标记的分组, 触发对方用ACK标记的分组进行确认. 因此, 需要四个数据包优雅地终止TCP会话. 其次是使用RST(重置)标记的数据包, 这导致会话立即或突然终止.
TCP传输的段用序列号标记. 这允许接收器通过将接收的段重新排序来重建原始通信, 不管它们被接收的顺序如何. 通过TCP会话传送的数据定期通过确认进行验证. 通过将TCP报头的确认序列值设置为在传输窗口内从发送方接收的最后序列号, 接收方将确认发送回发送方.在发送确认分组前发送的分组数称为发送窗口. 数据流通过"滑动窗口"机制来控制. TCP能在发送确认之前使用不同大小的窗口(换句话说, 发送的数据包数量不同). 较大窗口允许更快的数据传输, 但它们应该只用在丢失和损坏数据最少的可靠连接上.当通信连接不可靠时, 应使用较小窗口. 当需要数据传输时,应采用TCP. 滑动窗口的大小动态变化, 因为TCP会话的可靠性在使用时会发生变化. 在未接收到传输窗口所有分组的情况下, 不发送确认. 超时后, 发送者再次发送整个传输窗口的数据包.
与UDP相比, TCP报头相对复杂. TCP报头长度为20~60个字节. 此报头分为几个部分或字段, TCP报头结构(按报头从头到尾排序):
大小 | 字段 |
---|---|
16 | 源端口 |
16 | 目的端口 |
32 | 序列号 |
4 | 数据偏移 |
4 | 保留供将来使用 |
8 | 标志 |
16 | 窗口大小 |
16 | 校验和 |
16 | 紧急指针 |
变量 | 多种选择, 必须时32位的倍数 |
所有这些字段都有独特的参数和要求. 标志字段可包含一个或多个指定的标志或控制位. 这些标志只是TCP数据包的功能, 并请求接收方以特定方式响应. 标志字段长度位8位. 每个位置代表单个标志或控制设置. 每个位置的值可设置为1或0. 有些条件可同时启用多个标志(如TCP三次握手中的第二个数据包可设置SYN和ACK标志). 下表详细说明了标志控制位(TCP报头标志字段值):
标志位指示符 | 名称 | 描述 |
---|---|---|
CWR | 拥塞窗口减少 | 用于管理拥塞链路上的传输 |
ECE | ECN-Echo(显示拥塞通知) | 用于管理拥塞链路上的传输 |
URG | 紧急 | 表示紧急数据 |
ACK | 确认 | 确认同步或关闭请求 |
PSH | 推送 | 表示需要立即将数据推送给应用 |
RST | 重置 | 导致立即断开TCP会话 |
SYN | 同步 | 用新的序列号请求同步 |
FIN | 完成 | 请求正常关闭TCP会话 |
另一个重要消息时TCP的IP头协议字段是6(0x06). 协议字段值是在每个IP数据包的报头中找到的标签或标志, 它告诉接收系统它是什么类型的数据包. IP报头的协议字段指示下一个封装协议的标识(换句话说, 来自当前协议层的有效载荷中包含的协议, 如ICMP或IGMP或上一层, 如TCP或UDP). 把它设想成是包裹上标签, 没有标签就必须打开包裹才知道里面装的是什么.
UDP
UDO也在OSI模型的传输层上, 是一种无连接的"尽力而为"的通信协议, 不提供错误检测或纠正, 不适用排序, 不适用流量控制机制, 不适用预先建立的会话, 被认为是不可靠的. UDP具有非常低的开销, 因此可以快速传输数据. 但是, 只有在传输不重要的数据时才应使用UDP. UDP通常用于音视频的实时或通信流. UDP的IP头协议字段值是17(0x11).
与TCP头相比, UDP头相对简单. UDP报头长度为8个字节. 此报头分为四个部分或字段(每个16位长):
- 源端口
- 目的端口
- 消息长度
- 校验和
网络层协议和IP网络基础
TCP/IP协议套件中的另一个重要协议在OSI模型的网络层运行, 即IP. IP为数据包提供路由寻址. 这条路线称为全球互联网通信的基础, 提供了一种身份识别手段并规定了传输路径. 与UDP类似, IP是无连接的, 是一种不可靠的数据报服务:
- IP不保证数据包一定能被传送.
- IP不保证数据包以正确顺序传送.
- IP不保证数据包只传送一次.
因此, 必须在IP撒谎给你使用TCP来建立可靠和受控的通信会话.
Notes: IPv4和IPv6
IPv4是世界上使用最广泛的互联网协议版本. 但是正在采用称为IPv6的版本用于私人和公共网络. IPv4使用32位寻址方案, 而IPv6使用128位寻址. IPv6提供许多IPv4中没有的新功能. IPv6的一些新功能包括作用域地址, 自动配置和服务质量(QoS)优先级值. 通过分区地址, 管理员可对组进行分组, 然后组织或允许访问网络服务, 如文件服务器或打印服务器. 自动配置不再需要DHCP和NAT. QoS优先级值允许基于优先级内容的流量管理.
IP分类
完整的A类子网支持16777214个主机, 完整的B类子网支持65524个主机, 完整的C类子网支持254个主机. D类用于多播, E类用于将来使用.
IP分类表
分类 | 第一个二进制数字 | 第一个八位字节的十进制范围 |
---|---|---|
A | 0 | 1~126 |
B | 10 | 128~191 |
C | 110 | 192~223 |
D | 1110 | 224~239 |
E | 1111 | 240~255 |
IP类的默认子网掩码表
分类 | 默认子网掩码 | 五类别域间路由CIDR等效值 |
---|---|---|
A | 255.0.0.0 | /8 |
B | 255.255.0.0 | /16 |
C | 255.255.255.0 | /24 |
注意, 为环回地址留出整个127的A类网络, 虽然实际上只需要一个地址.
子网划分的另一个选择是使用无类别间域路由(Classless Inter-Domain Routing, CIDR). CIDR使用掩码位而不是完整的点分十进制表示子网掩码. 例如掩码为: 255.255.0.0的网段172.16.0.0可用CIDR表示172.16.0.0/16. CIDR相对于传统子网掩码技术的一个显著优势是能将多个不连续的地址组合成一个子网. 例如, 可将多个C类子网组合长一个更大的子网分组.
ICMP和IGMP是OSI模型的网络层中的其他协议.
ICMP
ICMP用于确定网络或特定链路的运行状况. ICMP可用于ping, traceroute, pathping等网络管理工具. ping实用程序实用ICMP回显包并将它们从远程系统反馈回来. 因此你可使用ping来确定远程系统是否在线, 远程系统是否正在及时响应, 中间系统是否支持通信, 以及中间系统正在通信的性能效率级别. ping实用程序包含一个重定向函数, 该函数允许将回显响应发送到与源系统不同的目的地.
不幸的是, ICMP的功能常用于各种形式的基于宽带的DoS攻击, 例如死亡之ping, Smurf攻击和ping 洪水攻击. 这一事实影响了网络处理ICMP流量的方式, 导致许多网络限制了ICMP的使用, 或者至少限制了其吞吐量. 死亡之ping向计算机发送大于65535字节(大于最大IPv4数据包大小)的畸形ping包, 以尝试使其崩溃. smurf攻击通过欺骗广播ping在目标网络上产生的大量的流量洪水, 是一种基本的DoS攻击, 依赖于消耗目标可用的所有带宽.
ICMP的IP头协议字段值是1(0x01). 其次, ICMP头中的类型字段定义ICMP有效载荷中包含的i西澳西的类型或目的. 有超过40种已定义的类型, 但通常只是用7种. 常见的ICMP类型字段值如下表:
类型 | 功能 |
---|---|
0 | 回显应答 |
3 | 目标不可达 |
5 | 重定向 |
8 | 回显请求 |
9 | 路由宣告 |
10 | 路由请求 |
11 | 超时 |
IGMP
IGMP允许系统支持多播. 多播将数据传输到多个特定接收者. IP主机使用IGMP来注册其动态多播组成员资格. 连接的路由器也是用它来发现这些组. 通过使用IGMP多播, 服务器最初可为整个组发送单个数据信号, 而非为每个预期接收者发送单独的初始数据信号. 对于IGMP, 如果到预期接收者之间存在不同路径, 则单个初始信号在路由器处复用. IGMP的IP报头协议字段值为2(0x02).
ARP
ARP对于逻辑和物理寻址方案的互操作性至关重要. ARP用于将I地址(32位二进制数用于逻辑寻址)解析为MAC地址(用于物理寻址的48位二进制数), EUI-48或EUI-64. 网上的流量(例如跨集线器的电缆)使用MAC地址从源系统定向到其目标系统.
ARP使用缓存和广播来执行其操作. 将IP地址解析为MAC地址的第一步(反之亦然)是检查本地ARP缓存. 如果所需信息已存在于ARP缓存中, 则使用它. 有时这项活动使用称为ARP缓存中毒的技术滥用, 攻击者将伪造信息插入ARP缓存. 如果ARP缓存不包含必要信息, 则发送广播形式的ARP请求. 如果查询地址的所有者位于本地子网, 则可使用必要信息进行响应. 如果不是, 系统将默认使用其默认网关来转发. 然后, 默认网关(或路由器)将需要执行自己的ARP过程.
通用应用层协议
TCP/IP模型的应用层, 包括OSI模型的会话层, 表示层, 应用层. 常见协议如下:
- Telnet, 使用TCP 23端口, 是一个终端仿真网络应用程序, 支持远程连接以执行命令和运行应用程序, 但不支持文件传输.
- FTP, TCP 20(活动数据)和21(控制连接)端口, 是一个网络应用程序, 支持需要匿名或特定身份验证的文件传输.
- TFTP, 使用UDP 68端口, 是一个支持不需要身份验证的文件传输的网络应用程序.
- SMTP, 使用TCP 25端口, 是一种用于将电子邮件从客户端传输到电子邮件服务器以及从一个电子邮件服务器传输到另一个电子邮件服务器的协议.
- POP3, 使用TCP 110端口, 是一种用于将电子邮件从电子邮件服务器上的收件箱中拉到电子邮件客户端的协议.
- IMAP, 使用TCP端口143, 是一种用于将电子邮件从电子邮件服务器上的收件箱拉到电子邮件客户端的协议. IMAP比POP3更安全, 并能从电子邮件服务器中提取标头以及直接从电子邮件服务器删除邮件, 而不必先下载到本地客户端.
- DHCP, 使用UDP 67和68端口, DHCP使用端口67作为服务器上的目标端口来接收客户端通信, 使用端口68作为客户端请求的源端口. 它用于在启动时为系统分配TCP/IP配置设置. DHCP支持几种控制网络寻址.
- HTTP, 使用TCP 80端口, 是将Web页面元素从Web服务器传输到Web浏览器的协议.
- SSL, 使用TCP 443端口(用于HTTP加密), 是一种类似于VPN的安全协议, 在传输层运行. SSL最初设计用于支持安全Web通信(HTTPS), 但能保护任何应用层协议通信.
- LPD, TCP 515端口是一种网络服务, 用于假脱机打印作业和将打印作业发送到打印机.
- X Window, 使用TCP 6000-6063端口, 用于命令行操作系统的GUI API.
- NFS, 使用TCP 2049端口, 是一种网络服务, 用于支持不同系统之间的文件共享.
- SNMP, 使用UDP 161端口(用于陷阱消息的是UDP 162端口), 是一种网络服务, 用于通过中央监控服务器轮询监控设备来收集网络运行状况和状态信息.
SNMPv3
SNMP是大多数网络设备和TCP/IP兼容主机的标准网络管理协议. 这些设备包括路由器, 交换机, 网桥, 无线接入点(WAP), 防火墙, VPN设备, 调制解调器和打印机等. 通过使用管理控制台, 你可使用SNMP与各种网络设备进行交互, 以获取状态信息, 性能数据, 统计信息和配置详细信息. 某些设备支持通过SNMP修改配置设备.
SNMP通过UDP端口161和162运行, WLAN代理(即网络设备)使用UDP端口161接收请求, 管理控制台使用UDP端口162接收响应和通知(也成为Trap消息). 当受监视系统上发生事件并触发阈值时, 陷阱消息会通知管理控制台.
多层协议的含义
作为协议套件的TCP/IP包含分布在各种协议栈层上的许多单独协议. 因此TCP/IP是一种多层协议. TCP/IP从其多层设计中获得了若干好处, 这与其封装机制有关. 例如通过典型的网络连接在Web服务器和Web浏览器之间通信时, 会封装HTTP在TCP中, 后者封装在IP中, 而IP又封装在以太网中. 可表述如下:
[以太网[IP[TCP[HTTP]]]]
还可以添加额外的封装层. 例如向通信添加SSL/TLS加密将在HTTP和TCP之间插入新的封装:
[以太网[IP[TCP[SSL[HTTP]]]]]
还可以通过网络层加密(如IPsec)进一步封装:
[以太网[IPsec[IP[TCP[SSL[HTTP]]]]]]
但封装并不总是用于良性目的, 有许多隐藏通道通信机制使用封装来隐藏或隔离另一个授权内的未授权协议. 例如, 如果网络阻止使用FTP但允许使用HTTP, 则可使用HTTP隧道等工具来绕过此限制. 这可能导致如下的封装结构:
[以太网[IP[TCP[HTTP[FTP]]]]]
通常, HTTP携带自己的与Web相关的有效负载, 但是用HTTP隧道工具, 标准有效负载常被协议代替. 这种错误封装甚至可发生在协议栈中. 例如, ICMP通常用于网络健康测试, 而不用于一般通信. 然而, 利用Loki等实用工具, ICMP被转换成支持TCP通信的隧道协议. Liki的封装结构如下:
[以太网[IP[ICMP[TCP[HTTP]]]]]
无限封装支持引起的另一个关注领域是在虚拟局域网(VLAN)之间跳跃的能力. VLAN是由标签在逻辑上分隔的网络段. 这种攻击称为VLAN跳变, 是通过创建双封装的IEEE 802.1Q VLAN标签来执行的:
[以太网[VLAN1[VLAN2[IP[TCP[HTTP]]]]]]
通过这种双重封装, 第一个遇到交换机将剥离第一个VLAN标记, 然后下一个交换机将在内部VLAN标记欺骗, 并将流量移到另一个VLAN.
多层协议具有以下优点:
- 可在更高层使用各种协议.
- 加密可包含在各个层中
- 支持复杂网络结构中的灵活性和弹性
多层协议有一些缺点:
- 允许隐藏通道
- 可以绕过过滤器
- 逻辑上强加的网段边界可超越
DNP3
DNP3(分布式网络协议)主要用于电力和水利行业. 它用于支持数据采集系统和系统控制设备之间的通信. 这包括变电站计算机, RTU(有嵌入式微处理器控制的设备), IED(智能电子设备)和SCADA主站(即控制中心). DNP3是一个开放的公共标准. DNP3是一种多层协议, 功能与TCP/IP类似, 具有链路, 传输和传输层.
TCP/IP漏洞
TCP/IP的漏洞很多, 在各种操作系统中不正确地实现TCP/IP堆栈容易受到缓冲区溢出, SYN洪水攻击, 各种拒绝服务(DoS)攻击, 碎片攻击, 超大数据包攻击, 欺骗攻击, 中间人攻击, 劫持攻击和编码错误攻击.
TCP/IP(以及大多数协议)也会通过监控或嗅探进行被动攻击. 网络监控是监控流量模式以获取有关网络地信息的行为. 数据包嗅探是从网络捕获数据包的行为, 希望从数据包内容中提取有用信息. 有效的数据包嗅探器可以提取用户名, 密码, 电子邮件地址, 加密密钥, 信用卡号, IP地址和系统名称等.
域名系统
寻址和命名时使网络通信成为可能的重要组件. 如果没有寻址方案, 联网计算机将无法区分一台计算机或指定通信目的地.
- 第三层或底层是MAC地址. MAC地址或硬件地址是永久物理地址.
- 第二层或中间层是IP地址. IP地址是在MAC地址上分配的临时逻辑地址.
- 顶层是域名. 域名或计算机名是在IP地址上分配的临时人性友好约定.
这种命名和寻址系统为每个网络组件提供所需的信息, 同时尽可能简单地使用该信息. 人类获得人性化地域名, 网络协议获得路由器友好地IP地址, 网络接口获得物理地址. 但所有这三种方案都必须链接在一起以实现互操作性. 因此, DNS和ARP系统可在域名和IP地址或IP地址和MAC地址之间转换. DNS将人性化的域名解析为对应的IP地址. 然后, ARP将IP地址解析为对应的MAC地址. 如果定义了PTR记录, 也可通过DNS反向查找将IP地址解析为对应的域名.
DNS是公共和专用网络中使用的分层命名方案. DNS将IP地址和人性化的完全限定域名(FQDN)链接再一起:
- 顶级域名(TLD): www.google.com中的com
- 注册域名: www.google.com中的google
- 子域或主机名: www.google.com中的www
顶级域名可以是任意数量的官方选型, 包括最初的七个顶级域名中的六个: com, org, edu, mil, gov和net, 以及许多新的顶级域名: 如info, museum, telephone, mobi, biz等. 还有国家/地区的变化, 称为国家/地区代码(www.iana.org/domains/root/db/具有当前TLD和国家代码的详细信息). 第七个除湿TLD是int, 国家和地区代码用两个字母表示.
域名必须在任意数量的已批准域名注册商之一正式注册, 例如: Network Solutions或1and1.com.
FQDN最左边部分可以是单个主机名, 如: www, ftp, 或多节子域名称, 例如: server1.group3.bldg5.mycompany.com.
FQDN的总长不能超过253个字符(包括点). 任何单个部分不能超过63个字符. FQDN只能包含字母, 数字和连字符.
每个注册的域名都有一个指定的权威名称服务器. 主要权威名称托管域的原始区域文件. 辅助权威名称服务器可用于托管区域文件的只读副本. 区域文件时资源记录的集合或有关特定域的详细信息. 下表是公共资源记录:
记录 | 类型 | 描述 |
---|---|---|
A | 地址记录 | 将FQDN链接到IPv4地址 |
AAAA | 地址记录 | 将FQDN链接到IPv6地址 |
PTR | 地址记录 | 将FQDN链接到IPv6地址 |
CNAME | 规范名字 | 将FQDN别名链接到另一个FQDN |
MX | 邮件交换 | 将与邮件和消息传递相关的FQDN链接到一个IP地址 |
NS | 名称服务器记录 | 指定的FQDN和IP地址授权名称服务器 |
SOA | 开始授权记录 | 指定有关的权威信息区域文件, 如主名称服务器, 序列号, 超时和刷新间隔 |
最初, DNS由HOSTS文件的静态本地文件处理. 此文件现在仍然存在, 但动态DNS查询系统大多数情况下已经取代它, 特别是在大型专用网络以及互联网中. 当客户端软件指向FQDN时, 协议栈启动DNS查询, 以便将名称解析为可用于构建IP头的IP地址. 解析过程首先检查本地DNS缓存. DNS缓存包括来自本地HOSTS文件的预加载内容以及当前执行的任何DNS查询(尚未超时). 如果所需答案不在缓存中, 则DNS查询被发送到本地IP被指中显示的DNS服务器. 解析查询的过程复杂, 不赘述.
DNS通过TCP和UDP端口53运行. TCP端口53用于区域传输. 这些是DNS服务器之间的区域文件交换, 用于特殊手动查询, 或响应超时512字节的情形. UDP端口53用于大多数典型的DNS查询.
域名系统安全拓展(Domain Name System Security Extensions, DNSSEC)是对现有DNS基础结构的安全性改进. DNSSEC的主要功能是在DNS操作期间在设备之间提供可靠的身份验证. DNSSEC已在DNS系统的重要部分实施. 每个DNS服务器都会获得一个数字证书, 然后用于执行证书身份验证. DNSSEC的目标是防止一系列DNS滥用, 可将错误数据注入解析过程中. 一旦完全实施, DNSSEC将显著减少以服务器为中心的DNS滥用.
DNS中毒
DNS中毒时伪造客户端用于达到所需系统的DNS信息的行为. 它可以多种方式发生. 每当客户端需要将DNS名称解析为IP地址时, 他可能经历一下过程:
- 检查本地缓存
- 将DNS查询发送到已知的DNS服务器
- 将广播查询发送到任何可能的本地子网DNS服务器
如果客户端在上述三个步骤都没有解析到对应的IP, 则解析失败. DNS中毒可在这些步骤中的任何一步发生, 但最简单的方法是破坏HOSTS文件或DNS服务器查询.
有许多方法可以共计或利用DNS. 攻击者可能使用以下技术之一.
部署流氓DNS服务器(也成为DNS欺骗或DNS域欺骗). 流氓DNS服务器可侦听网络流量以查找与目标站点相关的任何DNS查询或特定DNS查询. 然后流氓DNS服务器使用错误的IP信息向客户端发送DNS响应. 此攻击要求恶意DNS服务器在真实DNS服务器响应之前将其返回给客户端. 一旦客户端收到来自流氓DNS服务器的响应, 客户端就会关闭DNS查询会话, 这回导致真正DNS服务器的响应被丢弃并且作为会话外数据包被忽略.
DNS查询未经过身份验证, 但他们包含一个16位值, 称为查询ID(Query ID, QID). DNS响应必须包含与要接受的查询相同的QID, 因此, 流氓DNS服务器必须在虚假回复中包括请求QID.
执行DNS中毒
DNS中毒涉及攻击真实的NDS服务器并将不正确的信息放入其区域文件中. 这会导致真正的DNS服务器将错误数据发送回客户端.
改变HOSTS文件
通过在其中放置虚假NDS数据来修改客户端上的HOSTS文件会将用户重定向到错误位置.
破坏IP配置
破坏IP配置可能导致客户端具有错误的NDS服务器定义. 这可直接在客户端上或在网络的DHCP服务器上完成.
使用代理伪造
此方法仅适用于Web通信. 此攻击将虚假Web代理数据植入客户端的浏览器, 然后攻击者操作恶意代理服务器. 恶意代理服务器可修改HTTP流量包, 以将请求重新路由到黑客想要的任何站点.
虽然有许多NDS中毒方法, 但可以采取一些基本安全措施, 极大地降低其威胁程度:
- 限制从内部DNS服务器到外部DNS服务器的区域传输. 这是通过组织入站TCP端口53(区域传输请求)和UDP端口53(查询)来实现的.
- 限制外部DNS服务器从内部DNS服务器中拉去区域传输的外部DNS服务器.
- 部署网络入侵检测系统(NIDS)以监视异常DNS流量
- 正确加固专用网络中的所有DNS, 服务器和客户端系统.
- 使用DNSSEC保护DNS基础设施
要求内部客户端通过内部DNS解析所有域名. 这将要求阻止出站UDP端口53(用于查询), 同时保持打开的出站TCP端口53(用于区域传输).
与DNS中毒和/或DNS欺骗密切相关的另一个攻击是DNS域名欺诈. 域名欺诈是将有效网站的URL或IP地址恶意重定向到虚假网站. 这通常是网络钓鱼攻击的一部分, 攻击者试图欺骗受害者放弃登录凭据. 如果潜在的受害者不小心或不注意, 他们可能会受骗, 向虚假网站提供登录信息. 通常通过修改系统上的本地HOSTS文件或通过中毒或欺骗DNS解析来进行域名欺骗. 域名欺骗是一项越来越有问题的活动, 因为黑客已经发现了利用DNS漏洞为大量目标用户制定各种域名的手段.
域名劫持
域名劫持或域名盗窃是在未经所有者授权的情况下更改域名注册的恶意行为. 这可通过窃取所有者的登录凭据, 使用XSRF, 会话劫持, 使用MitM或利用域名注册商系统中的缺陷来实现.
有时当另一个人在原始所有者的注册过期后立即注册域名时, 被称为域名劫持, 但事实并非如此. 这可能是一种不道德的做法, 但它并非真正的黑客攻击. 他正是利用了原始所有者未能自动续订域名的漏洞实现的. 如果原始所有者因未能保持注册而丢失域名, 除了联系新所有者并协商重新获得控制权外, 通常没有追索权.
当一个组织失去域名控制权并且其他人接管控制权时, 这对组织及其客户的访问者来说都是一个毁灭性时间. 原始网站或在线内容将不再可用(或至少在同一域名上不可用). 并且新所有者可能托管完全不同的内容或托管上一个网站的虚假副本. 后续活动可能导致欺骗访问者, 类似于网络钓鱼攻击, 可能会提取和搜集个人身份信息(PII).
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具