导语:每隔一段时间就会有消息称wireshark易受攻击,易受利用或者易于破解,意思就是人们有方法在pcap和pcapng文件中构造帧消息或数据包来造成wireshark崩溃并且执行恶意代码。今天我们来看看具体情况以及我们可以采取哪些措施。
攻击wireshark
每隔一段时间就会有消息称wireshark易受攻击,易受利用或者易于破解,意思就是人们有方法在pcap和pcapng文件中构造帧消息或数据包来造成wireshark崩溃并且执行恶意代码。今天我们来看看具体情况以及我们可以采取哪些措施。
我几乎每天都在用wireshark,不仅是工作日,周末也在用,已经用了15年了。从技术上来讲,那会儿它还叫Ethereal(网络调试和数据包嗅探软件),有时候我以packetyzer的形式来运行,这种形式人们早已忘记,我之所以还用它是因为它在Windows平台上使用还不错,界面简洁清晰。这款软件可以实时抓取数据包中的流量并进行分析,尽管有时候显示的内容并不是完全正确,但它依然是一款流量分析神器。不过,要提醒大家的是,解析和诊断所有这些协议是一项非常艰巨复杂的任务。而且据我所知,任何协议分析器都没有wireshark出色,很多其他工具简直烂的不行。
蓄意破坏wireshark
现在,当我们谈到蓄意破坏wireshark时,我们主要是想找到wireshark崩溃的原因并且编写一份漏洞报告。这个过程本身很简单,但是可能需要一些时间。我通常都是使用editcap工具将崩溃的pcap文件拆分成更小的文件,要么通过 -c参数来指定每个文件中数据包的编号,要么通过-A和-B参数来指定文件的起始时间戳。然后不断重复,直到获得可能的最小文件来复现崩溃场景(通常一个数据包就足够了)。有一次我发现一个特定的数据包会导致“颜色编码”代码崩溃,我的一个朋友让我不要马上就开始写漏洞报告,他想看看他是不是能够先利用这个漏洞。不过一番测试之后,发现这次崩溃还不足以利用,不过好在,他发现了另一种攻击wireshark的方式。向wireshark提供一些内容造成反应异常,这种异常让你可以执行你的代码。
Wireshark作为攻击界面的主要问题是,当你去审计一行一行代码和功能时,它会有很多问题。
以下来自杰拉尔德举办的2018年Sharkfest US Wireshark会议的幻灯片,让您了解它有多复杂:
Sharkfest 2018美国主题演讲(点击此处观看)
重点是:wireshark由1400位作者共同编写完成,2400个协议,总共至少250万行代码,具体多少行取决于你的计算方式。正如有人在Twitter上所说,第一个想到的跟这个类似的开源项目是Linux内核开发。
攻击面
正如我们大家都知道的那样,并不是每个编写代码的人都会像Dan J. Bernstein一样在安全方面做得一丝不苟。大多数开发人员需要完成任务,因此代码编写得很匆忙,而且他们中的许多人甚至都不关心安全性。
为什么有人会攻击我的数据包解析器?我刚刚花了大把的时间写了一堆代码来分析我们的协议正在做什么,所以,我不会花太多时间来保证它的安全,太累了。只要它与我们的pcaps文件一起运行就不会有问题。
如果你问所有1400位作者,绝大部分人都会这样回答你。甚至还有一些代码是你不知道的,因为有很多公司为其专有协议进行内部解析器开发,并且从来不发布代码。这并不意味着它无法被攻击并被用作攻击向量,但是,当然了,相对于那些代码开源的解析器来说,攻击起来相对没有那么容易。
有趣的事实:至少有一个专有供应商协议的解析器代码块,它错误的将其作为公共Wireshark代码库。当有人问我是否可以将协议规范在TraceWrangler中实现时,我找到了其中一个,但是却被告知
对不起 – 它不应该首先出现在公共Wireshark构建中……
Wireshark和攻击面的主要问题非常庞大。你无法修复所有解析器中的所有错误,因为人们没有时间去这么做。因此,有些解析器的代码就再也没有人去维护了。而且发现哪些代码没人维护也不是那么容易。Wireshark核心开发人员尽最大努力解决所有问题,并且他们夜以继日的使用大量有效且损坏的pcap文件对代码进行模糊测试。但是仍然没有发现所有问题。一个安全研究员(不管是善意还是恶意)想要找到一种方法来攻击代码库,他总是会花大量的时间和精力来研究。
评估风险
现在我们已经认同Wireshark提供了庞大的攻击面。那么让我们看看我们能做些什么。在风险评估方面,我们需要考虑两个主要方面:
1.概率 – 利用攻击向量来攻击目标的概率。
2.影响 – 如果攻击发生,会造成何种后果。
这可能是风险评估的简化视图,但对于这篇文章,我会尽量不去复杂化。
如果你感兴趣,可以查看这篇文章,讲的非常详细。
直言不讳的说,我们需要找出在Wireshark中打开恶意pcap文件的可能性,以及如果攻击者的代码得以执行导致了崩溃,可能会发生最糟糕的事情是什么。可能你以前从未编写过漏洞利用代码,我想告诉你,代码并不总是能够完美执行。实际上,很多漏洞利用代码在大多数情况下都不奏效。真正非常好的代码是那些几乎每次都能成功执行的,不过这种代码非常罕见(例如Eternal Blue就是一个非常成功的例子)。谈谈最坏的情况–如果你还没有阅读它,请阅读这篇关于NotPetya的文章,你就会感叹道 “我去,这**也太悲催了吧!”
据称一台服务器运行一个小的(可能还是不相关的)会计应用程序导致该公司全球企业IT领域的彻底失败。
那么,在wireshark中打开恶意pcap文件的可能性有多大呢?这很大程度上取决于你的工作:
1.如果你正在为你自己的应用程序或一个众所周知的应用程序排除TCP故障,那么在pcap中突然出现一些恶意数据包的可能性很小,假设你只过滤了捕获期间所需的流量。
2.如果你在内部网络上进行批量捕获(“捕获所有内容,稍后筛选”),你就更容易发现恶意文件。但是要发现它,需要确保恶意文件已经存在于你正在捕获的网络上,因此风险再次降低。为什么?因为如果攻击者已经可以访问你的网络并且注入恶意文件,那么他可能会做更容易更隐蔽的事情,而不是注入恶意文件,随时都有可能被发现。像其他人一样,攻击者也是懒惰的,所以很少有人做额外的事情,所以Wireshark被利用是所有问题中最不用担心的问题。根据我的经验,几乎不会有人在网络中捕获数据包,除非他们需要修复问题(这是一种被动反应性而非主动性)。如果他们这样做,他们的主动捕获解决方案通常是商业设备,而不是Wireshark。不过,他们可能会在后台运行tshark。
3.正常文件,恶意文件,畸形文件:如果你在互联网上行链路上执行捕获,或者其他一些你根本不知道什么样的流量到达的网络链接时,你应该更加细心。问题是你无法控制数据包的来源,因此可能有人偷偷注入恶意数据包。而且,只要一个恶意数据包就可能足以成功攻击Wireshark并且对你的计算机造成损坏。
4.恶意软件分析–这可能是风险最高的两个中的一个。因为一些恶意软件作者可能会将恶意数据包添加到他的命令和控制通信中以扰乱Wireshark,要么延迟你的逆向进度,要么甚至直接进行破解。在这种情况下,你应该格外小心。
5.对正在进行的攻击进行取证(大家知道,有一种攻击人们称之为“APT”,这种攻击,在绝大多数实例中都不会使用如此简单的攻击向量)–如果你正在调查网络漏洞,你不确定攻击者是否仍然能够访问你的网络,应该假设他们可以将恶意数据包注入捕获的文件中。如此一来,我可以在没有任何网络连接的工作站上进行分析数据包,然后重新映像。我考虑使用air-gap(空气隙)来划定界限来防御阻挡一些东西,如听不见的声音,硬盘噪音,键盘嗅探(我不使用无线键盘),以及所有其他高级实验室级别的“我仍然可以通过空气隙来交流”之类的东西。
现在,对于可能发生的最坏的事情–我可以肯定的说,如果你在域控制器上运行具有管理员权限的Wireshark来打开一个带有可疑来源的pcap文件,这是以最不负责任的态度,干了所有你能干的事情。所以不要这样做。除了能产生一些小的影响之外,成功的Wireshark攻击还能够对你的PC进行一些破坏,例如加密一些本地文件等。当然,攻击者也有可能进行提权,这样危害可就大了。
场景与对策
警告大型企业客户Wireshark的攻击向量可能会导致一些问题,因为它们通常采取的应对方案是完全禁止使用Wireshark,在这一点上,我有过惨痛的教训。想象一下在一个SOC分析师的环境下,在调查过程中不允许使用wireshark,这将让他们的工作变得更加艰难。值得庆幸的是,这种情况已经得以解决,目前现在还有一点问题。
现在让我们来看看你可以采取的四大行动来降低wireshark被破解的风险:
#4隔离分析环境
如果你正在处理很有可能包含恶意内容(恶意软件样本,C&C流量,已遭破坏的协议)的pcap文件,你需要在受控网络环境中的物理工作站上运行Wireshark,这种环境无法逃逸,或者是一个根本没有网络的环境。这种方式处理数据包通常很痛苦,因为当你遇到问题时不能上网查找解决方法,但话又说回来,这是最初的基本原则,安全性高,必然会带来不方便。在大多数情况下,我都会有两个或更多工作站环境彼此相邻,一个是air-gap(或至少在一个孤立的恶意软件实验室网络上),并且至少有一个上网来进行搜索和查找。对于取证调查,在每个案例后重塑分析工作站。
#3在VM中运行wireshark
这是#4的一个更方便的版本,因为你在同一硬件上运行隔离环境和正常环境。这种工作方式也是很好的,假如没有VM逃逸攻击向量(但是这种情况非常少见,甚至不太可能被链接到Wireshark漏洞利用中),但无论何时你需要分析一些东西时它都需要你启动虚拟机。尽管如此,假如你的Wireshark是 – 或者甚至可能是 – 一个攻击目标,这是减轻大部分风险的最常见方式。
#2禁用不相关的协议解析器
可能有人并不知道这一点,其实你可以在Wireshark中禁用协议解析器。比如,如果你知道你只是通过IPv4 / IPv6和以太网查看TCP和UDP协议,则可以禁用其他所有内容,我在Pcap文件拆分和合并的博客中演示了如何操作,我在其中创建了一个额外的tshark配置文件以便更快的解析(更安全更快):
通过禁用所有其他协议,你可以大大减少攻击面。你可以为其创建配置文件并轻松地来回切换。即使你正在启用更复杂但非常常见的协议(如HTTP和HTTPS),他们的解析器遭受攻击的可能性远远低于一些人们从未听说过的模糊协议(wireshark有对应的解析器)。如果你看一下最近提交的关于Wireshark的CVE,你会立刻发现他们的某些协议,用户甚至需要解码,比如CVE-2018-16056,CVE-2018-16057和CVE-2018-16058。其中WiFi的radiotap头利用脚本可能是问题最大的(使用WiFi的人,请不要有想法,因为大多数用户嗅探的都是有线数据,而不是无线)。我认为人们在wireshark中看到的数据98%以上都是以太网帧,与之相比,蓝牙数据是非常罕见的。有意思的是,思科甚至没有提到禁用协议解析器作为对策,这可能是因为人们发现的漏洞都是来自那些特定的解析器的用户,所以对于那些你不需要的协议,你可能不会想到去禁用它们。
#1非特权用户运行wireshark
在非特权用户下,你是可以运行恶意文件的,即使在这个过程中可能需要进行提权。但每当我看到有人以root或管理员身份运行Wireshark时,我真的很头疼。绝大多数人都是以root身份运行的,因为如果不这么做的话,他们无法访问他们的网卡来捕获数据,这表明他们的Wireshark捕获权限设置得不对。如何进行正确设置,请查看这篇文章。如果你们是以root或管理员身份运行wireshark的话,下面这个图片送给你,自己体会:
总结
我干数据包捕获工作已经超过了15年了,在这15年中,我从未遇到过包含任何旨在攻击Wireshark自身的文件。我看到过Wireshark崩溃了无数次,我都数不清楚了,特别是糟糕的1.0版本,但据我所知,这些崩溃都不是由攻击数据包引起的。我甚至无法通过数十亿个数据包来判断我在那个时间到底加载了多少TB的数据。当然,我可能遭到攻击而没有注意到,但我不这么认为。每次我的计算机运行出现异常时,我就会以一种攻击者无法阻止的方式来彻底调查它的通信模式。到目前为止,我从未发现任何被入侵现象,只有损坏的驱动程序或其他正常软件的行为异常。当然,Wireshark的崩溃也可能是因为本身的问题。
最后,我并不是说在加载Pcap文件时没有能够成功攻击Wireshark的东西。但有可能普通的Wireshark用户(开发人员,网络工程师,故障排除人员)永远不会遇到这样的文件。无论如何,数字取证/事件响应专业人员应该谨慎行事,在任何时候看到的任何证据都要格外小心。