创新实训(6)- 沙箱部署

沙箱

评测沙箱(Sandbox)的基本原理是通过隔离和控制程序运行环境来确保系统的安全性和稳定性。具体来说,评测沙箱的基本原理包括以下几个方面:

隔离:沙箱会在一个独立的环境中运行待评测的程序,确保该程序无法直接影响到主操作系统或其他应用程序。这通常通过虚拟化技术或容器技术来实现。
权限控制:沙箱会严格控制程序的权限,只授予最低限度必要的权限。这包括文件系统访问权限、网络访问权限、系统调用权限等。
资源限制:沙箱会对程序的资源使用进行限制,如CPU、内存、磁盘空间和网络带宽等。这可以防止程序消耗过多资源,影响系统的其他部分。
监控和审计:沙箱会对程序的行为进行实时监控和记录。一旦检测到异常行为或潜在的安全威胁,沙箱可以立即采取措施,如终止程序运行或隔离进一步的操作。
回滚和恢复:如果程序在沙箱中运行时发生错误或执行了有害操作,沙箱可以快速回滚到某个已知的安全状态,从而避免对系统造成持久性损害。
环境模拟:为了更准确地评估程序的行为,沙箱可以模拟特定的操作系统、硬件配置或网络环境。这有助于发现程序在不同环境下的潜在问题。
通过上述机制,评测沙箱能够在一个受控且安全的环境中运行和测试软件,确保其行为符合预期并且不会对系统造成危害。这在软件开发、恶意软件分析、网络安全等领域具有广泛应用。

评测沙箱(Evaluation Sandbox)通过多种技术手段实现隔离,确保被评测代码在运行时不会对系统和其他程序造成不良影响。以下是一些常见的隔离方法:

  1. 进程隔离
    沙箱将被评测代码运行在独立的操作系统进程中。操作系统通过进程隔离技术(如内存保护、文件系统权限)确保一个进程无法直接访问或修改其他进程的资源。

  2. 虚拟化技术
    虚拟化技术如虚拟机(Virtual Machine, VM)和容器(如Docker)提供了更高级别的隔离。每个沙箱运行在一个虚拟机或容器中,虚拟化层确保沙箱内部的代码无法直接影响宿主操作系统。

  3. 网络隔离
    沙箱通常会限制网络访问,防止被评测代码与外界通信。这可以通过配置防火墙规则、使用虚拟网络设备等手段实现。

  4. 文件系统隔离
    沙箱可以使用虚拟文件系统(如chroot、overlayfs)隔离文件系统,确保被评测代码只能访问特定的文件和目录,防止其修改系统文件或访问敏感数据。

  5. 权限控制
    通过运行被评测代码的进程使用最低权限的用户(如Linux上的nobody用户),可以减少代码对系统的潜在危害。此外,可以使用SELinux、AppArmor等安全模块进一步细化权限控制。

  6. 资源限制
    为了防止被评测代码消耗过多的系统资源,沙箱系统通常会设置资源限制(如CPU时间、内存使用、磁盘空间等)。这可以通过操作系统的资源控制机制(如Linux的cgroups)实现。

  7. 系统调用过滤
    使用系统调用过滤(如Linux的seccomp)可以限制被评测代码能够执行的系统调用类型,从而减少其对系统的潜在攻击面。

  8. 监控与审计
    沙箱系统通常会对被评测代码的行为进行严格监控和审计,记录其系统调用、文件访问、网络活动等操作,方便后续分析和安全审查。

综合运用以上技术手段,评测沙箱能够有效隔离被评测代码,确保其在受控环境中运行,不会对系统的安全和稳定性造成威胁。

参考了这篇文章

测评器运行时,不可避免地会需要涉及到运行选手程序的操作。但直接运行是十分危险的,因为选手有可能会提交恶意代码。
所以,本系统自己实现了一个基于 seccomp 和 ptrace 技术的沙箱,能够运行选手程序并在该程序做出可疑行为时果断杀死。沙箱位置在 run/run_program。每当测评器想要运行选手程序时,都会交由沙箱代为执行。该程序通过解析命令行参数,设置运行环境和资源限制,安全地执行指定的程序,并记录和输出其运行结果,可以确保被测程序在安全、受控的环境下运行。


存储程序运行结果,包括:

  • result: 运行结果状态。
  • ust: 用户态运行时间。
  • usm: 内存使用情况。
  • exit_code: 程序退出代码。


存储运行程序的配置参数,包括:

  • 时间、内存、输出、堆栈限制。

  • 输入、输出、错误文件名。

  • 工作路径、程序类型、可读/可写文件列表。

  • 是否允许使用进程、是否启用安全模式、是否显示详细跟踪信息。

  • time_limit, real_time_limit, memory_limit, output_limit, stack_limit 等选项一方面是题目要求,另一方面也对资源占用做了约束,避免程序占用过多的 CPU 资源从而导致错误。

  • 文件方面,通过 extra_readable_files 和 extra_writable_files 选项,指定程序允许读取和写入的文件。

  • safe_mode 选项(默认启用)会检查和限制危险的系统调用,防止程序执行潜在的危险操作(例如修改系统文件、网络操作)。防止了程序随意访问系统中的其他文件。

  • 再通过 ptrace 系统调用,可以监控被执行程序的系统调用,拦截和限制危险的系统调用。例如,可以阻止程序执行 fork、exec 等创建新进程的调用。

  • 再使用 setrlimit 系统调用设置资源限制,例如 CPU 时间、内存、文件大小等。

  • 重定向标准输入输出和错误输出到指定文件,防止程序在标准输出/错误中输出大量数据影响系统。


最后评测端的主函数很简洁:

posted @ 2024-05-31 11:17  wh_ZH  阅读(25)  评论(0编辑  收藏  举报