Falco云原生安全:Falco原理、实践与扩展
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 Falco的设计原则

现在你已经看到Falco可以做什么,接下来让我们来谈谈为什么它是这样设计的。当你开发一个非常复杂的软件时,关注正确的应用场景并优先考虑核心目标是极其重要的。有时这意味着你要接受取舍。Falco也不例外,它的发展遵循一套核心原则。在本节中,我们将探讨为什么是这些原则以及它们各自如何影响Falco的架构和特性。理解这些原则可以帮助你判断Falco是否适合你的应用场景,并帮助你更加充分地使用它。

1.2.1 专为运行时设计

Falco引擎旨在为运行中的服务和应用程序检测威胁。当它检测到异常行为时,Falco应该立即提醒你(最多在几秒内),这样你就能立即得到通知并做出响应,而不是在几分钟或几小时后才意识到问题。

这个设计原则体现在三个重要的架构选择上。第一,Falco被设计为一个流处理引擎,能够在数据到达时快速处理数据,而不是先存储数据然后再处理。第二,它被设计为独立评估每个事件,而不是根据事件序列生成警报,这意味着将不同的事件关联起来(即使是可行的)不是Falco的主要目标(也不鼓励这么做)。第三,Falco评估规则时尽可能贴近数据源。如果可能的话,它会避免在处理信息之前传输信息,而是倾向于在端点处部署更丰富的引擎。

1.2.2 生产环境就绪

你可以在任何环境中部署Falco,包括需要稳定性和低额外开销的生产环境。不能因为它使得应用程序崩溃,而是应该尽最大可能减小对应用程序的影响。

这种设计原则会影响数据收集架构,特别是当Falco运行在具有许多进程或容器的端点上时。Falco的驱动程序(内核模块和eBPF探针)经历了多轮迭代和多年测试,以保证其性能和稳定性。通过操作系统的内核来收集数据,而不是监控进程/容器,可以确保你的应用程序不会因为Falco中的Bug而崩溃。

Falco引擎是用C++编写的,并采用了许多方法来减少资源消耗。例如,它会避免处理像读写磁盘或网络数据这样的系统调用。在某种程度上,这其实是一种限制,因为它阻止用户创建检查负载内容的规则,但它也确保了CPU和内存消耗保持在较低水平,这是更为重要的。

1.2.3 灵活自由

Falco旨在观察应用程序的行为,而不需要用户重新编译应用程序、安装库或者重新构建带有监控钩子(hook)的容器。这在现代容器化环境中非常重要,因为在这些环境中,对每个组件进行更改将需要大量不切实际的工作。它也保证了Falco可以看到每个进程和容器,无论它们来自哪里、谁运行或者运行了多长时间。

1.2.4 为边缘运行环境优化

与其他策略引擎(例如,OPA)相比,Falco在设计时明确考虑了分布式、多传感器架构。它的传感器被设计为轻量、高效和便携,可以在不同的环境中运行。它可以部署在物理机、虚拟机或容器中。Falco二进制文件可用于多种平台,包括ARM。

1.2.5 避免移动和存储大量数据

目前市面上大多数威胁检测产品都是基于将大量事件发送到一个集中式SIEM工具,然后再分析收集的数据。Falco则是围绕一个完全不同的原则设计的:尽可能地靠近端点执行检测,并且只向集中式收集器发送警报。这种方法导致解决方案在执行复杂分析方面的能力有所下降,但其操作简单、成本效益更高,并且可以很好地横向扩展(或称水平扩展)。

1.2.6 可伸缩性

说到规模,Falco的另一个重要设计目标是它应该能够扩展以支持世界上最大的基础设施环境。如果你能运行它,Falco就应该能保护它。正如我们刚刚描述的,保持有限的状态和避免集中存储是其中的重要元素。边缘计算也是一个重要的元素,因为分布式规则评估是真正以水平方式扩展Falco等工具的唯一方法。

可伸缩性的另一个关键部分是端点检测。Falco的数据收集栈没有使用sidecar(边车)、库链接或进程检测等技术。原因是所有这些技术的资源利用率都随着要监控的容器、库或进程的数量增加而增长。一台忙碌的主机有太多的容器、库和进程,以至于上述技术无法施展,但它们有且只有一个操作系统内核。在内核中捕获系统调用意味着,无论主机规模有多大,每台主机都只需要部署一个Falco传感器,这使得Falco可以在具有大量活动的大型主机上运行。

1.2.7 真实性

使用系统调用作为数据源还有哪些好处呢?答案是系统调用永远不会说谎。你很难跳过Falco,因为它用来收集数据的机制很难被禁用或规避。即使你试图逃避或绕开它,仍然会留下Falco可以捕捉到的痕迹。

1.2.8 健壮的默认配置和丰富的灵活性

另一个关键的设计目标是最小化用户在Falco中获得价值所花费的时间。直接安装Falco无须额外配置就可以带来出色的效果,除非你有更高的要求,否则一般不需要定制。

与此同时,如果你确实需要定制,Falco也提供了灵活性。例如,你可以通过丰富和清晰的语法创建新规则,开发和部署扩展检测范围的新数据源,并将Falco与所需的通知和事件收集工具集成。

1.2.9 简洁性

简洁性是Falco的最后一个架构设计原则,同时也是最重要的一个。Falco规则的语法设计紧凑、易读,可以快速上手。Falco规则的条件都尽可能地放在一行中。所有人(不一定是专家)都能够轻松地编写新规则或修改现有规则。如果这降低了语法的表达能力也没关系,因为Falco的目标是提供高效的安全规则引擎,而不是完整的领域特定语言,这方面还有其他更好的工具。

简洁性也体现在扩展Falco新数据源和集成新的云服务或容器类型的过程中,无论使用哪种语言(包括Go、C和C++)编写插件。Falco很容易加载这些插件,你可以使用它们来添加对新数据源或规则中使用的新字段的支持。