DNS隧道,顾名思义,肯定是数据隐含在DNS数据包中进行传输,我们还有其它隧道,如HTTPS、HTTP proxy,tcp等,因为这些协议的端口一般企业防火前和入侵检测是不会限制的,这为如远程执行,僵尸网络提供了方便。那针对流量这部分,思路就是要先提取出这部分流量,然后在进行可能存在的恶意行为进行检测。其它隧道的检测也类似。
常见的建立DNS隧道的工具有:ioline、dnscat2、dns2tcp等。那相关的DNS的数据都会通过这个隧道进行传输,在建立完DNS隧道后,我们可以使用抓包工具如tcpdump专门抓取DNS 53协议的数据,这里面就可能存在其它隐含数据,而如果需要使用机器学习来进行辅助检测,那就得把流量数据考虑成文本,使用conv1d来进行基于文本的检测。流量文本可以使用tshark工具来进行转换。
恶意域名检测特征维度:
- alex排名
- 搜狗排名
- 搜索、百度收录数量
- 必应收录数量
- 网站首页完整度(一般恶意域名不会有web站点解析,据此可考虑该网址是否能够抓取到媒体资源来判断,或者使用head less浏览器去访问,如phantomjs)
- 是否是主流域名后缀,如.com,.net,.cn等都是正常域名
- 地理位置
- A记录与CNAME,一般企业A记录和CNAME记录都会有,恶意域名可能只有A记录
- 其它特征:
- WHOIS匿名
- 域名更新频率
- 是否使用CDN,木马、webshell类域名不会使用CDN加速
黑客实施攻击会使用的恶意域名:
木马回连、病毒通讯、反弹shell、SSRF、XSS、DDoS、挂马、矿机、DNS隧道木马等;其它恶意域名应用,如博彩、色情、垃圾邮件、毒品、军事、钓鱼等。
一般的用DNS隧道进行隐蔽数据传输会使用DNS中的TXT/MX/CNAME记录,用的比较多的就是TXT记录,针对这种情况,我们就可以想到其对应的检测分析:
- 时间窗口内,TXT记录激增;
- 正常DNS查询,任何记录类型都会有,而恶意的行为,只有限制在A,AAAA,NS等,基于此,可以统计查询记录的数量;
- DNS隧道中的数据都是经过编码的,其字符是不符合zipf定理的,也就是可能是平均分布的,另外还可以统计词频平均斜率;
- 统计请求/响应DNS的平均字符,最大,最小字符长度,一般是请求长,响应短;
- 根据数据包的五元组聚类,异常流量显著不同于正常流量;
- DNS的会话时长
- 隧道木马一般使用的UPD套接字会很长,也会复用
- DNS会话中的数据包总数
- 异常的数据包一般会较大
- 上行大包栈请求报文的比例
- 查询字节数大于50,可称为大包;
- 异常上传大包的情况较多;
- 强行拆分,会出现多个等同大小的数据包;
- 隧道木马中,DNS报文总数和DNS报文长度是负相关的
- 下行小包栈响应报文比例
- 正常的DNS响应较大;异常则简短,一般小于50
- 有效载荷上传下载比
- 交互通信时(请求过后),控制字段少,响应多,正常情况则相反;
- 有效载荷部分是否加密
- 加密,可疑
- 域名对应的主机数量
- 主机数量明显大于正常DNS通信;
- FQDN数异常检测
- 一定时间窗口多于正常;
- 总的查询报文载荷量
- 明显大于正常水平
- DNS的会话时长
- 响应时间
- 计算查询和响应的信息熵,或平均信息熵
- 发包频率
- 容易与DNS Flood流量混淆,方法是计算DNS会话包之前的均值/方差等特征,以区分开;
- 以上基于DNS会话的特征,还可以从查询访问角度
- 域名被访问频率
- 很少访问;
- 新域名;
- 会有无响应的域名;
- TTL
- TTL较短
- 时间窗口
- 域名变更频率
- 域名被访问频率
- 域名本身
- 域名随机字符串,词频特征
- 域名信息熵
- 字符分布(可读性/易读性)
- IP特征
- 不同子网响应
- 源目的地址,位于不同国家,或区域,跨度大
- 域名注册信息
- whois匿名等
数据建模,先基线过滤(比如连续7天出现未曾数据DNS查询流量),结合异常检测算法。
参考: