Web安全学习笔记 网络与协议下
Web安全学习笔记 网络与协议下
繁枝插云欣 ——ICML8
- 域名系统
- 邮件协议族
- SSL/TLS
- IPsec
- WIFI
2.6. 域名系统 
简介
DNS是一个简单的请求-响应协议
是将域名和IP地址相互映射的一个分布式数据库
能够使人更方便地访问互联网
DNS使用TCP和UDP协议的53端口
术语
1.mDNS
Multicast DNS (mDNS)
多播DNS,使用5353端口
组播地址为 224.0.0.251 或 [FF02::FB]
在一个没有常规DNS服务器的小型网络内
可以使用mDNS来实现类似DNS的
编程接口、包格式和操作语义
mDNS协议的报文与DNS的报文结构相同
但有些字段对于mDNS来说有新的含义
启动mDNS的主机会在进入局域网后向所有主机组播消息 包含主机名、IP等信息 其他拥有相应服务的主机也会响应含有主机名和IP的信息。 mDNS的域名是用 .local 和普通域名区分开的
2.FQDN
FQDN (Fully-Qualified Domain Name)
是域名的完全形态
主要是包含零长度的根标签
例如 www.example.com.
3.TLD
Top-Level Domain (TLD)
是属于根域的一个域
例如 com 或 jp
TLD一般可以分为
Country Code Top-Level Domains (ccTLDs)
Generic Top-Level Domains (gTLDs)
以及其它
4.IDN
Internationalized Domain
Names for Applications
(IDNA) 是为了处理非ASCII字符的情况
5.CNAME
CNAME即Canonical name
又称alias
将域名指向另一个域名
6.TTL
Time To Live,无符号整数
记录DNS记录过期的时间
最小是0
最大是2147483647 (2^31 - 1)
2.6.3. 请求响应
DNS记录
A记录
返回域名对应的IPv4地址
NS记录
域名服务器
返回该域名由哪台域名服务器解析
PTR记录
反向记录
从IP地址到域名的记录
MX记录
电子邮件交换记录
记录邮件域名对应的IP地址
响应码
NOERROR
No error condition
FORMERR
Format error - The name server was unable to interpret the query
SERVFAIL
Server failure - The name server was unable to process this query due to a problem with the name server
NXDOMAIN
this code signifies that the domain name referenced in the query does not exist
NOTIMP
Not Implemented - The name server does not support the requested kind of query
REFUSED
Refused - The name server refuses to perform the specified operation for policy reasons
NODATA
A pseudo RCODE which indicates that the name is valid, for the given class, but [there] are no records of the given type A NODATA response has to be inferred from the answer.
域名系统工作原理
解析过程
DNS解析过程是递归查询的
具体过程如下:
1.用户要访问域名www.example.com时
先查看本机hosts是否有记录
或者本机是否有DNS缓存
如果有,直接返回结果
否则向递归服务器查询该域名的IP地址
2.递归缓存为空时
首先向根服务器查询com顶级域的IP地址
3.根服务器告知递归服务器
com顶级域名服务器的IP地址
4.递归向com顶级域名服务器查询
负责example.com的权威服务器的IP
5.com顶级域名服务器返回相应的IP地址
6.递归向example.com的权威服务器查询
www.example.com的地址记录
7.权威服务器告知www.example.com的地址记录
8.递归服务器将查询结果返回客户端
域传送
DNS服务器可以分为主服务器、备份服务器
和缓存服务器
域传送是指备份服务器从主服务器拷贝数据
并使用得到的数据更新自身数据库
域传送是在主备服务器之间同步数据库的机制
服务器类型
根服务器
根服务器是DNS的核心
负责互联网顶级域名的解析
用于维护域的权威信息
并将DNS查询引导到相应的域名服务器
根服务器在域名树中代表最顶级的 . 域, 一般省略。
13台IPv4根服务器的域名标号为a到m,即a.root-servers.org到m.root-servers.org,所有服务器存储的数据相同,仅包含ICANN批准的TLD域名权威信息。
权威服务器
权威服务器上存储域名Zone文件
维护域内域名的权威信息
递归服务器可以从权威服务器
获得DNS查询的资源记录
权威服务器需要在所承载的域名所属的TLD管理局注册,同一个权威服务器可以承载不同TLD域名,同一个域也可以有多个权威服务器。
递归服务器
递归服务器负责接收用户的查询请求
进行递归查询并响应用户查询请求
在初始时递归服务器仅有记录了根域名的Hint文件
DNS利用
DGA
DGA(Domain Generate Algorithm,域名生成算法) 是一种利用随机字符来生成C&C域名,从而逃避域名黑名单检测的技术手段,常见于botnet中。一般来说,一个DGA域名的存活时间约在1-7天左右。
通信时,客户端和服务端都运行同一套DGA算法,生成相同的备选域名列表,当需要发动攻击的时候,选择其中少量进行注册,便可以建立通信,并且可以对注册的域名应用速变IP技术,快速变换IP,从而域名和IP都可以进行快速变化。
DGA域名有多种生成方式
根据种子类型可以分为确定性和不确定性的生成
不确定性的种子可能会选用当天的一些即时数据
如汇率信息等
DNS隧道
DNS隧道工具将进入隧道的其他协议流量
封装到DNS协议内
在隧道上传输
这些数据包出隧道时进行解封装
还原数据
加密方案
作为主流的防御方案,DNS加密有五种方案分别是
DNS-over-TLS (DoT)
DNS-over-DTLS
DNS-over-HTTPS (DoH)
DNS-over-QUIC
DNSCrypt
DoT
DoT方案在2016年发表于RFC7858,使用853端口。主要思想是Client和Server通过TCP协议建立TLS会话后再进行DNS传输,Client通过SSL证书验证服务器身份。
DNS-over-DTLS
DNS-over-DTLS和DoT类似,区别在于使用UDP协议而不是TCP协议。
DoH
DoH方案在发表RFC8484,使用 https://dns.example.com/dns-query{?dns} 来查询服务器的IP,复用https的443端口,流量特征比较小。DoH会对DNS服务器进行加密认证,不提供fallback选项。目前Cloudflare、Google等服务商对DoH提供了支持。
DNS-over-QUIC
DNS-over-QUIC安全特性和DoT类似,但是性能更高,目前没有合适的软件实现。
DNSCrypt
DNSCrypt使用X25519-XSalsa20Poly1305而非标准的TLS,`且DNSCrypt的Client需要额外的软件,Server需要的专门的证书。
`
相关漏洞
DNS劫持
DNS劫持有多种方式
比较早期的攻击方式是通过
攻击域名解析服务器
或是伪造DNS响应的方法
来将域名解析到恶意的IP地址
随着互联网应用的不断发展,出现了基于废弃记录的劫持方式。这种方式发生的场景是次级域名的解析记录指向第三方资源,而第三方资源被释放后,解析记录并没有取消,在这种场景下,可以对应申请第三方资源,以获取控制解析记录的能力。
拒绝服务
DNS服务通常会开启UDP端口
当DNS服务器拥有大量二级域NS记录时
通过DNS的UDP反射攻击可以实现高倍的拒绝服务
参考链接
RFC
执行标准就不再赘述,有兴趣自己看看
工具
bind9
https://github.com/isc-projects/bind9
BIND (Berkeley Internet Name Domain)
是一个完整的、高度可移植的 域名系统(DNS)协议的实现
BIND 名称服务器, named, 可以作为权威名称 服务器、递归解析器、DNS 转发器,或同时使用这三个。 它 实现水平分割 DNS、自动 DNSSEC 区域签名和 密钥管理,目录区域,以方便提供区域数据 在整个名称服务器星座中,响应策略区 (RPZ) 保护客户端免受恶意数据、响应速率限制 (RRL) 和 递归查询限制以减少分布式拒绝服务攻击, 和许多其他高级 DNS 功能。 BIND 还包括一套 管理工具,包括 dig和 delvDNS查找工具, nsupdate对于动态 DNS 区域更新, rndc用于远程名称服务器 行政等。
Unbound
https://github.com/NLnetLabs/unbound
Unbound 是一个验证、递归、缓存的 DNS 解析器。 它被设计成 快速、精简,并结合了基于开放标准的现代功能。
研究文章
1.DGA域名的今生前世:缘起、检测、与发展
https://mp.weixin.qq.com/s/xbf0Qbppk8R0nx89Pb4YTg
2.DNSSEC原理和分析
https://blog.thecjw.me/?p=1221
3.Plohmann D, Yakdan K, Klatt M, et al. A comprehensive measurement study of domain generating malware[C]//25th {USENIX} Security Symposium ({USENIX} Security 16). 2016: 263-278.
4.An End-to-End Large-Scale Measurement of DNS-over-Encryption: How Far Have We Come?
相关CVE
SIGRed – Resolving Your Way into Domain Admin: Exploiting a 17 Year-old Bug in Windows DNS Servers
2.8. 邮件协议族 
简介
SMTP
SMTP (Simple Mail Transfer Protocol)
是一种电子邮件传输的协议
是一组用于从源地址到目的地址传输邮件的规范
不启用SSL时端口号为25
启用SSL时端口号多为465或994
POP3
POP3 (Post Office Protocol 3)
用于支持使用客户端远程管理在服务器上的
电子邮件
不启用SSL时端口号为110
启用SSL时端口号多为995
IMAP
IMAP (Internet Mail Access Protocol)
即交互式邮件存取协议
它是跟POP3类似邮件访问标准协议之一
不同的是,开启了IMAP后
您在电子邮件客户端收取的邮件
仍然保留在服务器上
同时在客户端上的操作都会反馈到服务器上
如:删除邮件,标记已读等
服务器上的邮件也会做相应的动作
不启用SSL时端口号为143
启用SSL时端口号多为993
防护策略
SPF
发件人策略框架 (Sender Policy Framework, SPF) 是一套电子邮件认证机制,用于确认电子邮件是否由网域授权的邮件服务器寄出,防止有人伪冒身份网络钓鱼或寄出垃圾邮件。SPF允许管理员设定一个DNS TXT记录或SPF记录设定发送邮件服务器的IP范围,如有任何邮件并非从上述指明授权的IP地址寄出,则很可能该邮件并非确实由真正的寄件者寄出。
DKIM
域名密钥识别邮件 (DomainKeys Identified Mail, DKIM) 是一种检测电子邮件发件人地址伪造的方法。发送方会在邮件的头中插入DKIM-Signature,收件方通过查询DNS记录中的公钥来验证发件人的信息。
DMARC
基于网域的消息认证、报告和一致性 (Domain-based Message Authentication, Reporting and Conformance, DMARC) 是电子邮件身份验证协议,用于解决在邮件栏中显示的域名和验证的域名不一致的问题。要通过 DMARC 检查,必须通过 SPF 或/和 DKIM 的身份验证,且需要标头地址中的域名必须与经过身份验证的域名一致。
参考链接
研究文章
Composition Kills:A Case Study of Email Sender Authentication
https://i.blackhat.com/USA-20/Thursday/us-20-Chen-You-Have-No-Idea-Who-Sent-That-Email-18-Attacks-On-Email-Sender-Authentication-wp.pdf
2.9. SSL/TLS 
简介
SSL全称是Secure Sockets Layer
安全套接字层
它是由网景公司(Netscape)在1994年时设计
主要用于Web的安全传输协议
目的是为网络通信提供机密性
认证性及数据完整性保障
如今
SSL已经成为互联网保密通信的工业标准
SSL最初的几个版本(SSL 1.0、SSL2.0、SSL 3.0)由网景公司设计和维护,从3.1版本开始,SSL协议由因特网工程任务小组(IETF)正式接管,并更名为TLS(Transport Layer Security),发展至今已有TLS 1.0、TLS1.1、TLS1.2、TLS1.3这几个版本。
如TLS名字所说
SSL/TLS协议仅保障传输层安全
同时,由于协议自身特性(数字证书机制)
SSL/TLS不能被用于
保护多跳(multi-hop)端到端通信
而只能保护点到点通信
SSL/TLS协议能够提供的安全目标主要包括如下几个:
认证性
借助数字证书认证服务端端和客户端身份
防止身份伪造
机密性
借助加密防止第三方窃听
完整性
借助消息认证码(MAC)保障数据完整性
防止消息篡改
重放保护
通过使用隐式序列号防止重放攻击
为了实现这些安全目标,SSL/TLS协议被设计为一个两阶段协议,分为握手阶段和应用阶段:
握手阶段也称协商阶段,在这一阶段
客户端和服务端端会认证对方身份
(依赖于PKI体系,利用数字证书进行身份认证)
并协商通信中使用的安全参数
密码套件以及MasterSecret
后续通信使用的所有密钥都是
通过MasterSecret生成
在握手阶段完成后
进入应用阶段
在应用阶段通信双方使用握手阶段
协商好的密钥进行安全通信
协议
TLS 包含几个子协议,比较常用的有记录协议、警报协议、握手协议、变更密码规范协议等。
记录协议
记录协议(Record Protocol)
规定了 TLS 收发数据的基本单位记录
(record)
警报协议
警报协议(Alert Protocol)
用于提示协议交互过程出现错误
握手协议
握手协议(Handshake Protocol)
是 TLS里最复杂的子协议
在握手过程中协商 TLS 版本号
随机数、密码套件等信息
然后交换证书和密钥参数
最终双方协商得到会话密钥
用于后续的混合加密系统
变更密码规范协议
变更密码规范协议
(Change Cipher Spec Protocol)
是一个“通知”
告诉对方
后续的数据都将使用加密保护
交互过程
Client Hello
Client Hello 由客户端发送
内容包括客户端的一个Unix时间戳
(GMT Unix Time)
一些随机的字节
(Random Bytes)
还包括了客户端接受的算法类型
(Cipher Suites)
Server Hello
Server Hello 由服务端发送
内容包括服务端支持的算法类型
GMT Unix Time以及
Random Bytes
Certificate 由服务端或者客户端发送,发送方会会将自己的数字证书发送给接收方,由接收方进行证书验证,如果不通过的话,接收方会中断握手的过程。一般跟在Client / Server Hello报文之后。
Server Key Exchange
由服务端发送,将自己的公钥参数传输给了客户端,一般也和Server Hello与Certificate在一个TCP报文中。
Server Hello Done
服务端发送,一般也和Server Hello、Certificate和Server Key Exchange在一个TCP报文中。
Client Key Exchange
客户端发送,向服务端发送自己的公钥参数,与服务端协商密钥。
Change Cipher Spec
客户端或者服务端发送,紧跟着Key Exchange发送,代表自己生成了新的密钥,通知对方以后将更换密钥,使用新的密钥进行通信。
Encrypted Handshake Message
客户端或者服务端发送,紧跟着Key Exchange发送。进行测试,一方用自己的刚刚生成的密钥加密一段固定的消息发送给对方,如果密钥协商正确无误的话,对方可以正确解密。
New Session Ticket
服务端发送,表示发起会话,在一段时间之内(超时时间到来之前),双方都以刚刚交换的密钥进行通信。从这以后,加密通信正式开始。
Application Data
使用密钥交换协议协商出来的密钥加密的应用层的数据。
Encrypted Alert
客户端或服务端发送,意味着加密通信因为某些原因需要中断,警告对方不要再发送敏感的数据。
版本更新内容
TLS 1.3
1.引入了PSK作为新的密钥协商机制
2.支持 0-RTT 模式,以安全性降低为代价,在建立连接时节省了往返时间
3.ServerHello 之后的所有握手消息采取了加密操作,可见明文减少
4.不再允许对加密报文进行压缩、不再允许双方发起重协商
5.DSA 证书不再允许在 TLS 1.3 中使用
6.删除不安全的密码算法
1.RSA 密钥传输 - 不支持前向安全性
2.CBC 模式密码 - 易受 BEAST 和 Lucky 13 攻击
3.RC4 流密码 - 在 HTTPS 中使用并不安全
4.SHA-1 哈希函数 - 建议以 SHA-2 取而代之
5.任意 Diffie-Hellman 组- CVE-2016-0701 漏洞
6.输出密码 - 易受 FREAK 和 LogJam 攻击
子协议
SSL/TLS协议有一个高度模块化的架构,分为很多子协议,主要是:
Handshake 协议
包括协商安全参数和密码套件
服务端身份认证(客户端身份认证可选)
密钥交换
ChangeCipherSpec 协议
一条消息表明握手协议已经完成
Alert 协议
对握手协议中一些异常的错误提醒
分为fatal和warning两个级别
fatal类型的错误会直接中断SSL链接
而warning级别的错误SSL链接仍可继续
只是会给出错误警告
Record 协议
包括对消息的分段、压缩
消息认证和完整性保护、加密等
2.10. IPsec 
简介
IPsec(IP Security)是IETF制定的三层隧道加密协议,它为Internet上传输的数据提供了高质量的、可互操作的、基于密码学的安全保证。特定的通信方之间在IP层通过加密与数据源认证等方式,提供了以下的安全服务:
数据机密性(Confidentiality)
IPsec发送方在通过网络传输包前对包进行加密。
数据完整性(Data Integrity)
IPsec接收方对发送方发送来的包进行认证
以确保数据在传输过程中没有被篡改
数据来源认证(Data Authentication)
IPsec在接收端可以认证
发送IPsec报文的发送端是否合法。
防重放(Anti-Replay)
IPsec接收方可检测并拒绝接收过时或重复的报文
优点
IPsec具有以下优点:
1.IKE(Internet Key Exchange,因特网密钥交换),可实现密钥的自动协商功能,减少了密钥协商的开销。可以通过IKE建立和维护SA的服务,简化了IPsec的使用和管理。
2.使用IP协议进行数据传输的应用系统和服务都可以使用IPsec,而不必对这些应用系统和服务本身做任何修改。
3.据的加密是以数据包为单位的,而不是以整个数据流为单位,这不仅灵活而且有助于进一步提高IP数据包的安全性,可以有效防范网络攻击。
构成
IPsec由四部分内容构成:
1.密钥管理的Internet密钥交换协议IKE(Internet Key Exchange Protocol)
2.将安全服务与使用该服务的通信流相联系的安全关联SA(Security Associations
3.操作数据包的认证头协议AH(IP Authentication Header)和安全载荷协议ESP(IP Encapsulating Security Payload)
4.加密和认证的算法
安全联盟(Security Association,SA)
IPsec在两个端点之间提供安全通信,端点被称为IPsec对等体
SA是IPsec的基础,也是IPsec的本质。SA是通信对等体间对某些要素的约定,例如,使用哪种协议(AH、ESP还是两者结合使用)、协议的封装模式(传输模式和隧道模式)、加密算法(DES、3DES和AES)、特定流中保护数据的共享密钥以及密钥的生存周期等。建立SA的方式有手工配置和IKE自动协商两种。
SA是单向的,在两个对等体之间的双向通信,最少需要两个SA来分别对两个方向的数据流进行安全保护。同时,如果两个对等体希望同时使用AH和ESP来进行安全通信,则每个对等体都会针对每一种协议来构建一个独立的SA。
SA由一个三元组来唯一标识,这个三元组包括SPI(Security Parameter Index,安全参数索引)、目的IP地址、安全协议号(AH或ESP)。
SPI是用于唯一标识SA的一个32比特数值,它在AH和ESP头中传输。在手工配置SA时,需要手工指定SPI的取值。使用IKE协商产生SA时,SPI将随机生成。
IKE
IKE(RFC2407,RFC2408、RFC2409)属于一种混合型协议,由Internet安全关联和密钥管理协议(ISAKMP)和两种密钥交换协议OAKLEY与SKEME组成。IKE创建在由ISAKMP定义的框架上,沿用了OAKLEY的密钥交换模式以及SKEME的共享和密钥更新技术,还定义了它自己的两种密钥交换方式。
IKE使用了两个阶段的ISAKMP:
第一阶段,创建一个通信信道(IKE SA),并对该信道进行验证,为双方进一步的IKE通信提供机密性、消息完整性以及消息源验证服务;
第二阶段,使用已建立的IKE SA建立IPsec SA(V2中叫Child SA)。
2.11. Wi-Fi 
简介
Wi-Fi又称“无线热点”或“无线网络”
是Wi-Fi联盟的商标
一个基于IEEE 802.11标准的无线局域网技术
攻击
暴力破解
WiFi密码是基于预置的秘钥
可以通过抓取报文的方式
在本地快速的批量进行密码爆破尝试
伪造热点
AP可以动态的广播自己
客户也可以主动发送探针请求
可以伪造AP发送对探针请求的响应包
来让客户端错误的识别
秘钥重装攻击
该漏洞由Vanhoef发现
Wi-Fi在握手时双方会更新秘钥
该攻击通过重放握手信息
令客户端重新安装相同的秘钥
Dragonblood
最新版的WPA3标准在实现上存在一些问题
同样由Vanhoef发现
包含拒绝服务攻击、降级攻击、侧信道泄露等