基于HTTP/2协议分析的网站挂马线索调查方法研究*
2022-04-24刘猛猛徐国天程斌
刘猛猛 徐国天 程斌
1. 中国刑事警察学院 2. 公安部第三研究所
引言
网站挂马是木马传播的主要途径之一,它是指黑客在网站页面注入恶意代码,若用户计算机存在相应的安全漏洞,当用户主机访问被挂马网站时就会自动下载并运行木马程序。用户主机感染木马程序后,黑客可以控制用户计算机、监视主机活动或窃取敏感信息。文献[1]使用volatility 分析系统内存中的注册表和进程等,对木马病毒进行取证,但该方法难以完整还原木马传播链条或确定黑客端相关信息。文献[2]通过重建木马程序的执行路径,强制木马程序执行电子邮件发送行为,进而获取黑客预设的关键信息,但缺少对网站挂马传播阶段的取证方法研究。文献[3]使用sniffer封包分析软件抓取并分析HTTP/1.1协议网络数据包,判断是否存在XSS挂马行为,得出黑客端信息和攻击方式,但是由于HTTP/2协议使用TLS协议加密传输数据,使得这种方式难以直接运用于HTTP/2加密数据包分析。随着新一代超文本传输协议HTTP/2正式成为互联网协议,越来越多的网站采用HTTP/2协议传送数据。由于HTTP/2类型网站在传输数据时必须使用TLS协议对通信数据进行加密,因无法对通信数据进行有效解密,使得HTTP/2类型网站挂马案件的调查分析难度较大。而诸如腾讯哈勃分析系统等木马检测工具或安全软件仅能分析已知木马程序潜在的进程行为、网络行为或注册表行为等,难以获取黑客端的相关信息;此外,该类软件在分析未知木马程序时,难以提示安全风险,更无法完成取证工作,体现出明显的滞后性。
为完成HTTP/2类型网站挂马案件的调查分析工作,本文提出一种基于主机内部调查和网络信息监听的木马线索调查方法。通过对比浏览目标网站前后进程和网络连接的变化情况筛选出可疑程序,同时使用Wireshark捕获并解密通信数据,采用两种方法分析HTTP/2通信数据,还原木马恶意程序,确定木马传播链条,提取相关线索。
一、相关协议分析
(一)HTTP/2协议
随着互联网极速发展,Web页面所包含的元素越来越复杂,HTTP/1.x协议传输数据的性能问题日益突出,且HTTP/1.x协议自身也存在设计缺陷,在此背景下HTTP/2协议应运而生。HTTP/2协议是新一代超文本传输协议,于2015年由互联网工程任务组(IETF)发布,该协议基于SPDY协议,由Hypertext Transfer Protocol version 2-RFC7540和HPACK-Header Compression for HTTP/2-RFC7541两个规范组成[4]。HTTP/2协议使用二进制分帧、多路复用和头部压缩等技术,具有更高的传输效率。此外HTTP/2协议可使用TLS/SSL协议加密传输来增强数据安全性。根据W3Techs网站统计,截止2020年11月,约49.4%的网站使用了HTTP/2协议进行数据传输。
1. 二进制分帧层(Binary Framing Layer)
HTTP/2协议对HTTP/1.X协议的数据分帧方式进行了优化和改进,采用二进制帧格式。HTTP/2协议兼容了HTTP/1.X协议的核心特征,保留了HTTP/1.X协议的应用语义,包括HTTP方法、HTTP状态代码和首部字段等内容。HTTP/2协议把HTTP/1.X协议的文本格式转换成了二进制帧格式,传输消息被分割成了更小的帧和消息,并把帧(Frame)作为传输的最小单位[5]。
2. 多路复用(MultiPlexing)
在HTTP/2协议下,客户端和服务器之间的HTTP请求和响应的通信数据都是由单个TCP连接传输完成。HTTP/2协议打破了数据流传输的数量限制,单个TCP连接可以传输任意数量的双向数据流,且单个TCP连接上的多条HTTP请求和响应报文可以并行传输。在一条TCP连接中包括多条数据流,每条数据流包含一个或多个数据帧。每个帧的首部都有流标识(Stream identifier)字段,数据流可根据该字段进行重组。
3. 服务器推送(Server Push)
HTTP/2协议具有服务器推送的功能,该功能允许服务器在响应客户之前,将服务器端预设的资源推送到客户端,由客户选择是否接收。
4. 头部压缩(Header Compression)
HTTP/2协议的消息头部采用HPACK压缩算法,以减少头部信息的空间占用。在HPACK压缩算法中,客户和服务器两端建立内容相同的静态字典和动态字典,静态字典包含常见的头部字段键值对,以及常见的头部字段和值的组合,对于不存在于静态字典的键值对则会按照哈夫曼编码添加到动态字典中[6]。HPACK压缩方法就是使用这两个字典把消息头部的内容索引到字典的值中,从而达到头部压缩的目的。
(二)TLS/SSL协议
HTTP/1.X协议采用明文形式传输数据,给数据传输带来了信息泄露风险。为解决这一问题,网景公司于1994年发布了SSL协议,该协议于1999年正式成为互联网协议。TLS协议是通过对SSL协议进行改进和标准化之后形成的,目前已发布到TLSv1.3版本。HTTP/2协议基于TLS/SSL协议传输。TLS协议在传输层和应用层之间,主要解决信息加密、数据完整性校验和通信双方身份认证三个网络安全问题。TLS加密流程图如下[7]:
在TLS握手阶段,客户端和服务器相互发送一个用于密钥生成的随机数,并且客户端会向服务器发送密钥交换算法参数(Pre-master-key)。之后,客户端和服务器各自根据随机数和Pre-master-key生成主密钥。通信双方在验证数据和主密钥的正确性后,开始进行加密数据传输。
(三)HTTP/2网站运行环境配置(Windows/Linux)
在Windows系统中,可使用IIS互联网信息服务搭建HTTP/2网站。IIS全称互联网信息服务,是基于Windows操作系统的Web服务器,目前只有Window 10系统与Window Server 2016系统的IIS Web服务器支持HTTP/2网站的创建。以Windows 10系统为例,在完成IIS安装后,需在W3C日志字段界面选择协议支持HTTP/2,在创建网站时选择HTTPS协议并添加证书,即可完成HTTP/2网站的创建。
在Linux系统中,可使用Nginx服务器搭建HTTP/2网站。Nginx服务器版本应高于1.9.5,且安装http_v2_module,创建HTTPS网站,修改网站配置文件,主要代码如下:
server { Listen 443 ssl HTTP/2 default_server; server_name www.***.com;
...... ssl_certificate server.crt;
ssl_certificate_keyserver.key;
......
}
二、基于主机内部调查和网络信息监听的木马线索调查方法
在网站挂马案件中,黑客会使用网络技术或社会工程学等方式获取网站漏洞信息,利用漏洞对网站进行挂马,植入的挂马语句会在用户浏览网站页面时,自动引导用户主机访问授黑客控制的服务器,诱使用户计算机下载并运行木马程序,导致用户主机被黑客完全控制或重要信息泄露。木马线索的分析取证是当前电子数据取证工作的重点和难点。网站挂马案件的线索调查方式一般分为两种:一种是借助反汇编工具对木马程序文件进行逆向分析,从中提取出黑客的相关线索,这种方法需要一定的专业知识和操作能力,难度较大。另一种方法是借助Wireshark等网络抓包工具监听通信数据,分析数据包并从中提取相关线索[8]。此外,绝大多数木马采用TCP协议与黑客端通信,通过查看主机与外部的网络连接情况可以分析出木马线索。本文提出一种基于主机内部调查和网络信息监听的HTTP/2网站挂马线索调查方法,通过主机内部调查初步确定木马程序及可疑通信连接,在此基础上,再通过网络信息监听进一步确定木马程序文件,还原木马传播链条,获取黑客网络信息等相关线索。
(一)主机内部调查方法
当前木马类型众多,包括DoS攻击木马、盗号木马等,不同类型木马感染主机后一般都会通过获取最高权限,修改主机部分设置,或是调用系统API函数等手段来实现特定目的。可以使用主机内部调查方法,寻找木马程序,确定可疑通信连接,初步分析木马线索。以下为主机内部调查方法概述:
检查用户计算机运行程序及网络活动连接情况。木马作为恶意程序,在运行时会作为进程存在,占用计算机内存,用户主机感染木马后,会与黑客端建立一条TCP连接,用于数据通信,使用Windows任务管理器即可快速查看当前系统运行的所有进程及内存占用情况,也可使用Windows操作系统自带的命令行程序Cmd.exe查看计算机运行的程序以及对应的网络连接活动。使用Cmd运行“netstat-nab”命令可查看当前计算机运行的全部程序,以及对应的网络连接和端口使用信息。对比浏览网站前后“netstat-nab”命令的执行结果,找到新增进程或网络连接,分析异常端口的使用情况,或是常用端口的异常行为情况,从而初步判断是否有恶意进程的开启,缩小取证范围。例如浏览器进程通常使用80或443端口,但如果浏览器进程使用了3030端口(非知名端口),可初步怀疑木马进程将自身隐藏到合法进程中与外界进行通信。
(二)Wireshark网络监听软件捕获、分析通信数据
初步分析木马线索后,调查流程分为两步:第一步是使用Wireshark解密HTTP/2数据包,第二步是使用两种方法分析HTTP/2通信数据。
1. 使用Wireshark解密数据
当前主流浏览器均要求HTTP/2网站在传输数据时必须使用TLS协议对数据进行加密。Wireshark提供了TLS加密数据的解密功能,即可使用Wireshark解密HTTP/2数据包。解密HTTP/2数据包需要从客户端获取预主密钥(Pre-masterkey),并将该密钥与通信双方产生的随机参数结合生成加密密钥,从而解密HTTP/2加密报文。在解密操作中,需分别创建记录预主密钥和TLS调试信息的Log文件,将记录预主密钥的log文件设置为系统变量,将上述两个文件放入Wireshark中,通过Wireshark实现对加密数据的解密。
在Wireshark捕获通讯数据时必须将TLS密钥信息保存下来,否则将无法解密HTTP/2数据包。Wireshark解密HTTP/2数据包后会在每个HTTP/2流传输结束统一进行解密,生成一个解密报文,在每个HTTP/2流最后一个数据包的HyperText Transfer Protocol 2 层可查看该HTTP/2流传输数据的明文内容。
2. 使用Wireshark分析通信数据
在使用网络抓包方法进行木马取证分析前,应先关闭不必要的网络通信程序,减少干扰性的网络通信数据,构建比较纯净的网络环境,再使用Wireshark抓取染毒计算机访问目标网站时产生的通信数据。使用Wireshark分析HTTP/2网站挂马线索的方法分为两步:
第一步:利用HTTP/2协议具有多路复用的特性,对Wireshark抓取的TCP数据流进行分析。同一域名服务器和客户端之间的请求和响应数据都是由单个TCP连接传输完成,并且没有传输数据流的数量限制,这样在TCP连接层面上过滤数据包就会使抓取的数据条理清楚,更容易发现IP地址的变化情况。实验发现,当客户端使用HTTP/2协议传递数据时,黑客端也必须使用加密方式传输数据。在Wireshark中使用“tcp.streameq n and http2”(n=0,1,2,3……)条件过滤捕获的数据包,查看客户端和外界的通信流,重点是寻找网站主目录传输所在的TCP流,之后使用“tcp.streameq n+1 and http2”查看客户端与其他不明服务器的通信数据流。对不明服务器传输的所有文件进行提取,依次将这些文件放入腾讯哈勃等检测工具进行木马分析,记录命中的木马程序。
第二步:根据Referer字段分析木马线索。在HTTP请求报文首部包含一个Referer字段,这个字段记录了跳转到该网页的前置URL信息,通过该字段进行递归分析可以找到传输木马程序的前置数据包、构建网站间逻辑、找到网站挂马位置并还原出黑客挂马链条。一般来说,主页是网站被访问次数最多的页面,因此,黑客为了增加木马下载的频率,大多会选择在网站主页挂马,所以在调查时应当先提取网站主页并对其进行分析[9]。由于木马程序的传输一般是在HTTPGET 数据包中,因此先按上文寻找不明传输TCP数据流,确定传输木马程序的HTTP-GET数据包,由该数据包的Referer字段确定前置网页数据包,直至递归找到用户访问目标网站数据包,提取该数据包的内容,使用关键字过滤的方法找到挂马语句。
在使用Wireshark捕获、分析浏览目标HTTP/2网站产生的通信数据后,仍需使用Wireshark抓取感染主机与黑客端的通信数据,并针对不同网络协议设置过滤关键字,获取木马线索调查的相关信息。例如,针对使用ESMTP或HTTP协议传输数据的盗号木马,在Wireshark中使用GET或POST等关键字搜索捕获的数据包,分析并确定木马的窃取信息行为,完善案件证据链条。
三、案例分析
某网站疑似被挂马,导致部分计算机在浏览该网站时感染木马。在测试虚拟机上(与染毒主机配置相同)浏览疑似被挂马的目标网站,使用基于主机内部调查和网络信息监听的方式,还原木马程序和木马传播链条,分析网站被挂马位置,确定黑客端信息。分析及取证流程如下:
(一)使用网络命令初步分析潜在木马
使用测试虚拟机浏览器访问www.ait*****logy.com目标网站,在浏览前后使用Cmd运行netstat -nab命令,发现新增多条Fi****x.exe进程的TCP连接和一条1.exe进程的TCP连接(220.**.***.44:49539到212.**.**.245:1604),其 中Fi****x.exe为浏览器进程,而1.exe为不明进程,所以初步怀疑1.exe为恶意进程,212.**.**.245为黑客端IP地址。
(二)使用Wireshark解密HTTP/2数据包
第一步:在Wireshark文件主目录中新建两个文件,分别取名为sslkeylog.log和ssl.log;
第二步:打开系统属性设置界面,添加环境变量,变量名取名为SSLKEYLOGFILE,变量值选择为sslkeylog.log文件;
第三步:更改Wireshark(v3.4.0 汉化版)配置文件,在“编辑”中选择“首选项”,在Protocols选项中选择TLS,在TLS debug file 中添加上述ssl.log文件,在(Pre)-Master-Secret log filename中添加上述sslkeylog.log文件。在“分析”选择中的启用协议选项里打开HTTP/2选项。设置完毕,重新启动Wireshark即可。
(三)使用Wireshark确定并还原木马程序
浏览目标网站的同时使用Wireshark抓取数据包AI.pacpng,首先使用“tcp.streameq 0 and http2”条件过滤当前数据包,找到过滤后的第二个数据包(编号为No.28)为index.html的HTTP-GET数据包,右键追踪HTTP/2字节流,过滤后的HTTP/2字节流最后一个数据包(编号为No.895)即为该数据流的解密包,在解密包HTTP/2层的Line-based text data字段查看解密数据,内容与目标网站主页面index.html代码相同,确定60.***.***.216为目标网站IP地址。
接着,查看“tcp.streameq 1 and http2”过滤数据包,发现测试虚拟机与不明IP地址(212.**.**.245)的通信数据,编号为1191、1193和1236的数据包分别为1.exe、2.exe和3.exe三个文件的HTTP-GET请求报文,且该HTTP/2数据流完整传输了1.exe、2.exe和3.exe三个程序文件。这与初步分析中的可疑进程和网络连接高度吻合,遂怀疑1.exe为木马程序。选中1.exe的HTTP-GET数据包,追踪HTTP/2字节流,找到该数据流最后一个数据包(编号为No.2306),提取HTTP/2层的Data字段,右键导出分组字节流,还原1.exe文件。按上述步骤依次将这三个文件提取并放入腾讯哈勃工具进行分析,命中1.exe为木马程序。
最后,在Wireshark中使用IP地址(212.**.**.245)进行过滤,可以发现该计算机访问目标网站并接收1.exe文件之后,与IP地址212.**.**.245进行了大量TCP通信。分析过滤后的通信报文,发现传输数据具有明显的加密特征,由此可以判断,IP地址为212.**.**.245的计算机对测试虚拟机进行了木马攻击。
(四)使用Referer字段分析木马传播链条
首先分析1.exe文件的HTTP-GET数据包,该数据包的Referer字段为https://www.zh****qu.com/,右键该数据包追踪TCP流(tcp.streameq 1),使用关键字(zh****qu)搜索,定位到编号1137的TLS数据包,该数据包为client hello报文,说明https://www.zh****qu.com/的HTTP-GET数据包在该数据流的应用层协议即HTTP/2协议数据流中;接着使用“tcp.streameq 1 and http2”过滤条件返回对应的HTTP/2数据流,发现编号为1146的数据包为https://www.zh****qu.com/网站index.html的HTTP-GET数据包,同样分析该数据包的Referer字段,为https://www.ait*****logy.com/,此URL恰好为目标网站的URL,这 里 说 明https://www.zh****qu.com的 前 置 网 站 为https://www.ait*****logy.com的 主 页;转 到 传 输 目 标 网 站 的HTTP/2数据流中(tcp.streameq 0 and http2),寻找index.html的HTTP-GET数据包(编号为No.28),追踪该数据包的HTTP/2流;最后对提取的网站代码界面进行相应的关键字(zh****qu)搜索,查看到iframe挂马语句
(五)形成结论
用 户 首 先 访 问www.ait*****logy网 站(IP地 址:60.***.***.216),但该网站被黑客挂马,植入的Iframe挂马语句使得用户在不知情的情况下访问www.zh****qu.com网站,该网站诱使用户下载并运行1.exe文件。黑客主机IP地址为212.**.**.245,1.exe为木马程序。木马程序1.exe运行后,成功感染用户计算机,木马传播链条分析结果如图8所示。
四、结语
当前HTTP/2网站在传输数据时都采用TLS协议加密通信数据,由于无法对通信数据进行有效解密,影响了此类案件的调查分析工作。本文研究了HTTP/2网站挂马案件的线索调查和分析方法,使用Wireshark软件解密HTTP/2类型网站加密通信数据,找到并还原出木马程序。利用HTTP/2多路复用的特点简化Wireshark分析多条TCP连接的流程,利用Referer字段还原出木马传播链条,定位被挂马页面,提取相应恶意代码。网站挂马攻击成功实施之后,受害者主机感染的木马程序会将窃取的敏感信息发送给黑客主机,接下来,笔者计划对这类通信数据的分析方法进行深入研究,以完善网站挂马案件的证据链条。