我正在试验Linux安全模块,尝试制作一个模块。
我对它们应该如何工作的主要知识来源是邮件列表归档和现有LSM的源,以及Linux文档中关于它们的几页。
据我所知,有两种LSMs。
LSM_FLAG_EXCLUSIVE标志。在浏览所有这些LSM的源代码时,我发现非排他性的LSM从不使用安全漏洞。另一方面,排他性的人会大量地利用它们。
例如,请参见AppArmor的LSM定义和给亚玛的那个。
那么,非排他性LSM可以指定blob大小并使用此功能吗?
为了找到答案,我探索了框架的源代码,看看是否在每个LSM挂钩调用之间切换了安全漏洞,我猜这将允许每个LSM只能访问自己的blobs,而不能访问另一个LSM。
然而,我们可以看到在LSM框架中并不是这样的。
如果我的LSM声明了blob大小,那么如果我的内核也启用了SELinux,我可以使用blob吗?SELinux和mine的结构不是会重叠吗?
发布于 2020-08-22 22:43:08
好的,我在LSM框架中找到了相关的代码。
QED:是的,所有LSM都可以使用安全小块,只要模块点燃后使用大小结构作为包含偏移量。
解释
定义LSM时,使用DEFINE_LSM宏,后面跟着各种信息,包括指向struct lsm_blobs_sizes的指针。
在自己的点火过程中,LSM框架(主要是在security/security.c中实现)在几个操作中操作您的结构。
ordered_lsm_init()
`- prepare_lsm(*lsm)
`- lsm_set_blob_sizes(lsm->blobs)
`- lsm_set_blob_size(&needed->lbs_task, &blob_sizes.lbs_task);lsm_set_blob_size负责实际添加到框架的结构实例。
lsm_set_blob_sizes,它有效地将当前准备好的LSM的struct lsm_blob_sizes中的每个大小替换为这个LSM的blob部分所在的偏移量。task_struct )的结构被分配时,框架将分配一个blob,为所有安全模块的blob提供足够的空间,这些blob将使用自己的lsm_blobs_sizes中的偏移量在这个较大的blob中找到它们的位置。安全漏洞的总计大小实际上是要使用init_debug,这里来控制的。
因此,这意味着所有LSM都可以定义安全小块大小。该框架负责它们的分配(和脱钩),不同LSM的blobs可以愉快地共存在内存中。
https://stackoverflow.com/questions/63509033
复制相似问题