Wireshark解密HTTPS流量
在审查可疑网络活动时,经常遇到加密流量。大多数网站使用HTTPS协议,各种类型的恶意软件也使用HTTPS,查看恶意软件产生的数据对于了流量内容非常有帮助。
本文介绍了如何利用Wireshark从pcap中解密HTTPS流量。可以使用基于文本的日志进行解密方法,日志中包含最初记录pcap时捕获的加密密钥数据。
HTTPS Web流量
HTTPS流量通常显示一个域名。例如,在Web浏览器中查看https://www.wireshark.org,在自定义的Wireshark列显示中查看时,pcap将显示www.wireshark.org作为此流量的服务器名称。但无法知道其他详细信息,例如实际的URL或从服务器返回的数据。
加密密钥日志文件
加密密钥日志是一个文本文件。
最初记录pcap时,使用中间人(MitM)技术创建这些日志。如果在记录pcap时未创建任何此类文件,则无法解密该pcap中的HTTPS通信。
示例分析
有密钥日志文件的HTTPS流量
Github存储库中有一个受密码保护的ZIP文件,其中包含pcap及其密钥日志文件。ZIP中包含的pcap通过密钥日志解密后,可以访问恶意软件样本。
从ZIP(密码:infected)中提取pcap和密钥日志文件:
Wireshark-tutorial-KeysLogFile.txt
Wireshark解密HTTPS-SSL-TLS-traffic.pcap教程
没有密钥日志文件的HTTPS流量
在Wireshark中打开解密的HTTPS-SSL-TLS-traffic.pcap Wireshark教程,使用Web筛选器:
(http.request或tls.handshake.type eq 1)和!(ssdp)
此pcap来自Windows 10主机上的Dridex恶意软件,所有Web流量(包括感染活动)都是HTTPS。没有密钥日志文件,看不到流量的任何详细信息,只有IP地址,TCP端口和域名:
加载密钥日志文件
在Wireshark中打开解密的HTTPS-SSL-TLS-traffic.pcap Wireshark,使用菜单路径Edit –> Preferences来打开Preferences菜单:
在Preferences菜单的左侧,单击Protocols:
如果使用的是Wireshark版本2.x,需要选择SSL。如果使用的是Wireshark 3.x版,需要选择TLS。选择SSL或TLS后,可以看到(Pre)-Master-Secret日志文件名。单击“浏览”,然后选择名为Wireshark-tutorial-KeysLogFile.txt的密钥日志文件:
密钥日志文件的HTTPS流量
单击“确定”后,Wireshark会在每条HTTPS行下列出解密的HTTP请求:
在此pcap中可以看到隐藏在HTTPS通信中对microsoft.com和skype.com域的HTTP请求,还发现由Dridex发起的以下流量:
foodsgoodforliver[.]com – GET /invest_20.dll
105711[.]com – POST /docs.php
对foodsgoodforliver[.]com的GET请求返回了Dridex的DLL文件。对105711[.]com的POST请求是来自受Dridex感染的Windows主机的命令和控制(C2)通信。
针对foodsgoodforliver[.]com的HTTP GET请求的HTTP流:
可以从pcap导出此恶意软件,使用菜单路径文件–>导出对象–> HTTP从pcap导出该文件:
使用file命令确认这是一个DLL文件,然后使用shasum -a 256获取文件的SHA256哈希:
该恶意软件的SHA256哈希为:
31cf42b2a7c5c558f44cfc67684cc344c17d4946d3a1e0b2cecb8e*173cb2f
还可以检查来自此Dridex感染的C2流量,下图显示了其中一个HTTP流的示例:
参考链接
Customizing Wireshark – Changing Your Column Display Using Wireshark – Display Filter Expressions Using Wireshark: Identifying Hosts and Users Using Wireshark: Exporting Objects from a Pcap Wireshark Tutorial: Examining Trickbot Infections Wireshark Tutorial: Examining Ursnif Infections Wireshark Tutorial: Examining Qakbot Infections
- Go语言的指针 & *
- MySQL中的double write(二)(r12笔记第17天)
- 论Go语言中goroutine的使用
- WordPress发布文章同步到新浪微博失败的问题解决与分享
- 压测工具swingbench和sysbench对比(r12笔记第13天)
- 解决WordPress4.4.1不支持图片暗箱问题,Begin主题适用
- MySQL源码安装总结(r12笔记第12天)
- 全站启用SSL之后,如何兼容不支持https抓取的搜索引擎?
- sandbox和MHA快速测试(r12笔记第32天)
- 分享一个支持https的CDN及启用SSL后续问题汇总
- 分分钟搭建MySQL一主多从环境(r12笔记第31天)
- 相同update语句在MySQL,Oracle的不同表现(r12笔记第30天)
- 升级Nginx1.9.5以上版本,开启博客网站http2.0时代
- Oracle Data Guard压缩归档测试(二)(r12笔记第27天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法