Xz:你能找出禁用 Linux 内锁的单个字符吗?
Xz: Can you spot the single character that disabled Linux landlock?

原始链接: https://git.tukaani.org/?p=xz.git;a=blobdiff;f=CMakeLists.txt;h=d2b1af7ab0ab759b6805ced3dff2555e2a4b3f8e;hp=76700591059711e3a4da5b45cf58474dac4e12a7;hb=328c52da8a2bbb81307644efdb58db2c422d9ba7;hpb=eb8ad59e9bab32a8d655796afd39597ea6dcc64d

本文介绍了在某些系统上通过 Landlock 方法使用沙盒。 如果 SANDBOX_FOUND 和 ENABLE_SANDBOX 都不匹配“ON”或“landlock”,它将检查 Linux 的 landlock.h 头文件。 如果找到,它将编译定义设置为“HAVE_LINUX_LANDLOCK_H”,并且如果 Landlock 所需的系统调用也存在,则认为它是兼容的。 调用 my_sandbox 函数时,提供的代码会初始化并应用 Landlock 限制。 但是,只有沙箱的这种特定实现(使用 Landlock)与脚本中提到的其他方法不兼容。

作者建议在关键项目中标准化依赖管理原语,以减少对复杂且可能不安全的黑客攻击的需求。 他们讨论了理解常见编译功能检查并考虑为构建系统提供必要信息的替代方法的重要性。 由标头中的拼写错误或非英文字符引起的意外编译错误用于说明此类漏洞是如何运作的,强调了基于编译失败假设功能不存在的危险。 作者还分享了 Python 中制表符与空格问题以及各种编程语言中混合空格使用的经验。 他们最后提倡改进工具和测试策略,以尽量减少对手动代码检查的依赖和潜在的安全风险。
相关文章

原文

 

 # Sandboxing: Landlock

 if(NOT SANDBOX_FOUND AND ENABLE_SANDBOX MATCHES "^ON$|^landlock$")

-    check_include_file(linux/landlock.h HAVE_LINUX_LANDLOCK_H)

+    # A compile check is done here because some systems have

+    # linux/landlock.h, but do not have the syscalls defined

+    # in order to actually use Linux Landlock.

+    check_c_source_compiles("

+        #include <linux/landlock.h>

+        #include <sys/syscall.h>

+        #include <sys/prctl.h>

+.

+        void my_sandbox(void)

+        {

+            (void)prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);

+            (void)SYS_landlock_create_ruleset;

+            (void)SYS_landlock_restrict_self;

+            (void)LANDLOCK_CREATE_RULESET_VERSION;

+            return;

+        }

+

+        int main(void) { return 0; }

+        "

+    HAVE_LINUX_LANDLOCK)

 

-    if(HAVE_LINUX_LANDLOCK_H)

-        set(SANDBOX_COMPILE_DEFINITION "HAVE_LINUX_LANDLOCK_H")

+    if(HAVE_LINUX_LANDLOCK)

+        set(SANDBOX_COMPILE_DEFINITION "HAVE_LINUX_LANDLOCK")

         set(SANDBOX_FOUND ON)

 

         # Of our three sandbox methods, only Landlock is incompatible

联系我们 contact @ memedata.com