上周学习了一下针对 c 语言的 OJ judger 的实现思路,记录了下:
https://tech.liuchao.me/2016/05/online-judge-sandbox-design-1/
https://tech.liuchao.me/2016/05/online-judge-sandbox-design-2/
当然据我说知,还有人应该在虚拟机的层面上实现过类似的沙箱,难度太大暂时就不考虑了,所以主要针对的还是 *nix 平台上的 c 语言。
不知道各位有没有其它的想法。
上周学习了一下针对 c 语言的 OJ judger 的实现思路,记录了下:
https://tech.liuchao.me/2016/05/online-judge-sandbox-design-1/
https://tech.liuchao.me/2016/05/online-judge-sandbox-design-2/
当然据我说知,还有人应该在虚拟机的层面上实现过类似的沙箱,难度太大暂时就不考虑了,所以主要针对的还是 *nix 平台上的 c 语言。
不知道各位有没有其它的想法。
|
1
您可以参考一下 qduoj , qduoj 可以部署 docker judger ,实现沙箱功能
|
|
2
月经贴.
不过还是要安利一下我写的 OJ: https://github.com/zjhzxhz/voj 顺便给一下知乎上的讨论: https://www.zhihu.com/question/20343652 |
|
3
@zjhzxhz
知乎上的讨论我早就看过了,他们也很少提到基于 seccomp 实现的 judgerjudger 。 docker 和 ptrace 不是不可以,但是我觉得对待放到生产环境的东西应该更严肃点。 |
|
zjhzxhzMay 7, 2016
4
艾玛~ 原谅我看错题了~
|
|
7
看起来应该可以用 LD_PRELOAD 法做一个 wrapper 预先缓存需要的 fd, 然后上 seccomp strict. 这等同于弱化的 OpenBSD pledge / tame syscall.
不过从 linux 糟糕的安全记录来看, 通过某一个 syscall 还是有被打穿的可能性, 相对于 solaris 来说差太远而且看不到前景. |
|
9
|
|
10
|
|
11
@virusdefender 你实现里的 open 看起来还是能绕过. 开了 mmap 之后 write 也等于白限制了. 再靠 namespace 限制特殊文件的读取之后, 虽然看起来没有直接隐患, 但这种东拼西凑的方法还是逃不出不优雅的结论.
|
|
virusdefenderMay 7, 2016
12
@fcicq 十分感谢。但是有两点不是很清楚,麻烦指教一下
1. open 绕过是什么意思,里面并没有限制 open ,可以随便的 open 和 read ,主要限制 write 。 2. mmap 写文件第一次听说,根据 https://gist.github.com/sanmarcos/991042 的 demo , write 和 msync 系统调用至少是需要的, write 第一个参数是文件 fd ,是大于 2 的,可以被限制的。不知道"开了 mmap 之后 write 也等于白限制了"是怎么回事。能不能给一个 poc ? 再次表示感谢。 |
|
breeswishMay 7, 2016
13
Linux: containers
Windows: FS ACL + Restricted User |
|
helihuoMay 7, 2016
14
天啊,大咕咕鸡也编程,亚克西
|
|
15
@virusdefender (1) 可以限制但没有做, 但做路径限制的方法不漂亮. (2) 能读写 /dev/mem 的话一切不都完了? 其实 munmap 就能起到 write 的作用.
随手一个程序, strace 结果, 你觉得写入成功了没有? open("FILE", O_RDWR) = 3 mmap(NULL, 256, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0) = 0x7ffa18a1f000 close(3) = 0 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 5), ...}) = 0 brk(NULL) = 0x2545000 brk(0x2566000) = 0x2566000 munmap(0x7ffa18a1f000, 256) = 0 |
|
16
|
|
minshengMay 8, 2016 via iPhone
17
为什么 OJ judger 总让我想起 PDF format
|
|
18
好像最近看到好几篇 OJ 的文章,贴一下我两年前的文章 (已烂尾) http://www.devinprogress.org/tags/PTRACE/
这是在 seccomp 还没有 BPF 的时候写的。 ptrace 作为调试器的基础,功能还是是很强大的。 对于 OJ 来说,大部分程序还是以 CPU 计算为主,较少使用系统调用, ptrace 的性能损失估计不会很多。 实在不行我们还可以堆硬件呀(雾 搭配好 chroot 和 setuid 我觉得应该差不多了。 |
|
19
@RecursiveG 感谢,一会去研究研究前辈的文章。
|
|
virusdefenderMay 8, 2016 via Android
20
@fcicq 感谢。我晚上仔细看下。有问题再问。
|
|
wodesuckMay 8, 2016 via Android
21
docker-seccomp 有研究过的吗,有什么优缺点
|
|
23
@RecursiveG
六篇文章全部过了一遍,之前遇到了一些细节没有深探究竟,文章里也提到了,非常赞! |