Project_LemonLime
Project_LemonLime copied to clipboard
[BUG] 评测机可能被恶意关机
当一份代码中包含关机命令时,评测机会关机,而不会做任何保护措施。
复现错误的办法:新建一个选手,题目代码(C++)中包含 system("shutdown -p");
。
希望能建立基本隔离区,而系统不被关机。
- Version: 0.2.10
- Windows 10
这对于评测机真的很危险,希望能尽快修复。
有一个临时的解决办法 放在sandboxie里运行
是不是可以加一个只要见到 system 函数就直接拒绝评测的功能
#define system(...) assert(0)
#define system(....) xxx
有无穷多种方式绕过,你甚至不如在你编译器的头文件里把system函数定义删了:P
#define system(....) xxx
有无穷多种方式绕过,你甚至不如在你编译器的头文件里把system函数定义删了:P
主要是 system 可能会有一些其他用途,直接删了可能会导致大量软件安装失败。
可以在评测的时候将代码复制到 tmp 目录的时候在每个 #include
下方加上一行 #define system(...) assert(0)
,在下一个 #include
上方加上一行 #undef system
。
不过这只能解决 C++ 的问题,要解决所有问题,建议运行时创建一个 sandbox(包括 NOIP2020 中出现的修改 data.in 骗过 SPJ 的问题)。
讲道理这个程序一般就是线下使用吧,出了问题直接找搞事情的人的麻烦就行吧🤔 如果说有必要防御system的话,那岂不是还有很多也需要防御的(比如调用系统api关机、删文件等等),必须得上沙盒,感觉有点脱离程序本身的用途了(毕竟这不是线上评测机实现)
https://github.com/Project-LemonLime/Project_LemonLime/issues/33#issuecomment-640172032 ((((((((((((((((((((((( ~~我个人意见是线下解决~~
windows沙盒上了。 因为权限问题linux和macos下不需要防范此类攻击。