简单聊一下如何劫持系统DNS请求,并综合对比分析下已有的各种方案,仅供参考,欢迎拍砖留言交流^_^
背景
DNS提供了重要的域名解析服务,作为互联网基础设施重要的环节之一。对于任何网络应用,DNS的稳定性及安全性是其中很重要的一项功能。尤其对于网络环境日益复杂网络安全日益重要的当下,保证DNS的稳定可靠以及安全性是当下网络安全企业不得不面对的课题。不管是VPN还是零信任以及SASE等网络应用,DNS代理都是其中重要的一项功能,其承载着用户代理访问重要的入口。
对于一些网络恶意软件,也会使用DNS劫持来污染DNS或者不正当的“勾当”,所以了解DNS劫持防止被篡改也是用户必要学习的课题。并且越来越多的企业及个人用户部署或者使用了安全DNS来规避DNS劫持的安全风险,包括DOH以及DOT等。下面是摘自使用高防御dns服务器的重要性统计的DNS攻击类型,如下图所示:
DNS劫持
主要简单总结下各种系统DNS拦截实现方案。
名称 | 系统及网卡DNS | 虚拟网卡路由 | 防火墙 | 内核驱动 | 内核扩展 | Hook |
---|---|---|---|---|---|---|
原理 | 配置系统及网卡的DNS地址来直接改变DNS服务器解析的地址 | 通过虚拟网卡配置本机全部或者DNS流量路由至虚拟网卡 | 系统网络层重定向 | 内核层IP过滤器过滤网络层53端口UDP数据包 | 用户态的网络过滤器拦截网络层53端口UDP数据包,苹果专门提供了DNS代理网络扩展用于DNS代理以及实现安全DNS | 通过应用层挂钩应用网络层接口来拦截DNS请求 |
优势 | 简单且能过滤所有原生的DNS请求,支持全系统应用层处理 | 能够拦截所有DNS流量且虚拟网卡退出后自动退出DNS拦截,支持全系统应用层处理以及跨平台 | 简单且能过滤所有DNS请求,若存在异常重启系统可以拦截自动失效,支持全系统应用层处理 | 支持内核底层的所有DNS流量且不受应用层拦截的影响,拦截效果最好 | 支持应用层拦截所有DNS流程,其实现基于内核层拦截拦截效果好于其他应用层方案 | 能够拦截应用层特定网络接口的调用从而实现DNS请求拦截 |
劣势 | 因需要修改持久化系统DNS配置,可能存在无法恢复的异常场景 | 需要额外的添加虚拟网卡且需要解析IP包判定DNS请求逻辑 | 应用层处理存在被禁用的情况,以及需要动态监听所有网卡的流程重定向,否则会导致部分DNS流量不能拦截 | 开发复杂且不能支持全系统,自macOS11.0+已经被苹果禁用,需要特定的内核驱动开发者证书签名 | 需要苹果开发正账号开启网络扩展及DNS代理权限,只能支持macOS10.15+系统,且必须经过用户同意方可拦截 | 实现复杂,只能拦截Hook的应用受限于应用权限不能拦截Hook所有应用的DNS请求调用。对于Windows可使用NSP来实现完整的网络层接口调用拦截,但受限于系统不能做到跨平台。 |
对于很多程序员而言以及独立支持DNS代理或者安全DNS的,很多就采用了简单的修改系统DNS方案。而对于很多小白用户修改系统DNS且搭建DNS代理上手起来需要学习成本,并且容易导致系统DNS配置无法恢复的情况,因此对于商业网络应用这种方式不是很友好。除非是后台的DNS代理模块属于后台守护进程一直处于静默服务状态,这样就不会影响用户的网络访问。
对于大部分应用而言,采用虚拟网络路由全流量或者DNS流量的方式更加通用且支持跨平台,是很多网络应用的首选,比如Wireguard、Perimeter81等。对于不需要虚拟网卡或者本地DNS代理模块独立的,采用防火墙方案是更为简单且支持macOS全系统。
对于考虑兼容性以及不受其他代理软件的影响的话,内核驱动以及内核扩展方案是首选,其能够最为底层的来拦截系统的所有DNS流量。但是因为苹果的系统要求限制,目前自macOS11.0+已经禁用了内核驱动的使用,来避免对系统的稳定性以及安全的影响,且内核驱动自macOS10.15+也需要在系统偏好设置中由用户手动允许方可加载至内核。对于内核扩展是苹果推出的替换内核驱动的用户态网络扩展方案,其具体透明代理、DNS代理、安全DNS、内容过滤器以及VPN等不同场景化的方案。若需要只使用DNS拦截功能,可使用DNS代理方案。其相比系统DNS、虚拟路由以及防火墙,拦截更为底层优先级更高。不过须按照苹果的开发要求,完成特定开发者账号的申请及用户的授权用户方可使用,对于静默网络应用而言一旦处理用户交互不友好,就会导致整体的体验不友好。
对于特定应用的DNS请求拦截可以使用Hook的方案,不过这个不能实现系统DNS流量的拦截。
DNS代理
目前市面上有很多开源免费的本地DNS代理方案,比如dnsmasq以及dnscrypt,可以实现安全DNS部署,且速度很快。国内的也有很多免费的安全DNS,比如阿里的安全DNS、腾讯的Public DNS+、百度以及360等,都可以作为安全DNS代理的部署服务器。
声明:原创文章,转发请私信留言同意后方可转发,谢谢