小编tki*_*iwi的帖子

是否有基于LLVM的编程语言可以保证沙箱安全的快速二进制文件?

我正在为服务器编写一个计算量很大的代码(在C/C++中).在内部循环中,我需要调用一些外部用户函数,数百万次,因此它们必须快速本地运行,并且它们的调用应该没有比C函数调用更多的开销.每次我收到一个用户函数时,我会自动将它编译成二进制文件,它将由主代码动态链接.

这些函数将仅用作简单的数学内核,例如在peudo-C中:

Function f(double x) ->double {
  return x * x;
}
Run Code Online (Sandbox Code Playgroud)

或者使用数组访问:

Function f(double* ar, int length) ->double {
  double sum = 0;
  for(i = 0 to length) {
    sum = sum + ar[i];
  }
  return sum;
}
Run Code Online (Sandbox Code Playgroud)

或者使用基本的数学库调用:

Function f(double x) ->double {
  return cos(x);
}
Run Code Online (Sandbox Code Playgroud)

但是,它们必须对服务器安全.它们可以暂停(图灵完整性),但如果它们访问不是它们自己的进程内存,如果它们进行系统调用,如果它们导致堆栈溢出,或者为了概括,则外部代码不需要" 能够破解服务器代码 ".

所以我的问题是:如果有一个带有LLVM前端的安全设计语言,(没有指针等,绑定检查数组/堆栈,隔离系统调用),我就会徘徊,没有速度惩罚(参考我可以使用的监督员,垃圾收集者).LLVM不是必需的,但它是首选.

我看过Mozillas"Rust",但它似乎不够安全[rust-dev].

如果没有这样的语言,我现在的后备选项是使用NodeJS沙盒VM.

我相信这种语言,如果简单,是可行的,但它是否存在?

语言的类型无关紧要.一种设计简单且易于证明安全的玩具语言.

编辑:关于系统调用和有害依赖,对于任何语言,它应该很容易用普通的bash隔离它们.只是尝试将生成的.bc链接到没有库.如果失败,则.bc具有依赖关系,因此将其删除.由于LLVM IR在其他方面完全无害,因此该语言唯一应该保证的是内存访问.

security sandbox llvm

6
推荐指数
1
解决办法
506
查看次数

标签 统计

llvm ×1

sandbox ×1

security ×1