WEB安全笔记之计算机网络与协议(三)
2.6. 域名系统
2.6.1. 简介
DNS是一个简单的请求-响应协议,是将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP协议的53端口。
2.6.2. 术语
2.6.2.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.6.2.2. FQDN
FQDN (Fully-Qualified Domain Name) 是域名的完全形态,主要是包含零长度的根标签,例如 www.example.com.
。
2.6.2.3. TLD
Top-Level Domain (TLD) 是属于根域的一个域,例如 com
或 jp
。
TLD一般可以分为 Country Code Top-Level Domains (ccTLDs) 、Generic Top-Level Domains (gTLDs) 以及其它。
2.6.2.4. IDN
Internationalized Domain Names for Applications (IDNA) 是为了处理非ASCII字符的情况。
2.6.2.5. CNAME
CNAME即Canonical name,又称alias,将域名指向另一个域名。
2.6.2.6. TTL
Time To Live,无符号整数,记录DNS记录过期的时间,最小是0,最大是2147483647 (2^31 - 1)。
2.6.3. 请求响应
2.6.3.1. 响应码
- 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
- NotImplemented-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.
2.6.4. 域名系统工作原理
DNS解析过程是递归查询的,具体过程如下:
- 用户要访问域名www.example.com时,先查看本机hosts是否有记录或者本机是否有DNS缓存,如果有,直接返回结果,否则向递归服务器查询该域名的IP地址
- 递归缓存为空时,首先向根服务器查询com顶级域的IP地址
- 根服务器告知递归服务器com顶级域名服务器的IP地址
- 递归向com顶级域名服务器查询负责example.com的权威服务器的IP
- com顶级域名服务器返回相应的IP地址
- 递归向example.com的权威服务器查询www.example.com的地址记录
- 权威服务器告知www.example.com的地址记录
- 递归服务器将查询结果返回客户端
2.6.5. 根服务器
根服务器是DNS的核心,负责互联网顶级域名的解析,用于维护域的权威信息,并将DNS查询引导到相应的域名服务器。
根服务器在域名树中代表最顶级的 .
域, 一般省略。
13台IPv4根服务器的域名标号为a到m,即a.root-servers.org到m.root-servers.org,所有服务器存储的数据相同,仅包含ICANN批准的TLD域名权威信息。
2.6.6. 权威服务器
权威服务器上存储域名Zone文件,维护域内域名的权威信息,递归服务器可以从权威服务器获得DNS查询的资源记录。
权威服务器需要在所承载的域名所属的TLD管理局注册,同一个权威服务器可以承载不同TLD域名,同一个域也可以有多个权威服务器。
2.6.7. 递归服务器
递归服务器负责接收用户的查询请求,进行递归查询并响应用户查询请求。在初始时递归服务器仅有记录了根域名的Hint文件。
2.6.8. DGA
DGA(Domain Generate Algorithm,域名生成算法)是一种利用随机字符来生成C&C域名,从而逃避域名黑名单检测的技术手段,常见于botnet中。一般来说,一个DGA域名的存活时间约在1-7天左右。
通信时,客户端和服务端都运行同一套DGA算法,生成相同的备选域名列表,当需要发动攻击的时候,选择其中少量进行注册,便可以建立通信,并且可以对注册的域名应用速变IP技术,快速变换IP,从而域名和IP都可以进行快速变化。
DGA域名有多种生成方式,根据种子类型可以分为确定性和不确定性的生成。不确定性的种子可能会选用当天的一些即时数据,如汇率信息等。
2.6.9. 安全机制
作为主流的防御方案,DNS加密有五种方案,分别是 DNS-over-TLS (DoT)、DNS-over-DTLS、DNS-over-HTTPS (DoH)、DNS-over-QUIC以及DNSCrypt。
2.6.9.1. DoT
DoT方案在2016年发表于RFC7858,使用853端口。主要思想是Client和Server通过TCP协议建立TLS会话后再进行DNS传输,Client通过SSL证书验证服务器身份。
2.6.9.2. DNS-over-DTLS
DNS-over-DTLS和DoT类似,区别在于使用UDP协议而不是TCP协议。
2.6.9.3. DoH
DoH方案在发表RFC8484,使用 https://dns.example.com/dns-query{?dns}
来查询服务器的IP,复用https的443端口,流量特征比较小。DoH会对DNS服务器进行加密认证,不提供fallback选项。目前Cloudflare、Google等服务商对DoH提供了支持。
2.6.9.4. DNS-over-QUIC
DNS-over-QUIC安全特性和DoT类似,但是性能更高,目前没有合适的软件实现。
2.6.9.5. DNSCrypt
DNSCrypt使用X25519-XSalsa20Poly1305而非标准的TLS,且DNSCrypt的Client需要额外的软件,Server需要的专门的证书。
2.6.10. DNS隧道
DNS隧道工具将进入隧道的其他协议流量封装到DNS协议内,在隧道上传输。这些数据包出隧道时进行解封装,还原数据。
2.6.11. 参考链接
2.6.11.1. RFC
- RFC 1034 DOMAIN NAMES CONCEPTS AND FACILITIES
- RFC 1035 DOMAIN NAMES IMPLEMENTATION AND SPECIFICATION
- RFC 1123 Requirements for Internet Hosts — Application and Support
- RFC 3596 DNS Extensions to Support IP Version 6
- RFC 5001 Automated Updates of DNS Security (DNSSEC) Trust Anchors
- RFC 5936 DNS Zone Transfer Protocol
- RFC 6376 DomainKeys Identified Mail (DKIM) Signatures
- RFC 6762 Multicast DNS
- RFC 6891 Extension Mechanisms for DNS (EDNS(0))
- RFC 6895 DNS IANA Considerations
- RFC 7766 DNS Transport over TCP - Implementation Requirements
- RFC 7858 Specification for DNS over Transport Layer Security (TLS)
- RFC 8082 NXDOMAIN
- RFC 8482 Providing Minimal-Sized Responses to DNS Queries That Have QTYPE=ANY
- RFC 8484 DNS Queries over HTTPS (DoH)
- RFC 8490 DNS Stateful Operations
- RFC 8499 DNS Terminology
2.6.11.2. 工具
2.6.11.3. 研究文章
- DGA域名的今生前世:缘起、检测、与发展
- 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.
- An End-to-End Large-Scale Measurement of DNS-over-Encryption: How Far Have We Come?
2.7. HTTP标准
2.7.1. 报文格式
2.7.1.1. 请求报文格式
- <method><request-URL><version>
- <headers>
- <entity-body>
2.7.1.2. 响应报文格式
- <version><status><reason-phrase>
- <headers>
- <entity-body>
2.7.1.3. 字段解释
-
- method
-
- HTTP动词
- 常见方法:HEAD / GET / POST / PUT / DELETE / PATCH / OPTIONS / TRACE
- 扩展方法:LOCK / MKCOL / COPY / MOVE
-
- version
-
- 报文使用的HTTP版本
- 格式为HTTP/.
-
- url
-
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
2.7.2. 请求头列表
-
- Accept
-
- 指定客户端能够接收的内容类型
- Accept: text/plain, text/html
-
- Accept-Charset
-
- 浏览器可以接受的字符编码集
- Accept-Charset: iso-8859-5
-
- Accept-Encoding
-
- 指定浏览器可以支持的web服务器返回内容压缩编码类型
- Accept-Encoding: compress, gzip
-
- Accept-Language
-
- 浏览器可接受的语言
- Accept-Language: en,zh
-
- Accept-Ranges
-
- 可以请求网页实体的一个或者多个子范围字段
- Accept-Ranges: bytes
-
- Authorization
-
- HTTP授权的授权证书
- Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
-
- Cache-Control
-
- 指定请求和响应遵循的缓存机制 Cache-Control: no-cache
-
- Connection
-
- 表示是否需要持久连接 // HTTP 1.1默认进行持久连接
- Connection: close
-
- Cookie
-
- HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器
- Cookie: role=admin;ssid=1
-
- Content-Length
-
- 请求的内容长度
- Content-Length: 348
-
- Content-Type
-
- 请求的与实体对应的MIME信息
- Content-Type: application/x-www-form-urlencoded
-
- Date
-
- 请求发送的日期和时间
- Date: Tue, 15 Nov 2010 08:12:31 GMT
-
- Expect
-
- 请求的特定的服务器行为
- Expect: 100-continue
-
- From
-
- 发出请求的用户的Email
- From: user@email.com
-
- Host
-
- 指定请求的服务器的域名和端口号
- Host: www.github.com
-
- If-Match
-
- 只有请求内容与实体相匹配才有效
- If-Match: "737060cd8c284d8af7ad3082f209582d"
-
- If-Modified-Since
-
- 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码
- If-Modified-Since: Sat, 29 Oct 2018 19:43:31 GMT
-
- If-None-Match
-
- 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变
- If-None-Match: "737060cd8c284d8af7ad3082f209582d"
-
- If-Range
-
- 如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag
- If-Range: “737060cd8c284d8af7ad3082f209582d”
-
- If-Unmodified-Since
-
- 只在实体在指定时间之后未被修改才请求成功
- If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT
-
- Max-Forwards
-
- 限制信息通过代理和网关传送的时间
- Max-Forwards: 10
-
- Pragma
-
- 用来包含实现特定的指令
- Pragma: no-cache
-
- Proxy-Authorization
-
- 连接到代理的授权证书
- Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
-
- Range
-
- 只请求实体的一部分,指定范围
- Range: bytes=500-999
-
- Referer
-
- 先前网页的地址,当前请求网页紧随其后,即来路
- Referer: http://www.zcmhi.com/archives/71.html
-
- TE
-
- 客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息
- TE: trailers,deflate;q=0.5
-
- Upgrade
-
- 向服务器指定某种传输协议以便服务器进行转换(如果支持)
- Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
-
- User-Agent
-
- User-Agent的内容包含发出请求的用户信息
- User-Agent: Mozilla/5.0 (Linux; X11)
-
- Via
-
- 通知中间网关或代理服务器地址,通信协议
- Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
-
- Warning
-
- 关于消息实体的警告信息
- Warn: 199 Miscellaneous warning
2.7.3. 响应头列表
-
- Accept-Ranges
-
- 表明服务器是否支持指定范围请求及哪种类型的分段请求
- Accept-Ranges: bytes
-
- Access-Control-Allow-Origin
-
- 配置有权限访问资源的域
- Access-Control-Allow-Origin: |*
-
- Age
-
- 从原始服务器到代理缓存形成的估算时间(以秒计,非负)
- Age: 12
-
- Allow
-
- 对某网络资源的有效的请求行为,不允许则返回405
- Allow: GET, HEAD
-
- Cache-Control
-
- 告诉所有的缓存机制是否可以缓存及哪种类型
- Cache-Control: no-cache
-
- Content-Encoding
-
- web服务器支持的返回内容压缩编码类型。
- Content-Encoding: gzip
-
- Content-Language
-
- 响应体的语言
- Content-Language: en,zh
-
- Content-Length
-
- 响应体的长度
- Content-Length: 348
-
- Content-Location
-
- 请求资源可替代的备用的另一地址
- Content-Location: /index.htm
-
- Content-MD5
-
- 返回资源的MD5校验值
- Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
-
- Content-Range
-
- 在整个返回体中本部分的字节位置
- Content-Range: bytes 21010-47021/47022
-
- Content-Type
-
- 返回内容的MIME类型
- Content-Type: text/html; charset=utf-8
-
- Date
-
- 原始服务器消息发出的时间
- Date: Tue, 15 Nov 2010 08:12:31 GMT
-
- ETag
-
- 请求变量的实体标签的当前值
- ETag: "737060cd8c284d8af7ad3082f209582d"
-
- Expires
-
- 响应过期的日期和时间
- Expires: Thu, 01 Dec 2010 16:00:00 GMT
-
- Last-Modified
-
- 请求资源的最后修改时间
- Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT
-
- Location
-
- 用来重定向接收方到非请求URL的位置来完成请求或标识新的资源
- Location: http://www.zcmhi.com/archives/94.html
-
- Pragma
-
- 包括实现特定的指令,它可应用到响应链上的任何接收方
- Pragma: no-cache
-
- Proxy-Authenticate
-
- 它指出认证方案和可应用到代理的该URL上的参数
- Proxy-Authenticate: Basic
-
- Refresh
-
- 应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持)
- Refresh: 5; url=http://www.zcmhi.com/archives/94.html
-
- Retry-After
-
- 如果实体暂时不可取,通知客户端在指定时间之后再次尝试
- Retry-After: 120
-
- Server
-
- web服务器软件名称
- Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
-
- Set-Cookie
-
- 设置Http Cookie Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1
-
- Strict-Transport-Security
-
- 设置浏览器强制使用HTTPS访问
- max-age: x秒的时间内 访问对应域名都使用HTTPS请求
- includeSubDomains: 网站的子域名也启用规则
- Strict-Transport-Security: max-age=1000; includeSubDomains
-
- Trailer
-
- 指出头域在分块传输编码的尾部存在 Trailer: Max-Forwards
-
- Transfer-Encoding
-
- 文件传输编码
- Transfer-Encoding:chunked
-
- Vary
-
- 告诉下游代理是使用缓存响应还是从原始服务器请求
- Vary: *
-
- Via
-
- 告知代理客户端响应是通过哪里发送的
- Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
-
- Warning
-
- 警告实体可能存在的问题
- Warning: 199 Miscellaneous warning
-
- WWW-Authenticate
-
- 表明客户端请求实体应该使用的授权方案
- WWW-Authenticate: Basic
-
- X-Content-Type-Options
-
- 配置禁止MIME类型嗅探
- X-Content-Type-Options: nosniff
-
- X-Frame-Options
-
- 配置页面是否能出现在 ,
2.7.4. HTTP状态返回代码 1xx(临时响应)
表示临时响应并需要请求者继续执行操作的状态代码。
Code | 代码 | 说明 |
---|---|---|
100 | 继续 | 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分 |
101 | 切换协议 | 请求者已要求服务器切换协议,服务器已确认并准备切换 |
2.7.5. HTTP状态返回代码 2xx (成功)
表示成功处理了请求的状态代码。
Code | 代码 | 说明 |
---|---|---|
200 | 成功 | 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页 |
201 | 已创建 | 请求成功并且服务器创建了新的资源 |
202 | 已接受 | 服务器已接受请求,但尚未处理 |
203 | 非授权信息 | 服务器已成功处理了请求,但返回的信息可能来自另一来源 |
204 | 无内容 | 服务器成功处理了请求,但没有返回任何内容 |
205 | 重置内容 | m服务器成功处理了请求,但没有返回任何内容 |
206 | 部分内容 | 服务器成功处理了部分GET请求 |
2.7.6. HTTP状态返回代码 3xx (重定向)
表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
Code | 代码 | 说明 |
---|---|---|
300 | 多种选择 | 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。 |
301 | 永久移动 | 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。 |
302 | 临时移动 | 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 |
303 | 查看其他位置 | 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。 |
304 | 未修改 | 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。 |
305 | 使用代理 | 请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。 |
307 | 临时重定向 | 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 |
2.7.7. HTTP状态返回代码 4xx(请求错误)
这些状态代码表示请求可能出错,妨碍了服务器的处理。
Code | 代码 | 说明 |
---|---|---|
400 | 错误请求 | 服务器不理解请求的语法。 |
401 | 未授权 | 请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。 |
403 | 禁止 | 服务器拒绝请求。 |
404 | 未找到 | 服务器找不到请求的网页。 |
405 | 方法禁用 | 禁用请求中指定的方法。 |
406 | 不接受 | 无法使用请求的内容特性响应请求的网页。 |
407 | 需要代理授权 | 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。 |
408 | 请求超时 | 服务器等候请求时发生超时。 |
409 | 冲突 | 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。 |
410 | 已删除 | 如果请求的资源已永久删除,服务器就会返回此响应。 |
411 | 需要有效长度 | 服务器不接受不含有效内容长度标头字段的请求。 |
412 | 未满足前提条件 | 服务器未满足请求者在请求中设置的其中一个前提条件。 |
413 | 请求实体过大 | 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。 |
414 | 请求的 URI 过长 | 请求的 URI(通常为网址)过长,服务器无法处理。 |
415 | 不支持的媒体类型 | 请求的格式不受请求页面的支持。 |
416 | 请求范围不符合要求 | 如果页面无法提供请求的范围,则服务器会返回此状态代码。 |
417 | 未满足期望值 | 服务器未满足"期望"请求标头字段的要求。 |
2.7.8. HTTP状态返回代码 5xx(服务器错误)
这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。
Code | 代码 | 说明 |
---|---|---|
500 | 服务器内部错误 | 服务器遇到错误,无法完成请求。 |
501 | 尚未实施 | 服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。 |
502 | 错误网关 | 服务器作为网关或代理,从上游服务器收到无效响应。 |
503 | 服务不可用 | 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。 |
504 | 网关超时 | 服务器作为网关或代理,但是没有及时从上游服务器收到请求。 |
505 | HTTP 版本不受支持 | 服务器不支持请求中所用的 HTTP 协议版本。 |
2.6. 域名系统
2.6.1. 简介
DNS是一个简单的请求-响应协议,是将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP协议的53端口。
2.6.2. 术语
2.6.2.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.6.2.2. FQDN
FQDN (Fully-Qualified Domain Name) 是域名的完全形态,主要是包含零长度的根标签,例如 www.example.com.
。
2.6.2.3. TLD
Top-Level Domain (TLD) 是属于根域的一个域,例如 com
或 jp
。
TLD一般可以分为 Country Code Top-Level Domains (ccTLDs) 、Generic Top-Level Domains (gTLDs) 以及其它。
2.6.2.4. IDN
Internationalized Domain Names for Applications (IDNA) 是为了处理非ASCII字符的情况。
2.6.2.5. CNAME
CNAME即Canonical name,又称alias,将域名指向另一个域名。
2.6.2.6. TTL
Time To Live,无符号整数,记录DNS记录过期的时间,最小是0,最大是2147483647 (2^31 - 1)。
2.6.3. 请求响应
2.6.3.1. 响应码
- 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
- NotImplemented-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.
2.6.4. 域名系统工作原理
DNS解析过程是递归查询的,具体过程如下:
- 用户要访问域名www.example.com时,先查看本机hosts是否有记录或者本机是否有DNS缓存,如果有,直接返回结果,否则向递归服务器查询该域名的IP地址
- 递归缓存为空时,首先向根服务器查询com顶级域的IP地址
- 根服务器告知递归服务器com顶级域名服务器的IP地址
- 递归向com顶级域名服务器查询负责example.com的权威服务器的IP
- com顶级域名服务器返回相应的IP地址
- 递归向example.com的权威服务器查询www.example.com的地址记录
- 权威服务器告知www.example.com的地址记录
- 递归服务器将查询结果返回客户端
2.6.5. 根服务器
根服务器是DNS的核心,负责互联网顶级域名的解析,用于维护域的权威信息,并将DNS查询引导到相应的域名服务器。
根服务器在域名树中代表最顶级的 .
域, 一般省略。
13台IPv4根服务器的域名标号为a到m,即a.root-servers.org到m.root-servers.org,所有服务器存储的数据相同,仅包含ICANN批准的TLD域名权威信息。
2.6.6. 权威服务器
权威服务器上存储域名Zone文件,维护域内域名的权威信息,递归服务器可以从权威服务器获得DNS查询的资源记录。
权威服务器需要在所承载的域名所属的TLD管理局注册,同一个权威服务器可以承载不同TLD域名,同一个域也可以有多个权威服务器。
2.6.7. 递归服务器
递归服务器负责接收用户的查询请求,进行递归查询并响应用户查询请求。在初始时递归服务器仅有记录了根域名的Hint文件。
2.6.8. DGA
DGA(Domain Generate Algorithm,域名生成算法)是一种利用随机字符来生成C&C域名,从而逃避域名黑名单检测的技术手段,常见于botnet中。一般来说,一个DGA域名的存活时间约在1-7天左右。
通信时,客户端和服务端都运行同一套DGA算法,生成相同的备选域名列表,当需要发动攻击的时候,选择其中少量进行注册,便可以建立通信,并且可以对注册的域名应用速变IP技术,快速变换IP,从而域名和IP都可以进行快速变化。
DGA域名有多种生成方式,根据种子类型可以分为确定性和不确定性的生成。不确定性的种子可能会选用当天的一些即时数据,如汇率信息等。
2.6.9. 安全机制
作为主流的防御方案,DNS加密有五种方案,分别是 DNS-over-TLS (DoT)、DNS-over-DTLS、DNS-over-HTTPS (DoH)、DNS-over-QUIC以及DNSCrypt。
2.6.9.1. DoT
DoT方案在2016年发表于RFC7858,使用853端口。主要思想是Client和Server通过TCP协议建立TLS会话后再进行DNS传输,Client通过SSL证书验证服务器身份。
2.6.9.2. DNS-over-DTLS
DNS-over-DTLS和DoT类似,区别在于使用UDP协议而不是TCP协议。
2.6.9.3. DoH
DoH方案在发表RFC8484,使用 https://dns.example.com/dns-query{?dns}
来查询服务器的IP,复用https的443端口,流量特征比较小。DoH会对DNS服务器进行加密认证,不提供fallback选项。目前Cloudflare、Google等服务商对DoH提供了支持。
2.6.9.4. DNS-over-QUIC
DNS-over-QUIC安全特性和DoT类似,但是性能更高,目前没有合适的软件实现。
2.6.9.5. DNSCrypt
DNSCrypt使用X25519-XSalsa20Poly1305而非标准的TLS,且DNSCrypt的Client需要额外的软件,Server需要的专门的证书。
2.6.10. DNS隧道
DNS隧道工具将进入隧道的其他协议流量封装到DNS协议内,在隧道上传输。这些数据包出隧道时进行解封装,还原数据。
2.6.11. 参考链接
2.6.11.1. RFC
- RFC 1034 DOMAIN NAMES CONCEPTS AND FACILITIES
- RFC 1035 DOMAIN NAMES IMPLEMENTATION AND SPECIFICATION
- RFC 1123 Requirements for Internet Hosts — Application and Support
- RFC 3596 DNS Extensions to Support IP Version 6
- RFC 5001 Automated Updates of DNS Security (DNSSEC) Trust Anchors
- RFC 5936 DNS Zone Transfer Protocol
- RFC 6376 DomainKeys Identified Mail (DKIM) Signatures
- RFC 6762 Multicast DNS
- RFC 6891 Extension Mechanisms for DNS (EDNS(0))
- RFC 6895 DNS IANA Considerations
- RFC 7766 DNS Transport over TCP - Implementation Requirements
- RFC 7858 Specification for DNS over Transport Layer Security (TLS)
- RFC 8082 NXDOMAIN
- RFC 8482 Providing Minimal-Sized Responses to DNS Queries That Have QTYPE=ANY
- RFC 8484 DNS Queries over HTTPS (DoH)
- RFC 8490 DNS Stateful Operations
- RFC 8499 DNS Terminology
2.6.11.2. 工具
2.6.11.3. 研究文章
- DGA域名的今生前世:缘起、检测、与发展
- 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.
- An End-to-End Large-Scale Measurement of DNS-over-Encryption: How Far Have We Come?