#protocols #async-api #async #api #api-bindings #file-server #back-end

crowdstrike-cloudproto

Crowdstrike的Falcon传感器与云服务器之间使用的二进制协议

5个不稳定版本

0.3.1 2023年3月10日
0.3.0 2023年3月10日
0.2.1 2022年8月31日
0.2.0 2022年8月31日
0.1.0 2022年8月28日

#47 in #file-server

MIT/Apache

82KB
1.5K SLoC

crates.io Apache 2 licensed MSRV CI

提供异步套接字和实现Crowdstrike的Falcon传感器与两个后端服务之间协议的高级对象

  • TS事件服务器(事件收集、设备监控、管理员远程shell等)
  • LFO文件服务器(下载更新、上传分析样本文件等)

您还可以实现自己的TS或LFO服务器,例如,如果您想从官方客户端接收实时传感器事件。

功能

CloudProtoSocket实现了官方客户端和两个云服务共同使用的常用低级数据包结构。
您可能希望直接使用更高级的TS套接字或LFO客户端;它们都基于CloudProtoSocket,但它们使用高级概念而不是CloudProtoPacket

TS事件套接字

TsEventSocket允许连接到TS服务并交换Event,这是如何将falcon-sensor代理实时信息流回云的方式。

您必须提供一个有效的客户ID (CID) 才能连接到官方TS服务器。
有关更多信息,请参阅TsEventSocket文档。

LFO客户端

LfoClient允许您下载更新和其他传感器使用的潜在大型文件。

客户端支持具有可选XZ压缩的LFO文件GET请求。
目前没有立即计划支持上传。

您不需要是Crowdstrike客户即可从LFO下载文件。
(LFO请求包含CID/AID字段,但任何值都可以接受)

服务器功能

运行第三方Crowdstrike服务器需要使用配置为连接到您拥有的域和有效证书的修改后的客户端,或者禁用falcon-sensor中的证书验证。

截至版本13601,Falcon整体不执行完整性检查,因此它可以轻松地运行任意补丁。

知识声明

请注意,此crate是基于观察13601版本传感器在与第三方服务器在隔离VM中进行通信的基础上,并使用此crate重放一些传感器事件并捕获公共TS服务的回复的干净室实现。

因此,您应该预期这个库可能不是100%符合规范的实现。它可能缺少协议的一些可选部分,一些不影响结果的逆向工程字段可能缺少名称,有些可能完全命名错误。

什么是Crowdstrike CLOUDPROTO?

"CLOUDPROTO"这个名字来源于falcon-sensor二进制文件中的调试日志消息。

在内部,falcon-sensor是围绕Actors(C++对象)构建的,这些对象通过事件总线交换事件。falcon-sensor内部使用的相同事件也用于通过在CLOUDPROTO中携带序列化事件与TS云服务器通信。

TS服务器的事件首先使用Protobuf进行序列化,并由包含事件类型和事务ID的简短头部补充。这个序列化的事件有效负载通过CLOUDPROTO套接字发送,该套接字本身被封装在TCP端口443上的TLS会话中。

事件协议有一个奇特的重启机制,看起来与它所叠加的TLS和TCP套接字是重复的,实际上在官方实现中似乎并没有实际用于提供任何回压或重传保证。
falcon-sensor确实发送ACK数据包,但似乎完全忽略了传入的ACK(或其缺失)。
(这个古怪之处尽管在falcon-sensor二进制文件中明显存在用于跟踪ACK和飞行数据包的功能。)

LFO服务器也使用CLOUDPROTO帧来携带其消息,但它使用简单的请求/响应数据包而不是TS事件,并且完全没有ACK机制。

依赖项

~3.5–6MB
~99K SLoC