0x01 引言
- 域名系统(DNS, domain name system)是一种将域名和 IP 地址相互映射的以层次结构分布的分布式数据库系统,也是互联网上普遍存在的基础解析服务。防火墙等基础防御设施为了保证用户体验一般不会对 DNS 数据进行过多过滤,使其成为攻击者手中较理想的秘密信道。
- 互联网名称与数字地址分配机构(ICANN, Internet Corporation for Assigned Names and Number)将其命名为 DNS 隐蔽信道(DCC, DNS covert channel)。DCC 是指利用 DNS 数据包中的可定义字段秘密传递信息的通道。
- DCC 是指利用 DNS 数据包中的可定义字段秘密传递信息的通道。其中,“DNS 协议”是目前网络上使用的标准域名解析协议;“可定义字段”是DNS 数据包中的 QNAME 字段、RDATA 字段及RawUDP 字段。利用 DNS 数据包可以构建 2 种信道:存储信道及时间信道。由于时间信道可传输信息较少且对应的工具及恶意软件很少,故主要研究存储信道的利用情况。
- DCC 可以被用于数据泄露、命令控制(C&C, command & control)及绕过 Wi-Fi连接注册等恶意行为,进而可以用于远控木马(RAT, remote access trojan)、僵尸网络(Botnet)、勒索软件(Ransomeware)、高级持续性威胁(APT, advanced persistent threat)等绝大多数网络攻击。
- 在金融领域,活跃在该领域中的销售点(POS, point of sale)恶意软件(如AlinaPOS)经常利用 DNS 查询请求来泄露信息;在医疗领域 , SentinelLabs及 Unit42报 道 称Trickbot 开 发 人 员 在 其 恶 意 软 件 中 新 增 了Anchor_DNS 模块,在针对美国医疗系统的攻击中利用该模块使用 DCC 进行 C&C。
0x02 DCC威胁模型与发展
2.1 威胁模型
DCC 分为 2 种类型,若受害设备通过 IP 地址直接与恶意权威名称服务器(MANS, malicious authoritative name server)相连,则称所构成的信道为直连信道,这种情况下一般使用 RawUDP 字段传输信息;若受害设备通过本地默认解析连接到 MANS,则称所构成的信道为中继信道,这种情况下一般使用 QNAME 字段及RDATA 字段传输信息。前者较为简单
2.1.1 C&C
普通防火墙等基础防御设施一般不对 DNS 进行过多过滤,使 DCC 成为具有一定隐蔽性、穿透性的 C&C 信道,可以实现受害设备与远程攻击者搭建的 MANS 的双向交互,如图 1 所示。受害设备向 MANS 请求控制命令,MANS 收到后,将欲下发的命令进行处理,利用 DNS 响应向受害设备发出命令,受害设备解码获得命令并执行。
2.1.2 数据泄露
攻击者会利用 DNS 查询请求将待传送数据如敏感信息、文件等传送到其搭建的MANS。由于大部分安全基础设施都更加关注来自外部网络的攻击,因此这种攻击需要主动监测内部流出流量才能发现,使数据泄露的全过程更隐蔽。受害设备向攻击者搭建的 MANS 发出请求,利用请求来泄露信息
2.2 发展历程
第一阶段(1998 年—2010 年)
探索运用阶段
对 DCC 的最初运用由隧道协议、传输文件开始,其本质为利用 DNS数据包进行数据的秘密传输。
- 1998 年,Pearson首次描述了DNS隧道的基本情况,实现了利用DNS数据包进行的客户端与服务器间的简单通信;
- 2002 年,由 Szerb完成的第一个较流行的隧道工具 NSTX 使 IP over DNS 成为可能,但其正常运行需要创建一个虚拟网络设备(VDN, virtual network device),并且只能运行在 Linux 系统上
- 2004 年,在 Black Hat 大会上,Kaminsky演示了其编写的OzymanDNS 工具,该工具可以利用 DNS 传输文件,也可以封装 SSH 隧道(SSH over DNS);
- 2008 年,Miller提出了旨在利用 DNS 做 C&C 的 Reverse DNS,其将 shellcode 代码放入 DNS 响应的 TXT 资源记录中,受害设备收到响应并执行后可以主动与服务器建立连接
- 2009 年,Revelli在信道容量上进行了进一步思考提出了 Heyoka,指出许多 DNS接受域名标签中的二进制数据,利用二进制编码可以将带宽从每字符 5 位增加到每字符 8 位。同时提出可以使用 EDNS0,TXT 响应最多可存储 1024 B;
- 2010 年,Born在 Black Hat 上提出 PSUDP,使用 UDP 增加信道带宽,指出可以在 DNS 消息末尾注入数据而不会影响 DNS 服务器解析,从而增加了信道带宽。
这一阶段初步实现了利用 DNS 数据包对数据的传输功能,扩宽了信道容量,但也为恶意活动提供了良好的技术基础。
知识点
- IP over DNS: IP-over-DNS 隧道(或更常见的名称 DNS 隧道)是一种攻击,它允许绕过通常的网络保护并通过 DNS 协议发送/接收数据,这种协议往往很少受到检查。它的缺点是设置有点复杂,速度很慢,因为所有数据都在DNS请求中发送,这限制了单个数据包的数量并且需要发送更多数据包。通过DNS(UDP端口53)隧道传输
- SSH over DNS:原理类似IoD Tunnelling
第二阶段(2011 年—2013 年)
恶意利用阶段
- 2011 年,Dietrich等分析了第一个基于 DCC 的僵尸网络 Feederbot,发现其 TXT 应答数据消息块中使用 RC4 流密码加密(利用 DNS 查询来传输密钥派生参数),同时使用循环冗余校验保证数据完整性
- 卡巴斯基实验室发现利用 DNS 进行 C&C 的蠕虫 W32.Morto,其只请求 TXT 记录,解密后得到 IP 地址进而下载文件执行
- 美国能源局发布白皮书表示可以通过DNS 查询请求泄露机密信息且难以对其进行检测
- 2013 年,Xu 等论证了使用 DCC 作为僵尸网络C&C 通道的可行性,描述并定量分析了包搭载查询、指数分布等查询策略,这些策略可用于在网络级别有效隐藏恶意 DNS 活动,并指出 DNS 是一个极有效的 C&C 信道。
第三阶段(2014年至今)
组织化攻击阶段
- 2014 年,APT组织 FIN6 的 FrameworkPOS使用 DNS 请求泄露了 5 、600 万张借记卡/信用卡信息,在 DNS 查询中编码了 IP 地址、主机名、进程名等字段
- 2016 年,Wekby(APT18)的 Pisloader使用 DNS 协议做C&C 信道发起攻击
- 2017 年,OilRig(APT34)开发人员对 Helminth不同变体的子域首字符进行更改,进而躲避检测,其依赖 DNS 请求获得具有指令含义的 IP 地址(A 记录)应答,将欲传送的窃密文件使用 DNS 查询请求分块传送
- 2018 年,OilRig 将 QUADAGENT 用于定向攻击,初次握手时受害设备会得到 C&C 服务器提供的会话标识符和预共享密钥,并将其保存到注册表,不必每次通信都进行握手
- 2019 年,Lab Dookhtegan Telegram Chanel 中泄露了关于 APT34 的攻击工具,其中Glimpse可以利用 DNS 传输指定目录下的文件
- 2020 年,QuoIntelligence 发现 WINNT(IAPT41)组织自定义 Iodine 针对德国化工企业,其 DNS 查询使用 Base128 编码。
- OilR ig 利用 RDAT[10]针对中东电信组织,与其之前样本相比,该样本仅使用 DNS进行 C&C 通信而无 HTTP 备用信道。
- Black Lotus Labs 发现 Alina POS 编码信用卡信息使用 DNS 查询泄露,指出 DNS 经常不受监控,同时,为了确保在搜索设备的 RAM 时准确找到信用卡数据,该恶意软件引入了 Luhn 校验和算法。
知识点
Luhn算法:检验数字算法(Luhn Check Digit Algorithm),也叫做模数10公式,是一种简单的算法,用于验证银行卡、信用卡号码的有效性的算法。对所有大型信用卡公司发行的信用卡都起作用,这些公司包括美国Express、护照、万事达卡、Discover和用餐者俱乐部等。这种算法最初是在20世纪60年代由一组数学家制定,现在Luhn检验数字算法属于大众,任何人都可以使用它。
算法:将每个奇数加倍和使它变为单个的数字,如果必要的话通过减去9和在每个偶数上加上这些值。如果此卡要有效,那么,结果必须是10的倍数。
0x03 DCC构建机理
3.1 DCC定义
3.1.1 定义1
1)VictimMachine
-
VictimMachine 指的是感染了 DCC 恶意软件进而可利用 DNS 数据包传输数据的受害设备集合,受害设备种类可以是 PC、服务器、智能手机、物联网(IoT, Internet of things)设备等一切当前已存在的、未来可能出现的、具备计算能力和通信能力并可发起 DNS查询请求的设备 ,记为:
-
\[VictimMachine=\{DCCMalware, S, ACTIVITY\} \]
-
-
DCCMalware表 示运行在受害设备上的恶意程序集合 , 记为:
-
\[DCCMalware=\{dccmalware_{1},dccmalware_{2},\cdot\cdot\cdot,dccmalware_{n}\} \]
-
其中 dccmalware1表示运行在 VictimMachine上的恶意程序, n表示受害设备的规模。
-
-
S表示 DCCMalware 的状态集合,记为:
-
\[S=\{S_{1},S_{2},S_{3},\cdot\cdot\cdot,S_{n}\} \]
-
-
ACTIVITY 表示 DCCMalware 的动作集合,记为:
-
\[ACTIVITY= \{SendData,ReceiveData,ReadData,ProcessData,\cdot\cdot\cdot\} \]
-
2)DDP(definable DNS packet)
-
DDP(definable DNS packet)指的是可定义的 DNS 数据包,记为:
-
\[DDP=\{QNAME,RDATA,RawUDP\} \]
-
-
QNAME表示将待传送信息进行处理后嵌入DNS 查询区域的 QNAME 字段中,可以包含编码后的待传送数据、编码方法、序列号等及其各种组合方式。
-
RDATA 表示将命令/信息进行处理后嵌入 DNS响应区域的 RDATA 字段中。
-
RawU DP 表示将数据处理后嵌入 DNS 分组载荷结束与 UDP 分组载荷结束为止的空间中(需构造 DNS 查询包)
3) CMD
-
CMD 表示 DCCMalware 可执行的控制命令集合(DCCMalware可以从RDATA 字段中提取控制命令或其本身硬编码控制命令), 记为:
-
\[CMD=\{rdata-derived\ cmd,hard-coded\ cmd\} \]
-
4) POLICY
-
POLICY 表示保证数据高效可靠传输的策略,记为:
-
\[POLICY=\{encode,encryption,CRC,query\ structure,time\ interval,\cdot\cdot\cdot\} \]
-
5) MANS
- MANS 表示恶意权威名称服务器。攻击者搭建的权威名称服务器用来托管恶意域名的名称解析,实现与受害设备集群的通信。
6) ContentType
- ConnectionType 表示连接类型,指的是受害设备与 MANS 的连接类型。中继信道是指受害设备通过本地默认解析连接到 MANS;直连信道是指受害设备与 MANS 通过 IP 地址直接连接。
7) delta
delta表示转换函数,反映了恶意程序收到命令后产生的相应动作及状态变迁,记为delta:
3.2 构建机理
攻击者通过一定手段使 VictimMachine 感染DCCMalware 后与其控制的 MANS 进行信息交互,通过 POLICY 定制的传输策略,将信息嵌入 DDP传输,建立起攻击者与受控设备可靠、隐蔽的通信桥梁。VictimMachine 可以通过该信道向 MANS 泄露信息,MANS 可以通过该信道向 VictimMachine发送控制命令,进而使攻击者获取敏感信息/控制设备的活动状态。
- 通过对 DNS 协议的分析发现,查询区域中除QNAME 字段外,其他字段内容特定或可变动字符极少/一般不被恶意软件利用,故 QNAME 字段为该区域待传送信息嵌入的最佳位置;
- 应答区域中RDATA 字段为该区域信息嵌入的最佳位置。
- 对DNS 数据包进行分析发现,DNS 头中不包含资源记录或包总长度信息,解析器依赖报头中指定的资源记录数量确定解析数据,最后一条解析完成就认为到达了末尾。因此,可在 DNS 数据包末尾添加任意数量的数据,RawU DP 为信息嵌入的最佳位置。
3.2.1 基于 QNAME 嵌入的数据回传
- 将待传输数据嵌入 DNS 协议查询区域的QNAME 字段中,可以将数据根据 POLICY 处理后嵌入。
- QNAME 字段规范,具有标签,标签间由句点间隔。
- 每个标签的最大长度为63 个字符,由字母、数字、连字符组成,且必须以字母或数字开头、结尾。QNAME 的最大长度为253 个字符。
- 受害设备将数据编码后嵌入,可以使用 Base64、Base32、Base16 及二进制、十六进制等方式进行编码,也可以使用 XOR、AES 等方式进行加密。
以APT34为例
- Helminth:其 DNS 查询格式为 00 <系统标识符> <文件名字符> <序列号> <Base36 编码的、小于 46 655 的随机数> <十六进制数据>.<MANS 域名>
- 其使用特制域名进行信息传输,域名中包含系统标识符、文件名字符、分块序号、随机数、编码数据内容,利用请求将其引至 MANS 进行解析,从而将数据传输至 MANS,最终到达攻击者手中。
- Glimpse:该组件中的一种 DNS 查询格式为<GUID><数据包标识><操作类型字符><随机字符>C<数据包标识偏移量><操作类型偏移量>T.<传输内容>.<文件名称>.<MANS 域名>
- 查询域名中第一个标签为查询结构字串,用来确定数据包分片序号及 C&C 服务器操作类型;第二个标签主要用来嵌入处理后的数据;第三个标签主要用来指示所属文件名称。
- 对该组织涉及的其他恶意软件 DNS 查询情况进行统计得到表 1,可以发现每种恶意软件具备独有的子域名构成方法,子域名中不仅包括编码后的数据,还包括一些序列号、随机数等辅助字串。
- 同时,域名“go0gie.com”与“google.com”较类似
- 编码方式主要集中在 Base64、Base32 及 Hex编码 3 种
- 每种恶意软件采用一种或几种固定的子域名结构来传送数据,一般包含辅助传输字串;可以一次传递一位字串,也可以传输较多信息。当数据较大时,可分块传送。
3.2.2 基于 RDATA 嵌入的命令获取
将待传输数据嵌入 DNS 协议应答区域的RDATA 字段中,根据请求确定响应资源记录类型(A/TXT/AAAA 等)。嵌入数据需要符合对应资源记录的格式规范,可以将数据根据 POLICY 处理后嵌入。
- 例如,A 记录用来指定主机名对应的 IP 地址,只能使用 IP 地址;TXT 记录为域名设置说明,可使用文本信息,单个 TXT 记录不超过 255 B(不同服务商的实际限制会有所区别)。此外,还有CNAME 记录、NULL 记录、MX 记录等,这里不做赘述。
- 受害设备接收识别 DNS 响应包,从 RDATA字段中按照对应的 POLICY 提取并恢复控制命令,得到 rdata-derived cmd。DCCMalware 根据 rdata-derived cmd 通过delta 产生相应动作及状态变迁。
以APT34为例
- Helminth:由于该样本请求 A 记录,DNS 应答格式为 IP 地址。其响应33.33.x.x 表示为提供脚本文件名,指示恶意软件开始下载数据以保存到批处理脚本;33.33.33.33 指示恶意软件停止下载数据并执行下载的批处理脚本。真实案例响应情况如图 7 所示,33.33.97.97 中 97.97 指的是创建一个名为aa.bat 的文件,数字97 表示“a”的ASCII字符,可以利用这样的字符转换来传递信息及指令。
- Glimpse:通过查询子域名 000564b81fdbDe0000A2C09T. fengrou2019.club 的 TXT 记录发现,Glimpse 使用Base64 将命令编码在应答 TXT 记录中,TXT 记录中 d2hvYW1pJmlwY29uZmlnIC9hbGw=解码后为“whoami&ipconfig /all”
恶意软件应答字段记录类型一般为 A、TXT、AAAA 记录等
工具应答字段记录类型一般为 TXT、CNAME、NULL 记录,以获得更大的带宽,传递更多信息,可运行在 Linux及 Windows 等主流操作系统上
3.2.3 两者关系
基于 QNAME 嵌入的数据回传与基于 RDATA嵌入的命令获取两者有一定关系但并不相同,前者主要利用查询泄露数据,后者主要利用应答获取命令
- QNAME:基于QNAME嵌入的数据回传主要为将处理后的数据利用 DNS 查询的 QNAME 字段进行泄露,对应的 DNS 响应一般为固定或连续的 IP 地址应答
- 例如,xHunt 的应答 IP 相同,Glimpse 的应答 IP 呈现递增趋势,避免产生大量 NXDOMAIN过于异常的情况。
- RDATA:基于 RDATA 嵌入的命令获取主要为将处理后的数据利用 DNS 响应的 RDATA 字段进行传输,进而使受害设备可以通过响应获取命令,与响应对应的查询本身不用来泄露过多数据,而是一种获取命令的请求方式
- 如图 8 所示,000564b81fdbDe0000A2C09T.fengrou2019.club,其中“000564b81f dbDe”为 GUID,“0000A2”为随机字符,“C”为固定位,“0”为数据包表示偏移量,“9”为操作类型偏移量,“T”为固定位。
3.3 DCC的高效可靠通信策略
为了保证数据可以从受害设备完整、隐秘地传输到 MANS 上,保证命令成功下达到受害设备上,成功窃取需要的数据/获得有效的命令,攻击者在传输过程中使用 POLICY 来保障信息的可靠传输。
3.3.1 CRC
- 加入辅助传输字串 / 使用循环冗余校验(CRC, cyclic redundancy check)机制,保证传输数据完整性。
- 由于 DNS 协议一般封装在 UDP 数据包中传输,UDP 只提供数据的不可靠传输[42]。服务器可能收到其他 DNS 查询请求或网络时延造成数据无法按正常顺序传输等情况,导致数据丢失/乱序,进而恢复失败。
- 为避免此现象发生和信息失效,攻击者通常会在子域名中引入辅助传输字串。子域名构成时可以加入一些如序列号、序列总数、文件名等辅助传输字串来保证可靠通信。
- 在接收端,识别构造结构,按照对应的方式进行处理,得到最终的传输信息;同时,攻击者也会在应答中引入 CRC 机制等来保证命令/信息传递的完整性。例如Feederbot就引入了CRC32保证僵尸网络命令的完整传输。
3.3.2 编码/密码
- 在子域名/应答资源记录嵌入过程中,引入编码/加密机制,保护数据机密性。
- 从受害设备中获取并利用 DNS 查询传递的信息可能为设备本身信息或敏感信息等,为了使数据隐秘传输/不被感知,这类信息一般不在网络上明文传输。攻击者引入编码技术,对待传送的信息进行编码后嵌入,再逐一传送。
- 攻击者欲窃取内容,通常不能完全符合 DNS 域名的语法规定,需要对目标内容执行编码转换,使转换后的内容基本符合 DNS 协议规范。
- 在数据保密性要求较高的场景下,可以引入AES等加密算法,对传输的数据进行加密。但在传送之初,双方要协商好通信密钥,以便在接收端可以顺利解密出信息。
0x04 DCC的检测方法
4.1 异常点
目前主要的检测方向是针对DDP 及请求应答情况的异常进行分析。将异常特征概括归为单域名异常及多域名统计异常 2 类
4.1.1 单域名异常
异常点可以反映在基础特征、可读性特征、结构性特征 3 个方面
1) 基础特征
- DNS 数据包长度/UDP 长度
- 攻击者为了传输信息,可能会在 DNS 分组载荷结束与 UDP 分组载荷结束之间嵌入数据,造成与正常 DNS 数据包的差异。
- 例:Iodine 具备直连模式,当发现可以与 MANS通过 IP 地址直接连接时,就会切换到该模式,在DNS 分组载荷结束与 UDP 分组载荷结束之间嵌入数据,使用 RawU DP 进行通信。
- 攻击者为了传输信息,可能会在 DNS 分组载荷结束与 UDP 分组载荷结束之间嵌入数据,造成与正常 DNS 数据包的差异。
- 子域名长度
- 攻击者将待泄露数据处理后嵌入查询中的QNAME 字段传输,会尝试在子域名中放入尽可能多的数据来获得更高的带宽,导致与正常子域名在长度上的差异性 。
- 子域名数字数量/占比、子域名大写字符数量/占比
- 将数据加密/编码后,会产生更多的大写字符及数字字符,导致与正常子域名的差异性。
- 例:子域名 005aa003P3T647071636F6E626C316E385C61646D696E7369747261746F中大写字符和数字字符的比例较高 , 而在正常域名如“store.google.com”中,“store”不含大写字符及数字字符。同时,部分情况下子域名允许使用二进制数据,攻击者可能用此编码方式来扩展信道带宽,从而使其具备较高的数字占比。
- 将数据加密/编码后,会产生更多的大写字符及数字字符,导致与正常子域名的差异性。
- 子域熵
- 正常子域名通常是一些看起来有意义的字符串,而恶意子域名通常是被加密/编码后看起来无意义的数据。一般地,信息被编码后会呈现更大的熵,此差距可以成为衡量正常子域名与恶意子域名的一个指标。
- C2 域名欺骗性
- 一般地,默认使用 Alexa top列表中的域名发出的请求为正常请求。攻击者为使C2 域名看起来更正常,可能会为其 MANS 注册具备欺骗性的域名。因此可以通过计算恶意域名与常用域名的相似性来进行判断。
- 例:google与g0ogie的变形
- 一般地,默认使用 Alexa top列表中的域名发出的请求为正常请求。攻击者为使C2 域名看起来更正常,可能会为其 MANS 注册具备欺骗性的域名。因此可以通过计算恶意域名与常用域名的相似性来进行判断。
- 资源记录分布及长度
- DNS 一般用于域名与 IP地址间的映射,所以请求记录通常为 A/AAAA 记录
- DCCMalware 也可能会使用 TXT、CNAME 等记录进行信息传递,造成与正常请求的差异。
- 所以资源记录的长度也是一个重要的衡量指标。
- DNS 一般用于域名与 IP地址间的映射,所以请求记录通常为 A/AAAA 记录
2) 可读性特征
子域名包含单词数、子域名中最大单词长度
- 正常子域名一般由多个单词构成且最大单词长度合理,恶意域名中提炼不出单词或最大单词长度异常 。
- 子域名单/双/三字母频率。正常子域名一般属自然语言遵循 Zipf 定律,而恶意子域名字符频率分布更均匀。
知识点
zipf定律:Zipf定律是文献计量学的重要定律之一,它和洛特卡定律、布拉德福定律一起被并称为文献计量学的三大定律。由哈佛大学的语言学家乔治·金斯利·齐夫(George Kingsley Zipf)于1949年发表的实验定律。它可以表述为:在自然语言的语料库里,一个单词出现的频率与它在频率表里的排名成反比。所以,频率最高的单词出现的频率大约是出现频率第二位的单词的2倍,而出现频率第二位的单词则是出现频率第四位的单词的2倍。这个定律被作为任何与幂定律概率分布有关的事物的参考
3) 结构性特征
- 子域名标签数量
- 正常子域名一般含有较少标签,而恶意域名可能具有较多标签,所以标签数量也是一个可以参考的指标 。
- 平均/最大标签长度
- 正常子域名标签一般较短,恶意子域名可能含有较长的标签长度。
4.1.2 多域名统计异常
-
同位相同字符数/最大公共子串长度
- 同位相同字符数是指 2 个同域子域名中相对位置相同的字符数,最大公共字串长度指的是 2 个同域子域名中所有公共子串中最长的公共子串长度。
- 正常子域名没有固定结构,而同一次恶意活动中的子域名一般具有相同结构
-
最大公共子串是否包含数字/字母
- 正常域名间一般不具备相似的结构特征,而同一次恶意活动恶意域名间一般具备相似结构
-
同域 IP 离散性
- 正常域名中同域子域名对应IP 地址较离散
- 对于恶意域名请求,攻击者会制定 MANS 对查询的应答规则,一般使用固定 IP 或递增 IP 应答。
-
DNS数据包总数
- 在正常情况下,例如在企业局域网中,每天的 DNS 数据包总数一般在一个固定区间范围内。
- 当 DCCMalware 运行时,一般会产生较大量的 DNS 查询,DNS 数据包总数则可能超出正常情况下的统计区间。
-
DNS 请求频率
- 在正常情况下,一般为手动输入 DNS 发起请求,请求频率有限;在恶意情况下,由于 DNS 协议可传输字符有限,恶意软件欲传输大文件时,需要大量 DNS 请求才能完成传送
- 为提高攻击效率,可能会使用较高频率的请求来泄露数据。所以,DNS 请求频率也是一个比较重要的指标
-
DNS 请求应答比
- 在正常情况下,DNS 请求应答比大概为 1:1;在恶意情况下,可能只利用 DNS请求来泄露数据而不设置应答,大量的无应答构成异常。
-
应答码(RCODE)
- 在正常 DNS 请求与应答中,RCODE一般为 0,表示DNS 请求应答过程成功完成。
- 当应答码为 3 时,表示此域名没有任何类型的解析记录。
- 当利用其传输数据产生大量请求时,会伴随着大量 NXDOMAIN 应答。
知识点
常见RCODE:0——NOERROR,意思是成功的响应,即这个域名解析是成功;2——SERVFAIL,意思是服务器失败,也就是这个域名的权威服务器拒绝响应或者响应REFUSE,递归服务器返回Rcode值为2给CLIENT;3——NXDOMAIN,意思是不存在的记录,也就是这个具体的域名在权威服务器中并不存在;5——REFUSE,意思是拒绝,也就是这个请求源IP不在服务的范围内,常见的场景为联通客户端到电信运营商LDNS解析会被REFUSE。除开0以外,其他都是异常应答
- 同域请求数量/占比
- 在正常情况下,一般良性的域不太可能被同一设备经常反复查询;在恶意情况下,恶意软件需要对同一域名反复查询来泄露信息。
研究人员对检测方式进行了一系列研究,利用基于匹配的方法及机器学习、深度学习等方法进行检测。接下来,将对这些检测方法涉及的具有代表性的论文进行逐一说明并进行对比,提出相关问题。
4.2 传统检测方法
- Born等人使用 n-gram 字符频率分析法,对前 100 万个顶级域名及 Iodine、Dns2tcp 等隐蔽信道工具进行分类,清楚地显示了合法流量和隐蔽信道传输数据的区别,但仅使用字符频率的差别来进行二分类的方法并不灵活,容易绕过。(BORN K, GUSTAFSON D. Detecting DNS tunnels using character frequency analysis[J]. arXiv Preprint, arXiv:1004.4358, 2010. )
- Karasaridis 等提出了一种基于流的检测方法,根据 DNS 数据包大小分布差异性和交叉熵等统计属性近实时检测异常。(KARASARIDIS A, MEIER-HELLSTERN K, HOEFLIN D. NIS04-2: detection of DNS anomalies using flow data analysis[C]//IEEE Globecom. Piscataway: IEEE Press, 2006: 1-6.)
- Ellens 等结合了流量信息和统计方法进行异常检测,特别在流方面使用了每个流的字节数、每个流的数据包数、每个数据包的字节数和流持续时间等特征,通过阈值法、Brodsky-Darkhovsky 法、分布法并进行结合,实现了 5 个检测器,并对其进行比较,指出不同场景适合不同方法。(ELLENS W, ŻURANIEWSKI P, SPEROTTO A, et al. Flow-based detection of DNS tunnels[C]//IFIP International Conference on Au-tonomous Infrastructure, Management and Security. Berlin: Springer, 2013: 124-135.)
- Kara等全面分析了恶意载荷分布位置,提出了一种基于资源记录分布情况来检测 DCC 的方法,并使用近实时数据评估了其有效性。(KARA A M, BINSALLEEH H, MANNAN M, et al. Detection of malicious payload distribution channels in DNS[C]//2014 IEEE Inter-national Conference on Communications. Piscataway: IEEE Press, 2014: 853-858.)
4.3 经典机器学习方法
传统检测方式一般利用基于规则的静态阈值,其检测方法不灵活、误报率高、易被绕过。随着机器学习的发展,使用其赋能安全检测的研究逐渐进入大众视野。
存在一些较棘手的问题。恶意活动一旦被发现,攻击者控制的 DNS 服务器很容易被关停,造成活性样本较少,真实攻击数据匮乏,对 DCC 的检测面临更严峻的数据集问题。
- Dietrich 等提出利用 RDATA 差异性及通信行为差异性两方面特征,使用 K-均值聚类的方式在网络流量中检测C&C 信道,实验结果显示无误报,同时也可以实现对未知样本的检测。( DIETRICH C J, ROSSOW C, FREILING F C, et al. On botnets that use DNS for command and control[C]//2011 Seventh European Con-ference on Computer Network Defense. Piscataway: IEEE Press, 2011: 9-16. )
- Aiello 等将传统贝叶斯引入 DCC 检测中,使用查询、响应包大小及统计特征共 12 个特征进行检测,并评估了其检测方法的可靠性(AIELLO M, MONGELLI M, PAPALEO G. Basic classifiers for DNS tunneling detection[C]//2013 IEEE Symposium on Computers and Communications. Piscataway: IEEE Press, 2013: 880-885. )
- 章思宇等通过分析 DCC 流量特性,提取可区分特征 12 个,利用 J48决策树、朴素贝叶斯和逻辑回归 3 种方法分别进行训练检测,可以检测已经训练的及未训练的隐蔽信道,但其训练集样本数量较少,导致准确率不高(章思宇, 邹福泰, 王鲁华, 等. 基于 DNS 的隐蔽通道流量检测[J]. 通信学报, 2013, 34(5): 143-151. )
- Buczak 等使用随机森林算法进行检测,对未知工具的检测率仅有 95.89%( BUCZAK A L, HANKE P A, CANCRO G J, et al. Detection of tun-nels in PCAP data by random forests[C]//Proceedings of the 11th An-nual Cyber and Information Security Research Conference. New York: ACM Press, 2016: 1-4.)
- Liu 等使用支持向量机、决策树和逻辑回归 3 种算法综合了 4 种特征(18 种行为特征)针对已知隐蔽隧道工具集进行二分类检测,获得了较高的准确率,并指出使用 SVM 算法的检测效果最佳( LIU J K, LI S H, ZHANG Y Z, et al. Detecting DNS tunnel through binary-classification based on behavior features[C]//2017 IEEE Trust-com/BigDataSE/ICESS. Piscataway: IEEE Press, 2017: 339-346.)
- Almusawi 等提出了一种多标签支持向量机方法来检测和分类隐蔽信道,并与多标签贝叶斯分类器比较,不仅区分了正常流量及恶意流量还对 FTP、HTTP 及 POP3 等协议进行了分类,但是只使用了隐蔽信道工具进行检测,未涉及对恶意软件的检测情况。(① ALMUSAWI A, AMINTOOSI H. DNS tunneling detection method based on multilabel support vector machine[J]. Security and Commu-nication Networks, 2018: 1-9.②HOMEM I, PAPAPETROU P, DOSIS S. Information-entropy-based DNS tunnel prediction[C]//IFIP International Conference on Digital Forensics. Geneva: IFIP Newsletter, 2018: 127-140.③单康康, 郭晔, 陈文智, 等. 基于混合分类算法模型的 DNS 隧道检测[J]. 通信学报, 2018, 39(S1): 53-57.SHAN K K, GUO Y, CHEN W Z, et al. Detection of DNS tunneling based on combined classification algorithm model[J]. Journal on Communications, 2018, 39(S1): 53-57. )
- Nadler 等提取了 7 种特征训练正常流量,通过 iforest 构建异常检测模型准确识别现有工具及恶意软件流量。(NADLER A, AMINOV A, SHABTAI A. Detection of malicious and low throughput data exfiltration over the DNS protocol[J]. Computers & Security, 2019, 80: 36-53. )
- Ahmed 等描绘了科研机构网络与校园网的 DNS 流量各项特征的密度图,基于密度图提出检测特征并使用iForest 算法进行检测。实验主要针对利用 DNS 查询进行数据泄露的检测,使用窃密工具 DET 进行训练,对 DET 及未训练的恶意软件进行检测,达到了较高的准确率。( AHMED J, GHARAKHEILI H H, RAZA Q, et al. Monitoring enter-prise DNS queries for detecting data exfiltration from internal hosts[J]. IEEE Transactions on Network and Service Management, 2020, 17(1): 265-279.)
4.4 深度学习检测方法
- Hind就首次提出使用人工神经网络(ANN, artificial neural network)构建分类器对 DCC 工具进行检测的想法(HIND J. Catching DNS tunnels with A.I[R]. Defcon, 2009.)
- Liu 等将流量以字节为单位转换成向量矩阵,每一个字节通过独热编码(One-Hot)转换为一个 257 维的向量,通过 CNN模型对流量进行检测,并与 SVM 及逻辑回归等方式进行对比,得到了较好的准确率及召回率(LIU C, DAI L, CUI W J, et al. A byte-level CNN method to detect DNS tunnels[C]//2019 IEEE 38th International Performance Computing and Communications Conference. Piscataway: IEEE Press, 2019: 1-8.)
- 张猛等对 CNN 进行了改进形成 RDCC-CNN 方法,提取了 48 个表征元素,将其转换成灰度图片表征 DNS 流量数据,对隐蔽信道进行检测,达到了很好的准确率及误报率。( 张猛, 孙昊良, 杨鹏. 基于改进卷积神经网络识别 DNS 隐蔽信道[J]. 通信学报, 2020, 41(1): 169-179. ZHANG M, SUN H L, YANG P. Identification of DNS covert channel based on improved convolutional neural network[J]. Journal on Com-munications, 2020, 41(1): 169-179. )
- Wu 等提出利用深度神经网络自动学习特征进行检测,学习正常DNS 流量的特征,通过计算正常样本与恶意样本之间的均方误差来检测 DCC(WU K M, ZHANG Y Z, YIN T. TDAE: autoencoder-based automatic feature learning method for the detection of DNS tunnel[C]//2020 IEEE International Conference on Communications. Piscataway: IEEE Press, 2020: 1-7. )
0x05 结束语
传统检测方法面临阈值设置易绕过、重要特征提取不全面等问题,可能导致对未知攻击检测效果不理想;经典机器学习检测方法面临真实攻击数据匮乏、部分论文使用特征及数据集不全面的问题;深度学习检测方法起步较晚,除面临数据集匮乏问题,其涉及重点论文使用相同数据集进行训练、检测,对真实及未知攻击的检测较为匮乏,有较广阔的研究空间。未来研究可能会将传统方式与人工智能方式相结合进行检测,取长补短,达到更好的检测效果。
总结
1、DCC现在广泛运用在APT攻击中,主要是用于C&C和信息泄露。文章利用APT34作为例子,对APT34所使用工具及组件进行了分析
2、DCC在通信过程中,采用CRC确保完整性,采用编码/密码保证保密性
3、总结2类DCC检测方法:单域名检测和多域名统计异常,提出几类异常特征
4、当前检测方式所面临的不足