创建自定义应用程序 id 案例研究: Fortnite

创建自定义应用程序 id 案例研究: Fortnite

47495
Created On 09/25/18 19:10 PM - Last Modified 06/12/23 16:04 PM


Resolution


问题

 

Fortnite 是一个在线多人游戏, 为 PC 和其他设备。这个游戏在学龄儿童中很常见, 是寄宿学校需要在网络上容纳的许多这样的游戏之一。

 

预先定义的应用程序 id 提供了一些众所周知的游戏。但是, 对于非常新的或不常见的游戏, 应用程序 id 可能不可用。此外, 这些游戏经常更新, 通信格式也会迅速变化。因此, 即使具有预先定义的应用程序 id 的游戏也可能会失败, 直到可以识别更改并释放新的签名。帕洛阿尔托网络提供了创建自定义应用程序 id 的能力, 允许管理员在网络通信中使用多种因素来识别应用程序。

 

与此类游戏相关的许多网络通信都运行在常见的网络协议 (如 HTTPS) 中。然而, 一些通信, 特别是游戏中的通信需要更快的协议, 开销更小。因此, 在高端口上观察 UDP 流是常见的, NGFW 将其归类为 "未知 udp"。

学校和其他组织通常要求阻止这种不确定的通信量, 因此有必要为这些通信模式确定和创建自定义的应用程序 id。由于要求此通信量尽可能轻, 因此这些消息中可用作签名的任意内容的数量很低。

 

进程

查找未识别的通信量

 

大多数在线游戏以各种不同的方式进行交流。例如, 在第一次启动游戏时, HTTPS 通信用于向记帐服务器验证用户身份, 并为游戏客户端提供当前运行的游戏和服务器 (通常称为大堂) 的信息。当游戏本身开始时, 将建立一个与游戏服务器的通信会话, 以提供有关玩家动作和游戏状态的信息。大多数通信流都被发送到不可预知的位置, 并且有些通信通过无法预测的端口发送。

但是, 大部分通信量将被标识为一个应用程序, 即使它与 "ssl" 一样广泛, 并且这些应用程序通常允许跨防火墙进行。因此, 第一步是确定被阻止的特定通信量, 这可以通过 "监视器" 选项卡在 NGFW 通信日志中轻松完成。添加其他列 (如 "to 端口") 可以帮助以后识别通信。

 

屏幕截图2018-04-12 在10.46.47.png在通信日志中标识会话收集来自多个客户端的通信样本

 

为了在通信中找到正确的签名, 需要从多个客户端收集数据包捕获。可以通过 Wireshark 或使用防火墙在客户端上本地执行数据包捕获。要消除与用户或计算机相关的模式, 需要从不同的计算机和不同的用户帐户收集范围广泛的数据包捕获。这可以确保只识别与游戏相关的签名。

 

分析数据包捕获并导出相关的通信流

 

收集到数据包捕获后, 就可以使用 Wireshark 的 "跟随 TCP 流" 和 "遵循 UDP 流" 功能来识别和导出相关的通信流。

对于每个数据包捕获, 请使用防火墙监视器输出来了解有关流的性质, 例如 UDP 端口 9011, 并使用 Wireshark 筛选器查找该通信量。

 

屏幕截图2018-04-12 在10.52.41.png使用 Wireshark 识别 Fortnite UDP 流

 

右键单击该流中的数据包, 然后选择 "跟踪" UDP 流。选择 "显示并保存数据为十六进制转储", 然后单击 "另存为...", 将数据输出到文本文件。

 

屏幕截图2018-04-12 在10.55.56.pngWireshark-跟随 UDP 流

对每个数据包捕获重复此步骤。

 

在每个流输出中查找相似的数据模式

 

现在已经创建了各种数据流示例, 可以比较这些流以查找相同的模式。像 dwdiff 这样的命令在这里很有用。与其他依赖于匹配数据行的比较工具不同, dwdiff 通过在 word 级别匹配数据来工作。Dwdiff 是一个在 BASH shell 中运行的命令。它也可用于 Mac 设备根据这些指令(类似的结果应该是可能的 wdiff 命令, 可用于 Windows). 以下列方式使用该命令将创建一个包含匹配字符串的新文件.。

 

dwdiff-12 stream1.txt stream2.txt diff1.txt

 

然后, 该命令的输出可以针对进一步的流运行, 以进一步微调类似的模式.。

 

dwdiff-12 diff1.txt stream3.txt diff2.txt

 

生成的文件将显示所有流中匹配的任何模式。

 

屏幕截图2018-04-12 在11.00.30.png显示签名的 dwdiff 命令的输出

 

向自定义应用程序 ID 添加签名

 

任何超过7字节的结果十六进制数组都可以通过 NGFW 接口添加到自定义应用程序 ID 中。要创建新的应用程序 ID, 请登录到 NGFW, 然后导航到对象 > 应用程序 > 添加。或者, 选择要更新的现有自定义应用程序 ID。

在 "配置" 和 "高级" 选项卡中配置应用程序的特性。然后, 在 "签名" 下, 向应用程序添加新签名。创建一个新条件, 选择 "模式匹配" 作为运算符, 选择正确的上下文, 然后输入找到的十六进制模式, 周围是 x 参数。

 

屏幕截图2018-04-12 在11.02.49.png创建自定义应用程序 ID 签名

添加所有签名后, 提交防火墙配置和测试。如果签名起作用, 则以前未知的通信量应解析为自定义应用程序 ID 的名称。然后, 可以将策略配置为定义游戏的允许时间和时间 (即放学后的寄宿宿舍)。最后, 测试游戏以验证防火墙是否正确标识了应用程序。

 

屏幕截图2018-04-12 在11.07.00.png

 

更新

 

在测试应用程序签名时, 发布了一个新版本的 Fortnite 客户端, 在此更新之后, 应用程序 ID 签名无法识别通信量。为了解决, 我们在新客户端上重复了上述步骤, 发现以前发现的签名已更改 (尽管新签名在运行新客户端的所有设备上都是一致的)。

 

结论

 

基于签名的方法是积极识别应用程序通信量的最有效方法, 并且应用程序使用不可预知的端口和 IP 地址, 这可能是唯一的方法。帕洛阿尔托网络的下一代防火墙提供了创建自定义 "应用程序 id" 的能力, 该功能使用应用程序通信流中找到的签名。对于使用定制或不寻常应用程序的组织, 应用程序 ID 是允许此类应用程序的有效方法, 同时对网络通信实施零信任方法。



Actions
  • Print
  • Copy Link

    https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA10g000000ClVKCA0&lang=zh_CN&refURL=http%3A%2F%2Fknowledgebase.paloaltonetworks.com%2FKCSArticleDetail

Choose Language