1、Modern Linux sandboxing technology李强,杨玉彪2023/08/20关于我们l 蚂蚁集团安全专家/研发专家l 安全研究与安全建设l Linux内核/虚拟化/容器/云原生l KCon,HITB,CanSecWest目录l 安全沙箱简介l Linux沙箱机制与方案l gVisor简介l 基于gVisor构建安全沙箱l 未来规划01|安全沙箱简介什么是安全沙箱l 一种安全机制/方案,能够隔离的运行程序l 经常用来限制资源或者运行不受信任的三方程序l 各个操作系统上都有多种实现l 沙箱的含义很多,这里主要讨论进程级安全沙箱l 沙箱是安全领域一个非常古老的话题,一直在不断
2、进化沙箱限制什么?l 进程l 文件系统l 网络访问l 能力(Capabilities)l CPU/Memory/IO/Devicescompromised softwareLateral MovementAttack the hostHostHostservice沙箱的使用场景l 外部用户可控代码l 不信任的第三方程序l 解析类的程序:经常会有漏洞l 恶意软件分析沙箱的需求l 沙箱的使用场合l 物理机l 虚拟机l 容器l 需要能够拦截横向移动l 网络策略l 需要能够阻止纵向移动l 内核隔离l 系统安全策略02|Linux沙箱机制与方案机制:setuidl setuid是文件的一个标志位l 当可
3、执行文件设置该位时,启动的进程会有文件owner的权限l setuid通常的使用场景:非特权用户需要进行特权操作l 沙箱通常都是setuid程序,因为需要为运行的程序设置沙箱环境l BTW:setuid root程序很多时候容器有漏洞,比如pwnkit机制:ptracel ptrace是Linux中的一个系统调用l 进程可以通过ptrace控制其他进程l ptrace可以修改进程的内存以及控制流l ptrace通常用来实现调试器,比如gdbl 沙箱可以使用ptrace来控制需要被沙箱的程序l BTW:strace依赖于ptrace机制:seccompl seccomp是Linux中的有名的安全
4、机制l seccomp用来限制进程能够触发的系统调用l 内核的大部分功能都是通过syscall暴露到用户态l 大多数的进程只需要使用很少的一部分syscalll seccomp可以用来对不需要使用的syscall进行限制l 沙箱可以使用seccomp来限制被沙箱进程的syscalll BTW:seccomp在很多软件中都有使用,比如QEMU机制:capabilitiesl capabilities是Linux中的安全机制,用来将权限进行划分l 传统的权限检查为root或者非root,root具有所有权限l capabilities提供了进程对内核资源的细粒度管控l 典型cap:CAP_SYS_
5、ADMIN,CAP_SYS_MODULE,CAP_NET_ADMINl 沙箱通常都需要限制被沙箱进程的capabilitiesl BTW:Capabilities在容器生态中广泛使用机制:chrootl chroot是Linux中的一个系统调用l chroot用来修改进程的root目录l chroot之后的进程只能看到新的root下的目录以及文件,外部的无法看到l 沙箱经常使用chroot来为被沙箱进程提供一个单独的文件系统视角l BTW:chroot在容器生态中广泛使用机制:namespacel namepsace是Linux中的一个机制l 不同namespace中的进程看到不同的系统资源l
6、 Linux有很多类型的namespace:PID,NET,MOUNT,UTS,USER,IPC等l 沙箱经常使用namepsace来对进程进行隔离l BTW:namespace是容器的基础技术之一机制:cgroupl cgroup是Linux中的一个机制l cgroup用来限制进程能够使用的系统资源l cgroup种类:CPU,Memory,Disk IO,Network,Devices等l 沙箱经常使用cgroup来限制被沙箱进程的资源使用l BTW:cgroup是容器的基础技术之一机制:netfilterl netfilter是内核子系统l netfilter用于网络数据包的过滤与修改l