草庐IT

Wireshark教程:解密HTTPS流量

暖、风 2023-04-28 原文

目录

摘要

加密流量背后的故事

HTTPS Web流量

加密密钥日志文件

具有密钥日志文件的Pcap示例

没有密钥日志文件的HTTPS流量

加载密钥日志文件

加载密钥日志文件后的HTTPS流量

 C2流量


摘要

在检查可疑的网络活动时,我们经常会遇到加密的流量。这是为什么那?因为大多数网站使用超文本传输协议安全(HTTPS)协议。但与大多数网站一样,各种类型的恶意软件也使用HTTPS。当查看恶意软件活动的pcap时,了解感染后流量中包含的信息对我们非常有用。

本次Wireshark教程介绍了如何解密来自 PCAP中 的 HTTPS 流量。使用包含最初记录 pcap 时捕获的加密密钥数据,它是基于文本的日志文件。有了这个密钥日志文件,我们可以解密 pcap 中的 HTTPS 活动并查看其内容。

今天,我们将检查来自Dridex恶意软件感染的HTTPS活动。

注意:我们的此次教程确认您已经按照前面教程中提到的“Wireshark–更改列显示”中的描述定制了Wireshark-列显示。

警告:本教程使用的pcap包含基于Windows的恶意软件。如果使用Windows计算机,则有感染的风险。建议您尽可能在离线环境中操作,如虚拟机。或者在非Windows环境中操作,如kali。

加密流量背后的故事

在20世纪90年代中后期,网站使用的最常见协议是超文本传输协议(HTTP),它生成未加密的网络流量。然而,随着安全问题变得越来越令人担忧,网站开始转向HTTPS,现在我们很少从网页浏览中看到HTTP流量。

HTTPS本质上是一个包含HTTP流量的加密通信隧道。这些隧道首先使用安全套接字层(SSL)作为加密协议。如今,大多数HTTPS流量使用传输层安全性(TLS)。

HTTPS Web流量

HTTPS流量通常会显示域名。例如,查看https://www.wireshark.org在web浏览器中显示,pcap会显示www.wireshark.org。在自定义的Wireshark列显示中查看时,作为此流量的服务器名称。不幸的是,我们不知道其他细节,比如实际的URL或从服务器返回的数据。遵循来自pcap的传输控制协议(TCP)流不会显示此流量的内容,因为它是加密的。

加密密钥日志文件

加密密钥日志是一个文本文件,如下图所示。

这些日志文件是在最初记录pcap时使用中间人(MitM)技术创建的。如果在记录pcap时没有创建此类文件,则无法解密该pcap中的HTTPS流量。

具有密钥日志文件的Pcap示例

注意,当使用密钥日志解密时,此ZIP存档中包含的pcap提供对基于Windows的恶意软件样本的访问。一如既往,我们建议您在非Windows环境或离线环境中谨慎行事。

从已感染的pcap和密钥日志文件的zip存档中打开。这将提供两个文件,如下图所示。

  • Wireshark-tutorial-KeysLogFile.txt
  • Wireshark-tutorial-on-decrypting-HTTPS-SSL-TLS-traffic.pcap

没有密钥日志文件的HTTPS流量

在Wireshark中打开此pcap。使用之前关于Wireshark过滤器的教程中描述的基本web过滤器,命令如下:

(http.request or tls.handshake.type eq 1) and !(ssdp)

此pcap来自Windows 10主机上的Dridex恶意软件感染。所有网络流量,包括感染活动,都是HTTPS。如果没有密钥日志文件,我们就看不到流量的任何细节,只有IP地址、TCP端口和域名,如下图所示。

加载密钥日志文件

使用菜单路径Edit(编辑)-->Preferences(首选项)

然后打开Protocols

从Protocols下面找到TLS,选择TLS后,应该会看到(Pre)-Master Secret日志文件名的行。点击“浏览”按钮,选择我们保存的密钥日志文件name.txt,找到你保存的密码数据。

加载密钥日志文件后的HTTPS流量

单击“OK”后, 在使用基本过滤器时,Wireshark列显示将在每个HTTPS行中列出解密的HTTP请求。

在这个pcap中,我们现在看到了对microsoft.com and skype.com的HTTP请求,前面隐藏在HTTPS流量中的.com域名。我们还发现由Dridex感染引起的以下流量:

  •     foodsgoodforliver[.]com - GET /invest_20.dll
  •     105711[.]com - POST /docs.php

对foodsgoodforliver[.]com的GET请求返回了Dridex的DLL文件。发送到105711[.]com的POST请求是来自受Dridex感染的Windows主机的命令和控制(C2)流量。

我们可以通过追踪HTTP流来查看流量。右键选择它,然后左键单击以显示一个菜单,追踪流-HTTP流。下图显示了对foodsgoodforliver[.]com的HTTP GET请求的HTTP流。

 

由于我们有此流量的密钥日志文件,现在可以从pcap导出此恶意软件。使用文件-导出对象-HTTP对象,在HTTP对象列表中选择此对象从pcap导出此文件,如下图所示,记得不要更改软件名字哦。

 

您可以在Linux环境中,打开终端窗口并使用file命令确认这是一个DLL文件。然后使用shasum-a256获取文件的SHA256哈希,如图所示。如果你使用Google搜索此散列函数,您应该会找到公开可用的在线沙箱分析报告。

文件名sha256值
invest_20.dll31cf42b2a7c5c558f44cfc67684cc344c17d4946d3a1e0b2cecb8eb58173cb2f

 C2流量

最后,我们可以查看此次Dridex感染的C2流量。使用基本的web过滤器,然后跟踪从一个POST请求到105711[.]com的HTTP流。下图显示了其中一个HTTP流的示例。

 注:转发请私聊me哦

 

有关Wireshark教程:解密HTTPS流量的更多相关文章

  1. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  2. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  3. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  4. ruby - Ruby 中的单 block AES 解密 - 2

    我需要尝试一些AES片段。我有一些密文c和一个keyk。密文已使用AES-CBC加密,并在前面加上IV。不存在填充,纯文本的长度是16的倍数。所以我这样做:aes=OpenSSL::Cipher::Cipher.new("AES-128-CCB")aes.decryptaes.key=kaes.iv=c[0..15]aes.update(c[16..63])+aes.final它工作得很好。现在我需要手动执行CBC模式,所以我需要单个block的“普通”AES解密。我正在尝试这个:aes=OpenSSL::Cipher::Cipher.new("AES-128-ECB")aes.dec

  5. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  6. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  7. ruby-on-rails - Ruby 流量控制 : throw an exception, 返回 nil 还是让它失败? - 2

    我在思考流量控制的最佳实践。我应该走哪条路?1)不要检查任何东西并让程序失败(更清晰的代码,自然的错误消息):defself.fetch(feed_id)feed=Feed.find(feed_id)feed.fetchend2)通过返回nil静默失败(但是,“CleanCode”说,你永远不应该返回null):defself.fetch(feed_id)returnunlessfeed_idfeed=Feed.find(feed_id)returnunlessfeedfeed.fetchend3)抛出异常(因为不按id查找feed是异常的):defself.fetch(feed_id

  8. ruby - 如何捕获所有 HTTP 流量(本地代理) - 2

    我希望访问我机器上的所有HTTP流量(我的Windows机器-不是服务器)。据我了解,拥有一个本地代理是所有流量路线的必经之路。我一直在谷歌搜索但未能找到任何资源(关于Ruby)来帮助我。非常感谢任何提示或链接。 最佳答案 WEBrick中有一个HTTP代理(Rubystdlib的一部分)和here's一个实现示例。如果你喜欢生活在边缘,还有em-proxy伊利亚·格里戈里克。这postIlya暗示它似乎确实需要一些调整来解决您的问题。 关于ruby-如何捕获所有HTTP流量(本地代理)

  9. ruby - 在 RUBY 上的 PADRINO 框架上使用 RSPEC 进行测试的教程 - 2

    我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa

  10. ruby-on-rails - 我如何比较 'Bcrypt' Gem解密的密码和加密的密码 - 2

    我正在尝试对某些帖子的评论使用简单的身份验证。用户使用即时ID和密码输入评论我使用“bcrypt”gem将密码存储在数据库中。在comments_controller.rb中像这样@comment=Comment.new(comment_params)bcrypted_pwd=BCrypt::Password.create(@comment.user_pwd)@comment.user_pwd=bcrypted_pwd当用户想要删除他们的评论时,我使用data-confirm-modalgem来确认数据在这部分,我必须解密用户输入的密码以与数据库中的加密密码进行比较我怎样才能解密密码,

随机推荐