| 案例 | 随笔 | 知识 | 声音 | 其他 |
编者按
网络安全行业的小伙伴们对Wireshark再熟悉不过了。本文专门针对“显示过滤器表达式”进行说明,小编觉得有必要引进,向大家做一做说明。正确使用Wireshark显示过滤器,可以帮助安全专业人员更有效地调查可疑网络流量。
文章作者:Brad Duncan(Unit42著名的威胁情报分析师)(有删节)。
【编者注】安全专业人员通常会记录与Windows感染流量相关的指标,例如URL、域名、IP地址、协议和端口。正确使用Wireshark显示过滤器可以帮助人们快速找到这些指标。
作者写在前面的话
作为威胁情报分析师,我经常使用Wireshark来审查恶意软件样本生成的网络流量的数据包。为了更好地完成这项工作,我使用了一个定制的Wireshark列显示。今天的帖子为分析师提供了更多使用Wireshark的技巧。它涵盖了显示过滤器表达式,我发现它可用于查看受感染Windows主机的恶意网络流量。
了解本文的前提
您必须了解网络流量基础知识才能有效地使用Wireshark。您还应该对恶意软件感染的发生方式有一个基本的了解。这不是一个关于如何分析恶意网络流量的综合教程。相反,它显示了Wireshark过滤器的一些提示和技巧。
Wireshark显示过滤器
Wireshark的显示屏过滤位于列显示部分正上方的条形图。这是您键入表达式以过滤Wireshark从pcap显示的帧,IP数据包或TCP段的位置。

▲图1. Wireshark中显示过滤器的位置。
如果您在显示过滤器中键入任何内容,Wireshark会根据您键入的文本提供建议列表。虽然显示过滤条保持红色,但表达式尚未被接受。如果显示过滤条变为绿色,表达式已被接受并且应该正常工作。如果显示过滤条变为黄色,表达式已被接受,但可能无法按预期工作。

▲图2. Wireshark的显示过滤器根据您键入的内容提供建议。

▲图3. Wireshark的显示过滤器接受一个表达式,它按预期工作。

▲图4. Wireshark显示过滤器接受表达式的示例,但它不能按预期工作。
Wireshark的显示过滤器使用布尔表达式,因此您可以指定值并将它们链接在一起。通常使用以下表达式:
等于:== 或 eq
并且:&& 或 and
或者:|| 或 or
这些过滤器表达式的示例如下:
ip.addr eq 192.168.10.195、ip.addr == 192.168.10.1
http.request && ip.addr == 192.168.10.195
http.request || http.response
dns.qry.name contains microsoft
或者 dns.qry.name contains windows
指定值不包含时,请勿在过滤器表达式中使用 "!="。例如,如果要指定不包含IP地址192.168.10.1的所有流量,请使用!(ip.addr eq 192.168.10.1)而不是ip.addr != 192.168.10.1,因为第二个过滤器表达式将无法正常工作。
基于Web的感染流量的过滤器
我经常使用以下过滤器表达式来快速查看pcap中的Web流量:
http.request or ssl.handshake.type == 1。
值http.request显示HTTP请求的URL,ssl.handshake.type == 1显示HTTPS或SSL / TLS流量中使用的域名。
我之前的教程包含用户在2018年8月从college.usatoday[.]com查看URL时生成的Web流量。在pcap中,用户使用Microsoft的Edge Web浏览器在Windows 10计算机上。过滤http.request or ssl.handshake.type == 1概述此Web流量的事件流。

▲图5.使用上一个教程的pcap过滤Web流量。
但是,我还使用Windows 7主机生成pcaps流量,此流量包括正常活动期间通过UDP端口1900的HTTP请求。 UDP端口1900上的此HTTP流量是简单服务发现协议(SSDP)。 SSDP是用于发现即插即用设备的协议,它与正常的Web流量无关。因此,我使用以下表达式对其进行过滤:
(http.request or ssl.handshake.type == 1)and
!(udp.port eq 1900)
您还可以使用以下过滤器并获得相同的结果:
(http.request or ssl.handshake.type == 1) and !(ssdp)
在Windows 7主机上查看感染pcap时,过滤掉SSDP活动可以提供清晰的流量视图。图6显示了Windows 7主机上2018年12月3日IcedID感染流量的Emotet活动。它在包含SSDP请求的Web流量上进行过滤。图7显示了在Web流量上过滤的相同pcap,不包括SSDP请求,这提供了更清晰的活动图。

▲图6.使用Wireshark中的Emotet和IcedID感染活动查看Web流量,而不过滤掉SSDP流量。

▲图7.在过滤掉SSDP流量时,在Wireshark中查看具有Emotet和IcedID感染活动的Web流量。
在图7中,我们看到了感染流量的一些指标,但并未显示感染的每个指标。在某些情况下,受感染的主机可能会尝试连接已脱机或拒绝TCP连接的服务器。通过添加tcp.flags eq 0x0002,在过滤器中包含TCP SYN段,可以揭示这些尝试连接。在相同的流量上尝试以下过滤器:
(http.request or ssl.handshake.type == 1 or tcp.flags eq 0x0002) and !(udp.port eq 1900)
在搜索中包含TCP SYN段显示受感染的主机还尝试通过TCP端口8443与IP地址217.164.2 [.] 133连接,如图8所示。

▲图8.在过滤器中包含TCP SYN段可以揭示受感染主机与其他服务器的连接尝试失败。
其他类型感染流量的过滤器
在某些情况下,感染后流量不会基于Web,受感染的主机将联系命令和控制(C2)服务器。这些服务器可以直接托管在IP地址上,也可以使用域名托管在服务器上。一些感染后活动,如Nanocore远程访问工具(RAT)引起的C2流量,不是HTTP或HTTPS / SSL / TLS流量。
因此,我经常在查看pcap时添加DNS活动,以查看这些域中的任何域是否在流量中处于活动状态。这导致以下过滤器表达式:
(http.request or ssl.handshake.type == 1 or tcp.flags eq 0x0002 or dns)and !(udp.port eq 1900)
在图9中,我使用上面的过滤器表达式来查看显示从www.mercedes-club-bg [.] com下载的Nanocore RAT可执行文件的pcap,以感染易受攻击的Windows主机。初始下载之后是尝试TCP连接到franex.sytes [.] net在185.163.45 [.] 48和franexserve.duckdns [.] org在95.213.251 [.] 165。图10显示了DNS查询与TCP流量之间的关联。

▲图9.包含DNS查询显示尝试与其他域的TCP连接。

▲图10.将DNS流量与TCP活动相关联。
一些感染流量使用可由Wireshark轻松解码的常见协议。图11显示了由此恶意软件可执行文件引起的感染后流量,该流量生成FTP流量。使用标准网络流量搜索也检查DNS流量和TCP SYN标志,我们在DNS查询到ftp.totallyanonymous [.] com后,通过TCP端口21和其他TCP端口查找流量。

▲图11.生成FTP流量的恶意软件的活动。
意识到这是FTP流量,您可以在ftp上为您的显示过滤器进行调整,如图12所示。当在ftp上过滤此pcap时,我们发现受感染的Windows主机在totallyanonymous.com上登录到FTP帐户并检索到名为fc32.exe和o32.exe的文件。向下滚动到以后的FTP流量,如图13所示,您将发现大约每分钟发送到FTP服务器的名为6R7MELYD6的文件。进一步的调查将揭示6R7MELYD6包含从受感染的Windows主机窃取的密码数据。

▲图12.使用ftp作为过滤器,并在通过TCP端口21查看FTP控制通道时查找受感染主机检索的文件的名称。

▲图13. TCP端口21上的FTP控制通道还将存储在FTP服务器上的信息显示为名为6R7MELYD6的文件。
除了FTP之外,恶意软件还可以使用其他常见协议进行恶意流量。 Spambot恶意软件可以将受感染的主机变成一个spambot,旨在每分钟发送数十封到数百封电子邮件。其特征在于对各种邮件服务器的若干DNS请求,其后是TCP端口25,465,587上的SMTP流量,或与电子邮件流量相关联的其他TCP端口。
让我们再次尝试这个过滤表达式:
(http.request or ssl.handshake.type == 1 or tcp.flags eq 0x0002 or dns)and !(udp.port eq 1900)
查看spambot流量时,您将找到对邮件服务器的DNS查询以及如前所述的与SMTP相关的端口的TCP流量。

▲图14.在spambot流量上过滤的Wireshark,以显示与SMTP流量相关的各种邮件服务器和TCP SYN数据包到TCP端口465和587的DNS查询。
如果您使用smtp作为过滤器表达式,您将找到几个结果。如果您发现STARTTLS,这可能是加密的SMTP流量,您将无法看到电子邮件数据。

▲图15.在查看spambot流量时过滤Wireshark中的SMTP流量。
近年来,来自spambots的电子邮件流量很可能是加密的SMTP。但是,您可以通过在常见电子邮件标题行中搜索字符串来查找未加密的SMTP流量,例如:
smtp包含“From:”
smtp包含“Message-ID:”
smtp包含“Subject:”
请记住,Wireshark显示过滤器区分大小写。在搜索未加密的SMTP通信的spambot流量时,我经常使用smtp包含“From:”作为我的过滤器表达式,如图16所示。

▲图16.在Wireshark中过滤以查找未加密的SMTP流量的电子邮件标题行。
过滤SMTP流量后,如图16所示,您可以跟踪任何显示的帧的TCP流,并且您将找到从spambot发送的其中一封电子邮件。

▲图17. TCP流显示来自spambot感染主机的未加密SMTP流量。
保存过滤器
有些过滤器表达式每次输出都非常繁琐,但您可以将它们保存为过滤器按钮。在Wireshark过滤器栏的右侧是一个加号,用于添加过滤器按钮。

▲图18.将过滤器表达式保存为Wireshark中的过滤器表达式按钮。
单击该加号将表达式保存为过滤器按钮。您有以下字段:
- 标签
- 过滤
- 评论
注释是可选的,过滤器默认为Wireshark过滤器栏中当前键入的内容。键入标签后,单击OK按钮,如图19所示。

▲图19.键入过滤器标签后,单击“确定”按钮。
在上图中,我为过滤器输入了“basic”(http.request or ssl.handshake.type == 1)and !(udp.port eq 1900)以保存为我的基本过滤器。图20显示了加号右侧标有“basic”的过滤器按钮。

▲图20.过滤器栏最右侧的“基本”过滤器按钮。
对于我在Wireshark中的常规过滤器设置,我创建了以下过滤器按钮:
basic(http.request or ssl.handshake.type == 1)and !(udp.port eq 1900)
basic +(http.request or ssl.handshake.type == 1 or tcp.flags eq 0x0002) and !(udp.port eq 1900)
basic+ DNS(http.request or ssl.handshake.type == 1 or tcp.flags eq 0x0002 or dns)and !(udp.port eq 1900)

▲图21.我经常在Wireshark上使用的过滤器按钮。
【编者注】通过wireshark不仅可以捕获网络数据包,还可以将捕获的数据包进行“改装”,使之符合某种要求,然后再发出,以达到瞒天过海的目的,这也是很多“恶作剧”的惯用手法,有些“烂”系统的登陆过程也可以通过改装数据包实现正常登陆,但请大家善用网络。返回搜狐,查看更多