一、DNS介绍DNS域名系统是互联网关键的基础设施之一,它是一个将域名与IP地址互相映射的全球分布 数据库 。对于恶意DNS的过滤、检测恶意网站域名、僵尸网络和网络隐秘通道发现是安全防护设备中必不可少的一种手段。
二、原理 RF C 1035规定了域名每个标签不超过63字节,域名总长不超过255字节。可以含有任意8bit值,通常情况下域名标签由英文字母、数字和连 字符 构成。RFC 2181进一步明确了,DNS本身不对域名所含字符内容进行限制。一些文献中验证了ISC BIND等常用DNS服务器软件对二进制域名的支持。
尽管在RFC1 123 之中对于DNS软件支持无法转换为可打印格式的资源记录,内部 存储 不能使用文本格式。由于Let te r Digit Hyphen规则的域名含有可打印字符,如此产生了两种问题,其一为大多数程序对于域名的处理采用字符串函数,可能会对于某些特定结束字符进行处理(例如C语言中对于\000进行处理),其二DNS服务器对于特殊字符进行处理后依然返回解析结果,某些程序过滤恶意DNS域名并未考虑。
三、 测试 方法用 PYTHON socketserver和struct开发简单的DNS服务器进行测试,再使用DNSPython模块作为DNS请求的测试。在对DNS服务器测试时,我们向被测的服务器发送正常的或者带有特殊字符的DNS两种请求方式,如果DNS服务器两种数据报文传输的请求结果存在区别则证明其二失败,否则成功。
四、危害1.隐藏恶意软件域名:通过该方法可绕过基于DNS流量检测的流量分析软件、算法和相关安全设备及在线文件分析系统,通过构造加入特殊字符的DNS请求,既保证了域名成功解析,又保护了恶意域名难以被发现。2.隐藏DNS隐蔽通道将伪造源地址的方法与本文域名欺骗方法结合,可以起到更好的DNS隧道流量隐蔽效果,通过伪造源地址来分散DNS隧道流量,对内网数据泄密和远程控制隧道加入了新的挑战。3.绕过DNS过滤利用这个方法进行DNS过滤设备的穿透具有一定的可行性,目前已发现大量带有域名过滤的安全设备.存在被绕过的风险。
五、修复所谓有攻就有防,通过DNSPython修复,在dns记录中,加入过滤异常的特殊字符。 同时在安全设备中扩大过滤DNS请求特殊字符的范围。