Hacker News 中文摘要

RSS订阅

Linux沙盒与Fil-C -- Linux Sandboxes and Fil-C

文章摘要

内存安全和沙箱是独立的概念:内存安全程序可能未受沙箱保护(如可随意读写文件的Java程序),而不安全程序(如汇编编写)通过沙箱限制系统调用也能降低风险。两者互补但不等同。

文章总结

标题:Linux沙箱与Fil-C的结合应用

内存安全与沙箱技术是两个独立的安全概念。它们可以正交存在:程序可能具备内存安全但无沙箱保护,或拥有沙箱保护但存在内存安全隐患。

  • 内存安全但无沙箱的案例:纯Java程序允许用户指定文件名进行文件读写。即使保证内存安全,该程序仍可能被利用覆盖用户权限内的任意文件。更危险的是,若程序本身没有文件操作代码但缺乏沙箱限制,一旦内存安全机制(如Java实现)存在漏洞,攻击者可能通过异常状态执行代码实现文件篡改。

  • 沙箱保护但内存不安全的案例:汇编语言程序启动时即请求OS剥夺除计算外的所有权限。即使存在内存安全漏洞,攻击者也无法绕过沙箱实施文件操作。

实际应用中,沙箱设计存在固有缺陷。典型沙箱允许程序与高权限代理进程通信,攻击者可能先利用内存漏洞操控沙箱进程发送恶意消息,再通过代理进程突破防线。

最佳防御方案是同时部署沙箱和内存安全机制。本文阐述如何通过移植OpenSSH基于seccomp的Linux沙箱代码,实现Fil-C内存安全与沙箱技术的结合。

技术背景

Fil-C是C/C++的内存安全实现,其运行时系统足够健壮,可支持init和udevd等底层组件。OpenSSH等程序已在Fil-C环境中运行,其中包括使用seccomp-BPF沙箱的案例。

Linux为OpenSSH提供的沙箱工具包括: - chroot限制文件系统视图 - 使用无特权的sshd用户/组运行进程 - setrlimit限制文件操作和进程创建 - seccomp-BPF系统调用白名单机制(非法调用触发SIGSYS

Fil-C对chroot和用户组切换的支持开箱即用,但setrlimit和seccomp-BPF需要特殊处理,因其涉及Fil-C运行时的线程管理和内存分配。

关键技术实现

线程控制机制

Fil-C运行时依赖后台线程进行垃圾回收,这些线程会动态启停。为解决线程创建与沙箱规则(禁止新建进程)的冲突,新增API: c void zlock_runtime_threads(void); 该函数强制运行时预先创建所需线程并禁止后续动态调整,在OpenSSH的ssh_sandbox_child函数中优先调用。

seccomp过滤器调整

  • 违规处理改为SECCOMP_RET_KILL_PROCESS以确保终止所有线程
  • 允许mmap使用MAP_NORESERVE标志(Fil-C分配器所需)
  • 允许无害的sched_yield系统调用(用于锁实现)

prctl系统调用的增强实现

Fil-C运行时通过线程握手机制确保PR_SET_NO_NEW_PRIVSPR_SET_SECCOMP作用于所有线程: c PAS_API void filc_runtime_threads_handshake(void (*callback)(void* arg), void* arg); 同时禁止在多用户线程环境下执行这些操作,避免权限设置歧义。

结论

最高等级的安全防护需要内存安全与沙箱技术的协同。本文展示了如何在Fil-C环境中有效运用Linux沙箱技术,既保持原有防护强度,又不损害Fil-C的内存安全特性。

评论总结

评论总结:

  1. 对MicroVMs和沙箱技术的兴趣

    • 观点:关注MicroVMs的普及和沙箱技术在内存安全语言中的应用。
    • 引用:
      • "MicroVMs seem to be getting more popular."(hurturue)
      • "I'd like to see more use of sandboxing in memory-safe language programs."(loeg)
  2. 对内存安全工具的期待与担忧

    • 观点:希望项目发展,但担心其实际应用中的风险,尤其是对系统底层(如ld.so)的修改可能引发安全问题。
    • 引用:
      • "I hope this project gets more traction... without having to install a potentially workflow breaking replacement."(razighter777)
      • "The custom modifications to ld.so likely don't account for this yet?"(jagrsw)
  3. 替代方案建议

    • 观点:提出其他技术路径(如C→WASM→C编译或完整虚拟机)作为沙箱化的解决方案。
    • 引用:
      • "C -> WASM -> C compilation... sandboxing memory access like WASM."(pornel)
      • "Which requirements does a full blown virtual machine not meet?"(fragmede)
  4. 对技术可行性的审慎态度

    • 观点:认为当前工具(如Fil-C)尚不成熟,需更多实际测试和专家验证。
    • 引用:
      • "These are still teething problems... using it for real-world infrastructures might be somewhat risky."(jagrsw)
      • "Test your codebase with it... could uncover some interesting problems."(jagrsw)

总结呈现了技术探索中的乐观期待与风险担忧,并提及了不同技术路线的可能性。