1

我正在为孩子、程序员制作交互式学习系统。系统会自动编译并运行孩子们提交的代码(c++)。它将被广泛使用,所以我担心更大的“孩子”会尝试使用诸如system, signal, exec,之fork类的命令来破坏系统。即使格式化硬盘也不会那么可怕,因为我会有自动备份,但我想限制最常见的有害命令。

是否有一些列表,或者更有经验的程序员可以命名这些有害命令?

4

3 回答 3

3

您无法通过检测这些命令来保护您的系统,这是因为在 C++ 中您可以使用直接内存访问(即通过reinterpret_cast)或自修改代码来调用这些命令或与系统交互。相反,编译后,在没有足够访问权限的单独进程中运行程序来造成伤害。

于 2012-05-05T17:15:19.917 回答
0

一些命令是合法的,但可能会被有害地使用(如cpor rm)。

也许您可以将受限外壳设置为用户的登录外壳。然后,您可以拥有一个包含一组可接受命令的目录。

但这并非万无一失:一个有动力的黑客可能会破坏您的系统。

编辑

如果您的意思是系统调用而不是命令,那么有动机的黑客总是可以调用它们(可能使用asm, dlsym, 函数指针,...或跳转到某些内存...)。

于 2012-05-05T17:15:26.783 回答
0

您的建议可以通过编写等效的汇编代码,动态复制被禁止的功能并执行复制等来轻松颠覆。

考虑在系统调用粒度上使用白名单。考虑一个程序纯粹通过系统调用与外界交互。因此,任何不包含系统调用的代码都可以被“信任”。鉴于此,您可以使用动态或静态迂回技术来检测所有系统调用并将您想要允许的系统调用列入白名单。

于 2012-05-05T17:19:50.577 回答