简单流量分析,串通Wireshark基本使用

前言

本文通过一段清晰的内网流量,来做一次流量分析复盘。

这是一份标准的流量分析复盘,可以完整的分析一条出这样的链路:

DHCP -> Kerberos -> DNS -> HTTP -> TLS SNI -> TCP Stream

通过此次复盘,我们会看到:

  • 对于一个包,应该看哪一层
  • 这个字段回答了什么问题
  • 这个证据可以推断什么,不能推断什么

流量文件来自:https://unit42.paloaltonetworks.com/wireshark-quiz-redline-stealer/

DHCP,确定谁是目标

在恶意流量分析中,使用DHCP可以让我们快速确定这份文件中,谁才是被调查的目标,我们的一切推理都应该围绕我们目标开展,使用Wireshark打开流量后,在过滤器中输入:

wireshark 复制代码
dhcp || bootp

或者

wireshark 复制代码
udp.port == 67 || udp.port == 68

可以看到,我们得到了两条记录,这是一个标准的DHCP请求和DHCP响应的过程,那么根据之前的描述,我们得知:10.7.10.9是这个域的DHCP服务器,这两条记录本质描述了,当前这台主机被启动后,向服务器请求了DHCP,所以第一条记录中,可以看到源IP为0.0.0.0,这其实是DHCP初始阶段,而目标是255.255.255.255,这其实是由于当前初始阶段没有IP,只能通过广播的形式,向DHCP服务器传达请求信息,而第二条记录,可以看到服务器同样使用广播的方式将包发送给目标,其实到这里服务器已经得到目标的MAC地址以及目标的IP将会获得的IP信息,只是目标还未得到,所以这里的目标地址仍然是255.255.255.255,而且在寻址中DHCP流量使用包内的xid和目标MAC地址联合寻址。

在这里,我们先看请求流量,在Wireshark的流量页中的DHCP层中,我们可以看到(Request)字段,同时在Message Type:字段中可以看到Boot Request(1),也表明了这是一个DHCP请求,同时可以关注如下字段:

  • Transaction ID 0x3157d730 它的作用就是匹配,它会与后面的DHCP ACK配成一组,我们将会看到:
    No. 1 DHCP Request xid = 0x3157d730
    No. 2 DHCP ACK xid = 0x3157d730
  • Client MAC address / Client hardware address 它表明了请求方的MAC,也就是:80:86:5b🆎1e:c4
  • Requested IP Address :它表明该主机请求使用10.7.10.47
    可以在包内看到
    Option: (50) Requested IP Address
    Requested IP Address: 10.7.10.47
  • Host Name 这表明了当前的主机名
    可以在包内看到
    Option: (12) Host Name
    Host Name: DESKTOP-9PEA63H
  • Client Fully Qualified Domain Name 主机的完整名字
    可以在包内找到
    Option: (81) Client Fully Qualified Domain Name
    Client FQDN: DESKTOP-9PEA63H.coolweathercoat.com
    所以该主机的完整名字是:DESKTOP-9PEA63H.coolweathercoat.com
  • Vendor class identifier 这是一个信息辅助字段,
    可以在包内看到
    Option: (60) Vendor class identifier
    Vendor class identifier: MSFT 5.0
    这个字段不能直接回答题目,但它有辅助价值。
    MSFT 5.0 一般说明这是 Windows DHCP 客户端。

看完第一个包内的信息,现在我们得到了:

这是一台 Windows 客户端

MAC 是 80:86:5b: ab :1e:c4

它请求 10.7.10.47

主机名是 DESKTOP-9PEA63H

域名是 coolweathercoat.com

再来看第二个包内的信息,同样直接关注DHCP层,在层上就表明了这是ACK层,同时,Message Type:Boot Reply这描述了服务器同意了这个地址的租约,这时候我们来看一些关键字段:

  • Your client IP address
    Your (client) IP address: 10.7.10.47 这个字段很关键,它在DHCP结构中叫 yiaddr 它描述了DHCP服务器正式分配给客户端IP为10.7.10.47
    可以在这里确认:
    Infected Windows client IP = 10.7.10.47
  • Client MAC address
    Client MAC address: 80:86:5b:a b:1e:c4 这里和第一条流量完全一致,所以确认:
    Infected Windows client MAC = 80:86:5b:a b:1e:c4
  • Server Identifier
    Option: (54) DHCP Server Identifier
    DHCP Server Identifier: 10.7.10.9,这里描述的是DHCP服务器是谁,是10.7.10.9
  • Router
    Option: (3) Router
    Router: 10.7.10.1 这是该网络的网关
  • Domain Name Server
    Option: (6) Domain Name Server
    Domain Name Server: 10.7.10.9
    Domain Name Server: 8.8.8.8,这说明客户端会使用:10.7.10.9和8.8.8.8做DNS查询

经过阅读这两个包,我们已经确定了要调查的目标,为10.7.10.47,且目标大概率是Windows系统。

Kerberos:补全 Windows 域用户身份

确定主机之后,下一步是找用户。

在 Windows 域环境中,用户身份经常会出现在 Kerberos、LDAP、SMB、NTLM 等协议里。这份流量里,Kerberos 是最直接的入口。

在过滤器中,可以这样写:

wireshark 复制代码
kerberos && ip.addr == 10.7.10.47

这里的 10.7.10.9 是域控,而 10.7.10.47 是前面通过 DHCP 确定的 Windows 客户端。

Kerberos 可以简单理解为 Windows 域环境里的"票据认证系统"。用户登录域后,并不是每访问一个服务都重新输入密码,而是通过 Kerberos 向域控申请票据,然后用票据证明自己的身份。

在No.680记录上,可以看到这样的信息:

在这个包中,可以推断出:

cname-string: rwalters

Realm: COOLWEATHERCOAT.COM

因此可以得到:10.7.10.47 这台主机上的域用户是 rwalters。

但是这里要注意,这个用户rwalters只是该主机的登录用户,它与恶意流量没有任何关系,而这一步属于我们的信息补全,如果我们分析的目标出现在同网络的相关设备中,用户名可能会作为我们的信息补充。

所以到这里,我们补充了一份身份信息:

IP: 10.7.10.47

MAC: 80:86:5b:a b:1e:c4

Hostname: DESKTOP-9PEA63H

User: rwalters

Domain: coolweathercoat.com

DNS:查找可疑外联对象

首先,对目标主机进行DNS过滤

wireshark 复制代码
dns && ip.src == 10.7.10.47

我们也可以只去看查询

wireshark 复制代码
dns && ip.src == 10.7.10.47 && dns.flags.response == 0

使用DNS的目的非常明确,就是通过查看我们目标主机查询了那些DNS就可以明确在这段流量中,主机和哪些外部域名发送了接触,通常借助DNS我们就可以快速得到一份可疑名单

我们查看DNS包内,通过Queries字段,我们就可以看到每一条DNS查询的目标,这里选中查询字段下的Name字段右击,选择应用为列(Apply as Column),可以把这个字段加入到列表中,让我们快速审阅

我们这里可以看到,存在两个可疑域名分别为:

623start.site : 195.161.114.3

guiatelefonos.com : 92.118.151.9

到这里,我们可以建立初步的怀疑名单,虽然DNS只能表明主机访问过这个域名,不能证明这些域名一定是恶意来源,但是得到这份名单,我们就可以在后续验证中,尝试加入这些信息,来帮我们快速定位。

HTTP,明文流量

HTTP的分析非常重要,首先它是明文传输,它保留了所有细节可以直接看到请求方法、Host、URI、User-Agent等字段

wireshark 复制代码
http.request && ip.addr == 10.7.10.47

可以看到只有三条HTTP请求,我们按照实际顺序依次来查看:

Request Method: GET

Request URI: /?status=start&av=Windows%20Defender

Request Version: HTTP/1.1

Host: 623start.site

User-Agent: Mozilla/5.0 (Windows NT; Windows NT 10.0; en-US) WindowsPowerShell/5.1.19041.3031

Connection: Keep-Alive

通过上述字段,我们得到很多关键信息:

  • status=start 这是一个状态,表明某脚本或者程序开始执行了
  • av=Windows Defender 这像是在上报当前主机中的安全信息
  • WindowsPowerShell/5.1.19041.3031 在User- Agent中出现了,这说明该请求由PowerShell发出,而非普通浏览器请求访问

结合该包的时间,我们可以推算出,主机被感染的时间可能就是,该包发出请求的时间为:2023-07-10 22:39:47 UTC,结合DNS查询时的时间,

  • 首次DNS查询:623start.site 2023-07-10 22:39:47.364257
  • 首次HTTP :2023-07-10 22:39:47.579630

GET /?status=install HTTP/1.1

Host: 623start.site

User-Agent: ... WindowsPowerShell/5.1.19041.3031

第二条请求,是第一条的连续,发出了install状态,这是一个连续的状态上报,我们整体追逐HTTP流可以清晰的看到:

GET /data/czx.jpg HTTP/1.1

Host: guiatelefonos.com

Connection: Keep-Alive

看到最后一条HTTP,发现它的目标已经变成了我们的DNS怀疑名单的第二个目标,请求的目标为data目录下的czx.jpg,看起来是一张图片,但是我们不能轻信这类信息,恶意流量的扩展名经常会伪装。

HTTP/1.1 301 Moved Permanently

Location: https://guiatelefonos.com:443/data/czx.jpg

Server: nginx/1.20.2

看到响应部分,服务器返回了301,并且把请求重回定向到了Location: https://guiatelefonos.com:443/data/czx.jpg,一个HTTPS服务上了。

HTTP明文部分告知我们:客户端访问了 guiatelefonos.com 的 /data/czx.jpg;

服务器要求客户端改用 HTTPS 访问同一路径;但是由于HTTPS是会被TLS加密,我们无法看到请求的完整内容,这里就就需要开始关注TLS了

TLS SNI:加密下的访问意图

HTTPS会加密传输内容,所以正常的流量中,我们无法看到:

GET 路径

Host 头

Cookie

POST Body

响应内容

但是在TLS握手阶段,客户端的ClientHello会进经常带一个字段:

server_name

这就是SNI,它的作用就是明确告诉目标,我要访问哪个域名。

使用:

Wireshark 复制代码
tls && ip.addr == 10.7.10.47

在第No.1376记录中,我们可以看到与guiatelefonos.com的TLS握手,这也明确描述了10.7.10.47 确实在 TLS 握手中声明自己要访问 guiatelefonos.com

SNI的价值是确定主机在经过之前的重定向后,确认访问了guiatelefonos.com,这样当前我们经历:DNS、HTTP、TLS SNI可以总结为:

至此,当前流量分析的前半段已经完成,从另一个角度描述,当前已知的线索已经被我们走了一遍了,我们大体明确了感染主机向623start.site 报告了状态和信息,从guiatelefonos.com通过https获取了一张图片,由于使用HTTPS信息,我们无法追踪后续信息,只是通过SNI确定了主机确认向目标发送了请求。

RedLine C2 : 真正的后续通信

由于在当前的分析中,我们的线索已经走完一遍了,而且简单推断目标的感染过程,目标通过HTTPS向主机已经发送了加密信息,而后续的感染过程我们无从得知,这时就要根据当前的时间线继续向后推断,我们首先可以基于全局再看一次统计会话,结合当前我们已经确定两个域名,来看看有没有更多发现

从图表中可以,我们可以看到一个怀疑目标就是194.26.135.119,它是当前我们已知对象以外与该主机交互最多的目标,我们来看一下

wireshark 复制代码
ip.addr == 194.26.135.119 && tcp.port == 12432

追踪这个TCP流中,我们可以看到一些明显的C2通信特征:

net.tcp://194.26.135.119:12432/

http://tempuri.org/Contract/MSValue1

http://tempuri.org/Contract/MSValue2

http://tempuri.org/Contract/MSValue3

Authorization

这里要注意,如果目标是一个标准的HTTPS流,那么我们依然无法得到任何信息,但是这条194.26.135.119:12432存在着大量的可读内容,说明它不是普通 HTTPS,或者至少其中存在可读的明文字段和结构。

在这个流中,我们可以看到存在

%userprofile%\Desktop|.txt, .doc*,key ,wallet ,seed

%userprofile%\Documents|.txt, .doc*,key ,wallet ,seed

这说明它关注了桌面和文档目录中的敏感文件,同时还可以看到大量的浏览器路径:

Google\Chrome\User Data

Microsoft\Edge\User Data

BraveSoftware\Brave-Browser\User Data

Opera Software

Mozilla\Firefox

Chromium

Vivaldi

YandexBrowser

这说明它还试图窃取浏览器相关数据,例如:

保存的账号密码

Cookie

自动填充信息

浏览器配置

同时还可以看到加密货币钱包的相关名词:

Armory

Atomic

Binance

Coinomi

Electrum

Ethereum

Exodus

Guarda

Jaxx

Monero

以及浏览器钱包扩展、云服务 API Key、开发者 Token 等内容,例如:

AWS_ACCESS_KEY_ID

AWS_SECRET_ACCESS_KEY

AZURE_CLIENT_ID

AZURE_CLIENT_SECRET

GOOGLE_API_KEY

GH_TOKEN

GITLAB_USER_LOGIN

HEROKU_API_KEY

SLACK_TOKEN

STRIPE_API_KEY

TWILIO_ACCOUNT_SID

NPM_AUTH_TOKEN

DOCKER_USERNAME

DOCKER_PASS

所以可以简单总结为:

RedLine Stealer 试图窃取浏览器凭据和浏览器数据、Cookie、自动填充信息、桌面和文档目录中的敏感文件、加密货币钱包、浏览器钱包扩展、云服务/API Token、系统信息、进程列表、截图以及文档文件。

在后续的流量中,我们还可以发现客户端会上传的内容:

总结

通过这段流量的简单分析,我们可以得到一份简单直接的调查路径:

  • DHCP / BOOTP

    -> 找 IP、MAC、Hostname、Domain

  • Kerberos

    -> 找 Windows 域用户

  • DNS

    -> 找客户端访问过的域名

  • HTTP

    -> 找明文请求、感染开始、下载路径

  • TLS SNI

    -> 找 HTTPS 访问的域名

  • Follow TCP Stream

    -> 看 C2 内容、配置、上传数据、窃取目标

其实分析的本质,就是围绕当前的目标,展开更多信息,查看它们的交互,在一系列目标中查找最有疑点的,而且怀疑目标应该要多维度来看,当某些线索梳理完毕后,应该要检查更多细节,直到得到我们想要的。

相关推荐
byoass2 小时前
自动化任务系列之六:自动整理文件——按时间/关键字分类归档实战
运维·网络·安全·自动化·云计算
skilllite作者2 小时前
OpenClaw 网络数据采集新手入门指南
网络
王大傻09282 小时前
yakit 无法拦截127.0.0.0 数据包的解决方案
网络·安全
zhangzeyuaaa2 小时前
深入理解 Python GIL:从机制到释放时机
java·网络·python
枷锁—sha2 小时前
【CTFshow-pwn系列】03_栈溢出【pwn 072】详解:无字符串环境下的多级 Ret2Syscall 与 BSS 段注入
服务器·网络·汇编·笔记·安全·网络安全
zhangzeyuaaa3 小时前
深入理解 Python 进程间通信:Queue 与 Pipe 实战解析
网络·python·中间件
桌面运维家3 小时前
Windows11 USB无线键鼠飘移故障排查与保养指南
网络
Rust研习社3 小时前
使用 Tonic 构建高性能异步 gRPC 服务
开发语言·网络·后端·http·rust
思麟呀3 小时前
Epoll的学习,在select和poll的基础上
网络·数据库·sql·学习·tcp/ip