SELinux 如何影响 Linux 内核网络堆栈?

信息安全 tls linux selinux 网络访问控制
2021-08-22 01:48:19

我对 SELinux 如何通过网络堆栈影响数据包的处理很感兴趣。我发现了以下问题和答案:

AppArmor/SELinux 下的网络策略
基于用户/组/进程过滤网络访问

第一个似乎暗示 SELinux 可以标记数据包(有点像标记 VLAN),并且处理可以根据与数据包关联的标记而有所不同。这对我来说很有意义。但是,第二个问题是询问通过用户组和访问控制的网络访问。根据答案和评论尚不清楚这是否属实,或者它是如何可能的。

在阅读 Linux Kernel 源代码(2.6.16,我知道它很旧,但很多嵌入式设备仍在使用 2.6)时,您会遇到文件/security/selinux/hooks.c. 这具有类似的功能selinux_parse_skb_ipv4, selinux_socket_create, selinux_socket_bind, etc

我的问题是:

  1. 有人可以帮我解决第二个问题吗?要么通过实际回答该问题,要么在这里回答。
  2. SELinux 是否以任何其他方式影响网络堆栈?
  3. 使用上面列出的功能,SELinux 是否用于创建“安全套接字”的抽象概念?就像Windows API 提供函数调用来创建“安全套接字”一样。
1个回答

可以控制访问本地网络资产(例如网络端口)的本地进程的访问。通过将标签与端口对象和用户标识相关联,组标识与进程相关联(甚至是单个进程,允许您指定与特定标签相关联的实体是否以及如何对与特定标签相关联的实体进行操作或交互。这通常非常可靠。使用将套接字绑定到临时端口时不强制执行访问控制的例外。

或者,secmark 允许人们使用 netfilter 安全表在“非”本地资产进出时将标签与它们相关联。所以标签只适用于系统内部。(例如,一个未标记的数据包,使用 netfilter 与一个标签相关联,然后您可以指定与特定标签关联的其他本地实体如何对标记的数据包进行操作的规则)。这是使用 netfilter 的本地解决方案。

当数据包通过网络时,真正将标签与数据包相关联可以通过 netlabel 或 ipsec 完成。这用于在“受信任的”网络上强制执行机密性。我认为 Ipsec 是首选,而不是 netlabel(多级安全性)。

SELinux 通常不是对网络实施控制的最佳工具。其他技术通常是更好的解决方案。除非您想在受信任的网络上强制执行机密性。

通常的想法是,SELinux 允许您将安全标签与许多实体相关联,范围从用户的单个用户组,甚至单个进程到本地和非本地资产,例如文件和网络节点。

我知道这并不能回答这个问题,而且我的信息并不完全准确,当然也不全面,但确实是这样。